ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTY1MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0CkBAIC0wLDAgKzEsNDQ5IEBACitUaGUgdG1zY3NpbSBkcml2ZXIKKz09PT09PT09PT09PT09PT09PQorCisxLiBQdXJwb3NlIGFuZCBoaXN0b3J5CisyLiBJbnN0YWxsYXRpb24KKzMuIEZlYXR1cmVzCis0LiBDb25maWd1cmF0aW9uIHZpYSAvcHJvYy9zY3NpL3Rtc2NzaW0vPworNS4gQ29uZmlndXJhdGlvbiB2aWEgYm9vdC9tb2R1bGUgcGFyYW1zCis2LiBQb3RlbnRpYWwgaW1wcm92ZW1lbnRzCis3LiBCdWcgcmVwb3J0cywgZGVidWdnaW5nIGFuZCB1cGRhdGVzCis4LiBBY2tub3dsZWRnZW1lbnRzCis5LiBDb3B5cmlnaHQKKworCisxLiBQdXJwb3NlIGFuZCBoaXN0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgdG1zY3NpbSBkcml2ZXIgc3VwcG9ydHMgUENJIFNDU0kgSG9zdCBBZGFwdGVycyBiYXNlZCBvbiB0aGUgQU01M0M5NzQKK2NoaXAuIEFNNTNDOTc0IGJhc2VkIFNDU0kgYWRhcHRlcnMgaW5jbHVkZTogCisgVGVrcmFtIERDMzkwLCBEQzM5MFQKKyBEYXdpY29udHJvbCAyOTc0CisgUUxvZ2ljIEZhc3QhIFBDSSBCYXNpYworIHNvbWUgb24tYm9hcmQgYWRhcHRlcnMKKyhUaGlzIGlzIG1vc3QgcHJvYmFibHkgbm90IGEgY29tcGxldGUgbGlzdCkKKworSXQgaGFzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBDLkwuIEh1YW5nIGZyb20gdGhlIFRla3JhbSBjb3JwLiB0byBzdXBwb3J0IHRoZQorVGVrcmFtIERDMzkwKFQpIGFkYXB0ZXIuIFRoaXMgaXMgd2hlcmUgdGhlIG5hbWUgY29tZXMgZnJvbTogdG0gPSBUZWtyYW0KK3Njc2kgPSBTQ1NJIGRyaXZlciwgbSA9IEFNRCAoPykgYXMgb3Bwb3NlZCB0byB3IGZvciB0aGUgREMzOTBXL1UvRgorKE5DUjUzYzhYNSwgWD0yLzcpIGRyaXZlci4gWWVzLCB0aGVyZSB3YXMgYWxzbyBhIGRyaXZlciBmb3IgdGhlIGxhdHRlciwKK3Rtc2NzaXcsIHdoaWNoIHN1cHBvcnRlZCBEQzM5MFcvVS9GIGFkYXB0ZXJzLiBJdCdzIG5vdCBtYWludGFpbmVkIGFueSBtb3JlLAorYXMgdGhlIG5jcjUzYzh4eCBpcyBwZXJmZWN0bHkgc3VwcG9ydGluZyB0aGVzZSBhZHBhdGVycyBzaW5jZSBzb21lIHRpbWUuCisKK1RoZSBkcml2ZXIgZmlyc3QgYXBwZWFyZWQgaW4gQXByaWwgMTk5NiwgZXhjbHVzaXZlbHkgc3VwcG9ydGVkIHRoZSBEQzM5MCAKK2FuZCBoYXMgYmVlbiBlbmhhbmNlZCBzaW5jZSB0aGVuIGluIHZhcmlvdXMgc3RlcHMuIEluIE1heSAxOTk4IHN1cHBvcnQgZm9yIAorZ2VuZXJhbCBBTTUzQzk3NCBiYXNlZCBhZGFwdGVycyBhbmQgc29tZSBwb3NzaWJpbGl0aWVzIHRvIGNvbmZpZ3VyZSBpdCB3ZXJlCithZGRlZC4gVGhlIG5vbi1EQzM5MCBzdXBwb3J0IHdvcmtzIGJ5IGFzc3VtaW5nIHNvbWUgdmFsdWVzIGZvciB0aGUgZGF0YQorbm9ybWFsbHkgdGFrZW4gZnJvbSB0aGUgREMzOTAgRUVQUk9NLiBTZWUgYmVsb3cgKGNoYXB0ZXIgNSkgZm9yIGRldGFpbHMuCisKK1doZW4gdXNpbmcgdGhlIERDMzkwLCB0aGUgY29uZmlndXJhdGlvbiBpcyBzdGlsbCBiZSBkb25lIHVzaW5nIHRoZSBEQzM5MAorQklPUyBzZXR1cC4gVGhlIERDMzkwIEVFUFJPTSBpcyByZWFkIGFuZCB1c2VkIGJ5IHRoZSBkcml2ZXIsIGFueSBib290IG9yCittb2R1bGUgcGFyYW1ldGVycyAoY2hhcHRlciA1KSBhcmUgaWdub3JlZCEgSG93ZXZlciwgeW91IGNhbiBjaGFuZ2Ugc2V0dGluZ3MKK2R5bmFtaWNhbGx5LCBhcyBkZXNjcmliZWQgaW4gY2hhcHRlciA0LiAKKworRm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgZHJpdmVyJ3MgaGlzdG9yeSwgc2VlIHRoZSBmaXJzdCBsaW5lcworb2YgdG1zY3NpbS5jLgorVGhlIG51bWJlcmluZyBzY2hlbWUgaXNuJ3QgY29uc2lzdGVudC4gVGhlIGZpcnN0IHZlcnNpb25zIHdlbnQgZnJvbSAxLjAwIHRvCisxLjEyLCB0aGVuIDEuMjBhIHRvIDEuMjB0LiBGaW5hbGx5IEkgZGVjaWRlZCB0byB1c2UgdGhlIG5jcjUzYzh4eCBzY2hlbWUuIFNvCit0aGUgbmV4dCByZXZpc2lvbnMgd2lsbCBiZSAyLjBhIHRvIDIuMFggKHN0YWJsZSksIDIuMWEgdG8gMi4xWCAoZXhwZXJpbWVudGFsKSwKKzIuMmEgdG8gMi4yWCAoc3RhYmxlLCBhZ2FpbikgZXRjLiAoWCA9IGFueXRoaW5nIGJldHdlZW4gYSBhbmQgei4pIElmIEkgc2VuZAorZml4ZXMgdG8gcGVvcGxlIGZvciB0ZXN0aW5nLCBJIGNyZWF0ZSBpbnRlcm1lZGlhdGUgdmVyc2lvbnMgd2l0aCBhIGRpZ2l0IAorYXBwZW5kZWQsIGUuZy4gMi4wYzMuCisKKworMi4gSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0tLS0KK0lmIHlvdSBnb3QgYW55IHJlY2VudCBrZXJuZWwgd2l0aCB0aGlzIGRyaXZlciBhbmQgZG9jdW1lbnQgaW5jbHVkZWQgaW4KK2xpbnV4L2RyaXZlcnMvc2NzaSwgeW91IGJhc2ljYWxseSBoYXZlIHRvIGRvIG5vdGhpbmcgc3BlY2lhbCB0byB1c2UgdGhpcworZHJpdmVyLiBPZiBjb3Vyc2UgeW91IGhhdmUgdG8gY2hvb3NlIHRvIGNvbXBpbGUgU0NTSSBzdXBwb3J0IGFuZCBEQzM5MChUKQorc3VwcG9ydCBpbnRvIHlvdXIga2VybmVsIG9yIGFzIG1vZHVsZSB3aGVuIGNvbmZpZ3VyaW5nIHlvdXIga2VybmVsIGZvcgorY29tcGlsaW5nLgorTkVXOiBZb3UgbWF5IGFzIHdlbGwgY29tcGlsZSB0aGlzIG1vZHVsZSBvdXRzaWRlIHlvdXIga2VybmVsLCB1c2luZyB0aGUKK3N1cHBsaWVkIE1ha2VmaWxlLgorCisgSWYgeW91IGdvdCBhbiBvbGQga2VybmVsIChwcmUgMi4xLjEyNywgcHJlIDIuMC4zN3AxKSB3aXRoIGFuIG9sZCB2ZXJzaW9uIG9mCisgdGhpcyBkcml2ZXI6IEdldCBkYzM5MC0yMTEyNS0yMGIuZGlmZi5neiBvciBkYzM5MC0yMDM2cDIxLTIwYjEuZGlmZi5neiBmcm9tCisgbXkgd2ViIHBhZ2UgYW5kIGFwcGx5IHRoZSBwYXRjaC4gQXBwbHkgZnVydGhlciBwYXRjaGVzIHRvIHVwZ3JhZGUgdG8gdGhlIAorIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIuCisKKyBJZiB5b3Ugd2FudCB0byBkbyBpdCBtYW51YWxseSwgeW91IHNob3VsZCBjb3B5IHRoZSBmaWxlcyAoZGMzOTAuaCwKKyB0bXNjc2ltLmgsIHRtc2NzaW0uYywgc2NzaWlvbS5jIGFuZCBSRUFETUUudG1zY3NpbSkgZnJvbSB0aGlzIGRpcmVjdG9yeSB0bworIGxpbnV4L2RyaXZlcnMvc2NzaS4gWW91IGhhdmUgdG8gcmVjb21waWxlIHlvdXIga2VybmVsL21vZHVsZSBvZiBjb3Vyc2UuCisKKyBZb3Ugc2hvdWxkIGFwcGx5IHRoZSB0aHJlZSBwYXRjaGVzIGluY2x1ZGVkIGluIGRjMzkwLTEyMC1rZXJuZWwuZGlmZgorIChBcHBseWluZyB0aGVtOiBjZCAvdXNyL3NyYzsgcGF0Y2ggLXAwIDx+L2RjMzkwLTEyMC1rZXJuZWwuZGlmZikKKyBUaGUgcGF0Y2hlcyBhcmUgYWdhaW5zdCAyLjEuMTI1LCBzbyB5b3UgbWlnaHQgaGF2ZSB0byBtYW51YWxseSByZXNvbHZlCisgcmVqZWN0aW9ucyB3aGVuIGFwcGx5aW5nIHRvIGFub3RoZXIga2VybmVsIHZlcnNpb24uCisKKyBUaGUgcGF0Y2hlcyB3aWxsIHVwZGF0ZSB0aGUga2VybmVsIHN0YXJ0dXAgY29kZSB0byBhbGxvdyBib290IHBhcmFtZXRlcnMgdG8KKyBiZSBwYXNzZWQgdG8gdGhlIGRyaXZlciwgdXBkYXRlIHRoZSBEb2N1bWVudGF0aW9uIGFuZCBmaW5hbGx5IG9mZmVyIHlvdSB0aGUKKyBwb3NzaWJpbGl0eSB0byBvbWl0IHRoZSBub24tREMzOTAgcGFydHMgb2YgdGhlIGRyaXZlci4KKyAoQnkgc2VsZWN0aW5nICJPbWl0IHN1cHBvcnQgZm9yIG5vbiBEQzM5MCIgeW91IGJhc2ljYWxseSBkaXNhYmxlIHRoZQorIGVtdWxhdGlvbiBvZiBhIERDMzkwIEVFUFJPTSBmb3Igbm9uIERDMzkwIGFkYXB0ZXJzLiBUaGlzIHNhdmVzIGEgZmV3IGJ5dGVzCisgb2YgbWVtb3J5LikKKworSWYgeW91IGdvdCBhIHZlcnkgb2xkIGtlcm5lbCB3aXRob3V0IHRoZSB0bXNjc2ltIGRyaXZlciAocHJlIDIuMC4zMSkKK0kgcmVjb21tZW5kIHVwZ3JhZGluZyB5b3VyIGtlcm5lbC4gSG93ZXZlciwgaWYgeW91IGRvbid0IHdhbnQgdG8sIHBsZWFzZQorY29udGFjdCBtZSB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHBhdGNoZXMuCisKKworVXBncmFkaW5nIGEgU0NTSSBkcml2ZXIgaXMgYWx3YXlzIGEgZGVsaWNhdGUgdGhpbmcgdG8gZG8uIFRoZSAyLjAgZHJpdmVyIGhhcworcHJvdmVuIHN0YWJsZSBvbiBtYW55IHN5c3RlbXMsIGJ1dCBpdCdzIHN0aWxsIGEgZ29vZCBpZGVhIHRvIHRha2Ugc29tZQorcHJlY2F1dGlvbnMuIEluIGFuIGlkZWFsIHdvcmxkIHlvdSB3b3VsZCBoYXZlIGEgZnVsbCBiYWNrdXAgb2YgeW91ciBkaXNrcy4KK1RoZSB3b3JsZCBpc24ndCBpZGVhbCBhbmQgbW9zdCBwZW9wbGUgZG9uJ3QgaGF2ZSBmdWxsIGJhY2t1cHMgKG1lIG5laXRoZXIpLgorU28gdGFrZSBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIG1lYXN1cmVzOgorKiBtYWtlIHlvdXIga2VybmVsIHJlbW91bnQgdGhlIEZTIHJlYWQtb25seSBvbiBkZXRlY3RpbmcgYW4gZXJyb3I6CisgIHR1bmUyZnMgLWUgcmVtb3VudC1ybyAvZGV2L3NkPz8KKyogaGF2ZSBjb3BpZXMgb2YgeW91ciBTQ1NJIGRpc2sncyBwYXJ0aXRpb24gdGFibGVzIG9uIHNvbWUgc2FmZSBsb2NhdGlvbjoKKyAgZGQgaWY9L2Rldi9zZGEgb2Y9L21udC9mbG9wcHkvc2RhIGJzPTUxMiBjb3VudD0xCisgIG9yIGp1c3QgcHJpbnQgaXQgd2l0aDoKKyAgZmRpc2sgLWwgfCBscHIKKyogbWFrZSBzdXJlIHlvdSBhcmUgYWJsZSB0byBib290IExpbnV4IChlLmcuIGZyb20gZmxvcHB5IGRpc2sgdXNpbmcgSW5pdFJEKQorICBpZiB5b3VyIFNDU0kgZGlzayBnZXRzIGNvcnJ1cHRlZC4gWW91IGNhbiB1c2UgCisgIGZ0cDovL3N0dWRlbnQucGh5c2lrLnVuaS1kb3J0bXVuZC5kZS9wdWIvbGludXgva2VybmVsL2Jvb3RkaXNrLmd6CisKK09uZSBtb3JlIHdhcm5pbmc6IEkgdXNlZCB0byBvdmVyY2xvY2sgbXkgUENJIGJ1cyB0byA0MS42NyBNSHouIE15IFRla3JhbQorREMzOTBGIChTeW01M2M4NzUpIGFjY2VwdGVkIHRoaXMgYXMgd2VsbCBhcyBteSBNaWxsZW5pdW0uIEJ1dCB0aGUgQW01M0M5NzQKK3Byb2R1Y2VkIGVycm9ycyBhbmQgc3RhcnRlZCB0byBjb3JydXB0IG15IGRpc2tzLiBTbyBkb24ndCBkbyB0aGF0ISBBIDM3LjUwCitNSHogUENJIGJ1cyB3b3JrcyBmb3IgbWUsIHRob3VnaCwgYnV0IEkgZG9uJ3QgcmVjb21tZW5kIHVzaW5nIGhpZ2hlciBjbG9ja3MKK3RoYW4gdGhlIDMzLjMzIE1IeiBiZWluZyBpbiB0aGUgUENJIHNwZWMuCisKK0lmIHlvdSB3YW50IHRvIHNoYXJlIHRoZSBJUlEgd2l0aCBhbm90aGVyIGRldmljZSBhbmQgdGhlIGRyaXZlciByZWZ1c2VzIHRvCitkbyBzbywgeW91IG1pZ2h0IHN1Y2NlZWQgd2l0aCBjaGFuZ2luZyB0aGUgREMzOTBfSVJRIHR5cGUgaW4gdG1zY3NpbS5jIHRvIAorU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQuCisKKworMy5GZWF0dXJlcworLS0tLS0tLS0tLQorLSBTQ1NJCisgKiBUYWdnZWQgY29tbWFuZCBxdWV1ZWluZworICogU3luYyBzcGVlZCB1cCB0byAxMCBNSHoKKyAqIERpc2Nvbm5lY3Rpb24KKyAqIE11bHRpcGxlIExVTnMKKworLSBHZW5lcmFsIC8gTGludXggaW50ZXJmYWNlCisgKiBTdXBwb3J0IGZvciB1cCB0byA0IEFNNTNDOTc0IGFkYXB0ZXJzLgorICogREMzOTAgRUVQUk9NIHVzYWdlIG9yIGJvb3QvbW9kdWxlIHBhcmFtcworICogSW5mb3JtYXRpb24gdmlhIGNhdCAvcHJvYy9zY3NpL3Rtc2NzaW0vPworICogRHluYW1pY2FsbHkgY29uZmlndXJhYmxlIGJ5IHdyaXRpbmcgdG8gL3Byb2Mvc2NzaS90bXNjc2ltLz8KKyAqIER5bmFtaWMgYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMKKyAqIFNNUCBzdXBwb3J0OiBMb2NraW5nIG9uIGlvX3JlcXVlc3QgbG9jayAoTGludXggMi4xLzIuMikgb3IgYWRhcHRlciAKKyAgICBzcGVjaWZpYyBsb2NrcyAoTGludXggMi41PykKKyAqIFVuaWZvcm0gc291cmNlIGNvZGUgZm9yIExpbnV4LTIueC55CisgKiBTdXBwb3J0IGZvciBkeW4uIGFkZGl0aW9uL3JlbW92YWwgb2YgZGV2aWNlcyB2aWEgYWRkL3JlbW92ZS1zaW5nbGUtZGV2aWNlCisgICAoVHJ5OiBlY2hvICJzY3NpIGFkZC1zaW5nbGUtZGV2aWNlIEMgQiBUIFUiID4vcHJvYy9zY3NpL3Njc2kgCisgICAgQyA9IENvbnRyb2xsZXIsIEIgPSBCdXMsIFQgPSBUYXJnZXQgU0NTSSBJRCwgVSA9IFVuaXQgU0NTSSBMVU4uKSAKKyAgICBVc2Ugd2l0aCBjYXJlIQorICogVHJ5IHRvIHVzZSB0aGUgcGFydGl0aW9uIHRhYmxlIGZvciB0aGUgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgbWFwcGluZworCisKKzQuIENvbmZpZ3VyYXRpb24gdmlhIC9wcm9jL3Njc2kvdG1zY3NpbS8/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRmlyc3Qgb2YgYWxsIGxvb2sgYXQgdGhlIG91dHB1dCBvZiAvcHJvYy9zY3NpL3Rtc2NzaW0vPyBieSB0eXBpbmcKKyBjYXQgL3Byb2Mvc2NzaS90bXNjc2ltLz8KK1RoZSAiPyIgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IHRoZSBTQ1NJIGhvc3QgbnVtYmVyLiAoVGhlIHNoZWxsIG1pZ2h0IGRvIHRoaXMKK2ZvciB5b3UuKQorWW91IHdpbGwgc2VlIHNvbWUgaW5mbyByZWdhcmRpbmcgdGhlIGFkYXB0ZXIgYW5kLCBhdCB0aGUgZW5kLCBhIGxpc3Rpbmcgb2YKK3RoZSBhdHRhY2hlZCBkZXZpY2VzIGFuZCB0aGVpciBzZXR0aW5ncy4KKworSGVyZSdzIGFuIGV4YW1wbGU6CitnYXJsb2ZmQGt1cnQ6L2hvbWUvZ2FybG9mZiA+IGNhdCAvcHJvYy9zY3NpL3Rtc2NzaW0vMAorVGVrcmFtIERDMzkwL0FNNTNDOTc0IFBDSSBTQ1NJIEhvc3QgQWRhcHRlciwgRHJpdmVyIFZlcnNpb24gMi4wZTcgMjAwMC0xMS0yOAorU0NTSSBIb3N0IE5yIDEsIEFNNTNDOTc0IEFkYXB0ZXIgTnIgMAorSU9Qb3J0QmFzZSAweGIwMDAsIElSUSAxMAorTWF4SUQgOCwgTWF4TFVOIDgsIEFkYXB0ZXJJRCA2LCBTZWxUaW1lb3V0IDI1MCBtcywgRGVsYXlSZXNldCAxIHMKK1RhZ01heE51bSAxNiwgU3RhdHVzIDB4MDAsIEFDQkZsYWcgMHgwMCwgR2xpdGNoRWF0ZXIgMjQgbnMKK1N0YXRpc3RpY3M6IENtbmRzIDE0NzAxNjUsIENtbmRzIG5vdCBzZW50IGRpcmVjdGx5IDAsIE91dCBvZiBTUkIgY29uZHMgMAorICAgICAgICAgICAgTG9zdCBhcmJpdHJhdGlvbnMgNTg3LCAgU2VsLiBjb25uZWN0ZWQgMCwgQ29ubmVjdGVkOiBObworTnIgb2YgYXR0YWNoZWQgZGV2aWNlczogNCwgTnIgb2YgRENCczogNAorTWFwIG9mIGF0dGFjaGVkIExVTnM6IDAxIDAwIDAwIDAzIDAxIDAwIDAwIDAwCitJZHggSUQgTFVOIFBydHkgU3luYyBEc0NuIFNuZFMgVGFnUSBOZWdvUGVyaW9kIFN5bmNTcGVlZCBTeW5jT2ZmcyBNYXhDbWQKKzAwICAwMCAgMDAgIFllcyAgWWVzICBZZXMgIFllcyAgWWVzICAgMTAwIG5zICAgIDEwLjAgTSAgICAgIDE1ICAgICAgMTYKKzAxICAwMyAgMDAgIFllcyAgWWVzICBZZXMgIFllcyAgTm8gICAgMTAwIG5zICAgIDEwLjAgTSAgICAgIDE1ICAgICAgMDEKKzAyICAwMyAgMDEgIFllcyAgWWVzICBZZXMgIFllcyAgTm8gICAgMTAwIG5zICAgIDEwLjAgTSAgICAgIDE1ICAgICAgMDEKKzAzICAwNCAgMDAgIFllcyAgWWVzICBZZXMgIFllcyAgTm8gICAgMTAwIG5zICAgIDEwLjAgTSAgICAgIDE1ICAgICAgMDEKKworTm90ZSB0aGF0IHRoZSBzZXR0aW5ncyBNYXhJRCBhbmQgTWF4TFVOIGFyZSBub3QgemVyby0gYnV0IG9uZS1iYXNlZCwgd2hpY2gKK21lYW5zIHRoYXQgYSBzZXR0aW5nIE1heExVTj00LCB3aWxsIHJlc3VsdCBpbiB0aGUgc3VwcG9ydCBvZiBMVU5zIDAuLjMuIFRoaXMKK2lzIHNvbWVob3cgaW5jb252ZW5pZW50LCBidXQgdGhlIHdheSB0aGUgbWlkLWxldmVsIFNDU0kgY29kZSBleHBlY3RzIGl0IHRvIGJlLgorCitBQ0IgYW5kIERDQiBhcmUgYWNyb255bXMgZm9yIEFkYXB0ZXIgQ29udHJvbCBCbG9jayBhbmQgRGV2aWNlIENvbnRyb2wgQmxvY2suCitUaGVzZSBhcmUgZGF0YSBzdHJ1Y3R1cmVzIG9mIHRoZSBkcml2ZXIgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK2FkYXB0ZXIgYW5kIHRoZSBjb25uZWN0ZWQgU0NTSSBkZXZpY2VzIHJlc3BlY3RpdmVseS4KKworSWR4IGlzIHRoZSBkZXZpY2UgaW5kZXggKGp1c3QgYSBjb25zZWN1dGl2ZSBudW1iZXIgZm9yIHRoZSBkcml2ZXIpLCBJRCBhbmQKK0xVTiBhcmUgdGhlIFNDU0kgSUQgYW5kIExVTiwgUHJ0eSBtZWFucyBQYXJpdHkgY2hlY2tpbmcsIFN5bmMgc3luY2hyb25vdXMKK25lZ290aWF0aW9uLCBEc0NuIERpc2Nvbm5lY3Rpb24sIFNuZFMgU2VuZCBTdGFydCBjb21tYW5kIG9uIHN0YXJ0dXAgKG5vdAordXNlZCBieSB0aGUgZHJpdmVyKSBhbmQgVGFnUSBUYWdnZWQgQ29tbWFuZCBRdWV1ZWluZy4gTmVnb1BlcmlvZCBhbmQKK1N5bmNTcGVlZCBhcmUgc29tZWhvdyByZWR1bmRhbnQsIGJlY2F1c2UgdGhleSBhcmUgcmVjaXByb2NhbCB2YWx1ZXMgCisoMSAvIDExMiBucyA9IDguOSBNSHopLiBBdCBsZWFzdCBpbiB0aGVvcnkuIFRoZSBkcml2ZXIgaXMgYWJsZSB0byBhZGp1c3QgdGhlCitOZWdvUGVyaW9kIG1vcmUgYWNjdXJhdGUgKDRucykgdGhhbiB0aGUgU3luY1NwZWVkICgxIC8gMjVucykuIEkgZG9uJ3Qga25vdworaWYgY2VydGFpbiBkZXZpY2VzIHdpbGwgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoaXMgZGlzY3JlcGFuY3kuIE1heC4gc3BlZWQgaXMKKzEwIE1IeiBjb3JyZXNwLiB0byBhIG1pbi4gTmVnb1BlcmlvZCBvZiAxMDAgbnMuIAorKFRoZSBkcml2ZXIgYWxsb3dzIHNsaWdodGx5IGhpZ2hlciBzcGVlZHMgaWYgdGhlIGRldmljZXMgKFVsdHJhIFNDU0kpIGFjY2VwdAoraXQsIGJ1dCB0aGF0J3Mgb3V0IG9mIGFkYXB0ZXIgc3BlYywgb24geW91ciBvd24gcmlzayBhbmQgdW5saWtlbHkgdG8gaW1wcm92ZQorcGVyZm9ybWFuY2UuIFlvdSdyZSBsaWtlbHkgdG8gY3Jhc2ggeW91ciBkaXNrcy4pIAorU3luY09mZnMgaXMgdGhlIG9mZnNldCB1c2VkIGZvciBzeW5jaHJvbm91cyBuZWdvdGlhdGlvbnM7IG1heC4gaXMgMTUuIAorVGhlIGxhc3QgdmFsdWVzIGFyZSBvbmx5IHNob3duLCBpZiBTeW5jIGlzIGVuYWJsZWQuIChOZWdvUGVyaW9kIGlzIHN0aWxsCitkaXNwbGF5ZWQgaW4gYnJhY2tldHMgdG8gc2hvdyB0aGUgdmFsdWVzIHdoaWNoIHdpbGwgYmUgdXNlZCBhZnRlciBlbmFibGluZworU3luYy4pCitNYXhDbWQgaXN0IHRoZSBudW1iZXIgb2YgY29tbWFuZHMgKD10YWdzKSB3aGljaCBjYW4gYmUgcHJvY2Vzc2VkIGF0IHRoZSBzYW1lCit0aW1lIGJ5IHRoZSBkZXZpY2UuCisKK0lmIHlvdSB3YW50IHRvIGNoYW5nZSBhIHNldHRpbmcsIHlvdSBjYW4gZG8gdGhhdCBieSB3cml0aW5nIHRvCisvcHJvYy9zY3NpL3Rtc2NzaW0vPy4gQmFzaWNhbGx5IHlvdSBoYXZlIHRvIGltaXRhdGUgdGhlIG91dHB1dCBvZiBkcml2ZXIuCisoRG9uJ3QgdXNlIHRoZSBicmFja2V0cyBmb3IgTmVnb1BlcmlvZCBvbiBTeW5jIGRpc2FibGVkIGRldmljZXMuKQorWW91IGRvbid0IGhhdmUgdG8gY2FyZSBhYm91dCBjYXBpdGFsaXNhdGlvbi4gVGhlIGRyaXZlciB3aWxsIGFjY2VwdCBzcGFjZSwKK3RhYiwgY29tbWEsID0gYW5kIDogYXMgc2VwYXJhdG9ycy4KKworVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIGNoYW5nZXM6IAorCisoMSkgQ2hhbmdlIGRyaXZlciBzZXR0aW5nczogCisgICAgWW91IHR5cGUgdGhlIG5hbWVzIG9mIHRoZSBwYXJhbWV0ZXJzIGFuZCB0aGUgcGFyYW1zIGZvbGxvd2luZyBpdC4KKyAgICBFeGFtcGxlOgorICAgICBlY2hvICJNYXhMVU49OCBzZWx0aW1lb3V0IDIwMCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCisKKyAgICBOb3RlIHRoYXQgeW91IGNhbiBvbmx5IGNoYW5nZSBNYXhJRCwgTWF4TFVOLCBBZGFwdGVySUQsIFNlbFRpbWVPdXQsCisgICAgVGFnTWF4TnVtLCBBQ0JGbGFnLCBHbGl0Y2hFYXRlciBhbmQgRGVsYXlSZXNldC4gRG9uJ3QgY2hhbmdlIEFDQkZsYWcKKyAgICB1bmxlc3MgeW91IHdhbnQgdG8gc2VlIHdoYXQgaGFwcGVucywgaWYgdGhlIGRyaXZlciBoYW5ncy4KKworKDIpIENoYW5nZSBkZXZpY2Ugc2V0dGluZ3M6IFlvdSB3cml0ZSBhIGNvbmZpZyBsaW5lIHRvIHRoZSBkcml2ZXIuIFRoZSBOcgorICAgIG11c3QgbWF0Y2ggdGhlIElEIGFuZCBMVU4gZ2l2ZW4uIElmIHlvdSBnaXZlICItIiBhcyBwYXJhbWV0ZXIsIGl0IGlzCisgICAgaWdub3JlZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc2V0dGluZyB3b24ndCBiZSBjaGFuZ2VkLiAKKyAgICBZb3UgY2FuIHVzZSAieSIgb3IgIm4iIGluc3RlYWQgb2YgIlllcyIgYW5kICJObyIgaWYgeW91IHdhbnQgdG8uCisgICAgWW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhIGZ1bGwgbGluZS4gVGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IHBlcmZvcm1zCisgICAgYW4gSU5RVUlSWSBvbiB0aGUgZGV2aWNlIGlmIG5lY2Vzc2FyeSB0byBjaGVjayBpZiBpdCBpcyBjYXBhYmxlIHRvIG9wZXJhdGUKKyAgICB3aXRoIHRoZSBnaXZlbiBzZXR0aW5ncyAoU3luYywgVGFnUSkuCisgICAgRXhhbXBsZXM6CisgICAgIGVjaG8gIjAgMCAwIHkgeSB5IC0geSAtIDEwICIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCisgICAgIGVjaG8gIjMgNSAwIHkgbiB5ICIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCisKKyAgICBUbyBnaXZlIGEgc2hvcnQgZXhwbGFuYXRpb24gb2YgdGhlIGZpcnN0IGV4YW1wbGU6IAorICAgIFRoZSBmaXJzdCB0aHJlZSBudW1iZXJzLCAiMCAwIDAiIChEZXZpY2UgaW5kZXggMCwgU0NTSSBJRCAwLCBTQ1NJIExVTiAwKSwKKyAgICBzZWxlY3QgdGhlIGRldmljZSB0byB3aGljaCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXBwbHkuIE5vdGUgdGhhdCBpdAorICAgIHdvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdXNlIHRoZSBpbmRleCBvciBib3RoIFNDU0kgSUQgYW5kIExVTiwgYnV0IEkgY2hvc2UKKyAgICB0byByZXF1aXJlIGFsbCB0aHJlZSB0byBoYXZlIGEgc3ludGF4IHNpbWlsYXIgdG8gdGhlIG91dHB1dC4KKyAgICBUaGUgZm9sbG93aW5nICJ5IHkgeSAtIHkiIGVuYWJsZXMgUGFyaXR5IGNoZWNraW5nLCBlbmFibGVzIFN5bmNocm9ub3VzCisgICAgdHJhbnNmZXJzLCBEaXNjb25uZWN0aW9uLCBsZWF2ZXMgU2VuZCBTdGFydCAobm90IHVzZWQpIHVudG91Y2hlZCBhbmQKKyAgICBlbmFibGVzIFRhZ2dlZCBDb21tYW5kIFF1ZXVlaW5nIGZvciB0aGUgc2VsZWN0ZWQgZGV2aWNlLiBUaGUgIi0iIHNraXBzCisgICAgdGhlIE5lZ290aWF0aW9uIFBlcmlvZCBzZXR0aW5nIGJ1dCB0aGUgIjEwIiBzZXRzIHRoZSBtYXggc3luYy4gc3BlZWQgdG8KKyAgICAxMCBNSHouIEl0J3MgdXNlbGVzcyB0byBzcGVjaWZ5IGJvdGggTmVnb1BlcmlvZCBhbmQgU3luY1NwZWVkIGFzCisgICAgZGlzY3Vzc2VkIGFib3ZlLiBUaGUgdmFsdWVzIHVzZWQgaW4gdGhpcyBleGFtcGxlIHdpbGwgcmVzdWx0IGluIG1heGltdW0KKyAgICBwZXJmb3JtYW5jZS4KKworKDMpIFNwZWNpYWwgY29tbWFuZHM6IFlvdSBjYW4gZm9yY2UgYSBTQ1NJIGJ1cyByZXNldCwgYW4gSU5RVUlSWSBjb21tYW5kLCB0aGUKKyAgICByZW1vdmFsIG9yIHRoZSBhZGRpdGlvbiBvZiBhIGRldmljZSdzIERDQiBhbmQgYSBTQ1NJIHJlZ2lzdGVyIGR1bXAuCisgICAgVGhpcyBpcyBvbmx5IHVzZWQgZm9yIGRlYnVnZ2luZyB3aGVuIHlvdSBtZWV0IHByb2JsZW1zLiBUaGUgcGFyYW1ldGVyIG9mCisgICAgdGhlIElOUVVJUlkgYW5kIFJFTU9WRSBjb21tYW5kcyBpcyB0aGUgZGV2aWNlIGluZGV4IGFzIHNob3duIGJ5IHRoZQorICAgIG91dHB1dCBvZiAvcHJvYy9zY3NpL3Rtc2NzaW0vPyBpbiB0aGUgZGV2aWNlIGxpc3RpbmcgaW4gdGhlIGZpcnN0IGNvbHVtbgorICAgIChJZHgpLiBBREQgdGFrZXMgdGhlIFNDU0kgSUQgYW5kIExVTi4KKyAgICBFeGFtcGxlczoKKyAgICAgZWNobyAicmVzZXQiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorICAgICBlY2hvICJpbnF1aXJ5IDEiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorICAgICBlY2hvICJyZW1vdmUgMiIgPi9wcm9jL3Njc2kvdG1zY3NpbS8xCisgICAgIGVjaG8gImFkZCAyIDMiID4vcHJvYy9zY3NpL3Rtc2NzaW0vPworICAgICBlY2hvICJkdW1wIiA+L3Byb2Mvc2NzaS90bXNjc2ltLzAKKworICAgIE5vdGUgdGhhdCB5b3Ugd2lsbCBtZWV0IHByb2JsZW1zIHdoZW4geW91IFJFTU9WRSBhIGRldmljZSdzIERDQiB3aXRoIHRoZQorICAgIHJlbW92ZSBjb21tYW5kIGlmIGl0IGNvbnRhaW5zIHBhcnRpdGlvbnMgd2hpY2ggYXJlIG1vdW50ZWQuIE9ubHkgdXNlIGl0CisgICAgYWZ0ZXIgdW5tb3VudGluZyBpdHMgcGFydGl0aW9ucywgdGVsbGluZyB0aGUgU0NTSSBtaWQtbGV2ZWwgY29kZSB0bworICAgIHJlbW92ZSBpdCAoc2NzaSByZW1vdmUtc2luZ2xlLWRldmljZSkgYW5kIHlvdSByZWFsbHkgbmVlZCBhIGZldyBieXRlcyBvZgorICAgIG1lbW9yeS4KKyAgICBUaGUgQUREIGNvbW1hbmQgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgYSBkZXZpY2UgYmVmb3JlIHlvdSB0ZWxsIHRoZQorICAgIG1pZC1sZXZlbCBjb2RlIHRvIHRyeSBkZXRlY3Rpb24uCisKKworSSdkIHN1Z2dlc3QgcmV2aWV3aW5nIHRoZSBvdXRwdXQgb2YgL3Byb2Mvc2NzaS90bXNjc2ltLz8gYWZ0ZXIgY2hhbmdpbmcKK3NldHRpbmdzIHRvIHNlZSBpZiBldmVyeXRoaW5nIGNoYW5nZWQgYXMgcmVxdWVzdGVkLgorCisKKzUuIENvbmZpZ3VyYXRpb24gdmlhIGJvb3QvbW9kdWxlIHBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1dpdGggdGhlIERDMzkwLCB0aGUgZHJpdmVyIHJlYWRzIGl0cyBFRVBST00gc2V0dGluZ3MgYW5kIHRyaWVzIHRvIHVzZSB0aGVtLgorQnV0IHlvdSBtYXkgd2FudCB0byBvdmVycmlkZSB0aGUgc2V0dGluZ3MgcHJpb3IgdG8gYmVpbmcgYWJsZSB0byBjaGFuZ2UgdGhlCitkcml2ZXIgY29uZmlndXJhdGlvbiB2aWEgL3Byb2Mvc2NzaS90bXNjc2ltLz8uCitJZiB5b3UgZG8gaGF2ZSBhbm90aGVyIEFNNTNDOTc0IGJhc2VkIGFkYXB0ZXIsIHRoYXQncyBldmVuIHRoZSBvbmx5Citwb3NzaWJpbGl0eSB0byBhZGp1c3Qgc2V0dGluZ3MgYmVmb3JlIHlvdSBhcmUgYWJsZSB0byB3cml0ZSB0byB0aGUKKy9wcm9jL3Njc2kvdG1zY3NpbS8/IHBzZXVkby1maWxlLCBlLmcuIGlmIHlvdSB3YW50IHRvIHVzZSBhbm90aGVyIAorYWRhcHRlciBJRCB0aGFuIDcuICAKKyhCVFcsIHRoZSBsb2cgbWVzc2FnZSAiREMzOTA6IE5vIEVFUFJPTSBmb3VuZCEiIGlzIG5vcm1hbCB3aXRob3V0IGEgREMzOTAuKQorRm9yIHRoaXMgcHVycG9zZSwgeW91IGNhbiBwYXNzIG9wdGlvbnMgdG8gdGhlIGRyaXZlciBiZWZvcmUgaXQgaXMgaW5pdGlhbGlzZWQKK2J5IHVzaW5nIGtlcm5lbCBvciBtb2R1bGUgcGFyYW1ldGVycy4gU2VlIGxpbG8oOCkgb3IgbW9kcHJvYmUoMSkgbWFudWFsCitwYWdlcyBvbiBob3cgdG8gcGFzcyBwYXJhbXMgdG8gdGhlIGtlcm5lbCBvciBhIG1vZHVsZS4KK1tOT1RFOiBGb3JtZXJseSwgaXQgd2FzIG5vdCBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgRUVQUk9NIHN1cHBsaWVkCisgc2V0dGluZ3Mgb2YgdGhlIERDMzkwIHdpdGggY21kIGxpbmUgcGFyYW1ldGVycy4gVGhpcyBoYXMgY2hhbmdlZCBzaW5jZQorIDIuMGU3XQorCitUaGUgc3ludGF4IG9mIHRoZSBwYXJhbXMgaXMgbXVjaCBzaG9ydGVyIHRoYW4gdGhlIHN5bnRheCBvZiB0aGUgL3Byb2MvLi4uCitpbnRlcmZhY2UuIFRoaXMgbWFrZXMgaXQgYSBsaXR0bGUgYml0IG1vcmUgZGlmZmljdWx0IHRvIHVzZS4gSG93ZXZlciwgbG9uZworcGFyYW1ldGVyIGxpbmVzIGhhdmUgdGhlIHJpc2sgdG8gYmUgbWlzaW50ZXJwcmV0ZWQgYW5kIHRoZSBsZW5ndGggb2Yga2VybmVsCitwYXJhbWV0ZXJzIGlzIGxpbWl0ZWQuCisKK0FzIHRoZSBzdXBwb3J0IGZvciBub24tREMzOTAgYWRhcHRlcnMgd29ya3MgYnkgc2ltdWxhdGluZyB0aGUgdmFsdWVzIG9mIHRoZQorREMzOTAgRUVQUk9NLCB0aGUgc2V0dGluZ3MgYXJlIGdpdmVuIGluIGEgREMzOTAgQklPUycgd2F5LgorCitIZXJlJ3MgdGhlIHN5bnRheDoKK3Rtc2NzaW09QWRhcHRJRCxTcGRJZHgsRGV2TW9kZSxBZGFwdE1vZGUsVGFnZ2VkQ21uZHMsRGVsYXlSZXNldAorCitFYWNoIG9mIHRoZSBwYXJhbWV0ZXJzIGlzIGEgbnVtYmVyLCBjb250YWluaW5nIHRoZSBkZXNjcmliZWQgaW5mb3JtYXRpb246CisKKyogQWRhcHRJRDogVGhlIFNDU0kgSUQgb2YgdGhlIGhvc3QgYWRhcHRlci4gTXVzdCBiZSBpbiB0aGUgcmFuZ2UgMC4uNworICBEZWZhdWx0IGlzIDcuCisKKyogU3BkSWR4OiBUaGUgaW5kZXggb2YgdGhlIG1heGltdW0gc3BlZWQgYXMgaW4gdGhlIERDMzkwIEJJT1MuIFRoZSB2YWx1ZXMKKyAgMC4uNyBtZWFuIDEwLCA4LjAsIDYuNywgNS43LCA1LjAsIDQuMCwgMy4xIGFuZCAyIE1IeiByZXNwLiBEZWZhdWx0IGlzCisgIDAgKDEwLjAgTUh6KS4KKworKiBEZXZNb2RlIGlzIGEgYml0IG1hcHBlZCB2YWx1ZSBkZXNjcmliaW5nIHRoZSBwZXItZGV2aWNlIGZlYXR1cmVzLiBJdAorICBhcHBsaWVzIHRvIGFsbCBkZXZpY2VzLiAoU3luYywgRGlzYyBhbmQgVGFnUSB3aWxsIG9ubHkgYXBwbHksIGlmIHRoZQorICBkZXZpY2Ugc3VwcG9ydHMgaXQuKSBUaGUgbWVhbmluZyBvZiB0aGUgYml0cyAoKiA9IGRlZmF1bHQpOgorCisgICBCaXQgVmFsKGhleCkgVmFsKGRlYykgIE1lYW5pbmcKKyAgICowCSAweDAxCSAgICAxCSAgUGFyaXR5IGNoZWNrCisgICAqMQkgMHgwMgkgICAgMgkgIFN5bmNocm9ub3VzIE5lZ290aWF0aW9uCisgICAqMgkgMHgwNAkgICAgNAkgIERpc2Nvbm5lY3Rpb24KKyAgICozCSAweDA4CSAgICA4CSAgU2VuZCBTdGFydCBjb21tYW5kIG9uIHN0YXJ0dXAuIChOb3QgdXNlZCkKKyAgICo0CSAweDEwCSAgIDE2CSAgVGFnZ2VkIENvbW1hbmQgUXVldWVpbmcKKworICBBcyB1c3VhbCwgdGhlIGRlc2lyZWQgdmFsdWUgaXMgb2J0YWluZWQgYnkgYWRkaW5nIHRoZSB3YW50ZWQgdmFsdWVzLiBJZgorICB5b3Ugd2FudCB0byBlbmFibGUgYWxsIHZhbHVlcywgZS5nLiwgeW91IHdvdWxkIHVzZSAzMSgweDFmKS4gRGVmYXVsdCBpcyAzMS4KKworKiBBZGFwdE1vZGUgaXMgYSBiaXQgbWFwcGVkIHZhbHVlIGRlc2NyaWJpbmcgdGhlIGVuYWJsZWQgYWRhcHRlciBmZWF0dXJlcy4KKworICAgQml0IFZhbChoZXgpIFZhbChkZWMpICBNZWFuaW5nCisgICAqMAkgMHgwMQkgICAgMQkgIFN1cHBvcnQgbW9yZSB0aGFuIHR3byBkcml2ZXMuIChOb3QgdXNlZCkKKyAgICoxCSAweDAyCSAgICAyCSAgVXNlIERPUyBjb21wYXRpYmxlIG1hcHBpbmcgZm9yIEhEcyBncmVhdGVyIHRoYW4gMUdCLgorICAgKjIJIDB4MDQJICAgIDQJICBSZXNldCBTQ1NJIEJ1cyBvbiBzdGFydHVwLgorICAgKjMJIDB4MDgJICAgIDgJICBBY3RpdmUgTmVnYXRpb246IEltcHJvdmVzIFNDU0kgQnVzIG5vaXNlIGltbXVuaXR5LgorICAgIDQJIDB4MTAJICAgMTYJICBJbW1lZGlhdGUgcmV0dXJuIG9uIEJJT1Mgc2VlayBjb21tYW5kLiAoTm90IHVzZWQpCisgKCopNQkgMHgyMAkgICAzMgkgIENoZWNrIGZvciBMVU5zID49IDEuCisgIAorICBUaGUgZGVmYXVsdCBmb3IgTFVOIENoZWNrIGRlcGVuZHMgb24gQ09ORklHX1NDU0lfTVVMVElfTFVOLgorCisqIFRhZ2dlZENtbmRzIGlzIGEgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIFRhZ2dlZCBDb21tYW5kcy4KKyAgSXQgaXMgdGhlIGJpbmFyeSBsb2dhcml0aG0gLSAxIG9mIHRoZSBhY3R1YWwgbnVtYmVyLiBNYXggaXMgNCAoMzIpLgorICAgVmFsdWUgIE51bWJlciBvZiBUYWdnZWQgQ29tbWFuZHMKKyAgICAgMAkJIDIKKyAgICAgMQkJIDQKKyAgICAgMgkJIDgKKyAgICAqMwkJMTYKKyAgICAgNAkJMzIKKworKiBEZWxheVJlc2V0IGlzIHRoZSB0aW1lIGluIHNlY29uZHMgKG1pbnVzIDAuNXMpLCB0aGUgYWRhcHRlciB3YWl0cywgYWZ0ZXIgYQorICBidXMgcmVzZXQuIERlZmF1bHQgaXMgMSAoY29ycmVzcC4gdG8gMS41cykuCisKK0V4YW1wbGU6CisgbW9kcHJvYmUgdG1zY3NpbSB0bXNjc2ltPTYsMiwzMQord291bGQgc2V0IHRoZSBhZGFwdGVyIElEIHRvIDYsIG1heC4gc3BlZWQgdG8gNi43IE1IeiwgZW5hYmxlIGFsbCBkZXZpY2UKK2ZlYXR1cmVzIGFuZCBsZWF2ZSB0aGUgYWRhcHRlciBmZWF0dXJlcywgdGhlIG51bWJlciBvZiBUYWdnZWQgQ29tbWFuZHMKK2FuZCB0aGUgRGVsYXkgYWZ0ZXIgYSByZXNldCB0byB0aGUgZGVmYXVsdHMuCisKK0FzIHlvdSBjYW4gc2VlLCB5b3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGFsbCBvZiB0aGUgc2l4IHBhcmFtcy4KK0lmIHlvdSB3YW50IHZhbHVlcyB0byBiZSBpZ25vcmVkIChpLmUuIHRoZSBFRXByb20gc2V0dGluZ3Mgb3IgdGhlIGRlZmF1bHRzCit3aWxsIGJlIHVzZWQpLCB5b3UgbWF5IHBhc3MgLTIgKG5vdCAwISkgYXQgdGhlIGNvcnJlc3BvbmRpbmcgcG9zaXRpb24uCisKK1RoZSBkZWZhdWx0cyAoNywwLDMxLDE1LDMsMSkgYXJlIGFnZ3Jlc3NpdmUgdG8gYWxsb3cgZ29vZCBwZXJmb3JtYW5jZS4gWW91CitjYW4gdXNlIHRtc2NzaW09NywwLDMxLDYzLDQsMCBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZSwgaWYgeW91ciBTQ1NJIGNoYWluCithbGxvd3MgaXQuIElmIHlvdSBtZWV0IHByb2JsZW1zLCB5b3UgY2FuIHVzZSB0bXNjc2ltPS0xIHdoaWNoIGlzIGEgc2hvcnRjdXQKK2ZvciB0bXNjc2ltPTcsNCw5LDE1LDIsMTAuCisKKworNi4gUG90ZW50aWFsIGltcHJvdmVtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTW9zdCBvZiB0aGUgaW50ZW5kZWQgd29yayBvbiB0aGUgZHJpdmVyIGhhcyBiZWVuIGRvbmUuIEhlcmUgYXJlIGEgZmV3IGlkZWFzCit0byBmdXJ0aGVyIGltcHJvdmUgaXRzIHVzYWJpbGl0eToKKworKiBDbGVhbmx5IHNlcGFyYXRlIHBlci1UYXJnZXQgYW5kIHBlci1MVU4gcHJvcGVydGllcyAoRENCKQorKiBNb3JlIGludGVsbGlnZW50IGFib3J0KCkgcm91dGluZQorKiBVc2UgbmV3X2VoIGNvZGUgKExpbnV4LTIuMSspCisqIEhhdmUgdGhlIG1pZC1sZXZlbCAoTUwpIGNvZGUgKGFuZCBub3QgdGhlIGRyaXZlcikgaGFuZGxlIG1vcmUgb2YgdGhlCisgIHZhcmlvdXMgY29uZGl0aW9ucy4KKyogQ29tbWFuZCBxdWV1ZWluZyBpbiB0aGUgZHJpdmVyOiBFbGltaW5hdGUgUXVlcnkgbGlzdCBhbmQgdXNlIE1MIGluc3RlYWQuCisqIE1vcmUgdXNlciBmcmllbmRseSBib290L21vZHVsZSBwYXJhbSBzeW50YXgKKworRnVydGhlciBpbnZlc3RpZ2F0aW9uIG9uIHRoZXNlIHByb2JsZW1zOgorCisqIERyaXZlciBoYW5ncyB3aXRoIHN5bmMgcmVhZGNkZGEgKHhjZHJvYXN0KSAobW9zdCBwcm9iYWJseSBWSUEgUENJIGVycm9yKQorCitLbm93biBwcm9ibGVtczogCitQbGVhc2Ugc2VlIGh0dHA6Ly93d3cuZ2FybG9mZi5kZS9rdXJ0L2xpbnV4L2RjMzkwL3Byb2JsZW1zLmh0bWwKKworKiBDaGFuZ2luZyB0aGUgcGFyYW1ldGVycyBvZiBtdWx0aS1sdW4gYnkgdGhlIHRtc2NzaW0vPyBpbnRlcmZhY2Ugd2lsbAorICBjYXVzZSBwcm9ibGVtcywgY2F1c2UgdGhlc2Ugc2V0dGluZ3MgYXJlIG1vc3RseSBwZXIgVGFyZ2V0IGFuZCBub3QgcGVyIExVTgorICBhbmQgc2hvdWxkIGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuIFRvIGJlIGZpeGVkIGZvciAyLjBkMjQuCisqIENEUnMgKGVnIFlhbSBDUlc0NDE2KSBub3QgcmVjb2duaXplZCwgYmVjYXVzZSBzb21lIGJ1Z2d5IGRldmljZXMgZG9uJ3QgCisgIHJlY292ZXIgZnJvbSBhIFNDU0kgcmVzZXQgaW4gdGltZS4gVXNlIGEgaGlnaGVyIGRlbGF5IG9yIGRvbid0IGlzc3VlCisgIGEgU0NTSSBidXMgcmVzZXQgb24gZHJpdmVyIGluaXRpYWxpemF0aW9uLiBTZWUgcHJvYmxlbXMgcGFnZS4KKyAgRm9yIHRoZSBDUlc0NDE2UywgdGhpcyBzZWVtcyB0byBiZSBzb2x2ZWQgd2l0aCBmaXJtd2FyZSAxLjBnIChyZXBvcnRlZCBieSAKKyAgSmVhbi1ZdmVzIEJhcmJpZXIpLgorKiBURUFDIENELTUzMlMgbm90IGJlaW5nIHJlY29nbml6ZWQuIChXb3JrcyB3aXRoIDEuMTEpLgorKiBTY2FubmVycyAoZWcuIEFzdHJhIFVNQVggMTIyMFMpIGRvbid0IHdvcms6IERpc2FibGUgU3luYyBOZWdvdGlhdGlvbi4KKyAgSWYgdGhpcyBkb2VzIG5vdCBoZWxwLCB0cnkgZWNobyAiSU5RVUlSWSB0IiA+L3Byb2Mvc2NzaS90bXNjc2ltLz8gKHQKKyAgcmVwbGFjZWQgYnkgdGhlIGRldiBpbmRleCBvZiB5b3VyIHNjYW5uZXIpLiBZb3UgbWF5IHRyeSB0byByZXNldCB5b3VyIFNDU0kKKyAgYnVzIGFmdGVyd2FyZHMgKGVjaG8gIlJFU0VUIiA+L3Byb2Mvc2NzaS90bXNjc2ltLz8pLgorICBUaGUgcHJvYmxlbSBzZWVtcyB0byBiZSBzb2x2ZWQgYXMgb2YgMi4wZDE4LCB0aGFua3MgdG8gQW5kcmVhcyBSaWNrLgorKiBJZiB0aGVyZSBpcyBhIHZhbGlkIHBhcnRpdGlvbiB0YWJsZSwgdGhlIGRyaXZlciB3aWxsIHVzZSBpdCBmb3IgZGV0ZXJtaW5nCisgIHRoZSBtYXBwaW5nLiBJZiB0aGVyZSdzIG5vbmUsIGEgcmVhc29uYWJsZSBtYXBwaW5nIChTeW1iaW9zLWxpa2UpIHdpbGwgYmUKKyAgYXNzdW1lZC4gT3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgbWF5IG5vdCBsaWtlIHRoaXMgbWFwcGluZywgdGhvdWdoCisgIGl0J3MgY29uc2lzdGVudCB3aXRoIHRoZSBCSU9TJyBiZWhhdmlvdXIuIE9sZCBEQzM5MCBkcml2ZXJzIGlnbm9yZWQgdGhlCisgIHBhcnRpdGlvbiB0YWJsZSBhbmQgdXNlZCBhIEgvUyA9IDY0LzMyIG9yIDI1NS82MyB0cmFuc2xhdGlvbi4gU28gaWYgeW91CisgIHdhbnQgdG8gYmUgY29tcGF0aWJsZSB0byB0aG9zZSwgdXNlIHRoaXMgb2xkIG1hcHBpbmcgd2hlbiBjcmVhdGluZworICBwYXJ0aXRpb24gdGFibGVzLiBFdmVuIHdvcnNlLCBvbiBib290dXAgdGhlIERDMzkwIG1pZ2h0IGNvbXBsYWluIGlmIG90aGVyCisgIG1hcHBpbmdzIGFyZSBmb3VuZCwgc28gYXV0byByZWJvb3RpbmcgbWF5IGZhaWwuCisqIEluIHNvbWUgc2l0dWF0aW9ucywgdGhlIGRyaXZlciB3aWxsIGdldCBzdHVjayBpbiBhbiBhYm9ydCBsb29wLiBUaGlzIGlzIGEKKyAgYmFkIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIE1pZC1MYXllciBvZiBMaW51eCcgU0NTSSBjb2RlIGFuZCB0aGUgZHJpdmVyLgorICBUcnkgdG8gZGlzYWJsZSBEc0NuLCBpZiB5b3UgbWVldCB0aGlzIHByb2JsZW0uIFBsZWFzZSBjb250YWN0IG1lIGZvcgorICBmdXJ0aGVyIGRlYnVnZ2luZy4KKworCis3LiBCdWcgcmVwb3J0cywgZGVidWdnaW5nIGFuZCB1cGRhdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaGVuZXZlciB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZSBkcml2ZXIsIHlvdSBhcmUgaW52aXRlZCB0byBhc2sgdGhlCithdXRob3IgZm9yIGhlbHAuIEhvd2V2ZXIsIEknZCBzdWdnZXN0IHJlYWRpbmcgdGhlIGRvY3MgYW5kIHRyeWluZyB0byBzb2x2ZQordGhlIHByb2JsZW0geW91cnNlbGYsIGZpcnN0LiAKK0lmIHlvdSBmaW5kIHNvbWV0aGluZywgd2hpY2ggeW91IGJlbGlldmUgdG8gYmUgYSBidWcsIHBsZWFzZSByZXBvcnQgaXQgdG8gbWUuIAorUGxlYXNlIGFwcGVuZCB0aGUgb3V0cHV0IG9mIC9wcm9jL3Njc2kvc2NzaSwgL3Byb2Mvc2NzaS90bXNjc2ltLz8gYW5kCittYXliZSB0aGUgREMzOTAgbG9nIG1lc3NhZ2VzIHRvIHRoZSByZXBvcnQuIAorCitCdWcgcmVwb3J0cyBzaG91bGQgYmUgc2VuZCB0byBtZSAoS3VydCBHYXJsb2ZmIDxkYzM5MEBnYXJsb2ZmLmRlPikgYXMgd2VsbAorYXMgdG8gdGhlIGxpbnV4LXNjc2kgbGlzdCAoPGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnPiksIGFzIHNvbWV0aW1lcyBidWdzCithcmUgY2F1c2VkIGJ5IHRoZSBTQ1NJIG1pZC1sZXZlbCBjb2RlLgorCitJIHdpbGwgYXNrIHlvdSBmb3Igc29tZSBtb3JlIGRldGFpbHMgYW5kIHByb2JhYmx5IEkgd2lsbCBhbHNvIGFzayB5b3UgdG8KK2VuYWJsZSBzb21lIG9mIHRoZSBERUJVRyBvcHRpb25zIGluIHRoZSBkcml2ZXIgKHRtc2NzaW0uYzpEQzM5MF9ERUJVR1hYWAorZGVmaW5lcykuIFRoZSBkcml2ZXIgd2lsbCBwcm9kdWNlIHNvbWUgZGF0YSBmb3IgdGhlIHN5c2xvZyBmYWNpbGl0eSB0aGVuLgorQmV3YXJlOiBJZiB5b3VyIHN5c2xvZyBnZXRzIHdyaXR0ZW4gdG8gYSBTQ1NJIGRpc2sgY29ubmVjdGVkIHRvIHlvdXIKK0FNNTNDOTc0LCB0aGUgbG9nZ2luZyBtaWdodCBwcm9kdWNlIGxvZyBvdXRwdXQgYWdhaW4sIGFuZCB5b3UgbWlnaHQgZW5kCitoYXZpbmcgeW91ciBib3ggc3BlbmRpbmcgbW9zdCBvZiBpdHMgdGltZSBkb2luZyB0aGUgbG9nZ2luZy4KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0OgorIGh0dHA6Ly93d3cuZ2FybG9mZi5kZS9rdXJ0L2xpbnV4L2RjMzkwLworIGZ0cDovL2Z0cC5zdXNlLmNvbS9wdWIvcGVvcGxlL2dhcmxvZmYvbGludXgvZGMzOTAvCisKKworOC4gQWNrbm93bGVkZ2VtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhhbmtzIHRvIExpbnVzIFRvcnZhbGRzLCBBbGFuIENveCwgdGhlIEZTRiBwZW9wbGUsIHRoZSBYRnJlZTg2IHRlYW0gYW5kIAorYWxsIHRoZSBvdGhlcnMgZm9yIHRoZSB3b25kZXJmdWwgT1MgYW5kIHNvZnR3YXJlLgorVGhhbmtzIHRvIEMuTC4gSHVhbmcgYW5kIFBoaWxpcCBHaWFuZyAoVGVrcmFtKSBmb3IgdGhlIGluaXRpYWwgZHJpdmVyCityZWxlYXNlIGFuZCBzdXBwb3J0LgorVGhhbmtzIHRvIERvdWcgTGVkZm9yZCwgR+lyYXJkIFJvdWRpZXIgZm9yIHN1cHBvcnQgd2l0aCBTQ1NJIGNvZGluZy4KK1RoYW5rcyB0byBhIGxvdCBvZiBwZW9wbGUgKGVzcGVjLiBDaGlha2kgSXNoaWthd2EsIEFuZHJlYXMgSGF1bWVyLCBIdWJlcnQgCitUb25uZWF1KSBmb3IgaW50ZW5zaXZlbHkgdGVzdGluZyB0aGUgZHJpdmVyIChhbmQgZXZlbiByaXNraW5nIGRhdGEgbG9zcworZG9pbmcgdGhpcyBkdXJpbmcgZWFybHkgcmV2aXNpb25zKS4KK1JlY2VudGx5LCBTdVNFIEdtYkgsIE51ZXJuYmVyZywgRlJHLCBoYXMgYmVlbiBwYXlpbmcgbWUgZm9yIHRoZSBkcml2ZXIKK2RldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZS4gU3BlY2lhbCB0aGFua3MhCisKKworOS4gQ29weXJpZ2h0CistLS0tLS0tLS0tLS0KKyBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAKKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgSWYgeW91IHdhbnQgdG8gdXNlIGFueSBsYXRlciB2ZXJzaW9uIG9mIHRoZSBHTlUgR1BMLCB5b3Ugd2lsbCBwcm9iYWJseQorIGJlIGFsbG93ZWQgdG8sIGJ1dCB5b3UgaGF2ZSB0byBhc2sgbWUgYW5kIFRla3JhbSA8ZXJpY2hAdGVrcmFtLmNvbS50dz4KKyBiZWZvcmUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1dyaXR0ZW4gYnkgS3VydCBHYXJsb2ZmIDxrdXJ0QGdhcmxvZmYuZGU+IDE5OTgvMDYvMTEKK0xhc3QgdXBkYXRlZCAyMDAwLzExLzI4LCBkcml2ZXIgcmV2aXNpb24gMi4wZTcKKyRJZDogUkVBRE1FLnRtc2NzaW0sdiAyLjI1LjIuNyAyMDAwLzEyLzIwIDAxOjA3OjEyIGdhcmxvZmYgRXhwICQK