ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlZjA0OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC0wLDAgKzEsMTUwNSBAQAorCisJCUFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZSAtIERyaXZlcgorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSAgICBDb25maWd1cmF0aW9uIGd1aWRlCisKKworS2VybmVsIENvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT09PT09PT09CisKK1RvIGVuYWJsZSBBTFNBIHN1cHBvcnQgeW91IG5lZWQgYXQgbGVhc3QgdG8gYnVpbGQgdGhlIGtlcm5lbCB3aXRoCitwcmltYXJ5IHNvdW5kIGNhcmQgc3VwcG9ydCAoQ09ORklHX1NPVU5EKS4gIFNpbmNlIEFMU0EgY2FuIGVtdWxhdGUgT1NTLAoreW91IGRvbid0IGhhdmUgdG8gY2hvb3NlIGFueSBvZiB0aGUgT1NTIG1vZHVsZXMuCisKK0VuYWJsZSAiT1NTIEFQSSBlbXVsYXRpb24iIChDT05GSUdfU05EX09TU0VNVUwpIGFuZCBib3RoIE9TUyBtaXhlciBhbmQKK1BDTSBzdXBwb3J0cyBpZiB5b3Ugd2FudCB0byBydW4gT1NTIGFwcGxpY2F0aW9ucyB3aXRoIEFMU0EuCisKK0lmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIFdhdmVUYWJsZSBmdW5jdGlvbmFsaXR5IG9uIGNhcmRzIHN1Y2ggYXMKK1NCIExpdmUhIHRoZW4geW91IG5lZWQgdG8gZW5hYmxlICJTZXF1ZW5jZXIgc3VwcG9ydCIKKyhDT05GSUdfU05EX1NFUVVFTkNFUikuCisKK1RvIG1ha2UgQUxTQSBkZWJ1ZyBtZXNzYWdlcyBtb3JlIHZlcmJvc2UsIGVuYWJsZSB0aGUgIlZlcmJvc2UgcHJpbnRrIgorYW5kICJEZWJ1ZyIgb3B0aW9ucy4gIFRvIGNoZWNrIGZvciBtZW1vcnkgbGVha3MsIHR1cm4gb24gIkRlYnVnIG1lbW9yeSIKK3Rvby4gICJEZWJ1ZyBkZXRlY3Rpb24iIHdpbGwgYWRkIGNoZWNrcyBmb3IgdGhlIGRldGVjdGlvbiBvZiBjYXJkcy4KKworUGxlYXNlIG5vdGUgdGhhdCBhbGwgdGhlIEFMU0EgSVNBIGRyaXZlcnMgc3VwcG9ydCB0aGUgTGludXggaXNhcG5wIEFQSQorKGlmIHRoZSBjYXJkIHN1cHBvcnRzIElTQSBQblApLiAgWW91IGRvbid0IG5lZWQgdG8gY29uZmlndXJlIHRoZSBjYXJkcwordXNpbmcgaXNhcG5wdG9vbHMuCisKKworQ3JlYXRpbmcgQUxTQSBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkZXBlbmRzIG9uIHlvdXIgZGlzdHJpYnV0aW9uLCBidXQgbm9ybWFsbHkgeW91IHVzZSB0aGUgL2Rldi9NQUtFREVWCitzY3JpcHQgdG8gY3JlYXRlIHRoZSBuZWNlc3NhcnkgZGV2aWNlIG5vZGVzLiAgT24gc29tZSBzeXN0ZW1zIHlvdSB1c2UgYQorc2NyaXB0IG5hbWVkICdzbmRkZXZpY2VzJy4KKworCitNb2R1bGUgcGFyYW1ldGVycworPT09PT09PT09PT09PT09PT0KKworVGhlIHVzZXIgY2FuIGxvYWQgbW9kdWxlcyB3aXRoIG9wdGlvbnMuIElmIHRoZSBtb2R1bGUgc3VwcG9ydHMgbW9yZSB0aGFuCitvbmUgY2FyZCBhbmQgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBjYXJkIG9mIHRoZSBzYW1lIHR5cGUgdGhlbiB5b3UgY2FuCitzcGVjaWZ5IG11bHRpcGxlIHZhbHVlcyBmb3IgdGhlIG9wdGlvbiBzZXBhcmF0ZWQgYnkgY29tbWFzLgorCitQcmlvciB0byB2ZXJzaW9uIDAuOS4wcmM0IG9wdGlvbnMgaGFkIGEgJ3NuZF8nIHByZWZpeC4gVGhpcyB3YXMgcmVtb3ZlZC4KKworICBNb2R1bGUgc25kCisgIC0tLS0tLS0tLS0KKworICAgIFRoZSBjb3JlIEFMU0EgbW9kdWxlLiAgSXQgaXMgdXNlZCBieSBhbGwgQUxTQSBjYXJkIGRyaXZlcnMuCisgICAgSXQgdGFrZXMgdGhlIGZvbGxvd2luZyBvcHRpb25zIHdoaWNoIGhhdmUgZ2xvYmFsIGVmZmVjdHMuCisKKyAgICBtYWpvcgktIG1ham9yIG51bWJlciBmb3Igc291bmQgZHJpdmVyCisJCS0gRGVmYXVsdDogMTE2CisgICAgY2FyZHNfbGltaXQKKwkJLSBsaW1pdGluZyBjYXJkIGluZGV4IGZvciBhdXRvLWxvYWRpbmcgKDEtOCkKKwkJLSBEZWZhdWx0OiAxCisJCS0gRm9yIGF1dG8tbG9hZGluZyBtb3JlIHRoYW4gb25lIGNhcmQsIHNwZWNpZnkgdGhpcworCQkgIG9wdGlvbiB0b2dldGhlciB3aXRoIHNuZC1jYXJkLVggYWxpYXNlcy4KKyAgICBkZXZpY2VfbW9kZQorCQktIHBlcm1pc3Npb24gbWFzayBmb3IgZHluYW1pYyBzb3VuZCBkZXZpY2UgZmlsZXN5c3RlbQorCQktIFRoaXMgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBERVZGUyBpcyBlbmFibGVkCisJCS0gRGVmYXVsdDogMDY2NgorCQktIEUuZy46IGRldmljZV9tb2RlPTA2NjAKKworICAKKyAgTW9kdWxlIHNuZC1wY20tb3NzCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIFBDTSBPU1MgZW11bGF0aW9uIG1vZHVsZS4KKyAgICBUaGlzIG1vZHVsZSB0YWtlcyBvcHRpb25zIHdoaWNoIGNoYW5nZSB0aGUgbWFwcGluZyBvZiBkZXZpY2VzLgorCisgICAgZHNwX21hcAktIFBDTSBkZXZpY2UgbnVtYmVyIG1hcHMgYXNzaWduZWQgdG8gdGhlIDFzdCBPU1MgZGV2aWNlLgorCQktIERlZmF1bHQ6IDAKKyAgICBhZHNwX21hcAktIFBDTSBkZXZpY2UgbnVtYmVyIG1hcHMgYXNzaWduZWQgdG8gdGhlIDJzdCBPU1MgZGV2aWNlLgorCQktIERlZmF1bHQ6IDEKKyAgICBub25ibG9ja19vcGVuCisJCS0gRG9uJ3QgYmxvY2sgb3BlbmluZyBidXN5IFBDTSBkZXZpY2VzLgorCisgICAgRm9yIGV4YW1wbGUsIHdoZW4gZHNwX21hcD0yLCAvZGV2L2RzcCB3aWxsIGJlIG1hcHBlZCB0byBQQ00gIzIgb2YKKyAgICB0aGUgY2FyZCAjMC4gIFNpbWlsYXJseSwgd2hlbiBhZHNwX21hcD0wLCAvZGV2L2Fkc3Agd2lsbCBiZSBtYXBwZWQKKyAgICB0byBQQ00gIzAgb2YgdGhlIGNhcmQgIzAuCisgICAgRm9yIGNoYW5naW5nIHRoZSBzZWNvbmQgb3IgbGF0ZXIgY2FyZCwgc3BlY2lmeSB0aGUgb3B0aW9uIHdpdGgKKyAgICBjb21tYXMsIHN1Y2ggbGlrZSAiZHNwX21hcD0wLDEiLgorCisgICAgbm9uYmxvY2tfb3BlbiBvcHRpb24gaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBQQ00KKyAgICByZWdhcmRpbmcgb3BlbmluZyB0aGUgZGV2aWNlLiAgV2hlbiB0aGlzIG9wdGlvbiBpcyBub24temVybywKKyAgICBvcGVuaW5nIGEgYnVzeSBPU1MgUENNIGRldmljZSB3b24ndCBiZSBibG9ja2VkIGJ1dCByZXR1cm4KKyAgICBpbW1lZGlhdGVseSB3aXRoIEVBR0FJTiAoanVzdCBsaWtlIE9fTk9OQkxPQ0sgZmxhZykuCisgICAgCisgIE1vZHVsZSBzbmQtcmF3bWlkaQorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgbW9kdWxlIHRha2VzIG9wdGlvbnMgd2hpY2ggY2hhbmdlIHRoZSBtYXBwaW5nIG9mIGRldmljZXMuCisgICAgc2ltaWxhciB0byB0aG9zZSBvZiB0aGUgc25kLXBjbS1vc3MgbW9kdWxlLgorCisgICAgbWlkaV9tYXAJLSBNSURJIGRldmljZSBudW1iZXIgbWFwcyBhc3NpZ25lZCB0byB0aGUgMXN0IE9TUyBkZXZpY2UuCisJCS0gRGVmYXVsdDogMAorICAgIGFtaWRpX21hcAktIE1JREkgZGV2aWNlIG51bWJlciBtYXBzIGFzc2lnbmVkIHRvIHRoZSAyc3QgT1NTIGRldmljZS4KKwkJLSBEZWZhdWx0OiAxCisKKyAgQ29tbW9uIHBhcmFtZXRlcnMgZm9yIHRvcCBzb3VuZCBjYXJkIG1vZHVsZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEVhY2ggb2YgdG9wIGxldmVsIHNvdW5kIGNhcmQgbW9kdWxlIHRha2VzIHRoZSBmb2xsb3dpbmcgb3B0aW9ucy4KKworICAgIGluZGV4CS0gaW5kZXggKHNsb3QgIykgb2Ygc291bmQgY2FyZAorCQktIFZhbHVlczogMCB0aHJvdWdoIDcgb3IgbmVnYXRpdmUKKwkJLSBJZiBub25uZWdhdGl2ZSwgYXNzaWduIHRoYXQgaW5kZXggbnVtYmVyCisgICAgICAgICAgICAgICAgLSBpZiBuZWdhdGl2ZSwgaW50ZXJwcmV0IGFzIGEgYml0bWFzayBvZiBwZXJtaXNzaWJsZQorCQkgIGluZGljZXM7IHRoZSBmaXJzdCBmcmVlIHBlcm1pdHRlZCBpbmRleCBpcyBhc3NpZ25lZAorCQktIERlZmF1bHQ6IC0xCisgICAgaWQJCS0gY2FyZCBJRCAoaWRlbnRpZmllciBvciBuYW1lKQorCQktIENhbiBiZSB1cCB0byAxNSBjaGFyYWN0ZXJzIGxvbmcKKwkJLSBEZWZhdWx0OiB0aGUgY2FyZCB0eXBlCisJCS0gQSBkaXJlY3RvcnkgYnkgdGhpcyBuYW1lIGlzIGNyZWF0ZWQgdW5kZXIgL3Byb2MvYXNvdW5kLworCQkgIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhcmQKKwkJLSBUaGlzIElEIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGluZGV4IG51bWJlciBpbgorCQkgIGlkZW50aWZ5aW5nIHRoZSBjYXJkCisgICAgZW5hYmxlICAJLSBlbmFibGUgY2FyZAorCQktIERlZmF1bHQ6IGVuYWJsZWQsIGZvciBQQ0kgYW5kIElTQSBQblAgY2FyZHMKKworICBNb2R1bGUgc25kLWFkMTgxNmEKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEFuYWxvZyBEZXZpY2VzIEFEMTgxNkEvQUQxODE1IElTQSBjaGlwcy4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIEFEMTgxNkEgY2hpcCAoUG5QIHNldHVwKQorICAgIG1wdV9wb3J0CS0gcG9ydCAjIGZvciBNUFUtNDAxIFVBUlQgKFBuUCBzZXR1cCkKKyAgICBmbV9wb3J0CS0gcG9ydCAjIGZvciBPUEwzIChQblAgc2V0dXApCisgICAgaXJxCQktIElSUSAjIGZvciBBRDE4MTZBIGNoaXAgKFBuUCBzZXR1cCkKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwKQorICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQUQxODE2QSBjaGlwIChQblAgc2V0dXApCisgICAgZG1hMgktIHNlY29uZCBETUEgIyBmb3IgQUQxODE2QSBjaGlwIChQblAgc2V0dXApCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMsIGF1dG9wcm9iZSBhbmQgUG5QLgorICAgIAorICBNb2R1bGUgc25kLWFkMTg0OAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBBRDE4NDgvQUQxODQ3L0NTNDI0OCBJU0EgY2hpcHMuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBBRDE4NDggY2hpcAorICAgIGlycQkJLSBJUlEgIyBmb3IgQUQxODQ4ICBjaGlwCisgICAgZG1hMQktIERNQSAjIGZvciBBRDE4NDggY2hpcCAoMCwxLDMpCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYXV0b3Byb2JlCisgICAgdGh1cyBtYWluIHBvcnQgbXVzdCBiZSBzcGVjaWZpZWQhISEgT3RoZXIgcG9ydHMgYXJlIG9wdGlvbmFsLgorICAgIAorICBNb2R1bGUgc25kLWFsaTU0NTEKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEFMaSBNNTQ1MSBQQ0kgY2hpcC4KKworICAgIHBjbV9jaGFubmVscyAgICAtIE51bWJlciBvZiBoYXJkd2FyZSBjaGFubmVscyBhc3NpZ25lZCBmb3IgUENNCisgICAgc3BkaWYgICAgICAgICAgIC0gU3VwcG9ydCBTUERJRiBJL08KKyAgICAJCSAgICAtIERlZmF1bHQ6IGRpc2FibGVkCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjaGlwcyAobWF4IDgpLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtYWxzMTAwCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEF2YW5jZSBMb2dpYyBBTFMxMDAvQUxTMTIwIElTQSBjaGlwcy4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIEFMUzEwMCAoU0IxNikgY2hpcCAoUG5QIHNldHVwKQorICAgIGlycQkJLSBJUlEgIyBmb3IgQUxTMTAwIChTQjE2KSBjaGlwIChQblAgc2V0dXApCisgICAgZG1hOAktIDgtYml0IERNQSAjIGZvciBBTFMxMDAgKFNCMTYpIGNoaXAgKFBuUCBzZXR1cCkKKyAgICBkbWExNgktIDE2LWJpdCBETUEgIyBmb3IgQUxTMTAwIChTQjE2KSBjaGlwIChQblAgc2V0dXApCisgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwKQorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSAoUG5QIHNldHVwKQorICAgIGZtX3BvcnQJLSBwb3J0ICMgZm9yIE9QTDMgRk0gKFBuUCBzZXR1cCkKKyAgICAKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcywgYXV0b3Byb2JlIGFuZCBQblAuCisKKyAgTW9kdWxlIHNuZC1hbHM0MDAwCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBBdmFuY2UgTG9naWMgQUxTNDAwMCBQQ0kgY2hpcC4KKworICAgIGpveXN0aWNrX3BvcnQgLSBwb3J0ICMgZm9yIGxlZ2FjeSBqb3lzdGljayBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICAwID0gZGlzYWJsZWQgKGRlZmF1bHQpLCAxID0gYXV0by1kZXRlY3QKKyAgICAKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcywgYXV0b3Byb2JlIGFuZCBQblAuCisKKyAgTW9kdWxlIHNuZC1hdGlpeHAKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQVRJIElYUCAxNTAvMjAwLzI1MCBBQzk3IGNvbnRyb2xsZXJzLgorCisgICAgYWM5N19jbG9jawkJLSBBQyc5NyBjbG9jayAoZGVmYWx1dCA9IDQ4MDAwKQorICAgIGFjOTdfcXVpcmsJCS0gQUMnOTcgd29ya2Fyb3VuZCBmb3Igc3RyYW5nZSBoYXJkd2FyZQorCQkJICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVsOHgwIG1vZHVsZSBmb3IgZGV0YWlscy4KKyAgICBzcGRpZl9hY2xpbmsJLSBTL1BESUYgdHJhbnNmZXIgb3ZlciBBQy1saW5rIChkZWZhdWx0ID0gMSkKKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKworICBNb2R1bGUgc25kLWF0aWl4cC1tb2RlbQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBBVEkgSVhQIDE1MC8yMDAvMjUwIEFDOTcgbW9kZW0gY29udHJvbGxlcnMuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICAgIE5vdGU6IFRoZSBkZWZhdWx0IGluZGV4IHZhbHVlIG9mIHRoaXMgbW9kdWxlIGlzIC0yLCBpLmUuIHRoZSBmaXJzdAorICAgICAgICAgIHNsb3QgaXMgZXhjbHVkZWQuCisKKyAgTW9kdWxlIHNuZC1hdTg4MTAsIHNuZC1hdTg4MjAsIHNuZC1hdTg4MzAKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQXVyZWFsIFZvcnRleCwgVm9ydGV4MiBhbmQgQWR2YW50YWdlIGRldmljZS4KKworICAgIHBjaWZpeAktIENvbnRyb2wgUENJIHdvcmthcm91bmRzCisJCSAgMCA9IERpc2FibGUgYWxsIHdvcmthcm91bmRzCisJCSAgMSA9IEZvcmNlIHRoZSBQQ0kgbGF0ZW5jeSBvZiB0aGUgQXVyZWFsIGNhcmQgdG8gMHhmZgorCQkgIDIgPSBGb3JjZSB0aGUgRXh0ZW5kIFBDSSMyIEludGVybmFsIE1hc3RlciBmb3IgRWZmaWNpZW50CisJCSAgICAgIEhhbmRsaW5nIG9mIER1bW15IFJlcXVlc3RzIG9uIHRoZSBWSUEgS1QxMzMgQUdQIEJyaWRnZQorCQkgIDMgPSBGb3JjZSBib3RoIHNldHRpbmdzCisJCSAgMjU1ID0gQXV0b2RldGVjdCB3aGF0IGlzIHJlcXVpcmVkIChkZWZhdWx0KQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgYWxsIEFEQiBQQ00gY2hhbm5lbHMsIGFjOTcgbWl4ZXIsIFNQRElGLCBoYXJkd2FyZQorICAgIEVRLCBtcHU0MDEsIGdhbWVwb3J0LiBBM0QgYW5kIHdhdmV0YWJsZSBzdXBwb3J0IGFyZSBzdGlsbCBpbiBkZXZlbG9wbWVudC4KKyAgICBEZXZlbG9wbWVudCBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyB3b3JrIGlzIGJlaW5nIGNvb3JkaW5hdGVkIGF0CisgICAgaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvb3BlbnZvcnRleC8KKyAgICBTUERJRiBvdXRwdXQgaGFzIGEgY29weSBvZiB0aGUgQUM5NyBjb2RlYyBvdXRwdXQsIHVubGVzcyB5b3UgdXNlIHRoZQorICAgICJzcGRpZiIgcGNtIGRldmljZSwgd2hpY2ggYWxsb3dzIHJhdyBkYXRhIHBhc3N0aHJ1LgorICAgIFRoZSBoYXJkd2FyZSBFUSBoYXJkd2FyZSBhbmQgU1BESUYgaXMgb25seSBwcmVzZW50IGluIHRoZSBWb3J0ZXgyIGFuZCAKKyAgICBBZHZhbnRhZ2UuCisKKyAgICBOb3RlOiBTb21lIEFMU0EgbWl4ZXIgYXBwbGljYWN0aW9ucyBkb24ndCBoYW5kbGUgdGhlIFNQRElGIHNhbXBsZXJhdGUgCisgICAgICAgICAgIGNvbnRyb2wgY29ycmVjdGx5LiBJZiB5b3UgaGF2ZSBwcm9ibGVtcyByZWdhcmRpbmcgdGhpcywgdHJ5CisgICAgICAgICAgIGFub3RoZXIgQUxTQSBjb21wbGlhbnQgbWl4ZXIgKGFsc2FtaXhlciB3b3JrcykuCisKKyAgTW9kdWxlIHNuZC1henQyMzIwCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBBenRlY2ggU3lzdGVtIEFaVDIzMjAgSVNBIGNoaXAgKFBuUCBvbmx5KS4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIEFaVDIzMjAgY2hpcCAoUG5QIHNldHVwKQorICAgIHdzc19wb3J0CS0gcG9ydCAjIGZvciBXU1MgKFBuUCBzZXR1cCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXApCisgICAgZm1fcG9ydAktIEZNIHBvcnQgIyBmb3IgQVpUMjMyMCBjaGlwIChQblAgc2V0dXApCisgICAgaXJxCQktIElSUSAjIGZvciBBWlQyMzIwIChXU1MpIGNoaXAgKFBuUCBzZXR1cCkKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwKQorICAgIGRtYTEJLSAxc3QgRE1BICMgZm9yIEFaVDIzMjAgKFdTUykgY2hpcCAoUG5QIHNldHVwKQorICAgIGRtYTIJLSAybmQgRE1BICMgZm9yIEFaVDIzMjAgKFdTUykgY2hpcCAoUG5QIHNldHVwKQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBQblAgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1henQzMzI4CisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBBenRlY2ggQVpGMzMyOCBQQ0kgY2hpcC4KKworICAgIGpveXN0aWNrCS0gRW5hYmxlIGpveXN0aWNrIChkZWZhdWx0IG9mZikKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgIE1vZHVsZSBzbmQtYnQ4N3gKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciB2aWRlbyBjYXJkcyBiYXNlZCBvbiBCdDg3eCBjaGlwcy4KKworICAgIGRpZ2l0YWxfcmF0ZSAtIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGRpZ2l0YWwgcmF0ZSAoSHopCisgICAgbG9hZF9hbGwJLSBMb2FkIHRoZSBkcml2ZXIgZXZlbiBpZiB0aGUgY2FyZCBtb2RlbCBpc24ndCBrbm93bgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgICBOb3RlOiBUaGUgZGVmYXVsdCBpbmRleCB2YWx1ZSBvZiB0aGlzIG1vZHVsZSBpcyAtMiwgaS5lLiB0aGUgZmlyc3QKKyAgICAgICAgICBzbG90IGlzIGV4Y2x1ZGVkLgorCisgIE1vZHVsZSBzbmQtY2EwMTA2CisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIENyZWF0aXZlIEF1ZGlneSBMUyBhbmQgU0IgTGl2ZSAyNGJpdAorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKworICBNb2R1bGUgc25kLWNtaTgzMzAKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEMtTWVkaWEgQ01JODMzMCBJU0EgY2hpcHMuCisKKyAgICB3c3Nwb3J0CS0gcG9ydCAjIGZvciBDTUk4MzMwIGNoaXAgKFdTUykKKyAgICB3c3NpcnEJLSBJUlEgIyBmb3IgQ01JODMzMCBjaGlwIChXU1MpCisgICAgd3NzZG1hCS0gZmlyc3QgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoV1NTKQorICAgIHNicG9ydAktIHBvcnQgIyBmb3IgQ01JODMzMCBjaGlwIChTQjE2KQorICAgIHNiaXJxCS0gSVJRICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKKyAgICBzYmRtYTgJLSA4Yml0IERNQSAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCisgICAgc2JkbWExNgktIDE2Yml0IERNQSAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorCisgIE1vZHVsZSBzbmQtY21pcGNpCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEMtTWVkaWEgQ01JODMzOCBhbmQgODczOCBQQ0kgc291bmQgY2FyZHMuCisKKyAgICBtcHVfcG9ydAktIDB4MzAwLDB4MzEwLDB4MzIwLDB4MzMwLCAwID0gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICBmbV9wb3J0ICAgICAtIDB4Mzg4IChkZWZhdWx0KSwgMCA9IGRpc2FibGUgKGRlZmF1bHQpCisgICAgc29mdF9hYzMgICAgLSBTb2Z3YXJlLWNvbnZlcnNpb24gb2YgcmF3IFNQRElGIHBhY2tldHMgKG1vZGVsIDAzMyBvbmx5KQorICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgPSAxKQorICAgIGpveXN0aWNrX3BvcnQgLSBKb3lzdGljayBwb3J0IGFkZHJlc3MgKDAgPSBkaXNhYmxlLCAxID0gYXV0by1kZXRlY3QpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjaGlwcyAobWF4IDgpLgorICAgIAorICBNb2R1bGUgc25kLWNzNDIzMQorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBDUzQyMzEgSVNBIGNoaXBzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgQ1M0MjMxIGNoaXAKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChvcHRpb25hbCksIC0xID0gZGlzYWJsZQorICAgIGlycQkJLSBJUlEgIyBmb3IgQ1M0MjMxIGNoaXAKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVAorICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQ1M0MjMxIGNoaXAKKyAgICBkbWEyCS0gc2Vjb25kIERNQSAjIGZvciBDUzQyMzEgY2hpcAorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGF1dG9wcm9iZQorICAgIHRodXMgbWFpbiBwb3J0IG11c3QgYmUgc3BlY2lmaWVkISEhIE90aGVyIHBvcnRzIGFyZSBvcHRpb25hbC4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKyAgICAKKyAgTW9kdWxlIHNuZC1jczQyMzIKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjMyL0NTNDIzMkEgSVNBIGNoaXBzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgQ1M0MjMyIGNoaXAgKFBuUCBzZXR1cCAtIDB4NTM0KQorICAgIGNwb3J0CS0gY29udHJvbCBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDEyMCwweDIxMCwweGYwMCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXAgLSAweDMwMCksIC0xID0gZGlzYWJsZQorICAgIGZtX3BvcnQJLSBGTSBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDM4OCksIC0xID0gZGlzYWJsZQorICAgIGlycQkJLSBJUlEgIyBmb3IgQ1M0MjMyIGNoaXAgKDUsNyw5LDExLDEyLDE1KQorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg5LDExLDEyLDE1KQorICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQ1M0MjMyIGNoaXAgKDAsMSwzKQorICAgIGRtYTIJLSBzZWNvbmQgRE1BICMgZm9yIFlhbWFoYSBDUzQyMzIgY2hpcCAoMCwxLDMpLCAtMSA9IGRpc2FibGUKKyAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGF1dG9wcm9iZQorICAgIHRodXMgbWFpbiBwb3J0IG11c3QgYmUgc3BlY2lmaWVkISEhIE90aGVyIHBvcnRzIGFyZSBvcHRpb25hbC4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKyAgICAKKyAgTW9kdWxlIHNuZC1jczQyMzYKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjM1L0NTNDIzNi9DUzQyMzZCL0NTNDIzN0IvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTNDIzOEIvQ1M0MjM5IElTQSBjaGlwcy4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIENTNDIzNiBjaGlwIChQblAgc2V0dXAgLSAweDUzNCkKKyAgICBjcG9ydAktIGNvbnRyb2wgcG9ydCAjIGZvciBDUzQyMzYgY2hpcCAoUG5QIHNldHVwIC0gMHgxMjAsMHgyMTAsMHhmMDApCisgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwIC0gMHgzMDApLCAtMSA9IGRpc2FibGUKKyAgICBmbV9wb3J0CS0gRk0gcG9ydCAjIGZvciBDUzQyMzYgY2hpcCAoUG5QIHNldHVwIC0gMHgzODgpLCAtMSA9IGRpc2FibGUKKyAgICBpcnEJCS0gSVJRICMgZm9yIENTNDIzNiBjaGlwICg1LDcsOSwxMSwxMiwxNSkKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVCAoOSwxMSwxMiwxNSkKKyAgICBkbWExCS0gZmlyc3QgRE1BICMgZm9yIENTNDIzNiBjaGlwICgwLDEsMykKKyAgICBkbWEyCS0gc2Vjb25kIERNQSAjIGZvciBDUzQyMzYgY2hpcCAoMCwxLDMpLCAtMSA9IGRpc2FibGUKKyAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGF1dG9wcm9iZQorICAgIChpZiBJU0EgUG5QIGlzIG5vdCB1c2VkKSB0aHVzIG1haW4gcG9ydCBhbmQgY29udHJvbCBwb3J0IG11c3QgYmUKKyAgICBzcGVjaWZpZWQhISEgT3RoZXIgcG9ydHMgYXJlIG9wdGlvbmFsLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtY3M0MjgxCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIENpcnJ1cyBMb2dpYyBDUzQyODEgc291bmRjaGlwLgorCisgICAgZHVhbF9jb2RlYwktIFNlY29uZGFyeSBjb2RlYyBJRCAoMCA9IGRpc2FibGUsIGRlZmF1bHQpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICBNb2R1bGUgc25kLWNzNDZ4eAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBQQ0kgc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0NjEwL0NTNDYxMi9DUzQ2MTQvQ1M0NjE1L0NTNDYyMi8KKwkJCQkgICAgICAgQ1M0NjI0L0NTNDYzMC9DUzQyODAgUENJIGNoaXBzLgorCisgICAgZXh0ZXJuYWxfYW1wICAgICAtIEZvcmNlIHRvIGVuYWJsZSBleHRlcm5hbCBhbXBsaWZlci4KKyAgICB0aGlua3BhZCAgICAgICAgIC0gRm9yY2UgdG8gZW5hYmxlIFRoaW5rcGFkJ3MgQ0xLUlVOIGNvbnRyb2wuCisgICAgbW1hcF92YWxpZCAgICAgICAtIFN1cHBvcnQgT1NTIG1tYXAgbW9kZSAoZGVmYXVsdCA9IDApLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICBVc3VhbGx5IGV4dGVybmFsIGFtcCBhbmQgQ0xLUlVOIGNvbnRyb2xzIGFyZSBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5CisgICAgZnJvbSBQQ0kgc3ViIHZlbmRvci9kZXZpY2UgaWRzLiAgSWYgdGhleSBkb24ndCB3b3JrLCBnaXZlIHRoZSBvcHRpb25zCisgICAgYWJvdmUgZXhwbGljaXRseS4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKyAgICAKKyAgTW9kdWxlIHNuZC1kdDAxOXgKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRGlhbW9uZCBUZWNobm9sb2dpZXMgRFQtMDE5WCAvIEF2YW5jZSBMb2dpYyBBTFMtMDA3IChQblAKKyAgICBvbmx5KQorCisgICAgcG9ydAktIFBvcnQgIyAoUG5QIHNldHVwKQorICAgIG1wdV9wb3J0CS0gUG9ydCAjIGZvciBNUFUtNDAxIChQblAgc2V0dXApCisgICAgZm1fcG9ydAktIFBvcnQgIyBmb3IgRk0gT1BMLTMgKFBuUCBzZXR1cCkKKyAgICBpcnEJCS0gSVJRICMgKFBuUCBzZXR1cCkKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgKFBuUCBzZXR1cCkKKyAgICBkbWE4CS0gRE1BICMgKFBuUCBzZXR1cCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiAgVGhpcyBtb2R1bGUgaXMgZW5hYmxlZCBvbmx5IHdpdGgKKyAgICBJU0EgUG5QIHN1cHBvcnQuCisKKyAgTW9kdWxlIHNuZC1kdW1teQorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHRoZSBkdW1teSBzb3VuZCBjYXJkLiBUaGlzICJjYXJkIiBkb2Vzbid0IGRvIGFueSBvdXRwdXQKKyAgICBvciBpbnB1dCwgYnV0IHlvdSBtYXkgdXNlIHRoaXMgbW9kdWxlIGZvciBhbnkgYXBwbGljYXRpb24gd2hpY2gKKyAgICByZXF1aXJlcyBhIHNvdW5kIGNhcmQgKGxpa2UgUmVhbFBsYXllcikuCisKKyAgTW9kdWxlIHNuZC1lbXUxMGsxCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFTVUxMEsxL0VNVTEwazIgYmFzZWQgUENJIHNvdW5kIGNhcmRzLgorCQkJKiBTb3VuZCBCbGFzdGVyIExpdmUhCisJCQkqIFNvdW5kIEJsYXN0ZXIgUENJIDUxMgorCQkJKiBFbXUgQVBTIChwYXJ0aWFsbHkgc3VwcG9ydGVkKQorCQkJKiBTb3VuZCBCbGFzdGVyIEF1ZGlneQorCisgICAgZXh0aW4gICAtIGJpdG1hcCBvZiBhdmFpbGFibGUgZXh0ZXJuYWwgaW5wdXRzIGZvciBGWDgwMTAgKHNlZSBiZWxsb3cpCisgICAgZXh0b3V0ICAtIGJpdG1hcCBvZiBhdmFpbGFibGUgZXh0ZXJuYWwgb3V0cHV0cyBmb3IgRlg4MDEwIChzZWUgYmVsbG93KQorICAgIHNlcV9wb3J0cyAtIGFsbG9jYXRlZCBzZXF1ZW5jZXIgcG9ydHMgKDQgYnkgZGVmYXVsdCkKKyAgICBtYXhfc3ludGhfdm9pY2VzIC0gbGltaXQgb2Ygdm9pY2VzIHVzZWQgZm9yIHdhdmV0YWJsZSAoNjQgYnkgZGVmYXVsdCkKKyAgICBtYXhfYnVmZmVyX3NpemUgIC0gc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2Ygd2F2ZXRhYmxlL3BjbSBidWZmZXJzCisgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGluIE1CIHVuaXQuICBEZWZhdWx0IHZhbHVlIGlzIDEyOC4KKyAgICBlbmFibGVfaXIgLSBlbmFibGUgSVIKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgICBJbnB1dCAmIE91dHB1dCBjb25maWd1cmF0aW9ucyAJCQlbZXh0aW4vZXh0b3V0XQorCSogQ3JlYXRpdmUgQ2FyZCB3by9EaWdpdGFsIG91dAkJCVsweDAwMDMvMHgxZjAzXQorCSogQ3JlYXRpdmUgQ2FyZCB3L0RpZ2l0YWwgb3V0CQkJWzB4MDAwMy8weDFmMGZdCisJKiBDcmVhdGl2ZSBDYXJkIHcvRGlnaXRhbCBDRCBpbgkJCVsweDAwMGYvMHgxZjBmXQorCSogQ3JlYXRpdmUgQ2FyZCB3by9EaWdpdGFsIG91dCArIExpdmVEcml2ZQlbMHgzZmMzLzB4MWZjM10KKwkqIENyZWF0aXZlIENhcmQgdy9EaWdpdGFsIG91dCArIExpdmVEcml2ZQlbMHgzZmMzLzB4MWZjZl0KKwkqIENyZWF0aXZlIENhcmQgdy9EaWdpdGFsIENEIGluICsgTGl2ZURyaXZlCVsweDNmY2YvMHgxZmNmXQorCSogQ3JlYXRpdmUgQ2FyZCB3by9EaWdpdGFsIG91dCArIERpZ2l0YWwgSS9PIDIgIFsweDBmYzMvMHgxZjBmXQorCSogQ3JlYXRpdmUgQ2FyZCB3L0RpZ2l0YWwgb3V0ICsgRGlnaXRhbCBJL08gMglbMHgwZmMzLzB4MWYwZl0KKwkqIENyZWF0aXZlIENhcmQgdy9EaWdpdGFsIENEIGluICsgRGlnaXRhbCBJL08gMglbMHgwZmNmLzB4MWYwZl0KKyAgICAgICAgKiBDcmVhdGl2ZSBDYXJkIDUuMS93IERpZ2l0YWwgb3V0ICsgTGl2ZURyaXZlCVsweDNmYzMvMHgxZmZmXQorCSogQ3JlYXRpdmUgQ2FyZCA1LjEgKGMpIDIwMDMJCQlbMHgzZmMzLzB4N2NmZl0KKyAgICAgICAgKiBDcmVhdGl2ZSBDYXJkIGFsbCBpbnMgYW5kIG91dHMJCVsweDNmZmYvMHg3ZmZmXQorICAgIAorICBNb2R1bGUgc25kLWVtdTEwazF4CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQ3JlYXRpdmUgRW11MTBrMVggKFNCIExpdmUgRGVsbCBPRU0gdmVyc2lvbikKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgIE1vZHVsZSBzbmQtZW5zMTM3MAorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRW5zb25pcSBBdWRpb1BDSSBFUzEzNzAgUENJIHNvdW5kIGNhcmRzLgorCQkJKiBTb3VuZEJsYXN0ZXIgUENJIDY0CisJCQkqIFNvdW5kQmxhc3RlciBQQ0kgMTI4CisKKyAgICBqb3lzdGljawkJLSBFbmFibGUgam95c3RpY2sgKGRlZmF1bHQgb2ZmKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1lbnMxMzcxCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFbnNvbmlxIEF1ZGlvUENJIEVTMTM3MSBQQ0kgc291bmQgY2FyZHMuCisJCQkqIFNvdW5kQmxhc3RlciBQQ0kgNjQKKwkJCSogU291bmRCbGFzdGVyIFBDSSAxMjgKKwkJCSogU291bmRCbGFzdGVyIFZpYnJhIFBDSQorCisgICAgam95c3RpY2tfcG9ydAktIHBvcnQgIyBmb3Igam95c3RpY2sgKDB4MjAwLDB4MjA4LDB4MjEwLDB4MjE4KSwKKwkJCSAgMCA9IGRpc2FibGUgKGRlZmF1bHQpLCAxID0gYXV0by1kZXRlY3QKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisgICAgCisgIE1vZHVsZSBzbmQtZXM5NjgKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBFU1MgRVM5NjggY2hpcCAoUG5QIG9ubHkpLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgRVM5NjggKFNCOCkgY2hpcCAoUG5QIHNldHVwKQorICAgIGlycQkJLSBJUlEgIyBmb3IgRVM5NjggKFNCOCkgY2hpcCAoUG5QIHNldHVwKQorICAgIGRtYTEJLSBETUEgIyBmb3IgRVM5NjggKFNCOCkgY2hpcCAoUG5QIHNldHVwKQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBQblAgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1lczE2ODgKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRVNTIEF1ZGlvRHJpdmUgRVMtMTY4OCBhbmQgRVMtNjg4IHNvdW5kIGNhcmRzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgRVMtMTY4OCBjaGlwICgweDIyMCwweDI0MCwweDI2MCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBwb3J0ICgweDMwMCwweDMxMCwweDMyMCwweDMzMCksIC0xID0gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIEVTLTE2ODggY2hpcCAoNSw3LDksMTApCisgICAgbXB1X2lycQktIElSUSAjIGZvciBNUFUtNDAxIHBvcnQgKDUsNyw5LDEwKQorICAgIGRtYTgJLSBETUEgIyBmb3IgRVMtMTY4OCBjaGlwICgwLDEsMykKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUgKHdpdGhvdXQgTVBVLTQwMSBwb3J0KS4KKworICBNb2R1bGUgc25kLWVzMTh4eAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFU1MgQXVkaW9Ecml2ZSBFUy0xOHh4IHNvdW5kIGNhcmRzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgRVMtMTh4eCBjaGlwICgweDIyMCwweDI0MCwweDI2MCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBwb3J0ICgweDMwMCwweDMxMCwweDMyMCwweDMzMCksIC0xID0gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICBmbV9wb3J0CS0gcG9ydCAjIGZvciBGTSAob3B0aW9uYWwsIG5vdCB1c2VkKQorICAgIGlycQkJLSBJUlEgIyBmb3IgRVMtMTh4eCBjaGlwICg1LDcsOSwxMCkKKyAgICBkbWExCS0gZmlyc3QgRE1BICMgZm9yIEVTLTE4eHggY2hpcCAoMCwxLDMpCisgICAgZG1hMgktIGZpcnN0IERNQSAjIGZvciBFUy0xOHh4IGNoaXAgKDAsMSwzKQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBJU0EgUG5QIGFuZCBhdXRvcHJvYmUgKHdpdGhvdXQgTVBVLTQwMSBwb3J0CisgICAgaWYgbmF0aXZlIElTQSBQblAgcm91dGluZXMgYXJlIG5vdCB1c2VkKS4KKyAgICBXaGVuIGRtYTIgaXMgZXF1YWwgd2l0aCBkbWExLCB0aGUgZHJpdmVyIHdvcmtzIGFzIGhhbGYtZHVwbGV4LgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtZXMxOTM4CisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEVTUyBTb2xvLTEgKEVTMTkzOCxFUzE5NDYpIGNoaXBzLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKworICBNb2R1bGUgc25kLWVzMTk2OAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBFU1MgTWFlc3Ryby0xLzIvMkUgKEVTMTk2OC9FUzE5NzgpIGNoaXBzLgorCisgICAgdG90YWxfYnVmc2l6ZQktIHRvdGFsIGJ1ZmZlciBzaXplIGluIGtCICgxLTQwOTZrQikKKyAgICBwY21fc3Vic3RyZWFtc19wCS0gcGxheWJhY2sgY2hhbm5lbHMgKDEtOCwgZGVmYXVsdD0yKQorICAgIHBjbV9zdWJzdHJlYW1zX2MJLSBjYXB0dXJlIGNoYW5uZWxzICgxLTgsIGRlZmF1bHQ9MCkKKyAgICBjbG9jawkJLSBjbG9jayAoMCA9IGF1dG8tZGV0ZWN0aW9uKQorICAgIHVzZV9wbQkJLSBzdXBwb3J0IHRoZSBwb3dlci1tYW5hZ2VtZW50ICgwID0gb2ZmLCAxID0gb24sCisJCQkgIDIgPSBhdXRvIChkZWZhdWx0KSkKKyAgICBlbmFibGVfbXB1CQktIGVuYWJsZSBNUFU0MDEgKDAgPSBvZmYsIDEgPSBvbiwgMiA9IGF1dG8gKGRlZmF1bHQpKQorICAgIGpveXN0aWNrCQktIGVuYWJsZSBqb3lzdGljayAoZGVmYXVsdCBvZmYpICAgICAgIAorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICBNb2R1bGUgc25kLWZtODAxCisgIC0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRm9ydGVNZWRpYSBGTTgwMSBiYXNlZCBQQ0kgc291bmQgY2FyZHMuCisKKyAgICB0ZWE1NzV4X3R1bmVyICAgICAgIC0gRW5hYmxlIFRFQTU3NXggdHVuZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxID0gTWVkaWFGb3J0ZSAyNTYtUENTCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMiA9IE1lZGlhRm9ydGUgMjU2LVBDUFIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLSAzID0gTWVkaWFGb3J0ZSA2NC1QQ1IgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAtIEhpZ2ggMTYtYml0cyBhcmUgdmlkZW8gKHJhZGlvKSBkZXZpY2UgbnVtYmVyICsgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAtIGV4YW1wbGU6IDB4MTAwMDIgKE1lZGlhRm9ydGUgMjU2LVBDUFIsIGRldmljZSAxKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1ndXNjbGFzc2ljCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBHcmF2aXMgVWx0cmFTb3VuZCBDbGFzc2ljIHNvdW5kIGNhcmQuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBHRjEgY2hpcCAoMHgyMjAsMHgyMzAsMHgyNDAsMHgyNTAsMHgyNjApCisgICAgaXJxCQktIElSUSAjIGZvciBHRjEgY2hpcCAoMyw1LDksMTEsMTIsMTUpCisgICAgZG1hMQktIERNQSAjIGZvciBHRjEgY2hpcCAoMSwzLDUsNiw3KQorICAgIGRtYTIJLSBETUEgIyBmb3IgR0YxIGNoaXAgKDEsMyw1LDYsNywtMT1kaXNhYmxlKQorICAgIGpveXN0aWNrX2RhYyAtIDAgdG8gMzEsICgwLjU5Vi00LjUyViBvciAwLjM4OVYtMi45OFYpCisgICAgdm9pY2VzCS0gR0YxIHZvaWNlcyBsaW1pdCAoMTQtMzIpCisgICAgcGNtX3ZvaWNlcwktIHJlc2VydmVkIFBDTSB2b2ljZXMKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgTW9kdWxlIHNuZC1ndXNleHRyZW1lCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBHcmF2aXMgVWx0cmFTb3VuZCBFeHRyZW1lIChTeW5lcmd5IFZpcGVyTWF4KSBzb3VuZCBjYXJkLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgRVMtMTY4OCBjaGlwICgweDIyMCwweDIzMCwweDI0MCwweDI1MCwweDI2MCkKKyAgICBnZjFfcG9ydAktIHBvcnQgIyBmb3IgR0YxIGNoaXAgKDB4MjEwLDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwLDB4MjcwKQorICAgIG1wdV9wb3J0CS0gcG9ydCAjIGZvciBNUFUtNDAxIHBvcnQgKDB4MzAwLDB4MzEwLDB4MzIwLDB4MzMwKSwgLTEgPSBkaXNhYmxlCisgICAgaXJxCQktIElSUSAjIGZvciBFUy0xNjg4IGNoaXAgKDUsNyw5LDEwKQorICAgIGdmMV9pcnEJLSBJUlEgIyBmb3IgR0YxIGNoaXAgKDMsNSw5LDExLDEyLDE1KQorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBwb3J0ICg1LDcsOSwxMCkKKyAgICBkbWE4CS0gRE1BICMgZm9yIEVTLTE2ODggY2hpcCAoMCwxLDMpCisgICAgZG1hMQktIERNQSAjIGZvciBHRjEgY2hpcCAoMSwzLDUsNiw3KQorICAgIGpveXN0aWNrX2RhYyAtIDAgdG8gMzEsICgwLjU5Vi00LjUyViBvciAwLjM4OVYtMi45OFYpCisgICAgdm9pY2VzCS0gR0YxIHZvaWNlcyBsaW1pdCAoMTQtMzIpCisgICAgcGNtX3ZvaWNlcwktIHJlc2VydmVkIFBDTSB2b2ljZXMKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUgKHdpdGhvdXQgTVBVLTQwMSBwb3J0KS4KKworICBNb2R1bGUgc25kLWd1c21heAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBHcmF2aXMgVWx0cmFTb3VuZCBNQVggc291bmQgY2FyZC4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIEdGMSBjaGlwICgweDIyMCwweDIzMCwweDI0MCwweDI1MCwweDI2MCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIEdGMSBjaGlwICgzLDUsOSwxMSwxMiwxNSkKKyAgICBkbWExCS0gRE1BICMgZm9yIEdGMSBjaGlwICgxLDMsNSw2LDcpCisgICAgZG1hMgktIERNQSAjIGZvciBHRjEgY2hpcCAoMSwzLDUsNiw3LC0xPWRpc2FibGUpCisgICAgam95c3RpY2tfZGFjIC0gMCB0byAzMSwgKDAuNTlWLTQuNTJWIG9yIDAuMzg5Vi0yLjk4VikKKyAgICB2b2ljZXMJLSBHRjEgdm9pY2VzIGxpbWl0ICgxNC0zMikKKyAgICBwY21fdm9pY2VzCS0gcmVzZXJ2ZWQgUENNIHZvaWNlcworCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1oZGEtaW50ZWwKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgSW50ZWwgSEQgQXVkaW8gKElDSDYsIElDSDZNLCBJQ0g3KQorCisgICAgbW9kZWwJLSBmb3JjZSB0aGUgbW9kZWwgbmFtZQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgICBFYWNoIGNvZGVjIG1heSBoYXZlIGEgbW9kZWwgdGFibGUgZm9yIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4KKyAgICBJZiB5b3VyIG1hY2hpbmUgaXNuJ3QgbGlzdGVkIHRoZXJlLCB0aGUgZGVmYXVsdCAodXN1YWxseSBtaW5pbWFsKQorICAgIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwLiAgWW91IGNhbiBwYXNzICJtb2RlbD08bmFtZT4iIG9wdGlvbiB0bworICAgIHNwZWNpZnkgYSBjZXJ0YWluIG1vZGVsIGluIHN1Y2ggYSBjYXNlLiAgVGhlcmUgYXJlIGRpZmZlcmVudAorICAgIG1vZGVscyBkZXBlbmRpbmcgb24gdGhlIGNvZGVjIGNoaXAuCisKKwkgIE1vZGVsIG5hbWUJRGVzY3JpcHRpb24KKwkgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0KKwlBTEM4ODAKKwkgIDNzdGFjawkzLWphY2sgaW4gYmFjayBhbmQgYSBoZWFkcGhvbmUgb3V0CisJICAzc3RhY2stZGlnb3V0CTMtamFjayBpbiBiYWNrLCBhIEhQIG91dCBhbmQgYSBTUERJRiBvdXQKKwkgIDVzdGFjawk1LWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250CisJICA1c3RhY2stZGlnb3V0CTUtamFjayBpbiBiYWNrLCAyLWphY2sgaW4gZnJvbnQsIGEgU1BESUYgb3V0CisJICB3ODEwCQkzLWphY2sKKworCUNNSTk4ODAKKwkgIG1pbmltYWwJMy1qYWNrIGluIGJhY2sKKwkgIG1pbl9mcAkzLWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250CisJICBmdWxsCQk2LWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250CisJICBmdWxsX2RpZwk2LWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250LCBTUERJRiBJL08KKwkgIGFsbG91dAk1LWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250LCBTUERJRiBvdXQKKworICBNb2R1bGUgc25kLWhkc3AKKyAgLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFJNRSBIYW1tZXJmYWxsIERTUCBhdWRpbyBpbnRlcmZhY2UocykKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgICAgTm90ZTogVGhlIGZpcm13YXJlIGRhdGEgY2FuIGJlIGF1dG9tYXRpY2FsbHkgbG9hZGVkIHZpYSBob3RwbHVnCisgICAgICAgICAgd2hlbiBDT05GSUdfRldfTE9BREVSIGlzIHNldC4gIE90aGVyd2lzZSwgeW91IG5lZWQgdG8gbG9hZAorICAgICAgICAgIHRoZSBmaXJtd2FyZSB2aWEgaGRzcGxvYWRlciB1dGlsaXR5IGluY2x1ZGVkIGluIGFsc2EtdG9vbHMKKyAgICAgICAgICBwYWNrYWdlLgorICAgICAgICAgIFRoZSBmaXJtd2FyZSBkYXRhIGlzIGZvdW5kIGluIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KKworICAgIE5vdGU6IHNuZC1wYWdlLWFsbG9jIG1vZHVsZSBkb2VzIHRoZSBqb2Igd2hpY2ggc25kLWhhbW1lcmZhbGwtbWVtCisgICAgICAgICAgbW9kdWxlIGRpZCBmb3JtZXJseS4gIEl0IHdpbGwgYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgaW4gYWR2YW5jZQorICAgICAgICAgIHdoZW4gYW55IEhEU1AgY2FyZHMgYXJlIGZvdW5kLiAgVG8gbWFrZSB0aGUgYnVmZmVyCisgICAgICAgICAgYWxsb2NhdGlvbiBzdXJlLCBsb2FkIHNuZC1wYWdlLWFsbG9jIG1vZHVsZSBpbiB0aGUgZWFybHkKKyAgICAgICAgICBzdGFnZSBvZiBib290IHNlcXVlbmNlLgorCisgIE1vZHVsZSBzbmQtaWNlMTcxMgorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRW52eTI0IChJQ0UxNzEyKSBiYXNlZCBQQ0kgc291bmQgY2FyZHMuCisJCQkqIE1pZGlNYW4gTSBBdWRpbyBEZWx0YSAxMDEwCisJCQkqIE1pZGlNYW4gTSBBdWRpbyBEZWx0YSAxMDEwTFQKKwkJCSogTWlkaU1hbiBNIEF1ZGlvIERlbHRhIERpTyAyNDk2CisJCQkqIE1pZGlNYW4gTSBBdWRpbyBEZWx0YSA2NgorCQkJKiBNaWRpTWFuIE0gQXVkaW8gRGVsdGEgNDQKKwkJCSogTWlkaU1hbiBNIEF1ZGlvIERlbHRhIDQxMAorCQkJKiBNaWRpTWFuIE0gQXVkaW8gQXVkaW9waGlsZSAyNDk2CisgICAgICAgICAgICAgICAgICAgICAgICAqIFRlcnJhVGVjIEVXUyA4OE1UCisgICAgICAgICAgICAgICAgICAgICAgICAqIFRlcnJhVGVjIEVXUyA4OEQKKyAgICAgICAgICAgICAgICAgICAgICAgICogVGVycmFUZWMgRVdYIDI0Lzk2CisgICAgICAgICAgICAgICAgICAgICAgICAqIFRlcnJhVGVjIERNWCA2RmlyZQorICAgICAgICAgICAgICAgICAgICAgICAgKiBIb29udGVjaCBTb3VuZFRyYWNrIERTUCAyNAorICAgICAgICAgICAgICAgICAgICAgICAgKiBIb29udGVjaCBTb3VuZFRyYWNrIERTUCAyNCBWYWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgKiBIb29udGVjaCBTb3VuZFRyYWNrIERTUCAyNCBNZWRpYSA3LjEKKyAgICAgICAgICAgICAgICAgICAgICAgICogRGlnaWdyYW0gVlg0NDIKKworICAgIG1vZGVsICAgICAgIC0gVXNlIHRoZSBnaXZlbiBib2FyZCBtb2RlbCwgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisJCSAgZGVsdGExMDEwLCBkaW8yNDk2LCBkZWx0YTY2LCBkZWx0YTQ0LCBhdWRpb3BoaWxlLCBkZWx0YTQxMCwKKwkJICBkZWx0YTEwMTBsdCwgdng0NDIsIGV3eDI0OTYsIGV3czg4bXQsIGV3czg4bXRfbmV3LCBld3M4OGQsCisJCSAgZG14NmZpcmUsIGRzcDI0LCBkc3AyNF92YWx1ZSwgZHNwMjRfNzEsIGV6OAorICAgIG9tbmkJLSBPbW5pIEkvTyBzdXBwb3J0IGZvciBNaWRpTWFuIE0tQXVkaW8gRGVsdGE0NC82NgorICAgIGNzODQyN190aW1lb3V0IC0gcmVzZXQgdGltZW91dCBmb3IgdGhlIENTODQyNyBjaGlwIChTL1BESUYgdHJhbnNjaWV2ZXIpCisgICAgICAgICAgICAgICAgICAgICBpbiBtc2VjIHJlc29sdXRpb24sIGRlZmF1bHQgdmFsdWUgaXMgNTAwICgwLjUgc2VjKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4gTm90ZTogVGhlIGNvbnN1bWVyIHBhcnQKKyAgICBpcyBub3QgdXNlZCB3aXRoIGFsbCBFbnZ5MjQgYmFzZWQgY2FyZHMgKGZvciBleGFtcGxlIGluIHRoZSBNaWRpTWFuIERlbHRhCisgICAgc2VyaWUpLgorCisgIE1vZHVsZSBzbmQtaWNlMTcyNAorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRW52eTI0SFQgKFZUL0lDRTE3MjQpIGJhc2VkIFBDSSBzb3VuZCBjYXJkcy4KKwkJCSogTWlkaU1hbiBNIEF1ZGlvIFJldm9sdXRpb24gNy4xCisJCQkqIEFNUCBMdGQgQVVESU8yMDAwCisJCQkqIFRlcnJhVGVjIEF1cmVvbiBTa3ktNS4xLCBTcGFjZS03LjEKKworICAgIG1vZGVsICAgICAgIC0gVXNlIHRoZSBnaXZlbiBib2FyZCBtb2RlbCwgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisJCSAgcmV2bzcxLCBhbXAyMDAwLCBwcm9kaWd5NzEsIGF1cmVvbjUxLCBhdXJlb243MSwKKwkJICBrOHg4MDAKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgTW9kdWxlIHNuZC1pbnRlbDh4MAorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEFDJzk3IG1vdGhlcmJvYXJkcyBmcm9tIEludGVsIGFuZCBjb21wYXRpYmxlcy4KKwkJCSogSW50ZWwgaTgxMC84MTBFLCBpODE1LCBpODIwLCBpODMwLCBpODR4LCBNWDQ0MAorCQkJKiBTaVMgNzAxMiAoU2lTIDczNSkKKwkJCSogTlZpZGlhIE5Gb3JjZSwgTkZvcmNlMgorCQkJKiBBTUQgQU1ENzY4LCBBTUQ4MTExCisJCQkqIEFMaSBtNTQ1NQorCisgICAgYWM5N19jbG9jawkgIC0gQUMnOTcgY29kZWMgY2xvY2sgYmFzZSAoMCA9IGF1dG8tZGV0ZWN0KQorICAgIGFjOTdfcXVpcmsgICAgLSBBQyc5NyB3b3JrYXJvdW5kIGZvciBzdHJhbmdlIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBhcmUgYWNjZXB0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IGRvbid0IG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlID0gZGlzYWJsZSB0aGUgcXVpcmsKKyAgICAgICAgICAgICAgICAgICAgICBocF9vbmx5ID0gdXNlIGhlYWRwaG9uZSBjb250cm9sIGFzIG1hc3RlcgorICAgICAgICAgICAgICAgICAgICAgIHN3YXBfaHAgPSBzd2FwIGhlYWRwaG9uZSBhbmQgbWFzdGVyIGNvbnRyb2xzCisgICAgICAgICAgICAgICAgICAgICAgc3dhcF9zdXJyb3VuZCA9IHN3YXAgbWFzdGVyIGFuZCBzdXJyb3VuZCBjb250cm9scworICAgICAgICAgICAgICAgICAgICAgIGFkX3NoYXJpbmcgPSBmb3IgQUQxOTg1LCB0dXJuIG9uIE9NUyBiaXQgYW5kIHVzZSBoZWFkcGhvbmUKKyAgICAgICAgICAgICAgICAgICAgICBhbGNfamFjayA9IGZvciBBTEM2NXgsIHR1cm4gb24gdGhlIGphY2sgc2Vuc2UgbW9kZQorICAgICAgICAgICAgICAgICAgICAgIGludl9lYXBkID0gaW52ZXJ0ZWQgRUFQRCBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgIG11dGVfbGVkID0gYmluZCBFQVBEIGJpdCBmb3IgdHVybmluZyBvbi9vZmYgbXV0ZSBMRUQKKyAgICAgICAgICAgICAgICAgICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSBjb3JyZXNwb25kaW5nIGludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgLTEsIDAsIC4uLiBhcmUgYWNjZXB0ZWQsIHRvby4KKyAgICBidWdneV9pcnEgICAgIC0gRW5hYmxlIHdvcmthcm91bmQgZm9yIGJ1Z2d5IGludGVycnVwdHMgb24gc29tZQorICAgICAgICAgICAgICAgICAgICBtb3RoZXJib2FyZHMgKGRlZmF1bHQgb2ZmKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIGF1dG9wcm9iZSBhbmQgbXVsdGlwbGUgYnVzLW1hc3RlciBjaGlwcyAobWF4IDgpLgorCisgICAgTm90ZTogdGhlIGxhdGVzdCBkcml2ZXIgc3VwcG9ydHMgYXV0by1kZXRlY3Rpb24gb2YgY2hpcCBjbG9jay4KKyAgICBpZiB5b3Ugc3RpbGwgZW5jb3VudGVyIHRvbyBmYXN0IHBsYXliYWNrLCBzcGVjaWZ5IHRoZSBjbG9jaworICAgIGV4cGxpY2l0bHkgdmlhIHRoZSBtb2R1bGUgb3B0aW9uICJhYzk3X2Nsb2NrPTQxMTk0Ii4KKworICAgIEpveXN0aWNrL01JREkgcG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuICBJZiB5b3VyCisgICAgbW90aGVyYm9hcmQgaGFzIHRoZXNlIGRldmljZXMsIHVzZSB0aGUgbnM1NTggb3Igc25kLW1wdTQwMQorICAgIG1vZHVsZXMsIHJlc3BlY3RpdmVseS4KKworICAgIFRoZSBhYzk3X3F1aXJrIG9wdGlvbiBpcyB1c2VkIHRvIGVuYWJsZS9vdmVycmlkZSB0aGUgd29ya2Fyb3VuZAorICAgIGZvciBzcGVjaWZpYyBkZXZpY2VzLiAgU29tZSBoYXJkd2FyZSBoYXZlIHN3YXBwZWQgb3V0cHV0IHBpbnMKKyAgICBiZXR3ZWVuIE1hc3RlciBhbmQgSGVhZHBob25lLCBvciBTdXJyb3VuZC4gIFRoZSBkcml2ZXIgcHJvdmlkZXMKKyAgICB0aGUgYXV0by1kZXRlY3Rpb24gb2Yga25vd24gcHJvYmxlbWF0aWMgZGV2aWNlcywgYnV0IHNvbWUgbWlnaHQKKyAgICBiZSB1bmtub3duIG9yIHdyb25nbHkgZGV0ZWN0ZWQuICBJbiBzdWNoIGEgY2FzZSwgcGFzcyB0aGUgcHJvcGVyCisgICAgdmFsdWUgd2l0aCB0aGlzIG9wdGlvbi4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKyAgICAKKyAgTW9kdWxlIHNuZC1pbnRlbDh4MG0KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgSW50ZWwgSUNIIChpOHgwKSBjaGlwc2V0IE1DOTcgbW9kZW1zLgorCisgICAgYWM5N19jbG9jawkgIC0gQUMnOTcgY29kZWMgY2xvY2sgYmFzZSAoMCA9IGF1dG8tZGV0ZWN0KQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorCisgICAgTm90ZTogVGhlIGRlZmF1bHQgaW5kZXggdmFsdWUgb2YgdGhpcyBtb2R1bGUgaXMgLTIsIGkuZS4gdGhlIGZpcnN0CisgICAgICAgICAgc2xvdCBpcyBleGNsdWRlZC4KKworICBNb2R1bGUgc25kLWludGVyd2F2ZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBHcmF2aXMgVWx0cmFTb3VuZCBQblAsIER5bmFzb25pYyAzLUQvUHJvLCBTVEIgU291bmQgUmFnZSAzMgorICAgIGFuZCBvdGhlciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBBTUQgSW50ZXJXYXZlICh0bSkgY2hpcC4KKyAgCisgICAgcG9ydAktIHBvcnQgIyBmb3IgSW50ZXJXYXZlIGNoaXAgKDB4MjEwLDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwKQorICAgIGlycQkJLSBJUlEgIyBmb3IgSW50ZXJXYXZlIGNoaXAgKDMsNSw5LDExLDEyLDE1KQorICAgIGRtYTEJLSBETUEgIyBmb3IgSW50ZXJXYXZlIGNoaXAgKDAsMSwzLDUsNiw3KQorICAgIGRtYTIJLSBETUEgIyBmb3IgSW50ZXJXYXZlIGNoaXAgKDAsMSwzLDUsNiw3LC0xPWRpc2FibGUpCisgICAgam95c3RpY2tfZGFjIC0gMCB0byAzMSwgKDAuNTlWLTQuNTJWIG9yIDAuMzg5Vi0yLjk4VikKKyAgICBtaWRpCS0gMSA9IE1JREkgVUFSVCBlbmFibGUsIDAgPSBNSURJIFVBUlQgZGlzYWJsZSAoZGVmYXVsdCkKKyAgICBwY21fdm9pY2VzCS0gcmVzZXJ2ZWQgUENNIHZvaWNlcyBmb3IgdGhlIHN5bnRoZXNpemVyIChkZWZhdWx0IDIpCisgICAgZWZmZWN0CS0gMSA9IEludGVyV2F2ZSBlZmZlY3RzIGVuYWJsZSAoZGVmYXVsdCAwKTsKKyAgICAgICAgICAgICAgICAgIHJlcXVpcmVzIDggdm9pY2VzCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcywgYXV0b3Byb2JlIGFuZCBJU0EgUG5QLgorCisgIE1vZHVsZSBzbmQtaW50ZXJ3YXZlLXN0YgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVWx0cmFTb3VuZCAzMi1Qcm8gKHNvdW5kIGNhcmQgZnJvbSBTVEIgdXNlZCBieSBDb21wYXEpCisgICAgYW5kIG90aGVyIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEFNRCBJbnRlcldhdmUgKHRtKSBjaGlwIHdpdGggVEVBNjMzMFQKKyAgICBjaXJjdWl0IGZvciBleHRlbmRlZCBjb250cm9sIG9mIGJhc3MsIHRyZWJsZSBhbmQgbWFzdGVyIHZvbHVtZS4KKyAgCisgICAgcG9ydAktIHBvcnQgIyBmb3IgSW50ZXJXYXZlIGNoaXAgKDB4MjEwLDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwKQorICAgIHBvcnRfdGMJLSB0b25lIGNvbnRyb2wgKGkyYyBidXMpIHBvcnQgIyBmb3IgVEVBNjMzMFQgY2hpcCAoMHgzNTAsMHgzNjAsMHgzNzAsMHgzODApCisgICAgaXJxCQktIElSUSAjIGZvciBJbnRlcldhdmUgY2hpcCAoMyw1LDksMTEsMTIsMTUpCisgICAgZG1hMQktIERNQSAjIGZvciBJbnRlcldhdmUgY2hpcCAoMCwxLDMsNSw2LDcpCisgICAgZG1hMgktIERNQSAjIGZvciBJbnRlcldhdmUgY2hpcCAoMCwxLDMsNSw2LDcsLTE9ZGlzYWJsZSkKKyAgICBqb3lzdGlja19kYWMgLSAwIHRvIDMxLCAoMC41OVYtNC41MlYgb3IgMC4zODlWLTIuOThWKQorICAgIG1pZGkJLSAxID0gTUlESSBVQVJUIGVuYWJsZSwgMCA9IE1JREkgVUFSVCBkaXNhYmxlIChkZWZhdWx0KQorICAgIHBjbV92b2ljZXMJLSByZXNlcnZlZCBQQ00gdm9pY2VzIGZvciB0aGUgc3ludGhlc2l6ZXIgKGRlZmF1bHQgMikKKyAgICBlZmZlY3QJLSAxID0gSW50ZXJXYXZlIGVmZmVjdHMgZW5hYmxlIChkZWZhdWx0IDApOworICAgICAgICAgICAgICAgICAgcmVxdWlyZXMgOCB2b2ljZXMKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBhdXRvcHJvYmUgYW5kIElTQSBQblAuCisKKyAgTW9kdWxlIHNuZC1rb3JnMTIxMgorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEtvcmcgMTIxMiBJTyBQQ0kgY2FyZAorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgTW9kdWxlIHNuZC1tYWVzdHJvMworICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEFsbGVncm8vTWFlc3RybzMgY2hpcHMKKworICAgIGV4dGVybmFsX2FtcCAgICAgLSBlbmFibGUgZXh0ZXJuYWwgYW1wIChlbmFibGVkIGJ5IGRlZmF1bHQpCisgICAgYW1wX2dwaW8gICAgICAgICAtIEdQSU8gcGluIG51bWJlciBmb3IgZXh0ZXJuYWwgYW1wICgwLTE1KSBvcgorICAgICAgICAgICAgICAgICAgICAgICAtMSBmb3IgZGVmYXVsdCBwaW4gKDggZm9yIGFsbGVncm8sIDEgZm9yCisgICAgICAgICAgICAgICAgICAgICAgIG90aGVycykgCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjaGlwcyAobWF4IDgpLgorCisgICAgTm90ZTogdGhlIGJpbmRpbmcgb2YgYW1wbGlmaWVyIGlzIGRlcGVuZGVudCBvbiBoYXJkd2FyZS4KKyAgICBJZiB0aGVyZSBpcyBubyBzb3VuZCBldmVuIHRob3VnaCBhbGwgY2hhbm5lbHMgYXJlIHVubXV0ZWQsIHRyeSB0bworICAgIHNwZWNpZnkgb3RoZXIgZ3BpbyBjb25uZWN0aW9uIHZpYSBhbXBfZ3BpbyBvcHRpb24uIAorICAgIEZvciBleGFtcGxlLCBhIFBhbmFzb25pYyBub3RlYm9vayBtaWdodCBuZWVkICJhbXBfZ3Bpbz0weDBkIgorICAgIG9wdGlvbi4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICBNb2R1bGUgc25kLW1peGFydAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBEaWdpZ3JhbSBtaVhhcnQ4IHNvdW5kIGNhcmRzLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzLgorICAgIE5vdGU6IE9uZSBtaVhhcnQ4IGJvYXJkIHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgNCBhbHNhIGNhcmRzLgorICAgICAgICAgIFNlZSBNSVhBUlQudHh0IGZvciBkZXRhaWxzLgorCisgICAgV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGFuZCB0aGUgaG90cGx1ZyBmaXJtd2FyZQorICAgIGlzIHN1cHBvcnRlZCwgdGhlIGZpcm13YXJlIGRhdGEgaXMgbG9hZGVkIHZpYSBob3RwbHVnIGF1dG9tYXRpY2FsbHkuCisgICAgSW5zdGFsbCB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGZpbGVzIGluIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KKyAgICBXaGVuIG5vIGhvdHBsdWcgZncgbG9hZGVyIGlzIGF2YWlsYWJsZSwgeW91IG5lZWQgdG8gbG9hZCB0aGUKKyAgICBmaXJtd2FyZSB2aWEgbWl4YXJ0bG9hZGVyIHV0aWxpdHkgaW4gYWxzYS10b29scyBwYWNrYWdlLgorCisgIE1vZHVsZSBzbmQtbXB1NDAxCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIE1QVS00MDEgVUFSVCBkZXZpY2VzLgorCisgICAgcG9ydAktIHBvcnQgbnVtYmVyIG9yIC0xIChkaXNhYmxlKQorICAgIGlycQkJLSBJUlEgbnVtYmVyIG9yIC0xIChkaXNhYmxlKQorICAgIHBucAkJLSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcyAobWF4IDgpIGFuZCBQblAuCisgICAgCisgIE1vZHVsZSBzbmQtbXRwYXYKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBNT1RVIE1pZGlUaW1lUGllY2UgQVYgbXVsdGlwb3J0IE1JREkgKG9uIHRoZSBwYXJhbGxlbAorICAgIHBvcnQpLgorCisgICAgcG9ydAktIEkvTyBwb3J0ICMgZm9yIE1UUEFWICgweDM3OCwweDI3OCwgZGVmYXVsdD0weDM3OCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIE1UUEFWICg3LDUsIGRlZmF1bHQ9NykKKyAgICBod3BvcnRzCS0gbnVtYmVyIG9mIHN1cHBvcnRlZCBoYXJkd2FyZSBwb3J0cywgZGVmYXVsdD04LgorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyBvbmx5IDEgY2FyZC4gIFRoaXMgbW9kdWxlIGhhcyBubyBlbmFibGUgb3B0aW9uLgorCisgIE1vZHVsZSBzbmQtbm0yNTYKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBOZW9NYWdpYyBOTTI1NkFWL1pYIGNoaXBzCisKKyAgICBwbGF5YmFja19idWZzaXplIC0gbWF4IHBsYXliYWNrIGZyYW1lIHNpemUgaW4ga0IgKDQtMTI4a0IpCisgICAgY2FwdHVyZV9idWZzaXplICAtIG1heCBjYXB0dXJlIGZyYW1lIHNpemUgaW4ga0IgKDQtMTI4a0IpCisgICAgZm9yY2VfYWM5NyAgICAgICAtIDAgb3IgMSAoZGlzYWJsZWQgYnkgZGVmYXVsdCkKKyAgICBidWZmZXJfdG9wICAgICAgIC0gc3BlY2lmeSBidWZmZXIgdG9wIGFkZHJlc3MKKyAgICB1c2VfY2FjaGUgICAgICAgIC0gMCBvciAxIChkaXNhYmxlZCBieSBkZWZhdWx0KQorICAgIHZhaW9faGFjayAgICAgICAgLSBhbGlhcyBidWZmZXJfdG9wPTB4MjVhODAwCisgICAgcmVzZXRfd29ya2Fyb3VuZCAtIGVuYWJsZSBBQzk3IFJFU0VUIHdvcmthcm91bmQgZm9yIHNvbWUgbGFwdG9wcworCisgICAgTW9kdWxlIHN1cHBvcnRzIGF1dG9wcm9iZSBhbmQgbXVsdGlwbGUgY2hpcHMgKG1heCA4KS4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICAgIE5vdGU6IG9uIHNvbWUgbm90ZWJvb2tzIHRoZSBidWZmZXIgYWRkcmVzcyBjYW5ub3QgYmUgZGV0ZWN0ZWQKKyAgICBhdXRvbWF0aWNhbGx5LCBvciBjYXVzZXMgaGFuZy11cCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgICAgSW4gc3VjaCBhIGNhc2UsIHNwZWNpZnkgdGhlIGJ1ZmZlciB0b3AgYWRkcmVzcyBleHBsaWNpdHkgdmlhCisgICAgYnVmZmVyX3RvcCBvcHRpb24uCisgICAgRm9yIGV4YW1wbGUsCisgICAgICBTb255IEYyNTA6IGJ1ZmZlcl90b3A9MHgyNWE4MDAKKyAgICAgIFNvbnkgRjI3MDogYnVmZmVyX3RvcD0weDI3MjgwMAorICAgIFRoZSBkcml2ZXIgc3VwcG9ydHMgb25seSBhYzk3IGNvZGVjLiAgSXQncyBwb3NzaWJsZSB0byBmb3JjZQorICAgIHRvIGluaXRpYWxpemUvdXNlIGFjOTcgYWx0aG91Z2ggaXQncyBub3QgZGV0ZWN0ZWQuICBJbiBzdWNoIGEKKyAgICBjYXNlLCB1c2UgZm9yY2VfYWM5Nz0xIG9wdGlvbiAtIGJ1dCAqTk8qIGd1YXJhbnRlZSB3aGV0aGVyIGl0CisgICAgd29ya3MhCisKKyAgICBOb3RlOiBUaGUgTk0yNTYgY2hpcCBjYW4gYmUgbGlua2VkIGludGVybmFsbHkgd2l0aCBub24tQUM5NworICAgIGNvZGVjcy4gIFRoaXMgZHJpdmVyIHN1cHBvcnRzIG9ubHkgdGhlIEFDOTcgY29kZWMsIGFuZCB3b24ndCB3b3JrCisgICAgd2l0aCBtYWNoaW5lcyB3aXRoIG90aGVyIChtb3N0IGxpa2VseSBDUzQyM3ggb3IgT1BMM1NBeCkgY2hpcHMsCisgICAgZXZlbiB0aG91Z2ggdGhlIGRldmljZSBpcyBkZXRlY3RlZCBpbiBsc3BjaS4gIEluIHN1Y2ggYSBjYXNlLCB0cnkKKyAgICBvdGhlciBkcml2ZXJzLCBlLmcuIHNuZC1jczQyMzIgb3Igc25kLW9wbDNzYTIuICBTb21lIGhhcyBJU0EtUG5QCisgICAgYnV0IHNvbWUgZG9lc24ndCBoYXZlIElTQSBQblAuICBZb3UnbGwgbmVlZCB0byBzcGVpY2Z5IGlzYXBucD0wCisgICAgYW5kIHByb3BlciBoYXJkd2FyZSBwYXJhbWV0ZXJzIGluIHRoZSBjYXNlIHdpdGhvdXQgSVNBIFBuUC4KKworICAgIE5vdGU6IHNvbWUgbGFwdG9wcyBuZWVkIGEgd29ya2Fyb3VuZCBmb3IgQUM5NyBSRVNFVC4gIEZvciB0aGUKKyAgICBrbm93biBoYXJkd2FyZSBsaWtlIERlbGwgTGF0aXR1ZGUgTFMgYW5kIFNvbnkgUENHLUYzMDUsIHRoaXMKKyAgICB3b3JrYXJvdW5kIGlzIGVuYWJsZWQgYXV0b21hdGljYWxseS4gIEZvciBvdGhlciBsYXB0b3BzIHdpdGggYQorICAgIGhhcmQgZnJlZXplLCB5b3UgY2FuIHRyeSByZXNldF93b3JrYXJvdW5kPTEgb3B0aW9uLgorCisgICAgTm90ZTogVGhpcyBkcml2ZXIgaXMgcmVhbGx5IGNyYXBweS4gIEl0J3MgYSBwb3J0aW5nIGZyb20gdGhlCisgICAgT1NTIGRyaXZlciwgd2hpY2ggaXMgYSByZXN1bHQgb2YgYmxhY2stbWFnaWMgcmV2ZXJzZSBlbmdpbmVlcmluZy4KKyAgICBUaGUgZGV0ZWN0aW9uIG9mIGNvZGVjIHdpbGwgZmFpbCBpZiB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqYWZ0ZXIqCisgICAgWC1zZXJ2ZXIgYXMgZGVzY3JpYmVkIGFib3ZlLiAgWW91IG1pZ2h0IGJlIGFibGUgdG8gZm9yY2UgdG8gbG9hZAorICAgIHRoZSBtb2R1bGUsIGJ1dCBpdCBtYXkgcmVzdWx0IGluIGhhbmctdXAuICAgSGVuY2UsIG1ha2Ugc3VyZSB0aGF0CisgICAgeW91IGxvYWQgdGhpcyBtb2R1bGUgKmJlZm9yZSogWCBpZiB5b3UgZW5jb3VudGVyIHRoaXMga2luZCBvZgorICAgIHByb2JsZW0uCisKKyAgTW9kdWxlIHNuZC1vcGwzc2EyCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBZYW1haGEgT1BMMy1TQTIvU0EzIHNvdW5kIGNhcmRzLgorCisgICAgcG9ydAktIGNvbnRyb2wgcG9ydCAjIGZvciBPUEwzLVNBIGNoaXAgKDB4MzcwKQorICAgIHNiX3BvcnQJLSBTQiBwb3J0ICMgZm9yIE9QTDMtU0EgY2hpcCAoMHgyMjAsMHgyNDApCisgICAgd3NzX3BvcnQJLSBXU1MgcG9ydCAjIGZvciBPUEwzLVNBIGNoaXAgKDB4NTMwLDB4ZTgwLDB4ZjQwLDB4NjA0KQorICAgIG1pZGlfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUICgweDMwMCwweDMzMCksIC0xID0gZGlzYWJsZQorICAgIGZtX3BvcnQJLSBGTSBwb3J0ICMgZm9yIE9QTDMtU0EgY2hpcCAoMHgzODgpLCAtMSA9IGRpc2FibGUKKyAgICBpcnEJCS0gSVJRICMgZm9yIE9QTDMtU0EgY2hpcCAoNSw3LDksMTApCisgICAgZG1hMQktIGZpcnN0IERNQSAjIGZvciBZYW1haGEgT1BMMy1TQSBjaGlwICgwLDEsMykKKyAgICBkbWEyCS0gc2Vjb25kIERNQSAjIGZvciBZYW1haGEgT1BMMy1TQSBjaGlwICgwLDEsMyksIC0xID0gZGlzYWJsZQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIElTQSBQblAuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQKKyAgICBhdXRvcHJvYmUgKGlmIElTQSBQblAgaXMgbm90IHVzZWQpIHRodXMgYWxsIHBvcnRzIG11c3QgYmUgc3BlY2lmaWVkISEhCisgICAgCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtb3B0aTkyeC1hZDE4NDgKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBPUFRpIDgyYzkyeCBhbmQgQW5hbG9nIERldmljZXMgQUQxODQ4IGNoaXBzLgorICAgIE1vZHVsZSB3b3JrcyB3aXRoIE9BSyBNb3phcnQgY2FyZHMgYXMgd2VsbC4KKyAgICAKKyAgICBwb3J0ICAgICAgLSBwb3J0ICMgZm9yIFdTUyBjaGlwICgweDUzMCwweGU4MCwweGY0MCwweDYwNCkKKyAgICBtcHVfcG9ydCAgLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApCisgICAgZm1fcG9ydCAgIC0gcG9ydCAjIGZvciBPUEwzIGRldmljZSAoMHgzODgpCisgICAgaXJxICAgICAgIC0gSVJRICMgZm9yIFdTUyBjaGlwICg1LDcsOSwxMCwxMSkKKyAgICBtcHVfaXJxICAgLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg1LDcsOSwxMCkKKyAgICBkbWExICAgICAgLSBmaXJzdCBETUEgIyBmb3IgV1NTIGNoaXAgKDAsMSwzKQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgb25seSBvbmUgY2FyZCwgYXV0b3Byb2JlIGFuZCBQblAuCisKKyAgTW9kdWxlIHNuZC1vcHRpOTJ4LWNzNDIzMQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIE9QVGkgODJjOTJ4IGFuZCBDcnlzdGFsIENTNDIzMSBjaGlwcy4KKyAgICAKKyAgICBwb3J0ICAgICAgLSBwb3J0ICMgZm9yIFdTUyBjaGlwICgweDUzMCwweGU4MCwweGY0MCwweDYwNCkKKyAgICBtcHVfcG9ydCAgLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApCisgICAgZm1fcG9ydCAgIC0gcG9ydCAjIGZvciBPUEwzIGRldmljZSAoMHgzODgpCisgICAgaXJxICAgICAgIC0gSVJRICMgZm9yIFdTUyBjaGlwICg1LDcsOSwxMCwxMSkKKyAgICBtcHVfaXJxICAgLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg1LDcsOSwxMCkKKyAgICBkbWExICAgICAgLSBmaXJzdCBETUEgIyBmb3IgV1NTIGNoaXAgKDAsMSwzKQorICAgIGRtYTIgICAgICAtIHNlY29uZCBETUEgIyBmb3IgV1NTIGNoaXAgKDAsMSwzKQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgb25seSBvbmUgY2FyZCwgYXV0b3Byb2JlIGFuZCBQblAuCisKKyAgTW9kdWxlIHNuZC1vcHRpOTN4CisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBPUFRpIDgyYzkzeCBjaGlwcy4KKyAgICAKKyAgICBwb3J0ICAgICAgLSBwb3J0ICMgZm9yIFdTUyBjaGlwICgweDUzMCwweGU4MCwweGY0MCwweDYwNCkKKyAgICBtcHVfcG9ydCAgLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApCisgICAgZm1fcG9ydCAgIC0gcG9ydCAjIGZvciBPUEwzIGRldmljZSAoMHgzODgpCisgICAgaXJxICAgICAgIC0gSVJRICMgZm9yIFdTUyBjaGlwICg1LDcsOSwxMCwxMSkKKyAgICBtcHVfaXJxICAgLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg1LDcsOSwxMCkKKyAgICBkbWExICAgICAgLSBmaXJzdCBETUEgIyBmb3IgV1NTIGNoaXAgKDAsMSwzKQorICAgIGRtYTIgICAgICAtIHNlY29uZCBETUEgIyBmb3IgV1NTIGNoaXAgKDAsMSwzKQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgb25seSBvbmUgY2FyZCwgYXV0b3Byb2JlIGFuZCBQblAuCisKKyAgTW9kdWxlIHNuZC1wb3dlcm1hYyAob24gcHBjIG9ubHkpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBQb3dlck1hYywgaU1hYyBhbmQgaUJvb2sgb24tYm9hcmQgc291bmRjaGlwcworCisgICAgZW5hYmxlX2JlZXAgICAgIC0gZW5hYmxlIGJlZXAgdXNpbmcgUENNIChlbmFibGVkIGFzIGRlZmF1bHQpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGEgY2hpcC4KKworICAgIE5vdGU6IHRoZSBkcml2ZXIgbWF5IGhhdmUgcHJvYmxlbXMgcmVnYXJkaW5nIGVuZGlhbmVzcy4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICBNb2R1bGUgc25kLXJtZTMyCisgIC0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgUk1FIERpZ2kzMiwgRGlnaTMyIFBybyBhbmQgRGlnaTMyLzggKFNlaydkIFByb2RpZjMyLCAKKyAgICBQcm9kaWY5NiBhbmQgUHJvZGlmIEdvbGQpIHNvdW5kIGNhcmRzLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgTW9kdWxlIHNuZC1ybWU5NgorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFJNRSBEaWdpOTYsIERpZ2k5Ni84IGFuZCBEaWdpOTYvOCBQUk8vUEFEL1BTVCBzb3VuZCBjYXJkcy4KKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgIE1vZHVsZSBzbmQtcm1lOTY1MgorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgUk1FIERpZ2k5NjUyIChIYW1tZXJmYWxsLCBIYW1tZXJmYWxsLUxpZ2h0KSBzb3VuZCBjYXJkcy4KKworICAgIHByZWNpc2VfcHRyCS0gRW5hYmxlIHByZWNpc2UgcG9pbnRlciAoZG9lc24ndCB3b3JrIHJlbGlhYmx5KS4KKwkJICAoZGVmYXVsdCA9IDApCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICAgIE5vdGU6IHNuZC1wYWdlLWFsbG9jIG1vZHVsZSBkb2VzIHRoZSBqb2Igd2hpY2ggc25kLWhhbW1lcmZhbGwtbWVtCisgICAgICAgICAgbW9kdWxlIGRpZCBmb3JtZXJseS4gIEl0IHdpbGwgYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgaW4gYWR2YW5jZQorICAgICAgICAgIHdoZW4gYW55IFJNRTk2NTIgY2FyZHMgYXJlIGZvdW5kLiAgVG8gbWFrZSB0aGUgYnVmZmVyCisgICAgICAgICAgYWxsb2NhdGlvbiBzdXJlLCBsb2FkIHNuZC1wYWdlLWFsbG9jIG1vZHVsZSBpbiB0aGUgZWFybHkKKyAgICAgICAgICBzdGFnZSBvZiBib290IHNlcXVlbmNlLgorCisgIE1vZHVsZSBzbmQtc2ExMXh4LXVkYTEzNDEgKG9uIGFybSBvbmx5KQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgUGhpbGlwcyBVREExMzQxVFMgb24gQ29tcGFxIGlQQVEgSDM2MDAgc291bmQgY2FyZC4KKworICAgIE1vZHVsZSBzdXBwb3J0cyBvbmx5IG9uZSBjYXJkLgorICAgIE1vZHVsZSBoYXMgbm8gZW5hYmxlIGFuZCBpbmRleCBvcHRpb25zLgorCisgIE1vZHVsZSBzbmQtc2I4CisgIC0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIDgtYml0IFNvdW5kQmxhc3RlciBjYXJkczogU291bmRCbGFzdGVyIDEuMCwKKwkJCQkJIFNvdW5kQmxhc3RlciAyLjAsCisJCQkJCSBTb3VuZEJsYXN0ZXIgUHJvCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBTQiBEU1AgY2hpcCAoMHgyMjAsMHgyNDAsMHgyNjApCisgICAgaXJxCQktIElSUSAjIGZvciBTQiBEU1AgY2hpcCAoNSw3LDksMTApCisgICAgZG1hOAktIERNQSAjIGZvciBTQiBEU1AgY2hpcCAoMSwzKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1zYjE2IGFuZCBzbmQtc2Jhd2UKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgMTYtYml0IFNvdW5kQmxhc3RlciBjYXJkczogU291bmRCbGFzdGVyIDE2IChQblApLAorCQkJCQkgIFNvdW5kQmxhc3RlciBBV0UgMzIgKFBuUCksCisJCQkJCSAgU291bmRCbGFzdGVyIEFXRSA2NCBQblAKKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIFNCIERTUCA0LnggY2hpcCAoMHgyMjAsMHgyNDAsMHgyNjApCisgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoMHgzMDAsMHgzMzApLCAtMSA9IGRpc2FibGUKKyAgICBhd2VfcG9ydAktIGJhc2UgcG9ydCAjIGZvciBFTVU4MDAwIHN5bnRoZXNpemVyICgweDYyMCwweDY0MCwweDY2MCkKKyAgICAgICAgICAgICAgICAgICAoc25kLXNiYXdlIG1vZHVsZSBvbmx5KQorICAgIGlycQkJLSBJUlEgIyBmb3IgU0IgRFNQIDQueCBjaGlwICg1LDcsOSwxMCkKKyAgICBkbWE4CS0gOC1iaXQgRE1BICMgZm9yIFNCIERTUCA0LnggY2hpcCAoMCwxLDMpCisgICAgZG1hMTYJLSAxNi1iaXQgRE1BICMgZm9yIFNCIERTUCA0LnggY2hpcCAoNSw2LDcpCisgICAgbWljX2FnYwktIE1pYyBBdXRvLUdhaW4tQ29udHJvbCAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQorICAgIGNzcAkJLSBBU1AvQ1NQIGNoaXAgc3VwcG9ydCAtIDAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGVuYWJsZQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMsIGF1dG9wcm9iZSBhbmQgSVNBIFBuUC4KKworICAgIE5vdGU6IFRvIHVzZSBWaWJyYTE2WCBjYXJkcyBpbiAxNi1iaXQgaGFsZiBkdXBsZXggbW9kZSwgeW91IG11c3QKKyAgICAgICAgICBkaXNhYmxlIDE2Yml0IERNQSB3aXRoIGRtYTE2ID0gLTEgbW9kdWxlIHBhcmFtZXRlci4KKyAgICAgICAgICBBbHNvLCBhbGwgU291bmQgQmxhc3RlciAxNiB0eXBlIGNhcmRzIGNhbiBvcGVyYXRlIGluIDE2LWJpdAorICAgICAgICAgIGhhbGYgZHVwbGV4IG1vZGUgdGhyb3VnaCA4LWJpdCBETUEgY2hhbm5lbCBieSBkaXNhYmxpbmcgdGhlaXIKKyAgICAgICAgICAxNi1iaXQgRE1BIGNoYW5uZWwuCisgICAgCisgIE1vZHVsZSBzbmQtc2dhbGF4eQorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQXp0ZWNoIFNvdW5kIEdhbGF4eSBzb3VuZCBjYXJkLgorCisgICAgc2Jwb3J0CS0gUG9ydCAjIGZvciBTQjE2IGludGVyZmFjZSAoMHgyMjAsMHgyNDApCisgICAgd3NzcG9ydAktIFBvcnQgIyBmb3IgV1NTIGludGVyZmFjZSAoMHg1MzAsMHhlODAsMHhmNDAsMHg2MDQpCisgICAgaXJxCQktIElSUSAjICg3LDksMTAsMTEpCisgICAgZG1hMQktIERNQSAjCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICBNb2R1bGUgc25kLXNzY2FwZQorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFTlNPTklRIFNvdW5kU2NhcGUgUG5QIGNhcmRzLgorCisgICAgcG9ydAktIFBvcnQgIyAoUG5QIHNldHVwKQorICAgIGlycQkJLSBJUlEgIyAoUG5QIHNldHVwKQorICAgIG1wdV9pcnEJLSBNUFUtNDAxIElSUSAjIChQblAgc2V0dXApCisgICAgZG1hCQktIERNQSAjIChQblAgc2V0dXApCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4gIElTQSBQblAgbXVzdCBiZSBlbmFibGVkLgorICAgIFlvdSBuZWVkIHNzY2FwZV9jdGwgdG9vbCBpbiBhbHNhLXRvb2xzIHBhY2thZ2UgZm9yIGxvYWRpbmcKKyAgICB0aGUgbWljcm9jb2RlLgorCisgIE1vZHVsZSBzbmQtc3VuLWFtZDc5MzAgKG9uIHNwYXJjIG9ubHkpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEFNRDc5MzAgc291bmQgY2hpcHMgZm91bmQgb24gU3BhcmNzLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgTW9kdWxlIHNuZC1zdW4tY3M0MjMxIChvbiBzcGFyYyBvbmx5KQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIENTNDIzMSBzb3VuZCBjaGlwcyBmb3VuZCBvbiBTcGFyY3MuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICBNb2R1bGUgc25kLXdhdmVmcm9udAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBUdXJ0bGUgQmVhY2ggTWF1aSwgVHJvcGV6IGFuZCBUcm9wZXorIHNvdW5kIGNhcmRzLgorCisgICAgY3M0MjMyX3BjbV9wb3J0IC0gUG9ydCAjIGZvciBDUzQyMzIgUENNIGludGVyZmFjZS4KKyAgICBjczQyMzJfcGNtX2lycSAgLSBJUlEgIyBmb3IgQ1M0MjMyIFBDTSBpbnRlcmZhY2UgKDUsNyw5LDExLDEyLDE1KS4KKyAgICBjczQyMzJfbXB1X3BvcnQgLSBQb3J0ICMgZm9yIENTNDIzMiBNUFUtNDAxIGludGVyZmFjZS4KKyAgICBjczQyMzJfbXB1X2lycSAgLSBJUlEgIyBmb3IgQ1M0MjMyIE1QVS00MDEgaW50ZXJmYWNlICg5LDExLDEyLDE1KS4KKyAgICB1c2VfY3M0MjMyX21pZGkgLSBVc2UgQ1M0MjMyIE1QVS00MDEgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgKGluYWNjZXNzaWJseSBsb2NhdGVkIGluc2lkZSB5b3VyIGNvbXB1dGVyKQorICAgIGljczIxMTVfcG9ydCAgICAtIFBvcnQgIyBmb3IgSUNTMjExNQorICAgIGljczIxMTVfaXJxICAgICAtIElSUSAjIGZvciBJQ1MyMTE1CisgICAgZm1fcG9ydCAgICAgICAgIC0gRk0gT1BMLTMgUG9ydCAjCisgICAgZG1hMSAgICAgICAgICAgIC0gRE1BMSAjIGZvciBDUzQyMzIgUENNIGludGVyZmFjZS4KKyAgICBkbWEyICAgICAgICAgICAgLSBETUEyICMgZm9yIENTNDIzMiBQQ00gaW50ZXJmYWNlLgorICAgIGlzYXBucCAgICAgICAgICAtIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgSVNBIFBuUC4KKworICBNb2R1bGUgc25kLXNvbmljdmliZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFMzIFNvbmljVmliZXMgUENJIHNvdW5kIGNhcmRzLgorCQkJKiBQSU5FIFNjaHViZXJ0IDMyIFBDSQorCisgICAgcmV2ZXJiICAgIC0gUmV2ZXJiIEVuYWJsZSAtIDEgPSBlbmFibGUsIDAgPSBkaXNhYmxlIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgLSBTb3VuZENhcmQgbXVzdCBoYXZlIG9uYm9hcmQgU1JBTSBmb3IgdGhpcy4KKyAgICBtZ2UgICAgICAgLSBNaWMgR2FpbiBFbmFibGUgLSAxID0gZW5hYmxlLCAwID0gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICAKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorCisgIE1vZHVsZSBzbmQtc2VyaWFsLXUxNjU1MAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVUFSVDE2NTUwQSBzZXJpYWwgTUlESSBwb3J0cy4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIFVBUlQxNjU1MEEgY2hpcAorICAgIGlycQkJLSBJUlEgIyBmb3IgVUFSVDE2NTUwQSBjaGlwLCAtMSA9IHBvbGwgbW9kZQorICAgIHNwZWVkCS0gc3BlZWQgaW4gYmF1ZHMgKDk2MDAsMTkyMDAsMzg0MDAsNTc2MDAsMTE1MjAwKQorCQkgIDM4NDAwID0gZGVmYXVsdAorICAgIGJhc2UJLSBiYXNlIGZvciBkaXZpc29yIGluIGJhdWRzICg1NzYwMCwxMTUyMDAsMjMwNDAwLDQ2MDgwMCkKKwkJICAxMTUyMDAgPSBkZWZhdWx0CisgICAgb3V0cwktIG51bWJlciBvZiBNSURJIHBvcnRzIGluIGEgc2VyaWFsIHBvcnQgKDEtNCkKKwkJICAxID0gZGVmYXVsdAorICAgIGFkYXB0b3IJLSBUeXBlIG9mIGFkYXB0b3IuCisgICAgICAgICAgICAgICAgICAwID0gU291bmRjYW52YXMsIDEgPSBNUy0xMjRULCAyID0gTVMtMTI0VyBTL0EsCisJCSAgMyA9IE1TLTEyNFcgTS9CLCA0ID0gR2VuZXJpYworICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGF1dG9wcm9iZQorICAgIHRodXMgdGhlIG1haW4gcG9ydCBtdXN0IGJlIHNwZWNpZmllZCEhISBPdGhlciBvcHRpb25zIGFyZSBvcHRpb25hbC4KKworICBNb2R1bGUgc25kLXRyaWRlbnQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFRyaWRlbnQgNERXYXZlIERYL05YIHNvdW5kIGNhcmRzLgorCQkJKiBCZXN0IFVuaW9uICBNaXNzIE1lbG9keSA0RFdhdmUgUENJCisJCQkqIEhJUyAgNERXYXZlIFBDSQorCQkJKiBXYXJwc3BlZWQgIE9OU3BlZWQgNERXYXZlIFBDSQorCQkJKiBBelRlY2ggIFBDSSA2NC1RM0QKKwkJCSogQWRkb25pY3MgIFNWIDc1MAorCQkJKiBDSElDICBUcnVlIFNvdW5kIDREd2F2ZQorCQkJKiBTaGFyayAgUHJlZGF0b3I0RC1QQ0kKKwkJCSogSmF0b24gIFNvbmljV2F2ZSA0RAorCisgICAgcGNtX2NoYW5uZWxzICAgLSBtYXggY2hhbm5lbHMgKHZvaWNlcykgcmVzZXJ2ZWQgZm9yIFBDTQorICAgIHdhdmV0YWJsZV9zaXplIC0gbWF4IHdhdmV0YWJsZSBzaXplIGluIGtCICg0LT9rYikKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCisKKyAgTW9kdWxlIHNuZC11c2ItYXVkaW8KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVVNCIGF1ZGlvIGFuZCBVU0IgTUlESSBkZXZpY2VzLgorCisgICAgdmlkICAgICAgICAgICAgIC0gVmVuZG9yIElEIGZvciB0aGUgZGV2aWNlIChvcHRpb25hbCkKKyAgICBwaWQgICAgICAgICAgICAgLSBQcm9kdWN0IElEIGZvciB0aGUgZGV2aWNlIChvcHRpb25hbCkKKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMsIGF1dG9wcm9iZSBhbmQgaG90cGx1Z2dpbmcuCisKKyAgTW9kdWxlIHNuZC11c2ItdXN4MnkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVGFzY2FtIFVTQiBVUy0xMjIsIFVTLTIyNCBhbmQgVVMtNDI4IGRldmljZXMuCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBhdXRvcHJvYmUgYW5kIGhvdHBsdWdnaW5nLgorCisgICAgTm90ZTogeW91IG5lZWQgdG8gbG9hZCB0aGUgZmlybXdhcmUgdmlhIHVzeDJ5bG9hZGVyIHV0aWxpdHkgaW5jbHVkZWQKKyAgICAgICAgICBpbiBhbHNhLXRvb2xzIGFuZCBhbHNhLWZpcm13YXJlIHBhY2thZ2VzLgorCisgIE1vZHVsZSBzbmQtdmlhODJ4eAorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQUMnOTcgbW90aGVyYm9hcmRzIGJhc2VkIG9uIFZJQSA4MkM2ODZBLzY4NkIsIDgyMzMsCisgICAgODIzM0EsIDgyMzNDLCA4MjM1IChzb3V0aCkgYnJpZGdlLgorCisgICAgbXB1X3BvcnQJLSAweDMwMCwweDMxMCwweDMyMCwweDMzMCwgb3RoZXJ3aXNlIG9idGFpbiBCSU9TIHNldHVwCisJCSAgW1ZJQTY4NkEvNjg2QiBvbmx5XQorICAgIGpveXN0aWNrCS0gRW5hYmxlIGpveXN0aWNrIChkZWZhdWx0IG9mZikgW1ZJQTY4NkEvNjg2QiBvbmx5XQorICAgIGFjOTdfY2xvY2sJLSBBQyc5NyBjb2RlYyBjbG9jayBiYXNlIChkZWZhdWx0IDQ4MDAwSHopCisgICAgZHhzX3N1cHBvcnQJLSBzdXBwb3J0IERYUyBjaGFubmVscywKKwkJICAwID0gYXV0byAoZGVmYWx1dCksIDEgPSBlbmFibGUsIDIgPSBkaXNhYmxlLAorCQkgIDMgPSA0OGsgb25seSwgNCA9IG5vIFZSQQorCQkgIFtWSUE4MjMzL0MsODIzNSBvbmx5XQorICAgIGFjOTdfcXVpcmsgIC0gQUMnOTcgd29ya2Fyb3VuZCBmb3Igc3RyYW5nZSBoYXJkd2FyZQorICAgICAgICAgICAgICAgICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlbDh4MCBtb2R1bGUgZm9yIGRldGFpbHMuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBidXMtbWFzdGVyIGNoaXBzIChtYXggOCkuCisKKyAgICBOb3RlOiBvbiBzb21lIFNNUCBtb3RoZXJib2FyZHMgbGlrZSBNU0kgNjk0RCB0aGUgaW50ZXJydXB0cyBtaWdodAorICAgICAgICAgIG5vdCBiZSBnZW5lcmF0ZWQgcHJvcGVybHkuICBJbiBzdWNoIGEgY2FzZSwgcGxlYXNlIHRyeSB0bworICAgICAgICAgIHNldCB0aGUgU01QIChvciBNUFMpIHZlcnNpb24gb24gQklPUyB0byAxLjEgaW5zdGVhZCBvZgorICAgICAgICAgIGRlZmF1bHQgdmFsdWUgMS40LiAgVGhlbiB0aGUgaW50ZXJydXB0IG51bWJlciB3aWxsIGJlCisgICAgICAgICAgYXNzaWduZWQgdW5kZXIgMTUuIFlvdSBtaWdodCBhbHNvIHVwZ3JhZGUgeW91ciBCSU9TLgorICAgIAorICAgIE5vdGU6IFZJQTgyMzMvNSAobm90IFZJQTgyMzNBKSBjYW4gc3VwcG9ydCBEWFMgKGRpcmVjdCBzb3VuZCkKKwkgIGNoYW5uZWxzIGFzIHRoZSBmaXJzdCBQQ00uICBPbiB0aGVzZSBjaGFubmVscywgdXAgdG8gNAorCSAgc3RyZWFtcyBjYW4gYmUgcGxheWVkIGF0IHRoZSBzYW1lIHRpbWUuCisJICBBcyBkZWZhdWx0IChkeHNfc3VwcG9ydCA9IDApLCA0OGsgZml4ZWQgcmF0ZSBpcyBjaG9zZW4KKwkgIGV4Y2VwdCBmb3IgdGhlIGtub3duIGRldmljZXMgc2luY2UgdGhlIG91dHB1dCBpcyBvZnRlbgorCSAgbm9pc3kgZXhjZXB0IGZvciA0OGsgb24gc29tZSBtb3RoZXIgYm9hcmRzIGR1ZSB0byB0aGUKKwkgIGJ1ZyBvZiBCSU9TLgorCSAgUGxlYXNlIHRyeSBvbmNlIGR4c19zdXBwb3J0PTEgYW5kIGlmIGl0IHdvcmtzIG9uIG90aGVyCisJICBzYW1wbGUgcmF0ZXMgKGUuZy4gNDQuMWtIeiBvZiBtcDMgcGxheWJhY2spLCBwbGVhc2UgbGV0IHVzCisJICBrbm93IHRoZSBQQ0kgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2UgaWQncyAob3V0cHV0IG9mCisJICAibHNwY2kgLW52IikuCisJICBJZiBpdCBkb2Vzbid0IHdvcmssIHRyeSBkeHNfc3VwcG9ydD00LiAgSWYgaXQgc3RpbGwgZG9lc24ndAorCSAgd29yayBhbmQgdGhlIGRlZmF1bHQgc2V0dGluZyBpcyBvaywgZHhzX3N1cHBvcnQ9MyBpcyB0aGUKKwkgIHJpZ2h0IGNob2ljZS4gIElmIHRoZSBkZWZhdWx0IHNldHRpbmcgZG9lc24ndCB3b3JrIGF0IGFsbCwKKwkgIHRyeSBkeHNfc3VwcG9ydD0yIHRvIGRpc2FibGUgdGhlIERYUyBjaGFubmVscy4KKwkgIEluIGFueSBjYXNlcywgcGxlYXNlIGxldCB1cyBrbm93IHRoZSByZXN1bHQgYW5kIHRoZQorCSAgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2UgaWRzLgorCisgICAgTm90ZTogZm9yIHRoZSBNUFU0MDEgb24gVklBODIzeCwgdXNlIHNuZC1tcHU0MDEgZHJpdmVyCisJICBhZGRpdG9uYWxseS4gIFRoZSBtcHVfcG9ydCBvcHRpb24gaXMgZm9yIFZJQTY4NiBjaGlwcyBvbmx5LgorCisgIE1vZHVsZSBzbmQtdmlhODJ4eC1tb2RlbQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVklBODJ4eCBBQzk3IG1vZGVtCisKKyAgICBhYzk3X2Nsb2NrCS0gQUMnOTcgY29kZWMgY2xvY2sgYmFzZSAoZGVmYXVsdCA0ODAwMEh6KQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgICBOb3RlOiBUaGUgZGVmYXVsdCBpbmRleCB2YWx1ZSBvZiB0aGlzIG1vZHVsZSBpcyAtMiwgaS5lLiB0aGUgZmlyc3QKKyAgICAgICAgICBzbG90IGlzIGV4Y2x1ZGVkLgorCisgIE1vZHVsZSBzbmQtdmlybWlkaQorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgdmlydHVhbCByYXdtaWRpIGRldmljZXMuCisgICAgVGhpcyBtb2R1bGUgY3JlYXRlcyB2aXJ0dWFsIHJhd21pZGkgZGV2aWNlcyB3aGljaCBjb21tdW5pY2F0ZQorICAgIHRvIHRoZSBjb3JyZXNwb25kaW5nIEFMU0Egc2VxdWVuY2VyIHBvcnRzLgorCisgICAgbWlkaV9kZXZzCS0gTUlESSBkZXZpY2VzICMgKDEtOCwgZGVmYXVsdD00KQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgIE1vZHVsZSBzbmQtdngyMjIKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBEaWdpZ3JhbSBWWC1Qb2NrZXQgVlgyMjIsIFYyMjIgdjIgYW5kIE1pYyBjYXJkcy4KKworICAgIG1pYwkJLSBFbmFibGUgTWljcm9waG9uZSBvbiBWMjIyIE1pYyAoTllJKQorICAgIGlibAkJLSBDYXB0dXJlIElCTCBzaXplLiAoZGVmYXVsdCA9IDAsIG1pbmltdW0gc2l6ZSkKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgICAgV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGFuZCB0aGUgaG90cGx1ZyBmaXJtd2FyZQorICAgIGlzIHN1cHBvcnRlZCwgdGhlIGZpcm13YXJlIGRhdGEgaXMgbG9hZGVkIHZpYSBob3RwbHVnIGF1dG9tYXRpY2FsbHkuCisgICAgSW5zdGFsbCB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGZpbGVzIGluIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KKyAgICBXaGVuIG5vIGhvdHBsdWcgZncgbG9hZGVyIGlzIGF2YWlsYWJsZSwgeW91IG5lZWQgdG8gbG9hZCB0aGUKKyAgICBmaXJtd2FyZSB2aWEgdnhsb2FkZXIgdXRpbGl0eSBpbiBhbHNhLXRvb2xzIHBhY2thZ2UuICBUbyBpbnZva2UKKyAgICB2eGxvYWRlciBhdXRvbWF0aWNhbGx5LCBhZGQgdGhlIGZvbGxvd2luZyB0byAvZXRjL21vZHByb2JlLmNvbmYKKworCWluc3RhbGwgc25kLXZ4MjIyIC9zYmluL21vZHByb2JlIC0tZmlyc3QtdGltZSAtaSBzbmQtdngyMjIgJiYgL3Vzci9iaW4vdnhsb2FkZXIKKworICAgIChmb3IgMi4yLzIuNCBrZXJuZWxzLCBhZGQgInBvc3QtaW5zdGFsbCAvdXNyL2Jpbi92eGxvYWRlciIgdG8KKyAgICAgL2V0Yy9tb2R1bGVzLmNvbmYsIGluc3RlYWQuKQorICAgIElCTCBzaXplIGRlZmluZXMgdGhlIGludGVycnVwdHMgcGVyaW9kIGZvciBQQ00uICBUaGUgc21hbGxlciBzaXplCisgICAgZ2l2ZXMgc21hbGxlciBsYXRlbmN5IGJ1dCBsZWFkcyB0byBtb3JlIENQVSBjb25zdW1wdGlvbiwgdG9vLgorICAgIFRoZSBzaXplIGlzIHVzdWFsbHkgYWxpZ25lZCB0byAxMjYuICBBcyBkZWZhdWx0ICg9MCksIHRoZSBzbWFsbGVzdAorICAgIHNpemUgaXMgY2hvc2VuLiAgVGhlIHBvc3NpYmxlIElCTCB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluCisgICAgL3Byb2MvYXNvdW5kL2NhcmRYL3Z4LXN0YXR1cyBwcm9jIGZpbGUuCisKKyAgTW9kdWxlIHNuZC12eHBvY2tldAorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIERpZ2lncmFtIFZYLVBvY2tldCBWWDIgUENNQ0lBIGNhcmQuCisKKyAgICBpYmwgICAgICAtIENhcHR1cmUgSUJMIHNpemUuIChkZWZhdWx0ID0gMCwgbWluaW11bSBzaXplKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuICBUaGUgbW9kdWxlIGlzIGNvbXBpbGVkIG9ubHkgd2hlbgorICAgIFBDTUNJQSBpcyBzdXBwb3J0ZWQgb24ga2VybmVsLgorCisgICAgVG8gYWN0aXZhdGUgdGhlIGRyaXZlciB2aWEgdGhlIGNhcmQgbWFuYWdlciwgeW91J2xsIG5lZWQgdG8gc2V0CisgICAgdXAgL2V0Yy9wY21jaWEvdnhwb2NrZXQuY29uZi4gIFNlZSB0aGUgc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMuCisKKyAgICBXaGVuIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUgYW5kIHRoZSBob3RwbHVnIGZpcm13YXJlCisgICAgaXMgc3VwcG9ydGVkLCB0aGUgZmlybXdhcmUgZGF0YSBpcyBsb2FkZWQgdmlhIGhvdHBsdWcgYXV0b21hdGljYWxseS4KKyAgICBJbnN0YWxsIHRoZSBuZWNlc3NhcnkgZmlybXdhcmUgZmlsZXMgaW4gYWxzYS1maXJtd2FyZSBwYWNrYWdlLgorICAgIFdoZW4gbm8gaG90cGx1ZyBmdyBsb2FkZXIgaXMgYXZhaWxhYmxlLCB5b3UgbmVlZCB0byBsb2FkIHRoZQorICAgIGZpcm13YXJlIHZpYSB2eGxvYWRlciB1dGlsaXR5IGluIGFsc2EtdG9vbHMgcGFja2FnZS4KKworICAgIEFib3V0IGNhcHR1cmUgSUJMLCBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHNuZC12eDIyMiBtb2R1bGUuCisKKyAgICBOb3RlOiB0aGUgZHJpdmVyIGlzIGJ1aWxkIG9ubHkgd2hlbiBDT05GSUdfSVNBIGlzIHNldC4KKyAgICAKKyAgTW9kdWxlIHNuZC12eHA0NDAKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRGlnaWdyYW0gVlgtUG9ja2V0IDQ0MCBQQ01DSUEgY2FyZC4KKworICAgIGlibCAgICAgIC0gQ2FwdHVyZSBJQkwgc2l6ZS4gKGRlZmF1bHQgPSAwLCBtaW5pbXVtIHNpemUpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4gIFRoZSBtb2R1bGUgaXMgY29tcGlsZWQgb25seSB3aGVuCisgICAgUENNQ0lBIGlzIHN1cHBvcnRlZCBvbiBrZXJuZWwuCisKKyAgICBUbyBhY3RpdmF0ZSB0aGUgZHJpdmVyIHZpYSB0aGUgY2FyZCBtYW5hZ2VyLCB5b3UnbGwgbmVlZCB0byBzZXQKKyAgICB1cCAvZXRjL3BjbWNpYS92eHA0NDAuY29uZi4gIFNlZSB0aGUgc291bmQvcGNtY2lhL3Z4L3Z4cDQ0MC5jLgorCisgICAgV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGFuZCB0aGUgaG90cGx1ZyBmaXJtd2FyZQorICAgIGlzIHN1cHBvcnRlZCwgdGhlIGZpcm13YXJlIGRhdGEgaXMgbG9hZGVkIHZpYSBob3RwbHVnIGF1dG9tYXRpY2FsbHkuCisgICAgSW5zdGFsbCB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGZpbGVzIGluIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KKyAgICBXaGVuIG5vIGhvdHBsdWcgZncgbG9hZGVyIGlzIGF2YWlsYWJsZSwgeW91IG5lZWQgdG8gbG9hZCB0aGUKKyAgICBmaXJtd2FyZSB2aWEgdnhsb2FkZXIgdXRpbGl0eSBpbiBhbHNhLXRvb2xzIHBhY2thZ2UuCisKKyAgICBBYm91dCBjYXB0dXJlIElCTCwgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBzbmQtdngyMjIgbW9kdWxlLgorCisgICAgTm90ZTogdGhlIGRyaXZlciBpcyBidWlsZCBvbmx5IHdoZW4gQ09ORklHX0lTQSBpcyBzZXQuCisgICAgCisgIE1vZHVsZSBzbmQteW1mcGNpCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFlhbWFoYSBQQ0kgY2hpcHMgKFlNRjcyeCwgWU1GNzR4ICYgWU1GNzV4KS4KKworICAgIG1wdV9wb3J0ICAgICAgLSAweDMwMCwweDMzMCwweDMzMiwweDMzNCwgMCAoZGlzYWJsZSkgYnkgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgMSAoYXV0by1kZXRlY3QgZm9yIFlNRjc0NC83NTQgb25seSkKKyAgICBmbV9wb3J0ICAgICAgIC0gMHgzODgsMHgzOTgsMHgzYTAsMHgzYTgsIDAgKGRpc2FibGUpIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgMSAoYXV0by1kZXRlY3QgZm9yIFlNRjc0NC83NTQgb25seSkKKyAgICBqb3lzdGlja19wb3J0IC0gMHgyMDEsMHgyMDIsMHgyMDQsMHgyMDUsIDAgKGRpc2FibGUpIGJ5IGRlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgIDEgKGF1dG8tZGV0ZWN0KQorICAgIHJlYXJfc3dpdGNoICAgLSBlbmFibGUgc2hhcmVkIHJlYXIvbGluZS1pbiBzd2l0Y2ggKGJvb2wpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjaGlwcyAobWF4IDgpLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtcGRhdWRpb2NmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFNvdW5kIENvcmUgUERBdWRpb0NGIHNvdW5kIGNhcmQuCisKKyAgICBOb3RlOiB0aGUgZHJpdmVyIGlzIGJ1aWxkIG9ubHkgd2hlbiBDT05GSUdfSVNBIGlzIHNldC4KKworCitDb25maWd1cmluZyBOb24tSVNBUE5QIENhcmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIHdpdGggSVNBLVBuUCBzdXBwb3J0LCB0aGUgbW9kdWxlcworc3VwcG9ydGluZyB0aGUgaXNhcG5wIGNhcmRzIHdpbGwgaGF2ZSBtb2R1bGUgb3B0aW9ucyAiaXNhcG5wIi4KK0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgKm9ubHkqIHRoZSBJU0EtUG5QIGRldmljZXMgd2lsbCBiZSBwcm9iZWQuCitGb3IgcHJvYmluZyB0aGUgbm9uIElTQS1QblAgY2FyZHMsIHlvdSBoYXZlIHRvIHBhc3MgImlzYXBucD0wIiBvcHRpb24KK3RvZ2V0aGVyIHdpdGggdGhlIHByb3BlciBpL28gYW5kIGlycSBjb25maWd1cmF0aW9uLgorCitXaGVuIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZCB3aXRob3V0IElTQS1QblAgc3VwcG9ydCwgaXNhcG5wIG9wdGlvbgord2lsbCBiZSBub3QgYnVpbHQgaW4uCisKKworTW9kdWxlIEF1dG9sb2FkaW5nIFN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBBTFNBIGRyaXZlcnMgY2FuIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5IG9uIGRlbWFuZCBieSBkZWZpbmluZworbW9kdWxlIGFsaWFzZXMuICBUaGUgc3RyaW5nICdzbmQtY2FyZC0lMScgaXMgcmVxdWVzdGVkIGZvciBBTFNBIG5hdGl2ZQorZGV2aWNlcyB3aGVyZSAlaSBpcyBzb3VuZCBjYXJkIG51bWJlciBmcm9tIHplcm8gdG8gc2V2ZW4uCisKK1RvIGF1dG8tbG9hZCBhbiBBTFNBIGRyaXZlciBmb3IgT1NTIHNlcnZpY2VzLCBkZWZpbmUgdGhlIHN0cmluZworJ3NvdW5kLXNsb3QtJWknIHdoZXJlICVpIG1lYW5zIHRoZSBzbG90IG51bWJlciBmb3IgT1NTLCB3aGljaAorY29ycmVzcG9uZHMgdG8gdGhlIGNhcmQgaW5kZXggb2YgQUxTQS4gIFVzdWFsbHksIGRlZmluZSB0aGlzCithcyB0aGUgdGhlIHNhbWUgY2FyZCBtb2R1bGUuCisKK0FuIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgYSBzaW5nbGUgZW11MTBrMSBjYXJkIGlzIGxpa2UgYmVsb3c6CistLS0tLSAvZXRjL21vZHByb2JlLmNvbmYKK2FsaWFzIHNuZC1jYXJkLTAgc25kLWVtdTEwazEKK2FsaWFzIHNvdW5kLXNsb3QtMCBzbmQtZW11MTBrMQorLS0tLS0gL2V0Yy9tb2Rwcm9iZS5jb25mCisKK1RoZSBhdmFpbGFibGUgbnVtYmVyIG9mIGF1dG8tbG9hZGVkIHNvdW5kIGNhcmRzIGRlcGVuZHMgb24gdGhlIG1vZHVsZQorb3B0aW9uICJjYXJkc19saW1pdCIgb2Ygc25kIG1vZHVsZS4gIEFzIGRlZmF1bHQgaXQncyBzZXQgdG8gMS4KK1RvIGVuYWJsZSB0aGUgYXV0by1sb2FkaW5nIG9mIG11bHRpcGxlIGNhcmRzLCBzcGVjaWZ5IHRoZSBudW1iZXIgb2YKK3NvdW5kIGNhcmRzIGluIHRoYXQgb3B0aW9uLgorCitXaGVuIG11bHRpcGxlIGNhcmRzIGFyZSBhdmFpbGFibGUsIGl0J2QgYmV0dGVyIHRvIHNwZWNpZnkgdGhlIGluZGV4CitudW1iZXIgZm9yIGVhY2ggY2FyZCB2aWEgbW9kdWxlIG9wdGlvbiwgdG9vLCBzbyB0aGF0IHRoZSBvcmRlciBvZgorY2FyZHMgaXMga2VwdCBjb25zaXN0ZW50LgorCitBbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZm9yIHR3byBzb3VuZCBjYXJkcyBpcyBsaWtlIGJlbG93OgorCistLS0tLSAvZXRjL21vZHByb2JlLmNvbmYKKyMgQUxTQSBwb3J0aW9uCitvcHRpb25zIHNuZCBjYXJkc19saW1pdD0yCithbGlhcyBzbmQtY2FyZC0wIHNuZC1pbnRlcndhdmUKK2FsaWFzIHNuZC1jYXJkLTEgc25kLWVuczEzNzEKK29wdGlvbnMgc25kLWludGVyd2F2ZSBpbmRleD0wCitvcHRpb25zIHNuZC1lbnMxMzcxIGluZGV4PTEKKyMgT1NTL0ZyZWUgcG9ydGlvbgorYWxpYXMgc291bmQtc2xvdC0wIHNuZC1pbnRlcndhdmUKK2FsaWFzIHNvdW5kLXNsb3QtMSBzbmQtZW5zMTM3MQorLS0tLS0gL2V0Yy9tb3Byb2JlLmNvbmYKKworSW4gdGhpcyBleGFtcGxlLCB0aGUgaW50ZXJ3YXZlIGNhcmQgaXMgYWx3YXlzIGxvYWRlZCBhcyB0aGUgZmlyc3QgY2FyZAorKGluZGV4IDApIGFuZCBlbnMxMzcxIGFzIHRoZSBzZWNvbmQgKGluZGV4IDEpLgorCisKK0FMU0EgUENNIGRldmljZXMgdG8gT1NTIGRldmljZXMgbWFwcGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy9kZXYvc25kL3BjbUMwRDBbY3xwXSAgLT4gL2Rldi9hdWRpbzAgKC9kZXYvYXVkaW8pIC0+IG1pbm9yIDQKKy9kZXYvc25kL3BjbUMwRDBbY3xwXSAgLT4gL2Rldi9kc3AwICgvZGV2L2RzcCkgICAgIC0+IG1pbm9yIDMKKy9kZXYvc25kL3BjbUMwRDFbY3xwXSAgLT4gL2Rldi9hZHNwMCAoL2Rldi9hZHNwKSAgIC0+IG1pbm9yIDEyCisvZGV2L3NuZC9wY21DMUQwW2N8cF0gIC0+IC9kZXYvYXVkaW8xICAgICAgICAgICAgICAtPiBtaW5vciA0KzE2ID0gMjAKKy9kZXYvc25kL3BjbUMxRDBbY3xwXSAgLT4gL2Rldi9kc3AxICAgICAgICAgICAgICAgIC0+IG1pbm9yIDMrMTYgPSAxOQorL2Rldi9zbmQvcGNtQzFEMVtjfHBdICAtPiAvZGV2L2Fkc3AxICAgICAgICAgICAgICAgLT4gbWlub3IgMTIrMTYgPSAyOAorL2Rldi9zbmQvcGNtQzJEMFtjfHBdICAtPiAvZGV2L2F1ZGlvMiAgICAgICAgICAgICAgLT4gbWlub3IgNCszMiA9IDM2CisvZGV2L3NuZC9wY21DMkQwW2N8cF0gIC0+IC9kZXYvZHNwMiAgICAgICAgICAgICAgICAtPiBtaW5vciAzKzMyID0gMzkKKy9kZXYvc25kL3BjbUMyRDFbY3xwXSAgLT4gL2Rldi9hZHNwMiAgICAgICAgICAgICAgIC0+IG1pbm9yIDEyKzMyID0gNDQKKworVGhlIGZpcnN0IG51bWJlciBmcm9tIC9kZXYvc25kL3BjbUN7WH1Ee1l9W2N8cF0gZXhwcmVzc2lvbiBtZWFucworc291bmQgY2FyZCBudW1iZXIgYW5kIHNlY29uZCBtZWFucyBkZXZpY2UgbnVtYmVyLiAgVGhlIEFMU0EgZGV2aWNlcworaGF2ZSBlaXRoZXIgJ2MnIG9yICdwJyBzdWZmaXggaW5kaWNhdGluZyB0aGUgZGlyZWN0aW9uLCBjYXB0dXJlIGFuZAorcGxheWJhY2ssIHJlc3BlY3RpdmVseS4KKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgZGV2aWNlIG1hcHBpbmcgYWJvdmUgbWF5IGJlIHZhcmllZCB2aWEgdGhlIG1vZHVsZQorb3B0aW9ucyBvZiBzbmQtcGNtLW9zcyBtb2R1bGUuCisKKworREVWRlMgc3VwcG9ydAorPT09PT09PT09PT09PQorCitUaGUgQUxTQSBkcml2ZXIgZnVsbHkgc3VwcG9ydHMgdGhlIGRldmZzIGV4dGVuc2lvbi4KK1lvdSBzaG91bGQgYWRkIGxpbmVzIGJlbG93IHRvIHlvdXIgZGV2ZnNkLmNvbmYgZmlsZToKKworTE9PS1VQIHNuZCBNT0RMT0FEIEFDVElPTiBzbmQKK1JFR0lTVEVSIF5zb3VuZC8uKiBQRVJNSVNTSU9OUyByb290LmF1ZGlvIDY2MAorUkVHSVNURVIgXnNuZC8uKiBQRVJNSVNTSU9OUyByb290LmF1ZGlvIDY2MAorCitXYXJuaW5nOiBUaGVzZSBsaW5lcyBhc3N1bWUgdGhhdCB5b3UgaGF2ZSB0aGUgYXVkaW8gZ3JvdXAgaW4geW91ciBzeXN0ZW0uCisgICAgICAgICBPdGhlcndpc2UgcmVwbGFjZSBhdWRpbyB3b3JkIHdpdGggYW5vdGhlciBncm91cCBuYW1lIChyb290IGZvcgorICAgICAgICAgZXhhbXBsZSkuCisKKworUHJvYyBpbnRlcmZhY2VzICgvcHJvYy9hc291bmQpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworL3Byb2MvYXNvdW5kL2NhcmQjL3BjbSNbY3BdL29zcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTdHJpbmcgImVyYXNlIiAtIGVyYXNlIGFsbCBhZGRpdGlvbmFsIGluZm9ybWF0aW9ucyBhYm91dCBPU1MgYXBwbGljYXRpb25zCisgIFN0cmluZyAiPGFwcF9uYW1lPiA8ZnJhZ21lbnRzPiA8ZnJhZ21lbnRfc2l6ZT4gWzxvcHRpb25zPl0iCisKKyAgIDxhcHBfbmFtZT4gLSBuYW1lIG9mIGFwcGxpY2F0aW9uIHdpdGggKGhpZ2hlciBwcmlvcml0eSkgb3Igd2l0aG91dCBwYXRoCisgICA8ZnJhZ21lbnRzPiAtIG51bWJlciBvZiBmcmFnbWVudHMgb3IgemVybyBpZiBhdXRvCisgICA8ZnJhZ21lbnRfc2l6ZT4gLSBzaXplIG9mIGZyYWdtZW50IGluIGJ5dGVzIG9yIHplcm8gaWYgYXV0bworICAgPG9wdGlvbnM+IC0gb3B0aW9uYWwgcGFyYW1ldGVycworCSAgLSBkaXNhYmxlICAgdGhlIGFwcGxpY2F0aW9uIHRyaWVzIHRvIG9wZW4gYSBwY20gZGV2aWNlIGZvcgorCQkgICAgICB0aGlzIGNoYW5uZWwgYnV0IGRvZXMgbm90IHdhbnQgdG8gdXNlIGl0LgorCQkgICAgICAoQ2F1c2UgYSBidWcgb3IgbW1hcCBuZWVkcykKKwkJICAgICAgSXQncyBnb29kIGZvciBRdWFrZSBldGMuLi4KKwkgIC0gZGlyZWN0ICAgIGRvbid0IHVzZSBwbHVnaW5zCisJICAtIGJsb2NrICAgICBmb3JjZSBibG9jayBtb2RlIChydnBsYXllcikKKwkgIC0gbm9uLWJsb2NrIGZvcmNlIG5vbi1ibG9jayBtb2RlCisJICAtIHdob2xlLWZyYWcgIHdyaXRlIG9ubHkgd2hvbGUgZnJhZ21lbnRzIChvcHRpbWl6YXRpb24gYWZmZWN0aW5nCisJCQlwbGF5YmFjayBvbmx5KQorCSAgLSBuby1zaWxlbmNlICBkbyBub3QgZmlsbCBzaWxlbmNlIGFoZWFkIHRvIGF2b2lkIGNsaWNrcworCisgIEV4YW1wbGU6IGVjaG8gIngxMWFtcCAxMjggMTYzODQiID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL29zcworICAgICAgICAgICBlY2hvICJzcXVha2UgMCAwIGRpc2FibGUiID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBjL29zcworCSAgIGVjaG8gInJ2cGxheWVyIDAgMCBibG9jayIgPiAvcHJvYy9hc291bmQvY2FyZDAvcGNtMHAvb3NzCisKKworTGlua3MKKz09PT09CisKKyAgQUxTQSBwcm9qZWN0IGhvbWVwYWdlCisgICAgICAgaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BdWRpZ3ktbWl4ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0F1ZGlneS1taXhlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzMmZkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BdWRpZ3ktbWl4ZXIudHh0CkBAIC0wLDAgKzEsMzQ1IEBACisKKwkJU291bmQgQmxhc3RlciBBdWRpZ3kgbWl4ZXIgLyBkZWZhdWx0IERTUCBjb2RlCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBiYXNlZCBvbiBTQi1MaXZlLW1peGVyLnR4dC4KKworVGhlIEVNVTEwSzIgY2hpcHMgaGF2ZSBhIERTUCBwYXJ0IHdoaWNoIGNhbiBiZSBwcm9ncmFtbWVkIHRvIHN1cHBvcnQgCit2YXJpb3VzIHdheXMgb2Ygc2FtcGxlIHByb2Nlc3NpbmcsIHdoaWNoIGlzIGRlc2NyaWJlZCBoZXJlLgorKFRoaXMgYWN0aWNsZSBkb2VzIG5vdCBkZWFsIHdpdGggdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgCitFTVUxMEsyIGNoaXBzLiBTZWUgdGhlIG1hbnVhbHMgc2VjdGlvbiBmb3IgZnVydGhlciBkZXRhaWxzLikKKworVGhlIEFMU0EgZHJpdmVyIHByb2dyYW1zIHRoaXMgcG9ydGlvbiBvZiBjaGlwIGJ5IGRlZmF1bHQgY29kZQorKGNhbiBiZSBhbHRlcmVkIGxhdGVyKSB3aGljaCBvZmZlcnMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXR5OgorCisKKzEpIERpZ2l0YWwgbWl4ZXIgY29udHJvbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY29udHJvbHMgYXJlIGJ1aWx0IHVzaW5nIHRoZSBEU1AgaW5zdHJ1Y3Rpb25zLiBUaGV5IG9mZmVyIGV4dGVuZGVkCitmdW5jdGlvbmFsaXR5LiBPbmx5IHRoZSBkZWZhdWx0IGJ1aWxkLWluIGNvZGUgaW4gdGhlIEFMU0EgZHJpdmVyIGlzIGRlc2NyaWJlZAoraGVyZS4gTm90ZSB0aGF0IHRoZSBjb250cm9scyB3b3JrIGFzIGF0dGVudWF0b3JzOiB0aGUgbWF4aW11bSB2YWx1ZSBpcyB0aGUgCituZXV0cmFsIHBvc2l0aW9uIGxlYXZpbmcgdGhlIHNpZ25hbCB1bmNoYW5nZWQuIE5vdGUgdGhhdCBpZiB0aGUgIHNhbWUgZGVzdGluYXRpb24gCitpcyBtZW50aW9uZWQgaW4gbXVsdGlwbGUgY29udHJvbHMsIHRoZSBzaWduYWwgaXMgYWNjdW11bGF0ZWQgYW5kIGNhbiBiZSB3cmFwcGVkIAorKHNldCB0byBtYXhpbWFsIG9yIG1pbmltYWwgdmFsdWUgd2l0aG91dCBjaGVja2luZyBvZiBvdmVyZmxvdykuCisKKworRXhwbGFuYXRpb24gb2YgdXNlZCBhYmJyZXZpYXRpb25zOgorCitEQUMgICAgLSBkaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0ZXIKK0FEQyAgICAtIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcgorSTJTICAgIC0gb25lLXdheSB0aHJlZSB3aXJlIHNlcmlhbCBidXMgZm9yIGRpZ2l0YWwgc291bmQgYnkgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICAgICAgICAgKHRoaXMgc3RhbmRhcmQgaXMgdXNlZCBmb3IgY29ubmVjdGluZyBzdGFuZGFsb25lIERBQyBhbmQgQURDIGNvbnZlcnRlcnMpCitMRkUgICAgLSBsb3cgZnJlcXVlbmN5IGVmZmVjdHMgKHN1Yndvb2ZlciBzaWduYWwpCitBQzk3ICAgLSBhIGNoaXAgY29udGFpbmluZyBhbiBhbmFsb2cgbWl4ZXIsIERBQyBhbmQgQURDIGNvbnZlcnRlcnMKK0lFQzk1OCAtIFMvUERJRgorRlgtYnVzIC0gdGhlIEVNVTEwSzIgY2hpcCBoYXMgYW4gZWZmZWN0IGJ1cyBjb250YWluaW5nIDY0IGFjY3VtdWxhdG9ycy4KKyAgICAgICAgIEVhY2ggb2YgdGhlIHN5bnRoZXNpemVyIHZvaWNlcyBjYW4gZmVlZCBpdHMgb3V0cHV0IHRvIHRoZXNlIGFjY3VtdWxhdG9ycworICAgICAgICAgYW5kIHRoZSBEU1AgbWljcm9jb250cm9sbGVyIGNhbiBvcGVyYXRlIHdpdGggdGhlIHJlc3VsdGluZyBzdW0uCisKK25hbWU9J1BDTSBGcm9udCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IGZyb250IFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyA4IGFuZCA5IGZvciBsZWZ0IGFuZCByaWdodCBmcm9udCBQQ00gCitzYW1wbGVzIGZvciA1LjEgcGxheWJhY2suIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIAorc2xvdHMgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdQQ00gU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBzdXJyb3VuZCBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMiBhbmQgMyBmb3IgbGVmdCBhbmQgcmlnaHQgc3Vycm91bmQgUENNIAorc2FtcGxlcyBmb3IgNS4xIHBsYXliYWNrLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgc3Vycm91bmQgREFDIFBDTSAKK3Nsb3RzIG9mIHRoZSBQaGlsaXBzIERBQy4KKworbmFtZT0nUENNIENlbnRlciBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGNlbnRlciBQQ00gRlgtYnVzIGFjY3VtdWxhdG9yLgorQUxTQSB1c2VzIGFjY3VtdWxhdG9yIDYgZm9yIGNlbnRlciBQQ00gc2FtcGxlIGZvciA1LjEgcGxheWJhY2suIFRoZSByZXN1bHQgc2FtcGxlCitpcyBmb3J3YXJkZWQgdG8gdGhlIGNlbnRlciBEQUMgUENNIHNsb3Qgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdQQ00gTEZFIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlIGZvciBMRkUgUENNIEZYLWJ1cyBhY2N1bXVsYXRvci4gCitBTFNBIHVzZXMgYWNjdW11bGF0b3IgNyBmb3IgTEZFIFBDTSBzYW1wbGUgZm9yIDUuMSBwbGF5YmFjay4gVGhlIHJlc3VsdCBzYW1wbGUgCitpcyBmb3J3YXJkZWQgdG8gdGhlIExGRSBEQUMgUENNIHNsb3Qgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdQQ00gUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNIHNhbXBsZXMgZm9yCitzdGVyZW8gcGxheWJhY2suIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzIAorb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdQQ00gQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTSBGWC1idXMKK2FjY3VtdWxhdG9yLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDAgYW5kIDEgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTS4KK1RoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCitQQ00gZGV2aWNlKS4KKworbmFtZT0nTXVzaWMgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBNSURJIEZYLWJ1cworYWNjdW11bGF0b3JzLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDQgYW5kIDUgZm9yIGxlZnQgYW5kIHJpZ2h0IE1JREkgc2FtcGxlcy4KK1RoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzIG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdNdXNpYyBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorCitUaGVzZSBjb250cm9scyBhcmUgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBGWC1idXMKK2FjY3VtdWxhdG9yLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDQgYW5kIDUgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTS4KK1RoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCitQQ00gZGV2aWNlKS4KKworbmFtZT0nTWljIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgTWljIGlucHV0LgorRm9yIE1pYyBpbnB1dCBpcyB1c2VkIEFDOTcgY29kZWMuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIAordGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIFBoaWxpcHMgREFDLiBTYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gTWljCitjYXB0dXJlIEZJRk8gKGRldmljZSAxIC0gMTZiaXQvOEtIeiBtb25vKSB0b28gd2l0aG91dCB2b2x1bWUgY29udHJvbC4KKworbmFtZT0nTWljIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBNaWMgaW5wdXQuCitUaGUgcmVzdWx0IGlzIGZvcndhcmRlZCB0byB0aGUgQURDIGNhcHR1cmUgRklGTyAodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZQorUENNIGRldmljZSkuCisKK25hbWU9J0F1ZGlneSBDRCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggVFRMCitkaWdpdGFsIGlucHV0cyAodXN1YWxseSB1c2VkIGJ5IGEgQ0RST00gZHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlCitmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdBdWRpZ3kgQ0QgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggVFRMCitkaWdpdGFsIGlucHV0cyAodXN1YWxseSB1c2VkIGJ5IGEgQ0RST00gZHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlCitmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0lFQzk1OCBPcHRpY2FsIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBvcHRpY2FsCitkaWdpdGFsIGlucHV0LiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cworb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdJRUM5NTggT3B0aWNhbCBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBvcHRpY2FsCitkaWdpdGFsIGlucHV0cy4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8KKyh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlIFBDTSBkZXZpY2UpLgorCituYW1lPSdMaW5lMiBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJMlMgQURDCitpbnB1dHMgKG9uIHRoZSBBdWRpZ3lEcml2ZSkuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udAorREFDIFBDTSBzbG90cyBvZiB0aGUgUGhpbGlwcyBEQUMuCisKK25hbWU9J0xpbmUyIENhcHR1cmUgVm9sdW1lJyxpbmRleD0xCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIChvbiB0aGUgQXVkaWd5RHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDCitjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0FuYWxvZyBNaXggUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIGZyb20gUGhpbGlwcyBBREMuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udAorREFDIFBDTSBzbG90cyBvZiB0aGUgUGhpbGlwcyBEQUMuIFRoaXMgY29udGFpbnMgbWl4IGZyb20gYW5hbG9nIHNvdXJjZXMKK2xpa2UgQ0QsIExpbmUgSW4sIEF1eCwgLi4uLgorCituYW1lPSdBbmFsb2cgTWl4IENhcHR1cmUgVm9sdW1lJyxpbmRleD0xCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIFBoaWxpcHMgQURDLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDCitjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0F1eDIgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIChvbiB0aGUgQXVkaWd5RHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQKK0RBQyBQQ00gc2xvdHMgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdBdXgyIENhcHR1cmUgVm9sdW1lJyxpbmRleD0xCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIChvbiB0aGUgQXVkaWd5RHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDCitjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0Zyb250IFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitBbGwgc3RlcmVvIHNpZ25hbHMgYXJlIG1peGVkIHRvZ2V0aGVyIGFuZCBtaXJyb3JlZCB0byBzdXJyb3VuZCwgY2VudGVyIGFuZCBMRkUuCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgZnJvbnQgc3BlYWtlcnMgb2YKK3RoaXMgbWl4LgorCituYW1lPSdTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworQWxsIHN0ZXJlbyBzaWduYWxzIGFyZSBtaXhlZCB0b2dldGhlciBhbmQgbWlycm9yZWQgdG8gc3Vycm91bmQsIGNlbnRlciBhbmQgTEZFLgorVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHN1cnJvdW5kIHNwZWFrZXJzIG9mCit0aGlzIG1peC4KKworbmFtZT0nQ2VudGVyIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitBbGwgc3RlcmVvIHNpZ25hbHMgYXJlIG1peGVkIHRvZ2V0aGVyIGFuZCBtaXJyb3JlZCB0byBzdXJyb3VuZCwgY2VudGVyIGFuZCBMRkUuCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlIGZvciBjZW50ZXIgc3BlYWtlciBvZiB0aGlzIG1peC4KKworbmFtZT0nTEZFIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitBbGwgc3RlcmVvIHNpZ25hbHMgYXJlIG1peGVkIHRvZ2V0aGVyIGFuZCBtaXJyb3JlZCB0byBzdXJyb3VuZCwgY2VudGVyIGFuZCBMRkUuCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlIGZvciBMRkUgc3BlYWtlciBvZiB0aGlzIG1peC4KKworbmFtZT0nVG9uZSBDb250cm9sIC0gU3dpdGNoJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCB0dXJucyB0aGUgdG9uZSBjb250cm9sIG9uIG9yIG9mZi4gVGhlIHNhbXBsZXMgZm9yIGZyb250LCByZWFyCithbmQgY2VudGVyIC8gTEZFIG91dHB1dHMgYXJlIGFmZmVjdGVkLgorCituYW1lPSdUb25lIENvbnRyb2wgLSBCYXNzJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBzZXRzIHRoZSBiYXNzIGludGVuc2l0eS4gVGhlcmUgaXMgbm8gbmV1dHJhbCB2YWx1ZSEhCitXaGVuIHRoZSB0b25lIGNvbnRyb2wgY29kZSBpcyBhY3RpdmF0ZWQsIHRoZSBzYW1wbGVzIGFyZSBhbHdheXMgbW9kaWZpZWQuCitUaGUgY2xvc2VzdCB2YWx1ZSB0byBwdXJlIHNpZ25hbCBpcyAyMC4KKworbmFtZT0nVG9uZSBDb250cm9sIC0gVHJlYmxlJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBzZXRzIHRoZSB0cmVibGUgaW50ZW5zaXR5LiBUaGVyZSBpcyBubyBuZXV0cmFsIHZhbHVlISEKK1doZW4gdGhlIHRvbmUgY29udHJvbCBjb2RlIGlzIGFjdGl2YXRlZCwgdGhlIHNhbXBsZXMgYXJlIGFsd2F5cyBtb2RpZmllZC4KK1RoZSBjbG9zZXN0IHZhbHVlIHRvIHB1cmUgc2lnbmFsIGlzIDIwLgorCituYW1lPSdNYXN0ZXIgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBmcm9udCwgc3Vycm91bmQsIGNlbnRlciBhbmQgCitMRkUgb3V0cHV0cy4KKworbmFtZT0nSUVDOTU4IE9wdGljYWwgUmF3IFBsYXliYWNrIFN3aXRjaCcsaW5kZXg9MAorCitJZiB0aGlzIHN3aXRjaCBpcyBvbiwgdGhlbiB0aGUgc2FtcGxlcyBmb3IgdGhlIElFQzk1OCAoUy9QRElGKSBkaWdpdGFsCitvdXRwdXQgYXJlIHRha2VuIG9ubHkgZnJvbSB0aGUgcmF3IEZYODAxMCBQQ00sIG90aGVyd2lzZSBzdGFuZGFyZCBmcm9udAorUENNIHNhbXBsZXMgYXJlIHRha2VuLgorCisKKzIpIFBDTSBzdHJlYW0gcmVsYXRlZCBjb250cm9scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK25hbWU9J0VNVTEwSzEgUENNIFZvbHVtZScsaW5kZXggMC0zMQorCitDaGFubmVsIHZvbHVtZSBhdHRlbnVhdGlvbiBpbiByYW5nZSAwLTB4ZmZmZi4gVGhlIG1heGltdW0gdmFsdWUgKG5vCithdHRlbnVhdGlvbikgaXMgZGVmYXVsdC4gVGhlIGNoYW5uZWwgbWFwcGluZyBmb3IgdGhyZWUgdmFsdWVzIGlzCithcyBmb2xsb3dzOgorCisJMCAtIG1vbm8sIGRlZmF1bHQgMHhmZmZmIChubyBhdHRlbnVhdGlvbikKKwkxIC0gbGVmdCwgZGVmYXVsdCAweGZmZmYgKG5vIGF0dGVudWF0aW9uKQorCTIgLSByaWdodCwgZGVmYXVsdCAweGZmZmYgKG5vIGF0dGVudWF0aW9uKQorCituYW1lPSdFTVUxMEsxIFBDTSBTZW5kIFJvdXRpbmcnLGluZGV4IDAtMzEKKworVGhpcyBjb250cm9sIHNwZWNpZmllcyB0aGUgZGVzdGluYXRpb24gLSBGWC1idXMgYWNjdW11bGF0b3JzLiBUaGVyZSAyNAordmFsdWVzIHdpdGggdGhpcyBtYXBwaW5nOgorCisJIDAgLSAgbW9ubywgQSBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkgMSAtICBtb25vLCBCIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMQorCSAyIC0gIG1vbm8sIEMgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAyCisJIDMgLSAgbW9ubywgRCBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDMKKwkgNCAtICBtb25vLCBFIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCSA1IC0gIG1vbm8sIEYgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJIDYgLSAgbW9ubywgRyBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkgNyAtICBtb25vLCBIIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCSA4IC0gIGxlZnQsIEEgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJIDkgLSAgbGVmdCwgQiBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDEKKwkxMCAtICBsZWZ0LCBDIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMgorCTExIC0gIGxlZnQsIEQgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAzCisJMTIgLSAgbGVmdCwgRSBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkxMyAtICBsZWZ0LCBGIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCTE0IC0gIGxlZnQsIEcgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJMTUgLSAgbGVmdCwgSCBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkxNiAtIHJpZ2h0LCBBIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCTE3IC0gcmlnaHQsIEIgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAxCisJMTggLSByaWdodCwgQyBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDIKKwkxOSAtIHJpZ2h0LCBEIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMworCTIwIC0gcmlnaHQsIEUgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJMjEgLSByaWdodCwgRiBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkyMiAtIHJpZ2h0LCBHIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCTIzIC0gcmlnaHQsIEggZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisKK0Rvbid0IGZvcmdldCB0aGF0IGl0J3MgaWxsZWdhbCB0byBhc3NpZ24gYSBjaGFubmVsIHRvIHRoZSBzYW1lIEZYLWJ1cyBhY2N1bXVsYXRvciAKK21vcmUgdGhhbiBvbmNlIChpdCBtZWFucyAwPTAgJiYgMT0wIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24pLgorIAorbmFtZT0nRU1VMTBLMSBQQ00gU2VuZCBWb2x1bWUnLGluZGV4IDAtMzEKKworSXQgc3BlY2lmaWVzIHRoZSBhdHRlbnVhdGlvbiAoYW1vdW50KSBmb3IgZ2l2ZW4gZGVzdGluYXRpb24gaW4gcmFuZ2UgMC0yNTUuCitUaGUgY2hhbm5lbCBtYXBwaW5nIGlzIGZvbGxvd2luZzoKKworCSAwIC0gIG1vbm8sIEEgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAyNTUgKG5vIGF0dGVudWF0aW9uKQorCSAxIC0gIG1vbm8sIEIgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAyNTUgKG5vIGF0dGVudWF0aW9uKQorCSAyIC0gIG1vbm8sIEMgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSAzIC0gIG1vbm8sIEQgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSA0IC0gIG1vbm8sIEUgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSA1IC0gIG1vbm8sIEYgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSA2IC0gIG1vbm8sIEcgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSA3IC0gIG1vbm8sIEggZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSA4IC0gIGxlZnQsIEEgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAyNTUgKG5vIGF0dGVudWF0aW9uKQorCSA5IC0gIGxlZnQsIEIgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTEwIC0gIGxlZnQsIEMgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTExIC0gIGxlZnQsIEQgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTEyIC0gIGxlZnQsIEUgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTEzIC0gIGxlZnQsIEYgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTE0IC0gIGxlZnQsIEcgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTE1IC0gIGxlZnQsIEggZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTE2IC0gcmlnaHQsIEEgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTE3IC0gcmlnaHQsIEIgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAyNTUgKG5vIGF0dGVudWF0aW9uKQorCTE4IC0gcmlnaHQsIEMgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTE5IC0gcmlnaHQsIEQgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTIwIC0gcmlnaHQsIEUgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTIxIC0gcmlnaHQsIEYgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTIyIC0gcmlnaHQsIEcgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTIzIC0gcmlnaHQsIEggZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCisKKworNCkgTUFOVUFMUy9QQVRFTlRTOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdHA6Ly9vcGVuc291cmNlLmNyZWF0aXZlLmNvbS9wdWIvZG9jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgRmlsZXM6CisgICAgICAgIExNNDU0NS5wZGYgICAgICBBQzk3IENvZGVjCisKKyAgICAgICAgbTIwNDkucGRmICAgICAgIFRoZSBFTVUxMEsxIERpZ2l0YWwgQXVkaW8gUHJvY2Vzc29yCisKKyAgICAgICAgaG9nNjMucHMgICAgICAgIEZYODAxMCAtIEEgRFNQIENoaXAgQXJjaGl0ZWN0dXJlIGZvciBBdWRpbyBFZmZlY3RzCisKKworV0lQTyBQYXRlbnRzCistLS0tLS0tLS0tLS0KKyAgICAgICAgUGF0ZW50IG51bWJlcnM6CisgICAgICAgIFdPIDk5MDE4MTMgKEExKSBBdWRpbyBFZmZlY3RzIFByb2Nlc3NvciB3aXRoIG11bHRpcGxlIGFzeW5jaHJvbm91cyAoSmFuLiAxNCwgMTk5OSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbXMKKworICAgICAgICBXTyA5OTAxODE0IChBMSkgUHJvY2Vzc29yIHdpdGggSW5zdHJ1Y3Rpb24gU2V0IGZvciBBdWRpbyBFZmZlY3RzIChKYW4uIDE0LCAxOTk5KQorCisgICAgICAgIFdPIDk5MDE5NTMgKEExKSBBdWRpbyBFZmZlY3RzIFByb2Nlc3NvciBoYXZpbmcgRGVjb3VwbGVkIEluc3RydWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb24gYW5kIEF1ZGlvIERhdGEgU2VxdWVuY2luZyAoSmFuLiAxNCwgMTk5OSkKKworCitVUyBQYXRlbnRzIChodHRwOi8vd3d3LnVzcHRvLmdvdi8pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVVMgNTkyNTg0MSAgICAgIERpZ2l0YWwgU2FtcGxpbmcgSW5zdHJ1bWVudCBlbXBsb3lpbmcgY2FjaGUgbWVtb3J5IChKdWwuIDIwLCAxOTk5KQorCisgICAgICAgIFVTIDU5MjgzNDIgICAgICBBdWRpbyBFZmZlY3RzIFByb2Nlc3NvciBpbnRlZ3JhdGVkIG9uIGEgc2luZ2xlIGNoaXAgKEp1bC4gMjcsIDE5OTkpCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgbXVsdGlwb3J0IG1lbW9yeSBvbnRvIHdoaWNoIG11bHRpcGxlIGFzeW5jaHJvbm91cworICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRhbCBzb3VuZCBzYW1wbGVzIGNhbiBiZSBjb25jdXJyZW50bHkgbG9hZGVkCisKKyAgICAgICAgVVMgNTkzMDE1OCAgICAgIFByb2Nlc3NvciB3aXRoIEluc3RydWN0aW9uIFNldCBmb3IgQXVkaW8gRWZmZWN0cyAoSnVsLiAyNywgMTk5OSkKKworICAgICAgICBVUyA2MDMyMjM1ICAgICAgTWVtb3J5IGluaXRpYWxpemF0aW9uIGNpcmN1aXQgKFRyYW0pIChGZWIuIDI5LCAyMDAwKQorCisgICAgICAgIFVTIDYxMzgyMDcgICAgICBJbnRlcnBvbGF0aW9uIGxvb3Bpbmcgb2YgYXVkaW8gc2FtcGxlcyBpbiBjYWNoZSBjb25uZWN0ZWQgdG8gICAgKE9jdC4gMjQsIDIwMDApCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYnVzIHdpdGggcHJpb3JpdGl6YXRpb24gYW5kIG1vZGlmaWNhdGlvbiBvZiBidXMgdHJhbnNmZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBpbiBhY2NvcmRhbmNlIHdpdGggbG9vcCBlbmRzIGFuZCBtaW5pbXVtIGJsb2NrIHNpemVzCisKKyAgICAgICAgVVMgNjE1MTY3MCAgICAgIE1ldGhvZCBmb3IgY29uc2VydmluZyBtZW1vcnkgc3RvcmFnZSB1c2luZyBhIChOb3YuIDIxLCAyMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCBvZiAgc2hvcnQgdGVybSBtZW1vcnkgcmVnaXN0ZXJzCisKKyAgICAgICAgVVMgNjE5NTcxNSAgICAgIEludGVycnVwdCBjb250cm9sIGZvciBtdWx0aXBsZSBwcm9ncmFtcyBjb21tdW5pY2F0aW5nIHdpdGggICAgICAoRmViLiAyNywgMjAwMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgY29tbW9uIGludGVycnVwdCBieSBhc3NvY2lhdGluZyBwcm9ncmFtcyB0byBHUCByZWdpc3RlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmluZyBpbnRlcnJ1cHQgcmVnaXN0ZXIsIHBvbGxpbmcgR1AgcmVnaXN0ZXJzLCBhbmQgaW52b2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrIHJvdXRpbmUgYXNzb2NpYXRlZCB3aXRoIGRlZmluZWQgaW50ZXJydXB0IHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQnQ4N3gudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0J0ODd4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWVkYjJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0J0ODd4LnR4dApAQCAtMCwwICsxLDc4IEBACitJbnRybworPT09PT0KKworWW91IG1pZ2h0IGhhdmUgbm90aWNlZCB0aGF0IHRoZSBidDg3OCBncmFiYmVyIGNhcmRzIGhhdmUgYWN0dWFsbHkKK190d29fIFBDSSBmdW5jdGlvbnM6CisKKyQgbHNwY2kKK1sgLi4uIF0KKzAwOjBhLjAgTXVsdGltZWRpYSB2aWRlbyBjb250cm9sbGVyOiBCcm9va3RyZWUgQ29ycG9yYXRpb24gQnQ4NzggKHJldiAwMikKKzAwOjBhLjEgTXVsdGltZWRpYSBjb250cm9sbGVyOiBCcm9va3RyZWUgQ29ycG9yYXRpb24gQnQ4NzggKHJldiAwMikKK1sgLi4uIF0KKworVGhlIGZpcnN0IGRvZXMgdmlkZW8sIGl0IGlzIGJhY2t3YXJkIGNvbXBhdGlibGUgdG8gdGhlIGJ0ODQ4LiAgVGhlIHNlY29uZAorZG9lcyBhdWRpby4gIHNuZC1idDg3eCBpcyBhIGRyaXZlciBmb3IgdGhlIHNlY29uZCBmdW5jdGlvbi4gIEl0J3MgYSBzb3VuZAorZHJpdmVyIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZWNvcmRpbmcgc291bmQgKGFuZCBfb25seV8gcmVjb3JkaW5nLCBubworcGxheWJhY2spLiAgQXMgbW9zdCBUViBjYXJkcyBjb21lIHdpdGggYSBzaG9ydCBjYWJsZSB3aGljaCBjYW4gYmUgcGx1Z2dlZAoraW50byB5b3VyIHNvdW5kIGNhcmQncyBsaW5lLWluIHlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMgZHJpdmVyIGlmIGFsbAoreW91IHdhbnQgdG8gZG8gaXMganVzdCB3YXRjaGluZyBUVi4uLgorCitTb21lIGNhcmRzIGRvIG5vdCBib3RoZXIgdG8gY29ubmVjdCBhbnl0aGluZyB0byB0aGUgYXVkaW8gaW5wdXQgcGlucyBvZgordGhlIGNoaXAsIGFuZCBzb21lIG90aGVyIGNhcmRzIHVzZSB0aGUgYXVkaW8gZnVuY3Rpb24gdG8gdHJhbnNwb3J0IE1QRUcKK3ZpZGVvIGRhdGEsIHNvIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCBhdWRpbyByZWNvcmRpbmcgbWF5IG5vdCB3b3JrCit3aXRoIHlvdXIgY2FyZC4KKworCitEcml2ZXIgU3RhdHVzCis9PT09PT09PT09PT09CisKK1RoZSBkcml2ZXIgaXMgbm93IHN0YWJsZS4gIEhvd2V2ZXIsIGl0IGRvZXNuJ3Qga25vdyBhYm91dCBtYW55IFRWIGNhcmRzLAorYW5kIGl0IHJlZnVzZXMgdG8gbG9hZCBmb3IgY2FyZHMgaXQgZG9lc24ndCBrbm93LgorCitJZiB0aGUgZHJpdmVyIGNvbXBsYWlucyAoIlVua25vd24gVFYgY2FyZCBmb3VuZCwgdGhlIGF1ZGlvIGRyaXZlciB3aWxsCitub3QgbG9hZCIpLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGxvYWRfYWxsPTEgb3B0aW9uIHRvIGZvcmNlIHRoZSBkcml2ZXIgdG8KK3RyeSB0byB1c2UgdGhlIGF1ZGlvIGNhcHR1cmUgZnVuY3Rpb24gb2YgeW91ciBjYXJkLiAgSWYgdGhlIGZyZXF1ZW5jeSBvZgorcmVjb3JkZWQgZGF0YSBpcyBub3QgcmlnaHQsIHRyeSB0byBzcGVjaWZ5IHRoZSBkaWdpdGFsX3JhdGUgb3B0aW9uIHdpdGgKK290aGVyIHZhbHVlcyB0aGFuIHRoZSBkZWZhdWx0IDMyMDAwIChvZnRlbiBpdCdzIDQ0MTAwIG9yIDY0MDAwKS4KKworSWYgeW91IGhhdmUgYW4gdW5rbm93biBjYXJkLCBwbGVhc2UgbWFpbCB0aGUgSUQgYW5kIGJvYXJkIG5hbWUgdG8KKzxhbHNhLWRldmVsQGxpc3RzLnNmLm5ldD4sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhdWRpbyBjYXB0dXJlIHdvcmtzIG9yCitub3QsIHNvIHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyIGtub3cgYWJvdXQgeW91ciBjYXJkLgorCisKK0F1ZGlvIG1vZGVzCis9PT09PT09PT09PQorCitUaGUgY2hpcCBrbm93cyB0d28gZGlmZmVyZW50IG1vZGVzIChkaWdpdGFsL2FuYWxvZykuICBzbmQtYnQ4N3gKK3JlZ2lzdGVycyB0d28gUENNIGRldmljZXMsIG9uZSBmb3IgZWFjaCBtb2RlLiAgVGhleSBjYW5ub3QgYmUgdXNlZCBhdAordGhlIHNhbWUgdGltZS4KKworCitEaWdpdGFsIGF1ZGlvIG1vZGUKKz09PT09PT09PT09PT09PT09PQorCitUaGUgZmlyc3QgZGV2aWNlIChodzpYLDApIGdpdmVzIHlvdSAxNiBiaXQgc3RlcmVvIHNvdW5kLiAgVGhlIHNhbXBsZQorcmF0ZSBkZXBlbmRzIG9uIHRoZSBleHRlcm5hbCBzb3VyY2Ugd2hpY2ggZmVlZHMgdGhlIEJ0ODd4IHdpdGggZGlnaXRhbAorc291bmQgdmlhIEkyUyBpbnRlcmZhY2UuCisKKworQW5hbG9nIGF1ZGlvIG1vZGUgKEEvRCkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzZWNvbmQgZGV2aWNlIChodzpYLDEpIGdpdmVzIHlvdSA4IG9yIDE2IGJpdCBtb25vIHNvdW5kLiAgU3VwcG9ydGVkCitzYW1wbGUgcmF0ZXMgYXJlIGJldHdlZW4gMTE5NDY2IGFuZCA0NDgwMDAgSHogKHllcywgdGhlc2UgbnVtYmVycyBhcmUKK3RoYXQgaGlnaCkuICBJZiB5b3UndmUgc2V0IHRoZSBDT05GSUdfU05EX0JUODdYX09WRVJDTE9DSyBvcHRpb24sIHRoZQorbWF4aW11bSBzYW1wbGUgcmF0ZSBpcyAxNzkyMDAwIEh6LCBidXQgYXVkaW8gZGF0YSBiZWNvbWVzIHVudXNhYmxlCitiZXlvbmQgODk2MDAwIEh6IG9uIG15IGNhcmQuCisKK1RoZSBjaGlwIGhhcyB0aHJlZSBhbmFsb2cgaW5wdXRzLiAgQ29uc2VxdWVudGx5IHlvdSdsbCBnZXQgYSBtaXhlcgorZGV2aWNlIHRvIGNvbnRyb2wgdGhlc2UuCisKKworSGF2ZSBmdW4sCisKKyAgQ2xlbWVucworCisKK1dyaXR0ZW4gYnkgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CitiaWcgcGFydHMgY29waWVkIGZyb20gYnRhdWRpby50eHQgYnkgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NNSVBDSS50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQ01JUENJLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTdkZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NNSVBDSS50eHQKQEAgLTAsMCArMSwyNDIgQEAKKyAgICAgICAgICAgICAgQnJpZWYgTm90ZXMgb24gQy1NZWRpYSA4NzM4LzgzMzggRHJpdmVyCisgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorCisKK0Zyb250L1JlYXIgTXVsdGktY2hhbm5lbCBQbGF5YmFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NNOHgzOCBjaGlwIGNhbiB1c2UgQURDIGFzIHRoZSBzZWNvbmQgREFDIHNvIHRoYXQgdHdvIGRpZmZlcmVudCBzdGVyZW8KK2NoYW5uZWxzIGNhbiBiZSB1c2VkIGZvciBmcm9udC9yZWFyIHBsYXliYWNrcy4gIFNpbmNlIHRoZXJlIGFyZSB0d28KK0RBQ3MsIGJvdGggc3RyZWFtcyBhcmUgaGFuZGxlZCBpbmRlcGVuZGVudGx5IHVubGlrZSB0aGUgNC82Y2ggbXVsdGktCitjaGFubmVsIHBsYXliYWNrcyBpbiB0aGUgc2VjdGlvbiBiZWxvdy4KKworQXMgZGVmYXVsdCwgQUxTQSBkcml2ZXIgYXNzaWducyB0aGUgZmlyc3QgUENNIGRldmljZSAoaS5lLiBodzowLDAgZm9yCitjYXJkIzApIGZvciBmcm9udCBhbmQgNC82Y2ggcGxheWJhY2tzLCB3aGlsZSB0aGUgc2Vjb25kIFBDTSBkZXZpY2UKKyhodzowLDEpIGlzIGFzc2lnbmVkIHRvIHRoZSBzZWNvbmQgREFDIGZvciByZWFyIHBsYXliYWNrLgorCitUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gREFDcy4KKworLSBUaGUgZmlyc3QgREFDIHN1cHBvcnRzIFU4IGFuZCBTMTZMRSBmb3JtYXRzLCB3aGlsZSB0aGUgc2Vjb25kIERBQworICBzdXBwb3J0cyBvbmx5IFMxNkxFLgorLSBUaGUgc2Vjb25kZSBEQUMgc3VwcG9ydHMgb25seSB0d28gY2hhbm5lbCBzdGVyZW8uCisKK1BsZWFzZSBub3RlIHRoYXQgdGhlIENNOHgzOCBEQUMgZG9lc24ndCBzdXBwb3J0IGNvbnRpbnVvdXMgcGxheWJhY2sKK3JhdGUgYnV0IG9ubHkgZml4ZWQgcmF0ZXM6IDU1MTIsIDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDMyMDAwLAorNDQxMDAgYW5kIDQ4MDAwIEh6LgorCitUaGUgcmVhciBvdXRwdXQgY2FuIGJlIGhlYXJkIG9ubHkgd2hlbiAiRm91ciBDaGFubmVsIE1vZGUiIHN3aXRjaCBpcworZGlzYWJsZWQuICBPdGhlcndpc2Ugbm8gc2lnbmFsIHdpbGwgYmUgcm91dGVkIHRvIHRoZSByZWFyIHNwZWFrZXJzLgorQXMgZGVmYXVsdCBpdCdzIHR1cm5lZCBvbi4KKworKioqIFdBUk5JTkcgKioqCitXaGVuICJGb3VyIENoYW5uZWwgTW9kZSIgc3dpdGNoIGlzIG9mZiwgdGhlIG91dHB1dCBmcm9tIHJlYXIgc3BlYWtlcnMKK3dpbGwgYmUgRlVMTCBWT0xVTUUgcmVnYXJkbGVzcyBvZiBNYXN0ZXIgYW5kIFBDTSB2b2x1bWVzLgorVGhpcyBtaWdodCBkYW1hZ2UgeW91ciBhdWRpbyBlcXVpcG1lbnQuICBQbGVhc2UgZGlzY29ubmVjdCBzcGVha2VycworYmVmb3JlIHlvdXIgdHVybiBvZmYgdGhpcyBzd2l0Y2guCisqKiogV0FSTklORyAqKioKKworWyBXZWxsLi4gSSBvbmNlIGdvdCB0aGUgb3V0cHV0IHdpdGggY29ycmVjdCB2b2x1bWUgKGkuZS4gc2FtZSB3aXRoIHRoZQorICBmcm9udCBvbmUpIGFuZCB3YXMgc28gZXhjaXRlZC4gIEl0IHdhcyBldmVuIHdpdGggIkZvdXIgQ2hhbm5lbCIgYml0CisgIG9uIGFuZCAiZG91YmxlIERBQyIgbW9kZS4gIEFjdHVhbGx5IEkgY291bGQgaGVhciBzZXBhcmF0ZSA0IGNoYW5uZWxzCisgIGZyb20gZnJvbnQgYW5kIHJlYXIgc3BlYWtlcnMhICBCdXQuLiBhZnRlciByZWJvb3QsIGFsbCB3YXMgZ29uZS4KKyAgSXQncyBhIHZlcnkgcGl0eSB0aGF0IEkgZGlkbid0IHNhdmUgdGhlIHJlZ2lzdGVyIGR1bXAgYXQgdGhhdAorICB0aW1lLi4gIE1heWJlIHRoZXJlIGlzIGFuIHVua25vd24gcmVnaXN0ZXIgdG8gYWNoaWV2ZSB0aGlzLi4uIF0KKworSWYgeW91ciBjYXJkIGhhcyBhbiBleHRyYSBvdXRwdXQgamFjayBmb3IgdGhlIHJlYXIgb3V0cHV0LCB0aGUgcmVhcgorcGxheWJhY2sgc2hvdWxkIGJlIHJvdXRlZCB0aGVyZSBhcyBkZWZhdWx0LiAgSWYgbm90LCB0aGVyZSBpcyBhCitjb250cm9sIHN3aXRjaCBpbiB0aGUgZHJpdmVyICJMaW5lLUluIEFzIFJlYXIiLCB3aGljaCB5b3UgY2FuIGNoYW5nZQordmlhIGFsc2FtaXhlciBvciBzb21ld2hhdCBlbHNlLiAgV2hlbiB0aGlzIHN3aXRjaCBpcyBvbiwgbGluZS1pbiBqYWNrCitpcyB1c2VkIGFzIHJlYXIgb3V0cHV0LgorCitUaGVyZSBhcmUgdHdvIG1vcmUgY29udHJvbHMgcmVnYXJkaW5nIHRvIHRoZSByZWFyIG91dHB1dC4KK1RoZSAiRXhjaGFuZ2UgREFDIiBzd2l0Y2ggaXMgdXNlZCB0byBleGNoYW5nZSBmcm9udCBhbmQgcmVhciBwbGF5YmFjaworcm91dGVzLCBpLmUuIHRoZSAybmQgREFDIGlzIG91dHB1dCBmcm9tIGZyb250IG91dHB1dC4KKworCis0LzYgTXVsdGktQ2hhbm5lbCBQbGF5YmFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJlY2VudCBDTTg3MzggY2hpcHMgc3VwcG9ydCBmb3IgdGhlIDQvNiBtdWx0aS1jaGFubmVsIHBsYXliYWNrCitmdW5jdGlvbi4gIFRoaXMgaXMgdXNlZnVsIGVzcGVjaWFsbHkgZm9yIEFDMyBkZWNvZGluZy4KKworV2hlbiB0aGUgbXVsdGktY2hhbm5lbCBpcyBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgbmFtZSBoYXMgYSBzdWZmaXgKKyItTUMiIHN1Y2ggbGlrZSAiQ01JODczOC1NQzYiLiAgWW91IGNhbiBjaGVjayB0aGlzIG5hbWUgZnJvbQorL3Byb2MvYXNvdW5kL2NhcmRzLgorCitXaGVuIHRoZSA0LzYtY2ggb3V0cHV0IGlzIGVuYWJsZWQsIHRoZSBzZWNvbmQgREFDIGFjY2VwdHMgdXAgdG8gNiAob3IKKzQpIGNoYW5uZWxzLiAgV2hpbGUgdGhlIGR1YWwgREFDIHN1cHBvcnRzIHR3byBkaWZmZXJlbnQgcmF0ZXMgb3IKK2Zvcm1hdHMsIHRoZSA0LzYtY2ggcGxheWJhY2sgc3VwcG9ydHMgb25seSB0aGUgc2FtZSBjb25kaXRpb24gZm9yIGFsbAorY2hhbm5lbHMuICBTaW5jZSB0aGUgbXVsdGktY2hhbm5lbCBwbGF5YmFjayBtb2RlIHVzZXMgYm90aCBEQUNzLCB5b3UKK2Nhbm5vdCBvcGVyYXRlIHdpdGggZnVsbC1kdXBsZXguCisKK1RoZSA0LjAgYW5kIDUuMSBtb2RlcyBhcmUgZGVmaW5lZCBhcyB0aGUgcGNtICJzdXJyb3VuZDQwIiBhbmQgInN1cnJvdW5kNTEiCitpbiBhbHNhLWxpYi4gIEZvciBleGFtcGxlLCB5b3UgY2FuIHBsYXkgYSBXQVYgZmlsZSB3aXRoIDYgY2hhbm5lbHMgbGlrZQorCisJJSBhcGxheSAtRHN1cnJvdW5kNTEgc2l4Y2hhbm5lbHMud2F2CisKK0ZvciBwcm9ncmFtbWluIHRoZSA0LzYgY2hhbm5lbCBwbGF5YmFjaywgeW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgUENNCitjaGFubmVscyBhcyB5b3UgbGlrZSBhbmQgc2V0IHRoZSBmb3JtYXQgUzE2TEUuICBGb3IgZXhhbXBsZSwgZm9yIHBsYXliYWNrCit3aXRoIDQgY2hhbm5lbHMsCisKKwlzbmRfcGNtX2h3X3BhcmFtc19zZXRfYWNjZXNzKHBjbSwgaHcsIFNORF9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEKTsKKwkgICAgLy8gb3IgbW1hcCBpZiB5b3UgbGlrZQorCXNuZF9wY21faHdfcGFyYW1zX3NldF9mb3JtYXQocGNtLCBodywgU05EX1BDTV9GT1JNQVRfUzE2X0xFKTsKKwlzbmRfcGNtX2h3X3BhcmFtc19zZXRfY2hhbm5lbHMocGNtLCBodywgNCk7CisKK2FuZCB1c2UgdGhlIGludGVybGVhdmVkIDQgY2hhbm5lbCBkYXRhLgorCitUaGVyZSBhcmUgc29tZSBjb250cm9sIHN3aXRjaHMgYWZmZWN0aW5nIHRvIHRoZSBzcGVha2VyIGNvbm5lY3Rpb25zOgorCisiTGluZS1JbiBBcyBSZWFyIgktIEFzIG1lbnRpb25lZCBhYm92ZSwgdGhlIGxpbmUtaW4gamFjayBpcyB1c2VkCisJZm9yIHRoZSByZWFyICgzdGggYW5kIDR0aCBjaGFubmVscykgb3V0cHV0LgorIkxpbmUtSW4gQXMgQmFzcyIJLSBUaGUgbGluZS1pbiBqYWNrIGlzIHVzZWQgZm9yIHRoZSBiYXNzICg1dGgKKwlhbmQgNnRoIGNoYW5uZWxzKSBvdXRwdXQuCisiTWljIEFzIENlbnRlci9MRkUiCS0gVGhlIG1pYyBqYWNrIGlzIHVzZWQgZm9yIHRoZSBiYXNzIG91dHB1dC4KKwlJZiB0aGlzIHN3aXRjaCBpcyBvbiwgeW91IGNhbm5vdCB1c2UgYSBtaWNyb3Bob25lIGFzIGEgY2FwdHVyZQorCXNvdXJjZSwgb2YgY291cnNlLgorCisKK0RpZ2l0YWwgSS9PCistLS0tLS0tLS0tLQorCitUaGUgQ004eDM4IHByb3ZpZGVzIHRoZSBleGNlbGxlbnQgU1BESUYgY2FwYWJpbGl0eSB3aXRoIHZlcnkgY2hpcAorcHJpY2UgKHllcywgdGhhdCdzIHRoZSByZWFzb24gSSBib3VnaHQgdGhlIGNhcmQgOikKKworVGhlIFNQRElGIHBsYXliYWNrIGFuZCBjYXB0dXJlIGFyZSBkb25lIHZpYSB0aGUgdGhpcmQgUENNIGRldmljZQorKGh3OjAsMikuICBVc3VhbGx5IHRoaXMgaXMgYXNzaWduZWQgdG8gdGhlIFBDTSBkZXZpY2UgInNwZGlmIi4KK1RoZSBhdmFpbGFibGUgcmF0ZXMgYXJlIDQ0MTAwIGFuZCA0ODAwMCBIei4KK0ZvciBwbGF5YmFjayB3aXRoIGFwbGF5LCB5b3UgY2FuIHJ1biBsaWtlIGJlbG93OgorCisJJSBhcGxheSAtRGh3OjAsMiBmb28ud2F2CisKK29yCisKKwklIGFwbGF5IC1Ec3BkaWYgZm9vLndhdgorCisyNGJpdCBmb3JtYXQgaXMgYWxzbyBzdXBwb3J0ZWQgZXhwZXJpbWVudGFsbHkuCisKK1RoZSBwbGF5YmFjayBhbmQgY2FwdHVyZSBvdmVyIFNQRElGIHVzZSBub3JtYWwgREFDIGFuZCBBREMsCityZXNwZWN0aXZlbHksIHNvIHlvdSBjYW5ub3QgcGxheWJhY2sgYm90aCBhbmFsb2cgYW5kIGRpZ2l0YWwgc3RyZWFtcworc2ltdWx0YW5lb3VzbHkuCisKK1RvIGVuYWJsZSBTUERJRiBvdXRwdXQsIHlvdSBuZWVkIHRvIHR1cm4gb24gIklFQzk1OCBPdXRwdXQgU3dpdGNoIgorY29udHJvbCB2aWEgbWl4ZXIgb3IgYWxzYWN0bC4gIFRoZW4geW91J2xsIHNlZSB0aGUgcmVkIGxpZ2h0IG9uIGZyb20KK3RoZSBjYXJkIHNvIHlvdSBrbm93IHRoYXQncyB3b3JraW5nIG9idmlvdXNseSA6KQorVGhlIFNQRElGIGlucHV0IGlzIGFsd2F5cyBlbmFibGVkLCBzbyB5b3UgY2FuIGhlYXIgU1BESUYgaW5wdXQgZGF0YQorZnJvbSBsaW5lLW91dCB3aXRoICJJRUM5NTggSW4gTW9uaXRvciIgc3dpdGNoIGF0IGFueSB0aW1lIChzZWUKK2JlbG93KS4KKworWW91IGNhbiBwbGF5IHZpYSBTUERJRiBldmVuIHdpdGggdGhlIGZpcnN0IGRldmljZSAoaHc6MCwwKSwKK2J1dCBTUERJRiBpcyBlbmFibGVkIG9ubHkgd2hlbiB0aGUgcHJvcGVyIGZvcm1hdCAoUzE2TEUpLCBzYW1wbGUgcmF0ZQorKDQ0MTEwMCBvciA0ODAwMCkgYW5kIGNoYW5uZWxzICgyKSBhcmUgdXNlZC4gIE90aGVyd2lzZSBpdCdzIHR1cm5lZAorb2ZmLiAgKEFsc28gZG9uJ3QgZm9yZ2V0IHRvIHR1cm4gb24gIklFQzk1OCBPdXRwdXQgU3dpdGNoIiwgdG9vLikKKworCitBZGRpdGlvbmFsbHkgdGhlcmUgYXJlIHJlbGV2YW50IGNvbnRyb2wgc3dpdGNoZXM6CisKKyJJRUM5NTggTWl4IEFuYWxvZyIgLSBNaXggYW5hbG9nIFBDTSBwbGF5YmFjayBhbmQgRk0tT1BMLzMgc3RyZWFtcyBhbmQKKwlvdXRwdXQgdGhyb3VnaCBTUERJRi4gIFRoaXMgc3dpdGNoIGFwcGVhcnMgb25seSBvbiBvbGQgY2hpcAorCW1vZGVscyAoQ004NzM4IDAzMyBhbmQgMDM3KS4KKwlOb3RlOiB3aXRob3V0IHRoaXMgY29udHJvbCB5b3UgY2FuIG91dHB1dCBQQ00gdG8gU1BESUYuCisJVGhpcyBpcyAibWl4aW5nIiBvZiBzdHJlYW1zLCBzbyBlLmcuIGl0J3Mgbm90IGZvciBBQzMgb3V0cHV0CisJKHNlZSB0aGUgbmV4dCBzZWN0aW9uKS4KKworIklFQzk1OCBJbiBTZWxlY3QiICAtIFNlbGVjdCBTUERJRiBpbnB1dCwgdGhlIGludGVybmFsIENELWluIChmYWxzZSkKKwlhbmQgdGhlIGV4dGVybmFsIGlucHV0ICh0cnVlKS4KKworIklFQzk1OCBMb29wIiAgICAgICAtIFNQRElGIGlucHV0IGRhdGEgaXMgbG9vcCBiYWNrIGludG8gU1BESUYKKwlvdXRwdXQgKGFrYSBieXBhc3MpCisKKyJJRUM5NTggQ29weXJpZ2h0IiAgLSBTZXQgdGhlIGNvcHlyaWdodCBiaXQuCisKKyJJRUM5NTggNVYiICAgICAgICAgLSBTZWxlY3QgMC41ViAoY29heCkgb3IgNVYgKG9wdGljYWwpIGludGVyZmFjZS4KKwlPbiBzb21lIGNhcmRzIHRoaXMgZG9lc24ndCB3b3JrIGFuZCB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlCisJY29uZmlndXJhdGlvbiB3aXRoIGhhcmR3YXJlIGRpcC1zd2l0Y2guCisKKyJJRUM5NTggSW4gTW9uaXRvciIgLSBTUERJRiBpbnB1dCBpcyByb3V0ZWQgdG8gREFDLgorCisiSUVDOTU4IEluIFBoYXNlIEludmVyc2UiIC0gU2V0IFNQRElGIGlucHV0IGZvcm1hdCBhcyBpbnZlcnNlLgorCVtGSVhNRTogdGhpcyBkb2Vzbid0IHdvcmsgb24gYWxsIGNoaXBzLi5dCisKKyJJRUM5NTggSW4gVmFsaWQiICAgLSBTZXQgaW5wdXQgdmFsaWRpdHkgZmxhZyBkZXRlY3Rpb24uCisKK05vdGU6IFdoZW4gIlBDTSBQbGF5YmFjayBTd2l0Y2giIGlzIG9uLCB5b3UnbGwgaGVhciB0aGUgZGlnaXRhbCBvdXRwdXQKK3N0cmVhbSB0aHJvdWdoIGFuYWxvZyBsaW5lLW91dC4KKworCitUaGUgQUMzIChSQVcgRElHSVRBTCkgT1VUUFVUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgcmF3IGRpZ2l0YWwgKHR5cGljYWxseSBBQzMpIGkvbyBvdmVyIFNQRElGLiAgVGhpcworY2FuIGJlIHRvZ2dsZWQgdmlhIElFQzk1OCBwbGF5YmFjayBjb250cm9sLCBidXQgdXN1YWxseSB5b3UgbmVlZCB0bworYWNjZXNzIGl0IHZpYSBhbHNhLWxpYi4gIFNlZSBhbHNhLWxpYiBkb2N1bWVudHMgZm9yIG1vcmUgZGV0YWlscy4KKworT24gdGhlIHJhdyBkaWdpdGFsIG1vZGUsIHRoZSAiUENNIFBsYXliYWNrIFN3aXRjaCIgaXMgYXV0b21hdGljYWxseQordHVybmVkIG9mZiBzbyB0aGF0IG5vbi1hdWRpbyBkYXRhIGlzIGhlYXJkIGZyb20gdGhlIGFuYWxvZyBsaW5lLW91dC4KK1NpbWlsYXJseSB0aGUgZm9sbG93aW5nIHN3aXRjaGVzIGFyZSBvZmY6ICJJRUM5NTggTWl4IEFuYWxvZyIgYW5kCisiSUVDOTU4IExvb3AiLiAgVGhlIHN3aXRjaGVzIGFyZSByZXN1bWVkIGFmdGVyIGNsb3NpbmcgdGhlIFNQRElGIFBDTQorZGV2aWNlIGF1dG9tYXRpY2FsbHkgdG8gdGhlIHByZXZpb3VzIHN0YXRlLgorCitPbiB0aGUgbW9kZWwgMDMzLCBBQzMgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIHNvZnR3YXJlIGNvbnZlcnNpb24gaW4KK3RoZSBhbHNhLWxpYi4gIElmIHlvdSBuZWVkIHRvIGJ5cGFzcyB0aGUgc29mdHdhcmUgY29udmVyc2lvbiBvZiBJRUM5NTgKK3N1YmZyYW1lcywgcGFzcyB0aGUgInNvZnRfYWMzPTAiIG1vZHVsZSBvcHRpb24uICBUaGlzIGRvZXNuJ3QgbWF0dGVyCitvbiB0aGUgbmV3ZXIgbW9kZWxzLgorCisKK0FOQUxPRyBNSVhFUiBJTlRFUkZBQ0UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1peGVyIGludGVyZmFjZSBvbiBDTTh4MzggaXMgc2ltaWxhciB0byBTQjE2LgorVGhlcmUgYXJlIE1hc3RlciwgUENNLCBTeW50aCwgQ0QsIExpbmUsIE1pYyBhbmQgUEMgU3BlYWtlciBwbGF5YmFjawordm9sdW1lcy4gIFN5bnRoLCBDRCwgTGluZSBhbmQgTWljIGhhdmUgcGxheWJhY2sgYW5kIGNhcHR1cmUgc3dpdGNoZXMsCit0b28sIGFzIHdlbGwgYXMgU0IxNi4KKworSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIFNCIG1peGVyLCBDTTh4MzggcHJvdmlkZXMgbW9yZSBmdW5jdGlvbnMuCistIFBDTSBwbGF5YmFjayBzd2l0Y2gKKy0gUENNIGNhcHR1cmUgc3dpdGNoICh0byBjYXB0dXJlIHRoZSBkYXRhIHNlbnQgdG8gREFDKQorLSBNaWMgQm9vc3Qgc3dpdGNoCistIE1pYyBjYXB0dXJlIHZvbHVtZQorLSBBdXggcGxheWJhY2sgdm9sdW1lL3N3aXRjaCBhbmQgY2FwdHVyZSBzd2l0Y2gKKy0gM0QgY29udHJvbCBzd2l0Y2gKKworCitNSURJIENPTlRST0xMRVIKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgTVBVNDAxLVVBUlQgaW50ZXJmYWNlIGlzIGVuYWJsZWQgYXMgZGVmYXVsdCBvbmx5IGZvciB0aGUgZmlyc3QKKyhDTUlQQ0kpIGNhcmQuICBZb3UgbmVlZCB0byBzZXQgbW9kdWxlIG9wdGlvbiAibWlkaV9wb3J0IiBwcm9wZXJseQorZm9yIHRoZSAybmQgKENNSVBDSSkgY2FyZC4KKworVGhlcmUgaXMgX25vXyBoYXJkd2FyZSB3YXZldGFibGUgZnVuY3Rpb24gb24gdGhpcyBjaGlwIChleGNlcHQgZm9yCitPUEwzIHN5bnRoIGJlbG93KS4KK1doYXQncyBzYWlkIGFzIE1JREkgc3ludGggb24gV2luZG93cyBpcyBhIHNvZnR3YXJlIHN5bnRoZXNpemVyCitlbXVsYXRpb24uICBPbiBMaW51eCB1c2UgVGlNaWRpdHkgb3Igb3RoZXIgc29mdHN5bnRoIHByb2dyYW0gZm9yCitwbGF5aW5nIE1JREkgbXVzaWMuCisKKworRk0gT1BMLzMgU3ludGgKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBGTSBPUEwvMyBpcyBhbHNvIGVuYWJsZWQgYXMgZGVmYXVsdCBvbmx5IGZvciB0aGUgZmlyc3QgY2FyZC4KK1NldCAiZm1fcG9ydCIgbW9kdWxlIG9wdGlvbiBmb3IgbW9yZSBjYXJkcy4KKworVGhlIG91dHB1dCBxdWFsaXR5IG9mIEZNIE9QTC8zIGlzLCBob3dldmVyLCB2ZXJ5IHdlaXJkLgorSSBkb24ndCBrbm93IHdoeS4uCisKKworSm95c3RpY2sgYW5kIE1vZGVtCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGpveXN0aWNrIGFuZCBtb2RlbSBzaG91bGQgYmUgYXZhaWxhYmxlIGJ5IGVuYWJsaW5nIHRoZSBjb250cm9sCitzd2l0Y2ggIkpveXN0aWNrIiBhbmQgIk1vZGVtIiByZXNwZWN0aXZlbHkuICBCdXQgSSBteXNlbGYgaGF2ZSBuZXZlcgordGVzdGVkIHRoZW0geWV0LgorCisKK0RlYnVnZ2luZyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZWdpc3RlcnMgYXJlIHNob3duIGluIC9wcm9jL2Fzb3VuZC9jYXJkWC9jbWlwY2kuICBJZiB5b3UgaGF2ZSBhbnkKK3Byb2JsZW0gKGVzcGVjaWFsbHkgdW5leHBlY3RlZCBiZWhhdmlvciBvZiBtaXhlciksIHBsZWFzZSBhdHRhY2ggdGhlCitvdXRwdXQgb2YgdGhpcyBwcm9jIGZpbGUgdG9nZXRoZXIgd2l0aCB0aGUgYnVnIHJlcG9ydC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Db250cm9sTmFtZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NvbnRyb2xOYW1lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxODI5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Db250cm9sTmFtZXMudHh0CkBAIC0wLDAgKzEsODQgQEAKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHN0YW5kYXJkIG5hbWVzIG9mIG1peGVyIGNvbnRyb2xzLgorCitTeW50YXg6IFNPVVJDRSBbRElSRUNUSU9OXSBGVU5DVElPTgorCitESVJFQ1RJT046CisgIDxub3RoaW5nPgkoYm90aCBkaXJlY3Rpb25zKQorICBQbGF5YmFjaworICBDYXB0dXJlCisgIEJ5cGFzcyBQbGF5YmFjaworICBCeXBhc3MgQ2FwdHVyZQorCitGVU5DVElPTjoKKyAgU3dpdGNoCShvbi9vZmYgc3dpdGNoKQorICBWb2x1bWUKKyAgUm91dGUJCShyb3V0ZSBjb250cm9sLCBoYXJkd2FyZSBzcGVjaWZpYykKKworU09VUkNFOgorICBNYXN0ZXIKKyAgTWFzdGVyIE1vbm8KKyAgSGFyZHdhcmUgTWFzdGVyCisgIEhlYWRwaG9uZQorICBQQyBTcGVha2VyCisgIFBob25lCisgIFBob25lIElucHV0CisgIFBob25lIE91dHB1dAorICBTeW50aAorICBGTQorICBNaWMKKyAgTGluZQorICBDRAorICBWaWRlbworICBab29tIFZpZGVvCisgIEF1eAorICBQQ00KKyAgUENNIEZyb250CisgIFBDTSBSZWFyCisgIFBDTSBQYW4KKyAgTG9vcGJhY2sKKyAgQW5hbG9nIExvb3BiYWNrCShEL0EgLT4gQS9EIGxvb3BiYWNrKQorICBEaWdpdGFsIExvb3BiYWNrCShwbGF5YmFjayAtPiBjYXB0dXJlIGxvb3BiYWNrIC0gd2l0aG91dCBhbmFsb2cgcGF0aCkKKyAgTW9ubworICBNb25vIE91dHB1dAorICBNdWx0aQorICBBREMKKyAgV2F2ZQorICBNdXNpYworICBJMlMKKyAgSUVDOTU4CisKK0V4Y2VwdGlvbnM6CisgIFtEaWdpdGFsXSBDYXB0dXJlIFNvdXJjZQorICBbRGlnaXRhbF0gQ2FwdHVyZSBTd2l0Y2gJKGFrYSBpbnB1dCBnYWluIHN3aXRjaCkKKyAgW0RpZ2l0YWxdIENhcHR1cmUgVm9sdW1lCShha2EgaW5wdXQgZ2FpbiB2b2x1bWUpCisgIFtEaWdpdGFsXSBQbGF5YmFjayBTd2l0Y2gJKGFrYSBvdXRwdXQgZ2FpbiBzd2l0Y2gpCisgIFtEaWdpdGFsXSBQbGF5YmFjayBWb2x1bWUJKGFrYSBvdXRwdXQgZ2FpbiB2b2x1bWUpCisgIFRvbmUgQ29udHJvbCAtIFN3aXRjaAorICBUb25lIENvbnRyb2wgLSBCYXNzCisgIFRvbmUgQ29udHJvbCAtIFRyZWJsZQorICAzRCBDb250cm9sIC0gU3dpdGNoCisgIDNEIENvbnRyb2wgLSBDZW50ZXIKKyAgM0QgQ29udHJvbCAtIERlcHRoCisgIDNEIENvbnRyb2wgLSBXaWRlCisgIDNEIENvbnRyb2wgLSBTcGFjZQorICAzRCBDb250cm9sIC0gTGV2ZWwKKyAgTWljIEJvb3N0IFsoP2RCKV0KKworUENNIGludGVyZmFjZToKKworICBTYW1wbGUgQ2xvY2sgU291cmNlCXsgIldvcmQiLCAiSW50ZXJuYWwiLCAiQXV0b1N5bmMiIH0KKyAgQ2xvY2sgU3luYyBTdGF0dXMJeyAiTG9jayIsICJTeW5jIiwgIk5vIExvY2siIH0KKyAgRXh0ZXJuYWwgUmF0ZQkJLyogZXh0ZXJuYWwgY2FwdHVyZSByYXRlICovCisgIENhcHR1cmUgUmF0ZQkJLyogY2FwdHVyZSByYXRlIHRha2VuIGZyb20gZXh0ZXJuYWwgc291cmNlICovCisKK0lFQzk1OCAoUy9QRElGKSBpbnRlcmZhY2U6CisKKyAgSUVDOTU4IFsuLi5dIFtQbGF5YmFja3xDYXB0dXJlXSBTd2l0Y2gJLyogdHVybiBvbi9vZmYgdGhlIElFQzk1OCBpbnRlcmZhY2UgKi8KKyAgSUVDOTU4IFsuLi5dIFtQbGF5YmFja3xDYXB0dXJlXSBWb2x1bWUJLyogZGlnaXRhbCB2b2x1bWUgY29udHJvbCAqLworICBJRUM5NTggWy4uLl0gW1BsYXliYWNrfENhcHR1cmVdIERlZmF1bHQJLyogZGVmYXVsdCBvciBnbG9iYWwgdmFsdWUgLSByZWFkL3dyaXRlICovCisgIElFQzk1OCBbLi4uXSBbUGxheWJhY2t8Q2FwdHVyZV0gTWFzawkJLyogY29uc3VtZXIgYW5kIHByb2Zlc3Npb25hbCBtYXNrICovCisgIElFQzk1OCBbLi4uXSBbUGxheWJhY2t8Q2FwdHVyZV0gQ29uIE1hc2sJLyogY29uc3VtZXIgbWFzayAqLworICBJRUM5NTggWy4uLl0gW1BsYXliYWNrfENhcHR1cmVdIFBybyBNYXNrCS8qIHByb2Zlc3Npb25hbCBtYXNrICovCisgIElFQzk1OCBbLi4uXSBbUGxheWJhY2t8Q2FwdHVyZV0gUENNIFN0cmVhbQkvKiB0aGUgc2V0dGluZ3MgYXNzaWduZWQgdG8gYSBQQ00gc3RyZWFtICovCisgIElFQzk1OCBRLXN1YmNvZGUgW1BsYXliYWNrfENhcHR1cmVdIERlZmF1bHQJLyogUS1zdWJjb2RlIGJpdHMgKi8KKyAgSUVDOTU4IFByZWFtYmxlIFtQbGF5YmFja3xDYXB0dXJlXSBEZWZhdWx0CS8qIGJ1cnN0IHByZWFtYmxlIHdvcmRzICg0KjE2Yml0cykgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzYWUzZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsCkBAIC0wLDAgKzEsMTAwIEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+CisKKzxib29rPgorPD9kYmh0bWwgZmlsZW5hbWU9ImluZGV4Lmh0bWwiPgorCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gSGVhZGVyICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Ym9va2luZm8+CisgICAgPHRpdGxlPlRoZSBBTFNBIERyaXZlciBBUEk8L3RpdGxlPgorCisgICAgPGxlZ2Fsbm90aWNlPgorICAgIDxwYXJhPgorICAgIFRoaXMgZG9jdW1lbnQgaXMgZnJlZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBUaGlzIGRvY3VtZW50IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IDxlbXBoYXNpcz5XSVRIT1VUIEFOWSBXQVJSQU5UWTwvZW1waGFzaXM+OyB3aXRob3V0IGV2ZW4gdGhlCisgICAgaW1wbGllZCB3YXJyYW50eSBvZiA8ZW1waGFzaXM+TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAgICBQQVJUSUNVTEFSIFBVUlBPU0U8L2VtcGhhc2lzPi4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGZvciBtb3JlIGRldGFpbHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgICA8L3BhcmE+CisgICAgPC9sZWdhbG5vdGljZT4KKworICA8L2Jvb2tpbmZvPgorCisgIDxjaGFwdGVyPjx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBEZXZpY2VzPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5DYXJkIE1hbmFnbWVudDwvdGl0bGU+CishRXNvdW5kL2NvcmUvaW5pdC5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+RGV2aWNlIENvbXBvbmVudHM8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2RldmljZS5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+S01PRCBhbmQgRGV2aWNlIEZpbGUgRW50cmllczwvdGl0bGU+CishRXNvdW5kL2NvcmUvc291bmQuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPk1lbW9yeSBNYW5hZ2VtZW50IEhlbHBlcnM8L3RpdGxlPgorIUVzb3VuZC9jb3JlL21lbW9yeS5jCishRXNvdW5kL2NvcmUvbWVtYWxsb2MuYworICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyPjx0aXRsZT5QQ00gQVBJPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5QQ00gQ29yZTwvdGl0bGU+CishRXNvdW5kL2NvcmUvcGNtLmMKKyFFc291bmQvY29yZS9wY21fbGliLmMKKyFFc291bmQvY29yZS9wY21fbmF0aXZlLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5QQ00gRm9ybWF0IEhlbHBlcnM8L3RpdGxlPgorIUVzb3VuZC9jb3JlL3BjbV9taXNjLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5QQ00gTWVtb3J5IE1hbmFnbWVudDwvdGl0bGU+CishRXNvdW5kL2NvcmUvcGNtX21lbW9yeS5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPkNvbnRyb2wvTWl4ZXIgQVBJPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5HZW5lcmFsIENvbnRyb2wgSW50ZXJmYWNlPC90aXRsZT4KKyFFc291bmQvY29yZS9jb250cm9sLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5BQzk3IENvZGVjIEFQSTwvdGl0bGU+CishRXNvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworIUVzb3VuZC9wY2kvYWM5Ny9hYzk3X3BjbS5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPk1JREkgQVBJPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5SYXcgTUlESSBBUEk8L3RpdGxlPgorIUVzb3VuZC9jb3JlL3Jhd21pZGkuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPk1QVTQwMS1VQVJUIEFQSTwvdGl0bGU+CishRXNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+UHJvYyBJbmZvIEFQSTwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+UHJvYyBJbmZvIEludGVyZmFjZTwvdGl0bGU+CishRXNvdW5kL2NvcmUvaW5mby5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPk1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5IYXJkd2FyZS1EZXBlbmRlbnQgRGV2aWNlcyBBUEk8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2h3ZGVwLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5JU0EgRE1BIEhlbHBlcnM8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2lzYWRtYS5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+T3RoZXIgSGVscGVyIE1hY3JvczwvdGl0bGU+CishSWluY2x1ZGUvc291bmQvY29yZS5oCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ODk0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKQEAgLTAsMCArMSw2MDQ1IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+CisKKzxib29rPgorPD9kYmh0bWwgZmlsZW5hbWU9ImluZGV4Lmh0bWwiPgorCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gSGVhZGVyICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Ym9va2luZm8+CisgICAgPHRpdGxlPldyaXRpbmcgYW4gQUxTQSBEcml2ZXI8L3RpdGxlPgorICAgIDxhdXRob3I+CisgICAgICA8Zmlyc3RuYW1lPlRha2FzaGk8L2ZpcnN0bmFtZT4KKyAgICAgIDxzdXJuYW1lPkl3YWk8L3N1cm5hbWU+CisgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgIDxhZGRyZXNzPgorICAgICAgICAgIDxlbWFpbD50aXdhaUBzdXNlLmRlPC9lbWFpbD4KKyAgICAgICAgPC9hZGRyZXNzPgorICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgPC9hdXRob3I+CisKKyAgICAgPGRhdGU+TWFyY2ggNiwgMjAwNTwvZGF0ZT4KKyAgICAgPGVkaXRpb24+MC4zLjQ8L2VkaXRpb24+CisKKyAgICA8YWJzdHJhY3Q+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHdyaXRlIGFuIEFMU0EgKEFkdmFuY2VkIExpbnV4CisgICAgICAgIFNvdW5kIEFyY2hpdGVjdHVyZSkgZHJpdmVyLgorICAgICAgPC9wYXJhPgorICAgIDwvYWJzdHJhY3Q+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgPHBhcmE+CisgICAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgIFRha2FzaGkgSXdhaSA8ZW1haWw+dGl3YWlAc3VzZS5kZTwvZW1haWw+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgVGhpcyBkb2N1bWVudCBpcyBmcmVlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoaXMgZG9jdW1lbnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgPGVtcGhhc2lzPldJVEhPVVQgQU5ZIFdBUlJBTlRZPC9lbXBoYXNpcz47IHdpdGhvdXQgZXZlbiB0aGUKKyAgICBpbXBsaWVkIHdhcnJhbnR5IG9mIDxlbXBoYXNpcz5NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICAgIFBBUlRJQ1VMQVIgUFVSUE9TRTwvZW1waGFzaXM+LiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgZm9yIG1vcmUgZGV0YWlscy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgIDwvcGFyYT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgIDwvYm9va2luZm8+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQcmVmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8cHJlZmFjZSBpZD0icHJlZmFjZSI+CisgICAgPHRpdGxlPlByZWZhY2U8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHdyaXRlIGFuCisgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcvIj48Y2l0ZXRpdGxlPgorICAgICAgQUxTQSAoQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlKTwvY2l0ZXRpdGxlPjwvdWxpbms+CisgICAgICBkcml2ZXIuIFRoZSBkb2N1bWVudCBmb2N1c2VzIG1haW5seSBvbiB0aGUgUENJIHNvdW5kY2FyZC4KKyAgICAgIEluIHRoZSBjYXNlIG9mIG90aGVyIGRldmljZSB0eXBlcywgdGhlIEFQSSBtaWdodAorICAgICAgYmUgZGlmZmVyZW50LCB0b28uIEhvd2V2ZXIsIGF0IGxlYXN0IHRoZSBBTFNBIGtlcm5lbCBBUEkgaXMKKyAgICAgIGNvbnNpc3RlbnQsIGFuZCB0aGVyZWZvcmUgaXQgd291bGQgYmUgc3RpbGwgYSBiaXQgaGVscCBmb3IKKyAgICAgIHdyaXRpbmcgdGhlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBUaGUgdGFyZ2V0IG9mIHRoaXMgZG9jdW1lbnQgaXMgb25lcyB3aG8gYWxyZWFkeSBoYXZlIGVub3VnaAorICAgIHNraWxsIG9mIEMgbGFuZ3VhZ2UgYW5kIGhhdmUgdGhlIGJhc2ljIGtub3dsZWRnZSBvZiBsaW51eAorICAgIGtlcm5lbCBwcm9ncmFtbWluZy4gIFRoaXMgZG9jdW1lbnQgZG9lc24ndCBleHBsYWluIHRoZSBnZW5lcmFsCisgICAgdG9waWNzIG9mIGxpbnV4IGtlcm5lbCBjb2RlcyBhbmQgZG9lc24ndCBjb3ZlciB0aGUgZGV0YWlsIG9mCisgICAgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBsb3ctbGV2ZWwgZHJpdmVyLiAgSXQgZGVzY3JpYmVzIG9ubHkgaG93IGlzCisgICAgdGhlIHN0YW5kYXJkIHdheSB0byB3cml0ZSBhIFBDSSBzb3VuZCBkcml2ZXIgb24gQUxTQS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHlvdSBhcmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBvbGRlciBBTFNBIHZlci4wLjUueCwgeW91CisgICAgY2FuIGNoZWNrIHRoZSBkcml2ZXJzIHN1Y2ggYXMgPGZpbGVuYW1lPmVzMTkzOC5jPC9maWxlbmFtZT4gb3IKKyAgICA8ZmlsZW5hbWU+bWFlc3RybzMuYzwvZmlsZW5hbWU+IHdoaWNoIGhhdmUgYWxzbyBhbG1vc3QgdGhlIHNhbWUKKyAgICBjb2RlLWJhc2UgaW4gdGhlIEFMU0EgMC41LnggdHJlZSwgc28geW91IGNhbiBjb21wYXJlIHRoZSBkaWZmZXJlbmNlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgZG9jdW1lbnQgaXMgc3RpbGwgYSBkcmFmdCB2ZXJzaW9uLiBBbnkgZmVlZGJhY2tzIGFuZAorICAgIGNvcnJlY3Rpb25zLCBwbGVhc2UhIQorICAgIDwvcGFyYT4KKyAgPC9wcmVmYWNlPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBGaWxlIFRyZWUgU3RydWN0dXJlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iZmlsZS10cmVlIj4KKyAgICA8dGl0bGU+RmlsZSBUcmVlIFN0cnVjdHVyZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWdlbmVyYWwiPgorICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBBTFNBIGRyaXZlcnMgYXJlIHByb3ZpZGVkIGluIHRoZSB0d28gd2F5cy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE9uZSBpcyB0aGUgdHJlZXMgcHJvdmlkZWQgYXMgYSB0YXJiYWxsIG9yIHZpYSBjdnMgZnJvbSB0aGUKKyAgICAgIEFMU0EncyBmdHAgc2l0ZSwgYW5kIGFub3RoZXIgaXMgdGhlIDIuNiAob3IgbGF0ZXIpIExpbnV4IGtlcm5lbAorICAgICAgdHJlZS4gVG8gc3luY2hyb25pemUgYm90aCwgdGhlIEFMU0EgZHJpdmVyIHRyZWUgaXMgc3BsaXQgaW50bworICAgICAgdHdvIGRpZmZlcmVudCB0cmVlczogYWxzYS1rZXJuZWwgYW5kIGFsc2EtZHJpdmVyLiBUaGUgZm9ybWVyCisgICAgICBjb250YWlucyBwdXJlbHkgdGhlIHNvdXJjZSBjb2RlcyBmb3IgdGhlIExpbnV4IDIuNiAob3IgbGF0ZXIpCisgICAgICB0cmVlLiBUaGlzIHRyZWUgaXMgZGVzaWduZWQgb25seSBmb3IgY29tcGlsYXRpb24gb24gMi42IG9yCisgICAgICBsYXRlciBlbnZpcm9ubWVudC4gVGhlIGxhdHRlciwgYWxzYS1kcml2ZXIsIGNvbnRhaW5zIG1hbnkgc3VidGxlCisgICAgICBmaWxlcyBmb3IgY29tcGlsaW5nIHRoZSBBTFNBIGRyaXZlciBvbiB0aGUgb3V0c2lkZSBvZiBMaW51eAorICAgICAga2VybmVsIGxpa2UgY29uZmlndXJlIHNjcmlwdCwgdGhlIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBvbGRlciwKKyAgICAgIDIuMiBhbmQgMi40IGtlcm5lbHMsIHRvIGFkYXB0IHRoZSBsYXRlc3Qga2VybmVsIEFQSSwKKyAgICAgIGFuZCBhZGRpdGlvbmFsIGRyaXZlcnMgd2hpY2ggYXJlIHN0aWxsIGluIGRldmVsb3BtZW50IG9yIGluCisgICAgICB0ZXN0cy4gIFRoZSBkcml2ZXJzIGluIGFsc2EtZHJpdmVyIHRyZWUgd2lsbCBiZSBtb3ZlZCB0bworICAgICAgYWxzYS1rZXJuZWwgKGV2ZW50dWFsbHkgMi42IGtlcm5lbCB0cmVlKSBvbmNlIHdoZW4gdGhleSBhcmUKKyAgICAgIGZpbmlzaGVkIGFuZCBjb25maXJtZWQgdG8gd29yayBmaW5lLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpbGUgdHJlZSBzdHJ1Y3R1cmUgb2YgQUxTQSBkcml2ZXIgaXMgZGVwaWN0ZWQgYmVsb3cuIEJvdGgKKyAgICAgICAgYWxzYS1rZXJuZWwgYW5kIGFsc2EtZHJpdmVyIGhhdmUgYWxtb3N0IHRoZSBzYW1lIGZpbGUKKyAgICAgICAgc3RydWN0dXJlLCBleGNlcHQgZm9yIDxxdW90ZT5jb3JlPC9xdW90ZT4gZGlyZWN0b3J5LiBJdCdzCisgICAgICAgIG5hbWVkIGFzIDxxdW90ZT5hY29yZTwvcXVvdGU+IGluIGFsc2EtZHJpdmVyIHRyZWUuIAorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5BTFNBIEZpbGUgVHJlZSBTdHJ1Y3R1cmU8L3RpdGxlPgorICAgICAgICAgIDxsaXRlcmFsbGF5b3V0PgorICAgICAgICBzb3VuZAorICAgICAgICAgICAgICAgIC9jb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAvb3NzCisgICAgICAgICAgICAgICAgICAgICAgICAvc2VxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9vc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL2luc3RyCisgICAgICAgICAgICAgICAgL2lvY3RsMzIKKyAgICAgICAgICAgICAgICAvaW5jbHVkZQorICAgICAgICAgICAgICAgIC9kcml2ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAvbXB1NDAxCisgICAgICAgICAgICAgICAgICAgICAgICAvb3BsMworICAgICAgICAgICAgICAgIC9pMmMKKyAgICAgICAgICAgICAgICAgICAgICAgIC9sMworICAgICAgICAgICAgICAgIC9zeW50aAorICAgICAgICAgICAgICAgICAgICAgICAgL2VtdXgKKyAgICAgICAgICAgICAgICAvcGNpCisgICAgICAgICAgICAgICAgICAgICAgICAvKGNhcmRzKQorICAgICAgICAgICAgICAgIC9pc2EKKyAgICAgICAgICAgICAgICAgICAgICAgIC8oY2FyZHMpCisgICAgICAgICAgICAgICAgL2FybQorICAgICAgICAgICAgICAgIC9wcGMKKyAgICAgICAgICAgICAgICAvc3BhcmMKKyAgICAgICAgICAgICAgICAvdXNiCisgICAgICAgICAgICAgICAgL3BjbWNpYSAvKGNhcmRzKQorICAgICAgICAgICAgICAgIC9vc3MKKyAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5jb3JlIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIG1pZGRsZSBsYXllciwgdGhhdCBpcywgdGhlIGhlYXJ0CisgICAgICBvZiBBTFNBIGRyaXZlcnMuIEluIHRoaXMgZGlyZWN0b3J5LCB0aGUgbmF0aXZlIEFMU0EgbW9kdWxlcyBhcmUKKyAgICAgIHN0b3JlZC4gVGhlIHN1Yi1kaXJlY3RvcmllcyBjb250YWluIGRpZmZlcmVudCBtb2R1bGVzIGFuZCBhcmUKKyAgICAgIGRlcGVuZGVudCB1cG9uIHRoZSBrZXJuZWwgY29uZmlnLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1vc3MiPgorICAgICAgICA8dGl0bGU+Y29yZS9vc3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBjb2RlcyBmb3IgUENNIGFuZCBtaXhlciBPU1MgZW11bGF0aW9uIG1vZHVsZXMgYXJlIHN0b3JlZAorICAgICAgICBpbiB0aGlzIGRpcmVjdG9yeS4gVGhlIHJhd21pZGkgT1NTIGVtdWxhdGlvbiBpcyBpbmNsdWRlZCBpbgorICAgICAgICB0aGUgQUxTQSByYXdtaWRpIGNvZGUgc2luY2UgaXQncyBxdWl0ZSBzbWFsbC4gVGhlIHNlcXVlbmNlcgorICAgICAgICBjb2RlIGlzIHN0b3JlZCBpbiBjb3JlL3NlcS9vc3MgZGlyZWN0b3J5IChzZWUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LXNlcS1vc3MiPjxjaXRldGl0bGU+CisgICAgICAgIGJlbG93PC9jaXRldGl0bGU+PC9saW5rPikuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1pb2N0bDMyIj4KKyAgICAgICAgPHRpdGxlPmNvcmUvaW9jdGwzMjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIDMyYml0LWlvY3RsIHdyYXBwZXJzIGZvciA2NGJpdAorICAgICAgICBhcmNoaXRlY3R1cmVzIHN1Y2ggbGlrZSB4ODYtNjQsIHBwYzY0IGFuZCBzcGFyYzY0LiBGb3IgMzJiaXQKKyAgICAgICAgYW5kIGFscGhhIGFyY2hpdGVjdHVyZXMsIHRoZXNlIGFyZSBub3QgY29tcGlsZWQuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3Rvcnktc2VxIj4KKyAgICAgICAgPHRpdGxlPmNvcmUvc2VxPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBhbmQgaXRzIHN1Yi1kaXJlY3RvcmllcyBhcmUgZm9yIHRoZSBBTFNBCisgICAgICAgIHNlcXVlbmNlci4gVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIHNlcXVlbmNlciBjb3JlIGFuZAorICAgICAgICBwcmltYXJ5IHNlcXVlbmNlciBtb2R1bGVzIHN1Y2ggbGlrZSBzbmQtc2VxLW1pZGksCisgICAgICAgIHNuZC1zZXEtdmlybWlkaSwgZXRjLiBUaGV5IGFyZSBjb21waWxlZCBvbmx5IHdoZW4KKyAgICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfU0VRVUVOQ0VSPC9jb25zdGFudD4gaXMgc2V0IGluIHRoZSBrZXJuZWwKKyAgICAgICAgY29uZmlnLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LXNlcS1vc3MiPgorICAgICAgICA8dGl0bGU+Y29yZS9zZXEvb3NzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjb250YWlucyB0aGUgT1NTIHNlcXVlbmNlciBlbXVsYXRpb24gY29kZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1kZXEtaW5zdHIiPgorICAgICAgICA8dGl0bGU+Y29yZS9zZXEvaW5zdHI8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbW9kdWxlcyBmb3IgdGhlIHNlcXVlbmNlcgorICAgICAgICBpbnN0cnVtZW50IGxheWVyLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtaW5jbHVkZS1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmluY2x1ZGUgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGlzIHRoZSBwbGFjZSBmb3IgdGhlIHB1YmxpYyBoZWFkZXIgZmlsZXMgb2YgQUxTQSBkcml2ZXJzLAorICAgICAgd2hpY2ggYXJlIHRvIGJlIGV4cG9ydGVkIHRvIHRoZSB1c2VyLXNwYWNlLCBvciBpbmNsdWRlZCBieQorICAgICAgc2V2ZXJhbCBmaWxlcyBhdCBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuIEJhc2ljYWxseSwgdGhlIHByaXZhdGUKKyAgICAgIGhlYWRlciBmaWxlcyBzaG91bGQgbm90IGJlIHBsYWNlZCBpbiB0aGlzIGRpcmVjdG9yeSwgYnV0IHlvdSBtYXkKKyAgICAgIHN0aWxsIGZpbmQgZmlsZXMgdGhlcmUsIGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbiA6KSAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWRyaXZlcnMtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5kcml2ZXJzIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGNvZGVzIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQgZHJpdmVycworICAgICAgb24gdGhlIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiAgVGhleSBhcmUgaGVuY2Ugc3VwcG9zZWQgbm90IHRvIGJlCisgICAgICBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuCisgICAgICBGb3IgZXhhbXBsZSwgdGhlIGR1bW15IHBjbSBkcml2ZXIgYW5kIHRoZSBzZXJpYWwgTUlESQorICAgICAgZHJpdmVyIGFyZSBmb3VuZCBpbiB0aGlzIGRpcmVjdG9yeS4gSW4gdGhlIHN1Yi1kaXJlY3RvcmllcywKKyAgICAgIHRoZXJlIGFyZSB0aGUgY29kZXMgZm9yIGNvbXBvbmVudHMgd2hpY2ggYXJlIGluZGVwZW5kZW50IGZyb20KKyAgICAgIGJ1cyBhbmQgY3B1IGFyY2hpdGVjdHVyZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWRyaXZlcnMtZGlyZWN0b3J5LW1wdTQwMSI+CisgICAgICAgIDx0aXRsZT5kcml2ZXJzL21wdTQwMTwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBNUFU0MDEgYW5kIE1QVTQwMS1VQVJUIG1vZHVsZXMgYXJlIHN0b3JlZCBoZXJlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZHJpdmVycy1kaXJlY3Rvcnktb3BsMyI+CisgICAgICAgIDx0aXRsZT5kcml2ZXJzL29wbDMgYW5kIG9wbDQ8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgT1BMMyBhbmQgT1BMNCBGTS1zeW50aCBzdHVmZiBpcyBmb3VuZCBoZXJlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pMmMtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5pMmMgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNvbnRhaW5zIHRoZSBBTFNBIGkyYyBjb21wb25lbnRzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWx0aG91Z2ggdGhlcmUgaXMgYSBzdGFuZGFyZCBpMmMgbGF5ZXIgb24gTGludXgsIEFMU0EgaGFzIGl0cworICAgICAgb3duIGkyYyBjb2RlcyBmb3Igc29tZSBjYXJkcywgYmVjYXVzZSB0aGUgc291bmRjYXJkIG5lZWRzIG9ubHkgYQorICAgICAgc2ltcGxlIG9wZXJhdGlvbiBhbmQgdGhlIHN0YW5kYXJkIGkyYyBBUEkgaXMgdG9vIGNvbXBsaWNhdGVkIGZvcgorICAgICAgc3VjaCBhIHB1cnBvc2UuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWkyYy1kaXJlY3RvcnktbDMiPgorICAgICAgICA8dGl0bGU+aTJjL2wzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBpcyBhIHN1Yi1kaXJlY3RvcnkgZm9yIEFSTSBMMyBpMmMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLXN5bnRoLWRpcmVjdG9yeSI+CisgICAgICAgIDx0aXRsZT5zeW50aCBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNvbnRhaW5zIHRoZSBzeW50aCBtaWRkbGUtbGV2ZWwgbW9kdWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFNvIGZhciwgdGhlcmUgaXMgb25seSBFbXU4MDAwL0VtdTEwazEgc3ludGggZHJpdmVyIHVuZGVyCisgICAgICAgIHN5bnRoL2VtdXggc3ViLWRpcmVjdG9yeS4gCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLXBjaS1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPnBjaSBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgYW5kIGl0cyBzdWItZGlyZWN0b3JpZXMgaG9sZCB0aGUgdG9wLWxldmVsIGNhcmQgbW9kdWxlcworICAgICAgZm9yIFBDSSBzb3VuZGNhcmRzIGFuZCB0aGUgY29kZXMgc3BlY2lmaWMgdG8gdGhlIFBDSSBCVVMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZHJpdmVycyBjb21waWxlZCBmcm9tIGEgc2luZ2xlIGZpbGUgaXMgc3RvcmVkIGRpcmVjdGx5IG9uCisgICAgICBwY2kgZGlyZWN0b3J5LCB3aGlsZSB0aGUgZHJpdmVycyB3aXRoIHNldmVyYWwgc291cmNlIGZpbGVzIGFyZQorICAgICAgc3RvcmVkIG9uIGl0cyBvd24gc3ViLWRpcmVjdG9yeSAoZS5nLiBlbXUxMGsxLCBpY2UxNzEyKS4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pc2EtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5pc2EgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGFuZCBpdHMgc3ViLWRpcmVjdG9yaWVzIGhvbGQgdGhlIHRvcC1sZXZlbCBjYXJkIG1vZHVsZXMKKyAgICAgIGZvciBJU0Egc291bmRjYXJkcy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1hcm0tcHBjLXNwYXJjLWRpcmVjdG9yaWVzIj4KKyAgICAgIDx0aXRsZT5hcm0sIHBwYywgYW5kIHNwYXJjIGRpcmVjdG9yaWVzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVzZSBhcmUgZm9yIHRoZSB0b3AtbGV2ZWwgY2FyZCBtb2R1bGVzIHdoaWNoIGFyZQorICAgICAgc3BlY2lmaWMgdG8gZWFjaCBnaXZlbiBhcmNoaXRlY3R1cmUuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtdXNiLWRpcmVjdG9yeSI+CisgICAgICA8dGl0bGU+dXNiIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjb250YWlucyB0aGUgVVNCLWF1ZGlvIGRyaXZlci4gT24gdGhlIGxhdGVzdCB2ZXJzaW9uLCB0aGUKKyAgICAgIFVTQiBNSURJIGRyaXZlciBpcyBpbnRlZ3JhdGVkIHRvZ2V0aGVyIHdpdGggdXNiLWF1ZGlvIGRyaXZlci4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1wY21jaWEtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5wY21jaWEgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgUENNQ0lBLCBlc3BlY2lhbGx5IFBDQ2FyZCBkcml2ZXJzIHdpbGwgZ28gaGVyZS4gQ2FyZEJ1cworICAgICAgZHJpdmVycyB3aWxsIGJlIG9uIHBjaSBkaXJlY3RvcnksIGJlY2F1c2UgaXRzIEFQSSBpcyBpZGVudGljYWwKKyAgICAgIHdpdGggdGhlIHN0YW5kYXJkIFBDSSBjYXJkcy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1vc3MtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5vc3MgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgT1NTL0xpdGUgc291cmNlIGZpbGVzIGFyZSBzdG9yZWQgaGVyZSBvbiBMaW51eCAyLjYgKG9yCisgICAgICBsYXRlcikgdHJlZS4gKEluIHRoZSBBTFNBIGRyaXZlciB0YXJiYWxsLCBpdCdzIGVtcHR5LCBvZiBjb3Vyc2UgOikgCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIEJhc2ljIEZsb3cgZm9yIFBDSSBEcml2ZXJzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYmFzaWMtZmxvdyI+CisgICAgPHRpdGxlPkJhc2ljIEZsb3cgZm9yIFBDSSBEcml2ZXJzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LW91dGxpbmUiPgorICAgICAgPHRpdGxlPk91dGxpbmU8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBtaW5pbXVtIGZsb3cgb2YgUENJIHNvdW5kY2FyZCBpcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+ZGVmaW5lIHRoZSBQQ0kgSUQgdGFibGUgKHNlZSB0aGUgc2VjdGlvbgorICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjaS1yZXNvdXJjZS1lbnRyaWVzIj48Y2l0ZXRpdGxlPlBDSSBFbnRyaWVzCisgICAgICAgICAgPC9jaXRldGl0bGU+PC9saW5rPikuPC9wYXJhPjwvbGlzdGl0ZW0+IAorICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgPGZ1bmN0aW9uPnByb2JlKCk8L2Z1bmN0aW9uPiBjYWxsYmFjay48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIDxmdW5jdGlvbj5yZW1vdmUoKTwvZnVuY3Rpb24+IGNhbGxiYWNrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgcGNpX2RyaXZlciB0YWJsZSB3aGljaCBjb250YWlucyB0aGUgdGhyZWUgcG9pbnRlcnMgYWJvdmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmNyZWF0ZSA8ZnVuY3Rpb24+aW5pdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24ganVzdCBjYWxsaW5nIDxmdW5jdGlvbj5wY2lfbW9kdWxlX2luaXQoKTwvZnVuY3Rpb24+IHRvIHJlZ2lzdGVyIHRoZSBwY2lfZHJpdmVyIHRhYmxlIGRlZmluZWQgYWJvdmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmNyZWF0ZSA8ZnVuY3Rpb24+ZXhpdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdG8gY2FsbCA8ZnVuY3Rpb24+cGNpX3VucmVnaXN0ZXJfZHJpdmVyKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctZXhhbXBsZSI+CisgICAgICA8dGl0bGU+RnVsbCBDb2RlIEV4YW1wbGU8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBjb2RlIGV4YW1wbGUgaXMgc2hvd24gYmVsb3cuIFNvbWUgcGFydHMgYXJlIGtlcHQKKyAgICAgIHVuaW1wbGVtZW50ZWQgYXQgdGhpcyBtb21lbnQgYnV0IHdpbGwgYmUgZmlsbGVkIGluIHRoZQorICAgICAgc3VjY2VlZGluZyBzZWN0aW9ucy4gVGhlIG51bWJlcnMgaW4gY29tbWVudCBsaW5lcyBvZgorICAgICAgPGZ1bmN0aW9uPnNuZF9teWNoaXBfcHJvYmUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGFyZSB0aGUKKyAgICAgIG1hcmtlcnMuIAorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5CYXNpYyBGbG93IGZvciBQQ0kgRHJpdmVycyBFeGFtcGxlPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorICAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorICAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisgICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisgICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisgICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyAgLyogbW9kdWxlIHBhcmFtZXRlcnMgKHNlZSAiTW9kdWxlIFBhcmFtZXRlcnMiKSAqLworICBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworICBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CisgIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKKworICAvKiBkZWZpbml0aW9uIG9mIHRoZSBjaGlwLXNwZWNpZmljIHJlY29yZCAqLworICB0eXBlZGVmIHN0cnVjdCBzbmRfbXljaGlwIG15Y2hpcF90OworICBzdHJ1Y3Qgc25kX215Y2hpcCB7CisgICAgICAgICAgc25kX2NhcmRfdCAqY2FyZDsKKyAgICAgICAgICAvLyByZXN0IG9mIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgaW4gdGhlIHNlY3Rpb24KKyAgICAgICAgICAvLyAiUENJIFJlc291cmNlIE1hbmFnZW1lbnRzIgorICB9OworCisgIC8qIGNoaXAtc3BlY2lmaWMgZGVzdHJ1Y3RvcgorICAgKiAoc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudHMiKQorICAgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2ZyZWUobXljaGlwX3QgKmNoaXApCisgIHsKKyAgICAgICAgICAuLi4uIC8vIHdpbGwgYmUgaW1wbGVtZW50ZWQgbGF0ZXIuLi4KKyAgfQorCisgIC8qIGNvbXBvbmVudC1kZXN0cnVjdG9yCisgICAqIChzZWUgIk1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHMiKQorICAgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2Rldl9mcmVlKHNuZF9kZXZpY2VfdCAqZGV2aWNlKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBkZXZpY2UtPmRldmljZV9kYXRhOworICAgICAgICAgIHJldHVybiBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgIH0KKworICAvKiBjaGlwLXNwZWNpZmljIGNvbnN0cnVjdG9yCisgICAqIChzZWUgIk1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHMiKQorICAgKi8KKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9jcmVhdGUoc25kX2NhcmRfdCAqY2FyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXljaGlwX3QgKipyY2hpcCkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwOworICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgc3RhdGljIHNuZF9kZXZpY2Vfb3BzX3Qgb3BzID0geworICAgICAgICAgICAgICAgICAuZGV2X2ZyZWUgPSBzbmRfbXljaGlwX2Rldl9mcmVlLAorICAgICAgICAgIH07CisKKyAgICAgICAgICAqcmNoaXAgPSBOVUxMOworCisgICAgICAgICAgLy8gY2hlY2sgUENJIGF2YWlsYWJpbGl0eSBoZXJlCisgICAgICAgICAgLy8gKHNlZSAiUENJIFJlc291cmNlIE1hbmFnZW1lbnRzIikKKyAgICAgICAgICAuLi4uCisKKyAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovCisgICAgICAgICAgY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgICAgICAgY2hpcC0+Y2FyZCA9IGNhcmQ7CisKKyAgICAgICAgICAvLyByZXN0IG9mIGluaXRpYWxpemF0aW9uIGhlcmU7IHdpbGwgYmUgaW1wbGVtZW50ZWQKKyAgICAgICAgICAvLyBsYXRlciwgc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudHMiCisgICAgICAgICAgLi4uLgorCisgICAgICAgICAgaWYgKChlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwLCAmb3BzKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KKworICAgICAgICAgIHNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKKworICAgICAgICAgICpyY2hpcCA9IGNoaXA7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBjb25zdHJ1Y3RvciAtLSBzZWUgIkNvbnN0cnVjdG9yIiBzdWItc2VjdGlvbiAqLworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKKyAgeworICAgICAgICAgIHN0YXRpYyBpbnQgZGV2OworICAgICAgICAgIHNuZF9jYXJkX3QgKmNhcmQ7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXA7CisgICAgICAgICAgaW50IGVycjsKKworICAgICAgICAgIC8qICgxKSAqLworICAgICAgICAgIGlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgICBpZiAoIWVuYWJsZVtkZXZdKSB7CisgICAgICAgICAgICAgICAgICBkZXYrKzsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qICgyKSAqLworICAgICAgICAgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworICAgICAgICAgIGlmIChjYXJkID09IE5VTEwpCisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgICAgICAgIC8qICgzKSAqLworICAgICAgICAgIGlmICgoZXJyID0gc25kX215Y2hpcF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogKDQpICovCisgICAgICAgICAgc3RyY3B5KGNhcmQtPmRyaXZlciwgIk15IENoaXAiKTsKKyAgICAgICAgICBzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiTXkgT3duIENoaXAgMTIzIik7CisgICAgICAgICAgc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlaSIsCisgICAgICAgICAgICAgICAgICBjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPmlvcG9ydCwgY2hpcC0+aXJxKTsKKworICAgICAgICAgIC8qICg1KSAqLworICAgICAgICAgIC4uLi4gLy8gaW1wbGVtZW50ZWQgbGF0ZXIKKworICAgICAgICAgIC8qICg2KSAqLworICAgICAgICAgIGlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogKDcpICovCisgICAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBjaSwgY2FyZCk7CisgICAgICAgICAgZGV2Kys7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBkZXN0cnVjdG9yIC0tIHNlZSAiRGVzdHJ1Y3RvciIgc3ViLXNlY3Rpb24gKi8KKyAgc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9teWNoaXBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCisgIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKHBjaV9nZXRfZHJ2ZGF0YShwY2kpKTsKKyAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlYWwgY29uc3RydWN0b3Igb2YgUENJIGRyaXZlcnMgaXMgcHJvYmUgY2FsbGJhY2suIFRoZQorICAgICAgcHJvYmUgY2FsbGJhY2sgYW5kIG90aGVyIGNvbXBvbmVudC1jb25zdHJ1Y3RvcnMgd2hpY2ggYXJlIGNhbGxlZAorICAgICAgZnJvbSBwcm9iZSBjYWxsYmFjayBzaG91bGQgYmUgZGVmaW5lZCB3aXRoCisgICAgICA8cGFyYW1ldGVyPl9fZGV2aW5pdDwvcGFyYW1ldGVyPiBwcmVmaXguIFlvdSAKKyAgICAgIGNhbm5vdCB1c2UgPHBhcmFtZXRlcj5fX2luaXQ8L3BhcmFtZXRlcj4gcHJlZml4IGZvciB0aGVtLAorICAgICAgYmVjYXVzZSBhbnkgUENJIGRldmljZSBjb3VsZCBiZSBhIGhvdHBsdWcgZGV2aWNlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSBwcm9iZSBjYWxsYmFjaywgdGhlIGZvbGxvd2luZyBzY2hlbWUgaXMgb2Z0ZW4gdXNlZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItZGV2aWNlLWluZGV4Ij4KKyAgICAgICAgPHRpdGxlPjEpIENoZWNrIGFuZCBpbmNyZW1lbnQgdGhlIGRldmljZSBpbmRleC48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgZGV2OworICAuLi4uCisgIGlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgIGlmICghZW5hYmxlW2Rldl0pIHsKKyAgICAgICAgICBkZXYrKzsKKyAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIGVuYWJsZVtkZXZdIGlzIHRoZSBtb2R1bGUgb3B0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXQgZWFjaCB0aW1lIHByb2JlIGNhbGxiYWNrIGlzIGNhbGxlZCwgY2hlY2sgdGhlCisgICAgICAgIGF2YWlsYWJpbGl0eSBvZiB0aGUgZGV2aWNlLiBJZiBub3QgYXZhaWxhYmxlLCBzaW1wbHkgaW5jcmVtZW50CisgICAgICAgIHRoZSBkZXZpY2UgaW5kZXggYW5kIHJldHVybnMuIGRldiB3aWxsIGJlIGluY3JlbWVudGVkIGFsc28KKyAgICAgICAgbGF0ZXIgKDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3Itc2V0LXBjaSI+PGNpdGV0aXRsZT5zdGVwCisgICAgICAgIDc8L2NpdGV0aXRsZT48L2xpbms+KS4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItY3JlYXRlLWNhcmQiPgorICAgICAgICA8dGl0bGU+MikgQ3JlYXRlIGEgY2FyZCBpbnN0YW5jZTwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2NhcmRfdCAqY2FyZDsKKyAgLi4uLgorICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBkZXRhaWwgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24KKyAgICAgICAgICA8bGluayBsaW5rZW5kPSJjYXJkLW1hbmFnZW1lbnQtY2FyZC1pbnN0YW5jZSI+PGNpdGV0aXRsZT4KKyAgICAgICAgICBNYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtbWFpbiI+CisgICAgICAgIDx0aXRsZT4zKSBDcmVhdGUgYSBtYWluIGNvbXBvbmVudDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIHRoaXMgcGFydCwgdGhlIFBDSSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZC4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXljaGlwX3QgKmNoaXA7CisgIC4uLi4KKyAgaWYgKChlcnIgPSBzbmRfbXljaGlwX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKSkgPCAwKSB7CisgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGUgZGV0YWlsIHdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9InBjaS1yZXNvdXJjZSI+PGNpdGV0aXRsZT5QQ0kgUmVzb3VyY2UKKyAgICAgICAgTWFuYWdlbWVudHM8L2NpdGV0aXRsZT48L2xpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLW1haW4tY29tcG9uZW50Ij4KKyAgICAgICAgPHRpdGxlPjQpIFNldCB0aGUgZHJpdmVyIElEIGFuZCBuYW1lIHN0cmluZ3MuPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiTXkgQ2hpcCIpOworICBzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiTXkgT3duIENoaXAgMTIzIik7CisgIHNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCBpcnEgJWkiLAorICAgICAgICAgIGNhcmQtPnNob3J0bmFtZSwgY2hpcC0+aW9wb3J0LCBjaGlwLT5pcnEpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgVGhlIGRyaXZlciBmaWVsZCBob2xkcyB0aGUgbWluaW1hbCBJRCBzdHJpbmcgb2YgdGhlCisgICAgICAgIGNoaXAuIFRoaXMgaXMgcmVmZXJyZWQgYnkgYWxzYS1saWIncyBjb25maWd1cmF0b3IsIHNvIGtlZXAgaXQKKyAgICAgICAgc2ltcGxlIGJ1dCB1bmlxdWUuIAorICAgICAgICAgIEV2ZW4gdGhlIHNhbWUgZHJpdmVyIGNhbiBoYXZlIGRpZmZlcmVudCBkcml2ZXIgSURzIHRvCisgICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGVhY2ggY2hpcCB0eXBlLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBzaG9ydG5hbWUgZmllbGQgaXMgYSBzdHJpbmcgc2hvd24gYXMgbW9yZSB2ZXJib3NlCisgICAgICAgIG5hbWUuIFRoZSBsb25nbmFtZSBmaWVsZCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gd2hpY2ggaXMKKyAgICAgICAgc2hvd24gaW4gPGZpbGVuYW1lPi9wcm9jL2Fzb3VuZC9jYXJkczwvZmlsZW5hbWU+LiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtb3RoZXIiPgorICAgICAgICA8dGl0bGU+NSkgQ3JlYXRlIG90aGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgbWl4ZXIsIE1JREksIGV0Yy48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBIZXJlIHlvdSBkZWZpbmUgdGhlIGJhc2ljIGNvbXBvbmVudHMgc3VjaCBhcworICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UiPjxjaXRldGl0bGU+UENNPC9jaXRldGl0bGU+PC9saW5rPiwKKyAgICAgICAgICBtaXhlciAoZS5nLiA8bGluayBsaW5rZW5kPSJhcGktYWM5NyI+PGNpdGV0aXRsZT5BQzk3PC9jaXRldGl0bGU+PC9saW5rPiksCisgICAgICAgICAgTUlESSAoZS5nLiA8bGluayBsaW5rZW5kPSJtaWRpLWludGVyZmFjZSI+PGNpdGV0aXRsZT5NUFUtNDAxPC9jaXRldGl0bGU+PC9saW5rPiksCisgICAgICAgICAgYW5kIG90aGVyIGludGVyZmFjZXMuCisgICAgICAgICAgQWxzbywgaWYgeW91IHdhbnQgYSA8bGluayBsaW5rZW5kPSJwcm9jLWludGVyZmFjZSI+PGNpdGV0aXRsZT5wcm9jCisgICAgICAgIGZpbGU8L2NpdGV0aXRsZT48L2xpbms+LCBkZWZpbmUgaXQgaGVyZSwgdG9vLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLXJlZ2lzdGVyLWNhcmQiPgorICAgICAgICA8dGl0bGU+NikgUmVnaXN0ZXIgdGhlIGNhcmQgaW5zdGFuY2UuPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOworICAgICAgICAgIHJldHVybiBlcnI7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImNhcmQtbWFuYWdlbWVudC1yZWdpc3RyYXRpb24iPjxjaXRldGl0bGU+TWFuYWdlbWVudAorICAgICAgICBvZiBDYXJkcyBhbmQgQ29tcG9uZW50czwvY2l0ZXRpdGxlPjwvbGluaz4sIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3Itc2V0LXBjaSI+CisgICAgICAgIDx0aXRsZT43KSBTZXQgdGhlIFBDSSBkcml2ZXIgZGF0YSBhbmQgcmV0dXJuIHplcm8uPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBjYXJkKTsKKyAgICAgICAgZGV2Kys7CisgICAgICAgIHJldHVybiAwOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgSW4gdGhlIGFib3ZlLCB0aGUgY2FyZCByZWNvcmQgaXMgc3RvcmVkLiBUaGlzIHBvaW50ZXIgaXMKKyAgICAgICAgcmVmZXJyZWQgaW4gdGhlIHJlbW92ZSBjYWxsYmFjayBhbmQgcG93ZXItbWFuYWdlbWVudAorICAgICAgICBjYWxsYmFja3MsIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1kZXN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5EZXN0cnVjdG9yPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVzdHJ1Y3RvciwgcmVtb3ZlIGNhbGxiYWNrLCBzaW1wbHkgcmVsZWFzZXMgdGhlIGNhcmQKKyAgICAgIGluc3RhbmNlLiBUaGVuIHRoZSBBTFNBIG1pZGRsZSBsYXllciB3aWxsIHJlbGVhc2UgYWxsIHRoZQorICAgICAgYXR0YWNoZWQgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEl0IHdvdWxkIGJlIHR5cGljYWxseSBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9teWNoaXBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCisgIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKHBjaV9nZXRfZHJ2ZGF0YShwY2kpKTsKKyAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgVGhlIGFib3ZlIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBjYXJkIHBvaW50ZXIgaXMgc2V0IHRvIHRoZSBQQ0kKKwlkcml2ZXIgZGF0YS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1oZWFkZXItZmlsZXMiPgorICAgICAgPHRpdGxlPkhlYWRlciBGaWxlczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIHRoZSBhYm92ZSBleGFtcGxlLCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGluY2x1ZGUgZmlsZXMKKyAgICAgIGFyZSBuZWNlc3NhcnkuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorICAjaW5jbHVkZSA8c291bmQvY29yZS5oPgorICAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKwl3aGVyZSB0aGUgbGFzdCBvbmUgaXMgbmVjZXNzYXJ5IG9ubHkgd2hlbiBtb2R1bGUgb3B0aW9ucyBhcmUKKyAgICAgIGRlZmluZWQgaW4gdGhlIHNvdXJjZSBmaWxlLiAgSWYgdGhlIGNvZGVzIGFyZSBzcGxpdCB0byBzZXZlcmFsCisgICAgICBmaWxlcywgdGhlIGZpbGUgd2l0aG91dCBtb2R1bGUgb3B0aW9ucyBkb24ndCBuZWVkIHRoZW0uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGVtLCB5b3UnbGwgbmVlZAorICAgICAgPGZpbGVuYW1lPiZsdDtsaW51eC9pbnRlcnJ1cHQuaCZndDs8L2ZpbGVuYW1lPiBmb3IgdGhlIGludGVycnVwdAorICAgICAgaGFuZGxpbmcsIGFuZCA8ZmlsZW5hbWU+Jmx0O2FzbS9pby5oJmd0OzwvZmlsZW5hbWU+IGZvciB0aGUgaS9vCisgICAgICBhY2Nlc3MuIElmIHlvdSB1c2UgPGZ1bmN0aW9uPm1kZWxheSgpPC9mdW5jdGlvbj4gb3IKKyAgICAgIDxmdW5jdGlvbj51ZGVsYXkoKTwvZnVuY3Rpb24+IGZ1bmN0aW9ucywgeW91J2xsIG5lZWQgdG8gaW5jbHVkZQorICAgICAgPGZpbGVuYW1lPiZsdDtsaW51eC9kZWxheS5oJmd0OzwvZmlsZW5hbWU+LCB0b28uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBBTFNBIGludGVyZmFjZXMgbGlrZSBQQ00gb3IgY29udHJvbCBBUEkgYXJlIGRlZmluZWQgaW4gb3RoZXIKKyAgICAgIGhlYWRlciBmaWxlcyBhcyA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3h4eC5oJmd0OzwvZmlsZW5hbWU+LgorICAgICAgVGhleSBoYXZlIHRvIGJlIGluY2x1ZGVkIGFmdGVyCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2NvcmUuaCZndDs8L2ZpbGVuYW1lPi4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBNYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iY2FyZC1tYW5hZ2VtZW50Ij4KKyAgICA8dGl0bGU+TWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgQ29tcG9uZW50czwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNhcmQtaW5zdGFuY2UiPgorICAgICAgPHRpdGxlPkNhcmQgSW5zdGFuY2U8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICBGb3IgZWFjaCBzb3VuZGNhcmQsIGEgPHF1b3RlPmNhcmQ8L3F1b3RlPiByZWNvcmQgbXVzdCBiZSBhbGxvY2F0ZWQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQSBjYXJkIHJlY29yZCBpcyB0aGUgaGVhZHF1YXJ0ZXJzIG9mIHRoZSBzb3VuZGNhcmQuICBJdCBtYW5hZ2VzCisgICAgICB0aGUgbGlzdCBvZiB3aG9sZSBkZXZpY2VzIChjb21wb25lbnRzKSBvbiB0aGUgc291bmRjYXJkLCBzdWNoIGFzCisgICAgICBQQ00sIG1peGVycywgTUlESSwgc3ludGhlc2l6ZXIsIGFuZCBzbyBvbi4gIEFsc28sIHRoZSBjYXJkCisgICAgICByZWNvcmQgaG9sZHMgdGhlIElEIGFuZCB0aGUgbmFtZSBzdHJpbmdzIG9mIHRoZSBjYXJkLCBtYW5hZ2VzCisgICAgICB0aGUgcm9vdCBvZiBwcm9jIGZpbGVzLCBhbmQgY29udHJvbHMgdGhlIHBvd2VyLW1hbmFnZW1lbnQgc3RhdGVzCisgICAgICBhbmQgaG90cGx1ZyBkaXNjb25uZWN0aW9ucy4gIFRoZSBjb21wb25lbnQgbGlzdCBvbiB0aGUgY2FyZAorICAgICAgcmVjb3JkIGlzIHVzZWQgdG8gbWFuYWdlIHRoZSBwcm9wZXIgcmVsZWFzZXMgb2YgcmVzb3VyY2VzIGF0CisgICAgICBkZXN0cnVjdGlvbi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBcyBtZW50aW9uZWQgYWJvdmUsIHRvIGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2UsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9jYXJkX3QgKmNhcmQ7CisgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZnVuY3Rpb24gdGFrZXMgZm91ciBhcmd1bWVudHMsIHRoZSBjYXJkLWluZGV4IG51bWJlciwgdGhlCisgICAgICAgIGlkIHN0cmluZywgdGhlIG1vZHVsZSBwb2ludGVyICh1c3VhbGx5CisgICAgICAgIDxjb25zdGFudD5USElTX01PRFVMRTwvY29uc3RhbnQ+KSwKKyAgICAgICAgYW5kIHRoZSBzaXplIG9mIGV4dHJhLWRhdGEgc3BhY2UuICBUaGUgbGFzdCBhcmd1bWVudCBpcyB1c2VkIHRvCisgICAgICAgIGFsbG9jYXRlIGNhcmQtJmd0O3ByaXZhdGVfZGF0YSBmb3IgdGhlCisgICAgICAgIGNoaXAtc3BlY2lmaWMgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGRhdGEKKyAgICAgICAgPGVtcGhhc2lzPmlzPC9lbXBoYXNpcz4gYWxsb2NhdGVkIGJ5CisgICAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY29tcG9uZW50Ij4KKyAgICAgIDx0aXRsZT5Db21wb25lbnRzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciB0aGUgY2FyZCBpcyBjcmVhdGVkLCB5b3UgY2FuIGF0dGFjaCB0aGUgY29tcG9uZW50cworICAgICAgKGRldmljZXMpIHRvIHRoZSBjYXJkIGluc3RhbmNlLiBPbiBBTFNBIGRyaXZlciwgYSBjb21wb25lbnQgaXMKKyAgICAgIHJlcHJlc2VudGVkIGFzIGEgPHR5cGU+c25kX2RldmljZV90PC90eXBlPiBvYmplY3QuCisgICAgICBBIGNvbXBvbmVudCBjYW4gYmUgYSBQQ00gaW5zdGFuY2UsIGEgY29udHJvbCBpbnRlcmZhY2UsIGEgcmF3CisgICAgICBNSURJIGludGVyZmFjZSwgZXRjLiAgRWFjaCBvZiBzdWNoIGluc3RhbmNlcyBoYXMgb25lIGNvbXBvbmVudAorICAgICAgZW50cnkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBIGNvbXBvbmVudCBjYW4gYmUgY3JlYXRlZCB2aWEKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9kZXZpY2VfbmV3KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX1hYWCwgY2hpcCwgJm9wcyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgdGFrZXMgdGhlIGNhcmQgcG9pbnRlciwgdGhlIGRldmljZS1sZXZlbAorICAgICAgKDxjb25zdGFudD5TTkRSVl9ERVZfWFhYPC9jb25zdGFudD4pLCB0aGUgZGF0YSBwb2ludGVyLCBhbmQgdGhlCisgICAgICBjYWxsYmFjayBwb2ludGVycyAoPHBhcmFtZXRlcj4mYW1wO29wczwvcGFyYW1ldGVyPikuIFRoZQorICAgICAgZGV2aWNlLWxldmVsIGRlZmluZXMgdGhlIHR5cGUgb2YgY29tcG9uZW50cyBhbmQgdGhlIG9yZGVyIG9mCisgICAgICByZWdpc3RyYXRpb24gYW5kIGRlLXJlZ2lzdHJhdGlvbi4gIEZvciBtb3N0IG9mIGNvbXBvbmVudHMsIHRoZQorICAgICAgZGV2aWNlLWxldmVsIGlzIGFscmVhZHkgZGVmaW5lZC4gIEZvciBhIHVzZXItZGVmaW5lZCBjb21wb25lbnQsCisgICAgICB5b3UgY2FuIHVzZSA8Y29uc3RhbnQ+U05EUlZfREVWX0xPV0xFVkVMPC9jb25zdGFudD4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhpcyBmdW5jdGlvbiBpdHNlbGYgZG9lc24ndCBhbGxvY2F0ZSB0aGUgZGF0YSBzcGFjZS4gVGhlIGRhdGEKKyAgICAgIG11c3QgYmUgYWxsb2NhdGVkIG1hbnVhbGx5IGJlZm9yZWhhbmQsIGFuZCBpdHMgcG9pbnRlciBpcyBwYXNzZWQKKyAgICAgIGFzIHRoZSBhcmd1bWVudC4gVGhpcyBwb2ludGVyIGlzIHVzZWQgYXMgdGhlIGlkZW50aWZpZXIKKyAgICAgICg8cGFyYW1ldGVyPmNoaXA8L3BhcmFtZXRlcj4gaW4gdGhlIGFib3ZlIGV4YW1wbGUpIGZvciB0aGUKKyAgICAgIGluc3RhbmNlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEVhY2ggQUxTQSBwcmUtZGVmaW5lZCBjb21wb25lbnQgc3VjaCBhcyBhYzk3IG9yIHBjbSBjYWxscworICAgICAgPGZ1bmN0aW9uPnNuZF9kZXZpY2VfbmV3KCk8L2Z1bmN0aW9uPiBpbnNpZGUgaXRzCisgICAgICBjb25zdHJ1Y3Rvci4gVGhlIGRlc3RydWN0b3IgZm9yIGVhY2ggY29tcG9uZW50IGlzIGRlZmluZWQgaW4gdGhlCisgICAgICBjYWxsYmFjayBwb2ludGVycy4gIEhlbmNlLCB5b3UgZG9uJ3QgbmVlZCB0byB0YWtlIGNhcmUgb2YKKyAgICAgIGNhbGxpbmcgYSBkZXN0cnVjdG9yIGZvciBzdWNoIGEgY29tcG9uZW50LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IHdvdWxkIGxpa2UgdG8gY3JlYXRlIHlvdXIgb3duIGNvbXBvbmVudCwgeW91IG5lZWQgdG8KKyAgICAgIHNldCB0aGUgZGVzdHJ1Y3RvciBmdW5jdGlvbiB0byBkZXZfZnJlZSBjYWxsYmFjayBpbgorICAgICAgPHBhcmFtZXRlcj5vcHM8L3BhcmFtZXRlcj4sIHNvIHRoYXQgaXQgY2FuIGJlIHJlbGVhc2VkCisgICAgICBhdXRvbWF0aWNhbGx5IHZpYSA8ZnVuY3Rpb24+c25kX2NhcmRfZnJlZSgpPC9mdW5jdGlvbj4uIFRoZQorICAgICAgZXhhbXBsZSB3aWxsIGJlIHNob3duIGxhdGVyIGFzIGFuIGltcGxlbWVudGF0aW9uIG9mIGEKKyAgICAgIGNoaXAtc3BlY2lmaWMgZGF0YS4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNhcmQtbWFuYWdlbWVudC1jaGlwLXNwZWNpZmljIj4KKyAgICAgIDx0aXRsZT5DaGlwLVNwZWNpZmljIERhdGE8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICBUaGUgY2hpcC1zcGVjaWZpYyBpbmZvcm1hdGlvbiwgZS5nLiB0aGUgaS9vIHBvcnQgYWRkcmVzcywgaXRzCisgICAgICByZXNvdXJjZSBwb2ludGVyLCBvciB0aGUgaXJxIG51bWJlciwgaXMgc3RvcmVkIGluIHRoZQorICAgICAgY2hpcC1zcGVjaWZpYyByZWNvcmQuCisgICAgICBVc3VhbGx5LCB0aGUgY2hpcC1zcGVjaWZpYyByZWNvcmQgaXMgdHlwZWRlZidlZCBhcworICAgICAgPHR5cGU+eHh4X3Q8L3R5cGU+IGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICB0eXBlZGVmIHN0cnVjdCBzbmRfbXljaGlwIG15Y2hpcF90OworICBzdHJ1Y3Qgc25kX215Y2hpcCB7CisgICAgICAgICAgLi4uLgorICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiBnZW5lcmFsLCB0aGVyZSBhcmUgdHdvIHdheXMgdG8gYWxsb2NhdGUgdGhlIGNoaXAgcmVjb3JkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtc25kLWNhcmQtbmV3Ij4KKyAgICAgICAgPHRpdGxlPjEuIEFsbG9jYXRpbmcgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgeW91IGNhbiBwYXNzIHRoZSBleHRyYS1kYXRhLWxlbmd0aCB0byB0aGUgNHRoIGFyZ3VtZW50IG9mIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LCBpLmUuCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIHNpemVvZihteWNoaXBfdCkpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgd2hldGhlciA8dHlwZT5teWNoaXBfdDwvdHlwZT4gaXMgdGhlIHR5cGUgb2YgdGhlIGNoaXAgcmVjb3JkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gcmV0dXJuLCB0aGUgYWxsb2NhdGVkIHJlY29yZCBjYW4gYmUgYWNjZXNzZWQgYXMKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXljaGlwX3QgKmNoaXAgPSAobXljaGlwX3QgKiljYXJkLT5wcml2YXRlX2RhdGE7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBXaXRoIHRoaXMgbWV0aG9kLCB5b3UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSB0d2ljZS4KKyAgICAgICAgICBUaGUgcmVjb3JkIGlzIHJlbGVhc2VkIHRvZ2V0aGVyIHdpdGggdGhlIGNhcmQgaW5zdGFuY2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNhcmQtbWFuYWdlbWVudC1jaGlwLXNwZWNpZmljLWFsbG9jYXRlLWV4dHJhIj4KKyAgICAgICAgPHRpdGxlPjIuIEFsbG9jYXRpbmcgYW4gZXh0cmEgZGV2aWNlLjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWZ0ZXIgYWxsb2NhdGluZyBhIGNhcmQgaW5zdGFuY2UgdmlhCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4gKHdpdGgKKyAgICAgICAgICA8Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+IG9uIHRoZSA0dGggYXJnKSwgY2FsbAorICAgICAgICAgIDxmdW5jdGlvbj5rY2FsbG9jKCk8L2Z1bmN0aW9uPi4gCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9jYXJkX3QgKmNhcmQ7CisgIG15Y2hpcF90ICpjaGlwOworICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKKyAgLi4uLi4KKyAgY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgY2hpcCByZWNvcmQgc2hvdWxkIGhhdmUgdGhlIGZpZWxkIHRvIGhvbGQgdGhlIGNhcmQKKyAgICAgICAgICBwb2ludGVyIGF0IGxlYXN0LCAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9teWNoaXAgeworICAgICAgICAgIHNuZF9jYXJkX3QgKmNhcmQ7CisgICAgICAgICAgLi4uLgorICB9OworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlbiwgc2V0IHRoZSBjYXJkIHBvaW50ZXIgaW4gdGhlIHJldHVybmVkIGNoaXAgaW5zdGFuY2UuCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGNoaXAtPmNhcmQgPSBjYXJkOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTmV4dCwgaW5pdGlhbGl6ZSB0aGUgZmllbGRzLCBhbmQgcmVnaXN0ZXIgdGhpcyBjaGlwCisgICAgICAgICAgcmVjb3JkIGFzIGEgbG93LWxldmVsIGRldmljZSB3aXRoIGEgc3BlY2lmaWVkCisgICAgICAgICAgPHBhcmFtZXRlcj5vcHM8L3BhcmFtZXRlcj4sIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc25kX2RldmljZV9vcHNfdCBvcHMgPSB7CisgICAgICAgICAgLmRldl9mcmVlID0gICAgICAgIHNuZF9teWNoaXBfZGV2X2ZyZWUsCisgIH07CisgIC4uLi4KKyAgc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIDxmdW5jdGlvbj5zbmRfbXljaGlwX2Rldl9mcmVlKCk8L2Z1bmN0aW9uPiBpcyB0aGUKKyAgICAgICAgZGV2aWNlLWRlc3RydWN0b3IgZnVuY3Rpb24sIHdoaWNoIHdpbGwgY2FsbCB0aGUgcmVhbAorICAgICAgICBkZXN0cnVjdG9yLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2Rldl9mcmVlKHNuZF9kZXZpY2VfdCAqZGV2aWNlKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBkZXZpY2UtPmRldmljZV9kYXRhOworICAgICAgICAgIHJldHVybiBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIHdoZXJlIDxmdW5jdGlvbj5zbmRfbXljaGlwX2ZyZWUoKTwvZnVuY3Rpb24+IGlzIHRoZSByZWFsIGRlc3RydWN0b3IuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LXJlZ2lzdHJhdGlvbiI+CisgICAgICA8dGl0bGU+UmVnaXN0cmF0aW9uIGFuZCBSZWxlYXNlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciBhbGwgY29tcG9uZW50cyBhcmUgYXNzaWduZWQsIHJlZ2lzdGVyIHRoZSBjYXJkIGluc3RhbmNlCisgICAgICBieSBjYWxsaW5nIDxmdW5jdGlvbj5zbmRfY2FyZF9yZWdpc3RlcigpPC9mdW5jdGlvbj4uIFRoZSBhY2Nlc3MKKyAgICAgIHRvIHRoZSBkZXZpY2UgZmlsZXMgYXJlIGVuYWJsZWQgYXQgdGhpcyBwb2ludC4gVGhhdCBpcywgYmVmb3JlCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfcmVnaXN0ZXIoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgdGhlCisgICAgICBjb21wb25lbnRzIGFyZSBzYWZlbHkgaW5hY2Nlc3NpYmxlIGZyb20gZXh0ZXJuYWwgc2lkZS4gSWYgdGhpcworICAgICAgY2FsbCBmYWlscywgZXhpdCB0aGUgcHJvYmUgZnVuY3Rpb24gYWZ0ZXIgcmVsZWFzaW5nIHRoZSBjYXJkIHZpYQorICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciByZWxlYXNpbmcgdGhlIGNhcmQgaW5zdGFuY2UsIHlvdSBjYW4gY2FsbCBzaW1wbHkKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9mcmVlKCk8L2Z1bmN0aW9uPi4gQXMgYWxyZWFkeSBtZW50aW9uZWQsIGFsbAorICAgICAgY29tcG9uZW50cyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseSBieSB0aGlzIGNhbGwuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQXMgZnVydGhlciBub3RlcywgdGhlIGRlc3RydWN0b3JzIChib3RoCisgICAgICA8ZnVuY3Rpb24+c25kX215Y2hpcF9kZXZfZnJlZTwvZnVuY3Rpb24+IGFuZAorICAgICAgPGZ1bmN0aW9uPnNuZF9teWNoaXBfZnJlZTwvZnVuY3Rpb24+KSBjYW5ub3QgYmUgZGVmaW5lZCB3aXRoCisgICAgICA8cGFyYW1ldGVyPl9fZGV2ZXhpdDwvcGFyYW1ldGVyPiBwcmVmaXgsIGJlY2F1c2UgdGhleSBtYXkgYmUKKyAgICAgIGNhbGxlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvciwgdG9vLCBhdCB0aGUgZmFsc2UgcGF0aC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgRm9yIGEgZGV2aWNlIHdoaWNoIGFsbG93cyBob3RwbHVnZ2luZywgeW91IGNhbiB1c2UKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9mcmVlX2luX3RocmVhZDwvZnVuY3Rpb24+LiAgVGhpcyBvbmUgd2lsbAorICAgICAgcG9zdHBvbmUgdGhlIGRlc3RydWN0aW9uIGFuZCB3YWl0IGluIGEga2VybmVsLXRocmVhZCB1bnRpbCBhbGwKKyAgICAgIGRldmljZXMgYXJlIGNsb3NlZC4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIFBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50cyAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InBjaS1yZXNvdXJjZSI+CisgICAgPHRpdGxlPlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50czwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0icGNpLXJlc291cmNlLWV4YW1wbGUiPgorICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGlzIHNlY3Rpb24sIHdlJ2xsIGZpbmlzaCB0aGUgY2hpcC1zcGVjaWZpYyBjb25zdHJ1Y3RvciwKKyAgICAgIGRlc3RydWN0b3IgYW5kIFBDSSBlbnRyaWVzLiBUaGUgZXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LAorICAgICAgYmVsb3cuIAorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5QQ0kgUmVzb3VyY2UgTWFuYWdlbWVudHMgRXhhbXBsZTwvdGl0bGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfbXljaGlwIHsKKyAgICAgICAgICBzbmRfY2FyZF90ICpjYXJkOworICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2k7CisKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcnQ7CisgICAgICAgICAgaW50IGlycTsKKyAgfTsKKworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZnJlZShteWNoaXBfdCAqY2hpcCkKKyAgeworICAgICAgICAgIC8qIGRpc2FibGUgaGFyZHdhcmUgaGVyZSBpZiBhbnkgKi8KKyAgICAgICAgICAuLi4uIC8vIChub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBkb2N1bWVudCkKKworICAgICAgICAgIC8qIHJlbGVhc2UgdGhlIGlycSAqLworICAgICAgICAgIGlmIChjaGlwLT5pcnEgPj0gMCkKKyAgICAgICAgICAgICAgICAgIGZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKyAgICAgICAgICAvKiByZWxlYXNlIHRoZSBpL28gcG9ydHMgJiBtZW1vcnkgKi8KKyAgICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CisgICAgICAgICAgLyogZGlzYWJsZSB0aGUgUENJIGVudHJ5ICovCisgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CisgICAgICAgICAgLyogcmVsZWFzZSB0aGUgZGF0YSAqLworICAgICAgICAgIGtmcmVlKGNoaXApOworICAgICAgICAgIHJldHVybiAwOworICB9CisKKyAgLyogY2hpcC1zcGVjaWZpYyBjb25zdHJ1Y3RvciAqLworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteWNoaXBfdCAqKnJjaGlwKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXA7CisgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICBzdGF0aWMgc25kX2RldmljZV9vcHNfdCBvcHMgPSB7CisgICAgICAgICAgICAgICAgIC5kZXZfZnJlZSA9IHNuZF9teWNoaXBfZGV2X2ZyZWUsCisgICAgICAgICAgfTsKKworICAgICAgICAgICpyY2hpcCA9IE5VTEw7CisKKyAgICAgICAgICAvKiBpbml0aWFsaXplIHRoZSBQQ0kgZW50cnkgKi8KKyAgICAgICAgICBpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgLyogY2hlY2sgUENJIGF2YWlsYWJpbGl0eSAoMjhiaXQgRE1BKSAqLworICAgICAgICAgIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwIHx8CisgICAgICAgICAgICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCkgeworICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOworICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOworICAgICAgICAgIH0KKworICAgICAgICAgIGNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgc3R1ZmYgKi8KKyAgICAgICAgICBjaGlwLT5jYXJkID0gY2FyZDsKKyAgICAgICAgICBjaGlwLT5wY2kgPSBwY2k7CisgICAgICAgICAgY2hpcC0+aXJxID0gLTE7CisKKyAgICAgICAgICAvKiAoMSkgUENJIHJlc291cmNlIGFsbG9jYXRpb24gKi8KKyAgICAgICAgICBpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgIGtmcmVlKGNoaXApOworICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KKyAgICAgICAgICBjaGlwLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CisgICAgICAgICAgaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbXljaGlwX2ludGVycnVwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU0FfSU5URVJSVVBUfFNBX1NISVJRLCAiTXkgQ2hpcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopY2hpcCkpIHsKKyAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiY2Fubm90IGdyYWIgaXJxICVkXG4iLCBwY2ktPmlycSk7CisgICAgICAgICAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworICAgICAgICAgIH0KKyAgICAgICAgICBjaGlwLT5pcnEgPSBwY2ktPmlycTsKKworICAgICAgICAgIC8qICgyKSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2hpcCBoYXJkd2FyZSAqLworICAgICAgICAgIC4uLi4gLy8gICAobm90IGltcGxlbWVudGVkIGluIHRoaXMgZG9jdW1lbnQpCisKKyAgICAgICAgICBpZiAoKGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAsICZvcHMpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOworCisgICAgICAgICAgKnJjaGlwID0gY2hpcDsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfSAgICAgICAgCisKKyAgLyogUENJIElEcyAqLworICBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX215Y2hpcF9pZHNbXSA9IHsKKyAgICAgICAgICB7IFBDSV9WRU5ET1JfSURfRk9PLCBQQ0lfREVWSUNFX0lEX0JBUiwKKyAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCisgICAgICAgICAgLi4uLgorICAgICAgICAgIHsgMCwgfQorICB9OworICBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc25kX215Y2hpcF9pZHMpOworCisgIC8qIHBjaV9kcml2ZXIgZGVmaW5pdGlvbiAqLworICBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworICAgICAgICAgIC5uYW1lID0gIk15IE93biBDaGlwIiwKKyAgICAgICAgICAuaWRfdGFibGUgPSBzbmRfbXljaGlwX2lkcywKKyAgICAgICAgICAucHJvYmUgPSBzbmRfbXljaGlwX3Byb2JlLAorICAgICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXljaGlwX3JlbW92ZSksCisgIH07CisKKyAgLyogaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1vZHVsZSAqLworICBzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfbXljaGlwX2luaXQodm9pZCkKKyAgeworICAgICAgICAgIHJldHVybiBwY2lfbW9kdWxlX2luaXQoJmRyaXZlcik7CisgIH0KKworICAvKiBjbGVhbiB1cCB0aGUgbW9kdWxlICovCisgIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfbXljaGlwX2V4aXQodm9pZCkKKyAgeworICAgICAgICAgIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKyAgfQorCisgIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9teWNoaXBfaW5pdCkKKyAgbW9kdWxlX2V4aXQoYWxzYV9jYXJkX215Y2hpcF9leGl0KQorCisgIEVYUE9SVF9OT19TWU1CT0xTOyAvKiBmb3Igb2xkIGtlcm5lbHMgb25seSAqLworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2Utc29tZS1oYWZ0YXMiPgorICAgICAgPHRpdGxlPlNvbWUgSGFmdGEnczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgUENJIHJlc291cmNlcyBpcyBkb25lIGluIHRoZQorICAgICAgPGZ1bmN0aW9uPnByb2JlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgYW5kIHVzdWFsbHkgYW4gZXh0cmEKKyAgICAgIDxmdW5jdGlvbj54eHhfY3JlYXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpcyB3cml0dGVuIGZvciB0aGlzCisgICAgICBwdXJwb3NlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSBjYXNlIG9mIFBDSSBkZXZpY2VzLCB5b3UgaGF2ZSB0byBjYWxsIGF0IGZpcnN0CisgICAgICA8ZnVuY3Rpb24+cGNpX2VuYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGJlZm9yZQorICAgICAgYWxsb2NhdGluZyByZXNvdXJjZXMuIEFsc28sIHlvdSBuZWVkIHRvIHNldCB0aGUgcHJvcGVyIFBDSSBETUEKKyAgICAgIG1hc2sgdG8gbGltaXQgdGhlIGFjY2Vzc2VkIGkvbyByYW5nZS4gSW4gc29tZSBjYXNlcywgeW91IG1pZ2h0CisgICAgICBuZWVkIHRvIGNhbGwgPGZ1bmN0aW9uPnBjaV9zZXRfbWFzdGVyKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwKKyAgICAgIHRvby4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBTdXBwb3NlIHRoZSAyOGJpdCBtYXNrLCBhbmQgdGhlIGNvZGUgdG8gYmUgYWRkZWQgd291bGQgYmUgbGlrZToKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKKyAgICAgICAgICByZXR1cm4gZXJyOworICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCB8fAorICAgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwKSB7CisgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOworICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOworICAgICAgICAgIHJldHVybiAtRU5YSU87CisgIH0KKyAgCitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNpLXJlc291cmNlLXJlc291cmNlLWFsbG9jYXRpb24iPgorICAgICAgPHRpdGxlPlJlc291cmNlIEFsbG9jYXRpb248L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIEkvTyBwb3J0cyBhbmQgaXJxcyBhcmUgZG9uZSB2aWEgc3RhbmRhcmQga2VybmVsCisgICAgICBmdW5jdGlvbnMuIFVubGlrZSBBTFNBIHZlci4wLjUueC4sIHRoZXJlIGFyZSBubyBoZWxwZXJzIGZvcgorICAgICAgdGhhdC4gQW5kIHRoZXNlIHJlc291cmNlcyBtdXN0IGJlIHJlbGVhc2VkIGluIHRoZSBkZXN0cnVjdG9yCisgICAgICBmdW5jdGlvbiAoc2VlIGJlbG93KS4gQWxzbywgb24gQUxTQSAwLjkueCwgeW91IGRvbid0IG5lZWQgdG8KKyAgICAgIGFsbG9jYXRlIChwc2V1ZG8tKURNQSBmb3IgUENJIGxpa2UgQUxTQSAwLjUueC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBOb3cgYXNzdW1lIHRoYXQgdGhpcyBQQ0kgZGV2aWNlIGhhcyBhbiBJL08gcG9ydCB3aXRoIDggYnl0ZXMKKyAgICAgICAgYW5kIGFuIGludGVycnVwdC4gVGhlbiA8dHlwZT5teWNoaXBfdDwvdHlwZT4gd2lsbCBoYXZlIHRoZQorICAgICAgICBmb2xsb3dpbmcgZmllbGRzOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3Qgc25kX215Y2hpcCB7CisgICAgICAgICAgc25kX2NhcmRfdCAqY2FyZDsKKworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydDsKKyAgICAgICAgICBpbnQgaXJxOworICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgYW4gaS9vIHBvcnQgKGFuZCBhbHNvIGEgbWVtb3J5IHJlZ2lvbiksIHlvdSBuZWVkIHRvIGhhdmUKKyAgICAgIHRoZSByZXNvdXJjZSBwb2ludGVyIGZvciB0aGUgc3RhbmRhcmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gRm9yCisgICAgICBhbiBpcnEsIHlvdSBoYXZlIHRvIGtlZXAgb25seSB0aGUgaXJxIG51bWJlciAoaW50ZWdlcikuIEJ1dCB5b3UKKyAgICAgIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGlzIG51bWJlciBhcyAtMSBiZWZvcmUgYWN0dWFsIGFsbG9jYXRpb24sCisgICAgICBzaW5jZSBpcnEgMCBpcyB2YWxpZC4gVGhlIHBvcnQgYWRkcmVzcyBhbmQgaXRzIHJlc291cmNlIHBvaW50ZXIKKyAgICAgIGNhbiBiZSBpbml0aWFsaXplZCBhcyBudWxsIGJ5CisgICAgICA8ZnVuY3Rpb24+a2NhbGxvYygpPC9mdW5jdGlvbj4gYXV0b21hdGljYWxseSwgc28geW91CisgICAgICBkb24ndCBoYXZlIHRvIHRha2UgY2FyZSBvZiByZXNldHRpbmcgdGhlbS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYWxsb2NhdGlvbiBvZiBhbiBpL28gcG9ydCBpcyBkb25lIGxpa2UgdGhpczoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpKSA8IDApIHsgCisgICAgICAgICAga2ZyZWUoY2hpcCk7CisgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgfQorICBjaGlwLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIDwhLS0gb2Jzb2xldGUgLS0+CisgICAgICAgIEl0IHdpbGwgcmVzZXJ2ZSB0aGUgaS9vIHBvcnQgcmVnaW9uIG9mIDggYnl0ZXMgb2YgdGhlIGdpdmVuCisgICAgICBQQ0kgZGV2aWNlLiBUaGUgcmV0dXJuZWQgdmFsdWUsIGNoaXAtJmd0O3Jlc19wb3J0LCBpcyBhbGxvY2F0ZWQKKyAgICAgIHZpYSA8ZnVuY3Rpb24+a21hbGxvYygpPC9mdW5jdGlvbj4gYnkKKyAgICAgIDxmdW5jdGlvbj5yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4uIFRoZSBwb2ludGVyIG11c3QgYmUKKyAgICAgIHJlbGVhc2VkIHZpYSA8ZnVuY3Rpb24+a2ZyZWUoKTwvZnVuY3Rpb24+LCBidXQgdGhlcmUgaXMgc29tZQorICAgICAgcHJvYmxlbSByZWdhcmRpbmcgdGhpcy4gVGhpcyBpc3N1ZSB3aWxsIGJlIGV4cGxhaW5lZCBtb3JlIGJlbG93LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgYW4gaW50ZXJydXB0IHNvdXJjZSBpcyBkb25lIGxpa2UgdGhpczoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9teWNoaXBfaW50ZXJydXB0LAorICAgICAgICAgICAgICAgICAgU0FfSU5URVJSVVBUfFNBX1NISVJRLCAiTXkgQ2hpcCIsCisgICAgICAgICAgICAgICAgICAodm9pZCAqKWNoaXApKSB7CisgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnEgJWRcbiIsIHBjaS0+aXJxKTsKKyAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgfQorICBjaGlwLT5pcnEgPSBwY2ktPmlycTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIDxmdW5jdGlvbj5zbmRfbXljaGlwX2ludGVycnVwdCgpPC9mdW5jdGlvbj4gaXMgdGhlCisgICAgICBpbnRlcnJ1cHQgaGFuZGxlciBkZWZpbmVkIDxsaW5rCisgICAgICBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyIj48Y2l0ZXRpdGxlPmxhdGVyPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgIE5vdGUgdGhhdCBjaGlwLSZndDtpcnEgc2hvdWxkIGJlIGRlZmluZWQKKyAgICAgIG9ubHkgd2hlbiA8ZnVuY3Rpb24+cmVxdWVzdF9pcnEoKTwvZnVuY3Rpb24+IHN1Y2NlZWRlZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBPbiB0aGUgUENJIGJ1cywgdGhlIGludGVycnVwdHMgY2FuIGJlIHNoYXJlZC4gVGh1cywKKyAgICAgIDxjb25zdGFudD5TQV9TSElSUTwvY29uc3RhbnQ+IGlzIGdpdmVuIGFzIHRoZSBpbnRlcnJ1cHQgZmxhZyBvZgorICAgICAgPGZ1bmN0aW9uPnJlcXVlc3RfaXJxKCk8L2Z1bmN0aW9uPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbGFzdCBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+cmVxdWVzdF9pcnEoKTwvZnVuY3Rpb24+IGlzIHRoZQorICAgICAgZGF0YSBwb2ludGVyIHBhc3NlZCB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFVzdWFsbHksIHRoZQorICAgICAgY2hpcC1zcGVjaWZpYyByZWNvcmQgaXMgdXNlZCBmb3IgdGhhdCwgYnV0IHlvdSBjYW4gdXNlIHdoYXQgeW91CisgICAgICBsaWtlLCB0b28uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSSB3b24ndCBkZWZpbmUgdGhlIGRldGFpbCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYXQgdGhpcworICAgICAgICBwb2ludCwgYnV0IGF0IGxlYXN0IGl0cyBhcHBlYXJhbmNlIGNhbiBiZSBleHBsYWluZWQgbm93LiBUaGUKKyAgICAgICAgaW50ZXJydXB0IGhhbmRsZXIgbG9va3MgdXN1YWxseSBsaWtlIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfbXljaGlwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gZGV2X2lkOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTm93IGxldCdzIHdyaXRlIHRoZSBjb3JyZXNwb25kaW5nIGRlc3RydWN0b3IgZm9yIHRoZSByZXNvdXJjZXMKKyAgICAgIGFib3ZlLiBUaGUgcm9sZSBvZiBkZXN0cnVjdG9yIGlzIHNpbXBsZTogZGlzYWJsZSB0aGUgaGFyZHdhcmUKKyAgICAgIChpZiBhbHJlYWR5IGFjdGl2YXRlZCkgYW5kIHJlbGVhc2UgdGhlIHJlc291cmNlcy4gU28gZmFyLCB3ZQorICAgICAgaGF2ZSBubyBoYXJkd2FyZSBwYXJ0LCBzbyB0aGUgZGlzYWJsaW5nIGlzIG5vdCB3cml0dGVuIGhlcmUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIHJlbGVhc2luZyB0aGUgcmVzb3VyY2VzLCA8cXVvdGU+Y2hlY2stYW5kLXJlbGVhc2U8L3F1b3RlPgorICAgICAgICBtZXRob2QgaXMgYSBzYWZlciB3YXkuIEZvciB0aGUgaW50ZXJydXB0LCBkbyBsaWtlIHRoaXM6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGlmIChjaGlwLT5pcnEgPj0gMCkKKyAgICAgICAgICBmcmVlX2lycShjaGlwLT5pcnEsICh2b2lkICopY2hpcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBTaW5jZSB0aGUgaXJxIG51bWJlciBjYW4gc3RhcnQgZnJvbSAwLCB5b3Ugc2hvdWxkIGluaXRpYWxpemUKKyAgICAgICAgY2hpcC0mZ3Q7aXJxIHdpdGggYSBuZWdhdGl2ZSB2YWx1ZSAoZS5nLiAtMSksIHNvIHRoYXQgeW91IGNhbgorICAgICAgICBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGlycSBudW1iZXIgYXMgYWJvdmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSByZXF1ZXN0ZWQgSS9PIHBvcnRzIG9yIG1lbW9yeSByZWdpb25zIHZpYQorCTxmdW5jdGlvbj5wY2lfcmVxdWVzdF9yZWdpb24oKTwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPnBjaV9yZXF1ZXN0X3JlZ2lvbnMoKTwvZnVuY3Rpb24+IGxpa2UgdGhpcyBleGFtcGxlLAorCXJlbGVhc2UgdGhlIHJlc291cmNlKHMpIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uLAorCTxmdW5jdGlvbj5wY2lfcmVsZWFzZV9yZWdpb24oKTwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPnBjaV9yZWxlYXNlX3JlZ2lvbnMoKTwvZnVuY3Rpb24+LgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlXaGVuIHlvdSByZXF1ZXN0ZWQgbWFudWFsbHkgdmlhIDxmdW5jdGlvbj5yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4KKwlvciA8ZnVuY3Rpb24+cmVxdWVzdF9tZW1fcmVnaW9uPC9mdW5jdGlvbj4sIHlvdSBjYW4gcmVsZWFzZSBpdCB2aWEKKwk8ZnVuY3Rpb24+cmVsZWFzZV9yZXNvdXJjZSgpPC9mdW5jdGlvbj4uICBTdXBwb3NlIHRoYXQgeW91IGtlZXAKKwl0aGUgcmVzb3VyY2UgcG9pbnRlciByZXR1cm5lZCBmcm9tIDxmdW5jdGlvbj5yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4KKwlpbiBjaGlwLSZndDtyZXNfcG9ydCwgdGhlIHJlbGVhc2UgcHJvY2VkdXJlIGxvb2tzIGxpa2UgYmVsb3c6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKGNoaXAtPnJlc19wb3J0KSB7CisgICAgICAgICAgcmVsZWFzZV9yZXNvdXJjZShjaGlwLT5yZXNfcG9ydCk7CisgICAgICAgICAga2ZyZWVfbm9jaGVjayhjaGlwLT5yZXNfcG9ydCk7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICBBcyB5b3UgY2FuIHNlZSwgdGhlIHJlc291cmNlIHBvaW50ZXIgaXMgYWxzbyB0byBiZSBmcmVlZAorICAgICAgdmlhIDxmdW5jdGlvbj5rZnJlZV9ub2NoZWNrKCk8L2Z1bmN0aW9uPiBhZnRlcgorICAgICAgPGZ1bmN0aW9uPnJlbGVhc2VfcmVzb3VyY2UoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZC4gWW91CisgICAgICBjYW5ub3QgdXNlIDxmdW5jdGlvbj5rZnJlZSgpPC9mdW5jdGlvbj4gaGVyZSwgYmVjYXVzZSBvbiBBTFNBLAorICAgICAgPGZ1bmN0aW9uPmtmcmVlKCk8L2Z1bmN0aW9uPiBtYXkgYmUgYSB3cmFwcGVyIHRvIGl0cyBvd24KKyAgICAgIGFsbG9jYXRvciB3aXRoIHRoZSBtZW1vcnkgZGVidWdnaW5nLiBTaW5jZSB0aGUgcmVzb3VyY2UgcG9pbnRlcgorICAgICAgaXMgYWxsb2NhdGVkIGV4dGVybmFsbHkgb3V0c2lkZSB0aGUgQUxTQSwgaXQgbXVzdCBiZSByZWxlYXNlZAorICAgICAgdmlhIHRoZSBuYXRpdmUKKyAgICAgIDxmdW5jdGlvbj5rZnJlZSgpPC9mdW5jdGlvbj4uCisgICAgICA8ZnVuY3Rpb24+a2ZyZWVfbm9jaGVjaygpPC9mdW5jdGlvbj4gaXMgdXNlZCBmb3IgdGhhdDsgaXQgY2FsbHMKKyAgICAgIHRoZSBuYXRpdmUgPGZ1bmN0aW9uPmtmcmVlKCk8L2Z1bmN0aW9uPiB3aXRob3V0IHdyYXBwZXIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIERvbid0IGZvcmdldCB0byBjYWxsIDxmdW5jdGlvbj5wY2lfZGlzYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+CisgICAgICBiZWZvcmUgYWxsIGZpbmlzaGVkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQW5kIGZpbmFsbHksIHJlbGVhc2UgdGhlIGNoaXAtc3BlY2lmaWMgcmVjb3JkLgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGtmcmVlKGNoaXApOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQWdhaW4sIHJlbWVtYmVyIHRoYXQgeW91IGNhbm5vdAorICAgICAgc2V0IDxwYXJhbWV0ZXI+X19kZXZleGl0PC9wYXJhbWV0ZXI+IHByZWZpeCBmb3IgdGhpcyBkZXN0cnVjdG9yLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBXZSBkaWRuJ3QgaW1wbGVtZW50IHRoZSBoYXJkd2FyZS1kaXNhYmxpbmcgcGFydCBpbiB0aGUgYWJvdmUuCisgICAgICBJZiB5b3UgbmVlZCB0byBkbyB0aGlzLCBwbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZXN0cnVjdG9yIG1heSBiZQorICAgICAgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2hpcCBpcyBjb21wbGV0ZWQuCisgICAgICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSBhIGZsYWcgdG8gc2tpcCB0aGUgaGFyZHdhcmUtZGlzYWJsaW5nCisgICAgICBpZiB0aGUgaGFyZHdhcmUgd2FzIG5vdCBpbml0aWFsaXplZCB5ZXQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgV2hlbiB0aGUgY2hpcC1kYXRhIGlzIGFzc2lnbmVkIHRvIHRoZSBjYXJkIHVzaW5nCisgICAgICA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+IHdpdGgKKyAgICAgIDxjb25zdGFudD5TTkRSVl9ERVZfTE9XTEVMVkVMPC9jb25zdGFudD4gLCBpdHMgZGVzdHJ1Y3RvciBpcyAKKyAgICAgIGNhbGxlZCBhdCB0aGUgbGFzdC4gIFRoYXQgaXMsIGl0IGlzIGFzc3VyZWQgdGhhdCBhbGwgb3RoZXIKKyAgICAgIGNvbXBvbmVudHMgbGlrZSBQQ01zIGFuZCBjb250cm9scyBoYXZlIGJlZW4gYWxyZWFkeSByZWxlYXNlZC4KKyAgICAgIFlvdSBkb24ndCBoYXZlIHRvIGNhbGwgc3RvcHBpbmcgUENNcywgZXRjLiBleHBsaWNpdGx5LCBidXQganVzdAorICAgICAgc3RvcCB0aGUgaGFyZHdhcmUgaW4gdGhlIGxvdy1sZXZlbC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBtYW5hZ2VtZW50IG9mIGEgbWVtb3J5LW1hcHBlZCByZWdpb24gaXMgYWxtb3N0IGFzIHNhbWUgYXMKKyAgICAgICAgdGhlIG1hbmFnZW1lbnQgb2YgYW4gaS9vIHBvcnQuIFlvdSdsbCBuZWVkIHRocmVlIGZpZWxkcyBsaWtlCisgICAgICAgIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfbXljaGlwIHsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgdW5zaWduZWQgbG9uZyBpb2Jhc2VfcGh5czsKKyAgICAgICAgICB2b2lkIF9faW9tZW0gKmlvYmFzZV92aXJ0OworICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgYW5kIHRoZSBhbGxvY2F0aW9uIHdvdWxkIGJlIGxpa2UgYmVsb3c6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKChlcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgIk15IENoaXAiKSkgPCAwKSB7CisgICAgICAgICAga2ZyZWUoY2hpcCk7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgfQorICBjaGlwLT5pb2Jhc2VfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOworICBjaGlwLT5pb2Jhc2VfdmlydCA9IGlvcmVtYXBfbm9jYWNoZShjaGlwLT5pb2Jhc2VfcGh5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2ksIDApKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICAKKyAgICAgICAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGRlc3RydWN0b3Igd291bGQgYmU6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2ZyZWUobXljaGlwX3QgKmNoaXApCisgIHsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgaWYgKGNoaXAtPmlvYmFzZV92aXJ0KQorICAgICAgICAgICAgICAgICAgaW91bm1hcChjaGlwLT5pb2Jhc2VfdmlydCk7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1kZXZpY2Utc3RydWN0Ij4KKyAgICAgIDx0aXRsZT5SZWdpc3RyYXRpb24gb2YgRGV2aWNlIFN0cnVjdDwvdGl0bGU+CisgICAgICA8cGFyYT4KKwlBdCBzb21lIHBvaW50LCB0eXBpY2FsbHkgYWZ0ZXIgY2FsbGluZyA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+LAorCXlvdSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSA8c3RydWN0bmFtZT5zdHJ1Y3QgZGV2aWNlPC9zdHJ1Y3RuYW1lPiBvZiB0aGUgY2hpcAorCXlvdSdyZSBoYW5kbGluZyBmb3IgdWRldiBhbmQgY28uICBBTFNBIHByb3ZpZGVzIGEgbWFjcm8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorCW9sZGVyIGtlcm5lbHMuICBTaW1wbHkgY2FsbCBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCXNvIHRoYXQgaXQgc3RvcmVzIHRoZSBQQ0kncyBkZXZpY2UgcG9pbnRlciB0byB0aGUgY2FyZC4gIFRoaXMgd2lsbCBiZQorCXJlZmVycmVkIGJ5IEFMU0EgY29yZSBmdW5jdGlvbnMgbGF0ZXIgd2hlbiB0aGUgZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorCUluIHRoZSBjYXNlIG9mIG5vbi1QQ0ksIHBhc3MgdGhlIHByb3BlciBkZXZpY2Ugc3RydWN0IHBvaW50ZXIgb2YgdGhlIEJVUworCWluc3RlYWQuICAoSW4gdGhlIGNhc2Ugb2YgbGVnYWN5IElTQSB3aXRob3V0IFBuUCwgeW91IGRvbid0IGhhdmUgdG8gZG8KKwlhbnl0aGluZy4pCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1lbnRyaWVzIj4KKyAgICAgIDx0aXRsZT5QQ0kgRW50cmllczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgU28gZmFyLCBzbyBnb29kLiBMZXQncyBmaW5pc2ggdGhlIHJlc3Qgb2YgbWlzc2luZyBQQ0kKKyAgICAgIHN0dWZmcy4gQXQgZmlyc3QsIHdlIG5lZWQgYQorICAgICAgPHN0cnVjdG5hbWU+cGNpX2RldmljZV9pZDwvc3RydWN0bmFtZT4gdGFibGUgZm9yIHRoaXMKKyAgICAgIGNoaXBzZXQuIEl0J3MgYSB0YWJsZSBvZiBQQ0kgdmVuZG9yL2RldmljZSBJRCBudW1iZXIsIGFuZCBzb21lCisgICAgICBtYXNrcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgZXhhbXBsZSwKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX215Y2hpcF9pZHNbXSA9IHsKKyAgICAgICAgICB7IFBDSV9WRU5ET1JfSURfRk9PLCBQQ0lfREVWSUNFX0lEX0JBUiwKKyAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCisgICAgICAgICAgLi4uLgorICAgICAgICAgIHsgMCwgfQorICB9OworICBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc25kX215Y2hpcF9pZHMpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZmlyc3QgYW5kIHNlY29uZCBmaWVsZHMgb2YKKyAgICAgIDxzdHJ1Y3RuYW1lPnBjaV9kZXZpY2VfaWQ8L3N0cnVjdG5hbWU+IHN0cnVjdCBhcmUgdGhlIHZlbmRvciBhbmQKKyAgICAgIGRldmljZSBJRHMuIElmIHlvdSBoYXZlIG5vdGhpbmcgc3BlY2lhbCB0byBmaWx0ZXIgdGhlIG1hdGNoaW5nCisgICAgICBkZXZpY2VzLCB5b3UgY2FuIHVzZSB0aGUgcmVzdCBvZiBmaWVsZHMgbGlrZSBhYm92ZS4gVGhlIGxhc3QKKyAgICAgIGZpZWxkIG9mIDxzdHJ1Y3RuYW1lPnBjaV9kZXZpY2VfaWQ8L3N0cnVjdG5hbWU+IHN0cnVjdCBpcyBhCisgICAgICBwcml2YXRlIGRhdGEgZm9yIHRoaXMgZW50cnkuIFlvdSBjYW4gc3BlY2lmeSBhbnkgdmFsdWUgaGVyZSwgZm9yCisgICAgICBleGFtcGxlLCB0byB0ZWxsIHRoZSB0eXBlIG9mIGRpZmZlcmVudCBvcGVyYXRpb25zIHBlciBlYWNoCisgICAgICBkZXZpY2UgSURzLiBTdWNoIGFuIGV4YW1wbGUgaXMgZm91bmQgaW4gaW50ZWw4eDAgZHJpdmVyLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBsYXN0IGVudHJ5IG9mIHRoaXMgbGlzdCBpcyB0aGUgdGVybWluYXRvci4gWW91IG11c3QKKyAgICAgIHNwZWNpZnkgdGhpcyBhbGwtemVybyBlbnRyeS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVuLCBwcmVwYXJlIHRoZSA8c3RydWN0bmFtZT5wY2lfZHJpdmVyPC9zdHJ1Y3RuYW1lPiByZWNvcmQ6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKKyAgICAgICAgICAubmFtZSA9ICJNeSBPd24gQ2hpcCIsCisgICAgICAgICAgLmlkX3RhYmxlID0gc25kX215Y2hpcF9pZHMsCisgICAgICAgICAgLnByb2JlID0gc25kX215Y2hpcF9wcm9iZSwKKyAgICAgICAgICAucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX215Y2hpcF9yZW1vdmUpLAorICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnByb2JlPC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICA8c3RydWN0ZmllbGQ+cmVtb3ZlPC9zdHJ1Y3RmaWVsZD4gZnVuY3Rpb25zIGFyZSB3aGF0IHdlIGFscmVhZHkKKyAgICAgIGRlZmluZWQgaW4gCisgICAgICB0aGUgcHJldmlvdXMgc2VjdGlvbnMuIFRoZSA8c3RydWN0ZmllbGQ+cmVtb3ZlPC9zdHJ1Y3RmaWVsZD4gc2hvdWxkCisgICAgICBiZSBkZWZpbmVkIHdpdGggCisgICAgICA8ZnVuY3Rpb24+X19kZXZleGl0X3AoKTwvZnVuY3Rpb24+IG1hY3JvLCBzbyB0aGF0IGl0J3Mgbm90CisgICAgICBkZWZpbmVkIGZvciBidWlsdC1pbiAoYW5kIG5vbi1ob3QtcGx1Z2dhYmxlKSBjYXNlLiBUaGUKKyAgICAgIDxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD4gCisgICAgICBmaWVsZCBpcyB0aGUgbmFtZSBzdHJpbmcgb2YgdGhpcyBkZXZpY2UuIE5vdGUgdGhhdCB5b3UgbXVzdCBub3QKKyAgICAgIHVzZSBhIHNsYXNoIDxxdW90ZT4vPC9xdW90ZT4gaW4gdGhpcyBzdHJpbmcuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQW5kIGF0IGxhc3QsIHRoZSBtb2R1bGUgZW50cmllczoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfbXljaGlwX2luaXQodm9pZCkKKyAgeworICAgICAgICAgIHJldHVybiBwY2lfbW9kdWxlX2luaXQoJmRyaXZlcik7CisgIH0KKworICBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX215Y2hpcF9leGl0KHZvaWQpCisgIHsKKyAgICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisgIH0KKworICBtb2R1bGVfaW5pdChhbHNhX2NhcmRfbXljaGlwX2luaXQpCisgIG1vZHVsZV9leGl0KGFsc2FfY2FyZF9teWNoaXBfZXhpdCkKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTm90ZSB0aGF0IHRoZXNlIG1vZHVsZSBlbnRyaWVzIGFyZSB0YWdnZWQgd2l0aAorICAgICAgPHBhcmFtZXRlcj5fX2luaXQ8L3BhcmFtZXRlcj4gYW5kIAorICAgICAgPHBhcmFtZXRlcj5fX2V4aXQ8L3BhcmFtZXRlcj4gcHJlZml4ZXMsIG5vdAorICAgICAgPHBhcmFtZXRlcj5fX2RldmluaXQ8L3BhcmFtZXRlcj4gbm9yCisgICAgICA8cGFyYW1ldGVyPl9fZGV2ZXhpdDwvcGFyYW1ldGVyPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE9oLCBvbmUgdGhpbmcgd2FzIGZvcmdvdHRlbi4gSWYgeW91IGhhdmUgbm8gZXhwb3J0ZWQgc3ltYm9scywKKyAgICAgICAgeW91IG5lZWQgdG8gZGVjbGFyZSBpdCBvbiAyLjIgb3IgMi40IGtlcm5lbHMgKG9uIDIuNiBrZXJuZWxzCisgICAgICAgIGl0J3Mgbm90IG5lY2Vzc2FyeSwgdGhvdWdoKS4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBFWFBPUlRfTk9fU1lNQk9MUzsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIFRoYXQncyBhbGwhCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIFBDTSBJbnRlcmZhY2UgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJwY20taW50ZXJmYWNlIj4KKyAgICA8dGl0bGU+UENNIEludGVyZmFjZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1nZW5lcmFsIj4KKyAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgUENNIG1pZGRsZSBsYXllciBvZiBBTFNBIGlzIHF1aXRlIHBvd2VyZnVsIGFuZCBpdCBpcyBvbmx5CisgICAgICBuZWNlc3NhcnkgZm9yIGVhY2ggZHJpdmVyIHRvIGltcGxlbWVudCB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucworICAgICAgdG8gYWNjZXNzIGl0cyBoYXJkd2FyZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBhY2Nlc3NpbmcgdG8gdGhlIFBDTSBsYXllciwgeW91IG5lZWQgdG8gaW5jbHVkZQorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPiBhYm92ZSBhbGwuIEluIGFkZGl0aW9uLAorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY21fcGFyYW1zLmgmZ3Q7PC9maWxlbmFtZT4gbWlnaHQgYmUgbmVlZGVkCisgICAgICBpZiB5b3UgYWNjZXNzIHRvIHNvbWUgZnVuY3Rpb25zIHJlbGF0ZWQgd2l0aCBod19wYXJhbS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBFYWNoIGNhcmQgZGV2aWNlIGNhbiBoYXZlIHVwIHRvIGZvdXIgcGNtIGluc3RhbmNlcy4gQSBwY20KKyAgICAgIGluc3RhbmNlIGNvcnJlc3BvbmRzIHRvIGEgcGNtIGRldmljZSBmaWxlLiBUaGUgbGltaXRhdGlvbiBvZgorICAgICAgbnVtYmVyIG9mIGluc3RhbmNlcyBjb21lcyBvbmx5IGZyb20gdGhlIGF2YWlsYWJsZSBiaXQgc2l6ZSBvZgorICAgICAgdGhlIGxpbnV4J3MgZGV2aWNlIG51bWJlci4gT25jZSB3aGVuIDY0Yml0IGRldmljZSBudW1iZXIgaXMKKyAgICAgIHVzZWQsIHdlJ2xsIGhhdmUgbW9yZSBhdmFpbGFibGUgcGNtIGluc3RhbmNlcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBIHBjbSBpbnN0YW5jZSBjb25zaXN0cyBvZiBwY20gcGxheWJhY2sgYW5kIGNhcHR1cmUgc3RyZWFtcywKKyAgICAgIGFuZCBlYWNoIHBjbSBzdHJlYW0gY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgcGNtIHN1YnN0cmVhbXMuIFNvbWUKKyAgICAgIHNvdW5kY2FyZCBzdXBwb3J0cyB0aGUgbXVsdGlwbGUtcGxheWJhY2sgZnVuY3Rpb24uIEZvciBleGFtcGxlLAorICAgICAgZW11MTBrMSBoYXMgYSBQQ00gcGxheWJhY2sgb2YgMzIgc3RlcmVvIHN1YnN0cmVhbXMuIEluIHRoaXMgY2FzZSwgYXQKKyAgICAgIGVhY2ggb3BlbiwgYSBmcmVlIHN1YnN0cmVhbSBpcyAodXN1YWxseSkgYXV0b21hdGljYWxseSBjaG9zZW4KKyAgICAgIGFuZCBvcGVuZWQuIE1lYW53aGlsZSwgd2hlbiBvbmx5IG9uZSBzdWJzdHJlYW0gZXhpc3RzIGFuZCBpdCB3YXMKKyAgICAgIGFscmVhZHkgb3BlbmVkLCB0aGUgc3VjY2VlZGluZyBvcGVuIHdpbGwgcmVzdWx0IGluIHRoZSBibG9ja2luZworICAgICAgb3IgdGhlIGVycm9yIHdpdGggPGNvbnN0YW50PkVBR0FJTjwvY29uc3RhbnQ+IGFjY29yZGluZyB0byB0aGUKKyAgICAgIGZpbGUgb3BlbiBtb2RlLiBCdXQgeW91IGRvbid0IGhhdmUgdG8ga25vdyB0aGUgZGV0YWlsIGluIHlvdXIKKyAgICAgIGRyaXZlci4gVGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2lsbCB0YWtlIGFsbCBzdWNoIGpvYnMuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWV4YW1wbGUiPgorICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgVGhlIGV4YW1wbGUgY29kZSBiZWxvdyBkb2VzIG5vdCBpbmNsdWRlIGFueSBoYXJkd2FyZSBhY2Nlc3MKKyAgICAgIHJvdXRpbmVzIGJ1dCBzaG93cyBvbmx5IHRoZSBza2VsZXRvbiwgaG93IHRvIGJ1aWxkIHVwIHRoZSBQQ00KKyAgICAgIGludGVyZmFjZXMuCisKKyAgICAgICAgPGV4YW1wbGU+CisgICAgICAgICAgPHRpdGxlPlBDTSBFeGFtcGxlIENvZGU8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAjaW5jbHVkZSA8c291bmQvcGNtLmg+CisgIC4uLi4KKworICAvKiBoYXJkd2FyZSBkZWZpbml0aW9uICovCisgIHN0YXRpYyBzbmRfcGNtX2hhcmR3YXJlX3Qgc25kX215Y2hpcF9wbGF5YmFja19odyA9IHsKKyAgICAgICAgICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorICAgICAgICAgIC5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisgICAgICAgICAgLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorICAgICAgICAgIC5yYXRlX21pbiA9ICAgICAgICAgODAwMCwKKyAgICAgICAgICAucmF0ZV9tYXggPSAgICAgICAgIDQ4MDAwLAorICAgICAgICAgIC5jaGFubmVsc19taW4gPSAgICAgMiwKKyAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisgICAgICAgICAgLmJ1ZmZlcl9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kX2J5dGVzX21pbiA9IDQwOTYsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kc19taW4gPSAgICAgIDEsCisgICAgICAgICAgLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0LAorICB9OworCisgIC8qIGhhcmR3YXJlIGRlZmluaXRpb24gKi8KKyAgc3RhdGljIHNuZF9wY21faGFyZHdhcmVfdCBzbmRfbXljaGlwX2NhcHR1cmVfaHcgPSB7CisgICAgICAgICAgLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKyAgICAgICAgICAuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorICAgICAgICAgIC5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKyAgICAgICAgICAucmF0ZV9taW4gPSAgICAgICAgIDgwMDAsCisgICAgICAgICAgLnJhdGVfbWF4ID0gICAgICAgICA0ODAwMCwKKyAgICAgICAgICAuY2hhbm5lbHNfbWluID0gICAgIDIsCisgICAgICAgICAgLmNoYW5uZWxzX21heCA9ICAgICAyLAorICAgICAgICAgIC5idWZmZXJfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19taW4gPSA0MDk2LAorICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZHNfbWluID0gICAgICAxLAorICAgICAgICAgIC5wZXJpb2RzX21heCA9ICAgICAgMTAyNCwKKyAgfTsKKworICAvKiBvcGVuIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wbGF5YmFja19vcGVuKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIHNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisgICAgICAgICAgcnVudGltZS0+aHcgPSBzbmRfbXljaGlwX3BsYXliYWNrX2h3OworICAgICAgICAgIC8vIG1vcmUgaGFyZHdhcmUtaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBkb25lIGhlcmUKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGNsb3NlIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wbGF5YmFja19jbG9zZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICAvLyB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZXMgd2lsbCBiZSBoZXJlCisgICAgICAgICAgcmV0dXJuIDA7CisKKyAgfQorCisgIC8qIG9wZW4gY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2NhcHR1cmVfb3BlbihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICBzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworICAgICAgICAgIHJ1bnRpbWUtPmh3ID0gc25kX215Y2hpcF9jYXB0dXJlX2h3OworICAgICAgICAgIC8vIG1vcmUgaGFyZHdhcmUtaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBkb25lIGhlcmUKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGNsb3NlIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9jYXB0dXJlX2Nsb3NlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIC8vIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlcyB3aWxsIGJlIGhlcmUKKyAgICAgICAgICByZXR1cm4gMDsKKworICB9CisKKyAgLyogaHdfcGFyYW1zIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21faHdfcGFyYW1zKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX2h3X3BhcmFtc190ICogaHdfcGFyYW1zKQorICB7CisgICAgICAgICAgcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKyAgfQorCisgIC8qIGh3X2ZyZWUgY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV9od19mcmVlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIHJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CisgIH0KKworICAvKiBwcmVwYXJlIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21fcHJlcGFyZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICBzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworICAgICAgICAgIC8qIHNldCB1cCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICogZm9yIGV4YW1wbGUuLi4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBteWNoaXBfc2V0X3NhbXBsZV9mb3JtYXQoY2hpcCwgcnVudGltZS0+Zm9ybWF0KTsKKyAgICAgICAgICBteWNoaXBfc2V0X3NhbXBsZV9yYXRlKGNoaXAsIHJ1bnRpbWUtPnJhdGUpOworICAgICAgICAgIG15Y2hpcF9zZXRfY2hhbm5lbHMoY2hpcCwgcnVudGltZS0+Y2hhbm5lbHMpOworICAgICAgICAgIG15Y2hpcF9zZXRfZG1hX3NldHVwKGNoaXAsIHJ1bnRpbWUtPmRtYV9hcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPmJ1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPnBlcmlvZF9zaXplKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIHRyaWdnZXIgY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV90cmlnZ2VyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbWQpCisgIHsKKyAgICAgICAgICBzd2l0Y2ggKGNtZCkgeworICAgICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisgICAgICAgICAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgdG8gc3RhcnQgdGhlIFBDTSBlbmdpbmUKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKyAgICAgICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB0byBzdG9wIHRoZSBQQ00gZW5naW5lCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgfQorICB9CisKKyAgLyogcG9pbnRlciBjYWxsYmFjayAqLworICBzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKKyAgc25kX215Y2hpcF9wY21fcG9pbnRlcihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgY3VycmVudF9wdHI7CisKKyAgICAgICAgICAvKiBnZXQgdGhlIGN1cnJlbnQgaGFyZHdhcmUgcG9pbnRlciAqLworICAgICAgICAgIGN1cnJlbnRfcHRyID0gbXljaGlwX2dldF9od19wb2ludGVyKGNoaXApOworICAgICAgICAgIHJldHVybiBjdXJyZW50X3B0cjsKKyAgfQorCisgIC8qIG9wZXJhdG9ycyAqLworICBzdGF0aWMgc25kX3BjbV9vcHNfdCBzbmRfbXljaGlwX3BsYXliYWNrX29wcyA9IHsKKyAgICAgICAgICAub3BlbiA9ICAgICAgICBzbmRfbXljaGlwX3BsYXliYWNrX29wZW4sCisgICAgICAgICAgLmNsb3NlID0gICAgICAgc25kX215Y2hpcF9wbGF5YmFja19jbG9zZSwKKyAgICAgICAgICAuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKyAgICAgICAgICAuaHdfcGFyYW1zID0gICBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMsCisgICAgICAgICAgLmh3X2ZyZWUgPSAgICAgc25kX215Y2hpcF9wY21faHdfZnJlZSwKKyAgICAgICAgICAucHJlcGFyZSA9ICAgICBzbmRfbXljaGlwX3BjbV9wcmVwYXJlLAorICAgICAgICAgIC50cmlnZ2VyID0gICAgIHNuZF9teWNoaXBfcGNtX3RyaWdnZXIsCisgICAgICAgICAgLnBvaW50ZXIgPSAgICAgc25kX215Y2hpcF9wY21fcG9pbnRlciwKKyAgfTsKKworICAvKiBvcGVyYXRvcnMgKi8KKyAgc3RhdGljIHNuZF9wY21fb3BzX3Qgc25kX215Y2hpcF9jYXB0dXJlX29wcyA9IHsKKyAgICAgICAgICAub3BlbiA9ICAgICAgICBzbmRfbXljaGlwX2NhcHR1cmVfb3BlbiwKKyAgICAgICAgICAuY2xvc2UgPSAgICAgICBzbmRfbXljaGlwX2NhcHR1cmVfY2xvc2UsCisgICAgICAgICAgLmlvY3RsID0gICAgICAgc25kX3BjbV9saWJfaW9jdGwsCisgICAgICAgICAgLmh3X3BhcmFtcyA9ICAgc25kX215Y2hpcF9wY21faHdfcGFyYW1zLAorICAgICAgICAgIC5od19mcmVlID0gICAgIHNuZF9teWNoaXBfcGNtX2h3X2ZyZWUsCisgICAgICAgICAgLnByZXBhcmUgPSAgICAgc25kX215Y2hpcF9wY21fcHJlcGFyZSwKKyAgICAgICAgICAudHJpZ2dlciA9ICAgICBzbmRfbXljaGlwX3BjbV90cmlnZ2VyLAorICAgICAgICAgIC5wb2ludGVyID0gICAgIHNuZF9teWNoaXBfcGNtX3BvaW50ZXIsCisgIH07CisKKyAgLyoKKyAgICogIGRlZmluaXRpb25zIG9mIGNhcHR1cmUgYXJlIG9taXR0ZWQgaGVyZS4uLgorICAgKi8KKworICAvKiBjcmVhdGUgYSBwY20gZGV2aWNlICovCisgIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfbmV3X3BjbShteWNoaXBfdCAqY2hpcCkKKyAgeworICAgICAgICAgIHNuZF9wY21fdCAqcGNtOworICAgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgICBpZiAoKGVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJNeSBDaGlwIiwgMCwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwY20pKSA8IDApIAorICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICBwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisgICAgICAgICAgc3RyY3B5KHBjbS0+bmFtZSwgIk15IENoaXAiKTsKKyAgICAgICAgICBjaGlwLT5wY20gPSBwY207CisgICAgICAgICAgLyogc2V0IG9wZXJhdG9ycyAqLworICAgICAgICAgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX3BsYXliYWNrX29wcyk7CisgICAgICAgICAgc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc25kX215Y2hpcF9jYXB0dXJlX29wcyk7CisgICAgICAgICAgLyogcHJlLWFsbG9jYXRpb24gb2YgYnVmZmVycyAqLworICAgICAgICAgIC8qIE5PVEU6IHRoaXMgbWF5IGZhaWwgKi8KKyAgICAgICAgICBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEEgcGNtIGluc3RhbmNlIGlzIGFsbG9jYXRlZCBieSA8ZnVuY3Rpb24+c25kX3BjbV9uZXcoKTwvZnVuY3Rpb24+CisgICAgICBmdW5jdGlvbi4gSXQgd291bGQgYmUgYmV0dGVyIHRvIGNyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBwY20sCisgICAgICBuYW1lbHksIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfbmV3X3BjbShteWNoaXBfdCAqY2hpcCkKKyAgeworICAgICAgICAgIHNuZF9wY21fdCAqcGNtOworICAgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgICBpZiAoKGVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJNeSBDaGlwIiwgMCwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwY20pKSA8IDApIAorICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICBwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisgICAgICAgICAgc3RyY3B5KHBjbS0+bmFtZSwgIk15IENoaXAiKTsKKyAgICAgICAgICBjaGlwLT5wY20gPSBwY207CisJICAuLi4uCisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmdW5jdGlvbj5zbmRfcGNtX25ldygpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdGFrZXMgdGhlIGZvdXIKKyAgICAgIGFyZ3VtZW50cy4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIgdG8gd2hpY2ggdGhpcworICAgICAgcGNtIGlzIGFzc2lnbmVkLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgSUQgc3RyaW5nLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCAoPHBhcmFtZXRlcj5pbmRleDwvcGFyYW1ldGVyPiwgMCBpbiB0aGUKKyAgICAgIGFib3ZlKSBpcyB0aGUgaW5kZXggb2YgdGhpcyBuZXcgcGNtLiBJdCBiZWdpbnMgZnJvbSB6ZXJvLiBXaGVuCisgICAgICB5b3Ugd2lsbCBjcmVhdGUgbW9yZSB0aGFuIG9uZSBwY20gaW5zdGFuY2VzLCBzcGVjaWZ5IHRoZQorICAgICAgZGlmZmVyZW50IG51bWJlcnMgaW4gdGhpcyBhcmd1bWVudC4gRm9yIGV4YW1wbGUsCisgICAgICA8cGFyYW1ldGVyPmluZGV4PC9wYXJhbWV0ZXI+ID0gMSBmb3IgdGhlIHNlY29uZCBQQ00gZGV2aWNlLiAgCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZm91cnRoIGFuZCBmaWZ0aCBhcmd1bWVudHMgYXJlIHRoZSBudW1iZXIgb2Ygc3Vic3RyZWFtcworICAgICAgZm9yIHBsYXliYWNrIGFuZCBjYXB0dXJlLCByZXNwZWN0aXZlbHkuIEhlcmUgYm90aCAxIGFyZSBnaXZlbiBpbgorICAgICAgdGhlIGFib3ZlIGV4YW1wbGUuICBXaGVuIG5vIHBsYXliYWNrIG9yIG5vIGNhcHR1cmUgaXMgYXZhaWxhYmxlLAorICAgICAgcGFzcyAwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgYSBjaGlwIHN1cHBvcnRzIG11bHRpcGxlIHBsYXliYWNrcyBvciBjYXB0dXJlcywgeW91IGNhbgorICAgICAgc3BlY2lmeSBtb3JlIG51bWJlcnMsIGJ1dCB0aGV5IG11c3QgYmUgaGFuZGxlZCBwcm9wZXJseSBpbgorICAgICAgb3Blbi9jbG9zZSwgZXRjLiBjYWxsYmFja3MuICBXaGVuIHlvdSBuZWVkIHRvIGtub3cgd2hpY2gKKyAgICAgIHN1YnN0cmVhbSB5b3UgYXJlIHJlZmVycmluZyB0bywgdGhlbiBpdCBjYW4gYmUgb2J0YWluZWQgZnJvbQorICAgICAgPHR5cGU+c25kX3BjbV9zdWJzdHJlYW1fdDwvdHlwZT4gZGF0YSBwYXNzZWQgdG8gZWFjaCBjYWxsYmFjaworICAgICAgYXMgZm9sbG93czogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworICBpbnQgaW5kZXggPSBzdWJzdHJlYW0tPm51bWJlcjsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWZ0ZXIgdGhlIHBjbSBpcyBjcmVhdGVkLCB5b3UgbmVlZCB0byBzZXQgb3BlcmF0b3JzIGZvciBlYWNoCisgICAgICAgIHBjbSBzdHJlYW0uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCisgICAgICAgICAgICAgICAgICAmc25kX215Y2hpcF9wbGF5YmFja19vcHMpOworICBzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisgICAgICAgICAgICAgICAgICAmc25kX215Y2hpcF9jYXB0dXJlX29wcyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBvcGVyYXRvcnMgYXJlIGRlZmluZWQgdHlwaWNhbGx5IGxpa2UgdGhpczoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc25kX3BjbV9vcHNfdCBzbmRfbXljaGlwX3BsYXliYWNrX29wcyA9IHsKKyAgICAgICAgICAub3BlbiA9ICAgICAgICBzbmRfbXljaGlwX3BjbV9vcGVuLAorICAgICAgICAgIC5jbG9zZSA9ICAgICAgIHNuZF9teWNoaXBfcGNtX2Nsb3NlLAorICAgICAgICAgIC5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAorICAgICAgICAgIC5od19wYXJhbXMgPSAgIHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcywKKyAgICAgICAgICAuaHdfZnJlZSA9ICAgICBzbmRfbXljaGlwX3BjbV9od19mcmVlLAorICAgICAgICAgIC5wcmVwYXJlID0gICAgIHNuZF9teWNoaXBfcGNtX3ByZXBhcmUsCisgICAgICAgICAgLnRyaWdnZXIgPSAgICAgc25kX215Y2hpcF9wY21fdHJpZ2dlciwKKyAgICAgICAgICAucG9pbnRlciA9ICAgICBzbmRfbXljaGlwX3BjbV9wb2ludGVyLAorICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgRWFjaCBvZiBjYWxsYmFja3MgaXMgZXhwbGFpbmVkIGluIHRoZSBzdWJzZWN0aW9uIAorICAgICAgICA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycyI+PGNpdGV0aXRsZT4KKyAgICAgICAgT3BlcmF0b3JzPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFmdGVyIHNldHRpbmcgdGhlIG9wZXJhdG9ycywgbW9zdCBsaWtlbHkgeW91J2QgbGlrZSB0bworICAgICAgICBwcmUtYWxsb2NhdGUgdGhlIGJ1ZmZlci4gRm9yIHRoZSBwcmUtYWxsb2NhdGlvbiwgc2ltcGx5IGNhbGwKKyAgICAgICAgdGhlIGZvbGxvd2luZzogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBJdCB3aWxsIGFsbG9jYXRlIHVwIHRvIDY0a0IgYnVmZmVyIGFzIGRlZmF1bHQuIFRoZSBkZXRhaWxzIG9mCisgICAgICBidWZmZXIgbWFuYWdlbWVudCB3aWxsIGJlIGRlc2NyaWJlZCBpbiB0aGUgbGF0ZXIgc2VjdGlvbiA8bGluaworICAgICAgbGlua2VuZD0iYnVmZmVyLWFuZC1tZW1vcnkiPjxjaXRldGl0bGU+QnVmZmVyIGFuZCBNZW1vcnkKKyAgICAgIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFkZGl0aW9uYWxseSwgeW91IGNhbiBzZXQgc29tZSBleHRyYSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwY20KKyAgICAgICAgaW4gcGNtLSZndDtpbmZvX2ZsYWdzLgorICAgICAgICBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmUgZGVmaW5lZCBhcworICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fWFhYPC9jb25zdGFudD4gaW4KKyAgICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmQuaCZndDs8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdXNlZCBmb3IKKyAgICAgICAgdGhlIGhhcmR3YXJlIGRlZmluaXRpb24gKGRlc2NyaWJlZCBsYXRlcikuIFdoZW4geW91ciBzb3VuZGNoaXAKKyAgICAgICAgc3VwcG9ydHMgb25seSBoYWxmLWR1cGxleCwgc3BlY2lmeSBsaWtlIHRoaXM6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHBjbS0+aW5mb19mbGFncyA9IFNORFJWX1BDTV9JTkZPX0hBTEZfRFVQTEVYOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtZGVzdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Li4uIEFuZCB0aGUgRGVzdHJ1Y3Rvcj88L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBkZXN0cnVjdG9yIGZvciBhIHBjbSBpbnN0YW5jZSBpcyBub3QgYWx3YXlzCisgICAgICBuZWNlc3NhcnkuIFNpbmNlIHRoZSBwY20gZGV2aWNlIHdpbGwgYmUgcmVsZWFzZWQgYnkgdGhlIG1pZGRsZQorICAgICAgbGF5ZXIgY29kZSBhdXRvbWF0aWNhbGx5LCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGRlc3RydWN0b3IKKyAgICAgIGV4cGxpY2l0bHkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVzdHJ1Y3RvciB3b3VsZCBiZSBuZWNlc3Nhcnkgd2hlbiB5b3UgY3JlYXRlZCBzb21lCisgICAgICAgIHNwZWNpYWwgcmVjb3JkcyBpbnRlcm5hbGx5IGFuZCBuZWVkIHRvIHJlbGVhc2UgdGhlbS4gSW4gc3VjaCBhCisgICAgICAgIGNhc2UsIHNldCB0aGUgZGVzdHJ1Y3RvciBmdW5jdGlvbiB0bworICAgICAgICBwY20tJmd0O3ByaXZhdGVfZnJlZTogCisKKyAgICAgICAgPGV4YW1wbGU+CisgICAgICAgICAgPHRpdGxlPlBDTSBJbnN0YW5jZSB3aXRoIGEgRGVzdHJ1Y3RvcjwvdGl0bGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIG15Y2hpcF9wY21fZnJlZShzbmRfcGNtX3QgKnBjbSkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9jaGlwKHBjbSk7CisgICAgICAgICAgLyogZnJlZSB5b3VyIG93biBkYXRhICovCisgICAgICAgICAga2ZyZWUoY2hpcC0+bXlfcHJpdmF0ZV9wY21fZGF0YSk7CisgICAgICAgICAgLy8gZG8gd2hhdCB5b3UgbGlrZSBlbHNlCisgICAgICAgICAgLi4uLgorICB9CisKKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9uZXdfcGNtKG15Y2hpcF90ICpjaGlwKQorICB7CisgICAgICAgICAgc25kX3BjbV90ICpwY207CisgICAgICAgICAgLi4uLgorICAgICAgICAgIC8qIGFsbG9jYXRlIHlvdXIgb3duIGRhdGEgKi8KKyAgICAgICAgICBjaGlwLT5teV9wcml2YXRlX3BjbV9kYXRhID0ga21hbGxvYyguLi4pOworICAgICAgICAgIC8qIHNldCB0aGUgZGVzdHJ1Y3RvciAqLworICAgICAgICAgIHBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgICAgICAgICBwY20tPnByaXZhdGVfZnJlZSA9IG15Y2hpcF9wY21fZnJlZTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lIj4KKyAgICAgIDx0aXRsZT5SdW50aW1lIFBvaW50ZXIgLSBUaGUgQ2hlc3Qgb2YgUENNIEluZm9ybWF0aW9uPC90aXRsZT4KKwk8cGFyYT4KKwkgIFdoZW4gdGhlIFBDTSBzdWJzdHJlYW0gaXMgb3BlbmVkLCBhIFBDTSBydW50aW1lIGluc3RhbmNlIGlzCisJYWxsb2NhdGVkIGFuZCBhc3NpZ25lZCB0byB0aGUgc3Vic3RyZWFtLiBUaGlzIHBvaW50ZXIgaXMKKwlhY2Nlc3NpYmxlIHZpYSA8Y29uc3RhbnQ+c3Vic3RyZWFtLSZndDtydW50aW1lPC9jb25zdGFudD4uCisJVGhpcyBydW50aW1lIHBvaW50ZXIgaG9sZHMgdGhlIHZhcmlvdXMgaW5mb3JtYXRpb247IGl0IGhvbGRzCisJdGhlIGNvcHkgb2YgaHdfcGFyYW1zIGFuZCBzd19wYXJhbXMgY29uZmlndXJhdGlvbnMsIHRoZSBidWZmZXIKKwlwb2ludGVycywgbW1hcCByZWNvcmRzLCBzcGlubG9ja3MsIGV0Yy4gIEFsbW9zdCBldmVyeWhpbmcgeW91CisJbmVlZCBmb3IgY29udHJvbGxpbmcgdGhlIFBDTSBjYW4gYmUgZm91bmQgdGhlcmUuCisJPC9wYXJhPgorCisJPHBhcmE+CisJVGhlIGRlZmluaXRpb24gb2YgcnVudGltZSBpbnN0YW5jZSBpcyBmb3VuZCBpbgorCTxmaWxlbmFtZT4mbHQ7c291bmQvcGNtLmgmZ3Q7PC9maWxlbmFtZT4uICBIZXJlIGlzIHRoZQorCWNvcHkgZnJvbSB0aGUgZmlsZS4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCitzdHJ1Y3QgX3NuZF9wY21fcnVudGltZSB7CisJLyogLS0gU3RhdHVzIC0tICovCisJc25kX3BjbV9zdWJzdHJlYW1fdCAqdHJpZ2dlcl9tYXN0ZXI7CisJc25kX3RpbWVzdGFtcF90IHRyaWdnZXJfdHN0YW1wOwkvKiB0cmlnZ2VyIHRpbWVzdGFtcCAqLworCWludCBvdmVycmFuZ2U7CisJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWxfbWF4OworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cl9iYXNlOwkvKiBQb3NpdGlvbiBhdCBidWZmZXIgcmVzdGFydCAqLworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cl9pbnRlcnJ1cHQ7IC8qIFBvc2l0aW9uIGF0IGludGVycnVwdCB0aW1lKi8KKworCS8qIC0tIEhXIHBhcmFtcyAtLSAqLworCXNuZF9wY21fYWNjZXNzX3QgYWNjZXNzOwkvKiBhY2Nlc3MgbW9kZSAqLworCXNuZF9wY21fZm9ybWF0X3QgZm9ybWF0OwkvKiBTTkRSVl9QQ01fRk9STUFUXyogKi8KKwlzbmRfcGNtX3N1YmZvcm1hdF90IHN1YmZvcm1hdDsJLyogc3ViZm9ybWF0ICovCisJdW5zaWduZWQgaW50IHJhdGU7CQkvKiByYXRlIGluIEh6ICovCisJdW5zaWduZWQgaW50IGNoYW5uZWxzOwkJLyogY2hhbm5lbHMgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBwZXJpb2Rfc2l6ZTsJLyogcGVyaW9kIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgcGVyaW9kczsJCS8qIHBlcmlvZHMgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBidWZmZXJfc2l6ZTsJLyogYnVmZmVyIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgdGlja190aW1lOwkJLyogdGljayB0aW1lICovCisJc25kX3BjbV91ZnJhbWVzX3QgbWluX2FsaWduOwkvKiBNaW4gYWxpZ25tZW50IGZvciB0aGUgZm9ybWF0ICovCisJc2l6ZV90IGJ5dGVfYWxpZ247CisJdW5zaWduZWQgaW50IGZyYW1lX2JpdHM7CisJdW5zaWduZWQgaW50IHNhbXBsZV9iaXRzOworCXVuc2lnbmVkIGludCBpbmZvOworCXVuc2lnbmVkIGludCByYXRlX251bTsKKwl1bnNpZ25lZCBpbnQgcmF0ZV9kZW47CisKKwkvKiAtLSBTVyBwYXJhbXMgLS0gKi8KKwlpbnQgdHN0YW1wX3RpbWVzcGVjOwkJLyogdXNlIHRpbWV2YWwgKDApIG9yIHRpbWVzcGVjICgxKSAqLworCXNuZF9wY21fdHN0YW1wX3QgdHN0YW1wX21vZGU7CS8qIG1tYXAgdGltZXN0YW1wIGlzIHVwZGF0ZWQgKi8KKyAgCXVuc2lnbmVkIGludCBwZXJpb2Rfc3RlcDsKKwl1bnNpZ25lZCBpbnQgc2xlZXBfbWluOwkJLyogbWluIHRpY2tzIHRvIHNsZWVwICovCisJc25kX3BjbV91ZnJhbWVzX3QgeGZlcl9hbGlnbjsJLyogeGZlciBzaXplIG5lZWQgdG8gYmUgYSBtdWx0aXBsZSAqLworCXNuZF9wY21fdWZyYW1lc190IHN0YXJ0X3RocmVzaG9sZDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBzdG9wX3RocmVzaG9sZDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3RocmVzaG9sZDsgLyogU2lsZW5jZSBmaWxsaW5nIGhhcHBlbnMgd2hlbgorCQkJCQkJbm9pc2UgaXMgbmVhcmVzdCB0aGFuIHRoaXMgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3NpemU7CS8qIFNpbGVuY2UgZmlsbGluZyBzaXplICovCisJc25kX3BjbV91ZnJhbWVzX3QgYm91bmRhcnk7CS8qIHBvaW50ZXJzIHdyYXAgcG9pbnQgKi8KKworCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2VkX3N0YXJ0OworCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2VkX3NpemU7CisKKwlzbmRfcGNtX3N5bmNfaWRfdCBzeW5jOwkJLyogaGFyZHdhcmUgc3luY2hyb25pemF0aW9uIElEICovCisKKwkvKiAtLSBtbWFwIC0tICovCisJdm9sYXRpbGUgc25kX3BjbV9tbWFwX3N0YXR1c190ICpzdGF0dXM7CisJdm9sYXRpbGUgc25kX3BjbV9tbWFwX2NvbnRyb2xfdCAqY29udHJvbDsKKwlhdG9taWNfdCBtbWFwX2NvdW50OworCisJLyogLS0gbG9ja2luZyAvIHNjaGVkdWxpbmcgLS0gKi8KKwlzcGlubG9ja190IGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgc2xlZXA7CisJc3RydWN0IHRpbWVyX2xpc3QgdGlja190aW1lcjsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOworCisJLyogLS0gcHJpdmF0ZSBzZWN0aW9uIC0tICovCisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lKTsKKworCS8qIC0tIGhhcmR3YXJlIGRlc2NyaXB0aW9uIC0tICovCisJc25kX3BjbV9oYXJkd2FyZV90IGh3OworCXNuZF9wY21faHdfY29uc3RyYWludHNfdCBod19jb25zdHJhaW50czsKKworCS8qIC0tIGludGVycnVwdCBjYWxsYmFja3MgLS0gKi8KKwl2b2lkICgqdHJhbnNmZXJfYWNrX2JlZ2luKShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworCXZvaWQgKCp0cmFuc2Zlcl9hY2tfZW5kKShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworCisJLyogLS0gdGltZXIgLS0gKi8KKwl1bnNpZ25lZCBpbnQgdGltZXJfcmVzb2x1dGlvbjsJLyogdGltZXIgcmVzb2x1dGlvbiAqLworCisJLyogLS0gRE1BIC0tICovICAgICAgICAgICAKKwl1bnNpZ25lZCBjaGFyICpkbWFfYXJlYTsJLyogRE1BIGFyZWEgKi8KKwlkbWFfYWRkcl90IGRtYV9hZGRyOwkJLyogcGh5c2ljYWwgYnVzIGFkZHJlc3MgKG5vdCBhY2Nlc3NpYmxlIGZyb20gbWFpbiBDUFUpICovCisJc2l6ZV90IGRtYV9ieXRlczsJCS8qIHNpemUgb2YgRE1BIGFyZWEgKi8KKworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hX2J1ZmZlcl9wOwkvKiBhbGxvY2F0ZWQgYnVmZmVyICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1NfTU9EVUxFKQorCS8qIC0tIE9TUyB0aGluZ3MgLS0gKi8KKwlzbmRfcGNtX29zc19ydW50aW1lX3Qgb3NzOworI2VuZGlmCit9OworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKworCTxwYXJhPgorCSAgRm9yIHRoZSBvcGVyYXRvcnMgKGNhbGxiYWNrcykgb2YgZWFjaCBzb3VuZCBkcml2ZXIsIG1vc3Qgb2YKKwl0aGVzZSByZWNvcmRzIGFyZSBzdXBwb3NlZCB0byBiZSByZWFkLW9ubHkuICBPbmx5IHRoZSBQQ00KKwltaWRkbGUtbGF5ZXIgY2hhbmdlcyAvIHVwZGF0ZXMgdGhlc2UgaW5mby4gIFRoZSBleGNlcHRpb25zIGFyZQorCXRoZSBoYXJkd2FyZSBkZXNjcmlwdGlvbiAoaHcpLCBpbnRlcnJ1cHQgY2FsbGJhY2tzCisJKHRyYW5zZmVyX2Fja194eHgpLCBETUEgYnVmZmVyIGluZm9ybWF0aW9uLCBhbmQgdGhlIHByaXZhdGUKKwlkYXRhLiAgQmVzaWRlcywgaWYgeW91IHVzZSB0aGUgc3RhbmRhcmQgYnVmZmVyIGFsbG9jYXRpb24KKwltZXRob2QgdmlhIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKTwvZnVuY3Rpb24+LAorCXlvdSBkb24ndCBuZWVkIHRvIHNldCB0aGUgRE1BIGJ1ZmZlciBpbmZvcm1hdGlvbiBieSB5b3Vyc2VsZi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJbiB0aGUgc2VjdGlvbnMgYmVsb3csIGltcG9ydGFudCByZWNvcmRzIGFyZSBleHBsYWluZWQuCisJPC9wYXJhPgorCisJPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1odyI+CisJPHRpdGxlPkhhcmR3YXJlIERlc2NyaXB0aW9uPC90aXRsZT4KKwk8cGFyYT4KKwkgIFRoZSBoYXJkd2FyZSBkZXNjcmlwdG9yICg8dHlwZT5zbmRfcGNtX2hhcmR3YXJlX3Q8L3R5cGU+KQorCWNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgZnVuZGFtZW50YWwgaGFyZHdhcmUKKwljb25maWd1cmF0aW9uLiAgQWJvdmUgYWxsLCB5b3UnbGwgbmVlZCB0byBkZWZpbmUgdGhpcyBpbgorCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+CisJdGhlIG9wZW4gY2FsbGJhY2s8L2NpdGV0aXRsZT48L2xpbms+LgorCU5vdGUgdGhhdCB0aGUgcnVudGltZSBpbnN0YW5jZSBob2xkcyB0aGUgY29weSBvZiB0aGUKKwlkZXNjcmlwdG9yLCBub3QgdGhlIHBvaW50ZXIgdG8gdGhlIGV4aXN0aW5nIGRlc2NyaXB0b3IuICBUaGF0CisJaXMsIGluIHRoZSBvcGVuIGNhbGxiYWNrLCB5b3UgY2FuIG1vZGlmeSB0aGUgY29waWVkIGRlc2NyaXB0b3IKKwkoPGNvbnN0YW50PnJ1bnRpbWUtJmd0O2h3PC9jb25zdGFudD4pIGFzIHlvdSBuZWVkLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBtYXhpbXVtCisJbnVtYmVyIG9mIGNoYW5uZWxzIGlzIDEgb25seSBvbiBzb21lIGNoaXAgbW9kZWxzLCB5b3UgY2FuCisJc3RpbGwgdXNlIHRoZSBzYW1lIGhhcmR3YXJlIGRlc2NyaXB0b3IgYW5kIGNoYW5nZSB0aGUKKwljaGFubmVsc19tYXggbGF0ZXI6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAgICAgICAgIHNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworICAgICAgICAgIC4uLgorICAgICAgICAgIHJ1bnRpbWUtPmh3ID0gc25kX215Y2hpcF9wbGF5YmFja19odzsgLyogY29tbW9uIGRlZmluaXRpb24gKi8KKyAgICAgICAgICBpZiAoY2hpcC0+bW9kZWwgPT0gVkVSWV9PTERfT05FKQorICAgICAgICAgICAgICAgICAgcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gMTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwkgIFR5cGljYWxseSwgeW91J2xsIGhhdmUgYSBoYXJkd2FyZSBkZXNjcmlwdG9yIGxpa2UgYmVsb3c6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc25kX3BjbV9oYXJkd2FyZV90IHNuZF9teWNoaXBfcGxheWJhY2tfaHcgPSB7CisgICAgICAgICAgLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKyAgICAgICAgICAuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorICAgICAgICAgIC5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKyAgICAgICAgICAucmF0ZV9taW4gPSAgICAgICAgIDgwMDAsCisgICAgICAgICAgLnJhdGVfbWF4ID0gICAgICAgICA0ODAwMCwKKyAgICAgICAgICAuY2hhbm5lbHNfbWluID0gICAgIDIsCisgICAgICAgICAgLmNoYW5uZWxzX21heCA9ICAgICAyLAorICAgICAgICAgIC5idWZmZXJfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19taW4gPSA0MDk2LAorICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZHNfbWluID0gICAgICAxLAorICAgICAgICAgIC5wZXJpb2RzX21heCA9ICAgICAgMTAyNCwKKyAgfTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCTxpdGVtaXplZGxpc3Q+CisJPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSB0eXBlIGFuZAorICAgICAgICBjYXBhYmlsaXRpZXMgb2YgdGhpcyBwY20uIFRoZSBiaXQgZmxhZ3MgYXJlIGRlZmluZWQgaW4KKyAgICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmQuaCZndDs8L2ZpbGVuYW1lPiBhcworICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fWFhYPC9jb25zdGFudD4uIEhlcmUsIGF0IGxlYXN0LCB5b3UKKyAgICAgICAgaGF2ZSB0byBzcGVjaWZ5IHdoZXRoZXIgdGhlIG1tYXAgaXMgc3VwcG9ydGVkIGFuZCB3aGljaAorICAgICAgICBpbnRlcmxlYXZlZCBmb3JtYXQgaXMgc3VwcG9ydGVkLgorICAgICAgICBXaGVuIHRoZSBtbWFwIGlzIHN1cHBvcnRlZCwgYWRkCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19NTUFQPC9jb25zdGFudD4gZmxhZyBoZXJlLiBXaGVuIHRoZQorICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyB0aGUgaW50ZXJsZWF2ZWQgb3IgdGhlIG5vbi1pbnRlcmxlYXZlZAorICAgICAgICBmb3JtYXQsIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRDwvY29uc3RhbnQ+IG9yCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19OT05JTlRFUkxFQVZFRDwvY29uc3RhbnQ+IGZsYWcgbXVzdAorICAgICAgICBiZSBzZXQsIHJlc3BlY3RpdmVseS4gSWYgYm90aCBhcmUgc3VwcG9ydGVkLCB5b3UgY2FuIHNldCBib3RoLAorICAgICAgICB0b28uIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIDxjb25zdGFudD5NTUFQX1ZBTElEPC9jb25zdGFudD4gYW5kCisgICAgICAgIDxjb25zdGFudD5CTE9DS19UUkFOU0ZFUjwvY29uc3RhbnQ+IGFyZSBzcGVjaWZpZWQgZm9yIE9TUyBtbWFwCisgICAgICAgIG1vZGUuIFVzdWFsbHkgYm90aCBhcmUgc2V0LiBPZiBjb3Vyc2UsCisgICAgICAgIDxjb25zdGFudD5NTUFQX1ZBTElEPC9jb25zdGFudD4gaXMgc2V0IG9ubHkgaWYgdGhlIG1tYXAgaXMKKyAgICAgICAgcmVhbGx5IHN1cHBvcnRlZC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgb3RoZXIgcG9zc2libGUgZmxhZ3MgYXJlCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19QQVVTRTwvY29uc3RhbnQ+IGFuZAorICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUkVTVU1FPC9jb25zdGFudD4uIFRoZQorICAgICAgICA8Y29uc3RhbnQ+UEFVU0U8L2NvbnN0YW50PiBiaXQgbWVhbnMgdGhhdCB0aGUgcGNtIHN1cHBvcnRzIHRoZQorICAgICAgICA8cXVvdGU+cGF1c2U8L3F1b3RlPiBvcGVyYXRpb24sIHdoaWxlIHRoZQorICAgICAgICA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4gYml0IG1lYW5zIHRoYXQgdGhlIHBjbSBzdXBwb3J0cworICAgICAgICB0aGUgPHF1b3RlPnN1c3BlbmQvcmVzdW1lPC9xdW90ZT4gb3BlcmF0aW9uLiBJZiB0aGVzZSBmbGFncworICAgICAgICBhcmUgc2V0LCB0aGUgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBiZWxvdworICAgICAgICBtdXN0IGhhbmRsZSB0aGUgY29ycmVzcG9uZGluZyBjb21tYW5kcy4gCisgICAgICAgIDwvcGFyYT4KKworCTxwYXJhPgorCSAgV2hlbiB0aGUgUENNIHN1YnN0cmVhbXMgY2FuIGJlIHN5bmNocm9uaXplZCAodHlwaWNhbGx5LAorCXN5bmNob3Jpbml6ZWQgc3RhcnQvc3RvcCBvZiBhIHBsYXliYWNrIGFuZCBhIGNhcHR1cmUgc3RyZWFtcyksCisJeW91IGNhbiBnaXZlIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUPC9jb25zdGFudD4sCisJdG9vLiAgSW4gdGhpcyBjYXNlLCB5b3UnbGwgbmVlZCB0byBjaGVjayB0aGUgbGlua2VkLWxpc3Qgb2YKKwlQQ00gc3Vic3RyZWFtcyBpbiB0aGUgdHJpZ2dlciBjYWxsYmFjay4gIFRoaXMgd2lsbCBiZQorCWRlc2NyaWJlZCBpbiB0aGUgbGF0ZXIgc2VjdGlvbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPHN0cnVjdGZpZWxkPmZvcm1hdHM8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgYml0LWZsYWdzCisgICAgICAgIG9mIHN1cHBvcnRlZCBmb3JtYXRzICg8Y29uc3RhbnQ+U05EUlZfUENNX0ZNVEJJVF9YWFg8L2NvbnN0YW50PikuCisgICAgICAgIElmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBtb3JlIHRoYW4gb25lIGZvcm1hdCwgZ2l2ZSBhbGwgb3InZWQKKyAgICAgICAgYml0cy4gIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgc2lnbmVkIDE2Yml0IGxpdHRsZS1lbmRpYW4KKyAgICAgICAgZm9ybWF0IGlzIHNwZWNpZmllZC4KKyAgICAgICAgPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICA8c3RydWN0ZmllbGQ+cmF0ZXM8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgYml0LWZsYWdzIG9mCisgICAgICAgIHN1cHBvcnRlZCByYXRlcyAoPGNvbnN0YW50PlNORFJWX1BDTV9SQVRFX1hYWDwvY29uc3RhbnQ+KS4KKyAgICAgICAgV2hlbiB0aGUgY2hpcCBzdXBwb3J0cyBjb250aW51b3VzIHJhdGVzLCBwYXNzCisgICAgICAgIDxjb25zdGFudD5DT05USU5VT1VTPC9jb25zdGFudD4gYml0IGFkZGl0aW9uYWxseS4KKyAgICAgICAgVGhlIHByZS1kZWZpbmVkIHJhdGUgYml0cyBhcmUgcHJvdmlkZWQgb25seSBmb3IgdHlwaWNhbAorCXJhdGVzLiBJZiB5b3VyIGNoaXAgc3VwcG9ydHMgdW5jb252ZW50aW9uYWwgcmF0ZXMsIHlvdSBuZWVkIHRvIGFkZAorICAgICAgICA8Y29uc3RhbnQ+S05PVDwvY29uc3RhbnQ+IGJpdCBhbmQgc2V0IHVwIHRoZSBoYXJkd2FyZQorICAgICAgICBjb25zdHJhaW50IG1hbnVhbGx5IChleHBsYWluZWQgbGF0ZXIpLgorICAgICAgICA8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwk8c3RydWN0ZmllbGQ+cmF0ZV9taW48L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+cmF0ZV9tYXg8L3N0cnVjdGZpZWxkPiBkZWZpbmUgdGhlIG1pbmltYWwgYW5kCisJbWF4aW1hbCBzYW1wbGUgcmF0ZS4gIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgc29tZWhvdyB0bworCTxzdHJ1Y3RmaWVsZD5yYXRlczwvc3RydWN0ZmllbGQ+IGJpdHMuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJPHN0cnVjdGZpZWxkPmNoYW5uZWxfbWluPC9zdHJ1Y3RmaWVsZD4gYW5kCisJPHN0cnVjdGZpZWxkPmNoYW5uZWxfbWF4PC9zdHJ1Y3RmaWVsZD4gCisJZGVmaW5lLCBhcyB5b3UgbWlnaHQgYWxyZWFkeSBleHBlY3RlZCwgdGhlIG1pbmltYWwgYW5kIG1heGltYWwKKwludW1iZXIgb2YgY2hhbm5lbHMuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJPHN0cnVjdGZpZWxkPmJ1ZmZlcl9ieXRlc19tYXg8L3N0cnVjdGZpZWxkPiBkZWZpbmVzIHRoZQorCW1heGltYWwgYnVmZmVyIHNpemUgaW4gYnl0ZXMuICBUaGVyZSBpcyBubworCTxzdHJ1Y3RmaWVsZD5idWZmZXJfYnl0ZXNfbWluPC9zdHJ1Y3RmaWVsZD4gZmllbGQsIHNpbmNlCisJaXQgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgbWluaW1hbCBwZXJpb2Qgc2l6ZSBhbmQgdGhlCisJbWluaW1hbCBudW1iZXIgb2YgcGVyaW9kcy4KKwlNZWFud2hpbGUsIDxzdHJ1Y3RmaWVsZD5wZXJpb2RfYnl0ZXNfbWluPC9zdHJ1Y3RmaWVsZD4gYW5kCisJZGVmaW5lIHRoZSBtaW5pbWFsIGFuZCBtYXhpbWFsIHNpemUgb2YgdGhlIHBlcmlvZCBpbiBieXRlcy4KKwk8c3RydWN0ZmllbGQ+cGVyaW9kc19tYXg8L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+cGVyaW9kc19taW48L3N0cnVjdGZpZWxkPiBkZWZpbmUgdGhlIG1heGltYWwgYW5kCisJbWluaW1hbCBudW1iZXIgb2YgcGVyaW9kcyBpbiB0aGUgYnVmZmVyLgorICAgICAgICA8L3BhcmE+CisKKwk8cGFyYT4KKwlUaGUgPHF1b3RlPnBlcmlvZDwvcXVvdGU+IGlzIGEgdGVybSwgdGhhdCBjb3JyZXNwb25kcyB0bworCWZyYWdtZW50IGluIHRoZSBPU1Mgd29ybGQuICBUaGUgcGVyaW9kIGRlZmluZXMgdGhlIHNpemUgYXQKKwl3aGljaCB0aGUgUENNIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFRoaXMgc2l6ZSBzdHJvbmdseQorCWRlcGVuZHMgb24gdGhlIGhhcmR3YXJlLiAKKwlHZW5lcmFsbHksIHRoZSBzbWFsbGVyIHBlcmlvZCBzaXplIHdpbGwgZ2l2ZSB5b3UgbW9yZQorCWludGVycnVwdHMsIHRoYXQgaXMsIG1vcmUgY29udHJvbHMuIAorCUluIHRoZSBjYXNlIG9mIGNhcHR1cmUsIHRoaXMgc2l6ZSBkZWZpbmVzIHRoZSBpbnB1dCBsYXRlbmN5LgorCU9uIHRoZSBvdGhlciBoYW5kLCB0aGUgd2hvbGUgYnVmZmVyIHNpemUgZGVmaW5lcyB0aGUKKwlvdXRwdXQgbGF0ZW5jeSBmb3IgdGhlIHBsYXliYWNrIGRpcmVjdGlvbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlUaGVyZSBpcyBhbHNvIGEgZmllbGQgPHN0cnVjdGZpZWxkPmZpZm9fc2l6ZTwvc3RydWN0ZmllbGQ+LgorCVRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBoYXJkd2FyZSBGSUZPLCBidXQgaXQncyBub3QKKwl1c2VkIGN1cnJlbnRseSBpbiB0aGUgZHJpdmVyIG5vciBpbiB0aGUgYWxzYS1saWIuICBTbywgeW91CisJY2FuIGlnbm9yZSB0aGlzIGZpZWxkLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTwvaXRlbWl6ZWRsaXN0PgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWNvbmZpZyI+CisJPHRpdGxlPlBDTSBDb25maWd1cmF0aW9uczwvdGl0bGU+CisJPHBhcmE+CisJT2ssIGxldCdzIGdvIGJhY2sgYWdhaW4gdG8gdGhlIFBDTSBydW50aW1lIHJlY29yZHMuCisJVGhlIG1vc3QgZnJlcXVlbnRseSByZWZlcnJlZCByZWNvcmRzIGluIHRoZSBydW50aW1lIGluc3RhbmNlIGFyZQorCXRoZSBQQ00gY29uZmlndXJhdGlvbnMuCisJVGhlIFBDTSBjb25maWd1cmF0aW9ucyBhcmUgc3RvcmVkIG9uIHJ1bnRpbWUgaW5zdGFuY2UKKwlhZnRlciB0aGUgYXBwbGljYXRpb24gc2VuZHMgPHR5cGU+aHdfcGFyYW1zPC90eXBlPiBkYXRhIHZpYQorCWFsc2EtbGliLiAgVGhlcmUgYXJlIG1hbnkgZmllbGRzIGNvcGllZCBmcm9tIGh3X3BhcmFtcyBhbmQKKwlzd19wYXJhbXMgc3RydWN0cy4gIEZvciBleGFtcGxlLAorCTxzdHJ1Y3RmaWVsZD5mb3JtYXQ8L3N0cnVjdGZpZWxkPiBob2xkcyB0aGUgZm9ybWF0IHR5cGUKKwljaG9zZW4gYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhpcyBmaWVsZCBjb250YWlucyB0aGUgZW51bSB2YWx1ZQorCTxjb25zdGFudD5TTkRSVl9QQ01fRk9STUFUX1hYWDwvY29uc3RhbnQ+LgorCTwvcGFyYT4KKworCTxwYXJhPgorCU9uZSB0aGluZyB0byBiZSBub3RlZCBpcyB0aGF0IHRoZSBjb25maWd1cmVkIGJ1ZmZlciBhbmQgcGVyaW9kCisJc2l6ZXMgYXJlIHN0b3JlZCBpbiA8cXVvdGU+ZnJhbWVzPC9xdW90ZT4gaW4gdGhlIHJ1bnRpbWUKKyAgICAgICAgSW4gdGhlIEFMU0Egd29ybGQsIDEgZnJhbWUgPSBjaGFubmVscyAqIHNhbXBsZXMtc2l6ZS4KKwlGb3IgY29udmVyc2lvbiBiZXR3ZWVuIGZyYW1lcyBhbmQgYnl0ZXMsIHlvdSBjYW4gdXNlIHRoZQorCWhlbHBlciBmdW5jdGlvbnMsIDxmdW5jdGlvbj5mcmFtZXNfdG9fYnl0ZXMoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgICAgIDxmdW5jdGlvbj5ieXRlc190b19mcmFtZXMoKTwvZnVuY3Rpb24+LiAKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHBlcmlvZF9ieXRlcyA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworCTxwYXJhPgorCUFsc28sIG1hbnkgc29mdHdhcmUgcGFyYW1ldGVycyAoc3dfcGFyYW1zKSBhcmUKKwlzdG9yZWQgaW4gZnJhbWVzLCB0b28uICBQbGVhc2UgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIGZpZWxkLgorCTx0eXBlPnNuZF9wY21fdWZyYW1lc190PC90eXBlPiBpcyBmb3IgdGhlIGZyYW1lcyBhcyB1bnNpZ25lZAorCWludGVnZXIgd2hpbGUgPHR5cGU+c25kX3BjbV9zZnJhbWVzX3Q8L3R5cGU+IGlzIGZvciB0aGUgZnJhbWVzCisJYXMgc2lnbmVkIGludGVnZXIuCisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtZG1hIj4KKwk8dGl0bGU+RE1BIEJ1ZmZlciBJbmZvcm1hdGlvbjwvdGl0bGU+CisJPHBhcmE+CisJVGhlIERNQSBidWZmZXIgaXMgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIGZvdXIgZmllbGRzLAorCTxzdHJ1Y3RmaWVsZD5kbWFfYXJlYTwvc3RydWN0ZmllbGQ+LAorCTxzdHJ1Y3RmaWVsZD5kbWFfYWRkcjwvc3RydWN0ZmllbGQ+LAorCTxzdHJ1Y3RmaWVsZD5kbWFfYnl0ZXM8L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPi4KKwlUaGUgPHN0cnVjdGZpZWxkPmRtYV9hcmVhPC9zdHJ1Y3RmaWVsZD4gaG9sZHMgdGhlIGJ1ZmZlcgorCXBvaW50ZXIgKHRoZSBsb2dpY2FsIGFkZHJlc3MpLiAgWW91IGNhbiBjYWxsCisJPGZ1bmN0aW9uPm1lbWNweTwvZnVuY3Rpb24+IGZyb20vdG8gCisJdGhpcyBwb2ludGVyLiAgTWVhbndoaWxlLCA8c3RydWN0ZmllbGQ+ZG1hX2FkZHI8L3N0cnVjdGZpZWxkPgorCWhvbGRzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIuICBUaGlzIGZpZWxkIGlzCisJc3BlY2lmaWVkIG9ubHkgd2hlbiB0aGUgYnVmZmVyIGlzIGEgbGluZWFyIGJ1ZmZlci4KKwk8c3RydWN0ZmllbGQ+ZG1hX2J5dGVzPC9zdHJ1Y3RmaWVsZD4gaG9sZHMgdGhlIHNpemUgb2YgYnVmZmVyCisJaW4gYnl0ZXMuICA8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPiBpcyB1c2VkIGZvcgorCXRoZSBBTFNBIERNQSBhbGxvY2F0b3IuCisJPC9wYXJhPgorCisJPHBhcmE+CisJSWYgeW91IHVzZSBhIHN0YW5kYXJkIEFMU0EgZnVuY3Rpb24sCisJPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4sIGZvcgorCWFsbG9jYXRpbmcgdGhlIGJ1ZmZlciwgdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgdGhlIEFMU0EgbWlkZGxlCisJbGF5ZXIsIGFuZCB5b3Ugc2hvdWxkIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBjaGFuZ2UgdGhlbSBieQorCXlvdXJzZWxmLiAgWW91IGNhbiByZWFkIHRoZW0gYnV0IG5vdCB3cml0ZSB0aGVtLgorCU9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3Ugd2FudCB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIGJ5CisJeW91cnNlbGYsIHlvdSdsbCBuZWVkIHRvIG1hbmFnZSBpdCBpbiBod19wYXJhbXMgY2FsbGJhY2suCisJQXQgbGVhc3QsIDxzdHJ1Y3RmaWVsZD5kbWFfYnl0ZXM8L3N0cnVjdGZpZWxkPiBpcyBtYW5kYXRvcnkuCisJPHN0cnVjdGZpZWxkPmRtYV9hcmVhPC9zdHJ1Y3RmaWVsZD4gaXMgbmVjZXNzYXJ5IHdoZW4gdGhlCisJYnVmZmVyIGlzIG1tYXBwZWQuICBJZiB5b3VyIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgbW1hcCwgdGhpcworCWZpZWxkIGlzIG5vdCBuZWNlc3NhcnkuICA8c3RydWN0ZmllbGQ+ZG1hX2FkZHI8L3N0cnVjdGZpZWxkPgorCWlzIGFsc28gbm90IG1hbmRhdG9yeS4gIFlvdSBjYW4gdXNlCisJPHN0cnVjdGZpZWxkPmRtYV9wcml2YXRlPC9zdHJ1Y3RmaWVsZD4gYXMgeW91IGxpa2UsIHRvby4KKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1zdGF0dXMiPgorCTx0aXRsZT5SdW5uaW5nIFN0YXR1czwvdGl0bGU+CisJPHBhcmE+CisJVGhlIHJ1bm5pbmcgc3RhdHVzIGNhbiBiZSByZWZlcnJlZCB2aWEgPGNvbnN0YW50PnJ1bnRpbWUtJmd0O3N0YXR1czwvY29uc3RhbnQ+LgorCVRoaXMgaXMgdGhlIHBvaW50ZXIgdG8gPHR5cGU+c25kX3BjbV9tbWFwX3N0YXR1c190PC90eXBlPgorCXJlY29yZC4gIEZvciBleGFtcGxlLCB5b3UgY2FuIGdldCB0aGUgY3VycmVudCBETUEgaGFyZHdhcmUKKwlwb2ludGVyIHZpYSA8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7c3RhdHVzLSZndDtod19wdHI8L2NvbnN0YW50Pi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlUaGUgRE1BIGFwcGxpY2F0aW9uIHBvaW50ZXIgY2FuIGJlIHJlZmVycmVkIHZpYQorCTxjb25zdGFudD5ydW50aW1lLSZndDtjb250cm9sPC9jb25zdGFudD4sIHdoaWNoIHBvaW50cworCTx0eXBlPnNuZF9wY21fbW1hcF9jb250cm9sX3Q8L3R5cGU+IHJlY29yZC4KKwlIb3dldmVyLCBhY2Nlc3NpbmcgZGlyZWN0bHkgdG8gdGhpcyB2YWx1ZSBpcyBub3QgcmVjb21tZW5kZWQuCisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtcHJpdmF0ZSI+CisJPHRpdGxlPlByaXZhdGUgRGF0YTwvdGl0bGU+IAorCTxwYXJhPgorCVlvdSBjYW4gYWxsb2NhdGUgYSByZWNvcmQgZm9yIHRoZSBzdWJzdHJlYW0gYW5kIHN0b3JlIGl0IGluCisJPGNvbnN0YW50PnJ1bnRpbWUtJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+LiAgVXN1YWxseSwgdGhpcworCWRvbmUgaW4KKwk8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1vcGVuLWNhbGxiYWNrIj48Y2l0ZXRpdGxlPgorCXRoZSBvcGVuIGNhbGxiYWNrPC9jaXRldGl0bGU+PC9saW5rPi4KKwlEb24ndCBtaXggdGhpcyB3aXRoIDxjb25zdGFudD5wY20tJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+LgorCVRoZSA8Y29uc3RhbnQ+cGNtLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50PiB1c3VhbGx5IHBvaW50cyB0aGUKKwljaGlwIGluc3RhbmNlIGFzc2lnbmVkIHN0YXRpY2FsbHkgYXQgdGhlIGNyZWF0aW9uIG9mIFBDTSwgd2hpbGUgdGhlIAorCTxjb25zdGFudD5ydW50aW1lLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50PiBwb2ludHMgYSBkeW5hbWljCisJZGF0YSBjcmVhdGVkIGF0IHRoZSBQQ00gb3BlbiBjYWxsYmFjay4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgbXlfcGNtX2RhdGFfdCAqZGF0YTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkYXRhOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGFsbG9jYXRlZCBvYmplY3QgbXVzdCBiZSByZWxlYXNlZCBpbgorCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+CisJdGhlIGNsb3NlIGNhbGxiYWNrPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtaW50ciI+CisJPHRpdGxlPkludGVycnVwdCBDYWxsYmFja3M8L3RpdGxlPgorCTxwYXJhPgorCVRoZSBmaWVsZCA8c3RydWN0ZmllbGQ+dHJhbnNmZXJfYWNrX2JlZ2luPC9zdHJ1Y3RmaWVsZD4gYW5kCisJPHN0cnVjdGZpZWxkPnRyYW5zZmVyX2Fja19lbmQ8L3N0cnVjdGZpZWxkPiBhcmUgY2FsbGVkIGF0CisJdGhlIGJlZ2lubmluZyBhbmQgdGhlIGVuZCBvZgorCTxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiwgcmVzcGVjdGl2ZWx5LiAKKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzIj4KKyAgICAgIDx0aXRsZT5PcGVyYXRvcnM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIE9LLCBub3cgbGV0IG1lIGV4cGxhaW4gdGhlIGRldGFpbCBvZiBlYWNoIHBjbSBjYWxsYmFjaworICAgICAgKDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+KS4gSW4gZ2VuZXJhbCwgZXZlcnkgY2FsbGJhY2sgbXVzdAorICAgICAgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBudW1iZXIgd2l0aCB0aGUgZXJyb3IKKyAgICAgIG51bWJlciBzdWNoIGFzIDxjb25zdGFudD4tRUlOVkFMPC9jb25zdGFudD4gYXQgYW55CisgICAgICBlcnJvci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgYXQgbGVhc3QgdGhlIGFyZ3VtZW50IHdpdGgKKyAgICAgICAgPHR5cGU+c25kX3BjbV9zdWJzdHJlYW1fdDwvdHlwZT4gcG9pbnRlci4gRm9yIHJldHJpZXZpbmcgdGhlCisgICAgICAgIGNoaXAgcmVjb3JkIGZyb20gdGhlIGdpdmVuIHN1YnN0cmVhbSBpbnN0YW5jZSwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgIGZvbGxvd2luZyBtYWNyby4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaW50IHh4eCgpIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisJVGhlIG1hY3JvIHJlYWRzIDxjb25zdGFudD5zdWJzdHJlYW0tJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+LAorCXdoaWNoIGlzIGEgY29weSBvZiA8Y29uc3RhbnQ+cGNtLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50Pi4KKwlZb3UgY2FuIG92ZXJyaWRlIHRoZSBmb3JtZXIgaWYgeW91IG5lZWQgdG8gYXNzaWduIGRpZmZlcmVudCBkYXRhCisJcmVjb3JkcyBwZXIgUENNIHN1YnN0cmVhbS4gIEZvciBleGFtcGxlLCBjbWk4MzMwIGRyaXZlciBhc3NpZ25zCisJZGlmZmVyZW50IHByaXZhdGVfZGF0YSBmb3IgcGxheWJhY2sgYW5kIGNhcHR1cmUgZGlyZWN0aW9ucywKKwliZWNhdXNlIGl0IHVzZXMgdHdvIGRpZmZlcmVudCBjb2RlY3MgKFNCLSBhbmQgQUQtY29tcGF0aWJsZSkgZm9yCisJZGlmZmVyZW50IGRpcmVjdGlvbnMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1vcGVuLWNhbGxiYWNrIj4KKyAgICAgICAgPHRpdGxlPm9wZW4gY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9vcGVuKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgcGNtIHN1YnN0cmVhbSBpcyBvcGVuZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBdCBsZWFzdCwgaGVyZSB5b3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBydW50aW1lLSZndDtodworICAgICAgICAgIHJlY29yZC4gVHlwaWNhbGx5LCB0aGlzIGlzIGRvbmUgYnkgbGlrZSB0aGlzOiAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisgICAgICAgICAgc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKyAgICAgICAgICBydW50aW1lLT5odyA9IHNuZF9teWNoaXBfcGxheWJhY2tfaHc7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIHdoZXJlIDxwYXJhbWV0ZXI+c25kX215Y2hpcF9wbGF5YmFja19odzwvcGFyYW1ldGVyPiBpcyB0aGUKKyAgICAgICAgICBwcmUtZGVmaW5lZCBoYXJkd2FyZSBkZXNjcmlwdGlvbi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlZb3UgY2FuIGFsbG9jYXRlIGEgcHJpdmF0ZSBkYXRhIGluIHRoaXMgY2FsbGJhY2ssIGFzIGRlc2NyaWJlZAorCWluIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1wcml2YXRlIj48Y2l0ZXRpdGxlPgorCVByaXZhdGUgRGF0YTwvY2l0ZXRpdGxlPjwvbGluaz4gc2VjdGlvbi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJZiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBuZWVkcyBtb3JlIGNvbnN0cmFpbnRzLCBzZXQgdGhlCisJaGFyZHdhcmUgY29uc3RyYWludHMgaGVyZSwgdG9vLgorCVNlZSA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWNvbnN0cmFpbnRzIj48Y2l0ZXRpdGxlPgorCUNvbnN0cmFpbnRzPC9jaXRldGl0bGU+PC9saW5rPiBmb3IgbW9yZSBkZXRhaWxzLgorCTwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWNsb3NlLWNhbGxiYWNrIj4KKyAgICAgICAgPHRpdGxlPmNsb3NlIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIE9idmlvdXNseSwgdGhpcyBpcyBjYWxsZWQgd2hlbiBhIHBjbSBzdWJzdHJlYW0gaXMgY2xvc2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQW55IHByaXZhdGUgaW5zdGFuY2UgZm9yIGEgcGNtIHN1YnN0cmVhbSBhbGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgb3BlbiBjYWxsYmFjayB3aWxsIGJlIHJlbGVhc2VkIGhlcmUuIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGtmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhKTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtaW9jdGwtY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+aW9jdGwgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIHVzZWQgZm9yIGFueSBzcGVjaWFsIGFjdGlvbiB0byBwY20gaW9jdGxzLiBCdXQKKyAgICAgICAgdXN1YWxseSB5b3UgY2FuIHBhc3MgYSBnZW5lcmljIGlvY3RsIGNhbGxiYWNrLCAKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX2lvY3RsPC9mdW5jdGlvbj4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWh3LXBhcmFtcy1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5od19wYXJhbXMgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9od19wYXJhbXMoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX2h3X3BhcmFtc190ICogaHdfcGFyYW1zKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIFRoaXMgYW5kIDxzdHJ1Y3RmaWVsZD5od19mcmVlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGV4aXN0CisgICAgICAgIG9ubHkgb24gQUxTQSAwLjkueC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBoYXJkd2FyZSBwYXJhbWV0ZXIKKyAgICAgICAgKDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPikgaXMgc2V0CisgICAgICAgIHVwIGJ5IHRoZSBhcHBsaWNhdGlvbiwgCisgICAgICAgIHRoYXQgaXMsIG9uY2Ugd2hlbiB0aGUgYnVmZmVyIHNpemUsIHRoZSBwZXJpb2Qgc2l6ZSwgdGhlCisgICAgICAgIGZvcm1hdCwgZXRjLiBhcmUgZGVmaW5lZCBmb3IgdGhlIHBjbSBzdWJzdHJlYW0uIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTWFueSBoYXJkd2FyZSBzZXQtdXAgc2hvdWxkIGJlIGRvbmUgaW4gdGhpcyBjYWxsYmFjaywKKyAgICAgICAgaW5jbHVkaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgUGFyYW1ldGVycyB0byBiZSBpbml0aWFsaXplZCBhcmUgcmV0cmlldmVkIGJ5CisgICAgICAgICAgPGZ1bmN0aW9uPnBhcmFtc194eHgoKTwvZnVuY3Rpb24+IG1hY3Jvcy4gRm9yIGFsbG9jYXRpbmcgYQorICAgICAgICAgIGJ1ZmZlciwgeW91IGNhbiBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uLCAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKTwvZnVuY3Rpb24+IGlzIGF2YWlsYWJsZQorCSAgb25seSB3aGVuIHRoZSBETUEgYnVmZmVycyBoYXZlIGJlZW4gcHJlLWFsbG9jYXRlZC4KKwkgIFNlZSB0aGUgc2VjdGlvbiA8bGluaworCSAgbGlua2VuZD0iYnVmZmVyLWFuZC1tZW1vcnktYnVmZmVyLXR5cGVzIj48Y2l0ZXRpdGxlPgorCSAgQnVmZmVyIFR5cGVzPC9jaXRldGl0bGU+PC9saW5rPiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgYW5kIDxzdHJ1Y3RmaWVsZD5wcmVwYXJlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzCisgICAgICAgIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyIGluaXRpYWxpemF0aW9uLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIE9TUyBlbXVsYXRpb24gbWF5CisgICAgICAgIGNhbGwgdGhlc2UgY2FsbGJhY2tzIGF0IGVhY2ggY2hhbmdlIHZpYSBpdHMgaW9jdGwuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGh1cywgeW91IG5lZWQgdG8gdGFrZSBjYXJlIG5vdCB0byBhbGxvY2F0ZSB0aGUgc2FtZSBidWZmZXJzCisgICAgICAgIG1hbnkgdGltZXMsIHdoaWNoIHdpbGwgbGVhZCB0byBtZW1vcnkgbGVhayEgIENhbGxpbmcgdGhlCisgICAgICAgIGhlbHBlciBmdW5jdGlvbiBhYm92ZSBtYW55IHRpbWVzIGlzIE9LLiBJdCB3aWxsIHJlbGVhc2UgdGhlCisgICAgICAgIHByZXZpb3VzIGJ1ZmZlciBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgd2FzIGFscmVhZHkgYWxsb2NhdGVkLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFub3RoZXIgbm90ZSBpcyB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgbm9uLWF0b21pYworICAgICAgICAoc2NoZWR1bGFibGUpLiBUaGlzIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUKKyAgICAgICAgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayAKKyAgICAgICAgaXMgYXRvbWljIChub24tc2NoZWR1bGFibGUpLiBUaGF0IGlzLCBtdXRleCBvciBhbnkKKyAgICAgICAgc2NoZWR1bGUtcmVsYXRlZCBmdW5jdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgaW4KKyAgICAgICAgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KKwlQbGVhc2Ugc2VlIHRoZSBzdWJzZWN0aW9uCisJPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1hdG9taWNpdHkiPjxjaXRldGl0bGU+CisJQXRvbWljaXR5PC9jaXRldGl0bGU+PC9saW5rPiBmb3IgZGV0YWlscy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtaHctZnJlZS1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5od19mcmVlIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfaHdfZnJlZShzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHRvIHJlbGVhc2UgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgdmlhCisgICAgICAgICAgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+LiBGb3IgZXhhbXBsZSwgcmVsZWFzaW5nIHRoZQorICAgICAgICAgIGJ1ZmZlciB2aWEgCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4gaXMgZG9uZSBieQorICAgICAgICAgIGNhbGxpbmcgdGhlIGZvbGxvd2luZzogCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgdGhlIGNsb3NlIGNhbGxiYWNrIGlzIGNhbGxlZC4KKyAgICAgICAgICBBbHNvLCB0aGUgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgdG9vLgorICAgICAgICAgIEtlZXAgdHJhY2sgd2hldGhlciB0aGUgcmVzb3VyY2Ugd2FzIGFscmVhZHkgcmVsZWFzZWQuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1wcmVwYXJlLWNhbGxiYWNrIj4KKyAgICAgICA8dGl0bGU+cHJlcGFyZSBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X3ByZXBhcmUoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBwY20gaXMKKyAgICAgICAgPHF1b3RlPnByZXBhcmVkPC9xdW90ZT4uIFlvdSBjYW4gc2V0IHRoZSBmb3JtYXQgdHlwZSwgc2FtcGxlCisgICAgICAgIHJhdGUsIGV0Yy4gaGVyZS4gVGhlIGRpZmZlcmVuY2UgZnJvbQorICAgICAgICA8c3RydWN0ZmllbGQ+aHdfcGFyYW1zPC9zdHJ1Y3RmaWVsZD4gaXMgdGhhdCB0aGUgCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5wcmVwYXJlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgYXQgZWFjaAorICAgICAgICB0aW1lIAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wcmVwYXJlKCk8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIGkuZS4gd2hlbgorICAgICAgICByZWNvdmVyZWQgYWZ0ZXIgdW5kZXJydW5zLCBldGMuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJTm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgYmVjYW1lIG5vbi1hdG9taWMgc2luY2UgdGhlIHJlY2VudCB2ZXJzaW9uLgorCVlvdSBjYW4gdXNlIHNjaGVkdWxlLXJlbGF0ZWQgZnVjbnRpb25zIHNhZmVseSBpbiB0aGlzIGNhbGxiYWNrIG5vdy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgY2FsbGJhY2tzLCB5b3UgY2FuIHJlZmVyIHRvIHRoZQorICAgICAgICB2YWx1ZXMgdmlhIHRoZSBydW50aW1lIHJlY29yZCwKKyAgICAgICAgc3Vic3RyZWFtLSZndDtydW50aW1lLgorICAgICAgICBGb3IgZXhhbXBsZSwgdG8gZ2V0IHRoZSBjdXJyZW50CisgICAgICAgIHJhdGUsIGZvcm1hdCBvciBjaGFubmVscywgYWNjZXNzIHRvCisgICAgICAgIHJ1bnRpbWUtJmd0O3JhdGUsCisgICAgICAgIHJ1bnRpbWUtJmd0O2Zvcm1hdCBvcgorICAgICAgICBydW50aW1lLSZndDtjaGFubmVscywgcmVzcGVjdGl2ZWx5LiAKKyAgICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgaXMgc2V0IHRvCisJcnVudGltZS0mZ3Q7ZG1hX2FyZWEuICBUaGUgYnVmZmVyIGFuZCBwZXJpb2Qgc2l6ZXMgYXJlCisJaW4gcnVudGltZS0mZ3Q7YnVmZmVyX3NpemUgYW5kIHJ1bnRpbWUtJmd0O3BlcmlvZF9zaXplLAorCXJlc3BlY3RpdmVseS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEJlIGNhcmVmdWwgdGhhdCB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG1hbnkgdGltZXMgYXQKKyAgICAgICAgZWFjaCBzZXQgdXAsIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXRyaWdnZXItY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+dHJpZ2dlciBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X3RyaWdnZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwgaW50IGNtZCk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBwY20gaXMgc3RhcnRlZCwgc3RvcHBlZCBvciBwYXVzZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaGljaCBhY3Rpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQsCisgICAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9UUklHR0VSX1hYWDwvY29uc3RhbnQ+IGluCisgICAgICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPi4gQXQgbGVhc3QsCisgICAgICAgICAgPGNvbnN0YW50PlNUQVJUPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5TVE9QPC9jb25zdGFudD4KKyAgICAgICAgICBjb21tYW5kcyBtdXN0IGJlIGRlZmluZWQgaW4gdGhpcyBjYWxsYmFjay4gCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN3aXRjaCAoY21kKSB7CisgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisgICAgICAgICAgLy8gZG8gc29tZXRoaW5nIHRvIHN0YXJ0IHRoZSBQQ00gZW5naW5lCisgICAgICAgICAgYnJlYWs7CisgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKyAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgdG8gc3RvcCB0aGUgUENNIGVuZ2luZQorICAgICAgICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaGVuIHRoZSBwY20gc3VwcG9ydHMgdGhlIHBhdXNlIG9wZXJhdGlvbiAoZ2l2ZW4gaW4gaW5mbworICAgICAgICBmaWVsZCBvZiB0aGUgaGFyZHdhcmUgdGFibGUpLCA8Y29uc3RhbnQ+UEFVU0VfUFVTRTwvY29uc3RhbnQ+CisgICAgICAgIGFuZCA8Y29uc3RhbnQ+UEFVU0VfUkVMRUFTRTwvY29uc3RhbnQ+IGNvbW1hbmRzIG11c3QgYmUKKyAgICAgICAgaGFuZGxlZCBoZXJlLCB0b28uIFRoZSBmb3JtZXIgaXMgdGhlIGNvbW1hbmQgdG8gcGF1c2UgdGhlIHBjbSwKKyAgICAgICAgYW5kIHRoZSBsYXR0ZXIgdG8gcmVzdGFydCB0aGUgcGNtIGFnYWluLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdoZW4gdGhlIHBjbSBzdXBwb3J0cyB0aGUgc3VzcGVuZC9yZXN1bWUgb3BlcmF0aW9uCisgICAgICAgIChpLmUuIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19SRVNVTUU8L2NvbnN0YW50PiBmbGFnIGlzIHNldCksCisgICAgICAgIDxjb25zdGFudD5TVVNQRU5EPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5SRVNVTUU8L2NvbnN0YW50PgorICAgICAgICBjb21tYW5kcyBtdXN0IGJlIGhhbmRsZWQsIHRvby4KKyAgICAgICAgVGhlc2UgY29tbWFuZHMgYXJlIGlzc3VlZCB3aGVuIHRoZSBwb3dlci1tYW5hZ2VtZW50IHN0YXR1cyBpcworICAgICAgICBjaGFuZ2VkLiAgT2J2aW91c2x5LCB0aGUgPGNvbnN0YW50PlNVU1BFTkQ8L2NvbnN0YW50PiBhbmQKKyAgICAgICAgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+CisgICAgICAgIGRvIHN1c3BlbmQgYW5kIHJlc3VtZSBvZiB0aGUgcGNtIHN1YnN0cmVhbSwgYW5kIHVzdWFsbHksIHRoZXkKKyAgICAgICAgYXJlIGlkZW50aWNhbCB3aXRoIDxjb25zdGFudD5TVE9QPC9jb25zdGFudD4gYW5kCisgICAgICAgIDxjb25zdGFudD5TVEFSVDwvY29uc3RhbnQ+IGNvbW1hbmRzLCByZXNwZWN0aXZlbHkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBcyBtZW50aW9uZWQsIHRoaXMgY2FsbGJhY2sgaXMgYXRvbWljLiAgWW91IGNhbm5vdCBjYWxsCisJICB0aGUgZnVuY3Rpb24gZ29pbmcgdG8gc2xlZXAuCisJICBUaGUgdHJpZ2dlciBjYWxsYmFjayBzaG91bGQgYmUgYXMgbWluaW1hbCBhcyBwb3NzaWJsZSwKKwkgIGp1c3QgcmVhbGx5IHRyaWdnZXJpbmcgdGhlIERNQS4gIFRoZSBvdGhlciBzdHVmZiBzaG91bGQgYmUKKwkgIGluaXRpYWxpemVkIGh3X3BhcmFtcyBhbmQgcHJlcGFyZSBjYWxsYmFja3MgcHJvcGVybHkKKwkgIGJlZm9yZWhhbmQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXBvaW50ZXItY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+cG9pbnRlciBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF94eHhfcG9pbnRlcihzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgUENNIG1pZGRsZSBsYXllciBpbnF1aXJlcworICAgICAgICB0aGUgY3VycmVudCBoYXJkd2FyZSBwb3NpdGlvbiBvbiB0aGUgYnVmZmVyLiBUaGUgcG9zaXRpb24gbXVzdAorICAgICAgICBiZSByZXR1cm5lZCBpbiBmcmFtZXMgKHdoaWNoIHdhcyBpbiBieXRlcyBvbiBBTFNBIDAuNS54KSwKKyAgICAgICAgcmFuZ2VkIGZyb20gMCB0byBidWZmZXJfc2l6ZSAtIDEuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB1c3VhbGx5IGZyb20gdGhlIGJ1ZmZlci11cGRhdGUgcm91dGluZSBpbiB0aGUKKyAgICAgICAgcGNtIG1pZGRsZSBsYXllciwgd2hpY2ggaXMgaW52b2tlZCB3aGVuCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgaW4gdGhlCisgICAgICAgIGludGVycnVwdCByb3V0aW5lLiBUaGVuIHRoZSBwY20gbWlkZGxlIGxheWVyIHVwZGF0ZXMgdGhlCisgICAgICAgIHBvc2l0aW9uIGFuZCBjYWxjdWxhdGVzIHRoZSBhdmFpbGFibGUgc3BhY2UsIGFuZCB3YWtlcyB1cCB0aGUKKyAgICAgICAgc2xlZXBpbmcgcG9sbCB0aHJlYWRzLCBldGMuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBhbHNvIGF0b21pYy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtY29weS1zaWxlbmNlIj4KKyAgICAgICAgPHRpdGxlPmNvcHkgYW5kIHNpbGVuY2UgY2FsbGJhY2tzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBub3QgbWFuZGF0b3J5LCBhbmQgY2FuIGJlIG9taXR0ZWQgaW4KKyAgICAgICAgbW9zdCBjYXNlcy4gVGhlc2UgY2FsbGJhY2tzIGFyZSB1c2VkIHdoZW4gdGhlIGhhcmR3YXJlIGJ1ZmZlcgorICAgICAgICBjYW5ub3QgYmUgb24gdGhlIG5vcm1hbCBtZW1vcnkgc3BhY2UuIFNvbWUgY2hpcHMgaGF2ZSB0aGVpcgorICAgICAgICBvd24gYnVmZmVyIG9uIHRoZSBoYXJkd2FyZSB3aGljaCBpcyBub3QgbWFwcGFibGUuIEluIHN1Y2ggYQorICAgICAgICBjYXNlLCB5b3UgaGF2ZSB0byB0cmFuc2ZlciB0aGUgZGF0YSBtYW51YWxseSBmcm9tIHRoZSBtZW1vcnkKKyAgICAgICAgYnVmZmVyIHRvIHRoZSBoYXJkd2FyZSBidWZmZXIuIE9yLCBpZiB0aGUgYnVmZmVyIGlzCisgICAgICAgIG5vbi1jb250aWd1b3VzIG9uIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgbWVtb3J5IHNwYWNlcywKKyAgICAgICAgdGhlc2UgY2FsbGJhY2tzIG11c3QgYmUgZGVmaW5lZCwgdG9vLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHRoZXNlIHR3byBjYWxsYmFja3MgYXJlIGRlZmluZWQsIGNvcHkgYW5kIHNldC1zaWxlbmNlCisgICAgICAgIG9wZXJhdGlvbnMgYXJlIGRvbmUgYnkgdGhlbS4gVGhlIGRldGFpbGVkIHdpbGwgYmUgZGVzY3JpYmVkIGluCisgICAgICAgIHRoZSBsYXRlciBzZWN0aW9uIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5Ij48Y2l0ZXRpdGxlPkJ1ZmZlciBhbmQgTWVtb3J5CisgICAgICAgIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+LiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtYWNrIj4KKyAgICAgICAgPHRpdGxlPmFjayBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgYWxzbyBub3QgbWFuZGF0b3J5LiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZAorICAgICAgICB3aGVuIHRoZSBhcHBsX3B0ciBpcyB1cGRhdGVkIGluIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9ucy4KKyAgICAgICAgU29tZSBkcml2ZXJzIGxpa2UgZW11MTBrMS1meCBhbmQgY3M0Nnh4IG5lZWQgdG8gdHJhY2sgdGhlCisJY3VycmVudCBhcHBsX3B0ciBmb3IgdGhlIGludGVybmFsIGJ1ZmZlciwgYW5kIHRoaXMgY2FsbGJhY2sKKwlpcyB1c2VmdWwgb25seSBmb3Igc3VjaCBhIHB1cnBvc2UuCisJPC9wYXJhPgorCTxwYXJhPgorCSAgVGhpcyBjYWxsYmFjayBpcyBhdG9taWMuCisJPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtcGFnZS1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5wYWdlIGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIGFsc28gbm90IG1hbmRhdG9yeS4gVGhpcyBjYWxsYmFjayBpcyB1c2VkCisgICAgICAgIG1haW5seSBmb3IgdGhlIG5vbi1jb250aWd1b3VzIGJ1ZmZlci4gVGhlIG1tYXAgY2FsbHMgdGhpcworICAgICAgICBjYWxsYmFjayB0byBnZXQgdGhlIHBhZ2UgYWRkcmVzcy4gU29tZSBleGFtcGxlcyB3aWxsIGJlCisgICAgICAgIGV4cGxhaW5lZCBpbiB0aGUgbGF0ZXIgc2VjdGlvbiA8bGluaworICAgICAgICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeSI+PGNpdGV0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeQorICAgICAgICBNYW5hZ2VtZW50PC9jaXRldGl0bGU+PC9saW5rPiwgdG9vLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyIj4KKyAgICAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxlcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlc3Qgb2YgcGNtIHN0dWZmIGlzIHRoZSBQQ00gaW50ZXJydXB0IGhhbmRsZXIuIFRoZQorICAgICAgcm9sZSBvZiBQQ00gaW50ZXJydXB0IGhhbmRsZXIgaW4gdGhlIHNvdW5kIGRyaXZlciBpcyB0byB1cGRhdGUKKyAgICAgIHRoZSBidWZmZXIgcG9zaXRpb24gYW5kIHRvIHRlbGwgdGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2hlbiB0aGUKKyAgICAgIGJ1ZmZlciBwb3NpdGlvbiBnb2VzIGFjcm9zcyB0aGUgcHJlc2NyaWJlZCBwZXJpb2Qgc2l6ZS4gVG8KKyAgICAgIGluZm9ybSB0aGlzLCBjYWxsIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPgorICAgICAgZnVuY3Rpb24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgdHlwZXMgb2Ygc291bmQgY2hpcHMgdG8gZ2VuZXJhdGUgdGhlIGludGVycnVwdHMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyLWJvdW5kYXJ5Ij4KKyAgICAgICAgPHRpdGxlPkludGVycnVwdHMgYXQgdGhlIHBlcmlvZCAoZnJhZ21lbnQpIGJvdW5kYXJ5PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBpcyB0aGUgbW9zdCBmcmVxdWVudGx5IGZvdW5kIHR5cGU6ICB0aGUgaGFyZHdhcmUKKyAgICAgICAgZ2VuZXJhdGVzIGFuIGludGVycnVwdCBhdCBlYWNoIHBlcmlvZCBib3VuZGFyeS4KKwlJbiB0aGlzIGNhc2UsIHlvdSBjYW4gY2FsbAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gYXQgZWFjaCAKKyAgICAgICAgaW50ZXJydXB0LiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiB0YWtlcyB0aGUKKyAgICAgICAgc3Vic3RyZWFtIHBvaW50ZXIgYXMgaXRzIGFyZ3VtZW50LiBUaHVzLCB5b3UgbmVlZCB0byBrZWVwIHRoZQorICAgICAgICBzdWJzdHJlYW0gcG9pbnRlciBhY2Nlc3NpYmxlIGZyb20gdGhlIGNoaXAgaW5zdGFuY2UuIEZvcgorICAgICAgICBleGFtcGxlLCBkZWZpbmUgc3Vic3RyZWFtIGZpZWxkIGluIHRoZSBjaGlwIHJlY29yZCB0byBob2xkIHRoZQorICAgICAgICBjdXJyZW50IHJ1bm5pbmcgc3Vic3RyZWFtIHBvaW50ZXIsIGFuZCBzZXQgdGhlIHBvaW50ZXIgdmFsdWUKKyAgICAgICAgYXQgb3BlbiBjYWxsYmFjayAoYW5kIHJlc2V0IGF0IGNsb3NlIGNhbGxiYWNrKS4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiB5b3UgYXF1aXJlIGEgc3BpbmxvY2sgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLCBhbmQgdGhlCisgICAgICAgIGxvY2sgaXMgdXNlZCBpbiBvdGhlciBwY20gY2FsbGJhY2tzLCB0b28sIHRoZW4geW91IGhhdmUgdG8KKyAgICAgICAgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZworICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4sIGJlY2F1c2UKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IGNhbGxzIG90aGVyIHBjbQorICAgICAgICBjYWxsYmFja3MgaW5zaWRlLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEEgdHlwaWNhbCBjb2Rpbmcgd291bGQgYmUgbGlrZToKKworICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+SW50ZXJydXB0IEhhbmRsZXIgQ2FzZSAjMTwvdGl0bGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGlycXJldHVybl90IHNuZF9teWNoaXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBkZXZfaWQ7CisgICAgICAgICAgc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgaWYgKHBjbV9pcnFfaW52b2tlZChjaGlwKSkgeworICAgICAgICAgICAgICAgICAgLyogY2FsbCB1cGRhdGVyLCB1bmxvY2sgYmVmb3JlIGl0ICovCisgICAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgICAgICAgICBzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnN1YnN0cmVhbSk7CisgICAgICAgICAgICAgICAgICBzcGluX2xvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgICAgICAgICAgLy8gYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBpZiBuZWNlc3NhcnkKKyAgICAgICAgICB9CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2V4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXItdGltZXIiPgorICAgICAgICA8dGl0bGU+SGlnaC1mcmVxdWVudCB0aW1lciBpbnRlcnJ1cHRzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisJVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGdlbmVyYXRlIGludGVycnVwdHMKKyAgICAgICAgYXQgdGhlIHBlcmlvZCBib3VuZGFyeSBidXQgZG8gdGltZXItaW50ZXJydXB0cyBhdCB0aGUgZml4ZWQKKyAgICAgICAgdGltZXIgcmF0ZSAoZS5nLiBlczE5Njggb3IgeW1mcGNpIGRyaXZlcnMpLiAKKyAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3UgbmVlZCB0byBjaGVjayB0aGUgY3VycmVudCBoYXJkd2FyZQorICAgICAgICBwb3NpdGlvbiBhbmQgYWNjdW11bGF0ZXMgdGhlIHByb2Nlc3NlZCBzYW1wbGUgbGVuZ3RoIGF0IGVhY2gKKyAgICAgICAgaW50ZXJydXB0LiAgV2hlbiB0aGUgYWNjdW11bGF0ZWQgc2l6ZSBvdmVyY29tZXMgdGhlIHBlcmlvZAorICAgICAgICBzaXplLCBjYWxsIAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gYW5kIHJlc2V0IHRoZQorICAgICAgICBhY2N1bXVsYXRvci4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBIHR5cGljYWwgY29kaW5nIHdvdWxkIGJlIGxpa2UgdGhlIGZvbGxvd2luZy4KKworICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+SW50ZXJydXB0IEhhbmRsZXIgQ2FzZSAjMjwvdGl0bGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGlycXJldHVybl90IHNuZF9teWNoaXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBkZXZfaWQ7CisgICAgICAgICAgc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgaWYgKHBjbV9pcnFfaW52b2tlZChjaGlwKSkgeworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhc3RfcHRyLCBzaXplOworICAgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBjdXJyZW50IGhhcmR3YXJlIHBvaW50ZXIgKGluIGZyYW1lcykgKi8KKyAgICAgICAgICAgICAgICAgIGxhc3RfcHRyID0gZ2V0X2h3X3B0cihjaGlwKTsKKyAgICAgICAgICAgICAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgcHJvY2Vzc2VkIGZyYW1lcyBzaW5jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAqIGxhc3QgdXBkYXRlCisgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3B0ciA8IGNoaXAtPmxhc3RfcHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gcnVudGltZS0+YnVmZmVyX3NpemUgKyBsYXN0X3B0ciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBjaGlwLT5sYXN0X3B0cjsgCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBsYXN0X3B0ciAtIGNoaXAtPmxhc3RfcHRyOworICAgICAgICAgICAgICAgICAgLyogcmVtZW1iZXIgdGhlIGxhc3QgdXBkYXRlZCBwb2ludCAqLworICAgICAgICAgICAgICAgICAgY2hpcC0+bGFzdF9wdHIgPSBsYXN0X3B0cjsKKyAgICAgICAgICAgICAgICAgIC8qIGFjY3VtdWxhdGUgdGhlIHNpemUgKi8KKyAgICAgICAgICAgICAgICAgIGNoaXAtPnNpemUgKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgIC8qIG92ZXIgdGhlIHBlcmlvZCBib3VuZGFyeT8gKi8KKyAgICAgICAgICAgICAgICAgIGlmIChjaGlwLT5zaXplID49IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0IHRoZSBhY2N1bXVsYXRvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwLT5zaXplICU9IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWxsIHVwZGF0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAvLyBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IGlmIG5lY2Vzc2FyeQorICAgICAgICAgIH0KKyAgICAgICAgICAuLi4uCisgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlci1ib3RoIj4KKyAgICAgICAgPHRpdGxlPk9uIGNhbGxpbmcgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gYm90aCBjYXNlcywgZXZlbiBpZiBtb3JlIHRoYW4gb25lIHBlcmlvZCBhcmUgZWxhcHNlZCwgeW91CisgICAgICAgIGRvbid0IGhhdmUgdG8gY2FsbAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gbWFueSB0aW1lcy4gQ2FsbAorICAgICAgICBvbmx5IG9uY2UuIEFuZCB0aGUgcGNtIGxheWVyIHdpbGwgY2hlY2sgdGhlIGN1cnJlbnQgaGFyZHdhcmUKKyAgICAgICAgcG9pbnRlciBhbmQgdXBkYXRlIHRvIHRoZSBsYXRlc3Qgc3RhdHVzLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWF0b21pY2l0eSI+CisgICAgICA8dGl0bGU+QXRvbWljaXR5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgT25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCAoYW5kIHRodXMgZGlmZmljdWx0IHRvIGRlYnVnKSBwcm9ibGVtCisgICAgICBvbiB0aGUga2VybmVsIHByb2dyYW1taW5nIGlzIHRoZSByYWNlIGNvbmRpdGlvbi4KKyAgICAgIE9uIGxpbnV4IGtlcm5lbCwgdXN1YWxseSBpdCdzIHNvbHZlZCB2aWEgc3Bpbi1sb2NrcyBvcgorICAgICAgc2VtYXBob3Jlcy4gIEluIGdlbmVyYWwsIGlmIHRoZSByYWNlIGNvbmRpdGlvbiBtYXkKKyAgICAgIGhhcHBlbiBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGl0J3MgaGFuZGxlZCBhcyBhdG9taWMsIGFuZCB5b3UKKyAgICAgIGhhdmUgdG8gdXNlIHNwaW5sb2NrIGZvciBwcm90ZWN0aW5nIHRoZSBjcml0aWNhbCBzZXNzaW9uLiAgSWYgaXQKKyAgICAgIG5ldmVyIGhhcHBlbnMgaW4gdGhlIGludGVycnVwdCBhbmQgaXQgbWF5IHRha2UgcmVsYXRpdmVseSBsb25nCisgICAgICB0aW1lLCB5b3Ugc2hvdWxkIHVzZSBzZW1hcGhvcmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQXMgYWxyZWFkeSBzZWVuLCBzb21lIHBjbSBjYWxsYmFja3MgYXJlIGF0b21pYyBhbmQgc29tZSBhcmUKKyAgICAgIG5vdC4gIEZvciBleGFtcGxlLCA8cGFyYW1ldGVyPmh3X3BhcmFtczwvcGFyYW1ldGVyPiBjYWxsYmFjayBpcworICAgICAgbm9uLWF0b21pYywgd2hpbGUgPHBhcmFtZXRlcj50cmlnZ2VyPC9wYXJhbWV0ZXI+IGNhbGxiYWNrIGlzCisgICAgICBhdG9taWMuICBUaGlzIG1lYW5zLCB0aGUgbGF0dGVyIGlzIGNhbGxlZCBhbHJlYWR5IGluIGEgc3BpbmxvY2sKKyAgICAgIGhlbGQgYnkgdGhlIFBDTSBtaWRkbGUgbGF5ZXIuIFBsZWFzZSB0YWtlIHRoaXMgYXRvbWljaXR5IGludG8KKyAgICAgIGFjY291bnQgd2hlbiB5b3UgdXNlIGEgc3BpbmxvY2sgb3IgYSBzZW1hcGhvcmUgaW4gdGhlIGNhbGxiYWNrcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJbiB0aGUgYXRvbWljIGNhbGxiYWNrcywgeW91IGNhbm5vdCB1c2UgZnVuY3Rpb25zIHdoaWNoIG1heSBjYWxsCisgICAgICA8ZnVuY3Rpb24+c2NoZWR1bGU8L2Z1bmN0aW9uPiBvciBnbyB0bworICAgICAgPGZ1bmN0aW9uPnNsZWVwPC9mdW5jdGlvbj4uICBUaGUgc2VtYXBob3JlIGFuZCBtdXRleCBkbyBzbGVlcCwKKyAgICAgIGFuZCBoZW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGluc2lkZSB0aGUgYXRvbWljIGNhbGxiYWNrcworICAgICAgKGUuZy4gPHBhcmFtZXRlcj50cmlnZ2VyPC9wYXJhbWV0ZXI+IGNhbGxiYWNrKS4KKyAgICAgIEZvciB0YWtpbmcgYSBjZXJ0YWluIGRlbGF5IGluIHN1Y2ggYSBjYWxsYmFjaywgcGxlYXNlIHVzZQorICAgICAgPGZ1bmN0aW9uPnVkZWxheSgpPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPm1kZWxheSgpPC9mdW5jdGlvbj4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQWxsIHRocmVlIGF0b21pYyBjYWxsYmFja3MgKHRyaWdnZXIsIHBvaW50ZXIsIGFuZCBhY2spIGFyZQorICAgICAgY2FsbGVkIHdpdGggbG9jYWwgaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1jb25zdHJhaW50cyI+CisgICAgICA8dGl0bGU+Q29uc3RyYWludHM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdXIgY2hpcCBzdXBwb3J0cyB1bmNvbnZlbnRpb25hbCBzYW1wbGUgcmF0ZXMsIG9yIG9ubHkgdGhlCisgICAgICBsaW1pdGVkIHNhbXBsZXMsIHlvdSBuZWVkIHRvIHNldCBhIGNvbnN0cmFpbnQgZm9yIHRoZQorICAgICAgY29uZGl0aW9uLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBleGFtcGxlLCBpbiBvcmRlciB0byByZXN0cmljdCB0aGUgc2FtcGxlIHJhdGVzIGluIHRoZSBzb21lCisgICAgICAgIHN1cHBvcnRlZCB2YWx1ZXMsIHVzZQorCTxmdW5jdGlvbj5zbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCgpPC9mdW5jdGlvbj4uCisJWW91IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGluIHRoZSBvcGVuIGNhbGxiYWNrLgorCisgICAgICAgIDxleGFtcGxlPgorCSAgPHRpdGxlPkV4YW1wbGUgb2YgSGFyZHdhcmUgQ29uc3RyYWludHM8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdW5zaWduZWQgaW50IHJhdGVzW10gPQorICAgICAgICAgIHs0MDAwLCAxMDAwMCwgMjIwNTAsIDQ0MTAwfTsKKyAgc3RhdGljIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0X3QgY29uc3RyYWludHNfcmF0ZXMgPSB7CisgICAgICAgICAgLmNvdW50ID0gQVJSQVlfU0laRShyYXRlcyksCisgICAgICAgICAgLmxpc3QgPSByYXRlcywKKyAgICAgICAgICAubWFzayA9IDAsCisgIH07CisKKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV9vcGVuKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHN1YnN0cmVhbS0+cnVudGltZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uc3RyYWludHNfcmF0ZXMpOworICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBjb25zdHJhaW50cy4KKyAgICAgICAgTG9vayBpbiA8ZmlsZW5hbWU+c291bmQvcGNtLmg8L2ZpbGVuYW1lPiBmb3IgYSBjb21wbGV0ZSBsaXN0LgorICAgICAgICBZb3UgY2FuIGV2ZW4gZGVmaW5lIHlvdXIgb3duIGNvbnN0cmFpbnQgcnVsZXMuCisgICAgICAgIEZvciBleGFtcGxlLCBsZXQncyBzdXBwb3NlIG15X2NoaXAgY2FuIG1hbmFnZSBhIHN1YnN0cmVhbSBvZiAxIGNoYW5uZWwKKyAgICAgICAgaWYgYW5kIG9ubHkgaWYgdGhlIGZvcm1hdCBpcyBTMTZfTEUsIG90aGVyd2lzZSBpdCBzdXBwb3J0cyBhbnkgZm9ybWF0CisgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgPHR5cGU+c25kX3BjbV9oYXJkd2FyZV90PC90eXBlPiBzdHVjdHVyZSAob3IgaW4gYW55CisgICAgICAgIG90aGVyIGNvbnN0cmFpbnRfbGlzdCkuIFlvdSBjYW4gYnVpbGQgYSBydWxlIGxpa2UgdGhpczoKKworICAgICAgICA8ZXhhbXBsZT4KKwkgIDx0aXRsZT5FeGFtcGxlIG9mIEhhcmR3YXJlIENvbnN0cmFpbnRzIGZvciBDaGFubmVsczwvdGl0bGU+CisJICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBod19ydWxlX2Zvcm1hdF9ieV9jaGFubmVscyhzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX3BjbV9od19ydWxlX3QgKnJ1bGUpCisgIHsKKyAgICAgICAgICBzbmRfaW50ZXJ2YWxfdCAqYyA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKTsKKyAgICAgICAgICBzbmRfbWFza190ICpmID0gaHdfcGFyYW1fbWFzayhwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQpOworICAgICAgICAgIHNuZF9tYXNrX3QgZm10OworCisgICAgICAgICAgc25kX21hc2tfYW55KCZmbXQpOyAgICAvKiBJbml0IHRoZSBzdHJ1Y3QgKi8KKyAgICAgICAgICBpZiAoYy0+bWluIDwgMikgeworICAgICAgICAgICAgICAgICAgZm10LmJpdHNbMF0gJj0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEU7CisgICAgICAgICAgICAgICAgICByZXR1cm4gc25kX21hc2tfcmVmaW5lKGYsICZmbXQpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorIAorICAgICAgPHBhcmE+CisgICAgICAgIFRoZW4geW91IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGFkZCB5b3VyIHJ1bGU6CisKKyAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorCSA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKyAgICAgICAgICAgICAgICAgICAgICBod19ydWxlX2NoYW5uZWxzX2J5X2Zvcm1hdCwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICAtMSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBydWxlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIGFwcGxpY2F0aW9uIHNldHMgdGhlIG51bWJlciBvZgorICAgICAgICBjaGFubmVscy4gQnV0IGFuIGFwcGxpY2F0aW9uIGNhbiBzZXQgdGhlIGZvcm1hdCBiZWZvcmUgdGhlIG51bWJlciBvZgorICAgICAgICBjaGFubmVscy4gVGh1cyB5b3UgYWxzbyBuZWVkIHRvIGRlZmluZSB0aGUgaW52ZXJzZSBydWxlOgorCisgICAgICAgPGV4YW1wbGU+CisJIDx0aXRsZT5FeGFtcGxlIG9mIEhhcmR3YXJlIENvbnN0cmFpbnRzIGZvciBDaGFubmVsczwvdGl0bGU+CisJIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IGh3X3J1bGVfY2hhbm5lbHNfYnlfZm9ybWF0KHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX2h3X3J1bGVfdCAqcnVsZSkKKyAgeworICAgICAgICAgIHNuZF9pbnRlcnZhbF90ICpjID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworICAgICAgICAgIHNuZF9tYXNrX3QgKmYgPSBod19wYXJhbV9tYXNrKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7CisgICAgICAgICAgc25kX2ludGVydmFsX3QgY2g7CisKKyAgICAgICAgICBzbmRfaW50ZXJ2YWxfYW55KCZjaCk7CisgICAgICAgICAgaWYgKGYtPmJpdHNbMF0gPT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUpIHsKKyAgICAgICAgICAgICAgICAgIGNoLm1pbiA9IGNoLm1heCA9IDE7CisgICAgICAgICAgICAgICAgICBjaC5pbnRlZ2VyID0gMTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZjaCk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgLi4uYW5kIGluIHRoZSBvcGVuIGNhbGxiYWNrOgorICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisJIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2h3X3J1bGVfYWRkKHN1YnN0cmVhbS0+cnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICBod19ydWxlX2Zvcm1hdF9ieV9jaGFubmVscywgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorICAgICAgICAgICAgICAgICAgICAgIC0xKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSSB3b24ndCBleHBsYWluIG1vcmUgZGV0YWlscyBoZXJlLCByYXRoZXIgSQorICAgICAgICB3b3VsZCBsaWtlIHRvIHNheSwgPHF1b3RlPkx1a2UsIHVzZSB0aGUgc291cmNlLjwvcXVvdGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQ29udHJvbCBJbnRlcmZhY2UgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJjb250cm9sLWludGVyZmFjZSI+CisgICAgPHRpdGxlPkNvbnRyb2wgSW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1nZW5lcmFsIj4KKyAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgY29udHJvbCBpbnRlcmZhY2UgaXMgdXNlZCB3aWRlbHkgZm9yIG1hbnkgc3dpdGNoZXMsCisgICAgICBzbGlkZXJzLCBldGMuIHdoaWNoIGFyZSBhY2Nlc3NlZCBmcm9tIHRoZSB1c2VyLXNwYWNlLiBJdHMgbW9zdAorICAgICAgaW1wb3J0YW50IHVzZSBpcyB0aGUgbWl4ZXIgaW50ZXJmYWNlLiBJbiBvdGhlciB3b3Jkcywgb24gQUxTQQorICAgICAgMC45LngsIGFsbCB0aGUgbWl4ZXIgc3R1ZmYgaXMgaW1wbGVtZW50ZWQgb24gdGhlIGNvbnRyb2wga2VybmVsCisgICAgICBBUEkgKHdoaWxlIHRoZXJlIHdhcyBhbiBpbmRlcGVuZGVudCBtaXhlciBrZXJuZWwgQVBJIG9uIDAuNS54KS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBTFNBIGhhcyBhIHdlbGwtZGVmaW5lZCBBQzk3IGNvbnRyb2wgbW9kdWxlLiBJZiB5b3VyIGNoaXAKKyAgICAgIHN1cHBvcnRzIG9ubHkgdGhlIEFDOTcgYW5kIG5vdGhpbmcgZWxzZSwgeW91IGNhbiBza2lwIHRoaXMKKyAgICAgIHNlY3Rpb24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNvbnRyb2wgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvY29udHJvbC5oJmd0OzwvZmlsZW5hbWU+LgorICAgICAgSW5jbHVkZSB0aGlzIGZpbGUgaWYgeW91IGFkZCB5b3VyIG93biBjb250cm9scy4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtZGVmaW5pdGlvbiI+CisgICAgICA8dGl0bGU+RGVmaW5pdGlvbiBvZiBDb250cm9sczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIGNyZWF0aW5nIGEgbmV3IGNvbnRyb2wsIHlvdSBuZWVkIHRvIGRlZmluZSB0aGUgdGhyZWUKKyAgICAgIGNhbGxiYWNrczogPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPiwKKyAgICAgIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5wdXQ8L3N0cnVjdGZpZWxkPi4gVGhlbiwgZGVmaW5lIGEKKyAgICAgIDx0eXBlPnNuZF9rY29udHJvbF9uZXdfdDwvdHlwZT4gcmVjb3JkLCBzdWNoIGFzOiAKKworICAgICAgICA8ZXhhbXBsZT4KKwkgIDx0aXRsZT5EZWZpbml0aW9uIG9mIGEgQ29udHJvbDwvdGl0bGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3QgbXlfY29udHJvbCBfX2RldmluaXRkYXRhID0geworICAgICAgICAgIC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorICAgICAgICAgIC5uYW1lID0gIlBDTSBQbGF5YmFjayBTd2l0Y2giLAorICAgICAgICAgIC5pbmRleCA9IDAsCisgICAgICAgICAgLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisgICAgICAgICAgLnByaXZhdGVfdmFsdWVzID0gMHhmZmZmLAorICAgICAgICAgIC5pbmZvID0gbXlfY29udHJvbF9pbmZvLAorICAgICAgICAgIC5nZXQgPSBteV9jb250cm9sX2dldCwKKyAgICAgICAgICAucHV0ID0gbXlfY29udHJvbF9wdXQKKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE1vc3QgbGlrZWx5IHRoZSBjb250cm9sIGlzIGNyZWF0ZWQgdmlhCisgICAgICA8ZnVuY3Rpb24+c25kX2N0bF9uZXcxKCk8L2Z1bmN0aW9uPiwgYW5kIGluIHN1Y2ggYSBjYXNlLCB5b3UgY2FuCisgICAgICBhZGQgPHBhcmFtZXRlcj5fX2RldmluaXRkYXRhPC9wYXJhbWV0ZXI+IHByZWZpeCB0byB0aGUKKyAgICAgIGRlZmluaXRpb24gbGlrZSBhYm92ZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmlmYWNlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mCisgICAgICB0aGUgY29udHJvbCwKKyAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9JRkFDRV9YWFg8L2NvbnN0YW50Pi4gVGhlcmUgYXJlCisgICAgICA8Y29uc3RhbnQ+TUlYRVI8L2NvbnN0YW50PiwgPGNvbnN0YW50PlBDTTwvY29uc3RhbnQ+LAorICAgICAgPGNvbnN0YW50PkNBUkQ8L2NvbnN0YW50PiwgZXRjLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD4gaXMgdGhlIG5hbWUgaWRlbnRpZmllcgorICAgICAgc3RyaW5nLiBPbiBBTFNBIDAuOS54LCB0aGUgY29udHJvbCBuYW1lIGlzIHZlcnkgaW1wb3J0YW50LAorICAgICAgYmVjYXVzZSBpdHMgcm9sZSBpcyBjbGFzc2lmaWVkIGZyb20gaXRzIG5hbWUuIFRoZXJlIGFyZQorICAgICAgcHJlLWRlZmluZWQgc3RhbmRhcmQgY29udHJvbCBuYW1lcy4gVGhlIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBpbgorICAgICAgdGhlIHN1YnNlY3Rpb24KKyAgICAgIDxsaW5rIGxpbmtlbmQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMiPjxjaXRldGl0bGU+CisgICAgICBDb250cm9sIE5hbWVzPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBob2xkcyB0aGUgaW5kZXggbnVtYmVyCisgICAgICBvZiB0aGlzIGNvbnRyb2wuIElmIHRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCBjb250cm9scyB3aXRoCisgICAgICB0aGUgc2FtZSBuYW1lLCB0aGV5IGNhbiBiZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBpbmRleAorICAgICAgbnVtYmVyLiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gCisgICAgICBzZXZlcmFsIGNvZGVjcyBleGlzdCBvbiB0aGUgY2FyZC4gSWYgdGhlIGluZGV4IGlzIHplcm8sIHlvdSBjYW4KKyAgICAgIG9taXQgdGhlIGRlZmluaXRpb24gYWJvdmUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5hY2Nlc3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgYWNjZXNzCisgICAgICB0eXBlIG9mIHRoaXMgY29udHJvbC4gR2l2ZSB0aGUgY29tYmluYXRpb24gb2YgYml0IG1hc2tzLAorICAgICAgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0FDQ0VTU19YWFg8L2NvbnN0YW50PiwgdGhlcmUuCisgICAgICBUaGUgZGV0YWlsZWQgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIHN1YnNlY3Rpb24KKyAgICAgIDxsaW5rIGxpbmtlbmQ9ImNvbnRyb2wtaW50ZXJmYWNlLWFjY2Vzcy1mbGFncyI+PGNpdGV0aXRsZT4KKyAgICAgIEFjY2VzcyBGbGFnczwvY2l0ZXRpdGxlPjwvbGluaz4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnByaXZhdGVfdmFsdWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMKKyAgICAgIGFuIGFyYml0cmFyeSBsb25nIGludGVnZXIgdmFsdWUgZm9yIHRoaXMgcmVjb3JkLiBXaGVuIHVzaW5nCisgICAgICBnZW5lcmljIDxzdHJ1Y3RmaWVsZD5pbmZvPC9zdHJ1Y3RmaWVsZD4sCisgICAgICA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICA8c3RydWN0ZmllbGQ+cHV0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzLCB5b3UgY2FuIHBhc3MgYSB2YWx1ZSAKKyAgICAgIHRocm91Z2ggdGhpcyBmaWVsZC4gSWYgc2V2ZXJhbCBzbWFsbCBudW1iZXJzIGFyZSBuZWNlc3NhcnksIHlvdSBjYW4KKyAgICAgIGNvbWJpbmUgdGhlbSBpbiBiaXR3aXNlLiBPciwgaXQncyBwb3NzaWJsZSB0byBnaXZlIGEgcG9pbnRlcgorICAgICAgKGNhc3RlZCB0byB1bnNpZ25lZCBsb25nKSBvZiBzb21lIHJlY29yZCB0byB0aGlzIGZpZWxkLCB0b28uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG90aGVyIHRocmVlIGFyZQorCTxsaW5rIGxpbmtlbmQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcyI+PGNpdGV0aXRsZT4KKwljYWxsYmFjayBmdW5jdGlvbnM8L2NpdGV0aXRsZT48L2xpbms+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzIj4KKyAgICAgIDx0aXRsZT5Db250cm9sIE5hbWVzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgc29tZSBzdGFuZGFyZHMgZm9yIGRlZmluaW5nIHRoZSBjb250cm9sIG5hbWVzLiBBCisgICAgICBjb250cm9sIGlzIHVzdWFsbHkgZGVmaW5lZCBmcm9tIHRoZSB0aHJlZSBwYXJ0cyBhcworICAgICAgPHF1b3RlPlNPVVJDRSBESVJFQ1RJT04gRlVOQ1RJT048L3F1b3RlPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZmlyc3QsIDxjb25zdGFudD5TT1VSQ0U8L2NvbnN0YW50Piwgc3BlY2lmaWVzIHRoZSBzb3VyY2UKKyAgICAgIG9mIHRoZSBjb250cm9sLCBhbmQgaXMgYSBzdHJpbmcgc3VjaCBhcyA8cXVvdGU+TWFzdGVyPC9xdW90ZT4sCisgICAgICA8cXVvdGU+UENNPC9xdW90ZT4sIDxxdW90ZT5DRDwvcXVvdGU+IG9yCisgICAgICA8cXVvdGU+TGluZTwvcXVvdGU+LiBUaGVyZSBhcmUgbWFueSBwcmUtZGVmaW5lZCBzb3VyY2VzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBzZWNvbmQsIDxjb25zdGFudD5ESVJFQ1RJT048L2NvbnN0YW50PiwgaXMgb25lIG9mIHRoZQorICAgICAgZm9sbG93aW5nIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGNvbnRyb2w6CisgICAgICA8cXVvdGU+UGxheWJhY2s8L3F1b3RlPiwgPHF1b3RlPkNhcHR1cmU8L3F1b3RlPiwgPHF1b3RlPkJ5cGFzcworICAgICAgUGxheWJhY2s8L3F1b3RlPiBhbmQgPHF1b3RlPkJ5cGFzcyBDYXB0dXJlPC9xdW90ZT4uIE9yLCBpdCBjYW4KKyAgICAgIGJlIG9taXR0ZWQsIG1lYW5pbmcgYm90aCBwbGF5YmFjayBhbmQgY2FwdHVyZSBkaXJlY3Rpb25zLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0aGlyZCwgPGNvbnN0YW50PkZVTkNUSU9OPC9jb25zdGFudD4sIGlzIG9uZSBvZiB0aGUKKyAgICAgIGZvbGxvd2luZyBzdHJpbmdzIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24gb2YgdGhlIGNvbnRyb2w6CisgICAgICA8cXVvdGU+U3dpdGNoPC9xdW90ZT4sIDxxdW90ZT5Wb2x1bWU8L3F1b3RlPiBhbmQKKyAgICAgIDxxdW90ZT5Sb3V0ZTwvcXVvdGU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBleGFtcGxlIG9mIGNvbnRyb2wgbmFtZXMgYXJlLCB0aHVzLCA8cXVvdGU+TWFzdGVyIENhcHR1cmUKKyAgICAgIFN3aXRjaDwvcXVvdGU+IG9yIDxxdW90ZT5QQ00gUGxheWJhY2sgVm9sdW1lPC9xdW90ZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIHNvbWUgZXhjZXB0aW9uczoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtZ2xvYmFsIj4KKyAgICAgICAgPHRpdGxlPkdsb2JhbCBjYXB0dXJlIGFuZCBwbGF5YmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxxdW90ZT5DYXB0dXJlIFNvdXJjZTwvcXVvdGU+LCA8cXVvdGU+Q2FwdHVyZSBTd2l0Y2g8L3F1b3RlPgorICAgICAgICBhbmQgPHF1b3RlPkNhcHR1cmUgVm9sdW1lPC9xdW90ZT4gYXJlIHVzZWQgZm9yIHRoZSBnbG9iYWwKKyAgICAgICAgY2FwdHVyZSAoaW5wdXQpIHNvdXJjZSwgc3dpdGNoIGFuZCB2b2x1bWUuIFNpbWlsYXJseSwKKyAgICAgICAgPHF1b3RlPlBsYXliYWNrIFN3aXRjaDwvcXVvdGU+IGFuZCA8cXVvdGU+UGxheWJhY2sKKyAgICAgICAgVm9sdW1lPC9xdW90ZT4gYXJlIHVzZWQgZm9yIHRoZSBnbG9iYWwgb3V0cHV0IGdhaW4gc3dpdGNoIGFuZAorICAgICAgICB2b2x1bWUuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLXRvbmUiPgorICAgICAgICA8dGl0bGU+VG9uZS1jb250cm9sczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIHRvbmUtY29udHJvbCBzd2l0Y2ggYW5kIHZvbHVtZXMgYXJlIHNwZWNpZmllZCBsaWtlCisgICAgICAgIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBYWFg8L3F1b3RlPiwgZS5nLiA8cXVvdGU+VG9uZSBDb250cm9sIC0KKyAgICAgICAgU3dpdGNoPC9xdW90ZT4sIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBCYXNzPC9xdW90ZT4sCisgICAgICAgIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBDZW50ZXI8L3F1b3RlPi4gIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLTNkIj4KKyAgICAgICAgPHRpdGxlPjNEIGNvbnRyb2xzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgM0QtY29udHJvbCBzd2l0Y2hlcyBhbmQgdm9sdW1lcyBhcmUgc3BlY2lmaWVkIGxpa2UgPHF1b3RlPjNECisgICAgICAgIENvbnRyb2wgLSBYWFg8L3F1b3RlPiwgZS5nLiA8cXVvdGU+M0QgQ29udHJvbCAtCisgICAgICAgIFN3aXRjaDwvcXVvdGU+LCA8cXVvdGU+M0QgQ29udHJvbCAtIENlbnRlcjwvcXVvdGU+LCA8cXVvdGU+M0QKKyAgICAgICAgQ29udHJvbCAtIFNwYWNlPC9xdW90ZT4uIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLW1pYyI+CisgICAgICAgIDx0aXRsZT5NaWMgYm9vc3Q8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNaWMtYm9vc3Qgc3dpdGNoIGlzIHNldCBhcyA8cXVvdGU+TWljIEJvb3N0PC9xdW90ZT4gb3IKKyAgICAgICAgPHF1b3RlPk1pYyBCb29zdCAoNmRCKTwvcXVvdGU+LiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1vcmUgcHJlY2lzZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4KKyAgICAgICAgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vc291bmQvYWxzYS9Db250cm9sTmFtZXMudHh0PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtYWNjZXNzLWZsYWdzIj4KKyAgICAgIDx0aXRsZT5BY2Nlc3MgRmxhZ3M8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBhY2Nlc3MgZmxhZyBpcyB0aGUgYml0LWZsYWdzIHdoaWNoIHNwZWNpZmllcyB0aGUgYWNjZXNzIHR5cGUKKyAgICAgIG9mIHRoZSBnaXZlbiBjb250cm9sLiAgVGhlIGRlZmF1bHQgYWNjZXNzIHR5cGUgaXMKKyAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFPC9jb25zdGFudD4sIAorICAgICAgd2hpY2ggbWVhbnMgYm90aCByZWFkIGFuZCB3cml0ZSBhcmUgYWxsb3dlZCB0byB0aGlzIGNvbnRyb2wuCisgICAgICBXaGVuIHRoZSBhY2Nlc3MgZmxhZyBpcyBvbWl0dGVkIChpLmUuID0gMCksIGl0IGlzCisgICAgICByZWdhcmRlZCBhcyA8Y29uc3RhbnQ+UkVBRFdSSVRFPC9jb25zdGFudD4gYWNjZXNzIGFzIGRlZmF1bHQuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFdoZW4gdGhlIGNvbnRyb2wgaXMgcmVhZC1vbmx5LCBwYXNzCisgICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQ8L2NvbnN0YW50PiBpbnN0ZWFkLgorICAgICAgSW4gdGhpcyBjYXNlLCB5b3UgZG9uJ3QgaGF2ZSB0byBkZWZpbmUKKyAgICAgIDxzdHJ1Y3RmaWVsZD5wdXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KKyAgICAgIFNpbWlsYXJseSwgd2hlbiB0aGUgY29udHJvbCBpcyB3cml0ZS1vbmx5IChhbHRob3VnaCBpdCdzIGEgcmFyZQorICAgICAgY2FzZSksIHlvdSBjYW4gdXNlIDxjb25zdGFudD5XUklURTwvY29uc3RhbnQ+IGZsYWcgaW5zdGVhZCwgYW5kCisgICAgICB5b3UgZG9uJ3QgbmVlZCA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2suCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgSWYgdGhlIGNvbnRyb2wgdmFsdWUgY2hhbmdlcyBmcmVxdWVudGx5IChlLmcuIHRoZSBWVSBtZXRlciksCisgICAgICA8Y29uc3RhbnQ+Vk9MQVRJTEU8L2NvbnN0YW50PiBmbGFnIHNob3VsZCBiZSBnaXZlbi4gIFRoaXMgbWVhbnMKKyAgICAgIHRoYXQgdGhlIGNvbnRyb2wgbWF5IGJlIGNoYW5nZWQgd2l0aG91dAorICAgICAgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtY2hhbmdlLW5vdGlmaWNhdGlvbiI+PGNpdGV0aXRsZT4KKyAgICAgIG5vdGlmaWNhdGlvbjwvY2l0ZXRpdGxlPjwvbGluaz4uICBBcHBsaWNhdGlvbnMgc2hvdWxkIHBvbGwgc3VjaAorICAgICAgYSBjb250cm9sIGNvbnN0YW50bHkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgV2hlbiB0aGUgY29udHJvbCBpcyBpbmFjdGl2ZSwgc2V0CisgICAgICA8Y29uc3RhbnQ+SU5BQ1RJVkU8L2NvbnN0YW50PiBmbGFnLCB0b28uCisgICAgICBUaGVyZSBhcmUgPGNvbnN0YW50PkxPQ0s8L2NvbnN0YW50PiBhbmQKKyAgICAgIDxjb25zdGFudD5PV05FUjwvY29uc3RhbnQ+IGZsYWdzIGZvciBjaGFuZ2luZyB0aGUgd3JpdGUKKyAgICAgIHBlcm1pc3Npb25zLgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcyI+CisgICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcy1pbmZvIj4KKyAgICAgICAgPHRpdGxlPmluZm8gY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIHRvIGdldAorICAgICAgICB0aGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb2YgdGhpcyBjb250cm9sLiBUaGlzIG11c3Qgc3RvcmUgdGhlCisgICAgICAgIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gPHR5cGU+c25kX2N0bF9lbGVtX2luZm9fdDwvdHlwZT4KKyAgICAgICAgb2JqZWN0LiBGb3IgZXhhbXBsZSwgZm9yIGEgYm9vbGVhbiBjb250cm9sIHdpdGggYSBzaW5nbGUKKyAgICAgICAgZWxlbWVudCB3aWxsIGJlOiAKKworICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBpbmZvIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWN0bF9pbmZvKHNuZF9rY29udHJvbF90ICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2N0bF9lbGVtX2luZm9fdCAqdWluZm8pCisgIHsKKyAgICAgICAgICB1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKyAgICAgICAgICB1aW5mby0+Y291bnQgPSAxOworICAgICAgICAgIHVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisgICAgICAgICAgdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHNwZWNpZmllcyB0aGUgdHlwZQorICAgICAgICBvZiB0aGUgY29udHJvbC4gVGhlcmUgYXJlIDxjb25zdGFudD5CT09MRUFOPC9jb25zdGFudD4sCisgICAgICAgIDxjb25zdGFudD5JTlRFR0VSPC9jb25zdGFudD4sIDxjb25zdGFudD5FTlVNRVJBVEVEPC9jb25zdGFudD4sCisgICAgICAgIDxjb25zdGFudD5CWVRFUzwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+SUVDOTU4PC9jb25zdGFudD4gYW5kCisgICAgICAgIDxjb25zdGFudD5JTlRFR0VSNjQ8L2NvbnN0YW50Pi4gVGhlCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IGZpZWxkIHNwZWNpZmllcyB0aGUgCisgICAgICAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGlzIGNvbnRyb2wuIEZvciBleGFtcGxlLCBhIHN0ZXJlbworICAgICAgICB2b2x1bWUgd291bGQgaGF2ZSBjb3VudCA9IDIuIFRoZQorICAgICAgICA8c3RydWN0ZmllbGQ+dmFsdWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBhIHVuaW9uLCBhbmQgCisgICAgICAgIHRoZSB2YWx1ZXMgc3RvcmVkIGFyZSBkZXBlbmRpbmcgb24gdGhlIHR5cGUuIFRoZSBib29sZWFuIGFuZAorICAgICAgICBpbnRlZ2VyIGFyZSBpZGVudGljYWwuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGVudW1lcmF0ZWQgdHlwZSBpcyBhIGJpdCBkaWZmZXJlbnQgZnJvbSBvdGhlcnMuICBZb3UnbGwKKyAgICAgICAgICBuZWVkIHRvIHNldCB0aGUgc3RyaW5nIGZvciB0aGUgY3VycmVudGx5IGdpdmVuIGl0ZW0gaW5kZXguIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWN0bF9pbmZvKHNuZF9rY29udHJvbF90ICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2N0bF9lbGVtX2luZm9fdCAqdWluZm8pCisgIHsKKyAgICAgICAgICBzdGF0aWMgY2hhciAqdGV4dHNbNF0gPSB7CisgICAgICAgICAgICAgICAgICAiRmlyc3QiLCAiU2Vjb25kIiwgIlRoaXJkIiwgIkZvdXJ0aCIKKyAgICAgICAgICB9OworICAgICAgICAgIHVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworICAgICAgICAgIHVpbmZvLT5jb3VudCA9IDE7CisgICAgICAgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA0OworICAgICAgICAgIGlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID4gMykKKyAgICAgICAgICAgICAgICAgIHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSAzOworICAgICAgICAgIHN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLAorICAgICAgICAgICAgICAgICB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWdldCI+CisgICAgICAgIDx0aXRsZT5nZXQgY2FsbGJhY2s8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCB0byByZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQorICAgICAgICBjb250cm9sIGFuZCB0byByZXR1cm4gdG8gdGhlIHVzZXItc3BhY2UuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRm9yIGV4YW1wbGUsCisKKyAgICAgICAgICA8ZXhhbXBsZT4KKwkgICAgPHRpdGxlPkV4YW1wbGUgb2YgZ2V0IGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWN0bF9nZXQoc25kX2tjb250cm9sX3QgKmtjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKnVjb250cm9sKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisgICAgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBnZXRfc29tZV92YWx1ZShjaGlwKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEhlcmUsIHRoZSBjaGlwIGluc3RhbmNlIGlzIHJldHJpZXZlZCB2aWEKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9rY29udHJvbF9jaGlwKCk8L2Z1bmN0aW9uPiBtYWNyby4gIFRoaXMgbWFjcm8KKyAgICAgICAgY29udmVydHMgZnJvbSBrY29udHJvbC0mZ3Q7cHJpdmF0ZV9kYXRhIHRvIHRoZSB0eXBlIGRlZmluZWQgYnkKKyAgICAgICAgPHR5cGU+Y2hpcF90PC90eXBlPi4gVGhlCisgICAgICAgIGtjb250cm9sLSZndDtwcml2YXRlX2RhdGEgZmllbGQgaXMgCisgICAgICAgIGdpdmVuIGFzIHRoZSBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+c25kX2N0bF9uZXcoKTwvZnVuY3Rpb24+CisgICAgICAgIChzZWUgdGhlIGxhdGVyIHN1YnNlY3Rpb24KKyAgICAgICAgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtY29uc3RydWN0b3IiPjxjaXRldGl0bGU+Q29uc3RydWN0b3I8L2NpdGV0aXRsZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCVRoZSA8c3RydWN0ZmllbGQ+dmFsdWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBkZXBlbmRpbmcgb24KKyAgICAgICAgdGhlIHR5cGUgb2YgY29udHJvbCBhcyB3ZWxsIGFzIG9uIGluZm8gY2FsbGJhY2suICBGb3IgZXhhbXBsZSwKKwl0aGUgc2IgZHJpdmVyIHVzZXMgdGhpcyBmaWVsZCB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LAorICAgICAgICB0aGUgYml0LXNoaWZ0IGFuZCB0aGUgYml0LW1hc2suICBUaGUKKyAgICAgICAgPHN0cnVjdGZpZWxkPnByaXZhdGVfdmFsdWU8L3N0cnVjdGZpZWxkPiBpcyBzZXQgbGlrZQorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgLnByaXZhdGVfdmFsdWUgPSByZWcgfCAoc2hpZnQgPDwgMTYpIHwgKG1hc2sgPDwgMjQpCitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisJYW5kIGlzIHJldHJpZXZlZCBpbiBjYWxsYmFja3MgbGlrZQorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfc2JtaXhlcl9nZXRfc2luZ2xlKHNuZF9rY29udHJvbF90ICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9jdGxfZWxlbV92YWx1ZV90ICp1Y29udHJvbCkKKyAgeworICAgICAgICAgIGludCByZWcgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisgICAgICAgICAgaW50IHNoaWZ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisgICAgICAgICAgaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMjQpICYgMHhmZjsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJbiA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2ssIHlvdSBoYXZlIHRvIGZpbGwgYWxsIHRoZSBlbGVtZW50cyBpZiB0aGUKKyAgICAgICAgY29udHJvbCBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50cywKKyAgICAgICAgaS5lLiA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiAmZ3Q7IDEuCisJSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHdlIGZpbGxlZCBvbmx5IG9uZSBlbGVtZW50CisgICAgICAgICg8c3RydWN0ZmllbGQ+dmFsdWUuaW50ZWdlci52YWx1ZVswXTwvc3RydWN0ZmllbGQ+KSBzaW5jZSBpdCdzCisgICAgICAgIGFzc3VtZWQgYXMgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gPSAxLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jYWxsYmFja3MtcHV0Ij4KKyAgICAgICAgPHRpdGxlPnB1dCBjYWxsYmFjazwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyB1c2VkIHRvIHdyaXRlIGEgdmFsdWUgZnJvbSB0aGUgdXNlci1zcGFjZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEZvciBleGFtcGxlLAorCisgICAgICAgICAgPGV4YW1wbGU+CisJICAgIDx0aXRsZT5FeGFtcGxlIG9mIHB1dCBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfbXljdGxfcHV0KHNuZF9rY29udHJvbF90ICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9jdGxfZWxlbV92YWx1ZV90ICp1Y29udHJvbCkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworICAgICAgICAgIGludCBjaGFuZ2VkID0gMDsKKyAgICAgICAgICBpZiAoY2hpcC0+Y3VycmVudF92YWx1ZSAhPQorICAgICAgICAgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pIHsKKyAgICAgICAgICAgICAgICAgIGNoYW5nZV9jdXJyZW50X3ZhbHVlKGNoaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2V4YW1wbGU+CisKKyAgICAgICAgICBBcyBzZWVuIGFib3ZlLCB5b3UgaGF2ZSB0byByZXR1cm4gMSBpZiB0aGUgdmFsdWUgaXMKKyAgICAgICAgY2hhbmdlZC4gSWYgdGhlIHZhbHVlIGlzIG5vdCBjaGFuZ2VkLCByZXR1cm4gMCBpbnN0ZWFkLiAKKwlJZiBhbnkgZmF0YWwgZXJyb3IgaGFwcGVucywgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBhcworICAgICAgICB1c3VhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCUxpa2UgPHN0cnVjdGZpZWxkPmdldDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLAorCXdoZW4gdGhlIGNvbnRyb2wgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudHMsCisJYWxsIGVsZW1laHRzIG11c3QgYmUgZXZhbHVhdGVkIGluIHRoaXMgY2FsbGJhY2ssIHRvby4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWFsbCI+CisgICAgICAgIDx0aXRsZT5DYWxsYmFja3MgYXJlIG5vdCBhdG9taWM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbGwgdGhlc2UgdGhyZWUgY2FsbGJhY2tzIGFyZSBiYXNpY2FsbHkgbm90IGF0b21pYy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gZXZlcnl0aGluZyBpcyByZWFkeSwgZmluYWxseSB3ZSBjYW4gY3JlYXRlIGEgbmV3CisgICAgICBjb250cm9sLiBGb3IgY3JlYXRpbmcgYSBjb250cm9sLCB0aGVyZSBhcmUgdHdvIGZ1bmN0aW9ucyB0byBiZQorICAgICAgY2FsbGVkLCA8ZnVuY3Rpb24+c25kX2N0bF9uZXcxKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5zbmRfY3RsX2FkZCgpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIHNpbXBsZXN0IHdheSwgeW91IGNhbiBkbyBsaWtlIHRoaXM6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJm15X2NvbnRyb2wsIGNoaXApKSkgPCAwKQorICAgICAgICAgIHJldHVybiBlcnI7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPm15X2NvbnRyb2w8L3BhcmFtZXRlcj4gaXMgdGhlCisgICAgICA8dHlwZT5zbmRfa2NvbnRyb2xfbmV3X3Q8L3R5cGU+IG9iamVjdCBkZWZpbmVkIGFib3ZlLCBhbmQgY2hpcAorICAgICAgaXMgdGhlIG9iamVjdCBwb2ludGVyIHRvIGJlIHBhc3NlZCB0bworICAgICAga2NvbnRyb2wtJmd0O3ByaXZhdGVfZGF0YSAKKyAgICAgIHdoaWNoIGNhbiBiZSByZWZlcnJlZCBpbiBjYWxsYmFja3MuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9jdGxfbmV3MSgpPC9mdW5jdGlvbj4gYWxsb2NhdGVzIGEgbmV3CisgICAgICA8dHlwZT5zbmRfa2NvbnRyb2xfdDwvdHlwZT4gaW5zdGFuY2UgKHRoYXQncyB3aHkgdGhlIGRlZmluaXRpb24KKyAgICAgIG9mIDxwYXJhbWV0ZXI+bXlfY29udHJvbDwvcGFyYW1ldGVyPiBjYW4gYmUgd2l0aAorICAgICAgPHBhcmFtZXRlcj5fX2RldmluaXRkYXRhPC9wYXJhbWV0ZXI+IAorICAgICAgcHJlZml4KSwgYW5kIDxmdW5jdGlvbj5zbmRfY3RsX2FkZDwvZnVuY3Rpb24+IGFzc2lnbnMgdGhlIGdpdmVuCisgICAgICBjb250cm9sIGNvbXBvbmVudCB0byB0aGUgY2FyZC4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNoYW5nZS1ub3RpZmljYXRpb24iPgorICAgICAgPHRpdGxlPkNoYW5nZSBOb3RpZmljYXRpb248L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBuZWVkIHRvIGNoYW5nZSBhbmQgdXBkYXRlIGEgY29udHJvbCBpbiB0aGUgaW50ZXJydXB0CisgICAgICByb3V0aW5lLCB5b3UgY2FuIGNhbGwgPGZ1bmN0aW9uPnNuZF9jdGxfbm90aWZ5KCk8L2Z1bmN0aW9uPi4gRm9yCisgICAgICBleGFtcGxlLCAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfY3RsX25vdGlmeShjYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwgaWRfcG9pbnRlcik7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBldmVudC1tYXNrLCBhbmQgdGhlCisgICAgICBjb250cm9sIGlkIHBvaW50ZXIgZm9yIHRoZSBub3RpZmljYXRpb24uIFRoZSBldmVudC1tYXNrCisgICAgICBzcGVjaWZpZXMgdGhlIHR5cGVzIG9mIG5vdGlmaWNhdGlvbiwgZm9yIGV4YW1wbGUsIGluIHRoZSBhYm92ZQorICAgICAgZXhhbXBsZSwgdGhlIGNoYW5nZSBvZiBjb250cm9sIHZhbHVlcyBpcyBub3RpZmllZC4KKyAgICAgIFRoZSBpZCBwb2ludGVyIGlzIHRoZSBwb2ludGVyIG9mIDx0eXBlPnNuZF9jdGxfZWxlbV9pZF90PC90eXBlPgorICAgICAgdG8gYmUgbm90aWZpZWQuCisgICAgICBZb3UgY2FuIGZpbmQgc29tZSBleGFtcGxlcyBpbiA8ZmlsZW5hbWU+ZXMxOTM4LmM8L2ZpbGVuYW1lPiBvcgorICAgICAgPGZpbGVuYW1lPmVzMTk2OC5jPC9maWxlbmFtZT4gZm9yIGhhcmR3YXJlIHZvbHVtZSBpbnRlcnJ1cHRzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBBUEkgZm9yIEFDOTcgQ29kZWMgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJhcGktYWM5NyI+CisgICAgPHRpdGxlPkFQSSBmb3IgQUM5NyBDb2RlYzwvdGl0bGU+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgQUxTQSBBQzk3IGNvZGVjIGxheWVyIGlzIGEgd2VsbC1kZWZpbmVkIG9uZSwgYW5kIHlvdSBkb24ndAorICAgICAgaGF2ZSB0byB3cml0ZSBtYW55IGNvZGVzIHRvIGNvbnRyb2wgaXQuIE9ubHkgbG93LWxldmVsIGNvbnRyb2wKKyAgICAgIHJvdXRpbmVzIGFyZSBuZWNlc3NhcnkuIFRoZSBBQzk3IGNvZGVjIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2FjOTdfY29kZWMuaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWV4YW1wbGUiPgorICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBBQzk3IEludGVyZmFjZTwvdGl0bGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9teWNoaXAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBhYzk3X3QgKmFjOTc7CisgICAgICAgICAgLi4uLgorICB9OworCisgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbmRfbXljaGlwX2FjOTdfcmVhZChhYzk3X3QgKmFjOTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcpCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgLy8gcmVhZCBhIHJlZ2lzdGVyIHZhbHVlIGhlcmUgZnJvbSB0aGUgY29kZWMKKyAgICAgICAgICByZXR1cm4gdGhlX3JlZ2lzdGVyX3ZhbHVlOworICB9CisKKyAgc3RhdGljIHZvaWQgc25kX215Y2hpcF9hYzk3X3dyaXRlKGFjOTdfdCAqYWM5NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgLy8gd3JpdGUgdGhlIGdpdmVuIHJlZ2lzdGVyIHZhbHVlIHRvIHRoZSBjb2RlYworICB9CisKKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2FjOTcobXljaGlwX3QgKmNoaXApCisgIHsKKyAgICAgICAgICBhYzk3X2J1c190ICpidXM7CisgICAgICAgICAgYWM5N190ZW1wbGF0ZV90IGFjOTc7CisgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICBzdGF0aWMgYWM5N19idXNfb3BzX3Qgb3BzID0geworICAgICAgICAgICAgICAgICAgLndyaXRlID0gc25kX215Y2hpcF9hYzk3X3dyaXRlLAorICAgICAgICAgICAgICAgICAgLnJlYWQgPSBzbmRfbXljaGlwX2FjOTdfcmVhZCwKKyAgICAgICAgICB9OworCisgICAgICAgICAgaWYgKChlcnIgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgTlVMTCwgJmJ1cykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgbWVtc2V0KCZhYzk3LCAwLCBzaXplb2YoYWM5NykpOworICAgICAgICAgIGFjOTcucHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgICAgICAgICByZXR1cm4gc25kX2FjOTdfbWl4ZXIoYnVzLCAmYWM5NywgJmNoaXAtPmFjOTcpOworICB9CisKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctY29uc3RydWN0b3IiPgorICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgY3JlYXRpbmcgYW4gYWM5NyBpbnN0YW5jZSwgZmlyc3QgY2FsbCA8ZnVuY3Rpb24+c25kX2FjOTdfYnVzPC9mdW5jdGlvbj4KKyAgICAgIHdpdGggYW4gPHR5cGU+YWM5N19idXNfb3BzX3Q8L3R5cGU+IHJlY29yZCB3aXRoIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBhYzk3X2J1c190ICpidXM7CisgIHN0YXRpYyBhYzk3X2J1c19vcHNfdCBvcHMgPSB7CisgICAgICAgIC53cml0ZSA9IHNuZF9teWNoaXBfYWM5N193cml0ZSwKKyAgICAgICAgLnJlYWQgPSBzbmRfbXljaGlwX2FjOTdfcmVhZCwKKyAgfTsKKworICBzbmRfYWM5N19idXMoY2FyZCwgMCwgJm9wcywgTlVMTCwgJnBidXMpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgIFRoZSBidXMgcmVjb3JkIGlzIHNoYXJlZCBhbW9uZyBhbGwgYmVsb25naW5nIGFjOTcgaW5zdGFuY2VzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEFuZCB0aGVuIGNhbGwgPGZ1bmN0aW9uPnNuZF9hYzk3X21peGVyKCk8L2Z1bmN0aW9uPiB3aXRoIGFuIDx0eXBlPmFjOTdfdGVtcGxhdGVfdDwvdHlwZT4KKyAgICAgIHJlY29yZCB0b2dldGhlciB3aXRoIHRoZSBidXMgcG9pbnRlciBjcmVhdGVkIGFib3ZlLgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGFjOTdfdGVtcGxhdGVfdCBhYzk3OworICBpbnQgZXJyOworCisgIG1lbXNldCgmYWM5NywgMCwgc2l6ZW9mKGFjOTcpKTsKKyAgYWM5Ny5wcml2YXRlX2RhdGEgPSBjaGlwOworICBzbmRfYWM5N19taXhlcihidXMsICZhYzk3LCAmY2hpcC0+YWM5Nyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSBjaGlwLSZndDthYzk3IGlzIHRoZSBwb2ludGVyIG9mIGEgbmV3bHkgY3JlYXRlZAorICAgICAgICA8dHlwZT5hYzk3X3Q8L3R5cGU+IGluc3RhbmNlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBjaGlwIHBvaW50ZXIgaXMgc2V0IGFzIHRoZSBwcml2YXRlIGRhdGEsIHNvIHRoYXQKKyAgICAgICAgdGhlIHJlYWQvd3JpdGUgY2FsbGJhY2sgZnVuY3Rpb25zIGNhbiByZWZlciB0byB0aGlzIGNoaXAgaW5zdGFuY2UuCisgICAgICAgIFRoaXMgaW5zdGFuY2UgaXMgbm90IG5lY2Vzc2FyaWx5IHN0b3JlZCBpbiB0aGUgY2hpcAorCXJlY29yZC4gIFdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHRoZSByZWdpc3RlciB2YWx1ZXMgZnJvbSB0aGUKKyAgICAgICAgZHJpdmVyLCBvciBuZWVkIHRoZSBzdXNwZW5kL3Jlc3VtZSBvZiBhYzk3IGNvZGVjcywga2VlcCB0aGlzCisgICAgICAgIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMuCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWNhbGxiYWNrcyI+CisgICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgc3RhbmRhcmQgY2FsbGJhY2tzIGFyZSA8c3RydWN0ZmllbGQ+cmVhZDwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPndyaXRlPC9zdHJ1Y3RmaWVsZD4uIE9idmlvdXNseSB0aGV5IAorICAgICAgY29ycmVzcG9uZCB0byB0aGUgZnVuY3Rpb25zIGZvciByZWFkIGFuZCB3cml0ZSBhY2Nlc3NlcyB0byB0aGUKKyAgICAgIGhhcmR3YXJlIGxvdy1sZXZlbCBjb2Rlcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnJlYWQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayByZXR1cm5zIHRoZQorICAgICAgICByZWdpc3RlciB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIGFyZ3VtZW50LiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc25kX215Y2hpcF9hYzk3X3JlYWQoYWM5N190ICphYzk3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHJldHVybiB0aGVfcmVnaXN0ZXJfdmFsdWU7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIEhlcmUsIHRoZSBjaGlwIGNhbiBiZSBjYXN0IGZyb20gYWM5Ny0mZ3Q7cHJpdmF0ZV9kYXRhLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTWVhbndoaWxlLCB0aGUgPHN0cnVjdGZpZWxkPndyaXRlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMKKyAgICAgICAgdXNlZCB0byBzZXQgdGhlIHJlZ2lzdGVyIHZhbHVlLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBzbmRfbXljaGlwX2FjOTdfd3JpdGUoYWM5N190ICphYzk3LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZXNlIGNhbGxiYWNrcyBhcmUgbm9uLWF0b21pYyBsaWtlIHRoZSBjYWxsYmFja3Mgb2YgY29udHJvbCBBUEkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgYWxzbyBvdGhlciBjYWxsYmFja3M6CisgICAgICA8c3RydWN0ZmllbGQ+cmVzZXQ8L3N0cnVjdGZpZWxkPiwKKyAgICAgIDxzdHJ1Y3RmaWVsZD53YWl0PC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICA8c3RydWN0ZmllbGQ+aW5pdDwvc3RydWN0ZmllbGQ+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cmVzZXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIHRvIHJlc2V0CisgICAgICB0aGUgY29kZWMuIElmIHRoZSBjaGlwIHJlcXVpcmVzIGEgc3BlY2lhbCB3YXkgb2YgcmVzZXQsIHlvdSBjYW4KKyAgICAgIGRlZmluZSB0aGlzIGNhbGxiYWNrLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+d2FpdDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgZm9yIGEKKyAgICAgIGNlcnRhaW4gd2FpdCBhdCB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvZGVjLiBJZiB0aGUKKyAgICAgIGNoaXAgcmVxdWlyZXMgdGhlIGV4dHJhIHdhaXQtdGltZSwgZGVmaW5lIHRoaXMgY2FsbGJhY2suIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pbml0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMgdXNlZCBmb3IKKyAgICAgIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvZGVjLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny11cGRhdGluZy1yZWdpc3RlcnMiPgorICAgICAgPHRpdGxlPlVwZGF0aW5nIFJlZ2lzdGVycyBpbiBUaGUgRHJpdmVyPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdG8gdGhlIGNvZGVjIGZyb20gdGhlIGRyaXZlciwgeW91IGNhbgorICAgICAgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N193cml0ZSgpPC9mdW5jdGlvbj4sCisgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfcmVhZCgpPC9mdW5jdGlvbj4sCisgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGVfYml0cygpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQm90aCA8ZnVuY3Rpb24+c25kX2FjOTdfd3JpdGUoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgYXJlIHVzZWQgdG8KKyAgICAgICAgc2V0IGEgdmFsdWUgdG8gdGhlIGdpdmVuIHJlZ2lzdGVyCisgICAgICAgICg8Y29uc3RhbnQ+QUM5N19YWFg8L2NvbnN0YW50PikuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpcworICAgICAgICB0aGF0IDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGUoKTwvZnVuY3Rpb24+IGRvZXNuJ3Qgd3JpdGUgYQorICAgICAgICB2YWx1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaGFzIGJlZW4gYWxyZWFkeSBzZXQsIHdoaWxlCisgICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N193cml0ZSgpPC9mdW5jdGlvbj4gYWx3YXlzIHJld3JpdGVzIHRoZQorICAgICAgICB2YWx1ZS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2FjOTdfd3JpdGUoYWM5NywgQUM5N19NQVNURVIsIDB4ODA4MCk7CisgIHNuZF9hYzk3X3VwZGF0ZShhYzk3LCBBQzk3X01BU1RFUiwgMHg4MDgwKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3JlYWQoKTwvZnVuY3Rpb24+IGlzIHVzZWQgdG8gcmVhZCB0aGUgdmFsdWUKKyAgICAgICAgb2YgdGhlIGdpdmVuIHJlZ2lzdGVyLiBGb3IgZXhhbXBsZSwgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgdmFsdWUgPSBzbmRfYWM5N19yZWFkKGFjOTcsIEFDOTdfTUFTVEVSKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3VwZGF0ZV9iaXRzKCk8L2Z1bmN0aW9uPiBpcyB1c2VkIHRvIHVwZGF0ZQorICAgICAgICBzb21lIGJpdHMgb2YgdGhlIGdpdmVuIHJlZ2lzdGVyLiAgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2FjOTdfdXBkYXRlX2JpdHMoYWM5NywgcmVnLCBtYXNrLCB2YWx1ZSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFsc28sIHRoZXJlIGlzIGEgZnVuY3Rpb24gdG8gY2hhbmdlIHRoZSBzYW1wbGUgcmF0ZSAob2YgYQorICAgICAgICBjZXJ0YWluIHJlZ2lzdGVyIHN1Y2ggYXMKKyAgICAgICAgPGNvbnN0YW50PkFDOTdfUENNX0ZST05UX0RBQ19SQVRFPC9jb25zdGFudD4pIHdoZW4gVlJBIG9yCisgICAgICAgIERSQSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNvZGVjOgorICAgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfc2V0X3JhdGUoKTwvZnVuY3Rpb24+LiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfYWM5N19zZXRfcmF0ZShhYzk3LCBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURSwgNDQxMDApOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGZvciBzZXR0aW5nIHRoZSByYXRlOgorICAgICAgPGNvbnN0YW50PkFDOTdfUENNX01JQ19BRENfUkFURTwvY29uc3RhbnQ+LAorICAgICAgPGNvbnN0YW50PkFDOTdfUENNX0ZST05UX0RBQ19SQVRFPC9jb25zdGFudD4sCisgICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fTFJfQURDX1JBVEU8L2NvbnN0YW50PiwKKyAgICAgIDxjb25zdGFudD5BQzk3X1NQRElGPC9jb25zdGFudD4uIFdoZW4gdGhlCisgICAgICA8Y29uc3RhbnQ+QUM5N19TUERJRjwvY29uc3RhbnQ+IGlzIHNwZWNpZmllZCwgdGhlIHJlZ2lzdGVyIGlzCisgICAgICBub3QgcmVhbGx5IGNoYW5nZWQgYnV0IHRoZSBjb3JyZXNwb25kaW5nIElFQzk1OCBzdGF0dXMgYml0cyB3aWxsCisgICAgICBiZSB1cGRhdGVkLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctY2xvY2stYWRqdXN0bWVudCI+CisgICAgICA8dGl0bGU+Q2xvY2sgQWRqdXN0bWVudDwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgT24gc29tZSBjaGlwLCB0aGUgY2xvY2sgb2YgdGhlIGNvZGVjIGlzbid0IDQ4MDAwIGJ1dCB1c2luZyBhCisgICAgICBQQ0kgY2xvY2sgKHRvIHNhdmUgYSBxdWFydHohKS4gSW4gdGhpcyBjYXNlLCBjaGFuZ2UgdGhlIGZpZWxkCisgICAgICBidXMtJmd0O2Nsb2NrIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICB2YWx1ZS4gRm9yIGV4YW1wbGUsIGludGVsOHgwIAorICAgICAgYW5kIGVzMTk2OCBkcml2ZXJzIGhhdmUgdGhlIGF1dG8tbWVhc3VyZW1lbnQgZnVuY3Rpb24gb2YgdGhlCisgICAgICBjbG9jay4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LXByb2MtZmlsZXMiPgorICAgICAgPHRpdGxlPlByb2MgRmlsZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBBTFNBIEFDOTcgaW50ZXJmYWNlIHdpbGwgY3JlYXRlIGEgcHJvYyBmaWxlIHN1Y2ggYXMKKyAgICAgIDxmaWxlbmFtZT4vcHJvYy9hc291bmQvY2FyZDAvY29kZWM5NyMwL2FjOTcjMC0wPC9maWxlbmFtZT4gYW5kCisgICAgICA8ZmlsZW5hbWU+YWM5NyMwLTArcmVnczwvZmlsZW5hbWU+LiBZb3UgY2FuIHJlZmVyIHRvIHRoZXNlIGZpbGVzIHRvCisgICAgICBzZWUgdGhlIGN1cnJlbnQgc3RhdHVzIGFuZCByZWdpc3RlcnMgb2YgdGhlIGNvZGVjLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctbXVsdGlwbGUtY29kZWNzIj4KKyAgICAgIDx0aXRsZT5NdWx0aXBsZSBDb2RlY3M8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlcmUgYXJlIHNldmVyYWwgY29kZWNzIG9uIHRoZSBzYW1lIGNhcmQsIHlvdSBuZWVkIHRvCisgICAgICBjYWxsIDxmdW5jdGlvbj5zbmRfYWM5N19uZXcoKTwvZnVuY3Rpb24+IG11bHRpcGxlIHRpbWVzIHdpdGgKKyAgICAgIGFjOTcubnVtPTEgb3IgZ3JlYXRlci4gVGhlIDxzdHJ1Y3RmaWVsZD5udW08L3N0cnVjdGZpZWxkPiBmaWVsZAorICAgICAgc3BlY2lmaWVzIHRoZSBjb2RlYyAKKyAgICAgIG51bWJlci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgaGF2ZSBzZXQgdXAgbXVsdGlwbGUgY29kZWNzLCB5b3UgbmVlZCB0byBlaXRoZXIgd3JpdGUKKyAgICAgIGRpZmZlcmVudCBjYWxsYmFja3MgZm9yIGVhY2ggY29kZWMgb3IgY2hlY2sKKyAgICAgIGFjOTctJmd0O251bSBpbiB0aGUgCisgICAgICBjYWxsYmFjayByb3V0aW5lcy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gTUlESSAoTVBVNDAxLVVBUlQpIEludGVyZmFjZSAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9Im1pZGktaW50ZXJmYWNlIj4KKyAgICA8dGl0bGU+TUlESSAoTVBVNDAxLVVBUlQpIEludGVyZmFjZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlkaS1pbnRlcmZhY2UtZ2VuZXJhbCI+CisgICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgTWFueSBzb3VuZGNhcmRzIGhhdmUgYnVpbHQtaW4gTUlESSAoTVBVNDAxLVVBUlQpCisgICAgICBpbnRlcmZhY2VzLiBXaGVuIHRoZSBzb3VuZGNhcmQgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIE1QVTQwMS1VQVJUCisgICAgICBpbnRlcmZhY2UsIG1vc3QgbGlrZWx5IHlvdSBjYW4gdXNlIHRoZSBBTFNBIE1QVTQwMS1VQVJUIEFQSS4gVGhlCisgICAgICBNUFU0MDEtVUFSVCBBUEkgaXMgZGVmaW5lZCBpbgorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9tcHU0MDEuaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBTb21lIHNvdW5kY2hpcHMgaGF2ZSBzaW1pbGFyIGJ1dCBhIGxpdHRsZSBiaXQgZGlmZmVyZW50CisgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBtcHU0MDEgc3R1ZmYuIEZvciBleGFtcGxlLCBlbXUxMGsxIGhhcyBpdHMgb3duCisgICAgICBtcHU0MDEgcm91dGluZXMuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJtaWRpLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEZvciBjcmVhdGluZyBhIHJhd21pZGkgb2JqZWN0LCBjYWxsCisgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9yYXdtaWRpX3QgKnJtaWRpOworICBzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsIHBvcnQsIGludGVncmF0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgaXJxLCBpcnFfZmxhZ3MsICZybWlkaSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FyZCBwb2ludGVyLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUKKyAgICAgIGluZGV4IG9mIHRoaXMgY29tcG9uZW50LiBZb3UgY2FuIGNyZWF0ZSB1cCB0byA4IHJhd21pZGkKKyAgICAgIGRldmljZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSB0eXBlIG9mIHRoZSBoYXJkd2FyZSwKKyAgICAgIDxjb25zdGFudD5NUFU0MDFfSFdfWFhYPC9jb25zdGFudD4uIElmIGl0J3Mgbm90IGEgc3BlY2lhbCBvbmUsCisgICAgICB5b3UgY2FuIHVzZSA8Y29uc3RhbnQ+TVBVNDAxX0hXX01QVTQwMTwvY29uc3RhbnQ+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA0dGggYXJndW1lbnQgaXMgdGhlIGkvbyBwb3J0IGFkZHJlc3MuIE1hbnkKKyAgICAgIGJhY2t3YXJkLWNvbXBhdGlibGUgTVBVNDAxIGhhcyBhbiBpL28gcG9ydCBzdWNoIGFzIDB4MzMwLiBPciwgaXQKKyAgICAgIG1pZ2h0IGJlIGEgcGFydCBvZiBpdHMgb3duIFBDSSBpL28gcmVnaW9uLiBJdCBkZXBlbmRzIG9uIHRoZQorICAgICAgY2hpcCBkZXNpZ24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgaS9vIHBvcnQgYWRkcmVzcyBhYm92ZSBpcyBhIHBhcnQgb2YgdGhlIFBDSSBpL28KKyAgICAgIHJlZ2lvbiwgdGhlIE1QVTQwMSBpL28gcG9ydCBtaWdodCBoYXZlIGJlZW4gYWxyZWFkeSBhbGxvY2F0ZWQKKyAgICAgIChyZXNlcnZlZCkgYnkgdGhlIGRyaXZlciBpdHNlbGYuIEluIHN1Y2ggYSBjYXNlLCBwYXNzIG5vbi16ZXJvCisgICAgICB0byB0aGUgNXRoIGFyZ3VtZW50CisgICAgICAoPHBhcmFtZXRlcj5pbnRlZ3JhdGVkPC9wYXJhbWV0ZXI+KS4gT3RoZXJ3aXNlLCBwYXNzIDAgdG8gaXQsCisgICAgICBhbmQgCisgICAgICB0aGUgbXB1NDAxLXVhcnQgbGF5ZXIgd2lsbCBhbGxvY2F0ZSB0aGUgaS9vIHBvcnRzIGJ5IGl0c2VsZi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBVc3VhbGx5LCB0aGUgcG9ydCBhZGRyZXNzIGNvcnJlc3BvbmRzIHRvIHRoZSBjb21tYW5kIHBvcnQgYW5kCisgICAgICAgIHBvcnQgKyAxIGNvcnJlc3BvbmRzIHRvIHRoZSBkYXRhIHBvcnQuIElmIG5vdCwgeW91IG1heSBjaGFuZ2UKKyAgICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5jcG9ydDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mCisgICAgICAgIDx0eXBlPm1wdTQwMV90PC90eXBlPiBtYW51YWxseSAKKyAgICAgICAgYWZ0ZXJ3YXJkLiBIb3dldmVyLCA8dHlwZT5tcHU0MDFfdDwvdHlwZT4gcG9pbnRlciBpcyBub3QKKyAgICAgICAgcmV0dXJuZWQgZXhwbGljaXRseSBieQorICAgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4uIFlvdSBuZWVkIHRvIGNhc3QKKyAgICAgICAgcm1pZGktJmd0O3ByaXZhdGVfZGF0YSB0bworICAgICAgICA8dHlwZT5tcHU0MDFfdDwvdHlwZT4gZXhwbGljaXRseSwgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXB1NDAxX3QgKm1wdTsKKyAgbXB1ID0gcm1pZGktPnByaXZhdGVfZGF0YTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIGFuZCByZXNldCB0aGUgY3BvcnQgYXMgeW91IGxpa2U6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXB1LT5jcG9ydCA9IG15X293bl9jb250cm9sX3BvcnQ7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA2dGggYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBpcnEgbnVtYmVyIGZvciBVQVJULiBJZiB0aGUgaXJxCisgICAgICBpcyBhbHJlYWR5IGFsbG9jYXRlZCwgcGFzcyAwIHRvIHRoZSA3dGggYXJndW1lbnQKKyAgICAgICg8cGFyYW1ldGVyPmlycV9mbGFnczwvcGFyYW1ldGVyPikuIE90aGVyd2lzZSwgcGFzcyB0aGUgZmxhZ3MKKyAgICAgIGZvciBpcnEgYWxsb2NhdGlvbiAKKyAgICAgICg8Y29uc3RhbnQ+U0FfWFhYPC9jb25zdGFudD4gYml0cykgdG8gaXQsIGFuZCB0aGUgaXJxIHdpbGwgYmUKKyAgICAgIHJlc2VydmVkIGJ5IHRoZSBtcHU0MDEtdWFydCBsYXllci4gSWYgdGhlIGNhcmQgZG9lc24ndCBnZW5lcmF0ZXMKKyAgICAgIFVBUlQgaW50ZXJydXB0cywgcGFzcyAtMSBhcyB0aGUgaXJxIG51bWJlci4gVGhlbiBhIHRpbWVyCisgICAgICBpbnRlcnJ1cHQgd2lsbCBiZSBpbnZva2VkIGZvciBwb2xsaW5nLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlkaS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXIiPgorICAgICAgPHRpdGxlPkludGVycnVwdCBIYW5kbGVyPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHRoZSBpbnRlcnJ1cHQgaXMgYWxsb2NhdGVkIGluCisgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4sIHRoZSBwcml2YXRlCisgICAgICBpbnRlcnJ1cHQgaGFuZGxlciBpcyB1c2VkLCBoZW5jZSB5b3UgZG9uJ3QgaGF2ZSB0byBkbyBub3RoaW5nCisgICAgICBlbHNlIHRoYW4gY3JlYXRpbmcgdGhlIG1wdTQwMSBzdHVmZi4gT3RoZXJ3aXNlLCB5b3UgaGF2ZSB0byBjYWxsCisgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X2ludGVycnVwdCgpPC9mdW5jdGlvbj4gZXhwbGljaXRseSB3aGVuCisgICAgICBhIFVBUlQgaW50ZXJydXB0IGlzIGludm9rZWQgYW5kIGNoZWNrZWQgaW4geW91ciBvd24gaW50ZXJydXB0CisgICAgICBoYW5kbGVyLiAgCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHByaXZhdGVfZGF0YSBvZiB0aGUKKyAgICAgICAgcmV0dXJuZWQgcmF3bWlkaSBvYmplY3QgZnJvbQorICAgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4gYXMgdGhlIHNlY29uZAorICAgICAgICBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X2ludGVycnVwdCgpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9tcHU0MDFfdWFydF9pbnRlcnJ1cHQoaXJxLCBybWlkaS0+cHJpdmF0ZV9kYXRhLCByZWdzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIFJhd01JREkgSW50ZXJmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0icmF3bWlkaS1pbnRlcmZhY2UiPgorICAgIDx0aXRsZT5SYXdNSURJIEludGVyZmFjZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3ZlcnZpZXciPgorICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgcmF3IE1JREkgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIGhhcmR3YXJlIE1JREkgcG9ydHMgdGhhdCBjYW4KKyAgICAgIGJlIGFjY2Vzc2VkIGFzIGEgYnl0ZSBzdHJlYW0uICBJdCBpcyBub3QgdXNlZCBmb3Igc3ludGhlc2l6ZXIKKyAgICAgIGNoaXBzIHRoYXQgZG8gbm90IGRpcmVjdGx5IHVuZGVyc3RhbmQgTUlESS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBTFNBIGhhbmRsZXMgZmlsZSBhbmQgYnVmZmVyIG1hbmFnZW1lbnQuICBBbGwgeW91IGhhdmUgdG8gZG8gaXMKKyAgICAgIHRvIHdyaXRlIHNvbWUgY29kZSB0byBtb3ZlIGRhdGEgYmV0d2VlbiB0aGUgYnVmZmVyIGFuZCB0aGUKKyAgICAgIGhhcmR3YXJlLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSByYXdtaWRpIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3Jhd21pZGkuaCZndDs8L2ZpbGVuYW1lPi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2UtY29uc3RydWN0b3IiPgorICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICBUbyBjcmVhdGUgYSByYXdtaWRpIGRldmljZSwgY2FsbCB0aGUKKyAgICAgIDxmdW5jdGlvbj5zbmRfcmF3bWlkaV9uZXc8L2Z1bmN0aW9uPiBmdW5jdGlvbjoKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3Jhd21pZGlfdCAqcm1pZGk7CisgIGVyciA9IHNuZF9yYXdtaWRpX25ldyhjaGlwLT5jYXJkLCAiTXlNSURJIiwgMCwgb3V0cywgaW5zLCAmcm1pZGkpOworICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICByZXR1cm4gZXJyOworICBybWlkaS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgc3RyY3B5KHJtaWRpLT5uYW1lLCAiTXkgTUlESSIpOworICBybWlkaS0+aW5mb19mbGFncyA9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgfAorICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1JBV01JRElfSU5GT19JTlBVVCB8CisgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCisgICAgICB0aGUgSUQgc3RyaW5nLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgaW5kZXggb2YgdGhpcyBjb21wb25lbnQuICBZb3UgY2FuCisgICAgICBjcmVhdGUgdXAgdG8gOCByYXdtaWRpIGRldmljZXMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIGZvdXJ0aCBhbmQgZmlmdGggYXJndW1lbnRzIGFyZSB0aGUgbnVtYmVyIG9mIG91dHB1dCBhbmQKKyAgICAgIGlucHV0IHN1YnN0cmVhbXMsIHJlc3BlY3RpdmVseSwgb2YgdGhpcyBkZXZpY2UuICAoQSBzdWJzdHJlYW0gaXMKKyAgICAgIHRoZSBlcXVpdmFsZW50IG9mIGEgTUlESSBwb3J0LikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBTZXQgdGhlIDxzdHJ1Y3RmaWVsZD5pbmZvX2ZsYWdzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gc3BlY2lmeQorICAgICAgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV2aWNlLgorICAgICAgU2V0IDxjb25zdGFudD5TTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUPC9jb25zdGFudD4gaWYgdGhlcmUgaXMKKyAgICAgIGF0IGxlYXN0IG9uZSBvdXRwdXQgcG9ydCwKKyAgICAgIDxjb25zdGFudD5TTkRSVl9SQVdNSURJX0lORk9fSU5QVVQ8L2NvbnN0YW50PiBpZiB0aGVyZSBpcyBhdAorICAgICAgbGVhc3Qgb25lIGlucHV0IHBvcnQsCisgICAgICBhbmQgPGNvbnN0YW50PlNORFJWX1JBV01JRElfSU5GT19EVVBMRVg8L2NvbnN0YW50PiBpZiB0aGUgZGV2aWNlCisgICAgICBjYW4gaGFuZGxlIG91dHB1dCBhbmQgaW5wdXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBZnRlciB0aGUgcmF3bWlkaSBkZXZpY2UgaXMgY3JlYXRlZCwgeW91IG5lZWQgdG8gc2V0IHRoZQorICAgICAgb3BlcmF0b3JzIChjYWxsYmFja3MpIGZvciBlYWNoIHN1YnN0cmVhbS4gIFRoZXJlIGFyZSBoZWxwZXIKKyAgICAgIGZ1bmN0aW9ucyB0byBzZXQgdGhlIG9wZXJhdG9ycyBmb3IgYWxsIHN1YnN0cmVhbSBvZiBhIGRldmljZToKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULCAmc25kX215bWlkaV9vdXRwdXRfb3BzKTsKKyAgc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsICZzbmRfbXltaWRpX2lucHV0X29wcyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgb3BlcmF0b3JzIGFyZSB1c3VhbGx5IGRlZmluZWQgbGlrZSB0aGlzOgorICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc25kX3Jhd21pZGlfb3BzX3Qgc25kX215bWlkaV9vdXRwdXRfb3BzID0geworICAgICAgICAgIC5vcGVuID0gICAgc25kX215bWlkaV9vdXRwdXRfb3BlbiwKKyAgICAgICAgICAuY2xvc2UgPSAgIHNuZF9teW1pZGlfb3V0cHV0X2Nsb3NlLAorICAgICAgICAgIC50cmlnZ2VyID0gc25kX215bWlkaV9vdXRwdXRfdHJpZ2dlciwKKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBleHBsYWluZWQgaW4gdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJyYXdtaWRpLWludGVyZmFjZS1jYWxsYmFja3MiPjxjaXRldGl0bGU+Q2FsbGJhY2tzPC9jaXRldGl0bGU+PC9saW5rPgorICAgICAgc2VjdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHN1YnN0cmVhbSwgeW91IHNob3VsZCBnaXZlIGVhY2ggb25lIGEKKyAgICAgIHVuaXF1ZSBuYW1lOgorICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworICBzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworICBsaXN0X2Zvcl9lYWNoKGxpc3QsICZybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbXMpIHsKKyAgICAgICAgICBzdWJzdHJlYW0gPSBsaXN0X2VudHJ5KGxpc3QsIHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90LCBsaXN0KTsKKyAgICAgICAgICBzcHJpbnRmKHN1YnN0cmVhbS0+bmFtZSwgIk15IE1JREkgUG9ydCAlZCIsIHN1YnN0cmVhbS0+bnVtYmVyICsgMSk7CisgIH0KKyAgLyogc2FtZSBmb3IgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQgKi8KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1jYWxsYmFja3MiPgorICAgICAgPHRpdGxlPkNhbGxiYWNrczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgSW4gYWxsIGNhbGxiYWNrcywgdGhlIHByaXZhdGUgZGF0YSB0aGF0IHlvdSd2ZSBzZXQgZm9yIHRoZQorICAgICAgcmF3bWlkaSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkIGFzCisgICAgICBzdWJzdHJlYW0tJmd0O3JtaWRpLSZndDtwcml2YXRlX2RhdGEuCisgICAgICA8IS0tIDxjb2RlPiBpc24ndCBhdmFpbGFibGUgYmVmb3JlIERvY0Jvb2sgNC4zIC0tPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcG9ydCwgeW91ciBjYWxsYmFja3MgY2FuIGRldGVybWluZSB0aGUKKyAgICAgIHBvcnQgaW5kZXggZnJvbSB0aGUgc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgZGF0YSBwYXNzZWQgdG8gZWFjaAorICAgICAgY2FsbGJhY2s6CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW07CisgIGludCBpbmRleCA9IHN1YnN0cmVhbS0+bnVtYmVyOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC1vcGVuIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+b3BlbjwvZnVuY3Rpb24+IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfb3BlbihzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgc3Vic3RyZWFtIGlzIG9wZW5lZC4KKyAgICAgICAgWW91IGNhbiBpbml0aWFsaXplIHRoZSBoYXJkd2FyZSBoZXJlLCBidXQgeW91IHNob3VsZCBub3QgeWV0CisgICAgICAgIHN0YXJ0IHRyYW5zbWl0dGluZy9yZWNlaXZpbmcgZGF0YS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtY2xvc2UiPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5jbG9zZTwvZnVuY3Rpb24+IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgR3Vlc3Mgd2hhdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZ1bmN0aW9uPm9wZW48L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmNsb3NlPC9mdW5jdGlvbj4KKyAgICAgICAgY2FsbGJhY2tzIG9mIGEgcmF3bWlkaSBkZXZpY2UgYXJlIHNlcmlhbGl6ZWQgd2l0aCBhIG11dGV4LAorICAgICAgICBhbmQgY2FuIHNsZWVwLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC10cmlnZ2VyLW91dCI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBmb3Igb3V0cHV0CisgICAgICBzdWJzdHJlYW1zPC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBzbmRfeHh4X291dHB1dF90cmlnZ2VyKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIGludCB1cCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2l0aCBhIG5vbnplcm8gPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPgorICAgICAgICBwYXJhbWV0ZXIgd2hlbiB0aGVyZSBpcyBzb21lIGRhdGEgaW4gdGhlIHN1YnN0cmVhbSBidWZmZXIgdGhhdAorICAgICAgICBtdXN0IGJlIHRyYW5zbWl0dGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRvIHJlYWQgZGF0YSBmcm9tIHRoZSBidWZmZXIsIGNhbGwKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0X3BlZWs8L2Z1bmN0aW9uPi4gIEl0IHdpbGwKKyAgICAgICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZDsgdGhpcyB3aWxsIGJlCisgICAgICAgIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZCB3aGVuIHRoZXJlIGlzIG5vIG1vcmUKKyAgICAgICAgZGF0YSBpbiB0aGUgYnVmZmVyLgorICAgICAgICBBZnRlciB0aGUgZGF0YSBoYXMgYmVlbiB0cmFuc21pdHRlZCBzdWNjZXNzZnVsbHksIGNhbGwKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0X2FjazwvZnVuY3Rpb24+IHRvIHJlbW92ZSB0aGUKKyAgICAgICAgZGF0YSBmcm9tIHRoZSBzdWJzdHJlYW0gYnVmZmVyOgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgdW5zaWduZWQgY2hhciBkYXRhOworICB3aGlsZSAoc25kX3Jhd21pZGlfdHJhbnNtaXRfcGVlayhzdWJzdHJlYW0sICZkYXRhLCAxKSA9PSAxKSB7CisgICAgICAgICAgaWYgKG15Y2hpcF90cnlfdG9fdHJhbnNtaXQoZGF0YSkpCisgICAgICAgICAgICAgICAgICBzbmRfcmF3bWlkaV90cmFuc21pdF9hY2soc3Vic3RyZWFtLCAxKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBicmVhazsgLyogaGFyZHdhcmUgRklGTyBmdWxsICovCisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Uga25vdyBiZWZvcmVoYW5kIHRoYXQgdGhlIGhhcmR3YXJlIHdpbGwgYWNjZXB0IGRhdGEsIHlvdQorICAgICAgICBjYW4gdXNlIHRoZSA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfdHJhbnNtaXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbgorICAgICAgICB3aGljaCByZWFkcyBzb21lIGRhdGEgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgYnVmZmVyIGF0IG9uY2U6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICB3aGlsZSAobXljaGlwX3RyYW5zbWl0X3Bvc3NpYmxlKCkpIHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGE7CisgICAgICAgICAgaWYgKHNuZF9yYXdtaWRpX3RyYW5zbWl0KHN1YnN0cmVhbSwgJmRhdGEsIDEpICE9IDEpCisgICAgICAgICAgICAgICAgICBicmVhazsgLyogbm8gbW9yZSBkYXRhICovCisgICAgICAgICAgbXljaGlwX3RyYW5zbWl0KGRhdGEpOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGtub3cgYmVmb3JlaGFuZCBob3cgbWFueSBieXRlcyB5b3UgY2FuIGFjY2VwdCwgeW91IGNhbgorICAgICAgICB1c2UgYSBidWZmZXIgc2l6ZSBncmVhdGVyIHRoYW4gb25lIHdpdGggdGhlCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcmF3bWlkaV90cmFuc21pdCo8L2Z1bmN0aW9uPiBmdW5jdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgbXVzdCBub3Qgc2xlZXAuICBJZgorICAgICAgICB0aGUgaGFyZHdhcmUgRklGTyBpcyBmdWxsIGJlZm9yZSB0aGUgc3Vic3RyZWFtIGJ1ZmZlciBoYXMgYmVlbgorICAgICAgICBlbXB0aWVkLCB5b3UgaGF2ZSB0byBjb250aW51ZSB0cmFuc21pdHRpbmcgZGF0YSBsYXRlciwgZWl0aGVyCisgICAgICAgIGluIGFuIGludGVycnVwdCBoYW5kbGVyLCBvciB3aXRoIGEgdGltZXIgaWYgdGhlIGhhcmR3YXJlCisgICAgICAgIGRvZXNuJ3QgaGF2ZSBhIE1JREkgdHJhbnNtaXQgaW50ZXJydXB0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIGEKKyAgICAgICAgemVybyA8cGFyYW1ldGVyPnVwPC9wYXJhbWV0ZXI+IHBhcmFtZXRlciB3aGVuIHRoZSB0cmFuc21pc3Npb24KKyAgICAgICAgb2YgZGF0YSBzaG91bGQgYmUgYWJvcnRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtdHJpZ2dlci1pbiI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBmb3IgaW5wdXQKKyAgICAgIHN1YnN0cmVhbXM8L3RpdGxlPgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIHNuZF94eHhfaW5wdXRfdHJpZ2dlcihzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCBpbnQgdXApOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdpdGggYSBub256ZXJvIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4KKyAgICAgICAgcGFyYW1ldGVyIHRvIGVuYWJsZSByZWNlaXZpbmcgZGF0YSwgb3Igd2l0aCBhIHplcm8KKyAgICAgICAgPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIgZG8gZGlzYWJsZSByZWNlaXZpbmcgZGF0YS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBtdXN0IG5vdCBzbGVlcDsgdGhlCisgICAgICAgIGFjdHVhbCByZWFkaW5nIG9mIGRhdGEgZnJvbSB0aGUgZGV2aWNlIGlzIHVzdWFsbHkgZG9uZSBpbiBhbgorICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIGRhdGEgcmVjZXB0aW9uIGlzIGVuYWJsZWQsIHlvdXIgaW50ZXJydXB0IGhhbmRsZXIgc2hvdWxkCisgICAgICAgIGNhbGwgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3JlY2VpdmU8L2Z1bmN0aW9uPiBmb3IgYWxsIHJlY2VpdmVkCisgICAgICAgIGRhdGE6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICB2b2lkIHNuZF9teWNoaXBfbWlkaV9pbnRlcnJ1cHQoLi4uKQorICB7CisgICAgICAgICAgd2hpbGUgKG15Y2hpcF9taWRpX2F2YWlsYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGE7CisgICAgICAgICAgICAgICAgICBkYXRhID0gbXljaGlwX21pZGlfcmVhZCgpOworICAgICAgICAgICAgICAgICAgc25kX3Jhd21pZGlfcmVjZWl2ZShzdWJzdHJlYW0sICZkYXRhLCAxKTsKKyAgICAgICAgICB9CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtZHJhaW4iPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5kcmFpbjwvZnVuY3Rpb24+IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBzbmRfeHh4X2RyYWluKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgb25seSB1c2VkIHdpdGggb3V0cHV0IHN1YnN0cmVhbXMuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCB3YWl0CisgICAgICAgIHVudGlsIGFsbCBkYXRhIHJlYWQgZnJvbSB0aGUgc3Vic3RyZWFtIGJ1ZmZlciBoYXMgYmVlbiB0cmFuc21pdHRlZC4KKyAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRldmljZSBjYW4gYmUgY2xvc2VkIGFuZCB0aGUgZHJpdmVyIHVubG9hZGVkCisgICAgICAgIHdpdGhvdXQgbG9zaW5nIGRhdGEuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4gIElmIHlvdSBkbyBub3Qgc2V0CisgICAgICAgIDxzdHJ1Y3RmaWVsZD5kcmFpbjwvc3RydWN0ZmllbGQ+IGluIHRoZSBzbmRfcmF3bWlkaV9vcHNfdAorICAgICAgICBzdHJ1Y3R1cmUsIEFMU0Egd2lsbCBzaW1wbHkgd2FpdCBmb3IgNTAmbmJzcDttaWxsaXNlY29uZHMKKyAgICAgICAgaW5zdGVhZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIE1pc2NlbGxhbmVvdXMgRGV2aWNlcyAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9Im1pc2MtZGV2aWNlcyI+CisgICAgPHRpdGxlPk1pc2NlbGxhbmVvdXMgRGV2aWNlczwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlzYy1kZXZpY2VzLW9wbDMiPgorICAgICAgPHRpdGxlPkZNIE9QTDM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBGTSBPUEwzIGlzIHN0aWxsIHVzZWQgb24gbWFueSBjaGlwcyAobWFpbmx5IGZvciBiYWNrd2FyZAorICAgICAgY29tcGF0aWJpbGl0eSkuIEFMU0EgaGFzIGEgbmljZSBPUEwzIEZNIGNvbnRyb2wgbGF5ZXIsIHRvby4gVGhlCisgICAgICBPUEwzIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL29wbDMuaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGTSByZWdpc3RlcnMgY2FuIGJlIGRpcmVjdGx5IGFjY2Vzc2VkIHRocm91Z2ggZGlyZWN0LUZNIEFQSSwKKyAgICAgIGRlZmluZWQgaW4gPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmRfZm0uaCZndDs8L2ZpbGVuYW1lPi4gSW4KKyAgICAgIEFMU0EgbmF0aXZlIG1vZGUsIEZNIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaAorICAgICAgSGFyZHdhcmUtRGVwZW5kYW50IERldmljZSBkaXJlY3QtRk0gZXh0ZW5zaW9uIEFQSSwgd2hlcmVhcyBpbgorICAgICAgT1NTIGNvbXBhdGlibGUgbW9kZSwgRk0gcmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIE9TUworICAgICAgZGlyZWN0LUZNIGNvbXBhdGlibGUgQVBJIG9uIDxmaWxlbmFtZT4vZGV2L2RtZm1YPC9maWxlbmFtZT4gZGV2aWNlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBjcmVhdGluZyB0aGUgT1BMMyBjb21wb25lbnQsIHlvdSBoYXZlIHR3byBmdW5jdGlvbnMgdG8KKyAgICAgICAgY2FsbC4gVGhlIGZpcnN0IG9uZSBpcyBhIGNvbnN0cnVjdG9yIGZvciA8dHlwZT5vcGwzX3Q8L3R5cGU+CisgICAgICAgIGluc3RhbmNlLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBvcGwzX3QgKm9wbDM7CisgIHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBscG9ydCwgcnBvcnQsIE9QTDNfSFdfT1BMM19YWFgsCisgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGVkLCAmb3BsMyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUKKyAgICAgIGxlZnQgcG9ydCBhZGRyZXNzLCBhbmQgdGhlIHRoaXJkIGlzIHRoZSByaWdodCBwb3J0IGFkZHJlc3MuIEluCisgICAgICBtb3N0IGNhc2VzLCB0aGUgcmlnaHQgcG9ydCBpcyBwbGFjZWQgYXQgdGhlIGxlZnQgcG9ydCArIDIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvdXJ0aCBhcmd1bWVudCBpcyB0aGUgaGFyZHdhcmUgdHlwZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlIGxlZnQgYW5kIHJpZ2h0IHBvcnRzIGhhdmUgYmVlbiBhbHJlYWR5IGFsbG9jYXRlZCBieQorICAgICAgdGhlIGNhcmQgZHJpdmVyLCBwYXNzIG5vbi16ZXJvIHRvIHRoZSBmaWZ0aCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+aW50ZWdyYXRlZDwvcGFyYW1ldGVyPikuIE90aGVyd2lzZSwgb3BsMyBtb2R1bGUgd2lsbAorICAgICAgYWxsb2NhdGUgdGhlIHNwZWNpZmllZCBwb3J0cyBieSBpdHNlbGYuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgYWNjZXNzaW5nIHRvIHRoZSBoYXJkd2FyZSByZXF1aXJlcyBzcGVjaWFsIG1ldGhvZAorICAgICAgICBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBJL08gYWNjZXNzLCB5b3UgY2FuIGNyZWF0ZSBvcGwzIGluc3RhbmNlCisgICAgICAgIHNlcGFyYXRlbHkgd2l0aCA8ZnVuY3Rpb24+c25kX29wbDNfbmV3KCk8L2Z1bmN0aW9uPi4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBvcGwzX3QgKm9wbDM7CisgIHNuZF9vcGwzX25ldyhjYXJkLCBPUEwzX0hXX09QTDNfWFhYLCAmb3BsMyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisJVGhlbiBzZXQgPHN0cnVjdGZpZWxkPmNvbW1hbmQ8L3N0cnVjdGZpZWxkPiwKKwk8c3RydWN0ZmllbGQ+cHJpdmF0ZV9kYXRhPC9zdHJ1Y3RmaWVsZD4gYW5kCisJPHN0cnVjdGZpZWxkPnByaXZhdGVfZnJlZTwvc3RydWN0ZmllbGQ+IGZvciB0aGUgcHJpdmF0ZQorCWFjY2VzcyBmdW5jdGlvbiwgdGhlIHByaXZhdGUgZGF0YSBhbmQgdGhlIGRlc3RydWN0b3IuCisJVGhlIGxfcG9ydCBhbmQgcl9wb3J0IGFyZSBub3QgbmVjZXNzYXJpbHkgc2V0LiAgT25seSB0aGUKKwljb21tYW5kIG11c3QgYmUgc2V0IHByb3Blcmx5LiAgWW91IGNhbiByZXRyaWV2ZSB0aGUgZGF0YQorCWZyb20gb3BsMy0mZ3Q7cHJpdmF0ZV9kYXRhIGZpZWxkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlBZnRlciBjcmVhdGluZyB0aGUgb3BsMyBpbnN0YW5jZSB2aWEgPGZ1bmN0aW9uPnNuZF9vcGwzX25ldygpPC9mdW5jdGlvbj4sCisJY2FsbCA8ZnVuY3Rpb24+c25kX29wbDNfaW5pdCgpPC9mdW5jdGlvbj4gdG8gaW5pdGlhbGl6ZSB0aGUgY2hpcCB0byB0aGUKKwlwcm9wZXIgc3RhdGUuICBOb3RlIHRoYXQgPGZ1bmN0aW9uPnNuZF9vcGwzX2NyZWF0ZSgpPC9mdW5jdGlvbj4gYWx3YXlzCisJY2FsbHMgaXQgaW50ZXJuYWxseS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIElmIHRoZSBvcGwzIGluc3RhbmNlIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LCB0aGVuIGNyZWF0ZSBhCisgICAgICAgIGh3ZGVwIGRldmljZSBmb3IgdGhpcyBvcGwzLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfaHdkZXBfdCAqb3BsM2h3ZGVwOworICBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgJm9wbDNod2RlcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgPHR5cGU+b3BsM190PC90eXBlPiBpbnN0YW5jZSB5b3UKKyAgICAgIGNyZWF0ZWQsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBpbmRleCBudW1iZXIsIHVzdWFsbHkgMC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGluZGV4LW9mZnNldCBmb3IgdGhlIHNlcXVlbmNlcgorICAgICAgY2xpZW50IGFzc2lnbmVkIHRvIHRoZSBPUEwzIHBvcnQuIFdoZW4gdGhlcmUgaXMgYW4gTVBVNDAxLVVBUlQsCisgICAgICBnaXZlIDEgZm9yIGhlcmUgKFVBUlQgYWx3YXlzIHRha2VzIDApLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlzYy1kZXZpY2VzLWhhcmR3YXJlLWRlcGVuZGVudCI+CisgICAgICA8dGl0bGU+SGFyZHdhcmUtRGVwZW5kZW50IERldmljZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFNvbWUgY2hpcHMgbmVlZCB0aGUgYWNjZXNzIGZyb20gdGhlIHVzZXItc3BhY2UgZm9yIHNwZWNpYWwKKyAgICAgIGNvbnRyb2xzIG9yIGZvciBsb2FkaW5nIHRoZSBtaWNybyBjb2RlLiBJbiBzdWNoIGEgY2FzZSwgeW91IGNhbgorICAgICAgY3JlYXRlIGEgaHdkZXAgKGhhcmR3YXJlLWRlcGVuZGVudCkgZGV2aWNlLiBUaGUgaHdkZXAgQVBJIGlzCisgICAgICBkZWZpbmVkIGluIDxmaWxlbmFtZT4mbHQ7c291bmQvaHdkZXAuaCZndDs8L2ZpbGVuYW1lPi4gWW91IGNhbgorICAgICAgZmluZCBleGFtcGxlcyBpbiBvcGwzIGRyaXZlciBvcgorICAgICAgPGZpbGVuYW1lPmlzYS9zYi9zYjE2X2NzcC5jPC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQ3JlYXRpb24gb2YgdGhlIDx0eXBlPmh3ZGVwPC90eXBlPiBpbnN0YW5jZSBpcyBkb25lIHZpYQorICAgICAgICA8ZnVuY3Rpb24+c25kX2h3ZGVwX25ldygpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9od2RlcF90ICpodzsKKyAgc25kX2h3ZGVwX25ldyhjYXJkLCAiTXkgSFdERVAiLCAwLCAmaHcpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgd2hlcmUgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSBpbmRleCBudW1iZXIuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIHRoZW4gcGFzcyBhbnkgcG9pbnRlciB2YWx1ZSB0byB0aGUKKyAgICAgICAgPHBhcmFtZXRlcj5wcml2YXRlX2RhdGE8L3BhcmFtZXRlcj4uCisgICAgICAgIElmIHlvdSBhc3NpZ24gYSBwcml2YXRlIGRhdGEsIHlvdSBzaG91bGQgZGVmaW5lIHRoZQorICAgICAgICBkZXN0cnVjdG9yLCB0b28uIFRoZSBkZXN0cnVjdG9yIGZ1bmN0aW9uIGlzIHNldCB0bworICAgICAgICA8c3RydWN0ZmllbGQ+cHJpdmF0ZV9mcmVlPC9zdHJ1Y3RmaWVsZD4gZmllbGQuICAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBteWRhdGFfdCAqcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisgIGh3LT5wcml2YXRlX2RhdGEgPSBwOworICBody0+cHJpdmF0ZV9mcmVlID0gbXlkYXRhX2ZyZWU7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGRlc3RydWN0b3Igd291bGQgYmU6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgbXlkYXRhX2ZyZWUoc25kX2h3ZGVwX3QgKmh3KQorICB7CisgICAgICAgICAgbXlkYXRhX3QgKnAgPSBody0+cHJpdmF0ZV9kYXRhOworICAgICAgICAgIGtmcmVlKHApOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhcmJpdHJhcnkgZmlsZSBvcGVyYXRpb25zIGNhbiBiZSBkZWZpbmVkIGZvciB0aGlzCisgICAgICAgIGluc3RhbmNlLiBUaGUgZmlsZSBvcGVyYXRvcnMgYXJlIGRlZmluZWQgaW4KKyAgICAgICAgPHBhcmFtZXRlcj5vcHM8L3BhcmFtZXRlcj4gdGFibGUuIEZvciBleGFtcGxlLCBhc3N1bWUgdGhhdAorICAgICAgICB0aGlzIGNoaXAgbmVlZHMgYW4gaW9jdGwuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGh3LT5vcHMub3BlbiA9IG15ZGF0YV9vcGVuOworICBody0+b3BzLmlvY3RsID0gbXlkYXRhX2lvY3RsOworICBody0+b3BzLnJlbGVhc2UgPSBteWRhdGFfcmVsZWFzZTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIEFuZCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcyB5b3UgbGlrZS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlzYy1kZXZpY2VzLUlFQzk1OCI+CisgICAgICA8dGl0bGU+SUVDOTU4IChTL1BESUYpPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBVc3VhbGx5IHRoZSBjb250cm9scyBmb3IgSUVDOTU4IGRldmljZXMgYXJlIGltcGxlbWVudGVkIHZpYQorICAgICAgY29udHJvbCBpbnRlcmZhY2UuIFRoZXJlIGlzIGEgbWFjcm8gdG8gY29tcG9zZSBhIG5hbWUgc3RyaW5nIGZvcgorICAgICAgSUVDOTU4IGNvbnRyb2xzLCA8ZnVuY3Rpb24+U05EUlZfQ1RMX05BTUVfSUVDOTU4KCk8L2Z1bmN0aW9uPgorICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+Jmx0O2luY2x1ZGUvYXNvdW5kLmgmZ3Q7PC9maWxlbmFtZT4uICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGNvbnRyb2xzIGZvciBJRUM5NTggc3RhdHVzIGJpdHMuIFRoZXNlCisgICAgICBjb250cm9scyB1c2UgdGhlIHR5cGUgPHR5cGU+U05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTg8L3R5cGU+LAorICAgICAgYW5kIHRoZSBzaXplIG9mIGVsZW1lbnQgaXMgZml4ZWQgYXMgNCBieXRlcyBhcnJheQorICAgICAgKHZhbHVlLmllYzk1OC5zdGF0dXNbeF0pLiBGb3IgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPgorICAgICAgY2FsbGJhY2ssIHlvdSBkb24ndCBzcGVjaWZ5IAorICAgICAgdGhlIHZhbHVlIGZpZWxkIGZvciB0aGlzIHR5cGUgKHRoZSBjb3VudCBmaWVsZCBtdXN0IGJlIHNldCwKKyAgICAgIHRob3VnaCkuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBDb24gTWFzazwvcXVvdGU+IGlzIHVzZWQgdG8gcmV0dXJuIHRoZQorICAgICAgYml0LW1hc2sgZm9yIHRoZSBJRUM5NTggc3RhdHVzIGJpdHMgb2YgY29uc3VtZXIgbW9kZS4gU2ltaWxhcmx5LAorICAgICAgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBQcm8gTWFzazwvcXVvdGU+IHJldHVybnMgdGhlIGJpdG1hc2sgZm9yCisgICAgICBwcm9mZXNzaW9uYWwgbW9kZS4gVGhleSBhcmUgcmVhZC1vbmx5IGNvbnRyb2xzLCBhbmQgYXJlIGRlZmluZWQKKyAgICAgIGFzIE1JWEVSIGNvbnRyb2xzIChpZmFjZSA9CisgICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVI8L2NvbnN0YW50PikuICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE1lYW53aGlsZSwgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBEZWZhdWx0PC9xdW90ZT4gY29udHJvbCBpcworICAgICAgZGVmaW5lZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgY3VycmVudCBkZWZhdWx0IElFQzk1OAorICAgICAgYml0cy4gTm90ZSB0aGF0IHRoaXMgb25lIGlzIHVzdWFsbHkgZGVmaW5lZCBhcyBhIFBDTSBjb250cm9sCisgICAgICAoaWZhY2UgPSA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNPC9jb25zdGFudD4pLAorICAgICAgYWx0aG91Z2ggaW4gc29tZSBwbGFjZXMgaXQncyBkZWZpbmVkIGFzIGEgTUlYRVIgY29udHJvbC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiBhZGRpdGlvbiwgeW91IGNhbiBkZWZpbmUgdGhlIGNvbnRyb2wgc3dpdGNoZXMgdG8KKyAgICAgIGVuYWJsZS9kaXNhYmxlIG9yIHRvIHNldCB0aGUgcmF3IGJpdCBtb2RlLiBUaGUgaW1wbGVtZW50YXRpb24KKyAgICAgIHdpbGwgZGVwZW5kIG9uIHRoZSBjaGlwLCBidXQgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIG5hbWVkIGFzCisgICAgICA8cXVvdGU+SUVDOTU4IHh4eDwvcXVvdGU+LCBwcmVmZXJhYmx5IHVzaW5nCisgICAgICA8ZnVuY3Rpb24+U05EUlZfQ1RMX05BTUVfSUVDOTU4KCk8L2Z1bmN0aW9uPiBtYWNyby4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGZpbmQgc2V2ZXJhbCBjYXNlcywgZm9yIGV4YW1wbGUsCisgICAgICA8ZmlsZW5hbWU+cGNpL2VtdTEwazE8L2ZpbGVuYW1lPiwKKyAgICAgIDxmaWxlbmFtZT5wY2kvaWNlMTcxMjwvZmlsZW5hbWU+LCBvcgorICAgICAgPGZpbGVuYW1lPnBjaS9jbWlwY2kuYzwvZmlsZW5hbWU+LiAgCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQnVmZmVyIGFuZCBNZW1vcnkgTWFuYWdlbWVudCAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5Ij4KKyAgICA8dGl0bGU+QnVmZmVyIGFuZCBNZW1vcnkgTWFuYWdlbWVudDwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iYnVmZmVyLWFuZC1tZW1vcnktYnVmZmVyLXR5cGVzIj4KKyAgICAgIDx0aXRsZT5CdWZmZXIgVHlwZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEFMU0EgcHJvdmlkZXMgc2V2ZXJhbCBkaWZmZXJlbnQgYnVmZmVyIGFsbG9jYXRpb24gZnVuY3Rpb25zCisgICAgICBkZXBlbmRpbmcgb24gdGhlIGJ1cyBhbmQgdGhlIGFyY2hpdGVjdHVyZS4gQWxsIHRoZXNlIGhhdmUgYQorICAgICAgY29uc2lzdGVudCBBUEkuIFRoZSBhbGxvY2F0aW9uIG9mIHBoeXNpY2FsbHktY29udGlndW91cyBwYWdlcyBpcworICAgICAgZG9uZSB2aWEgCisgICAgICA8ZnVuY3Rpb24+c25kX21hbGxvY194eHhfcGFnZXMoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLCB3aGVyZSB4eHgKKyAgICAgIGlzIHRoZSBidXMgdHlwZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYWxsb2NhdGlvbiBvZiBwYWdlcyB3aXRoIGZhbGxiYWNrIGlzCisgICAgICA8ZnVuY3Rpb24+c25kX21hbGxvY194eHhfcGFnZXNfZmFsbGJhY2soKTwvZnVuY3Rpb24+LiBUaGlzCisgICAgICBmdW5jdGlvbiB0cmllcyB0byBhbGxvY2F0ZSB0aGUgc3BlY2lmaWVkIHBhZ2VzIGJ1dCBpZiB0aGUgcGFnZXMKKyAgICAgIGFyZSBub3QgYXZhaWxhYmxlLCBpdCB0cmllcyB0byByZWR1Y2UgdGhlIHBhZ2Ugc2l6ZXMgdW50aWwgdGhlCisgICAgICBlbm91Z2ggc3BhY2UgaXMgZm91bmQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgRm9yIHJlbGVhc2luZyB0aGUgc3BhY2UsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfZnJlZV94eHhfcGFnZXMoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBVc3VhbGx5LCBBTFNBIGRyaXZlcnMgdHJ5IHRvIGFsbG9jYXRlIGFuZCByZXNlcnZlCisgICAgICAgYSBsYXJnZSBjb250aWd1b3VzIHBoeXNpY2FsIHNwYWNlCisgICAgICAgYXQgdGhlIHRpbWUgdGhlIG1vZHVsZSBpcyBsb2FkZWQgZm9yIHRoZSBsYXRlciB1c2UuCisgICAgICAgVGhpcyBpcyBjYWxsZWQgPHF1b3RlPnByZS1hbGxvY2F0aW9uPC9xdW90ZT4uCisgICAgICAgQXMgYWxyZWFkeSB3cml0dGVuLCB5b3UgY2FuIGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhdCB0aGUKKyAgICAgICBjb25zdHJ1Y3Rpb24gb2YgcGNtIGluc3RhbmNlIChpbiB0aGUgY2FzZSBvZiBQQ0kgYnVzKS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKHBjaSksIHNpemUsIG1heCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gaXMgdGhlIGJ5dGUgc2l6ZSB0byBiZQorICAgICAgcHJlLWFsbG9jYXRlZCBhbmQgdGhlIDxwYXJhbWV0ZXI+bWF4PC9wYXJhbWV0ZXI+IGlzIHRoZSBtYXhpbWFsCisgICAgICBzaXplIHRvIGJlIGNoYW5nZWQgdmlhIDxmaWxlbmFtZT5wcmVhbGxvYzwvZmlsZW5hbWU+IHByb2MgZmlsZS4KKyAgICAgIFRoZSBhbGxvY2F0b3Igd2lsbCB0cnkgdG8gZ2V0IGFzIGxhcmdlIGFyZWEgYXMgcG9zc2libGUKKyAgICAgIHdpdGhpbiB0aGUgZ2l2ZW4gc2l6ZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIHNlY29uZCBhcmd1bWVudCAodHlwZSkgYW5kIHRoZSB0aGlyZCBhcmd1bWVudCAoZGV2aWNlIHBvaW50ZXIpCisgICAgICBhcmUgZGVwZW5kZW50IG9uIHRoZSBidXMuCisgICAgICBJbiB0aGUgY2FzZSBvZiBJU0EgYnVzLCBwYXNzIDxmdW5jdGlvbj5zbmRfZG1hX2lzYV9kYXRhKCk8L2Z1bmN0aW9uPgorICAgICAgYXMgdGhlIHRoaXJkIGFyZ3VtZW50IHdpdGggPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0RFVjwvY29uc3RhbnQ+IHR5cGUuCisgICAgICBGb3IgdGhlIGNvbnRpbnVvdXMgYnVmZmVyIHVucmVsYXRlZCB0byB0aGUgYnVzIGNhbiBiZSBwcmUtYWxsb2NhdGVkCisgICAgICB3aXRoIDxjb25zdGFudD5TTkRSVl9ETUFfVFlQRV9DT05USU5VT1VTPC9jb25zdGFudD4gdHlwZSBhbmQgdGhlCisgICAgICA8ZnVuY3Rpb24+c25kX2RtYV9jb250aW51b3VzX2RhdGEoR0ZQX0tFUk5FTCk8L2Z1bmN0aW9uPiBkZXZpY2UgcG9pbnRlciwKKyAgICAgIHdoZXJlaCA8Y29uc3RhbnQ+R0ZQX0tFUk5FTDwvY29uc3RhbnQ+IGlzIHRoZSBrZXJuZWwgYWxsb2NhdGlvbiBmbGFnIHRvCisgICAgICB1c2UuICBGb3IgdGhlIFNCVVMsIDxjb25zdGFudD5TTkRSVl9ETUFfVFlQRV9TQlVTPC9jb25zdGFudD4gYW5kCisgICAgICA8ZnVuY3Rpb24+c25kX2RtYV9zYnVzX2RhdGEoc2J1c19kZXYpPC9mdW5jdGlvbj4gYXJlIHVzZWQgaW5zdGVhZC4KKyAgICAgIEZvciB0aGUgUENJIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlcnMsIHVzZQorICAgICAgPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0RFVl9TRzwvY29uc3RhbnQ+IHdpdGgKKyAgICAgIDxmdW5jdGlvbj5zbmRfZG1hX3BjaV9kYXRhKHBjaSk8L2Z1bmN0aW9uPgorICAgICAgKHNlZSB0aGUgc2VjdGlvbgorICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5LW5vbi1jb250aWd1b3VzIj48Y2l0ZXRpdGxlPk5vbi1Db250aWd1b3VzIEJ1ZmZlcnMKKyAgICAgICAgICA8L2NpdGV0aXRsZT48L2xpbms+KS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE9uY2Ugd2hlbiB0aGUgYnVmZmVyIGlzIHByZS1hbGxvY2F0ZWQsIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICBhbGxvY2F0b3IgaW4gdGhlIDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBzaXplKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIE5vdGUgdGhhdCB5b3UgaGF2ZSB0byBwcmUtYWxsb2NhdGUgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5LWV4dGVybmFsLWhhcmR3YXJlIj4KKyAgICAgIDx0aXRsZT5FeHRlcm5hbCBIYXJkd2FyZSBCdWZmZXJzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTb21lIGNoaXBzIGhhdmUgdGhlaXIgb3duIGhhcmR3YXJlIGJ1ZmZlcnMgYW5kIHRoZSBETUEKKyAgICAgIHRyYW5zZmVyIGZyb20gdGhlIGhvc3QgbWVtb3J5IGlzIG5vdCBhdmFpbGFibGUuIEluIHN1Y2ggYSBjYXNlLAorICAgICAgeW91IG5lZWQgdG8gZWl0aGVyIDEpIGNvcHkvc2V0IHRoZSBhdWRpbyBkYXRhIGRpcmVjdGx5IHRvIHRoZQorICAgICAgZXh0ZXJuYWwgaGFyZHdhcmUgYnVmZmVyLCBvciAyKSBtYWtlIGFuIGludGVybWVkaWF0ZSBidWZmZXIgYW5kCisgICAgICBjb3B5L3NldCB0aGUgZGF0YSBmcm9tIGl0IHRvIHRoZSBleHRlcm5hbCBoYXJkd2FyZSBidWZmZXIgaW4KKyAgICAgIGludGVycnVwdHMgKG9yIGluIHRhc2tsZXRzLCBwcmVmZXJhYmx5KS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBjYXNlIHdvcmtzIGZpbmUgaWYgdGhlIGV4dGVybmFsIGhhcmR3YXJlIGJ1ZmZlciBpcyBlbm91Z2gKKyAgICAgIGxhcmdlLiAgVGhpcyBtZXRob2QgZG9lc24ndCBuZWVkIGFueSBleHRyYSBidWZmZXJzIGFuZCB0aHVzIGlzCisgICAgICBtb3JlIGVmZmVjdGl2ZS4gWW91IG5lZWQgdG8gZGVmaW5lIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGZvciAKKyAgICAgIHRoZSBkYXRhIHRyYW5zZmVyLiBIb3dldmVyLCB0aGVyZSBpcyBhIGRyYXdiYWNrOiBpdCBjYW5ub3QKKyAgICAgIGJlIG1tYXBwZWQuIFRoZSBleGFtcGxlcyBhcmUgR1VTJ3MgR0YxIFBDTSBvciBlbXU4MDAwJ3MKKyAgICAgIHdhdmV0YWJsZSBQQ00uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHNlY29uZCBjYXNlIGFsbG93cyB0aGUgbW1hcCBvZiB0aGUgYnVmZmVyLCBhbHRob3VnaCB5b3UgaGF2ZQorICAgICAgdG8gaGFuZGxlIGFuIGludGVycnVwdCBvciBhIHRhc2tsZXQgZm9yIHRyYW5zZmVycmluZyB0aGUgZGF0YQorICAgICAgZnJvbSB0aGUgaW50ZXJtZWRpYXRlIGJ1ZmZlciB0byB0aGUgaGFyZHdhcmUgYnVmZmVyLiBZb3UgY2FuIGZpbmQgYW4KKyAgICAgIGV4YW1wbGUgaW4gdnhwb2NrZXQgZHJpdmVyLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFub3RoZXIgY2FzZSBpcyB0aGF0IHRoZSBjaGlwIHVzZXMgYSBQQ0kgbWVtb3J5LW1hcAorICAgICAgcmVnaW9uIGZvciB0aGUgYnVmZmVyIGluc3RlYWQgb2YgdGhlIGhvc3QgbWVtb3J5LiBJbiB0aGlzIGNhc2UsCisgICAgICBtbWFwIGlzIGF2YWlsYWJsZSBvbmx5IG9uIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcyBsaWtlIGludGVsLiBJbgorICAgICAgbm9uLW1tYXAgbW9kZSwgdGhlIGRhdGEgY2Fubm90IGJlIHRyYW5zZmVycmVkIGFzIHRoZSBub3JtYWwKKyAgICAgIHdheS4gVGh1cyB5b3UgbmVlZCB0byBkZWZpbmUgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGFzIHdlbGwgCisgICAgICBhcyBpbiB0aGUgY2FzZXMgYWJvdmUuIFRoZSBleGFtcGxlcyBhcmUgZm91bmQgaW4KKyAgICAgIDxmaWxlbmFtZT5ybWUzMi5jPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5ybWU5Ni5jPC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGRlcGVuZHMgdXBvbiAKKyAgICAgICAgd2hldGhlciB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgaW50ZXJsZWF2ZWQgb3Igbm9uLWludGVybGVhdmVkCisgICAgICAgIHNhbXBsZXMuIFRoZSA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzCisgICAgICAgIGRlZmluZWQgbGlrZSBiZWxvdywgYSBiaXQgCisgICAgICAgIGRpZmZlcmVudGx5IGRlcGVuZGluZyB3aGV0aGVyIHRoZSBkaXJlY3Rpb24gaXMgcGxheWJhY2sgb3IKKyAgICAgICAgY2FwdHVyZTogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBwbGF5YmFja19jb3B5KHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgaW50IGNoYW5uZWwsCisgICAgICAgICAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsIHZvaWQgKnNyYywgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworICBzdGF0aWMgaW50IGNhcHR1cmVfY29weShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIGludCBjaGFubmVsLAorICAgICAgICAgICAgICAgc25kX3BjbV91ZnJhbWVzX3QgcG9zLCB2b2lkICpkc3QsIHNuZF9wY21fdWZyYW1lc190IGNvdW50KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIGNhc2Ugb2YgaW50ZXJsZWF2ZWQgc2FtcGxlcywgdGhlIHNlY29uZCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+Y2hhbm5lbDwvcGFyYW1ldGVyPikgaXMgbm90IHVzZWQuIFRoZSB0aGlyZCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+cG9zPC9wYXJhbWV0ZXI+KSBwb2ludHMgdGhlIAorICAgICAgY3VycmVudCBwb3NpdGlvbiBvZmZzZXQgaW4gZnJhbWVzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBtZWFuaW5nIG9mIHRoZSBmb3VydGggYXJndW1lbnQgaXMgZGlmZmVyZW50IGJldHdlZW4KKyAgICAgIHBsYXliYWNrIGFuZCBjYXB0dXJlLiBGb3IgcGxheWJhY2ssIGl0IGhvbGRzIHRoZSBzb3VyY2UgZGF0YQorICAgICAgcG9pbnRlciwgYW5kIGZvciBjYXB0dXJlLCBpdCdzIHRoZSBkZXN0aW5hdGlvbiBkYXRhIHBvaW50ZXIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIG51bWJlciBvZiBmcmFtZXMgdG8gYmUgY29waWVkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2hhdCB5b3UgaGF2ZSB0byBkbyBpbiB0aGlzIGNhbGxiYWNrIGlzIGFnYWluIGRpZmZlcmVudAorICAgICAgICBiZXR3ZWVuIHBsYXliYWNrIGFuZCBjYXB0dXJlIGRpcmVjdGlvbnMuIEluIHRoZSBjYXNlIG9mCisgICAgICAgIHBsYXliYWNrLCB5b3UgZG86IGNvcHkgdGhlIGdpdmVuIGFtb3VudCBvZiBkYXRhCisgICAgICAgICg8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+KSBhdCB0aGUgc3BlY2lmaWVkIHBvaW50ZXIKKyAgICAgICAgKDxwYXJhbWV0ZXI+c3JjPC9wYXJhbWV0ZXI+KSB0byB0aGUgc3BlY2lmaWVkIG9mZnNldAorICAgICAgICAoPHBhcmFtZXRlcj5wb3M8L3BhcmFtZXRlcj4pIG9uIHRoZSBoYXJkd2FyZSBidWZmZXIuIFdoZW4KKyAgICAgICAgY29kZWQgbGlrZSBtZW1jcHktbGlrZSB3YXksIHRoZSBjb3B5IHdvdWxkIGJlIGxpa2U6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIG15X21lbWNweShteV9idWZmZXIgKyBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcG9zKSwgc3JjLAorICAgICAgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIGNvdW50KSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciB0aGUgY2FwdHVyZSBkaXJlY3Rpb24sIHlvdSBkbzogY29weSB0aGUgZ2l2ZW4gYW1vdW50IG9mCisgICAgICAgIGRhdGEgKDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4pIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0CisgICAgICAgICg8cGFyYW1ldGVyPnBvczwvcGFyYW1ldGVyPikgb24gdGhlIGhhcmR3YXJlIGJ1ZmZlciB0byB0aGUKKyAgICAgICAgc3BlY2lmaWVkIHBvaW50ZXIgKDxwYXJhbWV0ZXI+ZHN0PC9wYXJhbWV0ZXI+KS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXlfbWVtY3B5KGRzdCwgbXlfYnVmZmVyICsgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHBvcyksCisgICAgICAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgY291bnQpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIE5vdGUgdGhhdCBib3RoIG9mIHRoZSBwb3NpdGlvbiBhbmQgdGhlIGRhdGEgYW1vdW50IGFyZSBnaXZlbgorICAgICAgaW4gZnJhbWVzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSBjYXNlIG9mIG5vbi1pbnRlcmxlYXZlZCBzYW1wbGVzLCB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgIHdpbGwgYmUgYSBiaXQgbW9yZSBjb21wbGljYXRlZC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBZb3UgbmVlZCB0byBjaGVjayB0aGUgY2hhbm5lbCBhcmd1bWVudCwgYW5kIGlmIGl0J3MgLTEsIGNvcHkKKyAgICAgIHRoZSB3aG9sZSBjaGFubmVscy4gT3RoZXJ3aXNlLCB5b3UgaGF2ZSB0byBjb3B5IG9ubHkgdGhlCisgICAgICBzcGVjaWZpZWQgY2hhbm5lbC4gUGxlYXNlIGNoZWNrCisgICAgICA8ZmlsZW5hbWU+aXNhL2d1cy9ndXNfcGNtLmM8L2ZpbGVuYW1lPiBhcyBhbiBleGFtcGxlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIGFsc28KKyAgICAgICAgaW1wbGVtZW50ZWQgaW4gYSBzaW1pbGFyIHdheS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzaWxlbmNlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgaW50IGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsIHNuZF9wY21fdWZyYW1lc190IGNvdW50KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1lYW5pbmdzIG9mIGFyZ3VtZW50cyBhcmUgaWRlbnRpY2FsIHdpdGggdGhlCisgICAgICA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IAorICAgICAgY2FsbGJhY2ssIGFsdGhvdWdoIHRoZXJlIGlzIG5vIDxwYXJhbWV0ZXI+c3JjL2RzdDwvcGFyYW1ldGVyPgorICAgICAgYXJndW1lbnQuIEluIHRoZSBjYXNlIG9mIGludGVybGVhdmVkIHNhbXBsZXMsIHRoZSBjaGFubmVsCisgICAgICBhcmd1bWVudCBoYXMgbm8gbWVhbmluZywgYXMgd2VsbCBhcyBvbgorICAgICAgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4gIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJvbGUgb2YgPHN0cnVjdGZpZWxkPnNpbGVuY2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB0bworICAgICAgICBzZXQgdGhlIGdpdmVuIGFtb3VudCAKKyAgICAgICAgKDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4pIG9mIHNpbGVuY2UgZGF0YSBhdCB0aGUKKyAgICAgICAgc3BlY2lmaWVkIG9mZnNldCAoPHBhcmFtZXRlcj5wb3M8L3BhcmFtZXRlcj4pIG9uIHRoZSBoYXJkd2FyZQorICAgICAgICBidWZmZXIuIFN1cHBvc2UgdGhhdCB0aGUgZGF0YSBmb3JtYXQgaXMgc2lnbmVkICh0aGF0IGlzLCB0aGUKKyAgICAgICAgc2lsZW50LWRhdGEgaXMgMCksIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gdXNpbmcgYSBtZW1zZXQtbGlrZQorICAgICAgICBmdW5jdGlvbiB3b3VsZCBiZSBsaWtlOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBteV9tZW1jcHkobXlfYnVmZmVyICsgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHBvcyksIDAsCisgICAgICAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgY291bnQpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIGNhc2Ugb2Ygbm9uLWludGVybGVhdmVkIHNhbXBsZXMsIGFnYWluLCB0aGUKKyAgICAgIGltcGxlbWVudGF0aW9uIGJlY29tZXMgYSBiaXQgbW9yZSBjb21wbGljYXRlZC4gU2VlLCBmb3IgZXhhbXBsZSwKKyAgICAgIDxmaWxlbmFtZT5pc2EvZ3VzL2d1c19wY20uYzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYnVmZmVyLWFuZC1tZW1vcnktbm9uLWNvbnRpZ3VvdXMiPgorICAgICAgPHRpdGxlPk5vbi1Db250aWd1b3VzIEJ1ZmZlcnM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdXIgaGFyZHdhcmUgc3VwcG9ydHMgdGhlIHBhZ2UgdGFibGUgbGlrZSBlbXUxMGsxIG9yIHRoZQorICAgICAgYnVmZmVyIGRlc2NyaXB0b3JzIGxpa2UgdmlhODJ4eCwgeW91IGNhbiB1c2UgdGhlIHNjYXR0ZXItZ2F0aGVyCisgICAgICAoU0cpIERNQS4gQUxTQSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nIFNHLWJ1ZmZlcnMuCisgICAgICBUaGUgQVBJIGlzIHByb3ZpZGVkIGluIDxmaWxlbmFtZT4mbHQ7c291bmQvcGNtLmgmZ3Q7PC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIGNyZWF0aW5nIHRoZSBTRy1idWZmZXIgaGFuZGxlciwgY2FsbAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXMoKTwvZnVuY3Rpb24+IG9yCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKCk8L2Z1bmN0aW9uPgorICAgICAgICB3aXRoIDxjb25zdGFudD5TTkRSVl9ETUFfVFlQRV9ERVZfU0c8L2NvbnN0YW50PgorCWluIHRoZSBQQ00gY29uc3RydWN0b3IgbGlrZSBvdGhlciBQQ0kgcHJlLWFsbG9jYXRvci4KKyAgICAgICAgWW91IG5lZWQgdG8gcGFzcyB0aGUgPGZ1bmN0aW9uPnNuZF9kbWFfcGNpX2RhdGEocGNpKTwvZnVuY3Rpb24+LAorICAgICAgICB3aGVyZSBwY2kgaXMgdGhlIHN0cnVjdCA8c3RydWN0bmFtZT5wY2lfZGV2PC9zdHJ1Y3RuYW1lPiBwb2ludGVyCisgICAgICAgIG9mIHRoZSBjaGlwIGFzIHdlbGwuCisgICAgICAgIFRoZSA8dHlwZT5zbmRfc2dfYnVmX3Q8L3R5cGU+IGluc3RhbmNlIGlzIGNyZWF0ZWQgYXMKKyAgICAgICAgc3Vic3RyZWFtLSZndDtkbWFfcHJpdmF0ZS4gWW91IGNhbiBjYXN0CisgICAgICAgIHRoZSBwb2ludGVyIGxpa2U6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fc2didWZfdCAqc2didWYgPSAoc25kX3BjbV9zZ2J1Zl90KilzdWJzdHJlYW0tPmRtYV9wcml2YXRlOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVuIGNhbGwgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4KKyAgICAgIGluIDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPiBjYWxsYmFjaworICAgICAgYXMgd2VsbCBhcyBpbiB0aGUgY2FzZSBvZiBub3JtYWwgUENJIGJ1ZmZlci4KKyAgICAgIFRoZSBTRy1idWZmZXIgaGFuZGxlciB3aWxsIGFsbG9jYXRlIHRoZSBub24tY29udGlndW91cyBrZXJuZWwKKyAgICAgIHBhZ2VzIG9mIHRoZSBnaXZlbiBzaXplIGFuZCBtYXAgdGhlbSBvbnRvIHRoZSB2aXJ0dWFsbHkgY29udGlndW91cworICAgICAgbWVtb3J5LiAgVGhlIHZpcnR1YWwgcG9pbnRlciBpcyBhZGRyZXNzZWQgaW4gcnVudGltZS0mZ3Q7ZG1hX2FyZWEuCisgICAgICBUaGUgcGh5c2ljYWwgYWRkcmVzcyAocnVudGltZS0mZ3Q7ZG1hX2FkZHIpIGlzIHNldCB0byB6ZXJvLAorICAgICAgYmVjYXVzZSB0aGUgYnVmZmVyIGlzIHBoeXNpY2FsbHkgbm9uLWNvbnRpZ291cy4KKyAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNzIHRhYmxlIGlzIHNldCB1cCBpbiBzZ2J1Zi0mZ3Q7dGFibGUuCisgICAgICBZb3UgY2FuIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhdCBhIGNlcnRhaW4gb2Zmc2V0IHZpYQorICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fc2didWZfZ2V0X2FkZHIoKTwvZnVuY3Rpb24+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gYSBTRy1oYW5kbGVyIGlzIHVzZWQsIHlvdSBuZWVkIHRvIHNldAorICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fc2didWZfb3BzX3BhZ2U8L2Z1bmN0aW9uPiBhcworICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5wYWdlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2suCisgICAgICAoU2VlIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXBhZ2UtY2FsbGJhY2siPgorICAgICAgPGNpdGV0aXRsZT5wYWdlIGNhbGxiYWNrIHNlY3Rpb248L2NpdGV0aXRsZT48L2xpbms+LikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciByZWxlYXNpbmcgdGhlIGRhdGEsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKCk8L2Z1bmN0aW9uPiBpbiB0aGUKKyAgICAgIDxzdHJ1Y3RmaWVsZD5od19mcmVlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgYXMgdXN1YWwuCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5LXZtYWxsb2NlZCI+CisgICAgICA8dGl0bGU+Vm1hbGxvYydlZCBCdWZmZXJzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJdCdzIHBvc3NpYmxlIHRvIHVzZSBhIGJ1ZmZlciBhbGxvY2F0ZWQgdmlhCisgICAgICA8ZnVuY3Rpb24+dm1hbGxvYzwvZnVuY3Rpb24+LCBmb3IgZXhhbXBsZSwgZm9yIGFuIGludGVybWVkaWF0ZQorICAgICAgYnVmZmVyLiBTaW5jZSB0aGUgYWxsb2NhdGVkIHBhZ2VzIGFyZSBub3QgY29udGlndW91cywgeW91IG5lZWQKKyAgICAgIHRvIHNldCB0aGUgPHN0cnVjdGZpZWxkPnBhZ2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayB0byBvYnRhaW4KKyAgICAgIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGF0IGV2ZXJ5IG9mZnNldC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgPHN0cnVjdGZpZWxkPnBhZ2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFjaworICAgICAgICB3b3VsZCBiZSBsaWtlIHRoaXM6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyAgLyogZ2V0IHRoZSBwaHlzaWNhbCBwYWdlIHBvaW50ZXIgb24gdGhlIGdpdmVuIG9mZnNldCAqLworICBzdGF0aWMgc3RydWN0IHBhZ2UgKm15Y2hpcF9wYWdlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKKyAgeworICAgICAgICAgIHZvaWQgKnBhZ2VwdHIgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OworICAgICAgICAgIHJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIFByb2MgSW50ZXJmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0icHJvYy1pbnRlcmZhY2UiPgorICAgIDx0aXRsZT5Qcm9jIEludGVyZmFjZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBTFNBIHByb3ZpZGVzIGFuIGVhc3kgaW50ZXJmYWNlIGZvciBwcm9jZnMuIFRoZSBwcm9jIGZpbGVzIGFyZQorICAgICAgdmVyeSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gSSByZWNvbW1lbmQgeW91IHNldCB1cCBwcm9jIGZpbGVzIGlmCisgICAgICB5b3Ugd3JpdGUgYSBkcml2ZXIgYW5kIHdhbnQgdG8gZ2V0IGEgcnVubmluZyBzdGF0dXMgb3IgcmVnaXN0ZXIKKyAgICAgIGR1bXBzLiBUaGUgQVBJIGlzIGZvdW5kIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2luZm8uaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBGb3IgY3JlYXRpbmcgYSBwcm9jIGZpbGUsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9wcm9jX25ldygpPC9mdW5jdGlvbj4uIAorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2luZm9fZW50cnlfdCAqZW50cnk7CisgIGludCBlcnIgPSBzbmRfY2FyZF9wcm9jX25ldyhjYXJkLCAibXktZmlsZSIsICZlbnRyeSk7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICB3aGVyZSB0aGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgcHJvYy1maWxlIG5hbWUgdG8gYmUKKyAgICBjcmVhdGVkLiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIGNyZWF0ZSBhIGZpbGUKKyAgICA8ZmlsZW5hbWU+bXktZmlsZTwvZmlsZW5hbWU+IHVuZGVyIHRoZSBjYXJkIGRpcmVjdG9yeSwKKyAgICBlLmcuIDxmaWxlbmFtZT4vcHJvYy9hc291bmQvY2FyZDAvbXktZmlsZTwvZmlsZW5hbWU+LiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBMaWtlIG90aGVyIGNvbXBvbmVudHMsIHRoZSBwcm9jIGVudHJ5IGNyZWF0ZWQgdmlhCisgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX3Byb2NfbmV3KCk8L2Z1bmN0aW9uPiB3aWxsIGJlIHJlZ2lzdGVyZWQgYW5kCisgICAgcmVsZWFzZWQgYXV0b21hdGljYWxseSBpbiB0aGUgY2FyZCByZWdpc3RyYXRpb24gYW5kIHJlbGVhc2UKKyAgICBmdW5jdGlvbnMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBXaGVuIHRoZSBjcmVhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUgZnVuY3Rpb24gc3RvcmVzIGEgbmV3CisgICAgaW5zdGFuY2UgYXQgdGhlIHBvaW50ZXIgZ2l2ZW4gaW4gdGhlIHRoaXJkIGFyZ3VtZW50LgorICAgIEl0IGlzIGluaXRpYWxpemVkIGFzIGEgdGV4dCBwcm9jIGZpbGUgZm9yIHJlYWQgb25seS4gIEZvciB1c2luZworICAgIHRoaXMgcHJvYyBmaWxlIGFzIGEgcmVhZC1vbmx5IHRleHQgZmlsZSBhcyBpdCBpcywgc2V0IHRoZSByZWFkCisgICAgY2FsbGJhY2sgd2l0aCBhIHByaXZhdGUgZGF0YSB2aWEgCisgICAgIDxmdW5jdGlvbj5zbmRfaW5mb19zZXRfdGV4dF9vcHMoKTwvZnVuY3Rpb24+LgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCByZWFkX3NpemUsIG15X3Byb2NfcmVhZCk7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIAorICAgIHdoZXJlIHRoZSBzZWNvbmQgYXJndW1lbnQgKDxwYXJhbWV0ZXI+Y2hpcDwvcGFyYW1ldGVyPikgaXMgdGhlCisgICAgcHJpdmF0ZSBkYXRhIHRvIGJlIHVzZWQgaW4gdGhlIGNhbGxiYWNrcy4gVGhlIHRoaXJkIHBhcmFtZXRlcgorICAgIHNwZWNpZmllcyB0aGUgcmVhZCBidWZmZXIgc2l6ZSBhbmQgdGhlIGZvdXJ0aAorICAgICg8cGFyYW1ldGVyPm15X3Byb2NfcmVhZDwvcGFyYW1ldGVyPikgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaAorICAgIGlzIGRlZmluZWQgbGlrZQorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgbXlfcHJvY19yZWFkKHNuZF9pbmZvX2VudHJ5X3QgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2luZm9fYnVmZmVyX3QgKmJ1ZmZlcik7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIEluIHRoZSByZWFkIGNhbGxiYWNrLCB1c2UgPGZ1bmN0aW9uPnNuZF9pcHJpbnRmKCk8L2Z1bmN0aW9uPiBmb3IKKyAgICBvdXRwdXQgc3RyaW5ncywgd2hpY2ggd29ya3MganVzdCBsaWtlIG5vcm1hbAorICAgIDxmdW5jdGlvbj5wcmludGYoKTwvZnVuY3Rpb24+LiAgRm9yIGV4YW1wbGUsCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteV9wcm9jX3JlYWQoc25kX2luZm9fZW50cnlfdCAqZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfaW5mb19idWZmZXJfdCAqYnVmZmVyKQorICB7CisgICAgICAgICAgY2hpcF90ICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKworICAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlRoaXMgaXMgbXkgY2hpcCFcbiIpOworICAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBvcnQgPSAlbGRcbiIsIGNoaXAtPnBvcnQpOworICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoZSBmaWxlIHBlcm1pc3Npb24gY2FuIGJlIGNoYW5nZWQgYWZ0ZXJ3YXJkcy4gIEFzIGRlZmF1bHQsIGl0J3MKKyAgICBzZXQgYXMgcmVhZCBvbmx5IGZvciBhbGwgdXNlcnMuICBJZiB5b3Ugd2FudCB0byBhZGQgdGhlIHdyaXRlCisgICAgcGVybWlzc2lvbiB0byB0aGUgdXNlciAocm9vdCBhcyBkZWZhdWx0KSwgc2V0IGxpa2UgYmVsb3c6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworIGVudHJ5LT5tb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgIGFuZCBzZXQgdGhlIHdyaXRlIGJ1ZmZlciBzaXplIGFuZCB0aGUgY2FsbGJhY2sKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGVudHJ5LT5jLnRleHQud3JpdGVfc2l6ZSA9IDI1NjsKKyAgZW50cnktPmMudGV4dC53cml0ZSA9IG15X3Byb2Nfd3JpdGU7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoZSBidWZmZXIgc2l6ZSBmb3IgcmVhZCBpcyBzZXQgdG8gMTAyNCBpbXBsaWNpdGx5IGJ5CisgICAgPGZ1bmN0aW9uPnNuZF9pbmZvX3NldF90ZXh0X29wcygpPC9mdW5jdGlvbj4uICBJdCBzaG91bGQgc3VmZmljZQorICAgIGluIG1vc3QgY2FzZXMgKHRoZSBzaXplIHdpbGwgYmUgYWxpZ25lZCB0bworICAgIDxjb25zdGFudD5QQUdFX1NJWkU8L2NvbnN0YW50PiBhbnl3YXkpLCBidXQgaWYgeW91IG5lZWQgdG8gaGFuZGxlCisgICAgdmVyeSBsYXJnZSB0ZXh0IGZpbGVzLCB5b3UgY2FuIHNldCBpdCBleHBsaWNpdGx5LCB0b28uCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBlbnRyeS0+Yy50ZXh0LnJlYWRfc2l6ZSA9IDY1NTM2OworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEZvciB0aGUgd3JpdGUgY2FsbGJhY2ssIHlvdSBjYW4gdXNlCisgICAgPGZ1bmN0aW9uPnNuZF9pbmZvX2dldF9saW5lKCk8L2Z1bmN0aW9uPiB0byBnZXQgYSB0ZXh0IGxpbmUsIGFuZAorICAgIDxmdW5jdGlvbj5zbmRfaW5mb19nZXRfc3RyKCk8L2Z1bmN0aW9uPiB0byByZXRyaWV2ZSBhIHN0cmluZyBmcm9tCisgICAgdGhlIGxpbmUuIFNvbWUgZXhhbXBsZXMgYXJlIGZvdW5kIGluCisgICAgPGZpbGVuYW1lPmNvcmUvb3NzL21peGVyX29zcy5jPC9maWxlbmFtZT4sIGNvcmUvb3NzL2FuZAorICAgIDxmaWxlbmFtZT5wY21fb3NzLmM8L2ZpbGVuYW1lPi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBGb3IgYSByYXctZGF0YSBwcm9jLWZpbGUsIHNldCB0aGUgYXR0cmlidXRlcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc3RydWN0IHNuZF9pbmZvX2VudHJ5X29wcyBteV9maWxlX2lvX29wcyA9IHsKKyAgICAgICAgICAucmVhZCA9IG15X2ZpbGVfaW9fcmVhZCwKKyAgfTsKKworICBlbnRyeS0+Y29udGVudCA9IFNORFJWX0lORk9fQ09OVEVOVF9EQVRBOworICBlbnRyeS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgZW50cnktPmMub3BzID0gJm15X2ZpbGVfaW9fb3BzOworICBlbnRyeS0+c2l6ZSA9IDQwOTY7CisgIGVudHJ5LT5tb2RlID0gU19JRlJFRyB8IFNfSVJVR087CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIGNhbGxiYWNrIGlzIG11Y2ggbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoZSB0ZXh0LWZpbGUKKyAgICAgIHZlcnNpb24uIFlvdSBuZWVkIHRvIHVzZSBhIGxvdy1sZXZlbCBpL28gZnVuY3Rpb25zIHN1Y2ggYXMKKyAgICAgIDxmdW5jdGlvbj5jb3B5X2Zyb20vdG9fdXNlcigpPC9mdW5jdGlvbj4gdG8gdHJhbnNmZXIgdGhlCisgICAgICBkYXRhLgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGxvbmcgbXlfZmlsZV9pb19yZWFkKHNuZF9pbmZvX2VudHJ5X3QgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZmlsZV9wcml2YXRlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcykKKyAgeworICAgICAgICAgIGxvbmcgc2l6ZSA9IGNvdW50OworICAgICAgICAgIGlmIChwb3MgKyBzaXplID4gbG9jYWxfbWF4X3NpemUpCisgICAgICAgICAgICAgICAgICBzaXplID0gbG9jYWxfbWF4X3NpemUgLSBwb3M7CisgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihidWYsIGxvY2FsX2RhdGEgKyBwb3MsIHNpemUpKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgcmV0dXJuIHNpemU7CisgIH0KK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gUG93ZXIgTWFuYWdlbWVudCAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InBvd2VyLW1hbmFnZW1lbnQiPgorICAgIDx0aXRsZT5Qb3dlciBNYW5hZ2VtZW50PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSBjaGlwIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2l0aCB3aXRoIHN1c3BlbmQvcmVzdW1lCisgICAgICBmdW5jdGlvbnMsIHlvdSBuZWVkIHRvIGFkZCB0aGUgcG93ZXItbWFuYWdlbWVudCBjb2RlcyB0byB0aGUKKyAgICAgIGRyaXZlci4gVGhlIGFkZGl0aW9uYWwgY29kZXMgZm9yIHRoZSBwb3dlci1tYW5hZ2VtZW50IHNob3VsZCBiZQorICAgICAgPGZ1bmN0aW9uPmlmZGVmPC9mdW5jdGlvbj4nZWQgd2l0aAorICAgICAgPGNvbnN0YW50PkNPTkZJR19QTTwvY29uc3RhbnQ+LiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEFMU0EgcHJvdmlkZXMgdGhlIGNvbW1vbiBwb3dlci1tYW5hZ2VtZW50IGxheWVyLiBFYWNoIGNhcmQgZHJpdmVyCisgICAgICBuZWVkcyB0byBoYXZlIG9ubHkgbG93LWxldmVsIHN1c3BlbmQgYW5kIHJlc3VtZSBjYWxsYmFja3MuCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAjaWZkZWYgQ09ORklHX1BNCisgIHN0YXRpYyBpbnQgc25kX215X3N1c3BlbmQoc25kX2NhcmRfdCAqY2FyZCwgcG1fbWVzc2FnZV90IHN0YXRlKQorICB7CisgICAgICAgICAgLi4uLiAvLyBkbyB0aGluZ3MgZm9yIHN1c3BzZW5kCisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKyAgc3RhdGljIGludCBzbmRfbXlfcmVzdW1lKHNuZF9jYXJkX3QgKmNhcmQpCisgIHsKKyAgICAgICAgICAuLi4uIC8vIGRvIHRoaW5ncyBmb3Igc3VzcHNlbmQKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorICAjZW5kaWYKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgc2NoZW1lIG9mIHRoZSByZWFsIHN1c3BlbmQgam9iIGlzIGFzIGZvbGxvd2luZy4KKworICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmV0cmlldmUgdGhlIGNoaXAgZGF0YSBmcm9tIHBtX3ByaXZhdGVfZGF0YSBmaWVsZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNhbGwgPGZ1bmN0aW9uPnNuZF9wY21fc3VzcGVuZF9hbGwoKTwvZnVuY3Rpb24+IHRvIHN1c3BlbmQgdGhlIHJ1bm5pbmcgUENNIHN0cmVhbXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TYXZlIHRoZSByZWdpc3RlciB2YWx1ZXMgaWYgbmVjZXNzYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3RvcCB0aGUgaGFyZHdhcmUgaWYgbmVjZXNzYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGlzYWJsZSB0aGUgUENJIGRldmljZSBieSBjYWxsaW5nIDxmdW5jdGlvbj5wY2lfZGlzYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEEgdHlwaWNhbCBjb2RlIHdvdWxkIGJlIGxpa2U6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IG15Y2hpcF9zdXNwZW5kKHNuZF9jYXJkX3QgKmNhcmQsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKKyAgeworICAgICAgICAgIC8qICgxKSAqLworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gY2FyZC0+cG1fcHJpdmF0ZV9kYXRhOworICAgICAgICAgIC8qICgyKSAqLworICAgICAgICAgIHNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKKyAgICAgICAgICAvKiAoMykgKi8KKyAgICAgICAgICBzbmRfbXljaGlwX3NhdmVfcmVnaXN0ZXJzKGNoaXApOworICAgICAgICAgIC8qICg0KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfc3RvcF9oYXJkd2FyZShjaGlwKTsKKyAgICAgICAgICAvKiAoNSkgKi8KKyAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBUaGUgc2NoZW1lIG9mIHRoZSByZWFsIHJlc3VtZSBqb2IgaXMgYXMgZm9sbG93aW5nLgorCisgICAgPG9yZGVyZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5SZXRyaWV2ZSB0aGUgY2hpcCBkYXRhIGZyb20gcG1fcHJpdmF0ZV9kYXRhIGZpZWxkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5FbmFibGUgdGhlIHBjaSBkZXZpY2UgYWdhaW4gYnkgY2FsbGluZworICAgIDxmdW5jdGlvbj5wY2lfZW5hYmxlX2RldmljZSgpPC9mdW5jdGlvbj4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlLWluaXRpYWxpemUgdGhlIGNoaXAuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlc3RvcmUgdGhlIHNhdmVkIHJlZ2lzdGVycyBpZiBuZWNlc3NhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlc3VtZSB0aGUgbWl4ZXIsIGUuZy4gY2FsbGluZworICAgIDxmdW5jdGlvbj5zbmRfYWM5N19yZXN1bWUoKTwvZnVuY3Rpb24+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5SZXN0YXJ0IHRoZSBoYXJkd2FyZSAoaWYgYW55KS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIEEgdHlwaWNhbCBjb2RlIHdvdWxkIGJlIGxpa2U6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteWNoaXBfcmVzdW1lKG15Y2hpcF90ICpjaGlwKQorICB7CisgICAgICAgICAgLyogKDEpICovCisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBjYXJkLT5wbV9wcml2YXRlX2RhdGE7CisgICAgICAgICAgLyogKDIpICovCisgICAgICAgICAgcGNpX2VuYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKKyAgICAgICAgICAvKiAoMykgKi8KKyAgICAgICAgICBzbmRfbXljaGlwX3JlaW5pdF9jaGlwKGNoaXApOworICAgICAgICAgIC8qICg0KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfcmVzdG9yZV9yZWdpc3RlcnMoY2hpcCk7CisgICAgICAgICAgLyogKDUpICovCisgICAgICAgICAgc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTcpOworICAgICAgICAgIC8qICg2KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfcmVzdGFydF9jaGlwKGNoaXApOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgT0ssIHdlIGhhdmUgYWxsIGNhbGxiYWNrcyBub3cuIExldCdzIHNldCB1cCB0aGVtIG5vdy4gSW4gdGhlCisgICAgICBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2FyZCwgYWRkIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCisgIHsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgc25kX2NhcmRfdCAqY2FyZDsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcDsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgc25kX2NhcmRfc2V0X3BtX2NhbGxiYWNrKGNhcmQsIHNuZF9teV9zdXNwZW5kLCBzbmRfbXlfcmVzdW1lLCBjaGlwKTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICBIZXJlIHlvdSBkb24ndCBoYXZlIHRvIHB1dCBpZmRlZiBDT05GSUdfUE0gYXJvdW5kLCBzaW5jZSBpdCdzIGFscmVhZHkKKyAgICBjaGVja2VkIGluIHRoZSBoZWFkZXIgYW5kIGV4cGFuZGVkIHRvIGVtcHR5IGlmIG5vdCBuZWVkZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB5b3UgbmVlZCBhIHNwYWNlIGZvciBzYXZpbmcgdGhlIHJlZ2lzdGVycywgeW91J2xsIG5lZWQgdG8KKyAgICBhbGxvY2F0ZSB0aGUgYnVmZmVyIGZvciBpdCBoZXJlLCB0b28sIHNpbmNlIGl0IHdvdWxkIGJlIGZhdGFsCisgICAgaWYgeW91IGNhbm5vdCBhbGxvY2F0ZSBhIG1lbW9yeSBpbiB0aGUgc3VzcGVuZCBwaGFzZS4KKyAgICBUaGUgYWxsb2NhdGVkIGJ1ZmZlciBzaG91bGQgYmUgcmVsZWFzZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICBkZXN0cnVjdG9yLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgQW5kIG5leHQsIHNldCBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3MgdG8gdGhlIHBjaV9kcml2ZXIsCisgICAgICBUaGlzIGNhbiBiZSBkb25lIGJ5IHBhc3NpbmcgYSBtYWNybyBTTkRfUENJX1BNX0NBTExCQUNLUworICAgICAgaW4gdGhlIHBjaV9kcml2ZXIgc3RydWN0LiAgVGhpcyBtYWNybyBpcyBleHBhbmRlZCB0byB0aGUgY29ycmVjdAorICAgICAgKGdsb2JhbCkgY2FsbGJhY2tzIGlmIENPTkZJR19QTSBpcyBzZXQuCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworICAgICAgICAgIC5uYW1lID0gIk15IENoaXAiLAorICAgICAgICAgIC5pZF90YWJsZSA9IHNuZF9teV9pZHMsCisgICAgICAgICAgLnByb2JlID0gc25kX215X3Byb2JlLAorICAgICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXlfcmVtb3ZlKSwKKyAgICAgICAgICBTTkRfUENJX1BNX0NBTExCQUNLUworICB9OworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBNb2R1bGUgUGFyYW1ldGVycyAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9Im1vZHVsZS1wYXJhbWV0ZXJzIj4KKyAgICA8dGl0bGU+TW9kdWxlIFBhcmFtZXRlcnM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlcmUgYXJlIHN0YW5kYXJkIG1vZHVsZSBvcHRpb25zIGZvciBBTFNBLiBBdCBsZWFzdCwgZWFjaAorICAgICAgbW9kdWxlIHNob3VsZCBoYXZlIDxwYXJhbWV0ZXI+aW5kZXg8L3BhcmFtZXRlcj4sCisgICAgICA8cGFyYW1ldGVyPmlkPC9wYXJhbWV0ZXI+IGFuZCA8cGFyYW1ldGVyPmVuYWJsZTwvcGFyYW1ldGVyPgorICAgICAgb3B0aW9ucy4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB0aGUgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzICh1c3VhbGx5IHVwIHRvCisgICAgICA4ID0gPGNvbnN0YW50PlNORFJWX0NBUkRTPC9jb25zdGFudD4gY2FyZHMpLCB0aGV5IHNob3VsZCBiZQorICAgICAgYXJyYXlzLiAgVGhlIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZXMgYXJlIGRlZmluZWQgYWxyZWFkeSBhcworICAgICAgY29uc3RhbnRzIGZvciBlYXNlIG9mIHByb2dyYW1taW5nOgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKKyAgc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOworICBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBvbmx5IGEgc2luZ2xlIGNhcmQsIHRoZXkgY291bGQgYmUgc2luZ2xlCisgICAgdmFyaWFibGVzLCBpbnN0ZWFkLiAgPHBhcmFtZXRlcj5lbmFibGU8L3BhcmFtZXRlcj4gb3B0aW9uIGlzIG5vdAorICAgIGFsd2F5cyBuZWNlc3NhcnkgaW4gdGhpcyBjYXNlLCBidXQgaXQgd291bGRuJ3QgYmUgc28gYmFkIHRvIGhhdmUgYQorICAgIGR1bW15IG9wdGlvbiBmb3IgY29tcGF0aWJpbGl0eS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBtb2R1bGUgcGFyYW1ldGVycyBtdXN0IGJlIGRlY2xhcmVkIHdpdGggdGhlIHN0YW5kYXJkCisgICAgPGZ1bmN0aW9uPm1vZHVsZV9wYXJhbSgpKCk8L2Z1bmN0aW9uPiwKKyAgICA8ZnVuY3Rpb24+bW9kdWxlX3BhcmFtX2FycmF5KCkoKTwvZnVuY3Rpb24+IGFuZAorICAgIDxmdW5jdGlvbj5NT0RVTEVfUEFSTV9ERVNDKCk8L2Z1bmN0aW9uPiBtYWNyb3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgdHlwaWNhbCBjb2Rpbmcgd291bGQgYmUgbGlrZSBiZWxvdzoKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNkZWZpbmUgQ0FSRF9OQU1FICJNeSBDaGlwIgorCisgIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKKyAgTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciAiIENBUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKKyAgbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7CisgIE1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yICIgQ0FSRF9OQU1FICIgc291bmRjYXJkLiIpOworICBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKKyAgTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBDQVJEX05BTUUgIiBzb3VuZGNhcmQuIik7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgQWxzbywgZG9uJ3QgZm9yZ2V0IHRvIGRlZmluZSB0aGUgbW9kdWxlIGRlc2NyaXB0aW9uLCBjbGFzc2VzLAorICAgICAgbGljZW5zZSBhbmQgZGV2aWNlcy4gRXNwZWNpYWxseSwgdGhlIHJlY2VudCBtb2Rwcm9iZSByZXF1aXJlcyB0bworICAgICAgZGVmaW5lIHRoZSBtb2R1bGUgbGljZW5zZSBhcyBHUEwsIGV0Yy4sIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzCisgICAgICBzaG93biBhcyA8cXVvdGU+dGFpbnRlZDwvcXVvdGU+LiAKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIE1PRFVMRV9ERVNDUklQVElPTigiTXkgQ2hpcCIpOworICBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisgIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1ZlbmRvcixNeSBDaGlwIE5hbWV9fSIpOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBIb3cgVG8gUHV0IFlvdXIgRHJpdmVyICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iaG93LXRvLXB1dC15b3VyLWRyaXZlciI+CisgICAgPHRpdGxlPkhvdyBUbyBQdXQgWW91ciBEcml2ZXIgSW50byBBTFNBIFRyZWU8L3RpdGxlPgorCTxzZWN0aW9uPgorCTx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKwk8cGFyYT4KKwlTbyBmYXIsIHlvdSd2ZSBsZWFybmVkIGhvdyB0byB3cml0ZSB0aGUgZHJpdmVyIGNvZGVzLgorCUFuZCB5b3UgbWlnaHQgaGF2ZSBhIHF1ZXN0aW9uIG5vdzogaG93IHRvIHB1dCBteSBvd24KKwlkcml2ZXIgaW50byB0aGUgQUxTQSBkcml2ZXIgdHJlZT8KKwlIZXJlIChmaW5hbGx5IDopIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgaXMgZGVzY3JpYmVkIGJyaWVmbHkuCisJPC9wYXJhPgorCisJPHBhcmE+CisJU3VwcG9zZSB0aGF0IHlvdSdsbCBjcmVhdGUgYSBuZXcgUENJIGRyaXZlciBmb3IgdGhlIGNhcmQKKwk8cXVvdGU+eHl6PC9xdW90ZT4uICBUaGUgY2FyZCBtb2R1bGUgbmFtZSB3b3VsZCBiZQorCXNuZC14eXouICBUaGUgbmV3IGRyaXZlciBpcyB1c3VhbGx5IHB1dCBpbnRvIGFsc2EtZHJpdmVyCisJdHJlZSwgPGZpbGVuYW1lPmFsc2EtZHJpdmVyL3BjaTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbgorCXRoZSBjYXNlIG9mIFBDSSBjYXJkcy4KKwlUaGVuIHRoZSBkcml2ZXIgaXMgZXZhbHVhdGVkLCBhdWRpdGVkIGFuZCB0ZXN0ZWQKKwlieSBkZXZlbG9wZXJzIGFuZCB1c2Vycy4gIEFmdGVyIGEgY2VydGFpbiB0aW1lLCB0aGUgZHJpdmVyCisJd2lsbCBnbyB0byBhbHNhLWtlcm5lbCB0cmVlICh0byB0aGUgY29ycmVzcG9uZGluZyBkaXJlY3RvcnksCisJc3VjaCBhcyA8ZmlsZW5hbWU+YWxzYS1rZXJuZWwvcGNpPC9maWxlbmFtZT4pIGFuZCBldmVudHVhbGx5CisJaW50ZWdyYXRlZCBpbnRvIExpbnV4IDIuNiB0cmVlICh0aGUgZGlyZWN0b3J5IHdvdWxkIGJlCisJPGZpbGVuYW1lPmxpbnV4L3NvdW5kL3BjaTwvZmlsZW5hbWU+KS4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCB0aGUgZHJpdmVyIGNvZGUgaXMgc3VwcG9zZWQKKwl0byBiZSBwdXQgaW50byBhbHNhLWRyaXZlciB0cmVlLiAgVGhlIHR3byBjYXNlcyBhcmUgYXNzdW1lZDoKKwlhIGRyaXZlciBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIHNvdXJjZSBmaWxlIGFuZCBvbmUgY29uc2lzdGluZworCW9mIHNldmVyYWwgc291cmNlIGZpbGVzLgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbj4KKwk8dGl0bGU+RHJpdmVyIHdpdGggQSBTaW5nbGUgU291cmNlIEZpbGU8L3RpdGxlPgorCTxwYXJhPgorCTxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJTW9kaWZ5IGFsc2EtZHJpdmVyL3BjaS9NYWtlZmlsZQorCTwvcGFyYT4KKworCTxwYXJhPgorCVN1cHBvc2UgeW91IGhhdmUgYSBmaWxlIHh5ei5jLiAgQWRkIHRoZSBmb2xsb3dpbmcKKwl0d28gbGluZXMKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmQteHl6LW9ianMgOj0geHl6Lm8KKyAgb2JqLSQoQ09ORklHX1NORF9YWVopICs9IHNuZC14eXoubworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlDcmVhdGUgdGhlIEtjb25maWcgZW50cnkKKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlBZGQgdGhlIG5ldyBlbnRyeSBvZiBLY29uZmlnIGZvciB5b3VyIHh5eiBkcml2ZXIuCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgY29uZmlnIFNORF9YWVoKKyAgICAgICAgICB0cmlzdGF0ZSAiRm9vYmFyIFhZWiIKKyAgICAgICAgICBkZXBlbmRzIG9uIFNORAorICAgICAgICAgIHNlbGVjdCBTTkRfUENNCisgICAgICAgICAgaGVscAorICAgICAgICAgICAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEZvb2JhciBYWVogc291bmRjYXJkLgorCisgICAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisgICAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBzbmQteHl6LgorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworCXRoZSBsaW5lLCBzZWxlY3QgU05EX1BDTSwgc3BlY2lmaWVzIHRoYXQgdGhlIGRyaXZlciB4eXogc3VwcG9ydHMKKwlQQ00uICBJbiBhZGRpdGlvbiB0byBTTkRfUENNLCB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMgYXJlCisJc3VwcG9ydGVkIGZvciBzZWxlY3QgY29tbWFuZDoKKwlTTkRfUkFXTUlESSwgU05EX1RJTUVSLCBTTkRfSFdERVAsIFNORF9NUFU0MDFfVUFSVCwKKwlTTkRfT1BMM19MSUIsIFNORF9PUEw0X0xJQiwgU05EX1ZYX0xJQiwgU05EX0FDOTdfQ09ERUMuCisJQWRkIHRoZSBzZWxlY3QgY29tbWFuZCBmb3IgZWFjaCBzdXBwb3J0ZWQgY29tcG9uZW50LgorCTwvcGFyYT4KKworCTxwYXJhPgorCU5vdGUgdGhhdCBzb21lIHNlbGVjdGlvbnMgaW1wbHkgdGhlIGxvd2xldmVsIHNlbGVjdGlvbnMuCisJRm9yIGV4YW1wbGUsIFBDTSBpbmNsdWRlcyBUSU1FUiwgTVBVNDAxX1VBUlQgaW5jbHVkZXMgUkFXTUlESSwKKwlBQzk3X0NPREVDIGluY2x1ZGVzIFBDTSwgYW5kIE9QTDNfTElCIGluY2x1ZGVzIEhXREVQLgorCVlvdSBkb24ndCBuZWVkIHRvIGdpdmUgdGhlIGxvd2xldmVsIHNlbGVjdGlvbnMgYWdhaW4uCisJPC9wYXJhPgorCisJPHBhcmE+CisJRm9yIHRoZSBkZXRhaWxzIG9mIEtjb25maWcgc2NyaXB0LCByZWZlciB0byB0aGUga2J1aWxkCisJZG9jdW1lbnRhdGlvbi4KKwk8L3BhcmE+CisKKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCVJ1biBjdnNjb21waWxlIHNjcmlwdCB0byByZS1nZW5lcmF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdCBhbmQKKwlidWlsZCB0aGUgd2hvbGUgc3R1ZmYgYWdhaW4uCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPC9vcmRlcmVkbGlzdD4KKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24+CisJPHRpdGxlPkRyaXZlcnMgd2l0aCBTZXZlcmFsIFNvdXJjZSBGaWxlczwvdGl0bGU+CisJPHBhcmE+CisJU3VwcG9zZSB0aGF0IHRoZSBkcml2ZXIgc25kLXh5eiBoYXZlIHNldmVyYWwgc291cmNlIGZpbGVzLgorCVRoZXkgYXJlIGxvY2F0ZWQgaW4gdGhlIG5ldyBzdWJkaXJlY3RvcnksCisJcGNpL3h5ei4KKworCTxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJQWRkIGEgbmV3IGRpcmVjdG9yeSAoPGZpbGVuYW1lPnh5ejwvZmlsZW5hbWU+KSBpbgorCTxmaWxlbmFtZT5hbHNhLWRyaXZlci9wY2kvTWFrZWZpbGU8L2ZpbGVuYW1lPiBsaWtlIGJlbG93CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBvYmotJChDT05GSUdfU05EKSArPSB4eXovCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCVVuZGVyIHRoZSBkaXJlY3RvcnkgPGZpbGVuYW1lPnh5ejwvZmlsZW5hbWU+LCBjcmVhdGUgYSBNYWtlZmlsZQorCisgICAgICA8ZXhhbXBsZT4KKwk8dGl0bGU+U2FtcGxlIE1ha2VmaWxlIGZvciBhIGRyaXZlciB4eXo8L3RpdGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWZuZGVmIFNORF9UT1BESVIKKyAgU05EX1RPUERJUj0uLi8uLgorICBlbmRpZgorCisgIGluY2x1ZGUgJChTTkRfVE9QRElSKS90b3BsZXZlbC5jb25maWcKKyAgaW5jbHVkZSAkKFNORF9UT1BESVIpL01ha2VmaWxlLmNvbmYKKworICBzbmQteHl6LW9ianMgOj0geHl6Lm8gYWJjLm8gZGVmLm8KKworICBvYmotJChDT05GSUdfU05EX1hZWikgKz0gc25kLXh5ei5vCisKKyAgaW5jbHVkZSAkKFNORF9UT1BESVIpL1J1bGVzLm1ha2UKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9leGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCUNyZWF0ZSB0aGUgS2NvbmZpZyBlbnRyeQorCTwvcGFyYT4KKworCTxwYXJhPgorCVRoaXMgcHJvY2VkdXJlIGlzIGFzIHNhbWUgYXMgaW4gdGhlIGxhc3Qgc2VjdGlvbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlSdW4gY3ZzY29tcGlsZSBzY3JpcHQgdG8gcmUtZ2VuZXJhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYW5kCisJYnVpbGQgdGhlIHdob2xlIHN0dWZmIGFnYWluLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTwvb3JkZXJlZGxpc3Q+CisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBVc2VmdWwgRnVuY3Rpb25zICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0idXNlZnVsLWZ1bmN0aW9ucyI+CisgICAgPHRpdGxlPlVzZWZ1bCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9InVzZWZ1bC1mdW5jdGlvbnMtc25kLXByaW50ayI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPnNuZF9wcmludGsoKTwvZnVuY3Rpb24+IGFuZCBmcmllbmRzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBTFNBIHByb3ZpZGVzIGEgdmVyYm9zZSB2ZXJzaW9uIG9mCisgICAgICA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gSWYgYSBrZXJuZWwgY29uZmlnCisgICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9WRVJCT1NFX1BSSU5USzwvY29uc3RhbnQ+IGlzIHNldCwgdGhpcworICAgICAgZnVuY3Rpb24gcHJpbnRzIHRoZSBnaXZlbiBtZXNzYWdlIHRvZ2V0aGVyIHdpdGggdGhlIGZpbGUgbmFtZQorICAgICAgYW5kIHRoZSBsaW5lIG9mIHRoZSBjYWxsZXIuIFRoZSA8Y29uc3RhbnQ+S0VSTl9YWFg8L2NvbnN0YW50PgorICAgICAgcHJlZml4IGlzIHByb2Nlc3NlZCBhcyAKKyAgICAgIHdlbGwgYXMgdGhlIG9yaWdpbmFsIDxmdW5jdGlvbj5wcmludGsoKTwvZnVuY3Rpb24+IGRvZXMsIHNvIGl0J3MKKyAgICAgIHJlY29tbWVuZGVkIHRvIGFkZCB0aGlzIHByZWZpeCwgZS5nLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcHJpbnRrKEtFUk5fRVJSICJPaCBteSwgc29ycnksIGl0J3MgZXh0cmVtZWx5IGJhZCFcbiIpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgYWxzbyA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPidzIGZvcgorICAgICAgZGVidWdnaW5nLiA8ZnVuY3Rpb24+c25kX3ByaW50ZCgpPC9mdW5jdGlvbj4gY2FuIGJlIHVzZWQgZm9yCisgICAgICBnZW5lcmFsIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSWYKKyAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHPC9jb25zdGFudD4gaXMgc2V0LCB0aGlzIGZ1bmN0aW9uIGlzCisgICAgICBjb21waWxlZCwgYW5kIHdvcmtzIGp1c3QgbGlrZQorICAgICAgPGZ1bmN0aW9uPnNuZF9wcmludGsoKTwvZnVuY3Rpb24+LiBJZiB0aGUgQUxTQSBpcyBjb21waWxlZAorICAgICAgd2l0aG91dCB0aGUgZGVidWdnaW5nIGZsYWcsIGl0J3MgaWdub3JlZC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICA8ZnVuY3Rpb24+c25kX3ByaW50ZGQoKTwvZnVuY3Rpb24+IGlzIGNvbXBpbGVkIGluIG9ubHkgd2hlbgorICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUdfREVURUNUPC9jb25zdGFudD4gaXMgc2V0LiBQbGVhc2Ugbm90ZQorICAgICAgdGhhdCA8Y29uc3RhbnQ+REVCVUdfREVURUNUPC9jb25zdGFudD4gaXMgbm90IHNldCBhcyBkZWZhdWx0CisgICAgICBldmVuIGlmIHlvdSBjb25maWd1cmUgdGhlIGFsc2EtZHJpdmVyIHdpdGgKKyAgICAgIDxvcHRpb24+LS13aXRoLWRlYnVnPWZ1bGw8L29wdGlvbj4gb3B0aW9uLiBZb3UgbmVlZCB0byBnaXZlCisgICAgICBleHBsaWNpdGx5IDxvcHRpb24+LS13aXRoLWRlYnVnPWRldGVjdDwvb3B0aW9uPiBvcHRpb24gaW5zdGVhZC4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InVzZWZ1bC1mdW5jdGlvbnMtc25kLWFzc2VydCI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPnNuZF9hc3NlcnQoKTwvZnVuY3Rpb24+PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICA8ZnVuY3Rpb24+c25kX2Fzc2VydCgpPC9mdW5jdGlvbj4gbWFjcm8gaXMgc2ltaWxhciB3aXRoIHRoZQorICAgICAgbm9ybWFsIDxmdW5jdGlvbj5hc3NlcnQoKTwvZnVuY3Rpb24+IG1hY3JvLiBGb3IgZXhhbXBsZSwgIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9hc3NlcnQocG9pbnRlciAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSwgYW5kIHRoZQorICAgICAgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBhY3Rpb24gaWYgaXQgZmFpbHMuIFdoZW4KKyAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHPC9jb25zdGFudD4sIGlzIHNldCwgaXQgd2lsbCBzaG93IGFuCisgICAgICBlcnJvciBtZXNzYWdlIHN1Y2ggYXMgPGNvbXB1dGVyb3V0cHV0PkJVRz8gKHh4eCkgKGNhbGxlZCBmcm9tCisgICAgICB5eXkpPC9jb21wdXRlcm91dHB1dD4uIFdoZW4gbm8gZGVidWcgZmxhZyBpcyBzZXQsIHRoaXMgaXMKKyAgICAgIGlnbm9yZWQuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJ1c2VmdWwtZnVuY3Rpb25zLXNuZC1ydW50aW1lLWNoZWNrIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX3J1bnRpbWVfY2hlY2soKTwvZnVuY3Rpb24+PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIG1hY3JvIGlzIHF1aXRlIHNpbWlsYXIgd2l0aAorICAgICAgPGZ1bmN0aW9uPnNuZF9hc3NlcnQoKTwvZnVuY3Rpb24+LiBVbmxpa2UKKyAgICAgIDxmdW5jdGlvbj5zbmRfYXNzZXJ0KCk8L2Z1bmN0aW9uPiwgdGhlIGV4cHJlc3Npb24gaXMgYWx3YXlzCisgICAgICBldmFsdWF0ZWQgcmVnYXJkbGVzcyBvZgorICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUc8L2NvbnN0YW50Pi4gV2hlbgorICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUc8L2NvbnN0YW50PiBpcyBzZXQsIHRoZSBtYWNybyB3aWxsCisgICAgICBzaG93IGEgbWVzc2FnZSBsaWtlIDxjb21wdXRlcm91dHB1dD5FUlJPUiAoeHgpIChjYWxsZWQgZnJvbQorICAgICAgeXl5KTwvY29tcHV0ZXJvdXRwdXQ+LiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlZnVsLWZ1bmN0aW9ucy1zbmQtYnVnIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX0JVRygpPC9mdW5jdGlvbj48L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEl0IGNhbGxzIDxmdW5jdGlvbj5zbmRfYXNzZXJ0KDAsKTwvZnVuY3Rpb24+IC0tIHRoYXQgaXMsIGp1c3QKKyAgICAgIHByaW50cyB0aGUgZXJyb3IgbWVzc2FnZSBhdCB0aGUgcG9pbnQuIEl0J3MgdXNlZnVsIHRvIHNob3cgdGhhdAorICAgICAgYSBmYXRhbCBlcnJvciBoYXBwZW5zIHRoZXJlLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQWNrbm93bGVkZ21lbnRzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYWNrbm93bGVkbWVudHMiPgorICAgIDx0aXRsZT5BY2tub3dsZWRnbWVudHM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgSSB3b3VsZCBsaWtlIHRvIHRoYW5rIFBoaWwgS2VyciBmb3IgaGlzIGhlbHAgZm9yIGltcHJvdmVtZW50IGFuZAorICAgICAgY29ycmVjdGlvbnMgb2YgdGhpcyBkb2N1bWVudC4gCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgIEtldmluIENvbmRlciByZWZvcm1hdHRlZCB0aGUgb3JpZ2luYWwgcGxhaW4tdGV4dCB0byB0aGUKKyAgICBEb2NCb29rIGZvcm1hdC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgR2l1bGlhbm8gUG9jaGluaSBjb3JyZWN0ZWQgdHlwb3MgYW5kIGNvbnRyaWJ1dGVkIHRoZSBleGFtcGxlIGNvZGVzCisgICAgaW4gdGhlIGhhcmR3YXJlIGNvbnN0cmFpbnRzIHNlY3Rpb24uCisgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0pveXN0aWNrLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Kb3lzdGljay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkYTQxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Kb3lzdGljay50eHQKQEAgLTAsMCArMSw4NiBAQAorQW5hbG9nIEpveXN0aWNrIFN1cHBvcnQgb24gQUxTQSBEcml2ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgT2N0LiAxNCwgMjAwMworICAgICAgICAgICBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+CisKK0dlbmVyYWwKKy0tLS0tLS0KKworRmlyc3Qgb2YgYWxsLCB5b3UgbmVlZCB0byBlbmFibGUgR0FNRVBPUlQgc3VwcG9ydCBvbiBMaW51eCBrZXJuZWwgZm9yCit1c2luZyBhIGpveXN0aWNrIHdpdGggdGhlIEFMU0EgZHJpdmVyLiAgRm9yIHRoZSBkZXRhaWxzIG9mIGdhbWVwb3J0CitzdXBwb3J0LCByZWZlciB0byBEb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLnR4dC4KKworVGhlIGpveXN0aWNrIHN1cHBvcnQgb2YgQUxTQSBkcml2ZXJzIGlzIGRpZmZlcmVudCBiZXR3ZWVuIElTQSBhbmQgUENJCitjYXJkcy4gIEluIHRoZSBjYXNlIG9mIElTQSAoUG5QKSBjYXJkcywgaXQncyB1c3VhbGx5IGhhbmRsZWQgYnkgdGhlCitpbmRlcGVuZGVudCBtb2R1bGUgKG5zNTU4KS4gIE1lYW53aGlsZSwgdGhlIEFMU0EgUENJIGRyaXZlcnMgaGF2ZSB0aGUKK2J1aWx0LWluIGdhbWVwb3J0IHN1cHBvcnQuICBIZW5jZSwgd2hlbiB0aGUgQUxTQSBQQ0kgZHJpdmVyIGlzIGJ1aWx0CitpbiB0aGUga2VybmVsLCBDT05GSUdfR0FNRVBPUlQgbXVzdCBiZSAneScsIHRvby4gIE90aGVyd2lzZSwgdGhlCitnYW1lcG9ydCBzdXBwb3J0IG9uIHRoYXQgY2FyZCB3aWxsIGJlIChzaWxlbnRseSkgZGlzYWJsZWQuCisKK1NvbWUgYWRhcHRlciBtb2R1bGVzIHByb2JlIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIG9mIHRoZSBkZXZpY2UgYXQKK3RoZSBsb2FkIHRpbWUuICBJdCdkIGJlIHNhZmVyIHRvIHBsdWcgaW4gdGhlIGpveXN0aWNrIGRldmljZSBiZWZvcmUKK2xvYWRpbmcgdGhlIG1vZHVsZS4KKworCitQQ0kgQ2FyZHMKKy0tLS0tLS0tLQorCitGb3IgUENJIGNhcmRzLCB0aGUgam95c3RpY2sgaXMgZW5hYmxlZCB3aGVuIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGUKK29wdGlvbiBpcyBzcGVjaWZpZWQuICBTb21lIGRyaXZlcnMgZG9uJ3QgbmVlZCBvcHRpb25zLCBhbmQgdGhlCitqb3lzdGljayBzdXBwb3J0IGlzIGFsd2F5cyBlbmFibGVkLiAgSW4gdGhlIGZvcm1lciBBTFNBIHZlcnNpb24sIHRoZXJlCit3YXMgYSBkeW5hbWljIGNvbnRyb2wgQVBJIGZvciB0aGUgam95c3RpY2sgYWN0aXZhdGlvbi4gIEl0IHdhcworY2hhbmdlZCwgaG93ZXZlciwgdG8gdGhlIHN0YXRpYyBtb2R1bGUgb3B0aW9ucyBiZWNhdXNlIG9mIHRoZSBzeXN0ZW0KK3N0YWJpbGl0eSBhbmQgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQuCisKK1RoZSBmb2xsb3dpbmcgUENJIGRyaXZlcnMgc3VwcG9ydCB0aGUgam95c3RpY2sgbmF0aXZlbHkuCisKKyAgICBEcml2ZXIJTW9kdWxlIE9wdGlvbglBdmFpbGFibGUgVmFsdWVzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYWxzNDAwMAlqb3lzdGlja19wb3J0CTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGF1dG8tZGV0ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWw6IGFueSBhZGRyZXNzIChlLmcuIDB4MjAwKQorICAgIGF1ODh4MAlOL0EJCU4vQQorICAgIGF6ZjMzMjgJam95c3RpY2sJMCA9IGRpc2FibGUsIDEgPSBlbmFibGUsIC0xID0gYXV0byAoZGVmYXVsdCkKKyAgICBlbnMxMzcwCWpveXN0aWNrCTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGVuYWJsZQorICAgIGVuczEzNzEJam95c3RpY2tfcG9ydAkwID0gZGlzYWJsZSAoZGVmYXVsdCksIDEgPSBhdXRvLWRldGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFudWFsOiAweDIwMCwgMHgyMDgsIDB4MjEwLCAweDIxOAorICAgIGNtaXBjaQlqb3lzdGlja19wb3J0CTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGF1dG8tZGV0ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWw6IGFueSBhZGRyZXNzIChlLmcuIDB4MjAwKQorICAgIGNzNDI4MQlOL0EJCU4vQQorICAgIGNzNDZ4eAlOL0EJCU4vQQorICAgIGVzMTkzOAlOL0EJCU4vQQorICAgIGVzMTk2OAlqb3lzdGljawkwID0gZGlzYWJsZSAoZGVmYXVsdCksIDEgPSBlbmFibGUKKyAgICBzb25pY3ZpYmVzCU4vQQkJTi9BCisgICAgdHJpZGVudAlOL0EJCU4vQQorICAgIHZpYTgyeHgoKjEpCWpveXN0aWNrCTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGVuYWJsZQorICAgIHltZnBjaQlqb3lzdGlja19wb3J0CTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGF1dG8tZGV0ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWw6IDB4MjAxLCAweDIwMiwgMHgyMDQsIDB4MjA1KCoyKQorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgKjEpICBWSUE2ODZBL0Igb25seQorICAgICoyKSAgV2l0aCBZTUY3NDQvNzU0IGNoaXBzLCB0aGUgcG9ydCBhZGRyZXNzIGNhbiBiZSBjaG9zZW4gYXJiaXRyYXJpbHkKKworVGhlIGZvbGxvd2luZyBkcml2ZXJzIGRvbid0IHN1cHBvcnQgZ2FtZXBvcnQgbmF0aXZlbHksIGJ1dCB0aGVyZSBhcmUKK2FkZGl0aW9uYWwgbW9kdWxlcy4gIExvYWQgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlIHRvIGFkZCB0aGUgZ2FtZXBvcnQKK3N1cHBvcnQuCisKKyAgICBEcml2ZXIJQWRkaXRpb25hbCBNb2R1bGUKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGVtdTEwazEJZW11MTBrMS1ncAorICAgIGZtODAxCWZtODAxLWdwCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogdGhlICJwY2lnYW1lIiBhbmQgImNzNDYxeCIgbW9kdWxlcyBhcmUgZm9yIHRoZSBPU1MgZHJpdmVycyBvbmx5LgorICAgICAgVGhlc2UgQUxTQSBkcml2ZXJzIChjczQ2eHgsIHRyaWRlbnQgYW5kIGF1ODh4MCkgaGF2ZSB0aGUKKyAgICAgIGJ1aWx0LWluIGdhbWVwb3J0IHN1cHBvcnQuCisKK0FzIG1lbnRpb25lZCBhYm92ZSwgQUxTQSBQQ0kgZHJpdmVycyBoYXZlIHRoZSBidWlsdC1pbiBnYW1lcG9ydAorc3VwcG9ydCwgc28geW91IGRvbid0IGhhdmUgdG8gbG9hZCBuczU1OCBtb2R1bGUuICBKdXN0IGxvYWQgImpveWRldiIKK2FuZCB0aGUgYXBwcm9wcmlhdGUgYWRhcHRlciBtb2R1bGUgKGUuZy4gImFuYWxvZyIpLgorCisKK0lTQSBDYXJkcworLS0tLS0tLS0tCisKK0FMU0EgSVNBIGRyaXZlcnMgZG9uJ3QgaGF2ZSB0aGUgYnVpbHQtaW4gZ2FtZXBvcnQgc3VwcG9ydC4KK0luc3RlYWQsIHlvdSBuZWVkIHRvIGxvYWQgIm5zNTU4IiBtb2R1bGUgaW4gYWRkaXRpb24gdG8gImpveWRldiIgYW5kCit0aGUgYWRhcHRlciBtb2R1bGUgKGUuZy4gImFuYWxvZyIpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL01JWEFSVC50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvTUlYQVJULnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2I5NzA2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL01JWEFSVC50eHQKQEAgLTAsMCArMSwxMDAgQEAKKyAgICBBbHNhIGRyaXZlciBmb3IgRGlnaWdyYW0gbWlYYXJ0OCBhbmQgbWlYYXJ0OEFFUy9FQlUgc291bmRjYXJkcworCSAgICBEaWdpZ3JhbSA8YWxzYUBkaWdpZ3JhbS5jb20+CisKKworR0VORVJBTAorPT09PT09PQorCitUaGUgbWlYYXJ0OCBpcyBhIG11bHRpY2hhbm5lbCBhdWRpbyBwcm9jZXNzaW5nIGFuZCBtaXhpbmcgc291bmRjYXJkCit0aGF0IGhhcyA0IHN0ZXJlbyBhdWRpbyBpbnB1dHMgYW5kIDQgc3RlcmVvIGF1ZGlvIG91dHB1dHMuCitUaGUgbWlYYXJ0OEFFUy9FQlUgaXMgdGhlIHNhbWUgd2l0aCBhIGFkZC1vbiBjYXJkIHRoYXQgb2ZmZXJzIGZ1cnRoZXIKKzQgZGlnaXRhbCBzdGVyZW8gYXVkaW8gaW5wdXRzIGFuZCBvdXRwdXRzLgorRnVydGhlcm1vcmUgdGhlIGFkZC1vbiBjYXJkIG9mZmVycyBleHRlcm5hbCBjbG9jayBzeW5jaHJvbmlzYXRpb24KKyhBRVMvRUJVLCBXb3JkIENsb2NrLCBUaW1lIENvZGUgYW5kIFZpZGVvIFN5bmNocm8pCisKK1RoZSBtYWluYm9hcmQgaGFzIGEgUG93ZXJQQyB0aGF0IG9mZmVycyBvbmJvYXJkIG1wZWcgZW5jb2RpbmcgYW5kCitkZWNvZGluZywgc2FtcGxlcmF0ZSBjb252ZXJzaW9ucyBhbmQgdmFyaW91cyBlZmZlY3RzLgorCitUaGUgZHJpdmVyIGRvbid0IHdvcmsgcHJvcGVybHkgYXQgYWxsIHVudGlsIHRoZSBjZXJ0YWluIGZpcm13YXJlcworYXJlIGxvYWRlZCwgaS5lLiBubyBQQ00gbm9yIG1peGVyIGRldmljZXMgd2lsbCBhcHBlYXIuCitVc2UgdGhlIG1peGFydGxvYWRlciB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgYWxzYS10b29scyBwYWNrYWdlLgorCisKK1ZFUlNJT04gMC4xLjAKKz09PT09PT09PT09PT0KKworT25lIG1pWGFydDggYm9hcmQgd2lsbCBiZSByZXByZXNlbnRlZCBhcyA0IGFsc2EgY2FyZHMsIGVhY2ggd2l0aCAxCitzdGVyZW8gYW5hbG9nIGNhcHR1cmUgJ3BjbTBjJyBhbmQgMSBzdGVyZW8gYW5hbG9nIHBsYXliYWNrICdwY20wcCcgZGV2aWNlLgorV2l0aCBhIG1pWGFydDhBRVMvRUJVIHRoZXJlIGlzIGluIGFkZGl0aW9uIDEgc3RlcmVvIGRpZ2l0YWwgaW5wdXQKKydwY20xYycgYW5kIDEgc3RlcmVvIGRpZ2l0YWwgb3V0cHV0ICdwY20xcCcgcGVyIGNhcmQuCisKK0Zvcm1hdHMKKy0tLS0tLS0KK1U4LCBTMTZfTEUsIFMxNl9CRSwgUzI0XzNMRSwgUzI0XzNCRSwgRkxPQVRfTEUsIEZMT0FUX0JFCitTYW1wbGUgcmF0ZXMgOiA4MDAwIC0gNDgwMDAgSHogY29udGlub3VzbHkKKworUGxheWJhY2sKKy0tLS0tLS0tCitGb3IgaW5zdGFuY2UgdGhlIHBsYXliYWNrIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgdG8gaGF2ZSBtYXguIDQKK3N1YnN0cmVhbXMgcGVyZm9ybWluZyBoYXJkd2FyZSBtaXhpbmcuIFRoaXMgY291bGQgYmUgY2hhbmdlZCB0byBhCittYXhpbXVtIG9mIDI0IHN1YnN0cmVhbXMgaWYgd2lzaGVkLgorTW9ubyBmaWxlcyB3aWxsIGJlIHBsYXllZCBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbC4gRWFjaCBjaGFubmVsCitjYW4gYmUgbXV0ZWQgZm9yIGVhY2ggc3RyZWFtIHRvIHVzZSA4IGFuYWxvZy9kaWdpdGFsIG91dHB1dHMgc2VwZXJhdGVseS4KKworQ2FwdHVyZQorLS0tLS0tLQorVGhlcmUgaXMgb25lIHN1YnN0cmVhbSBwZXIgY2FwdHVyZSBkZXZpY2UuIEZvciBpbnN0YW5jZSBvbmx5IHN0ZXJlbworZm9ybWF0cyBhcmUgc3VwcG9ydGVkLgorCitNaXhlcgorLS0tLS0KKzxNYXN0ZXI+IGFuZCA8TWFzdGVyIENhcHR1cmU+IDogYW5hbG9nIHZvbHVtZSBjb250cm9sIG9mIHBsYXliYWNrIGFuZCBjYXB0dXJlIFBDTS4KKzxQQ00gMC0zPiBhbmQgPFBDTSBDYXB0dXJlPiA6IGRpZ2l0YWwgdm9sdW1lIGNvbnRyb2wgb2YgZWFjaCBhbmFsb2cgc3Vic3RyZWFtLgorPEFFUyAwLTM+IGFuZCA8QUVTIENhcHR1cmU+IDogZGlnaXRhbCB2b2x1bWUgY29udHJvbCBvZiBlYWNoIEFFUy9FQlUgc3Vic3RyZWFtLgorPE1vbml0b3Jpbmc+IDogTG9vcGJhY2sgZnJvbSAncGNtMGMnIHRvICdwY20wcCcgd2l0aCBkaWdpdGFsIHZvbHVtZQorYW5kIG11dGUgY29udHJvbC4KKworUmVtIDogZm9yIGJlc3QgYXVkaW8gcXVhbGl0eSB0cnkgdG8ga2VlcCBhIDAgYXR0ZW51YXRpb24gb24gdGhlIFBDTQorYW5kIEFFUyB2b2x1bWUgY29udHJvbHMgd2hpY2ggaXMgc2V0IGJ5IDIxOSBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvIDI1NQorKGFib3V0IDg2JSB3aXRoIGFsc2FtaXhlcikKKworCitOT1QgWUVUIElNUExFTUVOVEVECis9PT09PT09PT09PT09PT09PT09CisKKy0gZXh0ZXJuYWwgY2xvY2sgc3VwcG9ydCAoQUVTL0VCVSwgV29yZCBDbG9jaywgVGltZSBDb2RlLCBWaWRlbyBTeW5jKQorLSBNUEVHIGF1ZGlvIGZvcm1hdHMKKy0gbW9ubyByZWNvcmQKKy0gb24tYm9hcmQgZWZmZWN0cyBhbmQgc2FtcGxlcmF0ZSBjb252ZXJzaW9ucworLSBsaW5rZWQgc3RyZWFtcworCisKK0ZJUk1XQVJFCis9PT09PT09PQorCitbQXMgb2YgMi42LjExLCB0aGUgZmlybXdhcmUgY2FuIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5IHdpdGggaG90cGx1ZworIHdoZW4gQ09ORklHX0ZXX0xPQURFUiBpcyBzZXQuICBUaGUgbWl4YXJ0bG9hZGVyIGlzIG5lY2Vzc2FyeSBvbmx5CisgZm9yIG9sZGVyIHZlcnNpb25zIG9yIHdoZW4geW91IGJ1aWxkIHRoZSBkcml2ZXIgaW50byBrZXJuZWwuXQorIAorRm9yIGxvYWRpbmcgdGhlIGZpcm13YXJlIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIG1vZHVsZSBpcyBsb2FkZWQsIHVzZQordGhlIHBvc3QtaW5zdGFsbCBjb21tYW5kLiAgRm9yIGV4YW1wbGUsIGFkZCB0aGUgZm9sbG93aW5nIGVudHJ5IHRvCisvZXRjL21vZHByb2JlLmNvbmYgZm9yIG1pWGFydCBkcml2ZXI6CisKKwlpbnN0YWxsIHNuZC1taXhhcnQgL3NiaW4vbW9kcHJvYmUgLS1maXJzdC10aW1lIC1pIHNuZC1taXhhcnQgJiYgXAorCQkJICAgL3Vzci9iaW4vbWl4YXJ0bG9hZGVyCisoZm9yIDIuMi8yLjQga2VybmVscywgYWRkICJwb3N0LWluc3RhbGwgc25kLW1peGFydCAvdXNyL2Jpbi92eGxvYWRlciIgdG8KKyAvZXRjL21vZHVsZXMuY29uZiwgaW5zdGVhZC4pCisKK1RoZSBmaXJtd2FyZSBiaW5hcmllcyBhcmUgaW5zdGFsbGVkIG9uIC91c3Ivc2hhcmUvYWxzYS9maXJtd2FyZQorKG9yIC91c3IvbG9jYWwvc2hhcmUvYWxzYS9maXJtd2FyZSwgZGVwZW5kaW5nIHRvIHRoZSBwcmVmaXggb3B0aW9uIG9mCitjb25maWd1cmUpLiAgVGhlcmUgd2lsbCBiZSBhIG1pWGFydC5jb25mIGZpbGUsIHdoaWNoIGRlZmluZSB0aGUgZHNwIGltYWdlCitmaWxlcy4KKworVGhlIGZpcm13YXJlIGZpbGVzIGFyZSBjb3B5cmlnaHQgYnkgRGlnaWdyYW0gU0EKKworCitDT1BZUklHSFQKKz09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDIwMDMgRGlnaWdyYW0gU0EgPGFsc2FAZGlnaWdyYW0uY29tPgorRGlzdHJpYnV0YWxiZSB1bmRlciBHUEwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvT1NTLUVtdWxhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvT1NTLUVtdWxhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyYTAyNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9PU1MtRW11bGF0aW9uLnR4dApAQCAtMCwwICsxLDI5NyBAQAorCQlOT1RFUyBPTiBLRVJORUwgT1NTLUVNVUxBVElPTgorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJCUphbi4gMjIsIDIwMDQgIFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKworCitNb2R1bGVzCis9PT09PT09CisKK0FMU0EgcHJvdmlkZXMgYSBwb3dlcmZ1bCBPU1MgZW11bGF0aW9uIG9uIHRoZSBrZXJuZWwuCitUaGUgT1NTIGVtdWxhdGlvbiBmb3IgUENNLCBtaXhlciBhbmQgc2VxdWVuY2VyIGRldmljZXMgaXMgaW1wbGVtZW50ZWQKK2FzIGFkZC1vbiBrZXJuZWwgbW9kdWxlcywgc25kLXBjbS1vc3MsIHNuZC1taXhlci1vc3MgYW5kIHNuZC1zZXEtb3NzLgorV2hlbiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIE9TUyBQQ00sIG1peGVyIG9yIHNlcXVlbmNlciBkZXZpY2VzLCB0aGUKK2NvcnJlc3BvbmRpbmcgbW9kdWxlIGhhcyB0byBiZSBsb2FkZWQuCisKK1RoZXNlIG1vZHVsZXMgYXJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgc2VydmljZQoraXMgY2FsbGVkLiAgVGhlIGFsaWFzIGlzIGRlZmluZWQgc291bmQtc2VydmljZS14LXksIHdoZXJlIHggYW5kIHkgYXJlCit0aGUgY2FyZCBudW1iZXIgYW5kIHRoZSBtaW5vciB1bml0IG51bWJlci4gIFVzdWFsbHkgeW91IGRvbid0IGhhdmUgdG8KK2RlZmluZSB0aGVzZSBhbGlhc2VzIGJ5IHlvdXJzZWxmLgorCitPbmx5IG5lY2Vzc2FyeSBzdGVwIGZvciBhdXRvLWxvYWRpbmcgb2YgT1NTIG1vZHVsZXMgaXMgdG8gZGVmaW5lIHRoZQorY2FyZCBhbGlhcyBpbiAvZXRjL21vZHByb2JlLmNvbmYsIHN1Y2ggYXMKKworCWFsaWFzIHNvdW5kLXNsb3QtMCBzbmQtZW11MTBrMQorCitBcyB0aGUgc2Vjb25kIGNhcmQsIGRlZmluZSBzb3VuZC1zbG90LTEgYXMgd2VsbC4KK05vdGUgdGhhdCB5b3UgY2FuJ3QgdXNlIHRoZSBhbGlhc2VkIG5hbWUgYXMgdGhlIHRhcmdldCBuYW1lIChpLmUuCisiYWxpYXMgc291bmQtc2xvdC0wIHNuZC1jYXJkLTAiIGRvZXNuJ3Qgd29yayBhbnkgbW9yZSBsaWtlIHRoZSBvbGQKK21vZHV0aWxzKS4KKworVGhlIGN1cnJlbnRseSBhdmFpbGFibGUgT1NTIGNvbmZpZ3VyYXRpb24gaXMgc2hvd24gaW4KKy9wcm9jL2Fzb3VuZC9vc3Mvc25kc3RhdC4gIFRoaXMgc2hvd3MgaW4gdGhlIHNhbWUgc3ludGF4IG9mCisvZGV2L3NuZHN0YXQsIHdoaWNoIGlzIGF2YWlsYWJsZSBvbiB0aGUgY29tbWVyY2lhbCBPU1MgZHJpdmVyLgorT24gQUxTQSwgeW91IGNhbiBzeW1saW5rIC9kZXYvc25kc3RhdCB0byB0aGlzIHByb2MgZmlsZS4KKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgZGV2aWNlcyBsaXN0ZWQgaW4gdGhpcyBwcm9jIGZpbGUgYXBwZWFyIG9ubHkKK2FmdGVyIHRoZSBjb3JyZXNwb25kaW5nIE9TUy1lbXVsYXRpb24gbW9kdWxlIGlzIGxvYWRlZC4gIERvbid0IHdvcnJ5CitldmVuIGlmICJOT1QgRU5BQkxFRCBJTiBDT05GSUciIGlzIHNob3duIGluIGl0LgorCisKK0RldmljZSBNYXBwaW5nCis9PT09PT09PT09PT09PQorCitBTFNBIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgT1NTIGRldmljZSBmaWxlczoKKworCVBDTToKKwkJL2Rldi9kc3BYCisJCS9kZXYvYWRzcFgKKworCU1peGVyOgorCQkvZGV2L21peGVyWAorCisJTUlESToKKwkJL2Rldi9taWRpMFgKKwkJL2Rldi9hbWlkaTBYCisKKwlTZXF1ZW5jZXI6CisJCS9kZXYvc2VxdWVuY2VyCisJCS9kZXYvc2VxdWVuY2VyMiAoYWthIC9kZXYvbXVzaWMpCisKK3doZXJlIFggaXMgdGhlIGNhcmQgbnVtYmVyIGZyb20gMCB0byA3LgorCisoTk9URTogU29tZSBkaXN0cmlidXRpb25zIGhhdmUgdGhlIGRldmljZSBmaWxlcyBsaWtlIC9kZXYvbWlkaTAgYW5kCisgICAgICAgL2Rldi9taWRpMS4gIFRoZXkgYXJlIE5PVCBmb3IgT1NTIGJ1dCBmb3IgdGNsbWlkaSwgd2hpY2ggaXMKKyAgICAgICBhIHRvdGFsbHkgZGlmZmVyZW50IHRoaW5nLikKKworVW5saWtlIHRoZSByZWFsIE9TUywgQUxTQSBjYW5ub3QgdXNlIHRoZSBkZXZpY2UgZmlsZXMgbW9yZSB0aGFuIHRoZQorYXNzaWduZWQgb25lcy4gIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgY2FyZCBjYW5ub3QgdXNlIC9kZXYvZHNwMSBvcgorL2Rldi9kc3AyLCBidXQgb25seSAvZGV2L2RzcDAgYW5kIC9kZXYvYWRzcDAuCisKK0FzIHNlZW4gYWJvdmUsIFBDTSBhbmQgTUlESSBtYXkgaGF2ZSB0d28gZGV2aWNlcy4gIFVzdWFsbHksIHRoZSBmaXJzdAorUENNIGRldmljZSAoaHc6MCwwIGluIEFMU0EpIGlzIG1hcHBlZCB0byAvZGV2L2RzcCBhbmQgdGhlIHNlY29uZGFyeQorZGV2aWNlIChodzowLDEpIHRvIC9kZXYvYWRzcCAoaWYgYXZhaWxhYmxlKS4gIEZvciBNSURJLCAvZGV2L21pZGkgYW5kCisvZGV2L2FtaWRpLCByZXNwZWN0aXZlbHkuCisKK1lvdSBjYW4gY2hhbmdlIHRoaXMgZGV2aWNlIG1hcHBpbmcgdmlhIHRoZSBtb2R1bGUgb3B0aW9ucyBvZgorc25kLXBjbS1vc3MgYW5kIHNuZC1yYXdtaWRpLiAgSW4gdGhlIGNhc2Ugb2YgUENNLCB0aGUgZm9sbG93aW5nCitvcHRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHNuZC1wY20tb3NzOgorCisJZHNwX21hcAkJUENNIGRldmljZSBudW1iZXIgYXNzaWduZWQgdG8gL2Rldi9kc3BYCisJCQkoZGVmYXVsdCA9IDApCisJYWRzcF9tYXAJUENNIGRldmljZSBudW1iZXIgYXNzaWduZWQgdG8gL2Rldi9hZHNwWAorCQkJKGRlZmF1bHQgPSAxKQorCitGb3IgZXhhbXBsZSwgdG8gbWFwIHRoZSB0aGlyZCBQQ00gZGV2aWNlIChodzowLDIpIHRvIC9kZXYvYWRzcDAsCitkZWZpbmUgbGlrZSB0aGlzOgorCisJb3B0aW9ucyBzbmQtcGNtLW9zcyBhZHNwX21hcD0yCisKK1RoZSBvcHRpb25zIHRha2UgYXJyYXlzLiAgRm9yIGNvbmZpZ3VyaW5nIHRoZSBzZWNvbmQgY2FyZCwgc3BlY2lmeQordHdvIGVudHJpZXMgc2VwYXJhdGVkIGJ5IGNvbW1hLiAgRm9yIGV4YW1wbGUsIHRvIG1hcCB0aGUgdGhpcmQgUENNCitkZXZpY2Ugb24gdGhlIHNlY29uZCBjYXJkIHRvIC9kZXYvYWRzcDEsIGRlZmluZSBsaWtlIGJlbG93OgorCisJb3B0aW9ucyBzbmQtcGNtLW9zcyBhZHNwX21hcD0wLDIKKworVG8gY2hhbmdlIHRoZSBtYXBwaW5nIG9mIE1JREkgZGV2aWNlcywgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZQorYXZhaWxhYmxlIGZvciBzbmQtcmF3bWlkaToKKworCW1pZGlfbWFwCU1JREkgZGV2aWNlIG51bWJlciBhc3NpZ25lZCB0byAvZGV2L21pZGkwWAorCQkJKGRlZmF1bHQgPSAwKQorCWFtaWRpX21hcAlNSURJIGRldmljZSBudW1iZXIgYXNzaWduZWQgdG8gL2Rldi9hbWlkaTBYCisJCQkoZGVmYXVsdCA9IDEpCisKK0ZvciBleGFtcGxlLCB0byBhc3NpZ24gdGhlIHRoaXJkIE1JREkgZGV2aWNlIG9uIHRoZSBmaXJzdCBjYXJkIHRvCisvZGV2L21pZGkwMCwgZGVmaW5lIGFzIGZvbGxvd3M6CisKKwlvcHRpb25zIHNuZC1yYXdtaWRpIG1pZGlfbWFwPTIKKworCitQQ00gTW9kZQorPT09PT09PT0KKworQXMgZGVmYXVsdCwgQUxTQSBlbXVsYXRlcyB0aGUgT1NTIFBDTSB3aXRoIHNvLWNhbGxlZCBwbHVnaW4gbGF5ZXIsCitpLmUuIHRyaWVzIHRvIGNvbnZlcnQgdGhlIHNhbXBsZSBmb3JtYXQsIHJhdGUgb3IgY2hhbm5lbHMKK2F1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY2FyZCBkb2Vzbid0IHN1cHBvcnQgaXQgbmF0aXZlbHkuCitUaGlzIHdpbGwgbGVhZCB0byBzb21lIHByb2JsZW1zIGZvciBzb21lIGFwcGxpY2F0aW9ucyBsaWtlIHF1YWtlIG9yCit3aW5lLCBlc3BlY2lhbGx5IGlmIHRoZXkgdXNlIHRoZSBjYXJkIG9ubHkgaW4gdGhlIE1NQVAgbW9kZS4KKworSW4gc3VjaCBhIGNhc2UsIHlvdSBjYW4gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBQQ00gcGVyIGFwcGxpY2F0aW9uIGJ5Cit3cml0aW5nIGEgY29tbWFuZCB0byB0aGUgcHJvYyBmaWxlLiAgVGhlcmUgaXMgYSBwcm9jIGZpbGUgZm9yIGVhY2ggUENNCitzdHJlYW0sIC9wcm9jL2Fzb3VuZC9jYXJkWC9wY21ZW2NwXS9vc3MsIHdoZXJlIFggaXMgdGhlIGNhcmQgbnVtYmVyCisoemVyby1iYXNlZCksIFkgdGhlIFBDTSBkZXZpY2UgbnVtYmVyICh6ZXJvLWJhc2VkKSwgYW5kICdwJyBpcyBmb3IKK3BsYXliYWNrIGFuZCAnYycgZm9yIGNhcHR1cmUsIHJlc3BlY3RpdmVseS4gIE5vdGUgdGhhdCB0aGlzIHByb2MgZmlsZQorZXhpc3RzIG9ubHkgYWZ0ZXIgc25kLXBjbS1vc3MgbW9kdWxlIGlzIGxvYWRlZC4KKworVGhlIGNvbW1hbmQgc2VxdWVuY2UgaGFzIHRoZSBmb2xsb3dpbmcgc3ludGF4OgorCisJYXBwX25hbWUgZnJhZ21lbnRzIGZyYWdtZW50X3NpemUgW29wdGlvbnNdCisKK2FwcF9uYW1lIGlzIHRoZSBuYW1lIG9mIGFwcGxpY2F0aW9uIHdpdGggKGhpZ2hlciBwcmlvcml0eSkgb3Igd2l0aG91dAorcGF0aC4KK2ZyYWdtZW50cyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBmcmFnbWVudHMgb3IgemVybyBpZiBubyBzcGVjaWZpYworbnVtYmVyIGlzIGdpdmVuLgorZnJhZ21lbnRfc2l6ZSBpcyB0aGUgc2l6ZSBvZiBmcmFnbWVudCBpbiBieXRlcyBvciB6ZXJvIGlmIG5vdCBnaXZlbi4KK29wdGlvbnMgaXMgdGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMuICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlCithdmFpbGFibGU6CisKKwlkaXNhYmxlCQl0aGUgYXBwbGljYXRpb24gdHJpZXMgdG8gb3BlbiBhIHBjbSBkZXZpY2UgZm9yCisJCQl0aGlzIGNoYW5uZWwgYnV0IGRvZXMgbm90IHdhbnQgdG8gdXNlIGl0LgorCWRpcmVjdAkJZG9uJ3QgdXNlIHBsdWdpbnMKKwlibG9jawkJZm9yY2UgYmxvY2sgb3BlbiBtb2RlCisJbm9uLWJsb2NrCWZvcmNlIG5vbi1ibG9jayBvcGVuIG1vZGUKKwlwYXJ0aWFsLWZyYWcJd3JpdGUgYWxzbyBwYXJ0aWFsIGZyYWdtZW50cyAoYWZmZWN0cyBwbGF5YmFjayBvbmx5KQorCW5vLXNpbGVuY2UJZG8gbm90IGZpbGwgc2lsZW5jZSBhaGVhZCB0byBhdm9pZCBjbGlja3MKKworVGhlIGRpc2FibGUgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIG9uZSBzdHJlYW0gZGlyZWN0aW9uIChwbGF5YmFjayBvcgorY2FwdHVyZSkgaXMgbm90IGhhbmRsZWQgY29ycmVjdGx5IGJ5IHRoZSBhcHBsaWNhdGlvbiBhbHRob3VnaCB0aGUKK2hhcmR3YXJlIGl0c2VsZiBkb2VzIHN1cHBvcnQgYm90aCBkaXJlY3Rpb25zLgorVGhlIGRpcmVjdCBvcHRpb24gaXMgdXNlZCwgYXMgbWVudGlvbmVkIGFib3ZlLCB0byBieXBhc3MgdGhlIGF1dG9tYXRpYworY29udmVyc2lvbiBhbmQgdXNlZnVsIGZvciBNTUFQLWFwcGxpY2F0aW9ucy4KK0ZvciBleGFtcGxlLCB0byBwbGF5YmFjayB0aGUgZmlyc3QgUENNIGRldmljZSB3aXRob3V0IHBsdWdpbnMgZm9yCitxdWFrZSwgc2VuZCBhIGNvbW1hbmQgdmlhIGVjaG8gbGlrZSB0aGUgZm9sbG93aW5nOgorCisJJSBlY2hvICJxdWFrZSAwIDAgZGlyZWN0IiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wcC9vc3MKKworV2hpbGUgcXVha2Ugd2FudHMgb25seSBwbGF5YmFjaywgeW91IG1heSBhcHBlbmQgdGhlIHNlY29uZCBjb21tYW5kCit0byBub3RpZnkgZHJpdmVyIHRoYXQgb25seSB0aGlzIGRpcmVjdGlvbiBpcyBhYm91dCB0byBiZSBhbGxvY2F0ZWQ6CisKKwklIGVjaG8gInF1YWtlIDAgMCBkaXNhYmxlIiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wYy9vc3MKKworVGhlIHBlcm1pc3Npb24gb2YgcHJvYyBmaWxlcyBkZXBlbmQgb24gdGhlIG1vZHVsZSBvcHRpb25zIG9mIHNuZC4KK0FzIGRlZmF1bHQgaXQncyBzZXQgYXMgcm9vdCwgc28geW91J2xsIGxpa2VseSBuZWVkIHRvIGJlIHN1cGVydXNlciBmb3IKK3NlbmRpbmcgdGhlIGNvbW1hbmQgYWJvdmUuCisKK1RoZSBibG9jayBhbmQgbm9uLWJsb2NrIG9wdGlvbnMgYXJlIHVzZWQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorb3BlbmluZyB0aGUgZGV2aWNlIGZpbGUuCisKK0FzIGRlZmF1bHQsIEFMU0EgYmVoYXZlcyBhcyBvcmlnaW5hbCBPU1MgZHJpdmVycywgaS5lLiBkb2VzIG5vdCBibG9jawordGhlIGZpbGUgd2hlbiBpdCdzIGJ1c3kuIFRoZSAtRUJVU1kgZXJyb3IgaXMgcmV0dXJuZWQgaW4gdGhpcyBjYXNlLgorCitUaGlzIGJsb2NraW5nIGJlaGF2aW9yIGNhbiBiZSBjaGFuZ2VkIGdsb2JhbGx5IHZpYSBub25ibG9ja19vcGVuCittb2R1bGUgb3B0aW9uIG9mIHNuZC1wY20tb3NzLiAgRm9yIHVzaW5nIHRoZSBibG9ja2luZyBtb2RlIGFzIGRlZmF1bHQKK2ZvciBPU1MgZGV2aWNlcywgZGVmaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKworCW9wdGlvbnMgc25kLXBjbS1vc3Mgbm9uYmxvY2tfb3Blbj0wCisKK1RoZSBwYXJ0aWFsLWZyYWcgYW5kIG5vLXNpbGVuY2UgY29tbWFuZHMgaGF2ZSBiZWVuIGFkZGVkIHJlY2VudGx5LgorQm90aCBjb21tYW5kcyBhcmUgZm9yIG9wdGltaXphdGlvbiB1c2Ugb25seS4gIFRoZSBmb3JtZXIgY29tbWFuZAorc3BlY2lmaWVzIHRvIGludm9rZSB0aGUgd3JpdGUgdHJhbnNmZXIgb25seSB3aGVuIHRoZSB3aG9sZSBmcmFnbWVudCBpcworZmlsbGVkLiAgVGhlIGxhdHRlciBzdG9wcyB3cml0aW5nIHRoZSBzaWxlbmNlIGRhdGEgYWhlYWQKK2F1dG9tYXRpY2FsbHkuICBCb3RoIGFyZSBkaXNhYmxlZCBhcyBkZWZhdWx0LgorCitZb3UgY2FuIGNoZWNrIHRoZSBjdXJyZW50bHkgZGVmaW5lZCBjb25maWd1cmF0aW9uIGJ5IHJlYWRpbmcgdGhlIHByb2MKK2ZpbGUuICBUaGUgcmVhZCBpbWFnZSBjYW4gYmUgc2VudCB0byB0aGUgcHJvYyBmaWxlIGFnYWluLCBoZW5jZSB5b3UKK2NhbiBzYXZlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKworCSUgY2F0IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wcC9vc3MgPiAvc29tZXdoZXJlL29zcy1jZmcKKworYW5kIHJlc3RvcmUgaXQgbGlrZQorCisJJSBjYXQgL3NvbWV3aGVyZS9vc3MtY2ZnID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL29zcworCitBbHNvLCBmb3IgY2xlYXJpbmcgYWxsIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHNlbmQgImVyYXNlIiBjb21tYW5kCithcyBiZWxvdzoKKworCSUgZWNobyAiZXJhc2UiID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL29zcworCisKK01peGVyIEVsZW1lbnRzCis9PT09PT09PT09PT09PQorCitTaW5jZSBBTFNBIGhhcyBjb21wbGV0ZWx5IGRpZmZlcmVudCBtaXhlciBpbnRlcmZhY2UsIHRoZSBlbXVsYXRpb24gb2YKK09TUyBtaXhlciBpcyByZWxhdGl2ZWx5IGNvbXBsaWNhdGVkLiAgQUxTQSBidWlsZHMgdXAgYSBtaXhlciBlbGVtZW50Citmcm9tIHNldmVyYWwgZGlmZmVyZW50IEFMU0EgKG1peGVyKSBjb250cm9scyBiYXNlZCBvbiB0aGUgbmFtZQorc3RyaW5nLiAgRm9yIGV4YW1wbGUsIHRoZSB2b2x1bWUgZWxlbWVudCBTT1VORF9NSVhFUl9QQ00gaXMgY29tcG9zZWQKK2Zyb20gIlBDTSBQbGF5YmFjayBWb2x1bWUiIGFuZCAiUENNIFBsYXliYWNrIFN3aXRjaCIgY29udHJvbHMgZm9yIHRoZQorcGxheWJhY2sgZGlyZWN0aW9uIGFuZCBmcm9tICJQQ00gQ2FwdHVyZSBWb2x1bWUiIGFuZCAiUENNIENhcHR1cmUKK1N3aXRjaCIgZm9yIHRoZSBjYXB0dXJlIGRpcmVjdG9yeSAoaWYgZXhpc3RzKS4gIFdoZW4gdGhlIFBDTSB2b2x1bWUgb2YKK09TUyBpcyBjaGFuZ2VkLCBhbGwgdGhlIHZvbHVtZSBhbmQgc3dpdGNoIGNvbnRyb2xzIGFib3ZlIGFyZSBhZGp1c3RlZAorYXV0b21hdGljYWxseS4KKworQXMgZGVmYXVsdCwgQUxTQSB1c2VzIHRoZSBmb2xsb3dpbmcgY29udHJvbCBmb3IgT1NTIHZvbHVtZXM6CisKKwlPU1Mgdm9sdW1lCQlBTFNBIGNvbnRyb2wJCUluZGV4CisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTT1VORF9NSVhFUl9WT0xVTUUgCU1hc3RlcgkJCTAKKwlTT1VORF9NSVhFUl9CQVNTCVRvbmUgQ29udHJvbCAtIEJhc3MJMAorCVNPVU5EX01JWEVSX1RSRUJMRQlUb25lIENvbnRyb2wgLSBUcmVibGUJMAorCVNPVU5EX01JWEVSX1NZTlRICVN5bnRoCQkJMAorCVNPVU5EX01JWEVSX1BDTQkJUENNCQkJMAorCVNPVU5EX01JWEVSX1NQRUFLRVIJUEMgU3BlYWtlciAJCTAKKwlTT1VORF9NSVhFUl9MSU5FCUxpbmUJCQkwCisJU09VTkRfTUlYRVJfTUlDCQlNaWMgCQkJMAorCVNPVU5EX01JWEVSX0NECQlDRCAJCQkwCisJU09VTkRfTUlYRVJfSU1JWAlNb25pdG9yIE1peCAJCTAKKwlTT1VORF9NSVhFUl9BTFRQQ00JUENNCQkJMQorCVNPVU5EX01JWEVSX1JFQ0xFVgkobm90IGFzc2lnbmVkKQorCVNPVU5EX01JWEVSX0lHQUlOCUNhcHR1cmUJCQkwCisJU09VTkRfTUlYRVJfT0dBSU4JUGxheWJhY2sJCTAKKwlTT1VORF9NSVhFUl9MSU5FMQlBdXgJCQkwCisJU09VTkRfTUlYRVJfTElORTIJQXV4CQkJMQorCVNPVU5EX01JWEVSX0xJTkUzCUF1eAkJCTIKKwlTT1VORF9NSVhFUl9ESUdJVEFMMQlEaWdpdGFsCQkJMAorCVNPVU5EX01JWEVSX0RJR0lUQUwyCURpZ2l0YWwJCQkxCisJU09VTkRfTUlYRVJfRElHSVRBTDMJRGlnaXRhbAkJCTIKKwlTT1VORF9NSVhFUl9QSE9ORUlOCVBob25lCQkJMAorCVNPVU5EX01JWEVSX1BIT05FT1VUCVBob25lCQkJMQorCVNPVU5EX01JWEVSX1ZJREVPCVZpZGVvCQkJMAorCVNPVU5EX01JWEVSX1JBRElPCVJhZGlvCQkJMAorCVNPVU5EX01JWEVSX01PTklUT1IJTW9uaXRvcgkJCTAKKworVGhlIHNlY29uZCBjb2x1bW4gaXMgdGhlIGJhc2Utc3RyaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIEFMU0EKK2NvbnRyb2wuICBJbiBmYWN0LCB0aGUgY29udHJvbHMgd2l0aCAiWFhYIFtQbGF5YmFja3xDYXB0dXJlXQorW1ZvbHVtZXxTd2l0Y2hdIiB3aWxsIGJlIGNoZWNrZWQgaW4gYWRkaXRpb24uCisKK1RoZSBjdXJyZW50IGFzc2lnbm1lbnQgb2YgdGhlc2UgbWl4ZXIgZWxlbWVudHMgaXMgbGlzdGVkIGluIHRoZSBwcm9jCitmaWxlLCAvcHJvYy9hc291bmQvY2FyZFgvb3NzX21peGVyLCB3aGljaCB3aWxsIGJlIGxpa2UgdGhlIGZvbGxvd2luZworCisJVk9MVU1FICJNYXN0ZXIiIDAKKwlCQVNTICIiIDAKKwlUUkVCTEUgIiIgMAorCVNZTlRIICIiIDAKKwlQQ00gIlBDTSIgMAorCS4uLgorCit3aGVyZSB0aGUgZmlyc3QgY29sdW1uIGlzIHRoZSBPU1Mgdm9sdW1lIGVsZW1lbnQsIHRoZSBzZWNvbmQgY29sdW1uCit0aGUgYmFzZS1zdHJpbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgQUxTQSBjb250cm9sLCBhbmQgdGhlIHRoaXJkIHRoZQorY29udHJvbCBpbmRleC4gIFdoZW4gdGhlIHN0cmluZyBpcyBlbXB0eSwgaXQgbWVhbnMgdGhhdCB0aGUKK2NvcnJlc3BvbmRpbmcgT1NTIGNvbnRyb2wgaXMgbm90IGF2YWlsYWJsZS4KKworRm9yIGNoYW5naW5nIHRoZSBhc3NpZ25tZW50LCB5b3UgY2FuIHdyaXRlIHRoZSBjb25maWd1cmF0aW9uIHRvIHRoaXMKK3Byb2MgZmlsZS4gIEZvciBleGFtcGxlLCB0byBtYXAgIldhdmUgUGxheWJhY2siIHRvIHRoZSBQQ00gdm9sdW1lLAorc2VuZCB0aGUgY29tbWFuZCBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKwklIGVjaG8gJ1ZPTFVNRSAiV2F2ZSBQbGF5YmFjayIgMCcgPiAvcHJvYy9hc291bmQvY2FyZDAvb3NzX21peGVyCisKK1RoZSBjb21tYW5kIGlzIGV4YWN0bHkgYXMgc2FtZSBhcyBsaXN0ZWQgaW4gdGhlIHByb2MgZmlsZS4gIFlvdSBjYW4KK2NoYW5nZSBvbmUgb3IgbW9yZSBlbGVtZW50cywgb25lIHZvbHVtZSBwZXIgbGluZS4gIEluIHRoZSBsYXN0CitleGFtcGxlLCBib3RoICJXYXZlIFBsYXliYWNrIFZvbHVtZSIgYW5kICJXYXZlIFBsYXliYWNrIFN3aXRjaCIgd2lsbAorYmUgYWZmZWN0ZWQgd2hlbiBQQ00gdm9sdW1lIGlzIGNoYW5nZWQuCisKK0xpa2UgdGhlIGNhc2Ugb2YgUENNIHByb2MgZmlsZSwgdGhlIHBlcm1pc3Npb24gb2YgcHJvYyBmaWxlcyBkZXBlbmQgb24KK3RoZSBtb2R1bGUgb3B0aW9ucyBvZiBzbmQuICB5b3UnbGwgbGlrZWx5IG5lZWQgdG8gYmUgc3VwZXJ1c2VyIGZvcgorc2VuZGluZyB0aGUgY29tbWFuZCBhYm92ZS4KKworQXMgd2VsbCBhcyBpbiB0aGUgY2FzZSBvZiBQQ00gcHJvYyBmaWxlLCB5b3UgY2FuIHNhdmUgYW5kIHJlc3RvcmUgdGhlCitjdXJyZW50IG1peGVyIGNvbmZpZ3VyYXRpb24gYnkgcmVhZGluZyBhbmQgd3JpdGluZyB0aGUgd2hvbGUgZmlsZQoraW1hZ2UuCisKKworVW5zdXBwb3J0ZWQgRmVhdHVyZXMKKz09PT09PT09PT09PT09PT09PT09CisKK01NQVAgb24gSUNFMTcxMiBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lDRTE3MTIgc3VwcG9ydHMgb25seSB0aGUgdW5jb252ZW50aW9uYWwgZm9ybWF0LCBpbnRlcmxlYXZlZAorMTAtY2hhbm5lbHMgMjRiaXQgKHBhY2tlZCBpbiAzMmJpdCkgZm9ybWF0LiAgVGhlcmVmb3JlIHlvdSBjYW5ub3QgbW1hcAordGhlIGJ1ZmZlciBhcyB0aGUgY29udmVudGlvbmFsIChtb25vIG9yIDItY2hhbm5lbHMsIDggb3IgMTZiaXQpIGZvcm1hdAorb24gT1NTLgorCitVU0IgZGV2aWNlcworLS0tLS0tLS0tLS0KK1NvbWUgVVNCIGRldmljZXMgc3VwcG9ydCBvbmx5IDI0Yml0IGZvcm1hdCBwYWNrZWQgaW4gM2J5dGVzLiAgVGhpcworZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgT1NTIGFuZCBubyBjb252ZXJzaW9uIGlzIHByb3ZpZGVkIGJ5IGtlcm5lbAorT1NTIGVtdWxhdGlvbi4gIFlvdSBjYW4gdXNlIHRoZSB1c2VyLXNwYWNlIE9TUyBlbXVsYXRpb24gdmlhIGxpYmFvc3MKK2luc3RlYWQuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Qcm9jZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvUHJvY2ZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YzVkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvUHJvY2ZpbGUudHh0CkBAIC0wLDAgKzEsMTkxIEBACisJCVByb2MgRmlsZXMgb2YgQUxTQSBEcml2ZXJzCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCVRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKworR2VuZXJhbAorLS0tLS0tLQorCitBTFNBIGhhcyBpdHMgb3duIHByb2MgdHJlZSwgL3Byb2MvYXNvdW5kLiAgTWFueSB1c2VmdWwgaW5mb3JtYXRpb24gYXJlCitmb3VuZCBpbiB0aGlzIHRyZWUuICBXaGVuIHlvdSBlbmNvdW50ZXIgYSBwcm9ibGVtIGFuZCBuZWVkIGRlYnVnZ2luZywKK2NoZWNrIHRoZSBmaWxlcyBsaXN0ZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKworRWFjaCBjYXJkIGhhcyBpdHMgc3VidHJlZSBjYXJkWCwgd2hlcmUgWCBpcyBmcm9tIDAgdG8gNy4gVGhlCitjYXJkLXNwZWNpZmljIGZpbGVzIGFyZSBzdG9yZWQgaW4gdGhlIGNhcmQqIHN1YmRpcmVjdG9yaWVzLgorCisKK0dsb2JhbCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NhcmRzCisJU2hvd3MgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGNvbmZpZ3VyZWQgQUxTQSBkcml2ZXJzLAorCWluZGV4LCB0aGUgaWQgc3RyaW5nLCBzaG9ydCBhbmQgbG9uZyBkZXNjcmlwdGlvbnMuCisKK3ZlcnNpb24KKwlTaG93cyB0aGUgdmVyc2lvbiBzdHJpbmcgYW5kIGNvbXBpbGUgZGF0ZS4KKworbW9kdWxlcworCUxpc3RzIHRoZSBtb2R1bGUgb2YgZWFjaCBjYXJkCisKK2RldmljZXMKKwlMaXN0cyB0aGUgQUxTQSBuYXRpdmUgZGV2aWNlIG1hcHBpbmdzLgorCittZW1pbmZvCisJU2hvd3MgdGhlIHN0YXR1cyBvZiBhbGxvY2F0ZWQgcGFnZXMgdmlhIEFMU0EgZHJpdmVycy4KKwlBcHBlYXJzIG9ubHkgd2hlbiBDT05GSUdfU05EX0RFQlVHPXkuCisKK2h3ZGVwCisJTGlzdHMgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgaHdkZXAgZGV2aWNlcyBpbiBmb3JtYXQgb2YKKwk8Y2FyZD4tPGRldmljZT46IDxuYW1lPgorCitwY20KKwlMaXN0cyB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBQQ00gZGV2aWNlcyBpbiBmb3JtYXQgb2YKKwk8Y2FyZD4tPGRldmljZT46IDxpZD46IDxuYW1lPiA6IDxzdWItc3RyZWFtcz4KKwordGltZXIKKwlMaXN0cyB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSB0aW1lciBkZXZpY2VzCisKKworb3NzL2RldmljZXMKKwlMaXN0cyB0aGUgT1NTIGRldmljZSBtYXBwaW5ncy4KKworb3NzL3NuZHN0YXQKKwlQcm92aWRlcyB0aGUgb3V0cHV0IGNvbXBhdGlibGUgd2l0aCAvZGV2L3NuZHN0YXQuCisJWW91IGNhbiBzeW1saW5rIHRoaXMgdG8gL2Rldi9zbmRzdGF0LgorCisKK0NhcmQgU3BlY2lmaWMgRmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhcmQtc3BlY2lmaWMgZmlsZXMgYXJlIGZvdW5kIGluIC9wcm9jL2Fzb3VuZC9jYXJkKiBkaXJlY3Rvcmllcy4KK1NvbWUgZHJpdmVycyAoZS5nLiBjbWlwY2kpIGhhdmUgdGhlaXIgb3duIHByb2MgZW50cmllcyBmb3IgdGhlCityZWdpc3RlciBkdW1wLCBldGMgKGUuZy4gL3Byb2MvYXNvdW5kL2NhcmQqL2NtaXBjaSBzaG93cyB0aGUgcmVnaXN0ZXIKK2R1bXApLiAgVGhlc2UgZmlsZXMgd291bGQgYmUgcmVhbGx5IGhlbHBmdWwgZm9yIGRlYnVnZ2luZy4KKworV2hlbiBQQ00gZGV2aWNlcyBhcmUgYXZhaWxhYmxlIG9uIHRoaXMgY2FyZCwgeW91IGNhbiBzZWUgZGlyZWN0b3JpZXMKK2xpa2UgcGNtMHAgb3IgcGNtMWMuICBUaGV5IGhvbGQgdGhlIFBDTSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBQQ00KK3N0cmVhbS4gIFRoZSBudW1iZXIgYWZ0ZXIgJ3BjbScgaXMgdGhlIFBDTSBkZXZpY2UgbnVtYmVyIGZyb20gMCwgYW5kCit0aGUgbGFzdCAncCcgb3IgJ2MnIG1lYW5zIHBsYXliYWNrIG9yIGNhcHR1cmUgZGlyZWN0aW9uLiAgVGhlIGZpbGVzIGluCit0aGlzIHN1YnRyZWUgaXMgZGVzY3JpYmVkIGxhdGVyLgorCitUaGUgc3RhdHVzIG9mIE1JREkgSS9PIGlzIGZvdW5kIGluIG1pZGkqIGZpbGVzLiAgSXQgc2hvd3MgdGhlIGRldmljZQorbmFtZSBhbmQgdGhlIHJlY2VpdmVkL3RyYW5zbWl0dGVkIGJ5dGVzIHRocm91Z2ggdGhlIE1JREkgZGV2aWNlLgorCitXaGVuIHRoZSBjYXJkIGlzIGVxdWlwcGVkIHdpdGggQUM5NyBjb2RlY3MsIHRoZXJlIGFyZSBjb2RlYzk3IyoKK3N1YmRpcmVjdG9yaWVzIChkZXNyaWJlZCBsYXRlcikuCisKK1doZW4gdGhlIE9TUyBtaXhlciBlbXVsYXRpb24gaXMgZW5hYmxlZCAoYW5kIHRoZSBtb2R1bGUgaXMgbG9hZGVkKSwKK29zc19taXhlciBmaWxlIGFwcGVhcnMgaGVyZSwgdG9vLiAgVGhpcyBzaG93cyB0aGUgY3VycmVudCBtYXBwaW5nIG9mCitPU1MgbWl4ZXIgZWxlbWVudHMgdG8gdGhlIEFMU0EgY29udHJvbCBlbGVtZW50cy4gIFlvdSBjYW4gY2hhbmdlIHRoZQorbWFwcGluZyBieSB3cml0aW5nIHRvIHRoaXMgZGV2aWNlLiAgUmVhZCBPU1MtRW11bGF0aW9uLnR4dCBmb3IKK2RldGFpbHMuCisKKworUENNIFByb2MgRmlsZXMKKy0tLS0tLS0tLS0tLS0tCisKK2NhcmQqL3BjbSovaW5mbworCVRoZSBnZW5lcmFsIGluZm9ybWF0aW9uIG9mIHRoaXMgUENNIGRldmljZTogY2FyZCAjLCBkZXZpY2UgIywKKwlzdWJzdHJlYW1zLCBldGMuCisKK2NhcmQqL3BjbSoveHJ1bl9kZWJ1ZworCVRoaXMgZmlsZSBhcHBlYXJzIHdoZW4gQ09ORklHX1NORF9ERUJVRz15LgorCVRoaXMgc2hvd3MgdGhlIHN0YXR1cyBvZiB4cnVuICg9IGJ1ZmZlciBvdmVycnVuL3hydW4pIGRlYnVnIG9mCisJQUxTQSBQQ00gbWlkZGxlIGxheWVyLCBhcyBhbiBpbnRlZ2VyIGZyb20gMCB0byAyLiAgVGhlIHZhbHVlCisJY2FuIGJlIGNoYW5nZWQgYnkgd3JpdGluZyB0byB0aGlzIGZpbGUsIHN1Y2ggYXMKKworCQkgIyBjYXQgMiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wcC94cnVuX2RlYnVnCisKKwlXaGVuIHRoaXMgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDAsIHRoZSBkcml2ZXIgd2lsbCBzaG93IHRoZQorCW1lc3NhZ2VzIHRvIGtlcm5lbCBsb2cgd2hlbiBhbiB4cnVuIGlzIGRldGVjdGVkLiAgVGhlIGRlYnVnCisJbWVzc2FnZSBpcyBzaG93biBhbHNvIHdoZW4gdGhlIGludmFsaWQgSC9XIHBvaW50ZXIgaXMgZGV0ZWN0ZWQKKwlhdCB0aGUgdXBkYXRlIG9mIHBlcmlvZHMgKHVzdWFsbHkgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdAorCWhhbmRsZXIpLgorCisJV2hlbiB0aGlzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGUgZHJpdmVyIHdpbGwgc2hvdyB0aGUKKwlzdGFjayB0cmFjZSBhZGRpdGlvbmFsbHkuICBUaGlzIG1heSBoZWxwIHRoZSBkZWJ1Z2dpbmcuCisKK2NhcmQqL3BjbSovc3ViKi9pbmZvCisJVGhlIGdlbmVyYWwgaW5mb3JtYXRpb24gb2YgdGhpcyBQQ00gc3ViLXN0cmVhbS4KKworY2FyZCovcGNtKi9zdWIqL3N0YXR1cworCVRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGlzIFBDTSBzdWItc3RyZWFtLCBlbGFwc2VkIHRpbWUsCisJSC9XIHBvc2l0aW9uLCBldGMuCisKK2NhcmQqL3BjbSovc3ViKi9od19wYXJhbXMKKwlUaGUgaGFyZHdhcmUgcGFyYW1ldGVycyBzZXQgZm9yIHRoaXMgc3ViLXN0cmVhbS4KKworY2FyZCovcGNtKi9zdWIqL3N3X3BhcmFtcworCVRoZSBzb2Z0IHBhcmFtZXRlcnMgc2V0IGZvciB0aGlzIHN1Yi1zdHJlYW0uCisKK2NhcmQqL3BjbSovc3ViKi9wcmVhbGxvYworCVRoZSBidWZmZXIgcHJlLWFsbG9jYXRpb24gaW5mb3JtYXRpb24uCisKKworQUM5NyBDb2RlYyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjYXJkKi9jb2RlYzk3IyovYWM5NyM/LT8KKwlTaG93cyB0aGUgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvZiB0aGlzIEFDOTcgY29kZWMgY2hpcCwgc3VjaCBhcworCW5hbWUsIGNhcGFiaWxpdGllcywgc2V0IHVwLgorCitjYXJkKi9jb2RlYzk3IzAvYWM5NyM/LT8rcmVncworCVNob3dzIHRoZSBBQzk3IHJlZ2lzdGVyIGR1bXAuICBVc2VmdWwgZm9yIGRlYnVnZ2luZy4KKworCVdoZW4gQ09ORklHX1NORF9ERUJVRyBpcyBlbmFibGVkLCB5b3UgY2FuIHdyaXRlIHRvIHRoaXMgZmlsZSBmb3IKKwljaGFuZ2luZyBhbiBBQzk3IHJlZ2lzdGVyIGRpcmVjdGx5LiAgUGFzcyB0d28gaGV4IG51bWJlcnMuCisJRm9yIGV4YW1wbGUsCisKKwkjIGVjaG8gMDIgOWYxZiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9jb2RlYzk3IzAvYWM5NyMwLTArcmVncworCisKK1NlcXVlbmNlciBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NlcS9kcml2ZXJzCisJTGlzdHMgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgQUxTQSBzZXF1ZW5jZXIgZHJpdmVycy4KKworc2VxL2NsaWVudHMKKwlTaG93cyB0aGUgbGlzdCBvZiBjdXJyZW50bHkgYXZhaWxhYmxlIHNlcXVlbmNlciBjbGluZXRzIGFuZAorCXBvcnRzLiAgVGhlIGNvbm5lY3Rpb24gc3RhdHVzIGFuZCB0aGUgcnVubmluZyBzdGF0dXMgYXJlIHNob3duCisJaW4gdGhpcyBmaWxlLCB0b28uCisKK3NlcS9xdWV1ZXMKKwlMaXN0cyB0aGUgY3VycmVudGx5IGFsbG9jYXRlZC9ydW5uaW5nIHNlcXVlbmVyIHF1ZXVlcy4KKworc2VxL3RpbWVyCisJTGlzdHMgdGhlIGN1cnJlbnRseSBhbGxvY2F0ZWQvcnVubmluZyBzZXF1ZW5jZXIgdGltZXJzLgorCitzZXEvb3NzCisJTGlzdHMgdGhlIE9TUy1jb21wYXRpYmxlIHNlcXVlbmNlciBzdHVmZnMuCisKKworSGVscCBGb3IgRGVidWdnaW5nPworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHRoZSBwcm9ibGVtIGlzIHJlbGF0ZWQgd2l0aCBQQ00sIGZpcnN0IHRyeSB0byB0dXJuIG9uIHhydW5fZGVidWcKK21vZGUuICBUaGlzIHdpbGwgZ2l2ZSB5b3UgdGhlIGtlcm5lbCBtZXNzYWdlcyB3aGVuIGFuZCB3aGVyZSB4cnVuCitoYXBwZW5lZC4KKworSWYgaXQncyByZWFsbHkgYSBidWcsIHJlcG9ydCBpdCB3aXRoIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24KKworICAtIHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIvY2FyZCwgc2hvdyBpbiAvcHJvYy9hc291bmQvY2FyZHMKKyAgLSB0aGUgcmVpZ3N0ZXIgZHVtcCwgaWYgYXZhaWxhYmxlIChlLmcuIGNhcmQqL2NtaXBjaSkKKword2hlbiBpdCdzIGEgUENNIHByb2JsZW0sCisKKyAgLSBzZXQtdXAgb2YgUENNLCBzaG93biBpbiBod19wYXJtcywgc3dfcGFyYW1zLCBhbmQgc3RhdHVzIGluIHRoZSBQQ00KKyAgICBzdWItc3RyZWFtIGRpcmVjdG9yeQorCit3aGVuIGl0J3MgYSBtaXhlciBwcm9ibGVtLAorCisgIC0gQUM5NyBwcm9jIGZpbGVzLCBjb2RlYzk3IyovKiBmaWxlcworCitmb3IgVVNCIGF1ZGlvL21pZGksCisKKyAgLSBvdXRwdXQgb2YgbHN1c2IgLXYKKyAgLSBzdHJlYW0qIGZpbGVzIGluIGNhcmQgZGlyZWN0b3J5CisKKworVGhlIEFMU0EgYnVnLXRyYWNraW5nIHN5c3RlbSBpcyBmb3VuZCBhdDoKKworICAgIGh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9TQi1MaXZlLW1peGVyLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9TQi1MaXZlLW1peGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTFhZGFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1NCLUxpdmUtbWl4ZXIudHh0CkBAIC0wLDAgKzEsMzU2IEBACisKKwkJU291bmQgQmxhc3RlciBMaXZlIG1peGVyIC8gZGVmYXVsdCBEU1AgY29kZQorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworVGhlIEVNVTEwSzEgY2hpcHMgaGF2ZSBhIERTUCBwYXJ0IHdoaWNoIGNhbiBiZSBwcm9ncmFtbWVkIHRvIHN1cHBvcnQKK3ZhcmlvdXMgd2F5cyBvZiBzYW1wbGUgcHJvY2Vzc2luZywgd2hpY2ggaXMgZGVzY3JpYmVkIGhlcmUuCisoVGhpcyBhY3RpY2xlIGRvZXMgbm90IGRlYWwgd2l0aCB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSAKK0VNVTEwSzEgY2hpcHMuIFNlZSB0aGUgbWFudWFscyBzZWN0aW9uIGZvciBmdXJ0aGVyIGRldGFpbHMuKQorCitUaGUgQUxTQSBkcml2ZXIgcHJvZ3JhbXMgdGhpcyBwb3J0aW9uIG9mIGNoaXAgYnkgZGVmYXVsdCBjb2RlCisoY2FuIGJlIGFsdGVyZWQgbGF0ZXIpIHdoaWNoIG9mZmVycyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWxpdHk6CisKKworMSkgSUVDOTU4IChTL1BESUYpIHJhdyBQQ00KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgUENNIGRldmljZSAoaXQncyB0aGUgNHRoIFBDTSBkZXZpY2UgKGluZGV4IDMhKSBhbmQgZmlyc3Qgc3ViZGV2aWNlCisoaW5kZXggMCkgZm9yIGEgZ2l2ZW4gY2FyZCkgYWxsb3dzIHRvIGZvcndhcmQgNDhrSHosIHN0ZXJlbywgMTYtYml0CitsaXR0bGUgZW5kaWFuIHN0cmVhbXMgd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGlnaXRhbCBvdXRwdXQKKyhjb2F4aWFsIG9yIG9wdGljYWwpLiBUaGUgdW5pdmVyc2FsIGludGVyZmFjZSBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIHVwCit0byA4IHJhdyBQQ00gZGV2aWNlcyBvcGVyYXRpbmcgYXQgNDhrSHosIDE2LWJpdCBsaXR0bGUgZW5kaWFuLiBJdCB3b3VsZAorYmUgZWFzeSB0byBhZGQgc3VwcG9ydCBmb3IgbXVsdGljaGFubmVsIGRldmljZXMgdG8gdGhlIGN1cnJlbnQgY29kZSwKK2J1dCB0aGUgY29udmVyc2lvbiByb3V0aW5lcyBleGlzdCBvbmx5IGZvciBzdGVyZW8gKDItY2hhbm5lbCBzdHJlYW1zKQorYXQgdGhlIHRpbWUuIAorCitMb29rIHRvIHRyYW1fcG9rZSByb3V0aW5lcyBpbiBsb3dsZXZlbC9lbXUxMGsxL2VtdWZ4LmMgZm9yIG1vcmUgZGV0YWlscy4KKworCisyKSBEaWdpdGFsIG1peGVyIGNvbnRyb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNvbnRyb2xzIGFyZSBidWlsdCB1c2luZyB0aGUgRFNQIGluc3RydWN0aW9ucy4gVGhleSBvZmZlciBleHRlbmRlZAorZnVuY3Rpb25hbGl0eS4gT25seSB0aGUgZGVmYXVsdCBidWlsZC1pbiBjb2RlIGluIHRoZSBBTFNBIGRyaXZlciBpcyBkZXNjcmliZWQKK2hlcmUuIE5vdGUgdGhhdCB0aGUgY29udHJvbHMgd29yayBhcyBhdHRlbnVhdG9yczogdGhlIG1heGltdW0gdmFsdWUgaXMgdGhlIAorbmV1dHJhbCBwb3NpdGlvbiBsZWF2aW5nIHRoZSBzaWduYWwgdW5jaGFuZ2VkLiBOb3RlIHRoYXQgaWYgdGhlICBzYW1lIGRlc3RpbmF0aW9uIAoraXMgbWVudGlvbmVkIGluIG11bHRpcGxlIGNvbnRyb2xzLCB0aGUgc2lnbmFsIGlzIGFjY3VtdWxhdGVkIGFuZCBjYW4gYmUgd3JhcHBlZCAKKyhzZXQgdG8gbWF4aW1hbCBvciBtaW5pbWFsIHZhbHVlIHdpdGhvdXQgY2hlY2tpbmcgb2Ygb3ZlcmZsb3cpLgorCisKK0V4cGxhbmF0aW9uIG9mIHVzZWQgYWJicmV2aWF0aW9uczoKKworREFDICAgIC0gZGlnaXRhbCB0byBhbmFsb2cgY29udmVydGVyCitBREMgICAgLSBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXIKK0kyUyAgICAtIG9uZS13YXkgdGhyZWUgd2lyZSBzZXJpYWwgYnVzIGZvciBkaWdpdGFsIHNvdW5kIGJ5IFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMKKyAgICAgICAgICh0aGlzIHN0YW5kYXJkIGlzIHVzZWQgZm9yIGNvbm5lY3Rpbmcgc3RhbmRhbG9uZSBEQUMgYW5kIEFEQyBjb252ZXJ0ZXJzKQorTEZFICAgIC0gbG93IGZyZXF1ZW5jeSBlZmZlY3RzIChzdWJ3b29mZXIgc2lnbmFsKQorQUM5NyAgIC0gYSBjaGlwIGNvbnRhaW5pbmcgYW4gYW5hbG9nIG1peGVyLCBEQUMgYW5kIEFEQyBjb252ZXJ0ZXJzCitJRUM5NTggLSBTL1BESUYKK0ZYLWJ1cyAtIHRoZSBFTVUxMEsxIGNoaXAgaGFzIGFuIGVmZmVjdCBidXMgY29udGFpbmluZyAxNiBhY2N1bXVsYXRvcnMuCisgICAgICAgICBFYWNoIG9mIHRoZSBzeW50aGVzaXplciB2b2ljZXMgY2FuIGZlZWQgaXRzIG91dHB1dCB0byB0aGVzZSBhY2N1bXVsYXRvcnMKKyAgICAgICAgIGFuZCB0aGUgRFNQIG1pY3JvY29udHJvbGxlciBjYW4gb3BlcmF0ZSB3aXRoIHRoZSByZXN1bHRpbmcgc3VtLgorCisKK25hbWU9J1dhdmUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNIHNhbXBsZXMuCitUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cyBvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nV2F2ZSBTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAwIGFuZCAxIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gc2FtcGxlcy4KK1RoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSByZWFyIEkyUyBEQUNzLiBUaGVzZSBEQUNzIG9wZXJhdGVzCitzZXBhcmF0ZWx5ICh0aGV5IGFyZSBub3QgaW5zaWRlIHRoZSBBQzk3IGNvZGVjKS4KKworbmFtZT0nV2F2ZSBDZW50ZXIgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNIHNhbXBsZXMuCitUaGUgcmVzdWx0IGlzIG1peGVkIHRvIG1vbm8gc2lnbmFsIChzaW5nbGUgY2hhbm5lbCkgYW5kIGZvcndhcmRlZCB0bwordGhlID8/cmVhcj8/IHJpZ2h0IERBQyBQQ00gc2xvdCBvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nV2F2ZSBMRkUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNLgorVGhlIHJlc3VsdCBpcyBtaXhlZCB0byBtb25vIHNpZ25hbCAoc2luZ2xlIGNoYW5uZWwpIGFuZCBmb3J3YXJkZWQgdG8KK3RoZSA/P3JlYXI/PyBsZWZ0IERBQyBQQ00gc2xvdCBvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nV2F2ZSBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorbmFtZT0nV2F2ZSBDYXB0dXJlIFN3aXRjaCcsaW5kZXg9MAorCitUaGVzZSBjb250cm9scyBhcmUgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgUENNIEZYLWJ1cworYWNjdW11bGF0b3IuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNLgorVGhlIHJlc3VsdCBpcyBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUKK1BDTSBkZXZpY2UpLgorCituYW1lPSdNdXNpYyBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IE1JREkgRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgNCBhbmQgNSBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBzYW1wbGVzLgorVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J011c2ljIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCituYW1lPSdNdXNpYyBDYXB0dXJlIFN3aXRjaCcsaW5kZXg9MAorCitUaGVzZSBjb250cm9scyBhcmUgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBGWC1idXMKK2FjY3VtdWxhdG9yLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDQgYW5kIDUgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTS4KK1RoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCitQQ00gZGV2aWNlKS4KKworbmFtZT0nU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCByZWFyIFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAyIGFuZCAzIGZvciBsZWZ0IGFuZCByaWdodCByZWFyIFBDTSBzYW1wbGVzLgorVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIHJlYXIgSTJTIERBQ3MuIFRoZXNlIERBQ3Mgb3BlcmF0ZQorc2VwYXJhdGVseSAodGhleSBhcmUgbm90IGluc2lkZSB0aGUgQUM5NyBjb2RlYykuCisKK25hbWU9J1N1cnJvdW5kIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCituYW1lPSdTdXJyb3VuZCBDYXB0dXJlIFN3aXRjaCcsaW5kZXg9MAorCitUaGVzZSBjb250cm9scyBhcmUgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgcmVhciBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMiBhbmQgMyBmb3IgbGVmdCBhbmQgcmlnaHQgcmVhciBQQ00gc2FtcGxlcy4KK1RoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCitQQ00gZGV2aWNlKS4KKworbmFtZT0nQ2VudGVyIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlIGZvciBjZW50ZXIgUENNIEZYLWJ1cyBhY2N1bXVsYXRvci4KK0FMU0EgdXNlcyBhY2N1bXVsYXRvciA2IGZvciBjZW50ZXIgUENNIHNhbXBsZS4gVGhlIHJlc3VsdCBzYW1wbGUgaXMgZm9yd2FyZGVkCit0byB0aGUgPz9yZWFyPz8gcmlnaHQgREFDIFBDTSBzbG90IG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdMRkUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGUgZm9yIGNlbnRlciBQQ00gRlgtYnVzIGFjY3VtdWxhdG9yLgorQUxTQSB1c2VzIGFjY3VtdWxhdG9yIDYgZm9yIGNlbnRlciBQQ00gc2FtcGxlLiBUaGUgcmVzdWx0IHNhbXBsZSBpcyBmb3J3YXJkZWQKK3RvIHRoZSA/P3JlYXI/PyBsZWZ0IERBQyBQQ00gc2xvdCBvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nQUM5NyBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IGZyb250IEFEQyBQQ00gc2xvdHMKK29mIHRoZSBBQzk3IGNvZGVjLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTQorc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqIE5vdGU6IFRoaXMgY29udHJvbCBzaG91bGQgYmUgemVybyBmb3IgdGhlIHN0YW5kYXJkIG9wZXJhdGlvbnMsIG90aGVyd2lzZSAqKioKKyoqKiBhIGRpZ2l0YWwgbG9vcGJhY2sgaXMgYWN0aXZhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCituYW1lPSdBQzk3IENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBmcm9udCBBREMgUENNIHNsb3RzCitvZiB0aGUgQUM5NyBjb2RlYy4gVGhlIHJlc3VsdCBpcyBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8KK3RoZSBzdGFuZGFyZCBjYXB0dXJlIFBDTSBkZXZpY2UpLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKiBOb3RlOiBUaGlzIGNvbnRyb2wgc2hvdWxkIGJlIDEwMCAobWF4aW1hbCB2YWx1ZSksIG90aGVyd2lzZSBubyBhbmFsb2cgICAgKioqCisqKiogaW5wdXRzIG9mIHRoZSBBQzk3IGNvZGVjIGNhbiBiZSBjYXB0dXJlZCAocmVjb3JkZWQpLiAgICAgICAgICAgICAgICAgICAgICoqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworbmFtZT0nSUVDOTU4IFRUTCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggVFRMCitkaWdpdGFsIGlucHV0cyAodXN1YWxseSB1c2VkIGJ5IGEgQ0RST00gZHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlCitmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J0lFQzk1OCBUVEwgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggVFRMCitkaWdpdGFsIGlucHV0cyAodXN1YWxseSB1c2VkIGJ5IGEgQ0RST00gZHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlCitmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J1pvb20gVmlkZW8gUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgem9vbSB2aWRlbworZGlnaXRhbCBpbnB1dHMgKHVzdWFsbHkgdXNlZCBieSBhIENEUk9NIGRyaXZlKS4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZQorZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzIG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdab29tIFZpZGVvIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgem9vbSB2aWRlbworZGlnaXRhbCBpbnB1dHMgKHVzdWFsbHkgdXNlZCBieSBhIENEUk9NIGRyaXZlKS4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZQorZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlIFBDTSBkZXZpY2UpLgorCituYW1lPSdJRUM5NTggTGl2ZURyaXZlIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBvcHRpY2FsCitkaWdpdGFsIGlucHV0LiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cworb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J0lFQzk1OCBMaXZlRHJpdmUgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggb3B0aWNhbAorZGlnaXRhbCBpbnB1dHMuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPCisodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZSBQQ00gZGV2aWNlKS4KKworbmFtZT0nSUVDOTU4IENvYXhpYWwgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSUVDOTU4IGNvYXhpYWwKK2RpZ2l0YWwgaW5wdXRzLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cworb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J0lFQzk1OCBDb2F4aWFsIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSUVDOTU4IGNvYXhpYWwKK2RpZ2l0YWwgaW5wdXRzLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDIGNhcHR1cmUgRklGTworKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0xpbmUgTGl2ZURyaXZlIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorbmFtZT0nTGluZSBMaXZlRHJpdmUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0xCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIChvbiB0aGUgTGl2ZURyaXZlKS4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250CitEQUMgUENNIHNsb3RzIG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdMaW5lIExpdmVEcml2ZSBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MQorbmFtZT0nTGluZSBMaXZlRHJpdmUgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTEKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJMlMgQURDCitpbnB1dHMgKG9uIHRoZSBMaXZlRHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDCitjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J1RvbmUgQ29udHJvbCAtIFN3aXRjaCcsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgdHVybnMgdGhlIHRvbmUgY29udHJvbCBvbiBvciBvZmYuIFRoZSBzYW1wbGVzIGZvciBmcm9udCwgcmVhcgorYW5kIGNlbnRlciAvIExGRSBvdXRwdXRzIGFyZSBhZmZlY3RlZC4KKworbmFtZT0nVG9uZSBDb250cm9sIC0gQmFzcycsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgc2V0cyB0aGUgYmFzcyBpbnRlbnNpdHkuIFRoZXJlIGlzIG5vIG5ldXRyYWwgdmFsdWUhIQorV2hlbiB0aGUgdG9uZSBjb250cm9sIGNvZGUgaXMgYWN0aXZhdGVkLCB0aGUgc2FtcGxlcyBhcmUgYWx3YXlzIG1vZGlmaWVkLgorVGhlIGNsb3Nlc3QgdmFsdWUgdG8gcHVyZSBzaWduYWwgaXMgMjAuCisKK25hbWU9J1RvbmUgQ29udHJvbCAtIFRyZWJsZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgc2V0cyB0aGUgdHJlYmxlIGludGVuc2l0eS4gVGhlcmUgaXMgbm8gbmV1dHJhbCB2YWx1ZSEhCitXaGVuIHRoZSB0b25lIGNvbnRyb2wgY29kZSBpcyBhY3RpdmF0ZWQsIHRoZSBzYW1wbGVzIGFyZSBhbHdheXMgbW9kaWZpZWQuCitUaGUgY2xvc2VzdCB2YWx1ZSB0byBwdXJlIHNpZ25hbCBpcyAyMC4KKworbmFtZT0nSUVDOTU4IE9wdGljYWwgUmF3IFBsYXliYWNrIFN3aXRjaCcsaW5kZXg9MAorCitJZiB0aGlzIHN3aXRjaCBpcyBvbiwgdGhlbiB0aGUgc2FtcGxlcyBmb3IgdGhlIElFQzk1OCAoUy9QRElGKSBkaWdpdGFsCitvdXRwdXQgYXJlIHRha2VuIG9ubHkgZnJvbSB0aGUgcmF3IEZYODAxMCBQQ00sIG90aGVyd2lzZSBzdGFuZGFyZCBmcm9udAorUENNIHNhbXBsZXMgYXJlIHRha2VuLgorCituYW1lPSdIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0xCisKK1RoaXMgY29udHJvbCBhdHRlbnVhdGVzIHRoZSBzYW1wbGVzIGZvciB0aGUgaGVhZHBob25lIG91dHB1dC4KKworbmFtZT0nSGVhZHBob25lIENlbnRlciBQbGF5YmFjayBTd2l0Y2gnLGluZGV4PTEKKworSWYgdGhpcyBzd2l0Y2ggaXMgb24sIHRoZW4gdGhlIHNhbXBsZSBmb3IgdGhlIGNlbnRlciBQQ00gaXMgcHV0IHRvIHRoZQorbGVmdCBoZWFkcGhvbmUgb3V0cHV0ICh1c2VmdWwgZm9yIFNCIExpdmUgY2FyZHMgd2l0aG91dCBzZXBhcmF0ZSBjZW50ZXIvTEZFCitvdXRwdXQpLgorCituYW1lPSdIZWFkcGhvbmUgTEZFIFBsYXliYWNrIFN3aXRjaCcsaW5kZXg9MQorCitJZiB0aGlzIHN3aXRjaCBpcyBvbiwgdGhlbiB0aGUgc2FtcGxlIGZvciB0aGUgY2VudGVyIFBDTSBpcyBwdXQgdG8gdGhlCityaWdodCBoZWFkcGhvbmUgb3V0cHV0ICh1c2VmdWwgZm9yIFNCIExpdmUgY2FyZHMgd2l0aG91dCBzZXBhcmF0ZSBjZW50ZXIvTEZFCitvdXRwdXQpLgorCisKKzMpIFBDTSBzdHJlYW0gcmVsYXRlZCBjb250cm9scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK25hbWU9J0VNVTEwSzEgUENNIFZvbHVtZScsaW5kZXggMC0zMQorCitDaGFubmVsIHZvbHVtZSBhdHRlbnVhdGlvbiBpbiByYW5nZSAwLTB4ZmZmZi4gVGhlIG1heGltdW0gdmFsdWUgKG5vCithdHRlbnVhdGlvbikgaXMgZGVmYXVsdC4gVGhlIGNoYW5uZWwgbWFwcGluZyBmb3IgdGhyZWUgdmFsdWVzIGlzCithcyBmb2xsb3dzOgorCisJMCAtIG1vbm8sIGRlZmF1bHQgMHhmZmZmIChubyBhdHRlbnVhdGlvbikKKwkxIC0gbGVmdCwgZGVmYXVsdCAweGZmZmYgKG5vIGF0dGVudWF0aW9uKQorCTIgLSByaWdodCwgZGVmYXVsdCAweGZmZmYgKG5vIGF0dGVudWF0aW9uKQorCituYW1lPSdFTVUxMEsxIFBDTSBTZW5kIFJvdXRpbmcnLGluZGV4IDAtMzEKKworVGhpcyBjb250cm9sIHNwZWNpZmllcyB0aGUgZGVzdGluYXRpb24gLSBGWC1idXMgYWNjdW11bGF0b3JzLiBUaGVyZSBhcmUKK3R3ZWx2ZSB2YWx1ZXMgd2l0aCB0aGlzIG1hcHBpbmc6CisKKwkgMCAtICBtb25vLCBBIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMAorCSAxIC0gIG1vbm8sIEIgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAxCisJIDIgLSAgbW9ubywgQyBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDIKKwkgMyAtICBtb25vLCBEIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMworCSA0IC0gIGxlZnQsIEEgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAwCisJIDUgLSAgbGVmdCwgQiBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDEKKwkgNiAtICBsZWZ0LCBDIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMgorCSA3IC0gIGxlZnQsIEQgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAzCisJIDggLSByaWdodCwgQSBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDAKKwkgOSAtIHJpZ2h0LCBCIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMQorCTEwIC0gcmlnaHQsIEMgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAyCisJMTEgLSByaWdodCwgRCBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDMKKworRG9uJ3QgZm9yZ2V0IHRoYXQgaXQncyBpbGxlZ2FsIHRvIGFzc2lnbiBhIGNoYW5uZWwgdG8gdGhlIHNhbWUgRlgtYnVzIGFjY3VtdWxhdG9yIAorbW9yZSB0aGFuIG9uY2UgKGl0IG1lYW5zIDA9MCAmJiAxPTAgaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbikuCisgCituYW1lPSdFTVUxMEsxIFBDTSBTZW5kIFZvbHVtZScsaW5kZXggMC0zMQorCitJdCBzcGVjaWZpZXMgdGhlIGF0dGVudWF0aW9uIChhbW91bnQpIGZvciBnaXZlbiBkZXN0aW5hdGlvbiBpbiByYW5nZSAwLTI1NS4KK1RoZSBjaGFubmVsIG1hcHBpbmcgaXMgZm9sbG93aW5nOgorCisJIDAgLSAgbW9ubywgQSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJIDEgLSAgbW9ubywgQiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJIDIgLSAgbW9ubywgQyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDMgLSAgbW9ubywgRCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDQgLSAgbGVmdCwgQSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJIDUgLSAgbGVmdCwgQiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDYgLSAgbGVmdCwgQyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDcgLSAgbGVmdCwgRCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDggLSByaWdodCwgQSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDkgLSByaWdodCwgQiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJMTAgLSByaWdodCwgQyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTEgLSByaWdodCwgRCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisKKworCis0KSBNQU5VQUxTL1BBVEVOVFM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z0cDovL29wZW5zb3VyY2UuY3JlYXRpdmUuY29tL3B1Yi9kb2MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBGaWxlczoKKyAgICAgICAgTE00NTQ1LnBkZiAgICAgIEFDOTcgQ29kZWMKKworICAgICAgICBtMjA0OS5wZGYgICAgICAgVGhlIEVNVTEwSzEgRGlnaXRhbCBBdWRpbyBQcm9jZXNzb3IKKworICAgICAgICBob2c2My5wcyAgICAgICAgRlg4MDEwIC0gQSBEU1AgQ2hpcCBBcmNoaXRlY3R1cmUgZm9yIEF1ZGlvIEVmZmVjdHMKKworCitXSVBPIFBhdGVudHMKKy0tLS0tLS0tLS0tLQorICAgICAgICBQYXRlbnQgbnVtYmVyczoKKyAgICAgICAgV08gOTkwMTgxMyAoQTEpIEF1ZGlvIEVmZmVjdHMgUHJvY2Vzc29yIHdpdGggbXVsdGlwbGUgYXN5bmNocm9ub3VzIChKYW4uIDE0LCAxOTk5KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcworCisgICAgICAgIFdPIDk5MDE4MTQgKEExKSBQcm9jZXNzb3Igd2l0aCBJbnN0cnVjdGlvbiBTZXQgZm9yIEF1ZGlvIEVmZmVjdHMgKEphbi4gMTQsIDE5OTkpCisKKyAgICAgICAgV08gOTkwMTk1MyAoQTEpIEF1ZGlvIEVmZmVjdHMgUHJvY2Vzc29yIGhhdmluZyBEZWNvdXBsZWQgSW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiBhbmQgQXVkaW8gRGF0YSBTZXF1ZW5jaW5nIChKYW4uIDE0LCAxOTk5KQorCisKK1VTIFBhdGVudHMgKGh0dHA6Ly93d3cudXNwdG8uZ292LykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBVUyA1OTI1ODQxICAgICAgRGlnaXRhbCBTYW1wbGluZyBJbnN0cnVtZW50IGVtcGxveWluZyBjYWNoZSBtZW1vcnkgKEp1bC4gMjAsIDE5OTkpCisKKyAgICAgICAgVVMgNTkyODM0MiAgICAgIEF1ZGlvIEVmZmVjdHMgUHJvY2Vzc29yIGludGVncmF0ZWQgb24gYSBzaW5nbGUgY2hpcCAoSnVsLiAyNywgMTk5OSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBtdWx0aXBvcnQgbWVtb3J5IG9udG8gd2hpY2ggbXVsdGlwbGUgYXN5bmNocm9ub3VzCisgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdGFsIHNvdW5kIHNhbXBsZXMgY2FuIGJlIGNvbmN1cnJlbnRseSBsb2FkZWQKKworICAgICAgICBVUyA1OTMwMTU4ICAgICAgUHJvY2Vzc29yIHdpdGggSW5zdHJ1Y3Rpb24gU2V0IGZvciBBdWRpbyBFZmZlY3RzIChKdWwuIDI3LCAxOTk5KQorCisgICAgICAgIFVTIDYwMzIyMzUgICAgICBNZW1vcnkgaW5pdGlhbGl6YXRpb24gY2lyY3VpdCAoVHJhbSkgKEZlYi4gMjksIDIwMDApCisKKyAgICAgICAgVVMgNjEzODIwNyAgICAgIEludGVycG9sYXRpb24gbG9vcGluZyBvZiBhdWRpbyBzYW1wbGVzIGluIGNhY2hlIGNvbm5lY3RlZCB0byAgICAoT2N0LiAyNCwgMjAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBidXMgd2l0aCBwcmlvcml0aXphdGlvbiBhbmQgbW9kaWZpY2F0aW9uIG9mIGJ1cyB0cmFuc2ZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIGFjY29yZGFuY2Ugd2l0aCBsb29wIGVuZHMgYW5kIG1pbmltdW0gYmxvY2sgc2l6ZXMKKworICAgICAgICBVUyA2MTUxNjcwICAgICAgTWV0aG9kIGZvciBjb25zZXJ2aW5nIG1lbW9yeSBzdG9yYWdlIHVzaW5nIGEgKE5vdi4gMjEsIDIwMDApCisgICAgICAgICAgICAgICAgICAgICAgICBwb29sIG9mICBzaG9ydCB0ZXJtIG1lbW9yeSByZWdpc3RlcnMKKworICAgICAgICBVUyA2MTk1NzE1ICAgICAgSW50ZXJydXB0IGNvbnRyb2wgZm9yIG11bHRpcGxlIHByb2dyYW1zIGNvbW11bmljYXRpbmcgd2l0aCAgICAgIChGZWIuIDI3LCAyMDAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21tb24gaW50ZXJydXB0IGJ5IGFzc29jaWF0aW5nIHByb2dyYW1zIHRvIEdQIHJlZ2lzdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nIGludGVycnVwdCByZWdpc3RlciwgcG9sbGluZyBHUCByZWdpc3RlcnMsIGFuZCBpbnZva2luZworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgcm91dGluZSBhc3NvY2lhdGVkIHdpdGggZGVmaW5lZCBpbnRlcnJ1cHQgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9WSUE4Mnh4LW1peGVyLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9WSUE4Mnh4LW1peGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBhYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1ZJQTgyeHgtbWl4ZXIudHh0CkBAIC0wLDAgKzEsOCBAQAorCisJCQkJVklBODJ4eCBtaXhlcgorCQkJCT09PT09PT09PT09PT0KKworT24gbWFueSBWSUE4Mnh4IGJvYXJkcywgdGhlICdJbnB1dCBTb3VyY2UgU2VsZWN0JyBtaXhlciBjb250cm9sIGRvZXMgbm90IHdvcmsuCitTZXR0aW5nIGl0IHRvICdJbnB1dDInIG9uIHN1Y2ggYm9hcmRzIHdpbGwgY2F1c2UgcmVjb3JkaW5nIHRvIGhhbmcsIG9yIGZhaWwKK3dpdGggRUlPIChpbnB1dC9vdXRwdXQgZXJyb3IpIHZpYSBPU1MgZW11bGF0aW9uLiAgVGhpcyBjb250cm9sIHNob3VsZCBiZSBsZWZ0CithdCAnSW5wdXQxJyBmb3Igc3VjaCBjYXJkcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9oZGFfY29kZWMudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL2hkYV9jb2RlYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkMDdiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9oZGFfY29kZWMudHh0CkBAIC0wLDAgKzEsMjk5IEBACitOb3RlcyBvbiBVbml2ZXJzYWwgSW50ZXJmYWNlIGZvciBJbnRlbCBIaWdoIERlZmluaXRpb24gQXVkaW8gQ29kZWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+CisKKworW1N0aWxsIGEgZHJhZnQgdmVyc2lvbl0KKworCitHZW5lcmFsCis9PT09PT09CisKK1RoZSBzbmQtaGRhLWNvZGVjIG1vZHVsZSBzdXBwb3J0cyB0aGUgZ2VuZXJpYyBhY2Nlc3MgZnVuY3Rpb24gZm9yIHRoZQorSGlnaCBEZWZpbml0aW9uIChIRCkgYXVkaW8gY29kZWNzLiAgSXQncyBkZXNpZ25lZCB0byBiZSBpbmRlcGVuZGVudAorZnJvbSB0aGUgY29udHJvbGxlciBjb2RlIGxpa2UgYWM5NyBjb2RlYyBtb2R1bGUuICBUaGUgcmVhbCBhY2Nlc3NvcnMKK2Zyb20vdG8gdGhlIGNvbnRyb2xsZXIgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgbG93bGV2ZWwgZHJpdmVyLgorCitUaGUgc3RydWN0dXJlIG9mIHRoaXMgbW9kdWxlIGlzIHNpbWlsYXIgd2l0aCBhYzk3X2NvZGVjIG1vZHVsZS4KK0VhY2ggY29kZWMgY2hpcCBiZWxvbmdzIHRvIGEgYnVzIGNsYXNzIHdoaWNoIGNvbW11bmljYXRlcyB3aXRoIHRoZQorY29udHJvbGxlci4KKworCitJbml0aWFsaXphdGlvbiBvZiBCdXMgSW5zdGFuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgY2FyZCBkcml2ZXIgaGFzIHRvIGNyZWF0ZSBzdHJ1Y3QgaGRhX2J1cyBhdCBmaXJzdC4gIFRoZSB0ZW1wbGF0ZQorc3RydWN0IHNob3VsZCBiZSBmaWxsZWQgYW5kIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3I6CisKK3N0cnVjdCBoZGFfYnVzX3RlbXBsYXRlIHsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBjaTsKKwljb25zdCBjaGFyICptb2RlbG5hbWU7CisJc3RydWN0IGhkYV9idXNfb3BzIG9wczsKK307CisKK1RoZSBjYXJkIGRyaXZlciBjYW4gc2V0IGFuZCB1c2UgdGhlIHByaXZhdGVfZGF0YSBmaWVsZCB0byByZXRyaWV2ZSBpdHMKK293biBkYXRhIGluIGNhbGxiYWNrIGZ1bmN0aW9ucy4gIFRoZSBwY2kgZmllbGQgaXMgdXNlZCB3aGVuIHRoZSBwYXRjaAorbmVlZHMgdG8gY2hlY2sgdGhlIFBDSSBzdWJzeXN0ZW0gSURzLCBzbyBvbi4gIEZvciBub24tUENJIHN5c3RlbSwgaXQKK2RvZXNuJ3QgaGF2ZSB0byBiZSBzZXQsIG9mIGNvdXJzZS4KK1RoZSBtb2RlbG5hbWUgZmllbGQgc3BlY2lmaWVzIHRoZSBib2FyZCdzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uICBUaGUKK3N0cmluZyBpcyBwYXNzZWQgdG8gdGhlIGNvZGVjIHBhcnNlciwgYW5kIGl0IGRlcGVuZHMgb24gdGhlIHBhcnNlciBob3cKK3RoZSBzdHJpbmcgaXMgdXNlZC4KK1RoZXNlIGZpZWxkcywgcHJpdmF0ZV9kYXRhLCBwY2kgYW5kIG1vZGVsbmFtZSBhcmUgYWxsIG9wdGlvbmFsLgorCitUaGUgb3BzIGZpZWxkIGNvbnRhaW5zIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYXMgdGhlIGZvbGxvd2luZzoKKworc3RydWN0IGhkYV9idXNfb3BzIHsKKwlpbnQgKCpjb21tYW5kKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpcmVjdCwKKwkJICAgICAgIHVuc2lnbmVkIGludCB2ZXJiLCB1bnNpZ25lZCBpbnQgcGFybSk7CisJdW5zaWduZWQgaW50ICgqZ2V0X3Jlc3BvbnNlKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CisJdm9pZCAoKnByaXZhdGVfZnJlZSkoc3RydWN0IGhkYV9idXMgKik7Cit9OworCitUaGUgY29tbWFuZCBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgY29kZWMgbW9kdWxlIG5lZWRzIHRvIHNlbmQgYQorVkVSQiB0byB0aGUgY29udHJvbGxlci4gIEl0J3MgYWx3YXlzIGEgc2luZ2xlIGNvbW1hbmQuCitUaGUgZ2V0X3Jlc3BvbnNlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBjb2RlYyByZXF1aXJlcyB0aGUgYW5zd2VyCitmb3IgdGhlIGxhc3QgY29tbWFuZC4gIFRoZXNlIHR3byBjYWxsYmFja3MgYXJlIG1hbmRhdG9yeSBhbmQgaGF2ZSB0bworYmUgZ2l2ZW4uCitUaGUgbGFzdCwgcHJpdmF0ZV9mcmVlIGNhbGxiYWNrLCBpcyBvcHRpb25hbC4gIEl0J3MgY2FsbGVkIGluIHRoZQorZGVzdHJ1Y3RvciB0byByZWxlYXNlIGFueSBuZWNlc3NhcnkgZGF0YSBpbiB0aGUgbG93bGV2ZWwgZHJpdmVyLgorCitUaGUgYnVzIGluc3RhbmNlIGlzIGNyZWF0ZWQgdmlhIHNuZF9oZGFfYnVzX25ldygpLiAgWW91IG5lZWQgdG8gcGFzcwordGhlIGNhcmQgaW5zdGFuY2UsIHRoZSB0ZW1wbGF0ZSwgYW5kIHRoZSBwb2ludGVyIHRvIHN0b3JlIHRoZQorcmVzdWx0YW50IGJ1cyBpbnN0YW5jZS4KKworaW50IHNuZF9oZGFfYnVzX25ldyhzbmRfY2FyZF90ICpjYXJkLCBjb25zdCBzdHJ1Y3QgaGRhX2J1c190ZW1wbGF0ZSAqdGVtcCwKKwkJICAgIHN0cnVjdCBoZGFfYnVzICoqYnVzcCk7CisKK0l0IHJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLiAgQSBuZWdhdGl2ZSByZXR1cm4gdmFsdWUgbWVhbnMgYW55CitlcnJvciBkdXJpbmcgY3JlYXRpb24uCisKKworQ3JlYXRpb24gb2YgQ29kZWMgSW5zdGFuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0VhY2ggY29kZWMgY2hpcCBvbiB0aGUgYm9hcmQgaXMgdGhlbiBjcmVhdGVkIG9uIHRoZSBCVVMgaW5zdGFuY2UuCitUbyBjcmVhdGUgYSBjb2RlYyBpbnN0YW5jZSwgY2FsbCBzbmRfaGRhX2NvZGVjX25ldygpLgorCitpbnQgc25kX2hkYV9jb2RlY19uZXcoc3RydWN0IGhkYV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGNvZGVjX2FkZHIsCisJCSAgICAgIHN0cnVjdCBoZGFfY29kZWMgKipjb2RlY3ApOworCitUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIEJVUyBpbnN0YW5jZSwgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUKK2FkZHJlc3Mgb2YgdGhlIGNvZGVjLCBhbmQgdGhlIGxhc3Qgb25lIGlzIHRoZSBwb2ludGVyIHRvIHN0b3JlIHRoZQorcmVzdWx0YW50IGNvZGVjIGluc3RhbmNlIChjYW4gYmUgTlVMTCBpZiBub3QgbmVlZGVkKS4KKworVGhlIGNvZGVjIGlzIHN0b3JlZCBpbiBhIGxpbmtlZCBsaXN0IG9mIGJ1cyBpbnN0YW5jZS4gIFlvdSBjYW4gZm9sbG93Cit0aGUgY29kZWMgbGlzdCBsaWtlOgorCisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYzsKKwlsaXN0X2Zvcl9lYWNoKHAsICZidXMtPmNvZGVjX2xpc3QpIHsKKwkJY29kZWMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoZGFfY29kZWMsIGxpc3QpOworCQkuLi4KKwl9CisKK1RoZSBjb2RlYyBpc24ndCBpbml0aWFsaXplZCBhdCB0aGlzIHN0YWdlIHByb3Blcmx5LiAgVGhlCitpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBpcyBjYWxsZWQgd2hlbiB0aGUgY29udHJvbHMgYXJlIGJ1aWx0IGxhdGVyLgorCisKK0NvZGVjIEFjY2VzcworPT09PT09PT09PT09CisKK1RvIGFjY2VzcyBjb2RlYywgdXNlIHNuZF9jb2RlY19yZWFkKCkgYW5kIHNuZF9jb2RlY193cml0ZSgpLgorc25kX2hkYV9wYXJhbV9yZWFkKCkgaXMgZm9yIHJlYWRpbmcgcGFyYW1ldGVycy4KK0ZvciB3cml0aW5nIGEgc2VxdWVuY2Ugb2YgdmVyYnMsIHVzZSBzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKCkuCisKK1RvIHJldHJpZXZlIHRoZSBudW1iZXIgb2Ygc3ViIG5vZGVzIGNvbm5lY3RlZCB0byB0aGUgZ2l2ZW4gbm9kZSwgdXNlCitzbmRfaGRhX2dldF9zdWJfbm9kZXMoKS4gIFRoZSBjb25uZWN0aW9uIGxpc3QgY2FuIGJlIG9idGFpbmVkIHZpYQorc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoKSBjYWxsLgorCitXaGVuIGFuIHVuc29saWNpdGVkIGV2ZW50IGhhcHBlbnMsIHBhc3MgdGhlIGV2ZW50IHZpYQorc25kX2hkYV9xdWV1ZV91bnNvbF9ldmVudCgpIHNvIHRoYXQgdGhlIGNvZGVjIHJvdXRpbmVzIHdpbGwgcHJvY2VzcyBpdAorbGF0ZXIuCisKKworKE1peGVyKSBDb250cm9scworPT09PT09PT09PT09PT09PQorCitUbyBjcmVhdGUgbWl4ZXIgY29udHJvbHMgb2YgYWxsIGNvZGVjcywgY2FsbAorc25kX2hkYV9idWlsZF9jb250cm9scygpLiAgSXQgdGhlbiBidWlsZHMgdGhlIG1peGVycyBhbmQgZG9lcworaW5pdGlhbGl6YXRpb24gc3R1ZmYgb24gZWFjaCBjb2RlYy4KKworCitQQ00gU3R1ZmYKKz09PT09PT09PQorCitzbmRfaGRhX2J1aWxkX3BjbXMoKSBnaXZlcyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBQQ00KK3N0cmVhbXMuICBXaGVuIGl0J3MgY2FsbGVkLCBlYWNoIGNvZGVjIGJlbG9uZ2luZyB0byB0aGUgYnVzIHN0b3JlcyAKK2NvZGVjLT5udW1fcGNtcyBhbmQgY29kZWMtPnBjbV9pbmZvIGZpZWxkcy4gIFRoZSBudW1fcGNtcyBpbmRpY2F0ZXMKK3RoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gcGNtX2luZm8gYXJyYXkuICBUaGUgY2FyZCBkcml2ZXIgaXMgc3VwcG9zZWQKK3RvIHRyYXZlcnNlIHRoZSBjb2RlYyBsaW5rZWQgbGlzdCwgcmVhZCB0aGUgcGNtIGluZm9ybWF0aW9uIGluCitwY21faW5mbyBhcnJheSwgYW5kIGJ1aWxkIHBjbSBpbnN0YW5jZXMgYWNjb3JkaW5nIHRvIHRoZW0uIAorCitUaGUgcGNtX2luZm8gYXJyYXkgY29udGFpbnMgdGhlIGZvbGxvd2luZyByZWNvcmQ6CisKKy8qIFBDTSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzdWJzdHJlYW0gKi8KK3N0cnVjdCBoZGFfcGNtX3N0cmVhbSB7CisJdW5zaWduZWQgaW50IHN1YnN0cmVhbXM7CS8qIG51bWJlciBvZiBzdWJzdHJlYW1zLCAwID0gbm90IGV4aXN0ICovCisJdW5zaWduZWQgaW50IGNoYW5uZWxzX21pbjsJLyogbWluLiBudW1iZXIgb2YgY2hhbm5lbHMgKi8KKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHNfbWF4OwkvKiBtYXguIG51bWJlciBvZiBjaGFubmVscyAqLworCWhkYV9uaWRfdCBuaWQ7CS8qIGRlZmF1bHQgTklEIHRvIHF1ZXJ5IHJhdGVzL2Zvcm1hdHMvYnBzLCBvciBzZXQgdXAgKi8KKwl1MzIgcmF0ZXM7CS8qIHN1cHBvcnRlZCByYXRlcyAqLworCXU2NCBmb3JtYXRzOwkvKiBzdXBwb3J0ZWQgZm9ybWF0cyAoU05EUlZfUENNX0ZNVEJJVF8pICovCisJdW5zaWduZWQgaW50IG1heGJwczsJLyogc3VwcG9ydGVkIG1heC4gYml0IHBlciBzYW1wbGUgKi8KKwlzdHJ1Y3QgaGRhX3BjbV9vcHMgb3BzOworfTsKKworLyogZm9yIFBDTSBjcmVhdGlvbiAqLworc3RydWN0IGhkYV9wY20geworCWNoYXIgKm5hbWU7CisJc3RydWN0IGhkYV9wY21fc3RyZWFtIHN0cmVhbVsyXTsKK307CisKK1RoZSBuYW1lIGNhbiBiZSBwYXNzZWQgdG8gc25kX3BjbV9uZXcoKS4gIFRoZSBzdHJlYW0gZmllbGQgY29udGFpbnMKK3RoZSBpbmZvcm1hdGlvbiAgZm9yIHBsYXliYWNrIChTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLID0gMCkgYW5kCitjYXB0dXJlIChTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUgPSAxKSBkaXJlY3Rpb25zLiAgVGhlIGNhcmQgZHJpdmVyCitzaG91bGQgcGFzcyBzdWJzdHJlYW1zIHRvIHNuZF9wY21fbmV3KCkgZm9yIHRoZSBudW1iZXIgb2Ygc3Vic3RyZWFtcwordG8gY3JlYXRlLgorCitUaGUgY2hhbm5lbHNfbWluLCBjaGFubmVsc19tYXgsIHJhdGVzIGFuZCBmb3JtYXRzIHNob3VsZCBiZSBjb3BpZWQgdG8KK3J1bnRpbWUtPmh3IHJlY29yZC4gIFRoZXkgYW5kIG1heGJwcyBmaWVsZHMgYXJlIHVzZWQgYWxzbyB0byBjb21wdXRlCit0aGUgZm9ybWF0IHZhbHVlIGZvciB0aGUgSERBIGNvZGVjIGFuZCBjb250cm9sbGVyLiAgQ2FsbAorc25kX2hkYV9jYWxjX3N0cmVhbV9mb3JtYXQoKSB0byBnZXQgdGhlIGZvcm1hdCB2YWx1ZS4KKworVGhlIG9wcyBmaWVsZCBjb250YWlucyB0aGUgZm9sbG93aW5nIGNhbGxiYWNrIGZ1bmN0aW9uczoKKworc3RydWN0IGhkYV9wY21fb3BzIHsKKwlpbnQgKCpvcGVuKShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmluZm8sIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkgICAgc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKKwlpbnQgKCpjbG9zZSkoc3RydWN0IGhkYV9wY21fc3RyZWFtICppbmZvLCBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJICAgICBzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworCWludCAoKnByZXBhcmUpKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaW5mbywgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc3RyZWFtX3RhZywgdW5zaWduZWQgaW50IGZvcm1hdCwKKwkJICAgICAgIHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CisJaW50ICgqY2xlYW51cCkoc3RydWN0IGhkYV9wY21fc3RyZWFtICppbmZvLCBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJICAgICAgIHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7Cit9OworCitBbGwgYXJlIG5vbi1OVUxMLCBzbyB5b3UgY2FuIGNhbGwgdGhlbSBzYWZlbHkgd2l0aG91dCBOVUxMIGNoZWNrLgorCitUaGUgb3BlbiBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIGluIFBDTSBvcGVuIGFmdGVyIHJ1bnRpbWUtPmh3IGlzCitzZXQgdXAuICBJdCBtYXkgb3ZlcnJpZGUgc29tZSBzZXR0aW5nIGFuZCBjb25zdHJhaW50cyBhZGRpdGlvbmFsbHkuCitTaW1pbGFybHksIHRoZSBjbG9zZSBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIGluIHRoZSBQQ00gY2xvc2UuCisKK1RoZSBwcmVwYXJlIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgaW4gUENNIHByZXBhcmUuICBUaGlzIHdpbGwgc2V0Cit1cCB0aGUgY29kZWMgY2hpcCBwcm9wZXJseSBmb3IgdGhlIG9wZXJhdGlvbi4gIFRoZSBjbGVhbnVwIHNob3VsZCBiZQorY2FsbGVkIGluIGh3X2ZyZWUgdG8gY2xlYW4gdXAgdGhlIGNvbmZpZ3VyYXRpb24uCisKK1RoZSBjYWxsZXIgc2hvdWxkIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIGF0IGxlYXN0IGZvciBvcGVuIGFuZAorcHJlcGFyZSBjYWxsYmFja3MuICBXaGVuIGEgbmVnYXRpdmUgdmFsdWUgaXMgcmV0dXJuZWQsIHNvbWUgZXJyb3IKK29jY3VycmVkLgorCisKK1Byb2MgRmlsZXMKKz09PT09PT09PT0KKworRWFjaCBjb2RlYyBkdW1wcyB0aGUgd2lkZ2V0IG5vZGUgaW5mb3JtYXRpb24gaW4KKy9wcm9jL2Fzb3VuZC9jYXJkKi9jb2RlYyMqIGZpbGUuICBUaGlzIGluZm9ybWF0aW9uIHdvdWxkIGJlIHJlYWxseQoraGVscGZ1bCBmb3IgZGVidWdnaW5nLiAgUGxlYXNlIHByb3ZpZGUgaXRzIGNvbnRlbnRzIHRvZ2V0aGVyIHdpdGggdGhlCitidWcgcmVwb3J0LgorCisKK1Bvd2VyIE1hbmFnZW1lbnQKKz09PT09PT09PT09PT09PT0KKworSXQncyBzaW1wbGU6CitDYWxsIHNuZF9oZGFfc3VzcGVuZCgpIGluIHRoZSBQTSBzdXNwZW5kIGNhbGxiYWNrLgorQ2FsbCBzbmRfaGRhX3Jlc3VtZSgpIGluIHRoZSBQTSByZXN1bWUgY2FsbGJhY2suCisKKworQ29kZWMgUHJlc2V0IChQYXRjaCkKKz09PT09PT09PT09PT09PT09PT09CisKK1RvIHNldCB1cCBhbmQgaGFuZGxlIHRoZSBjb2RlYyBmdW5jdGlvbmFsaXR5IGZ1bGx5LCBlYWNoIGNvZGVjIG1heQoraGF2ZSBhIGNvZGVjIHByZXNldCAocGF0Y2gpLiAgSXQncyBkZWZpbmVkIGluIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0OgorCisJc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgeworCQl1bnNpZ25lZCBpbnQgaWQ7CisJCXVuc2lnbmVkIGludCBtYXNrOworCQl1bnNpZ25lZCBpbnQgc3ViczsKKwkJdW5zaWduZWQgaW50IHN1YnNfbWFzazsKKwkJdW5zaWduZWQgaW50IHJldjsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJaW50ICgqcGF0Y2gpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwl9OworCitXaGVuIHRoZSBjb2RlYyBpZCBhbmQgY29kZWMgc3Vic3lzdGVtIGlkIG1hdGNoIHdpdGggdGhlIGdpdmVuIGlkIGFuZAorc3VicyBmaWVsZHMgYml0d2lzZSAod2l0aCBiaXRtYXNrIG1hc2sgYW5kIHN1YnNfbWFzayksIHRoZSBjYWxsYmFjaworcGF0Y2ggaXMgY2FsbGVkLiAgVGhlIHBhdGNoIGNhbGxiYWNrIHNob3VsZCBpbml0aWFsaXplIHRoZSBjb2RlYyBhbmQKK3NldCB0aGUgY29kZWMtPnBhdGNoX29wcyBmaWVsZC4gIFRoaXMgaXMgZGVmaW5lZCBhcyBiZWxvdzoKKworCXN0cnVjdCBoZGFfY29kZWNfb3BzIHsKKwkJaW50ICgqYnVpbGRfY29udHJvbHMpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwkJaW50ICgqYnVpbGRfcGNtcykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCQlpbnQgKCppbml0KShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CisJCXZvaWQgKCpmcmVlKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CisJCXZvaWQgKCp1bnNvbF9ldmVudCkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpOworCSNpZmRlZiBDT05GSUdfUE0KKwkJaW50ICgqc3VzcGVuZCkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisJCWludCAoKnJlc3VtZSkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCSNlbmRpZgorCX07CisKK1RoZSBidWlsZF9jb250cm9scyBjYWxsYmFjayBpcyBjYWxsZWQgZnJvbSBzbmRfaGRhX2J1aWxkX2NvbnRyb2xzKCkuCitTaW1pbGFybHksIHRoZSBidWlsZF9wY21zIGNhbGxiYWNrIGlzIGNhbGxlZCBmcm9tCitzbmRfaGRhX2J1aWxkX3BjbXMoKS4gIFRoZSBpbml0IGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlcgorYnVpbGRfY29udHJvbHMgdG8gaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUuCitUaGUgZnJlZSBjYWxsYmFjayBpcyBjYWxsZWQgYXMgYSBkZXN0cnVjdG9yLgorCitUaGUgdW5zb2xfZXZlbnQgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gYW4gdW5zb2xpY2l0ZWQgZXZlbnQgaXMKK3JlY2VpdmVkLgorCitUaGUgc3VzcGVuZCBhbmQgcmVzdW1lIGNhbGxiYWNrcyBhcmUgZm9yIHBvd2VyIG1hbmFnZW1lbnQuCisKK0VhY2ggZW50cnkgY2FuIGJlIE5VTEwgaWYgbm90IG5lY2Vzc2FyeSB0byBiZSBjYWxsZWQuCisKKworR2VuZXJpYyBQYXJzZXIKKz09PT09PT09PT09PT09CisKK1doZW4gdGhlIGRldmljZSBkb2Vzbid0IG1hdGNoIHdpdGggYW55IGdpdmVuIHByZXNldHMsIHRoZSB3aWRnZXRzIGFyZQorcGFyc2VkIHZpYSB0aCBnZW5lcmljIHBhcnNlciAoaGRhX2dlbmVyaWMuYykuICBJdHMgc3VwcG9ydCBpcworbGltaXRlZDogbm8gbXVsdGktY2hhbm5lbCBzdXBwb3J0LCBmb3IgZXhhbXBsZS4KKworCitEaWdpdGFsIEkvTworPT09PT09PT09PT0KKworQ2FsbCBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9vdXRfY3RscygpIGZyb20gdGhlIHBhdGNoIHRvIGNyZWF0ZSBjb250cm9scworcmVsYXRlZCB3aXRoIFNQRElGIG91dC4gIEluIHRoZSBwYXRjaCByZXN1bWUgY2FsbGJhY2ssIGNhbGwKK3NuZF9oZGFfcmVzdW1lX3NwZGlmKCkuCisKKworSGVscGVyIEZ1bmN0aW9ucworPT09PT09PT09PT09PT09PQorCitzbmRfaGRhX2dldF9jb2RlY19uYW1lKCkgc3RvcmVzIHRoZSBjb2RlYyBuYW1lIG9uIHRoZSBnaXZlbiBzdHJpbmcuCisKK3NuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKCkgY2FuIGJlIHVzZWQgdG8gb2J0YWluIHRoZSBjb25maWd1cmF0aW9uCitpbmZvcm1hdGlvbiBtYXRjaGluZyB3aXRoIHRoZSBkZXZpY2UuICBEZWZpbmUgdGhlIHRhYmxlIHdpdGggc3RydWN0CitoZGFfYm9hcmRfY29uZmlnIGVudHJpZXMgKHplcm8tdGVybWluYXRlZCksIGFuZCBwYXNzIGl0IHRvIHRoZQorZnVuY3Rpb24uICBUaGUgZnVuY3Rpb24gY2hlY2tzIHRoZSBtb2RlbG5hbWUgZ2l2ZW4gYXMgYSBtb2R1bGUKK3BhcmFtZXRlciwgYW5kIFBDSSBzdWJzeXN0ZW0gSURzLiAgSWYgdGhlIG1hdGNoaW5nIGVudHJ5IGlzIGZvdW5kLCBpdAorcmV0dXJucyB0aGUgY29uZmlnIGZpZWxkIHZhbHVlLgorCitzbmRfaGRhX2FkZF9uZXdfY3RscygpIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbmQgYWRkIGNvbnRyb2wgZW50cmllcy4KK1Bhc3MgdGhlIHplcm8tdGVybWluYXRlZCBhcnJheSBvZiBzbmRfa2NvbnRyb2xfbmV3X3QuICBUaGUgc2FtZSBhcnJheQorY2FuIGJlIHBhc3NlZCB0byBzbmRfaGRhX3Jlc3VtZV9jdGxzKCkgZm9yIHJlc3VtZS4KK05vdGUgdGhhdCB0aGlzIHdpbGwgY2FsbCBjb250cm9sLT5wdXQgY2FsbGJhY2sgb2YgdGhlc2UgZW50cmllcy4gIFNvLAorcHV0IGNhbGxiYWNrIHNob3VsZCBjaGVjayBjb2RlYy0+aW5fcmVzdW1lIGFuZCBmb3JjZSB0byByZXN0b3JlIHRoZQorZ2l2ZW4gdmFsdWUgaWYgaXQncyBub24temVybyBldmVuIGlmIHRoZSB2YWx1ZSBpcyBpZGVudGljYWwgd2l0aCB0aGUKK2NhY2hlZCB2YWx1ZS4KKworTWFjcm9zIEhEQV9DT0RFQ19WT0xVTUUoKSwgSERBX0NPREVDX01VVEUoKSBhbmQgdGhlaXIgdmFyaWFibGVzIGNhbiBiZQordXNlZCBmb3IgdGhlIGVudHJ5IG9mIHNuZF9rY29udHJvbF9uZXdfdC4KKworVGhlIGlucHV0IE1VWCBoZWxwZXIgY2FsbGJhY2tzIGZvciBzdWNoIGEgY29udHJvbCBhcmUgcHJvdmlkZWQsIHRvbzoKK3NuZF9oZGFfaW5wdXRfbXV4X2luZm8oKSBhbmQgc25kX2hkYV9pbnB1dF9tdXhfcHV0KCkuICBTZWUKK3BhdGNoX3JlYWx0ZWsuYyBmb3IgZXhhbXBsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zZXFfb3NzLmh0bWwgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc2VxX29zcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Nzc2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc2VxX29zcy5odG1sCkBAIC0wLDAgKzEsNDA5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+Cis8SEVBRD4KKyAgIDxUSVRMRT5PU1MgU2VxdWVuY2VyIEVtdWxhdGlvbiBvbiBBTFNBPC9USVRMRT4KKzwvSEVBRD4KKzxCT0RZPgorCis8Q0VOVEVSPgorPEgxPgorCis8SFIgV0lEVEg9IjEwMCUiPjwvSDE+PC9DRU5URVI+CisKKzxDRU5URVI+Cis8SDE+CitPU1MgU2VxdWVuY2VyIEVtdWxhdGlvbiBvbiBBTFNBPC9IMT48L0NFTlRFUj4KKworPEhSIFdJRFRIPSIxMDAlIj4KKzxQPkNvcHlyaWdodCAoYykgMTk5OCwxOTk5IGJ5IFRha2FzaGkgSXdhaQorPFRUPjxBIEhSRUY9Im1haWx0bzppd2FpQHd3LnVuaS1lcmxhbmdlbi5kZSI+Jmx0O2l3YWlAd3cudW5pLWVybGFuZ2VuLmRlPjwvQT48L1RUPgorPFA+dmVyLjAuMS44OyBOb3YuIDE2LCAxOTk5Cis8SDI+CisKKzxIUiBXSURUSD0iMTAwJSI+PC9IMj4KKworPEgyPgorMS4gRGVzY3JpcHRpb248L0gyPgorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIE9TUyBzZXF1ZW5jZXIgZW11bGF0aW9uIGRyaXZlciBvbiBBTFNBLiBOb3RlCit0aGF0IHRoaXMgcHJvZ3JhbSBpcyBzdGlsbCBpbiB0aGUgZGV2ZWxvcG1lbnQgc3RhdGUuCis8UD5XaGF0IHRoaXMgZG9lcyAtIGl0IHByb3ZpZGVzIHRoZSBlbXVsYXRpb24gb2YgdGhlIE9TUyBzZXF1ZW5jZXIsIGFjY2VzcwordmlhCis8VFQ+L2Rldi9zZXF1ZW5jZXI8L1RUPiBhbmQgPFRUPi9kZXYvbXVzaWM8L1RUPiBkZXZpY2VzLgorVGhlIG1vc3Qgb2YgYXBwbGljYXRpb25zIHVzaW5nIE9TUyBjYW4gcnVuIGlmIHRoZSBhcHByb3ByaWF0ZSBBTFNBCitzZXF1ZW5jZXIgaXMgcHJlcGFyZWQuCis8UD5UaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBlbXVsYXRlZCBieSB0aGlzIGRyaXZlcjoKKzxVTD4KKzxMST4KK05vcm1hbCBzZXF1ZW5jZXIgYW5kIE1JREkgZXZlbnRzOjwvTEk+CisKKzxCUj5UaGV5IGFyZSBjb252ZXJ0ZWQgdG8gdGhlIEFMU0Egc2VxdWVuY2VyIGV2ZW50cywgYW5kIHNlbnQgdG8gdGhlIGNvcnJlc3BvbmRpbmcKK3BvcnQuCis8TEk+CitUaW1lciBldmVudHM6PC9MST4KKworPEJSPlRoZSB0aW1lciBpcyBub3Qgc2VsZWN0YWJsZSBieSBpb2N0bC4gVGhlIGNvbnRyb2wgcmF0ZSBpcyBmaXhlZCB0bworMTAwIHJlZ2FyZGxlc3Mgb2YgSFouIFRoYXQgaXMsIGV2ZW4gb24gQWxwaGEgc3lzdGVtLCBhIHRpY2sgaXMgYWx3YXlzCisxLzEwMCBzZWNvbmQuIFRoZSBiYXNlIHJhdGUgYW5kIHRlbXBvIGNhbiBiZSBjaGFuZ2VkIGluIDxUVD4vZGV2L211c2ljPC9UVD4uCisKKzxMST4KK1BhdGNoIGxvYWRpbmc6PC9MST4KKworPEJSPkl0IHB1cmVseSBkZXBlbmRzIG9uIHRoZSBzeW50aCBkcml2ZXJzIHdoZXRoZXIgaXQncyBzdXBwb3J0ZWQgc2luY2UKK3RoZSBwYXRjaCBsb2FkaW5nIGlzIHJlYWxpemVkIGJ5IGNhbGxiYWNrIHRvIHRoZSBzeW50aCBkcml2ZXIuCis8TEk+CitJL08gY29udHJvbHM6PC9MST4KKworPEJSPk1vc3Qgb2YgY29udHJvbHMgYXJlIGFjY2VwdGVkLiBTb21lIGNvbnRyb2xzCithcmUgZGVwZW5kZW50IG9uIHRoZSBzeW50aCBkcml2ZXIsIGFzIHdlbGwgYXMgZXZlbiBvbiBvcmlnaW5hbCBPU1MuPC9VTD4KK0Z1cnRoZXJtb3JlLCB5b3UgY2FuIGZpbmQgdGhlIGZvbGxvd2luZyBhZHZhbmNlZCBmZWF0dXJlczoKKzxVTD4KKzxMST4KK0JldHRlciBxdWV1ZSBtZWNoYW5pc206PC9MST4KKworPEJSPlRoZSBldmVudHMgYXJlIHF1ZXVlZCBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLgorPExJPgorTXVsdGlwbGUgYXBwbGljYXRpb25zOjwvTEk+CisKKzxCUj5Zb3UgY2FuIHJ1biB0d28gb3IgbW9yZSBhcHBsaWNhdGlvbnMgc2ltdWx0YW5lb3VzbHkgKGV2ZW4gZm9yIE9TUyBzZXF1ZW5jZXIpIQorSG93ZXZlciwgZWFjaCBNSURJIGRldmljZSBpcyBleGNsdXNpdmUgLSB0aGF0IGlzLCBpZiBhIE1JREkgZGV2aWNlIGlzIG9wZW5lZAorb25jZSBieSBzb21lIGFwcGxpY2F0aW9uLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuJ3QgdXNlIGl0LiBObyBzdWNoIGEgcmVzdHJpY3Rpb24KK2luIHN5bnRoIGRldmljZXMuCis8TEk+CitSZWFsLXRpbWUgZXZlbnQgcHJvY2Vzc2luZzo8L0xJPgorCis8QlI+VGhlIGV2ZW50cyBjYW4gYmUgcHJvY2Vzc2VkIGluIHJlYWwgdGltZSB3aXRob3V0IHVzaW5nIG91dCBvZiBib3VuZAoraW9jdGwuIFRvIHN3aXRjaCB0byByZWFsLXRpbWUgbW9kZSwgc2VuZCBBQlNUSU1FIDAgZXZlbnQuIFRoZSBmb2xsb3dlZAorZXZlbnRzIHdpbGwgYmUgcHJvY2Vzc2VkIGluIHJlYWwtdGltZSB3aXRob3V0IHF1ZXVlZC4gVG8gc3dpdGNoIG9mZiB0aGUKK3JlYWwtdGltZSBtb2RlLCBzZW5kIFJFTFRJTUUgMCBldmVudC4KKzxMST4KKzxUVD4vcHJvYzwvVFQ+IGludGVyZmFjZTo8L0xJPgorCis8QlI+VGhlIHN0YXR1cyBvZiBhcHBsaWNhdGlvbnMgYW5kIGRldmljZXMgY2FuIGJlIHNob3duIHZpYSA8VFQ+L3Byb2MvYXNvdW5kL3NlcS9vc3M8L1RUPgorYXQgYW55IHRpbWUuIEluIHRoZSBsYXRlciB2ZXJzaW9uLCBjb25maWd1cmF0aW9uIHdpbGwgYmUgY2hhbmdlZCB2aWEgPFRUPi9wcm9jPC9UVD4KK2ludGVyZmFjZSwgdG9vLjwvVUw+CisKKzxIMj4KKzIuIEluc3RhbGxhdGlvbjwvSDI+CitSdW4gY29uZmlndXJlIHNjcmlwdCB3aXRoIGJvdGggc2VxdWVuY2VyIHN1cHBvcnQgKDxUVD4tLXdpdGgtc2VxdWVuY2VyPXllczwvVFQ+KQorYW5kIE9TUyBlbXVsYXRpb24gKDxUVD4tLXdpdGgtb3NzPXllczwvVFQ+KSBvcHRpb25zLiBBIG1vZHVsZSA8VFQ+c25kLXNlcS1vc3MubzwvVFQ+Cit3aWxsIGJlIGNyZWF0ZWQuIElmIHRoZSBzeW50aCBtb2R1bGUgb2YgeW91ciBzb3VuZCBjYXJkIHN1cHBvcnRzIGZvciBPU1MKK2VtdWxhdGlvbiAoc28gZmFyLCBvbmx5IEVtdTgwMDAgZHJpdmVyKSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KK090aGVyd2lzZSwgeW91IG5lZWQgdG8gbG9hZCB0aGlzIG1vZHVsZSBtYW51YWxseS4KKzxQPkF0IGJlZ2lubmluZywgdGhpcyBtb2R1bGUgcHJvYmVzIGFsbCB0aGUgTUlESSBwb3J0cyB3aGljaCBoYXZlIGJlZW4KK2FscmVhZHkgY29ubmVjdGVkIHRvIHRoZSBzZXF1ZW5jZXIuIE9uY2UgYWZ0ZXIgdGhhdCwgdGhlIGNyZWF0aW9uIGFuZCBkZWxldGlvbgorb2YgcG9ydHMgYXJlIHdhdGNoZWQgYnkgYW5ub3VuY2VtZW50IG1lY2hhbmlzbSBvZiBBTFNBIHNlcXVlbmNlci4KKzxQPlRoZSBhdmFpbGFibGUgc3ludGggYW5kIE1JREkgZGV2aWNlcyBjYW4gYmUgZm91bmQgaW4gcHJvYyBpbnRlcmZhY2UuCitSdW4gIjxUVD5jYXQgL3Byb2MvYXNvdW5kL3NlcS9vc3M8L1RUPiIsIGFuZCBjaGVjayB0aGUgZGV2aWNlcy4gRm9yIGV4YW1wbGUsCitpZiB5b3UgdXNlIGFuIEFXRTY0IGNhcmQsIHlvdSdsbCBzZWUgbGlrZSB0aGUgZm9sbG93aW5nOgorPFBSRT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgT1NTIHNlcXVlbmNlciBlbXVsYXRpb24gdmVyc2lvbiAwLjEuOAorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEFMU0EgY2xpZW50IG51bWJlciA2MworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEFMU0EgcmVjZWl2ZXIgcG9ydCAwCisKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBOdW1iZXIgb2YgYXBwbGljYXRpb25zOiAwCisKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBOdW1iZXIgb2Ygc3ludGggZGV2aWNlczogMQorCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgc3ludGggMDogW0VNVTgwMDBdCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdHlwZSAweDEgOiBzdWJ0eXBlIDB4MjAgOiB2b2ljZXMgMzIKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjYXBhYmlsdGllcyA6IGlvY3RsIGVuYWJsZWQgLyBsb2FkX3BhdGNoIGVuYWJsZWQKKworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IE51bWJlciBvZiBNSURJIGRldmljZXM6IDMKKworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IG1pZGkgMDogW0VtdTgwMDAgUG9ydC0wXSBBTFNBIHBvcnQgNjU6MAorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNhcGFiaWxpdHkgd3JpdGUgLyBvcGVuZWQgbm9uZQorCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgbWlkaSAxOiBbRW11ODAwMCBQb3J0LTFdIEFMU0EgcG9ydCA2NToxCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY2FwYWJpbGl0eSB3cml0ZSAvIG9wZW5lZCBub25lCisKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBtaWRpIDI6IFswOiBNUFUtNDAxIChVQVJUKV0gQUxTQSBwb3J0IDY0OjAKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjYXBhYmlsaXR5IHJlYWQvd3JpdGUgLyBvcGVuZWQgbm9uZTwvUFJFPgorTm90ZSB0aGF0IHRoZSBkZXZpY2UgbnVtYmVyIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5mb3JtYXRpb24gb2YKKzxUVD4vcHJvYy9hc291bmQvb3NzLWRldmljZXM8L1RUPgorb3Igb25lcyBvZiB0aGUgb3JpZ2luYWwgT1NTIGRyaXZlci4gVXNlIHRoZSBkZXZpY2UgbnVtYmVyIGxpc3RlZCBpbiA8VFQ+L3Byb2MvYXNvdW5kL3NlcS9vc3M8L1RUPgordG8gcGxheSB2aWEgT1NTIHNlcXVlbmNlciBlbXVsYXRpb24uCis8SDI+CiszLiBVc2luZyBTeW50aGVzaXplciBEZXZpY2VzPC9IMj4KK1J1biB5b3VyIGZhdm9yaXRlIHByb2dyYW0uIEkndmUgdGVzdGVkIHBsYXltaWRpLTIuNCwgYXdlbWlkaS0wLjQuMywgZ21vZC0zLjEKK2FuZCB4bXAtMS4xLjUuIFlvdSBjYW4gbG9hZCBzYW1wbGVzIHZpYSA8VFQ+L2Rldi9zZXF1ZW5jZXI8L1RUPiBsaWtlIHNmeGxvYWQsCit0b28uCis8UD5JZiB0aGUgbG93bGV2ZWwgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGFjY2VzcyB0byBzeW50aCBkZXZpY2VzIChsaWtlCitFbXU4MDAwIGRyaXZlciksIHR3byBvciBtb3JlIGFwcGxpY2F0aW9ucyBhcmUgYWxsb3dlZCB0byBydW4gYXQgdGhlIHNhbWUKK3RpbWUuCis8SDI+Cis0LiBVc2luZyBNSURJIERldmljZXM8L0gyPgorU28gZmFyLCBvbmx5IE1JREkgb3V0cHV0IHdhcyB0ZXN0ZWQuIE1JREkgaW5wdXQgd2FzIG5vdCBjaGVja2VkIGF0IGFsbCwKK2J1dCBob3BlZnVsbHkgaXQgd2lsbCB3b3JrLiBVc2UgdGhlIGRldmljZSBudW1iZXIgbGlzdGVkIGluIDxUVD4vcHJvYy9hc291bmQvc2VxL29zczwvVFQ+LgorQmUgYXdhcmUgdGhhdCB0aGVzZSBudW1iZXJzIGFyZSBtb3N0bHkgZGlmZmVyZW50IGZyb20gdGhlIGxpc3QgaW4KKzxUVD4vcHJvYy9hc291bmQvb3NzLWRldmljZXM8L1RUPi4KKzxIMj4KKzUuIE1vZHVsZSBPcHRpb25zPC9IMj4KK1RoZSBmb2xsb3dpbmcgbW9kdWxlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKKzxVTD4KKzxMST4KKzxUVD5tYXhxbGVuPC9UVD48L0xJPgorCis8QlI+c3BlY2lmaWVzIHRoZSBtYXhpbXVtIHJlYWQvd3JpdGUgcXVldWUgbGVuZ3RoLiBUaGlzIHF1ZXVlIGlzIHByaXZhdGUKK2ZvciBPU1Mgc2VxdWVuY2VyLCBzbyB0aGF0IGl0IGlzIGluZGVwZW5kZW50IGZyb20gdGhlIHF1ZXVlIGxlbmd0aCBvZiBBTFNBCitzZXF1ZW5jZXIuIERlZmF1bHQgdmFsdWUgaXMgMTAyNC4KKzxMST4KKzxUVD5zZXFfb3NzX2RlYnVnPC9UVD48L0xJPgorCis8QlI+c3BlY2lmaWVzIHRoZSBkZWJ1ZyBsZXZlbCBhbmQgYWNjZXB0cyB6ZXJvICg9IG5vIGRlYnVnIG1lc3NhZ2UpIG9yCitwb3NpdGl2ZSBpbnRlZ2VyLiBEZWZhdWx0IHZhbHVlIGlzIDAuPC9VTD4KKworPEgyPgorNi4gUXVldWUgTWVjaGFuaXNtPC9IMj4KK09TUyBzZXF1ZW5jZXIgZW11bGF0aW9uIHVzZXMgYW4gQUxTQSBwcmlvcml0eSBxdWV1ZS4gVGhlCitldmVudHMgZnJvbSA8VFQ+L2Rldi9zZXF1ZW5jZXI8L1RUPiBhcmUgcHJvY2Vzc2VkIGFuZCBwdXQgb250byB0aGUgcXVldWUKK3NwZWNpZmllZCBieSBtb2R1bGUgb3B0aW9uLgorPFA+QWxsIHRoZSBldmVudHMgZnJvbSA8VFQ+L2Rldi9zZXF1ZW5jZXI8L1RUPiBhcmUgcGFyc2VkIGF0IGJlZ2lubmluZy4KK1RoZSB0aW1pbmcgZXZlbnRzIGFyZSBhbHNvIHBhcnNlZCBhdCB0aGlzIG1vbWVudCwgc28gdGhhdCB0aGUgZXZlbnRzIG1heQorYmUgcHJvY2Vzc2VkIGluIHJlYWwtdGltZS4gU2VuZGluZyBhbiBldmVudCBBQlNUSU1FIDAgc3dpdGNoZXMgdGhlIG9wZXJhdGlvbgorbW9kZSB0byByZWFsLXRpbWUgbW9kZSwgYW5kIHNlbmRpbmcgYW4gZXZlbnQgUkVMVElNRSAwIHN3aXRjaGVzIGl0IG9mZi4KK0luIHRoZSByZWFsLXRpbWUgbW9kZSwgYWxsIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBpbW1lZGlhdGVseS4KKzxQPlRoZSBxdWV1ZWQgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIEFMU0Egc2VxdWVuY2VyCitwb3J0cyBhZnRlciBzY2hlZHVsZWQgdGltZSBieSBBTFNBIHNlcXVlbmNlciBkaXNwYXRjaGVyLgorPFA+SWYgdGhlIHdyaXRlLXF1ZXVlIGlzIGZ1bGwsIHRoZSBhcHBsaWNhdGlvbiBzbGVlcHMgdW50aWwgYSBjZXJ0YWluIGFtb3VudAorKGFzIGRlZmF1bHQgb25lIGhhbGYpIGJlY29tZXMgZW1wdHkgaW4gYmxvY2tpbmcgbW9kZS4gVGhlIHN5bmNocm9uaXphdGlvbgordG8gd3JpdGUgdGltaW5nIHdhcyBpbXBsZW1lbnRlZCwgdG9vLgorPFA+VGhlIGlucHV0IGZyb20gTUlESSBkZXZpY2VzIG9yIGVjaG8tYmFjayBldmVudHMgYXJlIHN0b3JlZCBvbiByZWFkIEZJRk8KK3F1ZXVlLiBJZiBhcHBsaWNhdGlvbiByZWFkcyA8VFQ+L2Rldi9zZXF1ZW5jZXI8L1RUPiBpbiBibG9ja2luZyBtb2RlLCB0aGUKK3Byb2Nlc3Mgd2lsbCBiZSBhd2FrZWQuCisKKzxIMj4KKzcuIEludGVyZmFjZSB0byBTeW50aGVzaXplciBEZXZpY2U8L0gyPgorCis8SDM+Cis3LjEuIFJlZ2lzdHJhdGlvbjwvSDM+CitUbyByZWdpc3RlciBhbiBPU1Mgc3ludGhlc2l6ZXIgZGV2aWNlLCB1c2UgPFRUPnNuZF9zZXFfb3NzX3N5bnRoX3JlZ2lzdGVyPC9UVD4KK2Z1bmN0aW9uLgorPFBSRT5pbnQgc25kX3NlcV9vc3Nfc3ludGhfcmVnaXN0ZXIoY2hhciAqbmFtZSwgaW50IHR5cGUsIGludCBzdWJ0eXBlLCBpbnQgbnZvaWNlcywKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzbmRfc2VxX29zc19jYWxsYmFja190ICpvcGVyLCB2b2lkICpwcml2YXRlX2RhdGEpPC9QUkU+CitUaGUgYXJndW1lbnRzIDxUVD5uYW1lPC9UVD4sIDxUVD50eXBlPC9UVD4sIDxUVD5zdWJ0eXBlPC9UVD4gYW5kCis8VFQ+bnZvaWNlczwvVFQ+CithcmUgdXNlZCBmb3IgbWFraW5nIHRoZSBhcHByb3ByaWF0ZSBzeW50aF9pbmZvIHN0cnVjdHVyZSBmb3IgaW9jdGwuIFRoZQorcmV0dXJuIHZhbHVlIGlzIGFuIGluZGV4IG51bWJlciBvZiB0aGlzIGRldmljZS4gVGhpcyBpbmRleCBtdXN0IGJlIHJlbWVtYmVyZWQKK2ZvciB1bnJlZ2lzdGVyLiBJZiByZWdpc3RyYXRpb24gaXMgZmFpbGVkLCAtZXJybm8gd2lsbCBiZSByZXR1cm5lZC4KKzxQPlRvIHJlbGVhc2UgdGhpcyBkZXZpY2UsIGNhbGwgPFRUPnNuZF9zZXFfb3NzX3N5bnRoX3VucmVnaXN0ZXIgZnVuY3Rpb248L1RUPjoKKzxQUkU+aW50IHNuZF9zZXFfb3NzX3N5bnRoX3VucmVnaXN0ZXIoaW50IGluZGV4KSw8L1BSRT4KK3doZXJlIHRoZSA8VFQ+aW5kZXg8L1RUPiBpcyB0aGUgaW5kZXggbnVtYmVyIHJldHVybmVkIGJ5IHJlZ2lzdGVyIGZ1bmN0aW9uLgorPEgzPgorNy4yLiBDYWxsYmFja3M8L0gzPgorT1NTIHN5bnRoZXNpemVyIGRldmljZXMgaGF2ZSBjYXBhYmlsaXR5IGZvciBzYW1wbGUgZG93bmxvYWRpbmcgYW5kIGlvY3RscworbGlrZSBzYW1wbGUgcmVzZXQuIEluIE9TUyBlbXVsYXRpb24sIHRoZXNlIHNwZWNpYWwgZmVhdHVyZXMgYXJlIHJlYWxpemVkCitieSB1c2luZyBjYWxsYmFja3MuIFRoZSByZWdpc3RyYXRpb24gYXJndW1lbnQgb3BlciBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlc2UKK2NhbGxiYWNrcy4gVGhlIGZvbGxvd2luZyBjYWxsYmFjayBmdW5jdGlvbnMgbXVzdCBiZSBkZWZpbmVkOgorPFBSRT5zbmRfc2VxX29zc19jYWxsYmFja190OgorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCAoKm9wZW4pKHNuZF9zZXFfb3NzX2FyZ190ICpwLCB2b2lkICpjbG9zdXJlKTsKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpbnQgKCpjbG9zZSkoc25kX3NlcV9vc3NfYXJnX3QgKnApOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCAoKmlvY3RsKShzbmRfc2VxX29zc19hcmdfdCAqcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCAoKmxvYWRfcGF0Y2gpKHNuZF9zZXFfb3NzX2FyZ190ICpwLCBpbnQgZm9ybWF0LCBjb25zdCBjaGFyICpidWYsIGludCBvZmZzLCBpbnQgY291bnQpOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCAoKnJlc2V0KShzbmRfc2VxX29zc19hcmdfdCAqcCk7CitFeGNlcHQgZm9yIDxUVD5vcGVuPC9UVD4gYW5kIDxUVD5jbG9zZTwvVFQ+IGNhbGxiYWNrcywgdGhleSBhcmUgYWxsb3dlZAordG8gYmUgTlVMTC4KKzxQPkVhY2ggY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgdGhlIGFyZ3VtZW50IHR5cGUgc25kX3NlcV9vc3NfYXJnX3QgYXMgdGhlCitmaXJzdCBhcmd1bWVudC4KKzxQUkU+c3RydWN0IHNuZF9zZXFfb3NzX2FyZ190IHsKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpbnQgYXBwX2luZGV4OworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCBmaWxlX21vZGU7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50IHNlcV9tb2RlOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNuZF9zZXFfYWRkcl90IGFkZHI7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdm9pZCAqcHJpdmF0ZV9kYXRhOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCBldmVudF9wYXNzaW5nOworfTs8L1BSRT4KK1RoZSBmaXJzdCB0aHJlZSBmaWVsZHMsIDxUVD5hcHBfaW5kZXg8L1RUPiwgPFRUPmZpbGVfbW9kZTwvVFQ+IGFuZAorPFRUPnNlcV9tb2RlPC9UVD4KK2FyZSBpbml0aWFsaXplZCBieSBPU1Mgc2VxdWVuY2VyLiBUaGUgPFRUPmFwcF9pbmRleDwvVFQ+IGlzIHRoZSBhcHBsaWNhdGlvbgoraW5kZXggd2hpY2ggaXMgdW5pcXVlIHRvIGVhY2ggYXBwbGljYXRpb24gb3BlbmluZyBPU1Mgc2VxdWVuY2VyLiBUaGUKKzxUVD5maWxlX21vZGU8L1RUPgoraXMgYml0LWZsYWdzIGluZGljYXRpbmcgdGhlIGZpbGUgb3BlcmF0aW9uIG1vZGUuIFNlZQorPFRUPnNlcV9vc3MuaDwvVFQ+Citmb3IgaXRzIG1lYW5pbmcuIFRoZSA8VFQ+c2VxX21vZGU8L1RUPiBpcyBzZXF1ZW5jZXIgb3BlcmF0aW9uIG1vZGUuIEluCit0aGUgY3VycmVudCB2ZXJzaW9uLCBvbmx5IDxUVD5TTkRfT1NTU0VRX01PREVfU1lOVEg8L1RUPiBpcyB1c2VkLgorPFA+VGhlIG5leHQgdHdvIGZpZWxkcywgPFRUPmFkZHI8L1RUPiBhbmQgPFRUPnByaXZhdGVfZGF0YTwvVFQ+LCBtdXN0IGJlCitmaWxsZWQgYnkgdGhlIHN5bnRoIGRyaXZlciBhdCBvcGVuIGNhbGxiYWNrLiBUaGUgPFRUPmFkZHI8L1RUPiBjb250YWlucwordGhlIGFkZHJlc3Mgb2YgQUxTQSBzZXF1ZW5jZXIgcG9ydCB3aGljaCBpcyBhc3NpZ25lZCB0byB0aGlzIGRldmljZS4gSWYKK3RoZSBkcml2ZXIgYWxsb2NhdGVzIG1lbW9yeSBmb3IgPFRUPnByaXZhdGVfZGF0YTwvVFQ+LCBpdCBtdXN0IGJlIHJlbGVhc2VkCitpbiBjbG9zZSBjYWxsYmFjayBieSBpdHNlbGYuCis8UD5UaGUgbGFzdCBmaWVsZCwgPFRUPmV2ZW50X3Bhc3Npbmc8L1RUPiwgaW5kaWNhdGVzIGhvdyB0byB0cmFuc2xhdGUgbm90ZS1vbgorLyBvZmYgZXZlbnRzLiBJbiA8VFQ+UFJPQ0VTU19FVkVOVFM8L1RUPiBtb2RlLCB0aGUgbm90ZSAyNTUgaXMgcmVnYXJkZWQKK2FzIHZlbG9jaXR5IGNoYW5nZSwgYW5kIGtleSBwcmVzc3VyZSBldmVudCBpcyBwYXNzZWQgdG8gdGhlIHBvcnQuIEluIDxUVD5QQVNTX0VWRU5UUzwvVFQ+Cittb2RlLCBhbGwgbm90ZSBvbi9vZmYgZXZlbnRzIGFyZSBwYXNzZWQgdG8gdGhlIHBvcnQgd2l0aG91dCBtb2RpZmllZC4gPFRUPlBST0NFU1NfS0VZUFJFU1M8L1RUPgorbW9kZSBjaGVja3MgdGhlIG5vdGUgYWJvdmUgMTI4IGFuZCByZWdhcmRzIGl0IGFzIGtleSBwcmVzc3VyZSBldmVudCAobWFpbmx5Citmb3IgRW11ODAwMCBkcml2ZXIpLgorPEg0PgorNy4yLjEuIE9wZW4gQ2FsbGJhY2s8L0g0PgorVGhlIDxUVD5vcGVuPC9UVD4gaXMgY2FsbGVkIGF0IGVhY2ggdGltZSB0aGlzIGRldmljZSBpcyBvcGVuZWQgYnkgYW4gYXBwbGljYXRpb24KK3VzaW5nIE9TUyBzZXF1ZW5jZXIuIFRoaXMgbXVzdCBub3QgYmUgTlVMTC4gVHlwaWNhbGx5LCB0aGUgb3BlbiBjYWxsYmFjaworZG9lcyB0aGUgZm9sbG93aW5nIHByb2NlZHVyZToKKzxPTD4KKzxMST4KK0FsbG9jYXRlIHByaXZhdGUgZGF0YSByZWNvcmQuPC9MST4KKworPExJPgorQ3JlYXRlIGFuIEFMU0Egc2VxdWVuY2VyIHBvcnQuPC9MST4KKworPExJPgorU2V0IHRoZSBuZXcgcG9ydCBhZGRyZXNzIG9uIGFyZy0+YWRkci48L0xJPgorCis8TEk+CitTZXQgdGhlIHByaXZhdGUgZGF0YSByZWNvcmQgcG9pbnRlciBvbiBhcmctPnByaXZhdGVfZGF0YS48L0xJPgorPC9PTD4KK05vdGUgdGhhdCB0aGUgdHlwZSBiaXQtZmxhZ3MgaW4gcG9ydF9pbmZvIG9mIHRoaXMgc3ludGggcG9ydCBtdXN0IE5PVCBjb250YWluCis8VFQ+VFlQRV9NSURJX0dFTkVSSUM8L1RUPgorYml0LiBJbnN0ZWFkLCA8VFQ+VFlQRV9TUEVDSUZJQzwvVFQ+IHNob3VsZCBiZSB1c2VkLiBBbHNvLCA8VFQ+Q0FQX1NVQlNDUklQVElPTjwvVFQ+CitiaXQgc2hvdWxkIE5PVCBiZSBpbmNsdWRlZCwgdG9vLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byB0ZWxsIGl0IGZyb20gb3RoZXIKK25vcm1hbCBNSURJIGRldmljZXMuIElmIHRoZSBvcGVuIHByb2NlZHVyZSBzdWNjZWVkZWQsIHJldHVybiB6ZXJvLiBPdGhlcndpc2UsCityZXR1cm4gLWVycm5vLgorPEg0PgorNy4yLjIgSW9jdGwgQ2FsbGJhY2s8L0g0PgorVGhlIDxUVD5pb2N0bDwvVFQ+IGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzZXF1ZW5jZXIgcmVjZWl2ZXMgZGV2aWNlLXNwZWNpZmljCitpb2N0bHMuIFRoZSBmb2xsb3dpbmcgdHdvIGlvY3RscyBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgY2FsbGJhY2s6Cis8VUw+Cis8TEk+Cis8VFQ+SU9DVExfU0VRX1JFU0VUX1NBTVBMRVM8L1RUPjwvTEk+CisKKzxCUj5yZXNldCBhbGwgc2FtcGxlcyBvbiBtZW1vcnkgLS0gcmV0dXJuIDAKKzxMST4KKzxUVD5JT0NUTF9TWU5USF9NRU1BVkw8L1RUPjwvTEk+CisKKzxCUj5yZXR1cm4gdGhlIGF2YWlsYWJsZSBtZW1vcnkgc2l6ZQorPExJPgorPFRUPkZNXzRPUF9FTkFCTEU8L1RUPjwvTEk+CisKKzxCUj5jYW4gYmUgaWdub3JlZCB1c3VhbGx5PC9VTD4KK1RoZSBvdGhlciBpb2N0bHMgYXJlIHByb2Nlc3NlZCBpbnNpZGUgdGhlIHNlcXVlbmNlciB3aXRob3V0IHBhc3NpbmcgdG8KK3RoZSBsb3dsZXZlbCBkcml2ZXIuCis8SDQ+Cis3LjIuMyBMb2FkX1BhdGNoIENhbGxiYWNrPC9IND4KK1RoZSA8VFQ+bG9hZF9wYXRjaDwvVFQ+IGNhbGxiYWNrIGlzIHVzZWQgZm9yIHNhbXBsZS1kb3dubG9hZGluZy4gVGhpcyBjYWxsYmFjaworbXVzdCByZWFkIHRoZSBkYXRhIG9uIHVzZXItc3BhY2UgYW5kIHRyYW5zZmVyIHRvIGVhY2ggZGV2aWNlLiBSZXR1cm4gMAoraWYgc3VjY2VlZGVkLCBhbmQgLWVycm5vIGlmIGZhaWxlZC4gVGhlIGZvcm1hdCBhcmd1bWVudCBpcyB0aGUgcGF0Y2gga2V5CitpbiBwYXRjaF9pbmZvIHJlY29yZC4gVGhlIGJ1ZiBpcyB1c2VyLXNwYWNlIHBvaW50ZXIgd2hlcmUgcGF0Y2hfaW5mbyByZWNvcmQKK2lzIHN0b3JlZC4gVGhlIG9mZnMgY2FuIGJlIGlnbm9yZWQuIFRoZSBjb3VudCBpcyB0b3RhbCBkYXRhIHNpemUgb2YgdGhpcworc2FtcGxlIGRhdGEuCis8SDQ+Cis3LjIuNCBDbG9zZSBDYWxsYmFjazwvSDQ+CitUaGUgPFRUPmNsb3NlPC9UVD4gY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhpcyBkZXZpY2UgaXMgY2xvc2VkIGJ5IHRoZQorYXBwbGljYWlvbi4gSWYgYW55IHByaXZhdGUgZGF0YSB3YXMgYWxsb2NhdGVkIGluIG9wZW4gY2FsbGJhY2ssIGl0IG11c3QKK2JlIHJlbGVhc2VkIGluIHRoZSBjbG9zZSBjYWxsYmFjay4gVGhlIGRlbGV0aW9uIG9mIEFMU0EgcG9ydCBzaG91bGQgYmUKK2RvbmUgaGVyZSwgdG9vLiBUaGlzIGNhbGxiYWNrIG11c3Qgbm90IGJlIE5VTEwuCis8SDQ+Cis3LjIuNSBSZXNldCBDYWxsYmFjazwvSDQ+CitUaGUgPFRUPnJlc2V0PC9UVD4gY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gc2VxdWVuY2VyIGRldmljZSBpcyByZXNldCBvcgorY2xvc2VkIGJ5IGFwcGxpY2F0aW9ucy4gVGhlIGNhbGxiYWNrIHNob3VsZCB0dXJuIG9mZiB0aGUgc291bmRzIG9uIHRoZQorcmVsZXZhbnQgcG9ydCBpbW1lZGlhdGVseSwgYW5kIGluaXRpYWxpemUgdGhlIHN0YXR1cyBvZiB0aGUgcG9ydC4gSWYgdGhpcworY2FsbGJhY2sgaXMgdW5kZWZpbmVkLCBPU1Mgc2VxIHNlbmRzIGEgPFRUPkhFQVJUQkVBVDwvVFQ+IGV2ZW50IHRvIHRoZQorcG9ydC4KKzxIMz4KKzcuMyBFdmVudHM8L0gzPgorTW9zdCBvZiB0aGUgZXZlbnRzIGFyZSBwcm9jZXNzZWQgYnkgc2VxdWVuY2VyIGFuZCB0cmFuc2xhdGVkIHRvIHRoZSBhZGVxdWF0ZQorQUxTQSBzZXF1ZW5jZXIgZXZlbnRzLCBzbyB0aGF0IGVhY2ggc3ludGggZGV2aWNlIGNhbiByZWNlaXZlIGJ5IGlucHV0X2V2ZW50CitjYWxsYmFjayBvZiBBTFNBIHNlcXVlbmNlciBwb3J0LiBUaGUgZm9sbG93aW5nIEFMU0EgZXZlbnRzIHNob3VsZCBiZSBpbXBsZW1lbnRlZAorYnkgdGhlIGRyaXZlcjoKKzxCUj4mbmJzcDsKKzxUQUJMRSBCT1JERVIgV0lEVEg9Ijc1JSIgTk9TQVZFID4KKzxUUiBOT1NBVkU+Cis8VEQgTk9TQVZFPjxCPkFMU0EgZXZlbnQ8L0I+PC9URD4KKworPFREPjxCPk9yaWdpbmFsIE9TUyBldmVudHM8L0I+PC9URD4KKzwvVFI+CisKKzxUUj4KKzxURD5OT1RFT048L1REPgorCis8VEQ+U0VRX05PVEVPTgorPEJSPk1JRElfTk9URU9OPC9URD4KKzwvVFI+CisKKzxUUj4KKzxURD5OT1RFPC9URD4KKworPFREPlNFUV9OT1RFT0ZGCis8QlI+TUlESV9OT1RFT0ZGPC9URD4KKzwvVFI+CisKKzxUUiBOT1NBVkU+Cis8VEQgTk9TQVZFPktFWVBSRVNTPC9URD4KKworPFREPk1JRElfS0VZX1BSRVNTVVJFPC9URD4KKzwvVFI+CisKKzxUUiBOT1NBVkU+Cis8VEQ+Q0hBTlBSRVNTPC9URD4KKworPFREIE5PU0FWRT5TRVFfQUZURVJUT1VDSAorPEJSPk1JRElfQ0hOX1BSRVNTVVJFPC9URD4KKzwvVFI+CisKKzxUUiBOT1NBVkU+Cis8VEQgTk9TQVZFPlBHTUNIQU5HRTwvVEQ+CisKKzxURCBOT1NBVkU+U0VRX1BHTUNIQU5HRQorPEJSPk1JRElfUEdNX0NIQU5HRTwvVEQ+Cis8L1RSPgorCis8VFI+Cis8VEQ+UElUQ0hCRU5EPC9URD4KKworPFREPlNFUV9DT05UUk9MTEVSKENUUkxfUElUQ0hfQkVOREVSKQorPEJSPk1JRElfUElUQ0hfQkVORDwvVEQ+Cis8L1RSPgorCis8VFI+Cis8VEQ+Q09OVFJPTExFUjwvVEQ+CisKKzxURD5NSURJX0NUTF9DSEFOR0UKKzxCUj5TRVFfQkFMQU5DRSAod2l0aCBDVExfUEFOKTwvVEQ+Cis8L1RSPgorCis8VFI+Cis8VEQ+Q09OVFJPTDE0PC9URD4KKworPFREPlNFUV9DT05UUk9MTEVSPC9URD4KKzwvVFI+CisKKzxUUj4KKzxURD5SRUdQQVJBTTwvVEQ+CisKKzxURD5TRVFfQ09OVFJPTExFUihDVFJMX1BJVENIX0JFTkRFUl9SQU5HRSk8L1REPgorPC9UUj4KKworPFRSPgorPFREPlNZU0VYPC9URD4KKworPFREPlNFUV9TWVNFWDwvVEQ+Cis8L1RSPgorPC9UQUJMRT4KKworPFA+VGhlIG1vc3Qgb2YgdGhlc2UgYmVoYXZpb3IgY2FuIGJlIHJlYWxpemVkIGJ5IE1JREkgZW11bGF0aW9uIGRyaXZlcgoraW5jbHVkZWQgaW4gdGhlIEVtdTgwMDAgbG93bGV2ZWwgZHJpdmVyLiBJbiB0aGUgZnV0dXJlIHJlbGVhc2UsIHRoaXMgbW9kdWxlCit3aWxsIGJlIGluZGVwZW5kZW50LgorPFA+U29tZSBPU1MgZXZlbnRzICg8VFQ+U0VRX1BSSVZBVEU8L1RUPiBhbmQgPFRUPlNFUV9WT0xVTUU8L1RUPiBldmVudHMpIGFyZSBwYXNzZWQgYXMgZXZlbnQKK3R5cGUgU05EX1NFUV9PU1NfUFJJVkFURS4gIFRoZSBPU1Mgc2VxdWVuY2VyIHBhc3NlcyB0aGVzZSBldmVudCA4IGJ5dGUKK3BhY2tldHMgd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9uLiBUaGUgbG93bGV2ZWwgZHJpdmVyIHNob3VsZCBwcm9jZXNzIHRoZXNlCitldmVudHMgYXBwcm9wcmlhdGVseS4KKzxIMj4KKzguIEludGVyZmFjZSB0byBNSURJIERldmljZTwvSDI+CitTaW5jZSB0aGUgT1NTIGVtdWxhdGlvbiBwcm9iZXMgdGhlIGNyZWF0aW9uIGFuZCBkZWxldGlvbiBvZiBBTFNBIE1JREkgc2VxdWVuY2VyCitwb3J0cyBhdXRvbWF0aWNhbGx5IGJ5IHJlY2VpdmluZyBhbm5vdW5jZW1lbnQgZnJvbSBBTFNBIHNlcXVlbmNlciwgdGhlCitNSURJIGRldmljZXMgZG9uJ3QgbmVlZCB0byBiZSByZWdpc3RlcmVkIGV4cGxpY2l0bHkgbGlrZSBzeW50aCBkZXZpY2VzLgorSG93ZXZlciwgdGhlIE1JREkgcG9ydF9pbmZvIHJlZ2lzdGVyZWQgdG8gQUxTQSBzZXF1ZW5jZXIgbXVzdCBpbmNsdWRlIGEgZ3JvdXAKK25hbWUgPFRUPlNORF9TRVFfR1JPVVBfREVWSUNFPC9UVD4gYW5kIGEgY2FwYWJpbGl0eS1iaXQgPFRUPkNBUF9SRUFEPC9UVD4gb3IKKzxUVD5DQVBfV1JJVEU8L1RUPi4gQWxzbywgc3Vic2NyaXB0aW9uIGNhcGFiaWxpdGllcywgPFRUPkNBUF9TVUJTX1JFQUQ8L1RUPiBvciA8VFQ+Q0FQX1NVQlNfV1JJVEU8L1RUPiwKK211c3QgYmUgZGVmaW5lZCwgdG9vLiBJZiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkLCB0aGUgcG9ydCBpcyBub3QKK3JlZ2lzdGVyZWQgYXMgT1NTIHNlcXVlbmNlciBNSURJIGRldmljZS4KKzxQPlRoZSBldmVudHMgdmlhIE1JREkgZGV2aWNlcyBhcmUgcGFyc2VkIGluIE9TUyBzZXF1ZW5jZXIgYW5kIGNvbnZlcnRlZAordG8gdGhlIGNvcnJlc3BvbmRpbmcgQUxTQSBzZXF1ZW5jZXIgZXZlbnRzLiBUaGUgaW5wdXQgZnJvbSBNSURJIHNlcXVlbmNlcgoraXMgYWxzbyBjb252ZXJ0ZWQgdG8gTUlESSBieXRlIGV2ZW50cyBieSBPU1Mgc2VxdWVuY2VyLiBUaGlzIHdvcmtzIGp1c3QKK2EgcmV2ZXJzZSB3YXkgb2Ygc2VxX21pZGkgbW9kdWxlLgorPEgyPgorOS4gS25vd24gUHJvYmxlbXMgLyBUT0RPJ3M8L0gyPgorCis8VUw+Cis8TEk+CitQYXRjaCBsb2FkaW5nIHZpYSBBTFNBIGluc3RydW1lbnQgbGF5ZXIgaXMgbm90IGltcGxlbWVudGVkIHlldC48L0xJPgorPC9VTD4KKworPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NlcmlhbC11MTY1NTAudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NlcmlhbC11MTY1NTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOTE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc2VyaWFsLXUxNjU1MC50eHQKQEAgLTAsMCArMSw4OCBAQAorCisJCQlTZXJpYWwgVUFSVCAxNjQ1MC8xNjU1MCBNSURJIGRyaXZlcgorCQkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGFkYXB0b3IgbW9kdWxlIHBhcmFtZXRlciBhbGxvd3MgeW91IHRvIHNlbGVjdCBlaXRoZXI6CisKKyAgMCAtIFJvbGFuZCBTb3VuZGNhbnZhcyBzdXBwb3J0IChkZWZhdWx0KQorICAxIC0gTWlkaWF0b3IgTVMtMTI0VCBzdXBwb3J0ICgxKQorICAyIC0gTWlkaWF0b3IgTVMtMTI0VyBTL0EgbW9kZSAoMikKKyAgMyAtIE1TLTEyNFcgTS9CIG1vZGUgc3VwcG9ydCAoMykKKyAgNCAtIEdlbmVyaWMgZGV2aWNlIHdpdGggbXVsdGlwbGUgaW5wdXQgc3VwcG9ydCAoNCkKKworRm9yIHRoZSBNaWRpYXRvciBNUy0xMjRXLCB5b3UgbXVzdCBzZXQgdGhlIHBoeXNpY2FsIE0tUyBhbmQgQS1CCitzd2l0Y2hlcyBvbiB0aGUgTWlkaWF0b3IgdG8gbWF0Y2ggdGhlIGRyaXZlciBtb2RlIHlvdSBzZWxlY3QuCisKK0luIFJvbGFuZCBTb3VuZGNhbnZhcyBtb2RlLCBtdWx0aXBsZSBBTFNBIHJhdyBNSURJIHN1YnN0cmVhbXMgYXJlIHN1cHBvcnRlZAorKG1pZGlDbkQwLW1pZGlDbkQxNSkuICBXaGVuZXZlciB5b3Ugd3JpdGUgdG8gYSBkaWZmZXJlbnQgc3Vic3RyZWFtLCB0aGUgZHJpdmVyCitzZW5kcyB0aGUgbm9uc3RhbmRhcmQgTUlESSBjb21tYW5kIHNlcXVlbmNlIEY1IE5OLCB3aGVyZSBOTiBpcyB0aGUgc3Vic3RyZWFtCitudW1iZXIgcGx1cyAxLiAgUm9sYW5kIG1vZHVsZXMgdXNlIHRoaXMgY29tbWFuZCB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQKKyJwYXJ0cyIsIHNvIHRoaXMgZmVhdHVyZSBsZXRzIHlvdSB0cmVhdCBlYWNoIHBhcnQgYXMgYSBkaXN0aW5jdCByYXcgTUlESQorc3Vic3RyZWFtLiBUaGUgZHJpdmVyIHByb3ZpZGVzIG5vIHdheSB0byBzZW5kIEY1IDAwIChubyBzZWxlY3Rpb24pIG9yIHRvIG5vdAorc2VuZCB0aGUgRjUgTk4gY29tbWFuZCBzZXF1ZW5jZSBhdCBhbGw7IHBlcmhhcHMgaXQgb3VnaHQgdG8uCisKK1VzYWdlIGV4YW1wbGUgZm9yIHNpbXBsZSBzZXJpYWwgY29udmVydGVyOgorCisJL3NiaW4vc2V0c2VyaWFsIC9kZXYvdHR5UzAgdWFydCBub25lCisJL3NiaW4vbW9kcHJvYmUgc25kLXNlcmlhbC11MTY1NTAgcG9ydD0weDNmOCBpcnE9NCBzcGVlZD0xMTUyMDAKKworVXNhZ2UgZXhhbXBsZSBmb3IgUm9sYW5kIFNvdW5kQ2FudmFzIHdpdGggNCBNSURJIHBvcnRzOgorCisJL3NiaW4vc2V0c2VyaWFsIC9kZXYvdHR5UzAgdWFydCBub25lCisJL3NiaW4vbW9kcHJvYmUgc25kLXNlcmlhbC11MTY1NTAgcG9ydD0weDNmOCBpcnE9NCBvdXRzPTQKKworSW4gTVMtMTI0VCBtb2RlLCBvbmUgcmF3IE1JREkgc3Vic3RyZWFtIGlzIHN1cHBvcnRlZCAobWlkaUNuRDApOyB0aGUgb3V0cworbW9kdWxlIHBhcmFtZXRlciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byAxLiBUaGUgZHJpdmVyIHNlbmRzIHRoZSBzYW1lIGRhdGEgdG8KK2FsbCBmb3VyIE1JREkgT3V0IGNvbm5lY3RvcnMuICBTZXQgdGhlIEEtQiBzd2l0Y2ggYW5kIHRoZSBzcGVlZCBtb2R1bGUKK3BhcmFtZXRlciB0byBtYXRjaCAoQT0xOTIwMCwgQj05NjAwKS4KKworVXNhZ2UgZXhhbXBsZSBmb3IgTVMtMTI0VCwgd2l0aCBBLUIgc3dpdGNoIGluIEEgcG9zaXRpb246CisKKwkvc2Jpbi9zZXRzZXJpYWwgL2Rldi90dHlTMCB1YXJ0IG5vbmUKKwkvc2Jpbi9tb2Rwcm9iZSBzbmQtc2VyaWFsLXUxNjU1MCBwb3J0PTB4M2Y4IGlycT00IGFkYXB0b3I9MSBcCisJCQlzcGVlZD0xOTIwMAorCitJbiBNUy0xMjRXIFMvQSBtb2RlLCBvbmUgcmF3IE1JREkgc3Vic3RyZWFtIGlzIHN1cHBvcnRlZCAobWlkaUNuRDApOwordGhlIG91dHMgbW9kdWxlIHBhcmFtZXRlciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byAxLiBUaGUgZHJpdmVyIHNlbmRzCit0aGUgc2FtZSBkYXRhIHRvIGFsbCBmb3VyIE1JREkgT3V0IGNvbm5lY3RvcnMgYXQgZnVsbCBNSURJIHNwZWVkLgorCitVc2FnZSBleGFtcGxlIGZvciBTL0EgbW9kZToKKworCS9zYmluL3NldHNlcmlhbCAvZGV2L3R0eVMwIHVhcnQgbm9uZQorCS9zYmluL21vZHByb2JlIHNuZC1zZXJpYWwtdTE2NTUwIHBvcnQ9MHgzZjggaXJxPTQgYWRhcHRvcj0yCisKK0luIE1TLTEyNFcgTS9CIG1vZGUsIHRoZSBkcml2ZXIgc3VwcG9ydHMgMTYgQUxTQSByYXcgTUlESSBzdWJzdHJlYW1zOwordGhlIG91dHMgbW9kdWxlIHBhcmFtZXRlciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byAxNi4gIFRoZSBzdWJzdHJlYW0KK251bWJlciBnaXZlcyBhIGJpdG1hc2sgb2Ygd2hpY2ggTUlESSBPdXQgY29ubmVjdG9ycyB0aGUgZGF0YSBzaG91bGQgYmUKK3NlbnQgdG8sIHdpdGggbWlkaUNuRDEgc2VuZGluZyB0byBPdXQgMSwgbWlkaUNuRDIgdG8gT3V0IDIsIG1pZGlDbkQ0IHRvCitPdXQgMywgYW5kIG1pZGlDbkQ4IHRvIE91dCA0LiAgVGh1cyBtaWRpQ25EMTUgc2VuZHMgdGhlIGRhdGEgdG8gYWxsIDQgcG9ydHMuCitBcyBhIHNwZWNpYWwgY2FzZSwgbWlkaUNuRDAgYWxzbyBzZW5kcyB0byBhbGwgcG9ydHMsIHNpbmNlIGl0IGlzIG5vdCB1c2VmdWwKK3RvIHNlbmQgdGhlIGRhdGEgdG8gbm8gcG9ydHMuICBNL0IgbW9kZSBoYXMgZXh0cmEgb3ZlcmhlYWQgdG8gc2VsZWN0IHRoZSBNSURJCitPdXQgZm9yIGVhY2ggYnl0ZSwgc28gdGhlIGFnZ3JlZ2F0ZSBkYXRhIHJhdGUgYWNyb3NzIGFsbCBmb3VyIE1JREkgT3V0cyBpcworYXQgbW9zdCBvbmUgYnl0ZSBldmVyeSA1MjAgdXMsIGFzIGNvbXBhcmVkIHdpdGggdGhlIGZ1bGwgTUlESSBkYXRhIHJhdGUgb2YKK29uZSBieXRlIGV2ZXJ5IDMyMCB1cyBwZXIgcG9ydC4KKworVXNhZ2UgZXhhbXBsZSBmb3IgTS9CIG1vZGU6CisKKwkvc2Jpbi9zZXRzZXJpYWwgL2Rldi90dHlTMCB1YXJ0IG5vbmUKKwkvc2Jpbi9tb2Rwcm9iZSBzbmQtc2VyaWFsLXUxNjU1MCBwb3J0PTB4M2Y4IGlycT00IGFkYXB0b3I9MworCitUaGUgTVMtMTI0VyBoYXJkd2FyZSdzIE0vQSBtb2RlIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLiBUaGlzIG1vZGUgYWxsb3dzCit0aGUgTUlESSBPdXRzIHRvIGFjdCBpbmRlcGVuZGVudGx5IGF0IGRvdWJsZSB0aGUgYWdncmVnYXRlIHRocm91Z2hwdXQgb2YgTS9CLAorYnV0IGRvZXMgbm90IGFsbG93IHNlbmRpbmcgdGhlIHNhbWUgYnl0ZSBzaW11bHRhbmVvdXNseSB0byBtdWx0aXBsZSBNSURJIE91dHMuIAorVGhlIE0vQSBwcm90b2NvbCByZXF1aXJlcyB0aGUgZHJpdmVyIHRvIHR3aWRkbGUgdGhlIG1vZGVtIGNvbnRyb2wgbGluZXMgdW5kZXIKK3RpbWluZyBjb25zdHJhaW50cywgc28gaXQgd291bGQgYmUgYSBiaXQgbW9yZSBjb21wbGljYXRlZCB0byBpbXBsZW1lbnQgdGhhbgordGhlIG90aGVyIG1vZGVzLgorCitNaWRpYXRvciBtb2RlbHMgb3RoZXIgdGhhbiBNUy0xMjRXIGFuZCBNUy0xMjRUIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4gCitOb3RlIHRoYXQgdGhlIHN1ZmZpeCBsZXR0ZXIgaXMgc2lnbmlmaWNhbnQ7IHRoZSBNUy0xMjQgYW5kIE1TLTEyNEIgYXJlIG5vdAorY29tcGF0aWJsZSwgbm9yIGFyZSB0aGUgb3RoZXIga25vd24gbW9kZWxzIE1TLTEwMSwgTVMtMTAxQiwgTVMtMTAzLCBhbmQgTVMtMTE0LgorSSBkbyBoYXZlIGRvY3VtZW50YXRpb24gKHRpbS5tYW5uQGNvbXBhcS5jb20pIHRoYXQgcGFydGlhbGx5IGNvdmVycyB0aGVzZSBtb2RlbHMsCitidXQgbm8gdW5pdHMgdG8gZXhwZXJpbWVudCB3aXRoLiAgVGhlIE1TLTEyNFcgc3VwcG9ydCBpcyB0ZXN0ZWQgd2l0aCBhIHJlYWwgdW5pdC4KK1RoZSBNUy0xMjRUIHN1cHBvcnQgaXMgdW50ZXN0ZWQsIGJ1dCBzaG91bGQgd29yay4KKworVGhlIEdlbmVyaWMgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGlucHV0IGFuZCBvdXRwdXQgc3Vic3RyZWFtcyBvdmVyIGEgc2luZ2xlCitzZXJpYWwgcG9ydC4gIFNpbWlsYXIgdG8gUm9sYW5kIFNvdW5kY2FudmFzIG1vZGUsIEY1IE5OIGlzIHVzZWQgdG8gc2VsZWN0IHRoZQorYXBwcm9wcmlhdGUgaW5wdXQgb3Igb3V0cHV0IHN0cmVhbSAoZGVwZW5kaW5nIG9uIHRoZSBkYXRhIGRpcmVjdGlvbikuCitBZGRpdGlvbmFsbHksIHRoZSBDVFMgc2lnbmFsIGlzIHVzZWQgdG8gcmVndWxhdGUgdGhlIGRhdGEgZmxvdy4gIFRoZSBudW1iZXIgb2YKK2lucHV0cyBpcyBzcGVjaWZpZWQgYnkgdGhlIGlucyBwYXJhbWV0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BRDE4MTYgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BRDE4MTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiZDhmMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0FEMTgxNgpAQCAtMCwwICsxLDg0IEBACitEb2N1bWVudGF0aW9uIGZvciB0aGUgQUQxODE2KEEpIHNvdW5kIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW5zdGFsbGF0aW9uOgorLS0tLS0tLS0tLS0tLQorCitUbyBnZXQgeW91ciBBRDE4MTYoQSkgYmFzZWQgc291bmQgY2FyZCB3b3JrLCB5b3UnbGwgaGF2ZSB0byBlbmFibGUgc3VwcG9ydCBmb3IKK2V4cGVyaW1lbnRhbCBjb2RlICgiUHJvbXB0IGZvciBkZXZlbG9wbWVudCBhbmQvb3IgaW5jb21wbGV0ZSBjb2RlL2RyaXZlcnMiKQorYW5kIGlzYXBucCAoIlBsdWcgYW5kIFBsYXkgc3VwcG9ydCIsICJJU0EgUGx1ZyBhbmQgUGxheSBzdXBwb3J0IikuIEVuYWJsZQorIlNvdW5kIGNhcmQgc3VwcG9ydCIsICJPU1MgbW9kdWxlcyBzdXBwb3J0IiBhbmQgIlN1cHBvcnQgZm9yIEFEMTgxNihBKSBiYXNlZAorY2FyZHMgKEVYUEVSSU1FTlRBTCkiIGluIHRoZSBzb3VuZCBjb25maWd1cmF0aW9uIG1lbnUsIHRvby4gTm93IGJ1aWxkLCBpbnN0YWxsCithbmQgcmVib290IHRoZSBuZXcga2VybmVsIGFzIHVzdWFsLgorCitGZWF0dXJlczoKKy0tLS0tLS0tLQorCitMaXN0IG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcjoKKy0gZnVsbC1kdXBsZXggc3VwcG9ydAorLSBzdXBwb3J0ZWQgYXVkaW8gZm9ybWF0czogdW5zaWduZWQgOGJpdCwgc2lnbmVkIDE2Yml0IGxpdHRsZSBlbmRpYW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIDE2Yml0IGJpZyBlbmRpYW4sILUtbGF3LCBBLWxhdworLSBzdXBwb3J0ZWQgY2hhbm5lbHM6IG1vbm8gYW5kIHN0ZXJlbworLSBzdXBwb3J0ZWQgcmVjb3JkaW5nIHNvdXJjZXM6IE1hc3RlciwgQ0QsIExpbmUsIExpbmUxLCBMaW5lMiwgTWljCistIHN1cHBvcnRzIHBoYXQgM2Qgc3RlcmVvIGNpcmN1aXQgKExpbmUgMykKKworCitTdXBwb3J0ZWQgY2FyZHM6CistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgY2FyZHMgYXJlIGtub3duIHRvIHdvcmsgd2l0aCB0aGlzIGRyaXZlcjoKKy0gVGVycmF0ZWMgQmFzZSAxIAorLSBUZXJyYXRlYyBCYXNlIDY0IAorLSBIUCBLYXlhayAKKy0gQWNlciBGWC0zRAorLSBTWS0xODE2IAorLSBIaWdoc2NyZWVuIFNvdW5kLUJvb3N0YXIgMzIgV2F2ZSAzRAorLSBIaWdoc2NyZWVuIFNvdW5kLUJvb3N0YXIgMTYgCistIEFWTSBBcGV4IFBybyBjYXJkIAorLSAoQXp0ZWNoIFNDLTE2IDNEKSAKKy0gKE5ld2NvbSBTQy0xNiAzRCkgCistIChUZXJyYXRlYyBFV1M2NFMpIAorCitDYXJkcyBsaXN0ZWQgaW4gYnJhY2tldHMgYXJlIG5vdCBzdXBwb3J0ZWQgcmVsaWFibGUuIElmIHlvdSBoYXZlIHN1Y2ggYSBjYXJkIAoreW91IHNob3VsZCBhZGQgdGhlIGV4dHJhIHBhcmFtZXRlcjoKKyAgb3B0aW9ucz0xCit3aGVuIGxvYWRpbmcgdGhlIGFkMTgxNiBtb2R1bGUgdmlhIG1vZHByb2JlLiAKKworCitUcm91Ymxlc2hvb3Rpbmc6CistLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IG9mIGFsbCB5b3Ugc2hvdWxkIGNoZWNrLCBpZiB0aGUgZHJpdmVyIGhhcyBiZWVuIGxvYWRlZAorcHJvcGVybHkuCisKK0lmIGxvYWRpbmcgb2YgdGhlIGRyaXZlciBzdWNjZWVkcywgYnV0IHBsYXliYWNrL2NhcHR1cmUgZmFpbHMsIGNoZWNrCitpZiB5b3UgdXNlZCB0aGUgY29ycmVjdCB2YWx1ZXMgZm9yIGlycSwgZG1hIGFuZCBkbWEyIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLgorSWYgb25lIG9mIHRoZW0gaXMgd3JvbmcgeW91IHVzdWFsbHkgZ2V0IHRoZSBmb2xsb3dpbmcgZXJyb3IgbWVzc2FnZToKKworTm92ICA2IDE3OjA2OjEzIHRlazAxIGtlcm5lbDogU291bmQ6IERNQSAob3V0cHV0KSB0aW1lZCBvdXQgLSBJUlEvRFJRIGNvbmZpZyBlcnJvcj8KKworSWYgcGxheWJhY2svY2FwdHVyZSBpcyB0b28gZmFzdCBvciB0byBzbG93LCB5b3Ugc2hvdWxkIGhhdmUgYSBsb29rIGF0Cit0aGUgY2xvY2sgY2hpcCBvZiB5b3VyIHNvdW5kIGNhcmQuIFRoZSBBRDE4MTYgd2FzIGRlc2lnbmVkIGZvciBhIDMzTUh6Citvc2NpbGxhdG9yLCBob3dldmVyIG1vc3Qgc291bmQgY2FyZCBtYW51ZmFjdHVyZXIgdXNlIHNsaWdodGx5CitkaWZmZXJlbnQgb3NjaWxsYXRvcnMgYXMgdGhleSBhcmUgY2hlYXBlciB0aGFuIDMzTUh6IG9zY2lsbGF0b3JzLiBJZgoreW91IGhhdmUgc3VjaCBhIGNhcmQgeW91IGhhdmUgdG8gYWRqdXN0IHRoZSBhZDE4MTZfY2xvY2tmcmVxIHBhcmFtZXRlcgorYWJvdmUuIEZvciBleGFtcGxlOiBGb3IgYSBjYXJkIHVzaW5nIGEgMzIuODc1TUh6IG9zY2lsbGF0b3IgdXNlCithZDE4MTZfY2xvY2tmcmVxPTMyODc1IGluc3RlYWQgb2YgYWQxODE2X2Nsb2NrZnJlcT0zMzAwMC4KKworCitVcGRhdGVzLCBidWdmaXhlcyBhbmQgYnVncmVwb3J0czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHRoZSBkcml2ZXIgaXMgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCB1bmRlciBkZXZlbG9wbWVudCwgeW91IHNob3VsZAord2F0Y2ggb3V0IGZvciB1cGRhdGVzLiAgVXBkYXRlcyBvZiB0aGUgZHJpdmVyIGFyZSBhdmFpbGFibGUgb24gdGhlCitJbnRlcm5ldCBmcm9tIG9uZSBvZiBteSBob21lIHBhZ2VzOgorICBodHRwOi8vd3d3LnN0dWRlbnQuaW5mb3JtYXRpay50dS1kYXJtc3RhZHQuZGUvfnRlay9wcm9qZWN0cy9saW51eC5odG1sCitvcjoKKyAgaHR0cDovL3d3dy50dS1kYXJtc3RhZHQuZGUvfnRlazAxL3Byb2plY3RzL2xpbnV4Lmh0bWwKKworQnVncmVwb3J0cywgYnVnZml4ZXMgYW5kIHJlbGF0ZWQgcXVlc3Rpb25zIHNob3VsZCBiZSBzZW50IHZpYSBFLU1haWwgdG86CisgIHRla0ByYmcuaW5mb3JtYXRpay50dS1kYXJtc3RhZHQuZGUKKworVGhvcnN0ZW4gS25hYmUgPHRla0ByYmcuaW5mb3JtYXRpay50dS1kYXJtc3RhZHQuZGU+CitDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+CisJTGFzdCBtb2RpZmllZDogMjAwMC8wOS8yMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQUxTIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQUxTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMWZmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BTFMKQEAgLTAsMCArMSw2NiBAQAorQUxTLTAwNy9BTFMtMTAwL0FMUy0yMDAgYmFzZWQgc291bmQgY2FyZHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnQgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIGFyb3VuZCB0aGUgQXZhbmNlIExvZ2ljCitBTFMtMDA3L0FMUy0xMDAvQUxTLTIwMCBjaGlwIGlzIGluY2x1ZGVkLiAgVGhlc2UgY2hpcHMgYXJlIGEgc2luZ2xlCitjaGlwIFBuUCBzb3VuZCBzb2x1dGlvbiB3aGljaCBpcyBtb3N0bHkgaGFyZHdhcmUgY29tcGF0aWJsZSB3aXRoIHRoZQorU291bmQgQmxhc3RlciAxNiBjYXJkLCB3aXRoIG1vc3QgZGlmZmVyZW5jZXMgb2NjdXJyaW5nIGluIHRoZSB1c2Ugb2YKK3RoZSBtaXhlciByZWdpc3RlcnMuICBGb3IgdGhpcyByZWFzb24gdGhlIEFMUyBjb2RlIGlzIGludGVncmF0ZWQKK2FzIHBhcnQgb2YgdGhlIFNvdW5kIEJsYXN0ZXIgMTYgZHJpdmVyIChhZGRpbmcgb25seSA4MDAgYnl0ZXMgdG8gdGhlCitTQjE2IGRyaXZlcikuCisKK1RvIHVzZSBhbiBBTFMgc291bmQgY2FyZCB1bmRlciBMaW51eCwgZW5hYmxlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcworbW9kdWxlcyBpbiB0aGUgc291bmQgY29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgY29uZmlnOgorICAtIDEwMCUgU291bmQgQmxhc3RlciBjb21wYXRpYmxlcyAoU0IxNi8zMi82NCwgRVNTLCBKYXp6MTYpIHN1cHBvcnQKKyAgLSBGTSBzeW50aGVzaXplciAoWU0zODEyL09QTC0zKSBzdXBwb3J0IAorICAtIHN0YW5kYWxvbmUgTVBVNDAxIHN1cHBvcnQgbWF5IGJlIHJlcXVpcmVkIGZvciBzb21lIGNhcmRzOyBmb3IgdGhlCisgICAgQUxTLTAwNywgd2hlbiB1c2luZyBpc2FwbnB0b29scywgaXQgaXMgcmVxdWlyZWQKK1NpbmNlIHRoZSBBTFMtMDA3LzEwMC8yMDAgYXJlIFBuUCBjYXJkcywgSVNBUG5QIHN1cHBvcnQgc2hvdWxkIHByb2JhYmx5IGJlCitjb21waWxlZCBpbi4gIElmIGtlcm5lbCBsZXZlbCBQblAgc3VwcG9ydCBpcyBub3QgaW5jbHVkZWQsIGlzYXBucHRvb2xzIHdpbGwKK2JlIHJlcXVpcmVkIHRvIGNvbmZpZ3VyZSB0aGUgY2FyZCBiZWZvcmUgdGhlIHNvdW5kIG1vZHVsZXMgYXJlIGxvYWRlZC4KKworV2hlbiB1c2luZyBrZXJuZWwgbGV2ZWwgSVNBUG5QLCB0aGUga2VybmVsIHNob3VsZCBjb3JyZWN0bHkgaWRlbnRpZnkgYW5kCitjb25maWd1cmUgYWxsIHJlc291cmNlcyByZXF1aXJlZCBieSB0aGUgY2FyZCB3aGVuIHRoZSAic2IiIG1vZHVsZSBpcworaW5zZXJ0ZWQuICBOb3RlIHRoYXQgdGhlIEFMUy0wMDcgZG9lcyBub3QgaGF2ZSBhIDE2IGJpdCBETUEgY2hhbm5lbCBhbmQgdGhhdAordGhlIE1QVTQwMSBpbnRlcmZhY2Ugb24gdGhpcyBjYXJkIHVzZXMgYSBkaWZmZXJlbnQgaW50ZXJydXB0IHRvIHRoZSBhdWRpbworc2VjdGlvbi4gIFRoaXMgc2hvdWxkIGFsbCBiZSBjb3JyZWN0bHkgY29uZmlndXJlZCBieSB0aGUga2VybmVsOyBpZiBwcm9ibGVtcword2l0aCB0aGUgTVBVNDAxIGludGVyZmFjZSBzdXJmYWNlLCB0cnkgdXNpbmcgdGhlIHN0YW5kYWxvbmUgTVBVNDAxIG1vZHVsZSwKK3Bhc3NpbmcgIjAiIGFzIHRoZSAic2IiIG1vZHVsZSdzICJtcHVfaW8iIG1vZHVsZSBwYXJhbWV0ZXIgdG8gcHJldmVudCB0aGUKK3NvdW5kYmxhc3RlciBkcml2ZXIgYXR0ZW1wdGluZyB0byByZWdpc3RlciB0aGUgTVBVNDAxIGl0c2VsZi4gIFRoZSBvbmJvYXJkCitzeW50aCBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIHRoZSAib3BsMyIgbW9kdWxlLgorCitJZiBpc2FwbnB0b29scyBpcyB1c2VkIHRvIHdha2UgdXAgdGhlIHNvdW5kIGNhcmQgKGFzIGluIDIuMi54KSwgdGhlIHNldHRpbmdzCitvZiB0aGUgY2FyZCdzIHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBrZXJuZWwgbW9kdWxlcyAoInNiIiwgIm9wbDMiCithbmQgIm1wdTQwMSIpIHVzaW5nIHRoZSBtb2R1bGUgcGFyYW1ldGVycy4gIFdoZW4gY29uZmlndXJpbmcgYW4gQUxTLTAwNywgYmUKK3N1cmUgdG8gc3BlY2lmeSBkaWZmZXJlbnQgSVJRcyBmb3IgdGhlIGF1ZGlvIGFuZCBNUFU0MDEgc2VjdGlvbnMgLSB0aGlzIGNhcmQKK3JlcXVpcmVzIHRoZXkgYmUgZGlmZmVyZW50LiAgRm9yICJzYiIsICJpbyIsICJpcnEiIGFuZCAiZG1hIiBzaG91bGQgYmUgc2V0Cit0byB0aGUgc2FtZSB2YWx1ZXMgdXNlZCB0byBjb25maWd1cmUgdGhlIGF1ZGlvIHNlY3Rpb24gb2YgdGhlIGNhcmQgd2l0aAoraXNhcG5wLiAgImRtYTE2IiBzaG91bGQgYmUgZXhwbGljaXRseSBzZXQgdG8gIi0xIiBmb3IgYW4gQUxTLTAwNyBzaW5jZSB0aGlzCitjYXJkIGRvZXMgbm90IGhhdmUgYSAxNiBiaXQgZG1hIGNoYW5uZWw7IGlmIG5vdCBzcGVjaWZpZWQgdGhlIGtlcm5lbCB3aWxsCitkZWZhdWx0IHRvIHVzaW5nIGNoYW5uZWwgNSBhbnl3YXkgd2hpY2ggd2lsbCBjYXVzZSBhdWRpbyBub3QgdG8gd29yay4gCisibXB1X2lvIiBzaG91bGQgYmUgc2V0IHRvIDAuICBUaGUgImlvIiBwYXJhbWV0ZXIgb2YgdGhlICJvcGwzIiBtb2R1bGUgc2hvdWxkCithbHNvIGFncmVlIHdpdGggdGhlIHNldHRpbmcgdXNlZCBieSBpc2FwbnAuICBUbyBnZXQgdGhlIE1QVTQwMSBpbnRlcmZhY2UKK3dvcmtpbmcgb24gYW4gQUxTLTAwNyBjYXJkLCB0aGUgIm1wdTQwMSIgbW9kdWxlIHdpbGwgYmUgcmVxdWlyZWQgc2luY2UgdGhpcworY2FyZCB1c2VzIHNlcGFyYXRlIElSUXMgZm9yIHRoZSBhdWRpbyBhbmQgTVBVNDAxIHNlY3Rpb25zIGFuZCB0aGVyZSBpcyBubworcGFyYW1ldGVyIGF2YWlsYWJsZSB0byBwYXNzIGEgZGlmZmVyZW50IElSUSB0byB0aGUgInNiIiBkcml2ZXIgKHdob3NlCitpbmJ1aWx0IE1QVTQwMSBkcml2ZXIgd291bGQgb3RoZXJ3aXNlIGJlIGZpbmUpLiAgSW5zZXJ0IHRoZSBtcHU0MDEgbW9kdWxlCitwYXNzaW5nIGFwcHJvcHJpYXRlIHZhbHVlcyB1c2luZyB0aGUgImlvIiBhbmQgImlycSIgcGFyYW1ldGVycy4KKworVGhlIHJlc3VsdGluZyBzb3VuZCBkcml2ZXIgd2lsbCBwcm92aWRlIHRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzOgorICAtIDggYW5kIDE2IGJpdCBhdWRpbyBwbGF5YmFjaworICAtIDggYW5kIDE2IGJpdCBhdWRpbyByZWNvcmRpbmcKKyAgLSBTb2Z0d2FyZSBzZWxlY3Rpb24gb2YgcmVjb3JkIHNvdXJjZSAobGluZSBpbiwgQ0QsIEZNLCBtaWMsIG1hc3RlcikKKyAgLSBSZWNvcmQgYW5kIHBsYXliYWNrIG9mIG1pZGkgZGF0YSB2aWEgdGhlIGV4dGVybmFsIE1QVS00MDEKKyAgLSBQbGF5YmFjayBvZiBtaWRpIGRhdGEgdXNpbmcgaW5idWlsdCBGTSBzeW50aGVzaXplcgorICAtIENvbnRyb2wgb2YgdGhlIEFMUy0wMDcgbWl4ZXIgdmlhIGFueSBPU1MtY29tcGF0aWJsZSBtaXhlciBwcm9ncmFtcy4gCisgICAgQ29udHJvbHMgYXZhaWxhYmxlIGFyZSBNYXN0ZXIgKEwmUiksIExpbmUgaW4gKEwmUiksIENEIChMJlIpLCAKKyAgICBEU1AvUENNL2F1ZGlvIG91dCAoTCZSKSwgRk0gKEwmUikgYW5kIE1pYyBpbiAobW9ubykuCisKK0pvbmF0aGFuIFdvaXRoZQorandvaXRoZUBwaHlzaWNzLmFkZWxhaWRlLmVkdS5hdQorMzAgTWFyY2ggMTk5OAorCitNb2RpZmllZCAyMDAwLTAyLTI2IGJ5IERhdmUgRm9ycmVzdCwgZHJmNW5AdmlyZ2luaWEuZWR1IHRvIGFkZCBBTFMxMDAvQUxTMjAwCitNb2RpZmllZCAyMDAwLTA0LTEwIGJ5IFBhdWwgTGF1ZmVyLCBwZWxhdWZlckBjc3Vwb21vbmEuZWR1IHRvIGFkZCBJU0FQblAgaW5mby4KK01vZGlmaWVkIDIwMDAtMTEtMTkgYnkgSm9uYXRoYW4gV29pdGhlLCBqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1CisgLSB1cGRhdGVkIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgMi40LnguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BV0UzMiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0FXRTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTc5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BV0UzMgpAQCAtMCwwICsxLDc2IEBACisJSW5zdGFsbGluZyBhbmQgdXNpbmcgQ3JlYXRpdmUgQVdFIG1pZGkgc291bmQgdW5kZXIgTGludXguCisKK1RoaXMgZG9jdW1lbnRhdGlvbiBpcyBkZXZvdGVkIHRvIHRoZSBDcmVhdGl2ZSBTb3VuZCBCbGFzdGVyIEFXRTMyLCBBV0U2NCBhbmQgCitTQjMyLgorCisxKSBNYWtlIHN1cmUgeW91IGhhdmUgYW4gT1JJR0lOQUwgQ3JlYXRpdmUgU0IzMiwgQVdFMzIgb3IgQVdFNjQgY2FyZC4gVGhpcworICAgaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSBkcml2ZXIgd29ya3Mgb25seSB3aXRoIHJlYWwgQ3JlYXRpdmUgY2FyZHMuCisKKzIpIFRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyByZS1jb21waWxlIHlvdXIga2VybmVsIHdpdGggc3VwcG9ydCBmb3IKKyAgIHlvdXIgc291bmQgY2FyZC4gUnVuIHlvdXIgZmF2b3VyaXRlIHRvb2wgdG8gY29uZmlndXJlIHRoZSBrZXJuZWwgYW5kIHdoZW4KKyAgIHlvdSBnZXQgdG8gdGhlICJTb3VuZCIgbWVudSB5b3Ugc2hvdWxkIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nOgorCisgICBTb3VuZCBjYXJkIHN1cHBvcnQsCisgICBPU1Mgc291bmQgbW9kdWxlcywKKyAgIDEwMCUgU291bmQgQmxhc3RlciBjb21wYXRpYmxlcyAoU0IxNi8zMi82NCwgRVNTLCBKYXp6MTYpIHN1cHBvcnQsCisgICBBV0UzMiBzeW50aAorCisgICBJZiB5b3VyIGNhcmQgaXMgIlBsdWcgYW5kIFBsYXkiIHlvdSB3aWxsIGFsc28gbmVlZCB0byBlbmFibGUgdGhlc2UgdHdvCisgICBvcHRpb25zLCBmb3VuZCB1bmRlciB0aGUgIlBsdWcgYW5kIFBsYXkgY29uZmlndXJhdGlvbiIgbWVudToKKworICAgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisgICBJU0EgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisKKyAgIE5vdyBjb21waWxlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgaW4gbm9ybWFsIGZhc2hpb24uIElmIHlvdSBkb24ndCBrbm93CisgICBob3cgdG8gZG8gdGhpcyB5b3UgY2FuIGZpbmQgaW5zdHJ1Y3Rpb25zIGZvciB0aGlzIGluIHRoZSBSRUFETUUgZmlsZQorICAgbG9jYXRlZCBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGtlcm5lbCBzb3VyY2UuCisKKzMpIEJlZm9yZSB5b3UgY2FuIHN0YXJ0IHBsYXlpbmcgbWlkaSBmaWxlcyB5b3Ugd2lsbCBoYXZlIHRvIGxvYWQgYSBzb3VuZAorICAgYmFuayBmaWxlLiBUaGUgdXRpbGl0eSBuZWVkZWQgZm9yIGRvaW5nIHRoaXMgaXMgY2FsbGVkICJzZnhsb2FkIiwgYW5kIGl0CisgICBpcyBvbmUgb2YgdGhlIHV0aWxpdGllcyBmb3VuZCBpbiBhIHBhY2thZ2UgY2FsbGVkICJhd2VzZngiLiBJZiB0aGlzCisgICBwYWNrYWdlIGlzIG5vdCBhdmFpbGFibGUgaW4geW91ciBkaXN0cmlidXRpb24geW91IGNhbiBkb3dubG9hZCB0aGUgQVdFCisgICBzbmFwc2hvdCBmcm9tIENyZWF0aXZlIExhYnMgT3BlbiBTb3VyY2Ugd2Vic2l0ZToKKworICAgaHR0cDovL3d3dy5vcGVuc291cmNlLmNyZWF0aXZlLmNvbS9zbmFwc2hvdC5odG1sCisKKyAgIE9uY2UgeW91IGhhdmUgdW5wYWNrZWQgdGhlIEFXRSBzbmFwc2hvdCB5b3Ugd2lsbCBzZWUgYSAiYXdlc2Z4IgorICAgZGlyZWN0b3J5LiBGb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiBhd2VzZngvZG9jcy9JTlNUQUxMIHRvIGluc3RhbGwgdGhlCisgICB1dGlsaXRpZXMgaW4gdGhpcyBwYWNrYWdlLiBBZnRlciBkb2luZyB0aGlzLCBzZnhsb2FkIHNob3VsZCBiZSBpbnN0YWxsZWQKKyAgIGFzOgorCisgICAvdXNyL2xvY2FsL2Jpbi9zZnhsb2FkCisKKyAgIFRvIGVuYWJsZSBBV0UgZ2VuZXJhbCBtaWRpIHN5bnRoZXNpcyB5b3Ugc2hvdWxkIGFsc28gZ2V0IHRoZSBzb3VuZCBiYW5rCisgICBmaWxlIGZvciBnZW5lcmFsIG1pZGkgZnJvbToKKworICAgaHR0cDovL21lbWJlcnMueG9vbS5jb20veWFyL3N5bnRoZ20uc2JrLmd6CisKKyAgIENvcHkgaXQgdG8gYSBkaXJlY3Rvcnkgb2YgeW91ciBjaG9pY2UsIGFuZCB1bnBhY2sgaXQgdGhlcmUuCisKKzQpIEVkaXQgL2V0Yy9tb2Rwcm9iZS5jb25mLCBhbmQgaW5zZXJ0IHRoZSBmb2xsb3dpbmcgbGluZXMgYXQgdGhlIGVuZCBvZiB0aGUKKyAgIGZpbGU6CisKKyAgYWxpYXMgc291bmQtc2xvdC0wIHNiCisgIGFsaWFzIHNvdW5kLXNlcnZpY2UtMC0xIGF3ZV93YXZlCisgIGluc3RhbGwgYXdlX3dhdmUgL3NiaW4vbW9kcHJvYmUgLS1maXJzdC10aW1lIC1pIGF3ZV93YXZlICYmIC91c3IvbG9jYWwvYmluL3NmeGxvYWQgUEFUSF9UT19TT1VORF9CQU5LX0ZJTEUKKworICBZb3Ugd2lsbCBvZiBjb3Vyc2UgaGF2ZSB0byBjaGFuZ2UgIlBBVEhfVE9fU09VTkRfQkFOS19GSUxFIiB0byB0aGUgZnVsbAorICBwYXRoIG9mIG9mIHRoZSBzb3VuZCBiYW5rIGZpbGUuIFRoYXQgd2lsbCBlbmFibGUgdGhlIFNvdW5kIEJsYXN0ZXIgYW5kIEFXRQorICB3YXZlIHN5bnRoZXNpcy4gVG8gcGxheSBtaWRpIGZpbGVzIHlvdSBzaG91bGQgZ2V0IG9uZSBvZiB0aGVzZSBwcm9ncmFtcyBpZgorICB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIHRoZW06CisKKyAgUGxheW1pZGk6CQkJaHR0cDovL3BsYXltaWRpLm9wZW5wcm9qZWN0cy5uZXQKKworICBBV0VNaWRpIFBsYXllciAoZHJ2bWlkaSkgIAlJbmNsdWRlZCBpbiB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgQVdFCisgIAkJCQlzbmFwc2hvdC4KKworICBZb3Ugd2lsbCBwcm9iYWJseSBoYXZlIHRvIHBhc3MgdGhlICItZSIgc3dpdGNoIHRvIHBsYXltaWRpIHRvIGhhdmUgaXQgdXNlCisgIHlvdXIgbWlkaSBkZXZpY2UuIGRydm1pZGkgc2hvdWxkIHdvcmsgd2l0aG91dCBzd2l0Y2hlcy4KKworICBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBwbGVhc2UgZS1tYWlsIG1lLiBBbGwgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIGFyZQorICB3ZWxjb21lLgorCisJCSAgICBZYXJvc2xhdiBSb3NvbWFraG8gKGFsb25zNTVAZGlhbHVwLnB0dC5ydSkKKwkJCSAgICBodHRwOi8vd3d3Lnlhci5vcGVubmV0LnJ1CisKK0xhc3QgVXBkYXRlZDogRmViIDMgMjAwMQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQXVkaW9FeGNlbERTUDE2IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQXVkaW9FeGNlbERTUDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZjA4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BdWRpb0V4Y2VsRFNQMTYKQEAgLTAsMCArMSwxMDEgQEAKK0RyaXZlcgorLS0tLS0tCisKK0luZm9ybWF0aW9ucyBhYm91dCBBdWRpbyBFeGNlbCBEU1AgMTYgZHJpdmVyIGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlCitmaWxlIGFlZHNwMTYuYworUGxlYXNlLCByZWFkIHRoZSBoZWFkIG9mIHRoZSBzb3VyY2UgYmVmb3JlIHVzaW5nIGl0LiBJdCBjb250YWluIHVzZWZ1bAoraW5mb3JtYXRpb25zLgorCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK1RoZSBBdWRpbyBFeGNlbCBjb25maWd1cmF0aW9uLCBpcyBub3cgZG9uZSB3aXRoIHRoZSBzdGFuZGFyZCBMaW51eCBzZXR1cC4KK1lvdSBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUgc291bmQgY2FyZCAoU291bmQgQmxhc3RlciBvciBNaWNyb3NvZnQgU291bmQgU3lzdGVtKQorYW5kLCBpZiB5b3Ugd2FudCBpdCwgdGhlIFJvbGFuZCBNUFUtNDAxIChkbyBub3QgdXNlIHRoZSBTb3VuZCBCbGFzdGVyIE1QVS00MDEsCitTQi1NUFU0MDEpIGluIHRoZSBtYWluIGRyaXZlciBtZW51LiBBY3RpdmF0ZSB0aGUgbG93bGV2ZWwgZHJpdmVycyB0aGVuIHNlbGVjdAordGhlIEF1ZGlvIEV4Y2VsIGhhcmR3YXJlIHRoYXQgeW91IHdhbnQgdG8gaW5pdGlhbGl6ZS4gQ2hlY2sgdGhlIElSUS9ETUEvTUlSUQorb2YgdGhlIEF1ZGlvIEV4Y2VsIGluaXRpYWxpemF0aW9uOiBpdCBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBTQlBSTyAob3IgTVNTKQorc2V0dXAuIElmIHRoZSBwYXJhbWV0ZXJzIGFyZSBkaWZmZXJlbnQsIGNvcnJlY3QgaXQuCitJIHlvdSBvd24gYSBHYWxsYW50J3MgYXVkaW8gY2FyZCBiYXNlZCBvbiBTQy02NjAwLCBhY3RpdmF0ZSB0aGUgU0MtNjYwMCBzdXBwb3J0LgorSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzb3VuZCBib2FyZCwgYmUgc3VyZSB0bworY2hlY2sgb2ZmIGFsbCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBiZWZvcmUgcmUtY29uZmlndXJlIGl0LgorCitNb2R1bGUgcGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHVzZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgeW91IG11c3QgY29uZmlndXJlIHNvbWUgbW9kdWxlIHBhcmFtZXRlcnMsIHRvCitzZXQgdXAgSS9PIGFkZHJlc3NlcywgSVJRIGxpbmVzIGFuZCBETUEgY2hhbm5lbHMuIFNvbWUgcGFyYW1ldGVycyBhcmUKK21hbmRhdG9yeSB3aGlsZSBzb21lIG90aGVycyBhcmUgb3B0aW9uYWwuIEhlcmUgYSBsaXN0IG9mIHBhcmFtZXRlcnMgeW91IGNhbgordXNlIHdpdGggdGhpcyBtb2R1bGU6CisKK05hbWUJCURlc2NyaXB0aW9uCis9PT09CQk9PT09PT09PT09PQorTUFOREFUT1JZCitpbwkJSS9PIGJhc2UgYWRkcmVzcyAoMHgyMjAgb3IgMHgyNDApCitpcnEJCWlycSBsaW5lICg1LCA3LCA5LCAxMCBvciAxMSkKK2RtYQkJZG1hIGNoYW5uZWwgKDAsIDEgb3IgMykKKworT1BUSU9OQUwKK21zc19iYXNlCUkvTyBiYXNlIGFkZHJlc3MgZm9yIGFjdGl2YXRlIE1TUyBtb2RlIChkZWZhdWx0IFNCUFJPKQorCQkoMHg1MzAgb3IgMHhFODApCittcHVfYmFzZQlJL08gYmFzZSBhZGRyZXNzIGZvciBhY3RpdmF0ZSBNUFUtNDAxIG1vZGUKKwkJKDB4MzAwLCAweDMxMCwgMHgzMjAgb3IgMHgzMzApCittcHVfaXJxCQlNUFUtNDAxIGlycSBsaW5lICg1LCA3LCA5LCAxMCBvciAwKQorCitUaGUgL2V0Yy9tb2Rwcm9iZS5jb25mIHdpbGwgaGF2ZSBsaW5lcyBsaWtlIHRoaXM6CisKK29wdGlvbnMgb3BsMyBpbz0weDM4OAorb3B0aW9ucyBhZDE4NDggaW89MHg1MzAgaXJxPTExIGRtYT0zCitvcHRpb25zIGFlZHNwMTYgaW89MHgyMjAgaXJxPTExIGRtYT0zIG1zc19iYXNlPTB4NTMwCisKK1doZXJlIHRoZSBhZWRzcDE2IG9wdGlvbnMgYXJlIHRoZSBvcHRpb25zIGZvciB0aGlzIGRyaXZlciB3aGlsZSBvcGwzIGFuZAorYWQxODQ4IGFyZSB0aGUgY29ycmVzcG9uZGluZyBvcHRpb25zIGZvciB0aGUgTVNTIGFuZCBPUEwzIG1vZHVsZXMuCisKK0xvYWRpbmcgTVNTIGFuZCBPUEwzIG5lZWRzIHRvIHByZSBsb2FkIHRoZSBhZWRzcDE2IG1vZHVsZSB0byBzZXQgdXAgY29ycmVjdGx5Cit0aGUgc291bmQgY2FyZC4gSW5zdGFsbGF0aW9uIGRlcGVuZGVuY2llcyBtdXN0IGJlIHdyaXR0ZW4gaW4gdGhlIG1vZHByb2JlLmNvbmYKK2ZpbGU6CisKK2luc3RhbGwgYWQxODQ4IC9zYmluL21vZHByb2JlIGFlZHNwMTYgJiYgL3NiaW4vbW9kcHJvYmUgLWkgYWQxODQ4CitpbnN0YWxsIG9wbDMgL3NiaW4vbW9kcHJvYmUgYWVkc3AxNiAmJiAvc2Jpbi9tb2Rwcm9iZSAtaSBvcGwzCisKK1RoZW4geW91IG11c3QgbG9hZCB0aGUgc291bmQgbW9kdWxlcyBzdGFjayBpbiB0aGlzIG9yZGVyOgorc291bmQgLT4gYWVkc3AxNiAtPiBbIGFkMTg0OCwgb3BsMyBdCisKK1dpdGggdGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24sIGxvYWRpbmcgYWQxODQ4IG9yIG9wbDMgbW9kdWxlcywgd2lsbAorYXV0b21hdGljYWxseSBsb2FkIGFsbCB0aGUgc291bmQgc3RhY2suCisKK1NvdW5kIGNhcmRzIHN1cHBvcnRlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgU0MtNjAwMCBhbmQgU0MtNjYwMCBiYXNlZCBHYWxsYW50J3Mgc291bmQgY2FyZC4KK0l0IGRvbid0IHN1cHBvcnQgdGhlIEF1ZGlvIEV4Y2VsIERTUCAxNiBJSUkgKHRyeSB0aGUgU0MtNjYwMCBjb2RlKS4KK0knbSB3b3JraW5nIG9uIHRoZSBJSUkgdmVyc2lvbiBvZiB0aGUgY2FyZDogaWYgc29tZW9uZSBoYXZlIHVzZWZ1bAoraW5mb3JtYXRpb25zIGFib3V0IGl0LCBwbGVhc2UgbGV0IG1lIGtub3cuCitGb3IgYWxsIHRoZSBub24tc3VwcG9ydGVkIGF1ZGlvIGNhcmRzLCB5b3UgaGF2ZSB0byBib290IE1TLURPUyAob3IgV0lOOTUpCithY3RpdmF0aW5nIHRoZSBhdWRpbyBjYXJkIHdpdGggdGhlIE1TLURPUyBkZXZpY2UgZHJpdmVyLCB0aGVuIHlvdSBoYXZlIHRvCis8Y3RybD4tPGFsdD4tPGRlbD4gYW5kIGJvb3QgTGludXguCitGb2xsb3cgdGhlc2Ugc3RlcHM6CisKKzEpIENvbXBpbGUgTGludXgga2VybmVsIHdpdGggc3RhbmRhcmQgc291bmQgZHJpdmVyLCB1c2luZyB0aGUgZW11bGF0aW9uCisgICB5b3Ugd2FudCwgd2l0aCB0aGUgcGFyYW1ldGVycyBvZiB5b3VyIGF1ZGlvIGNhcmQsCisgICBlLmcuIE1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0gaXJxMTAgZG1hMworMikgSW5zdGFsbCB5b3VyIG5ldyBrZXJuZWwgYXMgdGhlIGRlZmF1bHQgYm9vdCBrZXJuZWwuCiszKSBCb290IE1TLURPUyBhbmQgY29uZmlndXJlIHRoZSBhdWRpbyBjYXJkIHdpdGggdGhlIGJvb3QgdGltZSBkZXZpY2UKKyAgIGRyaXZlciwgZm9yIE1TUyBpcnExMCBkbWEzIGluIG91ciBleGFtcGxlLgorNCkgPGN0cmw+LTxhbHQ+LTxkZWw+IGFuZCBib290IExpbnV4LiBUaGlzIHdpbGwgbWFpbnRhaW4gdGhlIERPUyBjb25maWd1cmF0aW9uCisgICBhbmQgd2lsbCBib290IHRoZSBuZXcga2VybmVsIHdpdGggc291bmQgZHJpdmVyLiBUaGUgc291bmQgZHJpdmVyIHdpbGwgZmluZAorICAgdGhlIGF1ZGlvIGNhcmQgYW5kIHdpbGwgcmVjb2duaXplIGFuZCBhdHRhY2ggaXQuCisKK1JlcG9ydHMgb24gVXNlciBzdWNjZXNzZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPiBEYXRlOiBNb24sIDI5IEp1bCAxOTk2IDA4OjM1OjQwICswMTAwCis+IEZyb206IE1yIFMgSiBHcmVlbmF3YXkgPHNqZzk1QHVuaXhmZS5ybC5hYy51az4KKz4gVG86IHJpY2NhcmRvQGNkYzhnNS5jZGMucG9saW1pLml0IChSaWNjYXJkbyBGYWNjaGV0dGkpCis+IFN1YmplY3Q6IFJlOiBBdWRpbyBFeGNlbCBEU1AgMTYgaW5pdGlhbGl6YXRpb24gY29kZQorPgorPiBKdXN0IHRvIGxldCB5b3Uga25vdyBnb3QgbXkgQXVkaW8gRXhjZWwgKGVtdWxhdGluZyBhIE1TUykgd29ya2luZworPiB3aXRoIG15IG9yaWdpbmFsIFNCMTYsIHRoYW5rcyBmb3IgdGhlIGRyaXZlciEKKworCitMYXN0IHJldmlzZWQ6IDIwIEF1Z3VzdCAxOTk4CitSaWNjYXJkbyBGYWNjaGV0dGkKK2ZpemJhbkB0aW4uaXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NNSTgzMzAgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DTUk4MzMwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNDM5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DTUk4MzMwCkBAIC0wLDAgKzEsMTUzIEBACitEb2N1bWVudGF0aW9uIGZvciBDTUkgODMzMCAoU291bmRQUk8pIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWxlc3NhbmRybyBadW1tbyA8YXp1bW1vQGl0YS5mbGFzaG5ldC5pdD4KKworKCBCZSBzdXJlIHRvIHJlYWQgRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvU291bmRQcm8gdG9vICkKKworCitUaGlzIGFkYXB0ZXIgaXMgbm93IGRpcmVjdGx5IHN1cHBvcnRlZCBieSB0aGUgc2IgZHJpdmVyLgorCisgVGhlIG9ubHkgdGhpbmcgeW91IGhhdmUgdG8gZG8gaXMgdG8gY29tcGlsZSB0aGUga2VybmVsIHNvdW5kCitzdXBwb3J0IGFzIGEgbW9kdWxlIGFuZCB0byBlbmFibGUga2VybmVsIElTQVBuUCBzdXBwb3J0LAorYXMgc2hvd24gYmVsb3cuCisKKworQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9TQj1tCisKK0NPTkZJR19QTlA9eQorQ09ORklHX0lTQVBOUD15CisKKworYW5kIG9wdGlvbmFsbHk6CisKKworQ09ORklHX1NPVU5EX01QVTQwMT1tCisKKyBmb3IgTVBVNDAxIHN1cHBvcnQuCisKKworKEkgc3VnZ2VzdCB5b3UgdG8gdXNlICJtYWtlIG1lbnVjb25maWciIG9yICJtYWtlIHhjb25maWciIAorIGZvciBhIG1vcmUgY29tZm9ydGFibGUgY29uZmlndXJhdGlvbiBlZGl0aW5nKQorCisKKworVGhlbiB5b3UgY2FuIGRvCisKKyBtb2Rwcm9iZSBzYgorCithbmQgZXZlcnl0aGluZyB3aWxsIGJlIChob3BlZnVsbHkpIGNvbmZpZ3VyZWQuCisKK1lvdSBzaG91bGQgZ2V0IHNvbWV0aGluZyBzaW1pbGFyIGluIHN5c2xvZzoKKworc2I6IENNSTgzMzAgZGV0ZWN0ZWQuCitzYjogQ01JODMzMCBzYiBiYXNlIGxvY2F0ZWQgYXQgMHgyMjAKK3NiOiBDTUk4MzMwIG1wdSBiYXNlIGxvY2F0ZWQgYXQgMHgzMzAKK3NiOiBDTUk4MzMwIG1haWwgcmVwb3J0cyB0byBBbGVzc2FuZHJvIFp1bW1vIDxhenVtbW9AaXRhLmZsYXNobmV0Lml0Pgorc2I6IElTQVBuUCByZXBvcnRzIENNSSA4MzMwIFNvdW5kUFJPIGF0IGkvbyAweDIyMCwgaXJxIDcsIGRtYSAxLDUKKworCisKKworVGhlIG9sZCBkb2N1bWVudGF0aW9uIGZpbGUgZm9sbG93cyBmb3IgcmVmZXJlbmNlCitwdXJwb3Nlcy4KKworCitIb3cgdG8gZW5hYmxlIENNSSA4MzMwIChTT1VORFBSTykgc291bmRjaGlwIG9uIExpbnV4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N0ZWZhbiBMYXVkYXQgPFN0ZWZhbi5MYXVkYXRAYXNpdC5ybz4KKworW05vdGU6IFRoZSBDTUkgODMzOCBpcyB1bnJlbGF0ZWQgYW5kIGlzIHN1cHBvcnRlZCBieSBjbXBjaS5vXQorCisJCisJSW4gb3JkZXIgdG8gdXNlIENNSTgzMzAgdW5kZXIgTGludXggIHlvdSBqdXN0IGhhdmUgdG8gdXNlIGEgcHJvcGVyIGlzYXBucC5jb25mLCBhIGdvb2QgaXNhcG5wIGFuZCBhIGxpdHRsZSBiaXQgb2YgcGF0aWVuY2UuICBJIHVzZSBpc2FwbnAgMS4xNywgYnV0Cit5b3UgbWF5IGdldCBhIGJldHRlciBvbmUgSSBndWVzcyBhdCBodHRwOi8vd3d3LnJvZXN0b2NrLmRlbW9uLmNvLnVrL2lzYXBucHRvb2xzLy4KKworCU9mIGNvdXJzZSB5b3Ugd2lsbCBoYXZlIHRvIGNvbXBpbGUga2VybmVsIHNvdW5kIHN1cHBvcnQgYXMgbW9kdWxlLCBhcyBzaG93biBiZWxvdzoKKworQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1M9bQorQ09ORklHX1NPVU5EX1NCPW0KK0NPTkZJR19TT1VORF9BRExJQj1tCitDT05GSUdfU09VTkRfTVBVNDAxPW0KKyMgTWlrcm8kY2hhZnQgc291bmQgc3lzdGVtIChraW5kYSB1c2VmdWwgaGVyZSA7KSkJCitDT05GSUdfU09VTkRfTVNTPW0KKworCVRoZSAvZXRjL2lzYXBucC5jb25mIGZpbGUgd2lsbCBiZToKKworPHNuaXAgYmVsb3c+CisKKworKFJFQURQT1JUIDB4MDIwMykKKyhJU09MQVRFIFBSRVNFUlZFKQorKElERU5USUZZICopCisoVkVSQk9TSVRZIDIpCisoQ09ORkxJQ1QgKElPIEZBVEFMKShJUlEgRkFUQUwpKERNQSBGQVRBTCkoTUVNIEZBVEFMKSkgIyBvciBXQVJOSU5HCisoVkVSSUZZTEQgTikKKworCisjIFdTUyAKKworKENPTkZJR1VSRSBDTUkwMDAxLzE2Nzc3NDcyIChMRCAwCisoSU8gMCAoU0laRSA4KSAoQkFTRSAweDA1MzApKQorKElPIDEgKFNJWkUgOCkgKEJBU0UgMHgwMzg4KSkKKyhJTlQgMCAoSVJRIDcgKE1PREUgK0UpKSkKKyhETUEgMCAoQ0hBTk5FTCAwKSkKKyhOQU1FICJDTUkwMDAxLzE2Nzc3NDcyWzBde0NNSTgzMzAvQzNEIEF1ZGlvIEFkYXB0ZXJ9IikKKyhBQ1QgWSkKKykpCisKKyMgTVBVCisKKyhDT05GSUdVUkUgQ01JMDAwMS8xNjc3NzQ3MiAoTEQgMQorKElPIDAgKFNJWkUgMikgKEJBU0UgMHgwMzMwKSkKKyhJTlQgMCAoSVJRIDExIChNT0RFICtFKSkpCisoTkFNRSAiQ01JMDAwMS8xNjc3NzQ3MlsxXXtDTUk4MzMwL0MzRCBBdWRpbyBBZGFwdGVyfSIpCisoQUNUIFkpCispKQorCisjIEpveXN0aWNrCisKKyhDT05GSUdVUkUgQ01JMDAwMS8xNjc3NzQ3MiAoTEQgMgorKElPIDAgKFNJWkUgOCkgKEJBU0UgMHgwMjAwKSkKKyhOQU1FICJDTUkwMDAxLzE2Nzc3NDcyWzJde0NNSTgzMzAvQzNEIEF1ZGlvIEFkYXB0ZXJ9IikKKyhBQ1QgWSkKKykpCisKKyMgU291bmRCbGFzdGVyIAorIAorKENPTkZJR1VSRSBDTUkwMDAxLzE2Nzc3NDcyIChMRCAzCisoSU8gMCAoU0laRSAxNikgKEJBU0UgMHgwMjIwKSkKKyhJTlQgMCAoSVJRIDUgKE1PREUgK0UpKSkKKyhETUEgMCAoQ0hBTk5FTCAxKSkKKyhETUEgMSAoQ0hBTk5FTCA1KSkKKyhOQU1FICJDTUkwMDAxLzE2Nzc3NDcyWzNde0NNSTgzMzAvQzNEIEF1ZGlvIEFkYXB0ZXJ9IikKKyhBQ1QgWSkKKykpCisKKworKFdBSVRGT1JLRVkpCisKKzxlbmQgb2Ygc25pcD4KKworCVRoZSBtb2R1bGUgc2VxdWVuY2UgaXMgdHJpdmlhbDoKKworL3NiaW4vaW5zbW9kIHNvdW5kY29yZQorL3NiaW4vaW5zbW9kIHNvdW5kCisvc2Jpbi9pbnNtb2QgdWFydDQwMQorIyBpbnNlcnQgdGhpcyBmaXJzdAorL3NiaW4vaW5zbW9kIGFkMTg0OCBpbz0weDUzMCBpcnE9NyBkbWE9MCBzb3VuZHBybz0xCisjIFRoZSBzYiBtb2R1bGUgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGFkMTg0OCAoTWljcm9zb2Z0IFNvdW5kIFN5c3RlbSkKKyMgQW55aG93LCB0aGlzIGlzIGZ1bGwgZHVwbGV4IGFuZCBoYXMgTUlESQorL3NiaW4vaW5zbW9kIHNiIGlvPTB4MjIwIGRtYT0xIGRtYTE2PTUgaXJxPTUgbXB1X2lvPTB4MzMwCisKKworCitBbG1hIENoYW8gPGVseXNpYW5AZXRoZXJlYWwudG9yc2lvbi5vcmc+IHN1Z2dlc3RzIHRoZSBmb2xsb3dpbmcgL2V0Yy9tb2Rwcm9iZS5jb25mOgorCithbGlhcyBzb3VuZCBhZDE4NDgKK2FsaWFzIHN5bnRoMCBvcGwzCitvcHRpb25zIGFkMTg0OCBpbz0weDUzMCBpcnE9NyBkbWE9MCBzb3VuZHBybz0xCitvcHRpb25zIG9wbDMgaW89MHgzODgKKworCQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ01JODMzOCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NNSTgzMzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3ZDA1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NNSTgzMzgKQEAgLTAsMCArMSw4NSBAQAorQXVkaW8gZHJpdmVyIGZvciBDTTgzMzgvQ004NzM4IGNoaXBzIGJ5IENoZW4tTGkgVGllbgorCisKK0hBUkRXQVJFIFNVUFBPUlRFRAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0MtTWVkaWEgQ01JODMzOAorQy1NZWRpYSBDTUk4NzM4CitPbi1ib2FyZCBDLU1lZGlhIGNoaXBzCisKKworU1RFUFMgVE8gQlVJTEQgRFJJVkVSCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIDEuIEJhY2t1cCB0aGUgQ29uZmlnLmluIGFuZCBNYWtlZmlsZSBpbiB0aGUgc291bmQgZHJpdmVyIGRpcmVjdG9yeQorICAgICAoL3Vzci9zcmMvbGludXgvZHJpdmVyL3NvdW5kKS4KKyAgICAgVGhlIENvbmZpZ3VyZS5oZWxwIHByb3ZpZGUgaGVscCB3aGVuIHlvdSBjb25maWcgZHJpdmVyIGluIHN0ZXAKKyAgICAgNCwgcGxlYXNlIGJhY2t1cCB0aGUgb3JpZ2luYWwgb25lICgvdXNyL3NyYy9saW51eC9Eb2N1bWVudCkgYW5kCisgICAgIGNvcHkgdGhpcyBmaWxlLgorICAgICBUaGUgY21wY2kgaXMgZG9jdW1lbnQgZm9yIHRoZSBkcml2ZXIgaW4gZGV0YWlsLCBwbGVhc2UgY29weSBpdAorICAgICB0byAvdXNyL3NyYy9saW51eC9Eb2N1bWVudC9zb3VuZCBzbyB5b3UgY2FuIHJlZmVyIGl0LiBCYWNrdXAgaWYKKyAgICAgdGhlcmUgaXMgYWxyZWFkeSBvbmUuCisKKyAgMi4gRXh0cmFjdCB0aGUgdGFyIGZpbGUgYnkgJ3RhciB4dnpmIGNtcGNpLXh4LnRhci5neicgaW4gdGhlIGFib3ZlCisgICAgIGRpcmVjdG9yeS4KKworICAzLiBDaGFuZ2UgZGlyZWN0b3J5IHRvIC91c3Ivc3JjL2xpbnV4CisKKyAgNC4gQ29uZmlnIGNtODMzOCBkcml2ZXIgYnkgJ21ha2UgbWVudWNvbmZpZycsICdtYWtlIGNvbmZpZycgb3IKKyAgICAgJ21ha2UgeGNvbmZpZycgY29tbWFuZC4KKworICA1LiBQbGVhc2Ugc2VsZWN0IFNvdW5kIENhcmQgKENPTkZJR19TT1VORD1tKSBzdXBwb3J0IGFuZCBDTVBDSQorICAgICBkcml2ZXIgKENPTkZJR19TT1VORF9DTVBDST1tKSBhcyBtb2R1bGVzLiBSZXNpZGVudCBtb2RlIG5vdCB0ZXN0ZWQuCisgICAgIEZvciBkcml2ZXIgb3B0aW9uLCBwbGVhc2UgcmVmZXIgJ0RSSVZFUiBQQVJBTUVURVInCisKKyAgNi4gQ29tcGlsZSB0aGUga2VybmVsIGlmIG5lY2Vzc2FyeS4KKworICA3LiBDb21waWxlIHRoZSBtb2R1bGVzIGJ5ICdtYWtlIG1vZHVsZXMnLgorCisgIDguIEluc3RhbGwgdGhlIG1vZHVsZXMgYnkgJ21ha2UgbW9kdWxlc19pbnN0YWxsJworCisKK0lOU1RBTEwgRFJJVkVSCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIDEuIEJlZm9yZSBmaXJzdCB0aW1lIHRvIHJ1biB0aGUgZHJpdmVyLCBjcmVhdGUgbW9kdWxlIGRlcGVuZGVuY3kgYnkKKyAgICAgJ2RlcG1vZCAtYScKKworICAyLiBUbyBpbnN0YWxsIHRoZSBkcml2ZXIgbWFudWFsbHksIGVudGVyICdtb2Rwcm9iZSBjbXBjaScuCisKKyAgMy4gRHJpdmVyIGluc3RhbGxhdGlvbiBmb3IgdmFyaW91cyBkaXN0cmlidXRpb25zOgorCisgICAgYS4gU2xhY2t3YXJlIDQuMAorICAgICAgIEFkZCB0aGUgJ21vZHByb2JlIGNtcGNpJyBjb21tYW5kIGluIHlvdXIgL2V0Yy9yYy5kL3JjLm1vZHVsZXMKKyAgICAgICBmaWxlLnNvIHlvdSBjYW4gc3RhcnQgdGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IGVhY2ggdGltZSBib290aW5nLgorCisgICAgYi4gQ2FsZGVyYSBPcGVuTGludXggMi4yCisgICAgICAgVXNlIExJU0EgdG8gbG9hZCB0aGUgY21wY2kgbW9kdWxlLgorCisgICAgYy4gUmVkSGF0IDYuMCBhbmQgUy51LlMuRS4gNi4xCisgICAgICAgQWRkIGZvbGxvd2luZyBjb21tYW5kIGluIC9ldGMvY29uZi5tb2R1bGVzOgorCisgICAgICAgYWxpYXMgc291bmQgY21wY2kKKworCWFsc28gdmlzaXQgaHR0cDovL3d3dy5jbWVkaWEuY29tLnR3IGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb24uCisKK0RSSVZFUiBQQVJBTUVURVIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgU29tZSBmdW5jdGlvbnMgZm9yIHRoZSBjbTg3MzggY2FuIGJlIGNvbmZpZ3VyZWQgaW4gS2VybmVsIENvbmZpZ3VyYXRpb24KKyAgb3IgbW9kdWxlcyBwYXJhbWV0ZXJzLiBTZXQgdGhlc2UgcGFyYW1ldGVycyB0byAxIHRvIGVuYWJsZS4KKworICBtcHVpbzoJSS9PIHBvcnRzIGJhc2UgZm9yIE1QVS00MDEsIDAgaWYgZGlzYWJsZWQuCisgIGZtaW86CQlJL08gcG9ydHMgYmFzZSBmb3IgT1BMLTMsIDAgaWYgZGlzYWJsZWQuCisgIHNwZGlmX2ludmVyc2U6SW52ZXJzZSB0aGUgUy9QRElGLWluIHNpZ25hbCwgdGhpcyBkZXBlbmRzIG9uIHlvdXIKKwkJQ0QtUk9NIG9yIERWRC1ST00uCisgIHNwZGlmX2xvb3A6ICAgRW5hYmxlIFMvUERJRiBsb29wLCB0aGlzIHJvdXRlIFMvUERJRi1pbiB0byBTL1BESUYtb3V0CisgICAgICAgICAgICAgICAgZGlyZWN0bHkuCisgIHNwZWFrZXJzOiAgICAgTnVtYmVyIG9mIHNwZWFrZXJzIHVzZWQuCisgIHVzZV9saW5lX2FzX3JlYXI6RW5hYmxlIHRoaXMgaWYgeW91IHdhbnQgdG8gdXNlIGxpbmUtaW4gYXMKKyAgICAgICAgICAgICAgICByZWFyLW91dC4KKyAgdXNlX2xpbmVfYXNfYmFzczpFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgbGluZS1pbiBhcworICAgICAgICAgICAgICAgIGJhc3Mtb3V0LgorICBqb3lzdGljazoJRW5hYmxlIGpveXN0aWNrLiBZb3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgTGludXggam95c3RpY2sKKwkJZHJpdmVyLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DUzQyMzIgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DUzQyMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2YWY3YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMgpAQCAtMCwwICsxLDIzIEBACitUbyBjb25maWd1cmUgdGhlIENyeXN0YWwgQ1M0MjN4IHNvdW5kIGNoaXAgYW5kIGFjdGl2YXRlIGl0cyBEU1AgZnVuY3Rpb25zLAorbW9kdWxlcyBtYXkgYmUgbG9hZGVkIGluIHRoaXMgb3JkZXI6CisgIAorCW1vZHByb2JlIHNvdW5kCisJaW5zbW9kIGFkMTg0OAorCWluc21vZCB1YXJ0NDAxCisJaW5zbW9kIGNzNDIzMiBpbz0qIGlycT0qIGRtYT0qIGRtYTI9KgorICAKK1RoaXMgaXMgdGhlIG1lYW5pbmcgb2YgdGhlIHBhcmFtZXRlcnM6CisgIAorCWlvLS1JL08gYWRkcmVzcyBvZiB0aGUgV2luZG93cyBTb3VuZCBTeXN0ZW0gKG5vcm1hbGx5IDB4NTM0KQorCWlycS0tSVJRIG9mIHRoaXMgZGV2aWNlCisJZG1hIGFuZCBkbWEyLS1ETUEgY2hhbm5lbHMgKERNQTIgbWF5IGJlIDApCisgIAorT24gc29tZSBjYXJkcywgdGhlIGJvYXJkIGF0dGVtcHRzIHRvIGRvIG5vbi1QblAgc2V0dXAsIGFuZCBmYWlscy4gIElmIHlvdQoraGF2ZSBwcm9ibGVtcywgdXNlIExpbnV4JyBQblAgZmFjaWxpdGllcy4gCisgIAorVG8gZ2V0IE1JREkgZmFjaWxpdGllcyBhZGQKKyAgCisJaW5zbW9kIG9wbDMgaW89KgorICAKK3doZXJlICJpbyIgaXMgdGhlIEkvTyBhZGRyZXNzIG9mIHRoZSBPUEwzIHN5bnRoZXNpemVyLiBUaGlzIHdpbGwgYmUgc2hvd24KK2luIC9wcm9jL3N5cy9wbnAgYW5kIGlzIG5vcm1hbGx5IDB4Mzg4LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvRVNTIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvRVNTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTkzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9FU1MKQEAgLTAsMCArMSwzNCBAQAorRG9jdW1lbnRhdGlvbiBmb3IgdGhlIEVTUyBBdWRpb0RyaXZlIGNoaXBzCisKK0luIDIuNCBrZXJuZWxzIHRoZSBTb3VuZEJsYXN0ZXIgZHJpdmVyIG5vdCBvbmx5IHRyaWVzIHRvIGRldGVjdCBhbiBFU1MgY2hpcCwgaXQKK3RyaWVzIHRvIGRldGVjdCB0aGUgdHlwZSBvZiBFU1MgY2hpcCB0b28uIFRoZSBjb3JyZWN0IGRldGVjdGlvbiBvZiB0aGUgY2hpcCAKK2RvZXNuJ3QgYWx3YXlzIHN1Y2NlZWQgaG93ZXZlciwgc28gdW5sZXNzIHlvdSB1c2UgdGhlIGtlcm5lbCBpc2FwbnAgZmFjaWxpdGllcworKGFuZCB5b3UgY2hpcCBpcyBwbnAgY2FwYWJsZSkgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIDIuMCBiZWhhdmlvdXIgd2hpY2gKK21lYW5zOiBvbmx5IGRldGVjdCBFUzY4OCBhbmQgRVMxNjg4LgorCitBbGwgRVNTIGNoaXBzIG5vdyBoYXZlIGEgcmVjb3JkaW5nIGxldmVsIHNldHRpbmcuIFRoaXMgaXMgYSBuZWVkLXRvLWhhdmUgZm9yCitwZW9wbGUgd2hvIHdhbnQgdG8gdXNlIHRoZWlyIEVTUyBmb3IgcmVjb3JkaW5nIHNvdW5kLgorCitFdmVyeSBjaGlwIHRoYXQncyBkZXRlY3RlZCBhcyBhIGxhdGVyLXRoYW4tZXMxNjg4IGNoaXAgaGFzIGEgNiBiaXRzIGxvZ2FyaXRobWljCittYXN0ZXIgdm9sdW1lIGNvbnRyb2wuCisKK0V2ZXJ5IGNoaXAgdGhhdCdzIGRldGVjdGVkIGFzIGEgRVMxODg3IG5vdyBoYXMgRnVsbCBEdXBsZXggc3VwcG9ydC4gTWFkZSBhIAorbGl0dGxlIHRlc3Rwcm9ncmFtIHRoYXQgc2hvd3MgdGhhdCBpcyB3b3JrcywgaGF2ZW4ndCBzZWVuIGEgcmVhbCBwcm9ncmFtIHRoYXQKK25lZWRzIHRoaXMgaG93ZXZlci4KKworRm9yIEVTUyBjaGlwcyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciAiZXNzdHlwZSIgY2FuIGJlIHNwZWNpZmllZC4gVGhpcyBjb250cm9scwordGhlIChhdXRvKSBkZXRlY3Rpb24gb2YgdGhlIEVTUyBjaGlwcy4gSXQgY2FuIGhhdmUgMyBraW5kcyBvZiB2YWx1ZXM6CisKKy0xICAgQWN0IGxpa2UgMi4wIGtlcm5lbHM6IG9ubHkgZGV0ZWN0IEVTNjg4IG9yIEVTMTY4OC4KKzAJIFRyeSB0byBhdXRvLWRldGVjdCB0aGUgY2hpcCAobWF5IGZhaWwgZm9yIEVTMTY4OCkKKzY4OCAgVGhlIGNoaXAgd2lsbCBiZSB0cmVhdGVkIGFzICBFUzY4OAorMTY4OCAgLCwgICwsICAgLCwgICwsICAgICwsICAgLCwgRVMxNjg4CisxODY4ICAsLCAgLCwgICAsLCAgLCwgICAgLCwgICAsLCBFUzE4NjgKKzE4NjkgICwsICAsLCAgICwsICAsLCAgICAsLCAgICwsIEVTMTg2OQorMTc4OCAgLCwgICwsICAgLCwgICwsICAgICwsICAgLCwgRVMxNzg4CisxODg3ICAsLCAgLCwgICAsLCAgLCwgICAgLCwgICAsLCBFUzE4ODcKKzE4ODggICwsICAsLCAgICwsICAsLCAgICAsLCAgICwsIEVTMTg4OAorCitCZWNhdXNlIEZ1bGwgRHVwbGV4IGlzIHN1cHBvcnRlZCBmb3IgRVMxODg3IHlvdSBjYW4gc3BlY2lmeSBhIHNlY29uZCBETUEKK2NoYW5uZWwgYnkgc3BlY2lmeWluZyBtb2R1bGUgcGFyYW1ldGVyIGRtYTE2LiBJdCBjYW4gYmUgb25lIG9mOiAwLCAxLCAzIG9yIDUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0VTUzE4NjggYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9FU1MxODY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTkyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9FU1MxODY4CkBAIC0wLDAgKzEsNTUgQEAKK0RvY3VtZW50YXRpb24gZm9yIHRoZSBFU1MxODY4RiBBdWRpb0RyaXZlIFBuUCBzb3VuZCBjYXJkCisKK1RoZSBFU1MxODY4IHNvdW5kIGNhcmQgaXMgYSBQblAgRVNTMTY4OC1jb21wYXRpYmxlIDE2LWJpdCBzb3VuZCBjYXJkLgorCitJdCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBkZXRlY3RlZCBieSB0aGUgTGludXggS2VybmVsIGlzYXBucCBzdXBwb3J0IHdoZW4geW91Citsb2FkIHRoZSBzYi5vIG1vZHVsZS4gT3RoZXJ3aXNlIHlvdSBzaG91bGQgdGFrZSBjYXJlIG9mOgorCisgICogIFRoZSBFU1MxODY4IGRvZXMgbm90IGFsbG93IHVzZSBvZiBhIDE2LWJpdCBETUEsIHRodXMgRE1BIDAsIDEsIDIsIGFuZCAzCisgICAgIG1heSBvbmx5IGJlIHVzZWQuCisKKyAgKiAgaXNhcG5wdG9vbHMgdmVyc2lvbiAxLjE0IGRvZXMgd29yayB3aXRoIEVTUzE4NjguICBFYXJsaWVyIHZlcnNpb25zIG1pZ2h0CisgICAgIG5vdC4KKworICAqICBTb3VuZCBzdXBwb3J0IE1VU1QgYmUgY29tcGlsZWQgYXMgTU9EVUxFUywgbm90IHN0YXRpY2FsbHkgbGlua2VkCisgICAgIGludG8gdGhlIGtlcm5lbC4KKworCitOT1RFOiB0aGlzIGlzIG9ubHkgbmVlZGVkIHdoZW4gbm90IHVzaW5nIHRoZSBrZXJuZWwgaXNhcG5wIHN1cHBvcnQhCisKK0ZvciBjb25maWd1cmluZyB0aGUgc291bmQgY2FyZCdzIEkvTyBhZGRyZXNzZXMsIElSUSBhbmQgRE1BLCBoZXJlIGlzIGEKK3NhbXBsZSBjb3B5IG9mIHRoZSBpc2FwbnAuY29uZiBkaXJlY3RpdmVzIHJlZ2FyZGluZyB0aGUgRVNTMTg2ODoKKworKENPTkZJR1VSRSBFU1MxODY4Ly0xIChMRCAxCisoSU8gMCAoQkFTRSAweDAyMjApKQorKElPIDEgKEJBU0UgMHgwMzg4KSkKKyhJTyAyIChCQVNFIDB4MDMzMCkpCisoRE1BIDAgKENIQU5ORUwgMSkpCisoSU5UIDAgKElSUSA1IChNT0RFICtFKSkpCisoQUNUIFkpCispKQorCisoZm9yIGEgZnVsbCB3b3JraW5nIGlzYXBucC5jb25mIGZpbGUsIHJlbWVtYmVyIHRoZQorKElTT0xBVEUpCisoSURFTlRJRlkgKikKK2F0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZQorKFdBSVRGT1JLRVkpCithdCB0aGUgZW5kLikKKworSW4gdGhpcyBzZXR1cCwgdGhlIG1haW4gY2FyZCBJL08gaXMgMHgwMjIwLCBGTSBzeW50aGVzaXplciBpcyAweDAzODgsIGFuZAordGhlIE1QVS00MDEgTUlESSBwb3J0IGlzIGxvY2F0ZWQgYXQgMHgwMzMwLiAgSVJRIGlzIElSUSA1LCBETUEgaXMgY2hhbm5lbCAxLgorCitBZnRlciBjb25maWd1cmluZyB0aGUgc291bmQgY2FyZCB2aWEgaXNhcG5wLCB0byB1c2UgdGhlIGNhcmQgeW91IG11c3QgbG9hZAordGhlIHNvdW5kIG1vZHVsZXMgd2l0aCB0aGUgcHJvcGVyIEkvTyBpbmZvcm1hdGlvbi4gIEhlcmUgaXMgbXkgc2V0dXA6CisKKyMgRVNTMTg2OEYgQXVkaW9Ecml2ZSBpbml0aWFsaXphdGlvbgorCisvc2Jpbi9tb2Rwcm9iZSBzb3VuZAorL3NiaW4vaW5zbW9kIHVhcnQ0MDEKKy9zYmluL2luc21vZCBzYiBpbz0weDIyMCBpcnE9NSBkbWE9MSBkbWExNj0tMQorL3NiaW4vaW5zbW9kIG1wdTQwMSBpbz0weDMzMAorL3NiaW4vaW5zbW9kIG9wbDMgaW89MHgzODgKKy9zYmluL2luc21vZCB2X21pZGkKKworb3BsMyBpcyB0aGUgRk0gc3ludGhlc2l6ZXIKKy9zYmluL2luc21vZCBvcGwzIGlvPTB4Mzg4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JTlNUQUxMLmF3ZSBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0lOU1RBTEwuYXdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMGY0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JTlNUQUxMLmF3ZQpAQCAtMCwwICsxLDEzNCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUlOU1RBTExBVElPTiBPRiBBV0UzMiBTT1VORCBEUklWRVIgRk9SIExJTlVYCisJVGFrYXNoaSBJd2FpCTxpd2FpQHd3LnVuaS1lcmxhbmdlbi5kZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBBdHRlbnRpb24gdG8gU0ItUG5QIENhcmQgVXNlcnMKKworSWYgeW91J3JlIHVzaW5nIFBuUCBjYXJkcywgdGhlIGluaXRpYWxpemF0aW9uIG9mIFBuUCBpcyByZXF1aXJlZAorYmVmb3JlIGxvYWRpbmcgdGhpcyBkcml2ZXIuICBZb3UgaGF2ZSBub3cgdGhyZWUgb3B0aW9uczoKKyAgMS4gVXNlIGlzYXBucHRvb2xzLgorICAyLiBVc2UgaW4ta2VybmVsIGlzYXBucCBzdXBwb3J0LgorICAzLiBJbml0aWFsaXplIFBuUCBvbiBET1MvV2luZG93cywgdGhlbiBib290IGxpbnV4IGJ5IGxvYWRsaW4uCitJbiB0aGlzIGRvY3VtZW50LCBvbmx5IHRoZSBjYXNlIDEgY2FzZSBpcyB0cmVhdGVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIEluc3RhbGxhdGlvbiBvbiBSZWQgSGF0IDUuMCBTb3VuZCBEcml2ZXIKKworUGxlYXNlIHVzZSBpbnN0YWxsLXJoLnNoIHVuZGVyIFJlZEhhdDUuMCBkaXJlY3RvcnkuCitETyBOT1QgVVNFIGluc3RhbGwuc2ggYmVsb3cuCitTZWUgSU5TVEFMTC5SSCBmb3IgbW9yZSBkZXRhaWxzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIEluc3RhbGxhdGlvbi9VcGRhdGUgYnkgU2hlbGwgU2NyaXB0CisKKyAgMS4gQmVjb21lIHJvb3QKKworCSUgc3UKKworICAyLiBJZiB5b3UgaGF2ZSBuZXZlciBjb25maWd1cmVkIHRoZSBrZXJuZWwgdHJlZSB5ZXQsIHJ1biBtYWtlIGNvbmZpZworICAgIG9uY2UgKHRvIG1ha2UgZGVwZW5kZW5jaWVzIGFuZCBzeW1saW5rcykuCisKKwkjIGNkIC91c3Ivc3JjL2xpbnV4CisJIyBtYWtlIHhjb25maWcKKyAgICAKKyAgMy4gUnVuIGluc3RhbGwuc2ggc2NyaXB0CisKKwkjIHNoIC4vaW5zdGFsbC5zaAorCisgIDQuIENvbmZpZ3VyZSB5b3VyIGtlcm5lbAorCisJKGZvciBMaW51eCAyLlswMV0ueCB1c2VyKQorCSMgY2QgL3Vzci9zcmMvbGludXgKKwkjIG1ha2UgeGNvbmZpZyAob3IgbWFrZSBtZW51Y29uZmlnKQorCisJKGZvciBMaW51eCAxLjIueCB1c2VyKQorCSMgY2QgL3Vzci9zcmMvbGludXgKKwkjIG1ha2UgY29uZmlnCisKKyAgICBBbnN3ZXIgWUVTIHRvIGJvdGggImxvd2xldmVsIGRyaXZlcnMiIGFuZCAiQVdFMzIgd2F2ZSBzeW50aCIgaXRlbXMgCisgICAgaW4gU291bmQgbWVudS4gICgibG93bGV2ZWwgZHJpdmVycyIgd2lsbCBhcHBlYXIgb25seSBpbiAyLngKKyAgICBrZXJuZWwuKQorCisgIDUuIE1ha2UgeW91ciBrZXJuZWwgKGFuZCBtb2R1bGVzKSwgYW5kIGluc3RhbGwgdGhlbSBhcyB1c3VhbC4KKworCTVhLiBtYWtlIGtlcm5lbCBpbWFnZQorCQkjIG1ha2UgekltYWdlCisKKwk1Yi4gbWFrZSBtb2R1bGVzIGFuZCBpbnN0YWxsIHRoZW0KKwkJIyBtYWtlIG1vZHVsZXMgJiYgbWFrZSBtb2R1bGVzX2luc3RhbGwKKworCTVjLiBJZiB5b3UncmUgdXNpbmcgbGlsbywgY29weSB0aGUga2VybmVsIGltYWdlIGFuZCBydW4gbGlsby4KKwkgICAgT3RoZXJ3aXNlLCBjb3B5IHRoZSBrZXJuZWwgaW1hZ2UgdG8gc3VpdGFibGUgZGlyZWN0b3J5IG9yCisJICAgIG1lZGlhIGZvciB5b3VyIHN5c3RlbS4KKworICA2LiBSZWJvb3QgdGhlIGtlcm5lbCBpZiBuZWNlc3NhcnkuCisJLSBJZiB5b3UgdXBkYXRlZCBvbmx5IHRoZSBtb2R1bGVzLCB5b3UgZG9uJ3QgaGF2ZSB0byByZWJvb3QKKwkgIHRoZSBzeXN0ZW0uICBKdXN0IHJlbW92ZSB0aGUgb2xkIHNvdW5kIG1vZHVsZXMgaGVyZS4KKwkJaW4gCisJCSMgcm1tb2Qgc291bmQubwkJKGxpbnV4LTIuMCBvciBPU1MvRnJlZSkKKwkJIyBybW1vZCBhd2Vfd2F2ZS5vCShsaW51eC0yLjEpCisKKyAgNy4gSWYgeW91ciBBV0UgY2FyZCBpcyBhIFBuUCBhbmQgbm90IGluaXRpYWxpemVkIHlldCwgeW91J2xsIGhhdmUgdG8KKyAgICBkbyBpdCBieSBpc2FwbnAgdG9vbHMuICBPdGhlcndpc2UsIHNraXAgdG8gOC4KKworCVRoaXMgc2VjdGlvbiBkZXNjcmliZWQgb25seSBhIGJyaWVmIGV4cGxhbmF0aW9uLiAgRm9yIG1vcmUKKwlkZXRhaWxzLCBwbGVhc2Ugc2VlIHRoZSBBV0U2NC1NaW5pLUhPV1RPIG9yIGlzYXBucCB0b29scyBGQVEuCisKKwk3YS4gSWYgeW91IGhhdmUgbm8gaXNhcG5wLmNvbmYgZmlsZSwgZ2VuZXJhdGUgaXQgYnkgcG5wZHVtcC4KKwkgICAgT3RoZXJ3aXNlLCBza2lwIHRvIDdkLgorCQkjIHBucGR1bXAgPiAvZXRjL2lzYXBucC5jb25mCisKKwk3Yi4gRWRpdCBpc2FwbnAuY29uZiBmaWxlLiAgQ29tbWVudCBvdXQgdGhlIGFwcHJvcHJpYXRlCisJICAgIGxpbmVzIGNvbnRhaW5pbmcgZGVzaXJhYmxlIEkvTyBwb3J0cywgRE1BIGFuZCBJUlFzLgorCSAgICBEb24ndCBmb3JnZXQgdG8gZW5hYmxlIChBQ1QgWSkgbGluZS4KKworCTdjLiBBZGQgdHdvIGkvbyBwb3J0cyAoMHhBMjAgYW5kIDB4RTIwKSBpbiBXYXZlVGFibGUgcGFydC4KKwkgICAgZXgpCisJCShDT05GSUdVUkUgQ1RMMDA0OC81ODEyOCAoTEQgMgorCQkjICAgICBBTlNJIHN0cmluZyAtLT5XYXZlVGFibGU8LS0KKwkJICAoSU8gMCAoQkFTRSAweDA2MjApKQorCQkgIChJTyAxIChCQVNFIDB4MEEyMCkpCisJCSAgKElPIDIgKEJBU0UgMHgwRTIwKSkKKwkJICAoQUNUIFkpCisJCSkpCisKKwk3ZC4gTG9hZCB0aGUgY29uZmlnIGZpbGUuCisJICAgIENBVVRJT046IFRoaXMgd2lsbCByZXNldCBhbGwgUG5QIGNhcmRzIQorCisJCSMgaXNhcG5wIC9ldGMvaXNhcG5wLmNvbmYKKworICA4LiBMb2FkIHRoZSBzb3VuZCBtb2R1bGUgKGlmIHlvdSBjb25maWd1cmVkIGl0IGFzIGEgbW9kdWxlKToKKworCWZvciAyLjAga2VybmVsIG9yIE9TUy9GcmVlIG1vbm9saXRoaWMgbW9kdWxlOgorCisJCSMgbW9kcHJvYmUgc291bmQubworCisJZm9yIDIuMSBrZXJuZWw6CisKKwkJIyBtb2Rwcm9iZSBzb3VuZAorCQkjIGluc21vZCB1YXJ0NDAxCisJCSMgaW5zbW9kIHNiIGlvPTB4MjIwIGlycT01IGRtYT0xIGRtYTE2PTUgbXB1X2lvPTB4MzMwCisJCShUaGVzZSB2YWx1ZXMgZGVwZW5kIG9uIHlvdXIgc2V0dGluZ3MuKQorCQkjIGluc21vZCBhd2Vfd2F2ZQorCQkoQmUgc3VyZSB0byBsb2FkIGF3ZV93YXZlIGFmdGVyIHNiISkKKworCQlTZWUgRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQVdFMzIgZm9yCisJCW1vcmUgZGV0YWlscy4KKworICA5LiAob25seSBmb3Igb2Jzb2xldGUgc3lzdGVtcykgSWYgeW91IGRvbid0IGhhdmUgL2Rldi9zZXF1ZW5jZXIKKyAgICAgZGV2aWNlIGZpbGUsIG1ha2UgaXQgYWNjb3JkaW5nIHRvIFJlYWRtZS5saW51eCBmaWxlIG9uCisgICAgIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvc291bmQuIChSdW4gYSBzaGVsbCBzY3JpcHQgaW5jbHVkZWQgaW4KKyAgICAgdGhhdCBmaWxlKS4gPC0tIFRoaXMgZmlsZSBubyBsb25nZXIgZXhpc3RzIGluIHRoZSByZWNlbnQga2VybmVscyEKKworICAxMC4gT0ssIGxvYWQgeW91ciBvd24gc291bmRmb250IGZpbGUsIGFuZCBlbmpveSBNSURJIQorCisJJSBzZnhsb2FkIHN5bnRoZ20uc2JrCisJJSBkcnZtaWRpIGZvby5taWQKKworICAxMS4gRm9yIG1vcmUgYWR2YW5jZWQgdXNlIChlZy4gZHluYW1pYyBsb2FkaW5nLCB2aXJ0dWFsIGJhbmsgYW5kCisgICAgICBldGMuKSwgcGxlYXNlIHJlYWQgdGhlIGF3ZWRydiBGQVEgb3IgdGhlIGluc3RydWN0aW9ucyBpbiBhd2VzZngKKyAgICAgIGFuZCBhd2VtaWRpIHBhY2thZ2VzLgorCitHb29kIGx1Y2shCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24gYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVkNGZiOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgpAQCAtMCwwICsxLDQ1OSBAQAorSW50cm9kdWN0aW9uCU5vdGVzIG9uIE1vZHVsYXIgU291bmQgRHJpdmVycyBhbmQgU291bmRjb3JlCitXYWRlIEhhbXB0b24gCisyLzE0LzIwMDEKKworUHVycG9zZTogIAorPT09PT09PT0KK1RoaXMgZG9jdW1lbnQgcHJvdmlkZXMgc29tZSBnZW5lcmFsIG5vdGVzIG9uIHRoZSBtb2R1bGFyIAorc291bmQgZHJpdmVycyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbiwgYWxvbmcgd2l0aCB0aGUgCitzdXBwb3J0IG1vZHVsZXMgc291bmQubyBhbmQgc291bmRjb3JlLm8uCisKK05vdGUsIHNvbWUgb2YgdGhpcyBwcm9iYWJseSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIFNvdW5kLUhPV1RPIQorCitOb3RlLCBzb3VuZGxvdy5vIHdhcyBwcmVzZW50IHdpdGggMi4yIGtlcm5lbHMgYnV0IGlzIG5vdCAKK3JlcXVpcmVkIGZvciAyLjQueCBrZXJuZWxzLiAgUmVmZXJlbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZAordG8gdGhpcy4KKworCitDb3B5aW5nOgorPT09PT09PT0KK25vbmUKKworCitIaXN0b3J5OgorPT09PT09PT0KKzAuMS4wICAxMS8yMC8xOTk4ICBGaXJzdCB2ZXJzaW9uLCBkcmFmdAorMS4wLjAgIDExLzE5OTggICAgIEFsYW4gQ294IGNoYW5nZXMsIGluY29ycG9yYXRpb24gaW4gMi4yLjAKKyAgICAgICAgICAgICAgICAgICBhcyBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KKzEuMS4wICA2LzMwLzE5OTkgICBTZWNvbmQgdmVyc2lvbiwgYWRkZWQgbm90ZXMgb24gbWFraW5nIHRoZSBkcml2ZXJzLAorICAgICAgICAgICAgICAgICAgIGFkZGVkIGluZm8gb24gbXVsdGlwbGUgc291bmQgY2FyZHMgb2Ygc2ltaWxhciB0eXBlcyxdCisgICAgICAgICAgICAgICAgICAgYWRkZWQgbW9yZSBkaWFnbm9zdGljcyBpbmZvLCBhZGRlZCBpbmZvIGFib3V0IGVzZC4KKyAgICAgICAgICAgICAgICAgICBhZGRlZCBpbmZvIG9uIE9TUyBhbmQgQUxTQS4KKzEuMS4xICAxOTk5MTAzMQkgICBBZGRlZCBub3RlcyBvbiBzb3VuZC1zbG90LSBhbmQgc291bmQtc2VydmljZS4KKwkJCShBbGFuIENveCkKKzEuMS4yICAyMDAwMDkyMCAgICBNb2RpZmllZCBmb3IgS2VybmVsIDIuNCAoQ2hyaXN0b3BoIEhlbGx3aWcpCisxLjEuMyAgMjAwMTAyMTQgICAgTWlub3Igbm90ZXMgYW5kIGNvcnJlY3Rpb25zIChXYWRlIEhhbXB0b24pCisgICAgICAgICAgICAgICAgICAgQWRkZWQgZXhhbXBsZXMgb2Ygc291bmQtc2xvdC0wLCBldGMuCisKKworTW9kdWxhciBTb3VuZCBEcml2ZXJzOgorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGFua3MgdG8gdGhlIEdSRUFUIHdvcmsgYnkgQWxhbiBDb3ggKGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51ayksCisKK1tBbmQgT2xlZyBEcm9raW4sIFRob21hcyBTYWlsZXIsIEFuZHJldyBWZWxpYXRoIGFuZCBtb3JlIHRoYW4gYSBmZXcgCisgb3RoZXJzIC0gbm90IHRvIG1lbnRpb24gSGFubnUncyBvcmlnaW5hbCBjb2RlIGJlaW5nIGRlc2lnbmVkIHdlbGwKKyBlbm91Z2ggdG8gY29wZSB3aXRoIHRoYXQga2luZCBvZiBjaG9wcGluZyB1cF0oQWxhbikKKwordGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbHMgc3VwcG9ydCBhIG1vZHVsYXIgc291bmQgZHJpdmVyLiAgRnJvbQorQWxhbidzIGNvbW1lbnRzIGluIGxpbnV4L2RyaXZlcnMvc291bmQvUkVBRE1FLkZJUlNUOgorCisgIFRoZSBtb2R1bGFyIHNvdW5kIGRyaXZlciBwYXRjaGVzIHdlcmUgZnVuZGVkIGJ5IFJlZCBIYXQgU29mdHdhcmUgCisgICh3d3cucmVkaGF0LmNvbSkuIFRoZSBzb3VuZCBkcml2ZXIgaGVyZSBpcyB0aHVzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiAKKyAgSGFubnUncyBjb2RlLiBQbGVhc2UgYmVhciB0aGF0IGluIG1pbmQgd2hlbiBjb25zaWRlcmluZyB0aGUgYXBwcm9wcmlhdGUKKyAgZm9ydW1zIGZvciBidWcgcmVwb3J0aW5nLgorCitUaGUgbW9kdWxhciBzb3VuZCBkcml2ZXJzIG1heSBiZSBsb2FkZWQgdmlhIGluc21vZCBvciBtb2Rwcm9iZS4gIAorVG8gc3VwcG9ydCBhbGwgdGhlIHZhcmlvdXMgc291bmQgbW9kdWxlcywgdGhlcmUgYXJlIHR3byBnZW5lcmFsIAorc3VwcG9ydCBtb2R1bGVzIHRoYXQgbXVzdCBiZSBsb2FkZWQgZmlyc3Q6CisgCisgICBzb3VuZGNvcmUubzogICBUb3AgbGV2ZWwgaGFuZGxlciBmb3IgdGhlIHNvdW5kIHN5c3RlbSwgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgcmVnaXN0cmF0aW9uIG9mIGRldmljZXMKKyAgICAgICAgICAgICAgICAgIGJ5IHR5cGUuCisKKyAgIHNvdW5kLm86ICAgICAgIENvbW1vbiBzb3VuZCBmdW5jdGlvbnMgcmVxdWlyZWQgYnkgYWxsIG1vZHVsZXMuCisKK0ZvciB0aGUgc3BlY2lmaWMgc291bmQgbW9kdWxlcyAoZS5nLiwgc2IubyBmb3IgdGhlIFNvdW5kYmxhc3RlciksIAorcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGF0IG1vZHVsZSB0byBkZXRlcm1pbmUgd2hhdCBvcHRpb25zCithcmUgYXZhaWxhYmxlLCBmb3IgZXhhbXBsZSBJUlEsIGFkZHJlc3MsIERNQS4KKworV2FybmluZywgdGhlIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBjYXJkcyBzb21ldGltZSB1c2UgZGlmZmVyZW50IG5hbWVzIAorZm9yIHRoZSBzYW1lIG9yIGEgc2ltaWxhciBmZWF0dXJlIChkbWExPSB2ZXJzdXMgZG1hMTY9KS4gIEFzIGEgbGFzdCAKK3Jlc29ydCwgaW5zcGVjdCB0aGUgY29kZSAoc2VhcmNoIGZvciBNT0RVTEVfUEFSTSkuCisKK05vdGVzOgorCisxLiAgVGhlcmUgaXMgYSBuZXcgT3BlblNvdXJjZSBzb3VuZCBkcml2ZXIgY2FsbGVkIEFMU0Egd2hpY2ggaXMKKyAgICBjdXJyZW50bHkgdW5kZXIgZGV2ZWxvcG1lbnQ6ICBodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcvCisgICAgVGhlIEFMU0EgZHJpdmVycyBzdXBwb3J0IHNvbWUgbmV3ZXIgaGFyZHdhcmUgdGhhdCBtYXkgbm90IAorICAgIGJlIHN1cHBvcnRlZCBieSB0aGlzIHNvdW5kIGRyaXZlciBhbmQgYWxzbyBwcm92aWRlIHNvbWUgCisgICAgYWRkaXRpb25hbCBmZWF0dXJlcy4KKworMi4gIFRoZSBjb21tZXJjaWFsIE9TUyBkcml2ZXIgbWF5IGJlIG9idGFpbmVkIGZyb20gdGhlIHNpdGU6CisgICAgaHR0cDovL3d3dy9vcGVuc291bmQuY29tLiAgVGhpcyBtYXkgYmUgdXNlZCBmb3IgY2FyZHMgdGhhdAorICAgIGFyZSB1bnN1cHBvcnRlZCBieSB0aGUga2VybmVsIGRyaXZlciwgb3IgbWF5IGJlIHVzZWQKKyAgICBieSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4gIAorCiszLiAgVGhlIGVubGlnaHRlbm1lbnQgc291bmQgZGFlbW9uIG1heSBiZSB1c2VkIGZvciBwbGF5aW5nCisgICAgbXVsdGlwbGUgc291bmRzIGF0IHRoZSBzYW1lIHRpbWUgdmlhIGEgc2luZ2xlIGNhcmQsIGVsaW1pbmF0aW5nCisgICAgc29tZSBvZiB0aGUgcmVxdWlyZW1lbnRzIGZvciBtdWx0aXBsZSBzb3VuZCBjYXJkIHN5c3RlbXMuICBGb3IKKyAgICBtb3JlIGluZm9ybWF0aW9uLCBzZWU6ICBodHRwOi8vd3d3LnR1eC5vcmcvfnJpY2R1ZGUvRXNvdW5ELmh0bWwgIAorICAgIFRoZSAiZXNkIiBwcm9ncmFtIG1heSBiZSB1c2VkIHdpdGggdGhlIHJlYWwtcGxheWVyIGFuZCBtcGVnIAorICAgIHBsYXllcnMgbGlrZSBtcGcxMjMgYW5kIHgxMWFtcC4gIFRoZSBuZXdlciByZWFsLXBsYXllciAKKyAgICBhbmQgc29tZSBnYW1lcyBldmVuIGluY2x1ZGUgYnVpbHQtaW4gc3VwcG9ydCBmb3IgRVNEIQorCisKK0J1aWxkaW5nIHRoZSBNb2R1bGVzOgorPT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgZG9lcyBub3QgcHJvdmlkZSBmdWxsIGRldGFpbHMgb24gYnVpbGRpbmcgdGhlIAora2VybmVsLCBldGMuICBUaGUgbm90ZXMgYmVsb3cgYXBwbHkgb25seSB0byBtYWtpbmcgdGhlIGtlcm5lbAorc291bmQgbW9kdWxlcy4gICBJZiB0aGlzIGNvbmZsaWN0cyB3aXRoIHRoZSBrZXJuZWwncyBSRUFETUUsCit0aGUgUkVBRE1FIHRha2VzIHByZWNlZGVuY2UuIAorCisxLiAgVG8gbWFrZSB0aGUga2VybmVsIHNvdW5kIG1vZHVsZXMsIGNkIHRvIHlvdXIgL3Vzci9zcmMvbGludXgKKyAgICBkaXJlY3RvcnkgKHR5cGljYWxseSkgYW5kIHR5cGUgbWFrZSBjb25maWcsIG1ha2UgbWVudWNvbmZpZywgCisgICAgb3IgbWFrZSB4Y29uZmlnICh0byBzdGFydCB0aGUgY29tbWFuZCBsaW5lLCBkaWFsb2csIG9yIHgtYmFzZWQKKyAgICBjb25maWd1cmF0aW9uIHRvb2wpLiAgCisKKzIuICBTZWxlY3QgdGhlIFNvdW5kIG9wdGlvbiBhbmQgYSBkaWFsb2cgd2lsbCBiZSBkaXNwbGF5ZWQuICAKKworMy4gIFNlbGVjdCBNIChtb2R1bGUpIGZvciAiU291bmQgY2FyZCBzdXBwb3J0Ii4KKworNC4gIFNlbGVjdCB5b3VyIHNvdW5kIGRyaXZlcihzKSBhcyBhIG1vZHVsZS4gIEZvciBQcm9BdWRpbywgU291bmQKKyAgICBCbGFzdGVyLCBldGMuLCBzZWxlY3QgTSAobW9kdWxlKSBmb3IgT1NTIHNvdW5kIG1vZHVsZXMuCisgICAgW3RoYW5rcyB0byBNYXJ2aW4gU3RvZG9sc2t5IDxzdG9kb2xza0Blcm9scy5jb20+XUEKKworNS4gIE1ha2UgdGhlIGtlcm5lbCAoZS5nLiwgbWFrZSBiekltYWdlKSwgYW5kIGluc3RhbGwgdGhlIGtlcm5lbC4KKworNi4gIE1ha2UgdGhlIG1vZHVsZXMgYW5kIGluc3RhbGwgdGhlbSAobWFrZSBtb2R1bGVzOyBtYWtlIG1vZHVsZXNfaW5zdGFsbCkuCisKK05vdGUsIGZvciAyLjUueCBrZXJuZWxzLCBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIG5ld2VyIG1vZHVsZS1pbml0LXRvb2xzIAoraW5zdGFsbGVkIG9yIG1vZHVsZXMgd2lsbCBub3QgYmUgbG9hZGVkIHByb3Blcmx5LiAgMi41LnggcmVxdWlyZXMgYW4KK3VwZGF0ZWQgbW9kdWxlLWluaXQtdG9vbHMuCisKKworUGx1ZyBhbmQgUGxheSAoUG5QOgorPT09PT09PT09PT09PT09PT09PQorCitJZiB0aGUgc291bmQgY2FyZCBpcyBhbiBJU0EgUG5QIGNhcmQsIGlzYXBucCBtYXkgYmUgdXNlZAordG8gY29uZmlndXJlIHRoZSBjYXJkLiAgU2VlIHRoZSBmaWxlIGlzYXBucC50eHQgaW4gdGhlIAorZGlyZWN0b3J5IG9uZSBsZXZlbCB1cCAoZS5nLiwgL3Vzci9zcmMvbGludXgvRG9jdW1lbnRhdGlvbikuCisKK0Fsc28gdGhlIDIuNC54IGtlcm5lbHMgcHJvdmlkZSBQblAgY2FwYWJpbGl0aWVzLCBzZWUgdGhlIAorZmlsZSBORVdTIGluIHRoaXMgZGlyZWN0b3J5LgorCitQQ0kgc291bmQgY2FyZHMgYXJlIGhpZ2hseSByZWNvbW1lbmRlZCwgYXMgdGhleSBhcmUgZmFyIAorZWFzaWVyIHRvIGNvbmZpZ3VyZSBhbmQgZnJvbSB3aGF0IEkgaGF2ZSByZWFkLCB0aGV5IHVzZQorbGVzcyByZXNvdXJjZXMgYW5kIGFyZSBtb3JlIENQVSBlZmZpY2llbnQuCisKKworSU5TTU9EOgorPT09PT09PQorCitJZiBsb2FkaW5nIHZpYSBpbnNtb2QsIHRoZSBjb21tb24gbW9kdWxlcyBtdXN0IGJlIGxvYWRlZCBpbiB0aGUgCitvcmRlciBiZWxvdyBCRUZPUkUgbG9hZGluZyB0aGUgb3RoZXIgc291bmQgbW9kdWxlcy4gIFRoZSBjYXJkLXNwZWNpZmljCittb2R1bGVzIG1heSB0aGVuIGJlIGxvYWRlZCAobW9zdCByZXF1aXJlIHBhcmFtZXRlcnMpLiAgRm9yIGV4YW1wbGUsCitJIHVzZSB0aGUgZm9sbG93aW5nIHZpYSBhIHNoZWxsIHNjcmlwdCB0byBsb2FkIG15IFNvdW5kQmxhc3RlcjoKKworU0JfQkFTRT0weDI0MAorU0JfSVJRPTkKK1NCX0RNQT0zCitTQl9ETUEyPTUKK1NCX01QVT0weDMwMAorIworZWNobyBTdGFydGluZyBzb3VuZAorL3NiaW4vaW5zbW9kIHNvdW5kY29yZQorL3NiaW4vaW5zbW9kIHNvdW5kICAKKyMKK2VjaG8gU3RhcnRpbmcgc291bmQgYmxhc3Rlci4uLi4KKy9zYmluL2luc21vZCB1YXJ0NDAxCisvc2Jpbi9pbnNtb2Qgc2IgaW89JFNCX0JBU0UgaXJxPSRTQl9JUlEgZG1hPSRTQl9ETUEgZG1hMTY9JFNCX0RNQTIgbXB1X2lvPSRTQl9NUAorCitXaGVuIHVzaW5nIHNvdW5kIGFzIGEgbW9kdWxlLCBJIHR5cGljYWxseSBwdXQgdGhlc2UgY29tbWFuZHMKK2luIGEgZmlsZSBzdWNoIGFzIC9yb290L3NvdW5kb24uc2guCisKKworTU9EUFJPQkU6Cis9PT09PT09PT0KKworSWYgbG9hZGluZyB2aWEgbW9kcHJvYmUsIHRoZXNlIGNvbW1vbiBmaWxlcyBhcmUgYXV0b21hdGljYWxseSBsb2FkZWQgCit3aGVuIHJlcXVlc3RlZCBieSBtb2Rwcm9iZS4gIEZvciBleGFtcGxlLCBteSAvZXRjL21vZHByb2JlLmNvbmYgY29udGFpbnM6CisKK2FsaWFzIHNvdW5kIHNiIAorb3B0aW9ucyBzYiBpbz0weDI0MCBpcnE9OSBkbWE9MyBkbWExNj01IG1wdV9pbz0weDMwMAorCitBbGwgeW91IG5lZWQgdG8gZG8gdG8gbG9hZCB0aGUgbW9kdWxlIGlzOgorCisJL3NiaW4vbW9kcHJvYmUgc2IKKworCitTb3VuZCBTdGF0dXM6Cis9PT09PT09PT09PT09CisKK1RoZSBzdGF0dXMgb2Ygc291bmQgbWF5IGJlIHJlYWQvY2hlY2tlZCBieToKKyAgICAgICAgY2F0IChhbnlmaWxlKS5hdSA+L2Rldi9hdWRpbworCitbV1dIOiAgVGhpcyBtYXkgbm90IHdvcmsgcHJvcGVybHkgZm9yIFNvdW5kQmxhc3RlciBQQ0kgMTI4IGNhcmRzCitzdWNoIGFzIHRoZSBlczEzNzAvMSAoc2VlIHRoZSBlczEzNzAvMSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSkgCithcyB0aGV5IGRvIG5vdCBhdXRvbWF0aWNhbGx5IHN1cHBvcnQgdUxhdyBvbiAvZGV2L2F1ZGlvLl0KKworVGhlIHN0YXR1cyBvZiB0aGUgbW9kdWxlcyBhbmQgd2hpY2ggbW9kdWxlcyBkZXBlbmQgb24gCit3aGljaCBvdGhlciBtb2R1bGVzIG1heSBiZSBjaGVja2VkIGJ5OgorCS9zYmluL2xzbW9kCisKKy9zYmluL2xzbW9kIHNob3VsZCBzaG93IHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6CisJc2IgICAgICAgICAgICAgICAgICAgICAyNjI4MCAgIDAgCisJdWFydDQwMSAgICAgICAgICAgICAgICAgNTY0MCAgIDAgIFtzYl0KKwlzb3VuZCAgICAgICAgICAgICAgICAgIDU3MTEyICAgMCAgW3NiIHVhcnQ0MDFdCisJc291bmRjb3JlICAgICAgICAgICAgICAgMTk2OCAgIDggIFtzYiBzb3VuZF0KKworCitSZW1vdmluZyBTb3VuZDogCis9PT09PT09PT09PT09PT0gCisKK1NvdW5kIG1heSBiZSByZW1vdmVkIGJ5IHVzaW5nIC9zYmluL3JtbW9kIGluIHRoZSByZXZlcnNlIG9yZGVyCitpbiB3aGljaCB5b3UgbG9hZCB0aGUgbW9kdWxlcy4gIE5vdGUsIGlmIGEgcHJvZ3JhbSBoYXMgYSBzb3VuZCBkZXZpY2UKK29wZW4gKGUuZy4sIHhtaXhlciksIHRoYXQgbW9kdWxlIChhbmQgdGhlIG1vZHVsZXMgb24gd2hpY2ggaXQgCitkZXBlbmRzKSBtYXkgbm90IGJlIHVubG9hZGVkLgorCitGb3IgZXhhbXBsZSwgSSB1c2UgdGhlIGZvbGxvd2luZyB0byByZW1vdmUgbXkgU291bmRibGFzdGVyIChybW1vZAoraW4gdGhlIHJldmVyc2Ugb3JkZXIgaW4gd2hpY2ggSSBsb2FkZWQgdGhlIG1vZHVsZXMpOgorCisvc2Jpbi9ybW1vZCBzYgorL3NiaW4vcm1tb2QgdWFydDQwMQorL3NiaW4vcm1tb2Qgc291bmQKKy9zYmluL3JtbW9kIHNvdW5kY29yZQorCitXaGVuIHVzaW5nIHNvdW5kIGFzIGEgbW9kdWxlLCBJIHR5cGljYWxseSBwdXQgdGhlc2UgY29tbWFuZHMKK2luIGEgc2NyaXB0IHN1Y2ggYXMgL3Jvb3Qvc291bmRvZmYuc2guCisKKworUmVtb3ZpbmcgU291bmQgZm9yIHVzZSB3aXRoIE9TUzogCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKworSWYgeW91IGdldCByZWFsbHkgc3R1Y2sgb3IgaGF2ZSBhIGNhcmQgdGhhdCB0aGUga2VybmVsIG1vZHVsZXMKK3dpbGwgbm90IHN1cHBvcnQsIHlvdSBjYW4gZ2V0IGEgY29tbWVyY2lhbCBzb3VuZCBkcml2ZXIgZnJvbQoraHR0cDovL3d3dy5vcGVuc291bmQuY29tLiAgQmVmb3JlIGxvYWRpbmcgdGhlIGNvbW1lcmNpYWwgc291bmQKK2RyaXZlciwgeW91IHNob3VsZCBkbyB0aGUgZm9sbG93aW5nOgorCisxLiAgcmVtb3ZlIHNvdW5kIG1vZHVsZXMgKGRldGFpbGVkIGFib3ZlKQorMi4gIHJlbW92ZSB0aGUgc291bmQgbW9kdWxlcyBmcm9tIC9ldGMvbW9kcHJvYmUuY29uZgorMy4gIG1vdmUgdGhlIHNvdW5kIG1vZHVsZXMgZnJvbSAvbGliL21vZHVsZXMvPGtlcm5lbD4vbWlzYworICAgIChmb3IgZXhhbXBsZSwgSSBtYWtlIGEgL2xpYi9tb2R1bGVzLzxrZXJuZWw+L21pc2MvdG1wCisgICAgZGlyZWN0b3J5IGFuZCBjb3B5IHRoZSBzb3VuZCBtb2R1bGUgZmlsZXMgdG8gdGhhdCAKKyAgICBkaXJlY3RvcnkpLgorCisKK011bHRpcGxlIFNvdW5kIENhcmRzOgorPT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzb3VuZCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSBzb3VuZCBjYXJkcyBhbmQgdGhlcmUKK2FyZSBzb21lIGdyZWF0IGFwcGxpY2F0aW9ucyBsaWtlIG11bHRpdHJhY2sgdGhhdCBzdXBwb3J0IHRoZW0uICAKK1R5cGljYWxseSwgeW91IG5lZWQgdHdvIHNvdW5kIGNhcmRzIG9mIGRpZmZlcmVudCB0eXBlcy4gIE5vdGUsIHRoaXMKK3VzZXMgbW9yZSBwcmVjaW91cyBpbnRlcnJ1cHRzIGFuZCBETUEgY2hhbm5lbHMgYW5kIHNvbWV0aW1lcyAKK2NhbiBiZSBhIGNvbmZpZ3VyYXRpb24gbmlnaHRtYXJlLiAgSSBoYXZlIGhlYXJkIHJlcG9ydHMgb2YgMy00Citzb3VuZCBjYXJkcyAodHlwaWNhbGx5IEkgb25seSB1c2UgMikuICBZb3UgY2FuIHNvbWV0aW1lcyB1c2UKK211bHRpcGxlIFBDSSBzb3VuZCBjYXJkcyBvZiB0aGUgc2FtZSB0eXBlLgorCitPbiBteSBtYWNoaW5lIEkgaGF2ZSB0d28gc291bmQgY2FyZHMgKGNzNDIzMiBhbmQgU291bmRibGFzdGVyIFZpYnJhCisxNikuICBCeSBsb2FkaW5nIHNvdW5kIGFzIG1vZHVsZXMsIEkgY2FuIGNvbnRyb2wgd2hpY2ggaXMgdGhlIGZpcnN0Citzb3VuZCBkZXZpY2UgKC9kZXYvZHNwLCAvZGV2L2F1ZGlvLCAvZGV2L21peGVyKSBhbmQgd2hpY2ggaXMgCit0aGUgc2Vjb25kLiAgTm9ybWFsbHksIHRoZSBjczQyMzIgKERlbGwgc291bmQgb24gdGhlIG1vdGhlcmJvYXJkKSAKK3dvdWxkIGJlIHRoZSBmaXJzdCBzb3VuZCBkZXZpY2UsIGJ1dCBJIHByZWZlciB0aGUgU291bmRibGFzdGVyLiAgCitBbGwgeW91IGhhdmUgdG8gZG8gaXMgdG8gbG9hZCB0aGUgb25lIHlvdSB3YW50IGFzIC9kZXYvZHNwIAorZmlyc3QgKGluIG15IGNhc2UgInNiIikgYW5kIHRoZW4gbG9hZCB0aGUgb3RoZXIgb25lCisoaW4gbXkgY2FzZSAiY3M0MjMyIikuCisKK0lmIHlvdSBoYXZlIHR3byBjYXJkcyBvZiB0aGUgc2FtZSB0eXBlIHRoYXQgYXJlIGp1bXBlcmVkIAorY2FyZHMgb3IgZGlmZmVyZW50IFBuUCByZXZpc2lvbnMsIHlvdSBtYXkgbG9hZCB0aGUgc2FtZSAKK21vZHVsZSB0d2ljZS4gIEZvciBleGFtcGxlLCBJIGhhdmUgYSBTb3VuZEJsYXN0ZXIgdmlicmEgMTYKK2FuZCBhbiBvbGRlciBTb3VuZEJsYXN0ZXIgMTYgKGp1bXBlcnMpLiAgVG8gbG9hZCB0aGUgbW9kdWxlCit0d2ljZSwgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMS4gIENvcHkgdGhlIHNvdW5kIG1vZHVsZXMgdG8gYSBuZXcgbmFtZS4gIEZvciBleGFtcGxlCisgICAgc2IubyBjb3VsZCBiZSBjb3BpZWQgKG9yIHN5bWxpbmtlZCkgdG8gc2IxLm8gZm9yIHRoZQorICAgIHNlY29uZCBTb3VuZEJsYXN0ZXIuCisKKzIuICBNYWtlIGEgc2Vjb25kIGVudHJ5IGluIC9ldGMvbW9kcHJvYmUuY29uZiwgZm9yIGV4YW1wbGUsCisgICAgc291bmQxIG9yIHNiMS4gIFRoaXMgc2Vjb25kIGVudHJ5IHNob3VsZCByZWZlciB0byB0aGUKKyAgICBuZXcgbW9kdWxlIG5hbWVzIGZvciBleGFtcGxlIHNiMSwgYW5kIHNob3VsZCBpbmNsdWRlCisgICAgdGhlIEkvTywgZXRjLiBmb3IgdGhlIHNlY29uZCBzb3VuZCBjYXJkLgorCiszLiAgVXBkYXRlIHlvdXIgc291bmRvbi5zaCBzY3JpcHQsIGV0Yy4KKworV2FybmluZzogIEkgaGF2ZSBuZXZlciBiZWVuIGFibGUgdG8gZ2V0IHR3byBQblAgc291bmQgY2FyZHMgb2YgdGhlCitzYW1lIHR5cGUgdG8gbG9hZCBhdCB0aGUgc2FtZSB0aW1lLiAgSSBoYXZlIHRyaWVkIHRoaXMgc2V2ZXJhbCB0aW1lcword2l0aCB0aGUgU291bmRibGFzdGVyIFZpYnJhIDE2IGNhcmRzLiAgT1NTIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGlzCitpcyBhIFBuUCBwcm9ibGVtLi4uLiAgSWYgYW55b25lIGhhcyBhbnkgbHVjayBkb2luZyB0aGlzLCBwbGVhc2UgCitzZW5kIG1lIGFuIEUtTUFJTC4gIFBDSSBzb3VuZCBjYXJkcyBzaG91bGQgbm90IGhhdmUgdGhpcyBwcm9ibGVtLmEKK1NpbmNlIHRoaXMgd2FzIG9yaWdpbmFsbHkgcmVsZWFzZSwgSSBoYXZlIHJlY2VpdmVkIGEgY291cGxlIG9mIAorbWFpbHMgZnJvbSBwZW9wbGUgd2hvIGhhdmUgYWNjb21wbGlzaGVkIHRoaXMhCisKK05PVEU6IEluIExpbnV4IDIuNCB0aGUgU291bmQgQmxhc3RlciBkcml2ZXIgKGFuZCBvbmx5IHRoaXMgb25lIHlldCkKK3N1cHBvcnRzIG11bHRpcGxlIGNhcmRzIHdpdGggb25lIG1vZHVsZSBieSBkZWZhdWx0LgorUmVhZCB0aGUgZmlsZSAnU291bmRibGFzdGVyJyBpbiB0aGlzIGRpcmVjdG9yeSBmb3IgZGV0YWlscy4KKworCitTb3VuZCBQcm9ibGVtczoKKz09PT09PT09PT09PT09PQorCitGaXJzdCBSVEZNIChpbmNsdWRpbmcgdGhlIHRyb3VibGVzaG9vdGluZyBzZWN0aW9uIAoraW4gdGhlIFNvdW5kLUhPV1RPKS4gCisKKzEpICBJZiB5b3UgYXJlIGhhdmluZyBwcm9ibGVtcyBsb2FkaW5nIHRoZSBtb2R1bGVzIChmb3IKKyAgICBleGFtcGxlLCBpZiB5b3UgZ2V0IGRldmljZSBjb25mbGljdCBlcnJvcnMpIHRyeSB0aGUKKyAgICBmb2xsb3dpbmc6CisKKyAgQSkgIElmIHlvdSBoYXZlIFdpbjk1IG9yIE5UIG9uIHRoZSBzYW1lIGNvbXB1dGVyLCAgCisgICAgICB3cml0ZSBkb3duIHdoYXQgYWRkcmVzc2VzLCBJUlEsIGFuZCBETUEgY2hhbm5lbHMKKyAgICAgIHRob3NlIHdlcmUgdXNpbmcgZm9yIHRoZSBzYW1lIGhhcmR3YXJlLiAgWW91IHByb2JhYmx5IAorICAgICAgY2FuIHVzZSB0aGVzZSBhZGRyZXNzZXMsIElSUXMsIGFuZCBETUEgY2hhbm5lbHMuCisgICAgICBZb3Ugc2hvdWxkIHJlYWxseSBkbyB0aGlzIEJFRk9SRSBhdHRlbXB0aW5nIHRvIGdldAorICAgICAgc291bmQgd29ya2luZyEKKyAgCisgIEIpICBDaGVjayAoY2F0KSAvcHJvYy9pbnRlcnJ1cHRzLCAvcHJvYy9pb3BvcnRzLAorICAgICAgYW5kIC9wcm9jL2RtYS4gIEFyZSB5b3UgdHJ5aW5nIHRvIHVzZSBhbiBhZGRyZXNzLAorICAgICAgSVJRIG9yIERNQSBwb3J0IHRoYXQgYW5vdGhlciBkZXZpY2UgaXMgdXNpbmc/CisgIAorICBDKSAgQ2hlY2sgKGNhdCkgL3Byb2MvaXNhcG5wCisgIAorICBEKSAgSW5zcGVjdCB5b3VyIC92YXIvbG9nL21lc3NhZ2VzIGZpbGUuICBPZnRlbiB0aGF0IHdpbGwgCisgICAgICBpbmRpY2F0ZSB3aGF0IElSUSBvciBJTyBwb3J0IGNvdWxkIG5vdCBiZSBvYnRhaW5lZC4KKyAgCisgIEUpICBUcnkgYW5vdGhlciBwb3J0IG9yIElSUS4gIE5vdGUgdGhpcyBtYXkgaW52b2x2ZSAKKyAgICAgIHVzaW5nIHRoZSBQblAgdG9vbHMgdG8gbW92ZSB0aGUgc291bmQgY2FyZCB0byAKKyAgICAgIGFub3RoZXIgbG9jYXRpb24uICBTb21ldGltZXMgdGhpcyBpcyB0aGUgb25seSB3YXkgCisgICAgICBhbmQgaXQgaXMgbW9yZSBvciBsZXNzIHRyaWFsIGFuZCBlcnJvci4KKworMikgIElmIHlvdSBnZXQgbW90b3ItYm9hdGluZyAodGhlIHNhbWUgc291bmQgb3IgcGFydCBvZiBhIAorICAgIHNvdW5kIGNsaXAgcmVwZWF0ZWQpLCB5b3UgcHJvYmFibHkgaGF2ZSBlaXRoZXIgYW4gSVJRCisgICAgb3IgRE1BIGNvbmZsaWN0LiAgTW92ZSB0aGUgY2FyZCB0byBhbm90aGVyIElSUSBvciBETUEKKyAgICBwb3J0LiAgVGhpcyBoYXMgaGFwcGVuZWQgdG8gbWUgd2hlbiBwbGF5aW5nIGxvbmcgZmlsZXMgCisgICAgd2hlbiBJIGhhZCBhbiBJUlEgY29uZmxpY3QuCisKKzMuICBJZiB5b3UgZ2V0IGRyb3BvdXRzIG9yIHBhdXNlcyB3aGVuIHBsYXlpbmcgaGlnaCBzYW1wbGUKKyAgICByYXRlIGZpbGVzIHN1Y2ggYXMgdXNpbmcgbXBnMTIzIG9yIHgxMWFtcC94bW1zLCB5b3UgbWF5IAorICAgIGhhdmUgdG9vIHNsb3cgb2YgYSBDUFUgYW5kIG1heSBoYXZlIHRvIHVzZSB0aGUgb3B0aW9ucyB0byAKKyAgICBwbGF5IHRoZSBmaWxlcyBhdCAxLzIgc3BlZWQuICBGb3IgZXhhbXBsZSwgeW91IG1heSB1c2UKKyAgICB0aGUgLTIgb3IgLTQgb3B0aW9uIG9uIG1wZzEyMy4gIFlvdSBtYXkgYWxzbyBnZXQgdGhpcworICAgIHdoZW4gdHJ5aW5nIHRvIHBsYXkgbXBlZyBmaWxlcyBzdG9yZWQgb24gYSBDRC1ST00KKyAgICAobXkgVG9zaGliYSBUODAwMCBQSUkvMzY2IHNvbWV0aW1lcyBoYXMgdGhpcyBwcm9ibGVtKS4KKworNC4gIElmIHlvdSBnZXQgImNhbm5vdCBhY2Nlc3MgZGV2aWNlIiBlcnJvcnMsIHlvdXIgL2Rldi9kc3AKKyAgICBmaWxlcywgZXRjLiBtYXkgYmUgc2V0IHRvIG93bmVyIHJvb3QsIG1vZGUgNjAwLiAgWW91IAorICAgIG1heSBoYXZlIHRvIHVzZSB0aGUgY29tbWFuZDoKKyAgICAgIGNobW9kIDY2NiAvZGV2L2RzcCAvZGV2L21peGVyIC9kZXYvYXVkaW8KKworNS4gIElmIHlvdSBnZXQgImRldmljZSBidXN5IiBlcnJvcnMsIGFub3RoZXIgcHJvZ3JhbSBoYXMgdGhlCisgICAgc291bmQgZGV2aWNlIG9wZW4uICBGb3IgZXhhbXBsZSwgaWYgdXNpbmcgdGhlIEVubGlnaHRlbm1lbnQKKyAgICBzb3VuZCBkYWVtb24gImVzZCIsIHRoZSAiZXNkIiBwcm9ncmFtIGhhcyB0aGUgc291bmQgZGV2aWNlLgorICAgIElmIHVzaW5nICJlc2QiLCBwbGVhc2UgUlRGTSB0aGUgZG9jcyBvbiBFU0QuICBGb3IgZXhhbXBsZSwKKyAgICBlc2Rkc3AgPHByb2dyYW0+IG1heSBiZSB1c2VkIHRvIHBsYXkgZmlsZXMgdmlhIGEgbm9uLWVzZAorICAgIGF3YXJlIHByb2dyYW0uCisKKzYpICBBc2sgZm9yIGhlbHAgb24gdGhlIHNvdW5kIGxpc3Qgb3Igc2VuZCBFLU1BSUwgdG8gdGhlCisgICAgc291bmQgZHJpdmVyIGF1dGhvci9tYWludGFpbmVyLgorCis3KSAgVHVybiBvbiBkZWJ1ZyBpbiBkcml2ZXJzL3NvdW5kL3NvdW5kX2NvbmZpZy5oIChERUIsIEREQiwgTURCKS4KKworOCkgIElmIHRoZSBzeXN0ZW0gcmVwb3J0cyBpbnN1ZmZpY2llbnQgRE1BIG1lbW9yeSB0aGVuIHlvdSBtYXkgd2FudCB0bworICAgIGxvYWQgc291bmQgd2l0aCB0aGUgImRtYWJ1ZnM9MSIgb3B0aW9uLiBPciBpbiAvZXRjL2NvbmYubW9kdWxlcyBhZGQKKwkKKwlwcmVpbnN0YWxsIHNvdW5kIGRtYWJ1ZnM9MQorCisgICAgVGhpcyBtYWtlcyB0aGUgc291bmQgc3lzdGVtIGFsbG9jYXRlIGl0cyBidWZmZXJzIGFuZCBoYW5nIG9udG8gdGhlbS4KKworICAgIFlvdSBtYXkgYWxzbyBzZXQgcGVyc2lzdGVudCBETUEgd2hlbiBidWlsZGluZyBhIDIuNC54IGtlcm5lbC4KKworCitDb25maWd1cmluZyBTb3VuZDoKKz09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIG9mIGNvbmZpZ3VyaW5nIHlvdXIgc291bmQ6CisKKzEpICBPbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSAod2hlbiB1c2luZyB0aGUgc291bmQgZHJpdmVyKHMpCisgICAgY29tcGlsZWQgaW4gdGhlIGtlcm5lbCkuIENoZWNrIHRoZSBkcml2ZXIgc291cmNlIGFuZAorICAgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKKzIpICBPbiB0aGUgY29tbWFuZCBsaW5lIHdoZW4gdXNpbmcgaW5zbW9kIG9yIGluIGEgYmFzaCBzY3JpcHQKKyAgICB1c2luZyBjb21tYW5kIGxpbmUgY2FsbHMgdG8gbG9hZCBzb3VuZC4KKworMykgIEluIC9ldGMvbW9kcHJvYmUuY29uZiB3aGVuIHVzaW5nIG1vZHByb2JlLgorCis0KSAgVmlhIFJlZCBIYXQncyBHUEwnZCAvdXNyL3NiaW4vc25kY29uZmlnIHByb2dyYW0gKHRleHQgYmFzZWQpLgorCis1KSAgVmlhIHRoZSBPU1Mgc291bmRjb25mIHByb2dyYW0gKHdpdGggdGhlIGNvbW1lcmNpYWwgdmVyc2lvbgorICAgIG9mIHRoZSBPU1MgZHJpdmVyLgorCis2KSAgQnkganVzdCBsb2FkaW5nIHRoZSBtb2R1bGUgYW5kIGxldCBpc2FwbnAgZG8gZXZlcnl0aGluZyByZWxldmFudAorICAgIGZvciB5b3UuIFRoaXMgd29ya3Mgb25seSB3aXRoIGEgZmV3IGRyaXZlcnMgeWV0IGFuZCAtIG9mIGNvdXJzZSAtCisgICAgb25seSB3aXRoIGlzYXBucCBoYXJkd2FyZS4KKworQW5kIEkgYW0gc3VyZSwgc2V2ZXJhbCBvdGhlciB3YXlzLiAgCisKK0FueW9uZSB3YW50IHRvIHdyaXRlIGEgbGludXhjb25mIG1vZHVsZSBmb3IgY29uZmlndXJpbmcgc291bmQ/CisKKworTW9kdWxlIExvYWRpbmc6Cis9PT09PT09PT09PT09PT0KKworV2hlbiBhIHNvdW5kIGNhcmQgaXMgZmlyc3QgcmVmZXJlbmNlZCBhbmQgc291bmQgaXMgbW9kdWxhciwgdGhlIHNvdW5kIHN5c3RlbQord2lsbCBhc2sgZm9yIHRoZSBzb3VuZCBkZXZpY2VzIHRvIGJlIGxvYWRlZC4gSW5pdGlhbGx5IGl0IHJlcXVlc3RzIHRoYXQKK3RoZSBkcml2ZXIgZm9yIHRoZSBzb3VuZCBzeXN0ZW0gaXMgbG9hZGVkLiBJdCB0aGVuIHdpbGwgYXNrIGZvciAKK3NvdW5kLXNsb3QtMCwgd2hlcmUgMCBpcyB0aGUgZmlyc3Qgc291bmQgY2FyZC4gKHNvdW5kLXNsb3QtMSB0aGUgc2Vjb25kIGFuZAorc28gb24pLiBUaHVzIHlvdSBjYW4gZG8KKworYWxpYXMgc291bmQtc2xvdC0wIHNiCisKK1RvIGxvYWQgYSBzb3VuZGJsYXN0ZXIgYXQgdGhpcyBwb2ludC4gSWYgdGhlIHNsb3QgbG9hZGluZyBkb2VzIG5vdCBwcm92aWRlCit0aGUgZGVzaXJlZCBkZXZpY2UgLSBmb3IgZXhhbXBsZSBhIHNvdW5kYmxhc3RlciBkb2VzIG5vdCBkaXJlY3RseSBwcm92aWRlCithIG1pZGkgc3ludGggaW4gYWxsIGNhc2VzIHRoZW4gaXQgd2lsbCByZXF1ZXN0ICJzb3VuZC1zZXJ2aWNlLTAtbiIgd2hlcmUgbgoraXMKKworICAwCU1peGVyCisKKyAgMiAgCU1JREkKKworICAzLCA0CURTUCBhdWRpbworCisKK0ZvciBleGFtcGxlLCBJIHVzZSB0aGUgZm9sbG93aW5nIHRvIGxvYWQgbXkgU291bmRibGFzdGVyIFBDSSAxMjgKKyhFUyAxMzcxKSBjYXJkIGZpcnN0LCBmb2xsb3dlZCBieSBteSBTb3VuZEJsYXN0ZXIgVmlicmEgMTYgY2FyZCwKK3RoZW4gYnkgbXkgVFYgY2FyZDoKKworIyBMb2FkIHRoZSBTb3VuZGJsYXN0ZXIgUENJIDEyOCBhcyAvZGV2L2RzcCwgL2Rldi9kc3AxLCAvZGV2L21peGVyCithbGlhcyBzb3VuZC1zbG90LTAgZXMxMzcxCisKKyMgTG9hZCB0aGUgU291bmRibGFzdGVyIFZpYnJhIDE2IGFzIC9kZXYvZHNwMiwgL2Rldi9taXhlcjEKK2FsaWFzIHNvdW5kLXNsb3QtMSBzYgorb3B0aW9ucyBzYiBpbz0weDI0MCBpcnE9NSBkbWE9MSBkbWExNj01IG1wdV9pbz0weDMzMAorCisjIExvYWQgdGhlIEJUVFYgKFRWIGNhcmQpIGFzIC9kZXYvbWl4ZXIyCithbGlhcyBzb3VuZC1zbG90LTIgYnR0dgorYWxpYXMgc291bmQtc2VydmljZS0yLTAgdHZtaXhlcgorCitwcmUtaW5zdGFsbCBidHR2ICBtb2Rwcm9iZSB0dW5lciA7IG1vZHByb2JlIHR2bWl4ZXIKK3ByZS1pbnN0YWxsIHR2bWl4ZXIgbW9kcHJvYmUgbXNwMzQwMDsgbW9kcHJvYmUgdHZhdWRpbyAKK29wdGlvbnMgdHVuZXIgZGVidWc9MCB0eXBlPTggCitvcHRpb25zIGJ0dHYgIGNhcmQ9MCByYWRpbz0wIHBsbD0wCisKKworRm9yIE1vcmUgSW5mb3JtYXRpb24gKFJURk0pOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMSkgIEluZm9ybWF0aW9uIG9uIGtlcm5lbCBtb2R1bGVzOiBtYW51YWwgcGFnZXMgZm9yIGluc21vZCBhbmQgbW9kcHJvYmUuCisKKzIpICBJbmZvcm1hdGlvbiBvbiBQblAsIFJURk0gbWFudWFsIHBhZ2VzIGZvciBpc2FwbnAuCisKKzMpICBTb3VuZC1IT1dUTyBhbmQgU291bmQtUGxheWluZy1IT1dUTy4KKworNCkgIE9TUydzIFdXVyBzaXRlIGF0IGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS4KKworNSkgIEFsbCB0aGUgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9zb3VuZC4KKworNikgIFRoZSBjb21tZW50cyBhbmQgY29kZSBpbiBsaW51eC9kcml2ZXJzL3NvdW5kLgorCis3KSAgVGhlIHNuZGNvbmZpZyBhbmQgcmhzb3VuZCBkb2N1bWVudGF0aW9uIGZyb20gUmVkIEhhdC4KKworOCkgIFRoZSBMaW51eC1zb3VuZCBtYWlsaW5nIGxpc3Q6ICBzb3VuZC1saXN0QHJlZGhhdC5jb20uCisKKzkpICBFbmxpZ2h0ZW5tZW50IGRvY3VtZW50YXRpb24gKGZvciBpbmZvIG9uIGVzZCkKKyAgICBodHRwOi8vd3d3LnR1eC5vcmcvfnJpY2R1ZGUvRXNvdW5ELmh0bWwuCisKKzEwKSBBTFNBIGhvbWUgcGFnZTogIGh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZy8KKworCitDb250YWN0IEluZm9ybWF0aW9uOgorPT09PT09PT09PT09PT09PT09PT0KK1dhZGUgSGFtcHRvbjogICh3aGFtcHRvbkBzdGFmZm5ldC5jb20pCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01BRDE2IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTUFEMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1ZGJkOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01BRDE2CkBAIC0wLDAgKzEsNTYgQEAKKyhUaGlzIHJlY2lwZSBoYXMgYmVlbiBlZGl0ZWQgdG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIHN5bWJvbHMsCisgYW5kIGNoYW5nZSBvdmVyIHRvIG1vZHByb2JlLmNvbmYgZm9yIDIuNikKKworRnJvbTogU2hhdyBDYXJydXRoZXJzIDxzaGF3QHNoYXdjLmRlbW9uLmNvLnVrPgorCitJIGhhdmUgYmVlbiB1c2luZyBtYWQxNiBzb3VuZCBmb3Igc29tZSB0aW1lIG5vdyB3aXRoIG5vIHByb2JsZW1zLCBjdXJyZW50CitrZXJuZWwgMi4xLjg5CisKK2xzbW9kIHNob3dzOgorCittYWQxNiAgICAgICAgICAgICAgICAgICA1MTc2ICAgMCAKK3NiICAgICAgICAgICAgICAgICAgICAgMjIwNDQgICAwICBbbWFkMTZdCit1YXJ0NDAxICAgICAgICAgICAgICAgICA1NTc2ICAgMCAgW21hZDE2IHNiXQorYWQxODQ4ICAgICAgICAgICAgICAgICAxNDE3NiAgIDEgIFttYWQxNl0KK3NvdW5kICAgICAgICAgICAgICAgICAgNjE5MjggICAwICBbbWFkMTYgc2IgdWFydDQwMSBhZDE4NDhdCisKKy5jb25maWcgaGFzOgorCitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX0FETElCPW0KK0NPTkZJR19TT1VORF9NQUQxNj1tCitDT05GSUdfU09VTkRfWU0zODEyPW0KKworbW9kcHJvYmUuY29uZiBoYXM6CisKK2FsaWFzIGNoYXItbWFqb3ItMTQtKiBtYWQxNgorb3B0aW9ucyBzYiBtYWQxNj0xCitvcHRpb25zIG1hZDE2IGlvPTB4NTMwIGlycT03IGRtYT0wIGRtYTE2PTEgICYmIC91c3IvbG9jYWwvYmluL2F1bWl4IC13IDE1IC1wIDIwIC1tIDAgLTEgMCAtMiAwIC0zIDAgLWkgMAorCisKK1RvIGdldCB0aGUgYnVpbHQgaW4gbWl4ZXIgdG8gd29yayB0aGlzIG5lZWRzIHRvIGJlOgorCitvcHRpb25zIGFkbGliX2NhcmQgaW89MHgzODggICAgICMgRk0gc3ludGhlc2l6ZXIKK29wdGlvbnMgc2IgbWFkMTY9MQorb3B0aW9ucyBtYWQxNiBpbz0weDUzMCBpcnE9NyBkbWE9MCBkbWExNj0xIG1wdV9pbz04MTYgbXB1X2lycT01ICYmIC91c3IvbG9jYWwvYmluL2F1bWl4IC13IDE1IC1wIDIwIC1tIDAgLTEgMCAtMiAwIC0zIDAgLWkgMAorCitUaGUgYWRkaXRpb24gb2YgdGhlICJtcHVfaW89ODE2IG1wdV9pcnE9NSIgdG8gdGhlIG1hZDE2IG9wdGlvbnMgbGluZSBpcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBtYWQxNiBtb2R1bGUgaW4gYWRkaXRpb24gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCitvcHRpb246CQkJbWVhbmluZzoJCQlkZWZhdWx0Ogoram95c3RpY2s9MCwxIAkJZGlzYWJsZWQsIGVuYWJsZWQgCQlkaXNhYmxlZAorY2R0eXBlPTB4MDAsMHgwMiwweDA0LAlkaXNhYmxlZCwgU29ueSBDRFUzMUEsCQlkaXNhYmxlZAorICAgICAgIDB4MDYsMHgwOCwweDBhICAgTWl0c3VtaSwgUGFuYXNvbmljLAorCQkJU2Vjb25kYXJ5IElERSwgUHJpbWFyeSBJREUgCitjZHBvcnQ9MHgzNDAsMHgzMjAsCQkJCQkweDM0MAorICAgICAgIDB4MzMwLDB4MzYwCitjZGlycT0wLDMsNSw3LDksMTAsMTEgCWRpc2FibGVkLCBJUlEzLCAuLi4gCQlkaXNhYmxlZAorY2RkbWE9MCw1LDYsNyAJCWRpc2FibGVkLCBETUE1LCAuLi4gCQlETUE1IGZvciBNaXRzdW1pIG9yIElERQorY2RkbWE9MCwxLDIsMyAJCWRpc2FibGVkLCBETUExLCAuLi4gCQlETUEzIGZvciBTb255IG9yIFBhbmFzb25pYworb3BsND0wLDEgCQlPUEwzLCBPUEw0IAkJCU9QTDMJCisKK2ZvciBtb3JlIGRldGFpbHMgc2VlIGxpbnV4L2RyaXZlcnMvc291bmQvbWFkMTYuYworCitSdWkgU291c2EKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01hZXN0cm8gYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NYWVzdHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhODBlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NYWVzdHJvCkBAIC0wLDAgKzEsMTIzIEBACisJQW4gT1NTL0xpdGUgRHJpdmVyIGZvciB0aGUgRVNTIE1hZXN0cm8gZmFtaWx5IG9mIHNvdW5kIGNhcmRzCisKKwkJCVphY2ggQnJvd24sIERlY2VtYmVyIDE5OTkKKworRHJpdmVyIFN0YXR1cyBhbmQgQXZhaWxhYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBkcml2ZXIgd2lsbCBob3BlZnVsbHkgYWx3YXlzIGJlIGF2YWlsYWJsZSBhdAorCWh0dHA6Ly93d3cuemFiYm8ubmV0L21hZXN0cm8vCisKK0kgd2lsbCB0cnkgYW5kIG1haW50YWluIHRoZSBtb3N0IHJlY2VudCBzdGFibGUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyCitpbiBib3RoIHRoZSBzdGFibGUgYW5kIGRldmVsb3BtZW50IGtlcm5lbCBsaW5lcy4KKworRVNTIE1hZXN0cm8gQ2hpcCBGYW1pbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSAzIG1haW4gdmFyaWFudHMgb2YgdGhlIEVTUyBNYWVzdHJvIFBDSSBzb3VuZCBjaGlwLiAgVGhlIGZpcnN0CitpcyB0aGUgTWFlc3RybyAxLiAgSXQgd2FzIG9yaWdpbmFsbHkgcHJvZHVjZWQgYnkgUGxhdGZvcm0gVGVjaCBhcyB0aGUKKydBR09HTycuICBJdCBjYW4gYmUgcmVjb2duaXplZCBieSBQbGF0Zm9ybSBUZWNoJ3MgUENJIElEIDB4MTI4NSB3aXRoCisweDAxMDAgYXMgdGhlIGRldmljZSBJRC4gIEl0IHdhcyBwdXQgb24gc29tZSBzb3VuZCBib2FyZHMgYW5kIGEgZmV3IGxhcHRvcHMuICAKK0VTUyBib3VnaHQgdGhlIGRlc2lnbiBhbmQgY2xlYW5lZCBpdCB1cCBhcyB0aGUgTWFlc3RybyAyLiAgVGhpcyBzdGFydHMKK3RoZWlyIG1hcmtpbmcgd2l0aCB0aGUgRVNTIHZlbmRvciBJRCAweDEyNUQgYW5kIHRoZSAneWVhcicgZGV2aWNlIElEcy4KK1RoZSBNYWVzdHJvIDIgY2xhaW1zIDB4MTk2OCB3aGlsZSB0aGUgTWFlc3RybyAyZSBoYXMgMHgxOTc4LgorCitUaGUgdmFyaW91cyBmYW1pbGllcyBvZiBNYWVzdHJvIGFyZSBtb3N0bHkgaWRlbnRpY2FsIGFzIGZhciBhcyB0aGlzIAorZHJpdmVyIGlzIGNvbmNlcm5lZC4gIEl0IGRvZXNuJ3QgdG91Y2ggdGhlIERTUCBwYXJ0cyB0aGF0IGRpZmZlciAodGhvdWdoCitpdCBjb3VsZCBmb3IgRk0gc3ludGhlc2lzKS4KKworRHJpdmVyIE9TUyBCZWhhdmlvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBPU1MgZHJpdmVyIGV4cG9ydHMgL2Rldi9taXhlciBhbmQgL2Rldi9kc3AgdG8gYXBwbGljYXRpb25zLCB3aGljaAorbW9zdGx5IGFkaGVyZSB0byB0aGUgT1NTIHNwZWMuICAgVGhpcyBkcml2ZXIgZG9lc24ndCByZWdpc3RlciBpdHNlbGYKK3dpdGggL2Rldi9zbmRzdGF0LCBzbyBkb24ndCBleHBlY3QgaW5mb3JtYXRpb24gdG8gYXBwZWFyIHRoZXJlLgorCitUaGUgL2Rldi9kc3AgZGV2aWNlIGV4cG9ydGVkIGJlaGF2ZXMgYWxtb3N0IGFzIGV4cGVjdGVkLiAgUGxheWJhY2sgaXMKK3N1cHBvcnRlZCBpbiBhbGwgdGhlIHZhcmlvdXMgbG92ZWx5IGZvcm1hdHMuICA4LzE2Yml0IHN0ZXJlby9tb25vIGZyb20KKzhraHogdG8gNDhraHosIGFuZCBtbWFwKClpbmcgZm9yIHBsYXliYWNrIGJlaGF2ZXMuICBDYXB0dXJlL3JlY29yZGluZworaXMgbGltaXRlZCBkdWUgdG8gb2RkaXRpZXMgd2l0aCB0aGUgTWFlc3RybyBoYXJkd2FyZS4gIE9uZSBjYW4gb25seQorcmVjb3JkIGluIDE2Yml0IHN0ZXJlby4gIEZvciByZWNvcmRpbmcgdGhlIG1hZXN0cm8gdXNlcyBub24gaW50ZXJsZWF2ZWQKK3N0ZXJlbyBidWZmZXJzIHNvIHRoYXQgbW1hcCgpaW5nIHRoZSBpbmNvbWluZyBkYXRhIGRvZXMgbm90IHJlc3VsdCBpbgorYSByaW5nIGJ1ZmZlciBvZiBMUkxSIGRhdGEuICBtbWFwKClpbmcgb2YgdGhlIHJlYWQgYnVmZmVycyBpcyB0aGVyZWZvcmUKK2Rpc2FsbG93ZWQgdW50aWwgdGhpcyBjYW4gYmUgY2xlYW5lZCB1cC4KKworL2Rldi9taXhlciBpcyBhbiBpbnRlcmZhY2UgdG8gdGhlIEFDJzk3IGNvZGVjIG9uIHRoZSBNYWVzdHJvLiAgSXQgaXMKK3dvcnRoIG5vdGluZyB0aGF0IHRoZXJlIGFyZSBhIHZhcmlldHkgb2YgQUMnOTdzIHRoYXQgY2FuIGJlIHdpcmVkIHRvCit0aGUgTWFlc3Ryby4gIFdoaWNoIGlzIHVzZWQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGhhcmR3YXJlIGltcGxlbWVudG9yLgorVGhpcyBzaG91bGQgb25seSBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyIGJ5IHRoZSBwcmVzZW5jZSwgb3IgbGFjaywgb2YKKydCYXNzJyBhbmQgJ1RyZWJsZScgc2xpZGVycyBpbiB0aGUgbWl4ZXIuICBOb3QgYWxsIEFDJzk3cyBoYXZlIHRoZW0uCisKK1RoZSBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IE1JREkgb3IgRk0gcGxheWJhY2sgYXQgdGhlIG1vbWVudC4gIFR5cGljYWxseQordGhlIE1hZXN0cm8gaXMgd2lyZWQgdG8gYW4gTVBVIE1JREkgY2hpcCwgYnV0IHNvbWUgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zCitkb24ndC4gIFdlIG5lZWQgdG8gYXNzZW1ibGUgYSB3aGl0ZSBsaXN0IG9mIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucyB0aGF0CitoYXZlIE1JREkgd2lyZWQgcHJvcGVybHkgYmVmb3JlIHdlIGNhbiBjbGFpbSB0byBzdXBwb3J0IGl0IHNhZmVseS4KKworQ29tcGlsaW5nIGFuZCBJbnN0YWxsaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgZHJpdmVycyBpbmNsdXNpb24gaW50byB0aGUga2VybmVsLCBjb21waWxpbmcgYW5kIGluc3RhbGxpbmcKK2lzIHRoZSBzYW1lIGFzIG1vc3QgT1NTL0xpdGUgbW9kdWxhciBzb3VuZCBkcml2ZXJzLiAgQ29tcGlsYXRpb24KK29mIHRoZSBkcml2ZXIgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZSBDT05GSUdfU09VTkRfTUFFU1RSTyB2YXJpYWJsZQoraW4gdGhlIGNvbmZpZyBzeXN0ZW0uICAKKworSXQgbWF5IGJlIG1vZHVsYXIgb3Igc3RhdGljYWxseSBsaW5rZWQuICBJZiBpdCBpcyBtb2R1bGFyIGl0IHNob3VsZCBiZQoraW5zdGFsbGVkIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZXMgZm9yIHRoZSBrZXJuZWwgb24gdGhlIHN5c3RlbS4KK1R5cGljYWxseSB0aGlzIHdpbGwgYmUgaW4gL2xpYi9tb2R1bGVzLyBzb21ld2hlcmUuICAnYWxpYXMgc291bmQgbWFlc3RybycKK3Nob3VsZCBhbHNvIGJlIGFkZGVkIHRvIHlvdXIgbW9kdWxlIGNvbmZpZ3MgKHR5cGljYWxseSAvZXRjL2NvbmYubW9kdWxlcykKK2lmIHlvdSdyZSB1c2luZyBtb2R1bGFyIE9TUy9MaXRlIHNvdW5kIGFuZCB3YW50IHRvIGRlZmF1bHQgdG8gdXNpbmcgYQorbWFlc3RybyBjaGlwLgorCitBcyB0aGlzIGlzIGEgUENJIGRldmljZSwgdGhlIG1vZHVsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGluZm9ybWVkIG9mCithbnkgSU8gb3IgSVJRIHJlc291cmNlcyBpdCBzaG91bGQgdXNlLCBpdCBkZXZpbmVzIHRoZXNlIGZyb20gdGhlCitzeXN0ZW0uICBTb21ldGltZXMsIG9uIHN1Y2t5IFBDcywgdGhlIEJJT1MgZmFpbHMgdG8gYWxsb2NhdGVkIHJlc291cmNlcworZm9yIHRoZSBtYWVzdHJvLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhIG1lc3NhZ2UgbGlrZToKKwltYWVzdHJvOiBQQ0kgc3Vic3lzdGVtIHJlcG9ydHMgSVJRIDAsIHRoaXMgbWlnaHQgbm90IGJlIGNvcnJlY3QuCitmcm9tIHRoZSBrZXJuZWwuICBTaG91bGQgdGhpcyBoYXBwZW4gdGhlIHNvdW5kIGNoaXAgbW9zdCBsaWtlbHkgd2lsbAorbm90IG9wZXJhdGUgY29ycmVjdGx5LiAgVG8gc29sdmUgdGhpcyBvbmUgaGFzIHRvIGRpZyB0aHJvdWdoIHRoZWlyIEJJT1MKKyh0eXBpY2FsbHkgZW50ZXJlZCBieSBoaXR0aW5nIGEgaG90IGtleSBhdCBib290IHRpbWUpIGFuZCBmaWd1cmUgb3V0Cit3aGF0IG1hZ2ljIG5lZWRzIHRvIGhhcHBlbiBzbyB0aGF0IHRoZSBCSU9TIHdpbGwgcmV3YXJkIHRoZSBtYWVzdHJvIHdpdGgKK2FuIElSUS4gIFRoaXMgb3BlcmF0aW9uIGlzIGluY3JlZGlibHkgc3lzdGVtIHNwZWNpZmljLCBzbyB5b3UncmUgb24geW91cgorb3duLiAgU29tZXRpbWVzIHRoZSBtYWdpYyBsaWVzIGluICdQTlAgQ2FwYWJsZSBPcGVyYXRpbmcgU3lzdGVtJyBzZXR0aW5ncy4KKworVGhlcmUgYXJlIHZlcnkgZmV3IG9wdGlvbnMgdG8gdGhlIGRyaXZlci4gIE9uZSBpcyAnZGVidWcnIHdoaWNoIHdpbGwgCit0ZWxsIHRoZSBkcml2ZXIgdG8gcHJpbnQgbWluaW1hbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYXMgaXQgcnVucy4gIFRoaXMKK2NhbiBiZSBjb2xsZWN0ZWQgd2l0aCAnZG1lc2cnIG9yIHRocm91Z2ggdGhlIGtsb2dkIGRhZW1vbi4KKworVGhlIG90aGVyLCBtb3JlIGludGVyZXN0aW5nIG9wdGlvbiwgaXMgJ2RzcHNfb3JkZXInLiAgVHlwaWNhbGx5IGF0CitpbnN0YWxsIHRpbWUgdGhlIGRyaXZlciB3aWxsIG9ubHkgcmVnaXN0ZXIgb25lIGF2YWlsYWJsZSAvZGV2L2RzcCBkZXZpY2UKK2ZvciBpdHMgdXNlLiAgVGhlICdkc3BzX29yZGVyJyBtb2R1bGUgcGFyYW1ldGVyIGFsbG93cyBmb3IgbW9yZSBkZXZpY2VzCit0byBiZSBhbGxvY2F0ZWQsIGFzIGEgcG93ZXIgb2YgdHdvLiAgVXAgdG8gNCBkZXZpY2VzIGNhbiBiZSByZWdpc3RlcmVkCisoIGRzcHNfb3JkZXI9MiApLiAgVGhlc2UgZGV2aWNlcyBhY3QgYXMgZnVsbHkgZGlzdGluY3QgdW5pdHMgYW5kIHVzZQorc2VwYXJhdGUgY2hhbm5lbHMgaW4gdGhlIG1hZXN0cm8uCisKK1Bvd2VyIE1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0KKworQXMgb2YgdmVyc2lvbiAwLjE0LCB0aGlzIGRyaXZlciBoYXMgYSBtaW5pbWFsIHVuZGVyc3RhbmRpbmcgb2YgUENJCitQb3dlciBNYW5hZ2VtZW50LiAgSWYgaXQgZmluZHMgYSB2YWxpZCBwb3dlciBtYW5hZ2VtZW50IGNhcGFiaWxpdHkKK29uIHRoZSBQQ0kgZGV2aWNlIGl0IHdpbGwgYXR0ZW1wdCB0byB1c2UgdGhlIHBvd2VyIG1hbmFnZW1lbnQKK2Z1bmN0aW9ucyBvZiB0aGUgbWFlc3Ryby4gIEl0IHdpbGwgb25seSBkbyB0aGlzIG9uIE1hZXN0cm8gMkVzIGFuZAorb25seSBvbiBtYWNoaW5lcyB0aGF0IGFyZSBrbm93biB0byBmdW5jdGlvbiB3ZWxsLiAgWW91IGNhbgorZm9yY2UgdGhlIHVzZSBvZiBwb3dlciBtYW5hZ2VtZW50IGJ5IHNldHRpbmcgdGhlICd1c2VfcG0nIG1vZHVsZQorb3B0aW9uIHRvIDEsIG9yIGNhbiBkaXNhYmxlIGl0IGVudGlyZWx5IGJ5IHNldHRpbmcgaXQgdG8gMC4KKworV2hlbiB1c2luZyBwb3dlciBtYW5hZ2VtZW50LCB0aGUgZHJpdmVyIGRvZXMgYSBmZXcgdGhpbmdzCitkaWZmZXJlbnRseS4gIEl0IHdpbGwga2VlcCB0aGUgY2hpcCBpbiBhIGxvd2VyIHBvd2VyIG1vZGUKK3doZW4gdGhlIG1vZHVsZSBpcyBpbnNlcnRlZCBidXQgL2Rldi9kc3AgaXMgbm90IG9wZW4uICBUaGlzCithbGxvd3MgdGhlIG1peGVyIHRvIGZ1bmN0aW9uIGJ1dCB0dXJucyBvZmYgdGhlIGNsb2Nrcworb24gb3RoZXIgcGFydHMgb2YgdGhlIGNoaXAuICBXaGVuIC9kZXYvZHNwIGlzIG9wZW5lZCB0aGUgY2hpcAoraXMgYnJvdWdodCBpbnRvIGZ1bGwgcG93ZXIgbW9kZSwgYW5kIGJyb3VnaHQgYmFjayBkb3duCit3aGVuIGl0IGlzIGNsb3NlZC4gIEl0IGFsc28gcG93ZXJzIGRvd24gdGhlIGNoaXAgZW50aXJlbHkKK3doZW4gdGhlIG1vZHVsZSBpcyByZW1vdmVkIG9yIHRoZSBtYWNoaW5lIGlzIHNodXRkb3duLiAgVGhpcworY2FuIGhhdmUgbm9ub2J2aW91cyBjb25zZXF1ZW5jZXMuICBDRCBhdWRpbyBtYXkgbm90IHdvcmsKK2FmdGVyIGEgcG93ZXIgbWFuYWdpbmcgZHJpdmVyIGlzIHJlbW92ZWQuICBBbHNvLCBzb2Z0d2FyZSB0aGF0Citkb2Vzbid0IHVuZGVyc3RhbmQgcG93ZXIgbWFuYWdlbWVudCBtYXkgbm90IGJlIGFibGUgdG8gdGFsawordG8gdGhlIHBvd2VyZWQgZG93biBjaGlwIHVudGlsIHRoZSBtYWNoaW5lIGdvZXMgdGhyb3VnaCBhIGhhcmQKK3JlYm9vdCB0byBicmluZyBpdCBiYWNrLgorCisuLiBtb3JlIGRldGFpbHMgLi4KKy0tLS0tLS0tLS0tLS0tLS0tLQorCitkcml2ZXJzL3NvdW5kL21hZXN0cm8uYyBjb250YWlucyBjb21tZW50cyB0aGF0IGhvcGVmdWxseSBleHBsYWluCit0aGUgbWFlc3RybyBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01hZXN0cm8zIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTWFlc3RybzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExMzcxOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01hZXN0cm8zCkBAIC0wLDAgKzEsOTIgQEAKKwlBbiBPU1MvTGl0ZSBEcml2ZXIgZm9yIHRoZSBFU1MgTWFlc3RybzMgZmFtaWx5IG9mIHNvdW5kIGNoaXBzCisKKwkJCVphY2ggQnJvd24sIEphbnVhcnkgMjAwMQorCitEcml2ZXIgU3RhdHVzIGFuZCBBdmFpbGFiaWxpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciB3aWxsIGhvcGVmdWxseSBhbHdheXMgYmUgYXZhaWxhYmxlIGF0CisJaHR0cDovL3d3dy56YWJiby5uZXQvbWFlc3RybzMvCisKK0kgd2lsbCB0cnkgYW5kIG1haW50YWluIHRoZSBtb3N0IHJlY2VudCBzdGFibGUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyCitpbiBib3RoIHRoZSBzdGFibGUgYW5kIGRldmVsb3BtZW50IGtlcm5lbCBsaW5lcy4KKworSGlzdG9yaWNhbGx5IEkndmUgc3Vja2VkIHByZXR0eSBoYXJkIGF0IGFjdHVhbGx5IGRvaW5nIHRoYXQsIGhvd2V2ZXIuCisKK0VTUyBNYWVzdHJvMyBDaGlwIEZhbWlseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICdNYWVzdHJvMycgaXMgbXVjaCBsaWtlIHRoZSBNYWVzdHJvMiBjaGlwLiAgVGhlIG5vdGVkIGltcHJvdmVtZW50CitpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgc2lsaWNvbiBpbiB0aGUgJzInIHRoYXQgZGlkIFBDTSBtaXhpbmcuICBBbGwgdGhhdAord29yayBpcyBub3cgZG9uZSB0aHJvdWdoIGEgY3VzdG9tIERTUCBjYWxsZWQgdGhlIEFTU1AsIHRoZSBBc3luY2hyb251cworU3BlY2lmaWMgU2lnbmFsIFByb2Nlc3Nvci4KKworVGhlICdBbGxlZ3JvJyBpcyBhIGJhYnkgdmVyc2lvbiBvZiB0aGUgTWFlc3RybzMuICBJJ20gbm90IGVudGlyZWx5IGNsZWFyCitvbiB0aGUgZXh0ZW50IG9mIHRoZSBkaWZmZXJlbmNlcywgYnV0IHRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlbSBib3RoIDopCisKK1RoZSAnQWxsZWdybycgc2hvd3MgdXAgYXMgUENJIElEIDB4MTk4OCBhbmQgdGhlIE1hZXN0cm8zIGFzIDB4MTk5OCwKK2JvdGggdW5kZXIgRVNTJ3MgdmVuZG9yIElEIG9mIDB4MTI1RC4gIFRoZSBNYWVzdHJvMyBjYW4gYWxzbyBzaG93IHVwIGFzCisweDE5OWEgd2hlbiBoYXJkd2FyZSBzdHJhcHBpbmcgaXMgdXNlZC4KKworVGhlIGNoaXAgY2FuIGFsc28gYWN0IGFzIGEgbXVsdGkgZnVuY3Rpb24gZGV2aWNlLiAgVGhlIG1vZGVtIElEcyBmb2xsb3cKK3RoZSBhdWRpbyBtdWx0aW1lZGlhIGRldmljZSBJRHMuICAoc28gdGhlIG1vZGVtIHBhcnQgb2YgYW4gQWxsZWdybyBzaG93cwordXAgYXMgMHgxOTg5KQorCitEcml2ZXIgT1NTIEJlaGF2aW9yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIE9TUyBkcml2ZXIgZXhwb3J0cyAvZGV2L21peGVyIGFuZCAvZGV2L2RzcCB0byBhcHBsaWNhdGlvbnMsIHdoaWNoCittb3N0bHkgYWRoZXJlIHRvIHRoZSBPU1Mgc3BlYy4gICBUaGlzIGRyaXZlciBkb2Vzbid0IHJlZ2lzdGVyIGl0c2VsZgord2l0aCAvZGV2L3NuZHN0YXQsIHNvIGRvbid0IGV4cGVjdCBpbmZvcm1hdGlvbiB0byBhcHBlYXIgdGhlcmUuCisKK1RoZSAvZGV2L2RzcCBkZXZpY2UgZXhwb3J0ZWQgYmVoYXZlcyBhcyBleHBlY3RlZC4gIFBsYXliYWNrIGlzCitzdXBwb3J0ZWQgaW4gYWxsIHRoZSB2YXJpb3VzIGxvdmVseSBmb3JtYXRzLiAgOC8xNmJpdCBzdGVyZW8vbW9ubyBmcm9tCis4a2h6IHRvIDQ4a2h6LCB3aXRoIGJvdGggcmVhZCgpL3dyaXRlKCksIGFuZCBtbWFwKCkuCisKKy9kZXYvbWl4ZXIgaXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBBQyc5NyBjb2RlYyBvbiB0aGUgTWFlc3RybzMuICBJdCBpcword29ydGggbm90aW5nIHRoYXQgdGhlcmUgYXJlIGEgdmFyaWV0eSBvZiBBQyc5N3MgdGhhdCBjYW4gYmUgd2lyZWQgdG8KK3RoZSBNYWVzdHJvMy4gIFdoaWNoIGlzIHVzZWQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGhhcmR3YXJlIGltcGxlbWVudG9yLgorVGhpcyBzaG91bGQgb25seSBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyIGJ5IHRoZSBwcmVzZW5jZSwgb3IgbGFjaywgb2YKKydCYXNzJyBhbmQgJ1RyZWJsZScgc2xpZGVycyBpbiB0aGUgbWl4ZXIuICBOb3QgYWxsIEFDJzk3cyBoYXZlIHRoZW0uCitUaGUgQWxsZWdybyBoYXMgYW4gb25jaGlwIEFDJzk3LgorCitUaGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBNSURJIG9yIEZNIHBsYXliYWNrIGF0IHRoZSBtb21lbnQuCisKK0NvbXBpbGluZyBhbmQgSW5zdGFsbGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhlIGRyaXZlcnMgaW5jbHVzaW9uIGludG8gdGhlIGtlcm5lbCwgY29tcGlsaW5nIGFuZCBpbnN0YWxsaW5nCitpcyB0aGUgc2FtZSBhcyBtb3N0IE9TUy9MaXRlIG1vZHVsYXIgc291bmQgZHJpdmVycy4gIENvbXBpbGF0aW9uCitvZiB0aGUgZHJpdmVyIGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUgQ09ORklHX1NPVU5EX01BRVNUUk8zIHZhcmlhYmxlCitpbiB0aGUgY29uZmlnIHN5c3RlbS4gIAorCitJdCBtYXkgYmUgbW9kdWxhciBvciBzdGF0aWNhbGx5IGxpbmtlZC4gIElmIGl0IGlzIG1vZHVsYXIgaXQgc2hvdWxkIGJlCitpbnN0YWxsZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbW9kdWxlcyBmb3IgdGhlIGtlcm5lbCBvbiB0aGUgc3lzdGVtLgorVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSBpbiAvbGliL21vZHVsZXMvIHNvbWV3aGVyZS4gICdhbGlhcyBzb3VuZC1zbG90LTAKK21hZXN0cm8zJyBzaG91bGQgYWxzbyBiZSBhZGRlZCB0byB5b3VyIG1vZHVsZSBjb25maWdzICh0eXBpY2FsbHkKKy9ldGMvbW9kcHJvYmUuY29uZikgaWYgeW91J3JlIHVzaW5nIG1vZHVsYXIgT1NTL0xpdGUgc291bmQgYW5kIHdhbnQgdG8KK2RlZmF1bHQgdG8gdXNpbmcgYSBtYWVzdHJvMyBjaGlwLgorCitUaGVyZSBhcmUgdmVyeSBmZXcgb3B0aW9ucyB0byB0aGUgZHJpdmVyLiAgT25lIGlzICdkZWJ1Zycgd2hpY2ggd2lsbCAKK3RlbGwgdGhlIGRyaXZlciB0byBwcmludCBtaW5pbWFsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhcyBpdCBydW5zLiAgVGhpcworY2FuIGJlIGNvbGxlY3RlZCB3aXRoICdkbWVzZycgb3IgdGhyb3VnaCB0aGUga2xvZ2QgZGFlbW9uLgorCitPbmUgaXMgJ2V4dGVybmFsX2FtcCcsIHdoaWNoIHRlbGxzIHRoZSBkcml2ZXIgdG8gYXR0ZW1wdCB0byBlbmFibGUKK2FuIGV4dGVybmFsIGFtcGxpZmllci4gIFRoaXMgZGVmYXVsdHMgdG8gJzEnLCB5b3UgY2FuIHRlbGwgdGhlIGRyaXZlcgorbm90IHRvIGJvdGhlciBlbmFibGluZyBzdWNoIGFuIGFtcGxpZmllciBieSBzZXR0aW5nIGl0IHRvICcwJy4KKworQW5kIHRoZSBsYXN0IGlzICdncGlvX3BpbicsIHdoaWNoIHRlbGxzIHRoZSBkcml2ZXIgd2hpY2ggR1BJTyBwaW4gbnVtYmVyCit0aGUgZXh0ZXJuYWwgYW1wIHVzZXMgKDAtMTUpLCBUaGUgQWxsZWdybyB1c2VzIDggYnkgZGVmYXVsdCwgYWxsIG90aGVycyAxLgorSWYgZXZlcnl0aGluZyBsb2FkcyBjb3JyZWN0bHkgYW5kIHNlZW1zIHRvIGJlIHdvcmtpbmcgYnV0IHlvdSBnZXQgbm8gc291bmQsIAordHJ5IHR3ZWFraW5nIHRoaXMgdmFsdWUuIAorCitTeXN0ZW1zIGtub3duIHRvIG5lZWQgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAgICAgUGFuYXNvbmljIFRvdWdoQm9vayBDRi03MjogZ3Bpb19waW49MTMgCisKK1Bvd2VyIE1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaGFzIGEgbWluaW1hbCB1bmRlcnN0YW5kaW5nIG9mIFBDSSBQb3dlciBNYW5hZ2VtZW50LiAgSXQgd2lsbAordHJ5IGFuZCBwb3dlciBkb3duIHRoZSBjaGlwIHdoZW4gdGhlIHN5c3RlbSBpcyBzdXNwZW5kZWQsIGFuZCBwb3dlcgoraXQgdXAgd2l0aCBpdCBpcyByZXN1bWVkLiAgSXQgd2lsbCBhbHNvIHRyeSBhbmQgcG93ZXIgZG93biB0aGUgY2hpcAord2hlbiB0aGUgbWFjaGluZSBpcyBzaHV0IGRvd24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NdWx0aVNvdW5kIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTXVsdGlTb3VuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGExOGJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTXVsdGlTb3VuZApAQCAtMCwwICsxLDExMzcgQEAKKyMhIC9iaW4vc2gKKyMKKyMgIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIERyaXZlciBOb3RlcworIyAgLS0gQW5kcmV3IFZlbGlhdGggPGFuZHJld3R2QHVzYS5uZXQ+CisjCisjICBMYXN0IHVwZGF0ZTogICAgICAgICAgICAgICAgICAgICAgU2VwdGVtYmVyIDEwLCAxOTk4CisjICBDb3JyZXNwb25kaW5nIG1zbmQgZHJpdmVyOiAgICAgICAgMC44LjMKKyMKKyMgKiogVGhpcyBmaWxlIGlzIGEgUkVBRE1FICh0b3AgcGFydCkgYW5kIHNoZWxsIGFyY2hpdmUgKGJvdHRvbSBwYXJ0KS4KKyMgICAgVGhlIGNvcnJlc3BvbmRpbmcgYXJjaGl2ZWQgdXRpbGl0eSBzb3VyY2VzIGNhbiBiZSB1bnBhY2tlZCBieQorIyAgICBydW5uaW5nIGBzaCBNdWx0aVNvdW5kJyAodGhlIHV0aWxpdGllcyBhcmUgb25seSBuZWVkZWQgZm9yIHRoZQorIyAgICBQaW5uYWNsZSBhbmQgRmlqaSBjYXJkcykuICoqCisjCisjCisjICAtPS09LSBHZXR0aW5nIEZpcm13YXJlIC09LT0tCisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjICAKKyMgIFNlZSB0aGUgc2VjdGlvbiBgT2J0YWluaW5nIGFuZCBDcmVhdGluZyBGaXJtd2FyZSBGaWxlcycgaW4gdGhpcworIyAgZG9jdW1lbnQgZm9yIGluc3RydWN0aW9ucyBvbiBvYnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBmaXJtd2FyZQorIyAgZmlsZXMuCisjICAKKyMgIAorIyAgU3VwcG9ydGVkIEZlYXR1cmVzCisjICB+fn5+fn5+fn5+fn5+fn5+fn4KKyMgIAorIyAgQ3VycmVudGx5LCBmdWxsLWR1cGxleCBkaWdpdGFsIGF1ZGlvICgvZGV2L2RzcCBvbmx5LCAvZGV2L2F1ZGlvIGlzCisjICBub3QgY3VycmVudGx5IGF2YWlsYWJsZSkgYW5kIG1peGVyIGZ1bmN0aW9uYWxpdHkgKC9kZXYvbWl4ZXIpIGFyZQorIyAgc3VwcG9ydGVkIChtZW1vcnkgbWFwcGVkIGRpZ2l0YWwgYXVkaW8gaXMgbm90IHlldCBzdXBwb3J0ZWQpLgorIyAgRGlnaXRhbCB0cmFuc2ZlcnMgYW5kIG1vbml0b3JpbmcgY2FuIGJlIGRvbmUgYXMgd2VsbCBpZiB5b3UgaGF2ZQorIyAgdGhlIGRpZ2l0YWwgZGF1Z2h0ZXJib2FyZCAoc2VlIHRoZSBzZWN0aW9uIG9uIHVzaW5nIHRoZSBTL1BESUYgcG9ydAorIyAgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorIworIyAgU3VwcG9ydCBmb3IgdGhlIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIEh1cnJpY2FuZSBhcmNoaXRlY3R1cmUgaXMKKyMgIGNvbXBvc2VkIG9mIHRoZSBmb2xsb3dpbmcgbW9kdWxlcyAodGhlc2UgY2FuIGFsc28gb3BlcmF0ZSBjb21waWxlZAorIyAgaW50byB0aGUga2VybmVsKToKKyMgIAorIyAgbXNuZCAgICAgICAgICAgICAgIC0gTXVsdGlTb3VuZCBiYXNlIChyZXF1aXJlcyBzb3VuZGNvcmUpCisjCisjICBtc25kX2NsYXNzaWMgICAgICAgLSBCYXNlIGF1ZGlvL21peGVyIHN1cHBvcnQgZm9yIENsYXNzaWMsIE1vbmV0ZXJ5IGFuZAorIyAgICAgICAgICAgICAgICAgICAgICAgVGFoaXRpIGNhcmRzCisjCisjICBtc25kX3Bpbm5hY2xlICAgICAgLSBCYXNlIGF1ZGlvL21peGVyIHN1cHBvcnQgZm9yIFBpbm5hY2xlIGFuZCBGaWppIGNhcmRzCisjICAKKyMgIAorIyAgSW1wb3J0YW50IE5vdGVzIC0gUmVhZCBCZWZvcmUgVXNpbmcKKyMgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjICAKKyMgIFRoZSBmaXJtd2FyZSBmaWxlcyBhcmUgbm90IGluY2x1ZGVkIChtYXkgY2hhbmdlIGluIGZ1dHVyZSkuICBZb3UKKyMgIG11c3Qgb2J0YWluIHRoZXNlIGltYWdlcyBmcm9tIFR1cnRsZSBCZWFjaCAodGhleSBhcmUgaW5jbHVkZWQgaW4KKyMgIHRoZSBNdWx0aVNvdW5kIERldmVsb3BtZW50IEtpdHMpLCBhbmQgcGxhY2UgdGhlbSBpbiAvZXRjL3NvdW5kIGZvcgorIyAgZXhhbXBsZSwgYW5kIGdpdmUgdGhlIGZ1bGwgcGF0aHMgaW4gdGhlIExpbnV4IGNvbmZpZ3VyYXRpb24uICBJZgorIyAgeW91IGFyZSBjb21waWxpbmcgaW4gc3VwcG9ydCBmb3IgdGhlIE11bHRpU291bmQgZHJpdmVyIHJhdGhlciB0aGFuCisjICB1c2luZyBpdCBhcyBhIG1vZHVsZSwgdGhlc2UgZmlybXdhcmUgZmlsZXMgbXVzdCBiZSBhY2Nlc3NpYmxlCisjICBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uLgorIworIyAgUGxlYXNlIG5vdGUgdGhlc2UgZmlsZXMgbXVzdCBiZSBiaW5hcnkgZmlsZXMsIG5vdCBhc3NlbWJsZXIuICBTZWUKKyMgIHRoZSBzZWN0aW9uIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQgZm9yIGluc3RydWN0aW9ucyB0byBvYnRhaW4gdGhlc2UKKyMgIGZpbGVzLgorIyAgCisjICAKKyMgIENvbmZpZ3VyaW5nIENhcmQgUmVzb3VyY2VzCisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIworIyAgKiogVGhpcyBzZWN0aW9uIGlzIHZlcnkgaW1wb3J0YW50LCBhcyB5b3VyIGNhcmQgbWF5IG5vdCB3b3JrIGF0IGFsbAorIyAgICAgb3IgeW91ciBtYWNoaW5lIG1heSBjcmFzaCBpZiB5b3UgZG8gbm90IGRvIHRoaXMgY29ycmVjdGx5LiAqKgorIworIyAgKiBDbGFzc2ljL01vbnRlcmV5L1RhaGl0aQorIyAgCisjICBUaGVzZSBjYXJkcyBhcmUgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBkcml2ZXIgbXNuZF9jbGFzc2ljLiAgWW91IG11c3QKKyMgIGtub3cgdGhlIGlvIHBvcnQsIHRoZW4gdGhlIGRyaXZlciB3aWxsIHNlbGVjdCB0aGUgaXJxIGFuZCBtZW1vcnkgcmVzb3VyY2VzCisjICBvbiB0aGUgY2FyZC4gIEl0IGlzIHVwIHRvIHlvdSB0byBrbm93IGlmIHRoZXNlIGFyZSBmcmVlIGxvY2F0aW9ucyBvciBub3csCisjICBhIGNvbmZsaWN0IGNhbiBsb2NrIHRoZSBtYWNoaW5lIHVwLgorIworIyAgKiBQaW5uYWNsZS9GaWppCisjCisjICBUaGUgUGlubmFjbGUgYW5kIEZpamkgY2FyZHMgaGF2ZSBhbiBleHRyYSBjb25maWcgcG9ydCwgZWl0aGVyCisjICAweDI1MCwgMHgyNjAgb3IgMHgyNzAuICBUaGlzIHBvcnQgY2FuIGJlIGRpc2FibGVkIHRvIGhhdmUgdGhlIGNhcmQKKyMgIGNvbmZpZ3VyZWQgc3RyaWN0bHkgdGhyb3VnaCBQblAsIGhvd2V2ZXIgeW91IGxvc2UgdGhlIGFiaWxpdHkgdG8KKyMgIGFjY2VzcyB0aGUgSURFIGNvbnRyb2xsZXIgYW5kIGpveXN0aWNrIGRldmljZXMgb24gdGhpcyBjYXJkIHdoZW4KKyMgIHVzaW5nIFBuUC4gIFRoZSBpbmNsdWRlZCBwaW5uYWNsZWNmZyBwcm9ncmFtIGluIHRoaXMgc2hlbGwgYXJjaGl2ZQorIyAgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBjYXJkIGluIG5vbi1QblAgbW9kZSwgYW5kIGluIFBuUCBtb2RlCisjICB5b3UgY2FuIHVzZSBpc2FwbnB0b29scy4gIFRoZXNlIGFyZSBkZXNjcmliZWQgYnJpZWZseSBoZXJlLgorIworIyAgcGlubmFjbGVjZmcgaXMgbm90IHJlcXVpcmVkOyB5b3UgY2FuIHVzZSB0aGUgbXNuZF9waW5uYWNsZSBtb2R1bGUKKyMgIHRvIGZ1bGx5IGNvbmZpZ3VyZSB0aGUgY2FyZCBhcyB3ZWxsLiAgSG93ZXZlciwgcGlubmFjbGVjZmcgY2FuIGJlCisjICB1c2VkIHRvIGNoYW5nZSB0aGUgcmVzb3VyY2UgdmFsdWVzIG9mIGEgcGFydGljdWxhciBkZXZpY2UgYWZ0ZXIgdGhlCisjICBtc25kX3Bpbm5hY2xlIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQuICBJZiB5b3UgYXJlIGNvbXBpbGluZyB0aGUKKyMgIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBtdXN0IHNldCB0aGVzZSB2YWx1ZXMgZHVyaW5nIGNvbXBpbGUKKyMgIHRpbWUsIGhvd2V2ZXIgb3RoZXIgcGVyaXBoZXJhbCByZXNvdXJjZSB2YWx1ZXMgY2FuIGJlIGNoYW5nZWQgd2l0aAorIyAgdGhlIHBpbm5hY2xlY2ZnIHByb2dyYW0gYWZ0ZXIgdGhlIGtlcm5lbCBpcyBsb2FkZWQuCisjCisjCisjICAqKiogUG5QIG1vZGUKKyMgIAorIyAgVXNlIHBucGR1bXAgdG8gb2J0YWluIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24gaWYgeW91IGNhbjsgSSB3YXMgYWJsZQorIyAgdG8gb2J0YWluIG9uZSB3aXRoIHRoZSBjb21tYW5kIGBwbnBkdW1wIDEgMHgyMDMnIC0tIHRoaXMgbWF5IHZhcnkKKyMgIGZvciB5b3UgKHJ1bm5pbmcgcG5wZHVtcCBieSBpdHNlbGYgZGlkIG5vdCB3b3JrIGZvciBtZSkuICBUaGVuLAorIyAgZWRpdCB0aGlzIGZpbGUgYW5kIHVzZSBpc2FwbnAgdG8gdW5jb21tZW50IGFuZCBzZXQgdGhlIGNhcmQgdmFsdWVzLgorIyAgVXNlIHRoZXNlIHZhbHVlcyB3aGVuIGluc2VydGluZyB0aGUgbXNuZF9waW5uYWNsZSBtb2R1bGUuICBVc2luZworIyAgdGhpcyBtZXRob2QsIHlvdSBjYW4gc2V0IHRoZSByZXNvdXJjZXMgZm9yIHRoZSBEU1AgYW5kIHRoZSBLdXJ6d2VpbAorIyAgc3ludGggKFBpbm5hY2xlKS4gIFNpbmNlIExpbnV4IGRvZXMgbm90IGRpcmVjdGx5IHN1cHBvcnQgUG5QCisjICBkZXZpY2VzLCB5b3UgbWF5IGhhdmUgZGlmZmljdWx0eSB3aGVuIHVzaW5nIHRoZSBjYXJkIGluIFBuUCBtb2RlCisjICB3aGVuIGl0IHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiAgVXNpbmcgbm9uLVBuUCBtb2RlCisjICBpcyBwcmVmZXJhYmxlIGluIHRoaXMgY2FzZS4KKyMKKyMgIEhlcmUgaXMgYW4gZXhhbXBsZSBteXBpbm5hY2xlLmNvbmYgZm9yIGlzYXBucCB0aGF0IHNldHMgdGhlIGNhcmQgdG8KKyMgIGlvIGJhc2UgMHgyMTAsIGlycSA1IGFuZCBtZW0gMHhkODAwMCwgYW5kIGFsc28gc2V0cyB0aGUgS3VyendlaWwKKyMgIHN5bnRoIHRvIDB4MzMwIGFuZCBpcnEgOSAobWF5IG5lZWQgZWRpdGluZyBmb3IgeW91ciBzeXN0ZW0pOgorIworIyAgKFJFQURQT1JUIDB4MDIwMykKKyMgIChDU04gMikKKyMgIChJREVOVElGWSAqKQorIyAgCisjICAjIERTUAorIyAgKENPTkZJR1VSRSBCVkowNDQwLy0xIChMRCAwCisjICAgICAgICAgIChJTlQgMCAoSVJRIDUgKE1PREUgK0UpKSkgKElPIDAgKEJBU0UgMHgwMjEwKSkgKE1FTSAwIChCQVNFIDB4MGQ4MDAwKSkKKyMgICAgICAgICAgKEFDVCBZKSkpCisjICAKKyMgICMgS3VyendlaWwgU3ludGggKFBpbm5hY2xlIE9ubHkpCisjICAoQ09ORklHVVJFIEJWSjA0NDAvLTEgKExEIDEKKyMgICAgICAgICAgKElPIDAgKEJBU0UgMHgwMzMwKSkgKElOVCAwIChJUlEgOSAoTU9ERSArRSkpKQorIyAgICAgICAgICAoQUNUIFkpKSkKKyMgIAorIyAgKFdBSVRGT1JLRVkpCisjCisjCisjICAqKiogTm9uLVBuUCBtb2RlCisjICAKKyMgIFRoZSBzZWNvbmQgd2F5IGlzIGJ5IHJ1bm5pbmcgdGhlIGNhcmQgaW4gbm9uLVBuUCBtb2RlLiAgVGhpcworIyAgYWN0dWFsbHkgaGFzIHNvbWUgYWR2YW50YWdlcyBpbiB0aGF0IHlvdSBjYW4gYWNjZXNzIHNvbWUgb3RoZXIKKyMgIGRldmljZXMgb24gdGhlIGNhcmQsIHN1Y2ggYXMgdGhlIGpveXN0aWNrIGFuZCBJREUgY29udHJvbGxlci4gIFRvCisjICBjb25maWd1cmUgdGhlIGNhcmQsIHVucGFjayB0aGlzIHNoZWxsIGFyY2hpdmUgYW5kIGJ1aWxkIHRoZQorIyAgcGlubmFjbGVjZmcgcHJvZ3JhbS4gIFVzaW5nIHRoaXMgcHJvZ3JhbSwgeW91IGNhbiBhc3NpZ24gdGhlCisjICByZXNvdXJjZSB2YWx1ZXMgdG8gdGhlIGNhcmQncyBkZXZpY2VzLCBvciBkaXNhYmxlIHRoZSBkZXZpY2VzLiAgQXMKKyMgIGFuIGFsdGVybmF0aXZlIHRvIHVzaW5nIHBpbm5hY2xlY2ZnLCB5b3UgY2FuIHNwZWNpZnkgbWFueSBvZiB0aGUKKyMgIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHdoZW4gbG9hZGluZyB0aGUgbXNuZF9waW5uYWNsZSBtb2R1bGUgKG9yCisjICBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gd2hlbiBjb21waWxpbmcgdGhlIGRyaXZlciBpbnRvIHRoZQorIyAga2VybmVsKS4KKyMKKyMgIElmIHlvdSBzcGVjaWZ5IGNmZz0weDI1MCBmb3IgdGhlIG1zbmRfcGlubmFjbGUgbW9kdWxlLCBpdAorIyAgYXV0b21hdGljYWxseSBjb25maWd1cmUgdGhlIGNhcmQgdG8gdGhlIGdpdmVuIGlvLCBpcnEgYW5kIG1lbW9yeQorIyAgdmFsdWVzIHVzaW5nIHRoYXQgY29uZmlnIHBvcnQgKHRoZSBjb25maWcgcG9ydCBpcyBqdW1wZXIgc2VsZWN0YWJsZQorIyAgb24gdGhlIGNhcmQgdG8gMHgyNTAsIDB4MjYwIG9yIDB4MjcwKS4KKyMKKyMgIFNlZSB0aGUgYG1zbmRfcGlubmFjbGUgQWRkaXRpb25hbCBPcHRpb25zJyBzZWN0aW9uIGJlbG93IGZvciBtb3JlCisjICBpbmZvcm1hdGlvbiBvbiB0aGVzZSBwYXJhbWV0ZXJzIChhbHNvLCBpZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyCisjICBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIHRoZXNlIGV4dHJhIHBhcmFtZXRlcnMgY2FuIGJlIHVzZWZ1bAorIyAgaGVyZSkuCisjCisjCisjICoqIEl0IGlzIHZlcnkgZWFzeSB0byBjYXVzZSBwcm9ibGVtcyBpbiB5b3VyIG1hY2hpbmUgaWYgeW91IGNob29zZSBhCisjICAgIHJlc291cmNlIHZhbHVlIHdoaWNoIGlzIGluY29ycmVjdC4gKioKKyMgIAorIworIyAgRXhhbXBsZXMKKyMgIH5+fn5+fn5+CisjICAKKyMgICogTXVsdGlTb3VuZCBDbGFzc2ljL01vbnRlcmV5L1RhaGl0aToKKyMgIAorIyAgbW9kcHJvYmUgc291bmRjb3JlCisjICBpbnNtb2QgbXNuZAorIyAgaW5zbW9kIG1zbmRfY2xhc3NpYyBpbz0weDI5MCBpcnE9NyBtZW09MHhkMDAwMAorIyAgCisjICAqIE11bHRpU291bmQgUGlubmFjbGUgaW4gUG5QIG1vZGU6CisjICAKKyMgIG1vZHByb2JlIHNvdW5kY29yZQorIyAgaW5zbW9kIG1zbmQKKyMgIGlzYXBucCBteXBpbm5hY2xlLmNvbmYKKyMgIGluc21vZCBtc25kX3Bpbm5hY2xlIGlvPTB4MjEwIGlycT01IG1lbT0weGQ4MDAwIDwtLSBtYXRjaCBteXBpbm5hY2xlLmNvbmYgdmFsdWVzCisjICAKKyMgICogTXVsdGlTb3VuZCBQaW5uYWNsZSBpbiBub24tUG5QIG1vZGUgKHJlcGxhY2UgMHgyNTAgd2l0aCB5b3VyIGNvbmZpZ3VyYXRpb24gcG9ydCwKKyMgICAgb25lIG9mIDB4MjUwLCAweDI2MCBvciAweDI3MCk6CisjICAKKyMgIGluc21vZCBzb3VuZGNvcmUKKyMgIGluc21vZCBtc25kCisjICBpbnNtb2QgbXNuZF9waW5uYWNsZSBjZmc9MHgyNTAgaW89MHgyOTAgaXJxPTUgbWVtPTB4ZDAwMDAKKyMgIAorIyAqIFRvIHVzZSB0aGUgTVBVLWNvbXBhdGlibGUgS3VyendlaWwgc3ludGggb24gdGhlIFBpbm5hY2xlIGluIFBuUAorIyAgIG1vZGUsIGFkZCB0aGUgZm9sbG93aW5nIChhc3N1bWVzIHlvdSBkaWQgYGlzYXBucCBteXBpbm5hY2xlLmNvbmYnKToKKyMgIAorIyAgaW5zbW9kIHNvdW5kCisjICBpbnNtb2QgbXB1NDAxIGlvPTB4MzMwIGlycT05ICAgICAgICAgICAgICAgICAgICA8LS0gbWF0Y2ggbXlwaW5uYWNsZS5jb25mIHZhbHVlcworIyAgCisjICogVG8gdXNlIHRoZSBNUFUtY29tcGF0aWJsZSBLdXJ6d2VpbCBzeW50aCBvbiB0aGUgUGlubmFjbGUgaW4gbm9uLVBuUAorIyAgIG1vZGUsIGFkZCB0aGUgZm9sbG93aW5nLiAgTm90ZSBob3cgd2UgZmlyc3QgY29uZmlndXJlIHRoZSBwZXJpcGhlcmFsJ3MKKyMgICByZXNvdXJjZXMsIF90aGVuXyBpbnN0YWxsIGEgTGludXggZHJpdmVyIGZvciBpdDoKKyMgIAorIyAgaW5zbW9kIHNvdW5kCisjICBwaW5uYWNsZWNmZyAweDI1MCBtcHUgMHgzMzAgOQorIyAgaW5zbW9kIG1wdTQwMSBpbz0weDMzMCBpcnE9OQorIworIyAgLS0gT1IgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSB3aXRob3V0IHBpbm5hY2xlY2ZnIGluIG5vbi1QblAgbW9kZToKKyMKKyMgIGluc21vZCBzb3VuZGNvcmUKKyMgIGluc21vZCBtc25kCisjICBpbnNtb2QgbXNuZF9waW5uYWNsZSBjZmc9MHgyNTAgaW89MHgyOTAgaXJxPTUgbWVtPTB4ZDAwMDAgbXB1X2lvPTB4MzMwIG1wdV9pcnE9OQorIyAgaW5zbW9kIHNvdW5kCisjICBpbnNtb2QgbXB1NDAxIGlvPTB4MzMwIGlycT05CisjCisjICogVG8gc2V0dXAgdGhlIGpveXN0aWNrIHBvcnQgb24gdGhlIFBpbm5hY2xlIGluIG5vbi1QblAgbW9kZSAodGhvdWdoCisjICAgeW91IGhhdmUgdG8gZmluZCB0aGUgYWN0dWFsIExpbnV4IGpveXN0aWNrIGRyaXZlciBlbHNld2hlcmUpLCB5b3UKKyMgICBjYW4gdXNlIHBpbm5hY2xlY2ZnOgorIworIyAgIHBpbm5hY2xlY2ZnIDB4MjUwIGpveXN0aWNrIDB4MjAwCisjCisjICAtLSBPUiB5b3UgY2FuIGNvbmZpZ3VyZSB0aGlzIHVzaW5nIG1zbmRfcGlubmFjbGUgd2l0aCB0aGUgZm9sbG93aW5nOgorIworIyAgaW5zbW9kIHNvdW5kY29yZQorIyAgaW5zbW9kIG1zbmQKKyMgIGluc21vZCBtc25kX3Bpbm5hY2xlIGNmZz0weDI1MCBpbz0weDI5MCBpcnE9NSBtZW09MHhkMDAwMCBqb3lzdGlja19pbz0weDIwMAorIworIyAgCisjICBtc25kX2NsYXNzaWMsIG1zbmRfcGlubmFjbGUgUmVxdWlyZWQgT3B0aW9ucworIyAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgIAorIyAgSWYgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBub3QgZ2l2ZW4sIHRoZSBtb2R1bGUgd2lsbCBub3QgbG9hZC4KKyMgIEV4YW1pbmUgdGhlIGtlcm5lbCBtZXNzYWdlIGxvZyBmb3IgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMuCisjICBXQVJOSU5HLS1wcm9iaW5nIGlzbid0IHN1cHBvcnRlZCBzbyB0cnkgdG8gbWFrZSBzdXJlIHlvdSBoYXZlIHRoZQorIyAgY29ycmVjdCBzaGFyZWQgbWVtb3J5IGFyZWEsIG90aGVyd2lzZSB5b3UgbWF5IGV4cGVyaWVuY2UgcHJvYmxlbXMuCisjICAKKyMgIGlvICAgICAgICAgICAgICAgICAgIEkvTyBiYXNlIG9mIERTUCwgZS5nLiBpbz0weDIxMAorIyAgaXJxICAgICAgICAgICAgICAgICAgSVJRIG51bWJlciwgZS5nLiBpcnE9NQorIyAgbWVtICAgICAgICAgICAgICAgICAgU2hhcmVkIG1lbW9yeSBhcmVhLCBlLmcuIG1lbT0weGQ4MDAwCisjICAKKyMgIAorIyAgbXNuZF9jbGFzc2ljLCBtc25kX3Bpbm5hY2xlIEFkZGl0aW9uYWwgT3B0aW9ucworIyAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIyAgCisjICBmaWZvc2l6ZSAgICAgICAgICAgICBUaGUgZGlnaXRhbCBhdWRpbyBGSUZPcywgaW4ga2lsb2J5dGVzLiAgSWYgbm90CisjICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHdpbGwgYmUgdXNlZC4gIEluY3JlYXNpbmcKKyMgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgdmFsdWUgd2lsbCByZWR1Y2UgdGhlIGNoYW5jZSBvZiBhIEZJRk8KKyMgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyZmxvdyBhdCB0aGUgZXhwZW5zZSBvZiBpbmNyZWFzaW5nIG92ZXJhbGwKKyMgICAgICAgICAgICAgICAgICAgICAgIGxhdGVuY3kuICBGb3IgZXhhbXBsZSwgZmlmb3NpemU9NTEyIHdpbGwKKyMgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlIDUxMmtCIHJlYWQgYW5kIHdyaXRlIEZJRk9zICgxTUIgdG90YWwpLgorIyAgICAgICAgICAgICAgICAgICAgICAgV2hpbGUgdGhpcyBtYXkgcmVkdWNlIGRyb3BvdXRzLCBhIGhlYXZ5IG1hY2hpbmUKKyMgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgd2lsbCB1bmRvdWJ0ZWRseSBzdGFydmUgdGhlIEZJRk8gb2YgZGF0YQorIyAgICAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSB3aWxsIGV2ZW50dWFsbHkgZ2V0IGRyb3BvdXRzLiAgT25lCisjICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gaXMgdG8gYWx0ZXIgdGhlIHNjaGVkdWxpbmcgcHJpb3JpdHkgb2YKKyMgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwbGF5YmFjayBwcm9jZXNzLCB1c2luZyBgbmljZScgb3Igc29tZSBmb3JtCisjICAgICAgICAgICAgICAgICAgICAgICBvZiBQT1NJWCBzb2Z0IHJlYWwtdGltZSBzY2hlZHVsaW5nLgorIworIyAgY2FsaWJyYXRlX3NpZ25hbCAgICAgU2V0dGluZyB0aGlzIHRvIG9uZSBjYWxpYnJhdGVzIHRoZSBBRENzIHRvIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLCB6ZXJvIGNhbGlicmF0ZXMgdG8gdGhlIGNhcmQgKGRlZmF1bHRzCisjICAgICAgICAgICAgICAgICAgICAgICB0byB6ZXJvKS4KKyMgIAorIyAgCisjICBtc25kX3Bpbm5hY2xlIEFkZGl0aW9uYWwgT3B0aW9ucworIyAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMKKyMgIGRpZ2l0YWwgICAgICAgICAgICAgIFNwZWNpZnkgZGlnaXRhbD0xIHRvIGVuYWJsZSB0aGUgUy9QRElGIGlucHV0CisjICAgICAgICAgICAgICAgICAgICAgICBpZiB5b3UgaGF2ZSB0aGUgZGlnaXRhbCBkYXVnaHRlcmJvYXJkCisjICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLiBUaGlzIHdpbGwgZW5hYmxlIGFjY2VzcyB0byB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgIERJR0lUQUwxIGlucHV0IGZvciB0aGUgc291bmRjYXJkIGluIHRoZSBtaXhlci4KKyMgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgbWl4ZXIgcHJvZ3JhbXMgbWlnaHQgaGF2ZSB0cm91YmxlIHNldHRpbmcKKyMgICAgICAgICAgICAgICAgICAgICAgIHRoZSBESUdJVEFMMSBzb3VyY2UgYXMgYW4gaW5wdXQuICBJZiB5b3UgaGF2ZQorIyAgICAgICAgICAgICAgICAgICAgICAgdHJvdWJsZSwgeW91IGNhbiB0cnkgdGhlIHNldGRpZ2l0YWwuYyBwcm9ncmFtCisjICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgYm90dG9tIG9mIHRoaXMgZG9jdW1lbnQuCisjCisjICBjZmcgICAgICAgICAgICAgICAgICBOb24tUG5QIGNvbmZpZ3VyYXRpb24gcG9ydCBmb3IgdGhlIFBpbm5hY2xlCisjICAgICAgICAgICAgICAgICAgICAgICBhbmQgRmlqaSAodHlwaWNhbGx5IDB4MjUwLCAweDI2MCBvciAweDI3MCwKKyMgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUganVtcGVyIGNvbmZpZ3VyYXRpb24pLiAgSWYKKyMgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgb3B0aW9uIGlzIG9taXR0ZWQsIHRoZW4gaXQgaXMgYXNzdW1lZAorIyAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgY2FyZCBpcyBpbiBQblAgbW9kZSwgYW5kIHRoYXQgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgRFNQIHJlc291cmNlIHZhbHVlcyBhcmUgYWxyZWFkeQorIyAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCB3aXRoIFBuUCAoaS5lLiBpdCB3b24ndCBhdHRlbXB0IHRvCisjICAgICAgICAgICAgICAgICAgICAgICBkbyBhbnkgc29ydCBvZiBjb25maWd1cmF0aW9uKS4KKyMKKyMgIFdoZW4gdGhlIFBpbm5hY2xlIGlzIGluIG5vbi1QblAgbW9kZSwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZworIyAgb3B0aW9ucyB0byBjb25maWd1cmUgcGFydGljdWxhciBkZXZpY2VzLiAgSWYgYSBmdWxsIHNwZWNpZmljYXRpb24KKyMgIGZvciBhIGRldmljZSBpcyBub3QgZ2l2ZW4sIHRoZW4gdGhlIGRldmljZSBpcyBub3QgY29uZmlndXJlZC4gIE5vdGUKKyMgIHRoYXQgeW91IHN0aWxsIG11c3QgdXNlIGEgTGludXggZHJpdmVyIGZvciBhbnkgb2YgdGhlc2UgZGV2aWNlcworIyAgb25jZSB0aGVpciByZXNvdXJjZXMgYXJlIHNldHVwIChzdWNoIGFzIHRoZSBMaW51eCBqb3lzdGljayBkcml2ZXIsCisjICBvciB0aGUgTVBVNDAxIGRyaXZlciBmcm9tIE9TUyBmb3IgdGhlIEt1cnp3ZWlsIHN5bnRoKS4KKyMKKyMgIG1wdV9pbyAgICAgICAgICAgICAgIEkvTyBwb3J0IG9mIE1QVSAob24tYm9hcmQgS3VyendlaWwgc3ludGgpCisjICBtcHVfaXJxICAgICAgICAgICAgICBJUlEgb2YgTVBVIChvbi1ib2FyZCBLdXJ6d2VpbCBzeW50aCkKKyMgIGlkZV9pbzAJCUZpcnN0IEkvTyBwb3J0IG9mIElERSBjb250cm9sbGVyCisjICBpZGVfaW8xCQlTZWNvbmQgSS9PIHBvcnQgb2YgSURFIGNvbnRyb2xsZXIKKyMgIGlkZV9pcnEJCUlSUSBJREUgY29udHJvbGxlcgorIyAgam95c3RpY2tfaW8gICAgICAgICAgSS9PIHBvcnQgb2Ygam95c3RpY2sKKyMgIAorIyAgCisjICBPYnRhaW5pbmcgYW5kIENyZWF0aW5nIEZpcm13YXJlIEZpbGVzCisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjICAKKyMgICAgICAgRm9yIHRoZSBDbGFzc2ljL1RhaGl0aS9Nb250ZXJleQorIyAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+IAorIyAgCisjICBEb3dubG9hZCB0byAvdG1wIGFuZCB1bnppcCB0aGUgZm9sbG93aW5nIGZpbGUgZnJvbSBUdXJ0bGUgQmVhY2g6CisjICAKKyMgICAgICAgZnRwOi8vZnRwLnZveWV0cmEuY29tL3B1Yi90YnMvbXNuZGNsL21zbmR2a2l0LnppcAorIyAgCisjICBXaGVuIHVuemlwcGVkLCB1bnppcCB0aGUgZmlsZSBuYW1lZCBNc25kRmlsZXMuemlwLiAgVGhlbiBjb3B5IHRoZQorIyAgZm9sbG93aW5nIGZpcm13YXJlIGZpbGVzIHRvIC9ldGMvc291bmQgKG5vdGUgdGhlIGZpbGUgcmVuYW1pbmcpOgorIyAgCisjICAgIGNwIERTUENPREUvTVNORElOSVQuQklOIC9ldGMvc291bmQvbXNuZGluaXQuYmluCisjICAgIGNwIERTUENPREUvTVNORFBFUk0uUkVCIC9ldGMvc291bmQvbXNuZHBlcm0uYmluCisjICAKKyMgIFdoZW4gY29uZmlndXJpbmcgdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmeSAvZXRjL3NvdW5kL21zbmRpbml0LmJpbiBhbmQKKyMgIC9ldGMvc291bmQvbXNuZHBlcm0uYmluIGZvciB0aGUgdHdvIGZpcm13YXJlIGZpbGVzIChMaW51eCBrZXJuZWwKKyMgIHZlcnNpb25zIG9sZGVyIHRoYW4gMi4yIGRvIG5vdCBhc2sgZm9yIGZpcm13YXJlIHBhdGhzLCBhbmQgYXJlCisjICBoYXJkY29kZWQgdG8gL2V0Yy9zb3VuZCkuCisjCisjICBJZiB5b3UgYXJlIGNvbXBpbGluZyB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgdGhlc2UgZmlsZXMgbXVzdAorIyAgYmUgYWNjZXNzaWJsZSBkdXJpbmcgY29tcGlsYXRpb24sIGJ1dCB3aWxsIG5vdCBiZSBuZWVkZWQgbGF0ZXIuCisjICBUaGUgZmlsZXMgbXVzdCByZW1haW4sIGhvd2V2ZXIsIGlmIHRoZSBkcml2ZXIgaXMgdXNlZCBhcyBhIG1vZHVsZS4KKyMgIAorIyAgCisjICAgICAgIEZvciB0aGUgUGlubmFjbGUvRmlqaQorIyAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgIAorIyAgRG93bmxvYWQgdG8gL3RtcCBhbmQgdW56aXAgdGhlIGZvbGxvd2luZyBmaWxlIGZyb20gVHVydGxlIEJlYWNoIChiZQorIyAgc3VyZSB0byB1c2UgdGhlIGVudGlyZSBVUkw7IHNvbWUgaGF2ZSBoYWQgdHJvdWJsZSBuYXZpZ2F0aW5nIHRvIHRoZQorIyAgVVJMKToKKyMgIAorIyAgICAgICBmdHA6Ly9mdHAudm95ZXRyYS5jb20vcHViL3Ricy9waW5uL3BuZGRrMTAwLnppcAorIworIyAgVW5wYWNrIHRoaXMgc2hlbGwgYXJjaGl2ZSwgYW5kIHJ1biBtYWtlIGluIHRoZSBjcmVhdGVkIGRpcmVjdG9yeQorIyAgKHlvdSBuZWVkIGEgQyBjb21waWxlciBhbmQgZmxleCB0byBidWlsZCB0aGUgdXRpbGl0aWVzKS4gIFRoaXMKKyMgIHNob3VsZCBnaXZlIHlvdSB0aGUgZXhlY3V0YWJsZXMgY29udiwgcGlubmFjbGVjZmcgYW5kIHNldGRpZ2l0YWwuCisjICBjb252IGlzIG9ubHkgdXNlZCB0ZW1wb3JhcmlseSBoZXJlIHRvIGNyZWF0ZSB0aGUgZmlybXdhcmUgZmlsZXMsCisjICB3aGlsZSBwaW5uYWNsZWNmZyBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgUGlubmFjbGUgb3IgRmlqaSBjYXJkIGluCisjICBub24tUG5QIG1vZGUsIGFuZCBzZXRkaWdpdGFsIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgUy9QRElGIGlucHV0IG9uCisjICB0aGUgbWl4ZXIgKHBpbm5hY2xlY2ZnIGFuZCBzZXRkaWdpdGFsIHNob3VsZCBiZSBjb3BpZWQgdG8gYQorIyAgY29udmVuaWVudCBwbGFjZSwgcG9zc2libHkgcnVuIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24pLgorIworIyAgVG8gZ2VuZXJhdGluZyB0aGUgZmlybXdhcmUgZmlsZXMgd2l0aCB0aGUgYGNvbnYnIHByb2dyYW0sIHdlIGNyZWF0ZQorIyAgdGhlIGJpbmFyeSBmaXJtd2FyZSBmaWxlcyBieSBkb2luZyB0aGUgZm9sbG93aW5nIGNvbnZlcnNpb24KKyMgIChhc3N1bWluZyB0aGUgYXJjaGl2ZSB1bnBhY2tlZCBpbnRvIGEgZGlyZWN0b3J5IG5hbWVkIFBJTk5EREspOgorIyAgCisjICAgIC4vY29udiA8IFBJTk5EREsvZHNwY29kZS9wbmRzcGluaS5hc20gPiAvZXRjL3NvdW5kL3BuZHNwaW5pLmJpbgorIyAgICAuL2NvbnYgPCBQSU5ORERLL2RzcGNvZGUvcG5kc3Blcm0uYXNtID4gL2V0Yy9zb3VuZC9wbmRzcGVybS5iaW4KKyMgIAorIyAgVGhlIGNvbnYgKGFuZCBjb252LmwpIHByb2dyYW0gaXMgbm90IG5lZWRlZCBhZnRlciBjb252ZXJzaW9uIGFuZCBjYW4KKyMgIGJlIHNhZmVseSBkZWxldGVkLiAgVGhlbiwgd2hlbiBjb25maWd1cmluZyB0aGUgTGludXgga2VybmVsLCBzcGVjaWZ5CisjICAvZXRjL3NvdW5kL3BuZHNwaW5pLmJpbiBhbmQgL2V0Yy9zb3VuZC9wbmRzcGVybS5iaW4gZm9yIHRoZSB0d28KKyMgIGZpcm13YXJlIGZpbGVzIChMaW51eCBrZXJuZWwgdmVyc2lvbnMgb2xkZXIgdGhhbiAyLjIgZG8gbm90IGFzayBmb3IKKyMgIGZpcm13YXJlIHBhdGhzLCBhbmQgYXJlIGhhcmRjb2RlZCB0byAvZXRjL3NvdW5kKS4KKyMgIAorIyAgSWYgeW91IGFyZSBjb21waWxpbmcgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHRoZXNlIGZpbGVzIG11c3QKKyMgIGJlIGFjY2Vzc2libGUgZHVyaW5nIGNvbXBpbGF0aW9uLCBidXQgd2lsbCBub3QgYmUgbmVlZGVkIGxhdGVyLgorIyAgVGhlIGZpbGVzIG11c3QgcmVtYWluLCBob3dldmVyLCBpZiB0aGUgZHJpdmVyIGlzIHVzZWQgYXMgYSBtb2R1bGUuCisjCisjICAKKyMgIFVzaW5nIERpZ2l0YWwgSS9PIHdpdGggdGhlIFMvUERJRiBQb3J0CisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIworIyAgSWYgeW91IGhhdmUgYSBQaW5uYWNsZSBvciBGaWppIHdpdGggdGhlIGRpZ2l0YWwgZGF1Z2h0ZXJib2FyZCBhbmQKKyMgIHdhbnQgdG8gc2V0IGl0IGFzIHRoZSBpbnB1dCBzb3VyY2UsIHlvdSBjYW4gdXNlIHRoaXMgcHJvZ3JhbSBpZiB5b3UKKyMgIGhhdmUgdHJvdWJsZSB0cnlpbmcgdG8gZG8gaXQgd2l0aCBhIG1peGVyIHByb2dyYW0gKGJlIHN1cmUgdG8KKyMgIGluc2VydCB0aGUgbW9kdWxlIHdpdGggdGhlIGRpZ2l0YWw9MSBvcHRpb24sIG9yIHNheSBZIHRvIHRoZSBvcHRpb24KKyMgIGR1cmluZyBjb21waWxlZC1pbiBrZXJuZWwgb3BlcmF0aW9uKS4gIFVwb24gc2VsZWN0aW9uIG9mIHRoZSBTL1BESUYKKyMgIHBvcnQsIHlvdSBzaG91bGQgYmUgYWJsZSBtb25pdG9yIGFuZCByZWNvcmQgZnJvbSBpdC4KKyMKKyMgIFRoZXJlIGlzIHNvbWV0aGluZyB0byBub3RlIGFib3V0IHVzaW5nIHRoZSBTL1BESUYgcG9ydC4gIERpZ2l0YWwKKyMgIHRpbWluZyBpcyB0YWtlbiBmcm9tIHRoZSBkaWdpdGFsIHNpZ25hbCwgc28gaWYgYSBzaWduYWwgaXMgbm90CisjICBjb25uZWN0ZWQgdG8gdGhlIHBvcnQgYW5kIGl0IGlzIHNlbGVjdGVkIGFzIHJlY29yZGluZyBpbnB1dCwgeW91CisjICB3aWxsIGZpbmQgUENNIHBsYXliYWNrIHRvIGJlIGRpc3RvcnRlZCBpbiBwbGF5YmFjayByYXRlLiAgQWxzbywKKyMgIGF0dGVtcHRpbmcgdG8gcmVjb3JkIGF0IGEgc2FtcGxpbmcgcmF0ZSBvdGhlciB0aGFuIHRoZSBEQVQgcmF0ZSBtYXkKKyMgIGJlIHByb2JsZW1hdGljIChpLmUuIHRyeWluZyB0byByZWNvcmQgYXQgODAwMEh6IHdoZW4gdGhlIERBVCBzaWduYWwKKyMgIGlzIDQ0MTAwSHopLiAgSWYgeW91IGhhdmUgYSBwcm9ibGVtIHdpdGggdGhpcywgc2V0IHRoZSByZWNvcmRpbmcKKyMgIGlucHV0IHRvIGFuYWxvZyBpZiB5b3UgbmVlZCB0byByZWNvcmQgYXQgYSByYXRlIG90aGVyIHRoYW4gdGhhdCBvZgorIyAgdGhlIERBVCByYXRlLgorIworIworIyAgLS0gU2hlbGwgYXJjaGl2ZSBhdHRhY2hlZCBiZWxvdywganVzdCBydW4gYHNoIE11bHRpU291bmQnIHRvIGV4dHJhY3QuCisjICAgICBDb250YWlucyBQaW5uYWNsZS9GaWppIHV0aWxpdGllcyB0byBjb252ZXJ0IGZpcm13YXJlLCBjb25maWd1cmUKKyMgICAgIGluIG5vbi1QblAgbW9kZSwgYW5kIHNlbGVjdCB0aGUgRElHSVRBTDEgaW5wdXQgZm9yIHRoZSBtaXhlci4KKyMKKyMKKyMhL2Jpbi9zaAorIyBUaGlzIGlzIGEgc2hlbGwgYXJjaGl2ZSAocHJvZHVjZWQgYnkgR05VIHNoYXJ1dGlscyA0LjIpLgorIyBUbyBleHRyYWN0IHRoZSBmaWxlcyBmcm9tIHRoaXMgYXJjaGl2ZSwgc2F2ZSBpdCB0byBzb21lIEZJTEUsIHJlbW92ZQorIyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgYCEvYmluL3NoJyBsaW5lIGFib3ZlLCB0aGVuIHR5cGUgYHNoIEZJTEUnLgorIworIyBNYWRlIG9uIDE5OTgtMTItMDQgMTA6MDcgRVNUIGJ5IDxhbmRyZXd0dkB6dHJhbnNmb3JtLnZlbHNvZnQuY29tPi4KKyMgU291cmNlIGRpcmVjdG9yeSB3YXMgYC9ob21lL2FuZHJld3R2L3Byb2dyYW1taW5nL3Bpbm5hY2xlL3Bpbm5hY2xlJy4KKyMKKyMgRXhpc3RpbmcgZmlsZXMgd2lsbCAqbm90KiBiZSBvdmVyd3JpdHRlbiB1bmxlc3MgYC1jJyBpcyBzcGVjaWZpZWQuCisjCisjIFRoaXMgc2hhciBjb250YWluczoKKyMgbGVuZ3RoIG1vZGUgICAgICAgbmFtZQorIyAtLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAyMDQ2IC1ydy1ydy1yLS0gTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYworIyAgMTAyMzUgLXJ3LXJ3LXItLSBNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYworIyAgICAxMDYgLXJ3LXJ3LXItLSBNdWx0aVNvdW5kLmQvTWFrZWZpbGUKKyMgICAgMTQxIC1ydy1ydy1yLS0gTXVsdGlTb3VuZC5kL2NvbnYubAorIyAgIDE0NzIgLXJ3LXJ3LXItLSBNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMKKyMKK3NhdmVfSUZTPSIke0lGU30iCitJRlM9IiR7SUZTfToiCitnZXR0ZXh0X2Rpcj1GQUlMRUQKK2xvY2FsZV9kaXI9RkFJTEVECitmaXJzdF9wYXJhbT0iJDEiCitmb3IgZGlyIGluICRQQVRICitkbworICBpZiB0ZXN0ICIkZ2V0dGV4dF9kaXIiID0gRkFJTEVEICYmIHRlc3QgLWYgJGRpci9nZXR0ZXh0IFwKKyAgICAgJiYgKCRkaXIvZ2V0dGV4dCAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxKQorICB0aGVuCisgICAgc2V0IGAkZGlyL2dldHRleHQgLS12ZXJzaW9uIDI+JjFgCisgICAgaWYgdGVzdCAiJDMiID0gR05VCisgICAgdGhlbgorICAgICAgZ2V0dGV4dF9kaXI9JGRpcgorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIiRsb2NhbGVfZGlyIiA9IEZBSUxFRCAmJiB0ZXN0IC1mICRkaXIvc2hhciBcCisgICAgICYmICgkZGlyL3NoYXIgLS1wcmludC10ZXh0LWRvbWFpbi1kaXIgPi9kZXYvbnVsbCAyPiYxKQorICB0aGVuCisgICAgbG9jYWxlX2Rpcj1gJGRpci9zaGFyIC0tcHJpbnQtdGV4dC1kb21haW4tZGlyYAorICBmaQorZG9uZQorSUZTPSIkc2F2ZV9JRlMiCitpZiB0ZXN0ICIkbG9jYWxlX2RpciIgPSBGQUlMRUQgfHwgdGVzdCAiJGdldHRleHRfZGlyIiA9IEZBSUxFRAordGhlbgorICBlY2hvPWVjaG8KK2Vsc2UKKyAgVEVYVERPTUFJTkRJUj0kbG9jYWxlX2RpcgorICBleHBvcnQgVEVYVERPTUFJTkRJUgorICBURVhURE9NQUlOPXNoYXJ1dGlscworICBleHBvcnQgVEVYVERPTUFJTgorICBlY2hvPSIkZ2V0dGV4dF9kaXIvZ2V0dGV4dCAtcyIKK2ZpCit0b3VjaCAtYW0gMTIzMTIzNTk5OSAkJC50b3VjaCA+L2Rldi9udWxsIDI+JjEKK2lmIHRlc3QgISAtZiAxMjMxMjM1OTk5ICYmIHRlc3QgLWYgJCQudG91Y2g7IHRoZW4KKyAgc2hhcl90b3VjaD10b3VjaAorZWxzZQorICBzaGFyX3RvdWNoPToKKyAgZWNobworICAkZWNobyAnV0FSTklORzogbm90IHJlc3RvcmluZyB0aW1lc3RhbXBzLiAgQ29uc2lkZXIgZ2V0dGluZyBhbmQnCisgICRlY2hvICJpbnN0YWxsaW5nIEdOVSBcYHRvdWNoJywgZGlzdHJpYnV0ZWQgaW4gR05VIEZpbGUgVXRpbGl0aWVzLi4uIgorICBlY2hvCitmaQorcm0gLWYgMTIzMTIzNTk5OSAkJC50b3VjaAorIworaWYgbWtkaXIgX3NoMDE0MjY7IHRoZW4KKyAgJGVjaG8gJ3ggLScgJ2NyZWF0aW5nIGxvY2sgZGlyZWN0b3J5JworZWxzZQorICAkZWNobyAnZmFpbGVkIHRvIGNyZWF0ZSBsb2NrIGRpcmVjdG9yeScKKyAgZXhpdCAxCitmaQorIyA9PT09PT09PT09PT09IE11bHRpU291bmQuZC9zZXRkaWdpdGFsLmMgPT09PT09PT09PT09PT0KK2lmIHRlc3QgISAtZCAnTXVsdGlTb3VuZC5kJzsgdGhlbgorICAkZWNobyAneCAtJyAnY3JlYXRpbmcgZGlyZWN0b3J5JyAnTXVsdGlTb3VuZC5kJworICBta2RpciAnTXVsdGlTb3VuZC5kJworZmkKK2lmIHRlc3QgLWYgJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnICYmIHRlc3QgIiRmaXJzdF9wYXJhbSIgIT0gLWM7IHRoZW4KKyAgJGVjaG8gJ3ggLScgU0tJUFBJTkcgJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnICcoZmlsZSBhbHJlYWR5IGV4aXN0cyknCitlbHNlCisgICRlY2hvICd4IC0nIGV4dHJhY3RpbmcgJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnICcodGV4dCknCisgIHNlZCAncy9eWC8vJyA8PCAnU0hBUl9FT0YnID4gJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnICYmCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitYICoKK1ggKiBzZXRkaWdpdGFsLmMgLSBzZXRzIHRoZSBESUdJVEFMMSBpbnB1dCBmb3IgYSBtaXhlcgorWCAqCitYICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCitYICoKK1ggKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorWCAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CitYICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKK1ggKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorWCAqCitYICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitYICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK1ggKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitYICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KK1ggKgorWCAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitYICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK1ggKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KK1ggKgorWCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1gKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvc291bmRjYXJkLmg+CitYCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworWAlpbnQgZmQ7CitYCXVuc2lnbmVkIGxvbmcgcmVjbWFzaywgcmVjc3JjOworWAorWAlpZiAoYXJnYyAhPSAyKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBzZXRkaWdpdGFsIDxtaXhlciBkZXZpY2U+XG4iKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJaWYgKChmZCA9IG9wZW4oYXJndlsxXSwgT19SRFdSKSkgPCAwKSB7CitYCQlwZXJyb3IoYXJndlsxXSk7CitYCQlleGl0KDEpOworWAl9CitYCitYCWlmIChpb2N0bChmZCwgU09VTkRfTUlYRVJfUkVBRF9SRUNNQVNLLCAmcmVjbWFzaykgPCAwKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBpb2N0bCByZWFkIHJlY29yZGluZyBtYXNrIGZhaWxlZFxuIik7CitYCQlwZXJyb3IoImlvY3RsIik7CitYCQljbG9zZShmZCk7CitYCQlleGl0KDEpOworWAl9CitYCitYCWlmICghKHJlY21hc2sgJiBTT1VORF9NQVNLX0RJR0lUQUwxKSkgeworWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogY2Fubm90IGZpbmQgRElHSVRBTDEgZGV2aWNlIGluIG1peGVyXG4iKTsKK1gJCWNsb3NlKGZkKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJaWYgKGlvY3RsKGZkLCBTT1VORF9NSVhFUl9SRUFEX1JFQ1NSQywgJnJlY3NyYykgPCAwKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBpb2N0bCByZWFkIHJlY29yZGluZyBzb3VyY2UgZmFpbGVkXG4iKTsKK1gJCXBlcnJvcigiaW9jdGwiKTsKK1gJCWNsb3NlKGZkKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJcmVjc3JjIHw9IFNPVU5EX01BU0tfRElHSVRBTDE7CitYCQorWAlpZiAoaW9jdGwoZmQsIFNPVU5EX01JWEVSX1dSSVRFX1JFQ1NSQywgJnJlY3NyYykgPCAwKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBpb2N0bCB3cml0ZSByZWNvcmRpbmcgc291cmNlIGZhaWxlZFxuIik7CitYCQlwZXJyb3IoImlvY3RsIik7CitYCQljbG9zZShmZCk7CitYCQlleGl0KDEpOworWAl9CitYCitYCWNsb3NlKGZkKTsKK1gJCitYCXJldHVybiAwOworfQorU0hBUl9FT0YKKyAgJHNoYXJfdG91Y2ggLWFtIDEyMDQwOTI1OTggJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnICYmCisgIGNobW9kIDA2NjQgJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnIHx8CisgICRlY2hvICdyZXN0b3JlIG9mJyAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYycgJ2ZhaWxlZCcKKyAgaWYgKCBtZDVzdW0gLS1oZWxwIDI+JjEgfCBncmVwICdzYWdlOiBtZDVzdW0gXFsnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgKCBtZDVzdW0gLS12ZXJzaW9uIDI+JjEgfCBncmVwIC12ICd0ZXh0dXRpbHMgMS4xMicgKSA+L2Rldi9udWxsOyB0aGVuCisgICAgbWQ1c3VtIC1jIDw8IFNIQVJfRU9GID4vZGV2L251bGwgMj4mMSBcCisgICAgfHwgJGVjaG8gJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmM6JyAnTUQ1IGNoZWNrIGZhaWxlZCcKK2U4NzIxN2ZjM2U3MTI4ODEwMmJhNDFmZDgxZjcxZWM0ICBNdWx0aVNvdW5kLmQvc2V0ZGlnaXRhbC5jCitTSEFSX0VPRgorICBlbHNlCisgICAgc2hhcl9jb3VudD0iYExDX0FMTD0gTENfQ1RZUEU9IExBTkc9IHdjIC1jIDwgJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnYCIKKyAgICB0ZXN0IDIwNDYgLWVxICIkc2hhcl9jb3VudCIgfHwKKyAgICAkZWNobyAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYzonICdvcmlnaW5hbCBzaXplJyAnMjA0NiwnICdjdXJyZW50IHNpemUnICIkc2hhcl9jb3VudCEiCisgIGZpCitmaQorIyA9PT09PT09PT09PT09IE11bHRpU291bmQuZC9waW5uYWNsZWNmZy5jID09PT09PT09PT09PT09CitpZiB0ZXN0IC1mICdNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYycgJiYgdGVzdCAiJGZpcnN0X3BhcmFtIiAhPSAtYzsgdGhlbgorICAkZWNobyAneCAtJyBTS0lQUElORyAnTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmMnICcoZmlsZSBhbHJlYWR5IGV4aXN0cyknCitlbHNlCisgICRlY2hvICd4IC0nIGV4dHJhY3RpbmcgJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jJyAnKHRleHQpJworICBzZWQgJ3MvXlgvLycgPDwgJ1NIQVJfRU9GJyA+ICdNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYycgJiYKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1ggKgorWCAqIHBpbm5hY2xlY2ZnLmMgLSBQaW5uYWNsZS9GaWppIERldmljZSBDb25maWd1cmF0aW9uIFByb2dyYW0KK1ggKgorWCAqIFRoaXMgaXMgZm9yIE5PTi1QblAgbW9kZSBvbmx5LiAgRm9yIFBuUCBtb2RlLCB1c2UgaXNhcG5wdG9vbHMuCitYICoKK1ggKiBUaGlzIGlzIExpbnV4LXNwZWNpZmljLCBhbmQgbXVzdCBiZSBydW4gd2l0aCByb290IHBlcm1pc3Npb25zLgorWCAqCitYICogUGFydCBvZiB0aGUgVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CitYICoKK1ggKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKK1ggKgorWCAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitYICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK1ggKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorWCAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitYICoKK1ggKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK1ggKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorWCAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK1ggKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorWCAqCitYICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK1ggKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorWCAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorWCAqCitYICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworWAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KK1gKKyNkZWZpbmUgSVJFR19MT0dERVZJQ0UJCTB4MDcKKyNkZWZpbmUgSVJFR19BQ1RJVkFURQkJMHgzMAorI2RlZmluZSBMRF9BQ1RJVkFURQkJMHgwMQorI2RlZmluZSBMRF9ESVNBQ1RJVkFURQkJMHgwMAorI2RlZmluZSBJUkVHX0VFQ09OVFJPTAkJMHgzRgorI2RlZmluZSBJUkVHX01FTUJBU0VISQkJMHg0MAorI2RlZmluZSBJUkVHX01FTUJBU0VMTwkJMHg0MQorI2RlZmluZSBJUkVHX01FTUNPTlRST0wJCTB4NDIKKyNkZWZpbmUgSVJFR19NRU1SQU5HRUhJCQkweDQzCisjZGVmaW5lIElSRUdfTUVNUkFOR0VMTwkJMHg0NAorI2RlZmluZSBNRU1UWVBFXzhCSVQJCTB4MDAKKyNkZWZpbmUgTUVNVFlQRV8xNkJJVAkJMHgwMgorI2RlZmluZSBNRU1UWVBFX1JBTkdFCQkweDAwCisjZGVmaW5lIE1FTVRZUEVfSElBRERSCQkweDAxCisjZGVmaW5lIElSRUdfSU8wX0JBU0VISQkJMHg2MAorI2RlZmluZSBJUkVHX0lPMF9CQVNFTE8JCTB4NjEKKyNkZWZpbmUgSVJFR19JTzFfQkFTRUhJCQkweDYyCisjZGVmaW5lIElSRUdfSU8xX0JBU0VMTwkJMHg2MworI2RlZmluZSBJUkVHX0lSUV9OVU1CRVIJCTB4NzAKKyNkZWZpbmUgSVJFR19JUlFfVFlQRQkJMHg3MQorI2RlZmluZSBJUlFUWVBFX0hJR0gJCTB4MDIKKyNkZWZpbmUgSVJRVFlQRV9MT1cJCTB4MDAKKyNkZWZpbmUgSVJRVFlQRV9MRVZFTAkJMHgwMQorI2RlZmluZSBJUlFUWVBFX0VER0UJCTB4MDAKK1gKKyNkZWZpbmUgSElCWVRFKHcpCQkoKEJZVEUpKCgoV09SRCkodykgPj4gOCkgJiAweEZGKSkKKyNkZWZpbmUgTE9CWVRFKHcpCQkoKEJZVEUpKHcpKQorI2RlZmluZSBNQUtFV09SRChsb3csaGkpCSgoV09SRCkoKChCWVRFKShsb3cpKXwoKChXT1JEKSgoQllURSkoaGkpKSk8PDgpKSkKK1gKK3R5cGVkZWYgX191OAkJCUJZVEU7Cit0eXBlZGVmIF9fdTE2CQkJVVNIT1JUOwordHlwZWRlZiBfX3UxNgkJCVdPUkQ7CitYCitzdGF0aWMgaW50IGNvbmZpZ19wb3J0ID0gLTE7CitYCitzdGF0aWMgaW50IG1zbmRfd3JpdGVfY2ZnKGludCBjZmcsIGludCByZWcsIGludCB2YWx1ZSkKK3sKK1gJb3V0YihyZWcsIGNmZyk7CitYCW91dGIodmFsdWUsIGNmZyArIDEpOworWAlpZiAodmFsdWUgIT0gaW5iKGNmZyArIDEpKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBtc25kX3dyaXRlX2NmZzogSS9PIGVycm9yXG4iKTsKK1gJCXJldHVybiAtRUlPOworWAl9CitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3JlYWRfY2ZnKGludCBjZmcsIGludCByZWcpCit7CitYCW91dGIocmVnLCBjZmcpOworWAlyZXR1cm4gaW5iKGNmZyArIDEpOworfQorWAorc3RhdGljIGludCBtc25kX3dyaXRlX2NmZ19pbzAoaW50IGNmZywgaW50IG51bSwgV09SRCBpbykKK3sKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzBfQkFTRUhJLCBISUJZVEUoaW8pKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFTE8sIExPQllURShpbykpKQorWAkJcmV0dXJuIC1FSU87CitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3JlYWRfY2ZnX2lvMChpbnQgY2ZnLCBpbnQgbnVtLCBXT1JEICppbykKK3sKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJCitYCSppbyA9IE1BS0VXT1JEKG1zbmRfcmVhZF9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFTE8pLAorWAkJICAgICAgIG1zbmRfcmVhZF9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFSEkpKTsKK1gKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfd3JpdGVfY2ZnX2lvMShpbnQgY2ZnLCBpbnQgbnVtLCBXT1JEIGlvKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMV9CQVNFSEksIEhJQllURShpbykpKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VMTywgTE9CWVRFKGlvKSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfcmVhZF9jZmdfaW8xKGludCBjZmcsIGludCBudW0sIFdPUkQgKmlvKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAkKK1gJKmlvID0gTUFLRVdPUkQobXNuZF9yZWFkX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VMTyksCitYCQkgICAgICAgbXNuZF9yZWFkX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VISSkpOworWAorWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgbXNuZF93cml0ZV9jZmdfaXJxKGludCBjZmcsIGludCBudW0sIFdPUkQgaXJxKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lSUV9OVU1CRVIsIExPQllURShpcnEpKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lSUV9UWVBFLCBJUlFUWVBFX0VER0UpKQorWAkJcmV0dXJuIC1FSU87CitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3JlYWRfY2ZnX2lycShpbnQgY2ZnLCBpbnQgbnVtLCBXT1JEICppcnEpCit7CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorWAkJcmV0dXJuIC1FSU87CitYCQorWAkqaXJxID0gbXNuZF9yZWFkX2NmZyhjZmcsIElSRUdfSVJRX05VTUJFUik7CitYCitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3dyaXRlX2NmZ19tZW0oaW50IGNmZywgaW50IG51bSwgaW50IG1lbSkKK3sKK1gJV09SRCB3bWVtOworWAorWAltZW0gPj49IDg7CitYCW1lbSAmPSAweGZmZjsKK1gJd21lbSA9IChXT1JEKW1lbTsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1CQVNFSEksIEhJQllURSh3bWVtKSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1CQVNFTE8sIExPQllURSh3bWVtKSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKHdtZW0gJiYgbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUNPTlRST0wsIChNRU1UWVBFX0hJQUREUiB8IE1FTVRZUEVfMTZCSVQpKSkKK1gJCXJldHVybiAtRUlPOworWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgbXNuZF9yZWFkX2NmZ19tZW0oaW50IGNmZywgaW50IG51bSwgaW50ICptZW0pCit7CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorWAkJcmV0dXJuIC1FSU87CitYCQorWAkqbWVtID0gTUFLRVdPUkQobXNuZF9yZWFkX2NmZyhjZmcsIElSRUdfTUVNQkFTRUxPKSwKK1gJCQltc25kX3JlYWRfY2ZnKGNmZywgSVJFR19NRU1CQVNFSEkpKTsKK1gJKm1lbSA8PD0gODsKK1gKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfYWN0aXZhdGVfbG9naWNhbChpbnQgY2ZnLCBpbnQgbnVtKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0FDVElWQVRFLCBMRF9BQ1RJVkFURSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoaW50IGNmZywgaW50IG51bSwgV09SRCBpbzAsIFdPUkQgaW8xLCBXT1JEIGlycSwgaW50IG1lbSkKK3sKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnX2lvMChjZmcsIG51bSwgaW8wKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmdfaW8xKGNmZywgbnVtLCBpbzEpKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3dyaXRlX2NmZ19pcnEoY2ZnLCBudW0sIGlycSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnX21lbShjZmcsIG51bSwgbWVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF9hY3RpdmF0ZV9sb2dpY2FsKGNmZywgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgbXNuZF9yZWFkX2NmZ19sb2dpY2FsKGludCBjZmcsIGludCBudW0sIFdPUkQgKmlvMCwgV09SRCAqaW8xLCBXT1JEICppcnEsIGludCAqbWVtKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF9yZWFkX2NmZ19pbzAoY2ZnLCBudW0sIGlvMCkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfcmVhZF9jZmdfaW8xKGNmZywgbnVtLCBpbzEpKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3JlYWRfY2ZnX2lycShjZmcsIG51bSwgaXJxKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF9yZWFkX2NmZ19tZW0oY2ZnLCBudW0sIG1lbSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworWAlmcHJpbnRmKHN0ZGVyciwKK1gJCSJcbiIKK1gJCSJwaW5uYWNsZWNmZyAxLjBcbiIKK1gJCSJcbiIKK1gJCSJ1c2FnZTogcGlubmFjbGVjZmcgPGNvbmZpZyBwb3J0PiBbZGV2aWNlIGNvbmZpZ11cbiIKK1gJCSJcbiIKK1gJCSJUaGlzIGlzIGZvciB1c2Ugd2l0aCB0aGUgY2FyZCBpbiBOT04tUG5QIG1vZGUgb25seS5cbiIKK1gJCSJcbiIKK1gJCSJBdmFpbGFibGUgZGV2aWNlcyAobm90IGFsbCBhdmFpbGFibGUgZm9yIEZpamkpOlxuIgorWAkJIlxuIgorWAkJIiAgICAgICAgRGV2aWNlICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblxuIgorWAkJIiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorWAkJIiAgICAgICAgcmVzZXQgICAgICAgICAgICAgICAgICAgICAgICBSZXNldCBhbGwgZGV2aWNlcyAoaS5lLiBkaXNhYmxlKVxuIgorWAkJIiAgICAgICAgc2hvdyAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5IGN1cnJlbnQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zXG4iCitYCQkiXG4iCitYCQkiICAgICAgICBkc3AgPGlvPiA8aXJxPiA8bWVtPiAgICAgICAgIEF1ZGlvIGRldmljZVxuIgorWAkJIiAgICAgICAgbXB1IDxpbz4gPGlycT4gICAgICAgICAgICAgICBJbnRlcm5hbCBLdXJ6d2VpbCBzeW50aFxuIgorWAkJIiAgICAgICAgaWRlIDxpbzA+IDxpbzE+IDxpcnE+ICAgICAgICBPbi1ib2FyZCBJREUgY29udHJvbGxlclxuIgorWAkJIiAgICAgICAgam95c3RpY2sgPGlvPiAgICAgICAgICAgICAgICBKb3lzdGljayBwb3J0XG4iCitYCQkiXG4iKTsKK1gJZXhpdCgxKTsKK30KK1gKK3N0YXRpYyBpbnQgY2ZnX3Jlc2V0KHZvaWQpCit7CitYCWludCBpOworWAorWAlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorWAkJbXNuZF93cml0ZV9jZmdfbG9naWNhbChjb25maWdfcG9ydCwgaSwgMCwgMCwgMCwgMCk7CitYCQorWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgY2ZnX3Nob3codm9pZCkKK3sKK1gJaW50IGk7CitYCWludCBjb3VudCA9IDA7CitYCitYCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKK1gJCVdPUkQgaW8wLCBpbzEsIGlycTsKK1gJCWludCBtZW07CitYCQltc25kX3JlYWRfY2ZnX2xvZ2ljYWwoY29uZmlnX3BvcnQsIGksICZpbzAsICZpbzEsICZpcnEsICZtZW0pOworWAkJc3dpdGNoIChpKSB7CitYCQljYXNlIDA6CitYCQkJaWYgKGlvMCB8fCBpcnEgfHwgbWVtKSB7CitYCQkJCXByaW50ZigiZHNwIDB4JXggJWQgMHgleFxuIiwgaW8wLCBpcnEsIG1lbSk7CitYCQkJCSsrY291bnQ7CitYCQkJfQorWAkJCWJyZWFrOworWAkJY2FzZSAxOgorWAkJCWlmIChpbzAgfHwgaXJxKSB7CitYCQkJCXByaW50ZigibXB1IDB4JXggJWRcbiIsIGlvMCwgaXJxKTsKK1gJCQkJKytjb3VudDsKK1gJCQl9CitYCQkJYnJlYWs7CitYCQljYXNlIDI6CitYCQkJaWYgKGlvMCB8fCBpbzEgfHwgaXJxKSB7CitYCQkJCXByaW50ZigiaWRlIDB4JXggMHgleCAlZFxuIiwgaW8wLCBpbzEsIGlycSk7CitYCQkJCSsrY291bnQ7CitYCQkJfQorWAkJCWJyZWFrOworWAkJY2FzZSAzOgorWAkJCWlmIChpbzApIHsKK1gJCQkJcHJpbnRmKCJqb3lzdGljayAweCV4XG4iLCBpbzApOworWAkJCQkrK2NvdW50OworWAkJCX0KK1gJCQlicmVhazsKK1gJCX0KK1gJfQorWAorWAlpZiAoY291bnQgPT0gMCkKK1gJCWZwcmludGYoc3RkZXJyLCAibm8gZGV2aWNlcyBjb25maWd1cmVkXG4iKTsKK1gJCitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBjZmdfZHNwKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CitYCWludCBpbywgaXJxLCBtZW07CitYCitYCWlmIChhcmdjIDwgMyB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmlvKSAhPSAxIHx8CitYCSAgICBzc2NhbmYoYXJndlsxXSwgIiVkIiwgJmlycSkgIT0gMSB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMl0sICIweCV4IiwgJm1lbSkgIT0gMSkKK1gJCXVzYWdlKCk7CitYCitYCWlmICghKGlvID09IDB4MjkwIHx8CitYCSAgICAgIGlvID09IDB4MjYwIHx8CitYCSAgICAgIGlvID09IDB4MjUwIHx8CitYCSAgICAgIGlvID09IDB4MjQwIHx8CitYCSAgICAgIGlvID09IDB4MjMwIHx8CitYCSAgICAgIGlvID09IDB4MjIwIHx8CitYCSAgICAgIGlvID09IDB4MjEwIHx8CitYCSAgICAgIGlvID09IDB4M2UwKSkgeworWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogaW8gbXVzdCBiZSBvbmUgb2YgIgorWAkJCSIyMTAsIDIyMCwgMjMwLCAyNDAsIDI1MCwgMjYwLCAyOTAsIG9yIDNFMFxuIik7CitYCQl1c2FnZSgpOworWAl9CitYCQorWAlpZiAoIShpcnEgPT0gNSB8fAorWAkgICAgICBpcnEgPT0gNyB8fAorWAkgICAgICBpcnEgPT0gOSB8fAorWAkgICAgICBpcnEgPT0gMTAgfHwKK1gJICAgICAgaXJxID09IDExIHx8CitYCSAgICAgIGlycSA9PSAxMikpIHsKK1gJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGlycSBtdXN0IGJlIG9uZSBvZiAiCitYCQkJIjUsIDcsIDksIDEwLCAxMSBvciAxMlxuIik7CitYCQl1c2FnZSgpOworWAl9CitYCitYCWlmICghKG1lbSA9PSAweGIwMDAwIHx8CitYCSAgICAgIG1lbSA9PSAweGM4MDAwIHx8CitYCSAgICAgIG1lbSA9PSAweGQwMDAwIHx8CitYCSAgICAgIG1lbSA9PSAweGQ4MDAwIHx8CitYCSAgICAgIG1lbSA9PSAweGUwMDAwIHx8CitYCSAgICAgIG1lbSA9PSAweGU4MDAwKSkgeworWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogbWVtIG11c3QgYmUgb25lIG9mICIKK1gJCQkiMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwgMHhlMDAwMCBvciAweGU4MDAwXG4iKTsKK1gJCXVzYWdlKCk7CitYCX0KK1gKK1gJcmV0dXJuIG1zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY29uZmlnX3BvcnQsIDAsIGlvLCAwLCBpcnEsIG1lbSk7Cit9CitYCitzdGF0aWMgaW50IGNmZ19tcHUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKK1gJaW50IGlvLCBpcnE7CitYCitYCWlmIChhcmdjIDwgMiB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmlvKSAhPSAxIHx8CitYCSAgICBzc2NhbmYoYXJndlsxXSwgIiVkIiwgJmlycSkgIT0gMSkKK1gJCXVzYWdlKCk7CitYCQorWAlyZXR1cm4gbXNuZF93cml0ZV9jZmdfbG9naWNhbChjb25maWdfcG9ydCwgMSwgaW8sIDAsIGlycSwgMCk7Cit9CitYCitzdGF0aWMgaW50IGNmZ19pZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKK1gJaW50IGlvMCwgaW8xLCBpcnE7CitYCitYCWlmIChhcmdjIDwgMyB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmlvMCkgIT0gMSB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmlvMSkgIT0gMSB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMV0sICIlZCIsICZpcnEpICE9IDEpCitYCQl1c2FnZSgpOworWAkKK1gJcmV0dXJuIG1zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY29uZmlnX3BvcnQsIDIsIGlvMCwgaW8xLCBpcnEsIDApOworfQorWAorc3RhdGljIGludCBjZmdfam95c3RpY2soaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKK1gJaW50IGlvOworWAorWAlpZiAoYXJnYyA8IDEgfHwKK1gJICAgIHNzY2FuZihhcmd2WzBdLCAiMHgleCIsICZpbykgIT0gMSkKK1gJCXVzYWdlKCk7CitYCQorWAlyZXR1cm4gbXNuZF93cml0ZV9jZmdfbG9naWNhbChjb25maWdfcG9ydCwgMywgaW8sIDAsIDAsIDApOworfQorWAoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKK1gJY2hhciAqZGV2aWNlOworWAlpbnQgcnYgPSAwOworWAorWAktLWFyZ2M7ICsrYXJndjsKK1gKK1gJaWYgKGFyZ2MgPCAyKQorWAkJdXNhZ2UoKTsKK1gKK1gJc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmNvbmZpZ19wb3J0KTsKK1gJaWYgKGNvbmZpZ19wb3J0ICE9IDB4MjUwICYmIGNvbmZpZ19wb3J0ICE9IDB4MjYwICYmIGNvbmZpZ19wb3J0ICE9IDB4MjcwKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiA8Y29uZmlnIHBvcnQ+IG11c3QgYmUgMHgyNTAsIDB4MjYwIG9yIDB4MjcwXG4iKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gJaWYgKGlvcGVybShjb25maWdfcG9ydCwgMiwgMSkpIHsKK1gJCXBlcnJvcigiaW9wZXJtIik7CitYCQlmcHJpbnRmKHN0ZGVyciwgIm5vdGU6IHBpbm5hY2xlY2ZnIG11c3QgYmUgcnVuIGFzIHJvb3RcbiIpOworWAkJZXhpdCgxKTsKK1gJfQorWAlkZXZpY2UgPSBhcmd2WzFdOworWAorWAlhcmdjIC09IDI7IGFyZ3YgKz0gMjsKK1gKK1gJaWYgKHN0cmNtcChkZXZpY2UsICJyZXNldCIpID09IDApCitYCQlydiA9IGNmZ19yZXNldCgpOworWAllbHNlIGlmIChzdHJjbXAoZGV2aWNlLCAic2hvdyIpID09IDApCitYCQlydiA9IGNmZ19zaG93KCk7CitYCWVsc2UgaWYgKHN0cmNtcChkZXZpY2UsICJkc3AiKSA9PSAwKQorWAkJcnYgPSBjZmdfZHNwKGFyZ2MsIGFyZ3YpOworWAllbHNlIGlmIChzdHJjbXAoZGV2aWNlLCAibXB1IikgPT0gMCkKK1gJCXJ2ID0gY2ZnX21wdShhcmdjLCBhcmd2KTsKK1gJZWxzZSBpZiAoc3RyY21wKGRldmljZSwgImlkZSIpID09IDApCitYCQlydiA9IGNmZ19pZGUoYXJnYywgYXJndik7CitYCWVsc2UgaWYgKHN0cmNtcChkZXZpY2UsICJqb3lzdGljayIpID09IDApCitYCQlydiA9IGNmZ19qb3lzdGljayhhcmdjLCBhcmd2KTsKK1gJZWxzZSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1bmtub3duIGRldmljZSAlc1xuIiwgZGV2aWNlKTsKK1gJCXVzYWdlKCk7CitYCX0KK1gKK1gJaWYgKHJ2KQorWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogZGV2aWNlIGNvbmZpZ3VyYXRpb24gZmFpbGVkXG4iKTsKK1gJCitYCXJldHVybiAwOworfQorU0hBUl9FT0YKKyAgJHNoYXJfdG91Y2ggLWFtIDEyMDQwOTI1OTggJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jJyAmJgorICBjaG1vZCAwNjY0ICdNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYycgfHwKKyAgJGVjaG8gJ3Jlc3RvcmUgb2YnICdNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYycgJ2ZhaWxlZCcKKyAgaWYgKCBtZDVzdW0gLS1oZWxwIDI+JjEgfCBncmVwICdzYWdlOiBtZDVzdW0gXFsnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgKCBtZDVzdW0gLS12ZXJzaW9uIDI+JjEgfCBncmVwIC12ICd0ZXh0dXRpbHMgMS4xMicgKSA+L2Rldi9udWxsOyB0aGVuCisgICAgbWQ1c3VtIC1jIDw8IFNIQVJfRU9GID4vZGV2L251bGwgMj4mMSBcCisgICAgfHwgJGVjaG8gJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jOicgJ01ENSBjaGVjayBmYWlsZWQnCiszNjZiZGYyN2YwZGI3NjdhM2M3OTIxZDBhNmRiMjBmZSAgTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmMKK1NIQVJfRU9GCisgIGVsc2UKKyAgICBzaGFyX2NvdW50PSJgTENfQUxMPSBMQ19DVFlQRT0gTEFORz0gd2MgLWMgPCAnTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmMnYCIKKyAgICB0ZXN0IDEwMjM1IC1lcSAiJHNoYXJfY291bnQiIHx8CisgICAgJGVjaG8gJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jOicgJ29yaWdpbmFsIHNpemUnICcxMDIzNSwnICdjdXJyZW50IHNpemUnICIkc2hhcl9jb3VudCEiCisgIGZpCitmaQorIyA9PT09PT09PT09PT09IE11bHRpU291bmQuZC9NYWtlZmlsZSA9PT09PT09PT09PT09PQoraWYgdGVzdCAtZiAnTXVsdGlTb3VuZC5kL01ha2VmaWxlJyAmJiB0ZXN0ICIkZmlyc3RfcGFyYW0iICE9IC1jOyB0aGVuCisgICRlY2hvICd4IC0nIFNLSVBQSU5HICdNdWx0aVNvdW5kLmQvTWFrZWZpbGUnICcoZmlsZSBhbHJlYWR5IGV4aXN0cyknCitlbHNlCisgICRlY2hvICd4IC0nIGV4dHJhY3RpbmcgJ011bHRpU291bmQuZC9NYWtlZmlsZScgJyh0ZXh0KScKKyAgc2VkICdzL15YLy8nIDw8ICdTSEFSX0VPRicgPiAnTXVsdGlTb3VuZC5kL01ha2VmaWxlJyAmJgorQ0MJPSBnY2MKK0NGTEFHUwk9IC1PCitQUk9HUwk9IHNldGRpZ2l0YWwgbXNuZHJlc2V0IHBpbm5hY2xlY2ZnIGNvbnYKK1gKK2FsbDogJChQUk9HUykKK1gKK2NsZWFuOgorWAlybSAtZiAkKFBST0dTKQorU0hBUl9FT0YKKyAgJHNoYXJfdG91Y2ggLWFtIDEyMDQwOTIzOTggJ011bHRpU291bmQuZC9NYWtlZmlsZScgJiYKKyAgY2htb2QgMDY2NCAnTXVsdGlTb3VuZC5kL01ha2VmaWxlJyB8fAorICAkZWNobyAncmVzdG9yZSBvZicgJ011bHRpU291bmQuZC9NYWtlZmlsZScgJ2ZhaWxlZCcKKyAgaWYgKCBtZDVzdW0gLS1oZWxwIDI+JjEgfCBncmVwICdzYWdlOiBtZDVzdW0gXFsnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgKCBtZDVzdW0gLS12ZXJzaW9uIDI+JjEgfCBncmVwIC12ICd0ZXh0dXRpbHMgMS4xMicgKSA+L2Rldi9udWxsOyB0aGVuCisgICAgbWQ1c3VtIC1jIDw8IFNIQVJfRU9GID4vZGV2L251bGwgMj4mMSBcCisgICAgfHwgJGVjaG8gJ011bHRpU291bmQuZC9NYWtlZmlsZTonICdNRDUgY2hlY2sgZmFpbGVkJworNzZjYThiYjQ0ZTM4ODJlZGNmNzljOTdkZjZjODE4NDUgIE11bHRpU291bmQuZC9NYWtlZmlsZQorU0hBUl9FT0YKKyAgZWxzZQorICAgIHNoYXJfY291bnQ9ImBMQ19BTEw9IExDX0NUWVBFPSBMQU5HPSB3YyAtYyA8ICdNdWx0aVNvdW5kLmQvTWFrZWZpbGUnYCIKKyAgICB0ZXN0IDEwNiAtZXEgIiRzaGFyX2NvdW50IiB8fAorICAgICRlY2hvICdNdWx0aVNvdW5kLmQvTWFrZWZpbGU6JyAnb3JpZ2luYWwgc2l6ZScgJzEwNiwnICdjdXJyZW50IHNpemUnICIkc2hhcl9jb3VudCEiCisgIGZpCitmaQorIyA9PT09PT09PT09PT09IE11bHRpU291bmQuZC9jb252LmwgPT09PT09PT09PT09PT0KK2lmIHRlc3QgLWYgJ011bHRpU291bmQuZC9jb252LmwnICYmIHRlc3QgIiRmaXJzdF9wYXJhbSIgIT0gLWM7IHRoZW4KKyAgJGVjaG8gJ3ggLScgU0tJUFBJTkcgJ011bHRpU291bmQuZC9jb252LmwnICcoZmlsZSBhbHJlYWR5IGV4aXN0cyknCitlbHNlCisgICRlY2hvICd4IC0nIGV4dHJhY3RpbmcgJ011bHRpU291bmQuZC9jb252LmwnICcodGV4dCknCisgIHNlZCAncy9eWC8vJyA8PCAnU0hBUl9FT0YnID4gJ011bHRpU291bmQuZC9jb252LmwnICYmCislJQorWyBcblx0LFxyXQorXDsuKgorREIKK1swLTlBLUZhLWZdK0gJeyBpbnQgbjsgc3NjYW5mKHl5dGV4dCwgIiV4SCIsICZuKTsgcHJpbnRmKCIlYyIsIG4pOyB9CislJQoraW50IHl5d3JhcCgpIHsgcmV0dXJuIDE7IH0KK21haW4oKSB7IHl5bGV4KCk7IH0KK1NIQVJfRU9GCisgICRzaGFyX3RvdWNoIC1hbSAwODI4MjMxNzk4ICdNdWx0aVNvdW5kLmQvY29udi5sJyAmJgorICBjaG1vZCAwNjY0ICdNdWx0aVNvdW5kLmQvY29udi5sJyB8fAorICAkZWNobyAncmVzdG9yZSBvZicgJ011bHRpU291bmQuZC9jb252LmwnICdmYWlsZWQnCisgIGlmICggbWQ1c3VtIC0taGVscCAyPiYxIHwgZ3JlcCAnc2FnZTogbWQ1c3VtIFxbJyApID4vZGV2L251bGwgMj4mMSBcCisgICYmICggbWQ1c3VtIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCAtdiAndGV4dHV0aWxzIDEuMTInICkgPi9kZXYvbnVsbDsgdGhlbgorICAgIG1kNXN1bSAtYyA8PCBTSEFSX0VPRiA+L2Rldi9udWxsIDI+JjEgXAorICAgIHx8ICRlY2hvICdNdWx0aVNvdW5kLmQvY29udi5sOicgJ01ENSBjaGVjayBmYWlsZWQnCitkMjQxMWZjMzJjZDcxYTAwZGNkYzFmMDA5ZTg1OGRkMiAgTXVsdGlTb3VuZC5kL2NvbnYubAorU0hBUl9FT0YKKyAgZWxzZQorICAgIHNoYXJfY291bnQ9ImBMQ19BTEw9IExDX0NUWVBFPSBMQU5HPSB3YyAtYyA8ICdNdWx0aVNvdW5kLmQvY29udi5sJ2AiCisgICAgdGVzdCAxNDEgLWVxICIkc2hhcl9jb3VudCIgfHwKKyAgICAkZWNobyAnTXVsdGlTb3VuZC5kL2NvbnYubDonICdvcmlnaW5hbCBzaXplJyAnMTQxLCcgJ2N1cnJlbnQgc2l6ZScgIiRzaGFyX2NvdW50ISIKKyAgZmkKK2ZpCisjID09PT09PT09PT09PT0gTXVsdGlTb3VuZC5kL21zbmRyZXNldC5jID09PT09PT09PT09PT09CitpZiB0ZXN0IC1mICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMnICYmIHRlc3QgIiRmaXJzdF9wYXJhbSIgIT0gLWM7IHRoZW4KKyAgJGVjaG8gJ3ggLScgU0tJUFBJTkcgJ011bHRpU291bmQuZC9tc25kcmVzZXQuYycgJyhmaWxlIGFscmVhZHkgZXhpc3RzKScKK2Vsc2UKKyAgJGVjaG8gJ3ggLScgZXh0cmFjdGluZyAnTXVsdGlTb3VuZC5kL21zbmRyZXNldC5jJyAnKHRleHQpJworICBzZWQgJ3MvXlgvLycgPDwgJ1NIQVJfRU9GJyA+ICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMnICYmCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitYICoKK1ggKiBtc25kcmVzZXQuYyAtIHJlc2V0cyB0aGUgTXVsdGlTb3VuZCBjYXJkCitYICoKK1ggKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKK1ggKgorWCAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitYICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK1ggKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorWCAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitYICoKK1ggKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK1ggKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorWCAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK1ggKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorWCAqCitYICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK1ggKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorWCAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorWCAqCitYICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworWAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zb3VuZGNhcmQuaD4KK1gKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CitYCWludCBmZDsKK1gKK1gJaWYgKGFyZ2MgIT0gMikgeworWAkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogbXNuZHJlc2V0IDxtaXhlciBkZXZpY2U+XG4iKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJaWYgKChmZCA9IG9wZW4oYXJndlsxXSwgT19SRFdSKSkgPCAwKSB7CitYCQlwZXJyb3IoYXJndlsxXSk7CitYCQlleGl0KDEpOworWAl9CitYCitYCWlmIChpb2N0bChmZCwgU09VTkRfTUlYRVJfUFJJVkFURTEsIDApIDwgMCkgeworWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogbXNuZCBpb2N0bCByZXNldCBmYWlsZWRcbiIpOworWAkJcGVycm9yKCJpb2N0bCIpOworWAkJY2xvc2UoZmQpOworWAkJZXhpdCgxKTsKK1gJfQorWAorWAljbG9zZShmZCk7CitYCQorWAlyZXR1cm4gMDsKK30KK1NIQVJfRU9GCisgICRzaGFyX3RvdWNoIC1hbSAxMjA0MTAwNjk4ICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMnICYmCisgIGNobW9kIDA2NjQgJ011bHRpU291bmQuZC9tc25kcmVzZXQuYycgfHwKKyAgJGVjaG8gJ3Jlc3RvcmUgb2YnICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMnICdmYWlsZWQnCisgIGlmICggbWQ1c3VtIC0taGVscCAyPiYxIHwgZ3JlcCAnc2FnZTogbWQ1c3VtIFxbJyApID4vZGV2L251bGwgMj4mMSBcCisgICYmICggbWQ1c3VtIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCAtdiAndGV4dHV0aWxzIDEuMTInICkgPi9kZXYvbnVsbDsgdGhlbgorICAgIG1kNXN1bSAtYyA8PCBTSEFSX0VPRiA+L2Rldi9udWxsIDI+JjEgXAorICAgIHx8ICRlY2hvICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmM6JyAnTUQ1IGNoZWNrIGZhaWxlZCcKK2M1MmY4NzY1MjEwODRlOGViMjVlMTJlMDFkY2NjYjhhICBNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMKK1NIQVJfRU9GCisgIGVsc2UKKyAgICBzaGFyX2NvdW50PSJgTENfQUxMPSBMQ19DVFlQRT0gTEFORz0gd2MgLWMgPCAnTXVsdGlTb3VuZC5kL21zbmRyZXNldC5jJ2AiCisgICAgdGVzdCAxNDcyIC1lcSAiJHNoYXJfY291bnQiIHx8CisgICAgJGVjaG8gJ011bHRpU291bmQuZC9tc25kcmVzZXQuYzonICdvcmlnaW5hbCBzaXplJyAnMTQ3MiwnICdjdXJyZW50IHNpemUnICIkc2hhcl9jb3VudCEiCisgIGZpCitmaQorcm0gLWZyIF9zaDAxNDI2CitleGl0IDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL05FV1MgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9ORVdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MWUwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9ORVdTCkBAIC0wLDAgKzEsNDIgQEAKK0xpbnV4IDIuNCBTb3VuZCBDaGFuZ2VzCisyMDAwLVNlcHRlbWJlci0yNQorQ2hyaXN0b3BoIEhlbGx3aWcsIDxoY2hAaW5mcmFkZWFkLm9yZz4KKworCisKKz09PSBpc2FwbnAgc3VwcG9ydAorCitUaGUgTGludXggMi40IEtlcm5lbCBkb2VzIGhhdmUgcmVsaWFibGUgaW4ta2VybmVsIGlzYXBucCBzdXBwb3J0LgorU29tZSBkcml2ZXJzIChzYi5vLCBhZDE4MTYubyBhd2Vfd2F2ZS5vKSBkbyBub3cgc3VwcG9ydCBhdXRvbWF0aWNhbGx5CitkZXRlY3RpbmcgYW5kIGNvbmZpZ3VyaW5nIGlzYXBucCBkZXZpY2VzLgorSWYgeW91IGhhdmUgYSBub3QgeWV0IHN1cHBvcnRlZCBpc2FwbnAgc291bmRjYXJkLCBtYWlsIG1lIHRoZSBjb250ZW50CitvZiAnL3Byb2MvaXNhcG5wJyBvbiB5b3VyIHN5c3RlbSBhbmQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGNhcmQKK2FuZCBpdHMgZHJpdmVyKHMpIHNvIEkgY2FuIHRyeSB0byBnZXQgaXNhcG5wIHdvcmtpbmcgZm9yIGl0LgorCisKKworPT09IHNvdW5kY2FyZCByZXNvdXJjZXMgb24ga2VybmVsIGNvbW1hbmRsaW5lCisKK0JlZm9yZSBMaW51eCAyLjQgeW91IGhhZCB0byBzcGVjaWZ5IHRoZSByZXNvdXJjZXMgZm9yIHNvdW5kZHJpdmVycworc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUga2VybmVsIGF0IGNvbXBpbGUgdGltZQorKGluIG1ha2UgY29uZmlnL21lbnVjb25maWcveGNvbmZpZykuIEluIExpbnV4IDIuNCB0aGUgcmVzb3VyY2VzIGFyZQorbm93IHNwZWNpZmllZCBhdCB0aGUgYm9vdC10aW1lIGtlcm5lbCBjb21tYW5kbGluZSAoZS5nLiB0aGUgbGlsbworJ2FwcGVuZD0nIGxpbmUgb3IgZXZlcnl0aGluZyB0aGF0J3MgYWZ0ZXIgdGhlIGtlcm5lbCBuYW1lIGluIGdydWIpLgorUmVhZCB0aGUgQ29uZmlndXJlLmhlbHAgZW50cnkgZm9yIHlvdXIgY2FyZCBmb3IgdGhlIHBhcmFtZXRlcnMuCisKKworPT09IHNvZnRvc3MgaXMgZ29uZQorCitJbiBMaW51eCAyLjQgdGhlIHNvZnRvc3MgaW4ta2VybmVsIHNvZnR3YXJlIHN5bnRoZXNpemVyIGlzIG5vIG1vcmUgYXZpYWJsZS4KK1VzZSBhIHVzZXIgc3BhY2Ugc29mdHdhcmUgc3ludGhlc2l6ZXIgbGlrZSB0aW1pZGl0eSBpbnN0ZWFkLgorCisKKworPT09IC9kZXYvc25kc3RhdCBhbmQgL3Byb2Mvc291bmQgYXJlIGdvbmUKKworSW4gb2xkZXIgTGludXggdmVyc2lvbnMgdGhvc2UgZmlsZXMgZXhwb3J0ZWQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK09TUy9GcmVlIGNvbmZpZ3VyYXRpb24gdG8gdXNlcnNwYWNlLiBJbiBMaW51eCAyLjMgdGhleSB3ZXJlIHJlbW92ZWQgYmVjYXVzZQordGhleSBkaWQgbm90IHN1cHBvcnQgdGhlIGdyb3dpbmcgbnVtYmVyIG9mIHBjaSBzb3VuZGNhcmRzIGFuZCB0aGVyZSB3ZXJlCitzb21lIGdlbmVyYWwgcHJvYmxlbXMgd2l0aCB0aGlzIGludGVyZmFjZS4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9OTTI1NiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL05NMjU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MDMyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9OTTI1NgpAQCAtMCwwICsxLDI4MCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRG9jdW1lbnRhdGlvbiBmb3IgdGhlIE5lb01hZ2ljIDI1NkFWLzI1NlpYIHNvdW5kIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UncmUgbG9va2luZyBhdCB2ZXJzaW9uIDEuMSBvZiB0aGUgZHJpdmVyLiAgKFdvb2hvbyEpIEl0IGhhcyBiZWVuCitzdWNjZXNzZnVsbHkgdGVzdGVkIGFnYWluc3QgdGhlIGZvbGxvd2luZyBsYXB0b3AgbW9kZWxzOgorCisJU29ueSBaNTA1Uy9aNTA1U1gvWjUwNURYL1o1MDVSWAorCVNvbnkgRjE1MCwgRjE2MCwgRjE4MCwgRjI1MCwgRjI3MCwgRjI4MCwgUENHLUYyNgorCURlbGwgTGF0aXR1ZGUgQ1BpLCBDUHQgKHZhcmlvdXMgc3VibW9kZWxzKQorCitUaGVyZSBhcmUgYSBmZXcgY2F2ZWF0cywgd2hpY2ggaXMgd2h5IHlvdSBzaG91bGQgcmVhZCB0aGUgZW50aXJldHkgb2YKK3RoaXMgZG9jdW1lbnQgZmlyc3QuCisKK1RoaXMgZHJpdmVyIHdhcyBkZXZlbG9wZWQgd2l0aG91dCBhbnkgc3VwcG9ydCBvciBhc3Npc3RhbmNlIGZyb20KK05lb01hZ2ljLiAgVGhlcmUgaXMgbm8gd2FycmFudHksIGV4cHJlc3NlZCwgaW1wbGllZCwgb3Igb3RoZXJ3aXNlLiAgSXQKK2lzIGZyZWUgc29mdHdhcmUgaW4gdGhlIHB1YmxpYyBkb21haW47IGZlZWwgZnJlZSB0byB1c2UgaXQsIHNlbGwgaXQsCitnaXZlIGl0IHRvIHlvdXIgYmVzdCBmcmllbmRzLCBldmVuIGNsYWltIHRoYXQgeW91IHdyb3RlIGl0IChidXQgd2h5PyEpCitidXQgZG9uJ3QgZ28gd2hpbmluZyB0byBtZSwgTmVvTWFnaWMsIFNvbnksIERlbGwsIG9yIGFueW9uZSBlbHNlCit3aGVuIGl0IGJsb3dzIHVwIHlvdXIgY29tcHV0ZXIuCisKK1ZlcnNpb24gMS4xIGNvbnRhaW5zIGEgY2hhbmdlIHRvIHRyeSBhbmQgZGV0ZWN0IG5vbi1BQzk3IHZlcnNpb25zIG9mCit0aGUgaGFyZHdhcmUsIGFuZCBub3QgaW5zdGFsbCBpdHNlbGYgYXBwcm9wcmlhdGVseS4gIEl0IHNob3VsZCBhbHNvCityZWluaXRpYWxpemUgdGhlIGhhcmR3YXJlIG9uIGFuIEFQTSByZXN1bWUgZXZlbnQsIGFzc3VtaW5nIHRoYXQgQVBNCit3YXMgY29uZmlndXJlZCBpbnRvIHlvdXIga2VybmVsLgorCis9PT09PT09PT09PT0KK0luc3RhbGxhdGlvbgorPT09PT09PT09PT09CisKK0VuYWJsZSB0aGUgc291bmQgZHJpdmVycywgdGhlIE9TUyBzb3VuZCBkcml2ZXJzLCBhbmQgdGhlbiB0aGUgTk0yNTYKK2RyaXZlci4gIFRoZSBOTTI1NiBkcml2ZXIgKm11c3QqIGJlIGNvbmZpZ3VyZWQgYXMgYSBtb2R1bGUgKGl0IHdvbid0CitnaXZlIHlvdSBhbnkgb3RoZXIgY2hvaWNlKS4KKworTmV4dCwgZG8gdGhlIHVzdWFsICJtYWtlIG1vZHVsZXMiIGFuZCAibWFrZSBtb2R1bGVzX2luc3RhbGwiLgorRmluYWxseSwgaW5zbW9kIHRoZSBzb3VuZGNvcmUsIHNvdW5kIGFuZCBubTI1NiBtb2R1bGVzLgorCitXaGVuIHRoZSBubTI1NiBkcml2ZXIgbW9kdWxlIGlzIGxvYWRlZCwgeW91IHNob3VsZCBzZWUgYSBjb3VwbGUgb2YKK2NvbmZpcm1hdGlvbiBtZXNzYWdlcyBpbiB0aGUga2VybmVsIGxvZ2ZpbGUgaW5kaWNhdGluZyB0aGF0IGl0IGZvdW5kCit0aGUgZGV2aWNlICh0aGUgZGV2aWNlIGRvZXMgKm5vdCogdXNlIGFueSBJL08gcG9ydHMgb3IgRE1BIGNoYW5uZWxzKS4KK05vdyB0cnkgcGxheWluZyBhIHdhdiBmaWxlLCBmdXR6IHdpdGggdGhlIENELVJPTSBpZiB5b3UgaGF2ZSBvbmUsIGV0Yy4KKworVGhlIE5NMjU2IGlzIGVudGlyZWx5IGEgUENJLWJhc2VkIGRldmljZSwgYW5kIGFsbCB0aGUgbmVjZXNzYXJ5CitpbmZvcm1hdGlvbiBpcyBhdXRvbWF0aWNhbGx5IG9idGFpbmVkIGZyb20gdGhlIGNhcmQuICBJdCBjYW4gb25seSBiZQorY29uZmlndXJlZCBhcyBhIG1vZHVsZSBpbiBhIHZhaW4gYXR0ZW1wdCB0byBwcmV2ZW50IHBlb3BsZSBmcm9tCitodXJ0aW5nIHRoZW1zZWx2ZXMuICBJdCB3b3JrcyBjb3JyZWN0bHkgaWYgaXQgc2hhcmVzIGFuIElSUSB3aXRoCithbm90aGVyIGRldmljZSAoaXQgbm9ybWFsbHkgc2hhcmVzIElSUSA5IHdpdGggdGhlIGJ1aWx0aW4gZWVwcm8xMDAKK2V0aGVybmV0IG9uIHRoZSBTb255IFo1MDUgbGFwdG9wcykuIAorCitJdCBkb2VzIG5vdCBydW4gdGhlIGNhcmQgaW4gYW55IHNvcnQgb2YgY29tcGF0aWJpbGl0eSBtb2RlLiBJdCB3aWxsCitub3Qgd29yayBvbiBsYXB0b3BzIHRoYXQgaGF2ZSB0aGUgU0IxNi1jb21wYXRpYmxlLCBBRDE4NDgtY29tcGF0aWJsZQorb3IgQ1M0MjMyLWNvbXBhdGlibGUgY29kZWMvbWl4ZXI7IHlvdSB3aWxsIHdhbnQgdG8gdXNlIHRoZSBhcHByb3ByaWF0ZQorY29tcGF0aWJsZSBPU1MgZHJpdmVyIHdpdGggdGhlc2UgY2hpcHNldHMuICBJIGNhbm5vdCBwcm92aWRlIGFueQorYXNzaXN0YW5jZSB3aXRoIG1hY2hpbmVzIHVzaW5nIHRoZSBTQjE2LCBBRDE4NDggb3IgQ1M0MjMyIGNvbXBhdGlibGUKK3ZlcnNpb25zLiAgKFRoZSBkcml2ZXIgbm93IGF0dGVtcHRzIHRvIGRldGVjdCB0aGUgbWl4ZXIgdmVyc2lvbiwgYW5kCit3aWxsIHJlZnVzZSB0byBsb2FkIGlmIGl0IGJlbGlldmVzIHRoZSBoYXJkd2FyZSBpcyBub3QKK0FDOTctY29tcGF0aWJsZS4pCisKK1RoZSBzb3VuZCBzdXBwb3J0IGlzIHZlcnkgYmFzaWMsIGJ1dCBpdCBkb2VzIGluY2x1ZGUgc2ltdWx0YW5lb3VzCitwbGF5YmFjayBhbmQgcmVjb3JkIGNhcGFiaWxpdHkuICBUaGUgbWl4ZXIgc3VwcG9ydCBpcyBhbHNvIHF1aXRlCitzaW1wbGUsIGFsdGhvdWdoIHRoaXMgaXMgaW4ga2VlcGluZyB3aXRoIHRoZSByYXRoZXIgbGltaXRlZAorZnVuY3Rpb25hbGl0eSBvZiB0aGUgY2hpcHNldC4KKworVGhlcmUgaXMgbm8gaGFyZHdhcmUgc3ludGhlc2l6ZXIgYXZhaWxhYmxlLCBhcyB0aGUgTG9zZWRvd3MgT1BMLTMgYW5kCitNSURJIHN1cHBvcnQgaXMgZG9uZSB2aWEgaGFyZHdhcmUgZW11bGF0aW9uLgorCitPbmx5IHRocmVlIHJlY29yZGluZyBkZXZpY2VzIGFyZSBhdmFpbGFibGUgb24gdGhlIFNvbnk6IHRoZQorbWljcm9waG9uZSwgdGhlIENELVJPTSBpbnB1dCwgYW5kIHRoZSB2b2x1bWUgZGV2aWNlICh3aGljaCBjb3JyZXNwb25kcwordG8gdGhlIHN0ZXJlbyBvdXRwdXQpLiAgKE90aGVyIGRldmljZXMgbWF5IGJlIGF2YWlsYWJsZSBvbiBvdGhlcgorbW9kZWxzIG9mIGxhcHRvcHMuKSAgVGhlIFo1MDUgc2VyaWVzIGRvZXMgbm90IGhhdmUgYSBidWlsdGluIENELVJPTSwKK3NvIG9mIGNvdXJzZSB0aGUgQ0QtUk9NIGlucHV0IGRvZXNuJ3Qgd29yay4gIEl0IGRvZXMgd29yayBvbiBsYXB0b3BzCit3aXRoIGEgYnVpbHRpbiBDRC1ST00gZHJpdmUuCisKK1RoZSBtaXhlciBkZXZpY2UgZG9lcyBub3QgYXBwZWFyIHRvIGhhdmUgYW55IHRvbmUgY29udHJvbHMsIGF0IGxlYXN0CitvbiB0aGUgWjUwNSBzZXJpZXMuICBUaGUgbWl4ZXIgbW9kdWxlIGNoZWNrcyBmb3IgdG9uZSBjb250cm9scyBpbiB0aGUKK0FDOTcgbWl4ZXIsIGFuZCB3aWxsIGVuYWJsZSB0aGVtIGlmIHRoZXkgYXJlIGF2YWlsYWJsZS4KKworPT09PT09PT09PT09PT0KK0tub3duIHByb2JsZW1zCis9PT09PT09PT09PT09PQorCisgICogVGhlcmUgYXJlIGtub3duIHByb2JsZW1zIHdpdGggUENNQ0lBIGNhcmRzIGFuZCB0aGUgZWVwcm8xMDAgZXRoZXJuZXQgCisgICAgZHJpdmVyIG9uIHRoZSBaNTA1Uy9aNTA1U1gvWjUwNURYLiAgS2VlcCByZWFkaW5nLgorCisgICogVGhlcmUgYXJlIGFsc28gcG90ZW50aWFsIHByb2JsZW1zIHdpdGggdXNpbmcgYSB2aXJ0dWFsIFggZGlzcGxheSwgYW5kCisgICAgYWxzbyBwcm9ibGVtcyBsb2FkaW5nIHRoZSBtb2R1bGUgYWZ0ZXIgdGhlIFggc2VydmVyIGhhcyBiZWVuIHN0YXJ0ZWQuIAorICAgIEtlZXAgcmVhZGluZy4KKworICAqIFRoZSB2b2x1bWUgY29udHJvbCBpc24ndCBhbnl3aGVyZSBuZWFyIGxpbmVhci4gIFNvcnJ5LiAgVGhpcyB3aWxsIGJlCisgICAgZml4ZWQgZXZlbnR1YWxseSwgd2hlbiBJIGdldCBzdWZmaWNpZW50bHkgYW5ub3llZCB3aXRoIGl0LiAgKEkgZG91YnQKKyAgICBpdCB3aWxsIGV2ZXIgYmUgZml4ZWQgbm93LCBzaW5jZSBJJ3ZlIG5ldmVyIGdvdHRlbiBzdWZmaWNpZW50bHkKKyAgICBhbm5veWVkIHdpdGggaXQgYW5kIG5vYm9keSBlbHNlIHNlZW1zIHRvIGNhcmUuKQorCisgICogVGhlcmUgYXJlIHJlcG9ydHMgdGhhdCB0aGUgQ0QtUk9NIHZvbHVtZSBpcyB2ZXJ5IGxvdy4gIFNpbmNlIEkgZG8gbm90CisgICAgaGF2ZSBhIENELVJPTSBlcXVpcHBlZCBsYXB0b3AsIEkgY2Fubm90IHRlc3QgdGhpcyAoaXQncyBraW5kYSBoYXJkIHRvCisgICAgZG8gcmVtb3RlbHkpLgorCisgICogT25seSA4IGZpeGVkLXJhdGUgc3BlZWRzIGFyZSBzdXBwb3J0ZWQuICBUaGlzIGlzIG1haW5seSBhIGNoaXBzZXQKKyAgICBsaW1pdGF0aW9uLiAgSXQgbWF5IGJlIHBvc3NpYmxlIHRvIHN1cHBvcnQgb3RoZXIgc3BlZWRzIGluIHRoZSBmdXR1cmUuCisKKyAgKiBUaGVyZSBpcyBubyBzdXBwb3J0IGZvciB0aGUgdGVsZXBob25lIG1peGVyL2NvZGVjLiAgVGhlcmUgaXMgc3VwcG9ydAorICAgIGZvciBhIHBob25laW4vcGhvbmVvdXQgZGV2aWNlIGluIHRoZSBtaXhlciBkcml2ZXI7ICB3aGV0aGVyIG9yIG5vdCAKKyAgICBpdCBkb2VzIGFueXRoaW5nIGlzIGFueW9uZSdzIGd1ZXNzLiAgKFJlcG9ydHMgb24gdGhpcyB3b3VsZCBiZQorICAgIGFwcHJlY2lhdGVkLiAgWW91J2xsIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IHRoZSBwaG9uZSB0bworICAgIGdvIG9mZi1ob29rIGJlZm9yZSBpdCdsbCB3b3JrLCB0aG8uKQorCisgICogVGhpcyBkcml2ZXIgd2FzIG5vdCB3cml0dGVuIHdpdGggYW55IGNvb3BlcmF0aW9uIG9yIHN1cHBvcnQgZnJvbQorICAgIE5lb01hZ2ljLiAgSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBhYm91dCB0aGlzLCBzZWUgdGhlaXIgd2Vic2l0ZQorICAgIGZvciB0aGVpciBvZmZpY2lhbCBzdGFuY2Ugb24gc3VwcG9ydGluZyBvcGVuIHNvdXJjZSBkcml2ZXJzLgorCis9PT09PT09PT09PT0KK1ZpZGVvIG1lbW9yeQorPT09PT09PT09PT09CisKK1RoZSBOZW9NYWdpYyBzb3VuZCBlbmdpbmUgdXNlcyBhIHBvcnRpb24gb2YgdGhlIGRpc3BsYXkgbWVtb3J5IHRvIGhvbGQKK3RoZSBzb3VuZCBidWZmZXIuICAoQ3JhenksIGVoPykgIFRoZSBOZW9NYWdpYyB2aWRlbyBCSU9TIHNldHMgdXAgYQorc3BlY2lhbCBwb2ludGVyIGF0IHRoZSB0b3Agb2YgdmlkZW8gUkFNIHRvIGluZGljYXRlIHdoZXJlIHRoZSB0b3Agb2YKK3RoZSBhdWRpbyBidWZmZXIgc2hvdWxkIGJlIHBsYWNlZC4KKworQXQgdGhlIHByZXNlbnQgdGltZSBYRnJlZTg2IGlzIGFwcGFyZW50bHkgbm90IGF3YXJlIG9mIHRoaXMuICBJdCB3aWxsCit0aHVzIHdyaXRlIG92ZXIgZWl0aGVyIHRoZSBwb2ludGVyIG9yIHRoZSBzb3VuZCBidWZmZXIgd2l0aCBhYmFuZG9uLgorKEFjY2VsZXJhdGVkLVggc2VlbXMgdG8gZG8gYSBiZXR0ZXIgam9iIGhlcmUuKQorCitUaGlzIGltcGxpZXMgYSBmZXcgdGhpbmdzOgorCisgICogU29tZXRpbWVzIHRoZSBOTTI1NiBkcml2ZXIgaGFzIHRvIGd1ZXNzIGF0IHdoZXJlIHRoZSBidWZmZXIgCisgICAgc2hvdWxkIGJlIHBsYWNlZCwgZXNwZWNpYWxseSBpZiB0aGUgbW9kdWxlIGlzIGxvYWRlZCBhZnRlciB0aGUKKyAgICBYIHNlcnZlciBpcyBzdGFydGVkLiAgSXQncyB1c3VhbGx5IGNvcnJlY3QsIGJ1dCBpdCB3aWxsIGNvbnNpc3RlbnRseQorICAgIGZhaWwgb24gdGhlIFNvbnkgRjI1MC4KKworICAqIFZpcnR1YWwgc2NyZWVucyBncmVhdGVyIHRoYW4gMTAyNHg3Njh4MTYgdW5kZXIgWEZyZWU4NiBhcmUKKyAgICBwcm9ibGVtYXRpYyBvbiBsYXB0b3BzIHdpdGggb25seSAyLjVNQiBvZiBzY3JlZW4gUkFNLiBUaGlzCisgICAgaW5jbHVkZXMgYWxsIG9mIHRoZSAyNTZBVi1lcXVpcHBlZCBsYXB0b3BzLiAgKFZpcnR1YWwgZGlzcGxheXMKKyAgICBtYXkgb3IgbWF5IG5vdCB3b3JrIG9uIHRoZSAyNTZaWCwgd2hpY2ggaGFzIGF0IGxlYXN0IDRNQiBvZgorICAgIHZpZGVvIFJBTS4pCisKK0lmIHlvdSBzdGFydCBoYXZpbmcgcHJvYmxlbXMgd2l0aCByYW5kb20gbm9pc2UgYmVpbmcgb3V0cHV0IGVpdGhlcgorY29uc3RhbnRseSAodGhpcyBpcyB0aGUgdXN1YWwgc3ltcHRvbSBvbiB0aGUgRjI1MCksIG9yIHdoZW4gd2luZG93cworYXJlIG1vdmVkIGFyb3VuZCAodGhpcyBpcyB0aGUgdXN1YWwgc3ltcHRvbSB3aGVuIHVzaW5nIGEgdmlydHVhbAorc2NyZWVuKSwgdGhlIGJlc3QgZml4IGlzIHRvCisKKyAgKiBEb24ndCB1c2UgYSB2aXJ0dWFsIGZyYW1lIGJ1ZmZlci4KKyAgKiBNYWtlIHN1cmUgeW91IGxvYWQgdGhlIE5NMjU2IG1vZHVsZSBiZWZvcmUgdGhlIFggc2VydmVyIGlzCisgICAgc3RhcnRlZC4KKworT24gdGhlIEYyNTAsIGl0IGlzIHBvc3NpYmxlIHRvIGZvcmNlIHRoZSBkcml2ZXIgdG8gbG9hZCBwcm9wZXJseSBldmVuCithZnRlciB0aGUgWEZyZWU4NiBzZXJ2ZXIgaXMgc3RhcnRlZCBieSBkb2luZzoKKworCWluc21vZCBubTI1NiBidWZmZXJ0b3A9MHgyNWE4MDAKKworVGhpcyBmb3JjZXMgdGhlIGF1ZGlvIGJ1ZmZlcnMgdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0IGluIHNjcmVlbiBSQU0uCisKK09uZSB1c2VyIGhhcyByZXBvcnRlZCBhIHNpbWlsYXIgcHJvYmxlbSBvbiB0aGUgU29ueSBGMjcwLCBhbHRob3VnaAorb3RoZXJzIGFwcGFyZW50bHkgYXJlbid0IHNlZWluZyBhbnkgcHJvYmxlbXMuICBIaXMgc3VnZ2VzdGVkIGNvbW1hbmQKK2lzCisKKwlpbnNtb2Qgbm0yNTYgYnVmZmVydG9wPTB4MjcyODAwCisKKz09PT09PT09PT09PT09PT09CitPZmZpY2lhbCBXV1cgc2l0ZQorPT09PT09PT09PT09PT09PT0KKworVGhlIG9mZmljaWFsIHNpdGUgZm9yIHRoZSBOTTI1NiBkcml2ZXIgaXM6CisKKwlodHRwOi8vd3d3LnVnbHgub3JnL3NvbnkuaHRtbAorCitZb3Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGRyaXZlciB0aGVyZSwKK2FuZCB0aGUgZHJpdmVyIHdpbGwgYmUgc3VwcG9ydGVkIGZvciB0aGUgZm9yZXNlZWFibGUgZnV0dXJlLgorCis9PT09PT09PT09PT09PQorWjUwNVJYIGFuZCBJREUKKz09PT09PT09PT09PT09CisKK1RoZXJlIGFwcGVhcnMgdG8gYmUgYSBwcm9ibGVtIHdpdGggdGhlIElERSBjaGlwc2V0IG9uIHRoZSBaNTA1Ulg7IG9uZQorb2YgdGhlIHN5bXB0b21zIGlzIHRoYXQgc291bmQgcGxheWJhY2sgcGVyaW9kaWNhbGx5IGhhbmdzICh3aGVuIHRoZQorZGlzayBpcyBhY2Nlc3NlZCkuICBUaGUgdXNlciByZXBvcnRpbmcgdGhlIHByb2JsZW0gYWxzbyByZXBvcnRlZCB0aGF0CitlbmFibGluZyBhbGwgb2YgdGhlIElERSBjaGlwc2V0IHdvcmthcm91bmRzIGluIHRoZSBrZXJuZWwgc29sdmVkIHRoZQorcHJvYmxlbSwgdGhvIG9idmlvdXNseSBvbmx5IG9uZSBvZiB0aGVtIHNob3VsZCBiZSBuZWVkZWQtLWlmIHNvbWVvbmUKK2NhbiBnaXZlIG1lIG1vcmUgZGV0YWlscyBJIHdvdWxkIGFwcHJlY2lhdGUgaXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorWjUwNVMvWjUwNVNYIG9uLWJvYXJkIEV0aGVybmV0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91J3JlIHVzaW5nIHRoZSBvbi1ib2FyZCBFdGhlcm5ldCBQcm8vMTAwIGV0aGVybmV0IHN1cHBvcnQgb24gdGhlIFo1MDUKK3NlcmllcywgSSBzdHJvbmdseSBlbmNvdXJhZ2UgeW91IHRvIGRvd25sb2FkIHRoZSBsYXRlc3QgZWVwcm8xMDAgZHJpdmVyIGZyb20KK0RvbmFsZCBCZWNrZXIncyBzaXRlOgorCisJZnRwOi8vY2VzZGlzLmdzZmMubmFzYS5nb3YvcHViL2xpbnV4L2RyaXZlcnMvdGVzdC9lZXBybzEwMC5jCisKK1RoZXJlIHdhcyBhIHJlcG9ydGVkIHByb2JsZW0gb24gdGhlIFo1MDVTWCB0aGF0IGlmIHRoZSBldGhlcm5ldAoraW50ZXJmYWNlIGlzIGRpc2FibGVkIGFuZCByZWVuYWJsZWQgd2hpbGUgdGhlIHNvdW5kIGRyaXZlciBpcyBsb2FkZWQsCit0aGUgbWFjaGluZSB3b3VsZCBsb2NrIHVwLiAgSSBoYXZlIGluY2x1ZGVkIGEgd29ya2Fyb3VuZCB0aGF0IGlzCit3b3JraW5nIHNhdGlzZmFjdG9yaWx5LiAgSG93ZXZlciwgeW91IG1heSBvY2Nhc2lvbmFsbHkgc2VlIGEgbWVzc2FnZQorYWJvdXQgIlJlbGVhc2luZyBpbnRlcnJ1cHRzLCBvdmVyIDEwMDAgYmFkIGludGVycnVwdHMiIHdoaWNoIGluZGljYXRlcwordGhhdCB0aGUgd29ya2Fyb3VuZCBpcyBkb2luZyBpdHMgam9iLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitQQ01DSUEgYW5kIHRoZSBaNTA1Uy9aNTA1U1gvWjUwNURYCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGlzIGFsc28gYSBrbm93biBwcm9ibGVtIHdpdGggdGhlIFNvbnkgWjUwNVMgYW5kIFo1MDVTWCBoYW5naW5nCitpZiBhIFBDTUNJQSBjYXJkIGlzIGluc2VydGVkIHdoaWxlIHRoZSBldGhlcm5ldCBkcml2ZXIgaXMgbG9hZGVkLCBvcgoraW4gc29tZSBjYXNlcyBpZiB0aGUgbGFwdG9wIGlzIHN1c3BlbmRlZC4gIFRoaXMgaXMgY2F1c2VkIGJ5IHRvbnMgb2YKK3NwdXJpb3VzIElSUSA5cywgcHJvYmFibHkgZ2VuZXJhdGVkIGZyb20gdGhlIFBDTUNJQSBvciBBQ1BJIGJyaWRnZXMuCisKK1RoZXJlIGlzIGN1cnJlbnRseSBubyBmaXggZm9yIHRoZSBwcm9ibGVtIHRoYXQgd29ya3MgaW4gZXZlcnkgY2FzZS4KK1RoZSBvbmx5IGtub3duIHdvcmthcm91bmRzIGFyZSB0byBkaXNhYmxlIHRoZSBldGhlcm5ldCBpbnRlcmZhY2UKK2JlZm9yZSBpbnNlcnRpbmcgb3IgcmVtb3ZpbmcgYSBQQ01DSUEgY2FyZCwgb3Igd2l0aCBzb21lIGNhcmRzCitkaXNhYmxpbmcgdGhlIFBDTUNJQSBjYXJkIGJlZm9yZSBlamVjdGluZyBpdCB3aWxsIGFsc28gaGVscCB0aGUKK3Byb2JsZW0gd2l0aCB0aGUgbGFwdG9wIGhhbmdpbmcgd2hlbiB0aGUgY2FyZCBpcyBlamVjdGVkLgorCitPbmUgdXNlciBoYXMgcmVwb3J0ZWQgdGhhdCBzZXR0aW5nIHRoZSB0Y2ljJ3MgY3NfaXJxIHRvIHNvbWUgdmFsdWUKK290aGVyIHRoYW4gOSAobGlrZSAxMSkgZml4ZWQgdGhlIHByb2JsZW0uICBUaGlzIGRvZXNuJ3Qgd29yayBvbiBteQorWjUwNVMsIGhvd2V2ZXItLWNoYW5naW5nIHRoZSB2YWx1ZSBjYXVzZXMgdGhlIGNhcmRtZ3IgdG8gc3RvcCBzZWVpbmcKK2NhcmQgaW5zZXJ0aW9ucyBhbmQgcmVtb3ZhbHMsIGNhcmRzIGRvbid0IHNlZW0gdG8gd29yayBjb3JyZWN0bHksIGFuZAorSSBzdGlsbCBnZXQgaGFuZ3MgaWYgYSBjYXJkIGlzIGluc2VydGVkIHdoZW4gdGhlIGtlcm5lbCBpcyBib290ZWQuCisKK1VzaW5nIHRoZSBsYXRlc3QgZXRoZXJuZXQgZHJpdmVyIGFuZCBwY21jaWEgcGFja2FnZSBhbGxvd3MgbWUgdG8KK2luc2VydCBhbiBBZGFwdGVjIDE0ODBBIFNsaW1TY3NpIGNhcmQgd2l0aG91dCB0aGUgbGFwdG9wIGhhbmdpbmcsCithbHRob3VnaCBJIHN0aWxsIGhhdmUgdG8gc2h1dCBkb3duIHRoZSBjYXJkIGJlZm9yZSBlamVjdGluZyBvcgorcG93ZXJpbmcgZG93biB0aGUgbGFwdG9wLiAgSG93ZXZlciwgc2ltaWxhciBleHBlcmltZW50cyB3aXRoIGEgREUtNjYwCitldGhlcm5ldCBjYXJkIHN0aWxsIHJlc3VsdCBpbiBoYW5ncyB3aGVuIHRoZSBjYXJkIGlzIGluc2VydGVkLiAgSSBhbQorYmVnaW5uaW5nIHRvIHRoaW5rIHRoYXQgdGhlIGludGVycnVwdHMgYXJlIENhcmRCdXMtcmVsYXRlZCwgc2luY2UgdGhlCitBZGFwdGVjIGNhcmQgaXMgYSBDYXJkQnVzIGNhcmQsIGFuZCB0aGUgREUtNjYwIGlzIG5vdDsgaG93ZXZlciwgSQorZG9uJ3QgaGF2ZSBhbnkgb3RoZXIgQ2FyZEJ1cyBjYXJkcyB0byB0ZXN0IHdpdGguCisKKz09PT09PQorVGhhbmtzCis9PT09PT0KKworRmlyc3QsIEkgd2FudCB0byB0aGFuayBldmVyeW9uZSAoZXhjZXB0IE5lb01hZ2ljIG9mIGNvdXJzZSkgZm9yIHRoZWlyCitnZW5lcm91cyBzdXBwb3J0IGFuZCBlbmNvdXJhZ2VtZW50LiAgSSdkIGxpa2UgdG8gbGlzdCBldmVyeW9uZSdzIG5hbWUKK2hlcmUgdGhhdCByZXBsaWVkIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQgcGhhc2UsIGJ1dCB0aGUgbGlzdCBpcworYW1hemluZ2x5IGxvbmcuCisKK0kgd2lsbCBiZSByYXRoZXIgdW5mYWlyIGFuZCBzaW5nbGUgb3V0IGEgZmV3IHBlb3BsZSwgaG93ZXZlcjoKKworCUp1c3RpbiBNYXVyZXIsIGZvciBiZWluZyB0aGUgZmlyc3QgcmFuZG9tIG5ldC5wZXJzb24gdG8gdHJ5IGl0LAorCWFuZCBmb3IgbGV0dGluZyBtZSBsb2dpbiB0byBoaXMgWjUwNVNYIHRvIGdldCBpdCB3b3JraW5nIHRoZXJlCisKKwlFZGkgV2VpdHogZm9yIHRyeWluZyBvdXQgc2V2ZXJhbCBkaWZmZXJlbnQgdmVyc2lvbnMsIGFuZCBnaXZpbmcKKwltZSBhIGxvdCBvZiB1c2VmdWwgZmVlZGJhY2sKKworCUdyZWcgUnVtcGxlIGZvciBsZXR0aW5nIG1lIGxvZ2luIHJlbW90ZWx5IHRvIGdldCB0aGUgZHJpdmVyIAorCWZ1bmN0aW9uYWwgb24gdGhlIDI1NlpYLCBmb3IgaGlzIGFzc2lzdGFuY2Ugb24gdHJhY2tpbmcKKwlkb3duIGFsbCBzb3J0cyBvZiByYW5kb20gc3R1ZmYsIGFuZCBmb3IgdHJ5aW5nIG91dCBBY2NlbC1YCisKKwlaYWNoIEJyb3duLCBmb3IgdGhlIGluaXRpYWwgQUM5NyBtaXhlciBpbnRlcmZhY2UgZGVzaWduCisKKwlKZWZmIEdhcnppaywgZm9yIHZhcmlvdXMgaGVscGZ1bCBzdWdnZXN0aW9ucyBvbiB0aGUgQUM5NworCWludGVyZmFjZQorCisJIk1yLiBCdW1weSIgZm9yIGZlZWRiYWNrIG9uIHRoZSBaNTA1UlgKKworCUJpbGwgTm90dGluZ2hhbSwgZm9yIGdlbmVyb3VzIGFzc2lzdGFuY2UgaW4gZ2V0dGluZyB0aGUgbWl4ZXIgSUQKKwljb2RlIHdvcmtpbmcKKworPT09PT09PT09PT09PT09PT0KK1ByZXZpb3VzIHZlcnNpb25zCis9PT09PT09PT09PT09PT09PQorCitWZXJzaW9ucyBwcmlvciB0byAwLjMgKGFrYSBgbm9uYW1lJykgaGFkIHByb2JsZW1zIHdpdGggd2VpcmQgYXJ0aWZhY3RzCitpbiB0aGUgb3V0cHV0IGFuZCBmYWlsZWQgdG8gc2V0IHRoZSByZWNvcmRpbmcgcmF0ZSBwcm9wZXJseS4gIFRoZXNlCitwcm9ibGVtcyBoYXZlIGxvbmcgc2luY2UgYmVlbiBmaXhlZC4KKworVmVyc2lvbnMgcHJpb3IgdG8gMC41IGhhZCBwcm9ibGVtcyB3aXRoIGNsaWNrcyBpbiB0aGUgb3V0cHV0IHdoZW4KK2FueXRoaW5nIG90aGVyIHRoYW4gMTYtYml0IHN0ZXJlbyBzb3VuZCB3YXMgYmVpbmcgcGxheWVkLCBhbmQgYWxzbyBoYWQKK3BlcmlvZGljIGNsaWNrcyB3aGVuIHJlY29yZGluZy4KKworVmVyc2lvbiAwLjcgZmlyc3QgaW5jb3Jwb3JhdGVkIHN1cHBvcnQgZm9yIHRoZSBOTTI1NlpYIGNoaXBzZXQsIHdoaWNoCitpcyBmb3VuZCBvbiBzb21lIERlbGwgTGF0aXR1ZGUgbGFwdG9wcyAodGhlIENQdCwgYW5kIGFwcGFyZW50bHkKK3NvbWUgQ1BpIG1vZGVscyBhcyB3ZWxsKS4gIEl0IGFsc28gaW5jbHVkZWQgdGhlIGdlbmVyaWMgQUM5NworbWl4ZXIgbW9kdWxlLgorCitWZXJzaW9uIDAuNzUgcmVuYW1lZCBhbGwgdGhlIGZ1bmN0aW9ucyBhbmQgZmlsZXMgd2l0aCBzbGlnaHRseSBtb3JlCitnZW5lcmljIG5hbWVzLgorCitOb3RlIHRoYXQgcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBkb2N1bWVudCBjbGFpbWVkIHRoYXQgcmVjb3JkaW5nIHdhcworOC1iaXQgb25seTsgaXQgYWN0dWFsbHkgaGFzIGJlZW4gd29ya2luZyBmb3IgMTYtYml0cyBhbGwgYWxvbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDY4ZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMwpAQCAtMCwwICsxLDYgQEAKK0EgcHVyZSBPUEwzIGNhcmQgaXMgbmljZSBhbmQgZWFzeSB0byBjb25maWd1cmUuIFNpbXBseSBkbworCitpbnNtb2Qgb3BsMyBpbz0weDM4OAorCitDaGFuZ2UgdGhlIEkvTyBhZGRyZXNzIGluIHRoZSB2ZXJ5IHVubGlrZWx5IGNhc2UgdGhpcyBjYXJkIGlzIGRpZmZlcmVudGx5Citjb25maWd1cmVkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzLVNBIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMy1TQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE5MTgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMy1TQQpAQCAtMCwwICsxLDUyIEBACitPUEwzLVNBMSBzb3VuZCBkcml2ZXIgKG9wbDNzYS5vKQorCistLS0KK05vdGU6IFRoaXMgaG93dG8gb25seSBkZXNjcmliZXMgaG93IHRvIHNldHVwIHRoZSBPUEwzLVNBMSBjaGlwOyB0aGlzIGluZm8KK2RvZXMgbm90IGFwcGx5IHRvIHRoZSBTQTIsIFNBMywgb3IgU0E0LiAKKy0tLQorCitUaGUgWWFtYWhhIE9QTDMtU0ExIHNvdW5kIGNoaXAgaXMgdXN1YWxseSBmb3VuZCBidWlsdCBpbnRvIG1vdGhlcmJvYXJkcywgYW5kCitpdCdzIGEgZGVjZW50IGxpdHRsZSBjaGlwIG9mZmVyaW5nIGEgV1NTIG1vZGUsIGEgU0IgUHJvIGVtdWxhdGlvbiBtb2RlLCBNUFU0MDEKK2FuZCBPUEwzIEZNIFN5bnRoIGNhcGFiaWxpdGllcy4KKworWW91IGNhbiBlbmFibGUgaW5jbHVzaW9uIG9mIHRoZSBkcml2ZXIgdmlhIENPTkZJR19TT1VORF9PUEwzU0ExPW0sIG9yCitDT05GSUdfU09VTkRfT1BMM1NBMT15IHRocm91Z2ggJ21ha2UgY29uZmlnL3hjb25maWcvbWVudWNvbmZpZycuCisKK1lvdSdsbCBuZWVkIHRvIGtub3cgYWxsIG9mIHRoZSByZWxldmFudCBpbmZvIChpcnEsIGRtYSwgYW5kIGlvIHBvcnQpIGZvciB0aGUKK2NoaXAncyBXU1MgbW9kZSwgc2luY2UgdGhhdCBpcyB0aGUgbW9kZSB0aGUga2VybmVsIHNvdW5kIGRyaXZlciB1c2VzLCBhbmQgb2YKK2NvdXJzZSB5b3UnbGwgYWxzbyBuZWVkIHRvIGtub3cgYWJvdXQgd2hlcmUgdGhlIE1QVTQwMSBhbmQgT1BMMyBwb3J0cyBhbmQKK0lSUXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aG9zZS4KKworSGVyZSdzIHRoZSBza2lubnkgb24gaG93IHRvIGxvYWQgaXQgYXMgYSBtb2R1bGU6CisKKwltb2Rwcm9iZSBvcGwzc2EgaW89MHg1MzAgaXJxPTExIGRtYT0wIGRtYTI9MSBtcHVfaW89MHgzMzAgbXB1X2lycT01CisKK01vZHVsZSBvcHRpb25zIGluIGRldGFpbDoKKworCWlvOglUaGlzIGlzIHRoZSBXU1MncyBwb3J0IGJhc2UuCisJaXJxOglUaGlzIGlzIHRoZSBXU1MncyBJUlEuCisJZG1hOglUaGlzIGlzIHRoZSBXU1MncyBETUEgbGluZS4gSW4gbXkgQklPUyBzZXR1cCBzY3JlZW4gdGhpcyB3YXMKKwkJbGlzdGVkIGFzICJXU1MgUGxheSBETUEiCisJZG1hMjoJVGhpcyBpcyB0aGUgV1NTJ3Mgc2Vjb25kYXJ5IERNQSBsaW5lLiBNeSBCSU9TIGNhbGxzIGl0IHRoZQorCQkiV1NTIGNhcHR1cmUgRE1BIgorCQorCW1wdV9pbzoJVGhpcyBpcyB0aGUgTVBVNDAxJ3MgcG9ydCBiYXNlLgorCW1wdV9pcnE6IFRoaXMgaXMgdGhlIE1QVTQwMSdzIElSUS4KKworSWYgeW91J2QgbGlrZSB0byB1c2UgdGhlIE9QTDMgRk0gU3ludGhlc2l6ZXIsIG1ha2Ugc3VyZSB5b3UgZW5hYmxlCitDT05GSUdfU09VTkRfWU0zODEyIChpbiAnbWFrZSBjb25maWcnKS4gVGhhdCdsbCBidWlsZCB0aGUgb3BsMy5vIG1vZHVsZS4KKworVGhlbiBhIHNpbXBsZSAnaW5zbW9kIG9wbDMgaW89MHgzODgnLCBhbmQgeW91IG5vdyBoYXZlIEZNIFN5bnRoLgorCitZb3UgY2FuIGFsc28gdXNlIHRoZSBTb2Z0T1NTIHNvZnR3YXJlIHN5bnRoZXNpemVyIGluc3RlYWQgb2YgdGhlIGJ1aWx0aW4gT1BMMy4KK0hlcmUncyBob3c6CisKK1NheSAneScgb3IgJ20nIHRvICJTb2Z0T1NTIHNvZnR3YXJlIHdhdmUgdGFibGUgZW5naW5lIiBpbiBtYWtlIGNvbmZpZy4KKworSWYgeW91IHNhaWQgeWVzLCB0aGUgc29mdHdhcmUgc3ludGggaXMgYXZhaWxhYmxlIG9uY2UgeW91IGJvb3QgeW91ciBuZXcKK2tlcm5lbC4KKworSWYgeW91IGNob3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBqdXN0IGluc21vZCB0aGUgcmVzdWx0aW5nIHNvZnRvc3MyLm8KKworUXVlc3Rpb25zPyBDb21tZW50cz8KKzxzdGlrZXJAbm9ydGhsaW5rLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL09QTDMtU0EyIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMy1TQTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiNmQyYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL09QTDMtU0EyCkBAIC0wLDAgKzEsMjEwIEBACitEb2N1bWVudGF0aW9uIGZvciB0aGUgT1BMMy1TQTIsIFNBMywgYW5kIFNBeCBkcml2ZXIgKG9wbDNzYTIubykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTY290dCBNdXJyYXksIHNjb3R0QHNwaXRlZnVsLm9yZworSmFudWFyeSA3LCAyMDAxCisKK05PVEU6IEFsbCB0cmFkZS1tYXJrZWQgdGVybXMgbWVudGlvbmVkIGJlbG93IGFyZSBwcm9wZXJ0aWVzIG9mIHRoZWlyCisgICAgICByZXNwZWN0aXZlIG93bmVycy4KKworCitTdXBwb3J0ZWQgRGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaXMgZm9yIFBuUCBzb3VuZGNhcmRzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgWWFtYWhhIGF1ZGlvCitjb250cm9sbGVyIGNoaXBzZXRzOgorCitZTUY3MTEgYWthIE9QTDMtU0EyCitZTUY3MTUgYW5kIFlNRjcxOSBha2EgT1BMMy1TQTMKKworVXAgdW50aWwgcmVjZW50bHkgKERlY2VtYmVyIDIwMDApLCBJJ2QgdGhvdWdodCB0aGUgNzE5IHRvIGJlIGEKK2RpZmZlcmVudCBjaGlwc2V0LCB0aGUgT1BMMy1TQXguICBBZnRlciBhbiBlbWFpbCBleGhhbmdlIHdpdGgKK1lhbWFoYSwgaG93ZXZlciwgaXQgdHVybnMgb3V0IHRoYXQgdGhlIDcxOSBpcyBqdXN0IGEgcmUtYmFkZ2VkCis3MTUsIGFuZCB0aGUgY2hpcHNldHMgYXJlIGlkZW50aWNhbC4gIFRoZSBjaGlwc2V0IGRldGVjdGlvbiBjb2RlCitoYXMgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcy4KKworQW55d2F5cywgYWxsIG9mIHRoZXNlIGNoaXBzZXRzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGRldmljZXM6CisKK09QTDMgRk0gc3ludGhlc2l6ZXIKK1NvdW5kYmxhc3RlciBQcm8KK01pY3Jvc29mdC9XaW5kb3dzIFNvdW5kIFN5c3RlbQorTVBVNDAxIE1JREkgaW50ZXJmYWNlCisKK05vdGUgdGhhdCB0aGlzIGRyaXZlciB1c2VzIHRoZSBNU1MgZGV2aWNlLCBhbmQgdG8gbXkga25vd2xlZGdlIHRoZXNlCitjaGlwc2V0cyBlbmZvcmNlIGFuIGVpdGhlci9vciBzaXR1YXRpb24gd2l0aCB0aGUgU291bmRibGFzdGVyIFBybworZGV2aWNlIGFuZCB0aGUgTVNTIGRldmljZS4gIFNpbmNlIHRoZSBNU1MgZGV2aWNlIGhhcyBiZXR0ZXIKK2NhcGFiaWxpdGllcywgSSBoYXZlIGltcGxlbWVudGVkIHRoZSBkcml2ZXIgdG8gdXNlIGl0LgorCisKK01peGVyIENoYW5uZWxzCistLS0tLS0tLS0tLS0tLQorCitPbGRlciB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlciAocHJlLURlY2VtYmVyIDIwMDApIGhhZCB0d28gbWl4ZXJzLAorYW4gT1BMMy1TQTIgb3IgU0EzIG1peGVyIGFuZCBhIE1TUyBtaXhlci4gIFRoZSBPUEwzLVNBWzIzXSBtaXhlcgorZGV2aWNlIGNvbnRhaW5lZCBhIHN1cGVyc2V0IG9mIG1peGVyIGNoYW5uZWxzIGNvbnNpc3Rpbmcgb2YgaXRzIG93bgorY2hhbm5lbHMgYW5kIGFsbCBvZiB0aGUgTVNTIG1peGVyIGNoYW5uZWxzLiAgVG8gc2ltcGxpZnkgdGhlIGRyaXZlcgorY29uc2lkZXJhYmx5LCBhbmQgdG8gcGFydGl0aW9uIGZ1bmN0aW9uYWxpdHkgYmV0dGVyLCB0aGUgT1BMMy1TQVsyM10KK21peGVyIGRldmljZSBub3cgY29udGFpbnMgaGFzIGl0cyBvd24gc3BlY2lmaWMgbWl4ZXIgY2hhbm5lbHMuICBUaGV5CithcmU6CisKK1ZvbHVtZSAgICAgLSBIYXJkd2FyZSBtYXN0ZXIgdm9sdW1lIGNvbnRyb2wKK0Jhc3MgICAgICAgLSBTQTMgb25seSwgbm93IHN1cHBvcnRzIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzCitUcmVibGUgICAgIC0gU0EzIG9ubHksIG5vdyBzdXBwb3J0cyBsZWZ0IGFuZCByaWdodCBjaGFubmVscworTWljcm9waG9uZSAtIEhhcmR3YXJlIG1pY3JvcGhvbmUgaW5wdXQgdm9sdW1lIGNvbnRyb2wKK0RpZ2l0YWwxICAgLSBZYW1haGEgM0QgZW5oYW5jZW1lbnQgIldpZGUiIG1peGVyCisKK0FsbCBvdGhlciBtaXhlciBjaGFubmVscyAoZS5nLiAiUENNIiwgIkNEIiwgZXRjLikgbm93IGhhdmUgdG8gYmUKK2NvbnRyb2xsZWQgdmlhIHRoZSAiTVMgU291bmQgU3lzdGVtIChDUzQyMzEpIiBtaXhlci4gIFRvIGZhY2lsaXRhdGUKK3RoaXMsIHRoZSBtaXhlciBkZXZpY2UgY3JlYXRpb24gb3JkZXIgaGFzIGJlZW4gc3dpdGNoZWQgc28gdGhhdAordGhlIE1TUyBtaXhlciBpcyBjcmVhdGVkIGZpcnN0LiAgVGhpcyBhbGxvd3MgYWNjZXNzaW5nIHRoZSBtYWpvcml0eQorb2YgdGhlIHVzZWZ1bCBtaXhlciBjaGFubmVscyBldmVuIHZpYSBzaW5nbGUgbWl4ZXItYXdhcmUgdG9vbHMKK3N1Y2ggYXMgImF1bWl4Ii4KKworCitQbHVnICduIFBsYXkKKy0tLS0tLS0tLS0tLQorCitJbiBwcmV2aW91cyBrZXJuZWxzICgyLjIueCksIHNvbWUgY29uZmlndXJhdGlvbiB3YXMgcmVxdWlyZWQgdG8KK2dldCB0aGUgZHJpdmVyIHRvIHRhbGsgdG8gdGhlIGNhcmQuICBCZWluZyB0aGUgbmV3IG1pbGxlbm5pdW0gYW5kCithbGwsIHRoZSAyLjQueCBrZXJuZWxzIG5vdyBzdXBwb3J0IGF1dG8tY29uZmlndXJhdGlvbiBpZiBJU0EgUG5QCitzdXBwb3J0IGlzIGNvbmZpZ3VyZWQgaW4uICBUaGVvcmV0aWNhbGx5LCB0aGUgZHJpdmVyIGV2ZW4gc3VwcG9ydHMKK2hhdmluZyBtb3JlIHRoYW4gb25lIGNhcmQgaW4gdGhpcyBjYXNlLgorCitXaXRoIHRoZSBhZGRpdGlvbiBvZiBQblAgc3VwcG9ydCB0byB0aGUgZHJpdmVyLCB0d28gbmV3IHBhcmFtZXRlcnMKK2hhdmUgYmVlbiBhZGRlZCB0byBjb250cm9sIGl0OgorCitpc2FwbnAgICAtIHNldCB0byAwIHRvIGRpc2FibGUgSVNBIFBuUCBjYXJkIGRldGVjdGlvbgorCittdWx0aXBsZSAtIHNldCB0byAwIHRvIGRpc2FibGUgbXVsdGlwbGUgUG5QIGNhcmQgZGV0ZWN0aW9uCisKKworT3B0aW9uYWwgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWNlbnQgKERlY2VtYmVyIDIwMDApIGFkZGl0aW9ucyB0byB0aGUgZHJpdmVyIChiYXNlZCBvbiBhIHBhdGNoCitwcm92aWRlZCBieSBQZXRlciBFbmdsbWFpZXIpIGFyZSB0d28gbmV3IHBhcmFtZXRlcnM6CisKK3ltb2RlIC0gICAgU2V0IFlhbWFoYSAzRCBlbmhhbmNlbWVudCBtb2RlOgorICAgICAgICAgICAwID0gRGVza3RvcC9Ob3JtYWwgIDUtMTIgY20gc3BlYWtlcnMKKyAgICAgICAgICAgMSA9IE5vdGVib29rIFBDICgxKSAzIGNtIHNwZWFrZXJzCisgICAgICAgICAgIDIgPSBOb3RlYm9vayBQQyAoMikgMS41IGNtIHNwZWFrZXJzCisgICAgICAgICAgIDMgPSBIaS1GaSAgICAgICAgICAgMTYtMzggY20gc3BlYWtlcnMKKworbG9vcGJhY2sgLSBTZXQgQS9EIGlucHV0IHNvdXJjZS4gVXNlZnVsIGZvciBlY2hvIGNhbmNlbGxhdGlvbjoKKyAgICAgICAgICAgMCA9IE1pYyBSaWdodCBjaGFubmVsIChkZWZhdWx0KQorICAgICAgICAgICAxID0gTW9ubyBvdXRwdXQgbG9vcGJhY2sKKworVGhlIHltb2RlIHBhcmFtZXRlciBoYXMgYmVlbiB0ZXN0ZWQgYW5kIGRvZXMgd29yay4gIFRoZSBsb29wYmFjaworcGFyYW1ldGVyLCBob3dldmVyLCBpcyB1bnRlc3RlZC4gIEFueSBmZWVkYmFjayBvbiBpdHMgdXNlZnVsbmVzcword291bGQgYmUgYXBwcmVjaWF0ZWQuCisKKworTWFudWFsIENvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBzb21lIHJlYXNvbiB5b3UgZGVjaWRlIG5vdCB0byBjb21waWxlIElTQSBQblAgc3VwcG9ydCBpbnRvCit5b3VyIGtlcm5lbCwgb3IgZGlzYWJsZWQgdGhlIGRyaXZlcidzIHVzYWdlIG9mIGl0IGJ5IHNldHRpbmcgdGhlCitpc2FwbnAgcGFyYW1ldGVyIGFzIGRpc2N1c3NlZCBhYm92ZSwgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIGRvIHNvbWUKK21hbnVhbCBjb25maWd1cmF0aW9uLiAgVGhlcmUgYXJlIHR3byB3YXlzIG9mIGRvaW5nIHRoaXMuICBUaGUgbW9zdAorY29tbW9uIGlzIHRvIHVzZSB0aGUgaXNhcG5wdG9vbHMgcGFja2FnZSB0byBpbml0aWFsaXplIHRoZSBjYXJkLCBhbmQKK3VzZSB0aGUga2VybmVsIG1vZHVsZSBmb3JtIG9mIHRoZSBzb3VuZCBzdWJzeXN0ZW0gYW5kIHNvdW5kIGRyaXZlcnMuCitBbHRlcm5hdGl2ZWx5LCBzb21lIEJJT1MncyBhbGxvdyBtYW51YWwgY29uZmlndXJhdGlvbiBvZiBpbnN0YWxsZWQKK1BuUCBkZXZpY2VzIGluIGEgQklPUyBtZW51LCB3aGljaCBzaG91bGQgYWxsb3cgdXNpbmcgdGhlIG5vbi1tb2R1bGFyCitzb3VuZCBkcml2ZXJzLCBpLmUuIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4KKworSSBwZXJzb25hbGx5IHVzZSBpc2FwbnAgYW5kIG1vZHVsZXMsIGFuZCBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gYSBQblAKK0JJT1MgbWFjaGluZSB0byB0ZXN0LiAgSWYgeW91IGhhdmUgc3VjaCBhIGJlYXN0LCBjb25maWd1cmluZyB0aGUKK2RyaXZlciB0byBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgc2hvdWxkIGp1c3Qgd29yayAodGhhbmtzIHRvIHdvcmsKK2RvbmUgYnkgRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PikuICBZb3Ugd2lsbCBzdGlsbCBuZWVkCit0byBzcGVjaWZ5IHNldHRpbmdzLCB3aGljaCBjYW4gYmUgZG9uZSBieSBhZGRpbmc6CisKK29wbDNzYTI9PGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1zc2lvPiw8bXB1aW8+CisKK3RvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGU6CisKK29wbDNzYTI9MHgzNzAsNSwwLDEsMHg1MzAsMHgzMzAKKworSWYgeW91IGFyZSBpbnN0ZWFkIHVzaW5nIHRoZSBpc2FwbnAgdG9vbHMgKGFzIG1vc3QgcGVvcGxlIGhhdmUgYmVlbgorYmVmb3JlIExpbnV4IDIuNC54KSwgZm9sbG93IHRoZSBkaXJlY3Rpb25zIGluIHRoZWlyIGRvY3VtZW50YXRpb24gdG8KK3Byb2R1Y2UgYSBjb25maWd1cmF0aW9uIGZpbGUuICBIZXJlIGlzIHRoZSByZWxldmFudCBleGNlcnB0IEkgdXNlZCB0bwordXNlIGZvciBteSBTQTMgY2FyZCBmcm9tIG15IGlzYXBucC5jb25mOgorCisoQ09ORklHVVJFIFlNSDA4MDAvLTEgKExEIDAKKworIyBOT1RFOiBJTyAwIGlzIGZvciB0aGUgdW51c2VkIFNvdW5kQmxhc3RlciBwYXJ0IG9mIHRoZSBjaGlwc2V0LgorKElPIDAgKEJBU0UgMHgwMjIwKSkKKyhJTyAxIChCQVNFIDB4MDUzMCkpCisoSU8gMiAoQkFTRSAweDAzODgpKQorKElPIDMgKEJBU0UgMHgwMzMwKSkKKyhJTyA0IChCQVNFIDB4MDM3MCkpCisoSU5UIDAgKElSUSA1IChNT0RFICtFKSkpCisoRE1BIDAgKENIQU5ORUwgMCkpCisoRE1BIDEgKENIQU5ORUwgMSkpCisKK0hlcmUsIG5vdGUgdGhhdDoKKworUG9ydCAgQWNjZXB0YWJsZSBSYW5nZSAgUHVycG9zZQorLS0tLSAgLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLQorSU8gMCAgMHgwMjIwIC0gMHgwMjgwICAgU0IgYmFzZSBhZGRyZXNzLCB1bnVzZWQuCitJTyAxICAweDA1MzAgLSAweDBGNDggICBNU1MgYmFzZSBhZGRyZXNzCitJTyAyICAweDAzODggLSAweDAzRjggICBPUEwzIGJhc2UgYWRkcmVzcworSU8gMyAgMHgwMzAwIC0gMHgwMzM0ICAgTVBVIGJhc2UgYWRkcmVzcworSU8gNCAgMHgwMTAwIC0gMHgwRkZFICAgY2FyZCdzIG93biBiYXNlIGFkZHJlc3MgZm9yIGl0cyBjb250cm9sIEkvTyBwb3J0cworCitUaGUgSVJRIGFuZCBETUEgdmFsdWVzIGNhbiBiZSBhbnkgdGhhdCBhcmUgY29uc2lkZXJlZCBhY2NlcHRhYmxlIGZvciBhCitNU1MuICBBc3N1bWluZyB5b3UndmUgZ290IGlzYXBucCBhbGwgaGFwcHksIHRoZW4geW91IHNob3VsZCBiZSBhYmxlIHRvCitkbyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nICh3aGljaCBtYXRjaGVzIHVwIHdpdGggdGhlIGlzYXBucAorY29uZmlndXJhdGlvbiBhYm92ZSk6CisKK21vZHByb2JlIG1wdTQwMQorbW9kcHJvYmUgYWQxODQ4Cittb2Rwcm9iZSBvcGwzc2EyIGlvPTB4MzcwIG1zc19pbz0weDUzMCBtcHVfaW89MHgzMzAgaXJxPTUgZG1hPTAgZG1hMj0xCittb2Rwcm9iZSBvcGwzIGlvPTB4Mzg4CisKK1NlZSB0aGUgc2VjdGlvbiAiQXV0b21hdGljIE1vZHVsZSBMb2FkaW5nIiBiZWxvdyBmb3IgaG93IHRvIHNldCB1cAorL2V0Yy9tb2Rwcm9iZS5jb25mIHRvIGF1dG9tYXRlIHRoaXMuCisKK0FuIGltcG9ydGFudCB0aGluZyB0byByZW1lbWJlciB0aGF0IHRoZSBvcGwzc2EyIG1vZHVsZSdzIGlvIGFyZ3VtZW50IGlzCitmb3IgaXQncyBvd24gY29udHJvbCBwb3J0LCB3aGljaCBoYW5kbGVzIHRoZSBjYXJkJ3MgbWFzdGVyIG1peGVyIGZvcgordm9sdW1lIChvbiBhbGwgY2FyZHMpLCBhbmQgYmFzcyBhbmQgdHJlYmxlIChvbiBTQTMgY2FyZHMpLgorCisKK1Ryb3VibGVzaG9vdGluZworLS0tLS0tLS0tLS0tLS0tCisKK0lmIGFsbCBnb2VzIHdlbGwgYW5kIHlvdSBzZWUgbm8gZXJyb3IgbWVzc2FnZXMsIHlvdSBzaG91bGQgYmUgYWJsZSB0bworc3RhcnQgdXNpbmcgdGhlIHNvdW5kIGNhcGFiaWxpdGllcyBvZiB5b3VyIHN5c3RlbS4gIElmIHlvdSBnZXQgYW4KK2Vycm9yIG1lc3NhZ2Ugd2hpbGUgdHJ5aW5nIHRvIGluc2VydCB0aGUgb3BsM3NhMiBtb2R1bGUsIHRoZW4gbWFrZQorc3VyZSB0aGF0IHRoZSB2YWx1ZXMgb2YgdGhlIHZhcmlvdXMgYXJndW1lbnRzIG1hdGNoIHdoYXQgeW91IHNwZWNpZmllZAoraW4geW91ciBpc2FwbnAgY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgdGhhdCB0aGVyZSBpcyBubyBjb25mbGljdCB3aXRoCithbm90aGVyIGRldmljZSBmb3IgYW4gSS9PIHBvcnQgb3IgaW50ZXJydXB0LiAgQ2hlY2tpbmcgdGhlIGNvbnRlbnRzIG9mCisvcHJvYy9pb3BvcnRzIGFuZCAvcHJvYy9pbnRlcnJ1cHRzIGNhbiBiZSB1c2VmdWwgdG8gc2VlIGlmIHlvdSdyZQorYnV0dGluZyBoZWFkcyB3aXRoIGFub3RoZXIgZGV2aWNlLgorCitJZiB5b3Ugc3RpbGwgY2Fubm90IGdldCB0aGUgbW9kdWxlIHRvIGxvYWQsIGxvb2sgYXQgdGhlIGNvbnRlbnRzIG9mCit5b3VyIHN5c3RlbSBsb2cgZmlsZSwgdXN1YWxseSAvdmFyL2xvZy9tZXNzYWdlcy4gIElmIHlvdSBzZWUgdGhlCittZXNzYWdlICJvcGwzc2EyOiBVbmtub3duIFlhbWFoYSBhdWRpbyBjb250cm9sbGVyIHZlcnNpb24iLCB0aGVuIHlvdQoraGF2ZSBhIGRpZmZlcmVudCBjaGlwc2V0IHZlcnNpb24gdGhhbiBJJ3ZlIGVuY291bnRlcmVkIHNvIGZhci4gIExvb2sKK2ZvciBhbGwgbWVzc2FnZXMgaW4gdGhlIGxvZyBmaWxlIHRoYXQgc3RhcnQgd2l0aCAib3BsM3NhMjogIiBhbmQgc2VlCitpZiB0aGV5IHByb3ZpZGUgYW55IGNsdWVzLiAgSWYgeW91IGRvIG5vdCBzZWUgdGhlIGNoaXBzZXQgdmVyc2lvbgorbWVzc2FnZSwgYW5kIG5vbmUgb2YgdGhlIG90aGVyIG1lc3NhZ2VzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSBsb2cgYXJlCitoZWxwZnVsLCBlbWFpbCBtZSBzb21lIGRldGFpbHMgYW5kIEknbGwgdHJ5IG15IGJlc3QgdG8gaGVscC4KKworCitBdXRvbWF0aWMgTW9kdWxlIExvYWRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMYXN0bHksIGlmIHlvdSdyZSB1c2luZyBtb2R1bGVzIGFuZCB3YW50IHRvIHNldCB1cCBhdXRvbWF0aWMgbW9kdWxlCitsb2FkaW5nIHdpdGgga21vZCwgdGhlIGtlcm5lbCBtb2R1bGUgbG9hZGVyLCBoZXJlIGlzIHRoZSBzZWN0aW9uIEkKK2N1cnJlbnRseSB1c2UgaW4gbXkgbW9kcHJvYmUuY29uZiBmaWxlOgorCisjIFNvdW5kCithbGlhcyBzb3VuZC1zbG90LTAgb3BsM3NhMgorb3B0aW9ucyBvcGwzc2EyIGlvPTB4MzcwIG1zc19pbz0weDUzMCBtcHVfaW89MHgzMzAgaXJxPTcgZG1hPTAgZG1hMj0zCitvcHRpb25zIG9wbDMgaW89MHgzODgKKworVGhhdCdzIGFsbCBpdCBjdXJyZW50bHkgdGFrZXMgdG8gZ2V0IGFuIE9QTDMtU0EzIGNhcmQgd29ya2luZyBvbiBteQorc3lzdGVtLiAgT25jZSBhZ2FpbiwgaWYgeW91IGhhdmUgYW55IG90aGVyIHByb2JsZW1zLCBlbWFpbCBtZSBhdCB0aGUKK2FkZHJlc3MgbGlzdGVkIGFib3ZlLgorCitTY290dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT3B0aSBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL09wdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1YWYzYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL09wdGkKQEAgLTAsMCArMSwyMjIgQEAKK1N1cHBvcnQgZm9yIHRoZSBPUFRpIDgyQzkzMSBjaGlwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTm90ZTogcGFydHMgb2YgdGhpcyBSRUFETUUgZmlsZSBhcHBseSBhbHNvIHRvIG90aGVyCitjYXJkcyB0aGF0IHVzZSB0aGUgbWFkMTYgZHJpdmVyLgorCitTb21lIGl0ZW1zIGluIHRoaXMgUkVBRE1FIGZpbGUgYXJlIGJhc2VkIG9uIGZlYXR1cmVzCithZGRlZCB0byB0aGUgc291bmQgZHJpdmVyIGFmdGVyIExpbnV4LTIuMS45MSB3YXMgb3V0LgorQnkgdGhlIHRpbWUgb2Ygd3JpdGluZyB0aGlzIEkgZG8gbm90IGtub3cgd2hpY2ggb2ZmaWNpYWwKK2tlcm5lbCByZWxlYXNlIHdpbGwgaW5jbHVkZSB0aGVzZSBmZWF0dXJlcy4KK1BsZWFzZSBkbyBub3QgcmVwb3J0IGluY29uc2lzdGVuY2llcyBvbiBvbGRlciBMaW51eAora2VybmVscy4KKworVGhlIE9QVGkgODJDOTMxIGlzIHN1cHBvcnRlZCBpbiBpdHMgbm9uLVBuUCBtb2RlLgorVXN1YWxseSB5b3UgZG8gbm90IG5lZWQgdG8gc2V0IGp1bXBlcnMsIGV0Yy4gVGhlIHNvdW5kIGRyaXZlcgord2lsbCBjaGVjayB0aGUgY2FyZCBzdGF0dXMgYW5kIGlmIGl0IGlzIHJlcXVpcmVkIGl0IHdpbGwKK2ZvcmNlIHRoZSBjYXJkIGludG8gYSBtb2RlIGluIHdoaWNoIGl0IGNhbiBiZSBwcm9ncmFtbWVkLgorCitJZiB5b3UgaGF2ZSBhbm90aGVyIE9TIGluc3RhbGxlZCBvbiB5b3VyIGNvbXB1dGVyIGl0IGlzIHJlY29tbWVuZGVkCit0aGF0IExpbnV4IGFuZCB0aGUgb3RoZXIgT1MgdXNlIHRoZSBzYW1lIHJlc291cmNlcy4KKworQWxzbywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCByZXNvdXJjZXMgc3BlY2lmaWVkIGluIC9ldGMvbW9kcHJvYmUuY29uZgorYW5kIHJlc291cmNlcyBzcGVjaWZpZWQgaW4gL2V0Yy9pc2FwbnAuY29uZiBhZ3JlZS4KKworQ29tcGlsaW5nIHRoZSBzb3VuZCBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJIGhpZ2hseSByZWNvbW1lbmQgdGhhdCB5b3UgYnVpbGQgYSBtb2R1bGFyaXplZCBzb3VuZCBkcml2ZXIuCitUaGlzIGRvY3VtZW50IGRvZXMgbm90IGNvdmVyIGEgc291bmQtZHJpdmVyIHdoaWNoIGlzIGJ1aWx0IGluCit0aGUga2VybmVsLgorCitTb3VuZCBjYXJkIHN1cHBvcnQgc2hvdWxkIGJlIGVuYWJsZWQgYXMgYSBtb2R1bGUgKGNob3NlIG0pLgorQW5zd2VyICdtJyBmb3IgIHRoZXNlIGl0ZW1zOgorICBHZW5lcmljIE9QTDIvT1BMMyBGTSBzeW50aGVzaXplciBzdXBwb3J0CQkoQ09ORklHX1NPVU5EX0FETElCKQorICBNaWNyb3NvZnQgU291bmQgU3lzdGVtIHN1cHBvcnQJCQkoQ09ORklHX1NPVU5EX01TUykKKyAgU3VwcG9ydCBmb3IgT1BUaSBNQUQxNiBhbmQvb3IgTW96YXJ0IGJhc2VkIGNhcmRzCShDT05GSUdfU09VTkRfTUFEMTYpCisgIEZNIHN5bnRoZXNpemVyIChZTTM4MTIvT1BMLTMpIHN1cHBvcnQJCQkoQ09ORklHX1NPVU5EX1lNMzgxMikKKworVGhlIGNvbmZpZ3VyYXRpb24gbWVudSBtYXkgYXNrIGZvciBhZGRyZXNzZXMsIElSUSBsaW5lcyBvciBETUEKK2NoYW5uZWxzLiBJZiB0aGUgY2FyZCBpcyB1c2VkIGFzIGEgbW9kdWxlIHRoZSBtb2R1bGUgbG9hZGluZworb3B0aW9ucyB3aWxsIG92ZXJyaWRlIHRoZXNlIHZhbHVlcy4KKworRm9yIHRoZSBPUFRpIDkzMSB5b3UgY2FuIGFuc3dlciAnbicgdG86CisgIFN1cHBvcnQgTUlESSBpbiBvbGRlciBNQUQxNiBiYXNlZCBjYXJkcyAocmVxdWlyZXMgU0IpCShDT05GSUdfU09VTkRfTUFEMTZfT0xEQ0FSRCkKK0lmIHlvdSBkbyBuZWVkIE1JREkgc3VwcG9ydCBpbiBhIE1vemFydCBvciBDOTI4IGJhc2VkIGNhcmQgeW91CituZWVkIHRvIGFuc3dlciAnbScgdG8gdGhlIGFib3ZlIHF1ZXN0aW9uLiBJbiB0aGF0IGNhc2UgeW91IHdpbGwKK2Fsc28gbmVlZCB0byBhbnN3ZXIgJ20nIHRvOgorICAnMTAwJSBTb3VuZCBCbGFzdGVyIGNvbXBhdGlibGVzIChTQjE2LzMyLzY0LCBFU1MsIEphenoxNikgc3VwcG9ydCcgKENPTkZJR19TT1VORF9TQikKKworR28gb24gYW5kIGNvbXBpbGUgeW91ciBrZXJuZWwgYW5kIG1vZHVsZXMuIEluc3RhbGwgdGhlIG1vZHVsZXMuIFJ1biBkZXBtb2QgLWEuCisKK1VzaW5nIGlzYXBucHRvb2xzCistLS0tLS0tLS0tLS0tLS0tLQorSW4gbW9zdCBzeXN0ZW1zIHdpdGggYSBQblAgQklPUyB5b3UgZG8gbm90IG5lZWQgdG8gdXNlIGlzYXBucC4gVGhlCitpbml0aWFsaXphdGlvbiBwcm92aWRlZCBieSB0aGUgQklPUyBpcyBzdWZmaWNpZW50IGZvciB0aGUgZHJpdmVyCit0byBwaWNrIHVwIHRoZSBjYXJkIGFuZCBjb250aW51ZSBpbml0aWFsaXphdGlvbi4KKworSWYgdGhhdCBmYWlscywgb3IgaWYgeW91IGhhdmUgb3RoZXIgUG5QIGNhcmRzLCB5b3UgbmVlZCB0byB1c2UgaXNhcG5wCit0byBpbml0aWFsaXplIHRoZSBjYXJkLgorVGhpcyB3YXMgdGVzdGVkIHdpdGggaXNhcG5wdG9vbHMtMS4xMSBidXQgSSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlCitpc2FwbnB0b29scy0xLjEzIChvciBuZXdlcikuIFJ1biBwbnBkdW1wIHRvIGR1bXAgdGhlIGluZm9ybWF0aW9uCithYm91dCB5b3VyIFBuUCBjYXJkcy4gVGhlbiBlZGl0IHRoZSByZXN1bHRpbmcgZmlsZSBhbmQgc2VsZWN0Cit0aGUgb3B0aW9ucyBvZiB5b3VyIGNob2ljZS4gVGhpcyBmaWxlIGlzIG5vcm1hbGx5IGluc3RhbGxlZCBhcworL2V0Yy9pc2FwbnAuY29uZi4KKworVGhlIGRyaXZlciBoYXMgb25lIGxpbWl0YXRpb24gd2l0aCByZXNwZWN0IHRvIEkvTyBwb3J0IHJlc291cmNlczoKK0lPMyBiYXNlIG11c3QgYmUgMHgwRTBDLiAgQWx0aG91Z2ggaXNhcG5wIGFsbG93cyBvdGhlciBwb3J0cywgdGhpcworYWRkcmVzcyBpcyBoYXJkLWNvZGVkIGludG8gdGhlIGRyaXZlci4KKworVXNpbmcga21vZCBhbmQgYXV0b2xvYWRpbmcgdGhlIHNvdW5kIGRyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbWVudDogYXMgb2YgbGludXgtMi4xLjkwIGttb2QgaXMgcmVwbGFjaW5nIGtlcm5lbGQuCitUaGUgY29uZmlnIGZpbGUgJy9ldGMvbW9kcHJvYmUuY29uZicgaXMgdXNlZCBhcyBiZWZvcmUuCisKK1RoaXMgaXMgdGhlIHNvdW5kIHBhcnQgb2YgbXkgL2V0Yy9tb2Rwcm9iZS5jb25mIGZpbGUuCitGb2xsb3dpbmcgdGhhdCBJIHdpbGwgZXhwbGFpbiBlYWNoIGxpbmUuCisKK2FsaWFzIG1peGVyMCBtYWQxNgorYWxpYXMgYXVkaW8wIG1hZDE2CithbGlhcyBtaWRpMCAgbWFkMTYKK2FsaWFzIHN5bnRoMCBvcGwzCitvcHRpb25zIHNiIG1hZDE2PTEKK29wdGlvbnMgbWFkMTYgaXJxPTEwIGRtYT0wIGRtYTE2PTEgaW89MHg1MzAgam95c3RpY2s9MSBjZHR5cGU9MAorb3B0aW9ucyBvcGwzIGlvPTB4Mzg4CitpbnN0YWxsIG1hZDE2IC9zYmluL21vZHByb2JlIC1pIG1hZDE2ICYmIC9zYmluL2FkMTg0OF9taXhlcl9yZXJvdXRlIDE0IDggMTUgMyAxNiA2CisKK0lmIHlvdSBoYXZlIGFuIE1QVSBkYXVnaHRlcmNhcmQgb3Igb25ib2FyZCBNUFUgeW91IHdpbGwgd2FudCB0byBhZGQgdG8gdGhlCisib3B0aW9ucyBtYWQxNiIgbGluZSAtIGVnIAorCitvcHRpb25zIG1hZDE2IGlycT01IGRtYT0wIGRtYTE2PTMgaW89MHg1MzAgbXB1X2lvPTB4MzMwIG1wdV9pcnE9OQorCitUbyBzZXQgdGhlIEkvTyBhbmQgSVJRIG9mIHRoZSBNUFUuCisKKworRXhwbGFpbjoKKworYWxpYXMgbWl4ZXIwIG1hZDE2CithbGlhcyBhdWRpbzAgbWFkMTYKK2FsaWFzIG1pZGkwICBtYWQxNgorYWxpYXMgc3ludGgwIG9wbDMKKworV2hlbiBhbnkgc291bmQgZGV2aWNlIGlzIG9wZW5lZCB0aGUga2VybmVsIHJlcXVlc3RzIGF1dG8tbG9hZGluZworb2YgY2hhci1tYWpvci0xNC4gVGhlcmUgaXMgYSBidWlsdC1pbiBhbGlhcyB0aGF0IHRyYW5zbGF0ZXMgdGhpcworcmVxdWVzdCB0byBsb2FkaW5nIHRoZSBtYWluIHNvdW5kIG1vZHVsZS4KKworVGhlIHNvdW5kIG1vZHVsZSBpbiBpdHMgdHVybiB3aWxsIHJlcXVlc3QgbG9hZGluZyBvZiBhIHN1Yi1kcml2ZXIKK2ZvciBtaXhlciwgYXVkaW8sIG1pZGkgb3Igc3ludGhlc2l6ZXIgZGV2aWNlLiBUaGUgZmlyc3QgMyBhcmUKK3N1cHBvcnRlZCBieSB0aGUgbWFkMTYgZHJpdmVyLiBUaGUgc3ludGggZGV2aWNlIGlzIHN1cHBvcnRlZAorYnkgdGhlIG9wbDMgZHJpdmVyLgorCitUaGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGF1dG9sb2FkIHRoZSBzb3VuZCBkZXZpY2UgZHJpdmVyCitpZiBtb3JlIHRoYW4gb25lIGNhcmQgaXMgaW5zdGFsbGVkLgorCitvcHRpb25zIHNiIG1hZDE2PTEKKworVGhpcyBpcyBsZWZ0IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuIElmIHlvdSBlbmFibGUgdGhlCitjb25maWcgb3B0aW9uICdTdXBwb3J0IE1JREkgaW4gb2xkZXIgTUFEMTYgYmFzZWQgY2FyZHMgKHJlcXVpcmVzIFNCKScKK29yIGlmIHlvdSB1c2UgYW4gb2xkZXIgbWFkMTYgZHJpdmVyIGl0IHdpbGwgZm9yY2UgbG9hZGluZyBvZiB0aGUKK1NvdW5kQmxhc3RlciBkcml2ZXIuIFRoaXMgb3B0aW9uIHRlbGxzIHRoZSBTQiBkcml2ZXIgbm90IHRvIGxvb2sKK2ZvciBhIFNCIGNhcmQgYnV0IHRvIHdhaXQgZm9yIHRoZSBtYWQxNiBkcml2ZXIuCisKK29wdGlvbnMgbWFkMTYgaXJxPTEwIGRtYT0wIGRtYTE2PTEgaW89MHg1MzAgam95c3RpY2s9MSBjZHR5cGU9MAorb3B0aW9ucyBvcGwzIGlvPTB4Mzg4CisKK3Bvc3QtaW5zdGFsbCBtYWQxNiAvc2Jpbi9hZDE4NDhfbWl4ZXJfcmVyb3V0ZSAxNCA4IDE1IDMgMTYgNgorCitUaGlzIHNldHMgcmVzb3VyY2VzIGFuZCBvcHRpb25zIGZvciB0aGUgbWFkMTYgYW5kIG9wbDMgZHJpdmVycy4KK0kgdXNlIHR3byBETUEgY2hhbm5lbHMgKG9ubHkgb25lIGlzIHJlcXVpcmVkKSB0byBlbmFibGUgZnVsbCBkdXBsZXguCitqb3lzdGljaz0xIGVuYWJsZXMgdGhlIGpveXN0aWNrIHBvcnQuIGNkdHlwZT0wIGRpc2FibGVzIHRoZSBjZCBwb3J0LgorWW91IGNhbiBhbHNvIHNldCBtcHVfaW8gYW5kIG1wdV9pcnEgaW4gdGhlIG1hZDE2IG9wdGlvbnMgZm9yIHRoZQordWFydDQwMSBkcml2ZXIuCisKK1RoaXMgdGVsbHMgbW9kcHJvYmUgdG8gcnVuIC9zYmluL2FkMTg0OF9taXhlcl9yZXJvdXRlIGFmdGVyCittYWQxNiBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGFuZCBpbml0aWFsaXplZC4gVGhlIHNvdXJjZQorZm9yIGFkMTg0OF9taXhlcl9yZXJvdXRlIGlzIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhpcyByZWFkbWUKK2ZpbGUuIEl0IGlzIGltcG9zc2libGUgZm9yIHRoZSBzb3VuZCBkcml2ZXIgdG8ga25vdyB0aGUgYWN0dWFsCitjb25uZWN0aW9ucyB0byB0aGUgbWl4ZXIuIFRoZSAzIGlucHV0cyBpbnRlbmRlZCBmb3IgY2QsIHN5bnRoCithbmQgbGluZS1pbiBhcmUgbWFwcGVkIHRvIHRoZSBnZW5lcmljIGlucHV0cyBsaW5lMSwgbGluZTIgYW5kCitsaW5lMy4gVGhpcyBwcm9ncmFtIHJlcm91dGVzIHRoZXNlIG1peGVyIGNoYW5uZWxzIHRvIHRoZWlyCityaWdodCBuYW1lcyAobm90ZSB0aGUgcmlnaHQgbWFwcGluZyBkZXBlbmRzIG9uIHRoZSBhY3R1YWwgc291bmQKK2NhcmQgdGhhdCB5b3UgdXNlKS4KK1RoZSBudW1lcmljIHBhcmFtZXRlcnMgbWVhbjoKKyAxND1saW5lMSA4PWNkICAgIC0gcmVyb3V0ZSBsaW5lMSB0byB0aGUgQ0QgaW5wdXQuCisgMTU9bGluZTIgMz1zeW50aCAtIHJlcm91dGUgbGluZTIgdG8gdGhlIHN5bnRoZXNpemVyIGlucHV0LgorIDE2PWxpbmUzIDY9bGluZSAgLSByZXJvdXRlIGxpbmUzIHRvIHRoZSBsaW5lIGlucHV0LgorRm9yIHJlZmVyZW5jZSBvbiBvdGhlciBpbnB1dCBuYW1lcyBsb29rIGF0IHRoZSBmaWxlCisvdXNyL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmguCisKK1VzaW5nIGEgam95c3RpY2sKKy0tLS0tLS0tLS0tLS0tLS0tCitZb3UgbXVzdCBlbmFibGUgYSBqb3lzdGljayBpbiB0aGUgbWFkMTYgb3B0aW9ucy4gKGFsc28KK2luIC9ldGMvaXNhcG5wLmNvbmYgaWYgeW91IHVzZSBpdCkuCitUZXN0ZWQgd2l0aCByZWd1bGFyIGFuYWxvZyBqb3lzdGlja3MuCisKK0EgQ0RST00gZHJpdmUgY29ubmVjdGVkIHRvIHRoZSBzb3VuZCBjYXJkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIDgyQzkzMSBjaGlwIGhhcyBzdXBwb3J0IG9ubHkgZm9yIHNlY29uZGFyeSBBVEFQSSBjZHJvbS4KKyhjZHR5cGU9OCkuIExvYWRpbmcgdGhlIG1hZDE2IGRyaXZlciByZXNldHMgdGhlIEM5MzEgY2hpcAorYW5kIGlmIGEgY2Ryb20gd2FzIGFscmVhZHkgbW91bnRlZCBpdCBtYXkgY2F1c2UgYSBjb21wbGV0ZQorc3lzdGVtIGhhbmcuIERvIG5vdCB1c2UgdGhlIHNvdW5kIGNhcmQgaWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUuCitJZiB5b3UgZG8gdXNlIHRoZSBzb3VuZCBjYXJkIGl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBsb2FkCit0aGUgbWFkMTYgZHJpdmVyICh1c2UgIm1vZHByb2JlIG1hZDE2IiB0byBwcmV2ZW50IGF1dG8tdW5sb2FkaW5nKQorYmVmb3JlIHRoZSBjZHJvbSBpcyBhY2Nlc3NlZCB0aGUgZmlyc3QgdGltZS4KKworVXNpbmcgdGhlIHNvdW5kIGRyaXZlciBidWlsdC1pbiB0byB0aGUga2VybmVsIG1heSBoZWxwIGhlcmUsIGJ1dC4uLgorTW9zdCBuZXcgc3lzdGVtcyBoYXZlIGEgUG5QIEJJT1MgYW5kIGFsc28gdHdvIElERSBjb250cm9sbGVycy4KK1RoZSBJREUgY29udHJvbGxlciBvbiB0aGUgc291bmQgY2FyZCBtYXkgYmUgbmVlZGVkIG9ubHkgb24gb2xkZXIKK3N5c3RlbXMgKHdoaWNoIGhhdmUgb25seSBvbmUgSURFIGNvbnRyb2xsZXIpIGJ1dCB0aGVzZSBzeXN0ZW1zCithbHNvIGRvIG5vdCBoYXZlIGEgUG5QIEJJT1MgLSByZXF1aXJpbmcgaXNhcG5wdG9vbHMgYW5kIGEgbW9kdWxhcml6ZWQKK2RyaXZlci4KKworS25vd24gcHJvYmxlbXMKKy0tLS0tLS0tLS0tLS0tCisxLiBTZWUgdGhlIHNlY3Rpb24gb24gIkEgQ0RST00gZHJpdmUgY29ubmVjdGVkIHRvIHRoZSBzb3VuZCBjYXJkIi4KKworMi4gT24gbXkgc3lzdGVtIHRoZSBjb2RlYyBjYW5ub3QgY2FwdHVyZSBjb21wYW5kZWQgc291bmQgc2FtcGxlcy4KKyAgIChlZy4sIHJlY29yZGluZyBmcm9tIC9kZXYvYXVkaW8pLiBXaGVuIGFueSBjb21wYW5kZWQgY2FwdHVyZSBpcworICAgcmVxdWVzdGVkIEkgZ2V0IHN0ZXJlby0xNiBiaXQgc2FtcGxlcyBpbnN0ZWFkLiBQbGF5YmFjayBvZgorICAgY29tcGFuZGVkIHNhbXBsZXMgd29ya3Mgd2VsbC4gQXBwYXJlbnRseSB0aGlzIHByb2JsZW0gaXMgbm90IGNvbW1vbgorICAgdG8gYWxsIEM5MzEgYmFzZWQgY2FyZHMuIEkgZG8gbm90IGtub3cgaG93IHRvIGlkZW50aWZ5IGNhcmRzIHRoYXQKKyAgIGhhdmUgdGhpcyBwcm9ibGVtLgorCitTb3VyY2UgZm9yIGFkMTg0OF9taXhlcl9yZXJvdXRlLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKworc3RhdGljIGNoYXIgKm1peGVyX25hbWVzW1NPVU5EX01JWEVSX05SREVWSUNFU10gPQorCVNPVU5EX0RFVklDRV9MQUJFTFM7CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKKwlpbnQgdmFsLCBmcm9tLCB0bzsKKwlpbnQgaSwgZmQ7CisKKwlmZCA9IG9wZW4oIi9kZXYvbWl4ZXIiLCBPX1JEV1IpOworCWlmKGZkIDwgMCkgeworCQlwZXJyb3IoIi9kZXYvbWl4ZXIiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZm9yKGkgPSAyOyBpIDwgYXJnYzsgaSArPSAyKSB7CisJCWZyb20gPSBhdG9pKGFyZ3ZbaS0xXSk7CisJCXRvID0gYXRvaShhcmd2W2ldKTsKKworCQlpZih0byA9PSBTT1VORF9NSVhFUl9OT05FKQorCQkJZnByaW50ZihzdGRlcnIsICIlczogdHVybmluZyBvZmYgbWl4ZXIgJXNcbiIsCisJCQkJYXJndlswXSwgbWl4ZXJfbmFtZXNbdG9dKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICIlczogcmVyb3V0aW5nIG1peGVyICVzIHRvICVzXG4iLAorCQkJCWFyZ3ZbMF0sIG1peGVyX25hbWVzW2Zyb21dLCBtaXhlcl9uYW1lc1t0b10pOworCisJCXZhbCA9IGZyb20gPDwgOCB8IHRvOworCisJCWlmKGlvY3RsKGZkLCBTT1VORF9NSVhFUl9QUklWQVRFMiwgJnZhbCkpIHsKKwkJCXBlcnJvcigiQUQxODQ4IG1peGVyIHJlcm91dGUiKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BBUzE2IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUEFTMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxYjNkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BBUzE2CkBAIC0wLDAgKzEsMTYzIEBACitQcm8gQXVkaW8gU3BlY3RydW0gMTYgZm9yIDIuMy45OSBhbmQgbGF0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitieSBUaG9tYXMgTW9saW5hICh0bW9saW5hQGhvbWUuY29tKQorbGFzdCBtb2RpZmllZCAzIE1hciAyMDAxCitBY2tub3dsZWRnZW1lbnQgdG8gQXhlbCBCb2xkdCAoYm9sZHRAbWF0aC51Y3NiLmVkdSkgZm9yIHN0dWZmIHRha2VuCitmcm9tIENvbmZpZ3VyZS5oZWxwLCBSaWNjYXJkbyBGYWNjaGV0dGkgZm9yIHN0dWZmIGZyb20gUkVBRE1FLk9TUywKK2FuZCBvdGhlcnMgd2hvc2UgbmFtZXMgSSBjb3VsZCBub3QgZmluZC4KKworVGhpcyBkb2N1bWVudGF0aW9uIGlzIHJlbGV2YW50IGZvciB0aGUgUEFTMTYgZHJpdmVyIChwYXMyX2NhcmQuYyBhbmQKK2ZyaWVuZHMpIHVuZGVyIGtlcm5lbCB2ZXJzaW9uIDIuMy45OSBhbmQgbGF0ZXIuICBJZiB5b3UgYXJlCit1bmZhbWlsaWFyIHdpdGggY29uZmlndXJpbmcgc291bmQgdW5kZXIgTGludXgsIHBsZWFzZSByZWFkIHRoZQorU291bmQtSE9XVE8sIERvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbiBhbmQgb3RoZXIKK3JlbGV2YW50IGRvY3MgZmlyc3QuCisKK1RoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgcmVsZXZhbnQgaW5mb3JtYXRpb24gZnJvbSBSRUFETUUuT1NTCithbmQgbGVnYWN5IGRvY3MgZm9yIHRoZSBQcm8gQXVkaW8gU3BlY3RydW0gMTYgKFBBUzE2KToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgcGFzMl9jYXJkLmMgZHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgY2FyZHMgLS0KK1BybyBBdWRpbyBTcGVjdHJ1bSAxNiAoUEFTMTYpIGFuZCBjb21wYXRpYmxlczoKKyAgICAgICAgUHJvIEF1ZGlvIFNwZWN0cnVtIDE2CisgICAgICAgIFBybyBBdWRpbyBTdHVkaW8gMTYKKyAgICAgICAgTG9naXRlY2ggU291bmQgTWFuIDE2CisgICAgICAgIE5PVEUhIFRoZSBvcmlnaW5hbCBQcm8gQXVkaW8gU3BlY3RydW0gYXMgd2VsbCBhcyB0aGUgUEFTKyBhcmUgbm90CisgICAgICAgICAgICAgIGFuZCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KKworVGhlIHNvdW5kIGRyaXZlciBjb25maWd1cmF0aW9uIGRpYWxvZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb3VuZCBjb25maWd1cmF0aW9uIHN0YXJ0cyBieSBtYWtpbmcgc29tZSB5ZXMvbm8gcXVlc3Rpb25zLiBCZSBjYXJlZnVsCit3aGVuIGFuc3dlcmluZyB0byB0aGVzZSBxdWVzdGlvbnMgc2luY2UgYW5zd2VyaW5nIHkgdG8gYSBxdWVzdGlvbiBtYXkKK3ByZXZlbnQgc29tZSBsYXRlciBvbmVzIGZyb20gYmVpbmcgYXNrZWQuIEZvciBleGFtcGxlIGRvbid0IGFuc3dlciB5IHRvCit0aGUgcXVlc3Rpb24gYWJvdXQgKFBBUzE2KSBpZiB5b3UgZG9uJ3QgcmVhbGx5IGhhdmUgYSBQQVMxNi4gIFNvdW5kCitjb25maWd1cmF0aW9uIG1heSBhbHNvIGJlIG1hZGUgbW9kdWxhciBieSBhbnN3ZXJpbmcgbSB0byBjb25maWd1cmF0aW9uCitvcHRpb25zIHByZXNlbnRlZC4gCisKK05vdGUgYWxzbyB0aGF0IGFsbCBxdWVzdGlvbnMgbWF5IG5vdCBiZSBhc2tlZC4gVGhlIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbQorbWF5IGRpc2FibGUgc29tZSBxdWVzdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBlYXJsaWVyIGNob2ljZXMuIEl0IG1heSBhbHNvCitzZWxlY3Qgc29tZSBvcHRpb25zIGF1dG9tYXRpY2FsbHkgYXMgd2VsbC4KKworICAiUHJvQXVkaW9TcGVjdHJ1bSAxNiBzdXBwb3J0IiwKKyAgICAgICAgLSBBbnN3ZXIgJ3knX09OTFlfIGlmIHlvdSBoYXZlIGEgUHJvIEF1ZGlvIFNwZWN0cnVtIF8xNl8sCisgICAgICAgICAgUHJvIEF1ZGlvIFN0dWRpbyAxNiBvciBMb2dpdGVjaCBTb3VuZE1hbiAxNiAoYmUgc3VyZSB0aGF0CisgICAgICAgICAgeW91IHJlYWQgdGhlIGFib3ZlIGxpc3QgY29ycmVjdGx5KS4gRG9uJ3QgYW5zd2VyICd5JyBpZiB5b3UKKyAgICAgICAgICBoYXZlIHNvbWUgb3RoZXIgY2FyZCBtYWRlIGJ5IE1lZGlhIFZpc2lvbiBvciBMb2dpdGVjaCBzaW5jZSB0aGV5CisgICAgICAgICAgYXJlIG5vdCBQQVMxNiBjb21wYXRpYmxlLgorICAgICAgICAgIE5PVEUhIFNpbmNlIDMuNS1iZXRhMTAgeW91IG5lZWQgdG8gZW5hYmxlIFNCIHN1cHBvcnQgKG5leHQgcXVlc3Rpb24pCisgICAgICAgICAgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBTQiBlbXVsYXRpb24gb2YgUEFTMTYuIEl0J3MgYWxzbyBwb3NzaWJsZSB0bworICAgICAgICAgIHRoZSBlbXVsYXRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGEgdHJ1ZSBTQiBjYXJkIHRvZ2V0aGVyIHdpdGggUEFTMTYKKyAgICAgICAgICAodGhlcmUgaXMgYW5vdGhlciBxdWVzdGlvbiBhYm91dCB0aGlzIHRoYXQgaXMgYXNrZWQgbGF0ZXIpLgorCisgICJHZW5lcmljIE9QTDIvT1BMMyBGTSBzeW50aGVzaXplciBzdXBwb3J0IiwKKyAgICAgICAgLSBBbnN3ZXIgJ3knIGlmIHlvdXIgY2FyZCBoYXMgYSBGTSBjaGlwIG1hZGUgYnkgWWFtYWhhIChPUEwyL09QTDMvT1BMNCkuCisJICBUaGUgUEFTMTYgaGFzIGFuIE9QTDMtY29tcGF0aWJsZSBGTSBjaGlwLgorCitXaXRoIFBBUzE2IHlvdSBjYW4gdXNlIHR3byBhdWRpbyBkZXZpY2UgZmlsZXMgYXQgdGhlIHNhbWUgdGltZS4gL2Rldi9kc3AgKGFuZAorL2Rldi9hdWRpbykgaXMgY29ubmVjdGVkIHRvIHRoZSA4LzE2IGJpdCBuYXRpdmUgY29kZWMgYW5kIHRoZSAvZGV2L2RzcDEgKGFuZAorL2Rldi9hdWRpbzEpIGlzIGNvbm5lY3RlZCB0byB0aGUgU0IgZW11bGF0aW9uICg4IGJpdCBtb25vIG9ubHkpLgorCisKK1RoZSBuZXcgc3R1ZmYgZm9yIDIuMy45OSBhbmQgbGF0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZyb20gRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscAorYXJlIHJlbGV2YW50IHRvIGNvbmZpZ3VyaW5nIHRoZSBQQVMxNjoKKworU291bmQgY2FyZCBzdXBwb3J0CitDT05GSUdfU09VTkQKKyAgSWYgeW91IGhhdmUgYSBzb3VuZCBjYXJkIGluIHlvdXIgY29tcHV0ZXIsIGkuZS4gaWYgaXQgY2FuIHNheSBtb3JlCisgIHRoYW4gYW4gb2NjYXNpb25hbCBiZWVwLCBzYXkgWS4gQmUgc3VyZSB0byBoYXZlIGFsbCB0aGUgaW5mb3JtYXRpb24KKyAgYWJvdXQgeW91ciBzb3VuZCBjYXJkIGFuZCBpdHMgY29uZmlndXJhdGlvbiBkb3duIChJL08gcG9ydCwKKyAgaW50ZXJydXB0IGFuZCBETUEgY2hhbm5lbCksIGJlY2F1c2UgeW91IHdpbGwgYmUgYXNrZWQgZm9yIGl0LgorCisgIFlvdSB3YW50IHRvIHJlYWQgdGhlIFNvdW5kLUhPV1RPLCBhdmFpbGFibGUgZnJvbQorICBodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0byAuIEdlbmVyYWwgaW5mb3JtYXRpb24KKyAgYWJvdXQgdGhlIG1vZHVsYXIgc291bmQgc3lzdGVtIGlzIGNvbnRhaW5lZCBpbiB0aGUgZmlsZXMKKyAgRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uLiBUaGUgZmlsZQorICBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuT1NTIGNvbnRhaW5zIHNvbWUgc2xpZ2h0bHkgb3V0ZGF0ZWQgYnV0CisgIHN0aWxsIHVzZWZ1bCBpbmZvcm1hdGlvbiBhcyB3ZWxsLgorCitPU1Mgc291bmQgbW9kdWxlcworQ09ORklHX1NPVU5EX09TUworICBPU1MgaXMgdGhlIE9wZW4gU291bmQgU3lzdGVtIHN1aXRlIG9mIHNvdW5kIGNhcmQgZHJpdmVycy4gVGhleSBtYWtlCisgIHNvdW5kIHByb2dyYW1taW5nIGVhc2llciBzaW5jZSB0aGV5IHByb3ZpZGUgYSBjb21tb24gQVBJLiBTYXkgWSBvciBNCisgIGhlcmUgKHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc291bmQubykgaWYgeW91IGhhdmVuJ3QgZm91bmQgYQorICBkcml2ZXIgZm9yIHlvdXIgc291bmQgY2FyZCBhYm92ZSwgdGhlbiBwaWNrIHlvdXIgZHJpdmVyIGZyb20gdGhlCisgIGxpc3QgYmVsb3cuCisKK1BlcnNpc3RlbnQgRE1BIGJ1ZmZlcnMKK0NPTkZJR19TT1VORF9ETUFQCisgIExpbnV4IGNhbiBvZnRlbiBoYXZlIHByb2JsZW1zIGFsbG9jYXRpbmcgRE1BIGJ1ZmZlcnMgZm9yIElTQSBzb3VuZAorICBjYXJkcyBvbiBtYWNoaW5lcyB3aXRoIG1vcmUgdGhhbiAxNk1CIG9mIFJBTS4gVGhpcyBpcyBiZWNhdXNlIElTQQorICBETUEgYnVmZmVycyBtdXN0IGV4aXN0IGJlbG93IHRoZSAxNk1CIGJvdW5kYXJ5IGFuZCBpdCBpcyBxdWl0ZQorICBwb3NzaWJsZSB0aGF0IGEgbGFyZ2UgZW5vdWdoIGZyZWUgYmxvY2sgaW4gdGhpcyByZWdpb24gY2Fubm90IGJlCisgIGZvdW5kIGFmdGVyIHRoZSBtYWNoaW5lIGhhcyBiZWVuIHJ1bm5pbmcgZm9yIGEgd2hpbGUuIElmIHlvdSBzYXkgWQorICBoZXJlIHRoZSBETUEgYnVmZmVycyAoNjRLYikgd2lsbCBiZSBhbGxvY2F0ZWQgYXQgYm9vdCB0aW1lIGFuZCBrZXB0CisgIHVudGlsIHRoZSBzaHV0ZG93bi4gVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgaWYgeW91IHNhaWQgWSB0bworICAiT1NTIHNvdW5kIG1vZHVsZXMiLCBhYm92ZS4gSWYgeW91IHNhaWQgTSB0byAiT1NTIHNvdW5kIG1vZHVsZXMiCisgIHRoZW4geW91IGNhbiBnZXQgdGhlIHBlcnNpc3RlbnQgRE1BIGJ1ZmZlciBmdW5jdGlvbmFsaXR5IGJ5IHBhc3NpbmcKKyAgdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudCAiZG1hYnVmPTEiIHRvIHRoZSBzb3VuZC5vIG1vZHVsZS4KKworICBTYXkgeSBoZXJlIGZvciBQQVMxNi4KKworUHJvQXVkaW9TcGVjdHJ1bSAxNiBzdXBwb3J0CitDT05GSUdfU09VTkRfUEFTCisgIEFuc3dlciBZIG9ubHkgaWYgeW91IGhhdmUgYSBQcm8gQXVkaW8gU3BlY3RydW0gMTYsIFByb0F1ZGlvIFN0dWRpbworICAxNiBvciBMb2dpdGVjaCBTb3VuZE1hbiAxNiBzb3VuZCBjYXJkLiBEb24ndCBhbnN3ZXIgWSBpZiB5b3UgaGF2ZQorICBzb21lIG90aGVyIGNhcmQgbWFkZSBieSBNZWRpYSBWaXNpb24gb3IgTG9naXRlY2ggc2luY2UgdGhleSBhcmUgbm90CisgIFBBUzE2IGNvbXBhdGlibGUuICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGVuYWJsZSB0aGUgIHNlcGFyYXRlCisgIFNvdW5kIEJsYXN0ZXIgc3VwcG9ydDsgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIFBBUyBkcml2ZXIuCisKKyAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAorICAicGFzMj08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8c2Jpbz4sPHNiaXJxPiw8c2JkbWE+LDxzYmRtYTI+CisgIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorCitGTSBTeW50aGVzaXplciAoWU0zODEyL09QTC0zKSBzdXBwb3J0CitDT05GSUdfU09VTkRfWU0zODEyCisgIEFuc3dlciBZIGlmIHlvdXIgY2FyZCBoYXMgYSBGTSBjaGlwIG1hZGUgYnkgWWFtYWhhIChPUEwyL09QTDMvT1BMNCkuCisgIEFuc3dlcmluZyBZIGlzIHVzdWFsbHkgYSBzYWZlIGFuZCByZWNvbW1lbmRlZCBjaG9pY2UsIGhvd2V2ZXIgc29tZQorICBjYXJkcyBtYXkgaGF2ZSBzb2Z0d2FyZSAoVFNSKSBGTSBlbXVsYXRpb24uIEVuYWJsaW5nIEZNIHN1cHBvcnQgd2l0aAorICB0aGVzZSBjYXJkcyBtYXkgY2F1c2UgdHJvdWJsZSAoSSBkb24ndCBjdXJyZW50bHkga25vdyBvZiBhbnkgc3VjaAorICBjYXJkcywgaG93ZXZlcikuCisgIFBsZWFzZSByZWFkIHRoZSBmaWxlIERvY3VtZW50YXRpb24vc291bmQvb3NzL09QTDMgaWYgeW91ciBjYXJkIGhhcyBhbgorICBPUEwzIGNoaXAuCisgIElmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIgaW50byB0aGUga2VybmVsLCB5b3UgaGF2ZSB0byBhZGQKKyAgIm9wbDM9PGlvPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKKyAgSWYgeW91IGNvbXBpbGUgeW91ciBkcml2ZXJzIGludG8gdGhlIGtlcm5lbCwgeW91IE1VU1QgY29uZmlndXJlIAorICBPUEwzIHN1cHBvcnQgYXMgYSBtb2R1bGUgZm9yIFBBUzE2IHN1cHBvcnQgdG8gd29yayBwcm9wZXJseS4KKyAgWW91IGNhbiB0aGVuIGdldCBPUEwzIGZ1bmN0aW9uYWxpdHkgYnkgaXNzdWluZyB0aGUgY29tbWFuZDoKKyAgaW5zbW9kIG9wbDMKKyAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGVpdGhlciBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIAorICAvZXRjL21vZHByb2JlLmNvbmY6CisgIG9wdGlvbnMgb3BsMyBpbz0weDM4OAorICBvciBlbHNlIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gL2V0Yy9saWxvLmNvbmY6CisgIG9wbDM9MHgzODgKKworCitFWEFNUExFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVG8gdXNlIHRoZSBQQVMxNiBpbiBteSBjb21wdXRlciBJIGhhdmUgZW5hYmxlZCB0aGUgZm9sbG93aW5nIHNvdW5kCitjb25maWd1cmF0aW9uIG9wdGlvbnM6CisKK0NPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTPXkKK0NPTkZJR19TT1VORF9UUkFDRUlOSVQ9eQorQ09ORklHX1NPVU5EX0RNQVA9eQorQ09ORklHX1NPVU5EX1BBUz15CitDT05GSUdfU09VTkRfU0I9bgorQ09ORklHX1NPVU5EX1lNMzgxMj1tCisKK0kgaGF2ZSBhbHNvIGluY2x1ZGVkIHRoZSBmb2xsb3dpbmcgYXBwZW5kIGxpbmUgaW4gL2V0Yy9saWxvLmNvbmY6CithcHBlbmQ9InBhczI9MHgzODgsMTAsMywtMSwweDIyMCw1LDEsLTEgc2I9MHgyMjAsNSwxLC0xIG9wbDM9MHgzODgiCisKK1RoZSBpbyBhZGRyZXNzIG9mIDB4Mzg4IGlzIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvbiB0aGUgUEFTMTYuICBUaGUKK2lycSBvZiAxMCBhbmQgZG1hIG9mIDMgbWF5IG5vdCBtYXRjaCB5b3VyIGluc3RhbGxhdGlvbi4gIFRoZSBhYm92ZSAKK2NvbmZpZ3VyYXRpb24gZW5hYmxlcyBQQVMxNiwgOC1iaXQgU291bmRibGFzdGVyIGFuZCBPUEwzCitmdW5jdGlvbmFsaXR5LiAgSWYgU291bmRibGFzdGVyIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGRlc2lyZWQsIHRoZQorZm9sbG93aW5nIGxpbmUgd291bGQgYmUgYXBwcm9wcmlhdGU6CithcHBlbmQ9InBhczI9MHgzODgsMTAsMywtMSwwLC0xLC0xLC0xIG9wbDM9MHgzODgiCisKK0lmIHNvdW5kIGlzIGJ1aWx0IHRvdGFsbHkgbW9kdWxhciwgdGhlIGFib3ZlIG9wdGlvbnMgbWF5IGJlIAorc3BlY2lmaWVkIGluIC9ldGMvbW9kcHJvYmUuY29uZiBmb3IgcGFzMiwgc2IgYW5kIG9wbDMKK3Jlc3BlY3RpdmVseS4gCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9QU1MgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9QU1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3Yjk1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BTUwpAQCAtMCwwICsxLDQxIEBACitUaGUgUFNTIGNhcmRzIGFuZCBvdGhlciBFQ0hPIGJhc2VkIGNhcmRzIHByb3ZpZGUgYW4gb25ib2FyZCBEU1Agd2l0aCAKK2Rvd25sb2FkYWJsZSBwcm9ncmFtcyBhbmQgYWxzbyBoYXMgYW4gQUQxODQ4ICJNaWNyb3NvZnQgU291bmQgU3lzdGVtIiAKK2RldmljZS4gVGhlIFBTUyBkcml2ZXIgZW5hYmxlcyBNU1MgYW5kIE1QVTQwMSBtb2RlcyBvZiB0aGUgY2FyZC4gU0IgCitpcyBub3QgZW5hYmxlZCBzaW5jZSBpdCBkb2Vzbid0IHdvcmsgY29uY3VycmVudGx5IHdpdGggTVNTLiAKKworSWYgeW91IGJ1aWxkIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlIHRoZW4gdGhlIGRyaXZlciB0YWtlcyB0aGUgZm9sbG93aW5nCitwYXJhbWV0ZXJzCisKK3Bzc19pby4gCVRoZSBJL08gYmFzZSB0aGUgUFNTIGNhcmQgaXMgY29uZmlndXJlZCBhdCAobm9ybWFsbHkgMHgyMjAKKwkJb3IgMHgyNDApCisKK21zc19pbwkJVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgTWljcm9zb2Z0IFNvdW5kIFN5c3RlbSBpbnRlcmZhY2UuCisJCVRoaXMgaXMgbm9ybWFsbHkgMHg1MzAsIGJ1dCBtYXkgYmUgMHg2MDQgb3Igb3RoZXIgYWRkcmVzc2VzLgorCittc3NfaXJxCQlUaGUgaW50ZXJydXB0IGFzc2lnbmVkIHRvIHRoZSBNaWNyb3NvZnQgU291bmQgU3lzdGVtCisJCWVtdWxhdGlvbi4gSVJRJ3MgMyw1LDcsOSwxMCwxMSBhbmQgMTIgYXJlIGF2YWlsYWJsZS4gSWYgeW91CisJCWdldCBJUlEgZXJyb3JzIGJlIHN1cmUgdG8gY2hlY2sgdGhlIGludGVycnVwdCBpcyBzZXQgdG8gCisJCSJJU0EvTGVnYWN5IiBpbiB0aGUgQklPUyBvbiBtb2Rlcm4gbWFjaGluZXMuCisKK21zc19kbWEJCVRoZSBETUEgY2hhbm5lbCB1c2VkIGJ5IHRoZSBNaWNyb3NvZnQgU291bmQgU3lzdGVtLgorCQlUaGlzIGNhbiBiZSAwLCAxLCBvciAzLiBETUEgMCBpcyBub3QgYXZhaWxhYmxlIG9uIG9sZGVyIAorCQltYWNoaW5lcyBhbmQgd2lsbCBjYXVzZSBhIGNyYXNoIG9uIHRoZW0uCisKK21wdV9pbwkJVGhlIE1QVSBlbXVsYXRpb24gYmFzZSBhZGRyZXNzLiBUaGlzIHNldHMgdGhlIGJhc2Ugb2YgdGhlCisJCXN5bnRoZXNpemVyLiBJdCBpcyB0eXBpY2FsbHkgMHgzMzAgYnV0IGNhbiBiZSBhbHRlcmVkLgorCittcHVfaXJxCQlUaGUgaW50ZXJydXB0IHRvIHVzZSBmb3IgdGhlIHN5bnRoZXNpemVyLiBJdCBtdXN0IGRpZmZlcgorCQlmcm9tIHRoZSBJUlEgdXNlZCBieSB0aGUgTWljcm9zb2Z0IFNvdW5kIFN5c3RlbSBwb3J0LgorCisKK1RoZSBtcHVfaW8vbXB1X2lycSBmaWVsZHMgYXJlIG9wdGlvbmFsLiBJZiB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkIHRoZSAKK3N5bnRoZXNpemVyIHBhcnRzIGFyZSBub3QgY29uZmlndXJlZC4KKworV2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRlZCBpdCBsb29rcyBmb3IgYSBmaWxlIGNhbGxlZCAKKy9ldGMvc291bmQvcHNzX3N5bnRoLiBUaGlzIGlzIHRoZSBmaXJtd2FyZSBmaWxlIGZyb20gdGhlIERPUyBpbnN0YWxsIGRpc2tzLgorVGhpcyBmaWwgaG9sZHMgYSBnZW5lcmFsIE1JREkgZW11bGF0aW9uLiBUaGUgZmlsZSBleHBlY3RlZCBpcyBjYWxsZWQKK2dlbm1pZGkubGQgb24gbmV3ZXIgRE9TIGRyaXZlciBpbnN0YWxsIGRpc2tzIGFuZCBzeW50aC5sZCBvbiBvbGRlciBvbmVzLgorCitZb3UgY2FuIGFsc28gbG9hZCBhbHRlcm5hdGl2ZSBEU1AgYWxnb3JpdGhtcyBpbnRvIHRoZSBjYXJkIGlmIHlvdSB3aXNoLiBPbmUKK2FsdGVybmF0aXZlIGRyaXZlciBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5tcGcxMjMuZGUvCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BTUy11cGRhdGVzIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUFNTLXVwZGF0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0ZGQ3NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BTUy11cGRhdGVzCkBAIC0wLDAgKzEsODggQEAKKwlUaGlzIGZpbGUgY29udGFpbnMgbm90ZXMgZm9yIHVzZXJzIG9mIFBTUyBzb3VuZCBjYXJkcyB3aG8gd2lzaCB0byB1c2UgdGhlIAorbmV3bHkgYWRkZWQgZmVhdHVyZXMgb2YgdGhlIG5ld2VzdCB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyLgorCisJVGhlIG1ham9yIGVuaGFuY2VtZW50cyBwcmVzZW50IGluIHRoaXMgbmV3IHJldmlzaW9uIG9mIHRoaXMgZHJpdmVyIGlzIHRoZSAKK2FkZGl0aW9uIG9mIHR3byBuZXcgbW9kdWxlIHBhcmFtZXRlcnMgdGhhdCBhbGxvdyB5b3UgdG8gdGFrZSBmdWxsIGFkdmFudGFnZSBvZiAKK2FsbCB0aGUgZmVhdHVyZXMgcHJlc2VudCBvbiB5b3VyIFBTUyBzb3VuZCBjYXJkLiAgVGhlc2UgZmVhdHVyZXMgaW5jbHVkZSB0aGUgCithYmlsaXR5IHRvIGVuYWJsZSBib3RoIHRoZSBidWlsdGluIENEUk9NIGFuZCBqb3lzdGljayBwb3J0cy4KKworcHNzX2VuYWJsZV9qb3lzdGljaworCisJVGhpcyBwYXJhbWV0ZXIgaXMgYmFzaWNhbGx5IGEgZmxhZy4gIEEgMCB3aWxsIGxlYXZlIHRoZSBqb3lzdGljayBwb3J0IAorZGlzYWJsZWQsIHdoaWxlIGEgbm9uLXplcm8gdmFsdWUgd291bGQgZW5hYmxlIHRoZSBqb3lzdGljayBwb3J0LiAgVGhlIGRlZmF1bHQgCitzZXR0aW5nIGlzIHBzc19lbmFibGVfam95c3RpY2s9MCBhcyB0aGlzIGtlZXBzIHRoaXMgZHJpdmVyIGZ1bGx5IGNvbXBhdGlibGUgCit3aXRoIHN5c3RlbXMgdGhhdCB3ZXJlIHVzaW5nIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyLiAgSWYgeW91IHdpc2ggdG8gCitlbmFibGUgdGhlIGpveXN0aWNrIHBvcnQgeW91IHdpbGwgaGF2ZSB0byBhZGQgcHNzX2VuYWJsZV9qb3lzdGljaz0xIGFzIGFuIAorYXJndW1lbnQgdG8gdGhlIGRyaXZlci4gIFRvIGFjdHVhbGx5IHVzZSB0aGUgam95c3RpY2sgcG9ydCB5b3Ugd2lsbCB0aGVuIGhhdmUgCit0byBsb2FkIHRoZSBqb3lzdGljayBkcml2ZXIgaXRzZWxmLiAgSnVzdCByZW1lbWJlciB0byBsb2FkIHRoZSBqb3lzdGljayBkcml2ZXIgCitBRlRFUiB0aGUgcHNzIHNvdW5kIGRyaXZlci4KKworcHNzX2Nkcm9tX3BvcnQKKworCVRoaXMgcGFyYW1ldGVyIHRha2VzIGEgcG9ydCBhZGRyZXNzIGFzIGl0cyBwYXJhbWV0ZXIuICBBbnkgYXZhaWxhYmxlIHBvcnQgCithZGRyZXNzIGNhbiBiZSBzcGVjaWZpZWQgdG8gZW5hYmxlIHRoZSBDRFJPTSBwb3J0LCBleGNlcHQgZm9yIDB4MCBhbmQgLTEgYXMgCit0aGVzZSB2YWx1ZXMgd291bGQgbGVhdmUgdGhlIHBvcnQgZGlzYWJsZWQuICBMaWtlIHRoZSBqb3lzdGljayBwb3J0LCB0aGUgY2Ryb20gCitwb3J0IHdpbGwgcmVxdWlyZSB0aGF0IGFuIGFwcHJvcHJpYXRlIENEUk9NIGRyaXZlciBiZSBsb2FkZWQgYmVmb3JlIHlvdSBjYW4gbWFrZSAKK3VzZSBvZiB0aGUgbmV3bHkgZW5hYmxlZCBDRFJPTSBwb3J0LiAgTGlrZSB0aGUgam95c3RpY2sgcG9ydCBvcHRpb24gYWJvdmUsIAorcmVtZW1iZXIgdG8gbG9hZCB0aGUgQ0RST00gZHJpdmVyIEFGVEVSIHRoZSBwc3Mgc291bmQgZHJpdmVyLiAgV2hpbGUgaXQgbWF5IAorZGlmZmVyIG9uIHNvbWUgUFNTIHNvdW5kIGNhcmRzLCBhbGwgdGhlIFBTUyBzb3VuZCBjYXJkcyB0aGF0IEkgaGF2ZSBzZWVuIGhhdmUgYSAKK2J1aWx0aW4gV2Vhcm5lcyBDRFJPTSBwb3J0LiAgSWYgdGhpcyBpcyB0aGUgY2FzZSB3aXRoIHlvdXIgUFNTIHNvdW5kIGNhcmQgeW91IAorc2hvdWxkIGxvYWQgYXp0Y2Qgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcG9ydCBvcHRpb24gdGhhdCBtYXRjaGVzIHRoZSBwb3J0IHlvdSAKK2Fzc2lnbmVkIHRvIHRoZSBDRFJPTSBwb3J0IHdoZW4geW91IGxvYWRlZCB5b3VyIHBzcyBzb3VuZCBkcml2ZXIuICAoZXguIAorbW9kcHJvYmUgcHNzIHBzc19jZHJvbV9wb3J0PTB4MzQwICYmIG1vZHByb2JlIGF6dGNkIGF6dGNkPTB4MzQwKSAgVGhlIGRlZmF1bHQgCitzZXR0aW5nIG9mIHRoaXMgcGFyYW1ldGVyIGxlYXZlcyB0aGUgQ0RST00gcG9ydCBkaXNhYmxlZCB0byBtYWludGFpbiBmdWxsIAorY29tcGF0aWJpbGl0eSB3aXRoIHN5c3RlbXMgdXNpbmcgcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIuCisKKwlPdGhlciBvcHRpb25zIGhhdmUgYWxzbyBiZWVuIGFkZGVkIGZvciB0aGUgYWRkZWQgY29udmVuaWVuY2UgYW5kIHV0aWxpdHkgCitvZiB0aGUgdXNlci4gIFRoZXNlIG9wdGlvbnMgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIHRoaXMgZHJpdmVyIGlzIGxvYWRlZCBhcyBhIAorbW9kdWxlLgorCitwc3Nfbm9fc291bmQKKworCVRoaXMgbW9kdWxlIHBhcmFtZXRlciBpcyBhIGZsYWcgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBkcml2ZXIgdG8gCitqdXN0IGNvbmZpZ3VyZSBub24tc291bmQgY29tcG9uZW50cy4gIDAgY29uZmlndXJlcyBhbGwgY29tcG9uZW50cywgYSBub24tMCAKK3ZhbHVlIHdpbGwgb25seSBhdHRlcHQgdG8gY29uZmlndXJlIHRoZSBDRFJPTSBhbmQgam95c3RpY2sgcG9ydHMuICBUaGlzIAorcGFyYW1ldGVyIGNhbiBiZSB1c2VkIGJ5IGEgdXNlciB3aG8gb25seSB3aXNoZWQgdG8gdXNlIHRoZSBidWlsdGluIGpveXN0aWNrIAorYW5kL29yIENEUk9NIHBvcnQocykgb2YgaGlzIFBTUyBzb3VuZCBjYXJkLiAgSWYgdGhpcyBkcml2ZXIgaXMgbG9hZGVkIHdpdGggdGhpcyAKK3BhcmFtZXRlciBhbmQgd2l0aCB0aGUgcGFyYW1ldGVyIGJlbG93IHNldCB0byB0cnVlIHRoZW4gYSB1c2VyIGNhbiBzYWZlbHkgdW5sb2FkIAordGhpcyBkcml2ZXIgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgInJtbW9kIHBzcyAmJiBybW1vZCBhZDE4NDggJiYgcm1tb2QgCittcHU0MDEgJiYgcm1tb2Qgc291bmQgJiYgcm1tb2Qgc291bmRjb3JlIiBhbmQgcmV0YWluIHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgb2YgCitoaXMgQ0RST00gYW5kL29yIGpveXN0aWNrIHBvcnQocykgd2hpbGUgZ2FpbmluZyBiYWNrIHRoZSBtZW1vcnkgcHJldmlvdXNseSB1c2VkIAorYnkgdGhlIHNvdW5kIGRyaXZlcnMuICBUaGlzIGRlZmF1bHQgc2V0dGluZyBvZiB0aGlzIHBhcmFtZXRlciBpcyAwIHRvIHJldGFpbiAKK2Z1bGwgYmVoYXZpb3JhbCBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIuCisKK3Bzc19rZWVwX3NldHRpbmdzCisKKwlUaGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoZXRoZXIgeW91IHdhbnQgdGhlIGRyaXZlciB0byByZXNldCAKK2FsbCBlbXVsYXRpb25zIHdoZW5ldmVyIGl0cyB1bmxvYWRlZC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgdGhvc2Ugd2hvIGFyZSAKK3NoYXJpbmcgcmVzb3VyY2VzIChpbyBwb3J0cywgSVJRJ3MsIERNQSdzKSBiZXR3ZWVuIGRpZmZlcmVudCBJU0EgY2FyZHMuICBUaGlzIAorZmxhZyBjYW4gYWxzbyBiZSB1c2VmdWwgaW4gdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIgbWF5IHJlc2V0IGFsbCAKK2VtdWxhdGlvbnMgYnkgZGVmYXVsdCBvbiB0aGUgZHJpdmVyJ3MgdW5sb2FkaW5nIChhcyBpdCBwcm9iYWJseSBzaG91bGQpLCBzbyAKK3NwZWNpZnlpbmcgaXQgbm93IHdpbGwgZW5zdXJlIHRoYXQgYWxsIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlciB3aWxsIAorY29udGludWUgdG8gd29yayBhcyBleHBlY3RlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGlzIDEgdG8gCityZXRhaW4gZnVsbCBiZWhhdmlvcmFsIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlci4KKworcHNzX2Zpcm13YXJlCisKKwlUaGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGZpcm13YXJlIAorY29kZSBzbyB0aGF0IGEgdXNlciBjb3VsZCB0ZWxsIHRoZSBkcml2ZXIgd2hlcmUgdGhhdCBmaWxlIGlzIGxvY2F0ZWQgaW5zdGVhZCAKK29mIGhhdmluZyB0byBwdXQgaXQgaW4gYSBwcmVkZWZpbmVkIGxvY2F0aW9uIHdpdGggYSBwcmVkZWZpbmVkIG5hbWUuICBUaGUgCitkZWZhdWx0IHNldHRpbmcgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgIi9ldGMvc291bmQvcHNzX3N5bnRoIiBhcyB0aGlzIHdhcyB0aGUgCitwYXRoIGFuZCBmaWxlbmFtZSB0aGUgaGFyZGNvZGVkIHZhbHVlIGluIHRoZSBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlci4KKworRXhhbXBsZXM6CisKKyMgTm9ybWFsIFBTUyBzb3VuZCBjYXJkIHN5c3RlbSwgbG9hZGluZyBvZiBkcml2ZXJzLgorIyBTaG91bGQgYmUgc3BlY2lmaWVkIGluIGFuIHJjIGZpbGUgKGV4LiBTbGFja3dhcmUgdXNlcyAvZXRjL3JjLmQvcmMubW9kdWxlcykuCisKKy9zYmluL21vZHByb2JlIHBzcyBwc3NfaW89MHgyMjAgbXB1X2lvPTB4MzM4IG1wdV9pcnE9OSBtc3NfaW89MHg1MzAgbXNzX2lycT0xMCBtc3NfZG1hPTEgcHNzX2Nkcm9tX3BvcnQ9MHgzNDAgcHNzX2VuYWJsZV9qb3lzdGljaz0xCisvc2Jpbi9tb2Rwcm9iZSBhenRjZCBhenRjZD0weDM0MAorL3NiaW4vbW9kcHJvYmUgam95c3RpY2sKKworIyBTeXN0ZW0gdXNpbmcgdGhlIFBTUyBzb3VuZCBjYXJkIGp1c3QgZm9yIGl0cyBDRFJPTSBhbmQgam95c3RpY2sgcG9ydHMuCisjIFNob3VsZCBiZSBzcGVjaWZpZWQgaW4gYW4gcmMgZmlsZSAoZXguIFNsYWNrd2FyZSB1c2VzIC9ldGMvcmMuZC9yYy5tb2R1bGVzKS4KKworL3NiaW4vbW9kcHJvYmUgcHNzIHBzc19pbz0weDIyMCBwc3NfY2Ryb21fcG9ydD0weDM0MCBwc3NfZW5hYmxlX2pveXN0aWNrPTEgcHNzX25vX3NvdW5kPTEKKy9zYmluL3JtbW9kIHBzcyAmJiAvc2Jpbi9ybW1vZCBhZDE4NDggJiYgL3NiaW4vcm1tb2QgbXB1NDAxICYmIC9zYmluL3JtbW9kIHNvdW5kICYmIC9zYmluL3JtbW9kIHNvdW5kY29yZSAgIyBUaGlzIGxpbmUgbm90IG5lZWRlZCwgYnV0IHNhdmVzIG1lbW9yeS4KKy9zYmluL21vZHByb2JlIGF6dGNkIGF6dGNkPTB4MzQwCisvc2Jpbi9tb2Rwcm9iZSBqb3lzdGljawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLk9TUyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5PU1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0MmIwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5PU1MKQEAgLTAsMCArMSwxNDU2IEBACitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgaXMgYSBjb2xsZWN0aW9uIG9mIGFsbCB0aGUgb2xkIFJlYWRtZSBmaWxlcyBkaXN0cmlidXRlZCB3aXRoCitPU1MvTGl0ZSBieSBIYW5udSBTYXZvbGFpbmVuLiBTaW5jZSB0aGUgbmV3IExpbnV4IHNvdW5kIGRyaXZlciBpcyBmb3VuZGVkCitvbiBpdCBJIHRoaW5rIHRoZXNlIGluZm9ybWF0aW9uIG1heSBzdGlsbCBiZSBpbnRlcmVzdGluZyBmb3IgdXNlcnMgdGhhdAoraGF2ZSB0byBjb25maWd1cmUgdGhlaXIgc291bmQgc3lzdGVtLgorCitCZSB3YXJuZWQ6IEFsYW4gQ294IGlzIHRoZSBjdXJyZW50IG1haW50YWluZXIgb2YgdGhlIExpbnV4IHNvdW5kIGRyaXZlciBzbyBpZgoreW91IGhhdmUgcHJvYmxlbXMgd2l0aCBpdCwgcGxlYXNlIGNvbnRhY3QgaGltIG9yIHRoZSBjdXJyZW50IGRldmljZS1zcGVjaWZpYworZHJpdmVyIG1haW50YWluZXIgKGUuZy4gZm9yIGFlZHNwMTYgc3BlY2lmaWMgcHJvYmxlbXMgY29udGFjdCBtZSkuIElmIHlvdSBoYXZlCitwYXRjaGVzLCBjb250cmlidXRpb25zIG9yIHN1Z2dlc3Rpb25zIHNlbmQgdGhlbSB0byBBbGFuOiBJJ20gc3VyZSB0aGV5IGFyZQord2VsY29tZS4KKworSW4gdGhpcyBkb2N1bWVudCB5b3Ugd2lsbCBmaW5kIGEgbG90IG9mIHJlZmVyZW5jZXMgYWJvdXQgT1NTL0xpdGUgb3Igb3NzZnJlZToKK3RoZXkgYXJlIGdvbmUgZm9yZXZlci4gS2VlcGluZyB0aGlzIGluIG1pbmQgYW5kIHdpdGggYSBncmFpbiBvZiBzYWx0IHRoaXMKK2RvY3VtZW50IGNhbiBiZSBzdGlsbCBpbnRlcmVzdGluZyBhbmQgdmVyeSBoZWxwZnVsLgorCitbIEZpbGUgZWRpdGVkIDE3LjAxLjE5OTkgLSBSaWNjYXJkbyBGYWNjaGV0dGkgXQorWyBFZGl0ZWQgbWlyb1NPVU5EIHNlY3Rpb24gMTkuMDQuMjAwMSAtIFJvYmVydCBTaWVtZXIgXQorCitPU1MvRnJlZSB2ZXJzaW9uIDMuOCByZWxlYXNlIG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BsZWFzZSByZWFkIHRoZSBTT1VORC1IT1dUTyAoYXZhaWxhYmxlIGZyb20gc3Vuc2l0ZS51bmMuZWR1IGFuZCBvdGhlciBMaW51eCBGVFAgCitzaXRlcykuIEl0IGdpdmVzIGluc3RydWN0aW9ucyBhYm91dCB1c2luZyBzb3VuZCB3aXRoIExpbnV4LiBJdCdzIGJpdCBvdXQgb2YKK2RhdGUgYnV0IHN0aWxsIHZlcnkgdXNlZnVsLiBJbmZvcm1hdGlvbiBhYm91dCBidWcgZml4ZXMgYW5kIHN1Y2ggdGhpbmdzCitpcyBhdmFpbGFibGUgZnJvbSB0aGUgd2ViIHBhZ2UgKHNlZSBhYm92ZSkuCisKK1BsZWFzZSBjaGVjayBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vcGd1aWRlIGZvciBtb3JlIGluZm8gYWJvdXQgcHJvZ3JhbW1pbmcKK3dpdGggT1NTIEFQSS4KKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLSAgVEhJUyBWRVJTSU9OIF9fX19SRVFVSVJFU19fX18gTGludXggMi4xLjU3IE9SIExBVEVSLgorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQYWNrYWdlcyAic25kLXV0aWwtMy44LnRhci5neiIgYW5kICJzbmQtZGF0YS0wLjEudGFyLloiCitjb250YWluIHVzZWZ1bCB1dGlsaXRpZXMgdG8gYmUgdXNlZCB3aXRoIHRoaXMgZHJpdmVyLgorU2VlIGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlL2dldHRpbmcuaHRtbCBmb3IKK2Rvd25sb2FkIGluc3RydWN0aW9ucy4KKworSWYgeW91IGFyZSBsb29raW5nIGZvciB0aGUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucywgcGxlYXNlCitsb29rIGZvcndhcmQgaW50byB0aGlzIGRvY3VtZW50LgorCitTdXBwb3J0ZWQgc291bmQgY2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgYmVsb3cuCisKK0NvbnRyaWJ1dG9ycworLS0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGNvbnRhaW5zIGNvZGUgYnkgc2V2ZXJhbCBjb250cmlidXRvcnMuIEluIGFkZGl0aW9uIHNldmVyYWwgb3RoZXIKK3BlcnNvbnMgaGF2ZSBnaXZlbiB1c2VmdWwgc3VnZ2VzdGlvbnMuIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIG1ham9yCitjb250cmlidXRvcnMuIChJIGNvdWxkIGhhdmUgZm9yZ290dGVuIHNvbWUgbmFtZXMuKQorCisJQ3JhaWcgTWV0egkxLzIgb2YgdGhlIFBBUzE2IE1peGVyIGFuZCBQQ00gc3VwcG9ydAorCVJvYiBIb29mdAlWb2x1bWUgY29tcHV0YXRpb24gYWxnb3JpdGhtIGZvciB0aGUgRk0gc3ludGguCisJTWlrYSBMaWxqZWJlcmcJdUxhdyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgcm91dGluZXMKKwlKZWZmIFRyYW50ZXIJTGludXggU09VTkQgSE9XVE8gZG9jdW1lbnQKKwlHcmVnIExlZQlWb2x1bWUgY29tcHV0YXRpb24gYWxnb3JpdGhtIGZvciB0aGUgR1VTIGFuZAorCQkJbG90cyBvZiB2YWx1YWJsZSBzdWdnZXN0aW9ucy4KKwlBbmR5IFdhcm5lcglJU0MgcG9ydAorCUppbSBMb3dlLAorCUFtYW5jaW8gSGFzdHkgSnIJRnJlZUJTRC9OZXRCU0QgcG9ydAorCUFuZGVycyBCYWVrZ2FhcmQgCUJ1ZyBodW50aW5nIGFuZCB2YWx1YWJsZSBzdWdnZXN0aW9ucy4KKwlKb2VyZyBTY2h1YmVydAlTQjE2IERTUCBzdXBwb3J0IChpbml0aWFsIHZlcnNpb24pLgorCUFuZHJldyBSb2JpbnNvbiBJbXByb3ZlbWVudHMgdG8gdGhlIEdVUyBkcml2ZXIKKwlNZWdlbnMgU0EJTUlESSByZWNvcmRpbmcgZm9yIFNCIGFuZCBTQiBQcm8gKGluaXRpYWwgdmVyc2lvbikuCisJTWlrYWVsIE5vcmRxdmlzdCAgTGluZWFyIHZvbHVtZSBzdXBwb3J0IGZvciBHVVMgYW5kCisJCQkgIG5vbmJsb2NraW5nIC9kZXYvc2VxdWVuY2VyLgorCUlhbiBIYXJ0YXMJCVNWUjQuMiBwb3J0CisJTWFya3VzIEFyb2hhcmp1CWFuZAorCVJpc3RvIEthbmtrdW5lbgkJTWFqb3IgY29udHJpYnV0aW9ucyB0byB0aGUgbWl4ZXIgc3VwcG9ydAorCQkJCW9mIEdVUyB2My43LgorCUh1bnl1ZSBZYXUJTWl4ZXIgc3VwcG9ydCBmb3IgU0cgTlggUHJvLgorCU1hcmMgSG9mZm1hbglQU1Mgc3VwcG9ydCAoaW5pdGlhbCB2ZXJzaW9uKS4KKwlSYWluZXIgVnJhbmtlbglJbml0aWFsaXphdGlvbiBmb3IgSmF6ejE2IChpbml0aWFsIHZlcnNpb24pLgorCVBldGVyIFRyYXR0bGVyCUluaXRpYWwgdmVyc2lvbiBvZiBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCBmb3IgTGludXguCisJSlJBIEdpYnNvbgkxNiBiaXQgbW9kZSBmb3IgSmF6ejE2IChpbml0aWFsIHZlcnNpb24pCisJRGF2b3IgSmFkcmlqZXZpYyBNQUQxNiBzdXBwb3J0IChpbml0aWFsIHZlcnNpb24pCisJR3JlZ29yIEhvZmZsZWl0CU1vemFydCBzdXBwb3J0IChpbml0aWFsIHZlcnNpb24pCisJUmljY2FyZG8gRmFjY2hldHRpIEF1ZGlvIEV4Y2VsIERTUCAxNiAoYWVkc3AxNikgc3VwcG9ydAorCUphbWVzIEhpZ2h0b3dlciBTcG90dGluZyBhIHRpbnkgYnV0IGltcG9ydGFudCBidWcgaW4gQ1M0MjN4IHN1cHBvcnQuCisJRGVuaXMgU2FibGljCU9QVGkgODJDOTI0IHNwZWNpZmljIGVuaGFuY2VtZW50cyAobm9uIFBuUCBtb2RlKQorCVRpbSBNYWNLZW56aWUJRnVsbCBkdXBsZXggc3VwcG9ydCBmb3IgT1BUaSA4MkM5MzAuCisJCisJUGxlYXNlIGxvb2sgYXQgbG93bGV2ZWwvUkVBRE1FIGZvciBtb3JlIGNvbnRyaWJ1dG9ycy4KKworVGhlcmUgYXJlIHByb2JhYmx5IG1hbnkgb3RoZXIgbmFtZXMgbWlzc2luZy4gSWYgeW91IGhhdmUgc2VudCBtZSBzb21lCitwYXRjaGVzIGFuZCB5b3VyIG5hbWUgaXMgbm90IGluIHRoZSBhYm92ZSBsaXN0LCBwbGVhc2UgaW5mb3JtIG1lLgorCitTZW5kaW5nIHlvdXIgY29udHJpYnV0aW9ucyBvciBwYXRjaGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IG9mIGFsbCBpdCdzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBjb250YWN0IG1lIGJlZm9yZSBzZW5kaW5nIGFueXRoaW5nCitvciBiZWZvcmUgZXZlbiBzdGFydGluZyB0byBkbyBhbnkgd29yay4gVGVsbCBtZSB3aGF0IHlvdSBzdWdnZXN0IHRvIGJlCitjaGFuZ2VkIG9yIHdoYXQgeW91IGhhdmUgcGxhbm5lZCB0byBkby4gQWxzbyBlbnN1cmUgeW91IGFyZSB1c2luZyB0aGUKK3ZlcnkgbGF0ZXN0IChkZXZlbG9wbWVudCkgdmVyc2lvbiBvZiBPU1MvRnJlZSBzaW5jZSB0aGUgY2hhbmdlIG1heSBhbHJlYWR5IGJlCitpbXBsZW1lbnRlZCB0aGVyZS4gSW4gZ2VuZXJhbCBpdCdzIGEgbWFqb3Igd2FzdGUgb2YgdGltZSB0byB0cnkgdG8gaW1wcm92ZSBhCitzZXZlcmFsIG1vbnRocyBvbGQgdmVyc2lvbi4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGNhbiBiZSBmb3VuZAorZnJvbSBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzZnJlZS4gSW4gZ2VuZXJhbCB0aGVyZSBpcyBubyBwb2ludCBpbgorc2VuZGluZyBtZSBwYXRjaGVzIHJlbGF0aXZlIHRvIHByb2R1Y3Rpb24ga2VybmVscy4KKworU3BvbnNvcnMgZXRjLgorLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGNvbXBhbmllcyBoYXZlIGdyZWF0bHkgaGVscGVkIGRldmVsb3BtZW50IG9mIHRoaXMgZHJpdmVyIAoraW4gZm9ybSBvZiBhIGZyZWUgY29weSBvZiB0aGVpciBwcm9kdWN0OgorCitOb3ZlbGwsIEluYy4JCVVuaXhXYXJlIHBlcnNvbmFsIGVkaXRpb24gKyBTREsKK1RoZSBTYW50YSBDcnV6IE9wZXJhdGlvbiwgSW5jLiAJQSBTQ08gT3BlblNlcnZlciArIFNESworRW5zb25pcSBDb3JwLAkJYSBTb3VuZFNjYXBlIGNhcmQgYW5kIGV4dGVuc2l2ZSBhbW91bnQgb2YgYXNzaXN0YW5jZQorTWVkaWFUcml4IFBlcmlwaGVyYWxzIEluYywgYSBBdWRpb1RyaXggUHJvIGNhcmQgKyBTREsKK0FjZXIsIEluYy4JCWEgcGFpciBvZiBBY2VyTWFnaWMgUzIzIGNhcmRzLgorCitJbiBhZGRpdGlvbiB0aGUgZm9sbG93aW5nIGNvbXBhbmllcyBoYXZlIHByb3ZpZGVkIG1lIHN1ZmZpY2llbnQgYW1vdW50CitvZiB0ZWNobmljYWwgaW5mb3JtYXRpb24gYXQgbGVhc3Qgc29tZSBvZiB0aGVpciBwcm9kdWN0cyAoZnJlZSBvciAkJCQpOgorCitBZHZhbmNlZCBHcmF2aXMgQ29tcHV0ZXIgVGVjaG5vbG9neSBMdGQuCitNZWRpYSBWaXNpb24gSW5jLgorQW5hbG9nIERldmljZXMgSW5jLgorTG9naXRlY2ggSW5jLgorQXp0ZWNoIExhYnMgSW5jLgorQ3J5c3RhbCBTZW1pY29uZHVjdG9yIENvcnBvcmF0aW9uLAorSW50ZWdyYXRlZCBDaXJjdWl0IFN5c3RlbXMgSW5jLgorT0FLIFRlY2hub2xvZ3kKK09QVGkKK1R1cnRsZSBCZWFjaAorbWlybworQWQgTGliIEluYy4gKCQkKQorTXVzaWMgUXVlc3QgSW5jLiAoJCQpCitDcmVhdGl2ZSBMYWJzICgkJCQpCisKK0lmIHlvdSBoYXZlIHNvbWUgcHJvYmxlbXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVhZCB0aGUgc291bmQgSE9XVE8gKHN1bnNpdGUudW5jLmVkdTovcHViL0xpbnV4L2RvY3MvLi4uPykuCitBbHNvIGxvb2sgYXQgdGhlIGhvbWUgcGFnZSAoaHR0cDovL3d3dy5vcGVuc291bmQuY29tL29zc2ZyZWUpLiBJdCBtYXkKK2NvbnRhaW4gaW5mbyBhYm91dCBzb21lIHJlY2VudCBidWcgZml4ZXMuCisKK0l0J3MgbGlrZWx5IHRoYXQgeW91IGhhdmUgc29tZSBwcm9ibGVtcyB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHNvdW5kIGRyaXZlcgorZmlyc3QgdGltZS4gU291bmQgY2FyZHMgZG9uJ3QgaGF2ZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIHNvIHRoZXJlIGFyZSBubworZ29vZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gdXNlLiBQbGVhc2UgdHJ5IHRvIHVzZSBzYW1lIEkvTywgRE1BIGFuZCBJUlEKK3ZhbHVlcyBmb3IgdGhlIHNvdW5kIGNhcmQgdGhhbiB3aXRoIERPUy4KKworSWYgeW91IGdldCBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgZHJpdmVyLCBwbGVhc2UgbG9vaworYXQgL3Zhci9hZG0vbWVzc2FnZXMgZm9yIG1vcmUgdmVyYm9zZSBlcnJvciBtZXNzYWdlLgorCisKK1RoZSBmb2xsb3dpbmcgZXJyb3JzIGFyZSBsaWtlbHkgd2l0aCAvZGV2L2RzcCBhbmQgL2Rldi9hdWRpby4KKworCS0gIk5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MiLgorCVRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIG5vIHN1aXRhYmxlIGhhcmR3YXJlIGZvciB0aGUKKwlkZXZpY2UgZmlsZSBvciB0aGUgc291bmQgZHJpdmVyIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGhvdXQgc3VwcG9ydCBmb3IKKwl0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLiBGb3IgZXhhbXBsZSAvZGV2L2F1ZGlvIGFuZCAvZGV2L2RzcCB3aWxsIG5vdAorCXdvcmsgaWYgImRpZ2l0aXplZCB2b2ljZSBzdXBwb3J0IiB3YXMgbm90IGVuYWJsZWQgZHVyaW5nICJtYWtlIGNvbmZpZyIuCisJCisJLSAiRGV2aWNlIG9yIHJlc291cmNlIGJ1c3kiLiBQcm9iYWJseSB0aGUgSVJRIChvciBETUEpIGNoYW5uZWwgCisJcmVxdWlyZWQgYnkgdGhlIHNvdW5kIGNhcmQgaXMgaW4gdXNlIGJ5IHNvbWUgb3RoZXIgZGV2aWNlL2RyaXZlci4KKworCS0gIkkvTyBlcnJvciIuIEFsbW9zdCBjZXJ0YWlubHkgKDk5JSkgaXQncyBhbiBJUlEgb3IgRE1BIGNvbmZsaWN0LgorCUxvb2sgYXQgdGhlIGtlcm5lbCBtZXNzYWdlcyBpbiAvdmFyL2FkbS9ub3RpY2UgZm9yIG1vcmUgaW5mby4KKworCS0gIkludmFsaWQgYXJndW1lbnQiLiBUaGUgYXBwbGljYXRpb24gaXMgY2FsbGluZyBpb2N0bCgpCisJd2l0aCBpbXBvc3NpYmxlIHBhcmFtZXRlcnMuIENoZWNrIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGlzCisJZm9yIHNvdW5kIGRyaXZlciB2ZXJzaW9uIDIuWCBvciBsYXRlci4KKworTGludXggaW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT09PT0KKworSU1QT1JUQU5UIQlSZWFkIHRoaXMgaWYgeW91IGFyZSBpbnN0YWxsaW5nIGEgc2VwYXJhdGVseQorCQlkaXN0cmlidXRlZCB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyLgorCisJCUNoZWNrIHRoYXQgeW91ciBrZXJuZWwgdmVyc2lvbiB3b3JrcyB3aXRoIHRoaXMKKwkJcmVsZWFzZSBvZiB0aGUgZHJpdmVyIChzZWUgUmVhZG1lKS4gQWxzbyB2ZXJpZnkKKwkJdGhhdCB5b3VyIGN1cnJlbnQga2VybmVsIHZlcnNpb24gZG9lc24ndCBoYXZlIG1vcmUKKwkJcmVjZW50IHNvdW5kIGRyaXZlciB2ZXJzaW9uIHRoYW4gdGhpcyBvbmUuIElUJ1MgSElHSExZCisJCVJFQ09NTUVOREVEIFRIQVQgWU9VIFVTRSBUSEUgU09VTkQgRFJJVkVSIFZFUlNJT04gVEhBVAorCQlJUyBESVNUUklCVVRFRCBXSVRIIEtFUk5FTCBTT1VSQ0VTLgorCistIFdoZW4gaW5zdGFsbGluZyBzZXBhcmF0ZWx5IGRpc3RyaWJ1dGVkIHNvdW5kIGRyaXZlciB5b3Ugc2hvdWxkIGZpcnN0CisgIHJlYWQgdGhlIGFib3ZlIG5vdGljZS4gVGhlbiB0cnkgdG8gZmluZCBwcm9wZXIgZGlyZWN0b3J5IHdoZXJlIGFuZCBob3cKKyAgdG8gaW5zdGFsbCB0aGUgZHJpdmVyIHNvdXJjZXMuIFlvdSBzaG91bGQgbm90IHRyeSB0byBpbnN0YWxsIGEgc2VwYXJhdGVseQorICBkaXN0cmlidXRlZCBkcml2ZXIgdmVyc2lvbiBpZiB5b3UgYXJlIG5vdCBhYmxlIHRvIGZpbmQgdGhlIHByb3BlciB3YXkKKyAgeW91cnNlbGYgKGluIHRoaXMgY2FzZSB1c2UgdGhlIHZlcnNpb24gdGhhdCBpcyBkaXN0cmlidXRlZCB3aXRoIGtlcm5lbAorICBzb3VyY2VzKS4gUmVtb3ZlIG9sZCB2ZXJzaW9uIG9mIGxpbnV4L2RyaXZlcnMvc291bmQgZGlyZWN0b3J5IGJlZm9yZQorICBpbnN0YWxsaW5nIG5ldyBmaWxlcy4KKworLSBUbyBidWlsZCB0aGUgZGV2aWNlIGZpbGVzIHlvdSBuZWVkIHRvIHJ1biB0aGUgZW5jbG9zZWQgc2hlbGwgc2NyaXB0IAorICAoc2VlIGJlbG93KS4gWW91IG5lZWQgdG8gZG8gdGhpcyBvbmx5IHdoZW4gaW5zdGFsbGluZyBzb3VuZCBkcml2ZXIKKyAgZmlyc3QgdGltZSBvciB3aGVuIHVwZ3JhZGluZyB0byBtdWNoIHJlY2VudCB2ZXJzaW9uIHRoYW4gdGhlIGVhcmxpZXIKKyAgb25lLgorCistIENvbmZpZ3VyZSBhbmQgY29tcGlsZSBMaW51eCBhcyBub3JtYWxseSAocmVtZW1iZXIgdG8gaW5jbHVkZSB0aGUKKyAgc291bmQgc3VwcG9ydCBkdXJpbmcgIm1ha2UgY29uZmlnIikuIFBsZWFzZSByZWZlciB0byBrZXJuZWwgZG9jdW1lbnRhdGlvbgorICBmb3IgaW5zdHJ1Y3Rpb25zIGFib3V0IGNvbmZpZ3VyaW5nIGFuZCBjb21waWxpbmcga2VybmVsLiBGaWxlIFJlYWRtZS5jYXJkcworICBjb250YWlucyBjYXJkIHNwZWNpZmljIGluc3RydWN0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhpcyBkcml2ZXIgZm9yCisgIHVzZSB3aXRoIHZhcmlvdXMgc291bmQgY2FyZHMuCisKK0Jvb3QgdGltZSBjb25maWd1cmF0aW9uICh1c2luZyBsaWxvIGFuZCBpbnNtb2QpIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpbmZvcm1hdGlvbiBoYXMgYmVlbiByZW1vdmVkLiBUb28gbWFueSB1c2VycyBkaWRuJ3QgYmVsaWV2ZQordGhhdCBpdCdzIHJlYWxseSBub3QgbmVjZXNzYXJ5IHRvIHVzZSB0aGlzIG1ldGhvZC4gUGxlYXNlIGxvb2sgYXQKK1JlYWRtZSBvZiBzb3VuZCBkcml2ZXIgdmVyc2lvbiAzLjAuMSBpZiB5b3Ugc3RpbGwgd2FudCB0byB1c2UgdGhpcyBtZXRob2QuCisKK1Byb2JsZW1zCistLS0tLS0tLQorCitDb21tb24gZXJyb3IgbWVzc2FnZXM6CisKKy0gL2Rldi8/Pz8/Pz8/OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LgorUnVuIHRoZSBzY3JpcHQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisKKy0gL2Rldi8/Pz8/Pz8/OiBObyBzdWNoIGRldmljZS4KK1lvdSBhcmUgbm90IHJ1bm5pbmcga2VybmVsIHdoaWNoIGNvbnRhaW5zIHRoZSBzb3VuZCBkcml2ZXIuIFdoZW4gdXNpbmcKK21vZHVsYXJpemVkIHNvdW5kIGRyaXZlciB0aGlzIGVycm9yIG1lYW5zIHRoYXQgdGhlIHNvdW5kIGRyaXZlciBpcyBub3QKK2xvYWRlZC4KKworLSAvZGV2Lz8/Pz86IE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MuCitTb3VuZCBkcml2ZXIgZGlkbid0IGRldGVjdCBzdWl0YWJsZSBjYXJkIHdoZW4gaW5pdGlhbGl6aW5nLiBQbGVhc2UgbG9vayBhdAorUmVhZG1lLmNhcmRzIGZvciBpbmZvIGFib3V0IGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgd2l0aCB5b3VyIGNhcmQuIEFsc28KK2NoZWNrIGZvciBwb3NzaWJsZSBib290IChpbnNtb2QpIHRpbWUgZXJyb3IgbWVzc2FnZXMgaW4gL3Zhci9hZG0vbWVzc2FnZXMuCisKKy0gT3RoZXIgbWVzc2FnZXMgb3IgcHJvYmxlbXMKK1BsZWFzZSBjaGVjayBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzZnJlZSBmb3IgbW9yZSBpbmZvLgorCitDb25maWd1cmluZyB2ZXJzaW9uIDMuOCAoZm9yIExpbnV4KSB3aXRoIHNvbWUgY29tbW9uIHNvdW5kIGNhcmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGNvbmZpZ3VyaW5nIHNvdW5kIGNhcmRzIHdpdGggdGhlIGZyZWV3YXJlIHZlcnNpb24gb2YKK09wZW4gU291bmQgU3lzdGVtcyAoT1NTL0ZyZWUpLiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tbWVyY2lhbCB2ZXJzaW9uCisoT1NTL0xpbnV4KSBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gaXMgYXZhaWxhYmxlIGZyb20gCitodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vbGludXguaHRtbC4gSW5mb3JtYXRpb24gcHJlc2VudGVkIGhlcmUgaXMKK25vdCB2YWxpZCBmb3IgT1NTL0xpbnV4LiAKKworSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgaG93IHRvIGNvbmZpZ3VyZSBPU1MvRnJlZQoreW91IGNhbiBkb3dubG9hZCB0aGUgZnJlZSBldmFsdWF0aW9uIHZlcnNpb24gb2YgT1NTL0xpbnV4IGZyb20gdGhlIGFib3ZlCithZGRyZXNzLiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IGl0IGNhbiBhdXRvZGV0ZWN0IHlvdXIgc291bmQgY2FyZC4gSW4gdGhpcyBjYXNlCit5b3UgY2FuIHVzZSB0aGUgaW5mb3JtYXRpb24gaW5jbHVkZWQgaW4gc291bmRvbi5sb2cgd2hlbiBjb25maWd1cmluZyBPU1MvRnJlZS4KKworCitJTVBPUlRBTlQhCVRoaXMgZG9jdW1lbnQgY292ZXJzIG9ubHkgY2FyZHMgdGhhdCB3ZXJlICJrbm93biIgd2hlbgorCQl0aGlzIGRyaXZlciB2ZXJzaW9uIHdhcyByZWxlYXNlZC4gUGxlYXNlIGxvb2sgYXQKKwkJaHR0cDovL3d3dy5vcGVuc291bmQuY29tL29zc2ZyZWUgZm9yIGluZm8gYWJvdXQKKwkJY2FyZHMgaW50cm9kdWNlZCByZWNlbnRseS4KKworCQlXaGVuIGNvbmZpZ3VyaW5nIHRoZSBzb3VuZCBkcml2ZXIsIHlvdSBzaG91bGQgY2FyZWZ1bGx5CisJCWNoZWNrIGVhY2ggc291bmQgY29uZmlndXJhdGlvbiBvcHRpb24gKHBhcnRpY3VsYXJseQorCQkiU3VwcG9ydCBmb3IgL2Rldi9kc3AgYW5kIC9kZXYvYXVkaW8iKS4gVGhlIGRlZmF1bHQgdmFsdWVzCisJCW9mZmVyZWQgYnkgdGhlc2UgcHJvZ3JhbXMgYXJlIG5vdCBuZWNlc3NhcmlseSB2YWxpZC4KKworCitUSEUgQklHR0VTVCBNSVNUQUtFUyBZT1UgQ0FOIE1BS0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBBc3N1bWluZyB0aGF0IHRoZSBjYXJkIGlzIFNvdW5kIEJsYXN0ZXIgY29tcGF0aWJsZSB3aGVuIGl0J3Mgbm90LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG51bWJlciBvbmUgbWlzdGFrZSBpcyB0byBhc3N1bWUgdGhhdCB5b3VyIGNhcmQgaXMgY29tcGF0aWJsZSB3aXRoCitTb3VuZCBCbGFzdGVyLiBPbmx5IHRoZSBjYXJkcyBtYWRlIGJ5IENyZWF0aXZlIFRlY2hub2xvZ3kgb3Igd2hpY2ggaGF2ZQorb25lIG9yIG1vcmUgY2hpcHMgbGFiZWxlZCBieSBDcmVhdGl2ZSBhcmUgU0IgY29tcGF0aWJsZS4gSW4gYWRkaXRpb24gdGhlcmUKK2FyZSBmZXcgc291bmQgY2hpcHNldHMgd2hpY2ggYXJlIFNCIGNvbXBhdGlibGUgaW4gTGludXggc3VjaCBhcyBFU1MxNjg4IG9yCitKYXp6MTYuIE5vdGUgdGhhdCBTQiBjb21wYXRpYmlsaXR5IGluIERPUy9XaW5kb3dzIGRvZXMgX05PVF8gbWVhbiBhbnl0aGluZworaW4gTGludXguIAorCitJRiBZT1UgUkVBTExZIEFSRSAxNTAlIFNVUkUgWU9VIEhBVkUgQSBTT1VORCBCTEFTVEVSIFlPVSBDQU4gU0tJUCBUSEUgUkVTVCBPRgorVEhJUyBDSEFQVEVSLgorCitGb3IgbW9zdCBvdGhlciAic3VwcG9zZWQgdG8gYmUgU0IgY29tcGF0aWJsZSIgY2FyZHMgeW91IGhhdmUgdG8gdXNlIG90aGVyCit0aGFuIFNCIGRyaXZlcnMgKHNlZSBiZWxvdykuICBJdCBpcyBwb3NzaWJsZSB0byBnZXQgbW9zdCBzb3VuZCBjYXJkcyB0byB3b3JrCitpbiBTQiBtb2RlIGJ1dCBpbiBnZW5lcmFsIGl0J3MgYSBjb21wbGV0ZSB3YXN0ZSBvZiB0aW1lLiBUaGVyZSBhcmUgc2V2ZXJhbAorcHJvYmxlbXMgd2hpY2ggeW91IHdpbGwgZW5jb3VudGVyIGJ5IHVzaW5nIFNCIG1vZGUgd2l0aCBjYXJkcyB0aGF0IGFyZSBub3QKK3RydWx5IFNCIGNvbXBhdGlibGU6CisKKy0gVGhlIFNCIGVtdWxhdGlvbiBpcyBhdCBtb3N0IFNCIFBybyAoRFNQIHZlcnNpb24gMy54KSB3aGljaCBtZWFucyB0aGF0IAoreW91IGdldCBvbmx5IDggYml0IGF1ZGlvICh0aGVyZSBpcyBhbHdheXMgYW4gYW5vdGhlciAoIm5hdGl2ZSIpIG1vZGUgd2hpY2gKK2dpdmVzIHRoZSAxNiBiaXQgY2FwYWJpbGl0eSkuIFRoZSA4IGJpdCBvbmx5IG9wZXJhdGlvbiBpcyB0aGUgcmVhc29uIHdoeQorbWFueSB1c2VycyBjbGFpbSB0aGF0IHNvdW5kIHF1YWxpdHkgaW4gTGludXggaXMgbXVjaCB3b3JzZSB0aGFuIGluIERPUy4KK0luIGFkZGl0aW9uIHNvbWUgYXBwbGljYXRpb25zIHJlcXVpcmUgMTYgYml0IG1vZGUgYW5kIHRoZXkgcHJvZHVjZSBqdXN0Citub2lzZSB3aXRoIGEgOCBiaXQgb25seSBkZXZpY2UuCistIFRoZSBjYXJkIG1heSB3b3JrIG9ubHkgaW4gc29tZSBjYXNlcyBidXQgcmVmdXNlIHRvIHdvcmsgbW9zdCBvZiB0aGUKK3RpbWUuIFRoZSBTQiBjb21wYXRpYmxlIG1vZGUgYWx3YXlzIHJlcXVpcmVzIHNwZWNpYWwgaW5pdGlhbGl6YXRpb24gd2hpY2ggaXMgCitkb25lIGJ5IHRoZSBET1MvV2luZG93cyBkcml2ZXJzLiBUaGlzIGtpbmQgb2YgY2FyZHMgd29yayBpbiBMaW51eCBhZnRlcgoreW91IGhhdmUgd2FybSBib290ZWQgaXQgYWZ0ZXIgRE9TIGJ1dCB0aGV5IGRvbid0IHdvcmsgYWZ0ZXIgY29sZCBib290CisocG93ZXIgb24gb3IgcmVzZXQpLgorLSBZb3UgZ2V0IHRoZSBmYW1vdXMgIkRNQSB0aW1lZCBvdXQiIG1lc3NhZ2VzLiBVc3VhbGx5IGFsbCBTQiBjbG9uZXMgaGF2ZQorc29mdHdhcmUgc2VsZWN0YWJsZSBJUlEgYW5kIERNQSBzZXR0aW5ncy4gSWYgdGhlIChwb3dlciBvbiBkZWZhdWx0KSB2YWx1ZXMKK2N1cnJlbnRseSB1c2VkIGJ5IHRoZSBjYXJkIGRvbid0IG1hdGNoIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRyaXZlciB5b3Ugd2lsbAorZ2V0IHRoZSBhYm92ZSBlcnJvciBtZXNzYWdlIHdoZW5ldmVyIHlvdSB0cnkgdG8gcmVjb3JkIG9yIHBsYXkuIFRoZXJlIGFyZQorZmV3IG90aGVyIHJlYXNvbnMgdG8gdGhlIERNQSB0aW1lb3V0IG1lc3NhZ2UgYnV0IHVzaW5nIHRoZSBTQiBtb2RlIHNlZW1zCit0byBiZSB0aGUgbW9zdCBjb21tb24gY2F1c2UuCisKKzIuIFRyeWluZyB0byB1c2UgYSBQblAgKFBsdWcgJiBQbGF5KSBjYXJkIGp1c3QgbGlrZSBhbiBvcmRpbmFyeSBzb3VuZCBjYXJkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQbHVnICYgUGxheSBpcyBhIHByb3RvY29sIGRlZmluZWQgYnkgSW50ZWwgYW5kIE1pY3Jvc29mdC4gSXQgbGV0cyBvcGVyYXRpbmcKK3N5c3RlbXMgdG8gZWFzaWx5IGlkZW50aWZ5IGFuZCByZWNvbmZpZ3VyZSBJL08gcG9ydHMsIElSUXMgYW5kIERNQXMgb2YgSVNBCitjYXJkcy4gVGhlIHByb2JsZW0gd2l0aCBQblAgY2FyZHMgaXMgdGhhdCB0aGUgc3RhbmRhcmQgTGludXggZG9lc24ndCBjdXJyZW50bHkKKyh2ZXJzaW9ucyAyLjEueCBhbmQgZWFybGllcikgZG9uJ3Qgc3VwcG9ydCBQblAuIFRoaXMgbWVhbnMgdGhhdCB5b3Ugd2lsbCBoYXZlCit0byB1c2Ugc29tZSBzcGVjaWFsIHRyaWNrcyAoc2VlIGxhdGVyKSB0byBnZXQgYSBQblAgY2FyZCBhbGl2ZS4gTWFueSBQblAgY2FyZHMKK3dvcmsgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgYnV0IHRoaXMgaXMgbm90IGFsd2F5cyB0aGUgY2FzZS4KKworVGhlcmUgYXJlIHNvbWV0aW1lcyBib3RoIFBuUCBhbmQgbm9uLVBuUCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBzb3VuZCBjYXJkLgorVGhlIG5vbi1QblAgdmVyc2lvbiBpcyB0aGUgb3JpZ2luYWwgbW9kZWwgd2hpY2ggdXN1YWxseSBoYXMgYmVlbiBkaXNjb250aW51ZWQKK21vcmUgdGhhbiBhbiB5ZWFyIGFnby4gVGhlIFBuUCB2ZXJzaW9uIGhhcyB0aGUgc2FtZSBuYW1lIGJ1dCB3aXRoICJQblAiCithcHBlbmRlZCB0byBpdCAoc29tZXRpbWVzIG5vdCkuIFRoaXMgY2F1c2VzIG1ham9yIGNvbmZ1c2lvbiBzaW5jZSB0aGUgbm9uLVBuUAorbW9kZWwgd29ya3Mgd2l0aCBMaW51eCBidXQgdGhlIFBuUCBvbmUgZG9lc24ndC4KKworWW91IHNob3VsZCBjYXJlZnVsbHkgY2hlY2sgaWYgIlBsdWcgJiBQbGF5IiBvciAiUG5QIiBpcyBtZW50aW9uZWQgaW4gdGhlIG5hbWUKK29mIHRoZSBjYXJkIG9yIGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIHBhY2thZ2UgdGhhdCBjYW1lIHdpdGggdGhlIGNhcmQuIAorRXZlcnl0aGluZyBkZXNjcmliZWQgaW4gdGhlIHJlc3Qgb2YgdGhpcyBkb2N1bWVudCBpcyBub3QgbmVjZXNzYXJpbHkgdmFsaWQgZm9yCitQblAgbW9kZWxzIG9mIHNvdW5kIGNhcmRzIGV2ZW4geW91IGhhdmUgbWFuYWdlZCB0byB3YWtlIHVwIHRoZSBjYXJkIHByb3Blcmx5LgorTWFueSBQblAgY2FyZHMgYXJlIHNpbXBseSB0b28gZGlmZmVyZW50IGZyb20gdGhlaXIgbm9uLVBuUCBhbmNlc3RvcnMgd2hpY2ggYXJlCitjb3ZlcmVkIGJ5IHRoaXMgZG9jdW1lbnQuCisKKworQ2FyZHMgdGhhdCBhcmUgbm90IChmdWxseSkgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU2VlIGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlIGZvciBpbmZvcm1hdGlvbiBhYm91dCBzb3VuZCBjYXJkcyAKK3RvIGJlIHN1cHBvcnRlZCBpbiBmdXR1cmUuIAorCisKK0hvdyB0byB1c2Ugc291bmQgd2l0aG91dCByZWNvbXBpbGluZyBrZXJuZWwgYW5kL29yIHNvdW5kIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGlzIGEgY29tbWVyY2lhbCBzb3VuZCBkcml2ZXIgd2hpY2ggY29tZXMgaW4gcHJlY29tcGlsZWQgZm9ybSBhbmQgZG9lc24ndAorcmVxdWlyZSByZWNvbXBpbGluZyBvZiB0aGUga2VybmVsLiBTZWUgaHR0cDovL3d3dy40RnJvbnQtdGVjaC5jb20vb3NzLmh0bWwgZm9yCittb3JlIGluZm8uCisKKworQ29uZmlndXJpbmcgUG5QIGNhcmRzCis9PT09PT09PT09PT09PT09PT09PT0KKworTmV3IHZlcnNpb25zIG9mIG1vc3Qgc291bmQgY2FyZHMgdXNlIHRoZSBzby1jYWxsZWQgSVNBIFBuUCBwcm90b2NvbCBmb3IKK3NvZnQgY29uZmlndXJpbmcgdGhlaXIgSS9PLCBJUlEsIERNQSBhbmQgc2hhcmVkIG1lbW9yeSByZXNvdXJjZXMuCitDdXJyZW50bHkgYXQgbGVhc3QgY2FyZHMgbWFkZSBieSBDcmVhdGl2ZSBUZWNobm9sb2d5IChTQjMyIGFuZCBTQjMyQVdFCitQblApLCBHcmF2aXMgKEdVUyBQblAgYW5kIEdVUyBQblAgUHJvKSwgRW5zb25pcSAoU291bmRzY2FwZSBQblApIGFuZAorQXp0ZWNoIChzb21lIFNvdW5kIEdhbGF4eSBtb2RlbHMpIHVzZSBQblAgdGVjaG5vbG9neS4gVGhlIENTNDIzMi80MjM2IGF1ZGlvCitjaGlwIGJ5IENyeXN0YWwgU2VtaWNvbmR1Y3RvciAoSW50ZWwgQXRsYW50aXMsIEhQIFBhdmlsaW9uIGFuZCBtYW55IG90aGVyCittb3RoZXJib2FyZHMpIGlzIGFsc28gYmFzZWQgb24gUG5QIHRlY2hub2xvZ3kgYnV0IHRoZXJlIGlzIGEgIm5hdGl2ZSIgZHJpdmVyCithdmFpbGFibGUgZm9yIGl0IChzZWUgaW5mb3JtYXRpb24gYWJvdXQgQ1M0MjMyIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQpLgorCitQblAgc291bmQgY2FyZHMgKGFzIHdlbGwgYXMgbW9zdCBvdGhlciBQblAgSVNBIGNhcmRzKSBhcmUgbm90IHN1cHBvcnRlZAorYnkgdGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgLiBQcm9wZXIKK3N1cHBvcnQgZm9yIHRoZW0gc2hvdWxkIGJlIHJlbGVhc2VkIGR1cmluZyA5NyBvbmNlIHRoZSBrZXJuZWwgbGV2ZWwKK1BuUCBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KKworVGhlcmUgaXMgYSBtZXRob2QgdG8gZ2V0IG1vc3Qgb2YgdGhlIFBuUCBjYXJkcyB0byB3b3JrLiBUaGUgYmFzaWMgbWV0aG9kCitpcyB0aGUgZm9sbG93aW5nOgorCisxKSBCb290IERPUyBzbyB0aGUgY2FyZCdzIERPUyBkcml2ZXJzIGhhdmUgYSBjaGFuY2UgdG8gaW5pdGlhbGl6ZSBpdC4KKzIpIF9Db2xkXyBib290IHRvIExpbnV4IGJ5IHVzaW5nICJsb2FkbGluLmV4ZSIuICBIaXR0aW5nIGN0cmwtYWx0LWRlbAord29ya3Mgd2l0aCBvbGRlciBtYWNoaW5lcyBidXQgY2F1c2VzIGEgaGFyZCByZXNldCBvZiBhbGwgY2FyZHMgb24gcmVjZW50CisoUGVudGl1bSkgbWFjaGluZXMuCiszKSBJZiB5b3UgaGF2ZSB0aGUgc291bmQgZHJpdmVyIGluIExpbnV4IGNvbmZpZ3VyZWQgcHJvcGVybHksIHRoZSBjYXJkIHNob3VsZAord29yayBub3cuICJQcm9wZXIiIG1lYW5zIHRoYXQgSS9PLCBJUlEgYW5kIERNQSBzZXR0aW5ncyBhcmUgdGhlIHNhbWUgYXMgaW4KK0RPUy4gVGhlIGhhcmQgcGFydCBpcyB0byBmaW5kIHdoaWNoIHNldHRpbmdzIHdlcmUgdXNlZC4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mCit5b3VyIGNhcmQgZm9yIG1vcmUgaW5mby4KKworV2luZG93cyA5NSBjb3VsZCB3b3JrIGFzIHdlbGwgYXMgRE9TIGJ1dCBydW5uaW5nIGxvYWRsaW4gbWF5IGJlIGRpZmZpY3VsdC4KK1Byb2JhYmx5IHlvdSBzaG91bGQgInNodXQgZG93biIgeW91ciBtYWNoaW5lIHRvIE1TLURPUyBtb2RlIGJlZm9yZSBydW5uaW5nIGl0LgorCitTb21lIG1hY2hpbmVzIGhhdmUgYSBCSU9TIHV0aWxpdHkgZm9yIHNldHRpbmcgUG5QIHJlc291cmNlcy4gVGhpcyBpcyBhIGdvb2QKK3dheSB0byBjb25maWd1cmUgc29tZSBjYXJkcy4gSW4gdGhpcyBjYXNlIHlvdSBkb24ndCBuZWVkIHRvIGJvb3QgRE9TL1dpbjk1CitiZWZvcmUgc3RhcnRpbmcgTGludXguCisKK0Fub3RoZXIgd2F5IHRvIGluaXRpYWxpemUgUG5QIGNhcmRzIHdpdGhvdXQgRE9TL1dpbjk1IGlzIGEgTGludXggYmFzZWQKK1BuUCBpc29sYXRpb24gdG9vbC4gV2hlbiB3cml0aW5nIHRoaXMgdGhlcmUgaXMgYSBwcmUgYWxwaGEgdGVzdCB2ZXJzaW9uCitvZiBzdWNoIGEgdG9vbCBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAuZGVtb24uY28udWsvcHViL3VuaXgvbGludXgvdXRpbHMuIFRoZQorZmlsZSBpcyBjYWxsZWQgaXNhcG5wdG9vbHMtKi4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHRvb2wgaXMganVzdCBhIHRlbXBvcmFyeQorc29sdXRpb24gd2hpY2ggbWF5IGJlIGluY29tcGF0aWJsZSB3aXRoIGZ1dHVyZSBrZXJuZWwgdmVyc2lvbnMgaGF2aW5nIHByb3Blcgorc3VwcG9ydCBmb3IgUG5QIGNhcmRzLiBUaGVyZSBhcmUgYnVncyBpbiBzZXR0aW5nIERNQSBjaGFubmVscyBpbiBlYXJsaWVyCit2ZXJzaW9ucyBvZiBpc2FwbnB0b29scyBzbyBhdCBsZWFzdCB2ZXJzaW9uIDEuNiBpcyByZXF1aXJlZCB3aXRoIHNvdW5kIGNhcmRzLgorCitZZXQgYW5vdGhlciB3YXkgdG8gdXNlIFBuUCBjYXJkcyBpcyB0byB1c2UgKGNvbW1lcmNpYWwpIE9TUy9MaW51eCBkcml2ZXJzLiAgU2VlCitodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vbGludXguaHRtbCBmb3IgbW9yZSBpbmZvLiBUaGlzIGlzIHByb2JhYmx5IHRoZSB3YXkgeW91CitzaG91bGQgZG8gaXQgaWYgeW91IGRvbid0IHdhbnQgdG8gc3BlbmQgdGltZSByZWNvbXBpbGluZyB0aGUga2VybmVsIGFuZCAKK3JlcXVpcmVkIHRvb2xzLgorCisKK1JlYWQgdGhpcyBiZWZvcmUgdHJ5aW5nIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgY3VycmVudGx5IG1hbnkgY2FyZHMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIuIFNvbWUgb2YgdGhlIGNhcmRzCitoYXZlIG5hdGl2ZSBzdXBwb3J0IHdoaWxlIG90aGVycyB3b3JrIHNpbmNlIHRoZXkgZW11bGF0ZSBzb21lIG90aGVyCitjYXJkICh1c3VhbGx5IFNCLCBNU1MvV1NTIGFuZC9vciBNUFU0MDEpLiBUaGUgZm9sbG93aW5nIGNhcmRzIGhhdmUgbmF0aXZlCitzdXBwb3J0IGluIHRoZSBkcml2ZXIuIERldGFpbGVkIGluc3RydWN0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlc2UgY2FyZHMKK3dpbGwgYmUgZ2l2ZW4gbGF0ZXIgaW4gdGhpcyBkb2N1bWVudC4KKworUHJvIEF1ZGlvIFNwZWN0cnVtIDE2IChQQVMxNikgYW5kIGNvbXBhdGlibGVzOgorCVBybyBBdWRpbyBTcGVjdHJ1bSAxNgorCVBybyBBdWRpbyBTdHVkaW8gMTYKKwlMb2dpdGVjaCBTb3VuZCBNYW4gMTYKKwlOT1RFISBUaGUgb3JpZ2luYWwgUHJvIEF1ZGlvIFNwZWN0cnVtIGFzIHdlbGwgYXMgdGhlIFBBUysgYXJlIG5vdAorCSAgICAgIGFuZCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KKworTWVkaWEgVmlzaW9uIEphenoxNiBiYXNlZCBjYXJkcworCVBybyBTb25pYyAxNgorCUxvZ2l0ZWNoIFNvdW5kTWFuIFdhdmUKKwkoT3RoZXIgSmF6eiBiYXNlZCBjYXJkcyBzaG91bGQgd29yayBidXQgSSBkb24ndCBoYXZlIGFueSByZXBvcnRzCisJYWJvdXQgdGhlbSkuCisKK1NvdW5kIEJsYXN0ZXJzCisJU0IgMS4wIHRvIDIuMAorCVNCIFBybworCVNCIDE2CisJU0IzMi82NC9BV0UKKwkJQ29uZmlndXJlIFNCMzIvNjQvQVdFIGp1c3QgbGlrZSBTQjE2LiBTZWUgbG93bGV2ZWwvUkVBRE1FLmF3ZQorCQlmb3IgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIHdhdmUgdGFibGUgc3ludGguCisJICAgICAgICBOT1RFISBBV0U2My9Hb2xkIGFuZCAxNi8zMi9BV0UgIlBuUCIgY2FyZHMgbmVlZCB0byBiZSBhY3RpdmF0ZWQKKwkJICAgICAgdXNpbmcgaXNhcG5wdG9vbHMgYmVmb3JlIHRoZXkgd29yayB3aXRoIE9TUy9GcmVlLgorCVNCMTYgY29tcGF0aWJsZSBjYXJkcyBieSBvdGhlciBtYW51ZmFjdHVyZXJzIHRoYW4gQ3JlYXRpdmUuCisJCVlvdSBoYXZlIGJlZW4gZm9vbGVkIHNpbmNlIHRoZXJlIGFyZSBfbm9fIFNCMTYgY29tcGF0aWJsZQorCQljYXJkcyBvbiB0aGUgbWFya2V0IChhcyBvZiBNYXkgMTk5NykuIEl0J3MgbGlrZWx5IHRoYXQgeW91ciBjYXJkCisJCWlzIGNvbXBhdGlibGUganVzdCB3aXRoIFNCIFBybyBidXQgdGhlcmUgaXMgYWxzbyBhIG5vbi1TQi0KKwkJY29tcGF0aWJsZSAxNiBiaXQgbW9kZS4gVXN1YWxseSBpdCdzIE1TUy9XU1MgYnV0IGl0IGNvdWxkIGFsc28KKwkJYmUgYSBwcm9wcmlldGFyeSBvbmUgbGlrZSBNViBKYXp6MTYgb3IgRVNTIEVTNjg4LiBPUFRpCisJCU1BRDE2IGNoaXBzIGFyZSB2ZXJ5IGNvbW1vbiBpbiBzbyBjYWxsZWQgIlNCIDE2IGJpdCBjYXJkcyIKKwkJKHRyeSB3aXRoIHRoZSBNQUQxNiBkcml2ZXIpLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSJTdXBwb3NlZCB0byBiZSBTQiBjb21wYXRpYmxlIiBjYXJkcy4KKwkJRm9yZ2V0IHRoZSBTQiBjb21wYXRpYmlsaXR5IGFuZCBjaGVjayBmb3Igb3RoZXIgYWx0ZXJuYXRpdmVzCisJCWZpcnN0LiBUaGUgb25seSBjYXJkcyB0aGF0IHdvcmsgd2l0aCB0aGUgU0IgZHJpdmVyIGluCisJCUxpbnV4IGhhdmUgYmVlbiBtYWRlIGJ5IENyZWF0aXZlIFRlY2hub2xvZ3kgKHRoZXJlIGlzIGF0IGxlYXN0CisJCW9uZSBjaGlwIG9uIHRoZSBjYXJkIHdpdGggIkNSRUFUSVZFIiBwcmludGVkIG9uIGl0KS4gVGhlCisJCW9ubHkgb3RoZXIgU0IgY29tcGF0aWJsZSBjaGlwcyBhcmUgRVNTIGFuZCBKYXp6MTYgY2hpcHMKKwkJKG1heWJlIEFMU3h4eCBjaGlwcyB0b28gYnV0IHRoZXkgcHJvYmFibHkgZG9uJ3Qgd29yaykuCisJCU1vc3Qgb3RoZXIgIjE2IGJpdCBTQiBjb21wYXRpYmxlIiBjYXJkcyBzdWNoIGFzICJPUFRpL01BRDE2IiBvcgorCQkiQ3J5c3RhbCIgYXJlIF9OT1RfIFNCIGNvbXBhdGlibGUgaW4gTGludXguCisKKwkJUHJhY3RpY2FsbHkgYWxsIHNvdW5kIGNhcmRzIGhhdmUgc29tZSBraW5kIG9mIFNCIGVtdWxhdGlvbiBtb2RlCisJCWluIGFkZGl0aW9uIHRvIHRoZWlyIG5hdGl2ZSAoMTYgYml0KSBtb2RlLiBJbiBtb3N0IGNhc2VzIHRoaXMKKwkJKDggYml0IG9ubHkpIFNCIGNvbXBhdGlibGUgbW9kZSBkb2Vzbid0IHdvcmsgd2l0aCBMaW51eC4gSWYKKwkJeW91IGdldCBpdCB3b3JraW5nIGl0IG1heSBjYXVzZSBwcm9ibGVtcyB3aXRoIGdhbWVzIGFuZAorCQlhcHBsaWNhdGlvbnMgd2hpY2ggcmVxdWlyZSAxNiBiaXQgYXVkaW8uIFNvbWUgMTYgYml0IG9ubHkKKwkJYXBwbGljYXRpb25zIGRvbid0IGNoZWNrIGlmIHRoZSBjYXJkIGFjdHVhbGx5IHN1cHBvcnRzIDE2IGJpdHMuCisJCVRoZXkganVzdCBkdW1wIDE2IGJpdCBkYXRhIHRvIGEgOCBiaXQgY2FyZCB3aGljaCBwcm9kdWNlcyBqdXN0CisJCW5vaXNlLgorCisJCUluIG1vc3QgY2FzZXMgdGhlIDE2IGJpdCBuYXRpdmUgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgTGludXguCisJCVVzZSB0aGUgU0IgbW9kZSB3aXRoICJjbG9uZXMiIG9ubHkgaWYgeW91IGRvbid0IGZpbmQgYW55dGhpbmcKKwkJYmV0dGVyIGZyb20gdGhlIHJlc3Qgb2YgdGhpcyBkb2MuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitHcmF2aXMgVWx0cmFzb3VuZCAoR1VTKQorCUdVUworCUdVUyArIHRoZSAxNiBiaXQgb3B0aW9uCisJR1VTIE1BWAorCUdVUyBBQ0UgKE5vIE1JREkgcG9ydCBhbmQgYXVkaW8gcmVjb3JkaW5nKQorCUdVUyBQblAgKHdpdGggUkFNKQorCitNUFUtNDAxCWFuZCBjb21wYXRpYmxlcworCVRoZSBkcml2ZXIgd29ya3MgYm90aCB3aXRoIHRoZSBmdWxsIChpbnRlbGxpZ2VudCBtb2RlKSBNUFUtNDAxCisJY2FyZHMgKHN1Y2ggYXMgTVBVIElQQy1UIGFuZCBNUVgtMzJNKSBhbmQgd2l0aCB0aGUgVUFSVCBvbmx5CisJZHVtYiBNSURJIHBvcnRzLiBNUFUtNDAxIGlzIGN1cnJlbnRseSB0aGUgbW9zdCBjb21tb24gTUlESQorCWludGVyZmFjZS4gTW9zdCBzb3VuZCBjYXJkcyBhcmUgY29tcGF0aWJsZSB3aXRoIGl0LiBIb3dldmVyLAorCWRvbid0IGVuYWJsZSBNUFU0MDEgbW9kZSBibGluZGx5LiBNYW55IGNhcmRzIHdpdGggbmF0aXZlIHN1cHBvcnQKKwlpbiB0aGUgZHJpdmVyIGhhdmUgdGhlaXIgb3duIE1QVTQwMSBkcml2ZXIuIEVuYWJsaW5nIHRoZSBzdGFuZGFyZCBvbmUKKwl3aWxsIGNhdXNlIGEgY29uZmxpY3Qgd2l0aCB0aGVzZSBjYXJkcy4gU28gY2hlY2sgaWYgeW91ciBjYXJkIGlzCisJaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhcmRzIGJlZm9yZSBlbmFibGluZyBNUFU0MDEuCisKK1dpbmRvd3MgU291bmQgU3lzdGVtIChNU1MvV1NTKQorCUV2ZW4gd2hlbiBNaWNyb3NvZnQgaGFzIGRpc2NvbnRpbnVlZCB0aGVpciBvd24gU291bmQgU3lzdGVtIGNhcmQgCisJdGhleSBtYW5hZ2VkIHRvIG1ha2UgaXQgYSBzdGFuZGFyZC4gTVNTIGNvbXBhdGlibGUgY2FyZHMgYXJlIGJhc2VkIG9uIAorCWEgY29kZWMgY2hpcCB3aGljaCBpcyBlYXNpbHkgYXZhaWxhYmxlIGZyb20gYXQgbGVhc3QgdHdvIG1hbnVmYWN0dXJlcnMKKwkoQUQxODQ4IGJ5IEFuYWxvZyBEZXZpY2VzIGFuZCBDUzQyMzEvQ1M0MjQ4IGJ5IENyeXN0YWwgU2VtaWNvbmR1Y3RvcikuCisJQ3VycmVudGx5IG1vc3Qgc291bmQgY2FyZHMgYXJlIGJhc2VkIG9uIG9uZSBvZiB0aGUgTVNTIGNvbXBhdGlibGUgY29kZWMKKwljaGlwcy4gVGhlIENTNDIzMSBpcyB1c2VkIGluIHRoZSBoaWdoIHF1YWxpdHkgY2FyZHMgc3VjaCBhcyBHVVMgTUFYLAorCU1lZGlhVHJpeCBBdWRpb1RyaXggUHJvIGFuZCBUQiBUcm9wZXogKEdVUyBNQVggaXMgbm90IE1TUyBjb21wYXRpYmxlKS4gCisKKwlIYXZpbmcgYSBBRDE4NDgsIENTNDI0OCBvciBDUzQyMzEgY29kZWMgY2hpcCBvbiB0aGUgY2FyZCBpcyBhIGdvb2QKKwlzaWduLiBFdmVuIGlmIHRoZSBjYXJkIGlzIG5vdCBNU1MgY29tcGF0aWJsZSwgaXQgY291bGQgYmUgZWFzeSB0byB3cml0ZQorCXN1cHBvcnQgZm9yIGl0LiBOb3RlIGFsc28gdGhhdCBtb3N0IE1TUyBjb21wYXRpYmxlIGNhcmRzCisJcmVxdWlyZSBzcGVjaWFsIGJvb3QgdGltZSBpbml0aWFsaXphdGlvbiB3aGljaCBtYXkgbm90IGJlIHByZXNlbnQKKwlpbiB0aGUgZHJpdmVyLiBBbHNvLCBzb21lIE1TUyBjb21wYXRpYmxlIGNhcmRzIGhhdmUgbmF0aXZlIHN1cHBvcnQuCisJRW5hYmxpbmcgdGhlIE1TUyBzdXBwb3J0IHdpdGggdGhlc2UgY2FyZHMgaXMgbGlrZWx5IHRvCisJY2F1c2UgYSBjb25mbGljdC4gU28gY2hlY2sgaWYgeW91ciBjYXJkIGlzIGxpc3RlZCBpbiB0aGlzIGZpbGUgYmVmb3JlCisJZW5hYmxpbmcgdGhlIE1TUyBzdXBwb3J0LgorCitZYW1haGEgRk0gc3ludGhlc2l6ZXJzIChPUEwyLCBPUEwzIChub3QgT1BMMy1TQSkgYW5kIE9QTDQpCisJTW9zdCBzb3VuZCBjYXJkcyBoYXZlIGEgRk0gc3ludGhlc2l6ZXIgY2hpcC4gVGhlIE9QTDIgaXMgYSAyCisJb3BlcmF0b3IgY2hpcCB1c2VkIGluIHRoZSBvcmlnaW5hbCBBZExpYiBjYXJkLiBDdXJyZW50bHkgaXQncyB1c2VkCisJb25seSBpbiB0aGUgY2hlYXBlc3QgKDggYml0IG1vbm8pIGNhcmRzLiBUaGUgT1BMMyBpcyBhIDQgb3BlcmF0b3IgCisJRk0gY2hpcCB3aGljaCBwcm92aWRlcyBiZXR0ZXIgc291bmQgcXVhbGl0eSBhbmQvb3IgbW9yZSBhdmFpbGFibGUgCisJdm9pY2VzIHRoYW4gdGhlIE9QTDIuIFRoZSBPUEw0IGlzIGEgbmV3IGNoaXAgdGhhdCBoYXMgYW4gT1BMMyBhbmQKKwlhIHdhdmUgdGFibGUgc3ludGhlc2l6ZXIgcGFja2VkIG9udG8gdGhlIHNhbWUgY2hpcC4gVGhlIGRyaXZlciBzdXBwb3J0cworCWp1c3QgdGhlIE9QTDMgbW9kZSBkaXJlY3RseS4gTW9zdCBjYXJkcyB3aXRoIGFuIE9QTDQgKGxpa2UKKwlTTSBXYXZlIGFuZCBBdWRpb1RyaXggUHJvKSBzdXBwb3J0IHRoZSBPUEw0IG1vZGUgdXNpbmcgTVBVNDAxCisJZW11bGF0aW9uLiBXcml0aW5nIGEgbmF0aXZlIE9QTDQgc3VwcG9ydCBpcyBkaWZmaWN1bHQKKwlzaW5jZSBZYW1haGEgZG9lc24ndCBnaXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIHNhbXBsZSBST00gY2hpcC4KKworCUVuYWJsZSB0aGUgZ2VuZXJpYyBPUEwyL09QTDMgRk0gc3ludGhlc2l6ZXIgc3VwcG9ydCBpZiB5b3VyCisJY2FyZCBoYXMgYSBGTSBjaGlwIG1hZGUgYnkgWWFtYWhhLiBEb24ndCBlbmFibGUgaXQgaWYgeW91ciBjYXJkCisJaGFzIGEgc29mdHdhcmUgKFRSUykgYmFzZWQgRk0gZW11bGF0b3IuCisKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTk9URSEgT1BMMy1TQSBpcyBkaWZmZXJlbnQgY2hpcCB0aGFuIHRoZSBvcmRpbmFyeSBPUEwzLiBJbiBhZGRpdGlvbgorCXRvIHRoZSBGTSBzeW50aCB0aGlzIGNoaXAgaGFzIGFsc28gZGlnaXRhbCBhdWRpbyAoV1NTKSBhbmQKKwlNSURJIChNUFU0MDEpIGNhcGFiaWxpdGllcy4gU3VwcG9ydCBmb3IgT1BMMy1TQSBpcyBkZXNjcmliZWQgYmVsb3cuCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZYW1haGEgT1BMMy1TQTEKKworCVlhbWFoYSBPUEwzLVNBMSAoWU1GNzAxKSBpcyBhbiBhdWRpbyBjb250cm9sbGVyIGNoaXAgdXNlZCBvbiBzb21lCisJKEludGVsKSBtb3RoZXJib2FyZHMgYW5kIG9uIGNoZWFwIHNvdW5kIGNhcmRzLiBJdCBzaG91bGQgbm90IGJlCisJY29uZnVzZWQgd2l0aCB0aGUgb3JpZ2luYWwgT1BMMyBjaGlwIChZTUYyNzgpIHdoaWNoIGlzIGVudGlyZWx5CisgICAgICAgIGRpZmZlcmVudCBjaGlwLiBPUEwzLVNBMSBoYXMgc3VwcG9ydCBmb3IgTVNTLCBNUFU0MDEgYW5kIFNCIFBybworCShub3QgdXNlZCBpbiBPU1MvRnJlZSkgaW4gYWRkaXRpb24gdG8gdGhlIE9QTDMgRk0gc3ludGguCisKKwlUaGVyZSBhcmUgYWxzbyBjaGlwcyBjYWxsZWQgT1BMMy1TQTIsIE9QTDMtU0EzLCAuLi4sIE9QTDNTQS1OLiBUaGV5CisJYXJlIFBuUCBjaGlwcyBhbmQgd2lsbCBub3Qgd29yayB3aXRoIHRoZSBPUEwzLVNBMSBkcml2ZXIuIFlvdSBzaG91bGQgCisJdXNlIHRoZSBzdGFuZGFyZCBNU1MsIE1QVTQwMSBhbmQgT1BMMyBvcHRpb25zIHdpdGggdGhlc2UgY2hpcHMgYW5kIHRvCisJYWN0aXZhdGUgdGhlIGNhcmQgdXNpbmcgaXNhcG5wdG9vbHMuCisKKzRGcm9udCBUZWNobm9sb2dpZXMgU29mdE9TUworCisJU29mdE9TUyBpcyBhIHNvZnR3YXJlIGJhc2VkIHdhdmUgdGFibGUgZW11bGF0aW9uIHdoaWNoIHdvcmtzIHdpdGgKKwlhbnkgMTYgYml0IHN0ZXJlbyBzb3VuZCBjYXJkLiBEdWUgdG8gaXRzIG5hdHVyZSBhIGZhc3QgQ1BVIGlzCisJcmVxdWlyZWQgKFAxMzMgaXMgbWluaW11bSkuIEFsdGhvdWdoIFNvZnRPU1MgZG9lcyBfbm90XyB1c2UgTU1YCisJaW5zdHJ1Y3Rpb25zIGl0IGhhcyBwcm92ZW4gb3V0IHRoYXQgcmVjZW50IHByb2Nlc3NvcnMgKHdoaWNoIGFwcGVhcgorCXRvIGhhdmUgTU1YKSBwZXJmb3JtIHNpZ25pZmljYW50bHkgYmV0dGVyIHdpdGggU29mdE9TUyB0aGFuIGVhcmxpZXIKKwlvbmVzLiBGb3IgZXhhbXBsZSBhIFAxNjZNTVggYmVhdHMgYSBQUHJvMjAwLiBTb2Z0T1NTIHNob3VsZCBub3QgYmUgdXNlZAorCW9uIDQ4NiBvciAzODYgbWFjaGluZXMuCisKKwlUaGUgYW1vdW50IG9mIENQVSBsb2FkIGNhdXNlZCBieSBTb2Z0T1NTIGNhbiBiZSBjb250cm9sbGVkIGJ5CisJc2VsZWN0aW5nIHRoZSBDT05GSUdfU09GVE9TU19SQVRFIGFuZCBDT05GSUdfU09GVE9TU19WT0lDRVMKKwlwYXJhbWV0ZXJzIHByb3Blcmx5ICh0aGV5IHdpbGwgYmUgcHJvbXB0ZWQgYnkgbWFrZSBjb25maWcpLiBJdCdzCisJcmVjb21tZW5kZWQgdG8gc2V0IENPTkZJR19TT0ZUT1NTX1ZPSUNFUyB0byAzMi4gSWYgeW91IGhhdmUgYQorCVAxNjZNTVggb3IgZmFzdGVyIChQUHJvMjAwIGlzIG5vdCBmYXN0ZXIpIHlvdSBjYW4gc2V0CisJQ09ORklHX1NPRlRPU1NfUkFURSB0byA0NDEwMCAoa0h6KS4gSG93ZXZlciB3aXRoIHNsb3dlciBzeXN0ZW1zIGl0CisJcmVjb21tZW5kZWQgdG8gdXNlIHNhbXBsaW5nIHJhdGVzIGFyb3VuZCAyMjA1MCBvciBldmVuIDE2MDAwIGtIei4KKwlTZWxlY3RpbmcgdG9vIGhpZ2ggdmFsdWVzIGZvciB0aGVzZSBwYXJhbWV0ZXJzIG1heSBoYW5nIHlvdXIKKwlzeXN0ZW0gd2hlbiBwbGF5aW5nIE1JREkgZmlsZXMgd2l0aCBoaWdodCBkZWdyZWUgb2YgcG9seXBob255CisJKG51bWJlciBvZiBjb25jdXJyZW50bHkgcGxheWluZyBub3RlcykuIEl0J3MgYWxzbyBwb3NzaWJsZSB0bworCWRlY3JlYXNlIENPTkZJR19TT0ZUT1NTX1ZPSUNFUy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UKKwloaWdoZXIgc2FtcGxpbmcgcmF0ZXMuIEhvd2V2ZXIgdXNpbmcgZmV3ZXIgdm9pY2VzIGRlY3JlYXNlcworCXBsYXliYWNrIHF1YWxpdHkgbW9yZSB0aGFuIGRlY3JlYXNpbmcgdGhlIHNhbXBsaW5nIHJhdGUuCisKKwlTb2Z0T1NTIGtlZXBzIHRoZSBzYW1wbGVzIGxvYWRlZCBvbiB0aGUgc3lzdGVtJ3MgUkFNIHNvIG11Y2ggUkFNIGlzCisJcmVxdWlyZWQuIFNvZnRPU1Mgc2hvdWxkIG5ldmVyIGJlIHVzZWQgb24gbWFjaGluZXMgd2l0aCBsZXNzIHRoYW4gMTYgTUIKKwlvZiBSQU0gc2luY2UgdGhpcyBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgKHlvdSBtYXkgYWNjaWRlbnRhbGx5IHJ1biBvdXQKKwlvZiBtZW1vcnkgd2hpY2ggcHJvYmFibHkgY3Jhc2hlcyB0aGUgbWFjaGluZSkuIAorCisJU29mdE9TUyBpbXBsZW1lbnRzIHRoZSB3YXZlIHRhYmxlIEFQSSBvcmlnaW5hbGx5IGRlc2lnbmVkIGZvciBHVVMuIEZvcgorCXRoaXMgcmVhc29uIGFsbCBhcHBsaWNhdGlvbnMgZGVzaWduZWQgZm9yIEdVUyBzaG91bGQgd29yayAoYXQgbGVhc3QKKwlhZnRlciBtaW5vciBtb2RpZmljYXRpb25zKS4gRm9yIGV4YW1wbGUgZ21vZC94Z21vZCBhbmQgcGxheW1pZGkgLWcgYXJlCisJa25vd24gdG8gd29yay4KKworCVRvIHdvcmsgU29mdE9TUyB3aWxsIHJlcXVpcmUgR1VTIGNvbXBhdGlibGUKKwlwYXRjaCBmaWxlcyB0byBiZSBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbSAoaW4gL2Rvcy91bHRyYXNuZC9taWRpKS4gWW91CisJY2FuIHVzZSB0aGUgcHVibGljIGRvbWFpbiBNSURJQSBwYXRjaHNldCBhdmFpbGFibGUgZnJvbSBzZXZlcmFsIGZ0cAorCXNpdGVzLgorCisgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCUlNUE9SVEFOVCBOT1RJQ0UhIFRoZSBvcmlnaW5hbCBwYXRjaCBzZXQgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgR3JhdmlzIAorCVVsdHJhc291bmQgY2FyZCBpcyBub3QgaW4gcHVibGljIGRvbWFpbiAoZXZlbiB0aG91Z2ggaXQncyBhdmFpbGFibGUgZnJvbQorCXNvbWUgRlRQIHNpdGVzKS4gWW91IHNob3VsZCBjb250YWN0IFZvaWNlIENyeXN0YWwgKHd3dy52b2ljZWNyeXN0YWwuY29tKQorCWlmIHlvdSBsaWtlIHRvIHVzZSB0aGVzZSBwYXRjaGVzIHdpdGggU29mdE9TUyBpbmNsdWRlZCBpbiBPU1MvRnJlZS4KKyAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1BTUyBiYXNlZCBjYXJkcyAoQUQxODQ4ICsgQURTUC0yMTE1ICsgRWNobyBFU0M2MTQgQVNJQykKKwlBbmFsb2cgRGV2aWNlcyBhbmQgRWNobyBTcGVlY2ggaGF2ZSB0b2dldGhlciBkZWZpbmVkIGEgc291bmQgY2FyZAorCWFyY2hpdGVjdHVyZSBiYXNlZCBvbiB0aGUgYWJvdmUgY2hpcHMuIFRoZSBEU1AgY2hpcCBpcyB1c2VkCisJZm9yIGVtdWxhdGlvbiBvZiBTQiBQcm8sIEZNIGFuZCBHZW5lcmFsIE1JREkvTVQzMi4KKworCVRoZXJlIGFyZSBzZXZlcmFsIGNhcmRzIGJhc2VkIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiBUaGUgbW9zdCBrbm93bgorCW9uZXMgYXJlIE9yY2hpZCBTVzMyIGFuZCBDYXJkaW5hbCBEU1AxNi4gCisKKwlUaGUgZHJpdmVyIHN1cHBvcnRzIGRvd25sb2FkaW5nIERTUCBhbGdvcml0aG1zIHRvIHRoZXNlIGNhcmRzLgorCisJTk9URSEgWW91IHdpbGwgaGF2ZSB0byB1c2UgdGhlICJvbGQiIGNvbmZpZyBzY3JpcHQgd2hlbiBjb25maWd1cmluZworCVBTUyBjYXJkcy4KKworTWVkaWFUcml4IEF1ZGlvVHJpeCBQcm8KKwlUaGUgQVRQIGNhcmQgaXMgYnVpbHQgYXJvdW5kIGEgQ1M0MjMxIGNvZGVjIGFuZCBhbiBPUEw0IHN5bnRoZXNpemVyCisJY2hpcHMuIFRoZSBPUEw0IG1vZGUgaXMgc3VwcG9ydGVkIGJ5IGEgbWljcm9jb250cm9sbGVyIHJ1bm5pbmcgYQorCUdlbmVyYWwgTUlESSBlbXVsYXRvci4gVGhlcmUgaXMgYWxzbyBhIFNCIDEuNSBjb21wYXRpYmxlIHBsYXliYWNrIG1vZGUuCisKK0Vuc29uaXEgU291bmRTY2FwZSBhbmQgY29tcGF0aWJsZXMKKwlFbnNvbmlxIGhhcyBkZXNpZ25lZCBhIHNvdW5kIGNhcmQgYXJjaGl0ZWN0dXJlIGJhc2VkIG9uIHRoZQorCU9UVE8gc3ludGhlc2l6ZXIgY2hpcCB1c2VkIGluIHRoZWlyIHByb2Zlc3Npb25hbCBNSURJIHN5bnRoZXNpemVycy4KKwlTZXZlcmFsIGNvbXBhbmllcyAoaW5jbHVkaW5nIEVuc29uaXEsIFJldmVhbCBhbmQgU3BlYSkgYXJlIHNlbGxpbmcKKwljYXJkcyBiYXNlZCBvbiB0aGlzIGFyY2hpdGVjdHVyZS4KKworCU5PVEUhIFRoZSBTb3VuZFNjYXBlIFBuUCBpcyBub3Qgc3VwcG9ydGVkIGJ5IE9TUy9GcmVlLiBFbnNvbmlxIFZJVk8gYW5kCisJVklWTzkwIGNhcmRzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIFNvdW5kc2NhcGVzIHNvIHRoZSBTb3VuZHNjYXBlCisgICAgICAgIGRyaXZlciB3aWxsIG5vdCB3b3JrIHdpdGggdGhlbS4gWW91IG1heSB3YW50IHRvIHVzZSBPU1MvTGludXggd2l0aCB0aGVzZQorICAgICAgICBjYXJkcy4KKworT1BUaSBNQUQxNiBhbmQgTW96YXJ0IGJhc2VkIGNhcmRzCisJVGhlIE1vemFydCAoT0FLIE9USS02MDEpLCBNQUQxNiAoT1BUaSA4MkM5MjgpLCBNQUQxNiBQcm8gKE9QVGkgODJDOTI5KSwKKwlPUFRpIDgyQzkyNC84MkM5MjUgKGluIF9ub25fIFBuUCBtb2RlKSBhbmQgT1BUaSA4MkM5MzAgaW50ZXJmYWNlCisJY2hpcHMgYXJlIHVzZWQgaW4gbWFueSBkaWZmZXJlbnQgc291bmQgY2FyZHMsIGluY2x1ZGluZyBzb21lCisJY2FyZHMgYnkgUmV2ZWFsIG1pcm8gYW5kIFR1cnRsZSBCZWFjaCAoVHJvcGV6KS4gVGhlIHB1cnBvc2Ugb2YgdGhlc2UKKwljaGlwcyBpcyB0byBjb25uZWN0IG90aGVyIGF1ZGlvIGNvbXBvbmVudHMgdG8gdGhlIFBDIGJ1cy4gVGhlCisJaW50ZXJmYWNlIGNoaXAgcGVyZm9ybXMgYWRkcmVzcyBkZWNvZGluZyBmb3IgdGhlIG90aGVyIGNoaXBzLgorCU5PVEUhIFRyb3BleiBQbHVzIGlzIG5vdCBNQUQxNiBidXQgQ1M0MjMyIGJhc2VkLgorCU5PVEUhIE1BRDE2IFBuUCBjYXJkcyAoODJDOTI0LCA4MkM5MjUsIDgyQzkzMSkgYXJlIG5vdCBNQUQxNiBjb21wYXRpYmxlCisJaW4gdGhlIFBuUCBtb2RlLiBZb3Ugd2lsbCBoYXZlIHRvIHVzZSB0aGVtIGluIE1TUyBtb2RlIGFmdGVyIGhhdmluZworCWluaXRpYWxpemVkIHRoZW0gdXNpbmcgaXNhcG5wdG9vbHMgb3IgRE9TLiA4MkM5MzEgcHJvYmFibHkgcmVxdWlyZXMKKwlpbml0aWFsaXphdGlvbiB1c2luZyBET1MvV2luZG93cyAocnVubmluZyBpc2FwbnB0b29scyBpcyBub3QgZW5vdWdoKS4KKwlJdCdzIHBvc3NpYmxlIHRvIHVzZSA4MkM5MzEgd2l0aCBPU1MvRnJlZSBieSBqdW1wZXJpbmcgaXQgdG8gbm9uLVBuUAorCW1vZGUgKHByb3ZpZGVkIHRoYXQgdGhlIGNhcmQgaGFzIGEganVtcGVyIGZvciB0aGlzKS4gSW4gbm9uLVBuUCBtb2RlCisJODJDOTMxIGlzIGNvbXBhdGlibGUgd2l0aCA4MkM5MzAgYW5kIHNob3VsZCB3b3JrIHdpdGggdGhlIE1BRDE2IGRyaXZlcgorCSh3aXRob3V0IG5lZWQgdG8gdXNlIGlzYXBucHRvb2xzIG9yIERPUyB0byBpbml0aWFsaXplIGl0KS4gQWxsIE9QVGkKKwljaGlwcyBhcmUgc3VwcG9ydGVkIGJ5IE9TUy9MaW51eCAoYm90aCBpbiBQblAgYW5kIG5vbi1QblAgbW9kZXMpLgorCitBdWRpbyBFeGNlbCBEU1AxNiAKKwlTdXBwb3J0IGZvciB0aGlzIGNhcmQgd2FzIHdyaXR0ZW4gYnkgUmljY2FyZG8gRmFjY2V0dGkKKwkocmljY2FyZG9AY2RjOGc1LmNkYy5wb2xpbWkuaXQpLiBUaGUgQUVEU1AxNiBkcml2ZXIgaW5jbHVkZWQgaW4KKwl0aGUgbG93bGV2ZWwvIGRpcmVjdG9yeS4gVG8gdXNlIGl0IHlvdSBzaG91bGQgZW5hYmxlIHRoZQorCSJBZGRpdGlvbmFsIGxvdyBsZXZlbCBkcml2ZXJzIiBvcHRpb24uCisKK0NyeXN0YWwgQ1M0MjMyIGFuZCBDUzQyMzYgYmFzZWQgY2FyZHMgc3VjaCBhcyBBY2VyTWFnaWMgUzIzLCBUQiBUcm9wZXogX1BsdXNfIGFuZCAKKwltYW55IFBDIG1vdGhlcmJvYXJkcyAoQ29tcGFxLCBIUCwgSW50ZWwsIC4uLikKKwlDUzQyMzIgaXMgYSBQblAgbXVsdGltZWRpYSBjaGlwIHdoaWNoIGNvbnRhaW5zIGEgQ1MzMjMxQSBjb2RlYywKKwlTQiBhbmQgTVBVNDAxIGVtdWxhdGlvbnMuIFRoZXJlIGlzIHN1cHBvcnQgZm9yIE9QTDMgdG9vLgorCVVuZm9ydHVuYXRlbHkgdGhlIE1QVTQwMSBtb2RlIGRvZXNuJ3Qgd29yayAoSSBkb24ndCBrbm93IGhvdyB0bworCWluaXRpYWxpemUgaXQpLiBDUzQyMzYgaXMgYW4gZW5oYW5jZWQgKGNvbXBhdGlibGUpIHZlcnNpb24gb2YgQ1M0MjMyLgorCU5PVEUhIERvbid0IGV2ZXIgdHJ5IHRvIHVzZSBpc2FwbnB0b29scyB3aXRoIENTNDIzMiBzaW5jZSB0aGlzIHdpbGwganVzdAorCWZyZWV6ZSB5b3VyIG1hY2hpbmUgKGR1ZSB0byBjaGlwIGJ1Z3MpLiBJZiB5b3UgaGF2ZSBwcm9ibGVtcyBpbiBnZXR0aW5nCisJQ1M0MjMyIHdvcmtpbmcgeW91IGNvdWxkIHRyeSBpbml0aWFsaXppbmcgaXQgd2l0aCBET1MgKENTNDIzMkMuRVhFKSBhbmQKKwl0aGVuIGJvb3RpbmcgTGludXggdXNpbmcgbG9hZGxpbi4gQ1M0MjMyQy5FWEUgbG9hZHMgYSBzZWNyZXQgZmlybXdhcmUKKwlwYXRjaCB3aGljaCBpcyBub3QgZG9jdW1lbnRlZCBieSBDcnlzdGFsLgorCitUdXJ0bGUgQmVhY2ggTWF1aSBhbmQgVHJvcGV6ICJjbGFzc2ljIgorCVRoaXMgZHJpdmVyIHZlcnNpb24gc3VwcG9ydHMgc2FtcGxlLCBwYXRjaCBhbmQgcHJvZ3JhbSBsb2FkaW5nIGNvbW1hbmRzCisJZGVzY3JpYmVkIGluIHRoZSBNYXVpL1Ryb3BleiBVc2VyJ3MgbWFudWFsLiAKKwlUaGVyZSBpcyBub3cgZnVsbCBpbml0aWFsaXphdGlvbiBzdXBwb3J0IHRvby4gVGhlIGF1ZGlvIHNpZGUgb2YKKwl0aGUgVHJvcGV6IGlzIGJhc2VkIG9uIHRoZSBNQUQxNiBjaGlwIChzZWUgYWJvdmUpLgorCU5PVEUhIFRyb3BleiBQbHVzIGlzIGRpZmZlcmVudCBjYXJkIHRoYW4gVHJvcGV6ICJjbGFzc2ljIiBhbmQgd2lsbCBub3QKKwl3b3JrIGZ1bGx5IGluIExpbnV4LiBZb3UgY2FuIGdldCBhdWRpbyBmZWF0dXJlcyB3b3JraW5nIGJ5IGNvbmZpZ3VyaW5nCisJdGhlIGNhcmQgYXMgYSBDUzQyMzIgYmFzZWQgY2FyZCAoYWJvdmUpLgorCisKK0p1bXBlcnMgYW5kIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU29tZSBvZiB0aGUgZWFybGllc3Qgc291bmQgY2FyZHMgd2VyZSBqdW1wZXIgY29uZmlndXJhYmxlLiBZb3UgaGF2ZSB0bworY29uZmlndXJlIHRoZSBkcml2ZXIgdXNlIEkvTywgSVJRIGFuZCBETUEgc2V0dGluZ3MKK3RoYXQgbWF0Y2ggdGhlIGp1bXBlcnMuIEp1c3QgZmV3IDggYml0IGNhcmRzIGFyZSBmdWxseSBqdW1wZXIgCitjb25maWd1cmFibGUgKFNCIDEueC8yLngsIFNCIFBybyBhbmQgY2xvbmVzKS4KK1NvbWUgY2FyZHMgbWFkZSBieSBBenRlY2ggaGF2ZSBhbiBFRVBST00gd2hpY2ggY29udGFpbnMgdGhlIAorY29uZmlnIGluZm8uIFRoZXNlIGNhcmRzIGJlaGF2ZSBtdWNoIGxpa2UgaGFyZHdhcmUganVtcGVyZWQgY2FyZHMuCisKK01vc3QgY2FyZHMgaGF2ZSBqdW1wZXIgZm9yIHRoZSBiYXNlIEkvTyBhZGRyZXNzIGJ1dCBvdGhlciBwYXJhbWV0ZXJzCithcmUgc29mdHdhcmUgY29uZmlndXJhYmxlLiBTb21ldGltZXMgdGhlcmUgYXJlIGZldyBvdGhlciBqdW1wZXJzIHRvby4KKworTGF0ZXN0IGNhcmRzIGFyZSBmdWxseSBzb2Z0d2FyZSBjb25maWd1cmFibGUgb3IgdGhleSBhcmUgUG5QIElTQQorY29tcGF0aWJsZS4gVGhlcmUgYXJlIG5vIGp1bXBlcnMgb24gdGhlIGJvYXJkLgorCitUaGUgZHJpdmVyIGhhbmRsZXMgc29mdHdhcmUgY29uZmlndXJhYmxlIGNhcmRzIGF1dG9tYXRpY2FsbHkuIEp1c3QgY29uZmlndXJlCit0aGUgZHJpdmVyIHRvIHVzZSBJL08sIElSUSBhbmQgRE1BIHNldHRpbmdzIHdoaWNoIGFyZSBrbm93biB0byB3b3JrLgorWW91IGNvdWxkIHVzdWFsbHkgdXNlIHRoZSBzYW1lIHZhbHVlcyB0aGFuIHdpdGggRE9TIGFuZC9vciBXaW5kb3dzLgorVXNpbmcgZGlmZmVyZW50IHNldHRpbmdzIGlzIHBvc3NpYmxlIGJ1dCBub3QgcmVjb21tZW5kZWQgc2luY2UgaXQgbWF5IGNhdXNlCitzb21lIHRyb3VibGUgKGZvciBleGFtcGxlIHdoZW4gd2FybSBib290aW5nIGZyb20gYW4gT1MgdG8gYW5vdGhlciBvcgord2hlbiBpbnN0YWxsaW5nIG5ldyBoYXJkd2FyZSB0byB0aGUgbWFjaGluZSkuCisKK1NvdW5kIGRyaXZlciBzZXRzIHRoZSBzb2Z0IGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIG9mIHRoZSBjYXJkIGF1dG9tYXRpY2FsbHkKK2R1cmluZyBib290LiBVc3VhbGx5IHlvdSBkb24ndCBuZWVkIHRvIHJ1biBhbnkgZXh0cmEgaW5pdGlhbGl6YXRpb24KK3Byb2dyYW1zIHdoZW4gYm9vdGluZyBMaW51eCBidXQgdGhlcmUgYXJlIHNvbWUgZXhjZXB0aW9ucy4gU2VlIHRoZQorY2FyZC1zcGVjaWZpYyBpbnN0cnVjdGlvbnMgYmVsb3cgZm9yIG1vcmUgaW5mby4KKworVGhlIGRyYXdiYWNrIG9mIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24gaXMgdGhhdCB0aGUgZHJpdmVyIG5lZWRzIHRvIGtub3cKK2hvdyB0aGUgY2FyZCBtdXN0IGJlIGluaXRpYWxpemVkLiBJdCBjYW5ub3QgaW5pdGlhbGl6ZSB1bmtub3duIGNhcmRzCitldmVuIGlmIHRoZXkgYXJlIG90aGVyd2lzZSBjb21wYXRpYmxlIHdpdGggc29tZSBvdGhlciBjYXJkcyAobGlrZSBTQiwKK01QVTQwMSBvciBXaW5kb3dzIFNvdW5kIFN5c3RlbSkuCisKKworV2hhdCBpZiB5b3VyIGNhcmQgd2FzIG5vdCBsaXN0ZWQgYWJvdmU/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZpcnN0IHRoaW5nIHRvIGRvIGlzIHRvIGxvb2sgYXQgdGhlIG1ham9yIElDIGNoaXBzIG9uIHRoZSBjYXJkLgorTWFueSBvZiB0aGUgbGF0ZXN0IHNvdW5kIGNhcmRzIGFyZSBiYXNlZCBvbiBzb21lIHN0YW5kYXJkIGNoaXBzLiBJZiB5b3UKK2FyZSBsdWNreSwgYWxsIG9mIHRoZW0gY291bGQgYmUgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuIFRoZSBtb3N0IGNvbW1vbiBvbmVzCithcmUgdGhlIE9QVGkgTUFEMTYsIE1vemFydCwgU291bmRTY2FwZSAoRW5zb25pcSkgYW5kIHRoZSBQU1MgYXJjaGl0ZWN0dXJlcworbGlzdGVkIGFib3ZlLiBBbHNvIGxvb2sgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUgZm9yIGxpc3Qgb2YgdW5zdXBwb3J0ZWQKK2NhcmRzIGFuZCB0aGUgb25lcyB3aGljaCBjb3VsZCBiZSBzdXBwb3J0ZWQgbGF0ZXIuCisKK1RoZSBsYXN0IHJlc29ydCBpcyB0byBzZW5kIF9leGFjdF8gbmFtZSBhbmQgbW9kZWwgaW5mb3JtYXRpb24gb2YgdGhlIGNhcmQKK3RvIG1lIHRvZ2V0aGVyIHdpdGggYSBsaXN0IG9mIHRoZSBtYWpvciBJQyBjaGlwcyAobWFudWZhY3R1cmVkLCBtb2RlbCkgdG8gCittZS4gSSBjb3VsZCB0aGVuIHRyeSB0byBjaGVjayBpZiB5b3VyIGNhcmQgbG9va3MgbGlrZSBzb21ldGhpbmcgZmFtaWxpYXIuCisKK1RoZXJlIGFyZSBtYW55IG1vcmUgY2FyZHMgaW4gdGhlIHdvcmxkIHRoYW4gbGlzdGVkIGFib3ZlLiBUaGUgZmlyc3QgdGhpbmcgdG8KK2RvIHdpdGggdGhlc2UgY2FyZHMgaXMgdG8gY2hlY2sgaWYgdGhleSBlbXVsYXRlIHNvbWUgb3RoZXIgY2FyZCBvciBpbnRlcmZhY2UKK3N1Y2ggYXMgU0IsIE1TUyBhbmQvb3IgTVBVNDAxLiBJbiB0aGlzIGNhc2UgdGhlcmUgaXMgYSBjaGFuY2UgdG8gZ2V0IHRoZQorY2FyZCB0byB3b3JrIGJ5IGJvb3RpbmcgRE9TIGJlZm9yZSBzdGFydGluZyBMaW51eCAoYm9vdCBET1MsIGhpdCBjdHJsLWFsdC1kZWwKK2FuZCBib290IExpbnV4IHdpdGhvdXQgaGFyZCByZXNldHRpbmcgdGhlIG1hY2hpbmUpLiBJbiB0aGlzIG1ldGhvZCB0aGUKK0RPUyBiYXNlZCBkcml2ZXIgaW5pdGlhbGl6ZXMgdGhlIGhhcmR3YXJlIHRvIHVzZSBrbm93biBJL08sIElSUSBhbmQgRE1BCitzZXR0aW5ncy4gSWYgc291bmQgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzYW1lIHNldHRpbmdzLCBldmVyeXRoaW5nCitzaG91bGQgd29yayBPSy4KKworCitDb25maWd1cmluZyBzb3VuZCBkcml2ZXIgKHdpdGggTGludXgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzb3VuZCBkcml2ZXIgaXMgY3VycmVudGx5IGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbC4gVGhlIAorZmlsZXMgYXJlIGluIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvc291bmQvLiAKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKglBTFdBWVMgVVNFIFRIRSBTT1VORCBEUklWRVIgVkVSU0lPTiBXSElDSCBJUyBESVNUUklCVVRFRCBXSVRICSAgICoKKyoJVEhFIEtFUk5FTCBTT1VSQ0UgUEFDS0FHRSBZT1UgQVJFIFVTSU5HLiBTT01FIEFMUEhBIEFORCBCRVRBIFRFU1QgICoKKyoJVkVSU0lPTlMgQ0FOIEJFIElOU1RBTExFRCBGUk9NIEEgU0VQQVJBVEVMWSBESVNUUklCVVRFRCBQQUNLQUdFCSAgICoKKyoJQlVUIENIRUNLIFRIQVQgVEhFIFBBQ0tBR0UgSVMgTk9UIE1VQ0ggT0xERVIgKE9SIE5FV0VSKSBUSEFOIFRIRSAgICoKKyoJS0VSTkVMIFlPVSBBUkUgVVNJTkcuIElUJ1MgUE9TU0lCTEUgVEhBVCBUSEUgS0VSTkVML0RSSVZFUiAJICAgKgorKglJTlRFUkZBQ0UgQ0hBTkdFUyBCRVRXRUVOIEtFUk5FTCBSRUxFQVNFUyBXSElDSCBNQVkgQ0FVU0UgU09NRQkgICAqCisqCUlOQ09NUEFUSUJJTElUWSBQUk9CTEVNUy4JCQkJCSAgICoKKyoJCQkJCQkJCQkgICAqCisqCUlOIENBU0UgWU9VIElOU1RBTEwgQSBTRVBBUkFURUxZIERJU1RSSUJVVEVEIFNPVU5EIERSSVZFUiBWRVJTSU9OLCAqCisqCUJFIFNVUkUgVE8gUkVNT1ZFIE9SIFJFTkFNRSBUSEUgT0xEIFNPVU5EIERSSVZFUiBESVJFQ1RPUlkgQkVGT1JFICAqCisqCUlOU1RBTExJTkcgVEhFIE5FVyBPTkUuIExFQVZJTkcgT0xEIEZJTEVTIFRPIFRIRSBTT1VORCBEUklWRVIJICAgKgorKglESVJFQ1RPUlkgX1dJTExfIENBVVNFIFBST0JMRU1TIFdIRU4gVEhFIERSSVZFUiBJUyBVU0VEIE9SCSAgICoKKyoJQ09NUElMRUQuCQkJCQkJCSAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVG8gY29uZmlndXJlIHRoZSBkcml2ZXIsIHJ1biAibWFrZSBjb25maWciIGluIHRoZSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeQorKC91c3Ivc3JjL2xpbnV4KS4gQW5zd2VyICJ5IiBvciAibSIgdG8gdGhlIHF1ZXN0aW9uIGFib3V0IFNvdW5kIGNhcmQgc3VwcG9ydAorKGFmdGVyIHRoZSBxdWVzdGlvbnMgYWJvdXQgbW91c2UsIENELVJPTSwgZnRhcGUsIGV0Yy4gc3VwcG9ydCkuICBRdWVzdGlvbnMKK2Fib3V0IG9wdGlvbnMgZm9yIHNvdW5kIHdpbGwgdGhlbiBiZSBhc2tlZC4KKworQWZ0ZXIgY29uZmlndXJpbmcgdGhlIGtlcm5lbCBhbmQgc291bmQgZHJpdmVyIGFuZCBjb21waWxlIHRoZSBrZXJuZWwgCitmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIGluIHRoZSBrZXJuZWwgUkVBRE1FLgorCitUaGUgc291bmQgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZGlhbG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvdW5kIGNvbmZpZ3VyYXRpb24gc3RhcnRzIGJ5IG1ha2luZyBzb21lIHllcy9ubyBxdWVzdGlvbnMuIEJlIGNhcmVmdWwKK3doZW4gYW5zd2VyaW5nIHRvIHRoZXNlIHF1ZXN0aW9ucyBzaW5jZSBhbnN3ZXJpbmcgeSB0byBhIHF1ZXN0aW9uIG1heQorcHJldmVudCBzb21lIGxhdGVyIG9uZXMgZnJvbSBiZWluZyBhc2tlZC4gRm9yIGV4YW1wbGUgZG9uJ3QgYW5zd2VyIHkgdG8KK3RoZSBmaXJzdCBxdWVzdGlvbiAoUEFTMTYpIGlmIHlvdSBkb24ndCByZWFsbHkgaGF2ZSBhIFBBUzE2LiBEb24ndCBlbmFibGUKK21vcmUgY2FyZHMgdGhhbiB5b3UgcmVhbGx5IG5lZWQgc2luY2UgdGhleSBqdXN0IGNvbnN1bWUgbWVtb3J5LiBBbHNvCitzb21lIGRyaXZlcnMgKGxpa2UgTVBVNDAxKSBtYXkgY29uZmxpY3Qgd2l0aCB5b3VyIFNDU0kgY29udHJvbGxlciBhbmQKK3ByZXZlbnQga2VybmVsIGZyb20gYm9vdGluZy4gSWYgeW91IGNhcmQgd2FzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZAorY2FyZHMgKGFib3ZlKSwgcGxlYXNlIGxvb2sgYXQgdGhlIGNhcmQgc3BlY2lmaWMgY29uZmlnIGluc3RydWN0aW9ucworKGxhdGVyIGluIHRoaXMgZmlsZSkgYmVmb3JlIHN0YXJ0aW5nIHRvIGNvbmZpZ3VyZS4gU29tZSBjYXJkcyBtdXN0IGJlCitjb25maWd1cmVkIGluIHdheSB3aGljaCBpcyBub3Qgb2J2aW91cy4KKworU28gaGVyZSBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25maWcgZGlhbG9nLiBBbnN3ZXIgJ3knIG9yICduJyB0byB0aGVzZQorcXVlc3Rpb25zLiBUaGUgZGVmYXVsdCBhbnN3ZXIgaXMgc2hvd24gc28gdGhhdCAoeS9uKSBtZWFucyAneScgYnkgZGVmYXVsdCBhbmQKKyhuL3kpIG1lYW5zICduJy4gVG8gdXNlIHRoZSBkZWZhdWx0IHZhbHVlLCBqdXN0IGhpdCBFTlRFUi4gQnV0IGJlIGNhcmVmdWwKK3NpbmNlIHVzaW5nIHRoZSBkZWZhdWx0IF9kb2Vzbid0XyBndWFyYW50ZWUgYW55dGhpbmcuCisKK05vdGUgYWxzbyB0aGF0IGFsbCBxdWVzdGlvbnMgbWF5IG5vdCBiZSBhc2tlZC4gVGhlIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbQorbWF5IGRpc2FibGUgc29tZSBxdWVzdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBlYXJsaWVyIGNob2ljZXMuIEl0IG1heSBhbHNvCitzZWxlY3Qgc29tZSBvcHRpb25zIGF1dG9tYXRpY2FsbHkgYXMgd2VsbC4KKworICAiUHJvQXVkaW9TcGVjdHJ1bSAxNiBzdXBwb3J0IiwKKwktIEFuc3dlciAneSdfT05MWV8gaWYgeW91IGhhdmUgYSBQcm8gQXVkaW8gU3BlY3RydW0gXzE2XywKKwkgIFBybyBBdWRpbyBTdHVkaW8gMTYgb3IgTG9naXRlY2ggU291bmRNYW4gMTYgKGJlIHN1cmUgdGhhdAorCSAgeW91IHJlYWQgdGhlIGFib3ZlIGxpc3QgY29ycmVjdGx5KS4gRG9uJ3QgYW5zd2VyICd5JyBpZiB5b3UKKwkgIGhhdmUgc29tZSBvdGhlciBjYXJkIG1hZGUgYnkgTWVkaWEgVmlzaW9uIG9yIExvZ2l0ZWNoIHNpbmNlIHRoZXkKKwkgIGFyZSBub3QgUEFTMTYgY29tcGF0aWJsZS4KKwkgIE5PVEUhIFNpbmNlIDMuNS1iZXRhMTAgeW91IG5lZWQgdG8gZW5hYmxlIFNCIHN1cHBvcnQgKG5leHQgcXVlc3Rpb24pCisJICBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFNCIGVtdWxhdGlvbiBvZiBQQVMxNi4gSXQncyBhbHNvIHBvc3NpYmxlIHRvCisgICAJICB0aGUgZW11bGF0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBhIHRydWUgU0IgY2FyZCB0b2dldGhlciB3aXRoIFBBUzE2CisJICAodGhlcmUgaXMgYW5vdGhlciBxdWVzdGlvbiBhYm91dCB0aGlzIHRoYXQgaXMgYXNrZWQgbGF0ZXIpLgorICAiU291bmQgQmxhc3RlciBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgaWYgeW91IGhhdmUgYW4gb3JpZ2luYWwgU0IgY2FyZCBtYWRlIGJ5IENyZWF0aXZlIExhYnMKKwkgIG9yIGEgZnVsbCAxMDAlIGhhcmR3YXJlIGNvbXBhdGlibGUgY2xvbmUgKGxpa2UgVGh1bmRlcmJvYXJkIG9yCisJICBTTSBHYW1lcykuIElmIHlvdXIgY2FyZCB3YXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhcmRzIChhYm92ZSksCisJICBwbGVhc2UgbG9vayBhdCB0aGUgY2FyZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgbGF0ZXIgaW4gdGhpcyBmaWxlCisJICBiZWZvcmUgYW5zd2VyaW5nIHRoaXMgcXVlc3Rpb24uIEZvciBhbiB1bmtub3duIGNhcmQgeW91IG1heSBhbnN3ZXIgCisJICAneScgaWYgdGhlIGNhcmQgY2xhaW1zIHRvIGJlIFNCIGNvbXBhdGlibGUuCisJIEVuYWJsZSB0aGlzIG9wdGlvbiBhbHNvIHdpdGggUEFTMTYgKGNoYW5nZWQgc2luY2UgdjMuNS1iZXRhOSkuCisKKwkgRG9uJ3QgZW5hYmxlIFNCIGlmIHlvdSBoYXZlIGEgTUFEMTYgb3IgTW96YXJ0IGNvbXBhdGlibGUgY2FyZC4KKworICAiR2VuZXJpYyBPUEwyL09QTDMgRk0gc3ludGhlc2l6ZXIgc3VwcG9ydCIsCisJLSBBbnN3ZXIgJ3knIGlmIHlvdXIgY2FyZCBoYXMgYSBGTSBjaGlwIG1hZGUgYnkgWWFtYWhhIChPUEwyL09QTDMvT1BMNCkuCisJICBBbnN3ZXJpbmcgJ3knIGlzIHVzdWFsbHkgYSBzYWZlIGFuZCByZWNvbW1lbmRlZCBjaG9pY2UuIEhvd2V2ZXIgc29tZQorCSAgY2FyZHMgbWF5IGhhdmUgc29mdHdhcmUgKFRTUikgRk0gZW11bGF0aW9uLiBFbmFibGluZyBGTSBzdXBwb3J0CisJICB3aXRoIHRoZXNlIGNhcmRzIG1heSBjYXVzZSB0cm91YmxlLiBIb3dldmVyIEkgZG9uJ3QgY3VycmVudGx5IGtub3cKKwkgIHN1Y2ggY2FyZHMuCisgICJHcmF2aXMgVWx0cmFzb3VuZCBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgaWYgeW91IGhhdmUgR1VTIG9yIEdVUyBNQVguIEFuc3dlciAnbicgaWYgeW91IGRvbid0CisJICBoYXZlIEdVUyBzaW5jZSB0aGUgR1VTIGRyaXZlciBjb25zdW1lcyBtdWNoIG1lbW9yeS4KKwkgIEN1cnJlbnRseSBJIGRvbid0IGhhdmUgZXhwZXJpZW5jZXMgd2l0aCB0aGUgR1VTIEFDRSBzbyBJIGRvbid0CisJICBrbm93IHdoYXQgdG8gYW5zd2VyIHdpdGggaXQuCisgICJNUFUtNDAxIHN1cHBvcnQgKE5PVCBmb3IgU0IxNikiLAorCS0gQmUgY2FyZWZ1bCB3aXRoIHRoaXMgcXVlc3Rpb24uIFRoZSBNUFU0MDEgaW50ZXJmYWNlIGlzIHN1cHBvcnRlZAorCSAgYnkgYWxtb3N0IGFueSBzb3VuZCBjYXJkIHRvZGF5LiBIb3dldmVyIHNvbWUgbmF0aXZlbHkgc3VwcG9ydGVkIGNhcmRzCisJICBoYXZlIHRoZWlyIG93biBkcml2ZXIgZm9yIE1QVTQwMS4gRW5hYmxpbmcgdGhlIE1QVTQwMSBvcHRpb24gd2l0aAorCSAgdGhlc2UgY2FyZHMgd2lsbCBjYXVzZSBhIGNvbmZsaWN0LiBBbHNvIGVuYWJsaW5nIE1QVTQwMSBvbiBhIHN5c3RlbQorCSAgdGhhdCBkb2Vzbid0IHJlYWxseSBoYXZlIGEgTVBVNDAxIGNvdWxkIGNhdXNlIHNvbWUgdHJvdWJsZS4gSWYgeW91cgorCSAgY2FyZCB3YXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhcmRzIChhYm92ZSksIHBsZWFzZSBsb29rIGF0CisJICB0aGUgY2FyZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgbGF0ZXIgaW4gdGhpcyBmaWxlLgorCisJICBJbiBNT1NUIGNhc2VzIHRoaXMgTVBVNDAxIGRyaXZlciBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggInRydWUiCisJICBNSURJLW9ubHkgTVBVNDAxIHByb2Zlc3Npb25hbCBjYXJkcy4gSW4gbW9zdCBvdGhlciBjYXNlcyB0aGVyZQorCSAgaXMgYW5vdGhlciB3YXkgdG8gZ2V0IHRoZSBNUFU0MDEgY29tcGF0aWJsZSBpbnRlcmZhY2Ugb2YgYQorCSAgc291bmQgY2FyZCB0byB3b3JrLgorCSAgU3VwcG9ydCBmb3IgdGhlIE1QVTQwMSBjb21wYXRpYmxlIE1JREkgcG9ydCBvZiBTQjE2LCBFU1MxNjg4CisJICBhbmQgTVYgSmF6ejE2IGNhcmRzIGlzIGluY2x1ZGVkIGluIHRoZSBTQiBkcml2ZXIuIFVzZSBpdCBpbnN0ZWFkCisJICBvZiB0aGlzIHNlcGFyYXRlIE1QVTQwMSBkcml2ZXIgd2l0aCB0aGVzZSBjYXJkcy4gQXMgd2VsbCAKKwkgIFNvdW5kc2NhcGUsIFBTUyBhbmQgTWF1aSBkcml2ZXJzIGluY2x1ZGUgdGhlaXIgb3duIE1QVTQwMQorCSAgb3B0aW9ucy4KKworCSAgSXQncyBzYWZlIHRvIGFuc3dlciAneScgaWYgeW91IGhhdmUgYSB0cnVlIE1QVTQwMSBNSURJIGludGVyZmFjZQorCSAgY2FyZC4gCisgICI2ODUwIFVBUlQgTWlkaSBzdXBwb3J0IiwKKwktIEl0J3Mgc2FmZSB0byBhbnN3ZXIgJ24nIHRvIHRoaXMgcXVlc3Rpb24gaW4gYWxsIGNhc2VzLiBUaGUgNjg1MAorCSAgVUFSVCBpbnRlcmZhY2UgaXMgc28gcmFyZWx5IHVzZWQuCisgICJQU1MgKEVDSE8tQURJMjExMSkgc3VwcG9ydCIsCisJLSBBbnN3ZXIgJ3knIG9ubHkgaWYgeW91IGhhdmUgT3JjaGlkIFNXMzIsIENhcmRpbmFsIERTUDE2IG9yIHNvbWUKKwkgIG90aGVyIGNhcmQgYmFzZWQgb24gdGhlIFBTUyBjaGlwc2V0IChBRDE4NDggY29kZWMgKyBBRFNQLTIxMTUKKwkgIERTUCBjaGlwICsgRWNobyBFU0M2MTQgQVNJQyBDSElQKS4KKyAgIjE2IGJpdCBzYW1wbGluZyBvcHRpb24gb2YgR1VTIChfTk9UXyBHVVMgTUFYKSIsCisJLSBBbnN3ZXIgJ3knIGlmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgMTYgYml0IHNhbXBsaW5nIGRhdWdodGVyY2FyZAorCSAgdG8geW91ciBHVVMuIEFuc3dlciAnbicgaWYgeW91IGhhdmUgR1VTIE1BWC4gRW5hYmxpbmcgdGhpcyBvcHRpb24KKwkgIGRpc2FibGVzIEdVUyBNQVggc3VwcG9ydC4KKyAgIkdVUyBNQVggc3VwcG9ydCIsCisJLSBBbnN3ZXIgJ3knIG9ubHkgaWYgeW91IGhhdmUgYSBHVVMgTUFYLgorICAiTWljcm9zb2Z0IFNvdW5kIFN5c3RlbSBzdXBwb3J0IiwKKwktIEFnYWluIHRoaW5rIGNhcmVmdWxseSBiZWZvcmUgYW5zd2VyaW5nICd5JyB0byB0aGlzIHF1ZXN0aW9uLiBJdCdzCisJICBzYWZlIHRvIGFuc3dlciAneScgaW4gY2FzZSB5b3UgaGF2ZSB0aGUgb3JpZ2luYWwgV2luZG93cyBTb3VuZCAKKwkgIFN5c3RlbSBjYXJkIG1hZGUgYnkgTWljcm9zb2Z0IG9yIEF6dGVjaCBTRyAxNiBQcm8gKG9yIE5YMTYgUHJvKS4KKwkgIEFsc28geW91IG1heSBhbnN3ZXIgJ3knIGluIGNhc2UgeW91ciBjYXJkIHdhcyBub3QgbGlzdGVkIGVhcmxpZXIKKwkgIGluIHRoaXMgZmlsZS4gRm9yIGNhcmRzIGhhdmluZyBuYXRpdmUgc3VwcG9ydCBpbiB0aGUgZHJpdmVyLCBjb25zdWx0CisJICB0aGUgY2FyZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgbGF0ZXIgaW4gdGhpcyBmaWxlLiBTb21lIGRyaXZlcnMKKwkgIGhhdmUgdGhlaXIgb3duIE1TUyBzdXBwb3J0IGFuZCBlbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIGEKKwkgIGNvbmZsaWN0LiAKKwkgIE5vdGUhIFRoZSBNU1MgZHJpdmVyIHBlcm1pdHMgY29uZmlndXJpbmcgdHdvIERNQSBjaGFubmVscy4gVGhpcyBpcyBhCisJICAibm9uc3RhbmRhcmQiIGZlYXR1cmUgYW5kIHdvcmtzIG9ubHkgd2l0aCB2ZXJ5IGZldyBjYXJkcyAoaWYgYW55KS4KKwkgIEluIG1vc3QgY2FzZXMgdGhlIHNlY29uZCBETUEgY2hhbm5lbCBzaG91bGQgYmUgZGlzYWJsZWQgb3Igc2V0IHRvCisJICB0aGUgc2FtZSBjaGFubmVsIHRoYW4gdGhlIGZpcnN0IG9uZS4gVHJ5aW5nIHRvIGNvbmZpZ3VyZSB0d28gc2VwYXJhdGUKKwkgIGNoYW5uZWxzIHdpdGggY2FyZHMgdGhhdCBkb24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aWxsIHByZXZlbnQKKwkgIGF1ZGlvIChhdCBsZWFzdCByZWNvcmRpbmcpIGZyb20gd29ya2luZy4KKyAgIkVuc29uaXEgU291bmRzY2FwZSBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgaWYgeW91IGhhdmUgYSBzb3VuZCBjYXJkIGJhc2VkIG9uIHRoZSBFbnNvbmlxIFNvdW5kU2NhcGUKKwkgIGNoaXBzZXQuIFN1Y2ggY2FyZHMgYXJlIGJlaW5nIG1hbnVmYWN0dXJlZCBhdCBsZWFzdCBieSBFbnNvbmlxLAorCSAgU3BlYSBhbmQgUmV2ZWFsIChub3RlIHRoYXQgUmV2ZWFsIG1ha2VzIG90aGVyIGNhcmRzIGFsc28pLiAgVGhlIG9sZGVzdAorCSAgY2FyZHMgbWFkZSBieSBTcGVhIGRvbid0IHdvcmsgcHJvcGVybHkgd2l0aCBMaW51eC4gCisJICBTb3VuZHNjYXBlIFBuUCBhcyB3ZWxsIGFzIEVuc29uaXEgVklWTyB3b3JrIG9ubHkgd2l0aCB0aGUgY29tbWVyY2lhbAorCSAgT1NTL0xpbnV4IHZlcnNpb24uCisgICJNZWRpYVRyaXggQXVkaW9Ucml4IFBybyBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgaWYgeW91IGhhdmUgdGhlIEF1ZGlvVHJpeCBQcm8uCisgICJTdXBwb3J0IGZvciBNQUQxNiBhbmQvb3IgTW96YXJ0IGJhc2VkIGNhcmRzIiwKKwktIEFuc3dlciB5IGlmIHlvdXIgY2FyZCBoYXMgYSBNb3phcnQgKE9BSyBPVEktNjAxKSBvciBNQUQxNgorCSAgKE9QVGkgODJDOTI4LCA4MkM5MjksIDgyQzkyNC84MkM5MjUgb3IgODJDOTMwKSBhdWRpbyBpbnRlcmZhY2UgY2hpcC4gCisJICBUaGVzZSBjaGlwcyBhcmUKKwkgIGN1cnJlbnRseSBxdWl0ZSBjb21tb24gc28gaXQncyBwb3NzaWJsZSB0aGF0IG1hbnkgbm8tbmFtZSBjYXJkcworCSAgaGF2ZSBvbmUgb2YgdGhlbS4gSW4gYWRkaXRpb24gdGhlIE1BRDE2IGNoaXAgaXMgdXNlZCBpbiBzb21lCisJICBjYXJkcyBtYWRlIGJ5IGtub3duIG1hbnVmYWN0dXJlcnMgc3VjaCBhcyBUdXJ0bGUgQmVhY2ggKFRyb3BleiksCisJICBSZXZlYWwgKHNvbWUgbW9kZWxzKSBhbmQgRGlhbW9uZCAoc29tZSByZWNlbnQgbW9kZWxzKS4KKwkgIE5vdGUgT1BUaSA4MkM5MjQgYW5kIDgyQzkyNSBhcmUgTUFEMTYgY29tcGF0aWJsZSBvbmx5IGluIG5vbiBQblAKKwkgIG1vZGUgKGp1bXBlciBzZWxlY3RhYmxlIG9uIG1hbnkgY2FyZHMpLgorICAiU3VwcG9ydCBmb3IgVEIgTWF1aSIKKwktIFRoaXMgZW5hYmxlcyBUQiBNYXVpIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBXb3JrcyB3aXRoIFRCIE1hdWkKKwlhbmQgVEIgVHJvcGV6IChtYXkgbm90IHdvcmsgd2l0aCBUcm9wZXogUGx1cykuCisKKworVGhlbiB0aGUgY29uZmlndXJhdGlvbiBwcm9ncmFtIGFza3Mgc29tZSB5L24gcXVlc3Rpb25zIGFib3V0IHRoZSBoaWdoZXIKK2xldmVsIHNlcnZpY2VzLiBJdCdzIHJlY29tbWVuZGVkIHRvIGFuc3dlciAneScgdG8gZWFjaCBvZiB0aGVzZSBxdWVzdGlvbnMuCitBbnN3ZXIgJ24nIG9ubHkgaWYgeW91IGtub3cgeW91IHdpbGwgbm90IG5lZWQgdGhlIG9wdGlvbi4KKworICAiTUlESSBpbnRlcmZhY2Ugc3VwcG9ydCIsCisJLSBBbnN3ZXJpbmcgJ24nIGRpc2FibGVzIC9kZXYvbWlkaSMjIGRldmljZXMgYW5kIGFjY2VzcyB0byBhbnkKKwkgIE1JREkgcG9ydHMgdXNpbmcgL2Rldi9zZXF1ZW5jZXIgYW5kIC9kZXYvbXVzaWMuIFRoaXMgb3B0aW9uCisJICBhbHNvIGFmZmVjdHMgYW55IE1QVTQwMSBhbmQvb3IgR2VuZXJhbCBNSURJIGNvbXBhdGlibGUgZGV2aWNlcy4KKyAgIkZNIHN5bnRoZXNpemVyIChZTTM4MTIvT1BMLTMpIHN1cHBvcnQiLAorCS0gQW5zd2VyICd5JyBoZXJlLgorICAiL2Rldi9zZXF1ZW5jZXIgc3VwcG9ydCIsCisJLSBBbnN3ZXJpbmcgJ24nIGRpc2FibGVzIC9kZXYvc2VxdWVuY2VyIGFuZCAvZGV2L211c2ljLgorCitFbnRlcmluZyB0aGUgSS9PLCBJUlEgYW5kIERNQSBjb25maWcgcGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgdGhlIGFib3ZlIHF1ZXN0aW9ucyB0aGUgY29uZmlndXJhdGlvbiBwcm9ncmFtIHByb21wdHMgZm9yIHRoZQorY2FyZCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiBVc3VhbGx5IGp1c3QgYSBzZXQgb2YKK0kvTyBhZGRyZXNzLCBJUlEgYW5kIERNQSBudW1iZXJzIGFyZSBhc2tlZC4gV2l0aCBzb21lIGNhcmRzIHRoZSBwcm9ncmFtCithc2tzIGZvciBzb21lIGZpbGVzIHRvIGJlIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjYXJkLiBGb3IgZXhhbXBsZQorbWFueSBjYXJkcyBoYXZlIGEgRFNQIGNoaXAgb3IgbWljcm9wcm9jZXNzb3Igd2hpY2ggbXVzdCBiZSBpbml0aWFsaXplZCBieQorZG93bmxvYWRpbmcgYSBwcm9ncmFtIChtaWNyb2NvZGUpIGZpbGUgdG8gdGhlIGNhcmQuCisKK0luc3RydWN0aW9ucyBmb3IgYW5zd2VyaW5nIHRoZXNlIHF1ZXN0aW9ucyBhcmUgZ2l2ZW4gaW4gdGhlIG5leHQgc2VjdGlvbi4KKworCitDYXJkIHNwZWNpZmljIGluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBnaXZlcyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyBhYm91dCBjb25maWd1cmluZyBzb21lIGNhcmRzLgorUGxlYXNlIHJlZmVyIG1hbnVhbCBvZiB5b3VyIGNhcmQgZm9yIHZhbGlkIEkvTywgSVJRIGFuZCBETUEgbnVtYmVycy4gVXNpbmcKK3RoZSBzYW1lIHNldHRpbmdzIHdpdGggRE9TL1dpbmRvd3MgYW5kIExpbnV4IGlzIHJlY29tbWVuZGVkLiBVc2luZworZGlmZmVyZW50IHZhbHVlcyBjb3VsZCBjYXVzZSBzb21lIHByb2JsZW1zIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4KK2RpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy4KKworU291bmQgQmxhc3RlcnMgKHRoZSBvcmlnaW5hbCBvbmVzIGJ5IENyZWF0aXZlKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05PVEUhIENoZWNrIGlmIHlvdSBoYXZlIGEgUG5QIFNvdW5kIEJsYXN0ZXIgKGNhcmRzIHNvbGQgYWZ0ZXIgc3VtbWVyIDE5OTUKKyAgICAgIGFyZSBhbG1vc3QgY2VydGFpbmx5IFBuUCBvbmVzKS4gV2l0aCBQblAgY2FyZHMgeW91IHNob3VsZCB1c2UgaXNhcG5wdG9vbHMKKyAgICAgIHRvIGFjdGl2YXRlIHRoZW0gKHNlZSBhYm92ZSkuCisKK0l0J3MgcG9zc2libGUgdG8gY29uZmlndXJlIHRoZXNlIGNhcmRzIHRvIHVzZSBkaWZmZXJlbnQgSS9PLCBJUlEgYW5kCitETUEgc2V0dGluZ3MuIFNpbmNlIHRoZSBwb3NzaWJsZS9kZWZhdWx0IHNldHRpbmdzIGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHZhcmlvdXMKK21vZGVscywgeW91IGhhdmUgdG8gY29uc3VsdCBtYW51YWwgb2YgeW91ciBjYXJkIGZvciB0aGUgcHJvcGVyIG9uZXMuIEl0J3MKK2EgZ29vZCBpZGVhIHRvIHVzZSB0aGUgc2FtZSB2YWx1ZXMgdGhhbiB3aXRoIERPUy9XaW5kb3dzLiBXaXRoIFNCIGFuZCBTQiBQcm8KK2l0J3MgdGhlIG9ubHkgY2hvaWNlLiBTQjE2IGhhcyBzb2Z0d2FyZSBzZWxlY3RhYmxlIElSUSBhbmQgRE1BIGNoYW5uZWxzIGJ1dAordXNpbmcgZGlmZmVyZW50IHZhbHVlcyB3aXRoIERPUyBhbmQgTGludXggaXMgbGlrZWx5IHRvIGNhdXNlIHRyb3VibGVzLiBUaGUKK0RPUyBkcml2ZXIgaXMgbm90IGFibGUgdG8gcmVzZXQgdGhlIGNhcmQgcHJvcGVybHkgYWZ0ZXIgd2FybSBib290IGZyb20gTGludXgKK2lmIExpbnV4IGhhcyB1c2VkIGRpZmZlcmVudCBJUlEgb3IgRE1BIHZhbHVlcy4KKworVGhlIG9yaWdpbmFsIChzdGVhbSkgU291bmQgQmxhc3RlciAodmVyc2lvbnMgMS54IGFuZCAyLngpIHVzZSBhbHdheXMKK0RNQTEuIFRoZXJlIGlzIG5vIHdheSB0byBjaGFuZ2UgaXQuCisKK1RoZSBTQjE2IG5lZWRzIHR3byBETUEgY2hhbm5lbHMuIEEgOCBiaXQgb25lICgxIG9yIDMpIGlzIHJlcXVpcmVkIGZvcgorOCBiaXQgb3BlcmF0aW9uIGFuZCBhIDE2IGJpdCBvbmUgKDUsIDYgb3IgNykgZm9yIHRoZSAxNiBiaXQgbW9kZS4gSW4gdGhlb3J5CitpdCdzIHBvc3NpYmxlIHRvIHVzZSBqdXN0IG9uZSAoOCBiaXQpIERNQSBjaGFubmVsIGJ5IGFuc3dlcmluZyB0aGUgOCBiaXQKK29uZSB3aGVuIHRoZSBjb25maWd1cmF0aW9uIHByb2dyYW0gYXNrcyBmb3IgdGhlIDE2IGJpdCBvbmUuIFRoaXMgbWF5IHdvcmsKK2luIHNvbWUgc3lzdGVtcyBidXQgaXMgbGlrZWx5IHRvIGNhdXNlIHRlcnJpYmxlIG5vaXNlIG9uIHNvbWUgb3RoZXIgc3lzdGVtcy4KKworSXQncyBwb3NzaWJsZSB0byB1c2UgdHdvIFNCMTYvMzIvNjQgYXQgdGhlIHNhbWUgdGltZS4gVG8gZG8gdGhpcyB5b3Ugc2hvdWxkCitmaXJzdCBjb25maWd1cmUgT1NTL0ZyZWUgZm9yIG9uZSBjYXJkLiBUaGVuIGVkaXQgbG9jYWwuaCBtYW51YWxseSBhbmQgZGVmaW5lCitTQjJfQkFTRSwgU0IyX0lSUSwgU0IyX0RNQSBhbmQgU0IyX0RNQTIgZm9yIHRoZSBzZWNvbmQgb25lLiBZb3UgY2FuJ3QgZ2V0Cit0aGUgT1BMMywgTUlESSBhbmQgRU1VODAwMCBkZXZpY2VzIG9mIHRoZSBzZWNvbmQgY2FyZCB0byB3b3JrLiBJZiB5b3UgYXJlCitnb2luZyB0byB1c2UgdHdvIFBuUCBTb3VuZCBCbGFzdGVycywgZW5zdXJlIHRoYXQgdGhleSBhcmUgb2YgZGlmZmVyZW50IG1vZGVsCithbmQgaGF2ZSBkaWZmZXJlbnQgUG5QIElEcy4gVGhlcmUgaXMgbm8gd2F5IHRvIGdldCB0d28gY2FyZHMgd2l0aCB0aGUgc2FtZQorY2FyZCBJRCBhbmQgc2VyaWFsIG51bWJlciB0byB3b3JrLiBUaGUgZWFzaWVzdCB3YXkgdG8gY2hlY2sgdGhpcyBpcyB0cnlpbmcgCitpZiBpc2FwbnB0b29scyBjYW4gc2VlIGJvdGggY2FyZHMgb3IganVzdCBvbmUuCisKK05PVEUhCURvbid0IGVuYWJsZSB0aGUgU00gR2FtZXMgb3B0aW9uIChhc2tlZCBieSB0aGUgY29uZmlndXJhdGlvbiBwcm9ncmFtKQorCWlmIHlvdSBhcmUgbm90IDEwMSUgc3VyZSB0aGF0IHlvdXIgY2FyZCBpcyBhIExvZ2l0ZWNoIFNvdW5kbWFuIEdhbWVzCisJKG5vdCBhIFNNIFdhdmUgb3IgU00xNikuCisKK1NCIENsb25lcworLS0tLS0tLS0tCisKK0ZpcnN0IG9mIGFsbDogVGhlcmUgYXJlIG5vIFNCMTYgY2xvbmVzLiBUaGVyZSBhcmUgU0IgUHJvIGNsb25lcyB3aXRoIGEKKzE2IGJpdCBtb2RlIHdoaWNoIGlzIG5vdCBTQjE2IGNvbXBhdGlibGUuIFRoZSBtb3N0IGxpa2VseSBhbHRlcm5hdGl2ZSBpcyB0aGF0Cit0aGUgMTYgYml0IG1vZGUgbWVhbnMgTVNTL1dTUy4KKworVGhlcmUgYXJlIGp1c3QgYSBmZXcgZnVsbHkgMTAwJSBoYXJkd2FyZSBTQiBvciBTQiBQcm8gY29tcGF0aWJsZSBjYXJkcy4KK0kga25vdyBqdXN0IFRodW5kZXJib2FyZCBhbmQgU00gR2FtZXMuIE90aGVyIGNhcmRzIHJlcXVpcmUgc29tZSBraW5kIG9mCitoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBiZWZvcmUgdGhleSBiZWNvbWUgU0IgY29tcGF0aWJsZS4gQ2hlY2sgaWYgeW91ciBjYXJkCit3YXMgbGlzdGVkIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmaWxlLiBJbiB0aGlzIGNhc2UgeW91IHNob3VsZCBmb2xsb3cKK2luc3RydWN0aW9ucyBmb3IgeW91ciBjYXJkIGxhdGVyIGluIHRoaXMgZmlsZS4KKworRm9yIG90aGVyIG5vdCBmdWxseSBTQiBjbG9uZXMgeW91IG1heSB0cnkgaW5pdGlhbGl6YXRpb24gdXNpbmcgRE9TIGluCit0aGUgZm9sbG93aW5nIHdheToKKworCS0gQm9vdCBET1Mgc28gdGhhdCB0aGUgY2FyZCBzcGVjaWZpYyBkcml2ZXIgZ2V0cyBydW4uCisJLSBIaXQgY3RybC1hbHQtZGVsIChvciB1c2UgbG9hZGxpbikgdG8gYm9vdCBMaW51eC4gRG9uJ3QKKwkgIHN3aXRjaCBvZmYgcG93ZXIgb3IgcHJlc3MgdGhlIHJlc2V0IGJ1dHRvbi4KKwktIElmIHlvdSB1c2UgdGhlIHNhbWUgSS9PLCBJUlEgYW5kIERNQSBzZXR0aW5ncyBpbiBMaW51eCwgdGhlCisJICBjYXJkIHNob3VsZCB3b3JrLgorCitJZiB5b3VyIGNhcmQgaXMgYm90aCBTQiBhbmQgTVNTIGNvbXBhdGlibGUsIEkgcmVjb21tZW5kIHVzaW5nIHRoZSBNU1MgbW9kZS4KK01vc3QgY2FyZHMgb2YgdGhpcyBraW5kIGFyZSBub3QgYWJsZSB0byB3b3JrIGluIHRoZSBTQiBhbmQgdGhlIE1TUyBtb2RlIAorc2ltdWx0YW5lb3VzbHkuIFVzaW5nIHRoZSBNU1MgbW9kZSBwcm92aWRlcyAxNiBiaXQgcmVjb3JkaW5nIGFuZCBwbGF5YmFjay4KKworUHJvQXVkaW9TcGVjdHJ1bSAxNiBhbmQgY29tcGF0aWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BBUzE2IGhhcyBhIFNCIGVtdWxhdGlvbiBjaGlwIHdoaWNoIGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIG5hdGl2ZQorKDE2IGJpdCkgbW9kZSBvZiB0aGUgY2FyZC4gVG8gZW5hYmxlIHRoaXMgZW11bGF0aW9uIHlvdSBzaG91bGQgY29uZmlndXJlIAordGhlIGRyaXZlciB0byBoYXZlIFNCIHN1cHBvcnQgdG9vICh0aGlzIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgdmVyc2lvbgorMy41LWJldGE5IG9mIHRoaXMgZHJpdmVyKS4KKworV2l0aCBjdXJyZW50IGRyaXZlciB2ZXJzaW9ucyBpdCdzIGFsc28gcG9zc2libGUgdG8gdXNlIFBBUzE2IHRvZ2V0aGVyIHdpdGggCithbm90aGVyIFNCIGNvbXBhdGlibGUgY2FyZC4gSW4gdGhpcyBjYXNlIHlvdSBzaG91bGQgY29uZmlndXJlIFNCIHN1cHBvcnQKK2ZvciB0aGUgb3RoZXIgY2FyZCBhbmQgdG8gZGlzYWJsZSB0aGUgU0IgZW11bGF0aW9uIG9mIFBBUzE2ICh0aGVyZSBpcyBhCitzZXBhcmF0ZSBxdWVzdGlvbnMgYWJvdXQgdGhpcykuCisKK1dpdGggUEFTMTYgeW91IGNhbiB1c2UgdHdvIGF1ZGlvIGRldmljZSBmaWxlcyBhdCB0aGUgc2FtZSB0aW1lLiAvZGV2L2RzcCAoYW5kCisvZGV2L2F1ZGlvKSBpcyBjb25uZWN0ZWQgdG8gdGhlIDgvMTYgYml0IG5hdGl2ZSBjb2RlYyBhbmQgdGhlIC9kZXYvZHNwMSAoYW5kCisvZGV2L2F1ZGlvMSkgaXMgY29ubmVjdGVkIHRvIHRoZSBTQiBlbXVsYXRpb24gKDggYml0IG1vbm8gb25seSkuCisKK0dyYXZpcyBVbHRyYXNvdW5kCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgcmV2aXNpb25zIG9mIHRoZSBVbHRyYXNvdW5kIGNhcmQgKEdVUykuIFRoZQorZWFybGllc3Qgb25lcyAocHJlIDMuNykgZG9uJ3QgaGF2ZSBhIGhhcmR3YXJlIG1peGVyLiBXaXRoIHRoZXNlIGNhcmRzCit0aGUgZHJpdmVyIHVzZXMgYSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHN5bnRoIGFuZCBwY20gcGxheWJhY2tzLiBJdCdzCithbHNvIHBvc3NpYmxlIHRvIHN3aXRjaCBzb21lIG9mIHRoZSBpbnB1dHMgKGxpbmUgaW4sIG1pYykgb2ZmIGJ5IHNldHRpbmcKK21peGVyIHZvbHVtZSBvZiB0aGUgY2hhbm5lbCBsZXZlbCBiZWxvdyAxMCUuIEZvciByZWNvcmRpbmcgeW91IGhhdmUKK3RvIHNlbGVjdCB0aGUgY2hhbm5lbCBhcyBhIHJlY29yZGluZyBzb3VyY2UgYW5kIHRvIHVzZSB2b2x1bWUgYWJvdmUgMTAlLgorCitHVVMgMy43IGhhcyBhIGhhcmR3YXJlIG1peGVyLgorCitHVVMgTUFYIGFuZCB0aGUgMTYgYml0IHNhbXBsaW5nIGRhdWdodGVyY2FyZCBoYXZlIGEgQ1M0MjMxIGNvZGVjIGNoaXAgd2hpY2ggCithbHNvIGNvbnRhaW5zIGEgbWl4ZXIuCisKK0NvbmZpZ3VyaW5nIEdVUyBpcyBzaW1wbGUuIEp1c3QgZW5hYmxlIHRoZSBHVVMgc3VwcG9ydCBhbmQgR1VTIE1BWCBvcgordGhlIDE2IGJpdCBkYXVnaHRlcmNhcmQgaWYgeW91IGhhdmUgdGhlbS4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoZSBkYXVnaHRlcgorY2FyZCBkaXNhYmxlcyBHVVMgTUFYIGRyaXZlci4KKworTk9URSBmb3Igb3duZXJzIG9mIHRoZSAxNiBiaXQgZGF1Z2h0ZXJjYXJkOiBCeSBkZWZhdWx0IHRoZSBkYXVnaHRlcmNhcmQKK3VzZXMgL2Rldi9kc3AgKGFuZCAvZGV2L2F1ZGlvKS4gQ29tbWFuZCAibG4gLXNmIC9kZXYvZHNwMSAvZGV2L2RzcCIKK3NlbGVjdHMgdGhlIGRhdWdodGVyIGNhcmQgYXMgdGhlIGRlZmF1bHQgZGV2aWNlLgorCitXaXRoIGp1c3QgdGhlIHN0YW5kYXJkIEdVUyBlbmFibGVkIHRoZSBjb25maWd1cmF0aW9uIHByb2dyYW0gcHJvbXB0cworZm9yIHRoZSBJL08sIElSUSBhbmQgRE1BIG51bWJlcnMgZm9yIHRoZSBjYXJkLiBVc2UgdGhlIHNhbWUgdmFsdWVzIHRoYW4KK3dpdGggRE9TLgorCitXaXRoIHRoZSBkYXVnaHRlciBjYXJkIG9wdGlvbiBlbmFibGVkIHlvdSB3aWxsIGJlIHByb21wdGVkIGZvciB0aGUgSS9PLAorSVJRIGFuZCBETUEgbnVtYmVycyBmb3IgdGhlIGRhdWdodGVyIGNhcmQuIFlvdSBoYXZlIHRvIHVzZSBkaWZmZXJlbnQgSS9PCithbmQgRE1BIHZhbHVlcyB0aGFuIGZvciB0aGUgc3RhbmRhcmQgR1VTLiBUaGUgZGF1Z2h0ZXIgY2FyZCBwZXJtaXRzCitzaW11bHRhbmVvdXMgcmVjb3JkaW5nIGFuZCBwbGF5YmFjay4gVXNlIC9kZXYvZHNwICh0aGUgZGF1Z2h0ZXJjYXJkKSBmb3IKK3JlY29yZGluZyBhbmQgL2Rldi9kc3AxIChHVVMgR0YxKSBmb3IgcGxheWJhY2suCisKK0dVUyBNQVggdXNlcyB0aGUgc2FtZSBJL08gYWRkcmVzcyBhbmQgSVJRIHNldHRpbmdzIHRoYW4gdGhlIG9yaWdpbmFsIEdVUworKEdVUyBNQVggPSBHVVMgKyBhIENTNDIzMSBjb2RlYykuIEluIGFkZGl0aW9uIGFuIGV4dHJhIERNQSBjaGFubmVsIG1heSBiZSB1c2VkLgorVXNpbmcgdHdvIERNQSBjaGFubmVscyBwZXJtaXRzIHNpbXVsdGFuZW91cyBwbGF5YmFjayB1c2luZyB0d28gZGV2aWNlcworKGRldi9kc3AwIGFuZCAvZGV2L2RzcDEpLiBUaGUgc2Vjb25kIERNQSBjaGFubmVsIGlzIHJlcXVpcmVkIGZvcgorZnVsbCBkdXBsZXggYXVkaW8uCitUbyBlbmFibGUgdGhlIHNlY29uZCBETUEgY2hhbm5lbHMsIGdpdmUgYSB2YWxpZCBETUEgY2hhbm5lbCB3aGVuIHRoZSBjb25maWcKK3Byb2dyYW0gYXNrcyBmb3IgdGhlIEdVUyBNQVggRE1BIChlbnRlcmluZyAtMSBkaXNhYmxlcyB0aGUgc2Vjb25kIERNQSkuCitVc2luZyAxNiBiaXQgRE1BIGNoYW5uZWxzICg1LDYgb3IgNykgaXMgcmVjb21tZW5kZWQuCisKK0lmIHlvdSBoYXZlIHByb2JsZW1zIGluIHJlY29yZGluZyB3aXRoIEdVUyBNQVgsIHlvdSBjb3VsZCB0cnkgdG8gdXNlCitqdXN0IG9uZSA4IGJpdCBETUEgY2hhbm5lbC4gUmVjb3JkaW5nIHdpbGwgbm90IHdvcmsgd2l0aCBvbmUgRE1BCitjaGFubmVsIGlmIGl0J3MgYSAxNiBiaXQgb25lLgorCitNaWNyb3Bob25lIGlucHV0IG9mIEdVUyBNQVggaXMgY29ubmVjdGVkIHRvIG1peGVyIGluIGxpdHRsZSBiaXQgbm9uc3RhbmRhcmQKK3dheS4gVGhlcmUgaXMgYWN0dWFsbHkgdHdvIG1pY3JvcGhvbmUgdm9sdW1lIGNvbnRyb2xzLiBOb3JtYWwgIm1pYyIgY29udHJvbHMKK29ubHkgcmVjb3JkaW5nIGxldmVsLiBNaXhlciBjb250cm9sICJzcGVha2VyIiBpcyB1c2VkIHRvIGNvbnRyb2wgdm9sdW1lIG9mCittaWNyb3Bob25lIHNpZ25hbCBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gbGluZS9zcGVha2VyIG91dC4gU28ganVzdCBkZWNyZWFzZQordm9sdW1lIG9mICJzcGVha2VyIiBpZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIG1pY3JvcGhvbmUgZmVlZGJhY2suCisKK0dVUyBBQ0Ugd29ya3MgdG9vIGJ1dCBhbnkgYXR0ZW1wdCB0byByZWNvcmQgb3IgdG8gdXNlIHRoZSBNSURJIHBvcnQKK3dpbGwgZmFpbC4KKworR1VTIFBuUCAod2l0aCBSQU0pIGlzIHBhcnRpYWxseSBzdXBwb3J0ZWQgYnV0IGl0IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIHVzaW5nCitET1Mgb3IgaXNhcG5wdG9vbHMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBkcml2ZXIuCisKK01QVTQwMSBhbmQgV2luZG93cyBTb3VuZCBTeXN0ZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWdhaW4uIERvbid0IGVuYWJsZSB0aGVzZSBvcHRpb25zIGluIGNhc2UgeW91ciBjYXJkIGlzIGxpc3RlZAorc29tZXdoZXJlIGVsc2UgaW4gdGhpcyBmaWxlLgorCitDb25maWd1cmluZyB0aGVzZSBjYXJkcyBpcyBvYnZpb3VzIChvciBpdCBzaG91bGQgYmUpLiBXaXRoIE1TUworeW91IHNob3VsZCBwcm9iYWJseSBlbmFibGUgdGhlIE9QTDMgc3ludGggYWxzbyBzaW5jZQorbW9zdCBNU1MgY29tcGF0aWJsZSBjYXJkcyBoYXZlIGl0LiBIb3dldmVyIGNoZWNrIHRoYXQgdGhpcyBpcyB0cnVlCitiZWZvcmUgZW5hYmxpbmcgT1BMMy4KKworU291bmQgZHJpdmVyIHN1cHBvcnRzIG1vcmUgdGhhbiBvbmUgTVBVNDAxIGNvbXBhdGlibGUgY2FyZHMgYXQgdGhlIHNhbWUgdGltZQorYnV0IHRoZSBjb25maWcgcHJvZ3JhbSBhc2tzIGNvbmZpZyBpbmZvIGZvciBqdXN0IHRoZSBmaXJzdCBvZiB0aGVtLgorQWRkaW5nIHRoZSBzZWNvbmQgb3IgdGhpcmQgTVBVIGludGVyZmFjZXMgbXVzdCBiZSBkb25lIG1hbnVhbGx5IGJ5CitlZGl0aW5nIHNvdW5kL2xvY2FsLmggKGFmdGVyIHJ1bm5pbmcgdGhlIGNvbmZpZyBwcm9ncmFtKS4gQWRkIGRlZmluZXMgZm9yCitNUFUyX0JBU0UgJiBNUFUyX0lSUSAoYW5kIE1QVTNfQkFTRSAmIE1QVTNfSVJRKSB0byB0aGUgZmlsZS4KKworQ0FVVElPTiEKKworVGhlIGRlZmF1bHQgSS9PIGJhc2Ugb2YgQWRhcHRlYyBBSEEtMTU0MiBTQ1NJIGNvbnRyb2xsZXIgaXMgMHgzMzAgd2hpY2gKK2lzIGFsc28gdGhlIGRlZmF1bHQgb2YgdGhlIE1QVTQwMSBkcml2ZXIuIERvbid0IGNvbmZpZ3VyZSB0aGUgc291bmQgZHJpdmVyIHRvCit1c2UgMHgzMzAgYXMgdGhlIE1QVTQwMSBiYXNlIGlmIHlvdSBoYXZlIGEgQUhBMTU0Mi4gVGhlIGtlcm5lbCB3aWxsIG5vdCBib290CitpZiB5b3UgbWFrZSB0aGlzIG1pc3Rha2UuCisKK1BTUworLS0tCisKK0V2ZW4gdGhlIFBTUyBjYXJkcyBhcmUgY29tcGF0aWJsZSB3aXRoIFNCLCBNU1MgYW5kIE1QVTQwMSwgeW91IG11c3Qgbm90CitlbmFibGUgdGhlc2Ugb3B0aW9ucyB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIuIFRoZSBjb25maWd1cmF0aW9uCitwcm9ncmFtIGhhbmRsZXMgdGhlc2Ugb3B0aW9ucyBpdHNlbGYuIChZb3UgbWF5IHVzZSB0aGUgU0IsIE1QVSBhbmQgTVNTIG9wdGlvbnMKK3RvZ2V0aGVyIHdpdGggUFNTIGlmIHlvdSBoYXZlIGFub3RoZXIgY2FyZCBvbiB0aGUgc3lzdGVtKS4KKworVGhlIFBTUyBkcml2ZXIgZW5hYmxlcyBNU1MgYW5kIE1QVTQwMSBtb2RlcyBvZiB0aGUgY2FyZC4gU0IgaXMgbm90IGVuYWJsZWQgCitzaW5jZSBpdCBkb2Vzbid0IHdvcmsgY29uY3VycmVudGx5IHdpdGggTVNTLiBUaGUgZHJpdmVyIGxvYWRzIGFsc28gYQorRFNQIGFsZ29yaXRobSB3aGljaCBpcyB1c2VkIHRvIGZvciB0aGUgZ2VuZXJhbCBNSURJIGVtdWxhdGlvbi4gVGhlCithbGdvcml0aG0gZmlsZSAoLmxkKSBpcyByZWFkIGJ5IHRoZSBjb25maWcgcHJvZ3JhbSBhbmQgd3JpdHRlbiB0byBhCitmaWxlIGluY2x1ZGVkIHdoZW4gdGhlIHBzcy5jIGlzIGNvbXBpbGVkLiBGb3IgdGhpcyByZWFzb24gdGhlIGNvbmZpZworcHJvZ3JhbSBhc2tzIGlmIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoZSBmaWxlLiBVc2UgdGhlIGdlbm1pZGkubGQgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGUgRE9TL1dpbmRvd3MgZHJpdmVycyBvZiB0aGUgY2FyZCAoZG9uJ3QgdXNlIHRoZSBtdDMyLmxkKS4KK1dpdGggc29tZSBjYXJkcyB0aGUgZmlsZSBpcyBjYWxsZWQgJ3N5bnRoLmxkJy4gWW91IG11c3QgaGF2ZSBhY2Nlc3MgdG8KK3RoZSBmaWxlIHdoZW4gY29uZmlndXJpbmcgdGhlIGRyaXZlci4gVGhlIGVhc2llc3Qgd2F5IGlzIHRvIG1vdW50IHRoZSBET1MKK3BhcnRpdGlvbiBjb250YWluaW5nIHRoZSBmaWxlIHdpdGggTGludXguIAorCitJdCdzIHBvc3NpYmxlIHRvIGxvYWQgeW91ciBvd24gRFNQIGFsZ29yaXRobXMgYW5kIHJ1biB0aGVtIHdpdGggdGhlIGNhcmQuCitMb29rIGF0IHRoZSBkaXJlY3RvcnkgcHNzX3Rlc3Qgb2Ygc25kLXV0aWwtMy4wLnRhci5neiBmb3IgbW9yZSBpbmZvLgorCitBdWRpb1RyaXggUHJvCistLS0tLS0tLS0tLS0tCisKK1lvdSBoYXZlIHRvIGVuYWJsZSB0aGUgT1BMMyBhbmQgU0IgKG5vdCBTQiBQcm8gb3IgU0IxNikgZHJpdmVycyBpbiBhZGRpdGlvbgordG8gdGhlIG5hdGl2ZSBBdWRpb1RyaXggZHJpdmVyLiBEb24ndCBlbmFibGUgTVNTIG9yIE1QVSBkcml2ZXJzLgorCitDb25maWd1cmluZyBBVFAgaXMgbGl0dGxlIGJpdCB0cmlja3kgc2luY2UgaXQgdXNlcyBzbyBtYW55IEkvTywgSVJRIGFuZAorRE1BIG51bWJlcnMuIFVzaW5nIHRoZSBzYW1lIHZhbHVlcyB0aGFuIHdpdGggRE9TL1dpbiBpcyBhIGdvb2QgaWRlYS4gRG9uJ3QKK2F0dGVtcHQgdG8gdXNlIHRoZSBzYW1lIElSUSBvciBETUEgY2hhbm5lbHMgdHdpY2UuCisKK1RoZSBTQiBtb2RlIG9mIEFUUCBpcyBpbXBsZW1lbnRlZCBzbyB0aGUgQVRQIGRyaXZlciBqdXN0IGVuYWJsZXMgU0IKK2luIHRoZSBwcm9wZXIgYWRkcmVzcy4gVGhlIFNCIGRyaXZlciBoYW5kbGVzIHRoZSByZXN0LiBZb3UgaGF2ZSB0byBjb25maWd1cmUKK2JvdGggdGhlIFNCIGRyaXZlciBhbmQgdGhlIFNCIG1vZGUgb2YgQVRQIHRvIHVzZSB0aGUgc2FtZSBJUlEsIERNQSBhbmQgSS9PCitzZXR0aW5ncy4KKworQWxzbyB0aGUgQVRQIGhhcyBhIG1pY3JvY29udHJvbGxlciBmb3IgdGhlIEdlbmVyYWwgTUlESSBlbXVsYXRpb24gKE9QTDQpLgorRm9yIHRoaXMgcmVhc29uIHRoZSBkcml2ZXIgYXNrcyBmb3IgdGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgdGhlCittaWNyb2NvZGUgKFRSWFBSTy5IRVgpLiBUaGlzIGZpbGUgaXMgdXN1YWxseSBsb2NhdGVkIGluIHRoZSBkaXJlY3RvcnkKK3doZXJlIHRoZSBET1MgZHJpdmVycyB3ZXJlIGluc3RhbGxlZC4gWW91IG11c3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBmaWxlCit3aGVuIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIuIAorCitJZiB5b3UgaGF2ZSB0aGUgZWZmZWN0cyBkYXVnaHRlcmNhcmQsIGl0IG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgcnVubmluZwordGhlIHNldGZ4IHByb2dyYW0gb2Ygc25kLXV0aWwtMy4wLnRhci5neiBwYWNrYWdlLiBUaGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkCit3aGVuIHVzaW5nIHRoZSAoZnV0dXJlKSBiaW5hcnkgZGlzdHJpYnV0aW9uIHZlcnNpb24gb2YgdGhlIGRyaXZlci4KKworRW5zb25pcSBTb3VuZFNjYXBlCistLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URSEJVGhlIG5ldyBQblAgU291bmRTY2FwZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4gU291bmRzY2FwZSBjb21wYXRpYmxlCisJY2FyZHMgbWFkZSBieSBSZXZlYWwgZG9uJ3Qgd29yayB3aXRoIExpbnV4LiBUaGV5IHVzZSBvbGRlciByZXZpc2lvbgorCW9mIHRoZSBTb3VuZHNjYXBlIGNoaXBzZXQgd2hpY2ggaXMgbm90IGZ1bGx5IGNvbXBhdGlibGUgd2l0aAorCW5ld2VyIGNhcmRzIG1hZGUgYnkgRW5zb25pcS4KKworVGhlIFNvdW5kU2NhcGUgZHJpdmVyIGhhbmRsZXMgaW5pdGlhbGl6YXRpb24gb2YgTVNTIGFuZCBNUFUgc3VwcG9ydHMKK2l0c2VsZiBzbyB5b3UgZG9uJ3QgbmVlZCB0byBlbmFibGUgb3RoZXIgZHJpdmVycyB0aGFuIFNvdW5kU2NhcGUKKyhlbmFibGUgYWxzbyB0aGUgL2Rldi9kc3AsIC9kZXYvc2VxdWVuY2VyIGFuZCBNSURJIHN1cHBvcnRzKS4KKworISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorISEhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISEhIQorISEhISEgTk9URSEgQmVmb3JlIHZlcnNpb24gMy41LWJldGE2IHRoZXJlIFdFUkUgdHdvIHNldHMgb2YgYXVkaW8gCSEhISEKKyEhISEhICAgICAgIGRldmljZSBmaWxlcyAoL2Rldi9kc3AwIGFuZCAvZGV2L2RzcDEpLiBUaGUgZmlyc3Qgb25lIFdBUyAgICEhISEKKyEhISEhCSAgICB1c2VkIG9ubHkgZm9yIGNhcmQgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBzZWNvbmQgZm9yIGF1ZGlvICAhISEhCishISEhIQkgICAgcHVycG9zZXMuIEl0IFdBUyByZXF1aXJlZCB0byBjaGFuZ2UgL2Rldi9kc3AgKGEgc3ltbGluaykgdG8gISEhIQorISEhISEJICAgIHBvaW50IHRvIC9kZXYvZHNwMS4JCQkJCQkhISEhCishISEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhISEhCishISEhIQkgICAgVGhpcyBpcyBub3QgcmVxdWlyZWQgd2l0aCBPU1MgdmVyc2lvbnMgMy41LWJldGE2IGFuZCBsYXRlcgkhISEhCishISEhIQkgICAgc2luY2UgdGhlcmUgaXMgbm93IGp1c3Qgb25lIGF1ZGlvIGRldmljZSBmaWxlLiBQbGVhc2UgCSEhISEKKyEhISEhCSAgICBjaGFuZ2UgL2Rldi9kc3AgdG8gcG9pbnQgYmFjayB0byAvZGV2L2RzcDAgaWYgeW91IGFyZQkhISEhCishISEhIQkgICAgdXBncmFkaW5nIGZyb20gYW4gZWFybGllciBkcml2ZXIgdmVyc2lvbiB1c2luZwkJISEhIQorISEhISEJICAgIChjZCAvZGV2O3JtIGRzcDtsbiAtcyBkc3AwIGRzcCkuCQkJCSEhISEKKyEhISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhISEKKyEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworVGhlIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbSBhc2tzIG9uZSBETUEgY2hhbm5lbCBhbmQgdHdvIGludGVycnVwdHMuIE9uZSBJUlEKK2FuZCBvbmUgRE1BIGlzIHVzZWQgYnkgdGhlIE1TUyBjb2RlYy4gVGhlIHNlY29uZCBJUlEgaXMgcmVxdWlyZWQgZm9yIHRoZQorTVBVNDAxIG1vZGUgKHlvdSBoYXZlIHRvIHVzZSBkaWZmZXJlbnQgSVJRcyBmb3IgYm90aCBwdXJwb3NlcykuCitUaGVyZSB3ZXJlIGVhcmxpZXIgdHdvIERNQSBjaGFubmVscyBmb3IgU291bmRTY2FwZSBidXQgdGhlIGN1cnJlbnQgZHJpdmVyCit2ZXJzaW9uIHJlcXVpcmVzIGp1c3Qgb25lLgorCitUaGUgU291bmRTY2FwZSBjYXJkIGhhcyBhIE1vdG9yb2xhIG1pY3JvY29udHJvbGxlciB3aGljaCBtdXN0IGluaXRpYWxpemVkCitfYWZ0ZXJfIGJvb3QgKHRoZSBkcml2ZXIgZG9lc24ndCBpbml0aWFsaXplIGl0IGR1cmluZyBib290KS4KK1RoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lIGJ5IHJ1bm5pbmcgdGhlICdzc2luaXQnIHByb2dyYW0gd2hpY2ggaXMKK2Rpc3RyaWJ1dGVkIGluIHRoZSBzbmQtdXRpbC0zLjAudGFyLmd6IHBhY2thZ2UuIFlvdSBoYXZlIHRvIGVkaXQgdHdvCitkZWZpbmVzIGluIHRoZSBzc2luaXQuYyBhbmQgdGhlbiBjb21waWxlIHRoZSBwcm9ncmFtLiBZb3UgbWF5IHJ1biBzc2luaXQgCittYW51YWxseSAoYWZ0ZXIgZWFjaCBib290KSBvciBhZGQgaXQgdG8gL2V0Yy9yYy5kL3JjLmxvY2FsLgorCitUaGUgc3Npbml0IHByb2dyYW0gbmVlZHMgdGhlIG1pY3JvY29kZSBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGUgRE9TL1dpbmRvd3MKK2RyaXZlciBvZiB0aGUgY2FyZC4gWW91IHdpbGwgbmVlZCB0byB1c2UgdmVyc2lvbiAxLjMwLjAwIG9yIGxhdGVyCitvZiB0aGUgbWljcm9jb2RlIGZpbGUgKHNuZHNjYXBlLmNvMCBvciBzbmRzY2FwZS5jbzEgZGVwZW5kaW5nIG9uCit5b3VyIGNhcmQgbW9kZWwpLiBUSEUgT0xEIHNuZHNjYXBlLmNvZCBXSUxMIE5PVCBXT1JLLiBJVCBXSUxMIEhBTkcgWU9VUgorTUFDSElORS4gVGhlIG9ubHkgd2F5IHRvIGdldCB0aGUgbmV3IG1pY3JvY29kZSBmaWxlIGlzIHRvIGRvd25sb2FkCithbmQgaW5zdGFsbCB0aGUgRE9TL1dpbmRvd3MgZHJpdmVyIGZyb20gZnRwOi8vZnRwLmVuc29uaXEuY29tL3B1Yi4KKworVGhlbiB5b3UgaGF2ZSB0byBzZWxlY3QgdGhlIHByb3BlciBtaWNyb2NvZGUgZmlsZSB0byB1c2U6IHNvdW5kc2NhcGUuY28wCitpcyB0aGUgcmlnaHQgb25lIGZvciBtb3N0IGNhcmRzIGFuZCBzbmRzY2FwZS5jbzEgaXMgZm9yIGZldyAob2xkZXIpIGNhcmRzCittYWRlIGJ5IFJldmVhbCBhbmQvb3IgU3BlYS4gVGhlIGRyaXZlciBoYXMgY2FwYWJpbGl0eSB0byBkZXRlY3QgdGhlIGNhcmQKK3ZlcnNpb24gZHVyaW5nIGJvb3QuIExvb2sgYXQgdGhlIGJvb3QgbG9nIG1lc3NhZ2VzIGluIC92YXIvYWRtL21lc3NhZ2VzCithbmQgbG9jYXRlIHRoZSBzb3VuZCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gbWVzc2FnZSBmb3IgdGhlIFNvdW5kU2NhcGUKK2NhcmQuIElmIHRoZSBkcml2ZXIgZGlzcGxheXMgc3RyaW5nIDxFbnNvbmlxIFNvdW5kc2NhcGUgKG9sZCk+LCB5b3UgaGF2ZQorYW4gb2xkIGNhcmQgYW5kIHlvdSB3aWxsIG5lZWQgdG8gdXNlIHNuZHNjYXBlLmNvMS4gRm9yIG90aGVyIGNhcmRzIHVzZQorc291bmRzY2FwZS5jbzAuIE5ldyBTb3VuZHNjYXBlIHJldmlzaW9ucyBzdWNoIGFzIEVsaXRlIGFuZCBQblAgdXNlCitjb2RlIGZpbGVzIHdpdGggaGlnaGVyIG51bWJlcnMgKC5jbzIsIC5jbzMsIGV0Yy4pLgorCitOT1RFIQlFbnNvbmlxIFNvdW5kc2NhcGUgVklWTyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG90aGVyIFNvdW5kc2NhcGUgY2FyZHMuCisJQ3VycmVudGx5IGl0J3MgcG9zc2libGUgdG8gdXNlIGl0IGluIExpbnV4IG9ubHkgd2l0aCBPU1MvTGludXgKKwlkcml2ZXJzLgorCitDaGVjayAvdmFyL2FkbS9tZXNzYWdlcyBhZnRlciBydW5uaW5nIHNzaW5pdC4gVGhlIGRyaXZlciBwcmludHMKK3RoZSBib2FyZCB2ZXJzaW9uIGFmdGVyIGRvd25sb2FkaW5nIHRoZSBtaWNyb2NvZGUgZmlsZS4gVGhhdCB2ZXJzaW9uCitudW1iZXIgbXVzdCBtYXRjaCB0aGUgbnVtYmVyIGluIHRoZSBuYW1lIG9mIHRoZSBtaWNyb2NvZGUgZmlsZSAoZXh0ZW5zaW9uKS4KKworUnVubmluZyBzc2luaXQgd2l0aCBhIHdyb25nIHZlcnNpb24gb2YgdGhlIHNuZHNjYXBlLmNvPyBmaWxlIGlzIG5vdAorZGFuZ2Vyb3VzIGFzIGxvbmcgYXMgeW91IGRvbid0IHRyeSB0byB1c2UgYSBmaWxlIGNhbGxlZCBzbmRzY2FwZS5jb2QuCitJZiB5b3UgaGF2ZSBpbml0aWFsaXplZCB0aGUgY2FyZCB1c2luZyBhIHdyb25nIG1pY3JvY29kZSBmaWxlIChzb3VuZHMKK2FyZSB0ZXJyaWJsZSksIGp1c3QgbW9kaWZ5IHNzaW5pdC5jIHRvIHVzZSBhbm90aGVyIG1pY3JvY29kZSBmaWxlIGFuZCB0cnkKK2FnYWluLiBJdCdzIHBvc3NpYmxlIHRvIHVzZSBhbiBlYXJsaWVyIHZlcnNpb24gb2Ygc25kc2NhcGUuY29bMDFdIGJ1dCBpdAorbWF5IHNvdW5kIHdlaXJkLgorCitNQUQxNiAoUHJvKSBhbmQgTW96YXJ0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBuZWVkIHRvIGVuYWJsZSBqdXN0IHRoZSBNQUQxNiAvTW96YXJ0IHN1cHBvcnQgd2hlbiBjb25maWd1cmluZwordGhlIGRyaXZlci4gX0Rvbid0XyBlbmFibGUgU0IsIE1QVTQwMSBvciBNU1MuIEhvd2V2ZXIgeW91IHdpbGwgbmVlZCB0aGUKKy9kZXYvYXVkaW8sIC9kZXYvc2VxdWVuY2VyIGFuZCBNSURJIHN1cHBvcnRzLgorCitNb3phcnQgYW5kIE9QVGkgODJDOTI4ICh0aGUgb3JpZ2luYWwgTUFEMTYpIGNoaXBzIGRvbid0IHN1cHBvcnQKK01QVTQwMSBtb2RlIHNvIGVudGVyIGp1c3QgMCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIHByb2dyYW0gYXNrcyB0aGUKK01QVS9NSURJIEkvTyBiYXNlLiBUaGUgTUFEMTYgUHJvIChPUFRpIDgyQzkyOSkgYW5kIDgyQzkzMCBjaGlwcyBoYXZlIE1QVTQwMQorbW9kZS4KKworVEIgVHJvcGV6IGlzIGJhc2VkIG9uIHRoZSA4MkM5MjkgY2hpcC4gSXQgaGFzIHR3byBNSURJIHBvcnRzLgorVGhlIG9uZSBjb25uZWN0ZWQgdG8gdGhlIE1BRDE2IGNoaXAgaXMgdGhlIHNlY29uZCBvbmUgKHRoZXJlIGlzIGEgc2Vjb25kCitNSURJIGNvbm5lY3Rvci9waW5zIHNvbWV3aGVyZT8/KS4gSWYgeW91IGhhdmUgbm90IGNvbm5lY3RlZCB0aGUgc2Vjb25kIE1JREkKK3BvcnQsIGp1c3QgZGlzYWJsZSB0aGUgTUlESSBwb3J0IG9mIE1BRDE2LiBUaGUgJ01hdWknIGNvbXBhdGlibGUgc3ludGggb2YKK1Ryb3BleiBpcyBqdW1wZXIgY29uZmlndXJhYmxlIGFuZCBub3QgY29ubmVjdGVkIHRvIHRoZSBNQUQxNiBjaGlwICh0aGUKK01hdWkgZHJpdmVyIGNhbiBiZSB1c2VkIHdpdGggaXQpLgorCitTb21lIE1BRDE2IGJhc2VkIGNhcmRzIG1heSBjYXVzZSBmZWVkYmFjaywgd2hpc3RsZSBvciB0ZXJyaWJsZSBub2lzZSBpZiB0aGUKK2xpbmUzIG1peGVyIGNoYW5uZWwgaXMgdHVybmVkIHRvbyBoaWdoLiBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCBTaHV0dGxlCitTb3VuZCBTeXN0ZW0uIEN1cnJlbnQgZHJpdmVyIHZlcnNpb25zIHNldCB2b2x1bWUgb2YgbGluZTMgbG93IGVub3VnaCBzbwordGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4KKworSWYgeW91IGhhdmUgYSBNQUQxNiBjYXJkIHdoaWNoIGhhdmUgYW4gT1BMNCAoRk0gKyBXYXZlIHRhYmxlKSBzeW50aGVzaXplcgorY2hpcCAoX25vdF8gYW4gT1BMMyksIHlvdSBoYXZlIHRvIGFwcGVuZCBhIGxpbmUgY29udGFpbmluZyAjZGVmaW5lIE1BRDE2X09QTDQKK3RvIHRoZSBmaWxlIGxpbnV4L2RyaXZlcnMvc291bmQvbG9jYWwuaCAoYWZ0ZXIgcnVubmluZyBtYWtlIGNvbmZpZykuCisKK01BRDE2IGNhcmRzIGhhdmluZyBhIENTNDIzMSBjb2RlYyBzdXBwb3J0IGZ1bGwgZHVwbGV4IG1vZGUuIFRoaXMgbW9kZQorY2FuIGJlIGVuYWJsZWQgYnkgY29uZmlndXJpbmcgdGhlIGNhcmQgdG8gdXNlIHR3byBETUEgY2hhbm5lbHMuIFBvc3NpYmxlCitETUEgY2hhbm5lbCBwYWlycyBhcmU6IDAmMSwgMSYwIGFuZCAzJjAuCisKK05PVEUhIENhcmRzIGhhdmluZyBhbiBPUFRpIDgyQzkyNC84MkM5MjUgY2hpcCB3b3JrIHdpdGggT1NTL0ZyZWUgb25seSBpbgorbm9uLVBuUCBtb2RlICh1c3VhbGx5IGp1bXBlciBzZWxlY3RhYmxlKS4gVGhlIFBuUCBtb2RlIGlzIHN1cHBvcnRlZCBvbmx5CitieSBPU1MvTGludXguCisKK01WIEphenogKFByb1NvbmljKQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBKYXp6MTYgZHJpdmVyIGlzIGp1c3QgYSBoYWNrIG1hZGUgdG8gdGhlIFNCIFBybyBkcml2ZXIuIEhvd2V2ZXIgaXQgd29ya3MKK2ZhaXJseSB3ZWxsLiBZb3UgaGF2ZSB0byBlbmFibGUgU0IsIFNCIFBybyAoX25vdF8gU0IxNikgYW5kIE1QVTQwMSBzdXBwb3J0cword2hlbiBjb25maWd1cmluZyB0aGUgZHJpdmVyLiBUaGUgY29uZmlndXJhdGlvbiBwcm9ncmFtIGFza3MgbGF0ZXIgaWYgeW91Cit3YW50IHN1cHBvcnQgZm9yIE1WIEphenoxNiBiYXNlZCBjYXJkcyAoYWZ0ZXIgYXNraW5nIFNCIGJhc2UgYWRkcmVzcykuIEFuc3dlcgorJ3knIGhlcmUgYW5kIHRoZSBkcml2ZXIgYXNrcyB0aGUgc2Vjb25kICgxNiBiaXQpIERNQSBjaGFubmVsLgorCitUaGUgSmF6ejE2IGRyaXZlciB1c2VzIHRoZSBNUFU0MDEgZHJpdmVyIGluIGEgd2F5IHdoaWNoIHdpbGwgY2F1c2UKK3Byb2JsZW1zIGlmIHlvdSBoYXZlIGFub3RoZXIgTVBVNDAxIGNvbXBhdGlibGUgY2FyZC4gSW4gdGhpcyBjYXNlIHlvdSBtdXN0CitnaXZlIGFkZHJlc3Mgb2YgdGhlIEphenoxNiBiYXNlZCBNUFU0MDEgaW50ZXJmYWNlIHdoZW4gdGhlIGNvbmZpZworcHJvZ3JhbSBwcm9tcHRzIGZvciB0aGUgTVBVNDAxIGluZm9ybWF0aW9uLiBUaGVuIGxvb2sgYXQgdGhlIE1QVTQwMQorc3BlY2lmaWMgc2VjdGlvbiBmb3IgaW5zdHJ1Y3Rpb25zIGFib3V0IGNvbmZpZ3VyaW5nIG1vcmUgdGhhbiBvbmUgTVBVNDAxIGNhcmRzLgorCitMb2dpdGVjaCBTb3VuZG1hbiBXYXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlYWQgdGhlIGFib3ZlIE1WIEphenogc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGZpcnN0LgorCitUaGUgTG9naXRlY2ggU291bmRNYW4gV2F2ZSAoZG9uJ3QgY29uZnVzZSB0aGlzIHdpdGggdGhlIFNNMTYgb3IgU00gR2FtZXMpIGlzCithIE1WIEphenogYmFzZWQgY2FyZCB3aGljaCBoYXMgYW4gYWRkaXRpb25hbCBPUEw0IGJhc2VkIHdhdmUgdGFibGUKK3N5bnRoZXNpemVyLiBUaGUgT1BMNCBjaGlwIGlzIGhhbmRsZWQgYnkgYW4gb24gYm9hcmQgbWljcm9jb250cm9sbGVyCit3aGljaCBtdXN0IGJlIGluaXRpYWxpemVkIGR1cmluZyBib290LiBUaGUgY29uZmlnIHByb2dyYW0gYXNrcyBpZgoreW91IGhhdmUgYSBTTSBXYXZlIGltbWVkaWF0ZWx5IGFmdGVyIGFza2luZyB0aGUgc2Vjb25kIERNQSBjaGFubmVsIG9mIGphenoxNi4KK0lmIHlvdSBhbnN3ZXIgJ3knLCB0aGUgY29uZmlnIHByb2dyYW0gd2lsbCBhc2sgbmFtZSBvZiB0aGUgZmlsZSBjb250YWluaW5nCitjb2RlIHRvIGJlIGxvYWRlZCB0byB0aGUgbWljcm9jb250cm9sbGVyLiBUaGUgZmlsZSBpcyB1c3VhbGx5IGNhbGxlZAorTUlESTAwMDEuQklOIGFuZCBpdCdzIGxvY2F0ZWQgaW4gdGhlIERPUy9XaW5kb3dzIGRyaXZlciBkaXJlY3RvcnkuIFRoZSBmaWxlCittYXkgYWxzbyBiZSBjYWxsZWQgYXMgVFNVTkFNSS5CSU4gb3Igc29tZXRoaW5nIGVsc2UgKG9sZGVyIGNhcmRzPykuCisKK1RoZSBPUEw0IHN5bnRoIHdpbGwgYmUgaW5hY2Nlc3NpYmxlIHdpdGhvdXQgbG9hZGluZyB0aGUgbWljcm9jb250cm9sbGVyIGNvZGUuCisKK0Fsc28gcmVtZW1iZXIgdG8gZW5hYmxlIFNCIE1QVTQwMSBzdXBwb3J0IGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgT1BMNCBtb2RlLgorKERvbid0IGVuYWJsZSB0aGUgJ25vcm1hbCcgTVBVNDAxIGRldmljZSBhcyB3aXRoIHNvbWUgZWFybGllciBkcml2ZXIKK3ZlcnNpb25zIChwcmUgMy41LWFscGhhOCkpLgorCitOT1RFIQlEb24ndCBhbnN3ZXIgJ3knIHdoZW4gdGhlIGRyaXZlciBhc2tzIGFib3V0IFNNIEdhbWVzIHN1cHBvcnQKKwkodGhlIG5leHQgcXVlc3Rpb24gYWZ0ZXIgdGhlIE1JREkwMDAxLkJJTiBuYW1lKS4gSG93ZXZlcgorCWFuc3dlcmluZyAneScgZG9lc24ndCBjYXVzZSBkYW1hZ2UgeW91ciBjb21wdXRlciBzbyBkb24ndCBwYW5pYy4gCisKK1NvdW5kIEdhbGF4aWVzCistLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgU291bmQgR2FsYXh5IGNhcmRzIG1hZGUgYnkgQXp0ZWNoLiBUaGUgOCBiaXQKK29uZXMgYXJlIGZ1bGx5IFNCIG9yIFNCIFBybyBjb21wYXRpYmxlIGFuZCB0aGVyZSBzaG91bGQgYmUgbm8gcHJvYmxlbXMKK3dpdGggdGhlbS4gCisKK1RoZSBvbGRlciAxNiBiaXQgY2FyZHMgKFNHIFBybzE2LCBTRyBOWCBQcm8xNiwgTm92YSBhbmQgTHlyYSkgaGF2ZQorYW4gRUVQUk9NIGNoaXAgZm9yIHN0b3JpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YS4gVGhlcmUgaXMgYSBtaWNyb2NvbnRyb2xsZXIKK3doaWNoIGluaXRpYWxpemVzIHRoZSBjYXJkIHRvIG1hdGNoIHRoZSBFRVBST00gc2V0dGluZ3Mgd2hlbiB0aGUgbWFjaGluZQoraXMgcG93ZXJlZCBvbi4gVGhlc2UgY2FyZHMgYWN0dWFsbHkgYmVoYXZlIGp1c3QgbGlrZSB0aGV5IGhhdmUganVtcGVycworZm9yIGFsbCBvZiB0aGUgc2V0dGluZ3MuIENvbmZpZ3VyZSBkcml2ZXIgZm9yIE1TUywgTVBVLCBTQi9TQiBQcm8gIGFuZCBPUEwzIAorc3VwcG9ydHMgd2l0aCB0aGVzZSBjYXJkcy4gCisKK1RoZXJlIGFyZSBzb21lIG5ldyBTb3VuZCBHYWxheGllcyBpbiB0aGUgbWFya2V0LiBJIGhhdmUgbm8gZXhwZXJpZW5jZSB3aXRoCit0aGVtIHNvIHJlYWQgdGhlIGNhcmQncyBtYW51YWwgY2FyZWZ1bGx5LgorCitFU1MgRVMxNjg4IGFuZCBFUzY4OCAnQXVkaW9Ecml2ZScgYmFzZWQgY2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3J0IGZvciB0aGVzZSB0d28gRVNTIGNoaXBzIGlzIGVtYmVkZGVkIGluIHRoZSBTQiBkcml2ZXIuCitDb25maWd1cmUgdGhlc2UgY2FyZHMganVzdCBsaWtlIFNCLiBFbmFibGUgdGhlICdTQiBNUFU0MDEgTUlESSBwb3J0JworaWYgeW91IHdhbnQgdG8gdXNlIE1JREkgZmVhdHVyZXMgb2YgRVMxNjg4LiBFUzY4OCBkb2Vzbid0IGhhdmUgTVBVIG1vZGUKK3NvIHlvdSBkb24ndCBuZWVkIHRvIGVuYWJsZSBpdCAodGhlIGRyaXZlciB1c2VzIG5vcm1hbCBTQiBNSURJIGF1dG9tYXRpY2FsbHkKK3dpdGggRVM2ODgpLgorCitOT1RFISBFU1MgY2FyZHMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggTVNTL1dTUyBzbyBkb24ndCB3b3JyeSBpZiBNU1Mgc3VwcG9ydAorb2YgT1NTIGRvZXNuJ3Qgd29yayB3aXRoIGl0LgorCitUaGVyZSBhcmUgc29tZSBFUzE2ODgvNjg4IGJhc2VkIHNvdW5kIGNhcmRzIGFuZCAocGFydGljdWxhcmx5KSBtb3RoZXJib2FyZHMKK3doaWNoIHVzZSBzb2Z0d2FyZSBjb25maWd1cmFibGUgSS9PIHBvcnQgcmVsb2NhdGlvbiBmZWF0dXJlIG9mIHRoZSBjaGlwLgorVGhpcyBFU1MgcHJvcHJpZXRhcnkgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgb25seSBieSBPU1MvTGludXguCisKK1RoZXJlIGFyZSBFUzE2ODggYmFzZWQgY2FyZHMgd2hpY2ggdXNlIGRpZmZlcmVudCBpbnRlcnJ1cHQgcGluIGFzc2lnbm1lbnQgdGhhbgorcmVjb21tZW5kZWQgYnkgRVNTICg1LCA3LCA5LzIgYW5kIDEwKS4gSW4gdGhpcyBjYXNlIGFsbCBJUlFzIGRvbid0IHdvcmsuCitBdCBsZWFzdCBhIGNhcmQgY2FsbGVkIChQZWFybD8pIEh5cGVyc291bmQgMTYgc3VwcG9ydHMgSVJRIDE1IGJ1dCBpdCBkb2Vzbid0Cit3b3JrLgorCitFUzE4NjggaXMgYSBQblAgY2hpcCB3aGljaCBpcyAoc3VwcG9zZWQgdG8gYmUpIGNvbXBhdGlibGUgd2l0aCBFU1MxNjg4Citwcm9iYWJseSB3b3JrcyB3aXRoIE9TUy9GcmVlIGFmdGVyIGluaXRpYWxpemF0aW9uIHVzaW5nIGlzYXBucHRvb2xzLgorCitSZXZlYWwgY2FyZHMKKy0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgY2FyZHMgbWFkZS9tYXJrZXRlZCBieSBSZXZlYWwuIFNvbWUgb2YgdGhlbQorYXJlIGNvbXBhdGlibGUgd2l0aCBTb3VuZFNjYXBlIGFuZCBzb21lIHVzZSB0aGUgTUFEMTYgY2hpcC4gWW91IG1heSBoYXZlCit0byBsb29rIGF0IHRoZSBjYXJkIGFuZCB0cnkgdG8gaWRlbnRpZnkgaXRzIG9yaWdpbi4KKworRGlhbW9uZAorLS0tLS0tLQorCitUaGUgb2xkZXN0IChTaWVycmEgQXJpYSBiYXNlZCkgc291bmQgY2FyZHMgbWFkZSBieSBEaWFtb25kIGFyZSBub3Qgc3VwcG9ydGVkCisodGhleSBtYXkgd29yayBpZiB0aGUgY2FyZCBpcyBpbml0aWFsaXplZCB1c2luZyBET1MpLiBUaGUgcmVjZW50IChMWD8pCittb2RlbHMgYXJlIGJhc2VkIG9uIHRoZSBNQUQxNiBjaGlwIHdoaWNoIGlzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgorCitBdWRpbyBFeGNlbCBEU1AxNgorLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9ydCBmb3IgdGhpcyBjYXJkIGlzIGN1cnJlbnRseSBub3QgZnVuY3Rpb25hbC4gQSBuZXcgZHJpdmVyIGZvciBpdAorc2hvdWxkIGJlIGF2YWlsYWJsZSBsYXRlciB0aGlzIHllYXIuCisKK1BDTUNJQSBjYXJkcworLS0tLS0tLS0tLS0tCisKK1NvcnJ5LCBjYW4ndCBoZWxwLiBTb21lIGNhcmRzIG1heSB3b3JrIGFuZCBzb21lIGRvbid0LgorCitUSSBUTTQwMDBNIG5vdGVib29rcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY29tcHV0ZXJzIGhhdmUgYSBidWlsdCBpbiBzb3VuZCBzdXBwb3J0IGJhc2VkIG9uIHRoZSBKYXp6IGNoaXBzZXQuCitMb29rIGF0IHRoZSBpbnN0cnVjdGlvbnMgZm9yIE1WIEphenogKGFib3ZlKS4gSXQncyBhbHNvIGltcG9ydGFudCB0byBub3RlCit0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBtb3VzZSBwb3J0IGFuZCBzb3VuZCBhdCBsZWFzdCBvbgorc29tZSBUTSBtb2RlbHMuIERvbid0IGVuYWJsZSB0aGUgIkMmVCA4MkM3MTAgbW91c2UgcG9ydCBzdXBwb3J0IiB3aGVuCitjb25maWd1cmluZyBMaW51eC4gSGF2aW5nIGl0IGVuYWJsZWQgaXMgbGlrZWx5IHRvIGNhdXNlIG15c3RlcmlvdXMgcHJvYmxlbXMKK2FuZCBrZXJuZWwgZmFpbHVyZXMgd2hlbiBzb3VuZCBpcyB1c2VkLgorCittaXJvU09VTkQKKy0tLS0tLS0tLQorCitUaGUgbWlyb1NPVU5EIFBDTTEtcHJvLCBQQ00xMiBhbmQgUENNMjAgcmFkaW8gaGFzIGJlZW4gdXNlZAorc3VjY2Vzc2Z1bGx5LiBUaGVzZSBjYXJkcyBhcmUgYmFzZWQgb24gdGhlIE1BRDE2LCBPUEw0LCBhbmQgQ1M0MjMxQSBjaGlwcworYW5kIGV2ZXJ5dGhpbmcgc2FpZCBpbiB0aGUgc2VjdGlvbiBhYm91dCBNQUQxNiBjYXJkcyBhcHBsaWVzIGhlcmUsCit0b28uIFRoZSBvbmx5IG1ham9yIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgUENNeHggYW5kIG90aGVyIE1BRDE2IGNhcmRzCitpcyB0aGF0IGluc3RlYWQgb2YgdGhlIG1peGVyIGluIHRoZSBDUzQyMzEgY29kZWMgYSBzZXBhcmF0ZSBtaXhlcgorY29udHJvbGxlZCBieSBhbiBvbi1ib2FyZCA4MEMzMiBtaWNyb2NvbnRyb2xsZXIgaXMgdXNlZC4gQ29udHJvbCBvZgordGhlIG1peGVyIHRha2VzIHBsYWNlIHZpYSB0aGUgQUNJIChtaXJvJ3MgYXVkaW8gY29udHJvbCBpbnRlcmZhY2UpCitwcm90b2NvbCB0aGF0IGlzIGltcGxlbWVudGVkIGluIGEgc2VwYXJhdGUgbG93bGV2ZWwgZHJpdmVyLiBNYWtlIHN1cmUKK3lvdSBjb21waWxlIHRoaXMgQUNJIGRyaXZlciB0b2dldGhlciB3aXRoIHRoZSBub3JtYWwgTUFEMTYgc3VwcG9ydAord2hlbiB5b3UgdXNlIGEgbWlyb1NPVU5EIFBDTXh4IGNhcmQuIFRoZSBBQ0kgbWl4ZXIgaXMgY29udHJvbGxlZCBieQorL2Rldi9taXhlciBhbmQgdGhlIENTNDIzMSBtaXhlciBieSAvZGV2L21peGVyMSAoZGVwZW5kcyBvbiBsb2FkCit0aW1lKS4gT25seSBpbiBzcGVjaWFsIGNhc2VzIHlvdSB3YW50IHRvIGNoYW5nZSBzb21ldGhpbmcgcmVndWxhcmx5IG9uCit0aGUgQ1M0MjMxIG1peGVyLgorCitUaGUgbWlyb1NPVU5EIFBDTTEyIGFuZCBQQ00yMCByYWRpbyBpcyBjYXBhYmxlIG9mIGZ1bGwgZHVwbGV4CitvcGVyYXRpb24gKHNpbXVsdGFuZW91cyBQQ00gcmVwbGF5IGFuZCByZWNvcmRpbmcpLCB3aGljaCBhbGxvd3MgeW91IHRvCitpbXBsZW1lbnQgbmljZSByZWFsLXRpbWUgc2lnbmFsIHByb2Nlc3NpbmcgYXVkaW8gZWZmZWN0IHNvZnR3YXJlIGFuZAorbmV0d29yayB0ZWxlcGhvbmVzLiBUaGUgQUNJIG1peGVyIGhhcyB0byBiZSBzd2l0Y2hlZCBpbnRvIHRoZSAic29sbyIKK21vZGUgZm9yIGR1cGxleCBvcGVyYXRpb24gaW4gb3JkZXIgdG8gYXZvaWQgZmVlZGJhY2sgY2F1c2VkIGJ5IHRoZQorbWl4ZXIgKGlucHV0IGhlYXJzIG91dHB1dCBzaWduYWwpLiBZb3UgY2FuIGRlLS9hY3RpdmF0ZSB0aGlzIG1vZGUKK3Rocm91Z2ggdG9nZ2xlaW5nIHRoZSByZWNvcmQgYnV0dG9uIGZvciB0aGUgd2F2ZSBjb250cm9sbGVyIHdpdGggYW4KK09TUy1taXhlci4KKworVGhlIFBDTTIwIGNvbnRhaW5zIGEgcmFkaW8gdHVuZXIsIHdoaWNoIGlzIGFsc28gY29udHJvbGxlZCBieQorQUNJLiBUaGlzIHJhZGlvIHR1bmVyIGlzIHN1cHBvcnRlZCBieSB0aGUgQUNJIGRyaXZlciB0b2dldGhlciB3aXRoIHRoZQorbWlyb3BjbTIwLm8gbW9kdWxlLiBBbHNvIHRoZSA3LWJhbmQgZXF1YWxpemVyIGlzIGludGVncmF0ZWQKKyhsaW1pdGVkIGJ5IHRoZSBPU1MtZGVzaWduKS4gRGV2ZWxvcGVtZW50IGhhcyBzdGFydGVkIGFuZCBtYXliZQorZmluaXNoZWQgZm9yIHRoZSBSRFMgZGVjb2RlciBvbiB0aGlzIGNhcmQsIHRvby4gWW91IHdpbGwgYmUgYWJsZSB0bworcmVhZCBSYWRpb1RleHQsIHRoZSBQcm9ncmFtbWUgU2VydmljZSBuYW1lLCBQcm9ncmFtbWUgVFlwZSBhbmQKK290aGVycy4gRXZlbiB0aGUgdjRsIHJhZGlvIG1vZHVsZSBiZW5lZml0cyBmcm9tIGl0IHdpdGggYSByZWZpbmVkCitzdHJlbmd0aCB2YWx1ZS4gU2VlIGFjaS5bY2hdIGFuZCBtaXJvcGNtMjAqLltjaF0gZm9yIG1vcmUgZGV0YWlscy4KKworVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgaGF2ZSB3b3JrZWQgZmluZSBmb3IgdGhlIFBDTTEyCitpbiBNYXJrdXMgS3VobidzIHN5c3RlbSwgbWFueSBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCB3b3JrLCB0b286CitDT05GSUdfTUFEMTZfQkFTRT0weDUzMCwgQ09ORklHX01BRDE2X0lSUT0xMSwgQ09ORklHX01BRDE2X0RNQT0zLCAKK0NPTkZJR19NQUQxNl9ETUEyPTAsIENPTkZJR19NQUQxNl9NUFVfQkFTRT0weDMzMCwgQ09ORklHX01BRDE2X01QVV9JUlE9MTAsCitEU1BfQlVGRlNJWkU9NjU1MzYsIFNFTEVDVEVEX1NPVU5EX09QVElPTlM9MHgwMDI4MTAwMC4KKworQmFzIHZhbiBkZXIgTGluZGVuIGlzIHVzaW5nIGhpcyBQQ00xLXBybyB3aXRoIGEgY29uZmlndXJhdGlvbiB0aGF0CitkaWZmZXJzIGluOiBDT05GSUdfTUFEMTZfSVJRPTcsIENPTkZJR19NQUQxNl9ETUE9MSwgQ09ORklHX01BRDE2X01QVV9JUlE9OQorCitDb21wYXEgRGVza3BybyBYTAorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGJ1aWx0aW4gc291bmQgaGFyZHdhcmUgb2YgQ29tcGFxIERlc2twcm8gWEwgaXMgbm93IHN1cHBvcnRlZC4gCitZb3UgbmVlZCB0byBjb25maWd1cmUgdGhlIGRyaXZlciB3aXRoIE1TUyBhbmQgT1BMMyBzdXBwb3J0cyBlbmFibGVkLgorSW4gYWRkaXRpb24geW91IG5lZWQgdG8gbWFudWFsbHkgZWRpdCBsaW51eC9kcml2ZXJzL3NvdW5kL2xvY2FsLmggYW5kCit0byBhZGQgYSBsaW5lIGNvbnRhaW5pbmcgIiNkZWZpbmUgREVTS1BST1hMIiBpZiB5b3UgdXNlZCAKK21ha2UgbWVudWNvbmZpZy94Y29uZmlnLgorCitPdGhlcnM/CistLS0tLS0tCisKK1NpbmNlIHRoZXJlIGFyZSBzbyBtYW55IGRpZmZlcmVudCBzb3VuZCBjYXJkcywgaXQncyBsaWtlbHkgdGhhdCBJIGhhdmUgCitmb3Jnb3R0ZW4gdG8gbWVudGlvbiBtYW55IG9mIHRoZW0uIFBsZWFzZSBpbmZvcm0gbWUgaWYgeW91IGtub3cgeWV0IGFub3RoZXIKK2NhcmQgd2hpY2ggd29ya3Mgd2l0aCBMaW51eCwgcGxlYXNlIGluZm9ybSBtZSAob3IgaXMgYW55Ym9keSBlbHNlCit3aWxsaW5nIHRvIG1haW50YWluIGEgZGF0YWJhc2Ugb2Ygc3VwcG9ydGVkIGNhcmRzIChqdXN0IGxpa2UgaW4gWEY4Nik/KS4KKworQ2FyZHMgbm90IHN1cHBvcnRlZCB5ZXQKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1BsZWFzZSBjaGVjayB0aGUgdmVyc2lvbiBvZiBzb3VuZCBkcml2ZXIgeW91IGFyZSB1c2luZyBiZWZvcmUgCitjb21wbGFpbmluZyB0aGF0IHlvdXIgY2FyZCBpcyBub3Qgc3VwcG9ydGVkLiBJdCdzIHBvc3NpYmxlIHlvdSBhcmUgCit1c2luZyBhIGRyaXZlciB2ZXJzaW9uIHdoaWNoIHdhcyByZWxlYXNlZCBtb250aHMgYmVmb3JlIHlvdXIgY2FyZCB3YXMKK2ludHJvZHVjZWQuCisKK0ZpcnN0IG9mIGFsbCwgdGhlcmUgaXMgYW4gZWFzeSB3YXkgdG8gbWFrZSBtb3N0IHNvdW5kIGNhcmRzIHdvcmsgd2l0aCBMaW51eC4KK0p1c3QgdXNlIHRoZSBET1MgYmFzZWQgZHJpdmVyIHRvIGluaXRpYWxpemUgdGhlIGNhcmQgdG8gYSBrbm93biBzdGF0ZSwgdGhlbiB1c2UKK2xvYWRsaW4uZXhlIHRvIGJvb3QgTGludXguIElmIExpbnV4IGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzYW1lIEkvTywgSVJRIGFuZAorRE1BIG51bWJlcnMgYXMgRE9TLCB0aGUgY2FyZCBjb3VsZCB3b3JrLgorKGN0cmwtYWx0LWRlbCBjYW4gYmUgdXNlZCBpbiBwbGFjZSBvZiBsb2FkbGluLmV4ZSBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGgKK25ldyBtb3RoZXJib2FyZHMpLiBUaGlzIG1ldGhvZCB3b3JrcyBhbHNvIHdpdGggYWxsL21vc3QgUG5QIHNvdW5kIGNhcmRzLgorCitEb24ndCBnZXQgZm9vbGVkIHdpdGggU0IgY29tcGF0aWJpbGl0eS4gTW9zdCBjYXJkcyBhcmUgY29tcGF0aWJsZSB3aXRoCitTQiBidXQgdGhhdCBtYXkgcmVxdWlyZSBhIFRTUiB3aGljaCBpcyBub3QgcG9zc2libGUgd2l0aCBMaW51eC4gSWYKK3RoZSBjYXJkIGlzIGNvbXBhdGlibGUgd2l0aCBNU1MsIGl0J3MgYSBiZXR0ZXIgY2hvaWNlLiBTb21lIGNhcmRzCitkb24ndCB3b3JrIGluIHRoZSBTQiBhbmQgTVNTIG1vZGVzIGF0IHRoZSBzYW1lIHRpbWUuCisKK1RoZW4gdGhlcmUgYXJlIGNhcmRzIHdoaWNoIGFyZSBubyBsb25nZXIgbWFudWZhY3R1cmVkIGFuZC9vciB3aGljaAorYXJlIHJlbGF0aXZlbHkgcmFyZWx5IHVzZWQgKHN1Y2ggYXMgdGhlIDggYml0IFByb0F1ZGlvU3BlY3RydW0KK21vZGVscykuIEl0J3MgZXh0cmVtZWx5IHVubGlrZWx5IHRoYXQgc3VjaCBjYXJkcyBldmVyIGdldCBzdXBwb3J0ZWQuCitBZGRpbmcgc3VwcG9ydCBmb3IgYSBuZXcgY2FyZCByZXF1aXJlcyBtdWNoIHdvcmsgYW5kIGluY3JlYXNlcyB0aW1lCityZXF1aXJlZCBpbiBtYWludGFpbmluZyB0aGUgZHJpdmVyIChzb21lIGNoYW5nZXMgbmVlZCB0byBiZSBkb25lCit0byBhbGwgbG93IGxldmVsIGRyaXZlcnMgYW5kIGJlIHRlc3RlZCB0b28sIG1heWJlIHdpdGggbXVsdGlwbGUKK29wZXJhdGluZyBzeXN0ZW1zKS4gRm9yIHRoaXMgcmVhc29uIEkgaGF2ZSBtYWRlIGEgZGVjaXNpb24gdG8gbm90IHN1cHBvcnQKK29ic29sZXRlIGNhcmRzLiBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZW9uZSBlbHNlIG1ha2VzIGEgc2VwYXJhdGVseSAKK2Rpc3RyaWJ1dGVkIGRyaXZlciAoZGlmZnMpIGZvciB0aGUgY2FyZC4gCisKK1dyaXRpbmcgYSBkcml2ZXIgZm9yIGEgbmV3IGNhcmQgaXMgbm90IHBvc3NpYmxlIGlmIHRoZXJlIGFyZSBubyAKK3Byb2dyYW1taW5nIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBhYm91dCB0aGUgY2FyZC4gSWYgeW91IGRvbid0CitmaW5kIHlvdXIgbmV3IGNhcmQgZnJvbSB0aGlzIGZpbGUsIGxvb2sgZnJvbSB0aGUgaG9tZSBwYWdlIAorKGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlKS4gVGhlbiBwbGVhc2UgY29udGFjdAorbWFudWZhY3R1cmVyIG9mIHRoZSBjYXJkIGFuZCBhc2sgaWYgdGhleSBoYXZlIChvciBhcmUgd2lsbGluZyB0bykKK3JlbGVhc2VkIHRlY2huaWNhbCBkZXRhaWxzIG9mIHRoZSBjYXJkLiBEbyB0aGlzIGJlZm9yZSBjb250YWN0aW5nIG1lLiBJCitjYW4gb25seSBhbnN3ZXIgJ25vJyBpZiB0aGVyZSBhcmUgbm8gcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gYXZhaWxhYmxlLgorCitJIGhhdmUgbWFkZSBkZWNpc2lvbiB0byBub3QgYWNjZXB0IGNvZGUgYmFzZWQgb24gcmV2ZXJzZSBlbmdpbmVlcmluZwordG8gdGhlIGRyaXZlci4gVGhlcmUgYXJlIHRocmVlIG1haW4gcmVhc29uczogRmlyc3QgSSBkb24ndCB3YW50IHRvIGJyZWFrCityZWxhdGlvbnNoaXBzIHRvIHNvdW5kIGNhcmQgbWFudWZhY3R1cmVycy4gVGhlIHNlY29uZCByZWFzb24gaXMgdGhhdAorbWFpbnRhaW5pbmcgYW5kIHN1cHBvcnRpbmcgYSBkcml2ZXIgd2l0aG91dCBhbnkgc3BlY3Mgd2lsbCBiZSBhIHBhaW4uCitUaGUgdGhpcmQgcmVhc29uIGlzIHRoYXQgY29tcGFuaWVzIGhhdmUgZnJlZWRvbSB0byByZWZ1c2Ugc2VsbGluZyB0aGVpcgorcHJvZHVjdHMgdG8gb3RoZXIgdGhhbiBXaW5kb3dzIHVzZXJzLgorCitTb21lIGNvbXBhbmllcyBkb24ndCBnaXZlIGxvdyBsZXZlbCB0ZWNobmljYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlaXIKK3Byb2R1Y3RzIHRvIHB1YmxpYyBvciBhdCBsZWFzdCB0aGVpciByZXF1aXJlIHNpZ25pbmcgYSBOREEuIEl0J3Mgbm90Citwb3NzaWJsZSB0byBpbXBsZW1lbnQgYSBmcmVld2FyZSBkcml2ZXIgZm9yIHRoZW0uIEhvd2V2ZXIgaXQncyBwb3NzaWJsZQordGhhdCBzdXBwb3J0IGZvciBzdWNoIGNhcmRzIGJlY29tZSBhdmFpbGFibGUgaW4gdGhlIGNvbW1lcmNpYWwgdmVyc2lvbgorb2YgdGhpcyBkcml2ZXIgKHNlZSBodHRwOi8vd3d3LjRGcm9udC10ZWNoLmNvbS9vc3MuaHRtbCBmb3IgbW9yZSBpbmZvKS4KKworVGhlcmUgYXJlIHNvbWUgY29tbW9uIGF1ZGlvIGNoaXBzZXRzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiBGb3IgZXhhbXBsZQorU2llcnJhIEFyaWEgYW5kIElCTSBNd2F2ZS4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGFyY2hpdGVjdHVyZXMKK2dldCBzb21lIHN1cHBvcnQgaW4gZnV0dXJlIGJ1dCBJIGNhbid0IG1ha2UgYW55IHByb21pc2VzLiBKdXN0IGxvb2sKK2F0IHRoZSBob21lIHBhZ2UgKGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlL25ld19jYXJkcy5odG1sKQorZm9yIGxhdGVzdCBpbmZvLgorCitJbmZvcm1hdGlvbiBhYm91dCB1bnN1cHBvcnRlZCBzb3VuZCBjYXJkcyBhbmQgY2hpcHNldHMgaXMgd2VsY29tZSBhcyB3ZWxsCithcyBmcmVlIGNvcGllcyBvZiBzb3VuZCBjYXJkcywgU0RLcyBhbmQgb3BlcmF0aW5nIHN5c3RlbXMuCisKK0lmIHlvdSBoYXZlIGFueSBjb3JyZWN0aW9ucyBhbmQvb3IgY29tbWVudHMsIHBsZWFzZSBjb250YWN0IG1lLgorCitIYW5udSBTYXZvbGFpbmVuCitoYW5udUBvcGVuc291bmQuY29tCisKK1BlcnNvbmFsIGhvbWUgcGFnZToJICAgaHR0cDovL3d3dy5jb21wdXNvbmljLmZpL35oYW5udQoraG9tZSBwYWdlIG9mIE9TUy9GcmVlOiBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzZnJlZQorCitob21lIHBhZ2Ugb2YgY29tbWVyY2lhbCBPU1MKKyhPcGVuIFNvdW5kIFN5c3RlbSkgZHJpdmVyczogaHR0cDovL3d3dy5vcGVuc291bmQuY29tL29zcy5odG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuYXdlIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLmF3ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDA1NGNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLmF3ZQpAQCAtMCwwICsxLDIxOCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUFXRTMyIFNvdW5kIERyaXZlciBmb3IgTGludXggLyBGcmVlQlNECisJCXZlcnNpb24gMC40LjM7IE5vdi4gMSwgMTk5OAorCisJVGFrYXNoaSBJd2FpIDxpd2FpQHd3LnVuaS1lcmxhbmdlbi5kZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBHRU5FUkFMIE5PVEVTCisKK1RoaXMgaXMgYSBzb3VuZCBkcml2ZXIgZXh0ZW5zaW9uIGZvciBTb3VuZEJsYXN0ZXIgQVdFMzIgYW5kIG90aGVyCitjb21wYXRpYmxlIGNhcmRzIChBV0UzMi1QblAsIFNCMzIsIFNCMzItUG5QLCBBV0U2NCAmIGV0YykgdG8gZW5hYmxlCit0aGUgd2F2ZSBzeW50aCBvcGVyYXRpb25zLiAgVGhlIGRyaXZlciBpcyBwcm92aWRlZCBmb3IgTGludXggMS4yLngKK2FuZCAyLlswMTJdLngga2VybmVscywgYXMgd2VsbCBhcyBGcmVlQlNELCBvbiBJbnRlbCB4ODYgYW5kIERFQworQWxwaGEgc3lzdGVtcy4KKworVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gYnkgVGFrYXNoaSBJd2FpIDxpd2FpQHd3LnVuaS1lcmxhbmdlbi5kZT4sCithbmQgcHJvdmlkZWQgImFzIGlzIi4gIFRoZSBvcmlnaW5hbCBzb3VyY2UgKGF3ZWRydi0wLjQuMy50YXIuZ3opIGFuZAorYmluYXJ5IHBhY2thZ2VzIGFyZSBhdmFpbGFibGUgb24gdGhlIGZvbGxvd2luZyBVUkw6CisJaHR0cDovL2JhaGFtdXQubW0udC51LXRva3lvLmFjLmpwL35pd2FpL2F3ZWRydi8KK05vdGUgdGhhdCBzaW5jZSB0aGUgYXV0aG9yIGlzIGFwYXJ0IGZyb20gdGhpcyB3ZWIgc2l0ZSwgdGhlIHVwZGF0ZSBpcworbm90IGZyZXF1ZW50IG5vdy4KKworCisqIE5PVEUgVE8gTElOVVggVVNFUlMKKworVG8gZW5hYmxlIHRoaXMgZHJpdmVyIG9uIGxpbnV4LTIuWzAxXS54IGtlcm5lbHMsIHlvdSBuZWVkIHR1cm4gb24gCisiQVdFMzIgc3ludGgiIG9wdGlvbnMgaW4gc291bmQgbWVudSB3aGVuIGNvbmZpZ3VyZSB5b3VyIGxpbnV4IGtlcm5lbAorYW5kIG1vZHVsZXMuICBUaGUgcHJlY2lzZSBpbnN0YWxsYXRpb24gcHJvY2VkdXJlIGlzIGRlc2NyaWJlZCBpbiB0aGUKK0FXRTY0LU1pbmktSE9XVE8gYW5kIGxpbnV4LWtlcm5lbC9Eb2N1bWV0YXRpb24vc291bmQvQVdFMzIuCisKK0lmIHlvdSdyZSB1c2luZyBQblAgY2FyZHMsIHRoZSBjYXJkIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGxvYWRpbmcKK3RoZSBzb3VuZCBkcml2ZXIuICBUaGVyZSdyZSBzZXZlcmFsIG9wdGlvbnMgdG8gZG8gdGhpczoKKyAgICAtIEluaXRpYWxpemUgdGhlIGNhcmQgdmlhIElTQSBQblAgdG9vbHMsIGFuZCBsb2FkIHRoZSBzb3VuZCBtb2R1bGUuCisgICAgLSBJbml0aWFsaXplIHRoZSBjYXJkIG9uIERPUywgYW5kIGxvYWQgbGludXggYnkgbG9hZGxpbi5leGUKKyAgICAtIFVzZSBQblAga2VybmVsIGRyaXZlciAoZm9yIExpbnV4LTIueC54KQorVGhlIGRldGFpbGVkIGluc3RydWN0aW9uIGZvciB0aGUgc29sdXRpb24gdXNpbmcgaXNhcG5wIHRvb2xzIGlzIGZvdW5kCitpbiBtYW55IGRvY3VtZW50cyBsaWtlIGFib3ZlLiAgQSBicmllZiBpbnN0cnVjdGlvbiBpcyBhbHNvIGluY2x1ZGVkIGluCit0aGUgaW5zdGFsbGF0aW9uIGRvY3VtZW50IG9mIHRoaXMgcGFja2FnZS4KK0ZvciBQblAgZHJpdmVyIHByb2plY3QsIHBsZWFzZSByZWZlciB0byB0aGUgZm9sbG93aW5nIFVSTDoKKwlodHRwOi8vd3d3LWpjci5sbWgub3guYWMudWsvfnBucC8KKworCisqIFVTSU5HIFRIRSBEUklWRVIKKworVGhlIGF3ZWRydiBoYXMgc2V2ZXJhbCBkaWZmZXJlbnQgcGxheWluZyBtb2RlcyB0byByZWFsaXplIGVhc3kgY2hhbm5lbCAKK2FsbG9jYXRpb24gZm9yIE1JREkgc29uZ3MuICBUbyBoZWFyIHRoZSBleGFjdCBzb3VuZCBxdWFsaXR5LCB5b3UgbmVlZAordG8gb2J0YWluIHRoZSBleHRlbmRlZCBzZXF1ZW5jZXIgcHJvZ3JhbSwgZHJ2bWlkaSBvciBwbGF5bWlkaS0yLjUuCisKK0ZvciBwbGF5aW5nIE1JREkgZmlsZXMsIHlvdSAqTVVTVCogbG9hZCB0aGUgc291bmRmb250IGZpbGUgb24gdGhlCitkcml2ZXIgcHJldmlvdXNseSBieSBzZnhsb2FkIHV0aWxpdHkuICBPdGhlcndpc2UgeW91J2xsIGhlcmUgbm8gc291bmRzIAorYXQgYWxsISAgQWxsIHRoZSB1dGlsaXRpZXMgYW5kIGRyaXZlciBzb3VyY2UgcGFja2FnZXMgYXJlIGZvdW5kIGluIHRoZQorYWJvdmUgVVJMLiAgVGhlIHNmeGxvYWQgcHJvZ3JhbSBpcyBpbmNsdWRlZCBpbiB0aGUgcGFja2FnZQorYXdlc2Z4LTAuNC4zLnRnei4gIEJpbmFyeSBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlIHRoZXJlLCB0b28uICBTZWUgdGhlCitpbnN0cnVjdGlvbiBpbiBlYWNoIHBhY2thZ2UgZm9yIGluc3RhbGxhdGlvbi4KKworTG9hZGluZyBhIHNvdW5kZm9udCBmaWxlIGlzIHZlcnkgc2ltcGxlLiAgSnVzdCBleGVjdXRlIHRoZSBjb21tYW5kCisKKwklIHNmeGxvYWQgc3ludGhnbS5zYmsKKworVGhlbiwgc2Z4bG9hZCB0cmFuc2ZlcnMgdGhlIGZpbGUgInN5bnRoZ20uc2JrIiB0byB0aGUgZHJpdmVyLgorQm90aCBTRjEgYW5kIFNGMiBmb3JtYXRzIGFyZSBhY2NlcHRlZC4KKworTm93IHlvdSBjYW4gaGVhciBtaWRpIG11c2ljcyBieSBhIG1pZGkgcGxheWVyLgorCisJJSBkcnZtaWRpIGZvby5taWQKKworSWYgeW91IHJ1biBNSURJIHBsYXllciBhZnRlciBNT0QgcGxheWVyLCB5b3UgbmVlZCB0byBsb2FkIHNvdW5kZm9udAorZmlsZXMgYWdhaW4sIHNpbmNlIE1PRCBwbGF5ZXIgcHJvZ3JhbXMgY2xlYXIgdGhlIHByZXZpb3VzIGxvYWRlZAorc2FtcGxlcyBieSB0aGVpciBvd24gZGF0YS4KKworSWYgeW91IGhhdmUgb25seSA1MTJrYiBvbiB0aGUgc291bmQgY2FyZCwgSSByZWNvbW1lbmQgdG8gdXNlIGR5bmFtaWMKK3NhbXBsZSBsb2FkaW5nIHZpYSAtTCBvcHRpb24gb2YgZHJ2bWlkaS4gIDJNQiBHTS9HUyBzb3VuZGZvbnQgZmlsZSBpcworYXZhaWxhYmxlIGluIG1vc3QgbWlkaSBmaWxlcy4KKworCSUgc2Z4bG9hZCBzeW50aGdtCisJJSBkcnZtaWRpIC1MIDJtYmdtZ3MgZm9vLm1pZAorCitUaGlzIG1ha2VzIGEgYmlnIGRpZmZlcmVuY2UgKGJlbGlldmUgbWUpISAgRm9yIG1vcmUgZGV0YWlscywgcGxlYXNlCityZWZlciB0byB0aGUgRkFRIGxpc3Qgd2hpY2ggaXMgYXZhaWxhYmxlIG9uIHRoZSBVUkwgYWJvdmUuCisKK1RoZSBjdXJyZW50IGNob3J1cywgcmV2ZXJiIGFuZCBlcXVhbGl6ZXIgc3RhdHVzIGNhbiBiZSBjaGFuZ2VkIGJ5Cithd2VzZXQgdXRpbGl0eSBwcm9ncmFtIChpbmNsdWRlZCBpbiBhd2VzZnggcGFja2FnZSkuICBOb3RlIHRoYXQKK3NvbWUgYXdlZHJ2LW5hdGl2ZSBwcm9ncmFtcyAobGlrZSBkcnZtaWRpIGFuZCB4bXApIHdpbGwgY2hhbmdlIHRoZQorY3VycmVudCBzZXR0aW5ncyBieSB0aGVtc2VsdmVzLiAgVGhlIGF3ZXNldCBwcm9ncmFtIGlzIGVmZmVjdGl2ZQorb25seSBmb3Igb3RoZXIgcHJvZ3JhbXMgbGlrZSBwbGF5bWlkaS4KKworRW5qb3kuCisKKworKiBDT01QSUxFIEZMQUdTCisKK0NvbXBpbGUgY29uZGl0aW9ucyBhcmUgZGVmaW5lZCBpbiBhd2VfY29uZmlnLmguCisKK1tDb21wYXRpYmlsaXR5IENvbmRpdGlvbnNdCitUaGUgZm9sbG93aW5nIGZsYWdzIGFyZSBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2luZyBpbnN0YWxsYXRpb24KK3NoZWxsIHNjcmlwdC4KKworLSBBV0VfTU9EVUxFX1NVUFBPUlQKKyAgICBpbmRpY2F0ZXMgeW91ciBMaW51eCBrZXJuZWwgc3VwcG9ydHMgbW9kdWxlIGZvciBlYWNoIHNvdW5kIGNhcmQKKyAgICAoaW4gcmVjZW50IDIuMSBvciAyLjIga2VybmVscyBhbmQgdW5vZmZpY2lhbCBwYXRjaGVkIDIuMCBrZXJuZWxzCisgICAgYXMgZGlzdHJpYnV0ZWQgaW4gdGhlIFJINS4wIHBhY2thZ2UpLgorICAgIFRoaXMgZmxhZyBpcyBhdXRvbWF0aWNhbGx5IHNldCB3aGVuIHlvdSdyZSB1c2luZyAyLjEueCBrZXJuZWxzLgorICAgIFlvdSBjYW4gcGFzcyB0aGUgYmFzZSBhZGRyZXNzIGFuZCBtZW1vcnkgc2l6ZSB2aWEgdGhlIGZvbGxvd2luZworICAgIG1vZHVsZSBvcHRpb25zLAorCWlvID0gYmFzZSBJL08gcG9ydCBhZGRyZXNzIChlZy4gMHg2MjApCisJbWVtc2l6ZSA9IERSQU0gc2l6ZSBpbiBraWxvYnl0ZXMgKGVnLiA1MTIpCisgICAgQXMgZGVmYXVsdCwgQVdFIGRyaXZlciBwcm9iZXMgdGhlc2UgdmFsdWVzIGF1dG9tYXRpY2FsbHkuCisKKworW0hhcmR3YXJlIENvbmRpdGlvbnNdCitZb3UgRE9OJ1QgaGF2ZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZyB0d28gdmFsdWVzLgorRGVmaW5lIHRoZW0gb25seSB3aGVuIHRoZSBkcml2ZXIgY291bGRuJ3QgZGV0ZWN0IHRoZSBjYXJkIHByb3Blcmx5LgorCistIEFXRV9ERUZBVUxUX0JBU0VfQUREUgkJKGRlZmF1bHQ6IG5vdCBkZWZpbmVkKQorICAgIHNwZWNpZmllcyB0aGUgYmFzZSBwb3J0IGFkZHJlc3Mgb2YgeW91ciBBV0UzMiBjYXJkLgorICAgIDAgbWVhbnMgdG8gYXV0b2RldGVjdCB0aGUgYWRkcmVzcy4KKworLSBBV0VfREVGQVVMVF9NRU1fU0laRQkJKGRlZmF1bHQ6IG5vdCBkZWZpbmVkKQorICAgIHNwZWNpZmllcyB0aGUgbWVtb3J5IHNpemUgb2YgeW91ciBBV0UzMiBjYXJkIGluIGtpbG9ieXRlcy4KKyAgICAtMSBtZWFucyB0byBhdXRvZGV0ZWN0IGl0cyBzaXplLgorICAgIAorCitbU2FtcGxlIFRhYmxlIFNpemVdCitGcm9tIHZlci4wLjQuMCwgc2FtcGxlIHRhYmxlcyBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IChleGNlcHQKK0xpbnV4LTEuMi54IHN5c3RlbSksIHNvIHlvdSBuZWVkIE5PVCB0byB0b3VjaCB0aGVzZSBwYXJhbWV0ZXJzLgorTGludXgtMS4yLnggdXNlcnMgbWF5IG5lZWQgdG8gaW5jcmVhc2UgdGhlc2UgdmFsdWVzIHRvIGFwcHJvcHJpYXRlIHNpemUgCitpZiB0aGUgc291bmQgY2FyZCBpcyBlcXVpcHBlZCB3aXRoIG1vcmUgRFJBTS4KKworLSBBV0VfTUFYX1NGX0xJU1RTLCBBV0VfTUFYX1NBTVBMRVMsIEFXRV9NQVhfSU5GT1MKKworCitbT3RoZXIgQ29uZGl0aW9uc10KKworLSBBV0VfQUxXQVlTX0lOSVRfRk0JCShkZWZhdWx0OiBub3QgZGVmaW5lZCkKKyAgICBpbmRpY2F0ZXMgdGhlIEFXRSBkcml2ZXIgYWx3YXlzIGluaXRpYWxpemUgRk0gcGFzc3Rocm91Z2ggZXZlbgorICAgIHdpdGhvdXQgRFJBTSBvbiBib2FyZC4gIEVtdTgwMDAgY2hpcCBoYXMgYSByZXN0cmljdGlvbiBmb3IgcGxheWluZworICAgIHNhbXBsZXMgb24gRFJBTSB0aGF0IGF0IGxlYXN0IHR3byBjaGFubmVscyBtdXN0IGJlIG9jY3VwaWVkIGFzCisgICAgcGFzc3Rocm91Z2ggY2hhbm5lbHMuIAorCistIEFXRV9ERUJVR19PTgkJCShkZWZhdWx0OiBkZWZpbmVkKQorICAgIHR1cm5zIG9uIGRlYnVnZ2luZyBtZXNzYWdlcyBpZiBkZWZpbmVkLgorCistIEFXRV9IQVNfR1VTX0NPTVBBVElCSUxJVFkJKGRlZmF1bHQ6IGRlZmluZWQpCisgICAgRW5hYmxlcyBHVVMgY29tcGF0aWJpbGl0eSBtb2RlIGlmIGRlZmluZWQsIHJlYWRpbmcgR1VTIHBhdGNoZXMgYW5kIAorICAgIEdVUyBjb250cm9sIGNvbW1hbmRzLiAgRGVmaW5lIHRoaXMgb3B0aW9uIHRvIHVzZSBHTU9EIG9yIG90aGVyCisgICAgR1VTIG1vZHVsZSBwbGF5ZXJzLgorCistIENPTkZJR19BV0UzMl9NSURJRU1VCQkoZGVmYXVsdDogZGVmaW5lZCkKKyAgICBBZGRzIGEgTUlESSBlbXVsYXRpb24gZGV2aWNlIGJ5IEVtdTgwMDAgd2F2ZXRhYmxlLiAgVGhlIGVtdWxhdGlvbgorICAgIGRldmljZSBjYW4gYmUgYWNjZXNzZWQgYXMgYW4gZXh0ZXJuYWwgTUlESSwgYW5kIHNlbmRzIHRoZSBNSURJCisgICAgY29udHJvbCBjb2RlcyBkaXJlY3RseS4gIFhHIGFuZCBHUyBzeXNleC9OUlBOIGFyZSBhY2NlcHRlZC4KKyAgICBObyBNSURJIGlucHV0IGlzIHN1cHBvcnRlZC4KKworLSBDT05GSUdfQVdFMzJfTUlYRVIJCShkZWZhdWx0OiBub3QgZGVmaW5lZCkKKyAgICBBZGRzIGEgbWl4ZXIgZGV2aWNlIGZvciBBV0UzMiBiYXNzL3RyZWJsZSBlcXVhbGl6ZXIgY29udHJvbC4KKyAgICBZb3UgY2FuIGFjY2VzcyB0aGlzIGRldmljZSB1c2luZyAvZGV2L21peGVyPz8gKHVzdWFsbHkgbWl4ZXIwMSkuCisKKy0gQVdFX1VTRV9ORVdfVk9MVU1FX0NBTEMJKGRlZmF1bHQ6IGRlZmluZWQpCisgICAgVXNlIHRoZSBuZXcgbWV0aG9kIHRvIGNhbGN1bGF0ZSB0aGUgdm9sdW1lIGNoYW5nZSBhcyBjb21wYXRpYmxlCisgICAgd2l0aCBET1MvV2luIGRyaXZlcnMuICBUaGlzIG9wdGlvbiBjYW4gYmUgdG9nZ2xlZCB2aWEgYXdlc2V0CisgICAgcHJvZ3JhbSwgb3IgZHJ2bWlkaSBwbGF5ZXIuCisKKy0gQVdFX0NIRUNLX1ZUQVJHRVQJCShkZWZhdWx0OiBkZWZpbmVkKQorICAgIENoZWNrIHRoZSBjdXJyZW50IHZvbHVtZSB0YXJnZXQgdmFsdWUgd2hlbiBzZWFyY2hpbmcgZm9yIGFuCisgICAgZW1wdHkgY2hhbm5lbCB0byBhbGxvY2F0ZSBhIG5ldyB2b2ljZS4gIFRoaXMgaXMgZXhwZXJpbWVudGFsbHkKKyAgICBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24uICAocHJvYmFibHksIHRoaXMgb3B0aW9uIGRvZXNuJ3QKKyAgICBhZmZlY3QgdGhlIHNvdW5kIHF1YWxpdHkgc2V2ZXJlbHkuLi4pCisKKy0gQVdFX0FMTE9XX1NBTVBMRV9TSEFSSU5HCShkZWZhdWx0OiBkZWZpbmVkKQorICAgQWxsb3cgc2FtcGxlIHNoYXJpbmcgZm9yIGRpZmZlcmVudGx5IGxvYWRlZCBwYXRjaGVzLgorICAgVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgb25seSB0b2dldGhlciB3aXRoIGF3ZXNmeC0wLjQuM3AzLgorICAgTm90ZSB0aGF0IHRoaXMgaXMgc3RpbGwgYW4gZXhwZXJpbWVudGFsIG9wdGlvbi4KKworLSBERUZfRk1fQ0hPUlVTX0RFUFRICQkoZGVmYXVsdDogMHgxMCkKKyAgICBUaGUgZGVmYXVsdCBzdHJlbmd0aCB0byBiZSBzZW50IHRvIHRoZSBjaG9ydXMgZWZmZWN0IGVuZ2luZS4KKyAgICBGcm9tIDAgdG8gMHhmZi4gIExhcmdlciBudW1iZXJzIG1heSBvZnRlbiBjYXVzZSB3ZWlyZCBzb3VuZHMuCisKKy0gREVGX0ZNX1JFVkVSQl9ERVBUSAkJKGRlZmF1bHQ6IDB4MTApCisgICAgVGhlIGRlZmF1bHQgc3RyZW5ndGggdG8gYmUgc2VudCB0byB0aGUgcmV2ZXJiIGVmZmVjdCBlbmdpbmUuCisgICAgRnJvbSAwIHRvIDB4ZmYuICBMYXJnZXIgbnVtYmVycyBtYXkgb2Z0ZW4gY2F1c2Ugd2VpcmQgc291bmRzLgorCisKKyogQUNLTk9XTEVER01FTlRTCisKK1RoYW5rcyB0byBXaXRvbGQgSmFjaGltY3p5ayAod2l0ZWtAeGZhY3Rvci53cGkuZWR1KSBmb3IgbXVjaCBhZHZpY2UKK29uIHByb2dyYW1taW5nIG9mIEFXRTMyLiAgTXVjaCBjb2RlIGlzIGJyb3VnaHQgZnJvbSBoaXMgQVdFMzItbmF0aXZlIAorTU9EIHBsYXllciwgQUxNUC4KK1RoZSBwb3J0IG9mIGF3ZWRydiB0byBGcmVlQlNEIGlzIGRvbmUgYnkgUmFuZGFsbCBIb3BwZXIKKyhyaGhAY3QucGlja2VyLmNvbSkuCitUaGUgbmV3IHZvbHVtZSBjYWxjdWxhdGlvbiByb3V0aW5lIHdhcyBkZXJpdmVkIGZyb20gTWFyayBXZWF2ZXIncworQURJUCBjb21wYXRpYmxlIHJvdXRpbmVzLgorSSBhbHNvIHRoYW5rIGxpbnV4LWF3ZS1tbCBtZW1iZXJzIGZvciB0aGVpciBlZmZvcnRzCit0byByZWJvb3QgdGhlaXIgc3lzdGVtIG1hbnkgdGltZXMgOi0pCisKKworKiBUT0RPJ1MKKworLSBDb21wbGV0ZSBET1MvV2luIGNvbXBhdGliaWxpdHkKKy0gRFNQLWxpa2Ugb3V0cHV0CisKKworKiBDT1BZUklHSFQKKworQ29weXJpZ2h0IChDKSAxOTk2LTE5OTggVGFrYXNoaSBJd2FpCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUubW9kdWxlcyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5tb2R1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OTFkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUubW9kdWxlcwpAQCAtMCwwICsxLDEwNiBAQAorQnVpbGRpbmcgYSBtb2R1bGFyIHNvdW5kIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGN1cnJlbnQgYXMgb2YgbGludXgtMi4xLjg1LiBDaGVjayB0aGUgb3RoZXIKK3JlYWRtZSBmaWxlcywgZXNwZWNpYWxseSBSRUFETUUuT1NTLCBmb3IgaW5mb3JtYXRpb24gbm90IHNwZWNpZmljIHRvCittYWtpbmcgc291bmQgbW9kdWxhci4KKworICBGaXJzdCwgY29uZmlndXJlIHlvdXIga2VybmVsLiBUaGlzIGlzIGFuIGlkZWEgb2Ygd2hhdCB5b3Ugc2hvdWxkIGJlCitzZXR0aW5nIGluIHRoZSBzb3VuZCBzZWN0aW9uOgorCis8TT4gU291bmQgY2FyZCBzdXBwb3J0IAorCis8TT4gMTAwJSBTb3VuZCBCbGFzdGVyIGNvbXBhdGlibGVzIChTQjE2LzMyLzY0LCBFU1MsIEphenoxNikgc3VwcG9ydCAKKworICBJIGhhdmUgU291bmRCbGFzdGVyLiBTZWxlY3QgeW91ciBjYXJkIGZyb20gdGhlIGxpc3QuCisKKzxNPiBHZW5lcmljIE9QTDIvT1BMMyBGTSBzeW50aGVzaXplciBzdXBwb3J0IAorPE0+IEZNIHN5bnRoZXNpemVyIChZTTM4MTIvT1BMLTMpIHN1cHBvcnQgCisKKyAgSWYgeW91IGRvbid0IHNldCB0aGVzZSwgeW91IHdpbGwgcHJvYmFibHkgZmluZCB5b3UgY2FuIHBsYXkgLndhdiBmaWxlcworYnV0IG5vdCAubWlkaS4gQXMgdGhlIGhlbHAgZm9yIHRoZW0gc2F5cywgc2V0IHRoZW0gdW5sZXNzIHlvdSBrbm93IHlvdXIKK2NhcmQgZG9lcyBub3QgdXNlIG9uZSBvZiB0aGVzZSBjaGlwcyBmb3IgRk0gc3VwcG9ydC4KKworICBPbmNlIHlvdSBhcmUgY29uZmlndXJlZCwgbWFrZSB6bGlsbywgbW9kdWxlcywgbW9kdWxlc19pbnN0YWxsOyByZWJvb3QuCitOb3RlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBvciBwb3NzaWJsZSB0byBjb25maWd1cmUgc291bmQgaW4gdGhlCitkcml2ZXJzL3NvdW5kIGRpci4gTm93IG9uZSBzaW1wbHkgY29uZmlndXJlcyBhbmQgbWFrZXMgb25lJ3Mga2VybmVsIGFuZAorbW9kdWxlcyBpbiB0aGUgdXN1YWwgd2F5LgorCisgVGhlbiwgYWRkIHRvIHlvdXIgL2V0Yy9tb2Rwcm9iZS5jb25mIHNvbWV0aGluZyBsaWtlOgorCithbGlhcyBjaGFyLW1ham9yLTE0LSogc2IKK2luc3RhbGwgc2IgL3NiaW4vbW9kcHJvYmUgLWkgc2IgJiYgL3NiaW4vbW9kcHJvYmUgYWRsaWJfY2FyZAorb3B0aW9ucyBzYiBpbz0weDIyMCBpcnE9NyBkbWE9MSBkbWExNj01IG1wdV9pbz0weDMzMAorb3B0aW9ucyBhZGxpYl9jYXJkIGlvPTB4Mzg4ICAgICAjIEZNIHN5bnRoZXNpemVyCisKKyBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgaGF2ZSBjb21waWxlZCBpbiBrZXJuZWwgbGV2ZWwgSVNBUG5QIHN1cHBvcnQ6CisKK2FsaWFzIGNoYXItbWFqb3ItMTQgc2IKK3Bvc3QtaW5zdGFsbCBzYiAvc2Jpbi9tb2Rwcm9iZSAiLWsiICJhZGxpYl9jYXJkIgorb3B0aW9ucyBhZGxpYl9jYXJkIGlvPTB4Mzg4CisKKyAgVGhlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgdGhlIHNvdW5kIGRyaXZlciBhbmQgYWxsIG5lY2Vzc2FyeSBiaXRzIGFuZAorcGllY2VzIGF1dG9sb2FkIG9uIGRlbWFuZCwgYXNzdW1pbmcgeW91IHVzZSBrZXJuZWxkIChhIHNvdW5kIGNob2ljZSkgYW5kCithdXRvY2xlYW4gd2hlbiBub3QgaW4gdXNlLiBBbHNvLCBvcHRpb25zIGZvciB0aGUgZGV2aWNlIGRyaXZlcnMgYXJlCitzZXQuIFRoZXkgd2lsbCBub3Qgd29yayB3aXRob3V0IHRoZW0uIENoYW5nZSBhcyBhcHByb3ByaWF0ZSBmb3IgeW91ciBjYXJkLgorSWYgeW91IGFyZSBub3QgeWV0IHVzaW5nIHRoZSB2ZXJ5IGNvb2wga2VybmVsZCwgeW91IHdpbGwgaGF2ZSB0byAibW9kcHJvYmUKKy1rIHNiIiB5b3Vyc2VsZiB0byBnZXQgdGhpbmdzIGdvaW5nLiBFdmVudHVhbGx5IHRoaW5ncyBtYXkgYmUgZml4ZWQgc28KK3RoYXQgdGhpcyBrbHVkZ2VyeSBpcyBub3QgbmVjZXNzYXJ5OyBmb3IgdGhlIHRpbWUgYmVpbmcsIGl0IHNlZW1zIHRvIHdvcmsKK3dlbGwuCisKKyAgUmVwbGFjZSAnc2InIHdpdGggdGhlIGRyaXZlciBmb3IgeW91ciBjYXJkLCBhbmQgZ2l2ZSBpdCB0aGUgcmlnaHQKK29wdGlvbnMuIFRvIGZpbmQgdGhlIGZpbGVuYW1lIG9mIHRoZSBkcml2ZXIsIGxvb2sgaW4KKy9saWIvbW9kdWxlcy88a2VybmVsLXZlcnNpb24+L21pc2MuIE1pbmUgbG9va3MgbGlrZToKKworYWRsaWJfY2FyZC5vICMgVGhpcyBpcyB0aGUgZ2VuZXJpYyBPUEx4IGRyaXZlcgorb3BsMy5vICMgVGhlIE9QTDMgZHJpdmVyCitzYi5vICMgPDxUaGUgU291bmRCbGFzdGVyIGRyaXZlci4gWW91cnMgbWF5IGRpZmZlci4+Pgorc291bmQubyAjIFRoZSBzb3VuZCBkcml2ZXIKK3VhcnQ0MDEubyAjIFVzZWQgYnkgc2IsIG1heWJlIG90aGVyIGNhcmRzCisKKyBXaGljaGV2ZXIgY2FyZCB5b3UgaGF2ZSwgdHJ5IGZlZWRpbmcgaXQgdGhlIG9wdGlvbnMgdGhhdCB3b3VsZCBiZSB0aGUKK2RlZmF1bHQgaWYgeW91IHdlcmUgbWFraW5nIHRoZSBkcml2ZXIgd2lyZWQsIG5vdCBhcyBtb2R1bGVzLiBZb3UgY2FuCitsb29rIGF0IGZ1bmN0aW9uIHJlZmVycmVkIHRvIGJ5IG1vZHVsZV9pbml0KCkgZm9yIHRoZSBjYXJkIHRvIHNlZSB3aGF0CithcmdzIGFyZSBleHBlY3RlZC4KKworIE5vdGUgdGhhdCBhdCBwcmVzZW50IHRoZXJlIGlzIG5vIHdheSB0byBjb25maWd1cmUgdGhlIGlvLCBpcnEgYW5kIG90aGVyCitwYXJhbWV0ZXJzIGZvciB0aGUgbW9kdWxhciBkcml2ZXJzIGFzIG9uZSBkb2VzIGZvciB0aGUgd2lyZWQgZHJpdmVycy4uIE9uZQorbmVlZHMgdG8gcGFzcyB0aGUgbW9kdWxlcyB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgYXMgYXJndW1lbnRzLCBlaXRoZXIKK3dpdGggL2V0Yy9tb2Rwcm9iZS5jb25mIG9yIHdpdGggY29tbWFuZC1saW5lIGFyZ3MgdG8gbW9kcHJvYmUsIGUuZy4KKworbW9kcHJvYmUgc2IgaW89MHgyMjAgaXJxPTcgZG1hPTEgZG1hMTY9NSBtcHVfaW89MHgzMzAKK21vZHByb2JlIGFkbGliX2NhcmQgaW89MHgzODgKKworIHJlY29tbWVuZCB1c2luZyAvZXRjL21vZHByb2JlLmNvbmYuCisKK1BlcnNpc3RlbnQgRE1BIEJ1ZmZlcnM6CisKK1RoZSBzb3VuZCBtb2R1bGVzIG5vcm1hbGx5IGFsbG9jYXRlIERNQSBidWZmZXJzIGR1cmluZyBvcGVuKCkgYW5kCitkZWFsbG9jYXRlIHRoZW0gZHVyaW5nIGNsb3NlKCkuIExpbnV4IGNhbiBvZnRlbiBoYXZlIHByb2JsZW1zIGFsbG9jYXRpbmcKK0RNQSBidWZmZXJzIGZvciBJU0EgY2FyZHMgb24gbWFjaGluZXMgd2l0aCBtb3JlIHRoYW4gMTZNQiBSQU0uIFRoaXMgaXMKK2JlY2F1c2UgSVNBIERNQSBidWZmZXJzIG11c3QgZXhpc3QgYmVsb3cgdGhlIDE2TUIgYm91bmRhcnkgYW5kIGl0IGlzIHF1aXRlCitwb3NzaWJsZSB0aGF0IHdlIGNhbid0IGZpbmQgYSBsYXJnZSBlbm91Z2ggZnJlZSBibG9jayBpbiB0aGlzIHJlZ2lvbiBhZnRlcgordGhlIG1hY2hpbmUgaGFzIGJlZW4gcnVubmluZyBmb3IgYW55IGFtb3VudCBvZiB0aW1lLiBUaGUgd2F5IHRvIGF2b2lkIHRoaXMKK3Byb2JsZW0gaXMgdG8gYWxsb2NhdGUgdGhlIERNQSBidWZmZXJzIGR1cmluZyBtb2R1bGUgbG9hZCBhbmQgZGVhbGxvY2F0ZQordGhlbSB3aGVuIHRoZSBtb2R1bGUgaXMgdW5sb2FkZWQuIEZvciB0aGlzIHRvIGJlIGVmZmVjdGl2ZSB3ZSBuZWVkIHRvIGxvYWQKK3RoZSBzb3VuZCBtb2R1bGVzIHJpZ2h0IGFmdGVyIHRoZSBrZXJuZWwgYm9vdHMsIGVpdGhlciBtYW51YWxseSBvciBieSBhbgoraW5pdCBzY3JpcHQsIGFuZCBrZWVwIHRoZW0gYXJvdW5kIHVudGlsIHdlIHNodXQgZG93bi4gVGhpcyBpcyBhIGxpdHRsZQord2FzdGVmdWwgb2YgUkFNLCBidXQgaXQgZ3VhcmFudGVlcyB0aGF0IHNvdW5kIGFsd2F5cyB3b3Jrcy4KKworVG8gbWFrZSB0aGUgc291bmQgZHJpdmVyIHVzZSBwZXJzaXN0ZW50IERNQSBidWZmZXJzIHdlIG5lZWQgdG8gcGFzcyB0aGUKK3NvdW5kLm8gbW9kdWxlIGEgImRtYWJ1Zj0xIiBjb21tYW5kLWxpbmUgYXJndW1lbnQuIFRoaXMgaXMgbm9ybWFsbHkgZG9uZQoraW4gL2V0Yy9tb2Rwcm9iZS5jb25mIGxpa2Ugc286CisKK29wdGlvbnMgc291bmQJCWRtYWJ1Zj0xCisKK0lmIHlvdSBoYXZlIDE2TUIgb3IgbGVzcyBSQU0gb3IgYSBQQ0kgc291bmQgY2FyZCwgdGhpcyBpcyB3YXN0ZWZ1bCBhbmQKK3VubmVjZXNzYXJ5LiBJdCBpcyBwb3NzaWJsZSB0aGF0IG1hY2hpbmUgd2l0aCAxNk1CIG9yIGxlc3MgUkFNIHdpbGwgZmluZAordGhpcyBvcHRpb24gdXNlZnVsLCBidXQgaWYgeW91ciBtYWNoaW5lIGlzIHNvIG1lbW9yeS1zdGFydmVkIHRoYXQgaXQKK2Nhbm5vdCBmaW5kIGEgNjRLIGJsb2NrIGZyZWUsIHlvdSB3aWxsIGJlIHdhc3RpbmcgZXZlbiBtb3JlIFJBTSBieSBrZWVwaW5nCit0aGUgc291bmQgbW9kdWxlcyBsb2FkZWQgYW5kIHRoZSBETUEgYnVmZmVycyBhbGxvY2F0ZWQgd2hlbiB0aGV5IGFyZSBub3QKK25lZWRlZC4gVGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byB1cGdyYWRlIHlvdXIgUkFNLiBCdXQgeW91IGRvIGFsc28gaGF2ZQordGhpcyBpbXByb3BlciBzb2x1dGlvbiBhcyB3ZWxsLiBVc2UgaXQgd2lzZWx5LgorCisgIEknbSBhZnJhaWQgSSBrbm93IG5vdGhpbmcgYWJvdXQgYW55dGhpbmcgYnV0IG15IHNldHVwLCBiZWluZyBtb3JlIG9mIGEKK3RleHQtbW9kZSBndXkgYW55d2F5LiBJZiB5b3UgaGF2ZSBvcHRpb25zIGZvciBvdGhlciBjYXJkcyBvciBvdGhlciBoZWxwZnVsCitoaW50cywgc2VuZCB0aGVtIHRvIG1lLCBKaW0gQnJheSwgamJAYXMyMjAub3JnLCBodHRwOi8vYXMyMjAub3JnL2piLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLnltZnNiIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLnltZnNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGE3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUueW1mc2IKQEAgLTAsMCArMSwxMDcgQEAKK0xlZ2FjeSBhdWRpbyBkcml2ZXIgZm9yIFlNRjd4eCBQQ0kgY2FyZHMuCisKKworRklSU1QgT0YgQUxMCis9PT09PT09PT09PT0KKworICBUaGlzIGNvZGUgcmVmZXJlbmNlcyBZQU1BSEEncyBzYW1wbGUgY29kZXMgYW5kIGRhdGEgc2hlZXRzLgorICBJIHJlc3BlY3QgYW5kIHRoYW5rIGZvciBhbGwgcGVvcGxlIHRoZXkgbWFkZSBvcGVuIHRoZSBpbmZvcm1hdGlvbnMKKyAgYWJvdXQgWU1GN3h4IGNhcmRzLgorCisgIEFuZCB0aGlzIGNvZGVzIGhlYXZpbHkgYmFzZWQgb24gSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPidzCisgIG9sZCBWSUEgODJDeHh4IGRyaXZlciAodmlhODJjeHh4LmMpLiBJIGFsc28gcmVzcGVjdCBoaW0uCisKKworRElTQ0xJTUVSCis9PT09PT09PT0KKworIFRoaXMgZHJpdmVyIGlzIGN1cnJlbnRseSBhdCBlYXJseSBBTFBIQSBzdGFnZS4gSXQgbWF5IGNhdXNlIHNlcmlvdXMKKyBkYW1hZ2UgdG8geW91ciBjb21wdXRlciB3aGVuIHVzZWQuCisgUExFQVNFIFVTRSBJVCBBVCBZT1VSIE9XTiBSSVNLLgorCisKK0FCT1VUIFRISVMgRFJJVkVSCis9PT09PT09PT09PT09PT09PQorCisgIFRoaXMgY29kZSBlbmFibGVzIHlvdSB0byB1c2UgeW91ciBZTUY3MjRbQS1GXSwgWU1GNzQwW0EtQ10sIFlNRjc0NCwgWU1GNzU0CisgY2FyZHMuIFdoZW4gZW5hYmxlZCwgeW91ciBjYXJkIGFjdHMgYXMgIlNvdW5kQmxhc3RlciBQcm8iIGNvbXBhdGlibGUgY2FyZC4KKyBJdCBjYW4gb25seSBwbGF5IDIyLjA1a0h6IC8gOGJpdCAvIFN0ZXJlbyBzYW1wbGVzLCBjb250cm9sIGV4dGVybmFsIE1JREkKKyBwb3J0LgorIElmIHlvdSB3YW50IHRvIHVzZSB5b3VyIGNhcmQgYXMgcmVjZW50ICIxNi1iaXQiIGNhcmQsIHlvdSBzaG91bGQgdXNlCisgQWxzYSBvciBPU1MvTGludXggZHJpdmVyLiBPZiBjb3Vyc2UgeW91IGNhbiB3cml0ZSBuYXRpdmUgUENJIGRyaXZlciBmb3IKKyB5b3VyIGNhcmRzIDopCisKKworVVNBR0UKKz09PT09CisKKyAjIG1vZHByb2JlIHltZnNiIChvcHRpb25zKQorCisKK09QVElPTlMgRk9SIE1PRFVMRQorPT09PT09PT09PT09PT09PT09CisKKyAgaW8gICAgICAgICAgIDogU0IgYmFzZSBhZGRyZXNzICAgICAoMHgyMjAsIDB4MjQwLCAweDI2MCwgMHgyODApCisgIHN5bnRoX2lvICAgICA6IE9QTDMgYmFzZSBhZGRyZXNzICAgKDB4Mzg4LCAweDM5OCwgMHgzYTAsIDB4M2E4KQorICBkbWEgICAgICAgICAgOiBETUEgbnVtYmVyICAgICAgICAgICgwLDEsMykKKyAgbWFzdGVyX3ZvbHVtZTogQUMnOTcgUENNIG91dCBWb2wgICAoMC0xMDApCisgIHNwZGlmX291dCAgICA6IFNQRElGLW91dCBmbGFnICAgICAgKDA6ZGlzYWJsZSAxOmVuYWJsZSkKKworIFRoZXNlIG9wdGlvbnMgd2lsbCBjaGFuZ2UgaW4gZnV0dXJlLi4uCisKKworRlJFUVVFTkNZCis9PT09PT09PT0KKworICBXaGVuIHBsYXlpbmcgc291bmRzIHZpYSB0aGlzIGRyaXZlciwgeW91IHdpbGwgaGVhciBpdHMgcGl0Y2ggaXMgc2xpZ2h0bHkKKyBsb3dlciB0aGFuIG9yaWdpbmFsIHNvdW5kcy4gU2luY2UgdGhpcyBkcml2ZXIgcmVjb2duaXplcyB5b3VyIGNhcmQgYWN0cworIHdpdGggMjEuNzM5a0h6IHNhbXBsZSByYXRlcyByYXRoZXIgdGhhbiAyMi4wNTBrSHogKEkgdGhpbmsgaXQgbXVzdCBiZQorIGhhcmR3YXJlIHJlc3RyaWN0aW9uKS4gU28gbWFueSBwbGF5ZXJzIGJlY29tZSB0b25lIGRlYWZuZXNzLgorIFRvIHByZXZlbnQgdGhpcywgeW91IHNob3VsZCBleHByZXNzIHNvbWUgb3B0aW9ucyB0byB5b3VyIHNvdW5kIHBsYXllcgorIHRoYXQgc3BlY2lmeSBjb3JyZWN0IHNhbXBsZSBmcmVxdWVuY3kuIEZvciBleGFtcGxlLCB0byBwbGF5IHlvdXIgTVAzIGZpbGUKKyBjb3JyZWN0bHkgd2l0aCBtcGcxMjMsIHNwZWNpZnkgdGhlIGZyZXF1ZW5jeSBsaWtlIGZvbGxvd2luZzoKKworICAlICBtcGcxMjMgLXIgMjE3MzkgZm9vLm1wMworCisKK1NQRElGIE9VVAorPT09PT09PT09CisKKyAgV2l0aCBpbnN0YWxsaW5nIG1vZHVsZXMgd2l0aCBvcHRpb24gJ3NwZGlmX291dD0xJywgeW91IGNhbiBlbmpveSB5b3VyCisgc291bmRzIGZyb20gU1BESUYtb3V0IG9mIHlvdXIgY2FyZCAoaWYgaXQgaGFkKS4KKyBJdHMgRnMgaXMgZml4ZWQgdG8gNDhrSHogKEl0IG5ldmVyIG1lYW5zIHRoZSBzYW1wbGUgZnJlcXVlbmN5IGJlY29tZSAKKyB1cCB0byA0OGtIei4gQWxsIHNvdW5kcyB2aWEgU1BESUYtb3V0IGFsc28gMjJrSHogc2FtcGxlcykuIFNvIHlvdXIKKyBkaWdpdGFsLWluIGNhcGFibGUgY29tcG9uZW50cyBoYXMgdG8gYmUgYWJsZSB0byBoYW5kbGUgNDhrSHogRnMuCisKKworQ09QWUlORworPT09PT09PQorCisgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKworVE9ETworPT09PQorICogc3VwcG9ydCBmb3IgbXVsdGlwbGUgY2FyZHMKKyAgIChzZXQgdGhlIGRpZmZlcmVudCBTQl9JTyxNUFVfSU8sT1BMX0lPIGZvciBlYWNoIGNhcmRzKQorCisgKiBzdXBwb3J0IGZvciBPUEwgKGRtZm0pIDogVGhlcmUgd2lsbCBiZSBubyByZXF1aXJlbWVudHMuLi4gOi08CisKKworQVVUSE9SCis9PT09PT0KKworIERhaXN1a2UgTmFnYW5vIDxicmVlemUubmFnYW5vQG5pZnR5Lm5lLmpwPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Tb3VuZFBybyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1NvdW5kUHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNGRiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Tb3VuZFBybwpAQCAtMCwwICsxLDEwNSBAQAorRG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdW5kUHJvIENNSTgzMzAgZXh0ZW5zaW9ucyBpbiB0aGUgV1NTIGRyaXZlciAoYWQxODQ4Lm8pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKCBCZSBzdXJlIHRvIHJlYWQgRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ01JODMzMCB0b28gKQorCitJb24gQmFkdWxlc2N1LCBpb251dEBjcy5jb2x1bWJpYS5lZHUKK0ZlYnJ1YXJ5IDI0LCAxOTk5CisKKyhkZXJpdmVkIGZyb20gdGhlIE9QTDMtU0EyIGRvY3VtZW50YXRpb24gYnkgU2NvdHQgTXVycmF5KQorCitUaGUgU291bmRQcm8gQ01JODMzMCAoSVNBKSBpcyBhIGNoaXAgdXN1YWxseSBmb3VuZCBvbiBzb21lIFRhaXdhbmVzZQorbW90aGVyYm9hcmRzLiAgVGhlIG9mZmljaWFsIG5hbWUgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgQ01JODMzMCwgU291bmRQcm8KK2lzIHRoZSBuaWNrbmFtZSBhbmQgdGhlIGJpZyBpbnNjcmlwdGlvbiBvbiB0aGUgY2hpcCBpdHNlbGYuCisKK1RoZSBjaGlwIGVtdWxhdGVzIGEgV1NTIGFzIHdlbGwgYXMgYSBTQjE2LCBidXQgaXQgaGFzIGNlcnRhaW4gZGlmZmVyZW5jZXMKK2luIHRoZSBtaXhlciBzZWN0aW9uIHdoaWNoIHJlcXVpcmUgc2VwYXJhdGUgc3VwcG9ydC4gSXQgYWxzbyBlbXVsYXRlcyBhbgorTVBVNDAxIGFuZCBhbiBPUEwzIHN5bnRoZXNpemVyLCBzbyB5b3UgcHJvYmFibHkgd2FudCB0byBlbmFibGUgc3VwcG9ydAorZm9yIHRoZXNlLCB0b28uCisKK1RoZSBjaGlwIGlkZW50aWZpZXMgaXRzZWxmIGFzIGFuIEFEMTg0OCwgYnV0IGl0cyBtaXhlciBpcyBzaWduaWZpY2FudGx5Cittb3JlIGFkdmFuY2VkIHRoYW4gdGhlIG9yaWdpbmFsIEFEMTg0OCBvbmUuIElmIHlvdXIgc3lzdGVtIHdvcmtzIHdpdGgKK2VpdGhlciBXU1Mgb3IgU0IxNiBhbmQgeW91IGFyZSBoYXZpbmcgcHJvYmxlbXMgd2l0aCBzb21lIG1peGVyIGNvbnRyb2xzCisobm8gQ0QgYXVkaW8sIG5vIGxpbmUtaW4sIGV0YyksIHlvdSBtaWdodCB3YW50IHRvIGdpdmUgdGhpcyBkcml2ZXIgYSB0cnkuCitEZXRlY3Rpb24gc2hvdWxkIHdvcmssIGJ1dCBpdCBoYXNuJ3QgYmVlbiB3aWRlbHkgdGVzdGVkLCBzbyBpdCBtaWdodCBzdGlsbAorbWlzLWlkZW50aWZ5IHRoZSBjaGlwLiBZb3UgY2FuIHN0aWxsIGZvcmNlIHNvdW5kcHJvPTEgaW4gdGhlIG1vZHByb2JlCitwYXJhbWV0ZXJzIGZvciBhZDE4NDguIFBsZWFzZSBsZXQgbWUga25vdyBpZiBpdCBoYXBwZW5zIHRvIHlvdSwgc28gSSBjYW4KK2FkanVzdCB0aGUgZGV0ZWN0aW9uIHJvdXRpbmUuCisKK1RoZSBjaGlwIGlzIGNhcGFibGUgb2YgZG9pbmcgZnVsbC1kdXBsZXgsIGJ1dCBzaW5jZSB0aGUgZHJpdmVyIHNlZXMgaXQgYXMgYW4KK0FEMTg0OCwgaXQgY2Fubm90IHRha2UgYWR2YW50YWdlIG9mIHRoaXMuICBNb3Jlb3ZlciwgdGhlIGZ1bGwtZHVwbGV4IG1vZGUgaXMKK25vdCBhY2hpZXZhYmxlIHRocm91Z2ggdGhlIFdTUyBpbnRlcmZhY2UsIGIvYyBpdCBuZWVkcyBhIGRtYTE2IGxpbmUgd2hpY2ggaXMKK2Fzc2lnbmVkIG9ubHkgdG8gdGhlIFNCMTYgc3ViZGV2aWNlICh3aXRoIGlzYXBucCkuIFdpbmRvd3MgZG9jdW1lbnRhdGlvbgorc2F5cyB0aGUgdXNlciBtdXN0IHVzZSBXU1MgUGxheWJhY2sgYW5kIFNCMTYgUmVjb3JkaW5nIGZvciBmdWxsLWR1cGxleCwgc28KK2l0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIGRvIHRoZSBzYW1lIHRoaW5nIHVuZGVyIExpbnV4LiBZb3UgY2FuIHRyeSBsb2FkaW5nCit1cCBib3RoIGFkMTg0OCBhbmQgc2IgdGhlbiB1c2Ugb25lIGZvciBwbGF5YmFjayBhbmQgdGhlIG90aGVyIGZvcgorcmVjb3JkaW5nLiBJIGRvbid0IGtub3cgaWYgdGhpcyB3b3JrcywgYi9jIEkgaGF2ZW4ndCB0ZXN0ZWQgaXQuIEFueXdheSwgaWYKK3lvdSB0cnkgaXQsIGJlIHZlcnkgY2FyZWZ1bDogdGhlIFNCMTYgbWl4ZXIgKm1vc3RseSogd29ya3MsIGJ1dCBjZXJ0YWluCitzZXR0aW5ncyBjYW4gaGF2ZSB1bmV4cGVjdGVkIGVmZmVjdHMuIFVzZSB0aGUgV1NTIG1peGVyIGZvciBiZXN0IHJlc3VsdHMuCisKK1RoZXJlIGlzIGFsc28gYSBQQ0kgU291bmRQcm8gY2hpcC4gSSBoYXZlIG5vdCBzZWVuIHRoaXMgY2hpcCwgc28gSSBoYXZlCitubyBpZGVhIGlmIHRoZSBkcml2ZXIgd2lsbCB3b3JrIHdpdGggaXQuIEkgc3VzcGVjdCBpdCB3b24ndC4KKworQXMgd2l0aCBQblAgY2FyZHMsIHNvbWUgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZC4gIFRoZXJlIGFyZSB0d28gd2F5cworb2YgZG9pbmcgdGhpcy4gIFRoZSBtb3N0IGNvbW1vbiBpcyB0byB1c2UgdGhlIGlzYXBucHRvb2xzIHBhY2thZ2UgdG8KK2luaXRpYWxpemUgdGhlIGNhcmQsIGFuZCB1c2UgdGhlIGtlcm5lbCBtb2R1bGUgZm9ybSBvZiB0aGUgc291bmQKK3N1YnN5c3RlbSBhbmQgc291bmQgZHJpdmVycy4gIEFsdGVybmF0aXZlbHksIHNvbWUgQklPUydzIGFsbG93IG1hbnVhbAorY29uZmlndXJhdGlvbiBvZiBpbnN0YWxsZWQgUG5QIGRldmljZXMgaW4gYSBCSU9TIG1lbnUsIHdoaWNoIHNob3VsZAorYWxsb3cgdXNpbmcgdGhlIG5vbi1tb2R1bGFyIHNvdW5kIGRyaXZlcnMsIGkuZS4gYnVpbHQgaW50byB0aGUga2VybmVsLgorU2luY2UgaW4gdGhpcyBsYXR0ZXIgY2FzZSB5b3UgY2Fubm90IHVzZSBtb2R1bGUgcGFyYW1ldGVycywgeW91IHdpbGwKK2hhdmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTb3VuZFBybyBhdCBjb21waWxlIHRpbWUuCisKK1RoZSBJUlEgYW5kIERNQSB2YWx1ZXMgY2FuIGJlIGFueSB0aGF0IGFyZSBjb25zaWRlcmVkIGFjY2VwdGFibGUgZm9yIGEKK1dTUy4gIEFzc3VtaW5nIHlvdSd2ZSBnb3QgaXNhcG5wIGFsbCBoYXBweSwgdGhlbiB5b3Ugc2hvdWxkIGJlIGFibGUgdG8KK2RvIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgKHdoaWNoICptdXN0KiBtYXRjaCB0aGUgaXNhcG5wL0JJT1MKK2NvbmZpZ3VyYXRpb24pOgorCittb2Rwcm9iZSBhZDE4NDggaW89MHg1MzAgaXJxPTExIGRtYT0wIHNvdW5kcHJvPTEKKy1hbmQgbWF5YmUtCittb2Rwcm9iZSBzYiBpbz0weDIyMCBpcnE9NSBkbWE9MSBkbWExNj01CisKKy10aGVuLQorbW9kcHJvYmUgbXB1NDAxIGlvPTB4MzMwIGlycT05Cittb2Rwcm9iZSBvcGwzIGlvPTB4Mzg4CisKK0lmIGFsbCBnb2VzIHdlbGwgYW5kIHlvdSBzZWUgbm8gZXJyb3IgbWVzc2FnZXMsIHlvdSBzaG91bGQgYmUgYWJsZSB0bworc3RhcnQgdXNpbmcgdGhlIHNvdW5kIGNhcGFiaWxpdGllcyBvZiB5b3VyIHN5c3RlbS4gIElmIHlvdSBnZXQgYW4KK2Vycm9yIG1lc3NhZ2Ugd2hpbGUgdHJ5aW5nIHRvIGluc2VydCB0aGUgbW9kdWxlKHMpLCB0aGVuIG1ha2UKK3N1cmUgdGhhdCB0aGUgdmFsdWVzIG9mIHRoZSB2YXJpb3VzIGFyZ3VtZW50cyBtYXRjaCB3aGF0IHlvdSBzcGVjaWZpZWQKK2luIHlvdXIgaXNhcG5wIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIHRoYXQgdGhlcmUgaXMgbm8gY29uZmxpY3Qgd2l0aAorYW5vdGhlciBkZXZpY2UgZm9yIGFuIEkvTyBwb3J0IG9yIGludGVycnVwdC4gIENoZWNraW5nIHRoZSBjb250ZW50cyBvZgorL3Byb2MvaW9wb3J0cyBhbmQgL3Byb2MvaW50ZXJydXB0cyBjYW4gYmUgdXNlZnVsIHRvIHNlZSBpZiB5b3UncmUKK2J1dHRpbmcgaGVhZHMgd2l0aCBhbm90aGVyIGRldmljZS4KKworSWYgeW91IGRvIG5vdCBzZWUgdGhlIGNoaXBzZXQgdmVyc2lvbiBtZXNzYWdlLCBhbmQgbm9uZSBvZiB0aGUgb3RoZXIKK21lc3NhZ2VzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSBsb2cgYXJlIGhlbHBmdWwsIHRyeSBhZGRpbmcgJ2RlYnVnPTEnCit0byB0aGUgYWQxODQ4IHBhcmFtZXRlcnMsIGVtYWlsIG1lIHRoZSBzeXNsb2cgcmVzdWx0cyBhbmQgSSdsbCBkbworbXkgYmVzdCB0byBoZWxwLiAKKworTGFzdGx5LCBpZiB5b3UncmUgdXNpbmcgbW9kdWxlcyBhbmQgd2FudCB0byBzZXQgdXAgYXV0b21hdGljIG1vZHVsZQorbG9hZGluZyB3aXRoIGttb2QsIHRoZSBrZXJuZWwgbW9kdWxlIGxvYWRlciwgaGVyZSBpcyB0aGUgc2VjdGlvbiBJCitjdXJyZW50bHkgdXNlIGluIG15IGNvbmYubW9kdWxlcyBmaWxlOgorCisjIFNvdW5kCitwb3N0LWluc3RhbGwgc291bmQgbW9kcHJvYmUgLWsgYWQxODQ4OyBtb2Rwcm9iZSAtayBtcHU0MDE7IG1vZHByb2JlIC1rIG9wbDMKK29wdGlvbnMgYWQxODQ4IGlvPTB4NTMwIGlycT0xMSBkbWE9MAorb3B0aW9ucyBzYiBpbz0weDIyMCBpcnE9NSBkbWE9MSBkbWExNj01CitvcHRpb25zIG1wdTQwMSBpbz0weDMzMCBpcnE9OQorb3B0aW9ucyBvcGwzIGlvPTB4Mzg4CisKK1RoZSBhYm92ZSBlbnN1cmVzIHRoYXQgYWQxODQ4IHdpbGwgYmUgbG9hZGVkIHdoZW5ldmVyIHRoZSBzb3VuZCBzeXN0ZW0KK2lzIGJlaW5nIHVzZWQuCisKK0dvb2QgbHVjay4KKworSW9uCisKK05PVCBSRUFMTFkgVEVTVEVEOgorLSByZWNvcmRpbmcKKy0gcmVjb3JkaW5nIGRldmljZSBzZWxlY3Rpb24KKy0gZnVsbC1kdXBsZXgKKworVE9ETzoKKy0gaW1wbGVtZW50IG1peGVyIHN1cHBvcnQgZm9yIHN1cnJvdW5kLCBsb3VkLCBkaWdpdGFsIENEIHN3aXRjaGVzLgorLSBjb21lIHVwIHdpdGggYSBzY2hlbWUgd2hpY2ggYWxsb3dzIHJlY29yZGluZyB2b2x1bWVzIGZvciBlYWNoIHN1YmRldmljZS4KK1RoaXMgaXMgYSBtYWpvciBPU1MgQVBJIGNoYW5nZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1NvdW5kYmxhc3RlciBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1NvdW5kYmxhc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjg4ZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvU291bmRibGFzdGVyCkBAIC0wLDAgKzEsNTMgQEAKK21vZHByb2JlIHNvdW5kCitpbnNtb2QgdWFydDQwMQoraW5zbW9kIHNiIC4uLgorCitUaGlzIGxvYWRzIHRoZSBkcml2ZXIgZm9yIHRoZSBTb3VuZCBCbGFzdGVyIGFuZCBhc3NvcnRlZCBjbG9uZXMuIENhcmRzIHRoYXQKK2FyZSBjb3ZlcmVkIGJ5IG90aGVyIGRyaXZlcnMgc2hvdWxkIG5vdCBiZSB1c2luZyB0aGlzIGRyaXZlci4KKworVGhlIFNvdW5kIEJsYXN0ZXIgbW9kdWxlIHRha2VzIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzCisKK2lvCQlJL08gYWRkcmVzcyBvZiB0aGUgU291bmQgQmxhc3RlciBjaGlwICgweDIyMCwweDI0MCwweDI2MCwweDI4MCkKK2lycQkJSVJRIG9mIHRoZSBTb3VuZCBCbGFzdGVyIGNoaXAgKDUsNyw5LDEwKQorZG1hCQk4LWJpdCBETUEgY2hhbm5lbCBmb3IgdGhlIFNvdW5kIEJsYXN0ZXIgKDAsMSwzKQorZG1hMTYJCTE2LWJpdCBETUEgY2hhbm5lbCBmb3IgU0IxNiBhbmQgZXF1aXZhbGVudCBjYXJkcyAoNSw2LDcpCittcHVfaW8JCUkvTyBmb3IgTVBVIGNoaXAgaWYgcHJlc2VudCAoMHgzMDAsMHgzMzApCisKK3NtX2dhbWVzPTEJU2V0IGlmIHlvdSBoYXZlIGEgTG9naXRlY2ggc291bmRtYW4gZ2FtZXMKK2FjZXI9MQkJU2V0IHRoaXMgdG8gZGV0ZWN0IGNhcmRzIGluIHNvbWUgQUNFUiBub3RlYm9va3MKK213YXZlX2J1Zz0xCVNldCBpZiB5b3UgYXJlIHRyeWluZyB0byB1c2UgdGhpcyBkcml2ZXIgd2l0aCBtd2F2ZSAoc2VlIG9uKQordHlwZQkJVXNlIHRoaXMgdG8gc3BlY2lmeSBhIHNwZWNpZmljIGNhcmQgdHlwZQorCitUaGUgZm9sbG93aW5nIGFyZ3VtZW50cyBhcmUgdGFrZW4gaWYgSVNBUG5QIHN1cHBvcnQgaXMgY29tcGlsZWQgaW4KKworaXNhcG5wPTAJU2V0IHRoaXMgdG8gZGlzYWJsZSBJU0FQblAgZGV0ZWN0aW9uICh1c2UgaW89MHhYWFggZXRjLiBhYm92ZSkKK211bHRpcGxlPTAJU2V0IHRvIGRpc2FibGUgZGV0ZWN0aW9uIG9mIG11bHRpcGxlIFNvdW5kYmxhc3RlciBjYXJkcy4KKwkJQ29uc2lkZXIgaXQgYSBidWcgaWYgdGhpcyBvcHRpb24gaXMgbmVlZGVkLCBhbmQgc2VuZCBpbiBhCisJCXJlcG9ydC4KK3BucGxlZ2FjeT0xCVNldCB0aGlzIHRvIGJlIGFibGUgdG8gdXNlIGEgUG5QIGNhcmQocykgYWxvbmcgd2l0aCBhIHNpbmdsZQorCQlub24tUG5QIChsZWdhY3kpIGNhcmQuICBBYm92ZSBvcHRpb25zIGZvciBpbywgaXJxLCBldGMuIGFyZQorCQluZWVkZWQsIGFuZCB3aWxsIGFwcGx5IG9ubHkgdG8gdGhlIGxlZ2FjeSBjYXJkLgorcmV2ZXJzZT0xCVJldmVyc2VzIHRoZSBvcmRlciBvZiB0aGUgc2VhcmNoIGluIHRoZSBQblAgdGFibGUuCit1YXJ0NDAxPTEJU2V0IHRvIGVuYWJsZSBkZXRlY3Rpb24gb2YgbXB1IGRldmljZXMgb24gc29tZSBjbG9uZXMuCitpc2FwbnBqdW1wPW4JSnVtcHMgdG8gc2xvdCBuIGluIHRoZSBkcml2ZXIncyBQblAgdGFibGUuIFVzZSB0aGUgc291cmNlLAorCQlMdWtlLgorCitZb3UgbWF5IHdlbGwgd2FudCB0byBsb2FkIHRoZSBvcGwzIGRyaXZlciBmb3Igc3ludGggbXVzaWMgb24gbW9zdCBTQiBhbmQKK2Nsb25lIFNCIGRldmljZXMKKworaW5zbW9kIG9wbDMgaW89MHgzODgKKworVXNpbmcgTXdhdmUKKworVG8gbWFrZSB0aGlzIGRyaXZlciB3b3JrIHdpdGggTXdhdmUgeW91IG11c3Qgc2V0IG13YXZlX2J1Zy4gWW91IGFsc28gbmVlZAordG8gd2FybSBib290IGZyb20gRE9TL1dpbmRvd3Mgd2l0aCB0aGUgcmVxdWlyZWQgZmlybXdhcmUgbG9hZGVkIHVuZGVyIHRoaXMKK09TLiBJQk0gYXJlIGJlaW5nIGRpZmZpY3VsdCBhYm91dCBkb2N1bWVudGluZyBob3cgdG8gbG9hZCB0aGlzIGZpcm13YXJlLgorCitBdmFuY2UgTG9naWMgQUxTMDA3CisKK1RoaXMgY2FyZCBpcyBzdXBwb3J0ZWQ7IHNlZSB0aGUgc2VwYXJhdGUgZmlsZSBBTFMwMDcgZm9yIGZ1bGwgZGV0YWlscy4KKworQXZhbmNlIExvZ2ljIEFMUzEwMAorCitUaGlzIGNhcmQgaXMgc3VwcG9ydGVkOyBzZXR1cCBzaG91bGQgYmUgYXMgZm9yIGEgc3RhbmRhcmQgU291bmQgQmxhc3RlciAxNi4KK1RoZSBkcml2ZXIgd2lsbCBpZGVudGlmeSB0aGUgYXVkaW8gZGV2aWNlIGFzIGEgIlNvdW5kIEJsYXN0ZXIgMTYgKEFMUy0xMDApIi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1Ryb3BleisgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Ucm9wZXorCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5M2E2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Ucm9wZXorCkBAIC0wLDAgKzEsMjYgQEAKK0Zyb206IFBhdWwgQmFydG9uLURhdmlzIDxwYmRAb3AubmV0PgorCitIZXJlIGlzIHRoZSBjb25maWd1cmF0aW9uIEkgdXNlIHdpdGggYSBUcm9wZXorIGFuZCBteSBtb2R1bGFyCitkcml2ZXI6CisKKyAgYWxpYXMgY2hhci1tYWpvci0xNCB3YXZlZnJvbnQKKyAgYWxpYXMgc3ludGgwIHdhdmVmcm9udAorICBhbGlhcyBtaXhlcjAgY3M0MjMyCisgIGFsaWFzIGF1ZGlvMCBjczQyMzIKKyAgcHJlLWluc3RhbGwgd2F2ZWZyb250IG1vZHByb2JlICItayIgImNzNDIzMiIKKyAgcG9zdC1pbnN0YWxsIHdhdmVmcm9udCBtb2Rwcm9iZSAiLWsiICJvcGwzIgorICBvcHRpb25zIHdhdmVmcm9udCBpbz0weDIwMCBpcnE9OQorICBvcHRpb25zIGNzNDIzMiBzeW50aGlycT05IHN5bnRoaW89MHgyMDAgaW89MHg1MzAgaXJxPTUgZG1hPTEgZG1hMj0wCisgIG9wdGlvbnMgb3BsMyBpbz0weDM4OAorCitUaGluZ3MgdG8gbm90ZTogCisKKyAgICAgICB0aGUgd2F2ZWZyb250IG9wdGlvbnMgImlvIiBhbmQgImlycSIgKioqTVVTVCoqKiBtYXRjaCB0aGUgInN5bnRoaW8iCisgICAgICAgYW5kICJzeW50aGlycSIgY3M0MjMyIG9wdGlvbnMuCisKKyAgICAgICB5b3UgY2FuIGRvIHdpdGhvdXQgdGhlIG9wbDMgbW9kdWxlIGlmIHlvdSBkb24ndAorICAgICAgIHdhbnQgdG8gdXNlIHRoZSBPUEwvWzM0XSBzeW50aCBvbiB0aGUgc291bmRjYXJkCisKKyAgICAgICB0aGUgb3BsMyBpbyBwYXJhbWV0ZXIgaXMgY29udmVudGlvbmFsbHkgbm90IGFkanVzdGFibGUuCisKK1BsZWFzZSBzZWUgZHJpdmVycy9zb3VuZC9SRUFETUUud2F2ZWZyb250IGZvciBtb3JlIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9WSUEtY2hpcHNldCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1ZJQS1jaGlwc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ODY1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9WSUEtY2hpcHNldApAQCAtMCwwICsxLDQzIEBACitSdW5uaW5nIHNvdW5kIGNhcmRzIG9uIFZJQSBjaGlwc2V0cworCitvCVRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIFZJQSBjaGlwc2V0cyBhbmQgc291bmQgY2FyZHMgdGhhdCBhcHBlYXIgdG8KKwlsb2NrIHRoZSBoYXJkd2FyZSBzb2xpZGx5LiBUZXN0IHByb2dyYW1zIHVuZGVyIERPUyBoYXZlIHZlcmlmaWVkIHRoZQorCXByb2JsZW0gZXhpc3RzIG9uIGF0IGxlYXN0IHNvbWUgKGJ1dCBhcHBhcmVudGx5IG5vdCBhbGwpIFZJQSBib2FyZHMKKworbwlWSUEgaGF2ZSBzbyBmYXIgZmFpbGVkIHRvIGJvdGhlciB0byBhbnN3ZXIgc3VwcG9ydCBtYWlsIG9uIHRoZSBzdWJqZWN0CisJc28gaWYgeW91IGFyZSBhIFZJQSBlbmdpbmVlciBmZWVsaW5nIGFnZ3JpZXZlZCBhcyB5b3UgcmVhZCB0aGlzIAorCWRvY3VtZW50IGdvIGNoYXNlIHlvdXIgb3duIHBlb3BsZS4gSWYgdGhlcmUgaXMgYSB3b3JrYXJvdW5kIHBsZWFzZQorCWxldCB1cyBrbm93IHNvIHdlIGNhbiBpbXBsZW1lbnQgaXQuCisKKworQ2VydGFpbiBwYXR0ZXJucyBvZiBJU0EgRE1BIGFjY2VzcyB1c2VkIGZvciBtb3N0IFBDIHNvdW5kIGNhcmRzIGNhdXNlIHRoZQorVklBIGNoaXBzZXRzIHRvIGxvY2sgdXAuIEZyb20gdGhlIGNvbGxlY3RlZCByZXBvcnRzIHRoaXMgYXBwZWFycyB0byBjb3ZlciBhCit3aWRlIHJhbmdlIG9mIGJvYXJkcy4gU29tZSBhbHNvIGxvY2sgdXAgd2l0aCBzb3VuZCBjYXJkcyB1bmRlciBXaW4qIGFzIHdlbGwuCisKK0xpbnV4IGltcGxlbWVudHMgYSB3b3JrYXJvdW5kIHByb3ZpZGluZyB5b3VyIGNoaXBzZXQgaXMgUENJIGFuZCB5b3UgY29tcGlsZWQKK3dpdGggUENJIFF1aXJrcyBlbmFibGVkLiBJZiBzbyB5b3Ugd2lsbCBzZWUgYSBtZXNzYWdlCisJIkFjdGl2YXRpbmcgSVNBIERNQSBidWcgd29ya2Fyb3VuZHMiCisKK2R1cmluZyBib290aW5nLiBJZiB5b3UgaGF2ZSBhIFZJQSBQQ0kgY2hpcHNldCB0aGF0IGhhbmdzIHdoZW4geW91IHVzZSB0aGUKK3NvdW5kIGFuZCBpcyBub3QgZ2VuZXJhdGluZyB0aGlzIG1lc3NhZ2UgZXZlbiB3aXRoIFBDSSBxdWlya3MgZW5hYmxlZAorcGxlYXNlIHJlcG9ydCB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIGxpbnV4LWtlcm5lbCBsaXN0IChzZWUgUkVQT1JUSU5HLUJVR1MpLgorCitJZiB5b3UgYXJlIG9uZSBvZiB0aGUgdGlueSBudW1iZXIgb2YgdW5mb3J0dW5hdGVzIHdpdGggYSA0ODYgSVNBL1ZMQiBWSUEKK2NoaXBzZXQgYm9hcmQgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZyB0byBidWlsZCBhIHNwZWNpYWwga2VybmVsIGZvcgoreW91ciBib2FyZAorCisJZWRpdCBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L2RtYS5oCisKK2NoYW5nZQorCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5IAkoMCkKKwordG8KKworI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAJKDEpCisKK2FuZCByZWJ1aWxkIGEga2VybmVsIHdpdGhvdXQgUENJIHF1aXJrIHN1cHBvcnQuCisKKworT3RoZXIgdGhhbiB0aGlzIHBhcnRpY3VsYXIgZ2xpdGNoIHRoZSBWSUEgW01dVlAqIGNoaXBzZXRzIGFwcGVhciB0byB3b3JrCitwZXJmZWN0bHkgd2l0aCBMaW51eC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1ZJQlJBMTYgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9WSUJSQTE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YTVhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9WSUJSQTE2CkBAIC0wLDAgKzEsODAgQEAKK1NvdW5kIEJsYXN0ZXIgMTZYIFZpYnJhIGFkZGVuZHVtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYnkgTWFyaXVzIElsaW9hZWEgPG1hcml1c2lAcHJvdHYucm8+CisgICBTdGVmYW4gTGF1ZGF0ICA8c3RlZmFuQGFzaXQucm8+CisKK1NhdCBNYXIgNiAyMzo1NToyNyBFRVQgMTk5OQorCisJCQlIZWxsbyBhZ2FpbiwKKwkKKwlQbGF5aW5nIHdpdGggYSBTQiBWaWJyYSAxNnggc291bmRjYXJkIHdlIGZvdW5kIGl0IHZlcnkgZGlmZmljdWx0Cit0byBzZXR1cCBiZWNhdXNlIHRoZSBrZXJuZWwgcmVwb3J0ZWQgYSBsb3Qgb2YgRE1BIGVycm9ycyBhbmQgd291bGRuJ3QKK3NpbXBseSBwbGF5IGFueSBzb3VuZC4KKwlBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgdGhhdCB0aGUgdmlicmExNnggY2hpcCBmdWxsLWR1cGxleCBmYWNpbGl0eQoraXMgbmVpdGhlciBzdGlsbCBleHBsb2l0ZWQgYnkgdGhlIHNiIGRyaXZlciBmb3VuZCBpbiB0aGUgbGludXgga2VybmVsIAorKHRyaWVkIGl0IHdpdGggYSAyLjIuMi1hYzcpLCBub3IgaW4gdGhlIGNvbW1lcmNpYWwgT1NTIHBhY2thZ2UgKGl0IHJlcG9ydHMKK2l0IGFzIGhhbGYtZHVwbGV4IHNvdW5kY2FyZCkuIE9oLCBJIGFsbW9zdCBmb3Jnb3QsIHRoZSBSZWRIYXQgc25kY29uZmlnCitmYWlsZWQgZGV0ZWN0aW5nIGl0IDspCisJU28sIHRoZSBiaWcgcHJvYmxlbSBzdGlsbCByZW1haW5zLCBiZWNhdXNlIHRoZSBzYiBtb2R1bGUgd2FudHMgYQorOC1iaXQgYW5kIGEgMTYtYml0IGRtYSwgd2hpY2ggd2UgY291bGQgbm90IGFsbG9jYXRlIGZvciB2aWJyYS4uLiBpdCBzdXBwb3J0cworb25seSB0d28gOC1iaXQgZG1hIGNoYW5uZWxzLCB0aGUgc2Vjb25kIG9uZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbW9kdWxlCithcyBhIDE2IGJpdCBjaGFubmVsLCB0aGUga2VybmVsIHdpbGwgeWllbGQgYWJvdXQgdGhhdCBidXQgZXZlcnl0aGluZyB3aWxsCitiZSBva2F5LCB0cnVzdCB1cy4gCisJVGhlIG9ubHkgaW5jb252ZW5pZW50IHlvdSBtYXkgZmluZCBpcyB0aGF0IHlvdSB3aWxsIGhhdmUKK3NvbWUgc291bmQgcGxheWluZyBqaXR0ZXJzIGlmIHlvdSBoYXZlIEhERCBkbWEgc3VwcG9ydCBlbmFibGVkIC0gYnV0IHRoaXMKK3dpbGwgaGFwcGVuIHdpdGggYWxtb3N0IGFsbCBzb3VuZGNhcmRzLi4uCisKKwlBIGZ1bGx5IHdvcmtpbmcgaXNhcG5wLmNvbmYgaXMganVzdCBoZXJlOgorCis8c25pcCBoZXJlPgorCisoUkVBRFBPUlQgMHgwMjAzKQorKElTT0xBVEUgUFJFU0VSVkUpCisoSURFTlRJRlkgKikKKyhWRVJCT1NJVFkgMikKKyhDT05GTElDVCAoSU8gRkFUQUwpKElSUSBGQVRBTCkoRE1BIEZBVEFMKShNRU0gRkFUQUwpKSAjIG9yIFdBUk5JTkcKKyMgU0IgMTYgYW5kIE9QTDMgZGV2aWNlcworKENPTkZJR1VSRSBDVEwwMGYwLy0xIChMRCAwCisoSU5UIDAgKElSUSA1IChNT0RFICtFKSkpCisoRE1BIDAgKENIQU5ORUwgMSkpCisoRE1BIDEgKENIQU5ORUwgMykpCisoSU8gMCAoU0laRSAxNikgKEJBU0UgMHgwMjIwKSkKKyhJTyAyIChTSVpFIDQpIChCQVNFIDB4MDM4OCkpCisoTkFNRSAiQ1RMMDBmMC8tMVswXXtBdWRpbyAgICAgICAgICAgICAgIH0iKQorKEFDVCBZKQorKSkKKworIyBKb3lzdGljayBkZXZpY2UgLSBvbmx5IGlmIHlvdSBuZWVkIGl0IDotLworCisoQ09ORklHVVJFIENUTDAwZjAvLTEgKExEIDEKKyhJTyAwIChTSVpFIDEpIChCQVNFIDB4MDIwMCkpCisoTkFNRSAiQ1RMMDBmMC8tMVsxXXtHYW1lICAgICAgICAgICAgICAgIH0iKQorKEFDVCBZKQorKSkKKyhXQUlURk9SS0VZKQorCis8ZW5kIG9mIHNuaXBwaW5nPgorCisJU28sIGFmdGVyIGEgZ29vZCBrZXJuZWwgbW9kdWxlcyBjb21waWxhdGlvbiBhbmQgYSAnZGVwbW9kIC1hIGtlcm5lbF92ZXInCit5b3UgbWF5IHdhbnQgdG86CisKK21vZHByb2JlIHNiIGlvPTB4MjIwIGlycT01IGRtYT0xIGRtYTE2PTMKKworCU9yLCB0YWtlIHRoZSBoYXJkIHdheToKKworbW9kcHJvYmUgc291bmRjb3JlCittb2Rwcm9iZSBzb3VuZAorbW9kcHJvYmUgdWFydDQwMQorbW9kcHJvYmUgc2IgaW89MHgyMjAgaXJxPTUgZG1hPTEgZG1hMTY9MworIyBkbyB5b3UgbmVlZCBNSURJPworbW9kcHJvYmUgb3BsMz0weDM4OAorCisJSnVzdCBpbiBjYXNlLCB0aGUga2VybmVsIHNvdW5kIHN1cHBvcnQgc2hvdWxkIGJlOgorCitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX09TUz1tCitDT05GSUdfU09VTkRfU0I9bQorCQorCUVuam95IHlvdXIgbmV3IG5vaXN5IExpbnV4IGJveCEgOykKKwkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvV2F2ZUFydGlzdCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1dhdmVBcnRpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmMzQwNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1dhdmVBcnRpc3QKQEAgLTAsMCArMSwxNzAgQEAKKworICh0aGUgZm9sbG93aW5nIGlzIGZyb20gdGhlIGFybWxpbnV4IENWUykKKworIFdhdmVBcnRpc3QgbWl4ZXIgYW5kIHZvbHVtZSBsZXZlbHMgY2FuIGJlIGFjY2Vzc2VkIHZpYSB0aGVzZSBjb21tYW5kczoKKworICBubjMwCXJlYWQgcmVnaXN0ZXJzIG5uLCB3aGVyZSBubiA9IDAwIC0gMDkgZm9yIG1peGVyIHNldHRpbmdzCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBhIC0gMTMgZm9yIGNoYW5uZWwgdm9sdW1lcworICBtbTMxCXdyaXRlIHRoZSB2b2x1bWUgc2V0dGluZyBpbiBwYWlycywgd2hlcmUgbW0gPSAobm4gLSAxMCkgLyAyCisgIHJyMzIJd3JpdGUgdGhlIG1peGVyIHNldHRpbmdzIGluIHBhaXJzLCB3aGVyZSByciA9IG5uLzIKKyAgeHgzMwlyZXNldCBhbGwgc2V0dGluZ3MgdG8gZGVmYXVsdAorICAweTM0CXNlbGVjdCBtb25vIHNvdXJjZSwgeT0wID0gbGVmdCwgeT0xID0gcmlnaHQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMKKyBubiAgMTUgIDE0IDEzIDEyIDExICAgMTAgICAgOSAgICAgOCAgICAgNyAgICA2ICAgICA1ICAgICA0ICAgICAzICAgICAyICAgICAxICAgICAwCistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwMCB8IDAgfCAwICAwICAxICAxIHwgbGVmdCBsaW5lIG1peGVyIGdhaW4gICAgICAgfCBsZWZ0IGF1eDEgbWl4ZXIgZ2FpbiAgICAgICAgfGxtdXRlfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMDEgfCAwIHwgMCAgMSAgMCAgMSB8IGxlZnQgYXV4MiBtaXhlciBnYWluICAgICAgIHwgcmlnaHQgMiBsZWZ0IG1pYyBnYWluICAgICAgIHxtbXV0ZXwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDAyIHwgMCB8IDAgIDEgIDEgIDEgfCBsZWZ0IG1pYyBtaXhlciBnYWluICAgICAgICB8IGxlZnQgbWljICB8IGxlZnQgbWl4ZXIgZ2FpbiB8ZGl0aCB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwMyB8IDAgfCAxICAwICAwICAxIHwgbGVmdCBtaXhlciBpbnB1dCBzZWxlY3QgICAgICAgICAgICAgICAgfGxyZmcgfCBsZWZ0IEFEQyBnYWluICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMDQgfCAwIHwgMSAgMCAgMSAgMSB8IHJpZ2h0IGxpbmUgbWl4ZXIgZ2FpbiAgICAgIHwgcmlnaHQgYXV4MSBtaXhlciBnYWluICAgICAgIHxybXV0ZXwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDA1IHwgMCB8IDEgIDEgIDAgIDEgfCByaWdodCBhdXgyIG1peGVyIGdhaW4gICAgICB8IGxlZnQgMiByaWdodCBtaWMgZ2FpbiAgICAgICB8dGVzdCB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwNiB8IDAgfCAxICAxICAxICAxIHwgcmlnaHQgbWljIG1peGVyIGdhaW4gICAgICAgfCByaWdodCBtaWMgfHJpZ2h0IG1peGVyIGdhaW4gfHJieXBzfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMDcgfCAxIHwgMCAgMCAgMCAgMSB8IHJpZ2h0IG1peGVyIHNlbGVjdCAgICAgICAgICAgICAgICAgICAgIHxycmZnIHwgcmlnaHQgQURDIGdhaW4gIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDA4IHwgMSB8IDAgIDAgIDEgIDEgfCBtb25vIG1peGVyIGdhaW4gICAgICAgICAgICB8cmlnaHQgQURDIG11eCBzZWx8bGVmdCBBREMgbXV4IHNlbCB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwOSB8IDEgfCAwICAxICAwICAxIHxsb29wYnxsZWZ0IGxpbm91dHxsb29wfEFEQ2NofFR4RmNofE9mZkNEfHRlc3QgfGxvb3BifGxvb3BifG9zYW1wfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMGEgfCAwIHwgbGVmdCBQQ00gY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDBiIHwgMCB8IHJpZ2h0IFBDTSBjaGFubmVsIHZvbHVtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwYyB8IDAgfCBsZWZ0IEZNIGNoYW5uZWwgdm9sdW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMGQgfCAwIHwgcmlnaHQgRk0gY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDBlIHwgMCB8IGxlZnQgd2F2ZXRhYmxlIGNoYW5uZWwgdm9sdW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwZiB8IDAgfCByaWdodCB3YXZldGFibGUgY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMTAgfCAwIHwgbGVmdCBQQ00gZXhwYW5zaW9uIGNoYW5uZWwgdm9sdW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDExIHwgMCB8IHJpZ2h0IFBDTSBleHBhbnNpb24gY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAxMiB8IDAgfCBsZWZ0IEZNIGV4cGFuc2lvbiBjaGFubmVsIHZvbHVtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMTMgfCAwIHwgcmlnaHQgRk0gZXhwYW5zaW9uIGNoYW5uZWwgdm9sdW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworCisgbG11dGU6IGxlZnQgbXV0ZQorIG1tdXRlOiBtb25vIG11dGUKKyBkaXRoOiBkaXRoZHMKKyBscmZnOgorIHJtdXRlOiByaWdodCBtdXRlCisgcmJ5cHM6IHJpZ2h0IGJ5cGFzcworIHJyZmc6CisgQURDY2g6CisgVHhGY2g6CisgT2ZmQ0Q6Cisgb3NhbXA6CisKKyBBbmQgdGhlIGZvbGxvd2luZyBkaWFncmFtIGlzIGRlcml2ZWQgZnJvbSB0aGUgZGVzY3JpcHRpb24gaW4gdGhlIENWUyBhcmNoaXZlOgorCisgTUlDIEwgKG1vdXRocGllY2UpCisgICArLS0tLS0tKworIC0tPlByZUFtcD4tXAorICAgKy0tXi0tLSsgfAorICAgICAgfCAgICAgfAorICAgIHIyYjQtNSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tKworICAgICAgIC8tLS0tKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjUgICAgICAgfAorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgIHwgLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjQgICAgICAgfAorICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgIHwgfCAvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjMgMW9mNSAgfCAgKy0tLSsKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG11eCAgID4tLT5BTVA+LS0+IEFEQyBMCisgICAgICAgfCB8IHwgLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+MiAgICAgICB8ICArLV4tKworICAgICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICB8CisgTGluZSAgfCB8IHwgfCArLS0tLSsgICstLS0tLS0rICArLS0tKyAgLy0tLS0+MSAgICAgICB8ICByM2IzLTAKKyAtLS0tLS0tLS0tLS0qLT5tdXRlPi0tPiBHYWluID4tLT4gICB8ICB8ICAgIHwgICAgICAgIHwKKyAgTCAgICB8IHwgfCAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICB8ICAqLT4wICAgICAgIHwKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICB8ICAgICstLS1eLS0tLSsKKyBBdXgyICB8IHwgfCAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICB8ICAgICAgICB8CisgLS0tLS0tLS0tLSotLS0+bXV0ZT4tLT4gR2FpbiA+LS0+IE0gfCAgfCAgICAgcjhiMC0yCisgIEwgICAgfCB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgfAorICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIFwtLS0tLS1cCisgQXV4MSAgfCB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAtLS0tLS0tLSotLS0tLT5tdXRlPi0tPiBHYWluID4tLT4gSSB8ICAgICAgICAgfAorICBMICAgIHwgICAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8ICAgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICArLS0tKyAgfAorICAgICAgICotLS0tLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBYID4tLT5BTVA+LS0qCisgICAgICAgfCAgICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgKy1eLSsgIHwKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgIHwgICAgfAorICAgICAgIHwgICAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgIHIyYjEtMyB8ICAKKyAgICAgICB8IC8tLS0tLT5tdXRlPi0tPiBHYWluID4tLT4gRSB8ICAgICAgICAgfAorICAgICAgIHwgfCAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8IHwgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCAvLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBSIHwgICAgICAgICB8CisgICAgICAgfCB8IHwgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgfCAgIHI5YjgtOQorICAgICAgIHwgfCB8ICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8ICAgICB8CisgICAgICAgfCB8IHwgLy0+bXV0ZT4tLT4gR2FpbiA+LS0+ICAgfCAgICAgICAgIHwgKy0tLXYtLS0rCisgICAgICAgfCB8IHwgfCArLS0tLSsgICstLS0tLS0rICArLS0tKyAgICAgICAvLSotPjAgICAgICB8CisgREFDICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICB8CisgLS0tLS0tLS0tLS0tKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPj8gICAgICB8ICArLS0tLSsKKyAgTCAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICBNdXggID4tLT5tdXRlPi0tPiBMIG91dHB1dAorICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAvLT4/ICAgICAgfCAgKy0tXi0rCisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCAgICAgICB8ICAgICB8CisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLS0tLS0tLS0tPj8gICAgICB8ICAgcjBiMAorICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB8ICstLS0tLS0tKworICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB8CisgTW9ubyAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHwgKy0tLS0tLS0rCisgLS0tLS0tLS0tLSogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBcLS0tPiAgICAgICB8ICArLS0tLSsKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCB8ICBNaXggID4tLT5tdXRlPi0tPiBNb25vIG91dHB1dAorICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAqLT4gICAgICAgfCAgKy0tXi0rCisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgKy0tLS0tLS0rICAgICB8CisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgcjFiMAorIERBQyAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICstLS0tLS0tKworIC0tLS0tLS0tLS0tLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0tLS0tLS0tLT4xICAgICAgfCAgKy0tLS0rCisgIFIgICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgTXV4ICA+LS0+bXV0ZT4tLT4gUiBvdXRwdXQKKyAgICAgICB8IHwgfCB8ICstLS0tKyAgKy0tLS0tLSsgICstLS0rICAgICAgICAgKi0+MCAgICAgIHwgICstLV4tKworICAgICAgIHwgfCB8IFwtPm11dGU+LS0+IEdhaW4gPi0tPiAgIHwgICAgICAgICB8ICstLS1eLS0tKyAgICAgfAorICAgICAgIHwgfCB8ICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8ICAgICB8ICAgICAgIHI1YjAKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgfCAgIHI2YjAKKyAgICAgICB8IHwgfCAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCBcLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBNIHwgICAgICAgICB8CisgICAgICAgfCB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCAqLS0tLS0+bXV0ZT4tLT4gR2FpbiA+LS0+IEkgfCAgICAgICAgIHwKKyAgICAgICB8IHwgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgKy0tLSsgIHwKKyAgICAgICBcLS0tLS0tLT5tdXRlPi0tPiBHYWluID4tLT4gWCA+LS0+QU1QPi0tKgorICAgICAgICAgfCAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICstXi0rICB8CisgICAgICAvLS0vICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICB8ICAgIHwKKyBBdXgxIHwgICAgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICByNmIxLTMgfAorIC0tLS0tLS0qLS0tLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBFIHwgICAgICAgICB8CisgIFIgICB8IHwgICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgfAorIEF1eDIgfCB8ICAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgIC8tLS0tLS0vCisgLS0tLS0tLS0tKi0tLS0+bXV0ZT4tLT4gR2FpbiA+LS0+IFIgfCAgfAorICBSICAgfCB8IHwgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgIHwKKyAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICB8ICAgICstLS0tLS0tLSsKKyBMaW5lIHwgfCB8ICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICB8ICAqLT4wICAgICAgIHwKKyAtLS0tLS0tLS0tLSotLT5tdXRlPi0tPiBHYWluID4tLT4gICB8ICB8ICAgIHwgICAgICAgIHwKKyAgUiAgIHwgfCB8IHwgICstLS0tKyAgKy0tLS0tLSsgICstLS0rICBcLS0tLT4xICAgICAgIHwKKyAgICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKKyAgICAgIHwgfCB8IFwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4yICAgICAgIHwgICstLS0rCisgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNdXggICA+LS0+QU1QPi0tPiBBREMgUgorICAgICAgfCB8IFwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjMgICAgICAgfCAgKy1eLSsKKyAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwgICAgfAorICAgICAgfCBcLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjQgICAgICAgfCAgcjdiMy0wCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CisgICAgICBcLS0tLS0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+NSAgICAgICB8CisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tXi0tLS0rCisgICAgcjZiNC01ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByOGIzLTUKKyAgICstLXYtLS0rIHwKKyAtLT5QcmVBbXA+LS8KKyAgICstLS0tLS0rCisgTUlDIFIgKGVsZWN0cmV0IG1pYykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1dhdmVmcm9udCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1dhdmVmcm9udApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmY1N2VhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvV2F2ZWZyb250CkBAIC0wLDAgKzEsMzM5IEBACisJICAgICBBbiBPU1MvRnJlZSBEcml2ZXIgZm9yIFdhdmVGcm9udCBzb3VuZGNhcmRzCisJICAgICAgIChUdXJ0bGUgQmVhY2ggTWF1aSwgVHJvcGV6LCBUcm9wZXogUGx1cykKKworCQkgICAgIFBhdWwgQmFydG9uLURhdmlzLCBKdWx5IDE5OTgKKworCQkJICBWRVJTSU9OIDAuMi41CisKK0RyaXZlciBTdGF0dXMKKy0tLS0tLS0tLS0tLS0KKworUmVxdWlyZXM6IEtlcm5lbCAyLjEuMTA2IG9yIGxhdGVyICh0aGUgZHJpdmVyIGlzIGluY2x1ZGVkIHdpdGgga2VybmVscworMi4xLjEwOSBhbmQgYWJvdmUpCisJICAKK0FzIG9mIDcvMjIvMTk5OCwgdGhpcyBkcml2ZXIgaXMgY3VycmVudGx5IGluICpCRVRBKiBzdGF0ZS4gVGhpcyBtZWFucwordGhhdCBpdCBjb21waWxlcyBhbmQgcnVucywgYW5kIHRoYXQgSSB1c2UgaXQgb24gbXkgc3lzdGVtIChMaW51eAorMi4xLjEwNikgd2l0aCBzb21lIHJlYXNvbmFibHkgZGVtYW5kaW5nIGFwcGxpY2F0aW9ucyBhbmQgdXNlcy4gIEkKK2JlbGlldmUgdGhlIGNvZGUgaXMgYXBwcm9hY2hpbmcgYW4gaW5pdGlhbCAiZmluaXNoZWQiIHN0YXRlIHRoYXQKK3Byb3ZpZGVzIGJ1Zy1mcmVlIHN1cHBvcnQgZm9yIHRoZSBUcm9wZXogUGx1cy4KKworUGxlYXNlIG5vdGUgdGhhdCB0byBkYXRlLCB0aGUgZHJpdmVyIGhhcyBPTkxZIGJlZW4gdGVzdGVkIG9uIGEgVHJvcGV6CitQbHVzLiBJIHdvdWxkIHZlcnkgbXVjaCBsaWtlIHRvIGhlYXIgKGFuZCBoZWxwIG91dCkgcGVvcGxlIHdpdGggVHJvcGV6CithbmQgTWF1aSBjYXJkcywgc2luY2UgSSB0aGluayB0aGUgZHJpdmVyIGNhbiBzdXBwb3J0IHRob3NlIGNhcmRzIGFzCit3ZWxsLiAKKworRmluYWxseSwgdGhlIGRyaXZlciBoYXMgbm90IGJlZW4gdGVzdGVkIChvciBldmVuIGNvbXBpbGVkKSBhcyBhIHN0YXRpYworKG5vbi1tb2R1bGFyKSBwYXJ0IG9mIHRoZSBrZXJuZWwuIEFsYW4gQ294J3MgZ29vZCB3b3JrIGluIG1vZHVsYXJpemluZworT1NTL0ZyZWUgZm9yIExpbnV4IG1ha2VzIHRoaXMgcmF0aGVyIHVubmVjZXNzYXJ5LgorCitTb21lIFF1ZXN0aW9ucworLS0tLS0tLS0tLS0tLS0KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorMCkgV2hhdCBkb2VzIHRoaXMgZHJpdmVyIGRvIHRoYXQgdGhlIG1hdWkgZHJpdmVyIGRpZCBub3QgPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqIGNhbiBmdWxseSBpbml0aWFsaXplIGEgV2F2ZUZyb250IGNhcmQgZnJvbSBjb2xkIGJvb3QgLSBubyBET1MgCisgICAgICAgICAgdXRpbGl0aWVzIG5lZWRlZAorKiB3b3JraW5nIHBhdGNoL3NhbXBsZS9wcm9ncmFtIGxvYWRpbmcgYW5kIHVubG9hZGluZyAodGhlIG1hdWkKKyAgICAgIGRyaXZlciBkaWRuJ3QgZG9jdW1lbnQgaG93IHRvIG1ha2UgdGhpcyB3b3JrLCBhbmQgYXNzdW1lZAorICAgICAgdXNlci1sZXZlbCBwcmVwYXJhdGlvbiBvZiB0aGUgcGF0Y2ggZGF0YSBmb3Igd3JpdGluZworICAgICAgdG8gdGhlIGJvYXJkLiBpY2suKQorKiBmdWxsIHVzZXItbGV2ZWwgYWNjZXNzIHRvIGFsbCBXYXZlRnJvbnQgY29tbWFuZHMKKyogZm9yIHRoZSBUcm9wZXogUGx1cywgKHByaW1pdGl2ZSkgY29udHJvbCBvZiB0aGUgWVNTMjI1IEZYIHByb2Nlc3NvcgorKiBWaXJ0dWFsIE1JREkgbW9kZSBzdXBwb3J0ZWQgLSAyIE1JREkgZGV2aWNlcyBhY2Nlc3NpYmxlIHZpYSB0aGUKKyAgICAgICAgICBXYXZlRnJvbnQncyBNUFU0MDEvVUFSVCBlbXVsYXRpb24uIE9uZQorCSAgYWNjZXNzZXMgdGhlIFdhdmVGcm9udCBzeW50aCwgdGhlIG90aGVyIGFjY2Vzc2VzIHRoZQorCSAgZXh0ZXJuYWwgTUlESSBjb25uZWN0b3IuIEZ1bGwgTUlESSByZWFkL3dyaXRlIHNlbWFudGljcworCSAgZm9yIGJvdGggZGV2aWNlcy4KKyogT1NTLWNvbXBsaWFudCAvZGV2L3NlcXVlbmNlciBpbnRlcmZhY2UgZm9yIHRoZSBXYXZlRnJvbnQgc3ludGgsCisJICBpbmNsdWRpbmcgbmF0aXZlIGFuZCBHVVMtZm9ybWF0IHBhdGNoIGRvd25sb2FkaW5nLgorKiBzZW1pLWludGVsbGlnZW50IHBhdGNoIG1hbmFnZW1lbnQgKHByb3RvdHlwaWNhbCBhdCB0aGlzIHBvaW50KQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisxKSBXaGF0IHRvIGRvIGFib3V0IE1JREkgaW50ZXJmYWNlcyA/CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBUcm9wZXogUGx1cyAoYW5kIHBlcmhhcHMgb3RoZXIgV0YgY2FyZHMpIGNhbiBpbiB0aGVvcnkgc3VwcG9ydCB1cAordG8gMiBwaHlzaWNhbCBNSURJIGludGVyZmFjZXMuIE9uZSBvZiB0aGVzZSBpcyBjb25uZWN0ZWQgdG8gdGhlCitJQ1MyMTE1IGNoaXAgKHRoZSBXYXZlRnJvbnQgc3ludGggaXRzZWxmKSBhbmQgaXMgY29udHJvbGxlZCBieQorTVBVL1VBUlQtNDAxIGVtdWxhdGlvbiBjb2RlIHJ1bm5pbmcgYXMgcGFydCBvZiB0aGUgV2F2ZUZyb250IE9TLiAgVGhlCitvdGhlciBpcyBjb250cm9sbGVkIGJ5IHRoZSBDUzQyMzIgY2hpcCBwcmVzZW50IG9uIHRoZSBib2FyZC4gSG93ZXZlciwKK3BoeXNpY2FsIGFjY2VzcyB0byB0aGUgQ1M0MjMyIGNvbm5lY3RvciBpcyBkaWZmaWN1bHQsIGFuZCBpdCBpcwordW5saWtlbHkgKHRob3VnaCBub3QgaW1wb3NzaWJsZSkgdGhhdCB5b3Ugd2lsbCB3YW50IHRvIHVzZSBpdC4KKworQW4gb2xkZXIgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciBpbnRyb2R1Y2VkIGFuIGFkZGl0aW9uYWwga2VybmVsIGNvbmZpZwordmFyaWFibGUgd2hpY2ggY29udHJvbGxlZCB3aGV0aGVyIG9yIG5vdCB0aGUgQ1M0MjMyIE1JREkgaW50ZXJmYWNlIHdhcworY29uZmlndXJlZC4gQmVjYXVzZSBvZiBBbGFuIENveCdzIHdvcmsgb24gbW9kdWxhcml6aW5nIHRoZSBzb3VuZAorZHJpdmVycywgYW5kIG5vdyBiYWNrcG9ydGluZyB0aGVtIHRvIDIuMC4zNCBrZXJuZWxzLCB0aGVyZSBzZWVtcyB0byBiZQorbGl0dGxlIHJlYXNvbiB0byBzdXBwb3J0ICJzdGF0aWMiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCBhbmQgc28gdGhpcworaGFzIGJlZW4gYWJhbmRvbmVkIGluIGZhdm9yIG9mICpvbmx5KiBtb2R1bGUgcGFyYW1ldGVycy4gU3BlY2lmeWluZworIm1wdWlvIiBhbmQgIm1wdWlycSIgZm9yIHRoZSBjczQyMzIgcGFyYW1ldGVyIHdpbGwgcmVzdWx0IGluIHRoZQorQ1M0MjMyIE1JREkgaW50ZXJmYWNlIGJlaW5nIGNvbmZpZ3VyZWQ7IGxlYXZpbmcgdGhlbSB1bnNwZWNpZmllZCB3aWxsCitsZWF2ZSBpdCB1bmNvbmZpZ3VyZWQgKGFuZCB0aHVzIHVudXNhYmxlKS4KKworQlRXLCBJIGhhdmUgaGVhcmQgZnJvbSBvbmUgVHJvcGV6KyB1c2VyIHRoYXQgdGhlIENTNDIzMiBpbnRlcmZhY2UgaXMKK21vcmUgcmVsaWFibGUgdGhhbiB0aGUgSUNTMjExNSBvbmUuIEkgaGF2ZSBoYWQgbm8gcHJvYmxlbXMgd2l0aCB0aGUKK2xhdHRlciwgYW5kIEkgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgY2FibGUgdG8gdGVzdCB0aGUgZm9ybWVyIG9uZQorb3V0LiBSZXBvcnRzIHdlbGNvbWUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzIpIFdoeSBkb2VzIGxpbmUgWFhYIG9mIHRoZSBjb2RlIGxvb2sgbGlrZSB0aGlzIC4uLi4gPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitFaXRoZXIgYmVjYXVzZSBpdCdzIG5vdCBmaW5pc2hlZCB5ZXQsIG9yIGJlY2F1c2UgeW91J3JlIGEgYmV0dGVyIGNvZGVyCit0aGFuIEkgYW0sIG9yIGJlY2F1c2UgeW91IGRvbid0IHVuZGVyc3RhbmQgc29tZSBhc3BlY3Qgb2YgaG93IHRoZSBjYXJkCitvciB0aGUgY29kZSB3b3Jrcy4gCisKK0kgYWJzb2x1dGVseSB3ZWxjb21lIGNvbW1lbnRzLCBjcml0aWNpc21zIGFuZCBzdWdnZXN0aW9ucyBhYm91dCB0aGUKK2Rlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRyaXZlci4gCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzMpIFdoYXQgZmlsZXMgYXJlIGluY2x1ZGVkID8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgZHJpdmVycy9zb3VuZC9SRUFETUUud2F2ZWZyb250ICAgICAgIC0tIHRoaXMgZmlsZQorCisgICBkcml2ZXJzL3NvdW5kL3dhdmVmcm9udC5wYXRjaAktLSBwYXRjaGVzIGZvciB0aGUgMi4xLjEwNiBzb3VuZCBkcml2ZXJzCisJCQkJCSAgIG5lZWRlZCB0byBtYWtlIHRoZSByZXN0IG9mIHRoaXMgd29yaworCQkJCSAgICAgICAgICAgRE8gTk9UIFVTRSBJRiBZT1UnVkUgQVBQTElFRCBUSEVNIAorCQkJCQkgICBCRUZPUkUsIE9SIEhBVkUgMi4xLjEwOSBPUiBBQk9WRQorCisgICBkcml2ZXJzL3NvdW5kL3dhdmZyb250LmMgICAgICAgICAgICAgLS0gdGhlIGRyaXZlcgorICAgZHJpdmVycy9zb3VuZC95czIyNS5oICAgICAgICAgICAgICAgIC0tIGRhdGEgZGVjbGFyYXRpb25zIGZvciBGWCBjb25maWcKKyAgIGRyaXZlcnMvc291bmQveXMyMjUuYyAgICAgICAgICAgICAgICAtLSBkYXRhIGRlZmluaXRpb25zIGZvciBGWCBjb25maWcKKyAgIGRyaXZlcnMvc291bmQvd2ZfbWlkaS5jICAgICAgICAgICAgICAtLSB0aGUgInVhcnQ0MDEiIGRyaXZlciAKKyAgIAkJCQkgICAgICAgICAgICAgIHRvIHN1cHBvcnQgdmlydHVhbCBNSURJIG1vZGUuCisgICBpbmNsdWRlL3dhdmVmcm9udC5oICAgICAgICAgICAgICAgICAgLS0gdGhlIGhlYWRlciBmaWxlCisgICBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Ucm9wZXorICAgICAgICAgIC0tIHNob3J0IGRvY3Mgb24gY29uZmlndXJhdGlvbgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis0KSBIb3cgZG8gSSBjb21waWxlL2luc3RhbGwvdXNlIGl0ID8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworUEFSVCBPTkU6IGluc3RhbGwgdGhlIHNvdXJjZSBjb2RlIGludG8geW91ciBzb3VuZCBkcml2ZXIgZGlyZWN0b3J5CisKKyAgY2QgPHRvcC1vZi15b3VyLTIuMS4xMDYtY29kZS1iYXNlLWUuZy4tL3Vzci9zcmMvbGludXg+CisgIHRhciAtenh2ZiA8d2hlcmUteW91LXB1dC93YXZlZnJvbnQudGFyLmd6PgorCitQQVJUIFRXTzogYXBwbHkgdGhlIHBhdGNoZXMKKworICAgICBETyBUSElTIE9OTFkgSUYgWU9VIEhBVkUgQSBLRVJORUwgVkVSU0lPTiBCRUxPVyAyLjEuMTA5CisgICAgIEFORCBIQVZFIE5PVCBBTFJFQURZIElOU1RBTExFRCBUSEUgUEFUQ0goRVMpLgorCisgIGNkIGRyaXZlcnMvc291bmQKKyAgcGF0Y2ggPCB3YXZlZnJvbnQucGF0Y2gKKworUEFSVCBUSFJFRTogY29uZmlndXJlIHlvdXIga2VybmVsCisKKyAgY2QgPHRvcCBvZiB5b3VyIGtlcm5lbCB0cmVlPgorICBtYWtlIHhjb25maWcgKG9yIHdoaWNoZXZlciBjb25maWcgb3B0aW9uIHlvdSB1c2UpCisKKyAgICAgICAgIC0gY2hvb3NlIFlFUyBmb3IgU291bmQgU3VwcG9ydAkgICAgICAKKyAgICAgICAgIC0gY2hvb3NlIE1PRFVMRSAoTSkgZm9yIE9TUyBTb3VuZCBNb2R1bGVzCisgICAgICAgICAtIGNob29zZSBNT0RVTEUoTSkgdG8gWU0zODEyL09QTDMgc3VwcG9ydAorCSAtIGNob29zZSBNT0RVTEUoTSkgZm9yIFdhdmVGcm9udCBzdXBwb3J0CisJIC0gY2hvb3NlIE1PRFVMRShNKSBmb3IgQ1M0MjMyIHN1cHBvcnQKKworCSAtIGNob29zZSAiTiIgZm9yIGV2ZXJ5dGhpbmcgZWxzZSAodW5sZXNzIHlvdSBoYXZlIG90aGVyCisJICAgICAgc291bmRjYXJkcyB5b3Ugd2FudCBzdXBwb3J0IGZvcikKKworCisgICBtYWtlIGJvb3QKKyAgIC4KKyAgIC4KKyAgIC4KKyAgIDx3aGF0ZXZlciB5b3Ugbm9ybWFsbHkgZG8gZm9yIGEga2VybmVsIGluc3RhbGw+CisgICBtYWtlIG1vZHVsZXMKKyAgIC4KKyAgIC4KKyAgIC4KKyAgIG1ha2UgbW9kdWxlc19pbnN0YWxsCisKK0hlcmUncyBteSBhdXRvY29uZi5oIFNPVU5EIHNlY3Rpb246CisKKy8qCisgKiBTb3VuZAorICovCisjZGVmaW5lIENPTkZJR19TT1VORCAxCisjdW5kZWYgIENPTkZJR19TT1VORF9PU1MKKyNkZWZpbmUgQ09ORklHX1NPVU5EX09TU19NT0RVTEUgMQorI3VuZGVmICBDT05GSUdfU09VTkRfUEFTCisjdW5kZWYgIENPTkZJR19TT1VORF9TQgorI3VuZGVmICBDT05GSUdfU09VTkRfQURMSUIKKyN1bmRlZiAgQ09ORklHX1NPVU5EX0dVUworI3VuZGVmICBDT05GSUdfU09VTkRfTVBVNDAxCisjdW5kZWYgIENPTkZJR19TT1VORF9QU1MKKyN1bmRlZiAgQ09ORklHX1NPVU5EX01TUworI3VuZGVmICBDT05GSUdfU09VTkRfU1NDQVBFCisjdW5kZWYgIENPTkZJR19TT1VORF9UUklYCisjdW5kZWYgIENPTkZJR19TT1VORF9NQUQxNgorI3VuZGVmICBDT05GSUdfU09VTkRfV0FWRUZST05UCisjZGVmaW5lIENPTkZJR19TT1VORF9XQVZFRlJPTlRfTU9EVUxFIDEKKyN1bmRlZiAgQ09ORklHX1NPVU5EX0NTNDIzMgorI2RlZmluZSBDT05GSUdfU09VTkRfQ1M0MjMyX01PRFVMRSAxCisjdW5kZWYgIENPTkZJR19TT1VORF9NQVVJCisjdW5kZWYgIENPTkZJR19TT1VORF9TR0FMQVhZCisjdW5kZWYgIENPTkZJR19TT1VORF9PUEwzU0ExCisjdW5kZWYgIENPTkZJR19TT1VORF9TT0ZUT1NTCisjdW5kZWYgIENPTkZJR19TT1VORF9ZTTM4MTIKKyNkZWZpbmUgQ09ORklHX1NPVU5EX1lNMzgxMl9NT0RVTEUgMQorI3VuZGVmICBDT05GSUdfU09VTkRfVk1JREkKKyN1bmRlZiAgQ09ORklHX1NPVU5EX1VBUlQ2ODUwCisvKgorICogQWRkaXRpb25hbCBsb3cgbGV2ZWwgc291bmQgZHJpdmVycworICovCisjdW5kZWYgIENPTkZJR19MT1dMRVZFTF9TT1VORAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzYpIEhvdyBkbyBJIGNvbmZpZ3VyZSBteSBjYXJkID8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitZb3UgbmVlZCB0byBlZGl0IC9ldGMvbW9kcHJvYmUuY29uZi4gSGVyZSdzIG1pbmUgKGVkaXRlZCB0byBzaG93IHRoZQorcmVsZXZhbnQgZGV0YWlscyk6CisKKyAgIyBTb3VuZCBzeXN0ZW0KKyAgYWxpYXMgY2hhci1tYWpvci0xNC0qIHdhdmVmcm9udAorICBhbGlhcyBzeW50aDAgd2F2ZWZyb250CisgIGFsaWFzIG1peGVyMCBjczQyMzIKKyAgYWxpYXMgYXVkaW8wIGNzNDIzMgorICBpbnN0YWxsIHdhdmVmcm9udCAvc2Jpbi9tb2Rwcm9iZSBjczQyMzIgJiYgL3NiaW4vbW9kcHJvYmUgLWkgd2F2ZWZyb250ICYmIC9zYmluL21vZHByb2JlIG9wbDMKKyAgb3B0aW9ucyB3YXZlZnJvbnQgaW89MHgyMDAgaXJxPTkKKyAgb3B0aW9ucyBjczQyMzIgc3ludGhpcnE9OSBzeW50aGlvPTB4MjAwIGlvPTB4NTMwIGlycT01IGRtYT0xIGRtYTI9MAorICBvcHRpb25zIG9wbDMgaW89MHgzODgKKworVGhpbmdzIHRvIG5vdGU6IAorCisgICAgICAgdGhlIHdhdmVmcm9udCBvcHRpb25zICJpbyIgYW5kICJpcnEiICoqKk1VU1QqKiogbWF0Y2ggdGhlICJzeW50aGlvIgorICAgICAgIGFuZCAic3ludGhpcnEiIGNzNDIzMiBvcHRpb25zLgorCisgICAgICAgeW91IGNhbiBkbyB3aXRob3V0IHRoZSBvcGwzIG1vZHVsZSBpZiB5b3UgZG9uJ3QKKyAgICAgICB3YW50IHRvIHVzZSB0aGUgT1BML1szNF0gRk0gc3ludGggb24gdGhlIHNvdW5kY2FyZAorCisgICAgICAgdGhlIG9wbDMgaW8gcGFyYW1ldGVyIGlzIGNvbnZlbnRpb25hbGx5IG5vdCBhZGp1c3RhYmxlLgorICAgICAgIEluIHRoZW9yeSwgYW55IG5vdC1pbi11c2UgSU8gcG9ydCBhZGRyZXNzIHdvdWxkIHdvcmssIGJ1dAorICAgICAgIGp1c3QgdXNlIDB4Mzg4IGFuZCBzdGljayB3aXRoIHRoZSBjcm93ZC4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorNykgV2hhdCBhYm91dCBmaXJtd2FyZSA/CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1R1cnRsZSBCZWFjaCBoYXZlIG5vdCBnaXZlbiBtZSBwZXJtaXNzaW9uIHRvIGRpc3RyaWJ1dGUgdGhlaXIgZmlybXdhcmUKK2ZvciB0aGUgSUNTMjExNS4gSG93ZXZlciwgaWYgeW91IGhhdmUgYSBXYXZlRnJvbnQgY2FyZCwgdGhlbiB5b3UKK2FsbW9zdCBjZXJ0YWlubHkgaGF2ZSB0aGUgZmlybXdhcmUsIGFuZCBpZiBub3QsIGl0cyBmcmVlbHkgYXZhaWxhYmxlCitvbiB0aGVpciB3ZWJzaXRlLCBhdDoKKworICAgaHR0cDovL3d3dy50YmVhY2guY29tL3Ricy9kb3dubG9hZHMvc2NhcmRzZG93bi5odG0jdHJvcGV6cGx1cyAKKworVGhlIGZpbGUgaXMgY2FsbGVkIFdGT1MyMDAxLk1PVCAoZm9yIHRoZSBUcm9wZXorKS4KKworVGhpcyBkcml2ZXIsIGhvd2V2ZXIsIGRvZXNuJ3QgdXNlIHRoZSBwdXJlIGZpcm13YXJlIGFzIGRpc3RyaWJ1dGVkLAorYnV0IGluc3RlYWQgcmVsaWVzIG9uIGEgc29tZXdoYXQgcHJvY2Vzc2VkIGZvcm0gb2YgaXQuIFlvdSBjYW4KK2dlbmVyYXRlIHRoaXMgdmVyeSBlYXNpbHkuIEZvbGxvd2luZyBhbiBpZGVhIGZyb20gQW5kcmV3IFZlbGlhdGgncworUGlubmFjbGUgZHJpdmVyLCB0aGUgZm9sbG93aW5nIGZsZXggcHJvZ3JhbSB3aWxsIGdlbmVyYXRlIHRoZQorcHJvY2Vzc2VkIHZlcnNpb246CisKKy0tLS0gY3V0IGhlcmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJW9wdGlvbiBtYWluCislJQorXlNbMjhdLipcciQgcHJpbnRmICgiJWMlLipzIiwgeXlsZW5nLTEseXlsZW5nLTEseXl0ZXh0KTsKKzw8RU9GPj4geyBmcHV0YyAoJ1wwJywgc3Rkb3V0KTsgcmV0dXJuOyB9CitcbiB7fSAKKy4gIHt9CistLS0tIGN1dCBoZXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gdXNlIGl0LCBwdXQgdGhlIGFib3ZlIGluIGZpbGUgKHNheSwgd3MubCkgY29tcGlsZSBpdCBsaWtlIHRoaXM6CisKKyAgICAgIHNoZWxsPiBmbGV4IC1vd3MuYyB3cy5sCisgICAgICBzaGVsbD4gY2MgLW8gd3Mgd3MuYworICAgICAgCithbmQgdGhlbiB1c2UgaXQgbGlrZSB0aGlzOgorCisgICAgd3MgPCBteS1jb3B5LW9mLXRoZS1vc3dmLm1vdC1maWxlID4gL2V0Yy9zb3VuZC93YXZlZnJvbnQub3MKKworSWYgeW91IHB1dCBpdCBzb21ld2hlcmUgZWxzZSwgeW91J2xsIGFsd2F5cyBoYXZlIHRvIHVzZSB0aGUgd2Zfb3NwYXRoCittb2R1bGUgcGFyYW1ldGVyIChzZWUgYmVsb3cpIG9yIGFsdGVyIHRoZSBzb3VyY2UgY29kZS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorNykgSG93IGRvIEkgZ2V0IGl0IHdvcmtpbmcgPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitPcHRpb25hbGx5LCB5b3UgY2FuIHJlYm9vdCB3aXRoIHRoZSAibmV3IiBrZXJuZWwgKGV2ZW4gdGhvdWdoIHRoZSBvbmx5CitjaGFuZ2VzIGhhdmUgcmVhbGx5IGJlZW4gbWFkZSB0byBhIG1vZHVsZSkuCisKK1RoZW4sIGFzIHJvb3QgZG86CisKKyAgICAgbW9kcHJvYmUgd2F2ZWZyb250CisKK1lvdSBzaG91bGQgZ2V0IHNvbWV0aGluZyBsaWtlIHRoaXMgaW4gL3Zhci9sb2cvbWVzc2FnZXM6CisKKyAgICBXYXZlRnJvbnQ6IGZpcm13YXJlIDEuMjAgYWxyZWFkeSBsb2FkZWQuCisKK29yIAorCisgICAgV2F2ZUZyb250OiBubyByZXNwb25zZSB0byBmaXJtd2FyZSBwcm9iZSwgYXNzdW1lIHJhdy4KKwordGhlbjoKKworICAgIFdhdmVGcm9udDogd2FpdGluZyBmb3IgbWVtb3J5IGNvbmZpZ3VyYXRpb24gLi4uCisgICAgV2F2ZUZyb250OiBoYXJkd2FyZSB2ZXJzaW9uIDEuNjQKKyAgICBXYXZlRnJvbnQ6IGF2YWlsYWJsZSBEUkFNIDgxOTFrCisgICAgV2F2ZUZyb250OiAzMzIgc2FtcGxlcyB1c2VkICgyNjYgcmVhbCwgMTMgYWxpYXNlcywgNTMgbXVsdGkpLCAxODAgZW1wdHkKKyAgICBXYXZlRnJvbnQ6IDEyOCBwcm9ncmFtcyBzbG90cyBpbiB1c2UKKyAgICBXYXZlRnJvbnQ6IDI1NiBwYXRjaCBzbG90cyBmaWxsZWQsIDE0MiBpbiB1c2UKKworVGhlIHdob2xlIHByb2Nlc3MgdGFrZXMgYWJvdXQgMTYgc2Vjb25kcywgdGhlIGxvbmdlc3Qgd2FpdHMgYmVpbmcKK2FmdGVyIHJlcG9ydGluZyB0aGUgaGFyZHdhcmUgdmVyc2lvbiAoZHVyaW5nIHRoZSBmaXJtd2FyZSBkb3dubG9hZCksCithbmQgYWZ0ZXIgcmVwb3J0aW5nIHByb2dyYW0gc3RhdHVzIChkdXJpbmcgcGF0Y2ggc3RhdHVzIGlucXVpcnkpLiAgSXRzCitzaG9ydGVyIChhYm91dCAxMCBzZWNzKSBpZiB0aGUgZmlybXdhcmUgaXMgYWxyZWFkeSBsb2FkZWQgKGkuZS4gb25seQord2FybSByZWJvb3RzIHNpbmNlIHRoZSBsYXN0IGZpcm13YXJlIGxvYWQpLgorCitUaGUgImF2YWlsYWJsZSBEUkFNIiBsaW5lIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gaG93IG11Y2ggYWRkZWQgUkFNCit5b3VyIGNhcmQgaGFzLiBNaW5lIGhhcyA4TUIuCisKK1RvIGNoZWNrIGJhc2ljYWxseSBmdW5jdGlvbmFsaXR5LCB1c2UgcGxheSgxKSBvciBzcGxheSgxKSB0byBzZW5kIGEKKy5XQVYgb3Igb3RoZXIgYXVkaW8gZmlsZSB0aHJvdWdoIHRoZSBhdWRpbyBwb3J0aW9uLiBUaGVuIHVzZSBwbGF5bWlkaQordG8gcGxheSBhIEdlbmVyYWwgTUlESSBmaWxlLiBUcnkgdGhlICItRCAwIiB0byBoZWFyIHRoZQorZGlmZmVyZW5jZSBiZXR3ZWVuIHNlbmRpbmcgTUlESSB0byB0aGUgV2F2ZUZyb250IGFuZCB1c2luZyB0aGUgT1BMLzMsCit3aGljaCBpcyB0aGUgZGVmYXVsdCAoSSB0aGluayAuLi4pLiBJZiB5b3UgaGF2ZSBhbiBleHRlcm5hbCBzeW50aChzKQoraG9va2VkIHRvIHRoZSBzb3VuZGNhcmQsIHlvdSBjYW4gdXNlICItZSIgdG8gcm91dGUgdG8gdGhlCitleHRlcm5hbCBzeW50aChzKSAoaW4gdGhlb3J5LCAtRCAxIHNob3VsZCB3b3JrIGFzIHdlbGwsIGJ1dCBJIHRoaW5rCit0aGVyZSBpcyBhIGJ1ZyBpbiBwbGF5bWlkaSB3aGljaCBwcmV2ZW50cyB0aGlzIGZyb20gZG9pbmcgd2hhdCBpdAorc2hvdWxkKS4gCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzgpIFdoYXQgYXJlIHRoZSBtb2R1bGUgcGFyYW1ldGVycyA/CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0l0cyBiZXN0IHRvIHJlYWQgd2F2ZWZyb250LmMgZm9yIHRoaXMsIGJ1dCBoZXJlIGlzIGEgc3VtbWFyeToKKworaW50ZWdlcnM6IAorCSAgd2ZfcmF3ICAtIGlmIHNldCwgaWdub3JlIGFwcGFyZW50IHByZXNlbmNlIG9mIGZpcm13YXJlCisJCSAgICBsb2FkZWQgb250byB0aGUgSUNTMjExNSwgcmVzZXQgdGhlIHdob2xlCisJCSAgICBib2FyZCwgYW5kIGluaXRpYWxpemUgaXQgZnJvbSBzY3JhdGNoLiAoZGVmYXVsdCA9IDApCisKKyAgICAgICAgICBmeF9yYXcgIC0gaWYgc2V0LCBhbHdheXMgaW5pdGlhbGl6ZSB0aGUgWVNTMjI1IHByb2Nlc3NvcgorCQkgICAgb24gdGhlIFRyb3BleiBwbHVzLiAoZGVmYXVsdCA9IDEpCisKKyAgICAgICAgICA8IFRoZSBuZXh0IDQgYXJlIGJhc2ljYWxseSBmb3Iga2VybmVsIGhhY2tlcnMgdG8gYWxsb3cKKwkgICAgdHdlYWtpbmcgdGhlIGRyaXZlciBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gPgkJICAgIAorCisgICAgICAgICAgd2FpdF91c2VjcyAgICAgICAgLSAgbG9vcCB0aW1lciB1c2VkIHdoZW4gd2FpdGluZyBmb3IKKwkJCSAgICAgICBzdGF0dXMgY29uZGl0aW9ucyBvbiB0aGUgYm9hcmQuIAorCQkJICAgICAgIFRoZSBkZWZhdWx0IGlzIDE1MC4KKworICAgICAgICAgIGRlYnVnX2RlZmF1bHQgICAgLSBkZWJ1Z2dpbmcgZmxhZ3MuIFNlZSBzb3VuZC93YXZlZnJvbnQuaAorCQkJICAgICBmb3IgV0ZfREVCVUdfKiB2YWx1ZXMuIERlZmF1bHQgaXMgemVyby4KKwkJCSAgICAgU2V0dGluZyB0aGlzIGFsbG93cyB5b3UgdG8gZGVidWcgdGhlCisJCQkgICAgIGRyaXZlciBkdXJpbmcgbW9kdWxlIGluc3RhbGxhdGlvbi4KK3N0cmluZ3M6CisJICBvc3BhdGggLSBwYXRoIHRvIGdldCB0byB0aGUgcHJlLXByb2Nlc3NlZCBPUyBmaXJtd2FyZS4KKwkJICAgIChkZWZhdWx0OiAvZXRjL3NvdW5kL3dhdmVmcm9udC5vcykKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorOSkgV2hvIHNob3VsZCBJIGNvbnRhY3QgaWYgSSBoYXZlIHByb2JsZW1zPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitKdXN0IG1lOiBQYXVsIEJhcnRvbi1EYXZpcyA8cGJkQG9wLm5ldD4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9idGF1ZGlvIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvYnRhdWRpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTY5M2U2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvYnRhdWRpbwpAQCAtMCwwICsxLDkyIEBACisKK0ludHJvCis9PT09PQorCitwZW9wbGUgc3RhcnQgYnVnZ2luZyBtZSBhYm91dCB0aGlzIHdpdGggcXVlc3Rpb25zLCBsb29rcyBsaWtlIEkKK3Nob3VsZCB3cml0ZSB1cCBzb21lIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgYmVhc3QuICBUaGF0IHdheSBJCitkb24ndCBoYXZlIHRvIGFuc3dlciB0aGF0IG11Y2ggbWFpbHMgSSBob3BlLiAgWWVzLCBJJ20gbGF6eS4uLgorCisKK1lvdSBtaWdodCBoYXZlIG5vdGljZWQgdGhhdCB0aGUgYnQ4NzggZ3JhYmJlciBjYXJkcyBoYXZlIGFjdHVhbGx5CitfdHdvXyBQQ0kgZnVuY3Rpb25zOgorCiskIGxzcGNpCitbIC4uLiBdCiswMDowYS4wIE11bHRpbWVkaWEgdmlkZW8gY29udHJvbGxlcjogQnJvb2t0cmVlIENvcnBvcmF0aW9uIEJ0ODc4IChyZXYgMDIpCiswMDowYS4xIE11bHRpbWVkaWEgY29udHJvbGxlcjogQnJvb2t0cmVlIENvcnBvcmF0aW9uIEJ0ODc4IChyZXYgMDIpCitbIC4uLiBdCisKK1RoZSBmaXJzdCBkb2VzIHZpZGVvLCBpdCBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHRvIHRoZSBidDg0OC4gIFRoZSBzZWNvbmQKK2RvZXMgYXVkaW8uICBidGF1ZGlvIGlzIGEgZHJpdmVyIGZvciB0aGUgc2Vjb25kIGZ1bmN0aW9uLiAgSXQncyBhIHNvdW5kCitkcml2ZXIgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHJlY29yZGluZyBzb3VuZCAoYW5kIF9vbmx5XyByZWNvcmRpbmcsIG5vCitwbGF5YmFjaykuICBBcyBtb3N0IFRWIGNhcmRzIGNvbWUgd2l0aCBhIHNob3J0IGNhYmxlIHdoaWNoIGNhbiBiZSBwbHVnZ2VkCitpbnRvIHlvdXIgc291bmQgY2FyZCdzIGxpbmUtaW4geW91IHByb2JhYmx5IGRvbid0IG5lZWQgdGhpcyBkcml2ZXIgaWYgYWxsCit5b3Ugd2FudCB0byBkbyBpcyBqdXN0IHdhdGNoaW5nIFRWLi4uCisKKworRHJpdmVyIFN0YXR1cworPT09PT09PT09PT09PQorCitTdGlsbCBzb21ld2hhdCBleHBlcmltZW50YWwuICBUaGUgZHJpdmVyIHNob3VsZCB3b3JrIHN0YWJsZSwgaS5lLiBpdAorc2hvdWxkJ250IGNyYXNoIHlvdXIgYm94LiAgSXQgbWlnaHQgbm90IHdvcmsgYXMgZXhwZWN0ZWQsIGhhdmUgYnVncywKK25vdCBiZWluZyBmdWxseSBPU1MgQVBJIGNvbXBpbGFudCwgLi4uCisKK0xhdGVzdCB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlIGZyb20gaHR0cDovL2J5dGVzZXgub3JnL2J0dHYvLCB0aGUKK2RyaXZlciBpcyBpbiB0aGUgYnR0diB0YXJiYWxsLiAgS2VybmVsIHBhdGNoZXMgbWlnaHQgYmUgYXZhaWxhYmxlIHRvbywKK2hhdmUgYSBsb29rIGF0IGh0dHA6Ly9ieXRlc2V4Lm9yZy9idHR2L2xpc3RpbmcuaHRtbC4KKworVGhlIGNoaXAga25vd3MgdHdvIGRpZmZlcmVudCBtb2Rlcy4gIGJ0YXVkaW8gcmVnaXN0ZXJzIHR3byBkc3AKK2RldmljZXMsIG9uZSBmb3IgZWFjaCBtb2RlLiAgVGhleSBjYW4gbm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZS4KKworCitEaWdpdGFsIGF1ZGlvIG1vZGUKKz09PT09PT09PT09PT09PT09PQorCitUaGUgY2hpcCBnaXZlcyB5b3UgMTYgYml0IHN0ZXJlbyBzb3VuZC4gIFRoZSBzYW1wbGUgcmF0ZSBkZXBlbmRzIG9uCit0aGUgZXh0ZXJuYWwgc291cmNlIHdoaWNoIGZlZWRzIHRoZSBidDg3OCB3aXRoIGRpZ2l0YWwgc291bmQgdmlhIEkyUworaW50ZXJmYWNlLiAgVGhlcmUgaXMgYSBpbnNtb2Qgb3B0aW9uIChyYXRlKSB0byB0ZWxsIHRoZSBkcml2ZXIgd2hpY2gKK3NhbXBsZSByYXRlIHRoZSBoYXJkd2FyZSB1c2VzICgzMjAwMCBpcyB0aGUgZGVmYXVsdCkuCisKK09uZSBwb3NzaWJsZSBzb3VyY2UgZm9yIGRpZ2l0YWwgc291bmQgaXMgdGhlIG1zcDM0eHggYXVkaW8gcHJvY2Vzc29yCitjaGlwIHdoaWNoIHByb3ZpZGVzIGRpZ2l0YWwgc291bmQgdmlhIEkyUyB3aXRoIDMyIGtIeiBzYW1wbGUgcmF0ZS4gIE15CitIYXVwcGF1Z2UgYm9hcmQgd29ya3MgdGhpcyB3YXkuCisKK1RoZSBPc3ByZXktMjAwIHJlcG9ydGx5IGdpdmVzIHlvdSBkaWdpdGFsIHNvdW5kIHdpdGggNDQxMDAgSHogc2FtcGxlCityYXRlLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IHlvdSBnZXQgbm8gc291bmQgYXQgYWxsLgorCisKK2FuYWxvZyBtb2RlIChBL0QpCis9PT09PT09PT09PT09PT09PQorCitZb3UgY2FuIHRlbGwgdGhlIGRyaXZlciB0byB1c2UgdGhpcyBtb2RlIHdpdGggdGhlIGluc21vZCBvcHRpb24gImFuYWxvZz0xIi4KK1RoZSBjaGlwIGhhcyB0aHJlZSBhbmFsb2cgaW5wdXRzLiAgQ29uc2VxdWVudGx5IHlvdSdsbCBnZXQgYSBtaXhlciBkZXZpY2UKK3RvIGNvbnRyb2wgdGhlc2UuCisKK1RoZSBhbmFsb2cgbW9kZSBzdXBwb3J0cyBtb25vIG9ubHkuICBCb3RoIDggKyAxNiBiaXQuICBCb3RoIGFyZSBfc2lnbmVkXworaW50LCB3aGljaCBpcyB1bmNvbW1vbiBmb3IgdGhlIDggYml0IGNhc2UuICBTYW1wbGUgcmF0ZSByYW5nZSBpcyAxMTkga0h6Cit0byA0NDgga0h6LiAgWWVzLCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpcyBjb3JyZWN0LiAgVGhlIGRyaXZlciBzdXBwb3J0cworZG93bnNhbXBsaW5nIGJ5IHBvd2VycyBvZiB0d28sIHNvIHlvdSBjYW4gYXNrIGZvciBtb3JlIHVzdWFsIHNhbXBsZSByYXRlcworbGlrZSA0NCBrSHogdG9vLgorCitXaXRoIG15IEhhdXBwYXVnZSBJIGdldCBub2lzeSBzb3VuZCBvbiB0aGUgc2Vjb25kIGlucHV0IChtYXBwZWQgdG8gbGluZTIKK2J5IHRoZSBtaXhlciBkZXZpY2UpLiAgT3RoZXJzIGdldCBhIHVzZWFibGUgc2lnbmFsIG9uIGxpbmUxLgorCisKK3NvbWUgZXhhbXBsZXMKKz09PT09PT09PT09PT0KKworKiByZWFkIGF1ZGlvIGRhdGEgZnJvbSBidGF1ZGlvIChkc3AyKSwgc2VuZCB0byBlczE3MzAgKGRzcCxkc3AxKToKKyAgJCBzb3ggLXcgLXIgMzIwMDAgLXQgb3NzZHNwIC9kZXYvZHNwMiAtdCBvc3Nkc3AgL2Rldi9kc3AKKworKiByZWFkIGF1ZGlvIGRhdGEgZnJvbSBidGF1ZGlvLCBzZW5kIHRvIGVzb3VuZCBkYWVtb24gKHdoaWNoIG1pZ2h0IGJlCisgIHJ1bm5pbmcgb24gYW5vdGhlciBob3N0KToKKyAgJCBzb3ggLWMgMiAtdyAtciAzMjAwMCAtdCBvc3Nkc3AgL2Rldi9kc3AyIC10IHN3IC0gfCBlc2RjYXQgLXIgMzIwMDAKKyAgJCBzb3ggLWMgMSAtdyAtciAzMjAwMCAtdCBvc3Nkc3AgL2Rldi9kc3AyIC10IHN3IC0gfCBlc2RjYXQgLW0gLXIgMzIwMDAKKworCitIYXZlIGZ1biwKKworICBHZXJkCisKKy0tIAorR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvY3M0Nnh4IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvY3M0Nnh4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZDZjZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9jczQ2eHgKQEAgLTAsMCArMSwxMzggQEAKKworRG9jdW1lbnRhdGlvbiBmb3IgdGhlIENpcnJ1cyBMb2dpYy9DcnlzdGFsIFNvdW5kRnVzaW9uIGNzNDZ4eC9jczQyODAgYXVkaW8gCitjb250cm9sbGVyIGNoaXBzICgyMDAxLzA1LzExKQorCitUaGUgY3M0Nnh4IGF1ZGlvIGRyaXZlciBzdXBwb3J0cyB0aGUgRFNQIGxpbmUgb2YgQ2lycnVzIGNvbnRyb2xsZXJzLiAKK1NwZWNpZmljYWxseSwgdGhlIGNzNDYxMCwgY3M0NjEyLCBjczQ2MTQsIGNzNDYyMiwgY3M0NjI0LCBjczQ2MzAgYW5kIHRoZSBjczQyODAKK3Byb2R1Y3RzLiAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgZ2VuZXJpYyBhYzk3X2NvZGVjIGRyaXZlciBmb3IgQUM5NyBjb2RlYworc3VwcG9ydC4gIAorCisKK0ZlYXR1cmVzOgorCitGdWxsIER1cGxleCBQbGF5YmFjay9DYXB0dXJlIHN1cHBvcnRlZCBmcm9tIDhrLTQ4ay4KKzE2Qml0IFNpZ25lZCBMRSAmIDhCaXQgVW5zaWduZWQsIHdpdGggTW9ubyBvciBTdGVyZW8gc3VwcG9ydGVkLgorCitBUE0vUE0gLSAyLjIueCBQTSBpcyBlbmFibGVkIGFuZCBmdW5jdGlvbmFsLiBBUE0gY2FuIGFsc28KK2JlIGVuYWJsZWQgZm9yIDIuNC54IGJ5IG1vZGlmeWluZyB0aGUgQ1M0NlhYX0FDUElfU1VQUE9SVCBtYWNybworZGVmaW5pdGlvbi4KKworRE1BIHBsYXliYWNrIGJ1ZmZlciBzaXplIGlzIGNvbmZpZ3VyYWJsZSBmcm9tIDE2ayAoZGVmYXVsdG9yZGVyPTIpIHVwIHRvIDJNZWcgCisoZGVmYXVsdG9yZGVyPTExKS4gIERNQSBjYXB0dXJlIGJ1ZmZlciBzaXplIGlzIGZpeGVkIGF0IGEgc2luZ2xlIDRrIHBhZ2UgYXMKK3R3byAyayBmcmFnbWVudHMuCisKK01NQVAgc2VlbXMgdG8gd29yayB3ZWxsIHdpdGggUXVha2VJSUksIGFuZCB0ZXN0IFhNTVMgcGx1Z2luLgorCitNeXRoMiB3b3JrcywgYnV0IHRoZSBwb2xsaW5nIGxvZ2ljIGlzIG5vdCBmdWxseSBjb3JyZWN0LCBidXQgaXMgZnVuY3Rpb25hbC4KKworVGhlIDIuNC40LWFjNiBnYW1lcG9ydCBjb2RlIGluIHRoZSBjczQ2MXggam95c3RpY2sgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCAKK3dpdGggYSBNaWNyb3NvZnQgU2lkZXdpbmRlciBqb3lzdGljayAoY3M0NjF4Lm8gYW5kIHNpZGV3aW5kZXIubykuICBUaGlzIAorYXVkaW8gZHJpdmVyIG11c3QgYmUgbG9hZGVkIHByaW9yIHRvIHRoZSBqb3lzdGljayBkcml2ZXIgdG8gZW5hYmxlIHRoZQorRFNQIHRhc2sgaW1hZ2Ugc3VwcG9ydGluZyB0aGUgam95c3RpY2sgZGV2aWNlLgorCisKK0xpbWl0YXRpb25zOgorCitTUERJRiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KKworUHJpbWFyeSBjb2RlYyBzdXBwb3J0IG9ubHkuICBObyBzZWNvbmRhcnkgY29kZWMgc3VwcG9ydCBpcyBpbXBsZW1lbnRlZC4KKworCisKK05PVEVTOgorCitIZXJjdWxlcyBHYW1lIFRoZWF0cmUgWFAgLSB0aGUgRUdQSU8yIHBpbiBjb250cm9scyB0aGUgZXh0ZXJuYWwgQW1wLAorYW5kIGhhcyBiZWVuIHRlc3RlZC4KK01vZHVsZSBwYXJhbWV0ZXIgaGVyY3VsZXNfZWdwaW9fZGlzYWJsZSBzZXQgdG8gMSwgd2lsbCBmb3JjZSBhIDAgdG8gRUdQSU9EUgordG8gZGlzYWJsZSB0aGUgZXh0ZXJuYWwgYW1wbGlmaWVyLgorCitWVEIgU2FudGEgQ3J1eiAtIHRoZSBHUElPNy9HUElPOCBvbiB0aGUgU2Vjb25kYXJ5IENvZGVjIGNvbnRyb2wKK3RoZSBleHRlcm5hbCBhbXBsaWZpZXIgZm9yIHRoZSAiYmFjayIgc3BlYWtlcnMsIHNpbmNlIHdlIGRvIG5vdAorc3VwcG9ydCB0aGUgc2Vjb25kYXJ5IGNvZGVjIHRoZW4gdGhpcyBleHRlcm5hbCBhbXAgaXMgbm90Cit0dXJuZWQgb24uICBUaGUgcHJpbWFyeSBjb2RlYyBleHRlcm5hbCBhbXBsaWZpZXIgaXMgc3VwcG9ydGVkIGJ1dAorbm90ZSB0aGF0IHRoZSBBQzk3IEVBUEQgYml0IGlzIGludmVydGVkIGxvZ2ljIChhbXBfdm95ZXRyYSgpKS4KKworRE1BIGJ1ZmZlciBzaXplIC0gdGhlcmUgYXJlIGlzc3VlcyB3aXRoIG1hbnkgb2YgdGhlIExpbnV4IGFwcGxpY2F0aW9ucworY29uY2VybmluZyB0aGUgb3B0aW1hbCBidWZmZXIgc2l6ZS4gIFNldmVyYWwgYXBwbGljYXRpb25zIHJlcXVlc3QgYSAKK2NlcnRhaW4gZnJhZ21lbnQgc2l6ZSBhbmQgbnVtYmVyIGFuZCB0aGVuIGRvIG5vdCB2ZXJpZnkgdGhhdCB0aGUgZHJpdmVyCitoYXMgdGhlIGFiaWxpdHkgdG8gc3VwcG9ydCB0aGUgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24uICAKK1NORENUTF9EU1BfU0VURlJBR01FTlQgaW9jdGwgaXMgdXNlZCB0byByZXF1ZXN0IGEgZnJhZ21lbnQgc2l6ZSBhbmQKK251bWJlciBvZiBmcmFnbWVudHMuICBTb21lIGFwcGxpY2F0aW9ucyBleGl0IGlmIGFuIGVycm9yIGlzIHJldHVybmVkCitvbiB0aGlzIHBhcnRpY3VsYXIgaW9jdGwuIFRoZXJlZm9yZSwgaW4gYWxpZ25tZW50IHdpdGggdGhlIG90aGVyIE9TUyBhdWRpbyAKK2RyaXZlcnMsIG5vIGVycm9yIGlzIHJldHVybmVkIHdoZW4gYSBTRVRGUkFHcyBJT0NUTCBpcyByZWNlaXZlZCwgYnV0IHRoZSAKK3ZhbHVlcyBwYXNzZWQgZnJvbSB0aGUgYXBwIGFyZSBub3QgdXNlZCBpbiBhbnkgYnVmZmVyIGNhbGN1bGF0aW9uIAorKG9zc2ZyYWdzaGlmdC9vc3NtYXhmcmFncyBhcmUgbm90IHVzZWQpLgorVXNlIHRoZSAiZGVmYXVsdG9yZGVyPU4iIG1vZHVsZSBwYXJhbWV0ZXIgdG8gY2hhbmdlIHRoZSBidWZmZXIgc2l6ZSBpZgoreW91IGhhdmUgYW4gYXBwbGljYXRpb24gdGhhdCByZXF1aXJlcyBhIHNwZWNpZmljIG51bWJlciBvZiBmcmFnbWVudHMKK29yIGEgc3BlY2lmaWMgYnVmZmVyIHNpemUgKHNlZSBiZWxvdykuCisKK0RlYnVnIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBhbiBpb2N0bCBkZWJ1ZyBpbnRlcmZhY2UgdG8gYWxsb3cgcnVudGltZSBtb2RpZmljYXRpb24gb2YgdGhlIAorZGVidWcgcHJpbnQgbGV2ZWxzLiAgVGhpcyBkZWJ1ZyBpbnRlcmZhY2UgY29kZSBjYW4gYmUgZGlzYWJsZWQgZnJvbSB0aGUgCitjb21waWxhdGlvbiBwcm9jZXNzIHdpdGggY29tbWVudGluZyB0aGUgZm9sbG93aW5nIGRlZmluZToKKyNkZWZpbmUgQ1NERUJVR19JTlRFUkZBQ0UgMQorVGhlcmUgaXMgYWxzbyBhIGRlYnVnIHByaW50IG1ldGhvZG9sZ3kgdG8gc2VsZWN0IHByaW50ZiBzdGF0ZW1lbnRzIGZyb20KK2RpZmZlcmVudCBhcmVhcyBvZiB0aGUgZHJpdmVyLiAgQSBkZWJ1ZyBwcmludCBsZXZlbCBpcyBhbHNvIHVzZWQgdG8gYWxsb3cKK2FkZGl0aW9uYWwgcHJpbnRmcyB0byBiZSBhY3RpdmUuICBDb21tZW50IG91dCB0aGUgZm9sbG93aW5nIGxpbmUgaW4gdGhlCitkcml2ZXIgdG8gZGlzYWJsZSBjb21waWxhdGlvbiBvZiB0aGUgQ1NfREJHT1VUIHByaW50IHN0YXRlbWVudHM6CisjZGVmaW5lIENTREVCVUcgMQorIAorUGxlYXNlIHNlZSB0aGUgZGVmaW5pdGlvbnMgZm9yIGNzX2RlYnVnbGV2ZWwgYW5kIGNzX2RlYnVnbWFzayBmb3IgYWRkaXRpb25hbAoraW5mb3JtYXRpb24gb24gdGhlIGRlYnVnIGxldmVscyBhbmQgc2VjdGlvbnMuCisKK1RoZXJlIGlzIGFsc28gYSBjc2RiZyBleGVjdXRhYmxlIHRvIGFsbG93IHJ1bnRpbWUgbWFuaXB1bGF0aW9uIG9mIHRoZXNlIAorcGFyYW1ldGVycy4gIGZvciBhIGNvcHkgZW1haWw6IHR3b2xsZXJAY3J5c3RhbC5jaXJydXMuY29tCisKKworCitNT0RVTEVfUEFSTVMgZGVmaW5pdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTU9EVUxFX1BBUk0oZGVmYXVsdG9yZGVyLCAiaSIpOworZGVmYXVsdG9yZGVyPU4KK3doZXJlIE4gaXMgYSB2YWx1ZSBmcm9tIDEgdG8gMTIKK1RoZSBidWZmZXIgb3JkZXIgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgZG1hIGJ1ZmZlciBmb3IgdGhlIGRyaXZlci4KK3VuZGVyIExpbnV4LCBhIHNtYWxsZXIgYnVmZmVyIGFsbG93cyBtb3JlIHJlc3BvbnNpdmVuZXNzIGZyb20gbWFueSBvZiB0aGUgCithcHBsaWNhdGlvbnMgKGUuZy4gZ2FtZXMpLiAgQSBsYXJnZXIgYnVmZmVyIGFsbG93cyBzb21lIG9mIHRoZSBhcHBzIChlc291bmQpIAordG8gbm90IHVuZGVycnVuIHRoZSBkbWEgYnVmZmVyIGFzIGVhc2lseS4gIEFzIGRlZmF1bHQsIHVzZSAzMmsgKG9yZGVyPTMpCityYXRoZXIgdGhhbiA2NGsgYXMgc29tZSBvZiB0aGUgZ2FtZXMgd29yayBtb3JlIHJlc3BvbnNpdmVseS4KKygyXk4pICogUEFHRV9TSVpFID0gYWxsb2NhdGVkIGJ1ZmZlciBzaXplCisKK01PRFVMRV9QQVJNKGNzX2RlYnVnbGV2ZWwsICJpIik7CitNT0RVTEVfUEFSTShjc19kZWJ1Z21hc2ssICJpIik7Citjc19kZWJ1Z2xldmVsPU4KK2NzX2RlYnVnbWFzaz0weE1NTU1NTU1NCit3aGVyZSBOIGlzIGEgdmFsdWUgZnJvbSAwIChubyBkZWJ1ZyBwcmludGZzKSwgdG8gOSAobWF4aW11bSkKKzB4TU1NTU1NTU0gaXMgYSBkZWJ1ZyBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gdGhlIENTX3h4eCBiaXRzIChzZWUgZHJpdmVyIHNvdXJjZSkuCisKK01PRFVMRV9QQVJNKGhlcmN1bGVzX2VncGlvX2Rpc2FibGUsICJpIik7CitoZXJjdWxlc19lZ3Bpb19kaXNhYmxlPU4KK3doZXJlIE4gaXMgYSAwIChlbmFibGUgZWdwaW8pLCBvciBhIDEgKGRpc2FibGUgZWdwaW8gc3VwcG9ydCkKKworTU9EVUxFX1BBUk0oaW5pdGRlbGF5LCAiaSIpOworaW5pdGRlbGF5PU4KK1RoaXMgdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG1pbGxlc2NvbmQgZGVsYXkgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbgorY29kZSBwcmlvciB0byBwb3dlcmluZyB1cCB0aGUgUExMLiAgT24gbGFwdG9wcyB0aGlzIHZhbHVlIGNhbiBiZSB1c2VkIHRvCithc3Npc3Qgd2l0aCBlcnJvcnMgb24gcmVzdW1lLCBtb3N0bHkgd2l0aCBJQk0gbGFwdG9wcy4gIEJhc2ljYWxseSwgaWYgdGhlIAorc3lzdGVtIGlzIGJvb3RlZCB1bmRlciBiYXR0ZXJ5IHBvd2VyIHRoZW4gdGhlIG1kZWxheSgpL3VkZWxheSgpIGZ1bmN0aW9ucyBmYWlsIHRvIAorcHJvcGVybHkgZGVsYXkgdGhlIHJlcXVpcmVkIHRpbWUuICBBbHNvLCBpZiB0aGUgc3lzdGVtIGlzIGJvb3RlZCB1bmRlciBBQyBwb3dlcgorYW5kIHRoZW4gdGhlIHBvd2VyIHJlbW92ZWQsIHRoZSBtZGVsYXkoKS91ZGVsYXkoKSBmdW5jdGlvbnMgd2lsbCBub3QgZGVsYXkgcHJvcGVybHkuCisgCitNT0RVTEVfUEFSTShwb3dlcmRvd24sICJpIik7Citwb3dlcmRvd249Tgord2hlcmUgTiBpcyAwIChkaXNhYmxlIGFueSBwb3dlcmRvd24gb2YgdGhlIGludGVybmFsIGJsb2Nrcykgb3IgMSAoZW5hYmxlIHBvd2VyZG93bikKKworCitNT0RVTEVfUEFSTShleHRlcm5hbF9hbXAsICJpIik7CitleHRlcm5hbF9hbXA9MQoraWYgTiBpcyBzZXQgdG8gMSwgdGhlbiBmb3JjZSBlbmFibGluZyB0aGUgRUFQRCBzdXBwb3J0IGluIHRoZSBwcmltYXJ5IEFDOTcgY29kZWMuCitvdmVycmlkZSB0aGUgZGV0ZWN0aW9uIGxvZ2ljIGFuZCBmb3JjZSB0aGUgZXh0ZXJuYWwgYW1wIGJpdCBpbiB0aGUgQUM5NyAweDI2IHJlZ2lzdGVyCit0byBiZSByZXNldCAoMCkuICBFQVBEIHNob3VsZCBiZSAwIGZvciBwb3dlcnVwLCBhbmQgMSBmb3IgcG93ZXJkb3duLiAgVGhlIFZUQiBTYW50YSBDcnV6CitjYXJkIGhhcyBpbnZlcnRlZCBsb2dpYywgc28gdGhlcmUgaXMgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGVzZSBjYXJkcy4KKworTU9EVUxFX1BBUk0odGhpbmtwYWQsICJpIik7Cit0aGlua3BhZD0xCitpZiBOIGlzIHNldCB0byAxLCB0aGVuIGZvcmNlIGVuYWJsaW5nIHRoZSBjbGtydW4gZnVuY3Rpb25hbGl0eS4KK0N1cnJlbnRseSwgd2hlbiB0aGUgcGFydCBpcyBiZWluZyB1c2VkLCB0aGVuIGNsa3J1biBpcyBkaXNhYmxlZCBmb3IgdGhlIGVudGlyZSBzeXN0ZW0sCitidXQgcmUtZW5hYmxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgcmVsZWFzZWQgb3IgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcgb3BlbiBjb3VudC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvZXMxMzcwIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvZXMxMzcwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMzhiMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9lczEzNzAKQEAgLTAsMCArMSw3MCBAQAorL3Byb2Mvc291bmQsIC9kZXYvc25kc3RhdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvcHJvYy9zb3VuZCBhbmQgL2Rldi9zbmRzdGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlCitkcml2ZXIuIFRvIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGRyaXZlciBzdWNjZWVkZWQgbG9hZGluZywKK2NoZWNrIHRoZSBrZXJuZWwgbG9nIChkbWVzZykuCisKKworQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzLgorQUxhdyBpcyB0aGUgZGVmYXVsdCBtb2RlIHdoZW4gb3BlbmluZyBhIHNvdW5kIGRldmljZQordXNpbmcgT1NTL0ZyZWUuIFRoZSByZWFzb24gZm9yIHRoZSBsYWNrIG9mIHN1cHBvcnQgaXMKK3RoYXQgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UgZm9ybWF0cywgYW5kIGFkZGluZworY29udmVyc2lvbiByb3V0aW5lcyB0byB0aGUga2VybmVsIHdvdWxkIGxlYWQgdG8gdmVyeSB1Z2x5Citjb2RlIGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgbW1hcCBpbnRlcmZhY2UgdG8gdGhlIGRyaXZlci4KK0FuZCBzaW5jZSB4cXVha2UgdXNlcyBtbWFwLCBtbWFwIGlzIGNvbnNpZGVyZWQgaW1wb3J0YW50IDotKQorYW5kIG5vIHNhbmUgYXBwbGljYXRpb24gdXNlcyBBTGF3L3VMYXcgdGhlc2UgZGF5cyBhbnl3YXkuCitJbiBzaG9ydCwgcGxheWluZyBhIFN1biAuYXUgZmlsZSBhcyBmb2xsb3dzOgorCitjYXQgbXlfZmlsZS5hdSA+IC9kZXYvZHNwCisKK2RvZXMgbm90IHdvcmsuIEluc3RlYWQsIHlvdSBtYXkgdXNlIHRoZSBwbGF5IHNjcmlwdCBmcm9tCitDaHJpcyBCYWd3ZWxsJ3Mgc294LTEyLjE0IHBhY2thZ2UgKGF2YWlsYWJsZSBmcm9tIHRoZSBVUkwKK2JlbG93KSB0byBwbGF5IG1hbnkgZGlmZmVyZW50IGF1ZGlvIGZpbGUgZm9ybWF0cy4KK1RoZSBzY3JpcHQgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhdWRpbyBmb3JtYXQKK2FuZCBkb2VzIGRvIGF1ZGlvIGNvbnZlcnNpb25zIGlmIG5lY2Vzc2FyeS4KK2h0dHA6Ly9ob21lLnNwcnluZXQuY29tL3NwcnluZXQvY2JhZ3dlbGwvcHJvamVjdHMuaHRtbAorCisKK0Jsb2NraW5nIHZzLiBub25ibG9ja2luZyBJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSBPU1MvRnJlZSB0aGlzIGRyaXZlciBob25vdXJzIHRoZSBPX05PTkJMT0NLIGZpbGUgZmxhZworbm90IG9ubHkgZHVyaW5nIG9wZW4sIGJ1dCBhbHNvIGR1cmluZyByZWFkIGFuZCB3cml0ZS4KK1RoaXMgaXMgYW4gZWZmb3J0IHRvIG1ha2UgdGhlIHNvdW5kIGRyaXZlciBpbnRlcmZhY2UgbW9yZQorcmVndWxhci4gVGltaWRpdHkgaGFzIHByb2JsZW1zIHdpdGggdGhpczsgYSBwYXRjaAoraXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5pZmUuZWUuZXRoei5jaC9+c2FpbGVyL2xpbnV4L3BjaWF1ZGlvLmh0bWwuCisoVGltaWRpdHkgcGF0Y2hlZCB3aWxsIGFsc28gcnVuIG9uIE9TUy9GcmVlKS4KKworCitNSURJIFVBUlQKKy0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGEgc2ltcGxlIE1JREkgVUFSVCBpbnRlcmZhY2UsIHdpdGgKK25vIGlvY3RsJ3Mgc3VwcG9ydGVkLgorCisKK01JREkgc3ludGhlc2l6ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzb3VuZGNhcmQgZG9lcyBub3QgaGF2ZSBhbnkgaGFyZHdhcmUgTUlESSBzeW50aGVzaXplcjsKK01JREkgc3ludGhlc2lzIGhhcyB0byBiZSBkb25lIGluIHNvZnR3YXJlLiBUbyBhbGxvdyB0aGlzCit0aGUgZHJpdmVyL3NvdW5kY2FyZCBzdXBwb3J0cyB0d28gUENNICgvZGV2L2RzcCkgaW50ZXJmYWNlcy4KK1RoZSBzZWNvbmQgb25lIGdvZXMgdG8gdGhlIG1peGVyICJzeW50aCIgc2V0dGluZyBhbmQgc3VwcG9ydHMKK29ubHkgYSBsaW1pdGVkIHNldCBvZiBzYW1wbGluZyByYXRlcyAoNDQxMDAsIDIyMDUwLCAxMTAyNSwgNTUxMikuCitCeSBzZXR0aW5nIGxpbmVvdXQgdG8gMSBvbiB0aGUgZHJpdmVyIGNvbW1hbmQgbGluZQorKGVnLiBpbnNtb2QgZXMxMzcwIGxpbmVvdXQ9MSkgaXQgaXMgZXZlbiBwb3NzaWJsZSBvbiBzb21lCitjYXJkcyB0byBjb252ZXJ0IHRoZSBMSU5FSU4gamFjayBpbnRvIGEgc2Vjb25kIExJTkVPVVQgamFjaywgdGh1cworbWFraW5nIGl0IHBvc3NpYmxlIHRvIG91dHB1dCBmb3VyIGluZGVwZW5kZW50IGF1ZGlvIGNoYW5uZWxzIQorCitUaGVyZSBpcyBhIGZyZWVseSBhdmFpbGFibGUgc29mdHdhcmUgcGFja2FnZSB0aGF0IGFsbG93cworTUlESSBmaWxlIHBsYXliYWNrIG9uIHRoaXMgc291bmRjYXJkIGNhbGxlZCBUaW1pZGl0eS4KK1NlZSBodHRwOi8vd3d3LmNncy5maS9+dHQvdGltaWRpdHkvLgorCisKKworVGhvbWFzIFNhaWxlcgordC5zYWlsZXJAYWx1bW5pLmV0aHouY2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MSBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzE1MTI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvZXMxMzcxCkBAIC0wLDAgKzEsNjQgQEAKKy9wcm9jL3NvdW5kLCAvZGV2L3NuZHN0YXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL3Byb2Mvc291bmQgYW5kIC9kZXYvc25kc3RhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQorZHJpdmVyLiBUbyBmaW5kIG91dCB3aGV0aGVyIHRoZSBkcml2ZXIgc3VjY2VlZGVkIGxvYWRpbmcsCitjaGVjayB0aGUga2VybmVsIGxvZyAoZG1lc2cpLgorCisKK0FMYXcvdUxhdyBzYW1wbGUgZm9ybWF0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIEFMYXcvdUxhdyBzYW1wbGUgZm9ybWF0cy4KK0FMYXcgaXMgdGhlIGRlZmF1bHQgbW9kZSB3aGVuIG9wZW5pbmcgYSBzb3VuZCBkZXZpY2UKK3VzaW5nIE9TUy9GcmVlLiBUaGUgcmVhc29uIGZvciB0aGUgbGFjayBvZiBzdXBwb3J0IGlzCit0aGF0IHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IHRoZXNlIGZvcm1hdHMsIGFuZCBhZGRpbmcKK2NvbnZlcnNpb24gcm91dGluZXMgdG8gdGhlIGtlcm5lbCB3b3VsZCBsZWFkIHRvIHZlcnkgdWdseQorY29kZSBpbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIG1tYXAgaW50ZXJmYWNlIHRvIHRoZSBkcml2ZXIuCitBbmQgc2luY2UgeHF1YWtlIHVzZXMgbW1hcCwgbW1hcCBpcyBjb25zaWRlcmVkIGltcG9ydGFudCA6LSkKK2FuZCBubyBzYW5lIGFwcGxpY2F0aW9uIHVzZXMgQUxhdy91TGF3IHRoZXNlIGRheXMgYW55d2F5LgorSW4gc2hvcnQsIHBsYXlpbmcgYSBTdW4gLmF1IGZpbGUgYXMgZm9sbG93czoKKworY2F0IG15X2ZpbGUuYXUgPiAvZGV2L2RzcAorCitkb2VzIG5vdCB3b3JrLiBJbnN0ZWFkLCB5b3UgbWF5IHVzZSB0aGUgcGxheSBzY3JpcHQgZnJvbQorQ2hyaXMgQmFnd2VsbCdzIHNveC0xMi4xNCBwYWNrYWdlIChhdmFpbGFibGUgZnJvbSB0aGUgVVJMCitiZWxvdykgdG8gcGxheSBtYW55IGRpZmZlcmVudCBhdWRpbyBmaWxlIGZvcm1hdHMuCitUaGUgc2NyaXB0IGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lcyB0aGUgYXVkaW8gZm9ybWF0CithbmQgZG9lcyBkbyBhdWRpbyBjb252ZXJzaW9ucyBpZiBuZWNlc3NhcnkuCitodHRwOi8vaG9tZS5zcHJ5bmV0LmNvbS9zcHJ5bmV0L2NiYWd3ZWxsL3Byb2plY3RzLmh0bWwKKworCitCbG9ja2luZyB2cy4gbm9uYmxvY2tpbmcgSU8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxpa2UgT1NTL0ZyZWUgdGhpcyBkcml2ZXIgaG9ub3VycyB0aGUgT19OT05CTE9DSyBmaWxlIGZsYWcKK25vdCBvbmx5IGR1cmluZyBvcGVuLCBidXQgYWxzbyBkdXJpbmcgcmVhZCBhbmQgd3JpdGUuCitUaGlzIGlzIGFuIGVmZm9ydCB0byBtYWtlIHRoZSBzb3VuZCBkcml2ZXIgaW50ZXJmYWNlIG1vcmUKK3JlZ3VsYXIuIFRpbWlkaXR5IGhhcyBwcm9ibGVtcyB3aXRoIHRoaXM7IGEgcGF0Y2gKK2lzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuaWZlLmVlLmV0aHouY2gvfnNhaWxlci9saW51eC9wY2lhdWRpby5odG1sLgorKFRpbWlkaXR5IHBhdGNoZWQgd2lsbCBhbHNvIHJ1biBvbiBPU1MvRnJlZSkuCisKKworTUlESSBVQVJUCistLS0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyBhIHNpbXBsZSBNSURJIFVBUlQgaW50ZXJmYWNlLCB3aXRoCitubyBpb2N0bCdzIHN1cHBvcnRlZC4KKworCitNSURJIHN5bnRoZXNpemVyCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc291bmRjYXJkIGRvZXMgbm90IGhhdmUgYW55IGhhcmR3YXJlIE1JREkgc3ludGhlc2l6ZXI7CitNSURJIHN5bnRoZXNpcyBoYXMgdG8gYmUgZG9uZSBpbiBzb2Z0d2FyZS4gVG8gYWxsb3cgdGhpcwordGhlIGRyaXZlci9zb3VuZGNhcmQgc3VwcG9ydHMgdHdvIFBDTSAoL2Rldi9kc3ApIGludGVyZmFjZXMuCisKK1RoZXJlIGlzIGEgZnJlZWx5IGF2YWlsYWJsZSBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgYWxsb3dzCitNSURJIGZpbGUgcGxheWJhY2sgb24gdGhpcyBzb3VuZGNhcmQgY2FsbGVkIFRpbWlkaXR5LgorU2VlIGh0dHA6Ly93d3cuY2dzLmZpL350dC90aW1pZGl0eS8uCisKKworCitUaG9tYXMgU2FpbGVyCit0LnNhaWxlckBhbHVtbmkuZXRoei5jaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvbXdhdmUgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9td2F2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTgzMzRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvbXdhdmUKQEAgLTAsMCArMSwxODUgQEAKKwlIb3cgdG8gdHJ5IHRvIHN1cnZpdmUgYW4gSUJNIE13YXZlIHVuZGVyIExpbnV4IFNCIGRyaXZlcnMKKworCisrCUlCTSBoYXZlIG5vdyByZWxlYXNlZCBkb2N1bWVudGF0aW9uIG9mIHNvcnRzIGFuZCBUb3JzdGVuIGlzIGJ1c3kKKwl0cnlpbmcgdG8gbWFrZSB0aGUgTXdhdmUgd29yay4gVGhpcyBpcyBub3QgaG93ZXZlciBhIHRyaXZpYWwgdGFzay4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPSywgZmlyc3QgdGhpbmcgLSB0aGUgSVJRIHByb2JsZW0gSVMgYSBwcm9ibGVtLCB3aGV0aGVyIHRoZSB0ZXN0IGlzIGJ5cGFzc2VkIG9yCitub3QuICBJdCBpcyBOT1QgYSBMaW51eCBwcm9ibGVtLCBidXQgYW4gTVdBVkUgcHJvYmxlbSB0aGF0IGlzIGZpeGVkIHdpdGggdGhlCitsYXRlc3QgTVdBVkUgcGF0Y2hlcy4gU28sIGluIG90aGVyIHdvcmRzLCBkb24ndCBieXBhc3MgdGhlIHRlc3QgZm9yIE1XQVZFUyEKKworSSBoYXZlIFdpbmRvd3MgOTUgb24gL2Rldi9oZGExLCBzd2FwIG9uIC9kZXYvaGRhMiwgYW5kIFJlZCBIYXQgNSBvbiAvZGV2L2hkYTMuCisKK1RoZSBzdGVwcywgdGhlbjoKKworICAgIEJvb3QgdG8gTGludXguIAorICAgIE1vdW50IFdpbmRvd3MgOTUgZmlsZSBzeXN0ZW0gKGFzc3VtZSBtb3VudCBwb2ludCA9IC9kb3M5NSkuCisgICAgbWtkaXIgL2Rvczk1L2xpbnV4CisgICAgbWtkaXIgL2Rvczk1L2xpbnV4L2Jvb3QKKyAgICBta2RpciAvZG9zOTUvbGludXgvYm9vdC9wYXJtcworCisgICAgQ29weSB0aGUga2VybmVsLCBhbnkgaW5pdHJkIGltYWdlLCBhbmQgbG9hZGxpbiB0byAvZG9zOTUvbGludXgvYm9vdC8uCisKKyAgICBSZWJvb3QgdG8gV2luZG93cyA5NS4KKworICAgIEVkaXQgQzovbXNkb3Muc3lzIGFuZCBhZGQgb3IgY2hhbmdlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgTG9nbz0wCisgICAgICAgIEJvb3RHVUk9MAorCisgICAgTm90ZSB0aGF0IG1zZG9zLnN5cyBpcyBhIHRleHQgZmlsZSBidXQgaXQgbmVlZHMgdG8gYmUgbWFkZSAndW5oaWRkZW4nLAorICAgIHJlYWRhYmxlIGFuZCB3cml0YWJsZSBiZWZvcmUgaXQgY2FuIGJlIGVkaXRlZC4gIFRoaXMgY2FuIGJlIGRvbmUgd2l0aAorICAgIERPUycgImF0dHJpYiIgY29tbWFuZC4KKworICAgIEVkaXQgY29uZmlnLnN5cyB0byBoYXZlIG11bHRpcGxlIGNvbmZpZyBtZW51cy4gSSBoYXZlIG9uZSBmb3Igd2luZG93cyA5NSBhbmQKKyAgICBmaXZlIGZvciBMaW51eCwgbGlrZSB0aGlzOgorLS0tLS0tLS0tLS0tCitbbWVudV0KK21lbnVpdGVtPVc5NSwgV2luZG93cyA5NQorbWVudWl0ZW09TElOVFAsIExpbnV4IC0gVGhpbmtQYWQKK21lbnVpdGVtPUxJTlRQMywgTGludXggLSBUaGlua1BhZCBDb25zb2xlCittZW51aXRlbT1MSU5ET0MsIExpbnV4IC0gRG9ja2VkCittZW51aXRlbT1MSU5ET0MzLCBMaW51eCAtIERvY2tlZCBDb25zb2xlCittZW51aXRlbT1MSU4xLCBMaW51eCAtIFNpbmdsZSBVc2VyIE1vZGUKK1JFTSBtZW51ZGVmYXVsdD1XOTUsMTAKKworW1c5NV0KKworW0xJTlRQXQorCitbTElORE9DXQorCitbTElOVFAzXQorCitbTElORE9DM10KKworW0xJTjFdCisKK1tDT01NT05dCitGSUxFUz0zMAorUkVNIFBsZWFzZSByZWFkIFJFQURNRS5UWFQgaW4gQzpcTVdXIHN1YmRpcmVjdG9yeSBiZWZvcmUgY2hhbmdpbmcgdGhlIERPUz0gc3RhdGVtZW50LgorRE9TPUhJR0gsVU1CCitERVZJQ0U9QzpcTVdXXE1BTkFHRVJcTVdENTA0MzAuRVhFCitTSEVMTD1jOlxjb21tYW5kLmNvbSAvZToyMDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbXBvcnRhbnQgdGhpbmdzIGFyZSB0aGUgU0hFTEwgYW5kIERFVklDRSBzdGF0ZW1lbnRzLgorCisgICAgVGhlbiBjaGFuZ2UgYXV0b2V4ZWMuYmF0LiBCYXNpY2FsbHkgZXZlcnl0aGluZyBpbiB0aGVyZSBvcmlnaW5hbGx5IHNob3VsZCBiZQorICAgIGRvbmUgT05MWSB3aGVuIFdpbmRvd3MgOTUgaXMgYm9vdGVkLiBUaGVuIHlvdSBhZGQgbmV3IHRoaW5ncyBzcGVjaWZpY2FsbHkKKyAgICBmb3IgTGludXguICBNaW5lIGlzIGFzIGZvbGxvd3MKKworLS0tLS0tLS0tLS0tLS0tCitARUNITyBPRkYKK2lmICIlQ09ORklHJSIgPT0gIlc5NSIgZ290byBXOTUKKworUkVNCitSRU0gTGludXggc3R1ZmYKK1JFTQorU0VUIE1XUEFUSD1DOlxNV1dcRExMO0M6XE1XV1xNV0dBTUVTO0M6XE1XV1xEU1AKK1NFVCBCTEFTVEVSPUEyMjAgSTUgRDEKK1NFVCBNV1JPT1Q9QzpcTVdXCitTRVQgTElCUEFUSD1DOlxNV1dcRExMCitTRVQgUEFUSD1DOlxXSU5ET1dTO0M6XE1XV1xETEw7CitDQUxMIE1XQVZFIFNUQVJUIE5PU0hPVworYzpcbGludXhcYm9vdFxsb2FkbGluLmV4ZSBAYzpcbGludXhcYm9vdFxwYXJtc1wlQ09ORklHJS5wYXIKKworOlc5NQorUkVNCitSRU0gV2luZG93cyA5NSBzdHVmZgorUkVNCitjOlx0b29sa2l0XGd1YXJkCitTRVQgTVNJTlBVVD1DOlxNU0lOUFVUCitTRVQgTVdQQVRIPUM6XE1XV1xETEw7QzpcTVdXXE1XR0FNRVM7QzpcTVdXXERTUAorUkVNIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBieSBET1MgZ2FtZXMgdG8gcmVjb2duaXplIFNvdW5kIEJsYXN0ZXIgaGFyZHdhcmUuCitSRU0gSWYgaGFyZHdhcmUgc2V0dGluZ3MgYXJlIGNoYW5nZWQsIHBsZWFzZSBjaGFuZ2UgdGhpcyBsaW5lIGFzIHdlbGwuCitSRU0gU2VlIHRoZSBNd2F2ZSBSRUFETUUgZmlsZSBmb3IgaW5zdHJ1Y3Rpb25zLgorU0VUIEJMQVNURVI9QTIyMCBJNSBEMQorU0VUIE1XUk9PVD1DOlxNV1cKK1NFVCBMSUJQQVRIPUM6XE1XV1xETEwKK1NFVCBQQVRIPUM6XFdJTkRPV1M7QzpcV0lORE9XU1xDT01NQU5EO0U6XE9SQVdJTjk1XEJJTjtmOlxtc2RldlxiaW47ZTpcdjMwXGJpbi5kYmc7djpcZGV2dFx2MzBcYmluO2M6XEphdmFTREtcQmluO0M6XE1XV1xETEw7CitTRVQgSU5DTFVERT1mOlxNU0RFVlxJTkNMVURFO0Y6XE1TREVWXE1GQ1xJTkNMVURFCitTRVQgTElCPUY6XE1TREVWXExJQjtGOlxNU0RFVlxNRkNcTElCCit3aW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyBidWlsZCBhIGZpbGUgaW4gYzpcbGludXhcYm9vdFxwYXJtcyBmb3IgZWFjaCBMaW51eCBjb25maWcgdGhhdCB5b3UgaGF2ZS4KKworRm9yIGV4YW1wbGUsIG15IExJTkRPQzMgY29uZmlnIGlzIGZvciBhIGRvY2tlZCBUaGlua3BhZCBhdCBydW5sZXZlbCAzIHdpdGggbm8KK2luaXRyZCBpbWFnZSwgYW5kIGhhcyBhIHBhcmFtZXRlciBmaWxlIG5hbWVkIExJTkRPQzMuUEFSIGluIGM6XGxpbnV4XGJvb3RccGFybXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgTE9BRExJTiBAcGFyYW1fZmlsZSBpbWFnZT1vdGhlcl9pbWFnZSByb290PS9kZXYvb3RoZXIKKyMKKyMJTGludXggQ29uc29sZSBpbiBkb2NraW5nIHN0YXRpb24KKyMKK2M6XGxpbnV4XGJvb3RcekltYWdlLmtybiAgICAgICAgIyBGaXJzdCB2YWx1ZSBtdXN0IGJlIGZpbGVuYW1lIG9mIExpbnV4IGtlcm5lbC4KK3Jvb3Q9L2Rldi9oZGEzICAgICAgICAgICAgICAgICAgIyBkZXZpY2Ugd2hpY2ggZ2V0cyBtb3VudGVkIGFzIHJvb3QgRlMKK3JvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPdGhlciBrZXJuZWwgYXJndW1lbnRzIGdvIGhlcmUuCithcG09b2ZmCitkb2M9eWVzCiszCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZG9jPXllcyBwYXJhbWV0ZXIgaXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdXNlZCBieSBteSBpbml0IHNjcmlwdHMsIG5vdAorYSBrZXJuZWwgYXJndW1lbnQuCisKK0hvd2V2ZXIsIHRoZSBhcG09b2ZmIHBhcmFtZXRlciBJUyBhIGtlcm5lbCBhcmd1bWVudCEgIEFQTSwgYXQgbGVhc3QgaW4gbXkgc2V0dXAsCitjYXVzZXMgdGhlIGtlcm5lbCB0byBjcmFzaCB3aGVuIGxvYWRlZCB2aWEgbG9hZGxpbiAoYnV0IE5PVCB3aGVuIGxvYWRlZCB2aWEKK0xJTE8pLiBUaGUgQVBNIHN0dWZmIENPVUxEIGJlIGZvcmNlZCBvdXQgb2YgdGhlIGtlcm5lbCB2aWEgdGhlIGtlcm5lbCBjb21waWxlCitvcHRpb25zLiBJbnN0ZWFkLCBJIGdvdCBhbiB1bm9mZmljaWFsIHBhdGNoIHRvIHRoZSBBUE0gZHJpdmVycyB0aGF0IGFsbG93cyB0aGVtCit0byBiZSBkeW5hbWljYWxseSBkZWFjdGl2YXRlZCB2aWEga2VybmVsIGFyZ3VtZW50cy4gV2hhdGV2ZXIgeW91IGNob3NlIHRvCitkb2N1bWVudCwgQVBNLCBpdCBzZWVtcywgTVVTVCBiZSBvZmYgZm9yIHNldHVwcyBsaWtlIG1pbmUuCisKK05vdyBtYWtlIHN1cmUgQzpcTVdXXE1XQ09ORklHLlJFRiBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tOYXRpdmVET1NdCitEZWZhdWx0PVNCMS41CitTQklucHV0U291cmNlPUNECitTWU5USD1GTQorUVNvdW5kPU9GRgorUmV2ZXJiPU9GRgorQ2hvcnVzPU9GRgorUmV2ZXJiRGVwdGg9NQorQ2hvcnVzRGVwdGg9NQorU0JJbnB1dFZvbHVtZT01CitTQk1haW5Wb2x1bWU9MTAKK1NCV2F2ZVZvbHVtZT0xMAorU0JTeW50aFZvbHVtZT0xMAorV2F2ZVRhYmxlVm9sdW1lPTEwCitBdWRpb1Bvd2VyRHJpdmVyPU9OCisKK1tGYXN0Q0ZHXQorU2hvdz1ObworSGlkZU9wdGlvbj1PZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09SIHRoZSBEZWZhdWx0PSBsaW5lIENPVUxEIGJlCisKK0RlZmF1bHQ9U0JQUk8KKworUmVib290IHRvIFdpbmRvd3MgOTUgYW5kIGNob29zZSBMaW51eC4gV2hlbiBib290ZWQsIHVzZSBzbmRjb25maWcgdG8gY29uZmlndXJlCit0aGUgc291bmQgbW9kdWxlcyBhbmQgdm9pbOAgLSBUaGlua1BhZCBzb3VuZCB3aXRoIExpbnV4LgorCitOb3cgdGhlIGdvdGNoYXMgLSB5b3UgY2FuIGVpdGhlciBoYXZlIENEIHNvdW5kIE9SIE1peGVycyBidXQgbm90IGJvdGguIFRoYXQncyBhCitwcm9ibGVtIHdpdGggdGhlIFNCMS41IChDRCBzb3VuZCkgb3IgU0JQUk8gKE1peGVycykgc2V0dGluZ3MuIE5vIG9uZSBrbm93cyB3aHkKK3RoaXMgaXMhCisKK0ZvciBzb21lIHJlYXNvbiBNUEVHMyBmaWxlcywgd2hlbiBwbGF5ZWQgdGhyb3VnaCBtcGcxMjMsIHNvdW5kIGxpa2UgdGhleQorYXJlIHBsYXlpbmcgYXQgMS84dGggc3BlZWQgLSBub3QgdmVyeSB1c2VmdWwhICBJZiB5b3UgaGF2ZSBBTlkgaW5zaWdodAorb24gd2h5IHRoaXMgc2Vjb25kIHRoaW5nIG1pZ2h0IGJlIGhhcHBlbmluZywgSSB3b3VsZCBiZSBncmF0ZWZ1bC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBfLyAgICAgIF8vXy9fL18vCisgICBfL18vICBfL18vICAgICBfLworICBfLyBfL18vIF8vXy9fL18vICAgICAgTWFydGluIEpvaG4gQmFydGxldHQKKyBfLyAgXy8gIF8vICAgICBfLyAgICAgIChtYXJ0aW5Abml0cmFtLmRlbW9uLmNvLnVrKQorXy8gICAgICBfL18vXy9fLworICAgICAgIF8vCitfLyAgICBfLworIF8vXy8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9ybWU5Nnh4IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvcm1lOTZ4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Q3YjdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvcm1lOTZ4eApAQCAtMCwwICsxLDc2NyBAQAorQmV0YSByZWxlYXNlIG9mIHRoZSBybWU5Nnh4IChkcml2ZXIgZm9yIFJNRSA5NlhYIGNhcmRzIGxpa2UgdGhlIAorIkhhbW1lcmZhbGwiIGFuZCB0aGUgIkhhbW1lcmZhbGwgbGlnaHQiKSAKKworSW1wb3J0YW50OiBUaGUgZHJpdmVyIG1vZHVsZSBoYXMgdG8gYmUgaW5zdGFsbGVkIG9uIGEgZnJlc2hseSByZWJvb3RlZCBzeXN0ZW0sIAorb3RoZXJ3aXNlIHRoZSBkcml2ZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gYWNxdWlyZSBpdHMgYnVmZmVycy4KKworZmVhdHVyZXM6CisKKyAtIE9TUyBwcm9ncmFtbWluZyBpbnRlcmZhY2UgKGkuZS4gcnVucyB3aXRoIHN0YW5kYXJkIE9TUyBzb3VuZHNvZnR3YXJlKSAKKyAtIE9TUy9NdWx0aWNoYW5uZWwgaW50ZXJmYWNlIChPU1MgbXVsdGljaGFubmVsIGlzIGRvbmUgYnkganVzdCBhcXVpcmluZworICAgbW9yZSB0aGFuIDIgY2hhbm5lbHMpLiBUaGUgZHJpdmVyIGRvZXMgbm90IHVzZSBtb3JlIHRoYW4gb25lIGRldmljZSAKKyAgICggeWV0IC4uIHRoaXMgZmVhdHVyZSBtYXkgYmUgaW1wbGVtZW50ZWQgbGF0ZXIgKSAKKyAtIG1vcmUgdGhhbiBvbmUgUk1FIGNhcmQgc3VwcG9ydGVkCisKK1RoZSBkcml2ZXIgdXNlcyBhIHNwZWNpZmljIG11bHRpY2hhbm5lbCBpbnRlcmZhY2UsIHdoaWNoIEkgd2lsbCBkb2N1bWVudAord2hlbiB0aGUgZHJpdmVyIGdldHMgc3RhYmxlLiAodGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluZXMgaW4gcm1lOTZ4eC5oLAord2hpY2ggYWRkcyBibG9ja2VkIG11bHRpY2hhbm5lbCBmb3JtYXRzIGkuZSBpbnN0ZWFkIG9mIAorbHJscmxybHIgLS0+IGxsbGxycnJyICBldGMuCisKK1VzZSB0aGUgInJtZWN0cmwiIHByb2dyYW1tIHRvIGxvb2sgYXQgdGhlIHN0YXR1cyBvZiB0aGUgY2FyZCAuLiAKK29yIHVzZSB4cm1lY3RybCwgYSBHVUkgaW50ZXJmYWNlIGZvciB0aGUgY3RybCBwcm9ncmFtLgorCitXaGF0IHlvdSBjYW4gZG8gd2l0aCB0aGUgcm1lY3RybCBwcm9ncmFtIGlzIHRvIHNldCB0aGUgc3RlcmVvIGRldmljZSBmb3IKK09TUyBlbXVsYXRpb24gKGUuZy4gaWYgeW91IHVzZSBTUERJRiBvdXQpLgorCitZb3UgZG86CisKKy4vY3RybCBvZmZzZXQgMjQgMjQKKword2hpY2ggbWFrZXMgdGhlIHN0ZXJlbyBkZXZpY2UgdXNlIGNoYW5uZWxzIDI1IGFuZCAyNi4KKworR3VlbnRlciBHZWlnZXIgPGdlaWdlckBlcHkuY28uYXQ+CisKK2NvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGF0dGFjaGVkIHNvdXJjZSBjb2RlIGludG8gcm1lY3RybC5jCithbmQgdGhlICBzZWNvbmQgcGFydCBpbnRvIHhybWVjdHJsIChvciBnZXQgdGhlIHByb2dyYW0gZnJvbQoraHR0cDovL2dpZ2UueGR2Lm9yZy9wYWdlcy9zb2Z0L3BhZ2VzL3JtZSkKKwordG8gY29tcGlsZTogZ2NjIC1vIHJtZWN0cmwgcm1lY3RybC5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc25pcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvdW5kY2FyZC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJybWU5Nnh4LmgiCisKKy8qCisgIHJlbWN0cmwuYworICAoQykgMjAwMCBHdWVudGVyIEdlaWdlciA8Z2VpZ2VyQGRlYmlhbi5vcmc+CisgIEhQMjAwMjAyMDEgLSBIZWlrbyBQdXJuaGFnZW4gPHB1cm5oYWdlQHRudC51bmktaGFubm92ZXIuZGU+CisqLworCisvKiAjIGRlZmluZSBERVZJQ0VfTkFNRSAiL2Rldi9taXhlciIgKi8KKyMgZGVmaW5lIERFVklDRV9OQU1FICIvZGV2L21peGVyMSIKKworCit2b2lkIHVzYWdlKHZvaWQpCit7CisgICAgIGZwcmludGYoc3RkZXJyLCJ1c2FnZTogcm1lY3RybCBbL2Rldi9taXhlcjxuPl0gW2NvbW1hbmQgW29wdGlvbnNdXVxuXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIndoZXJlIGNvbW1hbmQgaXMgb25lIG9mOlxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIGhlbHAgICAgICAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgc2hvdyBzdGF0dXMgYml0c1xuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIGNvbnRyb2wgICAgICAgICAgICAgICAgICAgIHNob3cgY29udHJvbCBiaXRzXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgbWl4ICAgICAgICAgICAgICAgICAgICAgICAgc2hvdyBtaXhlci9vZmZzZXQgc3RhdHVzXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgbWFzdGVyIDxuPiAgICAgICAgICAgICAgICAgc2V0IHN5bmMgbWFzdGVyXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgcHJvIDxuPiAgICAgICAgICAgICAgICAgICAgc2V0IHNwZGlmIG91dCBwcm9cbiIpOworICAgICBmcHJpbnRmKHN0ZGVyciwiICBlbXBoYXNpcyA8bj4gICAgICAgICAgICAgICBzZXQgc3BkaWYgb3V0IGVtcGhhc2lzXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgZG9sYnkgPG4+ICAgICAgICAgICAgICAgICAgc2V0IHNwZGlmIG91dCBubyBhdWRpb1xuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIG9wdG91dCA8bj4gICAgICAgICAgICAgICAgIHNldCBzcGRpZiBvdXQgb3B0aWNhbFxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIHdvcmRjbG9jayA8bj4gICAgICAgICAgICAgIHNldCBzeW5jIHdvcmRjbG9ja1xuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIHNwZGlmaW4gPG4+ICAgICAgICAgICAgICAgIHNldCBzcGRpZiBpbiAoMD1vcHRpY2FsLDE9Y29heCwyPWludGVybilcbiIpOworICAgICBmcHJpbnRmKHN0ZGVyciwiICBzeW5jcmVmIDxuPiAgICAgICAgICAgICAgICBzZXQgc3luYyBzb3VyY2UgKDA9QURBVDEsMT1BREFUMiwyPUFEQVQzLDM9U1BESUYpXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgYWRhdDFjZCA8bj4gICAgICAgICAgICAgICAgc2V0IEFEQVQxIG9uIGludGVybmFsIENEXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgb2Zmc2V0IDxkZXZucj4gPGluPiA8b3V0PiAgc2V0IGRldiAoMC4uMykgb2Zmc2V0ICgwLi4yNSlcbiIpOworICAgICBleGl0KC0xKTsKK30KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICAgICBpbnQgY2FyZHM7CisgICAgIGludCByZXQ7CisgICAgIGludCBpOworICAgICBkb3VibGUgZnQ7CisgICAgIGludCBmZCwgZmR3cjsKKyAgICAgaW50IHBhcmFtLG9yaWc7CisgICAgIHJtZV9zdGF0dXNfdCBzdGF0OworICAgICBybWVfY3RybF90IGN0cmw7CisgICAgIGNoYXIgKmRldmljZTsKKyAgICAgaW50IGFyZ2lkeDsKKworICAgICBpZiAoYXJnYyA8IDIpCisJICB1c2FnZSgpOworCisgICAgIGlmICgqYXJndlsxXT09Jy8nKSB7CisJICBkZXZpY2UgPSBhcmd2WzFdOworCSAgYXJnaWR4ID0gMjsKKyAgICAgfQorICAgICBlbHNlIHsKKwkgIGRldmljZSA9IERFVklDRV9OQU1FOworCSAgYXJnaWR4ID0gMTsKKyAgICAgfQorCisgICAgIGZwcmludGYoc3Rkb3V0LCJtaXhlciBkZXZpY2UgJXNcbiIsZGV2aWNlKTsKKyAgICAgaWYgKChmZCA9IG9wZW4oZGV2aWNlLE9fUkRPTkxZKSkgPCAwKSB7CisJICBmcHJpbnRmKHN0ZG91dCwib3BlbmluZyBkZXZpY2UgZmFpbGVkXG4iKTsKKwkgIGV4aXQoLTEpOworICAgICB9CisKKyAgICAgaWYgKChmZHdyID0gb3BlbihkZXZpY2UsT19XUk9OTFkpKSA8IDApIHsKKwkgIGZwcmludGYoc3Rkb3V0LCJvcGVuaW5nIGRldmljZSBmYWlsZWRcbiIpOworCSAgZXhpdCgtMSk7CisgICAgIH0KKworICAgICBpZiAoYXJnYyA8IGFyZ2lkeCsxKQorCSAgdXNhZ2UoKTsKKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sImhlbHAiKSkKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgaWYgKCFzdHJjbXAoYXJndlthcmdpZHhdLCItaCIpKQorICAgICAgICB1c2FnZSgpOworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sIi0taGVscCIpKQorICAgICAgICB1c2FnZSgpOworCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwic3RhdHVzIikpIHsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUyLCZzdGF0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LmlycSAlZFxuIixzdGF0LmlycSk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC5sb2NrbWFzayAlZFxuIixzdGF0LmxvY2ttYXNrKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LnNyNDggJWRcbiIsc3RhdC5zcjQ4KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LndjbG9jayAlZFxuIixzdGF0LndjbG9jayk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC5idWZwb2ludCAlZFxuIixzdGF0LmJ1ZnBvaW50KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LnN5bmNtYXNrICVkXG4iLHN0YXQuc3luY21hc2spOworCSAgZnByaW50ZihzdGRvdXQsInN0YXQuZG91Ymxlc3BlZWQgJWRcbiIsc3RhdC5kb3VibGVzcGVlZCk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC50Y19idXN5ICVkXG4iLHN0YXQudGNfYnVzeSk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC50Y19vdXQgJWRcbiIsc3RhdC50Y19vdXQpOworCSAgZnByaW50ZihzdGRvdXQsInN0YXQuY3J5c3RhbHJhdGUgJWQgKDA9NjRrIDM9OTZrIDQ9ODguMmsgNT00OGsgNj00NC4xayA3PTMyaylcbiIsc3RhdC5jcnlzdGFscmF0ZSk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC5zcGRpZl9lcnJvciAlZFxuIixzdGF0LnNwZGlmX2Vycm9yKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LmJ1ZmlkICVkXG4iLHN0YXQuYnVmaWQpOworCSAgZnByaW50ZihzdGRvdXQsInN0YXQudGNfdmFsaWQgJWRcbiIsc3RhdC50Y192YWxpZCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiY29udHJvbCIpKSB7CisJICBpb2N0bChmZCxTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5zdGFydCAlZFxuIixjdHJsLnN0YXJ0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLmxhdGVuY3kgJWQgKDA9NjQgLi4gNz04MTkyKVxuIixjdHJsLmxhdGVuY3kpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwubWFzdGVyICVkXG4iLGN0cmwubWFzdGVyKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLmllICVkXG4iLGN0cmwuaWUpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3I0OCAlZFxuIixjdHJsLnNyNDgpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3BhcmUgJWRcbiIsY3RybC5zcGFyZSk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5kb3VibGVzcGVlZCAlZFxuIixjdHJsLmRvdWJsZXNwZWVkKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnBybyAlZFxuIixjdHJsLnBybyk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5lbXBoYXNpcyAlZFxuIixjdHJsLmVtcGhhc2lzKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLmRvbGJ5ICVkXG4iLGN0cmwuZG9sYnkpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwub3B0X291dCAlZFxuIixjdHJsLm9wdF9vdXQpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwud29yZGNsb2NrICVkXG4iLGN0cmwud29yZGNsb2NrKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnNwZGlmX2luICVkICgwPW9wdGljYWwsMT1jb2F4LDI9aW50ZXJuKVxuIixjdHJsLnNwZGlmX2luKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnN5bmNfcmVmICVkICgwPUFEQVQxLDE9QURBVDIsMj1BREFUMywzPVNQRElGKVxuIixjdHJsLnN5bmNfcmVmKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnNwZGlmX3Jlc2V0ICVkXG4iLGN0cmwuc3BkaWZfcmVzZXQpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3BkaWZfc2VsZWN0ICVkXG4iLGN0cmwuc3BkaWZfc2VsZWN0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnNwZGlmX2Nsb2NrICVkXG4iLGN0cmwuc3BkaWZfY2xvY2spOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3BkaWZfd3JpdGUgJWRcbiIsY3RybC5zcGRpZl93cml0ZSk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5hZGF0MV9jZCAlZFxuIixjdHJsLmFkYXQxX2NkKTsKKwkgIGV4aXQgKDApOworICAgICB9CisKKyAgICAgaWYgKCFzdHJjbXAoYXJndlthcmdpZHhdLCJtaXgiKSkgeworCSAgcm1lX21peGVyIG1peDsKKwkgIGludCBpOworCisJICBmb3IgKGk9MDsgaTw0OyBpKyspIHsKKwkgICAgICAgbWl4LmRldm5yID0gaTsKKwkgICAgICAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTEsJm1peCk7CisJICAgICAgIGlmIChtaXguZGV2bnIgPT0gaSkgeworCQkgICAgZnByaW50ZihzdGRvdXQsImRldm5yICVkXG4iLG1peC5kZXZucik7CisJCSAgICBmcHJpbnRmKHN0ZG91dCwibWl4Lmlfb2Zmc2V0ICUyZCAoMC0yNSlcbiIsbWl4Lmlfb2Zmc2V0KTsKKwkJICAgIGZwcmludGYoc3Rkb3V0LCJtaXgub19vZmZzZXQgJTJkICgwLTI1KVxuIixtaXgub19vZmZzZXQpOworCSAgICAgICB9CisJICB9CisJICBleGl0ICgwKTsKKyAgICAgfQorCisvKiB0aGUgY29udHJvbCBmbGFncyAqLworCisgICAgIGlmIChhcmdjIDwgYXJnaWR4KzIpCisJICB1c2FnZSgpOworCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwibWFzdGVyIikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50ZigibWFzdGVyID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwubWFzdGVyID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwicHJvIikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50ZigicHJvID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwucHJvID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiZW1waGFzaXMiKSkgeworCSAgaW50IHZhbCA9IGF0b2koYXJndlthcmdpZHgrMV0pOworCSAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgcHJpbnRmKCJlbXBoYXNpcyA9ICVkXG4iLHZhbCk7CisJICBjdHJsLmVtcGhhc2lzID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiZG9sYnkiKSkgeworCSAgaW50IHZhbCA9IGF0b2koYXJndlthcmdpZHgrMV0pOworCSAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgcHJpbnRmKCJkb2xieSA9ICVkXG4iLHZhbCk7CisJICBjdHJsLmRvbGJ5ID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwib3B0b3V0IikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50Zigib3B0b3V0ID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwub3B0X291dCA9IHZhbDsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgZXhpdCAoMCk7CisgICAgIH0KKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sIndvcmRjbG9jayIpKSB7CisJICBpbnQgdmFsID0gYXRvaShhcmd2W2FyZ2lkeCsxXSk7CisJICBpb2N0bChmZCxTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBwcmludGYoIndvcmRjbG9jayA9ICVkXG4iLHZhbCk7CisJICBjdHJsLndvcmRjbG9jayA9IHZhbDsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgZXhpdCAoMCk7CisgICAgIH0KKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sInNwZGlmaW4iKSkgeworCSAgaW50IHZhbCA9IGF0b2koYXJndlthcmdpZHgrMV0pOworCSAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgcHJpbnRmKCJzcGRpZmluID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwuc3BkaWZfaW4gPSB2YWw7CisJICBpb2N0bChmZHdyLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIGV4aXQgKDApOworICAgICB9CisKKyAgICAgaWYgKCFzdHJjbXAoYXJndlthcmdpZHhdLCJzeW5jcmVmIikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50Zigic3luY3JlZiA9ICVkXG4iLHZhbCk7CisJICBjdHJsLnN5bmNfcmVmID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiYWRhdDFjZCIpKSB7CisJICBpbnQgdmFsID0gYXRvaShhcmd2W2FyZ2lkeCsxXSk7CisJICBpb2N0bChmZCxTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBwcmludGYoImFkYXQxY2QgPSAlZFxuIix2YWwpOworCSAgY3RybC5hZGF0MV9jZCA9IHZhbDsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgZXhpdCAoMCk7CisgICAgIH0KKworLyogc2V0dGluZyBvZmZzZXQgKi8KKworICAgICBpZiAoYXJnYyA8IGFyZ2lkeCs0KQorCSAgdXNhZ2UoKTsKKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sIm9mZnNldCIpKSB7CisJICBybWVfbWl4ZXIgbWl4OworCisJICBtaXguZGV2bnIgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKworCSAgbWl4Lmlfb2Zmc2V0ID0gYXRvaShhcmd2W2FyZ2lkeCsyXSk7CisJICBtaXgub19vZmZzZXQgPSBhdG9pKGFyZ3ZbYXJnaWR4KzNdKTsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTEsJm1peCk7CisJICBmcHJpbnRmKHN0ZG91dCwiZGV2bnIgJWRcbiIsbWl4LmRldm5yKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJtaXguaV9vZmZzZXQgdG8gJWRcbiIsbWl4Lmlfb2Zmc2V0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJtaXgub19vZmZzZXQgdG8gJWRcbiIsbWl4Lm9fb2Zmc2V0KTsKKwkgIGV4aXQgKDApOworICAgICB9CisKKyAgICAgdXNhZ2UoKTsKKyAgICAgZXhpdCAoMCk7IC8qIHRvIGF2b2lkIHdhcm5pbmcgKi8KK30KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDxzbmlwPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvdXNyL2Jpbi93aXNoCisKKyMgeHJtZWN0cmwKKyMgKEMpIDIwMDAgR3VlbnRlciBHZWlnZXIgPGdlaWdlckBkZWJpYW4ub3JnPgorIyBIUDIwMDIwMjAxIC0gSGVpa28gUHVybmhhZ2VuIDxwdXJuaGFnZUB0bnQudW5pLWhhbm5vdmVyLmRlPgorCisjc2V0IGRlZmF1bHRzICItcmVsaWVmIHJpZGdlZCIKK3NldCBDVFJMUFJPRyAiLi9ybWVjdHJsIgoraWYgeyRhcmdjfSB7CisgICAgc2V0IENUUkxQUk9HICIkQ1RSTFBST0cgJGFyZ3YiCit9CitwdXRzICJDVFJMUFJPRyAkQ1RSTFBST0ciCisKK2ZyYW1lIC5idXR0cworYnV0dG9uIC5idXR0cy5leGl0IC10ZXh0ICJFeGl0IiAtY29tbWFuZCAiZXhpdCIgLXJlbGllZiByaWRnZQorI2J1dHRvbiAuYnV0dHMuc3RhdGUgLXRleHQgIlN0YXRlIiAtY29tbWFuZCAiZ2V0X2FsbCIKKworcGFjayAuYnV0dHMuZXhpdCAtc2lkZSBsZWZ0CitwYWNrIC5idXR0cyAtc2lkZSBib3R0b20KKworCisjCisjIFNUQVRVUworIworCitmcmFtZSAuc3RhdHVzCisKKyMgU2FtcGxpbmcgUmF0ZQorCitmcmFtZSAuc3RhdHVzLnNyCitsYWJlbCAuc3RhdHVzLnNyLnRleHQgLXRleHQgIlNhbXBsaW5nIFJhdGUiIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5zdGF0dXMuc3IuNDQxIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIjQ0LjEga0h6IiAtd2lkdGggMTAgLWFuY2hvciBudyAtdmFyaWFibGUgc3JhdGUgLXZhbHVlIDQ0MTAwIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuc3RhdHVzLnNyLjQ4MCAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI0OCBrSHoiIC13aWR0aCAxMCAtYW5jaG9yIG53IC12YXJpYWJsZSBzcmF0ZSAtdmFsdWUgNDgwMDAgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5zdGF0dXMuc3IuODgyIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIjg4LjIga0h6IiAtd2lkdGggMTAgLWFuY2hvciBudyAtdmFyaWFibGUgc3JhdGUgLXZhbHVlIDg4MjAwIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuc3RhdHVzLnNyLjk2MCAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI5NiBrSHoiIC13aWR0aCAxMCAtYW5jaG9yIG53ICAtdmFyaWFibGUgc3JhdGUgLXZhbHVlIDk2MDAwIC1mb250IHRpbWVzCisKK3BhY2sgLnN0YXR1cy5zci50ZXh0IC5zdGF0dXMuc3IuNDQxIC5zdGF0dXMuc3IuNDgwIC5zdGF0dXMuc3IuODgyIC5zdGF0dXMuc3IuOTYwIC1zaWRlIHRvcCAtcGFkeCAzCisKKyMgTG9jaworCitmcmFtZSAuc3RhdHVzLmxvY2sKK2xhYmVsIC5zdGF0dXMubG9jay50ZXh0IC10ZXh0ICJMb2NrIiAtanVzdGlmeSBsZWZ0CitjaGVja2J1dHRvbiAuc3RhdHVzLmxvY2suYWRhdDEgLXNlbGVjdGNvbG9yIHJlZCAtdGV4dCAiQURBVDEiIC1hbmNob3IgbncgLXdpZHRoIDEwIC12YXJpYWJsZSBhZGF0bG9jazEgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5zdGF0dXMubG9jay5hZGF0MiAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICJBREFUMiIgLWFuY2hvciBudyAtd2lkdGggMTAgLXZhcmlhYmxlIGFkYXRsb2NrMiAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLnN0YXR1cy5sb2NrLmFkYXQzIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIkFEQVQzIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgYWRhdGxvY2szIC1mb250IHRpbWVzCisKK3BhY2sgLnN0YXR1cy5sb2NrLnRleHQgLnN0YXR1cy5sb2NrLmFkYXQxIC5zdGF0dXMubG9jay5hZGF0MiAuc3RhdHVzLmxvY2suYWRhdDMgLXNpZGUgdG9wIC1wYWR4IDMgCisKKyMgU3luYworCitmcmFtZSAuc3RhdHVzLnN5bmMKK2xhYmVsIC5zdGF0dXMuc3luYy50ZXh0IC10ZXh0ICJTeW5jIiAtanVzdGlmeSBsZWZ0CitjaGVja2J1dHRvbiAuc3RhdHVzLnN5bmMuYWRhdDEgLXNlbGVjdGNvbG9yIHJlZCAtdGV4dCAiQURBVDEiIC1hbmNob3IgbncgLXdpZHRoIDEwIC12YXJpYWJsZSBhZGF0c3luYzEgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5zdGF0dXMuc3luYy5hZGF0MiAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICJBREFUMiIgLWFuY2hvciBudyAtd2lkdGggMTAgLXZhcmlhYmxlIGFkYXRzeW5jMiAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLnN0YXR1cy5zeW5jLmFkYXQzIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIkFEQVQzIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgYWRhdHN5bmMzIC1mb250IHRpbWVzCisKK3BhY2sgLnN0YXR1cy5zeW5jLnRleHQgLnN0YXR1cy5zeW5jLmFkYXQxIC5zdGF0dXMuc3luYy5hZGF0MiAuc3RhdHVzLnN5bmMuYWRhdDMgLXNpZGUgdG9wIC1wYWR4IDMgCisKKyMgVGltZWNvZGUKKworZnJhbWUgLnN0YXR1cy50YworbGFiZWwgLnN0YXR1cy50Yy50ZXh0IC10ZXh0ICJUaW1lY29kZSIgLWp1c3RpZnkgbGVmdAorY2hlY2tidXR0b24gLnN0YXR1cy50Yy5idXN5IC1zZWxlY3Rjb2xvciByZWQgLXRleHQgImJ1c3kiIC1hbmNob3IgbncgLXdpZHRoIDEwIC12YXJpYWJsZSB0Y2J1c3kgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5zdGF0dXMudGMub3V0IC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIm91dCIgLWFuY2hvciBudyAtd2lkdGggMTAgLXZhcmlhYmxlIHRjb3V0IC1mb250IHRpbWVzCitjaGVja2J1dHRvbiAuc3RhdHVzLnRjLnZhbGlkIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgInZhbGlkIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgdGN2YWxpZCAtZm9udCB0aW1lcworCitwYWNrIC5zdGF0dXMudGMudGV4dCAuc3RhdHVzLnRjLmJ1c3kgLnN0YXR1cy50Yy5vdXQgLnN0YXR1cy50Yy52YWxpZCAtc2lkZSB0b3AgLXBhZHggMyAKKworIyBTUERJRiBJbgorCitmcmFtZSAuc3RhdHVzLnNwZGlmCitsYWJlbCAuc3RhdHVzLnNwZGlmLnRleHQgLXRleHQgIlNQRElGIEluIiAtanVzdGlmeSBsZWZ0CitsYWJlbCAuc3RhdHVzLnNwZGlmLnNyIC10ZXh0ICItLS4tIGtIeiIgLWFuY2hvciBuIC13aWR0aCAxMCAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLnN0YXR1cy5zcGRpZi5lcnJvciAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICJJbnB1dCBMb2NrIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgc3BkaWZlcnIgLWZvbnQgdGltZXMKKworcGFjayAuc3RhdHVzLnNwZGlmLnRleHQgLnN0YXR1cy5zcGRpZi5zciAuc3RhdHVzLnNwZGlmLmVycm9yIC1zaWRlIHRvcCAtcGFkeCAzIAorCitwYWNrIC5zdGF0dXMuc3IgLnN0YXR1cy5sb2NrIC5zdGF0dXMuc3luYyAuc3RhdHVzLnRjIC5zdGF0dXMuc3BkaWYgLXNpZGUgbGVmdCAtZmlsbCB4IC1hbmNob3IgbiAtZXhwYW5kIDEKKworCisjCisjIENPTlRST0wgCisjCisKK3Byb2Mgc2V0cHJvZiB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHNwcHJvZgorICAgIGV4ZWMgJENUUkxQUk9HIHBybyAkc3Bwcm9mCit9CisKK3Byb2Mgc2V0ZW1waCB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHNwZW1waAorICAgIGV4ZWMgJENUUkxQUk9HIGVtcGhhc2lzICRzcGVtcGgKK30KKworcHJvYyBzZXRub2F1ZCB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHNwbm9hdWQKKyAgICBleGVjICRDVFJMUFJPRyBkb2xieSAkc3Bub2F1ZAorfQorCitwcm9jIHNldG9wdGljYWwge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCBzcG9wdGljYWwKKyAgICBleGVjICRDVFJMUFJPRyBvcHRvdXQgJHNwb3B0aWNhbAorfQorCitwcm9jIHNldHNwZGlmaW4ge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCBzcGRpZmluCisgICAgZXhlYyAkQ1RSTFBST0cgc3BkaWZpbiBbZXhwciAkc3BkaWZpbiAtIDFdCit9CisKK3Byb2Mgc2V0c3luY3NvdXJjZSB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHN5bmNzb3VyY2UKKyAgICBleGVjICRDVFJMUFJPRyBzeW5jcmVmIFtleHByICRzeW5jc291cmNlIC0xXQorfQorCisKK3Byb2Mgc2V0bWFzdGVyIHt9IHsKKyAgICBnbG9iYWwgQ1RSTFBST0cKKyAgICBnbG9iYWwgbWFzdGVyCisgICAgZXhlYyAkQ1RSTFBST0cgbWFzdGVyICRtYXN0ZXIKK30KKworcHJvYyBzZXR3b3JkY2xvY2sge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCB3b3JkY2xvY2sKKyAgICBleGVjICRDVFJMUFJPRyB3b3JkY2xvY2sgJHdvcmRjbG9jaworfQorCitwcm9jIHNldGFkYXQxY2Qge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCBhZGF0MWNkCisgICAgZXhlYyAkQ1RSTFBST0cgYWRhdDFjZCAkYWRhdDFjZAorfQorCisKK2ZyYW1lIC5jb250cm9sCisKKyMgU1BESUYgSW4gJiBTUERJRiBPdXQKKworCitmcmFtZSAuY29udHJvbC5zcGRpZgorCitmcmFtZSAuY29udHJvbC5zcGRpZi5pbgorbGFiZWwgLmNvbnRyb2wuc3BkaWYuaW4udGV4dCAtdGV4dCAiU1BESUYgSW4iIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5jb250cm9sLnNwZGlmLmluLmlucHV0MSAtdGV4dCAiT3B0aWNhbCIgLWFuY2hvciBudyAtd2lkdGggMTMgLXZhcmlhYmxlIHNwZGlmaW4gLXZhbHVlIDEgLWNvbW1hbmQgc2V0c3BkaWZpbiAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworcmFkaW9idXR0b24gLmNvbnRyb2wuc3BkaWYuaW4uaW5wdXQyIC10ZXh0ICJDb2F4aWFsIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgc3BkaWZpbiAtdmFsdWUgMiAtY29tbWFuZCBzZXRzcGRpZmluIC1zZWxlY3Rjb2xvciBibHVlIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuY29udHJvbC5zcGRpZi5pbi5pbnB1dDMgLXRleHQgIkludGVybiAiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzcGRpZmluIC1jb21tYW5kIHNldHNwZGlmaW4gLXZhbHVlIDMgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKKworY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYuaW4uYWRhdDFjZCAtdGV4dCAiQURBVDEgSW50ZXJuIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgYWRhdDFjZCAtY29tbWFuZCBzZXRhZGF0MWNkIC1zZWxlY3Rjb2xvciBibHVlIC1mb250IHRpbWVzCisKK3BhY2sgLmNvbnRyb2wuc3BkaWYuaW4udGV4dCAuY29udHJvbC5zcGRpZi5pbi5pbnB1dDEgLmNvbnRyb2wuc3BkaWYuaW4uaW5wdXQyIC5jb250cm9sLnNwZGlmLmluLmlucHV0MyAuY29udHJvbC5zcGRpZi5pbi5hZGF0MWNkCisKK2xhYmVsIC5jb250cm9sLnNwZGlmLnNwYWNlCisKK2ZyYW1lIC5jb250cm9sLnNwZGlmLm91dAorbGFiZWwgLmNvbnRyb2wuc3BkaWYub3V0LnRleHQgLXRleHQgIlNQRElGIE91dCIgLWp1c3RpZnkgbGVmdAorY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYub3V0LnBybyAtdGV4dCAiUHJvZmVzc2lvbmFsIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgc3Bwcm9mIC1jb21tYW5kIHNldHByb2YgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5jb250cm9sLnNwZGlmLm91dC5lbXBoYXNpcyAtdGV4dCAiRW1waGFzaXMiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzcGVtcGggLWNvbW1hbmQgc2V0ZW1waCAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYub3V0LmRvbGJ5IC10ZXh0ICJOb0F1ZGlvIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgc3Bub2F1ZCAtY29tbWFuZCBzZXRub2F1ZCAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYub3V0Lm9wdG91dCAtdGV4dCAiT3B0aWNhbCBPdXQiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzcG9wdGljYWwgLWNvbW1hbmQgc2V0b3B0aWNhbCAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworCitwYWNrIC5jb250cm9sLnNwZGlmLm91dC5vcHRvdXQgLmNvbnRyb2wuc3BkaWYub3V0LmRvbGJ5IC5jb250cm9sLnNwZGlmLm91dC5lbXBoYXNpcyAuY29udHJvbC5zcGRpZi5vdXQucHJvIC5jb250cm9sLnNwZGlmLm91dC50ZXh0IC1zaWRlIGJvdHRvbQorCitwYWNrIC5jb250cm9sLnNwZGlmLmluIC5jb250cm9sLnNwZGlmLnNwYWNlIC5jb250cm9sLnNwZGlmLm91dCAtc2lkZSB0b3AgLWZpbGwgeSAtcGFkeCAzIC1leHBhbmQgMQorCisjIFN5bmMgTW9kZSAmIFN5bmMgU291cmNlCisKK2ZyYW1lIC5jb250cm9sLnN5bmMKK2ZyYW1lIC5jb250cm9sLnN5bmMubW9kZQorbGFiZWwgLmNvbnRyb2wuc3luYy5tb2RlLnRleHQgLXRleHQgIlN5bmMgTW9kZSIgLWp1c3RpZnkgbGVmdAorY2hlY2tidXR0b24gLmNvbnRyb2wuc3luYy5tb2RlLm1hc3RlciAtdGV4dCAiTWFzdGVyIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgbWFzdGVyIC1jb21tYW5kIHNldG1hc3RlciAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLmNvbnRyb2wuc3luYy5tb2RlLndjIC10ZXh0ICJXb3JkY2xvY2siIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSB3b3JkY2xvY2sgLWNvbW1hbmQgc2V0d29yZGNsb2NrIC1zZWxlY3Rjb2xvciBibHVlIC1mb250IHRpbWVzCisKK3BhY2sgLmNvbnRyb2wuc3luYy5tb2RlLnRleHQgLmNvbnRyb2wuc3luYy5tb2RlLm1hc3RlciAuY29udHJvbC5zeW5jLm1vZGUud2MKKworbGFiZWwgLmNvbnRyb2wuc3luYy5zcGFjZQorCitmcmFtZSAuY29udHJvbC5zeW5jLnNyYworbGFiZWwgLmNvbnRyb2wuc3luYy5zcmMudGV4dCAtdGV4dCAiU3luYyBTb3VyY2UiIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MSAtdGV4dCAiQURBVDEiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC12YWx1ZSAxIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MiAtdGV4dCAiQURBVDIiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC12YWx1ZSAyIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MyAtdGV4dCAiQURBVDMiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXZhbHVlIDMgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0NCAtdGV4dCAiU1BESUYiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXZhbHVlIDQgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKKworcGFjayAuY29udHJvbC5zeW5jLnNyYy5pbnB1dDQgLmNvbnRyb2wuc3luYy5zcmMuaW5wdXQzIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MiAuY29udHJvbC5zeW5jLnNyYy5pbnB1dDEgLmNvbnRyb2wuc3luYy5zcmMudGV4dCAtc2lkZSBib3R0b20KKworcGFjayAuY29udHJvbC5zeW5jLm1vZGUgLmNvbnRyb2wuc3luYy5zcGFjZSAuY29udHJvbC5zeW5jLnNyYyAtc2lkZSB0b3AgLWZpbGwgeSAtcGFkeCAzIC1leHBhbmQgMQorCitsYWJlbCAuY29udHJvbC5zcGFjZSAtdGV4dCAiIiAtd2lkdGggMTAKKworIyBCdWZmZXIgU2l6ZQorCitmcmFtZSAuY29udHJvbC5idWYKK2xhYmVsIC5jb250cm9sLmJ1Zi50ZXh0IC10ZXh0ICJCdWZmZXIgU2l6ZSAoTGF0ZW5jeSkiIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iMSAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI2NCAoMS41IG1zKSIgLXdpZHRoIDEzIC1hbmNob3IgbncgLXZhcmlhYmxlIHNzcmF0ZSAtdmFsdWUgMSAtZm9udCB0aW1lcworcmFkaW9idXR0b24gLmNvbnRyb2wuYnVmLmIyIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIjEyOCAoMyBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDIgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iMyAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICIyNTYgKDYgbXMpIiAtd2lkdGggMTMgLWFuY2hvciBudyAtdmFyaWFibGUgc3NyYXRlIC12YWx1ZSAzIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuY29udHJvbC5idWYuYjQgLXNlbGVjdGNvbG9yIHJlZCAtdGV4dCAiNTEyICgxMiBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDQgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iNSAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICIxMDI0ICgyMyBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iNiAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICIyMDQ4ICg0NiBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDYgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iNyAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI0MDk2ICg5MyBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDcgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iOCAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI4MTkyICgxODYgbXMpIiAtd2lkdGggMTMgLWFuY2hvciBudyAtdmFyaWFibGUgc3NyYXRlIC12YWx1ZSA4IC1mb250IHRpbWVzCisKK3BhY2sgLmNvbnRyb2wuYnVmLnRleHQgLmNvbnRyb2wuYnVmLmIxIC5jb250cm9sLmJ1Zi5iMiAuY29udHJvbC5idWYuYjMgLmNvbnRyb2wuYnVmLmI0IC5jb250cm9sLmJ1Zi5iNSAuY29udHJvbC5idWYuYjYgLmNvbnRyb2wuYnVmLmI3IC5jb250cm9sLmJ1Zi5iOCAtc2lkZSB0b3AgLXBhZHggMyAKKworIyBPZmZzZXQKKworZnJhbWUgLmNvbnRyb2wub2Zmc2V0CisKK2ZyYW1lIC5jb250cm9sLm9mZnNldC5pbgorbGFiZWwgLmNvbnRyb2wub2Zmc2V0LmluLnRleHQgLXRleHQgIk9mZnNldCBJbiIgLWp1c3RpZnkgbGVmdAorbGFiZWwgLmNvbnRyb2wub2Zmc2V0LmluLm9mZjAgLXRleHQgImRldlwjMDogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKK2xhYmVsIC5jb250cm9sLm9mZnNldC5pbi5vZmYxIC10ZXh0ICJkZXZcIzE6IC0iIC1hbmNob3IgbncgLXdpZHRoIDEwIC1mb250IHRpbWVzCitsYWJlbCAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMiAtdGV4dCAiZGV2XCMyOiAtIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtZm9udCB0aW1lcworbGFiZWwgLmNvbnRyb2wub2Zmc2V0LmluLm9mZjMgLXRleHQgImRldlwjMzogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKKworcGFjayAuY29udHJvbC5vZmZzZXQuaW4udGV4dCAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMCAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMSAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMiAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMworCitsYWJlbCAuY29udHJvbC5vZmZzZXQuc3BhY2UKKworZnJhbWUgLmNvbnRyb2wub2Zmc2V0Lm91dAorbGFiZWwgLmNvbnRyb2wub2Zmc2V0Lm91dC50ZXh0IC10ZXh0ICJPZmZzZXQgT3V0IiAtanVzdGlmeSBsZWZ0CitsYWJlbCAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgLXRleHQgImRldlwjMDogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKK2xhYmVsIC5jb250cm9sLm9mZnNldC5vdXQub2ZmMSAtdGV4dCAiZGV2XCMxOiAtIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtZm9udCB0aW1lcworbGFiZWwgLmNvbnRyb2wub2Zmc2V0Lm91dC5vZmYyIC10ZXh0ICJkZXZcIzI6IC0iIC1hbmNob3IgbncgLXdpZHRoIDEwIC1mb250IHRpbWVzCitsYWJlbCAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgLXRleHQgImRldlwjMzogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKKworcGFjayAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgLmNvbnRyb2wub2Zmc2V0Lm91dC5vZmYyIC5jb250cm9sLm9mZnNldC5vdXQub2ZmMSAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgLmNvbnRyb2wub2Zmc2V0Lm91dC50ZXh0IC1zaWRlIGJvdHRvbQorCitwYWNrIC5jb250cm9sLm9mZnNldC5pbiAuY29udHJvbC5vZmZzZXQuc3BhY2UgLmNvbnRyb2wub2Zmc2V0Lm91dCAtc2lkZSB0b3AgLWZpbGwgeSAtcGFkeCAzIC1leHBhbmQgMQorCisKK3BhY2sgLmNvbnRyb2wuc3BkaWYgLmNvbnRyb2wuc3luYyAuY29udHJvbC5zcGFjZSAuY29udHJvbC5idWYgLmNvbnRyb2wub2Zmc2V0IC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtYW5jaG9yIG4gLWV4cGFuZCAxCisKKworbGFiZWwgLnN0YXR1c3RleHQgLXRleHQgU3RhdHVzIC1qdXN0aWZ5IGNlbnRlciAtcmVsaWVmIHJpZGdlCitsYWJlbCAuY29udHJvbHRleHQgLXRleHQgQ29udHJvbCAtanVzdGlmeSBjZW50ZXIgLXJlbGllZiByaWRnZQorCitsYWJlbCAuc3RhdHVzc3BhY2UKK2xhYmVsIC5jb250cm9sc3BhY2UKKworcGFjayAuc3RhdHVzdGV4dCAuc3RhdHVzIC5zdGF0dXNzcGFjZSAuY29udHJvbHRleHQgLmNvbnRyb2wgLmNvbnRyb2xzcGFjZSAtc2lkZSB0b3AgLWFuY2hvciBudyAtZmlsbCBib3RoIC1leHBhbmQgMQorCisKK3Byb2MgZ2V0X2JpdCB7b3V0cHV0IHNzdHJ9IHsKKyAgICBzZXQgaWR4MSBbc3RyaW5nIGxhc3QgW2NvbmNhdCAkc3N0ciAxXSAkb3V0cHV0XQorICAgIHNldCBpZHgxIFtleHByICRpZHgxICE9IC0xXQorICAgIHJldHVybiAkaWR4MQorfQorCitwcm9jIGdldF92YWwge291dHB1dCBzc3RyfSB7CisgICAgc2V0IHZhbCBbc3RyaW5nIHdvcmRlbmQgJG91dHB1dCBbc3RyaW5nIGxhc3QgJHNzdHIgJG91dHB1dF1dIAorICAgIHNldCB2YWwgW3N0cmluZyByYW5nZSAkb3V0cHV0ICR2YWwgW2V4cHIgJHZhbCsxXV0KKyAgICByZXR1cm4gJHZhbAorfQorCitwcm9jIGdldF92YWwyIHtvdXRwdXQgc3N0cn0geworICAgIHNldCB2YWwgW3N0cmluZyB3b3JkZW5kICRvdXRwdXQgW3N0cmluZyBmaXJzdCAkc3N0ciAkb3V0cHV0XV0gCisgICAgc2V0IHZhbCBbc3RyaW5nIHJhbmdlICRvdXRwdXQgJHZhbCBbZXhwciAkdmFsKzJdXQorICAgIHJldHVybiAkdmFsCit9CisKK3Byb2MgZ2V0X2NvbnRyb2wge30geworICAgIGdsb2JhbCBzcHByb2YKKyAgICBnbG9iYWwgc3BlbXBoCisgICAgZ2xvYmFsIHNwbm9hdWQKKyAgICBnbG9iYWwgc3BvcHRpY2FsCisgICAgZ2xvYmFsIHNwZGlmaW4KKyAgICBnbG9iYWwgc3NyYXRlCisgICAgZ2xvYmFsIG1hc3RlcgorICAgIGdsb2JhbCB3b3JkY2xvY2sKKyAgICBnbG9iYWwgc3luY3NvdXJjZQorICAgIGdsb2JhbCBDVFJMUFJPRworCisgICAgc2V0IGYgW29wZW4gInwgJENUUkxQUk9HIGNvbnRyb2wiIHIrXQorICAgIHNldCBvb28gW3JlYWQgJGYgMTAwMF0KKyAgICBjbG9zZSAkZgorIyAgICBwdXRzICRvb28KKworICAgIHNldCBzcHByb2YgWyBnZXRfYml0ICRvb28gInBybyJdCisgICAgc2V0IHNwZW1waCBbIGdldF9iaXQgJG9vbyAiZW1waGFzaXMiXQorICAgIHNldCBzcG5vYXVkIFsgZ2V0X2JpdCAkb29vICJkb2xieSJdCisgICAgc2V0IHNwb3B0aWNhbCBbIGdldF9iaXQgJG9vbyAib3B0X291dCJdCisgICAgc2V0IHNwZGlmaW4gWyBleHByIFsgZ2V0X3ZhbCAkb29vICJzcGRpZl9pbiJdICsgMV0KKyAgICBzZXQgc3NyYXRlIFsgZXhwciBbIGdldF92YWwgJG9vbyAibGF0ZW5jeSJdICsgMV0KKyAgICBzZXQgbWFzdGVyIFsgZXhwciBbIGdldF92YWwgJG9vbyAibWFzdGVyIl1dCisgICAgc2V0IHdvcmRjbG9jayBbIGV4cHIgWyBnZXRfdmFsICRvb28gIndvcmRjbG9jayJdXQorICAgIHNldCBzeW5jc291cmNlIFsgZXhwciBbIGdldF92YWwgJG9vbyAic3luY19yZWYiXSArIDFdCit9CisKK3Byb2MgZ2V0X3N0YXR1cyB7fSB7CisgICAgZ2xvYmFsIHNyYXRlCisgICAgZ2xvYmFsIGN0cmxjb20KKworICAgIGdsb2JhbCBhZGF0bG9jazEKKyAgICBnbG9iYWwgYWRhdGxvY2syCisgICAgZ2xvYmFsIGFkYXRsb2NrMworCisgICAgZ2xvYmFsIGFkYXRzeW5jMQorICAgIGdsb2JhbCBhZGF0c3luYzIKKyAgICBnbG9iYWwgYWRhdHN5bmMzCisKKyAgICBnbG9iYWwgdGNidXN5CisgICAgZ2xvYmFsIHRjb3V0CisgICAgZ2xvYmFsIHRjdmFsaWQKKworICAgIGdsb2JhbCBzcGRpZmVycgorICAgIGdsb2JhbCBjcnlzdGFsCisgICAgZ2xvYmFsIC5zdGF0dXMuc3BkaWYudGV4dAorICAgIGdsb2JhbCBDVFJMUFJPRworCisKKyAgICBzZXQgZiBbb3BlbiAifCAkQ1RSTFBST0cgc3RhdHVzIiByK10KKyAgICBzZXQgb29vIFtyZWFkICRmIDEwMDBdCisgICAgY2xvc2UgJGYKKyMgICAgcHV0cyAkb29vCisKKyMgc2FtcGxlcmF0ZQorCisgICAgc2V0IGlkeDEgW3N0cmluZyBsYXN0ICJzcjQ4IDEiICRvb29dCisgICAgc2V0IGlkeDIgW3N0cmluZyBsYXN0ICJkb3VibGVzcGVlZCAxIiAkb29vXQorICAgIGlmIHskaWR4MSA+PSAwfSB7CisJc2V0IGZhY3QxIDQ4MDAwCisgICAgfSBlbHNlIHsKKwlzZXQgZmFjdDEgNDQxMDAKKyAgICB9CisKKyAgICBpZiB7JGlkeDIgPj0gMH0geworCXNldCBmYWN0MiAyCisgICAgfSBlbHNlIHsKKwlzZXQgZmFjdDIgMQorICAgIH0KKyAgICBzZXQgc3JhdGUgW2V4cHIgJGZhY3QxICogJGZhY3QyXQorIyAgIEFEQVQgbG9jaworCisgICAgc2V0IHZhbCBbZ2V0X3ZhbCAkb29vIGxvY2ttYXNrXQorICAgIHNldCBhZGF0bG9jazEgMAorICAgIHNldCBhZGF0bG9jazIgMAorICAgIHNldCBhZGF0bG9jazMgMAorICAgIGlmIHtbZXhwciAkdmFsICYgMV19IHsKKyAgICAgICBzZXQgYWRhdGxvY2szIDEKKyAgICB9CisgICAgaWYge1tleHByICR2YWwgJiAyXX0geworICAgICAgIHNldCBhZGF0bG9jazIgMQorICAgIH0KKyAgICBpZiB7W2V4cHIgJHZhbCAmIDRdfSB7CisgICAgICAgc2V0IGFkYXRsb2NrMSAxCisgICAgfQorCisjICBBREFUIHN5bmMKKyAgICBzZXQgdmFsIFtnZXRfdmFsICRvb28gc3luY21hc2tdCisgICAgc2V0IGFkYXRzeW5jMSAwCisgICAgc2V0IGFkYXRzeW5jMiAwCisgICAgc2V0IGFkYXRzeW5jMyAwCisKKyAgICBpZiB7W2V4cHIgJHZhbCAmIDFdfSB7CisgICAgICAgc2V0IGFkYXRzeW5jMyAxCisgICAgfQorICAgIGlmIHtbZXhwciAkdmFsICYgMl19IHsKKyAgICAgICBzZXQgYWRhdHN5bmMyIDEKKyAgICB9CisgICAgaWYge1tleHByICR2YWwgJiA0XX0geworICAgICAgIHNldCBhZGF0c3luYzEgMQorICAgIH0KKworIyBUQyBidXN5CisKKyAgICBzZXQgdGNidXN5IFtnZXRfYml0ICRvb28gImJ1c3kiXQorICAgIHNldCB0Y291dCBbZ2V0X2JpdCAkb29vICJvdXQiXQorICAgIHNldCB0Y3ZhbGlkIFtnZXRfYml0ICRvb28gInZhbGlkIl0KKyAgICBzZXQgc3BkaWZlcnIgW2V4cHIgW2dldF9iaXQgJG9vbyAic3BkaWZfZXJyb3IiXSA9PSAwXQorCisjICAwMDA9NjRrSHosIDEwMD04OC4ya0h6LCAwMTE9OTZrSHoKKyMgIDExMT0zMmtIeiwgMTEwPTQ0LjFrSHosIDEwMT00OGtIegorCisgICAgc2V0IHZhbCBbZ2V0X3ZhbCAkb29vIGNyeXN0YWxyYXRlXQorCisgICAgc2V0IGNyeXN0YWwgIi0tLi0ga0h6IgorICAgIGlmIHskdmFsID09IDB9IHsKKyAgICAgICAgc2V0IGNyeXN0YWwgIjY0IGtIeiIKKyAgICB9CisgICAgaWYgeyR2YWwgPT0gNH0geworICAgICAgICBzZXQgY3J5c3RhbCAiODguMiBrSHoiCisgICAgfQorICAgIGlmIHskdmFsID09IDN9IHsKKyAgICAgICAgc2V0IGNyeXN0YWwgIjk2IGtIeiIKKyAgICB9CisgICAgaWYgeyR2YWwgPT0gN30geworICAgICAgICBzZXQgY3J5c3RhbCAiMzIga0h6IgorICAgIH0KKyAgICBpZiB7JHZhbCA9PSA2fSB7CisgICAgICAgIHNldCBjcnlzdGFsICI0NC4xIGtIeiIKKyAgICB9CisgICAgaWYgeyR2YWwgPT0gNX0geworICAgICAgICBzZXQgY3J5c3RhbCAiNDgga0h6IgorICAgIH0KKyAgICAuc3RhdHVzLnNwZGlmLnNyIGNvbmZpZ3VyZSAtdGV4dCAkY3J5c3RhbAorfQorCitwcm9jIGdldF9vZmZzZXQge30geworICAgIGdsb2JhbCBpbm9mZnNldAorICAgIGdsb2JhbCBvdXRvZmZzZXQKKyAgICBnbG9iYWwgQ1RSTFBST0cKKworICAgIHNldCBmIFtvcGVuICJ8ICRDVFJMUFJPRyBtaXgiIHIrXQorICAgIHNldCBvb28gW3JlYWQgJGYgMTAwMF0KKyAgICBjbG9zZSAkZgorIyAgICBwdXRzICRvb28KKworICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjAgY29uZmlndXJlIC10ZXh0ICJkZXZcIzA6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgY29uZmlndXJlIC10ZXh0ICJkZXZcIzA6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMCBjb25maWd1cmUgLXRleHQgImRldlwjMDogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgY29uZmlndXJlIC10ZXh0ICJkZXZcIzA6IC0iCisgICAgfQorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjEgY29uZmlndXJlIC10ZXh0ICJkZXZcIzE6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjEgY29uZmlndXJlIC10ZXh0ICJkZXZcIzE6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMSBjb25maWd1cmUgLXRleHQgImRldlwjMTogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjEgY29uZmlndXJlIC10ZXh0ICJkZXZcIzE6IC0iCisgICAgfQorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjIgY29uZmlndXJlIC10ZXh0ICJkZXZcIzI6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjIgY29uZmlndXJlIC10ZXh0ICJkZXZcIzI6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMiBjb25maWd1cmUgLXRleHQgImRldlwjMjogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjIgY29uZmlndXJlIC10ZXh0ICJkZXZcIzI6IC0iCisgICAgfQorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjMgY29uZmlndXJlIC10ZXh0ICJkZXZcIzM6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgY29uZmlndXJlIC10ZXh0ICJkZXZcIzM6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMyBjb25maWd1cmUgLXRleHQgImRldlwjMzogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgY29uZmlndXJlIC10ZXh0ICJkZXZcIzM6IC0iCisgICAgfQorfQorCisKK3Byb2MgZ2V0X2FsbCB7fSB7CitnZXRfc3RhdHVzCitnZXRfY29udHJvbAorZ2V0X29mZnNldAorfQorCisjIG1haW4KK3doaWxlIHsxfSB7CisgIGFmdGVyIDIwMAorICBnZXRfYWxsCisgIHVwZGF0ZQorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29sbzEgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9zb2xvMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjUzZDQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29sbzEKQEAgLTAsMCArMSw3MCBAQAorUmVjb3JkaW5nCistLS0tLS0tLS0KKworUmVjb3JkaW5nIGRvZXMgbm90IHdvcmsgb24gdGhlIGF1dGhvcidzIGNhcmQsIGJ1dCB0aGVyZQoraXMgYXQgbGVhc3Qgb25lIHJlcG9ydCBvZiBpdCB3b3JraW5nIG9uIGxhdGVyIHNpbGljb24uCitUaGUgY2hpcCBiZWhhdmVzIGRpZmZlcmVudGx5IHRoYW4gZGVzY3JpYmVkIGluIHRoZSBkYXRhIHNoZWV0LAorbGlrZWx5IGR1ZSB0byBhIGNoaXAgYnVnLiBXb3JraW5nIGFyb3VuZCB0aGlzIHdvdWxkIHJlcXVpcmUKK3RoZSBoZWxwIG9mIEVTUyAoZm9yIGV4YW1wbGUgYnkgcHVibGlzaGluZyBhbiBlcnJhdGEgc2hlZXQpLAorYnV0IEVTUyBoYXMgbm90IGRvbmUgc28gc28gZmFyLgorCitBbHNvLCB0aGUgY2hpcCBvbmx5IHN1cHBvcnRzIDI0IGJpdCBhZGRyZXNzZXMgZm9yIHJlY29yZGluZywKK3doaWNoIG1lYW5zIGl0IGNhbm5vdCB3b3JrIG9uIHNvbWUgQWxwaGEgbWFpbmJvYXJkcy4KKworCisvcHJvYy9zb3VuZCwgL2Rldi9zbmRzdGF0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9wcm9jL3NvdW5kIGFuZCAvZGV2L3NuZHN0YXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKK2RyaXZlci4gVG8gZmluZCBvdXQgd2hldGhlciB0aGUgZHJpdmVyIHN1Y2NlZWRlZCBsb2FkaW5nLAorY2hlY2sgdGhlIGtlcm5lbCBsb2cgKGRtZXNnKS4KKworCitBTGF3L3VMYXcgc2FtcGxlIGZvcm1hdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBTGF3L3VMYXcgc2FtcGxlIGZvcm1hdHMuCitBTGF3IGlzIHRoZSBkZWZhdWx0IG1vZGUgd2hlbiBvcGVuaW5nIGEgc291bmQgZGV2aWNlCit1c2luZyBPU1MvRnJlZS4gVGhlIHJlYXNvbiBmb3IgdGhlIGxhY2sgb2Ygc3VwcG9ydCBpcwordGhhdCB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBmb3JtYXRzLCBhbmQgYWRkaW5nCitjb252ZXJzaW9uIHJvdXRpbmVzIHRvIHRoZSBrZXJuZWwgd291bGQgbGVhZCB0byB2ZXJ5IHVnbHkKK2NvZGUgaW4gdGhlIHByZXNlbmNlIG9mIHRoZSBtbWFwIGludGVyZmFjZSB0byB0aGUgZHJpdmVyLgorQW5kIHNpbmNlIHhxdWFrZSB1c2VzIG1tYXAsIG1tYXAgaXMgY29uc2lkZXJlZCBpbXBvcnRhbnQgOi0pCithbmQgbm8gc2FuZSBhcHBsaWNhdGlvbiB1c2VzIEFMYXcvdUxhdyB0aGVzZSBkYXlzIGFueXdheS4KK0luIHNob3J0LCBwbGF5aW5nIGEgU3VuIC5hdSBmaWxlIGFzIGZvbGxvd3M6CisKK2NhdCBteV9maWxlLmF1ID4gL2Rldi9kc3AKKworZG9lcyBub3Qgd29yay4gSW5zdGVhZCwgeW91IG1heSB1c2UgdGhlIHBsYXkgc2NyaXB0IGZyb20KK0NocmlzIEJhZ3dlbGwncyBzb3gtMTIuMTQgcGFja2FnZSAob3IgbGF0ZXIsIGF2YWlsYWJsZSBmcm9tIHRoZSBVUkwKK2JlbG93KSB0byBwbGF5IG1hbnkgZGlmZmVyZW50IGF1ZGlvIGZpbGUgZm9ybWF0cy4KK1RoZSBzY3JpcHQgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhdWRpbyBmb3JtYXQKK2FuZCBkb2VzIGRvIGF1ZGlvIGNvbnZlcnNpb25zIGlmIG5lY2Vzc2FyeS4KK2h0dHA6Ly9ob21lLnNwcnluZXQuY29tL3NwcnluZXQvY2JhZ3dlbGwvcHJvamVjdHMuaHRtbAorCisKK0Jsb2NraW5nIHZzLiBub25ibG9ja2luZyBJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSBPU1MvRnJlZSB0aGlzIGRyaXZlciBob25vdXJzIHRoZSBPX05PTkJMT0NLIGZpbGUgZmxhZworbm90IG9ubHkgZHVyaW5nIG9wZW4sIGJ1dCBhbHNvIGR1cmluZyByZWFkIGFuZCB3cml0ZS4KK1RoaXMgaXMgYW4gZWZmb3J0IHRvIG1ha2UgdGhlIHNvdW5kIGRyaXZlciBpbnRlcmZhY2UgbW9yZQorcmVndWxhci4gVGltaWRpdHkgaGFzIHByb2JsZW1zIHdpdGggdGhpczsgYSBwYXRjaAoraXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5pZmUuZWUuZXRoei5jaC9+c2FpbGVyL2xpbnV4L3BjaWF1ZGlvLmh0bWwuCisoVGltaWRpdHkgcGF0Y2hlZCB3aWxsIGFsc28gcnVuIG9uIE9TUy9GcmVlKS4KKworCitNSURJIFVBUlQKKy0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGEgc2ltcGxlIE1JREkgVUFSVCBpbnRlcmZhY2UsIHdpdGgKK25vIGlvY3RsJ3Mgc3VwcG9ydGVkLgorCisKK01JREkgc3ludGhlc2l6ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhcmQgaGFzIGFuIE9QTCBjb21wYXRpYmxlIEZNIHN5bnRoZXNpemVyLgorCitUaG9tYXMgU2FpbGVyCit0LnNhaWxlckBhbHVtbmkuZXRoei5jaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29uaWN2aWJlcyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3NvbmljdmliZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkZWUyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3NvbmljdmliZXMKQEAgLTAsMCArMSw4MSBAQAorL3Byb2Mvc291bmQsIC9kZXYvc25kc3RhdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvcHJvYy9zb3VuZCBhbmQgL2Rldi9zbmRzdGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlCitkcml2ZXIuIFRvIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGRyaXZlciBzdWNjZWVkZWQgbG9hZGluZywKK2NoZWNrIHRoZSBrZXJuZWwgbG9nIChkbWVzZykuCisKKworQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzLgorQUxhdyBpcyB0aGUgZGVmYXVsdCBtb2RlIHdoZW4gb3BlbmluZyBhIHNvdW5kIGRldmljZQordXNpbmcgT1NTL0ZyZWUuIFRoZSByZWFzb24gZm9yIHRoZSBsYWNrIG9mIHN1cHBvcnQgaXMKK3RoYXQgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UgZm9ybWF0cywgYW5kIGFkZGluZworY29udmVyc2lvbiByb3V0aW5lcyB0byB0aGUga2VybmVsIHdvdWxkIGxlYWQgdG8gdmVyeSB1Z2x5Citjb2RlIGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgbW1hcCBpbnRlcmZhY2UgdG8gdGhlIGRyaXZlci4KK0FuZCBzaW5jZSB4cXVha2UgdXNlcyBtbWFwLCBtbWFwIGlzIGNvbnNpZGVyZWQgaW1wb3J0YW50IDotKQorYW5kIG5vIHNhbmUgYXBwbGljYXRpb24gdXNlcyBBTGF3L3VMYXcgdGhlc2UgZGF5cyBhbnl3YXkuCitJbiBzaG9ydCwgcGxheWluZyBhIFN1biAuYXUgZmlsZSBhcyBmb2xsb3dzOgorCitjYXQgbXlfZmlsZS5hdSA+IC9kZXYvZHNwCisKK2RvZXMgbm90IHdvcmsuIEluc3RlYWQsIHlvdSBtYXkgdXNlIHRoZSBwbGF5IHNjcmlwdCBmcm9tCitDaHJpcyBCYWd3ZWxsJ3Mgc294LTEyLjE0IHBhY2thZ2UgKGF2YWlsYWJsZSBmcm9tIHRoZSBVUkwKK2JlbG93KSB0byBwbGF5IG1hbnkgZGlmZmVyZW50IGF1ZGlvIGZpbGUgZm9ybWF0cy4KK1RoZSBzY3JpcHQgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhdWRpbyBmb3JtYXQKK2FuZCBkb2VzIGRvIGF1ZGlvIGNvbnZlcnNpb25zIGlmIG5lY2Vzc2FyeS4KK2h0dHA6Ly9ob21lLnNwcnluZXQuY29tL3NwcnluZXQvY2JhZ3dlbGwvcHJvamVjdHMuaHRtbAorCisKK0Jsb2NraW5nIHZzLiBub25ibG9ja2luZyBJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSBPU1MvRnJlZSB0aGlzIGRyaXZlciBob25vdXJzIHRoZSBPX05PTkJMT0NLIGZpbGUgZmxhZworbm90IG9ubHkgZHVyaW5nIG9wZW4sIGJ1dCBhbHNvIGR1cmluZyByZWFkIGFuZCB3cml0ZS4KK1RoaXMgaXMgYW4gZWZmb3J0IHRvIG1ha2UgdGhlIHNvdW5kIGRyaXZlciBpbnRlcmZhY2UgbW9yZQorcmVndWxhci4gVGltaWRpdHkgaGFzIHByb2JsZW1zIHdpdGggdGhpczsgYSBwYXRjaAoraXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5pZmUuZWUuZXRoei5jaC9+c2FpbGVyL2xpbnV4L3BjaWF1ZGlvLmh0bWwuCisoVGltaWRpdHkgcGF0Y2hlZCB3aWxsIGFsc28gcnVuIG9uIE9TUy9GcmVlKS4KKworCitNSURJIFVBUlQKKy0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGEgc2ltcGxlIE1JREkgVUFSVCBpbnRlcmZhY2UsIHdpdGgKK25vIGlvY3RsJ3Mgc3VwcG9ydGVkLgorCisKK01JREkgc3ludGhlc2l6ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhcmQgYm90aCBoYXMgYW4gT1BMIGNvbXBhdGlibGUgRk0gc3ludGhlc2l6ZXIgYXMgd2VsbCBhcworYSB3YXZldGFibGUgc3ludGhlc2l6ZXIuCisKK0kgaGF2ZW4ndCBtYW5hZ2VkIHNvIGZhciB0byBnZXQgdGhlIE9QTCBzeW50aCBydW5uaW5nLgorCitVc2luZyB0aGUgd2F2ZXRhYmxlIHN5bnRoZXNpemVyIHJlcXVpcmVzIGFsbG9jYXRpbmcKKzEtNE1CIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnksIHdoaWNoIGlzbid0IHBvc3NpYmxlCitjdXJyZW50bHkgb24gTGludXggd2l0aG91dCB1Z2x5IGhhY2tzIGxpa2UgdGhlIGJpZ3BoeXNhcmVhCitwYXRjaC4gVGhlcmVmb3JlLCB0aGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCB3YXZldGFibGUKK3N5bnRoZXNpcy4KKworCitObyBzdXBwb3J0IGZyb20gUzMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitJIGRvIG5vdCBnZXQgYW55IHN1cHBvcnQgZnJvbSBTMy4gVGhlcmVmb3JlLCB0aGUgZHJpdmVyCitzdGlsbCBoYXMgbWFueSBwcm9ibGVtcy4gRm9yIGV4YW1wbGUsIGFsdGhvdWdoIHRoZSBtYW51YWwKK3N0YXRlcyB0aGF0IHRoZSBjaGlwIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgc2FtcGxlCitidWZmZXIgYW55d2hlcmUgaW4gMzJiaXQgYWRkcmVzcyBzcGFjZSwgSSBoYXZlbid0IG1hbmFnZWQgdG8KK2dldCBpdCB3b3JraW5nIHdpdGggYnVmZmVycyBhYm92ZSAxNk0uIFRoZXJlZm9yZSwgdGhlIGNhcmQKK2hhcyB0aGUgc2FtZSBkaXNhZHZhbnRhZ2VzIGFzIElTQSBzb3VuZGNhcmRzLgorCitHaXZlbiB0aGF0IHRoZSBjYXJkIGlzIGFsc28gdmVyeSBub2lzeSwgYW5kIGlmIHlvdSBoYXZlbid0CithbHJlYWR5IGJvdWdodCBpdCwgeW91IHNob3VsZCBzdHJvbmdseSBvcHQgZm9yIG9uZSBvZiB0aGUKK2NvbXBhcmF0aXZlbHkgcHJpY2VkIEVuc29uaXEgcHJvZHVjdHMuCisKKworVGhvbWFzIFNhaWxlcgordC5zYWlsZXJAYWx1bW5pLmV0aHouY2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3VsdHJhc291bmQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy91bHRyYXNvdW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyY2Q1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy91bHRyYXNvdW5kCkBAIC0wLDAgKzEsMzAgQEAKK21vZHByb2JlIHNvdW5kCitpbnNtb2QgYWQxODQ4CitpbnNtb2QgZ3VzIGlvPSogaXJxPSogZG1hPSogLi4uCisKK1RoaXMgbG9hZHMgdGhlIGRyaXZlciBmb3IgdGhlIEdyYXZpcyBVbHRyYXNvdW5kIGZhbWlseSBvZiBzb3VuZCBjYXJkcy4KKworVGhlIGd1cyBtb2R1bGUgdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMKKworaW8JCUkvTyBhZGRyZXNzIG9mIHRoZSBVbHRyYXNvdW5kIGNhcmQgKGVnLiBpbz0weDIyMCkKK2lycQkJSVJRIG9mIHRoZSBTb3VuZCBCbGFzdGVyIGNhcmQgCitkbWEgICAgIAlETUEgY2hhbm5lbCBmb3IgdGhlIFNvdW5kIEJsYXN0ZXIKK2RtYTE2ICAgCTJuZCBETUEgY2hhbm5lbCwgb25seSBuZWVkZWQgZm9yIGZ1bGwgZHVwbGV4IG9wZXJhdGlvbgordHlwZQkJMSBmb3IgUG5QIGNhcmQKK2d1czE2CQkxIGZvciB1c2luZyAxNiBiaXQgc2FtcGxpbmcgZGF1Z2h0ZXIgYm9hcmQKK25vX3dhdmVfZG1hCVNldCB0byBkaXNhYmxlIERNQSB1c2FnZSBmb3Igd2F2ZXRhYmxlIChzZWUgbm90ZSkKK2RiMTYJCT8/PworCisKK25vX3dhdmVfZG1hIG9wdGlvbgorCitUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byBhIHZhbHVlIG9mIDAsIHdoaWNoIGFsbG93cyB0aGUgVWx0cmFzb3VuZCB3YXZldGFibGUKK0RTUCB0byB1c2UgRE1BIGZvciBmb3IgcGxheWJhY2sgYW5kIGRvd25sb2FkaW5nIHNhbXBsZXMuIFRoaXMgaXMgdGhlIHNhbWUKK2FzIHRoZSBvbGQgYmVoYXZpb3VyLiBJZiBzZXQgdG8gMSwgbm8gRE1BIGlzIG5lZWRlZCBmb3IgZG93bmxvYWRpbmcgc2FtcGxlcywKK2FuZCBhbGxvd3Mgb3duZXJzIG9mIGEgR1VTIE1BWCB0byBtYWtlIHVzZSBvZiBzaW11bHRhbmVvdXMgZGlnaXRhbCBhdWRpbworKC9kZXYvZHNwKSwgTUlESSwgYW5kIHdhdmV0YWJsZSBwbGF5YmFjay4KKworCitJZiB5b3UgaGF2ZSBwcm9ibGVtcyBpbiByZWNvcmRpbmcgd2l0aCBHVVMgTUFYLCB5b3UgY291bGQgdHJ5IHRvIHVzZQoranVzdCBvbmUgOCBiaXQgRE1BIGNoYW5uZWwuIFJlY29yZGluZyB3aWxsIG5vdCB3b3JrIHdpdGggb25lIERNQQorY2hhbm5lbCBpZiBpdCdzIGEgMTYgYml0IG9uZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3Z3c25kIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvdndzbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlYTBhMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3Z3c25kCkBAIC0wLDAgKzEsMjkzIEBACit2d3NuZCAtIFNvdW5kIGRyaXZlciBmb3IgdGhlIFNpbGljb24gR3JhcGhpY3MgMzIwIGFuZCA1NDAgVmlzdWFsCitXb3Jrc3RhdGlvbnMnIG9uYm9hcmQgYXVkaW8uCisKK0NvcHlyaWdodCAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKworQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBNYXJjaCAxOTk5LCB0aGVyZSBhcmUgdHdvIG1vZGVscyBvZgorVmlzdWFsIFdvcmtzdGF0aW9uLCB0aGUgMzIwIGFuZCB0aGUgNTQwLiAgVGhpcyBkb2N1bWVudCBvbmx5IGRlc2NyaWJlcwordGhvc2UgbW9kZWxzLiAgRnV0dXJlIFZpc3VhbCBXb3Jrc3RhdGlvbiBtb2RlbHMgbWF5IGhhdmUgZGlmZmVyZW50Citzb3VuZCBjYXBhYmlsaXRpZXMsIGFuZCB0aGlzIGRyaXZlciB3aWxsIHByb2JhYmx5IG5vdCB3b3JrIG9uIHRob3NlCitib3hlcy4KKworVGhlIFZpc3VhbCBXb3Jrc3RhdGlvbiBoYXMgYW4gQW5hbG9nIERldmljZXMgQUQxODQzICJTb3VuZENvbW0iIGF1ZGlvCitjb2RlYyBjaGlwLiAgVGhlIEFEMTg0MyBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBDb2JhbHQgSS9PIEFTSUMsIGFsc28KK2tub3duIGFzIExpdGhpdW0uICBUaGlzIGRyaXZlciBwcm9ncmFtcyBib3RoIGJvdGggY2hpcHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUVVJQ0sgQ09ORklHVVJBVElPTgorCisJIyBpbnNtb2Qgc291bmRjb3JlCisJIyBpbnNtb2QgdndzbmQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJL08gQ09OTkVDVElPTlMKKworT24gdGhlIFZpc3VhbCBXb3Jrc3RhdGlvbiwgb25seSB0aHJlZSBvZiB0aGUgQUQxODQzIGlucHV0cyBhcmUgaG9va2VkCit1cC4gIFRoZSBhbmFsb2cgbGluZSBpbiBqYWNrcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBBRDE4NDMncyBBVVgxCitpbnB1dC4gIFRoZSBDRCBhdWRpbyBsaW5lcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBBRDE4NDMncyBBVVgyIGlucHV0LgorVGhlIG1pY3JvcGhvbmUgamFjayBpcyBjb25uZWN0ZWQgdG8gdGhlIEFEMTg0MydzIE1JQyBpbnB1dC4gIFRoZSBtaWMKK2phY2sgaXMgbW9ubywgYnV0IHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkIHRvIGJvdGggdGhlIGxlZnQgYW5kIHJpZ2h0CitNSUMgaW5wdXRzLiAgWW91IGNhbiByZWNvcmQgaW4gc3RlcmVvIGZyb20gdGhlIG1pYyBpbnB1dCwgYnV0IHlvdSB3aWxsCitnZXQgdGhlIHNhbWUgc2lnbmFsIG9uIGJvdGggY2hhbm5lbHMgKHdpdGhpbiB0aGUgbGltaXRzIG9mIEEvRAorYWNjdXJhY3kpLiAgRnVsbCBzY2FsZSBvbiB0aGUgTGluZSBpbnB1dCBpcyArLy0gMi4wIFYuICBGdWxsIHNjYWxlIG9uCit0aGUgTUlDIGlucHV0IGlzIDIwIGRCIGxlc3MsIG9yICsvLSAwLjIgVi4KKworVGhlIEFEMTg0MydzIExPVVQxIG91dHB1dHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgTGluZSBPdXQgamFja3MuICBUaGUKK0FEMTg0MydzIEhQT1VUIG91dHB1dHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgc3BlYWtlci9oZWFkcGhvbmUgamFjay4KK0xPVVQyIGlzIG5vdCBjb25uZWN0ZWQuICBMaW5lIG91dCdzIG1heGltdW0gbGV2ZWwgaXMgKy8tIDIuMCBWIHBlYWsgdG8KK3BlYWsuICBUaGUgc3BlYWtlci9oZWFkcGhvbmUgb3V0J3MgbWF4aW11bSBpcyArLy0gNC4wIFYgcGVhayB0byBwZWFrLgorCitUaGUgQUQxODQzJ3MgUENNIGlucHV0IGNoYW5uZWwgYW5kIG9uZSBvZiBpdHMgb3V0cHV0IGNoYW5uZWxzIChEQUMxKQorYXJlIGNvbm5lY3RlZCB0byBMaXRoaXVtLiAgVGhlIG90aGVyIG91dHB1dCBjaGFubmVsIChEQUMyKSBpcyBub3QKK2Nvbm5lY3RlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDQVBBQklMSVRJRVMKKworVGhlIEFEMTg0MyBoYXMgUENNIGlucHV0IGFuZCBvdXRwdXQgKFB1bHNlIENvZGUgTW9kdWxhdGlvbiwgYWxzbyBrbm93bgorYXMgd2F2ZXRhYmxlKS4gIFBDTSBpbnB1dCBhbmQgb3V0cHV0IGNhbiBiZSBtb25vIG9yIHN0ZXJlbyBpbiBhbnkgb2YKK2ZvdXIgZm9ybWF0cy4gIFRoZSBmb3JtYXRzIGFyZSAxNiBiaXQgc2lnbmVkIGFuZCA4IGJpdCB1bnNpZ25lZCwKK3UtTGF3LCBhbmQgQS1MYXcgZm9ybWF0LiAgQW55IHNhbXBsZSByYXRlIGZyb20gNCBLSHogdG8gNDkgS0h6IGlzCithdmFpbGFibGUsIGluIDEgSHogaW5jcmVtZW50cy4KKworVGhlIEFEMTg0MyBpbmNsdWRlcyBhbiBhbmFsb2cgbWl4ZXIgdGhhdCBjYW4gbWl4IGFsbCB0aHJlZSBpbnB1dAorc2lnbmFscyAobGluZSwgbWljIGFuZCBDRCkgaW50byB0aGUgYW5hbG9nIG91dHB1dHMuICBUaGUgbWl4ZXIgaGFzIGEKK3NlcGFyYXRlIGdhaW4gY29udHJvbCBhbmQgbXV0ZSBzd2l0Y2ggZm9yIGVhY2ggaW5wdXQuCisKK1RoZXJlIGFyZSB0d28gb3V0cHV0cywgbGluZSBvdXQgYW5kIHNwZWFrZXIvaGVhZHBob25lIG91dC4gIFRoZXkKK2Fsd2F5cyBwcm9kdWNlIHRoZSBzYW1lIHNpZ25hbCwgYW5kIHRoZSBzcGVha2VyIGFsd2F5cyBoYXMgMyBkQiBtb3JlCitnYWluIHRoYW4gdGhlIGxpbmUgb3V0LiAgVGhlIHNwZWFrZXIvaGVhZHBob25lIG91dHB1dCBjYW4gYmUgbXV0ZWQsCitidXQgdGhpcyBkcml2ZXIgZG9lcyBub3QgZXhwb3J0IHRoYXQgZnVuY3Rpb24uCisKK1RoZSBoYXJkd2FyZSBjYW4gc3luYyBhdWRpbyB0byB0aGUgdmlkZW8gY2xvY2ssIGJ1dCB0aGlzIGRyaXZlciBkb2VzCitub3QgaGF2ZSBhIHdheSB0byBzcGVjaWZ5IHN5bmNpbmcgdG8gdmlkZW8uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUFJPR1JBTU1JTkcKKworVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHRoZSBBUEkgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuICBBbHNvIHNlZSB0aGUKK09wZW4gU291bmQgUHJvZ3JhbW1pbmcgR3VpZGUgYXQgaHR0cDovL3d3dy5vcGVuc291bmQuY29tL3BndWlkZS8gLgorVGhpcyBzZWN0aW9uIGFzc3VtZXMgZmFtaWxpYXJpdHkgd2l0aCB0aGF0IGRvY3VtZW50LgorCitUaGUgZHJpdmVyIGhhcyB0d28gaW50ZXJmYWNlcywgYW4gSS9PIGludGVyZmFjZSBhbmQgYSBtaXhlciBpbnRlcmZhY2UuCitUaGVyZSBpcyBubyBNSURJIG9yIHNlcXVlbmNlciBjYXBhYmlsaXR5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BST0dSQU1NSU5HIFBDTSBJL08KKworVGhlIEkvTyBpbnRlcmZhY2UgaXMgdXN1YWxseSBhY2Nlc3NlZCBhcyAvZGV2L2F1ZGlvIG9yIC9kZXYvZHNwLgorVXNpbmcgdGhlIHN0YW5kYXJkIE9wZW4gU291bmQgU3lzdGVtIChPU1MpIGlvY3RsIGNhbGxzLCB0aGUgc2FtcGxlCityYXRlLCBudW1iZXIgb2YgY2hhbm5lbHMsIGFuZCBzYW1wbGUgZm9ybWF0IG1heSBiZSBzZXQgd2l0aGluIHRoZQorbGltaXRhdGlvbnMgZGVzY3JpYmVkIGFib3ZlLiAgVGhlIGRyaXZlciBzdXBwb3J0cyB0cmlnZ2VyaW5nLiAgSXQgYWxzbworc3VwcG9ydHMgZ2V0dGluZyB0aGUgaW5wdXQgYW5kIG91dHB1dCBwb2ludGVycyB3aXRoIG9uZS1zYW1wbGUKK2FjY3VyYWN5LgorCitUaGUgU05EQ1RMX0RTUF9HRVRDQVAgaW9jdGwgcmV0dXJucyB0aGVzZSBjYXBhYmlsaXRpZXMuCisKKwlEU1BfQ0FQX0RVUExFWCAtIGRyaXZlciBzdXBwb3J0cyBmdWxsIGR1cGxleC4KKworCURTUF9DQVBfVFJJR0dFUiAtIGRyaXZlciBzdXBwb3J0cyB0cmlnZ2VyaW5nLgorCisJRFNQX0NBUF9SRUFMVElNRSAtIHZhbHVlcyByZXR1cm5lZCBieSBTTkRDVExfRFNQX0dFVElQVFIKKwlhbmQgU05EQ1RMX0RTUF9HRVRPUFRSIGFyZSBhY2N1cmF0ZSB0byBhIGZldyBzYW1wbGVzLgorCitNZW1vcnkgbWFwcGluZyAobW1hcCkgaXMgbm90IGltcGxlbWVudGVkLgorCitUaGUgZHJpdmVyIHBlcm1pdHMgc3ViZGl2aWRlZCBmcmFnbWVudCBzaXplcyBmcm9tIDY0IHRvIDQwOTYgYnl0ZXMuCitUaGUgbnVtYmVyIG9mIGZyYWdtZW50cyBjYW4gYmUgYW55dGhpbmcgZnJvbSAzIGZyYWdtZW50cyB0byBob3dldmVyCittYW55IGZyYWdtZW50cyBmaXQgaW50byAxMjQga2lsb2J5dGVzLiAgSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8KK2RldGVybWluZSBob3cgZmV3L3NtYWxsIGZyYWdtZW50cyBjYW4gYmUgdXNlZCB3aXRob3V0IGludHJvZHVjaW5nCitnbGl0Y2hlcyB3aXRoIGEgZ2l2ZW4gd29ya2xvYWQuICBMaW51eCBpcyBub3QgcmVhbHRpbWUsIHNvIHdlIGNhbid0Citwcm9taXNlIGFueXRoaW5nLiAgKHNpZ2guLi4pCisKK1doZW4gdGhpcyBkcml2ZXIgaXMgc3dpdGNoZWQgaW50byBvciBvdXQgb2YgbXUtTGF3IG9yIEEtTGF3IG1vZGUgb24KK291dHB1dCwgaXQgbWF5IHByb2R1Y2UgYW4gYXVkaWJsZSBjbGljay4gIFRoaXMgaXMgdW5hdm9pZGFibGUuICBUbworcHJldmVudCBjbGlja2luZywgdXNlIHNpZ25lZCAxNi1iaXQgbW9kZSBpbnN0ZWFkLCBhbmQgY29udmVydCBmcm9tCittdS1MYXcgb3IgQS1MYXcgZm9ybWF0IGluIHNvZnR3YXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BST0dSQU1NSU5HIFRIRSBNSVhFUiBJTlRFUkZBQ0UKKworVGhlIG1peGVyIGludGVyZmFjZSBpcyB1c3VhbGx5IGFjY2Vzc2VkIGFzIC9kZXYvbWl4ZXIuICBJdCBpcyBhY2Nlc3NlZAordGhyb3VnaCBpb2N0bHMuICBUaGUgbWl4ZXIgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBjb250cm9sIGdhaW4gb3IKK211dGUgc2V2ZXJhbCBhdWRpbyBzaWduYWwgcGF0aHMsIGFuZCBhbHNvIGFsbG93cyBzZWxlY3Rpb24gb2YgdGhlCityZWNvcmRpbmcgc291cmNlLgorCitFYWNoIG9mIHRoZSBjb25zdGFudHMgZGVzY3JpYmVkIGhlcmUgY2FuIGJlIHJlYWQgdXNpbmcgdGhlCitNSVhFUl9SRUFEKFNPVU5EX01JWEVSX3h4eCkgaW9jdGwuICBUaG9zZSB0aGF0IGFyZSBub3QgcmVhZC1vbmx5IGNhbgorYWxzbyBiZSB3cml0dGVuIHVzaW5nIHRoZSBNSVhFUl9XUklURShTT1VORF9NSVhFUl94eHgpIGlvY3RsLiAgSW4gbW9zdAorY2FzZXMsIDxzeXMvc291bmRjYXJkLmg+IGRlZmluZXMgY29uc3RhbnRzIFNPVU5EX01JWEVSX1JFQURfeHh4IGFuZAorU09VTkRfTUlYRVJfV1JJVEVfeHh4IHdoaWNoIHdvcmsganVzdCBhcyB3ZWxsLgorCitTT1VORF9NSVhFUl9DQVBTCVJlYWQtb25seQorCitUaGlzIGlzIGEgbWFzayBvZiBvcHRpb25hbCBkcml2ZXIgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGltcGxlbWVudGVkLgorVGhpcyBkcml2ZXIncyBvbmx5IGNhcGFiaWxpdHkgaXMgU09VTkRfQ0FQX0VYQ0xfSU5QVVQsIHdoaWNoIG1lYW5zCit0aGF0IG9ubHkgb25lIHJlY29yZGluZyBzb3VyY2UgY2FuIGJlIGFjdGl2ZSBhdCBhIHRpbWUuCisKK1NPVU5EX01JWEVSX0RFVk1BU0sJUmVhZC1vbmx5CisKK1RoaXMgaXMgYSBtYXNrIG9mIHRoZSBzb3VuZCBjaGFubmVscy4gIFRoaXMgZHJpdmVyJ3MgY2hhbm5lbHMgYXJlIFBDTSwKK0xJTkUsIE1JQywgQ0QsIGFuZCBSRUNMRVYuCisKK1NPVU5EX01JWEVSX1NURVJFT0RFVlMJUmVhZC1vbmx5CisKK1RoaXMgaXMgYSBtYXNrIG9mIHdoaWNoIHNvdW5kIGNoYW5uZWxzIGFyZSBjYXBhYmxlIG9mIHN0ZXJlby4gIEFsbAorY2hhbm5lbHMgYXJlIGNhcGFibGUgb2Ygc3RlcmVvLiAgKEJ1dCBzZWUgY2F2ZWF0IG9uIE1JQyBpbnB1dCBpbiBJL08KK0NPTk5FQ1RJT05TIHNlY3Rpb24gYWJvdmUpLgorCitTT1VORF9NSVhFUl9PVVRNQVNLCVJlYWQtb25seQorCitUaGlzIGlzIGEgbWFzayBvZiBjaGFubmVscyB0aGF0IHJvdXRlIGlucHV0cyB0aHJvdWdoIHRvIG91dHB1dHMuCitUaG9zZSBhcmUgTElORSwgTUlDLCBhbmQgQ0QuCisKK1NPVU5EX01JWEVSX1JFQ01BU0sJUmVhZC1vbmx5CisKK1RoaXMgaXMgYSBtYXNrIG9mIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHJlY29yZGluZyBzb3VyY2VzLiAgVGhvc2UgYXJlCitQQ00sIExJTkUsIE1JQywgQ0QuCisKK1NPVU5EX01JWEVSX1BDTQkJRGVmYXVsdDogMHg1NzU3ICgwIGRCKQorCitUaGlzIGlzIHRoZSBnYWluIGNvbnRyb2wgZm9yIFBDTSBvdXRwdXQuICBUaGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbAorZ2FpbiBhcmUgY29udHJvbGxlZCBpbmRlcGVuZGVudGx5LiAgVGhpcyBnYWluIGNvbnRyb2wgaGFzIDY0IGxldmVscywKK3doaWNoIHJhbmdlIGZyb20gLTgyLjUgZEIgdG8gKzEyLjAgZEIgaW4gMS41IGRCIHN0ZXBzLiAgVGhvc2UgNjQKK2xldmVscyBhcmUgbWFwcGVkIG9udG8gMTAwIGxldmVscyBhdCB0aGUgaW9jdGwsIHNlZSBiZWxvdy4KKworU09VTkRfTUlYRVJfTElORQlEZWZhdWx0OiAweDRhNGEgKDAgZEIpCisKK1RoaXMgaXMgdGhlIGdhaW4gY29udHJvbCBmb3IgbWl4aW5nIHRoZSBMaW5lIEluIHNvdXJjZSBpbnRvIHRoZQorb3V0cHV0cy4gIFRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVsIGdhaW4gYXJlIGNvbnRyb2xsZWQKK2luZGVwZW5kZW50bHkuICBUaGlzIGdhaW4gY29udHJvbCBoYXMgMzIgbGV2ZWxzLCB3aGljaCByYW5nZSBmcm9tCistMzQuNSBkQiB0byArMTIuMCBkQiBpbiAxLjUgZEIgc3RlcHMuICBUaG9zZSAzMiBsZXZlbHMgYXJlIG1hcHBlZCBvbnRvCisxMDAgbGV2ZWxzIGF0IHRoZSBpb2N0bCwgc2VlIGJlbG93LgorCitTT1VORF9NSVhFUl9NSUMJCURlZmF1bHQ6IDB4NGE0YSAoMCBkQikKKworVGhpcyBpcyB0aGUgZ2FpbiBjb250cm9sIGZvciBtaXhpbmcgdGhlIE1JQyBzb3VyY2UgaW50byB0aGUgb3V0cHV0cy4KK1RoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVsIGdhaW4gYXJlIGNvbnRyb2xsZWQgaW5kZXBlbmRlbnRseS4gIFRoaXMKK2dhaW4gY29udHJvbCBoYXMgMzIgbGV2ZWxzLCB3aGljaCByYW5nZSBmcm9tIC0zNC41IGRCIHRvICsxMi4wIGRCIGluCisxLjUgZEIgc3RlcHMuICBUaG9zZSAzMiBsZXZlbHMgYXJlIG1hcHBlZCBvbnRvIDEwMCBsZXZlbHMgYXQgdGhlCitpb2N0bCwgc2VlIGJlbG93LgorCitTT1VORF9NSVhFUl9DRAkJRGVmYXVsdDogMHg0YTRhICgwIGRCKQorCitUaGlzIGlzIHRoZSBnYWluIGNvbnRyb2wgZm9yIG1peGluZyB0aGUgQ0QgYXVkaW8gc291cmNlIGludG8gdGhlCitvdXRwdXRzLiAgVGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWwgZ2FpbiBhcmUgY29udHJvbGxlZAoraW5kZXBlbmRlbnRseS4gIFRoaXMgZ2FpbiBjb250cm9sIGhhcyAzMiBsZXZlbHMsIHdoaWNoIHJhbmdlIGZyb20KKy0zNC41IGRCIHRvICsxMi4wIGRCIGluIDEuNSBkQiBzdGVwcy4gIFRob3NlIDMyIGxldmVscyBhcmUgbWFwcGVkIG9udG8KKzEwMCBsZXZlbHMgYXQgdGhlIGlvY3RsLCBzZWUgYmVsb3cuCisKK1NPVU5EX01JWEVSX1JFQ0xFVgkgRGVmYXVsdDogMCAoMCBkQikKKworVGhpcyBpcyB0aGUgZ2FpbiBjb250cm9sIGZvciBQQ00gaW5wdXQgKFJFQ29yZGluZyBMRVZlbCkuICBUaGUgbGVmdAorYW5kIHJpZ2h0IGNoYW5uZWwgZ2FpbiBhcmUgY29udHJvbGxlZCBpbmRlcGVuZGVudGx5LiAgVGhpcyBnYWluCitjb250cm9sIGhhcyAxNiBsZXZlbHMsIHdoaWNoIHJhbmdlIGZyb20gMCBkQiB0byArMjIuNSBkQiBpbiAxLjUgZEIKK3N0ZXBzLiAgVGhvc2UgMTYgbGV2ZWxzIGFyZSBtYXBwZWQgb250byAxMDAgbGV2ZWxzIGF0IHRoZSBpb2N0bCwgc2VlCitiZWxvdy4KKworU09VTkRfTUlYRVJfUkVDU1JDCSBEZWZhdWx0OiBTT1VORF9NQVNLX0xJTkUKKworVGhpcyBpcyBhIG1hc2sgb2YgY3VycmVudGx5IHNlbGVjdGVkIFBDTSBpbnB1dCBzb3VyY2VzIChSRUNvcmRpbmcKK1NvdVJDZXMpLiAgQmVjYXVzZSB0aGUgQUQxODQzIGNhbiBvbmx5IGhhdmUgYSBzaW5nbGUgcmVjb3JkaW5nIHNvdXJjZQorYXQgYSB0aW1lLCBvbmx5IG9uZSBiaXQgYXQgYSB0aW1lIGNhbiBiZSBzZXQgaW4gdGhpcyBtYXNrLiAgVGhlCithbGxvd2FibGUgdmFsdWVzIGFyZSBTT1VORF9NQVNLX1BDTSwgU09VTkRfTUFTS19MSU5FLCBTT1VORF9NQVNLX01JQywKK29yIFNPVU5EX01BU0tfQ0QuICBTZWxlY3RpbmcgU09VTkRfTUFTS19QQ00gc2V0cyB1cCBpbnRlcm5hbAorcmVzYW1wbGluZyB3aGljaCBpcyB1c2VmdWwgZm9yIGxvb3BiYWNrIHRlc3RpbmcgYW5kIGZvciBoYXJkd2FyZQorc2FtcGxlIHJhdGUgY29udmVyc2lvbi4gIEJ1dCBzb2Z0d2FyZSBzYW1wbGUgcmF0ZSBjb252ZXJzaW9uIGlzCitwcm9iYWJseSBmYXN0ZXIsIHNvIEkgZG9uJ3Qga25vdyBob3cgdXNlZnVsIHRoYXQgaXMuCisKK1NPVU5EX01JWEVSX09VVFNSQwlERUZBVUxUOiBTT1VORF9NQVNLX0xJTkV8U09VTkRfTUFTS19NSUN8U09VTkRfTUFTS19DRAorCitUaGlzIGlzIGEgbWFzayBvZiBzb3VyY2VzIHRoYXQgYXJlIGN1cnJlbnRseSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKK291dHB1dHMuICBUaG9zZSBzb3VyY2VzIHdob3NlIGJpdHMgYXJlIG5vdCBzZXQgYXJlIG11dGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0dBSU4gQ09OVFJPTAorCitUaGVyZSBhcmUgZml2ZSBnYWluIGNvbnRyb2xzIGxpc3RlZCBhYm92ZS4gIEVhY2ggaGFzIDE2LCAzMiwgb3IgNjQKK3N0ZXBzLiAgRWFjaCBjb250cm9sIGhhcyAxLjUgZEIgb2YgZ2FpbiBwZXIgc3RlcC4gIEVhY2ggY29udHJvbCBpcworc3RlcmVvLgorCitUaGUgT1NTIGRlZmluZXMgdGhlIGFyZ3VtZW50IHRvIGEgY2hhbm5lbCBnYWluIGlvY3RsIGFzIGhhdmluZyB0d28KK2NvbXBvbmVudHMsIGxlZnQgYW5kIHJpZ2h0LCBlYWNoIG9mIHdoaWNoIHJhbmdlcyBmcm9tIDAgdG8gMTAwLiAgVGhlCit0d28gY29tcG9uZW50cyBhcmUgcGFja2VkIGludG8gdGhlIHNhbWUgd29yZCwgd2l0aCB0aGUgbGVmdCBzaWRlIGdhaW4KK2luIHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlLCBhbmQgdGhlIHJpZ2h0IHNpZGUgZ2FpbiBpbiB0aGUgc2Vjb25kCitsZWFzdCBzaWduaWZpY2FudCBieXRlLiAgSW4gQywgd2Ugd291bGQgc2F5IHRoaXMuCisKKwkjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKwkuLi4KKworCSAJYXNzZXJ0KGxlZnRnYWluID49IDAgJiYgbGVmdGdhaW4gPD0gMTAwKTsKKwkJYXNzZXJ0KHJpZ2h0Z2FpbiA+PSAwICYmIHJpZ2h0Z2FpbiA8PSAxMDApOworCQlhcmcgPSBsZWZ0Z2FpbiB8IHJpZ2h0Z2FpbiA8PCA4OworCitTbyBlYWNoIE9TUyBnYWluIGNvbnRyb2wgaGFzIDEwMSBzdGVwcy4gIEJ1dCB0aGUgaGFyZHdhcmUgaGFzIDE2LCAzMiwKK29yIDY0IHN0ZXBzLiAgVGhlIGhhcmR3YXJlIHN0ZXBzIGFyZSBzcHJlYWQgYWNyb3NzIHRoZSAxMDEgT1NTIHN0ZXBzCituZWFybHkgZXZlbmx5LiAgVGhlIGNvbnZlcnNpb24gZm9ybXVsYXMgYXJlIGxpa2UgdGhpcywgZ2l2ZW4gTiBlcXVhbHMKKzE2LCAzMiwgb3IgNjQuCisKKwlpbnQgcm91bmQgPSBOLzIgLSAxOworCU9TU19nYWluX3N0ZXBzID0gKGh3X2dhaW5fc3RlcHMgKiAxMDAgKyByb3VuZCkgLyAoTiAtIDEpOworCWh3X2dhaW5fc3RlcHMgPSAoT1NTX2dhaW5fc3RlcHMgKiAoTiAtIDEpICsgcm91bmQpIC8gMTAwOworCitIZXJlIGlzIGEgc25pcHBldCBvZiBDIGNvZGUgdGhhdCB3aWxsIHJldHVybiB0aGUgbGVmdCBhbmQgcmlnaHQgZ2Fpbgorb2YgYW55IGNoYW5uZWwgaW4gZEIuICBQYXNzIGl0IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBnYWluX2Rlc2NfdAorc3RydWN0dXJlcyB0byBhY2Nlc3MgYW55IG9mIHRoZSBmaXZlIGNoYW5uZWxzJyBnYWlucy4KKworCXR5cGVkZWYgc3RydWN0IGdhaW5fZGVzYyB7CisJCWZsb2F0IG1pbl9nYWluOworCQlmbG9hdCBnYWluX3N0ZXA7CisJCWludCBuYml0czsKKwkJaW50IGNoYW47CisJfSBnYWluX2Rlc2NfdDsKKworCWNvbnN0IGdhaW5fZGVzY190IGdhaW5fcGNtICAgID0geyAtODIuNSwgMS41LCA2LCBTT1VORF9NSVhFUl9QQ00gICAgfTsKKwljb25zdCBnYWluX2Rlc2NfdCBnYWluX2xpbmUgICA9IHsgLTM0LjUsIDEuNSwgNSwgU09VTkRfTUlYRVJfTElORSAgIH07CisJY29uc3QgZ2Fpbl9kZXNjX3QgZ2Fpbl9taWMgICAgPSB7IC0zNC41LCAxLjUsIDUsIFNPVU5EX01JWEVSX01JQyAgICB9OworCWNvbnN0IGdhaW5fZGVzY190IGdhaW5fY2QgICAgID0geyAtMzQuNSwgMS41LCA1LCBTT1VORF9NSVhFUl9DRCAgICAgfTsKKwljb25zdCBnYWluX2Rlc2NfdCBnYWluX3JlY2xldiA9IHsgICAwLjAsIDEuNSwgNCwgU09VTkRfTUlYRVJfUkVDTEVWIH07CisKKwlpbnQgZ2V0X2dhaW5fZEIoaW50IGZkLCBjb25zdCBnYWluX2Rlc2NfdCAqZ3AsCisJCQlmbG9hdCAqbGVmdCwgZmxvYXQgKnJpZ2h0KQorCXsKKwkJaW50IHdvcmQ7CisJCWludCBsZywgcmc7CisJCWludCBtYXNrID0gKDEgPDwgZ3AtPm5iaXRzKSAtIDE7CisKKwkJaWYgKGlvY3RsKGZkLCBNSVhFUl9SRUFEKGdwLT5jaGFuKSwgJndvcmQpICE9IDApCisJCQlyZXR1cm4gLTE7CS8qIGZhaWwgKi8KKwkJbGcgPSB3b3JkICYgMHhGRjsKKwkJcmcgPSB3b3JkID4+IDggJiAweEZGOworCQlsZyA9IChsZyAqIG1hc2sgKyBtYXNrIC8gMikgLyAxMDA7CisJCXJnID0gKHJnICogbWFzayArIG1hc2sgLyAyKSAvIDEwMDsKKwkJKmxlZnQgPSBncC0+bWluX2dhaW4gKyBncC0+Z2Fpbl9zdGVwICogbGc7CisJCSpyaWdodCA9IGdwLT5taW5fZ2FpbiArIGdwLT5nYWluX3N0ZXAgKiByZzsKKwkJcmV0dXJuIDA7CisJfQkKKworQW5kIGhlcmUgaXMgdGhlIGNvcnJlc3BvbmRpbmcgcm91dGluZSB0byBzZXQgYSBjaGFubmVsJ3MgZ2FpbiBpbiBkQi4KKworCWludCBzZXRfZ2Fpbl9kQihpbnQgZmQsIGNvbnN0IGdhaW5fZGVzY190ICpncCwgZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQpCisJeworCQlmbG9hdCBtYXhfZ2FpbiA9CisJCQlncC0+bWluX2dhaW4gKyAoMSA8PCBncC0+bmJpdHMpICogZ3AtPmdhaW5fc3RlcDsKKwkJZmxvYXQgcm91bmQgPSBncC0+Z2Fpbl9zdGVwIC8gMjsKKwkJaW50IG1hc2sgPSAoMSA8PCBncC0+bmJpdHMpIC0gMTsKKwkJaW50IHdvcmQ7CisJCWludCBsZywgcmc7CisKKwkJaWYgKGxlZnQgPCBncC0+bWluX2dhaW4gfHwgcmlnaHQgPCBncC0+bWluX2dhaW4pCisJCQlyZXR1cm4gRUlOVkFMOworCQlsZyA9IChsZWZ0IC0gZ3AtPm1pbl9nYWluICsgcm91bmQpIC8gZ3AtPmdhaW5fc3RlcDsKKwkJcmcgPSAocmlnaHQgLSBncC0+bWluX2dhaW4gKyByb3VuZCkgLyBncC0+Z2Fpbl9zdGVwOworCQlpZiAobGcgPj0gKDEgPDwgZ3AtPm5iaXRzKSB8fCByZyA+PSAoMSA8PCBncC0+bmJpdHMpKQorCQkJcmV0dXJuIEVJTlZBTDsKKwkJbGcgPSAoMTAwICogbGcgKyBtYXNrIC8gMikgLyBtYXNrOworCQlyZyA9ICgxMDAgKiByZyArIG1hc2sgLyAyKSAvIG1hc2s7CisJCXdvcmQgPSBsZyB8IHJnIDw8IDg7CisKKwkJcmV0dXJuIGlvY3RsKGZkLCBNSVhFUl9XUklURShncC0+Y2hhbiksICZ3b3JkKTsKKwl9CisK