SU5UUk9EVUNUSU9OCgogIFRoZSBVU0Igc2VyaWFsIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgYSBudW1iZXIgb2YgZGlmZmVyZW50IFVTQiB0bwogIHNlcmlhbCBjb252ZXJ0ZXIgcHJvZHVjdHMsIGFzIHdlbGwgYXMgc29tZSBkZXZpY2VzIHRoYXQgdXNlIGEgc2VyaWFsCiAgaW50ZXJmYWNlIGZyb20gdXNlcnNwYWNlIHRvIHRhbGsgdG8gdGhlIGRldmljZS4KCiAgU2VlIHRoZSBpbmRpdmlkdWFsIHByb2R1Y3Qgc2VjdGlvbiBiZWxvdyBmb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQKICB0aGUgZGlmZmVyZW50IGRldmljZXMuCgoKQ09ORklHVVJBVElPTgoKICBDdXJyZW50bHkgdGhlIGRyaXZlciBjYW4gaGFuZGxlIHVwIHRvIDI1NiBkaWZmZXJlbnQgc2VyaWFsIGludGVyZmFjZXMgYXQKICBvbmUgdGltZS4gCgogICAgVGhlIG1ham9yIG51bWJlciB0aGF0IHRoZSBkcml2ZXIgdXNlcyBpcyAxODggc28gdG8gdXNlIHRoZSBkcml2ZXIsCiAgICBjcmVhdGUgdGhlIGZvbGxvd2luZyBub2RlczoKCW1rbm9kIC9kZXYvdHR5VVNCMCBjIDE4OCAwCglta25vZCAvZGV2L3R0eVVTQjEgYyAxODggMQoJbWtub2QgL2Rldi90dHlVU0IyIGMgMTg4IDIKCW1rbm9kIC9kZXYvdHR5VVNCMyBjIDE4OCAzCgkJLgoJCS4KCQkuCglta25vZCAvZGV2L3R0eVVTQjI1NCBjIDE4OCAyNTQKCW1rbm9kIC9kZXYvdHR5VVNCMjU1IGMgMTg4IDI1NQoKICBXaGVuIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIGFuZCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIHRoZSBkcml2ZXIKICB3aWxsIHByaW50IHRvIHRoZSBzeXN0ZW0gbG9nLCB3aGljaCBub2RlKHMpIHRoZSBkZXZpY2UgaGFzIGJlZW4gYm91bmQKICB0by4KICAKClNQRUNJRklDIERFVklDRVMgU1VQUE9SVEVECgoKQ29ubmVjdFRlY2ggV2hpdGVIRUFUIDQgcG9ydCBjb252ZXJ0ZXIKCiAgQ29ubmVjdFRlY2ggaGFzIGJlZW4gdmVyeSBmb3J0aGNvbWluZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyCiAgZGV2aWNlLCBpbmNsdWRpbmcgcHJvdmlkaW5nIGEgdW5pdCB0byB0ZXN0IHdpdGguCgogIFRoZSBkcml2ZXIgaXMgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgYnkgQ29ubmVjdCBUZWNoIEluYy4KICBodHRwOi8vd3d3LmNvbm5lY3R0ZWNoLmNvbQoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdAogIFN0dWFydCBNYWNEb25hbGQgYXQgc3R1YXJ0bUBjb25uZWN0dGVjaC5jb20KCgpIYW5kU3ByaW5nIFZpc29yLCBQYWxtIFVTQiwgYW5kIENsaekgVVNCIGRyaXZlcgoKICBUaGlzIGRyaXZlciB3b3JrcyB3aXRoIGFsbCBIYW5kU3ByaW5nIFVTQiwgUGFsbSBVU0IsIGFuZCBTb255IENsaekgVVNCCiAgZGV2aWNlcy4KCiAgT25seSB3aGVuIHRoZSBkZXZpY2UgdHJpZXMgdG8gY29ubmVjdCB0byB0aGUgaG9zdCwgd2lsbCB0aGUgZGV2aWNlIHNob3cKICB1cCB0byB0aGUgaG9zdCBhcyBhIHZhbGlkIFVTQiBkZXZpY2UuIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgZGV2aWNlIGlzCiAgcHJvcGVybHkgZW51bWVyYXRlZCwgYXNzaWduZWQgYSBwb3J0LCBhbmQgdGhlbiBjb21tdW5pY2F0aW9uIF9zaG91bGRfIGJlCiAgcG9zc2libGUuIFRoZSBkcml2ZXIgY2xlYW5zIHVwIHByb3Blcmx5IHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkLCBvcgogIHRoZSBjb25uZWN0aW9uIGlzIGNhbmNlbGVkIG9uIHRoZSBkZXZpY2UuCgogIE5PVEU6CiAgICBUaGlzIG1lYW5zIHRoYXQgaW4gb3JkZXIgdG8gdGFsayB0byB0aGUgZGV2aWNlLCB0aGUgc3luYyBidXR0b24gbXVzdCBiZQogICAgcHJlc3NlZCBCRUZPUkUgdHJ5aW5nIHRvIGdldCBhbnkgcHJvZ3JhbSB0byBjb21tdW5pY2F0ZSB0byB0aGUgZGV2aWNlLgogICAgVGhpcyBnb2VzIGFnYWluc3QgdGhlIGN1cnJlbnQgZG9jdW1lbnRhdGlvbiBmb3IgcGlsb3QteGZlciBhbmQgb3RoZXIKICAgIHBhY2thZ2VzLCBidXQgaXMgdGhlIG9ubHkgd2F5IHRoYXQgaXQgd2lsbCB3b3JrIGR1ZSB0byB0aGUgaGFyZHdhcmUKICAgIGluIHRoZSBkZXZpY2UuCiAgCiAgV2hlbiB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCwgdHJ5IHRhbGtpbmcgdG8gaXQgb24gdGhlIHNlY29uZCBwb3J0CiAgKHRoaXMgaXMgdXN1YWxseSAvZGV2L3R0eVVTQjEgaWYgeW91IGRvIG5vdCBoYXZlIGFueSBvdGhlciB1c2Itc2VyaWFsCiAgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLikgVGhlIHN5c3RlbSBsb2cgc2hvdWxkIHRlbGwgeW91IHdoaWNoIHBvcnQgaXMKICB0aGUgcG9ydCB0byB1c2UgZm9yIHRoZSBIb3RTeW5jIHRyYW5zZmVyLiBUaGUgIkdlbmVyaWMiIHBvcnQgY2FuIGJlIHVzZWQKICBmb3Igb3RoZXIgZGV2aWNlIGNvbW11bmljYXRpb24sIHN1Y2ggYXMgYSBQUFAgbGluay4KCiAgRm9yIHNvbWUgU29ueSBDbGnpIGRldmljZXMsIC9kZXYvdHR5VVNCMCBtdXN0IGJlIHVzZWQgdG8gdGFsayB0byB0aGUKICBkZXZpY2UuICBUaGlzIGlzIHRydWUgZm9yIGFsbCBPUyB2ZXJzaW9uIDMuNSBkZXZpY2VzLCBhbmQgbW9zdCBkZXZpY2VzCiAgdGhhdCBoYXZlIGhhZCBhIGZsYXNoIHVwZ3JhZGUgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBPUy4gIFNlZSB0aGUKICBrZXJuZWwgc3lzdGVtIGxvZyBmb3IgaW5mb3JtYXRpb24gb24gd2hpY2ggaXMgdGhlIGNvcnJlY3QgcG9ydCB0byB1c2UuCgogIElmIGFmdGVyIHByZXNzaW5nIHRoZSBzeW5jIGJ1dHRvbiwgbm90aGluZyBzaG93cyB1cCBpbiB0aGUgc3lzdGVtIGxvZywKICB0cnkgcmVzZXR0aW5nIHRoZSBkZXZpY2UsIGZpcnN0IGEgaG90IHJlc2V0LCBhbmQgdGhlbiBhIGNvbGQgcmVzZXQgaWYKICBuZWNlc3NhcnkuICBTb21lIGRldmljZXMgbmVlZCB0aGlzIGJlZm9yZSB0aGV5IGNhbiB0YWxrIHRvIHRoZSBVU0IgcG9ydAogIHByb3Blcmx5LgogIAogIERldmljZXMgdGhhdCBhcmUgbm90IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBjYW4gYmUgc3BlY2lmaWVkIHdpdGggbW9kdWxlCiAgcGFyYW1ldGVycy4gIGUuZy4gbW9kcHJvYmUgdmlzb3IgdmVuZG9yPTB4NTRjIHByb2R1Y3Q9MHg2NgogIAogIFRoZXJlIGlzIGEgd2VicGFnZSBhbmQgbWFpbGluZyBsaXN0cyBmb3IgdGhpcyBwb3J0aW9uIG9mIHRoZSBkcml2ZXIgYXQ6CiAgaHR0cDovL3VzYnZpc29yLnNvdXJjZWZvcmdlLm5ldC8KCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZwogIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KCgpQb2NrZXRQQyBQREEgRHJpdmVyCgogIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gQ29tcGFxIGlQQVEsIEhQIEpvcm5hZGEsIENhc2lvIEVNNTAwCiAgYW5kIG90aGVyIFBEQXMgcnVubmluZyBXaW5kb3dzIENFIDMuMCBvciBQb2NrZXRQQyAyMDAyIHVzaW5nIGEgVVNCCiAgY2FibGUvY3JhZGxlLgogIE1vc3QgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgQWN0aXZlU3luYyBhcmUgc3VwcG9ydGVkIG91dCBvZiB0aGUgYm94LgogIEZvciBvdGhlcnMsIHBsZWFzZSB1c2UgbW9kdWxlIHBhcmFtZXRlcnMgdG8gc3BlY2lmeSB0aGUgcHJvZHVjdCBhbmQgdmVuZG9yCiAgaWQuIGUuZy4gbW9kcHJvYmUgaXBhcSB2ZW5kb3I9MHgzZjAgcHJvZHVjdD0weDExMjUKCiAgVGhlIGRyaXZlciBwcmVzZW50cyBhIHNlcmlhbCBpbnRlcmZhY2UgKHVzdWFsbHkgb24gL2Rldi90dHlVU0IwKSBvdmVyCiAgd2hpY2ggb25lIG1heSBydW4gcHBwIGFuZCBlc3RhYmxpc2ggYSBUQ1AvSVAgbGluayB0byB0aGUgUERBLiBPbmNlIHRoaXMKICBpcyBkb25lLCB5b3UgY2FuIHRyYW5zZmVyIGZpbGVzLCBiYWNrdXAsIGRvd25sb2FkIGVtYWlsIGV0Yy4gVGhlIG1vc3QKICBzaWduaWZpY2FudCBhZHZhbnRhZ2Ugb2YgdXNpbmcgVVNCIGlzIHNwZWVkIC0gSSBjYW4gZ2V0IDczIHRvIDExMwogIGtieXRlcy9zZWMgZm9yIGRvd25sb2FkL3VwbG9hZCB0byBteSBpUEFRLgoKICBUaGlzIGRyaXZlciBpcyBvbmx5IG9uZSBvZiBhIHNldCBvZiBjb21wb25lbnRzIHJlcXVpcmVkIHRvIHV0aWxpemUKICB0aGUgVVNCIGNvbm5lY3Rpb24uIFBsZWFzZSB2aXNpdCBodHRwOi8vc3luY2Uuc291cmNlZm9yZ2UubmV0IHdoaWNoCiAgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBwYWNrYWdlcyBhbmQgYSBzaW1wbGUgc3RlcC1ieS1zdGVwIGhvd3RvLgoKICBPbmNlIGNvbm5lY3RlZCwgeW91IGNhbiB1c2UgV2luIENFIHByb2dyYW1zIGxpa2UgZnRwVmlldywgUG9ja2V0IE91dGxvb2sKICBmcm9tIHRoZSBQREEgYW5kIHhjZXJkaXNwLCBzeW5jZSB1dGlsaXRpZXMgZnJvbSB0aGUgTGludXggc2lkZS4KCiAgVG8gdXNlIFBvY2tldCBJRSwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gYXQKICBodHRwOi8vd3d3LnRla2d1cnUuY28udWsvRU01MDAvdXNidG9uZXQuaHRtIHRvIGFjaGlldmUgdGhlIHNhbWUgdGhpbmcKICBvbiBXaW45OC4gT21pdCB0aGUgcHJveHkgc2VydmVyIHBhcnQ7IExpbnV4IGlzIHF1aXRlIGNhcGFibGUgb2YgZm9yd2FyZGluZwogIHBhY2tldHMgdW5saWtlIFdpbjk4LiBBbm90aGVyIG1vZGlmaWNhdGlvbiBpcyByZXF1aXJlZCBhdCBsZWFzdCBmb3IgdGhlCiAgaVBBUSAtIGRpc2FibGUgYXV0b3N5bmMgYnkgZ29pbmcgdG8gdGhlIFN0YXJ0L1NldHRpbmdzL0Nvbm5lY3Rpb25zIG1lbnUKICBhbmQgdW5jaGVja2luZyB0aGUgIkF1dG9tYXRpY2FsbHkgc3luY2hyb25pemUgLi4uIiBib3guIEdvIHRvCiAgU3RhcnQvUHJvZ3JhbXMvQ29ubmVjdGlvbnMsIGNvbm5lY3QgdGhlIGNhYmxlIGFuZCBzZWxlY3QgInVzYmRpYWwiIChvcgogIHdoYXRldmVyIHlvdSBuYW1lZCB5b3VyIG5ldyBVU0IgY29ubmVjdGlvbikuIFlvdSBzaG91bGQgZmluYWxseSB3aW5kCiAgdXAgd2l0aCBhICJDb25uZWN0ZWQgdG8gdXNiZGlhbCIgd2luZG93IHdpdGggc3RhdHVzIHNob3duIGFzIGNvbm5lY3RlZC4KICBOb3cgc3RhcnQgdXAgUElFIGFuZCBicm93c2UgYXdheS4KCiAgSWYgaXQgZG9lc24ndCB3b3JrIGZvciBzb21lIHJlYXNvbiwgbG9hZCBib3RoIHRoZSB1c2JzZXJpYWwgYW5kIGlwYXEgbW9kdWxlCiAgd2l0aCB0aGUgbW9kdWxlIHBhcmFtZXRlciAiZGVidWciIHNldCB0byAxIGFuZCBleGFtaW5lIHRoZSBzeXN0ZW0gbG9nLgogIFlvdSBjYW4gYWxzbyB0cnkgc29mdC1yZXNldHRpbmcgeW91ciBQREEgYmVmb3JlIGF0dGVtcHRpbmcgYSBjb25uZWN0aW9uLgoKICBPdGhlciBmdW5jdGlvbmFsaXR5IG1heSBiZSBwb3NzaWJsZSBkZXBlbmRpbmcgb24geW91ciBQREEuIEFjY29yZGluZyB0bwogIFdlcyBDaWxsZGhhaXJlIDxiaWxseWJvYmpvZWhlbnJ5Ym9iQGhvdG1haWwuY29tPiwgd2l0aCB0aGUgVG9zaGliYSBFNTcwLAogIC4uLmlmIHlvdSBib290IGludG8gdGhlIGJvb3Rsb2FkZXIgKGhvbGQgZG93biB0aGUgcG93ZXIgd2hlbiBoaXR0aW5nIHRoZQogIHJlc2V0IGJ1dHRvbiwgY29udGludWluZyB0byBob2xkIG9udG8gdGhlIHBvd2VyIHVudGlsIHRoZSBib290bG9hZGVyIHNjcmVlbgogIGlzIGRpc3BsYXllZCksIHRoZW4gcHV0IGl0IGluIHRoZSBjcmFkbGUgd2l0aCB0aGUgaXBhcSBkcml2ZXIgbG9hZGVkLCBvcGVuCiAgYSB0ZXJtaW5hbCBvbiAvZGV2L3R0eVVTQjAsIGl0IGdpdmVzIHlvdSBhICJVU0IgUmVmbGFzaCIgdGVybWluYWwsIHdoaWNoIGNhbgogIGJlIHVzZWQgdG8gZmxhc2ggdGhlIFJPTSwgYXMgd2VsbCBhcyB0aGUgbWljcm9QIGNvZGUuLiAgc28gbXVjaCBmb3IgbmVlZGluZwogIFRvc2hpYmEncyAkMzUwIHNlcmlhbCBjYWJsZSBmb3IgZmxhc2hpbmchISA6RAogIE5PVEU6IFRoaXMgaGFzIE5PVCBiZWVuIHRlc3RlZC4gVXNlIGF0IHlvdXIgb3duIHJpc2suCiAKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoZSBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdhbmVzaAogIFZhcmFkYXJhamFuIDxnYW5lc2hAdmVyaXRhcy5jb20+CgoKS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIKCiAgU2luZ2xlIHBvcnQgREItOSBzZXJpYWwgYWRhcHRlciwgcHVzaGVkIGFzIGEgUERBIGFkYXB0ZXIgZm9yIGlNYWNzIChtb3N0bHkKICBzb2xkIGluIE1hY2ludG9zaCBjYXRhbG9ncywgY29tZXMgaW4gYSB0cmFuc2x1Y2VudCB3aGl0ZS9ncmVlbiBkb25nbGUpLgogIEZhaXJseSBzaW1wbGUgZGV2aWNlLiBGaXJtd2FyZSBpcyBob21lYnJldy4KICBUaGlzIGRyaXZlciBhbHNvIHdvcmtzIGZvciB0aGUgWGlyY29tL0VudHJncmEgc2luZ2xlIHBvcnQgc2VyaWFsIGFkYXB0ZXIuCgogIEN1cnJlbnQgc3RhdHVzOgogICBUaGluZ3MgdGhhdCB3b3JrOgogICAgIGJhc2ljIGlucHV0L291dHB1dCAodGVzdGVkIHdpdGggJ2N1JykKICAgICBibG9ja2luZyB3cml0ZSB3aGVuIHNlcmlhbCBsaW5lIGNhbid0IGtlZXAgdXAKICAgICBjaGFuZ2luZyBiYXVkIHJhdGVzICh1cCB0byAxMTUyMDApCiAgICAgZ2V0dGluZy9zZXR0aW5nIG1vZGVtIGNvbnRyb2wgcGlucyAoVElPQ017R0VULFNFVCxCSVMsQklDfSkKICAgICBzZW5kaW5nIGJyZWFrIChhbHRob3VnaCBkdXJhdGlvbiBsb29rcyBzdXNwZWN0KQogICBUaGluZ3MgdGhhdCBkb24ndDoKICAgICBkZXZpY2Ugc3RyaW5ncyAoYXMgbG9nZ2VkIGJ5IGtlcm5lbCkgaGF2ZSB0cmFpbGluZyBiaW5hcnkgZ2FyYmFnZQogICAgIGRldmljZSBJRCBpc24ndCByaWdodCwgbWlnaHQgY29sbGlkZSB3aXRoIG90aGVyIEtleXNwYW4gcHJvZHVjdHMKICAgICBjaGFuZ2luZyBiYXVkIHJhdGVzIG91Z2h0IHRvIGZsdXNoIHR4L3J4IHRvIGF2b2lkIG1hbmdsZWQgaGFsZiBjaGFyYWN0ZXJzCiAgIEJpZyBUaGluZ3Mgb24gdGhlIHRvZG8gbGlzdDoKICAgICBwYXJpdHksIDcgdnMgOCBiaXRzIHBlciBjaGFyLCAxIG9yIDIgc3RvcCBiaXRzCiAgICAgSFcgZmxvdyBjb250cm9sCiAgICAgbm90IGFsbCBvZiB0aGUgc3RhbmRhcmQgVVNCIGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkOiBHZXRfU3RhdHVzLCBTZXRfRmVhdHVyZQogICAgIE9fTk9OQkxPQ0ssIHNlbGVjdCgpCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEJyaWFuCiAgV2FybmVyIGF0IHdhcm5lckBsb3RoYXIuY29tIAoKCktleXNwYW4gVVNBLXNlcmllcyBTZXJpYWwgQWRhcHRlcnMKCiAgU2luZ2xlLCBEdWFsIGFuZCBRdWFkIHBvcnQgYWRhcHRlcnMgLSBkcml2ZXIgdXNlcyBLZXlzcGFuIHN1cHBsaWVkIAogIGZpcm13YXJlIGFuZCBpcyBiZWluZyBkZXZlbG9wZWQgd2l0aCB0aGVpciBzdXBwb3J0LgogIAogIEN1cnJlbnQgc3RhdHVzOgogICAgVGhlIFVTQS0xOFgsIFVTQS0yOFgsIFVTQS0xOSwgVVNBLTE5VyBhbmQgVVNBLTQ5VyBhcmUgc3VwcG9ydGVkIGFuZAogICAgaGF2ZSBiZWVuIHByZXR0eSB0aHJvdWdobHkgdGVzdGVkIGF0IHZhcmlvdXMgYmF1ZCByYXRlcyB3aXRoIDgtTi0xCiAgICBjaGFyYWN0ZXIgc2V0dGluZ3MuICBPdGhlciBjaGFyYWN0ZXIgbGVuZ3RocyBhbmQgcGFyaXR5IHNldHVwcyBhcmUKICAgIHByZXNlbnRseSB1bnRlc3RlZC4KCiAgICBUaGUgVVNBLTI4IGlzbid0IHlldCBzdXBwb3J0ZWQgdGhvdWdoIGRvaW5nIHNvIHNob3VsZCBiZSBwcmV0dHkKICAgIHN0cmFpZ2h0Zm9yd2FyZC4gIENvbnRhY3QgdGhlIG1haW50YWluZXIgaWYgeW91IHJlcXVpcmUgdGhpcwogICAgZnVuY3Rpb25hbGl0eS4KICAKICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBhdDoKICAgICAgICBodHRwOi8vbWlzYy5udS9odWdoL2tleXNwYW4uaHRtbAogICAKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBIdWdoCiAgQmxlbWluZ3MgYXQgaHVnaEBtaXNjLm51CgoKRlRESSBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyCgogIFRoaXMgaXMgYSBzaW5nbGUgcG9ydCBEQi0yNSBzZXJpYWwgYWRhcHRlci4gTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzCiAgZGV2aWNlIGFuZCB0aGUgTGludXggZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKCWh0dHA6Ly9yZWFsaXR5LnNnaS5jb20vYnJ5ZGVyX3dlbGxpbmd0b24vZnRkaV9zaW8vCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEJpbGwgUnlkZXIKICBhdCBicnlkZXJAc2dpLmNvbQoKClp5WEVMIG9tbmkubmV0IGxjZCBwbHVzIElTRE4gVEEKCiAgVGhpcyBpcyBhbiBJU0ROIFRBLiBQbGVhc2UgcmVwb3J0IGJvdGggc3VjY2Vzc2VzIGFuZCB0cm91YmxlcyB0bwogIGF6dW1tb0B0b3dlcnRlY2guaXQKCgpDeXByZXNzIE04IENZNDYwMSBGYW1pbHkgU2VyaWFsIERyaXZlcgoKICBUaGlzIGRyaXZlciB3YXMgaW4gbW9zdCBwYXJ0IGRldmVsb3BlZCBieSBOZWlsICJrb3lhbWEiIFdoZWxjaGVsLiAgSXQKICBoYXMgYmVlbiBpbXByb3ZlZCBzaW5jZSB0aGF0IHByZXZpb3VzIGZvcm0gdG8gc3VwcG9ydCBkeW5hbWljIHNlcmlhbAogIGxpbmUgc2V0dGluZ3MgYW5kIGltcHJvdmVkIGxpbmUgaGFuZGxpbmcuICBUaGUgZHJpdmVyIGlzIGZvciB0aGUgbW9zdAogIHBhcnQgc3RhYmxlIGFuZCBoYXMgYmVlbiB0ZXN0ZWQgb24gYW4gc21wIG1hY2hpbmUuIChkdWFsIHAyKQoKICAgIENoaXBzZXRzIHN1cHBvcnRlZCB1bmRlciBDWTQ2MDEgZmFtaWx5OgoJCgkJQ1k3QzYzNzIzLCBDWTdDNjM3NDIsIENZN0M2Mzc0MywgQ1k3QzY0MDEzCgogICAgRGV2aWNlcyBzdXBwb3J0ZWQ6CgoJCS1EZUxvcm1lJ3MgVVNCIEVhcnRobWF0ZSAoU2lSRiBTdGFyIElJIGxwIGFyY2gpCgkJLUN5cHJlc3MgSElELT5DT00gUlMyMzIgYWRhcHRlcgoJCgkJTm90ZTogQ3lwcmVzcyBTZW1pY29uZHVjdG9yIGNsYWltcyBubyBhZmZpbGlhdGlvbiB3aXRoIHRoZQoJCQloaWQtPmNvbSBkZXZpY2UuCgoJTW9zdCBkZXZpY2VzIHVzaW5nIGNoaXBzZXRzIHVuZGVyIHRoZSBDWTQ2MDEgZmFtaWx5IHNob3VsZAogICAgIHdvcmsgd2l0aCB0aGUgZHJpdmVyLiAgQXMgbG9uZyBhcyB0aGV5IHN0YXkgdHJ1ZSB0byB0aGUgQ1k0NjAxCiAgICAgdXNic2VyaWFsIHNwZWNpZmljYXRpb24uCgogICAgVGVjaG5pY2FsIG5vdGVzOgoKICAgICAgICBUaGUgRWFydGhtYXRlIHN0YXJ0cyBvdXQgYXQgNDgwMCA4TjEgYnkgZGVmYXVsdC4uLiB0aGUgZHJpdmVyIHdpbGwKCXVwb24gc3RhcnQgaW5pdCB0byB0aGlzIHNldHRpbmcuICB1c2JzZXJpYWwgY29yZSBwcm92aWRlcyB0aGUgcmVzdAoJb2YgdGhlIHRlcm1pb3Mgc2V0dGluZ3MsIGFsb25nIHdpdGggc29tZSBjdXN0b20gdGVybWlvcyBzbyB0aGF0IHRoZQoJb3V0cHV0IGlzIGluIHByb3BlciBmb3JtYXQgYW5kIHBhcnNhYmxlLgoJCglUaGUgZGV2aWNlIGNhbiBiZSBwdXQgaW50byBzaXJmIG1vZGUgYnkgaXNzdWluZyBOTUVBIGNvbW1hbmQ6CgkJJFBTUkYxMDAsPHByb3RvY29sPiw8YmF1ZD4sPGRhdGFiaXRzPiw8c3RvcGJpdHM+LDxwYXJpdHk+KkNIRUNLU1VNCgkJJFBTUkYxMDAsMCw5NjAwLDgsMSwwKjBDCgoJCUl0IHNob3VsZCB0aGVuIGJlIHN1ZmZpY2llbnQgdG8gY2hhbmdlIHRoZSBwb3J0IHRlcm1pb3MgdG8gbWF0Y2ggdGhpcwoJCXRvIGJlZ2luIGNvbW11bmljYXRpbmcuCgoJQXMgZmFyIGFzIEkgY2FuIHRlbGwgaXQgc3VwcG9ydHMgcHJldHR5IG11Y2ggZXZlcnkgc2lyZiBjb21tYW5kIGFzCglkb2N1bWVudGVkIG9ubGluZSBhdmFpbGFibGUgd2l0aCBmaXJtd2FyZSAyLjMxLCB3aXRoIHNvbWUgdW5rbm93bgoJbWVzc2FnZSBpZHMuCgoJVGhlIGhpZC0+Y29tIGFkYXB0ZXIgY2FuIHJ1biBhdCBhIG1heGltdW0gYmF1ZCBvZiAxMTUyMDBicHMuICBQbGVhc2Ugbm90ZQoJdGhhdCB0aGUgZGV2aWNlIGhhcyB0cm91YmxlIG9yIGlzIGluY2FwYWJsZSBvZiByYWlzaW5nIGxpbmUgdm9sdGFnZSBwcm9wZXJseS4KCUl0IHdpbGwgYmUgZmluZSB3aXRoIG51bGwgbW9kZW0gbGlua3MsIGFzIGxvbmcgYXMgeW91IGRvIG5vdCB0cnkgdG8gbGluayB0d28KCXRvZ2V0aGVyIHdpdGhvdXQgaGFja2luZyB0aGUgYWRhcHRlciB0byBzZXQgdGhlIGxpbmUgaGlnaC4KCglUaGUgZHJpdmVyIGlzIHNtcCBzYWZlLiAgUGVyZm9ybWFuY2Ugd2l0aCB0aGUgZHJpdmVyIGlzIHJhdGhlciBsb3cgd2hlbiB1c2luZwoJaXQgZm9yIHRyYW5zZmVyaW5nIGZpbGVzLiAgVGhpcyBpcyBiZWluZyB3b3JrZWQgb24sIGJ1dCBJIHdvdWxkIGJlIHdpbGxpbmcgdG8KCWFjY2VwdCBwYXRjaGVzLiAgQW4gdXJiIHF1ZXVlIG9yIHBhY2tldCBidWZmZXIgd291bGQgbGlrZWx5IGZpdCB0aGUgYmlsbCBoZXJlLgoKCUlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIHByb2JsZW1zLCBwYXRjaGVzLCBmZWF0dXJlIHJlcXVlc3RzLCBldGMuIHlvdSBjYW4KCWNvbnRhY3QgbWUgaGVyZSB2aWEgZW1haWw6CgkJCQkJZGlnbm9tZUBnbWFpbC5jb20KCQkoeW91ciBwcm9ibGVtcy9wYXRjaGVzIGNhbiBhbHRlcm5hdGVseSBiZSBzdWJtaXR0ZWQgdG8gdXNiLWRldmVsKQoKCkRpZ2kgQWNjZWxlUG9ydCBEcml2ZXIKCiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIERpZ2kgQWNjZWxlUG9ydCBVU0IgMiBhbmQgNCBkZXZpY2VzLCAyIHBvcnQKICAocGx1cyBhIHBhcmFsbGVsIHBvcnQpIGFuZCA0IHBvcnQgVVNCIHNlcmlhbCBjb252ZXJ0ZXJzLiAgVGhlIGRyaXZlcgogIGRvZXMgTk9UIHlldCBzdXBwb3J0IHRoZSBEaWdpIEFjY2VsZVBvcnQgVVNCIDguCgogIFRoaXMgZHJpdmVyIHdvcmtzIHVuZGVyIFNNUCB3aXRoIHRoZSB1c2ItdWhjaSBkcml2ZXIuICBJdCBkb2VzIG5vdAogIHdvcmsgdW5kZXIgU01QIHdpdGggdGhlIHVoY2kgZHJpdmVyLgoKICBUaGUgZHJpdmVyIGlzIGdlbmVyYWxseSB3b3JraW5nLCB0aG91Z2ggd2Ugc3RpbGwgaGF2ZSBhIGZldyBtb3JlIGlvY3RscwogIHRvIGltcGxlbWVudCBhbmQgZmluYWwgdGVzdGluZyBhbmQgZGVidWdnaW5nIHRvIGRvLiAgVGhlIHBhcmFsbGVsIHBvcnQKICBvbiB0aGUgVVNCIDIgaXMgc3VwcG9ydGVkIGFzIGEgc2VyaWFsIHRvIHBhcmFsbGVsIGNvbnZlcnRlcjsgaW4gb3RoZXIKICB3b3JkcywgaXQgYXBwZWFycyBhcyBhbm90aGVyIFVTQiBzZXJpYWwgcG9ydCBvbiBMaW51eCwgZXZlbiB0aG91Z2gKICBwaHlzaWNhbGx5IGl0IGlzIHJlYWxseSBhIHBhcmFsbGVsIHBvcnQuICBUaGUgRGlnaSBBY2NlbGVwb3J0IFVTQiA4CiAgaXMgbm90IHlldCBzdXBwb3J0ZWQuCgogIFBsZWFzZSBjb250YWN0IFBldGVyIEJlcmdlciAocGJlcmdlckBicmltc29uLmNvbSkgb3IgQWwgQm9yY2hlcnMKICAoYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKSBmb3IgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcwogIGRyaXZlci4KCgpCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIEY1VTEwMwoKICBTaW5nbGUgcG9ydCBEQi05L1BTLTIgc2VyaWFsIGFkYXB0ZXIgZnJvbSBCZWxraW4gd2l0aCBmaXJtd2FyZSBieSBlVEVLIExhYnMuCiAgVGhlIFBlcmFjb20gc2luZ2xlIHBvcnQgc2VyaWFsIGFkYXB0ZXIgYWxzbyB3b3JrcyB3aXRoIHRoaXMgZHJpdmVyLCBhcwogIHdlbGwgYXMgdGhlIEdvSHVicyBhZGFwdGVyLgoKICBDdXJyZW50IHN0YXR1czoKICAgIFRoZSBmb2xsb3dpbmcgaGF2ZSBiZWVuIHRlc3RlZCBhbmQgd29yazoKICAgICAgQmF1ZCByYXRlICAgIDMwMC0yMzA0MDAgICAgICAgICAgICAgICAKICAgICAgRGF0YSBiaXRzICAgIDUtOAogICAgICBTdG9wIGJpdHMgICAgMS0yCiAgICAgIFBhcml0eSAgICAgICBOLEUsTyxNLFMKICAgICAgSGFuZHNoYWtlICAgIE5vbmUsIFNvZnR3YXJlIChYT04vWE9GRiksIEhhcmR3YXJlIChDVFNSVFMsQ1RTRFRSKSoKICAgICAgQnJlYWsgICAgICAgIFNldCBhbmQgY2xlYXIKICAgICAgTGluZSBjb250cmwgIElucHV0L091dHB1dCBxdWVyeSBhbmQgY29udHJvbCAqKgoKICAgICAgKiAgSGFyZHdhcmUgaW5wdXQgZmxvdyBjb250cm9sIGlzIG9ubHkgZW5hYmxlZCBmb3IgZmlybXdhcmUKICAgICAgICAgbGV2ZWxzIGFib3ZlIDIuMDYuICBSZWFkIHNvdXJjZSBjb2RlIGNvbW1lbnRzIGRlc2NyaWJpbmcgQmVsa2luCiAgICAgICAgIGZpcm13YXJlIGVycmF0YS4gIEhhcmR3YXJlIG91dHB1dCBmbG93IGNvbnRyb2wgaXMgd29ya2luZyBmb3IgYWxsCiAgICAgICAgIGZpcm13YXJlIHZlcnNpb25zLgogICAgICAqKiBRdWVyaWVzIG9mIGlucHV0cyAoQ1RTLERTUixDRCxSSSkgc2hvdyB0aGUgbGFzdAogICAgICAgICByZXBvcnRlZCBzdGF0ZS4gIFF1ZXJpZXMgb2Ygb3V0cHV0cyAoRFRSLFJUUykgc2hvdyB0aGUgbGFzdAogICAgICAgICByZXF1ZXN0ZWQgc3RhdGUgYW5kIG1heSBub3QgcmVmbGVjdCBjdXJyZW50IHN0YXRlIGFzIHNldCBieQogICAgICAgICBhdXRvbWF0aWMgaGFyZHdhcmUgZmxvdyBjb250cm9sLgoKICBUTyBETyBMaXN0OgogICAgLS0gQWRkIHRydWUgbW9kZW0gY29udG9sIGxpbmUgcXVlcnkgY2FwYWJpbGl0eS4gIEN1cnJlbnRseSB0cmFja3MgdGhlCiAgICAgICBzdGF0ZXMgcmVwb3J0ZWQgYnkgdGhlIGludGVycnVwdCBhbmQgdGhlIHN0YXRlcyByZXF1ZXN0ZWQuCiAgICAtLSBBZGQgZXJyb3IgcmVwb3J0aW5nIGJhY2sgdG8gYXBwbGljYXRpb24gZm9yIFVBUlQgZXJyb3IgY29uZGl0aW9ucy4KICAgIC0tIEFkZCBzdXBwb3J0IGZvciBmbHVzaCBpb2N0bHMuCiAgICAtLSBBZGQgZXZlcnl0aGluZyBlbHNlIHRoYXQgaXMgbWlzc2luZyA6KQoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBXaWxsaWFtCiAgR3JlYXRob3VzZSBhdCB3Z3JlYXRob3VzZUBzbXZhLmNvbQoKCkVtcGVnIGVtcGVnLWNhciBNYXJrIEkvSUkgRHJpdmVyCgogIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciB0byBwcm92aWRlIGNvbm5lY3Rpdml0eSBzdXBwb3J0IGZvciB0aGUKICBjbGllbnQgc3luY2hyb25pemF0aW9uIHRvb2xzIGZvciBhbiBFbXBlZyBlbXBlZy1jYXIgbXAzIHBsYXllci4KCiAgVGlwczoKICAgICogRG9uJ3QgZm9yZ2V0IHRvIGNyZWF0ZSB0aGUgZGV2aWNlIG5vZGVzIGZvciB0dHlVU0J7MCwxLDIsLi4ufQogICAgKiBtb2Rwcm9iZSBlbXBlZyAobW9kcHJvYmUgaXMgeW91ciBmcmllbmQpCiAgICAqIGVtcHRvb2wgLS11c2IgL2Rldi90dHlVU0IwIChvciB3aGF0ZXZlciB5b3UgbmFtZWQgeW91ciBkZXZpY2Ugbm9kZSkKCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR2FyeQogIEJydWJha2VyIGF0IHhhdnllckBpeC5uZXRjb20uY29tCgoKTUNUIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQWRhcHRlciBVMjMyCgogIFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgTUNUIFVTQi1SUzIzMiBDb252ZXJ0ZXIgKDI1IHBpbiwgTW9kZWwgTm8uCiAgVTIzMi1QMjUpIGZyb20gTWFnaWMgQ29udHJvbCBUZWNobm9sb2d5IENvcnAuICh0aGVyZSBpcyBhbHNvIGEgOSBwaW4KICBNb2RlbCBOby4gVTIzMi1QOSkuIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkZXZpY2UgY2FuIGJlIGZvdW5kIGF0CiAgdGhlIG1hbnVmYWN0dXJlJ3Mgd2ViLXNpdGU6IGh0dHA6Ly93d3cubWN0LmNvbS50dy4KCiAgVGhlIGRyaXZlciBpcyBnZW5lcmFsbHkgd29ya2luZywgdGhvdWdoIGl0IHN0aWxsIG5lZWRzIHNvbWUgbW9yZSB0ZXN0aW5nLgogIEl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBGNVUxMDMgZHJpdmVyIGFuZCBpdHMKICBUT0RPIGxpc3QgaXMgdmFsaWQgZm9yIHRoaXMgZHJpdmVyIGFzIHdlbGwuCgogIFRoaXMgZHJpdmVyIGhhcyBhbHNvIGJlZW4gZm91bmQgdG8gd29yayBmb3Igb3RoZXIgcHJvZHVjdHMsIHdoaWNoIGhhdmUKICB0aGUgc2FtZSBWZW5kb3IgSUQgYnV0IGRpZmZlcmVudCBQcm9kdWN0IElEcy4gU2l0ZWNvbSdzIFUyMzItUDI1IHNlcmlhbAogIGNvbnZlcnRlciB1c2VzIFByb2R1Y3QgSUQgMHgyMzAgYW5kIFZlbmRvciBJRCAweDcxMSBhbmQgd29ya3Mgd2l0aCB0aGlzCiAgZHJpdmVyLiBBbHNvLCBELUxpbmsncyBEVS1IM1NQIFVTQiBCQVkgYWxzbyB3b3JrcyB3aXRoIHRoaXMgZHJpdmVyLgoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBXb2xmZ2FuZwogIEdyYW5kZWdnZXIgYXQgd29sZmdhbmdAY2VzLmNoCgoKSW5zaWRlIE91dCBOZXR3b3JrcyBFZGdlcG9ydCBEcml2ZXIKCiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYWxsIGRldmljZXMgbWFkZSBieSBJbnNpZGUgT3V0IE5ldHdvcmtzLCBzcGVjaWZpY2FsbHkKICB0aGUgZm9sbG93aW5nIG1vZGVsczoKICAgICAgIEVkZ2Vwb3J0LzQKICAgICAgIFJhcGlkcG9ydC80CiAgICAgICBFZGdlcG9ydC80dAogICAgICAgRWRnZXBvcnQvMgogICAgICAgRWRnZXBvcnQvNGkKICAgICAgIEVkZ2Vwb3J0LzJpCiAgICAgICBFZGdlcG9ydC80MjEKICAgICAgIEVkZ2Vwb3J0LzIxCiAgICAgICBFZGdlcG9ydC84CiAgICAgICBFZGdlcG9ydC84IER1YWwKICAgICAgIEVkZ2Vwb3J0LzJEOAogICAgICAgRWRnZXBvcnQvNEQ4CiAgICAgICBFZGdlcG9ydC84aQogICAgICAgRWRnZXBvcnQvMiBESU4KICAgICAgIEVkZ2Vwb3J0LzQgRElOCiAgICAgICBFZGdlcG9ydC8xNiBEdWFsCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdyZWcKICBLcm9haC1IYXJ0bWFuIGF0IGdyZWdAa3JvYWguY29tCgoKUkVJTkVSIFNDVCBjeWJlckphY2sgcGlucGFkL2UtY29tIFVTQiBjaGlwY2FyZCByZWFkZXIKICAgCiAgSW50ZXJmYWNlIHRvIElTTyA3ODE2IGNvbXBhdGlibGUgY29udGFjdGJhc2VkIGNoaXBjYXJkcywgZS5nLiBHU00gU0lNcy4KICAKICBDdXJyZW50IHN0YXR1czoKICAgIFRoaXMgaXMgdGhlIGtlcm5lbCBwYXJ0IG9mIHRoZSBkcml2ZXIgZm9yIHRoaXMgVVNCIGNhcmQgcmVhZGVyLgogICAgVGhlcmUgaXMgYWxzbyBhIHVzZXIgcGFydCBmb3IgYSBDVC1BUEkgZHJpdmVyIGF2YWlsYWJsZS4gQSBzaXRlCiAgICBmb3IgZG93bmxvYWRpbmcgaXMgVEJBLiBGb3Igbm93LCB5b3UgY2FuIHJlcXVlc3QgaXQgZnJvbSB0aGUKICAgIG1haW50YWluZXIgKGxpbnV4LXVzYkBzaWkubGkpLgoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdAogIGxpbnV4LXVzYkBzaWkubGkKCgpQcm9saWZpYyBQTDIzMDMgRHJpdmVyCgogIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGFueSBkZXZpY2UgdGhhdCBoYXMgdGhlIFBMMjMwMyBjaGlwIGZyb20gUHJvbGlmaWMKICBpbiBpdC4gIFRoaXMgaW5jbHVkZXMgYSBudW1iZXIgb2Ygc2luZ2xlIHBvcnQgVVNCIHRvIHNlcmlhbAogIGNvbnZlcnRlcnMgYW5kIFVTQiBHUFMgZGV2aWNlcy4gIERldmljZXMgZnJvbSBBdGVuICh0aGUgVUMtMjMyKSBhbmQKICBJTy1EYXRhIHdvcmsgd2l0aCB0aGlzIGRyaXZlciwgYXMgZG9lcyB0aGUgRENVLTExIG1vYmlsZS1waG9uZSBjYWJsZS4KCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZwogIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KICAKCktMNUtVU0IxMDUgY2hpcHNldCAvIFBhbG1Db25uZWN0IFVTQiBzaW5nbGUtcG9ydCBhZGFwdGVyCiAgCkN1cnJlbnQgc3RhdHVzOgogIFRoZSBkcml2ZXIgd2FzIHB1dCB0b2dldGhlciBieSBsb29raW5nIGF0IHRoZSB1c2IgYnVzIHRyYW5zYWN0aW9ucwogIGRvbmUgYnkgUGFsbSdzIGRyaXZlciB1bmRlciBXaW5kb3dzLCBzbyBhIGxvdCBvZiBmdW5jdGlvbmFsaXR5IGlzCiAgc3RpbGwgbWlzc2luZy4gIE5vdGFibHksIHNlcmlhbCBpb2N0bHMgYXJlIHNvbWV0aW1lcyBmYWtlZCBvciBub3QgeWV0CiAgaW1wbGVtZW50ZWQuICBTdXBwb3J0IGZvciBmaW5kaW5nIG91dCBhYm91dCBEU1IgYW5kIENUUyBsaW5lIHN0YXR1cyBpcwogIGhvd2V2ZXIgaW1wbGVtZW50ZWQgKHRob3VnaCBub3QgbmljZWx5KSwgc28geW91ciBmYXZvcml0ZSBhdXRvcGlsb3QoMSkKICBhbmQgcGlsb3QtbWFuYWdlciAtZGFlbW9uIGNhbGxzIHdpbGwgd29yay4gIEJhdWQgcmF0ZXMgdXAgdG8gMTE1MjAwCiAgYXJlIHN1cHBvcnRlZCwgYnV0IGhhbmRzaGFraW5nIChzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaXMgbm90LCB3aGljaCBpcwogIHdoeSBpdCBpcyB3aXNlIHRvIGN1dCBkb3duIG9uIHRoZSByYXRlIHVzZWQgaXMgd2lzZSBmb3IgbGFyZ2UKICB0cmFuc2ZlcnMgdW50aWwgdGhpcyBpcyBzZXR0bGVkLgogIApPcHRpb25zIHN1cHBvcnRlZDoKICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSB5b3UgY2FuIHBhc3MgdGhlIGZvbGxvd2luZwogIG9wdGlvbnMgdG8gaXQ6CiAgZGVidWcJCQktIGV4dHJhIHZlcmJvc2UgZGVidWdnaW5nIGluZm8KICAJCQkgIChkZWZhdWx0OiAwOyBub256ZXJvIGVuYWJsZXMpCiAgdXNlX2xvd2xhdGVuY3kJLSB1c2UgbG93X2xhdGVuY3kgZmxhZyB0byBzcGVlZCB1cCB0dHkgbGF5ZXIKCQkJICB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlLgoJCQkgIChkZWZhdWx0OiAwOyBub256ZXJvIGVuYWJsZXMpCgogIFNlZSBodHRwOi8vd3d3LnV1aGF1cy5kZS9saW51eC9wYWxtY29ubmVjdC5odG1sIGZvciB1cC10by1kYXRlCiAgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIuCgpBSVJjYWJsZSBVU0IgRG9uZ2xlIEJsdWV0b290aCBkcml2ZXIKICBJZiB0aGVyZSBpcyB0aGUgY2RjX2FjbSBkcml2ZXIgbG9hZGVkIGluIHRoZSBzeXN0ZW0sIHlvdSB3aWxsIGZpbmQgdGhhdCB0aGUKICBjZGNfYWNtIGNsYWltcyB0aGUgZGV2aWNlIGJlZm9yZSBBSVJjYWJsZSBjYW4uIFRoaXMgaXMgc2ltcGx5IGNvcnJlY3RlZAogIGJ5IHVubG9hZGluZyBib3RoIG1vZHVsZXMgYW5kIHRoZW4gbG9hZGluZyB0aGUgYWlyY2FibGUgbW9kdWxlIGJlZm9yZQogIGNkY19hY20gbW9kdWxlCgpHZW5lcmljIFNlcmlhbCBkcml2ZXIKCiAgSWYgeW91ciBkZXZpY2UgaXMgbm90IG9uZSBvZiB0aGUgYWJvdmUgbGlzdGVkIGRldmljZXMsIGNvbXBhdGlibGUgd2l0aAogIHRoZSBhYm92ZSBtb2RlbHMsIHlvdSBjYW4gdHJ5IG91dCB0aGUgImdlbmVyaWMiIGludGVyZmFjZS4gVGhpcwogIGludGVyZmFjZSBkb2VzIG5vdCBwcm92aWRlIGFueSB0eXBlIG9mIGNvbnRyb2wgbWVzc2FnZXMgc2VudCB0byB0aGUKICBkZXZpY2UsIGFuZCBkb2VzIG5vdCBzdXBwb3J0IGFueSBraW5kIG9mIGRldmljZSBmbG93IGNvbnRyb2wuIEFsbCB0aGF0CiAgaXMgcmVxdWlyZWQgb2YgeW91ciBkZXZpY2UgaXMgdGhhdCBpdCBoYXMgYXQgbGVhc3Qgb25lIGJ1bGsgaW4gZW5kcG9pbnQsCiAgb3Igb25lIGJ1bGsgb3V0IGVuZHBvaW50LiAKICAKICBUbyBlbmFibGUgdGhlIGdlbmVyaWMgZHJpdmVyIHRvIHJlY29nbml6ZSB5b3VyIGRldmljZSwgYnVpbGQgdGhlIGRyaXZlcgogIGFzIGEgbW9kdWxlIGFuZCBsb2FkIGl0IGJ5IHRoZSBmb2xsb3dpbmcgaW52b2NhdGlvbjoKCWluc21vZCB1c2JzZXJpYWwgdmVuZG9yPTB4IyMjIyBwcm9kdWN0PTB4IyMjIwogIHdoZXJlIHRoZSAjIyMjIGlzIHJlcGxhY2VkIHdpdGggdGhlIGhleCByZXByZXNlbnRhdGlvbiBvZiB5b3VyIGRldmljZSdzCiAgdmVuZG9yIGlkIGFuZCBwcm9kdWN0IGlkLgoKICBUaGlzIGRyaXZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdXNlZCB0byBjb25uZWN0IHRvIHRoZSBOZXRDaGlwIFVTQgogIGRldmVsb3BtZW50IGJvYXJkLCBwcm92aWRpbmcgYSB3YXkgdG8gZGV2ZWxvcCBVU0IgZmlybXdhcmUgd2l0aG91dAogIGhhdmluZyB0byB3cml0ZSBhIGN1c3RvbSBkcml2ZXIuCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdyZWcKICBLcm9haC1IYXJ0bWFuIGF0IGdyZWdAa3JvYWguY29tCgoKQ09OVEFDVDoKCiAgSWYgYW55b25lIGhhcyBhbnkgcHJvYmxlbXMgdXNpbmcgdGhlc2UgZHJpdmVycywgd2l0aCBhbnkgb2YgdGhlIGFib3ZlCiAgc3BlY2lmaWVkIHByb2R1Y3RzLCBwbGVhc2UgY29udGFjdCB0aGUgc3BlY2lmaWMgZHJpdmVyJ3MgYXV0aG9yIGxpc3RlZAogIGFib3ZlLCBvciBqb2luIHRoZSBMaW51eC1VU0IgbWFpbGluZyBsaXN0IChpbmZvcm1hdGlvbiBvbiBqb2luaW5nIHRoZQogIG1haWxpbmcgbGlzdCwgYXMgd2VsbCBhcyBhIGxpbmsgdG8gaXRzIHNlYXJjaGFibGUgYXJjaGl2ZSBpcyBhdAogIGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy8gKQoKCkdyZWcgS3JvYWgtSGFydG1hbgpncmVnQGtyb2FoLmNvbQo=