U29tZSB3YXJuaW5ncywgZmlyc3QuCgogKiBCSUcgRkFUIFdBUk5JTkcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIElmIHlvdSB0b3VjaCBhbnl0aGluZyBvbiBkaXNrIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lLi4uCiAqCQkJCS4uLmtpc3MgeW91ciBkYXRhIGdvb2RieWUuCiAqCiAqIElmIHlvdSBkbyByZXN1bWUgZnJvbSBpbml0cmQgYWZ0ZXIgeW91ciBmaWxlc3lzdGVtcyBhcmUgbW91bnRlZC4uLgogKgkJCQkuLi5ieWUgYnllIHJvb3QgcGFydGl0aW9uLgogKgkJCVt0aGlzIGlzIGFjdHVhbGx5IHNhbWUgY2FzZSBhcyBhYm92ZV0KICoKICogSWYgeW91IGhhdmUgdW5zdXBwb3J0ZWQgKCopIGRldmljZXMgdXNpbmcgRE1BLCB5b3UgbWF5IGhhdmUgc29tZQogKiBwcm9ibGVtcy4gSWYgeW91ciBkaXNrIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHN1c3BlbmQuLi4gKElERSBkb2VzKSwKICogaXQgbWF5IGNhdXNlIHNvbWUgcHJvYmxlbXMsIHRvby4gSWYgeW91IGNoYW5nZSBrZXJuZWwgY29tbWFuZCBsaW5lCiAqIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lLCBpdCBtYXkgZG8gc29tZXRoaW5nIHdyb25nLiBJZiB5b3UgY2hhbmdlCiAqIHlvdXIgaGFyZHdhcmUgd2hpbGUgc3lzdGVtIGlzIHN1c3BlbmRlZC4uLiB3ZWxsLCBpdCB3YXMgbm90IGdvb2QgaWRlYTsKICogYnV0IGl0IHdpbGwgcHJvYmFibHkgb25seSBjcmFzaC4KICoKICogKCopIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgaXMgbmVlZGVkIHRvIG1ha2UgaXQgc2FmZS4KCllvdSBuZWVkIHRvIGFwcGVuZCByZXN1bWU9L2Rldi95b3VyX3N3YXBfcGFydGl0aW9uIHRvIGtlcm5lbCBjb21tYW5kCmxpbmUuIFRoZW4geW91IHN1c3BlbmQgYnkKCmVjaG8gc2h1dGRvd24gPiAvc3lzL3Bvd2VyL2Rpc2s7IGVjaG8gZGlzayA+IC9zeXMvcG93ZXIvc3RhdGUKCi4gSWYgeW91IGZlZWwgQUNQSSB3b3JrcyBwcmV0dHkgd2VsbCBvbiB5b3VyIHN5c3RlbSwgeW91IG1pZ2h0IHRyeQoKZWNobyBwbGF0Zm9ybSA+IC9zeXMvcG93ZXIvZGlzazsgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQoKSWYgeW91IHdhbnQgdG8gbGltaXQgdGhlIHN1c3BlbmQgaW1hZ2Ugc2l6ZSB0byBOIG1lZ2FieXRlcywgZG8KCmVjaG8gTiA+IC9zeXMvcG93ZXIvaW1hZ2Vfc2l6ZQoKYmVmb3JlIHN1c3BlbmQgKGl0IGlzIGxpbWl0ZWQgdG8gNTAwIE1CIGJ5IGRlZmF1bHQpLgoKRW5jcnlwdGVkIHN1c3BlbmQgaW1hZ2U6Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJZiB5b3Ugd2FudCB0byBzdG9yZSB5b3VyIHN1c3BlbmQgaW1hZ2UgZW5jcnlwdGVkIHdpdGggYSB0ZW1wb3JhcnkKa2V5IHRvIHByZXZlbnQgZGF0YSBnYXRoZXJpbmcgYWZ0ZXIgcmVzdW1lIHlvdSBtdXN0IGNvbXBpbGUKY3J5cHRvIGFuZCB0aGUgYWVzIGFsZ29yaXRobSBpbnRvIHRoZSBrZXJuZWwgLSBtb2R1bGVzIHdvbid0IHdvcmsKYXMgdGhleSBjYW5ub3QgYmUgbG9hZGVkIGF0IHJlc3VtZSB0aW1lLgoKCkFydGljbGUgYWJvdXQgZ29hbHMgYW5kIGltcGxlbWVudGF0aW9uIG9mIFNvZnR3YXJlIFN1c3BlbmQgZm9yIExpbnV4Cn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkF1dGhvcjogR4LhYm9yIEt1dGkKTGFzdCByZXZpc2VkOiAyMDAzLTEwLTIwIGJ5IFBhdmVsIE1hY2hlawoKSWRlYSBhbmQgZ29hbHMgdG8gYWNoaWV2ZQoKTm93YWRheXMgaXQgaXMgY29tbW9uIGluIHNldmVyYWwgbGFwdG9wcyB0aGF0IHRoZXkgaGF2ZSBhIHN1c3BlbmQgYnV0dG9uLiBJdApzYXZlcyB0aGUgc3RhdGUgb2YgdGhlIG1hY2hpbmUgdG8gYSBmaWxlc3lzdGVtIG9yIHRvIGEgcGFydGl0aW9uIGFuZCBzd2l0Y2hlcwp0byBzdGFuZGJ5IG1vZGUuIExhdGVyIHJlc3VtaW5nIHRoZSBtYWNoaW5lIHRoZSBzYXZlZCBzdGF0ZSBpcyBsb2FkZWQgYmFjayB0bwpyYW0gYW5kIHRoZSBtYWNoaW5lIGNhbiBjb250aW51ZSBpdHMgd29yay4gSXQgaGFzIHR3byByZWFsIGJlbmVmaXRzLiBGaXJzdCB3ZQpzYXZlIG91cnNlbHZlcyB0aGUgdGltZSBtYWNoaW5lIGdvZXMgZG93biBhbmQgbGF0ZXIgYm9vdHMgdXAsIGVuZXJneSBjb3N0cwphcmUgcmVhbCBoaWdoIHdoZW4gcnVubmluZyBmcm9tIGJhdHRlcmllcy4gVGhlIG90aGVyIGdhaW4gaXMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvCmludGVycnVwdCBvdXIgcHJvZ3JhbXMgc28gcHJvY2Vzc2VzIHRoYXQgYXJlIGNhbGN1bGF0aW5nIHNvbWV0aGluZyBmb3IgYSBsb25nCnRpbWUgc2hvdWxkbid0IG5lZWQgdG8gYmUgd3JpdHRlbiBpbnRlcnJ1cHRpYmxlLgoKc3dzdXNwIHNhdmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFjaGluZSBpbnRvIGFjdGl2ZSBzd2FwcyBhbmQgdGhlbiByZWJvb3RzIG9yCnBvd2VyZG93bnMuICBZb3UgbXVzdCBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIHN3YXAgcGFydGl0aW9uIHRvIHJlc3VtZSBmcm9tIHdpdGgKYGByZXN1bWU9Jycga2VybmVsIG9wdGlvbi4gSWYgc2lnbmF0dXJlIGlzIGZvdW5kIGl0IGxvYWRzIGFuZCByZXN0b3JlcyBzYXZlZApzdGF0ZS4gSWYgdGhlIG9wdGlvbiBgYG5vcmVzdW1lJycgaXMgc3BlY2lmaWVkIGFzIGEgYm9vdCBwYXJhbWV0ZXIsIGl0IHNraXBzCnRoZSByZXN1bWluZy4KCkluIHRoZSBtZWFudGltZSB3aGlsZSB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZCB5b3Ugc2hvdWxkIG5vdCBhZGQvcmVtb3ZlIGFueQpvZiB0aGUgaGFyZHdhcmUsIHdyaXRlIHRvIHRoZSBmaWxlc3lzdGVtcywgZXRjLgoKU2xlZXAgc3RhdGVzIHN1bW1hcnkKPT09PT09PT09PT09PT09PT09PT0KClRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgaW50ZXJmYWNlcyB5b3UgY2FuIHVzZSwgL3Byb2MvYWNwaSBzaG91bGQKd29yayBsaWtlIHRoaXM6CgpJbiBhIHJlYWxseSBwZXJmZWN0IHdvcmxkOgplY2hvIDEgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgICMgZm9yIHN0YW5kYnkKZWNobyAyID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdXNwZW5kIHRvIHJhbQplY2hvIDMgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgICMgZm9yIHN1c3BlbmQgdG8gcmFtLCBidXQgd2l0aCBtb3JlIHBvd2VyIGNvbnNlcnZhdGl2ZQplY2hvIDQgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgICMgZm9yIHN1c3BlbmQgdG8gZGlzawplY2hvIDUgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgICMgZm9yIHNodXRkb3duIHVuZnJpZW5kbHkgdGhlIHN5c3RlbQoKYW5kIHBlcmhhcHMKZWNobyA0YiA+IC9wcm9jL2FjcGkvc2xlZXAgICAgICAjIGZvciBzdXNwZW5kIHRvIGRpc2sgdmlhIHM0YmlvcwoKRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT0KClE6IHdlbGwsIHN1c3BlbmRpbmcgYSBzZXJ2ZXIgaXMgSU1ITyBhIHJlYWxseSBzdHVwaWQgdGhpbmcsCmJ1dC4uLiAoRGllZ28gWnVjY2F0byk6CgpBOiBZb3UgYm91Z2h0IG5ldyBVUFMgZm9yIHlvdXIgc2VydmVyLiBIb3cgZG8geW91IGluc3RhbGwgaXQgd2l0aG91dApicmluZ2luZyBtYWNoaW5lIGRvd24/IFN1c3BlbmQgdG8gZGlzaywgcmVhcnJhbmdlIHBvd2VyIGNhYmxlcywKcmVzdW1lLgoKWW91IGhhdmUgeW91ciBzZXJ2ZXIgb24gVVBTLiBQb3dlciBkaWVkLCBhbmQgVVBTIGlzIGluZGljYXRpbmcgMzAKc2Vjb25kcyB0byBmYWlsdXJlLiBXaGF0IGRvIHlvdSBkbz8gU3VzcGVuZCB0byBkaXNrLgoKClE6IE1heWJlIEknbSBtaXNzaW5nIHNvbWV0aGluZywgYnV0IHdoeSBkb24ndCB0aGUgcmVndWxhciBJL08gcGF0aHMgd29yaz8KCkE6IFdlIGRvIHVzZSB0aGUgcmVndWxhciBJL08gcGF0aHMuIEhvd2V2ZXIgd2UgY2Fubm90IHJlc3RvcmUgdGhlIGRhdGEKdG8gaXRzIG9yaWdpbmFsIGxvY2F0aW9uIGFzIHdlIGxvYWQgaXQuIFRoYXQgd291bGQgY3JlYXRlIGFuCmluY29uc2lzdGVudCBrZXJuZWwgc3RhdGUgd2hpY2ggd291bGQgY2VydGFpbmx5IHJlc3VsdCBpbiBhbiBvb3BzLgpJbnN0ZWFkLCB3ZSBsb2FkIHRoZSBpbWFnZSBpbnRvIHVudXNlZCBtZW1vcnkgYW5kIHRoZW4gYXRvbWljYWxseSBjb3B5Cml0IGJhY2sgdG8gaXQgb3JpZ2luYWwgbG9jYXRpb24uIFRoaXMgaW1wbGllcywgb2YgY291cnNlLCBhIG1heGltdW0KaW1hZ2Ugc2l6ZSBvZiBoYWxmIHRoZSBhbW91bnQgb2YgbWVtb3J5LgoKVGhlcmUgYXJlIHR3byBzb2x1dGlvbnMgdG8gdGhpczoKCiogcmVxdWlyZSBoYWxmIG9mIG1lbW9yeSB0byBiZSBmcmVlIGR1cmluZyBzdXNwZW5kLiBUaGF0IHdheSB5b3UgY2FuCnJlYWQgIm5ldyIgZGF0YSBvbnRvIGZyZWUgc3BvdHMsIHRoZW4gY2xpIGFuZCBjb3B5CgoqIGFzc3VtZSB3ZSBoYWQgc3BlY2lhbCAicG9sbGluZyIgaWRlIGRyaXZlciB0aGF0IG9ubHkgdXNlcyBtZW1vcnkKYmV0d2VlbiAwLTY0MEtCLiBUaGF0IHdheSwgSSdkIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgMC02NDBLQiBpcyBmcmVlCmR1cmluZyBzdXNwZW5kaW5nLCBidXQgb3RoZXJ3aXNlIGl0IHdvdWxkIHdvcmsuLi4KCnN1c3BlbmQyIHNoYXJlcyB0aGlzIGZ1bmRhbWVudGFsIGxpbWl0YXRpb24sIGJ1dCBkb2VzIG5vdCBpbmNsdWRlIHVzZXIKZGF0YSBhbmQgZGlzayBjYWNoZXMgaW50byAidXNlZCBtZW1vcnkiIGJ5IHNhdmluZyB0aGVtIGluCmFkdmFuY2UuIFRoYXQgbWVhbnMgdGhhdCB0aGUgbGltaXRhdGlvbiBnb2VzIGF3YXkgaW4gcHJhY3RpY2UuCgpROiBEb2VzIGxpbnV4IHN1cHBvcnQgQUNQSSBTND8KCkE6IFllcy4gVGhhdCdzIHdoYXQgZWNobyBwbGF0Zm9ybSA+IC9zeXMvcG93ZXIvZGlzayBkb2VzLgoKUTogV2hhdCBpcyAnc3VzcGVuZDInPwoKQTogc3VzcGVuZDIgaXMgJ1NvZnR3YXJlIFN1c3BlbmQgMicsIGEgZm9ya2VkIGltcGxlbWVudGF0aW9uIG9mCnN1c3BlbmQtdG8tZGlzayB3aGljaCBpcyBhdmFpbGFibGUgYXMgc2VwYXJhdGUgcGF0Y2hlcyBmb3IgMi40IGFuZCAyLjYKa2VybmVscyBmcm9tIHN3c3VzcC5zb3VyY2Vmb3JnZS5uZXQuIEl0IGluY2x1ZGVzIHN1cHBvcnQgZm9yIFNNUCwgNEdCCmhpZ2htZW0gYW5kIHByZWVtcHRpb24uIEl0IGFsc28gaGFzIGEgZXh0ZW5zaWJsZSBhcmNoaXRlY3R1cmUgdGhhdAphbGxvd3MgZm9yIGFyYml0cmFyeSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGltYWdlIChjb21wcmVzc2lvbiwKZW5jcnlwdGlvbikgYW5kIGFyYml0cmFyeSBiYWNrZW5kcyBmb3Igd3JpdGluZyB0aGUgaW1hZ2UgKGVnIHRvIHN3YXAKb3IgYW4gTkZTIHNoYXJlW1dvcmsgSW4gUHJvZ3Jlc3NdKS4gUXVlc3Rpb25zIHJlZ2FyZGluZyBzdXNwZW5kMgpzaG91bGQgYmUgc2VudCB0byB0aGUgbWFpbGluZyBsaXN0IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBzdXNwZW5kMgp3ZWJzaXRlLCBhbmQgbm90IHRvIHRoZSBMaW51eCBLZXJuZWwgTWFpbGluZyBMaXN0LiBXZSBhcmUgd29ya2luZwp0b3dhcmQgbWVyZ2luZyBzdXNwZW5kMiBpbnRvIHRoZSBtYWlubGluZSBrZXJuZWwuCgpROiBBIGtlcm5lbCB0aHJlYWQgbXVzdCB2b2x1bnRhcmlseSBmcmVlemUgaXRzZWxmIChjYWxsICdyZWZyaWdlcmF0b3InKS4KSSBmb3VuZCBzb21lIGtlcm5lbCB0aHJlYWRzIHRoYXQgZG9uJ3QgZG8gaXQsIGFuZCB0aGV5IGRvbid0IGZyZWV6ZQpzbyB0aGUgc3lzdGVtIGNhbid0IHNsZWVwLiBJcyB0aGlzIGEga25vd24gYmVoYXZpb3I/CgpBOiBBbGwgc3VjaCBrZXJuZWwgdGhyZWFkcyBuZWVkIHRvIGJlIGZpeGVkLCBvbmUgYnkgb25lLiBTZWxlY3QgdGhlCnBsYWNlIHdoZXJlIHRoZSB0aHJlYWQgaXMgc2FmZSB0byBiZSBmcm96ZW4gKG5vIGtlcm5lbCBzZW1hcGhvcmVzCnNob3VsZCBiZSBoZWxkIGF0IHRoYXQgcG9pbnQgYW5kIGl0IG11c3QgYmUgc2FmZSB0byBzbGVlcCB0aGVyZSksIGFuZAphZGQ6CgogICAgICAgdHJ5X3RvX2ZyZWV6ZSgpOwoKSWYgdGhlIHRocmVhZCBpcyBuZWVkZWQgZm9yIHdyaXRpbmcgdGhlIGltYWdlIHRvIHN0b3JhZ2UsIHlvdSBzaG91bGQKaW5zdGVhZCBzZXQgdGhlIFBGX05PRlJFRVpFIHByb2Nlc3MgZmxhZyB3aGVuIGNyZWF0aW5nIHRoZSB0aHJlYWQgKGFuZApiZSB2ZXJ5IGNhcmVmdWxsKS4KCgpROiBXaGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYmV0d2VlbiAicGxhdGZvcm0iLCAic2h1dGRvd24iIGFuZAoiZmlybXdhcmUiIGluIC9zeXMvcG93ZXIvZGlzaz8KCkE6CgpzaHV0ZG93bjogc2F2ZSBzdGF0ZSBpbiBsaW51eCwgdGhlbiB0ZWxsIGJpb3MgdG8gcG93ZXJkb3duCgpwbGF0Zm9ybTogc2F2ZSBzdGF0ZSBpbiBsaW51eCwgdGhlbiB0ZWxsIGJpb3MgdG8gcG93ZXJkb3duIGFuZCBibGluawogICAgICAgICAgInN1c3BlbmRlZCBsZWQiCgpmaXJtd2FyZTogdGVsbCBiaW9zIHRvIHNhdmUgc3RhdGUgaXRzZWxmIFtuZWVkcyBCSU9TLXNwZWNpZmljIHN1c3BlbmQKCSAgcGFydGl0aW9uLCBhbmQgaGFzIHZlcnkgbGl0dGxlIHRvIGRvIHdpdGggc3dzdXNwXQoKInBsYXRmb3JtIiBpcyBhY3R1YWxseSByaWdodCB0aGluZyB0byBkbywgYnV0ICJzaHV0ZG93biIgaXMgbW9zdApyZWxpYWJsZS4KClE6IEkgZG8gbm90IHVuZGVyc3RhbmQgd2h5IHlvdSBoYXZlIHN1Y2ggc3Ryb25nIG9iamVjdGlvbnMgdG8gaWRlYSBvZgpzZWxlY3RpdmUgc3VzcGVuZC4KCkE6IERvIHNlbGVjdGl2ZSBzdXNwZW5kIGR1cmluZyBydW50aW1lIHBvd2VyIG1hbmFnbWVudCwgdGhhdCdzIG9rYXkuIEJ1dAppdHMgdXNlbGVzcyBmb3Igc3VzcGVuZC10by1kaXNrLiAoQW5kIEkgZG8gbm90IHNlZSBob3cgeW91IGNvdWxkIHVzZQppdCBmb3Igc3VzcGVuZC10by1yYW0sIEkgaG9wZSB5b3UgZG8gbm90IHdhbnQgdGhhdCkuCgpMZXRzIHNlZSwgc28geW91IHN1Z2dlc3QgdG8KCiogU1VTUEVORCBhbGwgYnV0IHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCiogU25hcHNob3QKKiBXcml0ZSBpbWFnZSB0byBkaXNrCiogU1VTUEVORCBzd2FwIGRldmljZSBhbmQgcGFyZW50cwoqIFBvd2VyZG93bgoKT2ggbm8sIHRoYXQgZG9lcyBub3Qgd29yaywgaWYgc3dhcCBkZXZpY2Ugb3IgaXRzIHBhcmVudHMgdXNlcyBETUEsCnlvdSd2ZSBjb3JydXB0ZWQgZGF0YS4gWW91J2QgaGF2ZSB0byBkbwoKKiBTVVNQRU5EIGFsbCBidXQgc3dhcCBkZXZpY2UgYW5kIHBhcmVudHMKKiBGUkVFWkUgc3dhcCBkZXZpY2UgYW5kIHBhcmVudHMKKiBTbmFwc2hvdAoqIFVORlJFRVpFIHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCiogV3JpdGUKKiBTVVNQRU5EIHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCgpXaGljaCBtZWFucyB0aGF0IHlvdSBzdGlsbCBuZWVkIHRoYXQgRlJFRVpFIHN0YXRlLCBhbmQgeW91IGdldCBtb3JlCmNvbXBsaWNhdGVkIGNvZGUuIChBbmQgSSBoYXZlIG5vdCB5ZXQgaW50cm9kdWNlIGRldGFpbHMgbGlrZSBzeXN0ZW0KZGV2aWNlcykuCgpROiBUaGVyZSBkb24ndCBzZWVtIHRvIGJlIGFueSBnZW5lcmFsbHkgdXNlZnVsIGJlaGF2aW9yYWwKZGlzdGluY3Rpb25zIGJldHdlZW4gU1VTUEVORCBhbmQgRlJFRVpFLgoKQTogRG9pbmcgU1VTUEVORCB3aGVuIHlvdSBhcmUgYXNrZWQgdG8gZG8gRlJFRVpFIGlzIGFsd2F5cyBjb3JyZWN0LApidXQgaXQgbWF5IGJlIHVubmVjY2Vzc2FyaWx5IHNsb3cuIElmIHlvdSB3YW50IFVTQiB0byBzdGF5IHNpbXBsZSwKc2xvd25lc3MgbWF5IG5vdCBtYXR0ZXIgdG8geW91LiBJdCBjYW4gYWx3YXlzIGJlIGZpeGVkIGxhdGVyLgoKRm9yIGRldmljZXMgbGlrZSBkaXNrIGl0IGRvZXMgbWF0dGVyLCB5b3UgZG8gbm90IHdhbnQgdG8gc3BpbmRvd24gZm9yCkZSRUVaRS4KClE6IEFmdGVyIHJlc3VtaW5nLCBzeXN0ZW0gaXMgcGFnaW5nIGhlYXZpbGx5LCBsZWFkaW5nIHRvIHZlcnkgYmFkIGludGVyYWN0aXZpdHkuCgpBOiBUcnkgcnVubmluZwoKY2F0IGBjYXQgL3Byb2MvWzAtOV0qL21hcHMgfCBncmVwIC8gfCBzZWQgJ3M6LiogLzovOicgfCBzb3J0IC11YCA+IC9kZXYvbnVsbAoKYWZ0ZXIgcmVzdW1lLiBzd2Fwb2ZmIC1hOyBzd2Fwb24gLWEgbWF5IGFsc28gYmUgdXNlZnVsbC4KClE6IFdoYXQgaGFwcGVucyB0byBkZXZpY2VzIGR1cmluZyBzd3N1c3A/IFRoZXkgc2VlbSB0byBiZSByZXN1bWVkCmR1cmluZyBzeXN0ZW0gc3VzcGVuZD8KCkE6IFRoYXQncyBjb3JyZWN0LiBXZSBuZWVkIHRvIHJlc3VtZSB0aGVtIGlmIHdlIHdhbnQgdG8gd3JpdGUgaW1hZ2UgdG8KZGlzay4gV2hvbGUgc2VxdWVuY2UgZ29lcyBsaWtlCgogICAgICBTdXNwZW5kIHBhcnQKICAgICAgfn5+fn5+fn5+fn5+CiAgICAgIHJ1bm5pbmcgc3lzdGVtLCB1c2VyIGFza3MgZm9yIHN1c3BlbmQtdG8tZGlzawoKICAgICAgdXNlciBwcm9jZXNzZXMgYXJlIHN0b3BwZWQKCiAgICAgIHN1c3BlbmQoUE1TR19GUkVFWkUpOiBkZXZpY2VzIGFyZSBmcm96ZW4gc28gdGhhdCB0aGV5IGRvbid0IGludGVyZmVyZQogICAgICAJCSAgICAgIHdpdGggc3RhdGUgc25hcHNob3QKCiAgICAgIHN0YXRlIHNuYXBzaG90OiBjb3B5IG9mIHdob2xlIHVzZWQgbWVtb3J5IGlzIHRha2VuIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAoKICAgICAgcmVzdW1lKCk6IGRldmljZXMgYXJlIHdva2VuIHVwIHNvIHRoYXQgd2UgY2FuIHdyaXRlIGltYWdlIHRvIHN3YXAKCiAgICAgIHdyaXRlIGltYWdlIHRvIHN3YXAKCiAgICAgIHN1c3BlbmQoUE1TR19TVVNQRU5EKTogc3VzcGVuZCBkZXZpY2VzIHNvIHRoYXQgd2UgY2FuIHBvd2VyIG9mZgoKICAgICAgdHVybiB0aGUgcG93ZXIgb2ZmCgogICAgICBSZXN1bWUgcGFydAogICAgICB+fn5+fn5+fn5+fgogICAgICAoaXMgYWN0dWFsbHkgcHJldHR5IHNpbWlsYXIpCgogICAgICBydW5uaW5nIHN5c3RlbSwgdXNlciBhc2tzIGZvciBzdXNwZW5kLXRvLWRpc2sKCiAgICAgIHVzZXIgcHJvY2Vzc2VzIGFyZSBzdG9wcGVkIChpbiBjb21tb24gY2FzZSB0aGVyZSBhcmUgbm9uZSwgYnV0IHdpdGggcmVzdW1lLWZyb20taW5pdHJkLCBub29uZSBrbm93cykKCiAgICAgIHJlYWQgaW1hZ2UgZnJvbSBkaXNrCgogICAgICBzdXNwZW5kKFBNU0dfRlJFRVpFKTogZGV2aWNlcyBhcmUgZnJvemVuIHNvIHRoYXQgdGhleSBkb24ndCBpbnRlcmZlcmUKICAgICAgCQkgICAgICB3aXRoIGltYWdlIHJlc3RvcmF0aW9uCgogICAgICBpbWFnZSByZXN0b3JhdGlvbjogcmV3cml0ZSBtZW1vcnkgd2l0aCBpbWFnZQoKICAgICAgcmVzdW1lKCk6IGRldmljZXMgYXJlIHdva2VuIHVwIHNvIHRoYXQgc3lzdGVtIGNhbiBjb250aW51ZQoKICAgICAgdGhhdyBhbGwgdXNlciBwcm9jZXNzZXMKClE6IFdoYXQgaXMgdGhpcyAnRW5jcnlwdCBzdXNwZW5kIGltYWdlJyBmb3I/CgpBOiBGaXJzdCBvZiBhbGw6IGl0IGlzIG5vdCBhIHJlcGxhY2VtZW50IGZvciBkbS1jcnlwdCBlbmNyeXB0ZWQgc3dhcC4KSXQgY2Fubm90IHByb3RlY3QgeW91ciBjb21wdXRlciB3aGlsZSBpdCBpcyBzdXNwZW5kZWQuIEluc3RlYWQgaXQgZG9lcwpwcm90ZWN0IGZyb20gbGVha2luZyBzZW5zaXRpdmUgZGF0YSBhZnRlciByZXN1bWUgZnJvbSBzdXNwZW5kLgoKVGhpbmsgb2YgdGhlIGZvbGxvd2luZzogeW91IHN1c3BlbmQgd2hpbGUgYW4gYXBwbGljYXRpb24gaXMgcnVubmluZwp0aGF0IGtlZXBzIHNlbnNpdGl2ZSBkYXRhIGluIG1lbW9yeS4gVGhlIGFwcGxpY2F0aW9uIGl0c2VsZiBwcmV2ZW50cwp0aGUgZGF0YSBmcm9tIGJlaW5nIHN3YXBwZWQgb3V0LiBTdXNwZW5kLCBob3dldmVyLCBtdXN0IHdyaXRlIHRoZXNlCmRhdGEgdG8gc3dhcCB0byBiZSBhYmxlIHRvIHJlc3VtZSBsYXRlciBvbi4gV2l0aG91dCBzdXNwZW5kIGVuY3J5cHRpb24KeW91ciBzZW5zaXRpdmUgZGF0YSBhcmUgdGhlbiBzdG9yZWQgaW4gcGxhaW50ZXh0IG9uIGRpc2suICBUaGlzIG1lYW5zCnRoYXQgYWZ0ZXIgcmVzdW1lIHlvdXIgc2Vuc2l0aXZlIGRhdGEgYXJlIGFjY2Vzc2libGUgdG8gYWxsCmFwcGxpY2F0aW9ucyBoYXZpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgc3dhcCBkZXZpY2Ugd2hpY2ggd2FzIHVzZWQKZm9yIHN1c3BlbmQuIElmIHlvdSBkb24ndCBuZWVkIHN3YXAgYWZ0ZXIgcmVzdW1lIHRoZXNlIGRhdGEgY2FuIHJlbWFpbgpvbiBkaXNrIHZpcnR1YWxseSBmb3JldmVyLiBUaHVzIGl0IGNhbiBoYXBwZW4gdGhhdCB5b3VyIHN5c3RlbSBnZXRzCmJyb2tlbiBpbiB3ZWVrcyBsYXRlciBhbmQgc2Vuc2l0aXZlIGRhdGEgd2hpY2ggeW91IHRob3VnaHQgd2VyZQplbmNyeXB0ZWQgYW5kIHByb3RlY3RlZCBhcmUgcmV0cmlldmVkIGFuZCBzdG9sZW4gZnJvbSB0aGUgc3dhcCBkZXZpY2UuClRvIHByZXZlbnQgdGhpcyBzaXR1YXRpb24geW91IHNob3VsZCB1c2UgJ0VuY3J5cHQgc3VzcGVuZCBpbWFnZScuCgpEdXJpbmcgc3VzcGVuZCBhIHRlbXBvcmFyeSBrZXkgaXMgY3JlYXRlZCBhbmQgdGhpcyBrZXkgaXMgdXNlZCB0bwplbmNyeXB0IHRoZSBkYXRhIHdyaXR0ZW4gdG8gZGlzay4gV2hlbiwgZHVyaW5nIHJlc3VtZSwgdGhlIGRhdGEgd2FzCnJlYWQgYmFjayBpbnRvIG1lbW9yeSB0aGUgdGVtcG9yYXJ5IGtleSBpcyBkZXN0cm95ZWQgd2hpY2ggc2ltcGx5Cm1lYW5zIHRoYXQgYWxsIGRhdGEgd3JpdHRlbiB0byBkaXNrIGR1cmluZyBzdXNwZW5kIGFyZSB0aGVuCmluYWNjZXNzaWJsZSBzbyB0aGV5IGNhbid0IGJlIHN0b2xlbiBsYXRlciBvbi4gIFRoZSBvbmx5IHRoaW5nIHRoYXQKeW91IG11c3QgdGhlbiB0YWtlIGNhcmUgb2YgaXMgdGhhdCB5b3UgY2FsbCAnbWtzd2FwJyBmb3IgdGhlIHN3YXAKcGFydGl0aW9uIHVzZWQgZm9yIHN1c3BlbmQgYXMgZWFybHkgYXMgcG9zc2libGUgZHVyaW5nIHJlZ3VsYXIKYm9vdC4gVGhpcyBhc3NlcnRzIHRoYXQgYW55IHRlbXBvcmFyeSBrZXkgZnJvbSBhbiBvb3BzZWQgc3VzcGVuZCBvcgpmcm9tIGEgZmFpbGVkIG9yIGFib3J0ZWQgcmVzdW1lIGlzIGVyYXNlZCBmcm9tIHRoZSBzd2FwIGRldmljZS4KCkFzIGEgcnVsZSBvZiB0aHVtYiB1c2UgZW5jcnlwdGVkIHN3YXAgdG8gcHJvdGVjdCB5b3VyIGRhdGEgd2hpbGUgeW91cgpzeXN0ZW0gaXMgc2h1dCBkb3duIG9yIHN1c3BlbmRlZC4gQWRkaXRpb25hbGx5IHVzZSB0aGUgZW5jcnlwdGVkCnN1c3BlbmQgaW1hZ2UgdG8gcHJldmVudCBzZW5zaXRpdmUgZGF0YSBmcm9tIGJlaW5nIHN0b2xlbiBhZnRlcgpyZXN1bWUuCgpROiBXaHkgY2FuJ3Qgd2Ugc3VzcGVuZCB0byBhIHN3YXAgZmlsZT8KCkE6IEJlY2F1c2UgYWNjZXNzaW5nIHN3YXAgZmlsZSBuZWVkcyB0aGUgZmlsZXN5c3RlbSBtb3VudGVkLCBhbmQKZmlsZXN5c3RlbSBtaWdodCBkbyBzb21ldGhpbmcgd3JvbmcgKGxpa2UgcmVwbGF5aW5nIHRoZSBqb3VybmFsKQpkdXJpbmcgbW91bnQuCgpUaGVyZSBhcmUgZmV3IHdheXMgdG8gZ2V0IHRoYXQgZml4ZWQ6CgoxKSBQcm9iYWJseSBjb3VsZCBiZSBzb2x2ZWQgYnkgbW9kaWZ5aW5nIGV2ZXJ5IGZpbGVzeXN0ZW0gdG8gc3VwcG9ydApzb21lIGtpbmQgb2YgInJlYWxseSByZWFkLW9ubHkhIiBvcHRpb24uIFBhdGNoZXMgd2VsY29tZS4KCjIpIHN1c3BlbmQyIGdldHMgYXJvdW5kIHRoYXQgYnkgc3RvcmluZyBhYnNvbHV0ZSBwb3NpdGlvbnMgaW4gb24tZGlzawppbWFnZSAoYW5kIGJsb2Nrc2l6ZSksIHdpdGggcmVzdW1lIHBhcmFtZXRlciBwb2ludGluZyBkaXJlY3RseSB0bwpzdXNwZW5kIGhlYWRlci4KClE6IElzIHRoZXJlIGEgbWF4aW11bSBzeXN0ZW0gUkFNIHNpemUgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgc3dzdXNwPwoKQTogSXQgc2hvdWxkIHdvcmsgb2theSB3aXRoIGhpZ2htZW0uCgpROiBEb2VzIHN3c3VzcCAodG8gZGlzaykgdXNlIG9ubHkgb25lIHN3YXAgcGFydGl0aW9uIG9yIGNhbiBpdCB1c2UKbXVsdGlwbGUgc3dhcCBwYXJ0aXRpb25zIChhZ2dyZWdhdGUgdGhlbSBpbnRvIG9uZSBsb2dpY2FsIHNwYWNlKT8KCkE6IE9ubHkgb25lIHN3YXAgcGFydGl0aW9uLCBzb3JyeS4KClE6IElmIG15IGFwcGxpY2F0aW9uKHMpIGNhdXNlcyBsb3RzIG9mIG1lbW9yeSAmIHN3YXAgc3BhY2UgdG8gYmUgdXNlZAoob3ZlciBoYWxmIG9mIHRoZSB0b3RhbCBzeXN0ZW0gUkFNKSwgaXMgaXQgY29ycmVjdCB0aGF0IGl0IGlzIGxpa2VseQp0byBiZSB1c2VsZXNzIHRvIHRyeSB0byBzdXNwZW5kIHRvIGRpc2sgd2hpbGUgdGhhdCBhcHAgaXMgcnVubmluZz8KCkE6IE5vLCBpdCBzaG91bGQgd29yayBva2F5LCBhcyBsb25nIGFzIHlvdXIgYXBwIGRvZXMgbm90IG1sb2NrKCkKaXQuIEp1c3QgcHJlcGFyZSBiaWcgZW5vdWdoIHN3YXAgcGFydGl0aW9uLgoKUTogV2hhdCBpbmZvcm1hdGlvbiBpcyB1c2VmdWxsIGZvciBkZWJ1Z2dpbmcgc3VzcGVuZC10by1kaXNrIHByb2JsZW1zPwoKQTogV2VsbCwgbGFzdCBtZXNzYWdlcyBvbiB0aGUgc2NyZWVuIGFyZSBhbHdheXMgdXNlZnVsLiBJZiBzb21ldGhpbmcKaXMgYnJva2VuLCBpdCBpcyB1c3VhbGx5IHNvbWUga2VybmVsIGRyaXZlciwgdGhlcmVmb3JlIHRyeWluZyB3aXRoIGFzCmxpdHRsZSBhcyBwb3NzaWJsZSBtb2R1bGVzIGxvYWRlZCBoZWxwcyBhIGxvdC4gSSBhbHNvIHByZWZlciBwZW9wbGUgdG8Kc3VzcGVuZCBmcm9tIGNvbnNvbGUsIHByZWZlcmFibHkgd2l0aG91dCBYIHJ1bm5pbmcuIEJvb3Rpbmcgd2l0aAppbml0PS9iaW4vYmFzaCwgdGhlbiBzd2Fwb24gYW5kIHN0YXJ0aW5nIHN1c3BlbmQgc2VxdWVuY2UgbWFudWFsbHkKdXN1YWxseSBkb2VzIHRoZSB0cmljay4gVGhlbiBpdCBpcyBnb29kIGlkZWEgdG8gdHJ5IHdpdGggbGF0ZXN0CnZhbmlsbGEga2VybmVsLgoKCg==