SU5UUk9EVUNUSU9OCgogIFRoZSBVU0Igc2VyaWFsIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgYSBudW1iZXIgb2YgZGlmZmVyZW50IFVTQiB0bwogIHNlcmlhbCBjb252ZXJ0ZXIgcHJvZHVjdHMsIGFzIHdlbGwgYXMgc29tZSBkZXZpY2VzIHRoYXQgdXNlIGEgc2VyaWFsCiAgaW50ZXJmYWNlIGZyb20gdXNlcnNwYWNlIHRvIHRhbGsgdG8gdGhlIGRldmljZS4KCiAgU2VlIHRoZSBpbmRpdmlkdWFsIHByb2R1Y3Qgc2VjdGlvbiBiZWxvdyBmb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQKICB0aGUgZGlmZmVyZW50IGRldmljZXMuCgoKQ09ORklHVVJBVElPTgoKICBDdXJyZW50bHkgdGhlIGRyaXZlciBjYW4gaGFuZGxlIHVwIHRvIDI1NiBkaWZmZXJlbnQgc2VyaWFsIGludGVyZmFjZXMgYXQKICBvbmUgdGltZS4gCgogIElmIHlvdSBhcmUgbm90IHVzaW5nIGRldmZzOgogICAgVGhlIG1ham9yIG51bWJlciB0aGF0IHRoZSBkcml2ZXIgdXNlcyBpcyAxODggc28gdG8gdXNlIHRoZSBkcml2ZXIsCiAgICBjcmVhdGUgdGhlIGZvbGxvd2luZyBub2RlczoKCW1rbm9kIC9kZXYvdHR5VVNCMCBjIDE4OCAwCglta25vZCAvZGV2L3R0eVVTQjEgYyAxODggMQoJbWtub2QgL2Rldi90dHlVU0IyIGMgMTg4IDIKCW1rbm9kIC9kZXYvdHR5VVNCMyBjIDE4OCAzCgkJLgoJCS4KCQkuCglta25vZCAvZGV2L3R0eVVTQjI1NCBjIDE4OCAyNTQKCW1rbm9kIC9kZXYvdHR5VVNCMjU1IGMgMTg4IDI1NQoKICBJZiB5b3UgYXJlIHVzaW5nIGRldmZzOgogICAgVGhlIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyIHdpbGwgc2hvdyB1cCBhcwogICAgL2Rldi91c2IvdHRzL3swLDEsLi4ufQoKICBXaGVuIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIGFuZCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIHRoZSBkcml2ZXIKICB3aWxsIHByaW50IHRvIHRoZSBzeXN0ZW0gbG9nLCB3aGljaCBub2RlKHMpIHRoZSBkZXZpY2UgaGFzIGJlZW4gYm91bmQKICB0by4KICAKClNQRUNJRklDIERFVklDRVMgU1VQUE9SVEVECgoKQ29ubmVjdFRlY2ggV2hpdGVIRUFUIDQgcG9ydCBjb252ZXJ0ZXIKCiAgQ29ubmVjdFRlY2ggaGFzIGJlZW4gdmVyeSBmb3J0aGNvbWluZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyCiAgZGV2aWNlLCBpbmNsdWRpbmcgcHJvdmlkaW5nIGEgdW5pdCB0byB0ZXN0IHdpdGguCgogIFRoZSBkcml2ZXIgaXMgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgYnkgQ29ubmVjdCBUZWNoIEluYy4KICBodHRwOi8vd3d3LmNvbm5lY3R0ZWNoLmNvbQoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdAogIFN0dWFydCBNYWNEb25hbGQgYXQgc3R1YXJ0bUBjb25uZWN0dGVjaC5jb20KCgpIYW5kU3ByaW5nIFZpc29yLCBQYWxtIFVTQiwgYW5kIENsaekgVVNCIGRyaXZlcgoKICBUaGlzIGRyaXZlciB3b3JrcyB3aXRoIGFsbCBIYW5kU3ByaW5nIFVTQiwgUGFsbSBVU0IsIGFuZCBTb255IENsaekgVVNCCiAgZGV2aWNlcy4KCiAgT25seSB3aGVuIHRoZSBkZXZpY2UgdHJpZXMgdG8gY29ubmVjdCB0byB0aGUgaG9zdCwgd2lsbCB0aGUgZGV2aWNlIHNob3cKICB1cCB0byB0aGUgaG9zdCBhcyBhIHZhbGlkIFVTQiBkZXZpY2UuIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgZGV2aWNlIGlzCiAgcHJvcGVybHkgZW51bWVyYXRlZCwgYXNzaWduZWQgYSBwb3J0LCBhbmQgdGhlbiBjb21tdW5pY2F0aW9uIF9zaG91bGRfIGJlCiAgcG9zc2libGUuIFRoZSBkcml2ZXIgY2xlYW5zIHVwIHByb3Blcmx5IHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkLCBvcgogIHRoZSBjb25uZWN0aW9uIGlzIGNhbmNlbGVkIG9uIHRoZSBkZXZpY2UuCgogIE5PVEU6CiAgICBUaGlzIG1lYW5zIHRoYXQgaW4gb3JkZXIgdG8gdGFsayB0byB0aGUgZGV2aWNlLCB0aGUgc3luYyBidXR0b24gbXVzdCBiZQogICAgcHJlc3NlZCBCRUZPUkUgdHJ5aW5nIHRvIGdldCBhbnkgcHJvZ3JhbSB0byBjb21tdW5pY2F0ZSB0byB0aGUgZGV2aWNlLgogICAgVGhpcyBnb2VzIGFnYWluc3QgdGhlIGN1cnJlbnQgZG9jdW1lbnRhdGlvbiBmb3IgcGlsb3QteGZlciBhbmQgb3RoZXIKICAgIHBhY2thZ2VzLCBidXQgaXMgdGhlIG9ubHkgd2F5IHRoYXQgaXQgd2lsbCB3b3JrIGR1ZSB0byB0aGUgaGFyZHdhcmUKICAgIGluIHRoZSBkZXZpY2UuCiAgCiAgV2hlbiB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCwgdHJ5IHRhbGtpbmcgdG8gaXQgb24gdGhlIHNlY29uZCBwb3J0CiAgKHRoaXMgaXMgdXN1YWxseSAvZGV2L3R0eVVTQjEgaWYgeW91IGRvIG5vdCBoYXZlIGFueSBvdGhlciB1c2Itc2VyaWFsCiAgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLikgVGhlIHN5c3RlbSBsb2cgc2hvdWxkIHRlbGwgeW91IHdoaWNoIHBvcnQgaXMKICB0aGUgcG9ydCB0byB1c2UgZm9yIHRoZSBIb3RTeW5jIHRyYW5zZmVyLiBUaGUgIkdlbmVyaWMiIHBvcnQgY2FuIGJlIHVzZWQKICBmb3Igb3RoZXIgZGV2aWNlIGNvbW11bmljYXRpb24sIHN1Y2ggYXMgYSBQUFAgbGluay4KCiAgRm9yIHNvbWUgU29ueSBDbGnpIGRldmljZXMsIC9kZXYvdHR5VVNCMCBtdXN0IGJlIHVzZWQgdG8gdGFsayB0byB0aGUKICBkZXZpY2UuICBUaGlzIGlzIHRydWUgZm9yIGFsbCBPUyB2ZXJzaW9uIDMuNSBkZXZpY2VzLCBhbmQgbW9zdCBkZXZpY2VzCiAgdGhhdCBoYXZlIGhhZCBhIGZsYXNoIHVwZ3JhZGUgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBPUy4gIFNlZSB0aGUKICBrZXJuZWwgc3lzdGVtIGxvZyBmb3IgaW5mb3JtYXRpb24gb24gd2hpY2ggaXMgdGhlIGNvcnJlY3QgcG9ydCB0byB1c2UuCgogIElmIGFmdGVyIHByZXNzaW5nIHRoZSBzeW5jIGJ1dHRvbiwgbm90aGluZyBzaG93cyB1cCBpbiB0aGUgc3lzdGVtIGxvZywKICB0cnkgcmVzZXR0aW5nIHRoZSBkZXZpY2UsIGZpcnN0IGEgaG90IHJlc2V0LCBhbmQgdGhlbiBhIGNvbGQgcmVzZXQgaWYKICBuZWNlc3NhcnkuICBTb21lIGRldmljZXMgbmVlZCB0aGlzIGJlZm9yZSB0aGV5IGNhbiB0YWxrIHRvIHRoZSBVU0IgcG9ydAogIHByb3Blcmx5LgogIAogIERldmljZXMgdGhhdCBhcmUgbm90IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBjYW4gYmUgc3BlY2lmaWVkIHdpdGggbW9kdWxlCiAgcGFyYW1ldGVycy4gIGUuZy4gbW9kcHJvYmUgdmlzb3IgdmVuZG9yPTB4NTRjIHByb2R1Y3Q9MHg2NgogIAogIFRoZXJlIGlzIGEgd2VicGFnZSBhbmQgbWFpbGluZyBsaXN0cyBmb3IgdGhpcyBwb3J0aW9uIG9mIHRoZSBkcml2ZXIgYXQ6CiAgaHR0cDovL3VzYnZpc29yLnNvdXJjZWZvcmdlLm5ldC8KCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZwogIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KCgpQb2NrZXRQQyBQREEgRHJpdmVyCgogIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gQ29tcGFxIGlQQVEsIEhQIEpvcm5hZGEsIENhc2lvIEVNNTAwCiAgYW5kIG90aGVyIFBEQXMgcnVubmluZyBXaW5kb3dzIENFIDMuMCBvciBQb2NrZXRQQyAyMDAyIHVzaW5nIGEgVVNCCiAgY2FibGUvY3JhZGxlLgogIE1vc3QgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgQWN0aXZlU3luYyBhcmUgc3VwcG9ydGVkIG91dCBvZiB0aGUgYm94LgogIEZvciBvdGhlcnMsIHBsZWFzZSB1c2UgbW9kdWxlIHBhcmFtZXRlcnMgdG8gc3BlY2lmeSB0aGUgcHJvZHVjdCBhbmQgdmVuZG9yCiAgaWQuIGUuZy4gbW9kcHJvYmUgaXBhcSB2ZW5kb3I9MHgzZjAgcHJvZHVjdD0weDExMjUKCiAgVGhlIGRyaXZlciBwcmVzZW50cyBhIHNlcmlhbCBpbnRlcmZhY2UgKHVzdWFsbHkgb24gL2Rldi90dHlVU0IwKSBvdmVyCiAgd2hpY2ggb25lIG1heSBydW4gcHBwIGFuZCBlc3RhYmxpc2ggYSBUQ1AvSVAgbGluayB0byB0aGUgUERBLiBPbmNlIHRoaXMKICBpcyBkb25lLCB5b3UgY2FuIHRyYW5zZmVyIGZpbGVzLCBiYWNrdXAsIGRvd25sb2FkIGVtYWlsIGV0Yy4gVGhlIG1vc3QKICBzaWduaWZpY2FudCBhZHZhbnRhZ2Ugb2YgdXNpbmcgVVNCIGlzIHNwZWVkIC0gSSBjYW4gZ2V0IDczIHRvIDExMwogIGtieXRlcy9zZWMgZm9yIGRvd25sb2FkL3VwbG9hZCB0byBteSBpUEFRLgoKICBUaGlzIGRyaXZlciBpcyBvbmx5IG9uZSBvZiBhIHNldCBvZiBjb21wb25lbnRzIHJlcXVpcmVkIHRvIHV0aWxpemUKICB0aGUgVVNCIGNvbm5lY3Rpb24uIFBsZWFzZSB2aXNpdCBodHRwOi8vc3luY2Uuc291cmNlZm9yZ2UubmV0IHdoaWNoCiAgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBwYWNrYWdlcyBhbmQgYSBzaW1wbGUgc3RlcC1ieS1zdGVwIGhvd3RvLgoKICBPbmNlIGNvbm5lY3RlZCwgeW91IGNhbiB1c2UgV2luIENFIHByb2dyYW1zIGxpa2UgZnRwVmlldywgUG9ja2V0IE91dGxvb2sKICBmcm9tIHRoZSBQREEgYW5kIHhjZXJkaXNwLCBzeW5jZSB1dGlsaXRpZXMgZnJvbSB0aGUgTGludXggc2lkZS4KCiAgVG8gdXNlIFBvY2tldCBJRSwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gYXQKICBodHRwOi8vd3d3LnRla2d1cnUuY28udWsvRU01MDAvdXNidG9uZXQuaHRtIHRvIGFjaGlldmUgdGhlIHNhbWUgdGhpbmcKICBvbiBXaW45OC4gT21pdCB0aGUgcHJveHkgc2VydmVyIHBhcnQ7IExpbnV4IGlzIHF1aXRlIGNhcGFibGUgb2YgZm9yd2FyZGluZwogIHBhY2tldHMgdW5saWtlIFdpbjk4LiBBbm90aGVyIG1vZGlmaWNhdGlvbiBpcyByZXF1aXJlZCBhdCBsZWFzdCBmb3IgdGhlCiAgaVBBUSAtIGRpc2FibGUgYXV0b3N5bmMgYnkgZ29pbmcgdG8gdGhlIFN0YXJ0L1NldHRpbmdzL0Nvbm5lY3Rpb25zIG1lbnUKICBhbmQgdW5jaGVja2luZyB0aGUgIkF1dG9tYXRpY2FsbHkgc3luY2hyb25pemUgLi4uIiBib3guIEdvIHRvCiAgU3RhcnQvUHJvZ3JhbXMvQ29ubmVjdGlvbnMsIGNvbm5lY3QgdGhlIGNhYmxlIGFuZCBzZWxlY3QgInVzYmRpYWwiIChvcgogIHdoYXRldmVyIHlvdSBuYW1lZCB5b3VyIG5ldyBVU0IgY29ubmVjdGlvbikuIFlvdSBzaG91bGQgZmluYWxseSB3aW5kCiAgdXAgd2l0aCBhICJDb25uZWN0ZWQgdG8gdXNiZGlhbCIgd2luZG93IHdpdGggc3RhdHVzIHNob3duIGFzIGNvbm5lY3RlZC4KICBOb3cgc3RhcnQgdXAgUElFIGFuZCBicm93c2UgYXdheS4KCiAgSWYgaXQgZG9lc24ndCB3b3JrIGZvciBzb21lIHJlYXNvbiwgbG9hZCBib3RoIHRoZSB1c2JzZXJpYWwgYW5kIGlwYXEgbW9kdWxlCiAgd2l0aCB0aGUgbW9kdWxlIHBhcmFtZXRlciAiZGVidWciIHNldCB0byAxIGFuZCBleGFtaW5lIHRoZSBzeXN0ZW0gbG9nLgogIFlvdSBjYW4gYWxzbyB0cnkgc29mdC1yZXNldHRpbmcgeW91ciBQREEgYmVmb3JlIGF0dGVtcHRpbmcgYSBjb25uZWN0aW9uLgoKICBPdGhlciBmdW5jdGlvbmFsaXR5IG1heSBiZSBwb3NzaWJsZSBkZXBlbmRpbmcgb24geW91ciBQREEuIEFjY29yZGluZyB0bwogIFdlcyBDaWxsZGhhaXJlIDxiaWxseWJvYmpvZWhlbnJ5Ym9iQGhvdG1haWwuY29tPiwgd2l0aCB0aGUgVG9zaGliYSBFNTcwLAogIC4uLmlmIHlvdSBib290IGludG8gdGhlIGJvb3Rsb2FkZXIgKGhvbGQgZG93biB0aGUgcG93ZXIgd2hlbiBoaXR0aW5nIHRoZQogIHJlc2V0IGJ1dHRvbiwgY29udGludWluZyB0byBob2xkIG9udG8gdGhlIHBvd2VyIHVudGlsIHRoZSBib290bG9hZGVyIHNjcmVlbgogIGlzIGRpc3BsYXllZCksIHRoZW4gcHV0IGl0IGluIHRoZSBjcmFkbGUgd2l0aCB0aGUgaXBhcSBkcml2ZXIgbG9hZGVkLCBvcGVuCiAgYSB0ZXJtaW5hbCBvbiAvZGV2L3R0eVVTQjAsIGl0IGdpdmVzIHlvdSBhICJVU0IgUmVmbGFzaCIgdGVybWluYWwsIHdoaWNoIGNhbgogIGJlIHVzZWQgdG8gZmxhc2ggdGhlIFJPTSwgYXMgd2VsbCBhcyB0aGUgbWljcm9QIGNvZGUuLiAgc28gbXVjaCBmb3IgbmVlZGluZwogIFRvc2hpYmEncyAkMzUwIHNlcmlhbCBjYWJsZSBmb3IgZmxhc2hpbmchISA6RAogIE5PVEU6IFRoaXMgaGFzIE5PVCBiZWVuIHRlc3RlZC4gVXNlIGF0IHlvdXIgb3duIHJpc2suCiAKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoZSBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdhbmVzaAogIFZhcmFkYXJhamFuIDxnYW5lc2hAdmVyaXRhcy5jb20+CgoKS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIKCiAgU2luZ2xlIHBvcnQgREItOSBzZXJpYWwgYWRhcHRlciwgcHVzaGVkIGFzIGEgUERBIGFkYXB0ZXIgZm9yIGlNYWNzIChtb3N0bHkKICBzb2xkIGluIE1hY2ludG9zaCBjYXRhbG9ncywgY29tZXMgaW4gYSB0cmFuc2x1Y2VudCB3aGl0ZS9ncmVlbiBkb25nbGUpLgogIEZhaXJseSBzaW1wbGUgZGV2aWNlLiBGaXJtd2FyZSBpcyBob21lYnJldy4KICBUaGlzIGRyaXZlciBhbHNvIHdvcmtzIGZvciB0aGUgWGlyY29tL0VudHJncmEgc2luZ2xlIHBvcnQgc2VyaWFsIGFkYXB0ZXIuCgogIEN1cnJlbnQgc3RhdHVzOgogICBUaGluZ3MgdGhhdCB3b3JrOgogICAgIGJhc2ljIGlucHV0L291dHB1dCAodGVzdGVkIHdpdGggJ2N1JykKICAgICBibG9ja2luZyB3cml0ZSB3aGVuIHNlcmlhbCBsaW5lIGNhbid0IGtlZXAgdXAKICAgICBjaGFuZ2luZyBiYXVkIHJhdGVzICh1cCB0byAxMTUyMDApCiAgICAgZ2V0dGluZy9zZXR0aW5nIG1vZGVtIGNvbnRyb2wgcGlucyAoVElPQ017R0VULFNFVCxCSVMsQklDfSkKICAgICBzZW5kaW5nIGJyZWFrIChhbHRob3VnaCBkdXJhdGlvbiBsb29rcyBzdXNwZWN0KQogICBUaGluZ3MgdGhhdCBkb24ndDoKICAgICBkZXZpY2Ugc3RyaW5ncyAoYXMgbG9nZ2VkIGJ5IGtlcm5lbCkgaGF2ZSB0cmFpbGluZyBiaW5hcnkgZ2FyYmFnZQogICAgIGRldmljZSBJRCBpc24ndCByaWdodCwgbWlnaHQgY29sbGlkZSB3aXRoIG90aGVyIEtleXNwYW4gcHJvZHVjdHMKICAgICBjaGFuZ2luZyBiYXVkIHJhdGVzIG91Z2h0IHRvIGZsdXNoIHR4L3J4IHRvIGF2b2lkIG1hbmdsZWQgaGFsZiBjaGFyYWN0ZXJzCiAgIEJpZyBUaGluZ3Mgb24gdGhlIHRvZG8gbGlzdDoKICAgICBwYXJpdHksIDcgdnMgOCBiaXRzIHBlciBjaGFyLCAxIG9yIDIgc3RvcCBiaXRzCiAgICAgSFcgZmxvdyBjb250cm9sCiAgICAgbm90IGFsbCBvZiB0aGUgc3RhbmRhcmQgVVNCIGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkOiBHZXRfU3RhdHVzLCBTZXRfRmVhdHVyZQogICAgIE9fTk9OQkxPQ0ssIHNlbGVjdCgpCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEJyaWFuCiAgV2FybmVyIGF0IHdhcm5lckBsb3RoYXIuY29tIAoKCktleXNwYW4gVVNBLXNlcmllcyBTZXJpYWwgQWRhcHRlcnMKCiAgU2luZ2xlLCBEdWFsIGFuZCBRdWFkIHBvcnQgYWRhcHRlcnMgLSBkcml2ZXIgdXNlcyBLZXlzcGFuIHN1cHBsaWVkIAogIGZpcm13YXJlIGFuZCBpcyBiZWluZyBkZXZlbG9wZWQgd2l0aCB0aGVpciBzdXBwb3J0LgogIAogIEN1cnJlbnQgc3RhdHVzOgogICAgVGhlIFVTQS0xOFgsIFVTQS0yOFgsIFVTQS0xOSwgVVNBLTE5VyBhbmQgVVNBLTQ5VyBhcmUgc3VwcG9ydGVkIGFuZAogICAgaGF2ZSBiZWVuIHByZXR0eSB0aHJvdWdobHkgdGVzdGVkIGF0IHZhcmlvdXMgYmF1ZCByYXRlcyB3aXRoIDgtTi0xCiAgICBjaGFyYWN0ZXIgc2V0dGluZ3MuICBPdGhlciBjaGFyYWN0ZXIgbGVuZ3RocyBhbmQgcGFyaXR5IHNldHVwcyBhcmUKICAgIHByZXNlbnRseSB1bnRlc3RlZC4KCiAgICBUaGUgVVNBLTI4IGlzbid0IHlldCBzdXBwb3J0ZWQgdGhvdWdoIGRvaW5nIHNvIHNob3VsZCBiZSBwcmV0dHkKICAgIHN0cmFpZ2h0Zm9yd2FyZC4gIENvbnRhY3QgdGhlIG1haW50YWluZXIgaWYgeW91IHJlcXVpcmUgdGhpcwogICAgZnVuY3Rpb25hbGl0eS4KICAKICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBhdDoKICAgICAgICBodHRwOi8vbWlzYy5udS9odWdoL2tleXNwYW4uaHRtbAogICAKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBIdWdoCiAgQmxlbWluZ3MgYXQgaHVnaEBtaXNjLm51CgoKRlRESSBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyCgogIFRoaXMgaXMgYSBzaW5nbGUgcG9ydCBEQi0yNSBzZXJpYWwgYWRhcHRlci4gTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzCiAgZGV2aWNlIGFuZCB0aGUgTGludXggZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKCWh0dHA6Ly9yZWFsaXR5LnNnaS5jb20vYnJ5ZGVyX3dlbGxpbmd0b24vZnRkaV9zaW8vCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEJpbGwgUnlkZXIKICBhdCBicnlkZXJAc2dpLmNvbQoKClp5WEVMIG9tbmkubmV0IGxjZCBwbHVzIElTRE4gVEEKCiAgVGhpcyBpcyBhbiBJU0ROIFRBLiBQbGVhc2UgcmVwb3J0IGJvdGggc3VjY2Vzc2VzIGFuZCB0cm91YmxlcyB0bwogIGF6dW1tb0B0b3dlcnRlY2guaXQKCgpDeXByZXNzIE04IENZNDYwMSBGYW1pbHkgU2VyaWFsIERyaXZlcgoKICBUaGlzIGRyaXZlciB3YXMgaW4gbW9zdCBwYXJ0IGRldmVsb3BlZCBieSBOZWlsICJrb3lhbWEiIFdoZWxjaGVsLiAgSXQKICBoYXMgYmVlbiBpbXByb3ZlZCBzaW5jZSB0aGF0IHByZXZpb3VzIGZvcm0gdG8gc3VwcG9ydCBkeW5hbWljIHNlcmlhbAogIGxpbmUgc2V0dGluZ3MgYW5kIGltcHJvdmVkIGxpbmUgaGFuZGxpbmcuICBUaGUgZHJpdmVyIGlzIGZvciB0aGUgbW9zdAogIHBhcnQgc3RhYmxlIGFuZCBoYXMgYmVlbiB0ZXN0ZWQgb24gYW4gc21wIG1hY2hpbmUuIChkdWFsIHAyKQoKICAgIENoaXBzZXRzIHN1cHBvcnRlZCB1bmRlciBDWTQ2MDEgZmFtaWx5OgoJCgkJQ1k3QzYzNzIzLCBDWTdDNjM3NDIsIENZN0M2Mzc0MywgQ1k3QzY0MDEzCgogICAgRGV2aWNlcyBzdXBwb3J0ZWQ6CgoJCS1EZUxvcm1lJ3MgVVNCIEVhcnRobWF0ZSAoU2lSRiBTdGFyIElJIGxwIGFyY2gpCgkJLUN5cHJlc3MgSElELT5DT00gUlMyMzIgYWRhcHRlcgoJCgkJTm90ZTogQ3lwcmVzcyBTZW1pY29uZHVjdG9yIGNsYWltcyBubyBhZmZpbGlhdGlvbiB3aXRoIHRoZQoJCQl0aGUgaGlkLT5jb20gZGV2aWNlLgoKCU1vc3QgZGV2aWNlcyB1c2luZyBjaGlwc2V0cyB1bmRlciB0aGUgQ1k0NjAxIGZhbWlseSBzaG91bGQKICAgICB3b3JrIHdpdGggdGhlIGRyaXZlci4gIEFzIGxvbmcgYXMgdGhleSBzdGF5IHRydWUgdG8gdGhlIENZNDYwMQogICAgIHVzYnNlcmlhbCBzcGVjaWZpY2F0aW9uLgoKICAgIFRlY2huaWNhbCBub3RlczoKCiAgICAgICAgVGhlIEVhcnRobWF0ZSBzdGFydHMgb3V0IGF0IDQ4MDAgOE4xIGJ5IGRlZmF1bHQuLi4gdGhlIGRyaXZlciB3aWxsCgl1cG9uIHN0YXJ0IGluaXQgdG8gdGhpcyBzZXR0aW5nLiAgdXNic2VyaWFsIGNvcmUgcHJvdmlkZXMgdGhlIHJlc3QKCW9mIHRoZSB0ZXJtaW9zIHNldHRpbmdzLCBhbG9uZyB3aXRoIHNvbWUgY3VzdG9tIHRlcm1pb3Mgc28gdGhhdCB0aGUKCW91dHB1dCBpcyBpbiBwcm9wZXIgZm9ybWF0IGFuZCBwYXJzYWJsZS4KCQoJVGhlIGRldmljZSBjYW4gYmUgcHV0IGludG8gc2lyZiBtb2RlIGJ5IGlzc3VpbmcgTk1FQSBjb21tYW5kOgoJCSRQU1JGMTAwLDxwcm90b2NvbD4sPGJhdWQ+LDxkYXRhYml0cz4sPHN0b3BiaXRzPiw8cGFyaXR5PipDSEVDS1NVTQoJCSRQU1JGMTAwLDAsOTYwMCw4LDEsMCowQwoKCQlJdCBzaG91bGQgdGhlbiBiZSBzdWZmaWNpZW50IHRvIGNoYW5nZSB0aGUgcG9ydCB0ZXJtaW9zIHRvIG1hdGNoIHRoaXMKCQl0byBiZWdpbiBjb21tdW5pY2F0aW5nLgoKCUFzIGZhciBhcyBJIGNhbiB0ZWxsIGl0IHN1cHBvcnRzIHByZXR0eSBtdWNoIGV2ZXJ5IHNpcmYgY29tbWFuZCBhcwoJZG9jdW1lbnRlZCBvbmxpbmUgYXZhaWxhYmxlIHdpdGggZmlybXdhcmUgMi4zMSwgd2l0aCBzb21lIHVua25vd24KCW1lc3NhZ2UgaWRzLgoKCVRoZSBoaWQtPmNvbSBhZGFwdGVyIGNhbiBydW4gYXQgYSBtYXhpbXVtIGJhdWQgb2YgMTE1MjAwYnBzLiAgUGxlYXNlIG5vdGUKCXRoYXQgdGhlIGRldmljZSBoYXMgdHJvdWJsZSBvciBpcyBpbmNhcGFibGUgb2YgcmFpc2luZyBsaW5lIHZvbHRhZ2UgcHJvcGVybHkuCglJdCB3aWxsIGJlIGZpbmUgd2l0aCBudWxsIG1vZGVtIGxpbmtzLCBhcyBsb25nIGFzIHlvdSBkbyBub3QgdHJ5IHRvIGxpbmsgdHdvCgl0b2dldGhlciB3aXRob3V0IGhhY2tpbmcgdGhlIGFkYXB0ZXIgdG8gc2V0IHRoZSBsaW5lIGhpZ2guCgoJVGhlIGRyaXZlciBpcyBzbXAgc2FmZS4gIFBlcmZvcm1hbmNlIHdpdGggdGhlIGRyaXZlciBpcyByYXRoZXIgbG93IHdoZW4gdXNpbmcKCWl0IGZvciB0cmFuc2ZlcmluZyBmaWxlcy4gIFRoaXMgaXMgYmVpbmcgd29ya2VkIG9uLCBidXQgSSB3b3VsZCBiZSB3aWxsaW5nIHRvCglhY2NlcHQgcGF0Y2hlcy4gIEFuIHVyYiBxdWV1ZSBvciBwYWNrZXQgYnVmZmVyIHdvdWxkIGxpa2VseSBmaXQgdGhlIGJpbGwgaGVyZS4KCglJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBwcm9ibGVtcywgcGF0Y2hlcywgZmVhdHVyZSByZXF1ZXN0cywgZXRjLiB5b3UgY2FuCgljb250YWN0IG1lIGhlcmUgdmlhIGVtYWlsOgoJCQkJCWRpZ25vbWVAZ21haWwuY29tCgkJKHlvdXIgcHJvYmxlbXMvcGF0Y2hlcyBjYW4gYWx0ZXJuYXRlbHkgYmUgc3VibWl0dGVkIHRvIHVzYi1kZXZlbCkKCgpEaWdpIEFjY2VsZVBvcnQgRHJpdmVyCgogIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBEaWdpIEFjY2VsZVBvcnQgVVNCIDIgYW5kIDQgZGV2aWNlcywgMiBwb3J0CiAgKHBsdXMgYSBwYXJhbGxlbCBwb3J0KSBhbmQgNCBwb3J0IFVTQiBzZXJpYWwgY29udmVydGVycy4gIFRoZSBkcml2ZXIKICBkb2VzIE5PVCB5ZXQgc3VwcG9ydCB0aGUgRGlnaSBBY2NlbGVQb3J0IFVTQiA4LgoKICBUaGlzIGRyaXZlciB3b3JrcyB1bmRlciBTTVAgd2l0aCB0aGUgdXNiLXVoY2kgZHJpdmVyLiAgSXQgZG9lcyBub3QKICB3b3JrIHVuZGVyIFNNUCB3aXRoIHRoZSB1aGNpIGRyaXZlci4KCiAgVGhlIGRyaXZlciBpcyBnZW5lcmFsbHkgd29ya2luZywgdGhvdWdoIHdlIHN0aWxsIGhhdmUgYSBmZXcgbW9yZSBpb2N0bHMKICB0byBpbXBsZW1lbnQgYW5kIGZpbmFsIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyB0byBkby4gIFRoZSBwYXJhbGxlZCBwb3J0CiAgb24gdGhlIFVTQiAyIGlzIHN1cHBvcnRlZCBhcyBhIHNlcmlhbCB0byBwYXJhbGxlbCBjb252ZXJ0ZXI7IGluIG90aGVyCiAgd29yZHMsIGl0IGFwcGVhcnMgYXMgYW5vdGhlciBVU0Igc2VyaWFsIHBvcnQgb24gTGludXgsIGV2ZW4gdGhvdWdoCiAgcGh5c2ljYWxseSBpdCBpcyByZWFsbHkgYSBwYXJhbGxlbCBwb3J0LiAgVGhlIERpZ2kgQWNjZWxlcG9ydCBVU0IgOAogIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgoKICBQbGVhc2UgY29udGFjdCBQZXRlciBCZXJnZXIgKHBiZXJnZXJAYnJpbXNvbi5jb20pIG9yIEFsIEJvcmNoZXJzCiAgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkgZm9yIHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMKICBkcml2ZXIuCgoKQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBGNVUxMDMKCiAgU2luZ2xlIHBvcnQgREItOS9QUy0yIHNlcmlhbCBhZGFwdGVyIGZyb20gQmVsa2luIHdpdGggZmlybXdhcmUgYnkgZVRFSyBMYWJzLgogIFRoZSBQZXJhY29tIHNpbmdsZSBwb3J0IHNlcmlhbCBhZGFwdGVyIGFsc28gd29ya3Mgd2l0aCB0aGlzIGRyaXZlciwgYXMKICB3ZWxsIGFzIHRoZSBHb0h1YnMgYWRhcHRlci4KCiAgQ3VycmVudCBzdGF0dXM6CiAgICBUaGUgZm9sbG93aW5nIGhhdmUgYmVlbiB0ZXN0ZWQgYW5kIHdvcms6CiAgICAgIEJhdWQgcmF0ZSAgICAzMDAtMjMwNDAwICAgICAgICAgICAgICAgCiAgICAgIERhdGEgYml0cyAgICA1LTgKICAgICAgU3RvcCBiaXRzICAgIDEtMgogICAgICBQYXJpdHkgICAgICAgTixFLE8sTSxTCiAgICAgIEhhbmRzaGFrZSAgICBOb25lLCBTb2Z0d2FyZSAoWE9OL1hPRkYpLCBIYXJkd2FyZSAoQ1RTUlRTLENUU0RUUikqCiAgICAgIEJyZWFrICAgICAgICBTZXQgYW5kIGNsZWFyCiAgICAgIExpbmUgY29udHJsICBJbnB1dC9PdXRwdXQgcXVlcnkgYW5kIGNvbnRyb2wgKioKCiAgICAgICogIEhhcmR3YXJlIGlucHV0IGZsb3cgY29udHJvbCBpcyBvbmx5IGVuYWJsZWQgZm9yIGZpcm13YXJlCiAgICAgICAgIGxldmVscyBhYm92ZSAyLjA2LiAgUmVhZCBzb3VyY2UgY29kZSBjb21tZW50cyBkZXNjcmliaW5nIEJlbGtpbgogICAgICAgICBmaXJtd2FyZSBlcnJhdGEuICBIYXJkd2FyZSBvdXRwdXQgZmxvdyBjb250cm9sIGlzIHdvcmtpbmcgZm9yIGFsbAogICAgICAgICBmaXJtd2FyZSB2ZXJzaW9ucy4KICAgICAgKiogUXVlcmllcyBvZiBpbnB1dHMgKENUUyxEU1IsQ0QsUkkpIHNob3cgdGhlIGxhc3QKICAgICAgICAgcmVwb3J0ZWQgc3RhdGUuICBRdWVyaWVzIG9mIG91dHB1dHMgKERUUixSVFMpIHNob3cgdGhlIGxhc3QKICAgICAgICAgcmVxdWVzdGVkIHN0YXRlIGFuZCBtYXkgbm90IHJlZmxlY3QgY3VycmVudCBzdGF0ZSBhcyBzZXQgYnkKICAgICAgICAgYXV0b21hdGljIGhhcmR3YXJlIGZsb3cgY29udHJvbC4KCiAgVE8gRE8gTGlzdDoKICAgIC0tIEFkZCB0cnVlIG1vZGVtIGNvbnRvbCBsaW5lIHF1ZXJ5IGNhcGFiaWxpdHkuICBDdXJyZW50bHkgdHJhY2tzIHRoZQogICAgICAgc3RhdGVzIHJlcG9ydGVkIGJ5IHRoZSBpbnRlcnJ1cHQgYW5kIHRoZSBzdGF0ZXMgcmVxdWVzdGVkLgogICAgLS0gQWRkIGVycm9yIHJlcG9ydGluZyBiYWNrIHRvIGFwcGxpY2F0aW9uIGZvciBVQVJUIGVycm9yIGNvbmRpdGlvbnMuCiAgICAtLSBBZGQgc3VwcG9ydCBmb3IgZmx1c2ggaW9jdGxzLgogICAgLS0gQWRkIGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IGlzIG1pc3NpbmcgOikKCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgV2lsbGlhbQogIEdyZWF0aG91c2UgYXQgd2dyZWF0aG91c2VAc212YS5jb20KCgpFbXBlZyBlbXBlZy1jYXIgTWFyayBJL0lJIERyaXZlcgoKICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgdG8gcHJvdmlkZSBjb25uZWN0aXZpdHkgc3VwcG9ydCBmb3IgdGhlCiAgY2xpZW50IHN5bmNocm9uaXphdGlvbiB0b29scyBmb3IgYW4gRW1wZWcgZW1wZWctY2FyIG1wMyBwbGF5ZXIuCgogIFRpcHM6CiAgICAqIERvbid0IGZvcmdldCB0byBjcmVhdGUgdGhlIGRldmljZSBub2RlcyBmb3IgdHR5VVNCezAsMSwyLC4uLn0KICAgICogbW9kcHJvYmUgZW1wZWcgKG1vZHByb2JlIGlzIHlvdXIgZnJpZW5kKQogICAgKiBlbXB0b29sIC0tdXNiIC9kZXYvdHR5VVNCMCAob3Igd2hhdGV2ZXIgeW91IG5hbWVkIHlvdXIgZGV2aWNlIG5vZGUpCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdhcnkKICBCcnViYWtlciBhdCB4YXZ5ZXJAaXgubmV0Y29tLmNvbQoKCk1DVCBVU0IgU2luZ2xlIFBvcnQgU2VyaWFsIEFkYXB0ZXIgVTIzMgoKICBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIE1DVCBVU0ItUlMyMzIgQ29udmVydGVyICgyNSBwaW4sIE1vZGVsIE5vLgogIFUyMzItUDI1KSBmcm9tIE1hZ2ljIENvbnRyb2wgVGVjaG5vbG9neSBDb3JwLiAodGhlcmUgaXMgYWxzbyBhIDkgcGluCiAgTW9kZWwgTm8uIFUyMzItUDkpLiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZGV2aWNlIGNhbiBiZSBmb3VuZCBhdAogIHRoZSBtYW51ZmFjdHVyZSdzIHdlYi1zaXRlOiBodHRwOi8vd3d3Lm1jdC5jb20udHcuCgogIFRoZSBkcml2ZXIgaXMgZ2VuZXJhbGx5IHdvcmtpbmcsIHRob3VnaCBpdCBzdGlsbCBuZWVkcyBzb21lIG1vcmUgdGVzdGluZy4KICBJdCBpcyBkZXJpdmVkIGZyb20gdGhlIEJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRjVVMTAzIGRyaXZlciBhbmQgaXRzCiAgVE9ETyBsaXN0IGlzIHZhbGlkIGZvciB0aGlzIGRyaXZlciBhcyB3ZWxsLgoKICBUaGlzIGRyaXZlciBoYXMgYWxzbyBiZWVuIGZvdW5kIHRvIHdvcmsgZm9yIG90aGVyIHByb2R1Y3RzLCB3aGljaCBoYXZlCiAgdGhlIHNhbWUgVmVuZG9yIElEIGJ1dCBkaWZmZXJlbnQgUHJvZHVjdCBJRHMuIFNpdGVjb20ncyBVMjMyLVAyNSBzZXJpYWwKICBjb252ZXJ0ZXIgdXNlcyBQcm9kdWN0IElEIDB4MjMwIGFuZCBWZW5kb3IgSUQgMHg3MTEgYW5kIHdvcmtzIHdpdGggdGhpcwogIGRyaXZlci4gQWxzbywgRC1MaW5rJ3MgRFUtSDNTUCBVU0IgQkFZIGFsc28gd29ya3Mgd2l0aCB0aGlzIGRyaXZlci4KCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgV29sZmdhbmcKICBHcmFuZGVnZ2VyIGF0IHdvbGZnYW5nQGNlcy5jaAoKCkluc2lkZSBPdXQgTmV0d29ya3MgRWRnZXBvcnQgRHJpdmVyCgogIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGFsbCBkZXZpY2VzIG1hZGUgYnkgSW5zaWRlIE91dCBOZXR3b3Jrcywgc3BlY2lmaWNhbGx5CiAgdGhlIGZvbGxvd2luZyBtb2RlbHM6CiAgICAgICBFZGdlcG9ydC80CiAgICAgICBSYXBpZHBvcnQvNAogICAgICAgRWRnZXBvcnQvNHQKICAgICAgIEVkZ2Vwb3J0LzIKICAgICAgIEVkZ2Vwb3J0LzRpCiAgICAgICBFZGdlcG9ydC8yaQogICAgICAgRWRnZXBvcnQvNDIxCiAgICAgICBFZGdlcG9ydC8yMQogICAgICAgRWRnZXBvcnQvOAogICAgICAgRWRnZXBvcnQvOCBEdWFsCiAgICAgICBFZGdlcG9ydC8yRDgKICAgICAgIEVkZ2Vwb3J0LzREOAogICAgICAgRWRnZXBvcnQvOGkKICAgICAgIEVkZ2Vwb3J0LzIgRElOCiAgICAgICBFZGdlcG9ydC80IERJTgogICAgICAgRWRnZXBvcnQvMTYgRHVhbAoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBHcmVnCiAgS3JvYWgtSGFydG1hbiBhdCBncmVnQGtyb2FoLmNvbQoKClJFSU5FUiBTQ1QgY3liZXJKYWNrIHBpbnBhZC9lLWNvbSBVU0IgY2hpcGNhcmQgcmVhZGVyCiAgIAogIEludGVyZmFjZSB0byBJU08gNzgxNiBjb21wYXRpYmxlIGNvbnRhY3RiYXNlZCBjaGlwY2FyZHMsIGUuZy4gR1NNIFNJTXMuCiAgCiAgQ3VycmVudCBzdGF0dXM6CiAgICBUaGlzIGlzIHRoZSBrZXJuZWwgcGFydCBvZiB0aGUgZHJpdmVyIGZvciB0aGlzIFVTQiBjYXJkIHJlYWRlci4KICAgIFRoZXJlIGlzIGFsc28gYSB1c2VyIHBhcnQgZm9yIGEgQ1QtQVBJIGRyaXZlciBhdmFpbGFibGUuIEEgc2l0ZQogICAgZm9yIGRvd25sb2FkaW5nIGlzIFRCQS4gRm9yIG5vdywgeW91IGNhbiByZXF1ZXN0IGl0IGZyb20gdGhlCiAgICBtYWludGFpbmVyIChsaW51eC11c2JAc2lpLmxpKS4KCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QKICBsaW51eC11c2JAc2lpLmxpCgoKUHJvbGlmaWMgUEwyMzAzIERyaXZlcgoKICBUaGlzIGRyaXZlciBzdXBwb3J0IGFueSBkZXZpY2UgdGhhdCBoYXMgdGhlIFBMMjMwMyBjaGlwIGZyb20gUHJvbGlmaWMKICBpbiBpdC4gIFRoaXMgaW5jbHVkZXMgYSBudW1iZXIgb2Ygc2luZ2xlIHBvcnQgVVNCIHRvIHNlcmlhbAogIGNvbnZlcnRlcnMgYW5kIFVTQiBHUFMgZGV2aWNlcy4gIERldmljZXMgZnJvbSBBdGVuICh0aGUgVUMtMjMyKSBhbmQKICBJTy1EYXRhIHdvcmsgd2l0aCB0aGlzIGRyaXZlci4KCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZwogIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KICAKCktMNUtVU0IxMDUgY2hpcHNldCAvIFBhbG1Db25uZWN0IFVTQiBzaW5nbGUtcG9ydCBhZGFwdGVyCiAgCkN1cnJlbnQgc3RhdHVzOgogIFRoZSBkcml2ZXIgd2FzIHB1dCB0b2dldGhlciBieSBsb29raW5nIGF0IHRoZSB1c2IgYnVzIHRyYW5zYWN0aW9ucwogIGRvbmUgYnkgUGFsbSdzIGRyaXZlciB1bmRlciBXaW5kb3dzLCBzbyBhIGxvdCBvZiBmdW5jdGlvbmFsaXR5IGlzCiAgc3RpbGwgbWlzc2luZy4gIE5vdGFibHksIHNlcmlhbCBpb2N0bHMgYXJlIHNvbWV0aW1lcyBmYWtlZCBvciBub3QgeWV0CiAgaW1wbGVtZW50ZWQuICBTdXBwb3J0IGZvciBmaW5kaW5nIG91dCBhYm91dCBEU1IgYW5kIENUUyBsaW5lIHN0YXR1cyBpcwogIGhvd2V2ZXIgaW1wbGVtZW50ZWQgKHRob3VnaCBub3QgbmljZWx5KSwgc28geW91ciBmYXZvcml0ZSBhdXRvcGlsb3QoMSkKICBhbmQgcGlsb3QtbWFuYWdlciAtZGFlbW9uIGNhbGxzIHdpbGwgd29yay4gIEJhdWQgcmF0ZXMgdXAgdG8gMTE1MjAwCiAgYXJlIHN1cHBvcnRlZCwgYnV0IGhhbmRzaGFraW5nIChzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaXMgbm90LCB3aGljaCBpcwogIHdoeSBpdCBpcyB3aXNlIHRvIGN1dCBkb3duIG9uIHRoZSByYXRlIHVzZWQgaXMgd2lzZSBmb3IgbGFyZ2UKICB0cmFuc2ZlcnMgdW50aWwgdGhpcyBpcyBzZXR0bGVkLgogIApPcHRpb25zIHN1cHBvcnRlZDoKICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSB5b3UgY2FuIHBhc3MgdGhlIGZvbGxvd2luZwogIG9wdGlvbnMgdG8gaXQ6CiAgZGVidWcJCQktIGV4dHJhIHZlcmJvc2UgZGVidWdnaW5nIGluZm8KICAJCQkgIChkZWZhdWx0OiAwOyBub256ZXJvIGVuYWJsZXMpCiAgdXNlX2xvd2xhdGVuY3kJLSB1c2UgbG93X2xhdGVuY3kgZmxhZyB0byBzcGVlZCB1cCB0dHkgbGF5ZXIKCQkJICB3aGVuIHJlYWRpbmcgZnJvbSBmcm9tIHRoZSBkZXZpY2UuCgkJCSAgKGRlZmF1bHQ6IDA7IG5vbnplcm8gZW5hYmxlcykKCiAgU2VlIGh0dHA6Ly93d3cudXVoYXVzLmRlL2xpbnV4L3BhbG1jb25uZWN0Lmh0bWwgZm9yIHVwLXRvLWRhdGUKICBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlci4KCgpHZW5lcmljIFNlcmlhbCBkcml2ZXIKCiAgSWYgeW91ciBkZXZpY2UgaXMgbm90IG9uZSBvZiB0aGUgYWJvdmUgbGlzdGVkIGRldmljZXMsIGNvbXBhdGlibGUgd2l0aAogIHRoZSBhYm92ZSBtb2RlbHMsIHlvdSBjYW4gdHJ5IG91dCB0aGUgImdlbmVyaWMiIGludGVyZmFjZS4gVGhpcwogIGludGVyZmFjZSBkb2VzIG5vdCBwcm92aWRlIGFueSB0eXBlIG9mIGNvbnRyb2wgbWVzc2FnZXMgc2VudCB0byB0aGUKICBkZXZpY2UsIGFuZCBkb2VzIG5vdCBzdXBwb3J0IGFueSBraW5kIG9mIGRldmljZSBmbG93IGNvbnRyb2wuIEFsbCB0aGF0CiAgaXMgcmVxdWlyZWQgb2YgeW91ciBkZXZpY2UgaXMgdGhhdCBpdCBoYXMgYXQgbGVhc3Qgb25lIGJ1bGsgaW4gZW5kcG9pbnQsCiAgb3Igb25lIGJ1bGsgb3V0IGVuZHBvaW50LiAKICAKICBUbyBlbmFibGUgdGhlIGdlbmVyaWMgZHJpdmVyIHRvIHJlY29nbml6ZSB5b3VyIGRldmljZSwgYnVpbGQgdGhlIGRyaXZlcgogIGFzIGEgbW9kdWxlIGFuZCBsb2FkIGl0IGJ5IHRoZSBmb2xsb3dpbmcgaW52b2NhdGlvbjoKCWluc21vZCB1c2JzZXJpYWwgdmVuZG9yPTB4IyMjIyBwcm9kdWN0PTB4IyMjIwogIHdoZXJlIHRoZSAjIyMjIGlzIHJlcGxhY2VkIHdpdGggdGhlIGhleCByZXByZXNlbnRhdGlvbiBvZiB5b3VyIGRldmljZSdzCiAgdmVuZG9yIGlkIGFuZCBwcm9kdWN0IGlkLgoKICBUaGlzIGRyaXZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdXNlZCB0byBjb25uZWN0IHRvIHRoZSBOZXRDaGlwIFVTQgogIGRldmVsb3BtZW50IGJvYXJkLCBwcm92aWRpbmcgYSB3YXkgdG8gZGV2ZWxvcCBVU0IgZmlybXdhcmUgd2l0aG91dAogIGhhdmluZyB0byB3cml0ZSBhIGN1c3RvbSBkcml2ZXIuCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdyZWcKICBLcm9haC1IYXJ0bWFuIGF0IGdyZWdAa3JvYWguY29tCgoKQ09OVEFDVDoKCiAgSWYgYW55b25lIGhhcyBhbnkgcHJvYmxlbXMgdXNpbmcgdGhlc2UgZHJpdmVycywgd2l0aCBhbnkgb2YgdGhlIGFib3ZlCiAgc3BlY2lmaWVkIHByb2R1Y3RzLCBwbGVhc2UgY29udGFjdCB0aGUgc3BlY2lmaWMgZHJpdmVyJ3MgYXV0aG9yIGxpc3RlZAogIGFib3ZlLCBvciBqb2luIHRoZSBMaW51eC1VU0IgbWFpbGluZyBsaXN0IChpbmZvcm1hdGlvbiBvbiBqb2luaW5nIHRoZQogIG1haWxpbmcgbGlzdCwgYXMgd2VsbCBhcyBhIGxpbmsgdG8gaXRzIHNlYXJjaGFibGUgYXJjaGl2ZSBpcyBhdAogIGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy8gKQoKCkdyZWcgS3JvYWgtSGFydG1hbgpncmVnQGtyb2FoLmNvbQo=