SU5UUk9EVUNUSU9OCgogIFRoZSBVU0Igc2VyaWFsIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgYSBudW1iZXIgb2YgZGlmZmVyZW50IFVTQiB0bwogIHNlcmlhbCBjb252ZXJ0ZXIgcHJvZHVjdHMsIGFzIHdlbGwgYXMgc29tZSBkZXZpY2VzIHRoYXQgdXNlIGEgc2VyaWFsCiAgaW50ZXJmYWNlIGZyb20gdXNlcnNwYWNlIHRvIHRhbGsgdG8gdGhlIGRldmljZS4KCiAgU2VlIHRoZSBpbmRpdmlkdWFsIHByb2R1Y3Qgc2VjdGlvbiBiZWxvdyBmb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQKICB0aGUgZGlmZmVyZW50IGRldmljZXMuCgoKQ09ORklHVVJBVElPTgoKICBDdXJyZW50bHkgdGhlIGRyaXZlciBjYW4gaGFuZGxlIHVwIHRvIDI1NiBkaWZmZXJlbnQgc2VyaWFsIGludGVyZmFjZXMgYXQKICBvbmUgdGltZS4gCgogICAgVGhlIG1ham9yIG51bWJlciB0aGF0IHRoZSBkcml2ZXIgdXNlcyBpcyAxODggc28gdG8gdXNlIHRoZSBkcml2ZXIsCiAgICBjcmVhdGUgdGhlIGZvbGxvd2luZyBub2RlczoKCW1rbm9kIC9kZXYvdHR5VVNCMCBjIDE4OCAwCglta25vZCAvZGV2L3R0eVVTQjEgYyAxODggMQoJbWtub2QgL2Rldi90dHlVU0IyIGMgMTg4IDIKCW1rbm9kIC9kZXYvdHR5VVNCMyBjIDE4OCAzCgkJLgoJCS4KCQkuCglta25vZCAvZGV2L3R0eVVTQjI1NCBjIDE4OCAyNTQKCW1rbm9kIC9kZXYvdHR5VVNCMjU1IGMgMTg4IDI1NQoKICBXaGVuIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIGFuZCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIHRoZSBkcml2ZXIKICB3aWxsIHByaW50IHRvIHRoZSBzeXN0ZW0gbG9nLCB3aGljaCBub2RlKHMpIHRoZSBkZXZpY2UgaGFzIGJlZW4gYm91bmQKICB0by4KICAKClNQRUNJRklDIERFVklDRVMgU1VQUE9SVEVECgoKQ29ubmVjdFRlY2ggV2hpdGVIRUFUIDQgcG9ydCBjb252ZXJ0ZXIKCiAgQ29ubmVjdFRlY2ggaGFzIGJlZW4gdmVyeSBmb3J0aGNvbWluZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyCiAgZGV2aWNlLCBpbmNsdWRpbmcgcHJvdmlkaW5nIGEgdW5pdCB0byB0ZXN0IHdpdGguCgogIFRoZSBkcml2ZXIgaXMgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgYnkgQ29ubmVjdCBUZWNoIEluYy4KICBodHRwOi8vd3d3LmNvbm5lY3R0ZWNoLmNvbQoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdAogIFN0dWFydCBNYWNEb25hbGQgYXQgc3R1YXJ0bUBjb25uZWN0dGVjaC5jb20KCgpIYW5kU3ByaW5nIFZpc29yLCBQYWxtIFVTQiwgYW5kIENsaekgVVNCIGRyaXZlcgoKICBUaGlzIGRyaXZlciB3b3JrcyB3aXRoIGFsbCBIYW5kU3ByaW5nIFVTQiwgUGFsbSBVU0IsIGFuZCBTb255IENsaekgVVNCCiAgZGV2aWNlcy4KCiAgT25seSB3aGVuIHRoZSBkZXZpY2UgdHJpZXMgdG8gY29ubmVjdCB0byB0aGUgaG9zdCwgd2lsbCB0aGUgZGV2aWNlIHNob3cKICB1cCB0byB0aGUgaG9zdCBhcyBhIHZhbGlkIFVTQiBkZXZpY2UuIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgZGV2aWNlIGlzCiAgcHJvcGVybHkgZW51bWVyYXRlZCwgYXNzaWduZWQgYSBwb3J0LCBhbmQgdGhlbiBjb21tdW5pY2F0aW9uIF9zaG91bGRfIGJlCiAgcG9zc2libGUuIFRoZSBkcml2ZXIgY2xlYW5zIHVwIHByb3Blcmx5IHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkLCBvcgogIHRoZSBjb25uZWN0aW9uIGlzIGNhbmNlbGVkIG9uIHRoZSBkZXZpY2UuCgogIE5PVEU6CiAgICBUaGlzIG1lYW5zIHRoYXQgaW4gb3JkZXIgdG8gdGFsayB0byB0aGUgZGV2aWNlLCB0aGUgc3luYyBidXR0b24gbXVzdCBiZQogICAgcHJlc3NlZCBCRUZPUkUgdHJ5aW5nIHRvIGdldCBhbnkgcHJvZ3JhbSB0byBjb21tdW5pY2F0ZSB0byB0aGUgZGV2aWNlLgogICAgVGhpcyBnb2VzIGFnYWluc3QgdGhlIGN1cnJlbnQgZG9jdW1lbnRhdGlvbiBmb3IgcGlsb3QteGZlciBhbmQgb3RoZXIKICAgIHBhY2thZ2VzLCBidXQgaXMgdGhlIG9ubHkgd2F5IHRoYXQgaXQgd2lsbCB3b3JrIGR1ZSB0byB0aGUgaGFyZHdhcmUKICAgIGluIHRoZSBkZXZpY2UuCiAgCiAgV2hlbiB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCwgdHJ5IHRhbGtpbmcgdG8gaXQgb24gdGhlIHNlY29uZCBwb3J0CiAgKHRoaXMgaXMgdXN1YWxseSAvZGV2L3R0eVVTQjEgaWYgeW91IGRvIG5vdCBoYXZlIGFueSBvdGhlciB1c2Itc2VyaWFsCiAgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLikgVGhlIHN5c3RlbSBsb2cgc2hvdWxkIHRlbGwgeW91IHdoaWNoIHBvcnQgaXMKICB0aGUgcG9ydCB0byB1c2UgZm9yIHRoZSBIb3RTeW5jIHRyYW5zZmVyLiBUaGUgIkdlbmVyaWMiIHBvcnQgY2FuIGJlIHVzZWQKICBmb3Igb3RoZXIgZGV2aWNlIGNvbW11bmljYXRpb24sIHN1Y2ggYXMgYSBQUFAgbGluay4KCiAgRm9yIHNvbWUgU29ueSBDbGnpIGRldmljZXMsIC9kZXYvdHR5VVNCMCBtdXN0IGJlIHVzZWQgdG8gdGFsayB0byB0aGUKICBkZXZpY2UuICBUaGlzIGlzIHRydWUgZm9yIGFsbCBPUyB2ZXJzaW9uIDMuNSBkZXZpY2VzLCBhbmQgbW9zdCBkZXZpY2VzCiAgdGhhdCBoYXZlIGhhZCBhIGZsYXNoIHVwZ3JhZGUgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBPUy4gIFNlZSB0aGUKICBrZXJuZWwgc3lzdGVtIGxvZyBmb3IgaW5mb3JtYXRpb24gb24gd2hpY2ggaXMgdGhlIGNvcnJlY3QgcG9ydCB0byB1c2UuCgogIElmIGFmdGVyIHByZXNzaW5nIHRoZSBzeW5jIGJ1dHRvbiwgbm90aGluZyBzaG93cyB1cCBpbiB0aGUgc3lzdGVtIGxvZywKICB0cnkgcmVzZXR0aW5nIHRoZSBkZXZpY2UsIGZpcnN0IGEgaG90IHJlc2V0LCBhbmQgdGhlbiBhIGNvbGQgcmVzZXQgaWYKICBuZWNlc3NhcnkuICBTb21lIGRldmljZXMgbmVlZCB0aGlzIGJlZm9yZSB0aGV5IGNhbiB0YWxrIHRvIHRoZSBVU0IgcG9ydAogIHByb3Blcmx5LgogIAogIERldmljZXMgdGhhdCBhcmUgbm90IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBjYW4gYmUgc3BlY2lmaWVkIHdpdGggbW9kdWxlCiAgcGFyYW1ldGVycy4gIGUuZy4gbW9kcHJvYmUgdmlzb3IgdmVuZG9yPTB4NTRjIHByb2R1Y3Q9MHg2NgogIAogIFRoZXJlIGlzIGEgd2VicGFnZSBhbmQgbWFpbGluZyBsaXN0cyBmb3IgdGhpcyBwb3J0aW9uIG9mIHRoZSBkcml2ZXIgYXQ6CiAgaHR0cDovL3VzYnZpc29yLnNvdXJjZWZvcmdlLm5ldC8KCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZwogIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KCgpQb2NrZXRQQyBQREEgRHJpdmVyCgogIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gQ29tcGFxIGlQQVEsIEhQIEpvcm5hZGEsIENhc2lvIEVNNTAwCiAgYW5kIG90aGVyIFBEQXMgcnVubmluZyBXaW5kb3dzIENFIDMuMCBvciBQb2NrZXRQQyAyMDAyIHVzaW5nIGEgVVNCCiAgY2FibGUvY3JhZGxlLgogIE1vc3QgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgQWN0aXZlU3luYyBhcmUgc3VwcG9ydGVkIG91dCBvZiB0aGUgYm94LgogIEZvciBvdGhlcnMsIHBsZWFzZSB1c2UgbW9kdWxlIHBhcmFtZXRlcnMgdG8gc3BlY2lmeSB0aGUgcHJvZHVjdCBhbmQgdmVuZG9yCiAgaWQuIGUuZy4gbW9kcHJvYmUgaXBhcSB2ZW5kb3I9MHgzZjAgcHJvZHVjdD0weDExMjUKCiAgVGhlIGRyaXZlciBwcmVzZW50cyBhIHNlcmlhbCBpbnRlcmZhY2UgKHVzdWFsbHkgb24gL2Rldi90dHlVU0IwKSBvdmVyCiAgd2hpY2ggb25lIG1heSBydW4gcHBwIGFuZCBlc3RhYmxpc2ggYSBUQ1AvSVAgbGluayB0byB0aGUgUERBLiBPbmNlIHRoaXMKICBpcyBkb25lLCB5b3UgY2FuIHRyYW5zZmVyIGZpbGVzLCBiYWNrdXAsIGRvd25sb2FkIGVtYWlsIGV0Yy4gVGhlIG1vc3QKICBzaWduaWZpY2FudCBhZHZhbnRhZ2Ugb2YgdXNpbmcgVVNCIGlzIHNwZWVkIC0gSSBjYW4gZ2V0IDczIHRvIDExMwogIGtieXRlcy9zZWMgZm9yIGRvd25sb2FkL3VwbG9hZCB0byBteSBpUEFRLgoKICBUaGlzIGRyaXZlciBpcyBvbmx5IG9uZSBvZiBhIHNldCBvZiBjb21wb25lbnRzIHJlcXVpcmVkIHRvIHV0aWxpemUKICB0aGUgVVNCIGNvbm5lY3Rpb24uIFBsZWFzZSB2aXNpdCBodHRwOi8vc3luY2Uuc291cmNlZm9yZ2UubmV0IHdoaWNoCiAgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBwYWNrYWdlcyBhbmQgYSBzaW1wbGUgc3RlcC1ieS1zdGVwIGhvd3RvLgoKICBPbmNlIGNvbm5lY3RlZCwgeW91IGNhbiB1c2UgV2luIENFIHByb2dyYW1zIGxpa2UgZnRwVmlldywgUG9ja2V0IE91dGxvb2sKICBmcm9tIHRoZSBQREEgYW5kIHhjZXJkaXNwLCBzeW5jZSB1dGlsaXRpZXMgZnJvbSB0aGUgTGludXggc2lkZS4KCiAgVG8gdXNlIFBvY2tldCBJRSwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gYXQKICBodHRwOi8vd3d3LnRla2d1cnUuY28udWsvRU01MDAvdXNidG9uZXQuaHRtIHRvIGFjaGlldmUgdGhlIHNhbWUgdGhpbmcKICBvbiBXaW45OC4gT21pdCB0aGUgcHJveHkgc2VydmVyIHBhcnQ7IExpbnV4IGlzIHF1aXRlIGNhcGFibGUgb2YgZm9yd2FyZGluZwogIHBhY2tldHMgdW5saWtlIFdpbjk4LiBBbm90aGVyIG1vZGlmaWNhdGlvbiBpcyByZXF1aXJlZCBhdCBsZWFzdCBmb3IgdGhlCiAgaVBBUSAtIGRpc2FibGUgYXV0b3N5bmMgYnkgZ29pbmcgdG8gdGhlIFN0YXJ0L1NldHRpbmdzL0Nvbm5lY3Rpb25zIG1lbnUKICBhbmQgdW5jaGVja2luZyB0aGUgIkF1dG9tYXRpY2FsbHkgc3luY2hyb25pemUgLi4uIiBib3guIEdvIHRvCiAgU3RhcnQvUHJvZ3JhbXMvQ29ubmVjdGlvbnMsIGNvbm5lY3QgdGhlIGNhYmxlIGFuZCBzZWxlY3QgInVzYmRpYWwiIChvcgogIHdoYXRldmVyIHlvdSBuYW1lZCB5b3VyIG5ldyBVU0IgY29ubmVjdGlvbikuIFlvdSBzaG91bGQgZmluYWxseSB3aW5kCiAgdXAgd2l0aCBhICJDb25uZWN0ZWQgdG8gdXNiZGlhbCIgd2luZG93IHdpdGggc3RhdHVzIHNob3duIGFzIGNvbm5lY3RlZC4KICBOb3cgc3RhcnQgdXAgUElFIGFuZCBicm93c2UgYXdheS4KCiAgSWYgaXQgZG9lc24ndCB3b3JrIGZvciBzb21lIHJlYXNvbiwgbG9hZCBib3RoIHRoZSB1c2JzZXJpYWwgYW5kIGlwYXEgbW9kdWxlCiAgd2l0aCB0aGUgbW9kdWxlIHBhcmFtZXRlciAiZGVidWciIHNldCB0byAxIGFuZCBleGFtaW5lIHRoZSBzeXN0ZW0gbG9nLgogIFlvdSBjYW4gYWxzbyB0cnkgc29mdC1yZXNldHRpbmcgeW91ciBQREEgYmVmb3JlIGF0dGVtcHRpbmcgYSBjb25uZWN0aW9uLgoKICBPdGhlciBmdW5jdGlvbmFsaXR5IG1heSBiZSBwb3NzaWJsZSBkZXBlbmRpbmcgb24geW91ciBQREEuIEFjY29yZGluZyB0bwogIFdlcyBDaWxsZGhhaXJlIDxiaWxseWJvYmpvZWhlbnJ5Ym9iQGhvdG1haWwuY29tPiwgd2l0aCB0aGUgVG9zaGliYSBFNTcwLAogIC4uLmlmIHlvdSBib290IGludG8gdGhlIGJvb3Rsb2FkZXIgKGhvbGQgZG93biB0aGUgcG93ZXIgd2hlbiBoaXR0aW5nIHRoZQogIHJlc2V0IGJ1dHRvbiwgY29udGludWluZyB0byBob2xkIG9udG8gdGhlIHBvd2VyIHVudGlsIHRoZSBib290bG9hZGVyIHNjcmVlbgogIGlzIGRpc3BsYXllZCksIHRoZW4gcHV0IGl0IGluIHRoZSBjcmFkbGUgd2l0aCB0aGUgaXBhcSBkcml2ZXIgbG9hZGVkLCBvcGVuCiAgYSB0ZXJtaW5hbCBvbiAvZGV2L3R0eVVTQjAsIGl0IGdpdmVzIHlvdSBhICJVU0IgUmVmbGFzaCIgdGVybWluYWwsIHdoaWNoIGNhbgogIGJlIHVzZWQgdG8gZmxhc2ggdGhlIFJPTSwgYXMgd2VsbCBhcyB0aGUgbWljcm9QIGNvZGUuLiAgc28gbXVjaCBmb3IgbmVlZGluZwogIFRvc2hpYmEncyAkMzUwIHNlcmlhbCBjYWJsZSBmb3IgZmxhc2hpbmchISA6RAogIE5PVEU6IFRoaXMgaGFzIE5PVCBiZWVuIHRlc3RlZC4gVXNlIGF0IHlvdXIgb3duIHJpc2suCiAKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoZSBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdhbmVzaAogIFZhcmFkYXJhamFuIDxnYW5lc2hAdmVyaXRhcy5jb20+CgoKS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIKCiAgU2luZ2xlIHBvcnQgREItOSBzZXJpYWwgYWRhcHRlciwgcHVzaGVkIGFzIGEgUERBIGFkYXB0ZXIgZm9yIGlNYWNzIChtb3N0bHkKICBzb2xkIGluIE1hY2ludG9zaCBjYXRhbG9ncywgY29tZXMgaW4gYSB0cmFuc2x1Y2VudCB3aGl0ZS9ncmVlbiBkb25nbGUpLgogIEZhaXJseSBzaW1wbGUgZGV2aWNlLiBGaXJtd2FyZSBpcyBob21lYnJldy4KICBUaGlzIGRyaXZlciBhbHNvIHdvcmtzIGZvciB0aGUgWGlyY29tL0VudHJncmEgc2luZ2xlIHBvcnQgc2VyaWFsIGFkYXB0ZXIuCgogIEN1cnJlbnQgc3RhdHVzOgogICBUaGluZ3MgdGhhdCB3b3JrOgogICAgIGJhc2ljIGlucHV0L291dHB1dCAodGVzdGVkIHdpdGggJ2N1JykKICAgICBibG9ja2luZyB3cml0ZSB3aGVuIHNlcmlhbCBsaW5lIGNhbid0IGtlZXAgdXAKICAgICBjaGFuZ2luZyBiYXVkIHJhdGVzICh1cCB0byAxMTUyMDApCiAgICAgZ2V0dGluZy9zZXR0aW5nIG1vZGVtIGNvbnRyb2wgcGlucyAoVElPQ017R0VULFNFVCxCSVMsQklDfSkKICAgICBzZW5kaW5nIGJyZWFrIChhbHRob3VnaCBkdXJhdGlvbiBsb29rcyBzdXNwZWN0KQogICBUaGluZ3MgdGhhdCBkb24ndDoKICAgICBkZXZpY2Ugc3RyaW5ncyAoYXMgbG9nZ2VkIGJ5IGtlcm5lbCkgaGF2ZSB0cmFpbGluZyBiaW5hcnkgZ2FyYmFnZQogICAgIGRldmljZSBJRCBpc24ndCByaWdodCwgbWlnaHQgY29sbGlkZSB3aXRoIG90aGVyIEtleXNwYW4gcHJvZHVjdHMKICAgICBjaGFuZ2luZyBiYXVkIHJhdGVzIG91Z2h0IHRvIGZsdXNoIHR4L3J4IHRvIGF2b2lkIG1hbmdsZWQgaGFsZiBjaGFyYWN0ZXJzCiAgIEJpZyBUaGluZ3Mgb24gdGhlIHRvZG8gbGlzdDoKICAgICBwYXJpdHksIDcgdnMgOCBiaXRzIHBlciBjaGFyLCAxIG9yIDIgc3RvcCBiaXRzCiAgICAgSFcgZmxvdyBjb250cm9sCiAgICAgbm90IGFsbCBvZiB0aGUgc3RhbmRhcmQgVVNCIGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkOiBHZXRfU3RhdHVzLCBTZXRfRmVhdHVyZQogICAgIE9fTk9OQkxPQ0ssIHNlbGVjdCgpCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEJyaWFuCiAgV2FybmVyIGF0IHdhcm5lckBsb3RoYXIuY29tIAoKCktleXNwYW4gVVNBLXNlcmllcyBTZXJpYWwgQWRhcHRlcnMKCiAgU2luZ2xlLCBEdWFsIGFuZCBRdWFkIHBvcnQgYWRhcHRlcnMgLSBkcml2ZXIgdXNlcyBLZXlzcGFuIHN1cHBsaWVkIAogIGZpcm13YXJlIGFuZCBpcyBiZWluZyBkZXZlbG9wZWQgd2l0aCB0aGVpciBzdXBwb3J0LgogIAogIEN1cnJlbnQgc3RhdHVzOgogICAgVGhlIFVTQS0xOFgsIFVTQS0yOFgsIFVTQS0xOSwgVVNBLTE5VyBhbmQgVVNBLTQ5VyBhcmUgc3VwcG9ydGVkIGFuZAogICAgaGF2ZSBiZWVuIHByZXR0eSB0aG9yb3VnaGx5IHRlc3RlZCBhdCB2YXJpb3VzIGJhdWQgcmF0ZXMgd2l0aCA4LU4tMQogICAgY2hhcmFjdGVyIHNldHRpbmdzLiAgT3RoZXIgY2hhcmFjdGVyIGxlbmd0aHMgYW5kIHBhcml0eSBzZXR1cHMgYXJlCiAgICBwcmVzZW50bHkgdW50ZXN0ZWQuCgogICAgVGhlIFVTQS0yOCBpc24ndCB5ZXQgc3VwcG9ydGVkIHRob3VnaCBkb2luZyBzbyBzaG91bGQgYmUgcHJldHR5CiAgICBzdHJhaWdodGZvcndhcmQuICBDb250YWN0IHRoZSBtYWludGFpbmVyIGlmIHlvdSByZXF1aXJlIHRoaXMKICAgIGZ1bmN0aW9uYWxpdHkuCiAgCiAgTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQ6CiAgICAgICAgaHR0cDovL21pc2MubnUvaHVnaC9rZXlzcGFuLmh0bWwKICAgCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgSHVnaAogIEJsZW1pbmdzIGF0IGh1Z2hAbWlzYy5udQoKCkZUREkgU2luZ2xlIFBvcnQgU2VyaWFsIERyaXZlcgoKICBUaGlzIGlzIGEgc2luZ2xlIHBvcnQgREItMjUgc2VyaWFsIGFkYXB0ZXIuIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcwogIGRldmljZSBhbmQgdGhlIExpbnV4IGRyaXZlciBjYW4gYmUgZm91bmQgYXQ6CglodHRwOi8vcmVhbGl0eS5zZ2kuY29tL2JyeWRlcl93ZWxsaW5ndG9uL2Z0ZGlfc2lvLwoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBCaWxsIFJ5ZGVyCiAgYXQgYnJ5ZGVyQHNnaS5jb20KCgpaeVhFTCBvbW5pLm5ldCBsY2QgcGx1cyBJU0ROIFRBCgogIFRoaXMgaXMgYW4gSVNETiBUQS4gUGxlYXNlIHJlcG9ydCBib3RoIHN1Y2Nlc3NlcyBhbmQgdHJvdWJsZXMgdG8KICBhenVtbW9AdG93ZXJ0ZWNoLml0CgoKQ3lwcmVzcyBNOCBDWTQ2MDEgRmFtaWx5IFNlcmlhbCBEcml2ZXIKCiAgVGhpcyBkcml2ZXIgd2FzIGluIG1vc3QgcGFydCBkZXZlbG9wZWQgYnkgTmVpbCAia295YW1hIiBXaGVsY2hlbC4gIEl0CiAgaGFzIGJlZW4gaW1wcm92ZWQgc2luY2UgdGhhdCBwcmV2aW91cyBmb3JtIHRvIHN1cHBvcnQgZHluYW1pYyBzZXJpYWwKICBsaW5lIHNldHRpbmdzIGFuZCBpbXByb3ZlZCBsaW5lIGhhbmRsaW5nLiAgVGhlIGRyaXZlciBpcyBmb3IgdGhlIG1vc3QKICBwYXJ0IHN0YWJsZSBhbmQgaGFzIGJlZW4gdGVzdGVkIG9uIGFuIHNtcCBtYWNoaW5lLiAoZHVhbCBwMikKCiAgICBDaGlwc2V0cyBzdXBwb3J0ZWQgdW5kZXIgQ1k0NjAxIGZhbWlseToKCQoJCUNZN0M2MzcyMywgQ1k3QzYzNzQyLCBDWTdDNjM3NDMsIENZN0M2NDAxMwoKICAgIERldmljZXMgc3VwcG9ydGVkOgoKCQktRGVMb3JtZSdzIFVTQiBFYXJ0aG1hdGUgKFNpUkYgU3RhciBJSSBscCBhcmNoKQoJCS1DeXByZXNzIEhJRC0+Q09NIFJTMjMyIGFkYXB0ZXIKCQoJCU5vdGU6IEN5cHJlc3MgU2VtaWNvbmR1Y3RvciBjbGFpbXMgbm8gYWZmaWxpYXRpb24gd2l0aCB0aGUKCQkJaGlkLT5jb20gZGV2aWNlLgoKCU1vc3QgZGV2aWNlcyB1c2luZyBjaGlwc2V0cyB1bmRlciB0aGUgQ1k0NjAxIGZhbWlseSBzaG91bGQKICAgICB3b3JrIHdpdGggdGhlIGRyaXZlci4gIEFzIGxvbmcgYXMgdGhleSBzdGF5IHRydWUgdG8gdGhlIENZNDYwMQogICAgIHVzYnNlcmlhbCBzcGVjaWZpY2F0aW9uLgoKICAgIFRlY2huaWNhbCBub3RlczoKCiAgICAgICAgVGhlIEVhcnRobWF0ZSBzdGFydHMgb3V0IGF0IDQ4MDAgOE4xIGJ5IGRlZmF1bHQuLi4gdGhlIGRyaXZlciB3aWxsCgl1cG9uIHN0YXJ0IGluaXQgdG8gdGhpcyBzZXR0aW5nLiAgdXNic2VyaWFsIGNvcmUgcHJvdmlkZXMgdGhlIHJlc3QKCW9mIHRoZSB0ZXJtaW9zIHNldHRpbmdzLCBhbG9uZyB3aXRoIHNvbWUgY3VzdG9tIHRlcm1pb3Mgc28gdGhhdCB0aGUKCW91dHB1dCBpcyBpbiBwcm9wZXIgZm9ybWF0IGFuZCBwYXJzYWJsZS4KCQoJVGhlIGRldmljZSBjYW4gYmUgcHV0IGludG8gc2lyZiBtb2RlIGJ5IGlzc3VpbmcgTk1FQSBjb21tYW5kOgoJCSRQU1JGMTAwLDxwcm90b2NvbD4sPGJhdWQ+LDxkYXRhYml0cz4sPHN0b3BiaXRzPiw8cGFyaXR5PipDSEVDS1NVTQoJCSRQU1JGMTAwLDAsOTYwMCw4LDEsMCowQwoKCQlJdCBzaG91bGQgdGhlbiBiZSBzdWZmaWNpZW50IHRvIGNoYW5nZSB0aGUgcG9ydCB0ZXJtaW9zIHRvIG1hdGNoIHRoaXMKCQl0byBiZWdpbiBjb21tdW5pY2F0aW5nLgoKCUFzIGZhciBhcyBJIGNhbiB0ZWxsIGl0IHN1cHBvcnRzIHByZXR0eSBtdWNoIGV2ZXJ5IHNpcmYgY29tbWFuZCBhcwoJZG9jdW1lbnRlZCBvbmxpbmUgYXZhaWxhYmxlIHdpdGggZmlybXdhcmUgMi4zMSwgd2l0aCBzb21lIHVua25vd24KCW1lc3NhZ2UgaWRzLgoKCVRoZSBoaWQtPmNvbSBhZGFwdGVyIGNhbiBydW4gYXQgYSBtYXhpbXVtIGJhdWQgb2YgMTE1MjAwYnBzLiAgUGxlYXNlIG5vdGUKCXRoYXQgdGhlIGRldmljZSBoYXMgdHJvdWJsZSBvciBpcyBpbmNhcGFibGUgb2YgcmFpc2luZyBsaW5lIHZvbHRhZ2UgcHJvcGVybHkuCglJdCB3aWxsIGJlIGZpbmUgd2l0aCBudWxsIG1vZGVtIGxpbmtzLCBhcyBsb25nIGFzIHlvdSBkbyBub3QgdHJ5IHRvIGxpbmsgdHdvCgl0b2dldGhlciB3aXRob3V0IGhhY2tpbmcgdGhlIGFkYXB0ZXIgdG8gc2V0IHRoZSBsaW5lIGhpZ2guCgoJVGhlIGRyaXZlciBpcyBzbXAgc2FmZS4gIFBlcmZvcm1hbmNlIHdpdGggdGhlIGRyaXZlciBpcyByYXRoZXIgbG93IHdoZW4gdXNpbmcKCWl0IGZvciB0cmFuc2ZlcnJpbmcgZmlsZXMuICBUaGlzIGlzIGJlaW5nIHdvcmtlZCBvbiwgYnV0IEkgd291bGQgYmUgd2lsbGluZyB0bwoJYWNjZXB0IHBhdGNoZXMuICBBbiB1cmIgcXVldWUgb3IgcGFja2V0IGJ1ZmZlciB3b3VsZCBsaWtlbHkgZml0IHRoZSBiaWxsIGhlcmUuCgoJSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgcHJvYmxlbXMsIHBhdGNoZXMsIGZlYXR1cmUgcmVxdWVzdHMsIGV0Yy4geW91IGNhbgoJY29udGFjdCBtZSBoZXJlIHZpYSBlbWFpbDoKCQkJCQlkaWdub21lQGdtYWlsLmNvbQoJCSh5b3VyIHByb2JsZW1zL3BhdGNoZXMgY2FuIGFsdGVybmF0ZWx5IGJlIHN1Ym1pdHRlZCB0byB1c2ItZGV2ZWwpCgoKRGlnaSBBY2NlbGVQb3J0IERyaXZlcgoKICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgRGlnaSBBY2NlbGVQb3J0IFVTQiAyIGFuZCA0IGRldmljZXMsIDIgcG9ydAogIChwbHVzIGEgcGFyYWxsZWwgcG9ydCkgYW5kIDQgcG9ydCBVU0Igc2VyaWFsIGNvbnZlcnRlcnMuICBUaGUgZHJpdmVyCiAgZG9lcyBOT1QgeWV0IHN1cHBvcnQgdGhlIERpZ2kgQWNjZWxlUG9ydCBVU0IgOC4KCiAgVGhpcyBkcml2ZXIgd29ya3MgdW5kZXIgU01QIHdpdGggdGhlIHVzYi11aGNpIGRyaXZlci4gIEl0IGRvZXMgbm90CiAgd29yayB1bmRlciBTTVAgd2l0aCB0aGUgdWhjaSBkcml2ZXIuCgogIFRoZSBkcml2ZXIgaXMgZ2VuZXJhbGx5IHdvcmtpbmcsIHRob3VnaCB3ZSBzdGlsbCBoYXZlIGEgZmV3IG1vcmUgaW9jdGxzCiAgdG8gaW1wbGVtZW50IGFuZCBmaW5hbCB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgdG8gZG8uICBUaGUgcGFyYWxsZWwgcG9ydAogIG9uIHRoZSBVU0IgMiBpcyBzdXBwb3J0ZWQgYXMgYSBzZXJpYWwgdG8gcGFyYWxsZWwgY29udmVydGVyOyBpbiBvdGhlcgogIHdvcmRzLCBpdCBhcHBlYXJzIGFzIGFub3RoZXIgVVNCIHNlcmlhbCBwb3J0IG9uIExpbnV4LCBldmVuIHRob3VnaAogIHBoeXNpY2FsbHkgaXQgaXMgcmVhbGx5IGEgcGFyYWxsZWwgcG9ydC4gIFRoZSBEaWdpIEFjY2VsZXBvcnQgVVNCIDgKICBpcyBub3QgeWV0IHN1cHBvcnRlZC4KCiAgUGxlYXNlIGNvbnRhY3QgUGV0ZXIgQmVyZ2VyIChwYmVyZ2VyQGJyaW1zb24uY29tKSBvciBBbCBCb3JjaGVycwogIChhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20pIGZvciBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzCiAgZHJpdmVyLgoKCkJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRjVVMTAzCgogIFNpbmdsZSBwb3J0IERCLTkvUFMtMiBzZXJpYWwgYWRhcHRlciBmcm9tIEJlbGtpbiB3aXRoIGZpcm13YXJlIGJ5IGVURUsgTGFicy4KICBUaGUgUGVyYWNvbSBzaW5nbGUgcG9ydCBzZXJpYWwgYWRhcHRlciBhbHNvIHdvcmtzIHdpdGggdGhpcyBkcml2ZXIsIGFzCiAgd2VsbCBhcyB0aGUgR29IdWJzIGFkYXB0ZXIuCgogIEN1cnJlbnQgc3RhdHVzOgogICAgVGhlIGZvbGxvd2luZyBoYXZlIGJlZW4gdGVzdGVkIGFuZCB3b3JrOgogICAgICBCYXVkIHJhdGUgICAgMzAwLTIzMDQwMCAgICAgICAgICAgICAgIAogICAgICBEYXRhIGJpdHMgICAgNS04CiAgICAgIFN0b3AgYml0cyAgICAxLTIKICAgICAgUGFyaXR5ICAgICAgIE4sRSxPLE0sUwogICAgICBIYW5kc2hha2UgICAgTm9uZSwgU29mdHdhcmUgKFhPTi9YT0ZGKSwgSGFyZHdhcmUgKENUU1JUUyxDVFNEVFIpKgogICAgICBCcmVhayAgICAgICAgU2V0IGFuZCBjbGVhcgogICAgICBMaW5lIGNvbnRybCAgSW5wdXQvT3V0cHV0IHF1ZXJ5IGFuZCBjb250cm9sICoqCgogICAgICAqICBIYXJkd2FyZSBpbnB1dCBmbG93IGNvbnRyb2wgaXMgb25seSBlbmFibGVkIGZvciBmaXJtd2FyZQogICAgICAgICBsZXZlbHMgYWJvdmUgMi4wNi4gIFJlYWQgc291cmNlIGNvZGUgY29tbWVudHMgZGVzY3JpYmluZyBCZWxraW4KICAgICAgICAgZmlybXdhcmUgZXJyYXRhLiAgSGFyZHdhcmUgb3V0cHV0IGZsb3cgY29udHJvbCBpcyB3b3JraW5nIGZvciBhbGwKICAgICAgICAgZmlybXdhcmUgdmVyc2lvbnMuCiAgICAgICoqIFF1ZXJpZXMgb2YgaW5wdXRzIChDVFMsRFNSLENELFJJKSBzaG93IHRoZSBsYXN0CiAgICAgICAgIHJlcG9ydGVkIHN0YXRlLiAgUXVlcmllcyBvZiBvdXRwdXRzIChEVFIsUlRTKSBzaG93IHRoZSBsYXN0CiAgICAgICAgIHJlcXVlc3RlZCBzdGF0ZSBhbmQgbWF5IG5vdCByZWZsZWN0IGN1cnJlbnQgc3RhdGUgYXMgc2V0IGJ5CiAgICAgICAgIGF1dG9tYXRpYyBoYXJkd2FyZSBmbG93IGNvbnRyb2wuCgogIFRPIERPIExpc3Q6CiAgICAtLSBBZGQgdHJ1ZSBtb2RlbSBjb250b2wgbGluZSBxdWVyeSBjYXBhYmlsaXR5LiAgQ3VycmVudGx5IHRyYWNrcyB0aGUKICAgICAgIHN0YXRlcyByZXBvcnRlZCBieSB0aGUgaW50ZXJydXB0IGFuZCB0aGUgc3RhdGVzIHJlcXVlc3RlZC4KICAgIC0tIEFkZCBlcnJvciByZXBvcnRpbmcgYmFjayB0byBhcHBsaWNhdGlvbiBmb3IgVUFSVCBlcnJvciBjb25kaXRpb25zLgogICAgLS0gQWRkIHN1cHBvcnQgZm9yIGZsdXNoIGlvY3Rscy4KICAgIC0tIEFkZCBldmVyeXRoaW5nIGVsc2UgdGhhdCBpcyBtaXNzaW5nIDopCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IFdpbGxpYW0KICBHcmVhdGhvdXNlIGF0IHdncmVhdGhvdXNlQHNtdmEuY29tCgoKRW1wZWcgZW1wZWctY2FyIE1hcmsgSS9JSSBEcml2ZXIKCiAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIHRvIHByb3ZpZGUgY29ubmVjdGl2aXR5IHN1cHBvcnQgZm9yIHRoZQogIGNsaWVudCBzeW5jaHJvbml6YXRpb24gdG9vbHMgZm9yIGFuIEVtcGVnIGVtcGVnLWNhciBtcDMgcGxheWVyLgoKICBUaXBzOgogICAgKiBEb24ndCBmb3JnZXQgdG8gY3JlYXRlIHRoZSBkZXZpY2Ugbm9kZXMgZm9yIHR0eVVTQnswLDEsMiwuLi59CiAgICAqIG1vZHByb2JlIGVtcGVnIChtb2Rwcm9iZSBpcyB5b3VyIGZyaWVuZCkKICAgICogZW1wdG9vbCAtLXVzYiAvZGV2L3R0eVVTQjAgKG9yIHdoYXRldmVyIHlvdSBuYW1lZCB5b3VyIGRldmljZSBub2RlKQoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBHYXJ5CiAgQnJ1YmFrZXIgYXQgeGF2eWVyQGl4Lm5ldGNvbS5jb20KCgpNQ1QgVVNCIFNpbmdsZSBQb3J0IFNlcmlhbCBBZGFwdGVyIFUyMzIKCiAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBNQ1QgVVNCLVJTMjMyIENvbnZlcnRlciAoMjUgcGluLCBNb2RlbCBOby4KICBVMjMyLVAyNSkgZnJvbSBNYWdpYyBDb250cm9sIFRlY2hub2xvZ3kgQ29ycC4gKHRoZXJlIGlzIGFsc28gYSA5IHBpbgogIE1vZGVsIE5vLiBVMjMyLVA5KS4gTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRldmljZSBjYW4gYmUgZm91bmQgYXQKICB0aGUgbWFudWZhY3R1cmUncyB3ZWItc2l0ZTogaHR0cDovL3d3dy5tY3QuY29tLnR3LgoKICBUaGUgZHJpdmVyIGlzIGdlbmVyYWxseSB3b3JraW5nLCB0aG91Z2ggaXQgc3RpbGwgbmVlZHMgc29tZSBtb3JlIHRlc3RpbmcuCiAgSXQgaXMgZGVyaXZlZCBmcm9tIHRoZSBCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIEY1VTEwMyBkcml2ZXIgYW5kIGl0cwogIFRPRE8gbGlzdCBpcyB2YWxpZCBmb3IgdGhpcyBkcml2ZXIgYXMgd2VsbC4KCiAgVGhpcyBkcml2ZXIgaGFzIGFsc28gYmVlbiBmb3VuZCB0byB3b3JrIGZvciBvdGhlciBwcm9kdWN0cywgd2hpY2ggaGF2ZQogIHRoZSBzYW1lIFZlbmRvciBJRCBidXQgZGlmZmVyZW50IFByb2R1Y3QgSURzLiBTaXRlY29tJ3MgVTIzMi1QMjUgc2VyaWFsCiAgY29udmVydGVyIHVzZXMgUHJvZHVjdCBJRCAweDIzMCBhbmQgVmVuZG9yIElEIDB4NzExIGFuZCB3b3JrcyB3aXRoIHRoaXMKICBkcml2ZXIuIEFsc28sIEQtTGluaydzIERVLUgzU1AgVVNCIEJBWSBhbHNvIHdvcmtzIHdpdGggdGhpcyBkcml2ZXIuCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IFdvbGZnYW5nCiAgR3JhbmRlZ2dlciBhdCB3b2xmZ2FuZ0BjZXMuY2gKCgpJbnNpZGUgT3V0IE5ldHdvcmtzIEVkZ2Vwb3J0IERyaXZlcgoKICBUaGlzIGRyaXZlciBzdXBwb3J0cyBhbGwgZGV2aWNlcyBtYWRlIGJ5IEluc2lkZSBPdXQgTmV0d29ya3MsIHNwZWNpZmljYWxseQogIHRoZSBmb2xsb3dpbmcgbW9kZWxzOgogICAgICAgRWRnZXBvcnQvNAogICAgICAgUmFwaWRwb3J0LzQKICAgICAgIEVkZ2Vwb3J0LzR0CiAgICAgICBFZGdlcG9ydC8yCiAgICAgICBFZGdlcG9ydC80aQogICAgICAgRWRnZXBvcnQvMmkKICAgICAgIEVkZ2Vwb3J0LzQyMQogICAgICAgRWRnZXBvcnQvMjEKICAgICAgIEVkZ2Vwb3J0LzgKICAgICAgIEVkZ2Vwb3J0LzggRHVhbAogICAgICAgRWRnZXBvcnQvMkQ4CiAgICAgICBFZGdlcG9ydC80RDgKICAgICAgIEVkZ2Vwb3J0LzhpCiAgICAgICBFZGdlcG9ydC8yIERJTgogICAgICAgRWRnZXBvcnQvNCBESU4KICAgICAgIEVkZ2Vwb3J0LzE2IER1YWwKCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZwogIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KCgpSRUlORVIgU0NUIGN5YmVySmFjayBwaW5wYWQvZS1jb20gVVNCIGNoaXBjYXJkIHJlYWRlcgogICAKICBJbnRlcmZhY2UgdG8gSVNPIDc4MTYgY29tcGF0aWJsZSBjb250YWN0YmFzZWQgY2hpcGNhcmRzLCBlLmcuIEdTTSBTSU1zLgogIAogIEN1cnJlbnQgc3RhdHVzOgogICAgVGhpcyBpcyB0aGUga2VybmVsIHBhcnQgb2YgdGhlIGRyaXZlciBmb3IgdGhpcyBVU0IgY2FyZCByZWFkZXIuCiAgICBUaGVyZSBpcyBhbHNvIGEgdXNlciBwYXJ0IGZvciBhIENULUFQSSBkcml2ZXIgYXZhaWxhYmxlLiBBIHNpdGUKICAgIGZvciBkb3dubG9hZGluZyBpcyBUQkEuIEZvciBub3csIHlvdSBjYW4gcmVxdWVzdCBpdCBmcm9tIHRoZQogICAgbWFpbnRhaW5lciAobGludXgtdXNiQHNpaS5saSkuCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0CiAgbGludXgtdXNiQHNpaS5saQoKClByb2xpZmljIFBMMjMwMyBEcml2ZXIKCiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYW55IGRldmljZSB0aGF0IGhhcyB0aGUgUEwyMzAzIGNoaXAgZnJvbSBQcm9saWZpYwogIGluIGl0LiAgVGhpcyBpbmNsdWRlcyBhIG51bWJlciBvZiBzaW5nbGUgcG9ydCBVU0IgdG8gc2VyaWFsCiAgY29udmVydGVycyBhbmQgVVNCIEdQUyBkZXZpY2VzLiAgRGV2aWNlcyBmcm9tIEF0ZW4gKHRoZSBVQy0yMzIpIGFuZAogIElPLURhdGEgd29yayB3aXRoIHRoaXMgZHJpdmVyLCBhcyBkb2VzIHRoZSBEQ1UtMTEgbW9iaWxlLXBob25lIGNhYmxlLgoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBHcmVnCiAgS3JvYWgtSGFydG1hbiBhdCBncmVnQGtyb2FoLmNvbQogIAoKS0w1S1VTQjEwNSBjaGlwc2V0IC8gUGFsbUNvbm5lY3QgVVNCIHNpbmdsZS1wb3J0IGFkYXB0ZXIKICAKQ3VycmVudCBzdGF0dXM6CiAgVGhlIGRyaXZlciB3YXMgcHV0IHRvZ2V0aGVyIGJ5IGxvb2tpbmcgYXQgdGhlIHVzYiBidXMgdHJhbnNhY3Rpb25zCiAgZG9uZSBieSBQYWxtJ3MgZHJpdmVyIHVuZGVyIFdpbmRvd3MsIHNvIGEgbG90IG9mIGZ1bmN0aW9uYWxpdHkgaXMKICBzdGlsbCBtaXNzaW5nLiAgTm90YWJseSwgc2VyaWFsIGlvY3RscyBhcmUgc29tZXRpbWVzIGZha2VkIG9yIG5vdCB5ZXQKICBpbXBsZW1lbnRlZC4gIFN1cHBvcnQgZm9yIGZpbmRpbmcgb3V0IGFib3V0IERTUiBhbmQgQ1RTIGxpbmUgc3RhdHVzIGlzCiAgaG93ZXZlciBpbXBsZW1lbnRlZCAodGhvdWdoIG5vdCBuaWNlbHkpLCBzbyB5b3VyIGZhdm9yaXRlIGF1dG9waWxvdCgxKQogIGFuZCBwaWxvdC1tYW5hZ2VyIC1kYWVtb24gY2FsbHMgd2lsbCB3b3JrLiAgQmF1ZCByYXRlcyB1cCB0byAxMTUyMDAKICBhcmUgc3VwcG9ydGVkLCBidXQgaGFuZHNoYWtpbmcgKHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpcyBub3QsIHdoaWNoIGlzCiAgd2h5IGl0IGlzIHdpc2UgdG8gY3V0IGRvd24gb24gdGhlIHJhdGUgdXNlZCBpcyB3aXNlIGZvciBsYXJnZQogIHRyYW5zZmVycyB1bnRpbCB0aGlzIGlzIHNldHRsZWQuCiAgCk9wdGlvbnMgc3VwcG9ydGVkOgogIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlIHlvdSBjYW4gcGFzcyB0aGUgZm9sbG93aW5nCiAgb3B0aW9ucyB0byBpdDoKICBkZWJ1ZwkJCS0gZXh0cmEgdmVyYm9zZSBkZWJ1Z2dpbmcgaW5mbwogIAkJCSAgKGRlZmF1bHQ6IDA7IG5vbnplcm8gZW5hYmxlcykKICB1c2VfbG93bGF0ZW5jeQktIHVzZSBsb3dfbGF0ZW5jeSBmbGFnIHRvIHNwZWVkIHVwIHR0eSBsYXllcgoJCQkgIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UuCgkJCSAgKGRlZmF1bHQ6IDA7IG5vbnplcm8gZW5hYmxlcykKCiAgU2VlIGh0dHA6Ly93d3cudXVoYXVzLmRlL2xpbnV4L3BhbG1jb25uZWN0Lmh0bWwgZm9yIHVwLXRvLWRhdGUKICBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlci4KCkdlbmVyaWMgU2VyaWFsIGRyaXZlcgoKICBJZiB5b3VyIGRldmljZSBpcyBub3Qgb25lIG9mIHRoZSBhYm92ZSBsaXN0ZWQgZGV2aWNlcywgY29tcGF0aWJsZSB3aXRoCiAgdGhlIGFib3ZlIG1vZGVscywgeW91IGNhbiB0cnkgb3V0IHRoZSAiZ2VuZXJpYyIgaW50ZXJmYWNlLiBUaGlzCiAgaW50ZXJmYWNlIGRvZXMgbm90IHByb3ZpZGUgYW55IHR5cGUgb2YgY29udHJvbCBtZXNzYWdlcyBzZW50IHRvIHRoZQogIGRldmljZSwgYW5kIGRvZXMgbm90IHN1cHBvcnQgYW55IGtpbmQgb2YgZGV2aWNlIGZsb3cgY29udHJvbC4gQWxsIHRoYXQKICBpcyByZXF1aXJlZCBvZiB5b3VyIGRldmljZSBpcyB0aGF0IGl0IGhhcyBhdCBsZWFzdCBvbmUgYnVsayBpbiBlbmRwb2ludCwKICBvciBvbmUgYnVsayBvdXQgZW5kcG9pbnQuIAogIAogIFRvIGVuYWJsZSB0aGUgZ2VuZXJpYyBkcml2ZXIgdG8gcmVjb2duaXplIHlvdXIgZGV2aWNlLCBidWlsZCB0aGUgZHJpdmVyCiAgYXMgYSBtb2R1bGUgYW5kIGxvYWQgaXQgYnkgdGhlIGZvbGxvd2luZyBpbnZvY2F0aW9uOgoJaW5zbW9kIHVzYnNlcmlhbCB2ZW5kb3I9MHgjIyMjIHByb2R1Y3Q9MHgjIyMjCiAgd2hlcmUgdGhlICMjIyMgaXMgcmVwbGFjZWQgd2l0aCB0aGUgaGV4IHJlcHJlc2VudGF0aW9uIG9mIHlvdXIgZGV2aWNlJ3MKICB2ZW5kb3IgaWQgYW5kIHByb2R1Y3QgaWQuCgogIFRoaXMgZHJpdmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIE5ldENoaXAgVVNCCiAgZGV2ZWxvcG1lbnQgYm9hcmQsIHByb3ZpZGluZyBhIHdheSB0byBkZXZlbG9wIFVTQiBmaXJtd2FyZSB3aXRob3V0CiAgaGF2aW5nIHRvIHdyaXRlIGEgY3VzdG9tIGRyaXZlci4KCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZwogIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KCgpDT05UQUNUOgoKICBJZiBhbnlvbmUgaGFzIGFueSBwcm9ibGVtcyB1c2luZyB0aGVzZSBkcml2ZXJzLCB3aXRoIGFueSBvZiB0aGUgYWJvdmUKICBzcGVjaWZpZWQgcHJvZHVjdHMsIHBsZWFzZSBjb250YWN0IHRoZSBzcGVjaWZpYyBkcml2ZXIncyBhdXRob3IgbGlzdGVkCiAgYWJvdmUsIG9yIGpvaW4gdGhlIExpbnV4LVVTQiBtYWlsaW5nIGxpc3QgKGluZm9ybWF0aW9uIG9uIGpvaW5pbmcgdGhlCiAgbWFpbGluZyBsaXN0LCBhcyB3ZWxsIGFzIGEgbGluayB0byBpdHMgc2VhcmNoYWJsZSBhcmNoaXZlIGlzIGF0CiAgaHR0cDovL3d3dy5saW51eC11c2Iub3JnLyApCgoKR3JlZyBLcm9haC1IYXJ0bWFuCmdyZWdAa3JvYWguY29tCg==