U29tZSB3YXJuaW5ncywgZmlyc3QuCgogKiBCSUcgRkFUIFdBUk5JTkcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIElmIHlvdSB0b3VjaCBhbnl0aGluZyBvbiBkaXNrIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lLi4uCiAqCQkJCS4uLmtpc3MgeW91ciBkYXRhIGdvb2RieWUuCiAqCiAqIElmIHlvdSBkbyByZXN1bWUgZnJvbSBpbml0cmQgYWZ0ZXIgeW91ciBmaWxlc3lzdGVtcyBhcmUgbW91bnRlZC4uLgogKgkJCQkuLi5ieWUgYnllIHJvb3QgcGFydGl0aW9uLgogKgkJCVt0aGlzIGlzIGFjdHVhbGx5IHNhbWUgY2FzZSBhcyBhYm92ZV0KICoKICogSWYgeW91IGhhdmUgdW5zdXBwb3J0ZWQgKCopIGRldmljZXMgdXNpbmcgRE1BLCB5b3UgbWF5IGhhdmUgc29tZQogKiBwcm9ibGVtcy4gSWYgeW91ciBkaXNrIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHN1c3BlbmQuLi4gKElERSBkb2VzKSwKICogaXQgbWF5IGNhdXNlIHNvbWUgcHJvYmxlbXMsIHRvby4gSWYgeW91IGNoYW5nZSBrZXJuZWwgY29tbWFuZCBsaW5lCiAqIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lLCBpdCBtYXkgZG8gc29tZXRoaW5nIHdyb25nLiBJZiB5b3UgY2hhbmdlCiAqIHlvdXIgaGFyZHdhcmUgd2hpbGUgc3lzdGVtIGlzIHN1c3BlbmRlZC4uLiB3ZWxsLCBpdCB3YXMgbm90IGdvb2QgaWRlYTsKICogYnV0IGl0IHdpbGwgcHJvYmFibHkgb25seSBjcmFzaC4KICoKICogKCopIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgaXMgbmVlZGVkIHRvIG1ha2UgaXQgc2FmZS4KCllvdSBuZWVkIHRvIGFwcGVuZCByZXN1bWU9L2Rldi95b3VyX3N3YXBfcGFydGl0aW9uIHRvIGtlcm5lbCBjb21tYW5kCmxpbmUuIFRoZW4geW91IHN1c3BlbmQgYnkKCmVjaG8gc2h1dGRvd24gPiAvc3lzL3Bvd2VyL2Rpc2s7IGVjaG8gZGlzayA+IC9zeXMvcG93ZXIvc3RhdGUKCi4gSWYgeW91IGZlZWwgQUNQSSB3b3JrcyBwcmV0dHkgd2VsbCBvbiB5b3VyIHN5c3RlbSwgeW91IG1pZ2h0IHRyeQoKZWNobyBwbGF0Zm9ybSA+IC9zeXMvcG93ZXIvZGlzazsgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQoKCkVuY3J5cHRlZCBzdXNwZW5kIGltYWdlOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSWYgeW91IHdhbnQgdG8gc3RvcmUgeW91ciBzdXNwZW5kIGltYWdlIGVuY3J5cHRlZCB3aXRoIGEgdGVtcG9yYXJ5CmtleSB0byBwcmV2ZW50IGRhdGEgZ2F0aGVyaW5nIGFmdGVyIHJlc3VtZSB5b3UgbXVzdCBjb21waWxlCmNyeXB0byBhbmQgdGhlIGFlcyBhbGdvcml0aG0gaW50byB0aGUga2VybmVsIC0gbW9kdWxlcyB3b24ndCB3b3JrCmFzIHRoZXkgY2Fubm90IGJlIGxvYWRlZCBhdCByZXN1bWUgdGltZS4KCgpBcnRpY2xlIGFib3V0IGdvYWxzIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBTb2Z0d2FyZSBTdXNwZW5kIGZvciBMaW51eAp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpBdXRob3I6IEeC4WJvciBLdXRpCkxhc3QgcmV2aXNlZDogMjAwMy0xMC0yMCBieSBQYXZlbCBNYWNoZWsKCklkZWEgYW5kIGdvYWxzIHRvIGFjaGlldmUKCk5vd2FkYXlzIGl0IGlzIGNvbW1vbiBpbiBzZXZlcmFsIGxhcHRvcHMgdGhhdCB0aGV5IGhhdmUgYSBzdXNwZW5kIGJ1dHRvbi4gSXQKc2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBtYWNoaW5lIHRvIGEgZmlsZXN5c3RlbSBvciB0byBhIHBhcnRpdGlvbiBhbmQgc3dpdGNoZXMKdG8gc3RhbmRieSBtb2RlLiBMYXRlciByZXN1bWluZyB0aGUgbWFjaGluZSB0aGUgc2F2ZWQgc3RhdGUgaXMgbG9hZGVkIGJhY2sgdG8KcmFtIGFuZCB0aGUgbWFjaGluZSBjYW4gY29udGludWUgaXRzIHdvcmsuIEl0IGhhcyB0d28gcmVhbCBiZW5lZml0cy4gRmlyc3Qgd2UKc2F2ZSBvdXJzZWx2ZXMgdGhlIHRpbWUgbWFjaGluZSBnb2VzIGRvd24gYW5kIGxhdGVyIGJvb3RzIHVwLCBlbmVyZ3kgY29zdHMKYXJlIHJlYWwgaGlnaCB3aGVuIHJ1bm5pbmcgZnJvbSBiYXR0ZXJpZXMuIFRoZSBvdGhlciBnYWluIGlzIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0bwppbnRlcnJ1cHQgb3VyIHByb2dyYW1zIHNvIHByb2Nlc3NlcyB0aGF0IGFyZSBjYWxjdWxhdGluZyBzb21ldGhpbmcgZm9yIGEgbG9uZwp0aW1lIHNob3VsZG4ndCBuZWVkIHRvIGJlIHdyaXR0ZW4gaW50ZXJydXB0aWJsZS4KCnN3c3VzcCBzYXZlcyB0aGUgc3RhdGUgb2YgdGhlIG1hY2hpbmUgaW50byBhY3RpdmUgc3dhcHMgYW5kIHRoZW4gcmVib290cyBvcgpwb3dlcmRvd25zLiAgWW91IG11c3QgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBzd2FwIHBhcnRpdGlvbiB0byByZXN1bWUgZnJvbSB3aXRoCmBgcmVzdW1lPScnIGtlcm5lbCBvcHRpb24uIElmIHNpZ25hdHVyZSBpcyBmb3VuZCBpdCBsb2FkcyBhbmQgcmVzdG9yZXMgc2F2ZWQKc3RhdGUuIElmIHRoZSBvcHRpb24gYGBub3Jlc3VtZScnIGlzIHNwZWNpZmllZCBhcyBhIGJvb3QgcGFyYW1ldGVyLCBpdCBza2lwcwp0aGUgcmVzdW1pbmcuCgpJbiB0aGUgbWVhbnRpbWUgd2hpbGUgdGhlIHN5c3RlbSBpcyBzdXNwZW5kZWQgeW91IHNob3VsZCBub3QgYWRkL3JlbW92ZSBhbnkKb2YgdGhlIGhhcmR3YXJlLCB3cml0ZSB0byB0aGUgZmlsZXN5c3RlbXMsIGV0Yy4KClNsZWVwIHN0YXRlcyBzdW1tYXJ5Cj09PT09PT09PT09PT09PT09PT09CgpUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IGludGVyZmFjZXMgeW91IGNhbiB1c2UsIC9wcm9jL2FjcGkgc2hvdWxkCndvcmsgbGlrZSB0aGlzOgoKSW4gYSByZWFsbHkgcGVyZmVjdCB3b3JsZDoKZWNobyAxID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdGFuZGJ5CmVjaG8gMiA+IC9wcm9jL2FjcGkvc2xlZXAgICAgICAgIyBmb3Igc3VzcGVuZCB0byByYW0KZWNobyAzID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdXNwZW5kIHRvIHJhbSwgYnV0IHdpdGggbW9yZSBwb3dlciBjb25zZXJ2YXRpdmUKZWNobyA0ID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdXNwZW5kIHRvIGRpc2sKZWNobyA1ID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzaHV0ZG93biB1bmZyaWVuZGx5IHRoZSBzeXN0ZW0KCmFuZCBwZXJoYXBzCmVjaG8gNGIgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgIyBmb3Igc3VzcGVuZCB0byBkaXNrIHZpYSBzNGJpb3MKCkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09CgpROiB3ZWxsLCBzdXNwZW5kaW5nIGEgc2VydmVyIGlzIElNSE8gYSByZWFsbHkgc3R1cGlkIHRoaW5nLApidXQuLi4gKERpZWdvIFp1Y2NhdG8pOgoKQTogWW91IGJvdWdodCBuZXcgVVBTIGZvciB5b3VyIHNlcnZlci4gSG93IGRvIHlvdSBpbnN0YWxsIGl0IHdpdGhvdXQKYnJpbmdpbmcgbWFjaGluZSBkb3duPyBTdXNwZW5kIHRvIGRpc2ssIHJlYXJyYW5nZSBwb3dlciBjYWJsZXMsCnJlc3VtZS4KCllvdSBoYXZlIHlvdXIgc2VydmVyIG9uIFVQUy4gUG93ZXIgZGllZCwgYW5kIFVQUyBpcyBpbmRpY2F0aW5nIDMwCnNlY29uZHMgdG8gZmFpbHVyZS4gV2hhdCBkbyB5b3UgZG8/IFN1c3BlbmQgdG8gZGlzay4KCgpROiBNYXliZSBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGJ1dCB3aHkgZG9uJ3QgdGhlIHJlZ3VsYXIgSS9PIHBhdGhzIHdvcms/CgpBOiBXZSBkbyB1c2UgdGhlIHJlZ3VsYXIgSS9PIHBhdGhzLiBIb3dldmVyIHdlIGNhbm5vdCByZXN0b3JlIHRoZSBkYXRhCnRvIGl0cyBvcmlnaW5hbCBsb2NhdGlvbiBhcyB3ZSBsb2FkIGl0LiBUaGF0IHdvdWxkIGNyZWF0ZSBhbgppbmNvbnNpc3RlbnQga2VybmVsIHN0YXRlIHdoaWNoIHdvdWxkIGNlcnRhaW5seSByZXN1bHQgaW4gYW4gb29wcy4KSW5zdGVhZCwgd2UgbG9hZCB0aGUgaW1hZ2UgaW50byB1bnVzZWQgbWVtb3J5IGFuZCB0aGVuIGF0b21pY2FsbHkgY29weQppdCBiYWNrIHRvIGl0IG9yaWdpbmFsIGxvY2F0aW9uLiBUaGlzIGltcGxpZXMsIG9mIGNvdXJzZSwgYSBtYXhpbXVtCmltYWdlIHNpemUgb2YgaGFsZiB0aGUgYW1vdW50IG9mIG1lbW9yeS4KClRoZXJlIGFyZSB0d28gc29sdXRpb25zIHRvIHRoaXM6CgoqIHJlcXVpcmUgaGFsZiBvZiBtZW1vcnkgdG8gYmUgZnJlZSBkdXJpbmcgc3VzcGVuZC4gVGhhdCB3YXkgeW91IGNhbgpyZWFkICJuZXciIGRhdGEgb250byBmcmVlIHNwb3RzLCB0aGVuIGNsaSBhbmQgY29weQoKKiBhc3N1bWUgd2UgaGFkIHNwZWNpYWwgInBvbGxpbmciIGlkZSBkcml2ZXIgdGhhdCBvbmx5IHVzZXMgbWVtb3J5CmJldHdlZW4gMC02NDBLQi4gVGhhdCB3YXksIEknZCBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IDAtNjQwS0IgaXMgZnJlZQpkdXJpbmcgc3VzcGVuZGluZywgYnV0IG90aGVyd2lzZSBpdCB3b3VsZCB3b3JrLi4uCgpzdXNwZW5kMiBzaGFyZXMgdGhpcyBmdW5kYW1lbnRhbCBsaW1pdGF0aW9uLCBidXQgZG9lcyBub3QgaW5jbHVkZSB1c2VyCmRhdGEgYW5kIGRpc2sgY2FjaGVzIGludG8gInVzZWQgbWVtb3J5IiBieSBzYXZpbmcgdGhlbSBpbgphZHZhbmNlLiBUaGF0IG1lYW5zIHRoYXQgdGhlIGxpbWl0YXRpb24gZ29lcyBhd2F5IGluIHByYWN0aWNlLgoKUTogRG9lcyBsaW51eCBzdXBwb3J0IEFDUEkgUzQ/CgpBOiBZZXMuIFRoYXQncyB3aGF0IGVjaG8gcGxhdGZvcm0gPiAvc3lzL3Bvd2VyL2Rpc2sgZG9lcy4KClE6IFdoYXQgaXMgJ3N1c3BlbmQyJz8KCkE6IHN1c3BlbmQyIGlzICdTb2Z0d2FyZSBTdXNwZW5kIDInLCBhIGZvcmtlZCBpbXBsZW1lbnRhdGlvbiBvZgpzdXNwZW5kLXRvLWRpc2sgd2hpY2ggaXMgYXZhaWxhYmxlIGFzIHNlcGFyYXRlIHBhdGNoZXMgZm9yIDIuNCBhbmQgMi42Cmtlcm5lbHMgZnJvbSBzd3N1c3Auc291cmNlZm9yZ2UubmV0LiBJdCBpbmNsdWRlcyBzdXBwb3J0IGZvciBTTVAsIDRHQgpoaWdobWVtIGFuZCBwcmVlbXB0aW9uLiBJdCBhbHNvIGhhcyBhIGV4dGVuc2libGUgYXJjaGl0ZWN0dXJlIHRoYXQKYWxsb3dzIGZvciBhcmJpdHJhcnkgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBpbWFnZSAoY29tcHJlc3Npb24sCmVuY3J5cHRpb24pIGFuZCBhcmJpdHJhcnkgYmFja2VuZHMgZm9yIHdyaXRpbmcgdGhlIGltYWdlIChlZyB0byBzd2FwCm9yIGFuIE5GUyBzaGFyZVtXb3JrIEluIFByb2dyZXNzXSkuIFF1ZXN0aW9ucyByZWdhcmRpbmcgc3VzcGVuZDIKc2hvdWxkIGJlIHNlbnQgdG8gdGhlIG1haWxpbmcgbGlzdCBhdmFpbGFibGUgdGhyb3VnaCB0aGUgc3VzcGVuZDIKd2Vic2l0ZSwgYW5kIG5vdCB0byB0aGUgTGludXggS2VybmVsIE1haWxpbmcgTGlzdC4gV2UgYXJlIHdvcmtpbmcKdG93YXJkIG1lcmdpbmcgc3VzcGVuZDIgaW50byB0aGUgbWFpbmxpbmUga2VybmVsLgoKUTogQSBrZXJuZWwgdGhyZWFkIG11c3Qgdm9sdW50YXJpbHkgZnJlZXplIGl0c2VsZiAoY2FsbCAncmVmcmlnZXJhdG9yJykuCkkgZm91bmQgc29tZSBrZXJuZWwgdGhyZWFkcyB0aGF0IGRvbid0IGRvIGl0LCBhbmQgdGhleSBkb24ndCBmcmVlemUKc28gdGhlIHN5c3RlbSBjYW4ndCBzbGVlcC4gSXMgdGhpcyBhIGtub3duIGJlaGF2aW9yPwoKQTogQWxsIHN1Y2gga2VybmVsIHRocmVhZHMgbmVlZCB0byBiZSBmaXhlZCwgb25lIGJ5IG9uZS4gU2VsZWN0IHRoZQpwbGFjZSB3aGVyZSB0aGUgdGhyZWFkIGlzIHNhZmUgdG8gYmUgZnJvemVuIChubyBrZXJuZWwgc2VtYXBob3JlcwpzaG91bGQgYmUgaGVsZCBhdCB0aGF0IHBvaW50IGFuZCBpdCBtdXN0IGJlIHNhZmUgdG8gc2xlZXAgdGhlcmUpLCBhbmQKYWRkOgoKICAgICAgIHRyeV90b19mcmVlemUoKTsKCklmIHRoZSB0aHJlYWQgaXMgbmVlZGVkIGZvciB3cml0aW5nIHRoZSBpbWFnZSB0byBzdG9yYWdlLCB5b3Ugc2hvdWxkCmluc3RlYWQgc2V0IHRoZSBQRl9OT0ZSRUVaRSBwcm9jZXNzIGZsYWcgd2hlbiBjcmVhdGluZyB0aGUgdGhyZWFkIChhbmQKYmUgdmVyeSBjYXJlZnVsbCkuCgoKUTogV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGJldHdlZW4gInBsYXRmb3JtIiwgInNodXRkb3duIiBhbmQKImZpcm13YXJlIiBpbiAvc3lzL3Bvd2VyL2Rpc2s/CgpBOgoKc2h1dGRvd246IHNhdmUgc3RhdGUgaW4gbGludXgsIHRoZW4gdGVsbCBiaW9zIHRvIHBvd2VyZG93bgoKcGxhdGZvcm06IHNhdmUgc3RhdGUgaW4gbGludXgsIHRoZW4gdGVsbCBiaW9zIHRvIHBvd2VyZG93biBhbmQgYmxpbmsKICAgICAgICAgICJzdXNwZW5kZWQgbGVkIgoKZmlybXdhcmU6IHRlbGwgYmlvcyB0byBzYXZlIHN0YXRlIGl0c2VsZiBbbmVlZHMgQklPUy1zcGVjaWZpYyBzdXNwZW5kCgkgIHBhcnRpdGlvbiwgYW5kIGhhcyB2ZXJ5IGxpdHRsZSB0byBkbyB3aXRoIHN3c3VzcF0KCiJwbGF0Zm9ybSIgaXMgYWN0dWFsbHkgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCAic2h1dGRvd24iIGlzIG1vc3QKcmVsaWFibGUuCgpROiBJIGRvIG5vdCB1bmRlcnN0YW5kIHdoeSB5b3UgaGF2ZSBzdWNoIHN0cm9uZyBvYmplY3Rpb25zIHRvIGlkZWEgb2YKc2VsZWN0aXZlIHN1c3BlbmQuCgpBOiBEbyBzZWxlY3RpdmUgc3VzcGVuZCBkdXJpbmcgcnVudGltZSBwb3dlciBtYW5hZ21lbnQsIHRoYXQncyBva2F5LiBCdXQKaXRzIHVzZWxlc3MgZm9yIHN1c3BlbmQtdG8tZGlzay4gKEFuZCBJIGRvIG5vdCBzZWUgaG93IHlvdSBjb3VsZCB1c2UKaXQgZm9yIHN1c3BlbmQtdG8tcmFtLCBJIGhvcGUgeW91IGRvIG5vdCB3YW50IHRoYXQpLgoKTGV0cyBzZWUsIHNvIHlvdSBzdWdnZXN0IHRvCgoqIFNVU1BFTkQgYWxsIGJ1dCBzd2FwIGRldmljZSBhbmQgcGFyZW50cwoqIFNuYXBzaG90CiogV3JpdGUgaW1hZ2UgdG8gZGlzawoqIFNVU1BFTkQgc3dhcCBkZXZpY2UgYW5kIHBhcmVudHMKKiBQb3dlcmRvd24KCk9oIG5vLCB0aGF0IGRvZXMgbm90IHdvcmssIGlmIHN3YXAgZGV2aWNlIG9yIGl0cyBwYXJlbnRzIHVzZXMgRE1BLAp5b3UndmUgY29ycnVwdGVkIGRhdGEuIFlvdSdkIGhhdmUgdG8gZG8KCiogU1VTUEVORCBhbGwgYnV0IHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCiogRlJFRVpFIHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCiogU25hcHNob3QKKiBVTkZSRUVaRSBzd2FwIGRldmljZSBhbmQgcGFyZW50cwoqIFdyaXRlCiogU1VTUEVORCBzd2FwIGRldmljZSBhbmQgcGFyZW50cwoKV2hpY2ggbWVhbnMgdGhhdCB5b3Ugc3RpbGwgbmVlZCB0aGF0IEZSRUVaRSBzdGF0ZSwgYW5kIHlvdSBnZXQgbW9yZQpjb21wbGljYXRlZCBjb2RlLiAoQW5kIEkgaGF2ZSBub3QgeWV0IGludHJvZHVjZSBkZXRhaWxzIGxpa2Ugc3lzdGVtCmRldmljZXMpLgoKUTogVGhlcmUgZG9uJ3Qgc2VlbSB0byBiZSBhbnkgZ2VuZXJhbGx5IHVzZWZ1bCBiZWhhdmlvcmFsCmRpc3RpbmN0aW9ucyBiZXR3ZWVuIFNVU1BFTkQgYW5kIEZSRUVaRS4KCkE6IERvaW5nIFNVU1BFTkQgd2hlbiB5b3UgYXJlIGFza2VkIHRvIGRvIEZSRUVaRSBpcyBhbHdheXMgY29ycmVjdCwKYnV0IGl0IG1heSBiZSB1bm5lY2Nlc3NhcmlseSBzbG93LiBJZiB5b3Ugd2FudCBVU0IgdG8gc3RheSBzaW1wbGUsCnNsb3duZXNzIG1heSBub3QgbWF0dGVyIHRvIHlvdS4gSXQgY2FuIGFsd2F5cyBiZSBmaXhlZCBsYXRlci4KCkZvciBkZXZpY2VzIGxpa2UgZGlzayBpdCBkb2VzIG1hdHRlciwgeW91IGRvIG5vdCB3YW50IHRvIHNwaW5kb3duIGZvcgpGUkVFWkUuCgpROiBBZnRlciByZXN1bWluZywgc3lzdGVtIGlzIHBhZ2luZyBoZWF2aWxseSwgbGVhZGluZyB0byB2ZXJ5IGJhZCBpbnRlcmFjdGl2aXR5LgoKQTogVHJ5IHJ1bm5pbmcKCmNhdCBgY2F0IC9wcm9jL1swLTldKi9tYXBzIHwgZ3JlcCAvIHwgc2VkICdzOi4qIC86LzonIHwgc29ydCAtdWAgPiAvZGV2L251bGwKCmFmdGVyIHJlc3VtZS4gc3dhcG9mZiAtYTsgc3dhcG9uIC1hIG1heSBhbHNvIGJlIHVzZWZ1bGwuCgpROiBXaGF0IGhhcHBlbnMgdG8gZGV2aWNlcyBkdXJpbmcgc3dzdXNwPyBUaGV5IHNlZW0gdG8gYmUgcmVzdW1lZApkdXJpbmcgc3lzdGVtIHN1c3BlbmQ/CgpBOiBUaGF0J3MgY29ycmVjdC4gV2UgbmVlZCB0byByZXN1bWUgdGhlbSBpZiB3ZSB3YW50IHRvIHdyaXRlIGltYWdlIHRvCmRpc2suIFdob2xlIHNlcXVlbmNlIGdvZXMgbGlrZQoKICAgICAgU3VzcGVuZCBwYXJ0CiAgICAgIH5+fn5+fn5+fn5+fgogICAgICBydW5uaW5nIHN5c3RlbSwgdXNlciBhc2tzIGZvciBzdXNwZW5kLXRvLWRpc2sKCiAgICAgIHVzZXIgcHJvY2Vzc2VzIGFyZSBzdG9wcGVkCgogICAgICBzdXNwZW5kKFBNU0dfRlJFRVpFKTogZGV2aWNlcyBhcmUgZnJvemVuIHNvIHRoYXQgdGhleSBkb24ndCBpbnRlcmZlcmUKICAgICAgCQkgICAgICB3aXRoIHN0YXRlIHNuYXBzaG90CgogICAgICBzdGF0ZSBzbmFwc2hvdDogY29weSBvZiB3aG9sZSB1c2VkIG1lbW9yeSBpcyB0YWtlbiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKCiAgICAgIHJlc3VtZSgpOiBkZXZpY2VzIGFyZSB3b2tlbiB1cCBzbyB0aGF0IHdlIGNhbiB3cml0ZSBpbWFnZSB0byBzd2FwCgogICAgICB3cml0ZSBpbWFnZSB0byBzd2FwCgogICAgICBzdXNwZW5kKFBNU0dfU1VTUEVORCk6IHN1c3BlbmQgZGV2aWNlcyBzbyB0aGF0IHdlIGNhbiBwb3dlciBvZmYKCiAgICAgIHR1cm4gdGhlIHBvd2VyIG9mZgoKICAgICAgUmVzdW1lIHBhcnQKICAgICAgfn5+fn5+fn5+fn4KICAgICAgKGlzIGFjdHVhbGx5IHByZXR0eSBzaW1pbGFyKQoKICAgICAgcnVubmluZyBzeXN0ZW0sIHVzZXIgYXNrcyBmb3Igc3VzcGVuZC10by1kaXNrCgogICAgICB1c2VyIHByb2Nlc3NlcyBhcmUgc3RvcHBlZCAoaW4gY29tbW9uIGNhc2UgdGhlcmUgYXJlIG5vbmUsIGJ1dCB3aXRoIHJlc3VtZS1mcm9tLWluaXRyZCwgbm9vbmUga25vd3MpCgogICAgICByZWFkIGltYWdlIGZyb20gZGlzawoKICAgICAgc3VzcGVuZChQTVNHX0ZSRUVaRSk6IGRldmljZXMgYXJlIGZyb3plbiBzbyB0aGF0IHRoZXkgZG9uJ3QgaW50ZXJmZXJlCiAgICAgIAkJICAgICAgd2l0aCBpbWFnZSByZXN0b3JhdGlvbgoKICAgICAgaW1hZ2UgcmVzdG9yYXRpb246IHJld3JpdGUgbWVtb3J5IHdpdGggaW1hZ2UKCiAgICAgIHJlc3VtZSgpOiBkZXZpY2VzIGFyZSB3b2tlbiB1cCBzbyB0aGF0IHN5c3RlbSBjYW4gY29udGludWUKCiAgICAgIHRoYXcgYWxsIHVzZXIgcHJvY2Vzc2VzCgpROiBXaGF0IGlzIHRoaXMgJ0VuY3J5cHQgc3VzcGVuZCBpbWFnZScgZm9yPwoKQTogRmlyc3Qgb2YgYWxsOiBpdCBpcyBub3QgYSByZXBsYWNlbWVudCBmb3IgZG0tY3J5cHQgZW5jcnlwdGVkIHN3YXAuCkl0IGNhbm5vdCBwcm90ZWN0IHlvdXIgY29tcHV0ZXIgd2hpbGUgaXQgaXMgc3VzcGVuZGVkLiBJbnN0ZWFkIGl0IGRvZXMKcHJvdGVjdCBmcm9tIGxlYWtpbmcgc2Vuc2l0aXZlIGRhdGEgYWZ0ZXIgcmVzdW1lIGZyb20gc3VzcGVuZC4KClRoaW5rIG9mIHRoZSBmb2xsb3dpbmc6IHlvdSBzdXNwZW5kIHdoaWxlIGFuIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcKdGhhdCBrZWVwcyBzZW5zaXRpdmUgZGF0YSBpbiBtZW1vcnkuIFRoZSBhcHBsaWNhdGlvbiBpdHNlbGYgcHJldmVudHMKdGhlIGRhdGEgZnJvbSBiZWluZyBzd2FwcGVkIG91dC4gU3VzcGVuZCwgaG93ZXZlciwgbXVzdCB3cml0ZSB0aGVzZQpkYXRhIHRvIHN3YXAgdG8gYmUgYWJsZSB0byByZXN1bWUgbGF0ZXIgb24uIFdpdGhvdXQgc3VzcGVuZCBlbmNyeXB0aW9uCnlvdXIgc2Vuc2l0aXZlIGRhdGEgYXJlIHRoZW4gc3RvcmVkIGluIHBsYWludGV4dCBvbiBkaXNrLiAgVGhpcyBtZWFucwp0aGF0IGFmdGVyIHJlc3VtZSB5b3VyIHNlbnNpdGl2ZSBkYXRhIGFyZSBhY2Nlc3NpYmxlIHRvIGFsbAphcHBsaWNhdGlvbnMgaGF2aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHN3YXAgZGV2aWNlIHdoaWNoIHdhcyB1c2VkCmZvciBzdXNwZW5kLiBJZiB5b3UgZG9uJ3QgbmVlZCBzd2FwIGFmdGVyIHJlc3VtZSB0aGVzZSBkYXRhIGNhbiByZW1haW4Kb24gZGlzayB2aXJ0dWFsbHkgZm9yZXZlci4gVGh1cyBpdCBjYW4gaGFwcGVuIHRoYXQgeW91ciBzeXN0ZW0gZ2V0cwpicm9rZW4gaW4gd2Vla3MgbGF0ZXIgYW5kIHNlbnNpdGl2ZSBkYXRhIHdoaWNoIHlvdSB0aG91Z2h0IHdlcmUKZW5jcnlwdGVkIGFuZCBwcm90ZWN0ZWQgYXJlIHJldHJpZXZlZCBhbmQgc3RvbGVuIGZyb20gdGhlIHN3YXAgZGV2aWNlLgpUbyBwcmV2ZW50IHRoaXMgc2l0dWF0aW9uIHlvdSBzaG91bGQgdXNlICdFbmNyeXB0IHN1c3BlbmQgaW1hZ2UnLgoKRHVyaW5nIHN1c3BlbmQgYSB0ZW1wb3Jhcnkga2V5IGlzIGNyZWF0ZWQgYW5kIHRoaXMga2V5IGlzIHVzZWQgdG8KZW5jcnlwdCB0aGUgZGF0YSB3cml0dGVuIHRvIGRpc2suIFdoZW4sIGR1cmluZyByZXN1bWUsIHRoZSBkYXRhIHdhcwpyZWFkIGJhY2sgaW50byBtZW1vcnkgdGhlIHRlbXBvcmFyeSBrZXkgaXMgZGVzdHJveWVkIHdoaWNoIHNpbXBseQptZWFucyB0aGF0IGFsbCBkYXRhIHdyaXR0ZW4gdG8gZGlzayBkdXJpbmcgc3VzcGVuZCBhcmUgdGhlbgppbmFjY2Vzc2libGUgc28gdGhleSBjYW4ndCBiZSBzdG9sZW4gbGF0ZXIgb24uICBUaGUgb25seSB0aGluZyB0aGF0CnlvdSBtdXN0IHRoZW4gdGFrZSBjYXJlIG9mIGlzIHRoYXQgeW91IGNhbGwgJ21rc3dhcCcgZm9yIHRoZSBzd2FwCnBhcnRpdGlvbiB1c2VkIGZvciBzdXNwZW5kIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGR1cmluZyByZWd1bGFyCmJvb3QuIFRoaXMgYXNzZXJ0cyB0aGF0IGFueSB0ZW1wb3Jhcnkga2V5IGZyb20gYW4gb29wc2VkIHN1c3BlbmQgb3IKZnJvbSBhIGZhaWxlZCBvciBhYm9ydGVkIHJlc3VtZSBpcyBlcmFzZWQgZnJvbSB0aGUgc3dhcCBkZXZpY2UuCgpBcyBhIHJ1bGUgb2YgdGh1bWIgdXNlIGVuY3J5cHRlZCBzd2FwIHRvIHByb3RlY3QgeW91ciBkYXRhIHdoaWxlIHlvdXIKc3lzdGVtIGlzIHNodXQgZG93biBvciBzdXNwZW5kZWQuIEFkZGl0aW9uYWxseSB1c2UgdGhlIGVuY3J5cHRlZApzdXNwZW5kIGltYWdlIHRvIHByZXZlbnQgc2Vuc2l0aXZlIGRhdGEgZnJvbSBiZWluZyBzdG9sZW4gYWZ0ZXIKcmVzdW1lLgoKUTogV2h5IGNhbid0IHdlIHN1c3BlbmQgdG8gYSBzd2FwIGZpbGU/CgpBOiBCZWNhdXNlIGFjY2Vzc2luZyBzd2FwIGZpbGUgbmVlZHMgdGhlIGZpbGVzeXN0ZW0gbW91bnRlZCwgYW5kCmZpbGVzeXN0ZW0gbWlnaHQgZG8gc29tZXRoaW5nIHdyb25nIChsaWtlIHJlcGxheWluZyB0aGUgam91cm5hbCkKZHVyaW5nIG1vdW50LgoKVGhlcmUgYXJlIGZldyB3YXlzIHRvIGdldCB0aGF0IGZpeGVkOgoKMSkgUHJvYmFibHkgY291bGQgYmUgc29sdmVkIGJ5IG1vZGlmeWluZyBldmVyeSBmaWxlc3lzdGVtIHRvIHN1cHBvcnQKc29tZSBraW5kIG9mICJyZWFsbHkgcmVhZC1vbmx5ISIgb3B0aW9uLiBQYXRjaGVzIHdlbGNvbWUuCgoyKSBzdXNwZW5kMiBnZXRzIGFyb3VuZCB0aGF0IGJ5IHN0b3JpbmcgYWJzb2x1dGUgcG9zaXRpb25zIGluIG9uLWRpc2sKaW1hZ2UgKGFuZCBibG9ja3NpemUpLCB3aXRoIHJlc3VtZSBwYXJhbWV0ZXIgcG9pbnRpbmcgZGlyZWN0bHkgdG8Kc3VzcGVuZCBoZWFkZXIuCgpROiBJcyB0aGVyZSBhIG1heGltdW0gc3lzdGVtIFJBTSBzaXplIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHN3c3VzcD8KCkE6IEl0IHNob3VsZCB3b3JrIG9rYXkgd2l0aCBoaWdobWVtLgoKUTogRG9lcyBzd3N1c3AgKHRvIGRpc2spIHVzZSBvbmx5IG9uZSBzd2FwIHBhcnRpdGlvbiBvciBjYW4gaXQgdXNlCm11bHRpcGxlIHN3YXAgcGFydGl0aW9ucyAoYWdncmVnYXRlIHRoZW0gaW50byBvbmUgbG9naWNhbCBzcGFjZSk/CgpBOiBPbmx5IG9uZSBzd2FwIHBhcnRpdGlvbiwgc29ycnkuCgpROiBJZiBteSBhcHBsaWNhdGlvbihzKSBjYXVzZXMgbG90cyBvZiBtZW1vcnkgJiBzd2FwIHNwYWNlIHRvIGJlIHVzZWQKKG92ZXIgaGFsZiBvZiB0aGUgdG90YWwgc3lzdGVtIFJBTSksIGlzIGl0IGNvcnJlY3QgdGhhdCBpdCBpcyBsaWtlbHkKdG8gYmUgdXNlbGVzcyB0byB0cnkgdG8gc3VzcGVuZCB0byBkaXNrIHdoaWxlIHRoYXQgYXBwIGlzIHJ1bm5pbmc/CgpBOiBObywgaXQgc2hvdWxkIHdvcmsgb2theSwgYXMgbG9uZyBhcyB5b3VyIGFwcCBkb2VzIG5vdCBtbG9jaygpCml0LiBKdXN0IHByZXBhcmUgYmlnIGVub3VnaCBzd2FwIHBhcnRpdGlvbi4KClE6IFdoYXQgaW5mb3JtYXRpb24gaXMgdXNlZnVsbCBmb3IgZGVidWdnaW5nIHN1c3BlbmQtdG8tZGlzayBwcm9ibGVtcz8KCkE6IFdlbGwsIGxhc3QgbWVzc2FnZXMgb24gdGhlIHNjcmVlbiBhcmUgYWx3YXlzIHVzZWZ1bC4gSWYgc29tZXRoaW5nCmlzIGJyb2tlbiwgaXQgaXMgdXN1YWxseSBzb21lIGtlcm5lbCBkcml2ZXIsIHRoZXJlZm9yZSB0cnlpbmcgd2l0aCBhcwpsaXR0bGUgYXMgcG9zc2libGUgbW9kdWxlcyBsb2FkZWQgaGVscHMgYSBsb3QuIEkgYWxzbyBwcmVmZXIgcGVvcGxlIHRvCnN1c3BlbmQgZnJvbSBjb25zb2xlLCBwcmVmZXJhYmx5IHdpdGhvdXQgWCBydW5uaW5nLiBCb290aW5nIHdpdGgKaW5pdD0vYmluL2Jhc2gsIHRoZW4gc3dhcG9uIGFuZCBzdGFydGluZyBzdXNwZW5kIHNlcXVlbmNlIG1hbnVhbGx5CnVzdWFsbHkgZG9lcyB0aGUgdHJpY2suIFRoZW4gaXQgaXMgZ29vZCBpZGVhIHRvIHRyeSB3aXRoIGxhdGVzdAp2YW5pbGxhIGtlcm5lbC4KCgo=