ICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVByb3h5IGhvdy10bwogICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gMS42LWRldgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGx5IHRhcnJlYXUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMTUvMDkvMjgKCgoxKSBIb3cgdG8gYnVpbGQgaXQKLS0tLS0tLS0tLS0tLS0tLS0tCgpGaXJzdCwgcGxlYXNlIG5vdGUgdGhhdCB0aGlzIHZlcnNpb24gaXMgYSBkZXZlbG9wbWVudCB2ZXJzaW9uLCBzbyBpbiBnZW5lcmFsIGlmCnlvdSBhcmUgbm90IHVzZWQgdG8gYnVpbGQgZnJvbSBzb3VyY2VzIG9yIGlmIHlvdSBkb24ndCBoYXZlIHRoZSB0aW1lIHRvIHRyYWNrCnZlcnkgZnJlcXVlbnQgdXBkYXRlcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpbnN0ZWFkIHlvdSBzd2l0Y2ggdG8gdGhlIHN0YWJsZQp2ZXJzaW9uICgxLjUpIG9yIGZvbGxvdyB0aGUgcGFja2FnZWQgdXBkYXRlcyBwcm92aWRlZCBieSB5b3VyIHNvZnR3YXJlIHZlbmRvcgpvciBMaW51eCBkaXN0cmlidXRpb24uIE1vc3Qgb2YgdGhlbSBhcmUgdGFraW5nIHRoaXMgdGFzayBzZXJpb3VzbHkgYW5kIGFyZQpkb2luZyBhIGdvb2Qgam9iLiBJZiBmb3IgYW55IHJlYXNvbiB5b3UnZCBwcmVmZXIgYSBkaWZmZXJlbnQgdmVyc2lvbiB0aGFuIHRoZQpvbmUgcGFja2FnZWQgZm9yIHlvdXIgc3lzdGVtLCBvciB0byBnZXQgc29tZSBjb21tZXJjaWFsIHN1cHBvcnQsIG90aGVyIGNob2ljZXMKYXJlIGF2YWlsYWJsZSBhdCA6CgogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmhhcHJveHkuY29tLwoKVG8gYnVpbGQgaGFwcm94eSwgeW91IHdpbGwgbmVlZCA6CiAgLSBHTlUgbWFrZS4gTmVpdGhlciBTb2xhcmlzIG5vciBPcGVuQlNEJ3MgbWFrZSB3b3JrIHdpdGggdGhlIEdOVSBNYWtlZmlsZS4KICAgIElmIHlvdSBnZXQgbWFueSBzeW50YXggZXJyb3JzIHdoZW4gcnVubmluZyAibWFrZSIsIHlvdSBtYXkgd2FudCB0byByZXRyeQogICAgd2l0aCAiZ21ha2UiIHdoaWNoIGlzIHRoZSBuYW1lIGNvbW1vbmx5IHVzZWQgZm9yIEdOVSBtYWtlIG9uIEJTRCBzeXN0ZW1zLgogIC0gR0NDIGJldHdlZW4gMi45NSBhbmQgNC44LiBPdGhlcnMgbWF5IHdvcmssIGJ1dCBub3QgdGVzdGVkLgogIC0gR05VIGxkCgpBbHNvLCB5b3UgbWlnaHQgd2FudCB0byBidWlsZCB3aXRoIGxpYnBjcmUgc3VwcG9ydCwgd2hpY2ggd2lsbCBwcm92aWRlIGEgdmVyeQplZmZpY2llbnQgcmVnZXggaW1wbGVtZW50YXRpb24gYW5kIHdpbGwgYWxzbyBmaXggc29tZSBiYWRuZXNzIG9uIFNvbGFyaXMnIG9uZS4KClRvIGJ1aWxkIGhhcHJveHksIHlvdSBoYXZlIHRvIGNob29zZSB5b3VyIHRhcmdldCBPUyBhbW9uZ3N0IHRoZSBmb2xsb3dpbmcgb25lcwphbmQgYXNzaWduIGl0IHRvIHRoZSBUQVJHRVQgdmFyaWFibGUgOgoKICAtIGxpbnV4MjIgICAgIGZvciBMaW51eCAyLjIKICAtIGxpbnV4MjQgICAgIGZvciBMaW51eCAyLjQgYW5kIGFib3ZlIChkZWZhdWx0KQogIC0gbGludXgyNGUgICAgZm9yIExpbnV4IDIuNCB3aXRoIHN1cHBvcnQgZm9yIGEgd29ya2luZyBlcG9sbCAoPiAwLjIxKQogIC0gbGludXgyNiAgICAgZm9yIExpbnV4IDIuNiBhbmQgYWJvdmUKICAtIGxpbnV4MjYyOCAgIGZvciBMaW51eCAyLjYuMjgsIDMueCwgYW5kIGFib3ZlIChlbmFibGVzIHNwbGljZSBhbmQgdHByb3h5KQogIC0gc29sYXJpcyAgICAgZm9yIFNvbGFyaXMgOCBvciAxMCAob3RoZXJzIHVudGVzdGVkKQogIC0gZnJlZWJzZCAgICAgZm9yIEZyZWVCU0QgNSB0byAxMCAob3RoZXJzIHVudGVzdGVkKQogIC0gb3N4ICAgICAgICAgZm9yIE1hYyBPUy9YCiAgLSBvcGVuYnNkICAgICBmb3IgT3BlbkJTRCAzLjEgYW5kIGFib3ZlCiAgLSBhaXg1MSAgICAgICBmb3IgQUlYIDUuMQogIC0gYWl4NTIgICAgICAgZm9yIEFJWCA1LjIKICAtIGN5Z3dpbiAgICAgIGZvciBDeWd3aW4KICAtIGdlbmVyaWMgICAgIGZvciBhbnkgb3RoZXIgT1Mgb3IgdmVyc2lvbi4KICAtIGN1c3RvbSAgICAgIHRvIG1hbnVhbGx5IGFkanVzdCBldmVyeSBzZXR0aW5nCgpZb3UgbWF5IGFsc28gY2hvb3NlIHlvdXIgQ1BVIHRvIGJlbmVmaXQgZnJvbSBzb21lIG9wdGltaXphdGlvbnMuIFRoaXMgaXMKcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBVbHRyYVNwYXJjIG1hY2hpbmVzLiBGb3IgdGhpcywgeW91IGNhbiBhc3NpZ24Kb25lIG9mIHRoZSBmb2xsb3dpbmcgY2hvaWNlcyB0byB0aGUgQ1BVIHZhcmlhYmxlIDoKCiAgLSBpNjg2IGZvciBpbnRlbCBQZW50aXVtUHJvLCBQZW50aXVtIDIgYW5kIGFib3ZlLCBBTUQgQXRobG9uCiAgLSBpNTg2IGZvciBpbnRlbCBQZW50aXVtLCBBTUQgSzYsIFZJQSBDMy4KICAtIHVsdHJhc3BhcmMgOiBTdW4gVWx0cmFTcGFyYyBJL0lJL0lJSS9JViBwcm9jZXNzb3IKICAtIG5hdGl2ZSA6IHVzZSB0aGUgYnVpbGQgbWFjaGluZSdzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zLiBVc2Ugd2l0aAogICAgZXh0cmVtZSBjYXJlLCBhbmQgbmV2ZXIgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChrbm93biB0byBicmVhaykuCiAgLSBnZW5lcmljIDogYW55IG90aGVyIHByb2Nlc3NvciBvciBubyBDUFUtc3BlY2lmaWMgb3B0aW1pemF0aW9uLiAoZGVmYXVsdCkKCkFsdGVybmF0aXZlbHksIHlvdSBtYXkganVzdCBzZXQgdGhlIENQVV9DRkxBR1MgdmFsdWUgdG8gdGhlIG9wdGltYWwgR0NDIG9wdGlvbnMKZm9yIHlvdXIgcGxhdGZvcm0uCgpZb3UgbWF5IHdhbnQgdG8gYnVpbGQgc3BlY2lmaWMgdGFyZ2V0IGJpbmFyaWVzIHdoaWNoIGRvIG5vdCBtYXRjaCB5b3VyIG5hdGl2ZQpjb21waWxlcidzIHRhcmdldC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdHJ1ZSBvbiA2NC1iaXQgc3lzdGVtcyB3aGVuIHlvdSB3YW50CnRvIGJ1aWxkIGEgMzItYml0IGJpbmFyeS4gVXNlIHRoZSBBUkNIIHZhcmlhYmxlIGZvciB0aGlzIHB1cnBvc2UuIFJpZ2h0IG5vdwppdCBvbmx5IGtub3dzIGFib3V0IGEgZmV3IHg4NiB2YXJpYW50cyAoaTM4NixpNDg2LGk1ODYsaTY4Nix4ODZfNjQpLCB0d28KZ2VuZXJpYyBvbmVzICgzMiw2NCkgYW5kIHNldHMgLW0zMi8tbTY0IGFzIHdlbGwgYXMgLW1hcmNoPTxhcmNoPiBhY2NvcmRpbmdseS4KCklmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIFBDUkUgKFBlcmwgQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zKSwgdGhlbiB5b3UKcmVhbGx5IHNob3VsZCBidWlsZCB3aXRoIGxpYnBjcmUgd2hpY2ggaXMgYmV0d2VlbiAyIGFuZCAxMCB0aW1lcyBmYXN0ZXIgdGhhbgpvdGhlciBsaWJjIGltcGxlbWVudGF0aW9ucy4gUmVnZXggYXJlIHVzZWQgZm9yIGhlYWRlciBwcm9jZXNzaW5nIChkZWxldGlvbiwKcmV3cml0aW5nLCBhbGxvdywgZGVueSkuIFRoZSBvbmx5IGluY29udmVuaWVudCBvZiBsaWJwY3JlIGlzIHRoYXQgaXQgaXMgbm90CnlldCB3aWRlbHkgc3ByZWFkLCBzbyBpZiB5b3UgYnVpbGQgZm9yIG90aGVyIHN5c3RlbXMsIHlvdSBtaWdodCBnZXQgaW50bwp0cm91YmxlIGlmIHRoZXkgZG9uJ3QgaGF2ZSB0aGUgZHluYW1pYyBsaWJyYXJ5LiBJbiB0aGlzIHNpdHVhdGlvbiwgeW91IHNob3VsZApzdGF0aWNhbGx5IGxpbmsgbGlicGNyZSBpbnRvIGhhcHJveHkgc28gdGhhdCBpdCB3aWxsIG5vdCBiZSBuZWNlc3NhcnkgdG8KaW5zdGFsbCBpdCBvbiB0YXJnZXQgc3lzdGVtcy4gQXZhaWxhYmxlIGJ1aWxkIG9wdGlvbnMgZm9yIFBDUkUgYXJlIDoKCiAgLSBVU0VfUENSRT0xIHRvIHVzZSBsaWJwY3JlLCBpbiB3aGF0ZXZlciBmb3JtIGlzIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbQogICAgKHNoYXJlZCBvciBzdGF0aWMpCgogIC0gVVNFX1NUQVRJQ19QQ1JFPTEgdG8gdXNlIGEgc3RhdGljIHZlcnNpb24gb2YgbGlicGNyZSBldmVuIGlmIHRoZSBkeW5hbWljCiAgICBvbmUgaXMgYXZhaWxhYmxlLiBUaGlzIHdpbGwgZW5oYW5jZSBwb3J0YWJpbGl0eS4KCiAgLSB3aXRoIG5vIG9wdGlvbiwgdXNlIHlvdXIgT1MgbGliYydzIHN0YW5kYXJkIHJlZ2V4IGltcGxlbWVudGF0aW9uIChkZWZhdWx0KS4KICAgIFdhcm5pbmchIGdyb3VwIHJlZmVyZW5jZXMgb24gU29sYXJpcyBzZWVtIGJyb2tlbi4gVXNlIHN0YXRpYy1wY3JlIHdoZW5ldmVyCiAgICBwb3NzaWJsZS4KCklmIHlvdXIgc3lzdGVtIGRvZXNuJ3QgcHJvdmlkZSBQQ1JFLCB5b3UgYXJlIGVuY291cmFnZWQgdG8gZG93bmxvYWQgaXQgZnJvbQpodHRwOi8vd3d3LnBjcmUub3JnLyBhbmQgYnVpbGQgaXQgeW91cnNlbGYsIGl0J3MgZmFzdCBhbmQgZWFzeS4KClJlY2VudCBzeXN0ZW1zIGNhbiByZXNvbHZlIElQdjYgaG9zdCBuYW1lcyB1c2luZyBnZXRhZGRyaW5mbygpLiBUaGlzIHByaW1pdGl2ZQppcyBub3QgcHJlc2VudCBpbiBhbGwgbGliY3MgYW5kIGRvZXMgbm90IHdvcmsgaW4gYWxsIG9mIHRoZW0gZWl0aGVyLiBTdXBwb3J0IGluCmdsaWJjIHdhcyBicm9rZW4gYmVmb3JlIDIuMy4gU29tZSBlbWJlZGRlZCBsaWJzIG1heSBub3QgcHJvcGVybHkgd29yayBlaXRoZXIsCnRodXMsIHN1cHBvcnQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgbWVhbmluZyB0aGF0IHNvbWUgaG9zdCBuYW1lcyB3aGljaCBvbmx5CnJlc29sdmUgYXMgSVB2NiBhZGRyZXNzZXMgd2lsbCBub3QgcmVzb2x2ZSBhbmQgY29uZmlncyBtaWdodCBlbWl0IGFuIGVycm9yCmR1cmluZyBwYXJzaW5nLiBJZiB5b3Uga25vdyB0aGF0IHlvdXIgT1MgbGliYyBoYXMgcmVsaWFibGUgc3VwcG9ydCBmb3IKZ2V0YWRkcmluZm8oKSwgeW91IGNhbiBhZGQgVVNFX0dFVEFERFJJTkZPPTEgb24gdGhlIG1ha2UgY29tbWFuZCBsaW5lIHRvIGVuYWJsZQppdC4gVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgb3B0aW9uIGZvciBtb3N0IExpbnV4IGRpc3RybyBwYWNrYWdlcnMgc2luY2UgaXQncwp3b3JraW5nIGZpbmUgb24gYWxsIHJlY2VudCBtYWluc3RyZWFtIGRpc3Ryb3MuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBvbgpTb2xhcmlzIDggYW5kIGFib3ZlLCBhcyBpdCdzIGtub3duIHRvIHdvcmsuCgpJdCBpcyBwb3NzaWJsZSB0byBhZGQgbmF0aXZlIHN1cHBvcnQgZm9yIFNTTCB1c2luZyB0aGUgR05VIG1ha2VmaWxlLCBieSBwYXNzaW5nCiJVU0VfT1BFTlNTTD0xIiBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUuIFRoZSBsaWJzc2wgYW5kIGxpYmNyeXB0byB3aWxsCmF1dG9tYXRpY2FsbHkgYmUgbGlua2VkIHdpdGggaGFwcm94eS4gU29tZSBzeXN0ZW1zIGFsc28gcmVxdWlyZSBsaWJ6LCBzbyBpZiB0aGUKYnVpbGQgZmFpbHMgZHVlIHRvIG1pc3Npbmcgc3ltYm9scyBzdWNoIGFzIGRlZmxhdGVJbml0KCksIHRoZW4gdHJ5IGFnYWluIHdpdGgKIkFERExJQj0tbHoiLgoKWW91ciBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byBhbHdheXMgdXNlIGFuIHVwLXRvLWRhdGUgdmVyc2lvbiBvZiBPcGVuU1NMLCBhcwpmb3VuZCBvbiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy8gYXMgdnVsbmVyYWJpbGl0aWVzIGFyZSBvY2Nhc2lvbmFsbHkgZm91bmQgYW5kCnlvdSBkb24ndCB3YW50IHRoZW0gb24geW91ciBzeXN0ZW1zLiBIQVByb3h5IGlzIGtub3duIHRvIGJ1aWxkIGNvcnJlY3RseSBvbiBhbGwKY3VycmVudGx5IHN1cHBvcnRlZCBicmFuY2hlcyAoMC45LjgsIDEuMC4wLCAxLjAuMSBhbmQgMS4wLjIgYXQgdGhlIHRpbWUgb2YKd3JpdGluZykuIEJyYW5jaCAxLjAuMiBpcyByZWNvbW1lbmRlZCBmb3IgdGhlIHJpY2hlc3QgZmVhdHVyZXMuCgpUbyBsaW5rIE9wZW5TU0wgc3RhdGljYWxseSBhZ2FpbnN0IGhhcHJveHksIGJ1aWxkIE9wZW5TU0wgd2l0aCB0aGUgbm8tc2hhcmVkCmtleXdvcmQgYW5kIGluc3RhbGwgaXQgdG8gYSBsb2NhbCBkaXJlY3RvcnksIHNvIHlvdXIgc3lzdGVtIGlzIG5vdCBhZmZlY3RlZCA6CgogICAgJCBleHBvcnQgU1RBVElDTElCU1NMPS90bXAvc3RhdGljbGlic3NsCiAgICAkIC4vY29uZmlnIC0tcHJlZml4PSRTVEFUSUNMSUJTU0wgbm8tc2hhcmVkCiAgICAkIG1ha2UgJiYgbWFrZSBpbnN0YWxsX3N3CgpXaGVuIGJ1aWxkaW5nIGhhcHJveHksIHBhc3MgdGhhdCBwYXRoIHZpYSBTU0xfSU5DIGFuZCBTU0xfTElCIHRvIG1ha2UgYW5kCmluY2x1ZGUgYWRkaXRpb25hbCBsaWJzIHdpdGggQURETElCIGlmIG5lZWRlZCAoaW4gdGhpcyBjYXNlIGZvciBleGFtcGxlIGxpYmRsKToKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgVVNFX09QRU5TU0w9MSBTU0xfSU5DPSRTVEFUSUNMSUJTU0wvaW5jbHVkZSBTU0xfTElCPSRTVEFUSUNMSUJTU0wvbGliIEFERExJQj0tbGRsCgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGluY2x1ZGUgbmF0aXZlIHN1cHBvcnQgZm9yIHpsaWIgdG8gYmVuZWZpdCBmcm9tIEhUVFAKY29tcHJlc3Npb24uIEZvciB0aGlzLCBwYXNzICJVU0VfWkxJQj0xIiBvbiB0aGUgIm1ha2UiIGNvbW1hbmQgbGluZSBhbmQgZW5zdXJlCnRoYXQgemxpYiBpcyBwcmVzZW50IG9uIHRoZSBzeXN0ZW0uIEFsdGVybmF0aXZlbHkgaXQgaXMgcG9zc2libGUgdG8gdXNlIGxpYnNsegpmb3IgYSBmYXN0ZXIsIG1lbW9yeSBsZXNzLCBidXQgc2xpZ2h0bHkgbGVzcyBlZmZpY2llbnQgY29tcHJlc3Npb24sIGJ5IHBhc3NpbmcKIlVTRV9TTFo9MSIuCgpabGliIGlzIGNvbW1vbmx5IGZvdW5kIG9uIG1vc3Qgc3lzdGVtcywgb3RoZXJ3aXNlIHVwZGF0ZXMgY2FuIGJlIHJldHJpZXZlZCBmcm9tCmh0dHA6Ly93d3cuemxpYi5uZXQvLiBJdCBpcyBlYXN5IGFuZCBmYXN0IHRvIGJ1aWxkLiBMaWJzbHogY2FuIGJlIGRvd25sb2FkZWQKZnJvbSBodHRwOi8vMXd0LmV1L3Byb2plY3RzL2xpYnNsei8gYW5kIGlzIGV2ZW4gZWFzaWVyIHRvIGJ1aWxkLgoKQnkgZGVmYXVsdCwgdGhlIERFQlVHIHZhcmlhYmxlIGlzIHNldCB0byAnLWcnIHRvIGVuYWJsZSBkZWJ1ZyBzeW1ib2xzLiBJdCBpcwpub3Qgd2lzZSB0byBkaXNhYmxlIGl0IG9uIHVuY29tbW9uIHN5c3RlbXMsIGJlY2F1c2UgaXQncyBvZnRlbiB0aGUgb25seSB3YXkgdG8KZ2V0IGEgY29tcGxldGUgY29yZSB3aGVuIHlvdSBuZWVkIG9uZS4gT3RoZXJ3aXNlLCB5b3UgY2FuIHNldCBERUJVRyB0byAnLXMnIHRvCnN0cmlwIHRoZSBiaW5hcnkuCgpGb3IgZXhhbXBsZSwgSSB1c2UgdGhpcyB0byBidWlsZCBmb3IgU29sYXJpcyA4IDoKCiAgICAkIG1ha2UgVEFSR0VUPXNvbGFyaXMgQ1BVPXVsdHJhc3BhcmMgVVNFX1NUQVRJQ19QQ1JFPTEKCkFuZCBJIGJ1aWxkIGl0IHRoaXMgd2F5IG9uIE9wZW5CU0Qgb3IgRnJlZUJTRCA6CgogICAgJCBnbWFrZSBUQVJHRVQ9ZnJlZWJzZCBVU0VfUENSRT0xIFVTRV9PUEVOU1NMPTEgVVNFX1pMSUI9MQoKQW5kIG9uIGEgY2xhc3NpYyBMaW51eCB3aXRoIFNTTCBhbmQgWkxJQiBzdXBwb3J0IChlZzogUmVkIEhhdCA1LngpIDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgVVNFX1BDUkU9MSBVU0VfT1BFTlNTTD0xIFVTRV9aTElCPTEKCkFuZCBvbiBhIHJlY2VudCBMaW51eCA+PSAyLjYuMjggd2l0aCBTU0wgYW5kIFpMSUIgc3VwcG9ydCA6CgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2MjggVVNFX1BDUkU9MSBVU0VfT1BFTlNTTD0xIFVTRV9aTElCPTEKCkluIG9yZGVyIHRvIGJ1aWxkIGEgMzItYml0IGJpbmFyeSBvbiBhbiB4ODZfNjQgTGludXggc3lzdGVtIHdpdGggU1NMIHN1cHBvcnQKd2l0aG91dCBzdXBwb3J0IGZvciBjb21wcmVzc2lvbiBidXQgd2hlbiBPcGVuU1NMIHJlcXVpcmVzIFpMSUIgYW55d2F5IDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgQVJDSD1pMzg2IFVTRV9PUEVOU1NMPTEgQURETElCPS1segoKVGhlIFNTTCBzdGFjayBzdXBwb3J0cyBzZXNzaW9uIGNhY2hlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIGFsbCBydW5uaW5nCnByb2Nlc3Nlcy4gVGhpcyBpbnZvbHZlcyBzb21lIGF0b21pYyBvcGVyYXRpb25zIGFuZCBzeW5jaHJvbml6YXRpb24gb3BlcmF0aW9ucwp3aGljaCBjb21lIGluIG11bHRpcGxlIGZsYXZvcnMgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gYW5kIGFyY2hpdGVjdHVyZSA6CgogIEF0b21pYyBvcGVyYXRpb25zIDoKICAgIC0gaW50ZXJuYWwgYXNzZW1ibGVyIHZlcnNpb25zIGZvciB4ODYveDg2XzY0IGFyY2hpdGVjdHVyZXMKCiAgICAtIGdjYyBidWlsdGlucyBmb3Igb3RoZXIgYXJjaGl0ZWN0dXJlcy4gU29tZSBhcmNoaXRlY3R1cmVzIG1pZ2h0IG5vdAogICAgICBiZSBmdWxseSBzdXBwb3J0ZWQgb3IgbWlnaHQgcmVxdWlyZSBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgZ2NjLgogICAgICBJZiB5b3VyIGFyY2hpdGVjdHVyZSBpcyBub3Qgc3VwcG9ydGVkLCB5b3Ugd2lsbHkgaGF2ZSB0byBlaXRoZXIgdXNlCiAgICAgIHB0aHJlYWQgaWYgc3VwcG9ydGVkLCBvciB0byBkaXNhYmxlIHRoZSBzaGFyZWQgY2FjaGUuCgogICAgLSBwdGhyZWFkIChwb3NpeCB0aHJlYWRzKS4gUHRocmVhZHMgYXJlIHZlcnkgY29tbW9uIGJ1dCBpbnRlci1wcm9jZXNzCiAgICAgIHN1cHBvcnQgaXMgbm90IHRoYXQgY29tbW9uLCBhbmQgc29tZSBvbGRlciBvcGVyYXRpbmcgc3lzdGVtcyBkaWQgbm90CiAgICAgIHJlcG9ydCBhbiBlcnJvciB3aGVuIGVuYWJsaW5nIG11bHRpLXByb2Nlc3MgbW9kZSwgc28gdGhleSB1c2VkIHRvCiAgICAgIHNpbGVudGx5IGZhaWwsIHBvc3NpYmx5IGNhdXNpbmcgY3Jhc2hlcy4gTGludXgncyBpbXBsZW1lbnRhdGlvbiBpcwogICAgICBmaW5lLiBPcGVuQlNEIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIGFuZCBkb2Vzbid0IGJ1aWxkLiBGcmVlQlNEIDkgYnVpbGRzCiAgICAgIGFuZCByZXBvcnRzIGFuIGVycm9yIGF0IHJ1bnRpbWUsIHdoaWxlIGNlcnRhaW4gb2xkZXIgdmVyc2lvbnMgbWlnaHQKICAgICAgc2lsZW50bHkgZmFpbC4gUHRocmVhZHMgYXJlIGVuYWJsZWQgdXNpbmcgVVNFX1BUSFJFQURfUFNIQVJFRD0xLgoKICBTeW5jaHJvbml6YXRpb24gb3BlcmF0aW9ucyA6CiAgICAtIGludGVybmFsIHNwaW5sb2NrIDogdGhpcyBtb2RlIGlzIE9TLWluZGVwZW5kYW50LCBsaWdodCBidXQgd2lsbCBub3QKICAgICAgc2NhbGUgd2VsbCB0byBtYW55IHByb2Nlc3Nlcy4gSG93ZXZlciwgYWNjZXNzZXMgdG8gdGhlIHNlc3Npb24gY2FjaGUKICAgICAgYXJlIHJhcmUgZW5vdWdoIHRoYXQgdGhpcyBtb2RlIGNvdWxkIGNlcnRhaW5seSBhbHdheXMgYmUgdXNlZC4gVGhpcwogICAgICBpcyB0aGUgZGVmYXVsdCBtb2RlLgoKICAgIC0gRnV0ZXhlcywgd2hpY2ggYXJlIExpbnV4LXNwZWNpZmljIGhpZ2hseSBzY2FsYWJsZSBsaWdodCB3ZWlnaHQgbXV0ZXhlcwogICAgICBpbXBsZW1lbnRlZCBpbiB1c2VyLXNwYWNlIHdpdGggc29tZSBsaW1pdGVkIGFzc2lzdGFuY2UgZnJvbSB0aGUga2VybmVsLgogICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9uIExpbnV4IDIuNiBhbmQgYWJvdmUgYW5kIGlzIGVuYWJsZWQgYnkgcGFzc2luZwogICAgICBVU0VfRlVURVg9MQoKICAgIC0gcHRocmVhZCAocG9zaXggdGhyZWFkcykuIFNlZSBhYm92ZS4KCklmIG5vbmUgb2YgdGhlc2UgbWVjaGFuaXNtcyBpcyBzdXBwb3J0ZWQgYnkgeW91ciBwbGF0Zm9ybSwgeW91IG1heSBuZWVkIHRvCmJ1aWxkIHdpdGggVVNFX1BSSVZBVEVfQ0FDSEU9MSB0byB0b3RhbGx5IGRpc2FibGUgU1NMIGNhY2hlIHNoYXJpbmcuIFRoZW4KaXQgaXMgYmV0dGVyIG5vdCB0byBydW4gU1NMIG9uIG11bHRpcGxlIHByb2Nlc3Nlcy4KCklmIHlvdSBuZWVkIHRvIHBhc3Mgb3RoZXIgZGVmaW5lcywgaW5jbHVkZXMsIGxpYnJhcmllcywgZXRjLi4uIHRoZW4gcGxlYXNlCmNoZWNrIHRoZSBNYWtlZmlsZSB0byBzZWUgd2hpY2ggb25lcyB3aWxsIGJlIGF2YWlsYWJsZSBpbiB5b3VyIGNhc2UsIGFuZAp1c2UgdGhlIFVTRV8qIHZhcmlhYmxlcyBpbiB0aGUgTWFrZWZpbGUuCgpBSVggNS4zIGlzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgZ2VuZXJpYyB0YXJnZXQuIEhvd2V2ZXIsIGZvciB0aGUgYmluYXJ5IHRvCmFsc28gcnVuIG9uIDUuMiBvciBlYXJsaWVyLCB5b3UgbmVlZCB0byBidWlsZCB3aXRoIERFRklORT0iLURfTVNHUVNVUFBPUlQiLApvdGhlcndpc2UgX19mZF9zZWxlY3QoKSB3aWxsIGJlIHVzZWQgd2hpbGUgbm90IGJlaW5nIHByZXNlbnQgaW4gdGhlIGxpYmMsIGJ1dAp0aGlzIGlzIGVhc2lseSBhZGRyZXNzZWQgdXNpbmcgdGhlICJhaXg1MiIgdGFyZ2V0LiBJZiB5b3UgZ2V0IGJ1aWxkIGVycm9ycwpiZWNhdXNlIG9mIHN0cmFuZ2Ugc3ltYm9scyBvciBzZWN0aW9uIG1pc21hdGNoZXMsIHNpbXBseSByZW1vdmUgLWcgZnJvbQpERUJVR19DRkxBR1MuCgpZb3UgY2FuIGVhc2lseSBkZWZpbmUgeW91ciBvd24gdGFyZ2V0IHdpdGggdGhlIEdOVSBNYWtlZmlsZS4gVW5rbm93biB0YXJnZXRzCmFyZSBwcm9jZXNzZWQgd2l0aCBubyBkZWZhdWx0IG9wdGlvbiBleGNlcHQgVVNFX1BPTEw9ZGVmYXVsdC4gU28geW91IGNhbiB2ZXJ5CndlbGwgdXNlIHRoYXQgcHJvcGVydHkgdG8gZGVmaW5lIHlvdXIgb3duIHNldCBvZiBvcHRpb25zLiBVU0VfUE9MTCBjYW4gZXZlbiBiZQpkaXNhYmxlZCBieSBzZXR0aW5nIFVTRV9QT0xMPSIiLiBGb3IgZXhhbXBsZSA6CgogICAgJCBnbWFrZSBUQVJHRVQ9dGlueSBVU0VfUE9MTD0iIiBUQVJHRVRfQ0ZMQUdTPS1mb21pdC1mcmFtZS1wb2ludGVyCgoKMS4xKSBEZXZpY2VBdGxhcyBEZXZpY2UgRGV0ZWN0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSW4gb3JkZXIgdG8gYWRkIERldmljZUF0bGFzIERldmljZSBEZXRlY3Rpb24gc3VwcG9ydCwgeW91IHdvdWxkIG5lZWQgdG8gZG93bmxvYWQKdGhlIEFQSSBzb3VyY2UgY29kZSBmcm9tIGh0dHBzOi8vZGV2aWNlYXRsYXMuY29tL2RldmljZWF0bGFzLWhhcHJveHktbW9kdWxlIGFuZApvbmNlIGV4dHJhY3RlZCA6CgogICAgJCBtYWtlIFRBUkdFVD08dGFyZ2V0PiBVU0VfUENSRT0xIFVTRV9ERVZJQ0VBVExBUz0xIERFVklDRUFUTEFTX1NSQz08cGF0aCB0byB0aGUgQVBJIHJvb3QgZm9sZGVyPgoKT3B0aW9uYWxseSBERVZJQ0VBVExBU19JTkMgYW5kIERFVklDRUFUTEFTX0xJQiBtYXkgYmUgc2V0IHRvIG92ZXJyaWRlIHRoZSBwYXRoCnRvIHRoZSBpbmNsdWRlIGZpbGVzIGFuZCBsaWJyYXJpZXMgcmVzcGVjdGl2ZWx5IGlmIHRoZXkncmUgbm90IGluIHRoZSBzb3VyY2UKZGlyZWN0b3J5LgoKVGhlc2UgYXJlIHN1cHBvcnRlZCBEZXZpY2VBdGxhcyBkaXJlY3RpdmVzIChzZWUgZG9jL2NvbmZpZ3VyYXRpb24udHh0KSA6CiAgLSBkZXZpY2VhdGxhcy1qc29uLWZpbGUgPHBhdGggdG8gdGhlIERldmljZUF0bGFzIEpTT04gZGF0YSBmaWxlPi4KICAtIGRldmljZWF0bGFzLWxvZy1sZXZlbCA8bnVtYmVyPiAoMCB0byAzLCBsZXZlbCBvZiBpbmZvcm1hdGlvbiByZXR1cm5lZCBieQogICAgdGhlIEFQSSwgMCBieSBkZWZhdWx0KS4KICAtIGRldmljZWF0bGFzLXByb3BlcnR5LXNlcGFyYXRvciA8Y2hhcmFjdGVyPiAoY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgdGhlCiAgICBwcm9wZXJ0aWVzIHByb2R1Y2VkIGJ5IHRoZSBBUEksIHwgYnkgZGVmYXVsdCkuCgpTYW1wbGUgY29uZmlndXJhdGlvbiA6CgogICAgZ2xvYmFsCglkZXZpY2VhdGxhcy1qc29uLWZpbGUgPHBhdGggdG8ganNvbiBmaWxlPgoKICAgIC4uLgogICAgZnJvbnRlbmQKCWJpbmQgKjo4ODgxCglkZWZhdWx0X2JhY2tlbmQgc2VydmVycwoKVGhlcmUgYXJlIHR3byBkaXN0aW5jdCBtZXRob2RzIGF2YWlsYWJsZSwgb25lIHdoaWNoIGxldmVyYWdlcyBhbGwgSFRUUCBoZWFkZXJzCmFuZCBvbmUgd2hpY2ggdXNlcyBvbmx5IGEgc2luZ2xlIEhUVFAgaGVhZGVyIGZvciB0aGUgZGV0ZWN0aW9uLiBUaGUgZm9ybWVyCm1ldGhvZCBpcyBoaWdobHkgcmVjb21tZW5kZWQgYW5kIG1vcmUgYWNjdXJhdGUuCgoKQWxsIEhUVFAgaGVhZGVycwoKCiAgICAgIGh0dHAtcmVxdWVzdCBzZXQtaGVhZGVyIFgtRGV2aWNlQXRsYXMtRGF0YSAlW2RhLWNzdi1mZXRjaChwcmltYXJ5SGFyZHdhcmVUeXBlLG9zTmFtZSxvc1ZlcnNpb24sYnJvd3Nlck5hbWUsYnJvd3NlclZlcnNpb24pXQoKClNpbmdsZSBIVFRQIGhlYWRlciAoZS5nLiBVc2VyLUFnZW50KQoKCiAgICAgIGh0dHAtcmVxdWVzdCBzZXQtaGVhZGVyIFgtRGV2aWNlQXRsYXMtRGF0YSAlW3JlcS5maGRyKFVzZXItQWdlbnQpLGRhLWNzdi1jb252KHByaW1hcnlIYXJkd2FyZVR5cGUsb3NOYW1lLG9zVmVyc2lvbixicm93c2VyTmFtZSxicm93c2VyVmVyc2lvbildCgoKUGxlYXNlIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBEZXZpY2VBdGxhcyBhbmQgdGhlIGRldGVjdGlvbiBtZXRob2RzIGF0IGh0dHBzOi8vZGV2aWNlYXRsYXMuY29tL3Jlc291cmNlcyAuCgoxLjIpIDUxRGVncmVlcyBEZXZpY2UgRGV0ZWN0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCllvdSBjYW4gYWxzbyBpbmNsdWRlIDUxRGVncmVlcyBmb3IgaW5idWlsdCBkZXZpY2UgZGV0ZWN0aW9uIGVuYWJsaW5nIGF0dHJpYnV0ZXMKc3VjaCBhcyBzY3JlZW4gc2l6ZSAocGh5c2ljYWwgJiBwaXhlbHMpLCBzdXBwb3J0ZWQgaW5wdXQgbWV0aG9kcywgcmVsZWFzZSBkYXRlLApoYXJkd2FyZSB2ZW5kb3IgYW5kIG1vZGVsLCBicm93c2VyIGluZm9ybWF0aW9uLCBhbmQgZGV2aWNlIHByaWNlIGFtb25nIG1hbnkKb3RoZXJzLiBTdWNoIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIHVzZXIgZXhwZXJpZW5jZSBvZiBhIHdlYgpzaXRlIGJ5IHRhaWxvcmluZyB0aGUgcGFnZSBjb250ZW50LCBsYXlvdXQgYW5kIGJ1c2luZXNzIHByb2Nlc3NlcyB0byB0aGUKcHJlY2lzZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGRldmljZS4gU3VjaCBjdXN0b21pc2F0aW9ucyBpbXByb3ZlIHByb2ZpdCBieQptYWtpbmcgaXQgZWFzaWVyIGZvciBjdXN0b21lcnMgdG8gZ2V0IHRvIHRoZSBpbmZvcm1hdGlvbiBvciBzZXJ2aWNlcyB0aGV5Cm5lZWQuIEF0dHJpYnV0ZXMgb2YgdGhlIGRldmljZSBtYWtpbmcgYSB3ZWIgcmVxdWVzdCBjYW4gYmUgYWRkZWQgdG8gSFRUUApoZWFkZXJzIGFzIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzLgoKSW4gb3JkZXIgdG8gZW5hYmxlIDUxRGVncmVlcyBkb3dubG9hZCB0aGUgNTFEZWdyZWVzIHNvdXJjZSBjb2RlIGZyb20gdGhlCm9mZmljaWFsIGdpdGh1YiByZXBvc2l0b3J5IDoKCiAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tLzUxRGVncmVlcy9EZXZpY2UtRGV0ZWN0aW9uCgp0aGVuIHJ1biAnbWFrZScgd2l0aCBVU0VfNTFERUdSRUVTIGFuZCA1MURFR1JFRVNfU1JDIHNldC4gQm90aCA1MURFR1JFRVNfSU5DCmFuZCA1MURFR1JFRVNfTElCIG1heSBhZGRpdGlvbmFsbHkgYmUgdXNlZCB0byBmb3JjZSBzcGVjaWZpYyBkaWZmZXJlbnQgcGF0aHMKZm9yIC5vIGFuZCAuaCwgYnV0IHdpbGwgZGVmYXVsdCB0byA1MURFR1JFRVNfU1JDLiBNYWtlIHN1cmUgdG8gcmVwbGFjZQonNTFEX1JFUE9fUEFUSCcgd2l0aCB0aGUgcGF0aCB0byB0aGUgNTFEZWdyZWVzIHJlcG9zaXRvcnkuCgo1MURlZ3JlZXMgcHJvdmlkZSAyIGRpZmZlcmVudCBkZXRlY3Rpb24gYWxnb3JpdGhtczoKCiAgICAxLiBQYXR0ZXJuIC0gYmFsYW5jZXMgbWFpbiBtZW1vcnkgdXNhZ2UgYW5kIENQVS4KICAgIDIuIFRyaWUgLSBhIHZlcnkgaGlnaCBwZXJmb3JtYW5jZSBkZXRlY3Rpb24gc29sdXRpb24gd2hpY2ggdXNlcyBtb3JlIG1haW4KICAgICAgIG1lbW9yeSB0aGFuIFBhdHRlcm4uCgpUbyBtYWtlIHdpdGggNTFEZWdyZWVzIFBhdHRlcm4gYWxnb3JpdGhtIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZS4KCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgVVNFXzUxREVHUkVFUz0xIDUxREVHUkVFU19TUkM9JzUxRF9SRVBPX1BBVEgnL3NyYy9wYXR0ZXJuCgpUbyB1c2UgdGhlIDUxRGVncmVlcyBUcmllIGFsZ29yaXRobSB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmUuCgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2IFVTRV81MURFR1JFRVM9MSA1MURFR1JFRVNfU1JDPSc1MURfUkVQT19QQVRIJy9zcmMvdHJpZQoKQSBkYXRhIGZpbGUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBkZXZpY2VzLCBicm93c2Vycywgb3BlcmF0aW5nIHN5c3RlbXMKYW5kIHRoZWlyIGFzc29jaWF0ZWQgc2lnbmF0dXJlcyBpcyB0aGVuIG5lZWRlZC4gNTFEZWdyZWVzIHByb3ZpZGUgYSBmcmVlCmRhdGFiYXNlIHdpdGggR2l0aHViIHJlcG8gZm9yIHRoaXMgcHVycG9zZS4gVGhlc2UgZnJlZSBkYXRhIGZpbGVzIGFyZSBsb2NhdGVkCmluICc1MURfUkVQT19QQVRIJy9kYXRhIHdpdGggdGhlIGV4dGVuc2lvbnMgLmRhdCBmb3IgUGF0dGVybiBkYXRhIGFuZCAudHJpZSBmb3IKVHJpZSBkYXRhLgoKVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBuZWVkcyB0byBzZXQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgoKICAgIDUxZGVncmVlcy1kYXRhLWZpbGUgICAgICAgICAgIHBhdGggdG8gdGhlIFBhdHRlcm4gb3IgVHJpZSBkYXRhIGZpbGUKICAgIDUxZGVncmVlcy1wcm9wZXJ0eS1uYW1lLWxpc3QgIGxpc3Qgb2YgNTFEZWdyZWVzIHByb3BlcnRpZXMgdG8gZGV0ZWN0CiAgICA1MWRlZ3JlZXMtcHJvcGVydHktc2VwYXJhdG9yICBzZXBhcmF0b3IgdG8gdXNlIGJldHdlZW4gdmFsdWVzCiAgICA1MWRlZ3JlZXMtY2FjaGUtc2l6ZSAgICAgICAgICBMUlUtYmFzZWQgY2FjaGUgc2l6ZSAoZGlzYWJsZWQgYnkgZGVmYXVsdCkKClRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiB0aGUgc2V0dGluZ3MgZm9yIFBhdHRlcm4uCgogICAgNTFkZWdyZWVzLWRhdGEtZmlsZSAnNTFEX1JFUE9fUEFUSCcvZGF0YS81MURlZ3JlZXMtTGl0ZVYzLjIuZGF0CiAgICA1MWRlZ3JlZXMtcHJvcGVydHktbmFtZS1saXN0IElzVGFibGV0IERldmljZVR5cGUgSXNNb2JpbGUKICAgIDUxZGVncmVlcy1wcm9wZXJ0eS1zZXBhcmF0b3IgLAogICAgNTFkZWdyZWVzLWNhY2hlLXNpemUgMTAwMDAKCkhBUHJveHkgbmVlZHMgYSB3YXkgdG8gcGFzcyBkZXZpY2UgaW5mb3JtYXRpb24gdG8gdGhlIGJhY2tlbmQgc2VydmVycy4gVGhpcyBpcwpkb25lIGJ5IHVzaW5nIHRoZSA1MWQgY29udmVydGVyIG9yIGZldGNoIG1ldGhvZCwgd2hpY2ggaW50ZXJjZXB0cyB0aGUgSFRUUApoZWFkZXJzIGFuZCBjcmVhdGVzIHNvbWUgbmV3IGhlYWRlcnMuIFRoaXMgaXMgY29udHJvbGxlZCBpbiB0aGUgZnJvbnRlbmQKaHR0cC1pbiBzZWN0aW9uLgoKVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHdoaWNoIGFkZHMgdHdvIG5ldyBIVFRQIGhlYWRlcnMgcHJlZml4ZWQgWC01MUQtCgogICAgZnJvbnRlbmQgaHR0cC1pbgogICAgICAgIGJpbmQgKjo4MDgxCiAgICAgICAgZGVmYXVsdF9iYWNrZW5kIHNlcnZlcnMKICAgICAgICBodHRwLXJlcXVlc3Qgc2V0LWhlYWRlciBYLTUxRC1EZXZpY2VUeXBlTW9iaWxlVGFibGV0ICVbNTFkLmFsbChEZXZpY2VUeXBlLElzTW9iaWxlLElzVGFibGV0KV0KICAgICAgICBodHRwLXJlcXVlc3Qgc2V0LWhlYWRlciBYLTUxRC1UYWJsZXQgJVs1MWQuYWxsKElzVGFibGV0KV0KCkhlcmUsIHR3byBoZWFkZXJzIGFyZSBjcmVhdGVkIHdpdGggNTFEZWdyZWVzIGRhdGEsIFgtNTFELURldmljZVR5cGVNb2JpbGVUYWJsZXQKYW5kIFgtNTFELVRhYmxldC4gQW55IG51bWJlciBvZiBoZWFkZXJzIGNhbiBiZSBjcmVhdGVkIHRoaXMgd2F5IGFuZCBjYW4gYmUKbmFtZWQgYW55dGhpbmcuIDUxZC5hbGwoICkgaW52b2tlcyB0aGUgNTFkZWdyZWVzIGZldGNoLiBJdCBjYW4gYmUgcGFzc2VkIHVwIHRvCmZpdmUgcHJvcGVydHkgbmFtZXMgb2YgdmFsdWVzIHRvIHJldHVybi4gVmFsdWVzIHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIHNhbWUKb3JkZXIsIHNlcGVyYXRlZCBieSB0aGUgNTEtZGVncmVlcy1wcm9wZXJ0eS1zZXBhcmF0b3IgY29uZmlndXJlZCBlYXJsaWVyLiBJZiBhCnByb3BlcnR5IG5hbWUgY2FuJ3QgYmUgZm91bmQgdGhlIHZhbHVlICdOb0RhdGEnIGlzIHJldHVybmVkIGluc3RlYWQuCgpJbiBhZGRpdGlvbiB0byB0aGUgZGV2aWNlIHByb3BlcnRpZXMgdGhyZWUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlCnZhbGlkaXR5IG9mIHRoZSByZXN1bHQgY2FuIGJlIHJldHVybmVkIHdoZW4gdXNlZCB3aXRoIHRoZSBQYXR0ZXJuIG1ldGhvZC4gVGhlCmZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyBNZXRob2QsIERpZmZlcmVuY2UgYW5kIFJhbmsgY291bGQgYmUgaW5jbHVkZWQgYXMgb25lCm5ldyBIVFRQIGhlYWRlciBYLTUxRC1TdGF0cy4KCiAgICAgICAgaHR0cC1yZXF1ZXN0IHNldC1oZWFkZXIgWC01MUQtU3RhdHMgJVs1MWQuYWxsKE1ldGhvZCxEaWZmZXJlbmNlLFJhbmspXQoKVGhlc2UgdmFsdWVzIGluZGljYXRlIGhvdyBjb25maWRlbnQgNTFEZWdyZWVzIGlzIGluIHRoZSByZXN1bHQgdGhhdCB0aGF0IHdhcwpyZXR1cm5lZC4gTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgb24gdGhlIDUxRGVncmVlcyB3ZWIgc2l0ZSBhdDoKCiAgICBodHRwczovLzUxZGVncmVlcy5jb20vc3VwcG9ydC9kb2N1bWVudGF0aW9uL3BhdHRlcm4KClRoZSBhYm92ZSA1MWQuYWxsIGZldGNoIG1ldGhvZCB1c2VzIGFsbCBhdmFpbGFibGUgSFRUUCBoZWFkZXJzIGZvciBkZXRlY3Rpb24uIEEKbW9kZXN0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGNhbiBiZSBvYnRhaW5lZCBieSBvbmx5IHBhc3Npbmcgb25lIEhUVFAgaGVhZGVyCnRvIHRoZSBkZXRlY3Rpb24gbWV0aG9kIHdpdGggdGhlIDUxZC5zaW5nbGUgY29udmVydGVyLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUKdXNlcyB0aGUgVXNlci1BZ2VudCBIVFRQIGhlYWRlciBvbmx5IGZvciBkZXRlY3Rpb24uCgogICAgICAgIGh0dHAtcmVxdWVzdCBzZXQtaGVhZGVyIFgtNTFELURldmljZVR5cGVNb2JpbGVUYWJsZXQgJVtyZXEuZmhkcihVc2VyLUFnZW50KSw1MWQuc2luZ2xlKERldmljZVR5cGUsSXNNb2JpbGUsSXNUYWJsZXQpXQoKQW55IEhUVFAgaGVhZGVyIGNvdWxkIGJlIHVzZWQgaW5wbGFjZSBvZiBVc2VyLUFnZW50IGJ5IGNoYW5naW5nIHRoZSBwYXJhbWV0ZXIKcHJvdmlkZWQgdG8gcmVxLmZoZHIuCgpXaGVuIGNvbXBpbGVkIHRvIHVzZSB0aGUgVHJpZSBkZXRlY3Rpb24gbWV0aG9kIHRoZSB0cmllIGZvcm1hdCBkYXRhIGZpbGUgbmVlZHMKdG8gYmUgcHJvdmlkZWQuIENoYW5naW5nIHRoZSBleHRlbnNpb24gb2YgdGhlIGRhdGEgZmlsZSBmcm9tIGRhdCB0byB0cmllIHdpbGwKdXNlIHRoZSBjb3JyZWN0IGRhdGEuCgogICAgICAgIDUxZGVncmVlcy1kYXRhLWZpbGUgJzUxRF9SRVBPX1BBVEgnL2RhdGEvNTFEZWdyZWVzLUxpdGVWMy4yLnRyaWUKCldoZW4gdXNlZCB3aXRoIFRyaWUgdGhlIE1ldGhvZCwgRGlmZmVyZW5jZSBhbmQgUmFuayBwcm9wZXJ0aWVzIGFyZSBub3QKYXZhaWxhYmxlLgoKVGhlIGZyZWUgTGl0ZSBkYXRhIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgc2NyZWVuIHNpemUgaW4gcGl4ZWxzIGFuZAp3aGV0aGVyIHRoZSBkZXZpY2UgaXMgYSBtb2JpbGUuIEEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGlzIGxvY2F0ZWQKb24gdGhlIDUxRGVncmVlcyB3ZWIgc2l0ZSBhdDoKCiAgICBodHRwczovLzUxZGVncmVlcy5jb20vcmVzb3VyY2VzL3Byb3BlcnR5LWRpY3Rpb25hcnkKClNvbWUgcHJvcGVydGllcyBhcmUgb25seSBhdmFpbGFibGUgaW4gdGhlIHBhaWQgZm9yIFByZW1pdW0gYW5kIEVudGVycHJpc2UKdmVyc2lvbnMgb2YgNTFEZWdyZWVzLiBUaGVzZSBkYXRhIHNldHMgbm90IG9ubHkgY29udGFpbiBtb3JlIHByb3BlcnRpZXMgYnV0CmFyZSB1cGRhdGVkIHdlZWtseSBhbmQgZGFpbHkgYW5kIGNvbnRhaW4gc2lnbmF0dXJlcyBmb3IgMTAwLDAwMHMgb2YgZGlmZmVyZW50CmRldmljZSBjb21iaW5hdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgZGF0YSBvcHRpb25zIGNvbXBhcmlzb24gd2ViCnBhZ2U6CgogICAgaHR0cHM6Ly81MWRlZ3JlZXMuY29tL2NvbXBhcmUtZGF0YS1vcHRpb25zCgoKMikgSG93IHRvIGluc3RhbGwgaXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRvIGluc3RhbGwgaGFwcm94eSwgeW91IGNhbiBlaXRoZXIgY29weSB0aGUgc2luZ2xlIHJlc3VsdGluZyBiaW5hcnkgdG8gdGhlCnBsYWNlIHlvdSB3YW50LCBvciBydW4gOgoKICAgICQgc3VkbyBtYWtlIGluc3RhbGwKCklmIHlvdSdyZSBwYWNrYWdpbmcgaXQgZm9yIGFub3RoZXIgc3lzdGVtLCB5b3UgY2FuIHNwZWNpZnkgaXRzIHJvb3QgZGlyZWN0b3J5CmluIHRoZSB1c3VhbCBERVNURElSIHZhcmlhYmxlLgoKCjMpIEhvdyB0byBzZXQgaXQgdXAKLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlcmUgaXMgc29tZSBkb2N1bWVudGF0aW9uIGluIHRoZSBkb2MvIGRpcmVjdG9yeSA6CgogICAgLSBpbnRyby50eHQgOiB0aGlzIGlzIGFuIGludHJvZHVjdGlvbiB0byBoYXByb3h5LCBpdCBleHBsYWlucyB3aGF0IGl0IGlzCiAgICAgIHdoYXQgaXQgaXMgbm90LiBVc2VmdWwgZm9yIGJlZ2lubmVycyBvciB0byByZS1kaXNjb3ZlciBpdCB3aGVuIHBsYW5uaW5nCiAgICAgIGZvciBhbiB1cGdyYWRlLgoKICAgIC0gYXJjaGl0ZWN0dXJlLnR4dCA6IHRoaXMgaXMgdGhlIGFyY2hpdGVjdHVyZSBtYW51YWwuIEl0IGlzIHF1aXRlIG9sZCBhbmQKICAgICAgZG9lcyBub3QgdGVsbCBhYm91dCB0aGUgbmljZSBuZXcgZmVhdHVyZXMsIGJ1dCBpdCdzIHN0aWxsIGEgZ29vZCBzdGFydGluZwogICAgICBwb2ludCB3aGVuIHlvdSBrbm93IHdoYXQgeW91IHdhbnQgYnV0IGRvbid0IGtub3cgaG93IHRvIGRvIGl0LgoKICAgIC0gY29uZmlndXJhdGlvbi50eHQgOiB0aGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbC4gSXQgcmVjYWxscyBhIGZldwogICAgICBlc3NlbnRpYWwgSFRUUCBiYXNpYyBjb25jZXB0cywgYW5kIGRldGFpbHMgYWxsIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKICAgICAgc3ludGF4IChrZXl3b3JkcywgdW5pdHMpLiBJdCBhbHNvIGRlc2NyaWJlcyB0aGUgbG9nIGFuZCBzdGF0cyBmb3JtYXQuIEl0CiAgICAgIGlzIG5vcm1hbGx5IGFsd2F5cyB1cCB0byBkYXRlLiBJZiB5b3Ugc2VlIHRoYXQgc29tZXRoaW5nIGlzIG1pc3NpbmcgZnJvbQogICAgICBpdCwgcGxlYXNlIHJlcG9ydCBpdCBhcyB0aGlzIGlzIGEgYnVnLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZmlsZSBpcwogICAgICBodWdlIGFuZCB0aGF0IGl0J3MgZ2VuZXJhbGx5IG1vcmUgY29udmVuaWVudCB0byByZXZpZXcgQ3lyaWwgQm9udOkncwogICAgICBIVE1MIHRyYW5zbGF0aW9uIG9ubGluZSBoZXJlIDoKCiAgICAgICAgICAgaHR0cDovL2Nib250ZS5naXRodWIuaW8vaGFwcm94eS1kY29udi9jb25maWd1cmF0aW9uLTEuNS5odG1sCgogICAgLSBoYXByb3h5LWVuLnR4dCAvIGhhcHJveHktZnIudHh0IDogdGhlc2UgYXJlIHRoZSBvbGQgb3V0ZGF0ZWQgZG9jcy4gWW91CiAgICAgIHNob3VsZCBuZXZlciBuZWVkIHRoZW0uIElmIHlvdSBkbywgdGhlbiBwbGVhc2UgcmVwb3J0IHdoYXQgeW91IGRpZG4ndAogICAgICBmaW5kIGluIHRoZSBvdGhlciBvbmVzLgoKICAgIC0gZ3BsLnR4dCAvIGxncGwudHh0IDogdGhlIGNvcHkgb2YgdGhlIGxpY2Vuc2VzIGNvdmVyaW5nIHRoZSBzb2Z0d2FyZS4gU2VlCiAgICAgIHRoZSAnTElDRU5TRScgZmlsZSBhdCB0aGUgdG9wIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgIC0gdGhlIHJlc3QgaXMgbWFpbmx5IGZvciBkZXZlbG9wZXJzLgoKVGhlcmUgYXJlIGFsc28gYSBudW1iZXIgb2YgbmljZSBjb25maWd1cmF0aW9uIGV4YW1wbGVzIGluIHRoZSAiZXhhbXBsZXMiCmRpcmVjdG9yeSBhcyB3ZWxsIGFzIG9uIHNldmVyYWwgc2l0ZXMgYW5kIGFydGljbGVzIG9uIHRoZSBuZXQgd2hpY2ggYXJlIGxpbmtlZAp0byBmcm9tIHRoZSBoYXByb3h5IHdlYiBzaXRlLgoKCjQpIEhvdyB0byByZXBvcnQgYSBidWcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSXQgaXMgcG9zc2libGUgdGhhdCBmcm9tIHRpbWUgdG8gdGltZSB5b3UnbGwgZmluZCBhIGJ1Zy4gQSBidWcgaXMgYSBjYXNlIHdoZXJlCndoYXQgeW91IHNlZSBpcyBub3Qgd2hhdCBpcyBkb2N1bWVudGVkLiBPdGhlcndpc2UgaXQgY2FuIGJlIGEgbWlzZGVzaWduLiBJZiB5b3UKZmluZCB0aGF0IHNvbWV0aGluZyBpcyBzdHVwaWRseSBkZXNpZ24sIHBsZWFzZSBkaXNjdXNzIGl0IG9uIHRoZSBsaXN0IChzZWUgdGhlCiJob3cgdG8gY29udHJpYnV0ZSIgc2VjdGlvbiBiZWxvdykuIElmIHlvdSBmZWVsIGxpa2UgeW91J3JlIHByb2NlZWRpbmcgcmlnaHQKYW5kIGhhcHJveHkgZG9lc24ndCBvYmV5LCB0aGVuIGZpcnN0IGFzayB5b3Vyc2VsZiBpZiBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vYm9keQpiZWZvcmUgeW91IGhhcyBldmVuIGVuY291bnRlcmVkIHRoaXMgaXNzdWUuIElmIGl0J3MgdW5saWtlbHksIHRoZSB5b3UgcHJvYmFibHkKaGF2ZSBhbiBpc3N1ZSBpbiB5b3VyIHNldHVwLiBKdXN0IGluIGNhc2Ugb2YgZG91YnQsIHBsZWFzZSBjb25zdWx0IHRoZSBtYWlsaW5nCmxpc3QgYXJjaGl2ZXMgOgoKICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL21hcmMuaW5mby8/bD1oYXByb3h5CgpPdGhlcndpc2UsIHBsZWFzZSB0cnkgdG8gZ2F0aGVyIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBpbmZvcm1hdGlvbiB0byBoZWxwCnJlcHJvZHVjZSB0aGUgaXNzdWUgYW5kIHNlbmQgdGhhdCB0byB0aGUgbWFpbGluZyBsaXN0IDoKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhcHJveHlAZm9ybWlsdXgub3JnCgpQbGVhc2UgaW5jbHVkZSB5b3VyIGNvbmZpZ3VyYXRpb24gYW5kIGxvZ3MuIFlvdSBjYW4gbWFzayB5b3VyIElQIGFkZHJlc3NlcyBhbmQKcGFzc3dvcmRzLCB3ZSBkb24ndCBuZWVkIHRoZW0uIEJ1dCBpdCdzIGVzc2VudGlhbCB0aGF0IHlvdSBwb3N0IHlvdXIgY29uZmlnIGlmCnlvdSB3YW50IHBlb3BsZSB0byBndWVzcyB3aGF0IGlzIGhhcHBlbmluZy4KCkFsc28sIGtlZXAgaW4gbWluZCB0aGF0IGhhcHJveHkgaXMgZGVzaWduZWQgdG8gTkVWRVIgQ1JBU0guIElmIHlvdSBzZWUgaXQgZGllCndpdGhvdXQgYW55IHJlYXNvbiwgdGhlbiBpdCBkZWZpbml0ZWx5IGlzIGEgY3JpdGljYWwgYnVnIHRoYXQgbXVzdCBiZSByZXBvcnRlZAphbmQgdXJnZW50bHkgZml4ZWQuIEl0IGhhcyBoYXBwZW5lZCBhIGNvdXBsZSBvZiB0aW1lcyBpbiB0aGUgcGFzdCwgZXNzZW50aWFsbHkKb24gZGV2ZWxvcG1lbnQgdmVyc2lvbnMgcnVubmluZyBvbiBuZXcgYXJjaGl0ZWN0dXJlcy4gSWYgeW91IHRoaW5rIHlvdXIgc2V0dXAKaXMgZmFpcmx5IGNvbW1vbiwgdGhlbiBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZSBpcyB0b3RhbGx5IHVucmVsYXRlZC4KQW55d2F5LCBpZiB0aGF0IGhhcHBlbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IG1lIGRpcmVjdGx5LCBhcyBJIHdpbGwgZ2l2ZSB5b3UKaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBjb2xsZWN0IGEgdXNhYmxlIGNvcmUgZmlsZSwgYW5kIHdpbGwgcHJvYmFibHkgYXNrIGZvcgpvdGhlciBjYXB0dXJlcyB0aGF0IHlvdSdsbCBub3Qgd2FudCB0byBzaGFyZSB3aXRoIHRoZSBsaXN0LgoKCjUpIEhvdyB0byBjb250cmlidXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpQbGVhc2UgY2FyZWZ1bGx5IHJlYWQgdGhlIENPTlRSSUJVVElORyBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGUgc291cmNlcy4gSXQgaXMKbWFuZGF0b3J5LgoKLS0gZW5kCg==