U29tZSB3YXJuaW5ncywgZmlyc3QuCgogKiBCSUcgRkFUIFdBUk5JTkcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIElmIHlvdSB0b3VjaCBhbnl0aGluZyBvbiBkaXNrIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lLi4uCiAqCQkJCS4uLmtpc3MgeW91ciBkYXRhIGdvb2RieWUuCiAqCiAqIElmIHlvdSBkbyByZXN1bWUgZnJvbSBpbml0cmQgYWZ0ZXIgeW91ciBmaWxlc3lzdGVtcyBhcmUgbW91bnRlZC4uLgogKgkJCQkuLi5ieWUgYnllIHJvb3QgcGFydGl0aW9uLgogKgkJCVt0aGlzIGlzIGFjdHVhbGx5IHNhbWUgY2FzZSBhcyBhYm92ZV0KICoKICogSWYgeW91IGhhdmUgdW5zdXBwb3J0ZWQgKCopIGRldmljZXMgdXNpbmcgRE1BLCB5b3UgbWF5IGhhdmUgc29tZQogKiBwcm9ibGVtcy4gSWYgeW91ciBkaXNrIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHN1c3BlbmQuLi4gKElERSBkb2VzKSwKICogaXQgbWF5IGNhdXNlIHNvbWUgcHJvYmxlbXMsIHRvby4gSWYgeW91IGNoYW5nZSBrZXJuZWwgY29tbWFuZCBsaW5lCiAqIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lLCBpdCBtYXkgZG8gc29tZXRoaW5nIHdyb25nLiBJZiB5b3UgY2hhbmdlCiAqIHlvdXIgaGFyZHdhcmUgd2hpbGUgc3lzdGVtIGlzIHN1c3BlbmRlZC4uLiB3ZWxsLCBpdCB3YXMgbm90IGdvb2QgaWRlYTsKICogYnV0IGl0IHdpbGwgcHJvYmFibHkgb25seSBjcmFzaC4KICoKICogKCopIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgaXMgbmVlZGVkIHRvIG1ha2UgaXQgc2FmZS4KCllvdSBuZWVkIHRvIGFwcGVuZCByZXN1bWU9L2Rldi95b3VyX3N3YXBfcGFydGl0aW9uIHRvIGtlcm5lbCBjb21tYW5kCmxpbmUuIFRoZW4geW91IHN1c3BlbmQgYnkKCmVjaG8gc2h1dGRvd24gPiAvc3lzL3Bvd2VyL2Rpc2s7IGVjaG8gZGlzayA+IC9zeXMvcG93ZXIvc3RhdGUKCi4gSWYgeW91IGZlZWwgQUNQSSB3b3JrcyBwcmV0dHkgd2VsbCBvbiB5b3VyIHN5c3RlbSwgeW91IG1pZ2h0IHRyeQoKZWNobyBwbGF0Zm9ybSA+IC9zeXMvcG93ZXIvZGlzazsgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQoKSWYgeW91IHdhbnQgdG8gbGltaXQgdGhlIHN1c3BlbmQgaW1hZ2Ugc2l6ZSB0byBOIGJ5dGVzLCBkbwoKZWNobyBOID4gL3N5cy9wb3dlci9pbWFnZV9zaXplCgpiZWZvcmUgc3VzcGVuZCAoaXQgaXMgbGltaXRlZCB0byA1MDAgTUIgYnkgZGVmYXVsdCkuCgpFbmNyeXB0ZWQgc3VzcGVuZCBpbWFnZToKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCklmIHlvdSB3YW50IHRvIHN0b3JlIHlvdXIgc3VzcGVuZCBpbWFnZSBlbmNyeXB0ZWQgd2l0aCBhIHRlbXBvcmFyeQprZXkgdG8gcHJldmVudCBkYXRhIGdhdGhlcmluZyBhZnRlciByZXN1bWUgeW91IG11c3QgY29tcGlsZQpjcnlwdG8gYW5kIHRoZSBhZXMgYWxnb3JpdGhtIGludG8gdGhlIGtlcm5lbCAtIG1vZHVsZXMgd29uJ3Qgd29yawphcyB0aGV5IGNhbm5vdCBiZSBsb2FkZWQgYXQgcmVzdW1lIHRpbWUuCgoKQXJ0aWNsZSBhYm91dCBnb2FscyBhbmQgaW1wbGVtZW50YXRpb24gb2YgU29mdHdhcmUgU3VzcGVuZCBmb3IgTGludXgKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQXV0aG9yOiBHguFib3IgS3V0aQpMYXN0IHJldmlzZWQ6IDIwMDMtMTAtMjAgYnkgUGF2ZWwgTWFjaGVrCgpJZGVhIGFuZCBnb2FscyB0byBhY2hpZXZlCgpOb3dhZGF5cyBpdCBpcyBjb21tb24gaW4gc2V2ZXJhbCBsYXB0b3BzIHRoYXQgdGhleSBoYXZlIGEgc3VzcGVuZCBidXR0b24uIEl0CnNhdmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFjaGluZSB0byBhIGZpbGVzeXN0ZW0gb3IgdG8gYSBwYXJ0aXRpb24gYW5kIHN3aXRjaGVzCnRvIHN0YW5kYnkgbW9kZS4gTGF0ZXIgcmVzdW1pbmcgdGhlIG1hY2hpbmUgdGhlIHNhdmVkIHN0YXRlIGlzIGxvYWRlZCBiYWNrIHRvCnJhbSBhbmQgdGhlIG1hY2hpbmUgY2FuIGNvbnRpbnVlIGl0cyB3b3JrLiBJdCBoYXMgdHdvIHJlYWwgYmVuZWZpdHMuIEZpcnN0IHdlCnNhdmUgb3Vyc2VsdmVzIHRoZSB0aW1lIG1hY2hpbmUgZ29lcyBkb3duIGFuZCBsYXRlciBib290cyB1cCwgZW5lcmd5IGNvc3RzCmFyZSByZWFsIGhpZ2ggd2hlbiBydW5uaW5nIGZyb20gYmF0dGVyaWVzLiBUaGUgb3RoZXIgZ2FpbiBpcyB0aGF0IHdlIGRvbid0IGhhdmUgdG8KaW50ZXJydXB0IG91ciBwcm9ncmFtcyBzbyBwcm9jZXNzZXMgdGhhdCBhcmUgY2FsY3VsYXRpbmcgc29tZXRoaW5nIGZvciBhIGxvbmcKdGltZSBzaG91bGRuJ3QgbmVlZCB0byBiZSB3cml0dGVuIGludGVycnVwdGlibGUuCgpzd3N1c3Agc2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBtYWNoaW5lIGludG8gYWN0aXZlIHN3YXBzIGFuZCB0aGVuIHJlYm9vdHMgb3IKcG93ZXJkb3ducy4gIFlvdSBtdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgc3dhcCBwYXJ0aXRpb24gdG8gcmVzdW1lIGZyb20gd2l0aApgYHJlc3VtZT0nJyBrZXJuZWwgb3B0aW9uLiBJZiBzaWduYXR1cmUgaXMgZm91bmQgaXQgbG9hZHMgYW5kIHJlc3RvcmVzIHNhdmVkCnN0YXRlLiBJZiB0aGUgb3B0aW9uIGBgbm9yZXN1bWUnJyBpcyBzcGVjaWZpZWQgYXMgYSBib290IHBhcmFtZXRlciwgaXQgc2tpcHMKdGhlIHJlc3VtaW5nLgoKSW4gdGhlIG1lYW50aW1lIHdoaWxlIHRoZSBzeXN0ZW0gaXMgc3VzcGVuZGVkIHlvdSBzaG91bGQgbm90IGFkZC9yZW1vdmUgYW55Cm9mIHRoZSBoYXJkd2FyZSwgd3JpdGUgdG8gdGhlIGZpbGVzeXN0ZW1zLCBldGMuCgpTbGVlcCBzdGF0ZXMgc3VtbWFyeQo9PT09PT09PT09PT09PT09PT09PQoKVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCBpbnRlcmZhY2VzIHlvdSBjYW4gdXNlLCAvcHJvYy9hY3BpIHNob3VsZAp3b3JrIGxpa2UgdGhpczoKCkluIGEgcmVhbGx5IHBlcmZlY3Qgd29ybGQ6CmVjaG8gMSA+IC9wcm9jL2FjcGkvc2xlZXAgICAgICAgIyBmb3Igc3RhbmRieQplY2hvIDIgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgICMgZm9yIHN1c3BlbmQgdG8gcmFtCmVjaG8gMyA+IC9wcm9jL2FjcGkvc2xlZXAgICAgICAgIyBmb3Igc3VzcGVuZCB0byByYW0sIGJ1dCB3aXRoIG1vcmUgcG93ZXIgY29uc2VydmF0aXZlCmVjaG8gNCA+IC9wcm9jL2FjcGkvc2xlZXAgICAgICAgIyBmb3Igc3VzcGVuZCB0byBkaXNrCmVjaG8gNSA+IC9wcm9jL2FjcGkvc2xlZXAgICAgICAgIyBmb3Igc2h1dGRvd24gdW5mcmllbmRseSB0aGUgc3lzdGVtCgphbmQgcGVyaGFwcwplY2hvIDRiID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICMgZm9yIHN1c3BlbmQgdG8gZGlzayB2aWEgczRiaW9zCgpGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PQoKUTogd2VsbCwgc3VzcGVuZGluZyBhIHNlcnZlciBpcyBJTUhPIGEgcmVhbGx5IHN0dXBpZCB0aGluZywKYnV0Li4uIChEaWVnbyBadWNjYXRvKToKCkE6IFlvdSBib3VnaHQgbmV3IFVQUyBmb3IgeW91ciBzZXJ2ZXIuIEhvdyBkbyB5b3UgaW5zdGFsbCBpdCB3aXRob3V0CmJyaW5naW5nIG1hY2hpbmUgZG93bj8gU3VzcGVuZCB0byBkaXNrLCByZWFycmFuZ2UgcG93ZXIgY2FibGVzLApyZXN1bWUuCgpZb3UgaGF2ZSB5b3VyIHNlcnZlciBvbiBVUFMuIFBvd2VyIGRpZWQsIGFuZCBVUFMgaXMgaW5kaWNhdGluZyAzMApzZWNvbmRzIHRvIGZhaWx1cmUuIFdoYXQgZG8geW91IGRvPyBTdXNwZW5kIHRvIGRpc2suCgoKUTogTWF5YmUgSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBidXQgd2h5IGRvbid0IHRoZSByZWd1bGFyIEkvTyBwYXRocyB3b3JrPwoKQTogV2UgZG8gdXNlIHRoZSByZWd1bGFyIEkvTyBwYXRocy4gSG93ZXZlciB3ZSBjYW5ub3QgcmVzdG9yZSB0aGUgZGF0YQp0byBpdHMgb3JpZ2luYWwgbG9jYXRpb24gYXMgd2UgbG9hZCBpdC4gVGhhdCB3b3VsZCBjcmVhdGUgYW4KaW5jb25zaXN0ZW50IGtlcm5lbCBzdGF0ZSB3aGljaCB3b3VsZCBjZXJ0YWlubHkgcmVzdWx0IGluIGFuIG9vcHMuCkluc3RlYWQsIHdlIGxvYWQgdGhlIGltYWdlIGludG8gdW51c2VkIG1lbW9yeSBhbmQgdGhlbiBhdG9taWNhbGx5IGNvcHkKaXQgYmFjayB0byBpdCBvcmlnaW5hbCBsb2NhdGlvbi4gVGhpcyBpbXBsaWVzLCBvZiBjb3Vyc2UsIGEgbWF4aW11bQppbWFnZSBzaXplIG9mIGhhbGYgdGhlIGFtb3VudCBvZiBtZW1vcnkuCgpUaGVyZSBhcmUgdHdvIHNvbHV0aW9ucyB0byB0aGlzOgoKKiByZXF1aXJlIGhhbGYgb2YgbWVtb3J5IHRvIGJlIGZyZWUgZHVyaW5nIHN1c3BlbmQuIFRoYXQgd2F5IHlvdSBjYW4KcmVhZCAibmV3IiBkYXRhIG9udG8gZnJlZSBzcG90cywgdGhlbiBjbGkgYW5kIGNvcHkKCiogYXNzdW1lIHdlIGhhZCBzcGVjaWFsICJwb2xsaW5nIiBpZGUgZHJpdmVyIHRoYXQgb25seSB1c2VzIG1lbW9yeQpiZXR3ZWVuIDAtNjQwS0IuIFRoYXQgd2F5LCBJJ2QgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCAwLTY0MEtCIGlzIGZyZWUKZHVyaW5nIHN1c3BlbmRpbmcsIGJ1dCBvdGhlcndpc2UgaXQgd291bGQgd29yay4uLgoKc3VzcGVuZDIgc2hhcmVzIHRoaXMgZnVuZGFtZW50YWwgbGltaXRhdGlvbiwgYnV0IGRvZXMgbm90IGluY2x1ZGUgdXNlcgpkYXRhIGFuZCBkaXNrIGNhY2hlcyBpbnRvICJ1c2VkIG1lbW9yeSIgYnkgc2F2aW5nIHRoZW0gaW4KYWR2YW5jZS4gVGhhdCBtZWFucyB0aGF0IHRoZSBsaW1pdGF0aW9uIGdvZXMgYXdheSBpbiBwcmFjdGljZS4KClE6IERvZXMgbGludXggc3VwcG9ydCBBQ1BJIFM0PwoKQTogWWVzLiBUaGF0J3Mgd2hhdCBlY2hvIHBsYXRmb3JtID4gL3N5cy9wb3dlci9kaXNrIGRvZXMuCgpROiBXaGF0IGlzICdzdXNwZW5kMic/CgpBOiBzdXNwZW5kMiBpcyAnU29mdHdhcmUgU3VzcGVuZCAyJywgYSBmb3JrZWQgaW1wbGVtZW50YXRpb24gb2YKc3VzcGVuZC10by1kaXNrIHdoaWNoIGlzIGF2YWlsYWJsZSBhcyBzZXBhcmF0ZSBwYXRjaGVzIGZvciAyLjQgYW5kIDIuNgprZXJuZWxzIGZyb20gc3dzdXNwLnNvdXJjZWZvcmdlLm5ldC4gSXQgaW5jbHVkZXMgc3VwcG9ydCBmb3IgU01QLCA0R0IKaGlnaG1lbSBhbmQgcHJlZW1wdGlvbi4gSXQgYWxzbyBoYXMgYSBleHRlbnNpYmxlIGFyY2hpdGVjdHVyZSB0aGF0CmFsbG93cyBmb3IgYXJiaXRyYXJ5IHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgaW1hZ2UgKGNvbXByZXNzaW9uLAplbmNyeXB0aW9uKSBhbmQgYXJiaXRyYXJ5IGJhY2tlbmRzIGZvciB3cml0aW5nIHRoZSBpbWFnZSAoZWcgdG8gc3dhcApvciBhbiBORlMgc2hhcmVbV29yayBJbiBQcm9ncmVzc10pLiBRdWVzdGlvbnMgcmVnYXJkaW5nIHN1c3BlbmQyCnNob3VsZCBiZSBzZW50IHRvIHRoZSBtYWlsaW5nIGxpc3QgYXZhaWxhYmxlIHRocm91Z2ggdGhlIHN1c3BlbmQyCndlYnNpdGUsIGFuZCBub3QgdG8gdGhlIExpbnV4IEtlcm5lbCBNYWlsaW5nIExpc3QuIFdlIGFyZSB3b3JraW5nCnRvd2FyZCBtZXJnaW5nIHN1c3BlbmQyIGludG8gdGhlIG1haW5saW5lIGtlcm5lbC4KClE6IEEga2VybmVsIHRocmVhZCBtdXN0IHZvbHVudGFyaWx5IGZyZWV6ZSBpdHNlbGYgKGNhbGwgJ3JlZnJpZ2VyYXRvcicpLgpJIGZvdW5kIHNvbWUga2VybmVsIHRocmVhZHMgdGhhdCBkb24ndCBkbyBpdCwgYW5kIHRoZXkgZG9uJ3QgZnJlZXplCnNvIHRoZSBzeXN0ZW0gY2FuJ3Qgc2xlZXAuIElzIHRoaXMgYSBrbm93biBiZWhhdmlvcj8KCkE6IEFsbCBzdWNoIGtlcm5lbCB0aHJlYWRzIG5lZWQgdG8gYmUgZml4ZWQsIG9uZSBieSBvbmUuIFNlbGVjdCB0aGUKcGxhY2Ugd2hlcmUgdGhlIHRocmVhZCBpcyBzYWZlIHRvIGJlIGZyb3plbiAobm8ga2VybmVsIHNlbWFwaG9yZXMKc2hvdWxkIGJlIGhlbGQgYXQgdGhhdCBwb2ludCBhbmQgaXQgbXVzdCBiZSBzYWZlIHRvIHNsZWVwIHRoZXJlKSwgYW5kCmFkZDoKCiAgICAgICB0cnlfdG9fZnJlZXplKCk7CgpJZiB0aGUgdGhyZWFkIGlzIG5lZWRlZCBmb3Igd3JpdGluZyB0aGUgaW1hZ2UgdG8gc3RvcmFnZSwgeW91IHNob3VsZAppbnN0ZWFkIHNldCB0aGUgUEZfTk9GUkVFWkUgcHJvY2VzcyBmbGFnIHdoZW4gY3JlYXRpbmcgdGhlIHRocmVhZCAoYW5kCmJlIHZlcnkgY2FyZWZ1bGwpLgoKClE6IFdoYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBiZXR3ZWVuICJwbGF0Zm9ybSIsICJzaHV0ZG93biIgYW5kCiJmaXJtd2FyZSIgaW4gL3N5cy9wb3dlci9kaXNrPwoKQToKCnNodXRkb3duOiBzYXZlIHN0YXRlIGluIGxpbnV4LCB0aGVuIHRlbGwgYmlvcyB0byBwb3dlcmRvd24KCnBsYXRmb3JtOiBzYXZlIHN0YXRlIGluIGxpbnV4LCB0aGVuIHRlbGwgYmlvcyB0byBwb3dlcmRvd24gYW5kIGJsaW5rCiAgICAgICAgICAic3VzcGVuZGVkIGxlZCIKCmZpcm13YXJlOiB0ZWxsIGJpb3MgdG8gc2F2ZSBzdGF0ZSBpdHNlbGYgW25lZWRzIEJJT1Mtc3BlY2lmaWMgc3VzcGVuZAoJICBwYXJ0aXRpb24sIGFuZCBoYXMgdmVyeSBsaXR0bGUgdG8gZG8gd2l0aCBzd3N1c3BdCgoicGxhdGZvcm0iIGlzIGFjdHVhbGx5IHJpZ2h0IHRoaW5nIHRvIGRvLCBidXQgInNodXRkb3duIiBpcyBtb3N0CnJlbGlhYmxlLgoKUTogSSBkbyBub3QgdW5kZXJzdGFuZCB3aHkgeW91IGhhdmUgc3VjaCBzdHJvbmcgb2JqZWN0aW9ucyB0byBpZGVhIG9mCnNlbGVjdGl2ZSBzdXNwZW5kLgoKQTogRG8gc2VsZWN0aXZlIHN1c3BlbmQgZHVyaW5nIHJ1bnRpbWUgcG93ZXIgbWFuYWdtZW50LCB0aGF0J3Mgb2theS4gQnV0Cml0cyB1c2VsZXNzIGZvciBzdXNwZW5kLXRvLWRpc2suIChBbmQgSSBkbyBub3Qgc2VlIGhvdyB5b3UgY291bGQgdXNlCml0IGZvciBzdXNwZW5kLXRvLXJhbSwgSSBob3BlIHlvdSBkbyBub3Qgd2FudCB0aGF0KS4KCkxldHMgc2VlLCBzbyB5b3Ugc3VnZ2VzdCB0bwoKKiBTVVNQRU5EIGFsbCBidXQgc3dhcCBkZXZpY2UgYW5kIHBhcmVudHMKKiBTbmFwc2hvdAoqIFdyaXRlIGltYWdlIHRvIGRpc2sKKiBTVVNQRU5EIHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCiogUG93ZXJkb3duCgpPaCBubywgdGhhdCBkb2VzIG5vdCB3b3JrLCBpZiBzd2FwIGRldmljZSBvciBpdHMgcGFyZW50cyB1c2VzIERNQSwKeW91J3ZlIGNvcnJ1cHRlZCBkYXRhLiBZb3UnZCBoYXZlIHRvIGRvCgoqIFNVU1BFTkQgYWxsIGJ1dCBzd2FwIGRldmljZSBhbmQgcGFyZW50cwoqIEZSRUVaRSBzd2FwIGRldmljZSBhbmQgcGFyZW50cwoqIFNuYXBzaG90CiogVU5GUkVFWkUgc3dhcCBkZXZpY2UgYW5kIHBhcmVudHMKKiBXcml0ZQoqIFNVU1BFTkQgc3dhcCBkZXZpY2UgYW5kIHBhcmVudHMKCldoaWNoIG1lYW5zIHRoYXQgeW91IHN0aWxsIG5lZWQgdGhhdCBGUkVFWkUgc3RhdGUsIGFuZCB5b3UgZ2V0IG1vcmUKY29tcGxpY2F0ZWQgY29kZS4gKEFuZCBJIGhhdmUgbm90IHlldCBpbnRyb2R1Y2UgZGV0YWlscyBsaWtlIHN5c3RlbQpkZXZpY2VzKS4KClE6IFRoZXJlIGRvbid0IHNlZW0gdG8gYmUgYW55IGdlbmVyYWxseSB1c2VmdWwgYmVoYXZpb3JhbApkaXN0aW5jdGlvbnMgYmV0d2VlbiBTVVNQRU5EIGFuZCBGUkVFWkUuCgpBOiBEb2luZyBTVVNQRU5EIHdoZW4geW91IGFyZSBhc2tlZCB0byBkbyBGUkVFWkUgaXMgYWx3YXlzIGNvcnJlY3QsCmJ1dCBpdCBtYXkgYmUgdW5uZWNjZXNzYXJpbHkgc2xvdy4gSWYgeW91IHdhbnQgVVNCIHRvIHN0YXkgc2ltcGxlLApzbG93bmVzcyBtYXkgbm90IG1hdHRlciB0byB5b3UuIEl0IGNhbiBhbHdheXMgYmUgZml4ZWQgbGF0ZXIuCgpGb3IgZGV2aWNlcyBsaWtlIGRpc2sgaXQgZG9lcyBtYXR0ZXIsIHlvdSBkbyBub3Qgd2FudCB0byBzcGluZG93biBmb3IKRlJFRVpFLgoKUTogQWZ0ZXIgcmVzdW1pbmcsIHN5c3RlbSBpcyBwYWdpbmcgaGVhdmlsbHksIGxlYWRpbmcgdG8gdmVyeSBiYWQgaW50ZXJhY3Rpdml0eS4KCkE6IFRyeSBydW5uaW5nCgpjYXQgYGNhdCAvcHJvYy9bMC05XSovbWFwcyB8IGdyZXAgLyB8IHNlZCAnczouKiAvOi86JyB8IHNvcnQgLXVgID4gL2Rldi9udWxsCgphZnRlciByZXN1bWUuIHN3YXBvZmYgLWE7IHN3YXBvbiAtYSBtYXkgYWxzbyBiZSB1c2VmdWwuCgpROiBXaGF0IGhhcHBlbnMgdG8gZGV2aWNlcyBkdXJpbmcgc3dzdXNwPyBUaGV5IHNlZW0gdG8gYmUgcmVzdW1lZApkdXJpbmcgc3lzdGVtIHN1c3BlbmQ/CgpBOiBUaGF0J3MgY29ycmVjdC4gV2UgbmVlZCB0byByZXN1bWUgdGhlbSBpZiB3ZSB3YW50IHRvIHdyaXRlIGltYWdlIHRvCmRpc2suIFdob2xlIHNlcXVlbmNlIGdvZXMgbGlrZQoKICAgICAgU3VzcGVuZCBwYXJ0CiAgICAgIH5+fn5+fn5+fn5+fgogICAgICBydW5uaW5nIHN5c3RlbSwgdXNlciBhc2tzIGZvciBzdXNwZW5kLXRvLWRpc2sKCiAgICAgIHVzZXIgcHJvY2Vzc2VzIGFyZSBzdG9wcGVkCgogICAgICBzdXNwZW5kKFBNU0dfRlJFRVpFKTogZGV2aWNlcyBhcmUgZnJvemVuIHNvIHRoYXQgdGhleSBkb24ndCBpbnRlcmZlcmUKICAgICAgCQkgICAgICB3aXRoIHN0YXRlIHNuYXBzaG90CgogICAgICBzdGF0ZSBzbmFwc2hvdDogY29weSBvZiB3aG9sZSB1c2VkIG1lbW9yeSBpcyB0YWtlbiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKCiAgICAgIHJlc3VtZSgpOiBkZXZpY2VzIGFyZSB3b2tlbiB1cCBzbyB0aGF0IHdlIGNhbiB3cml0ZSBpbWFnZSB0byBzd2FwCgogICAgICB3cml0ZSBpbWFnZSB0byBzd2FwCgogICAgICBzdXNwZW5kKFBNU0dfU1VTUEVORCk6IHN1c3BlbmQgZGV2aWNlcyBzbyB0aGF0IHdlIGNhbiBwb3dlciBvZmYKCiAgICAgIHR1cm4gdGhlIHBvd2VyIG9mZgoKICAgICAgUmVzdW1lIHBhcnQKICAgICAgfn5+fn5+fn5+fn4KICAgICAgKGlzIGFjdHVhbGx5IHByZXR0eSBzaW1pbGFyKQoKICAgICAgcnVubmluZyBzeXN0ZW0sIHVzZXIgYXNrcyBmb3Igc3VzcGVuZC10by1kaXNrCgogICAgICB1c2VyIHByb2Nlc3NlcyBhcmUgc3RvcHBlZCAoaW4gY29tbW9uIGNhc2UgdGhlcmUgYXJlIG5vbmUsIGJ1dCB3aXRoIHJlc3VtZS1mcm9tLWluaXRyZCwgbm9vbmUga25vd3MpCgogICAgICByZWFkIGltYWdlIGZyb20gZGlzawoKICAgICAgc3VzcGVuZChQTVNHX0ZSRUVaRSk6IGRldmljZXMgYXJlIGZyb3plbiBzbyB0aGF0IHRoZXkgZG9uJ3QgaW50ZXJmZXJlCiAgICAgIAkJICAgICAgd2l0aCBpbWFnZSByZXN0b3JhdGlvbgoKICAgICAgaW1hZ2UgcmVzdG9yYXRpb246IHJld3JpdGUgbWVtb3J5IHdpdGggaW1hZ2UKCiAgICAgIHJlc3VtZSgpOiBkZXZpY2VzIGFyZSB3b2tlbiB1cCBzbyB0aGF0IHN5c3RlbSBjYW4gY29udGludWUKCiAgICAgIHRoYXcgYWxsIHVzZXIgcHJvY2Vzc2VzCgpROiBXaGF0IGlzIHRoaXMgJ0VuY3J5cHQgc3VzcGVuZCBpbWFnZScgZm9yPwoKQTogRmlyc3Qgb2YgYWxsOiBpdCBpcyBub3QgYSByZXBsYWNlbWVudCBmb3IgZG0tY3J5cHQgZW5jcnlwdGVkIHN3YXAuCkl0IGNhbm5vdCBwcm90ZWN0IHlvdXIgY29tcHV0ZXIgd2hpbGUgaXQgaXMgc3VzcGVuZGVkLiBJbnN0ZWFkIGl0IGRvZXMKcHJvdGVjdCBmcm9tIGxlYWtpbmcgc2Vuc2l0aXZlIGRhdGEgYWZ0ZXIgcmVzdW1lIGZyb20gc3VzcGVuZC4KClRoaW5rIG9mIHRoZSBmb2xsb3dpbmc6IHlvdSBzdXNwZW5kIHdoaWxlIGFuIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcKdGhhdCBrZWVwcyBzZW5zaXRpdmUgZGF0YSBpbiBtZW1vcnkuIFRoZSBhcHBsaWNhdGlvbiBpdHNlbGYgcHJldmVudHMKdGhlIGRhdGEgZnJvbSBiZWluZyBzd2FwcGVkIG91dC4gU3VzcGVuZCwgaG93ZXZlciwgbXVzdCB3cml0ZSB0aGVzZQpkYXRhIHRvIHN3YXAgdG8gYmUgYWJsZSB0byByZXN1bWUgbGF0ZXIgb24uIFdpdGhvdXQgc3VzcGVuZCBlbmNyeXB0aW9uCnlvdXIgc2Vuc2l0aXZlIGRhdGEgYXJlIHRoZW4gc3RvcmVkIGluIHBsYWludGV4dCBvbiBkaXNrLiAgVGhpcyBtZWFucwp0aGF0IGFmdGVyIHJlc3VtZSB5b3VyIHNlbnNpdGl2ZSBkYXRhIGFyZSBhY2Nlc3NpYmxlIHRvIGFsbAphcHBsaWNhdGlvbnMgaGF2aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHN3YXAgZGV2aWNlIHdoaWNoIHdhcyB1c2VkCmZvciBzdXNwZW5kLiBJZiB5b3UgZG9uJ3QgbmVlZCBzd2FwIGFmdGVyIHJlc3VtZSB0aGVzZSBkYXRhIGNhbiByZW1haW4Kb24gZGlzayB2aXJ0dWFsbHkgZm9yZXZlci4gVGh1cyBpdCBjYW4gaGFwcGVuIHRoYXQgeW91ciBzeXN0ZW0gZ2V0cwpicm9rZW4gaW4gd2Vla3MgbGF0ZXIgYW5kIHNlbnNpdGl2ZSBkYXRhIHdoaWNoIHlvdSB0aG91Z2h0IHdlcmUKZW5jcnlwdGVkIGFuZCBwcm90ZWN0ZWQgYXJlIHJldHJpZXZlZCBhbmQgc3RvbGVuIGZyb20gdGhlIHN3YXAgZGV2aWNlLgpUbyBwcmV2ZW50IHRoaXMgc2l0dWF0aW9uIHlvdSBzaG91bGQgdXNlICdFbmNyeXB0IHN1c3BlbmQgaW1hZ2UnLgoKRHVyaW5nIHN1c3BlbmQgYSB0ZW1wb3Jhcnkga2V5IGlzIGNyZWF0ZWQgYW5kIHRoaXMga2V5IGlzIHVzZWQgdG8KZW5jcnlwdCB0aGUgZGF0YSB3cml0dGVuIHRvIGRpc2suIFdoZW4sIGR1cmluZyByZXN1bWUsIHRoZSBkYXRhIHdhcwpyZWFkIGJhY2sgaW50byBtZW1vcnkgdGhlIHRlbXBvcmFyeSBrZXkgaXMgZGVzdHJveWVkIHdoaWNoIHNpbXBseQptZWFucyB0aGF0IGFsbCBkYXRhIHdyaXR0ZW4gdG8gZGlzayBkdXJpbmcgc3VzcGVuZCBhcmUgdGhlbgppbmFjY2Vzc2libGUgc28gdGhleSBjYW4ndCBiZSBzdG9sZW4gbGF0ZXIgb24uICBUaGUgb25seSB0aGluZyB0aGF0CnlvdSBtdXN0IHRoZW4gdGFrZSBjYXJlIG9mIGlzIHRoYXQgeW91IGNhbGwgJ21rc3dhcCcgZm9yIHRoZSBzd2FwCnBhcnRpdGlvbiB1c2VkIGZvciBzdXNwZW5kIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGR1cmluZyByZWd1bGFyCmJvb3QuIFRoaXMgYXNzZXJ0cyB0aGF0IGFueSB0ZW1wb3Jhcnkga2V5IGZyb20gYW4gb29wc2VkIHN1c3BlbmQgb3IKZnJvbSBhIGZhaWxlZCBvciBhYm9ydGVkIHJlc3VtZSBpcyBlcmFzZWQgZnJvbSB0aGUgc3dhcCBkZXZpY2UuCgpBcyBhIHJ1bGUgb2YgdGh1bWIgdXNlIGVuY3J5cHRlZCBzd2FwIHRvIHByb3RlY3QgeW91ciBkYXRhIHdoaWxlIHlvdXIKc3lzdGVtIGlzIHNodXQgZG93biBvciBzdXNwZW5kZWQuIEFkZGl0aW9uYWxseSB1c2UgdGhlIGVuY3J5cHRlZApzdXNwZW5kIGltYWdlIHRvIHByZXZlbnQgc2Vuc2l0aXZlIGRhdGEgZnJvbSBiZWluZyBzdG9sZW4gYWZ0ZXIKcmVzdW1lLgoKUTogV2h5IGNhbid0IHdlIHN1c3BlbmQgdG8gYSBzd2FwIGZpbGU/CgpBOiBCZWNhdXNlIGFjY2Vzc2luZyBzd2FwIGZpbGUgbmVlZHMgdGhlIGZpbGVzeXN0ZW0gbW91bnRlZCwgYW5kCmZpbGVzeXN0ZW0gbWlnaHQgZG8gc29tZXRoaW5nIHdyb25nIChsaWtlIHJlcGxheWluZyB0aGUgam91cm5hbCkKZHVyaW5nIG1vdW50LgoKVGhlcmUgYXJlIGZldyB3YXlzIHRvIGdldCB0aGF0IGZpeGVkOgoKMSkgUHJvYmFibHkgY291bGQgYmUgc29sdmVkIGJ5IG1vZGlmeWluZyBldmVyeSBmaWxlc3lzdGVtIHRvIHN1cHBvcnQKc29tZSBraW5kIG9mICJyZWFsbHkgcmVhZC1vbmx5ISIgb3B0aW9uLiBQYXRjaGVzIHdlbGNvbWUuCgoyKSBzdXNwZW5kMiBnZXRzIGFyb3VuZCB0aGF0IGJ5IHN0b3JpbmcgYWJzb2x1dGUgcG9zaXRpb25zIGluIG9uLWRpc2sKaW1hZ2UgKGFuZCBibG9ja3NpemUpLCB3aXRoIHJlc3VtZSBwYXJhbWV0ZXIgcG9pbnRpbmcgZGlyZWN0bHkgdG8Kc3VzcGVuZCBoZWFkZXIuCgpROiBJcyB0aGVyZSBhIG1heGltdW0gc3lzdGVtIFJBTSBzaXplIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHN3c3VzcD8KCkE6IEl0IHNob3VsZCB3b3JrIG9rYXkgd2l0aCBoaWdobWVtLgoKUTogRG9lcyBzd3N1c3AgKHRvIGRpc2spIHVzZSBvbmx5IG9uZSBzd2FwIHBhcnRpdGlvbiBvciBjYW4gaXQgdXNlCm11bHRpcGxlIHN3YXAgcGFydGl0aW9ucyAoYWdncmVnYXRlIHRoZW0gaW50byBvbmUgbG9naWNhbCBzcGFjZSk/CgpBOiBPbmx5IG9uZSBzd2FwIHBhcnRpdGlvbiwgc29ycnkuCgpROiBJZiBteSBhcHBsaWNhdGlvbihzKSBjYXVzZXMgbG90cyBvZiBtZW1vcnkgJiBzd2FwIHNwYWNlIHRvIGJlIHVzZWQKKG92ZXIgaGFsZiBvZiB0aGUgdG90YWwgc3lzdGVtIFJBTSksIGlzIGl0IGNvcnJlY3QgdGhhdCBpdCBpcyBsaWtlbHkKdG8gYmUgdXNlbGVzcyB0byB0cnkgdG8gc3VzcGVuZCB0byBkaXNrIHdoaWxlIHRoYXQgYXBwIGlzIHJ1bm5pbmc/CgpBOiBObywgaXQgc2hvdWxkIHdvcmsgb2theSwgYXMgbG9uZyBhcyB5b3VyIGFwcCBkb2VzIG5vdCBtbG9jaygpCml0LiBKdXN0IHByZXBhcmUgYmlnIGVub3VnaCBzd2FwIHBhcnRpdGlvbi4KClE6IFdoYXQgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgc3VzcGVuZC10by1kaXNrIHByb2JsZW1zPwoKQTogV2VsbCwgbGFzdCBtZXNzYWdlcyBvbiB0aGUgc2NyZWVuIGFyZSBhbHdheXMgdXNlZnVsLiBJZiBzb21ldGhpbmcKaXMgYnJva2VuLCBpdCBpcyB1c3VhbGx5IHNvbWUga2VybmVsIGRyaXZlciwgdGhlcmVmb3JlIHRyeWluZyB3aXRoIGFzCmxpdHRsZSBhcyBwb3NzaWJsZSBtb2R1bGVzIGxvYWRlZCBoZWxwcyBhIGxvdC4gSSBhbHNvIHByZWZlciBwZW9wbGUgdG8Kc3VzcGVuZCBmcm9tIGNvbnNvbGUsIHByZWZlcmFibHkgd2l0aG91dCBYIHJ1bm5pbmcuIEJvb3Rpbmcgd2l0aAppbml0PS9iaW4vYmFzaCwgdGhlbiBzd2Fwb24gYW5kIHN0YXJ0aW5nIHN1c3BlbmQgc2VxdWVuY2UgbWFudWFsbHkKdXN1YWxseSBkb2VzIHRoZSB0cmljay4gVGhlbiBpdCBpcyBnb29kIGlkZWEgdG8gdHJ5IHdpdGggbGF0ZXN0CnZhbmlsbGEga2VybmVsLgoKCg==