TGludXgqIEJhc2UgRHJpdmVyIGZvciBJbnRlbChSKSBFdGhlcm5ldCBOZXR3b3JrIENvbm5lY3Rpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk9jdG9iZXIgNSwgMjAxMgoKQ29udGVudHMKPT09PT09PT0KCi0gSW4gVGhpcyBSZWxlYXNlCi0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCi0gQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgotIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCi0gQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucwotIEtub3duIElzc3Vlcy9Ucm91Ymxlc2hvb3RpbmcKLSBTdXBwb3J0CgpJbiBUaGlzIFJlbGVhc2UKPT09PT09PT09PT09PT09CgpUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBpZ2IgTGludXgqIEJhc2UgRHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBOZXR3b3JrIApDb25uZWN0aW9uLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIDIuNC54LCAyLjYueCwgYW5kIDMueCBrZXJuZWxzLgoKVGhpcyBkcml2ZXIgaXMgb25seSBzdXBwb3J0ZWQgYXMgYSBsb2FkYWJsZSBtb2R1bGUgYXQgdGhpcyB0aW1lLiAgSW50ZWwgaXMKbm90IHN1cHBseWluZyBwYXRjaGVzIGFnYWluc3QgdGhlIGtlcm5lbCBzb3VyY2UgdG8gYWxsb3cgZm9yIHN0YXRpYyBsaW5raW5nCm9mIHRoZSBkcml2ZXIuICBGb3IgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCByZWZlciB0byB0aGUKZG9jdW1lbnRhdGlvbiBzdXBwbGllZCB3aXRoIHlvdXIgSW50ZWwgR2lnYWJpdCBhZGFwdGVyLiAgQWxsIGhhcmR3YXJlCnJlcXVpcmVtZW50cyBsaXN0ZWQgYXBwbHkgdG8gdXNlIHdpdGggTGludXguCgpUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBub3cgYXZhaWxhYmxlIGluIHN1cHBvcnRlZCBrZXJuZWxzOgogLSBOYXRpdmUgVkxBTnMKIC0gQ2hhbm5lbCBCb25kaW5nICh0ZWFtaW5nKQogLSBTTk1QCgpDaGFubmVsIEJvbmRpbmcgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2U6Ci9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKClRoZSBpZ2IgZHJpdmVyIHN1cHBvcnRzIElFRUUgMTU4OCB0aW1lIHN0YW1waW5nIGZvciBrZXJuZWxzIDIuNi4zMCBhbmQgYWJvdmUuICAKClRoZSBkcml2ZXIgaW5mb3JtYXRpb24gcHJldmlvdXNseSBkaXNwbGF5ZWQgaW4gdGhlIC9wcm9jIGZpbGVzeXN0ZW0gaXMgbm90CnN1cHBvcnRlZCBpbiB0aGlzIHJlbGVhc2UuICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBldGh0b29sICh2ZXJzaW9uIDEuNgpvciBsYXRlciksIGxzcGNpLCBhbmQgaWZjb25maWcgdG8gb2J0YWluIHRoZSBzYW1lIGluZm9ybWF0aW9uLgoKSW5zdHJ1Y3Rpb25zIG9uIHVwZGF0aW5nIGV0aHRvb2wgY2FuIGJlIGZvdW5kIGluIHRoZSBzZWN0aW9uICJBZGRpdGlvbmFsCkNvbmZpZ3VyYXRpb25zIiBsYXRlciBpbiB0aGlzIGRvY3VtZW50LgoKSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCj09PT09PT09PT09PT09PT09PT09PT09PQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgJgpEcml2ZXIgSUQgR3VpZGUgYXQ6CgogICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvZ28vbmV0d29yay9hZGFwdGVyL2lkZ3VpZGUuaHRtCgpGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCByZWZlciB0byB0aGUgZm9sbG93aW5nCndlYnNpdGUuICBTZWxlY3QgdGhlIGxpbmsgZm9yIHlvdXIgYWRhcHRlci4KCiAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9nby9uZXR3b3JrL2FkYXB0ZXIvaG9tZS5odG0KCkJ1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24KPT09PT09PT09PT09PT09PT09PT09PT09PQoKVG8gYnVpbGQgYSBiaW5hcnkgUlBNKiBwYWNrYWdlIG9mIHRoaXMgZHJpdmVyLCBydW4gJ3JwbWJ1aWxkIC10Ygo8ZmlsZW5hbWUudGFyLmd6PicuICBSZXBsYWNlIDxmaWxlbmFtZS50YXIuZ3o+IHdpdGggdGhlIHNwZWNpZmljIGZpbGVuYW1lCm9mIHRoZSBkcml2ZXIuCgpOT1RFOiBGb3IgdGhlIGJ1aWxkIHRvIHdvcmsgcHJvcGVybHksIHRoZSBjdXJyZW50bHkgcnVubmluZyBrZXJuZWwgTVVTVAogICAgICBtYXRjaCB0aGUgdmVyc2lvbiBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgaW5zdGFsbGVkIGtlcm5lbCBzb3VyY2VzLgogICAgICBJZiB5b3UgaGF2ZSBqdXN0IHJlY29tcGlsZWQgdGhlIGtlcm5lbCByZWJvb3QgdGhlIHN5c3RlbSBub3cuCgogICAgICBSUE0gZnVuY3Rpb25hbGl0eSBoYXMgb25seSBiZWVuIHRlc3RlZCBpbiBSZWQgSGF0IGRpc3RyaWJ1dGlvbnMuCgoxLiBNb3ZlIHRoZSBiYXNlIGRyaXZlciB0YXIgZmlsZSB0byB0aGUgZGlyZWN0b3J5IG9mIHlvdXIgY2hvaWNlLiAgRm9yCiAgIGV4YW1wbGUsIHVzZSAvaG9tZS91c2VybmFtZS9pZ2Igb3IgL3Vzci9sb2NhbC9zcmMvaWdiLgoKMi4gVW50YXIvdW56aXAgYXJjaGl2ZToKCiAgICAgdGFyIHp4ZiBpZ2IteC54LngudGFyLmd6CgozLiBDaGFuZ2UgdG8gdGhlIGRyaXZlciBzcmMgZGlyZWN0b3J5OgoKICAgICBjZCBpZ2IteC54Lngvc3JjLwoKNC4gQ29tcGlsZSB0aGUgZHJpdmVyIG1vZHVsZToKCiAgICAgbWFrZSBpbnN0YWxsCgogICBUaGUgYmluYXJ5IHdpbGwgYmUgaW5zdGFsbGVkIGFzOgoKICAgICAvbGliL21vZHVsZXMvPEtFUk5FTCBWRVJTSU9OPi9rZXJuZWwvZHJpdmVycy9uZXQvaWdiL2lnYi5ba11vCgogICBUaGUgaW5zdGFsbCBsb2NhdGlvbnMgbGlzdGVkIGFib3ZlIGFyZSB0aGUgZGVmYXVsdCBsb2NhdGlvbnMuICBUaGV5CiAgIG1pZ2h0IG5vdCBiZSBjb3JyZWN0IGZvciBjZXJ0YWluIExpbnV4IGRpc3RyaWJ1dGlvbnMuICAKCjUuIExvYWQgdGhlIG1vZHVsZSB1c2luZyBlaXRoZXIgdGhlIGluc21vZCBvciBtb2Rwcm9iZSBjb21tYW5kOgoKICAgICBtb2Rwcm9iZSBpZ2IKCiAgICAgaW5zbW9kIGlnYgoKICAgTm90ZSB0aGF0IGZvciAyLjYga2VybmVscyB0aGUgaW5zbW9kIGNvbW1hbmQgY2FuIGJlIHVzZWQgaWYgdGhlIGZ1bGwKICAgcGF0aCB0byB0aGUgZHJpdmVyIG1vZHVsZSBpcyBzcGVjaWZpZWQuICBGb3IgZXhhbXBsZToKCiAgICAgaW5zbW9kIC9saWIvbW9kdWxlcy88S0VSTkVMIFZFUlNJT04+L2tlcm5lbC9kcml2ZXJzL25ldC9pZ2IvaWdiLmtvCgogICBXaXRoIDIuNiBiYXNlZCBrZXJuZWxzIGFsc28gbWFrZSBzdXJlIHRoYXQgb2xkZXIgaWdiIGRyaXZlcnMgYXJlCiAgIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsLCBiZWZvcmUgbG9hZGluZyB0aGUgbmV3IG1vZHVsZToKCiAgICAgcm1tb2QgaWdiOyBtb2Rwcm9iZSBpZ2IKCjYuIEFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoZSBpbnRlcmZhY2UgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZywgd2hlcmUKICAgeCBpcyB0aGUgaW50ZXJmYWNlIG51bWJlcjoKCiAgICAgaWZjb25maWcgZXRoeCA8SVBfYWRkcmVzcz4KCjcuIFZlcmlmeSB0aGF0IHRoZSBpbnRlcmZhY2Ugd29ya3MuICBFbnRlciB0aGUgZm9sbG93aW5nLCB3aGVyZSA8SVBfYWRkcmVzcz4KICAgaXMgdGhlIElQIGFkZHJlc3MgZm9yIGFub3RoZXIgbWFjaGluZSBvbiB0aGUgc2FtZSBzdWJuZXQgYXMgdGhlCiAgIGludGVyZmFjZSB0aGF0IGlzIGJlaW5nIHRlc3RlZDoKCiAgICAgcGluZyAgPElQX2FkZHJlc3M+CgpUUk9VQkxFU0hPT1RJTkc6IFNvbWUgc3lzdGVtcyBoYXZlIHRyb3VibGUgc3VwcG9ydGluZyBNU0kgYW5kL29yIE1TSS1YIAppbnRlcnJ1cHRzLiBJZiB5b3UgYmVsaWV2ZSB5b3VyIHN5c3RlbSBuZWVkcyB0byBkaXNhYmxlIHRoaXMgc3R5bGUgb2YgCmludGVycnVwdCwgdGhlIGRyaXZlciBjYW4gYmUgYnVpbHQgYW5kIGluc3RhbGxlZCB3aXRoIHRoZSBjb21tYW5kOgoKICAgICBtYWtlIENGTEFHU19FWFRSQT0tRERJU0FCTEVfUENJX01TSSBpbnN0YWxsCgpOb3JtYWxseSB0aGUgZHJpdmVyIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGV2ZXJ5IHR3byBzZWNvbmRzLCBzbyBpZiAKeW91IGNhbiBzZWUgdGhhdCB5b3UncmUgbm8gbG9uZ2VyIGdldHRpbmcgaW50ZXJydXB0cyBpbiBjYXQgL3Byb2MvaW50ZXJydXB0cwpmb3IgdGhlIGV0aFggaWdiIGRldmljZSwgdGhlbiB0aGlzIHdvcmthcm91bmQgbWF5IGJlIG5lY2Vzc2FyeS4KClRvIGJ1aWxkIGlnYiBkcml2ZXIgd2l0aCBEQ0E6Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCklmIHlvdXIga2VybmVsIHN1cHBvcnRzIERDQSwgdGhlIGRyaXZlciB3aWxsIGJ1aWxkIGJ5IGRlZmF1bHQgd2l0aCBEQ0EgZW5hYmxlZC4KCkNvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09CgpJZiB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbW9kdWxlLCB0aGUgIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSB1c2VkIGJ5IGVudGVyaW5nIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBtb2Rwcm9iZSBjb21tYW5kIHVzaW5nIHRoaXMgc3ludGF4OgoKICAgICBtb2Rwcm9iZSBpZ2IgWzxvcHRpb24+PTxWQUwxPiw8VkFMMj4sLi4uXQoKVGhlcmUgbmVlZHMgdG8gYmUgYSA8VkFMIz4gZm9yIGVhY2ggbmV0d29yayBwb3J0IGluIHRoZSBzeXN0ZW0gc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLiBUaGUgdmFsdWVzIHdpbGwgYmUgYXBwbGllZCB0byBlYWNoIGluc3RhbmNlLCBpbiBmdW5jdGlvbiBvcmRlci4gCgpGb3IgZXhhbXBsZToKCiAgICAgbW9kcHJvYmUgaWdiIEludGVycnVwdFRocm90dGxlUmF0ZT0xNjAwMCwxNjAwMAoKSW4gdGhpcyBjYXNlLCB0aGVyZSBhcmUgdHdvIG5ldHdvcmsgcG9ydHMgc3VwcG9ydGVkIGJ5IGlnYiBpbiB0aGUgc3lzdGVtLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBwYXJhbWV0ZXIgaXMgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgoKCk5PVEVTOiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEF1dG9OZWcsIER1cGxleCwgYW5kIFNwZWVkIHBhcmFtZXRlcnMsIAogICAgICAgIHNlZSB0aGUgU3BlZWQgYW5kIER1cGxleCBDb25maWd1cmF0aW9uIHNlY3Rpb24gaW4gdGhpcyBkb2N1bWVudC4KICAgICAgICAKICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlLAogICAgICAgIHBhcmFtZXRlciwgc2VlIHRoZSBhcHBsaWNhdGlvbiBub3RlIGF0OgogICAgICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2Rlc2lnbi9uZXR3b3JrL2FwcGxub3RzL2FwNDUwLmh0bQoKICAgICAgICBBIGRlc2NyaXB0b3IgZGVzY3JpYmVzIGEgZGF0YSBidWZmZXIgYW5kIGF0dHJpYnV0ZXMgcmVsYXRlZCB0bwogICAgICAgIHRoZSBkYXRhIGJ1ZmZlci4gIFRoaXMgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQgYnkgdGhlIGhhcmR3YXJlLgoKSW50ZXJydXB0VGhyb3R0bGVSYXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogICAwLDEsMywxMDAtMTAwMDAwICgwPW9mZiwgMT1keW5hbWljLCAzPWR5bmFtaWMgY29uc2VydmF0aXZlKQpEZWZhdWx0IFZhbHVlOiAzCgpUaGUgZHJpdmVyIGNhbiBsaW1pdCB0aGUgYW1vdW50IG9mIGludGVycnVwdHMgcGVyIHNlY29uZCB0aGF0IHRoZSBhZGFwdGVyCndpbGwgZ2VuZXJhdGUgZm9yIGluY29taW5nIHBhY2tldHMuIEl0IGRvZXMgdGhpcyBieSB3cml0aW5nIGEgdmFsdWUgdG8gdGhlIAphZGFwdGVyIHRoYXQgaXMgYmFzZWQgb24gdGhlIG1heGltdW0gYW1vdW50IG9mIGludGVycnVwdHMgdGhhdCB0aGUgYWRhcHRlciAKd2lsbCBnZW5lcmF0ZSBwZXIgc2Vjb25kLgoKU2V0dGluZyBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gYSB2YWx1ZSBncmVhdGVyIG9yIGVxdWFsIHRvIDEwMAp3aWxsIHByb2dyYW0gdGhlIGFkYXB0ZXIgdG8gc2VuZCBvdXQgYSBtYXhpbXVtIG9mIHRoYXQgbWFueSBpbnRlcnJ1cHRzCnBlciBzZWNvbmQsIGV2ZW4gaWYgbW9yZSBwYWNrZXRzIGhhdmUgY29tZSBpbi4gVGhpcyByZWR1Y2VzIGludGVycnVwdApsb2FkIG9uIHRoZSBzeXN0ZW0gYW5kIGNhbiBsb3dlciBDUFUgdXRpbGl6YXRpb24gdW5kZXIgaGVhdnkgbG9hZCwKYnV0IHdpbGwgaW5jcmVhc2UgbGF0ZW5jeSBhcyBwYWNrZXRzIGFyZSBub3QgcHJvY2Vzc2VkIGFzIHF1aWNrbHkuCgpUaGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgdGhlIGRyaXZlciBwcmV2aW91c2x5IGFzc3VtZWQgYSBzdGF0aWMgCkludGVycnVwdFRocm90dGxlUmF0ZSB2YWx1ZSBvZiA4MDAwLCBwcm92aWRpbmcgYSBnb29kIGZhbGxiYWNrIHZhbHVlIGZvciAKYWxsIHRyYWZmaWMgdHlwZXMsYnV0IGxhY2tpbmcgaW4gc21hbGwgcGFja2V0IHBlcmZvcm1hbmNlIGFuZCBsYXRlbmN5LiAKVGhlIGhhcmR3YXJlIGNhbiBoYW5kbGUgbWFueSBtb3JlIHNtYWxsIHBhY2tldHMgcGVyIHNlY29uZCBob3dldmVyLCBhbmQgCmZvciB0aGlzIHJlYXNvbiBhbiBhZGFwdGl2ZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBhbGdvcml0aG0gd2FzIGltcGxlbWVudGVkLgoKVGhlIGRyaXZlciBoYXMgdHdvIGFkYXB0aXZlIG1vZGVzIChzZXR0aW5nIDEgb3IgMykgaW4gd2hpY2ggaXQgZHluYW1pY2FsbHkKYWRqdXN0cyB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHZhbHVlIGJhc2VkIG9uIHRoZSB0cmFmZmljIHRoYXQgaXQgcmVjZWl2ZXMuCkFmdGVyIGRldGVybWluaW5nIHRoZSB0eXBlIG9mIGluY29taW5nIHRyYWZmaWMgaW4gdGhlIGxhc3QgdGltZWZyYW1lLCBpdCB3aWxsCmFkanVzdCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGZvciB0aGF0IHRyYWZmaWMuCgpUaGUgYWxnb3JpdGhtIGNsYXNzaWZpZXMgdGhlIGluY29taW5nIHRyYWZmaWMgZXZlcnkgaW50ZXJ2YWwgaW50bwpjbGFzc2VzLiAgT25jZSB0aGUgY2xhc3MgaXMgZGV0ZXJtaW5lZCwgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB2YWx1ZSBpcyAKYWRqdXN0ZWQgdG8gc3VpdCB0aGF0IHRyYWZmaWMgdHlwZSB0aGUgYmVzdC4gVGhlcmUgYXJlIHRocmVlIGNsYXNzZXMgZGVmaW5lZDogCiJCdWxrIHRyYWZmaWMiLCBmb3IgbGFyZ2UgYW1vdW50cyBvZiBwYWNrZXRzIG9mIG5vcm1hbCBzaXplOyAiTG93IGxhdGVuY3kiLApmb3Igc21hbGwgYW1vdW50cyBvZiB0cmFmZmljIGFuZC9vciBhIHNpZ25pZmljYW50IHBlcmNlbnRhZ2Ugb2Ygc21hbGwKcGFja2V0czsgYW5kICJMb3dlc3QgbGF0ZW5jeSIsIGZvciBhbG1vc3QgY29tcGxldGVseSBzbWFsbCBwYWNrZXRzIG9yIAptaW5pbWFsIHRyYWZmaWMuCgpJbiBkeW5hbWljIGNvbnNlcnZhdGl2ZSBtb2RlLCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHZhbHVlIGlzIHNldCB0byA0MDAwIApmb3IgdHJhZmZpYyB0aGF0IGZhbGxzIGluIGNsYXNzICJCdWxrIHRyYWZmaWMiLiBJZiB0cmFmZmljIGZhbGxzIGluIHRoZSAiTG93IApsYXRlbmN5IiBvciAiTG93ZXN0IGxhdGVuY3kiIGNsYXNzLCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIGluY3JlYXNlZCAKc3RlcHdpc2UgdG8gMjAwMDAuIFRoaXMgZGVmYXVsdCBtb2RlIGlzIHN1aXRhYmxlIGZvciBtb3N0IGFwcGxpY2F0aW9ucy4KCkZvciBzaXR1YXRpb25zIHdoZXJlIGxvdyBsYXRlbmN5IGlzIHZpdGFsIHN1Y2ggYXMgY2x1c3RlciBvcgpncmlkIGNvbXB1dGluZywgdGhlIGFsZ29yaXRobSBjYW4gcmVkdWNlIGxhdGVuY3kgZXZlbiBtb3JlIHdoZW4KSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIHNldCB0byBtb2RlIDEuIEluIHRoaXMgbW9kZSwgd2hpY2ggb3BlcmF0ZXMKdGhlIHNhbWUgYXMgbW9kZSAzLCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHdpbGwgYmUgaW5jcmVhc2VkIHN0ZXB3aXNlIHRvIAo3MDAwMCBmb3IgdHJhZmZpYyBpbiBjbGFzcyAiTG93ZXN0IGxhdGVuY3kiLgoKU2V0dGluZyBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gMCB0dXJucyBvZmYgYW55IGludGVycnVwdCBtb2RlcmF0aW9uCmFuZCBtYXkgaW1wcm92ZSBzbWFsbCBwYWNrZXQgbGF0ZW5jeSwgYnV0IGlzIGdlbmVyYWxseSBub3Qgc3VpdGFibGUKZm9yIGJ1bGsgdGhyb3VnaHB1dCB0cmFmZmljLgoKTk9URTogIER5bmFtaWMgaW50ZXJydXB0IHRocm90dGxpbmcgaXMgb25seSBhcHBsaWNhYmxlIHRvIGFkYXB0ZXJzCiAgICAgICBvcGVyYXRpbmcgaW4gTVNJIG9yIExlZ2FjeSBpbnRlcnJ1cHQgbW9kZSwgdXNpbmcgYSBzaW5nbGUKICAgICAgIHJlY2VpdmUgcXVldWUuCgpOT1RFOiAgV2hlbiBpZ2IgaXMgbG9hZGVkIHdpdGggZGVmYXVsdCBzZXR0aW5ncyBhbmQgbXVsdGlwbGUgYWRhcHRlcnMKICAgICAgIGFyZSBpbiB1c2Ugc2ltdWx0YW5lb3VzbHksIHRoZSBDUFUgdXRpbGl6YXRpb24gbWF5IGluY3JlYXNlIG5vbi0KICAgICAgIGxpbmVhcmx5LiAgSW4gb3JkZXIgdG8gbGltaXQgdGhlIENQVSB1dGlsaXphdGlvbiB3aXRob3V0IGltcGFjdGluZwogICAgICAgdGhlIG92ZXJhbGwgdGhyb3VnaHB1dCwgd2UgcmVjb21tZW5kIHRoYXQgeW91IGxvYWQgdGhlIGRyaXZlciBhcwogICAgICAgZm9sbG93czoKCiAgICAgICAgICAgbW9kcHJvYmUgaWdiIEludGVycnVwdFRocm90dGxlUmF0ZT0zMDAwLDMwMDAsMzAwMAoKICAgICAgIFRoaXMgc2V0cyB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIDMwMDAgaW50ZXJydXB0cy9zZWMgZm9yCiAgICAgICB0aGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGluc3RhbmNlcyBvZiB0aGUgZHJpdmVyLiAgVGhlIHJhbmdlCiAgICAgICBvZiAyMDAwIHRvIDMwMDAgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHdvcmtzIG9uIGEgbWFqb3JpdHkgb2YKICAgICAgIHN5c3RlbXMgYW5kIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IHRoZSBvcHRpbWFsIHZhbHVlIHdpbGwKICAgICAgIGJlIHBsYXRmb3JtLXNwZWNpZmljLiAgSWYgQ1BVIHV0aWxpemF0aW9uIGlzIG5vdCBhIGNvbmNlcm4sIHVzZQogICAgICAgZGVmYXVsdCBkcml2ZXIgc2V0dGluZ3MuCgpMTEkgKExvdyBMYXRlbmN5IEludGVycnVwdHMpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCkxMSSBhbGxvd3MgZm9yIGltbWVkaWF0ZSBnZW5lcmF0aW9uIG9mIGFuIGludGVycnVwdCB1cG9uIHByb2Nlc3NpbmcgcmVjZWl2ZSAKcGFja2V0cyB0aGF0IG1hdGNoIGNlcnRhaW4gY3JpdGVyaWEgYXMgc2V0IGJ5IHRoZSBwYXJhbWV0ZXJzIGRlc2NyaWJlZCBiZWxvdy4gCkxMSSBwYXJhbWV0ZXJzIGFyZSBub3QgZW5hYmxlZCB3aGVuIExlZ2FjeSBpbnRlcnJ1cHRzIGFyZSB1c2VkLiBZb3UgbXVzdCBiZSAKdXNpbmcgTVNJIG9yIE1TSS1YIChzZWUgY2F0IC9wcm9jL2ludGVycnVwdHMpIHRvIHN1Y2Nlc3NmdWxseSB1c2UgTExJLgoKTExJUG9ydAotLS0tLS0tClZhbGlkIFJhbmdlOiAgIDAtNjU1MzUKRGVmYXVsdCBWYWx1ZTogMCAoZGlzYWJsZWQpCgpMTEkgaXMgY29uZmlndXJlZCB3aXRoIHRoZSBMTElQb3J0IGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIsIHdoaWNoIHNwZWNpZmllcyAKd2hpY2ggVENQIHBvcnQgc2hvdWxkIGdlbmVyYXRlIExvdyBMYXRlbmN5IEludGVycnVwdHMuCgpGb3IgZXhhbXBsZSwgdXNpbmcgTExJUG9ydD04MCB3b3VsZCBjYXVzZSB0aGUgYm9hcmQgdG8gZ2VuZXJhdGUgYW4gCmltbWVkaWF0ZSBpbnRlcnJ1cHQgdXBvbiByZWNlaXB0IG9mIGFueSBwYWNrZXQgc2VudCB0byBUQ1AgcG9ydCA4MCBvbiB0aGUgCmxvY2FsIG1hY2hpbmUuCgpXQVJOSU5HOiBFbmFibGluZyBMTEkgY2FuIHJlc3VsdCBpbiBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIGludGVycnVwdHMvc2Vjb25kIAp0aGF0IG1heSBjYXVzZSBwcm9ibGVtcyB3aXRoIHRoZSBzeXN0ZW0gYW5kIGluIHNvbWUgY2FzZXMgbWF5IGNhdXNlIGEga2VybmVsIApwYW5pYy4gCgpMTElQdXNoCi0tLS0tLS0KVmFsaWQgUmFuZ2U6ICAgMC0xCkRlZmF1bHQgVmFsdWU6IDAgKGRpc2FibGVkKQoKQ2FuIGJlIHNldCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIChkZWZhdWx0KS4gSXQgaXMgbW9zdCAKZWZmZWN0aXZlIGluIGFuIGVudmlyb25tZW50IHdpdGggbWFueSBzbWFsbCB0cmFuc2FjdGlvbnMuCk5PVEU6IEVuYWJsaW5nIExMSVB1c2ggbWF5IGFsbG93IGEgZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrLgoKTExJU2l6ZQotLS0tLS0tClZhbGlkIFJhbmdlOiAgIDAtMTUwMApEZWZhdWx0IFZhbHVlOiAwIChkaXNhYmxlZCkKCkNhdXNlcyBhbiBpbW1lZGlhdGUgaW50ZXJydXB0IGlmIHRoZSBib2FyZCByZWNlaXZlcyBhIHBhY2tldCBzbWFsbGVyIAp0aGFuIHRoZSBzcGVjaWZpZWQgc2l6ZS4KCkludE1vZGUKLS0tLS0tLQpWYWxpZCBSYW5nZTogMCAtIDIgKDAgPSBMZWdhY3kgSW50LCAxID0gTVNJIGFuZCAyID0gTVNJLVgpCkRlZmF1bHQgVmFsdWU6IDIKCkludE1vZGUgY29udHJvbHMgYWxsb3cgbG9hZCB0aW1lIGNvbnRyb2wgb3ZlciB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQKcmVnaXN0ZXJlZCBmb3IgYnkgdGhlIGRyaXZlci4gIE1TSS1YIGlzIHJlcXVpcmVkIGZvciBtdWx0aXBsZSBxdWV1ZQpzdXBwb3J0LCBhbmQgc29tZSBrZXJuZWxzIGFuZCBjb21iaW5hdGlvbnMgb2Yga2VybmVsIC5jb25maWcgb3B0aW9ucyB3aWxsCmZvcmNlIGEgbG93ZXIgbGV2ZWwgb2YgaW50ZXJydXB0IHN1cHBvcnQuICAnY2F0IC9wcm9jL2ludGVycnVwdHMnIHdpbGwgc2hvdwpkaWZmZXJlbnQgdmFsdWVzIGZvciBlYWNoIHR5cGUgb2YgaW50ZXJydXB0LgoKUlNTCi0tLQpWYWxpZCBSYW5nZTogICAwLTgKRGVmYXVsdCBWYWx1ZTogMQoKMCAtIEFzc2lnbiB1cCB0byB3aGljaGV2ZXIgaXMgbGVzcywgbnVtYmVyIG9mIENQVVMgb3IgbnVtYmVyIG9mIHF1ZXVlcwpYIC0gQXNzaWduIFggcXVldWVzIHdoZXJlIFggaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlcy4KICAgIFRoZSBkcml2ZXIgYWxsb3dzIG1heGltdW0gc3VwcG9ydGVkIHF1ZXVlIHZhbHVlLiBGb3IgZXhhbXBsZSwgSTM1MC1iYXNlZCAKICAgIGFkYXB0ZXJzIGFsbG93IFJTUz04ICh3aGVyZSA4LXF1ZXVlcyBpcyB0aGUgbWF4aW11bSBhbGxvd2FibGUgcXVldWVzKS4KCk5vdGU6IGZvciA4MjU3NS1iYXNlZCBhZGFwdGVycyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVzIGlzIDQ7IGZvciAKODI1NzYtYmFzZWQgYW5kIG5ld2VyIGFkYXB0ZXJzIGl0IGlzIDg7IGZvciBJMjEwLWJhc2VkIGFkYXB0ZXJzIGl0IGlzIDQgcXVldWVzOwphbmQgZm9yIEkyMTEtYmFzZWQgYWRhcHRlcnMgaXQgaXMgMiBxdWV1ZXMuCgpUaGlzIHBhcmFtZXRlciBpcyBhbHNvIGFmZmVjdGVkIGJ5IHRoZSBWTURxIHBhcmFtZXRlciBpbiB0aGF0IGl0IHdpbGwgbGltaXQgdGhlCnF1ZXVlcyBtb3JlLgoKICAgICAgVk1EUQpNb2RlbCAwICAxICAyICAzKwo4MjU3NSA0ICA0ICAzICAxCjgyNTc2IDggIDIgIDIgIDIKODI1ODAgOCAgMSAgMSAgMQoKVk1EUQotLS0tClZhbGlkIFJhbmdlOiAgMCAtIDQgb24gODI1NzUtYmFzZWQgYWRhcHRlcnM7IGFuZCAwIC0gOCBmb3IgODI1NzYvODI1ODAtYmFzZWQgCmFkYXB0ZXJzLgpEZWZhdWx0IFZhbHVlOiAwCgpTdXBwb3J0cyBlbmFibGluZyBWTURxIHBvb2xzIGFzIHRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgU1ItSU9WLgoKMCAtIGRpc2FibGVkCjEgLSBzZXRzIHRoZSBuZXRkZXYgYXMgcG9vbCAwCjIrIC0gYWRkIGFkZGl0aW9uYWwgcXVldWVzIGJ1dCB0aGV5IGN1cnJlbnRseSBhcmUgbm90IHVzZWQuCgpUaGlzIHBhcmFtZXRlciBpcyBmb3JjZWQgdG8gMSBvciBtb3JlIGlmIHRoZSBtYXhfdmZzIG1vZHVsZSBwYXJhbWV0ZXIgaXMgdXNlZC4gCkluIGFkZGl0aW9uIHRoZSBudW1iZXIgb2YgcXVldWVzIGF2YWlsYWJsZSBmb3IgUlNTIGlzIGxpbWl0ZWQgaWYgdGhpcyBpcyBzZXQgdG8KMSBvciBncmVhdGVyLgogCm1heF92ZnMKLS0tLS0tLQpWYWxpZCBSYW5nZTogICAwLTcKRGVmYXVsdCBWYWx1ZTogMAoKSWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAwIGl0IHdpbGwgYWxzbyBmb3JjZSB0aGUgVk1EcSBwYXJhbWV0ZXIgdG8gYmUgMSAKb3IgbW9yZS4KClRoaXMgcGFyYW1ldGVyIGFkZHMgc3VwcG9ydCBmb3IgU1ItSU9WLiAgSXQgY2F1c2VzIHRoZSBkcml2ZXIgdG8gc3Bhd24gdXAgdG8gCm1heF92ZnMgd29ydGggb2YgdmlydHVhbCBmdW5jdGlvbi4gIAoKUXVldWVQYWlycwotLS0tLS0tLS0tClZhbGlkIFJhbmdlOiAgMC0xCkRlZmF1bHQgVmFsdWU6ICAxIChUWCBhbmQgUlggd2lsbCBiZSBwYWlyZWQgb250byBvbmUgaW50ZXJydXB0IHZlY3RvcikKCklmIHNldCB0byAwLCB3aGVuIE1TSS1YIGlzIGVuYWJsZWQsIHRoZSBUWCBhbmQgUlggd2lsbCBhdHRlbXB0IHRvIG9jY3VweQpzZXBhcmF0ZSB2ZWN0b3JzLiAgICAKClRoaXMgb3B0aW9uIGNhbiBiZSBvdmVycmlkZGVuIHRvIDEgaWYgdGhlcmUgYXJlIG5vdCBzdWZmaWNpZW50IGludGVycnVwdHMKYXZhaWxhYmxlLiAgVGhpcyBjYW4gb2NjdXIgaWYgYW55IGNvbWJpbmF0aW9uIG9mIFJTUywgVk1EUSwgYW5kIG1heF92ZnMgCnJlc3VsdHMgaW4gbW9yZSB0aGFuIDQgcXVldWVzIGJlaW5nIHVzZWQuCgpOb2RlCi0tLS0KVmFsaWQgUmFuZ2U6ICAgMC1uCkRlZmF1bHQgVmFsdWU6IC0xIChvZmYpCgogIDAgLSBuOiB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgdGhlIE5VTUEgbm9kZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIAogICAgICAgICBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoaXMgYWRhcHRlciBwb3J0LiAKICAtMTogdXNlcyB0aGUgZHJpdmVyIGRlZmF1bHQgb2YgYWxsb2NhdGluZyBtZW1vcnkgb24gd2hpY2hldmVyIHByb2Nlc3NvciBpcwogICAgICBydW5uaW5nIGluc21vZC9tb2Rwcm9iZS4gCgpUaGUgTm9kZSBwYXJhbWV0ZXIgd2lsbCBhbGxvdyB5b3UgdG8gcGljayB3aGljaCBOVU1BIG5vZGUgeW91IHdhbnQgdG8gaGF2ZSB0aGUKYWRhcHRlciBhbGxvY2F0ZSBtZW1vcnkgZnJvbS4gIEFsbCBkcml2ZXIgc3RydWN0dXJlcywgaW4tbWVtb3J5IHF1ZXVlcywgYW5kIApyZWNlaXZlIGJ1ZmZlcnMgd2lsbCBiZSBhbGxvY2F0ZWQgb24gdGhlIG5vZGUgc3BlY2lmaWVkLiAgVGhpcyBwYXJhbWV0ZXIgaXMKb25seSB1c2VmdWwgd2hlbiBpbnRlcnJ1cHQgYWZmaW5pdHkgaXMgc3BlY2lmaWVkLCBvdGhlcndpc2Ugc29tZSBwb3J0aW9uIG9mIHRoZQp0aW1lIHRoZSBpbnRlcnJ1cHQgY291bGQgcnVuIG9uIGEgZGlmZmVyZW50IGNvcmUgdGhhbiB0aGUgbWVtb3J5IGlzIGFsbG9jYXRlZCAKb24sIGNhdXNpbmcgc2xvd2VyIG1lbW9yeSBhY2Nlc3MgYW5kIGltcGFjdGluZyB0aHJvdWdocHV0LCBDUFUsIG9yIGJvdGguCgpFRUUKLS0tClZhbGlkIFJhbmdlOiAgMC0xCkRlZmF1bHQgVmFsdWU6IDEgKGVuYWJsZWQpCgpBIGxpbmsgYmV0d2VlbiB0d28gRUVFLWNvbXBsaWFudCBkZXZpY2VzIHdpbGwgcmVzdWx0IGluIHBlcmlvZGljIGJ1cnN0cyBvZiAKZGF0YSBmb2xsb3dlZCBieSBwZXJpb2RzIHdoZXJlIHRoZSBsaW5rIGlzIGluIGFuIGlkbGUgc3RhdGUuIFRoaXMgTG93ClBvd2VyIElkbGUgKExQSSkgc3RhdGUgaXMgc3VwcG9ydGVkIGluIGJvdGggMUdicHMgYW5kIDEwME1icHMgbGluayBzcGVlZHMuIApOT1RFOiBFRUUgc3VwcG9ydCByZXF1aXJlcyBhdXRvbmVnb3RpYXRpb24uCgpETUFDCi0tLS0KVmFsaWQgUmFuZ2U6IDAsIDI1MCwgNTAwLCAxMDAwLCAyMDAwLCAzMDAwLCA0MDAwLCA1MDAwLCA2MDAwLCA3MDAwLCA4MDAwLCAKOTAwMCwgMTAwMDAuCkRlZmF1bHQgVmFsdWU6IDAgKGRpc2FibGVkKQogIApFbmFibGVzIG9yIGRpc2FibGVzIERNQSBDb2FsZXNjaW5nIGZlYXR1cmUuIFZhbHVlcyBhcmUgaW4gdXNlY5JzIGFuZCBpbmNyZWFzZQp0aGUgaW50ZXJuYWwgRE1BIENvYWxlc2NpbmcgZmVhdHVyZZJzIGludGVybmFsIHRpbWVyLiAgRE1BIChEaXJlY3QgTWVtb3J5IApBY2Nlc3MpIGFsbG93cyB0aGUgbmV0d29yayBkZXZpY2UgdG8gbW92ZSBwYWNrZXQgZGF0YSBkaXJlY3RseSB0byB0aGUgCnN5c3RlbSdzIG1lbW9yeSwgcmVkdWNpbmcgQ1BVIHV0aWxpemF0aW9uLiBIb3dldmVyLCB0aGUgZnJlcXVlbmN5IGFuZCByYW5kb20KaW50ZXJ2YWxzIGF0IHdoaWNoIHBhY2tldHMgYXJyaXZlIGRvIG5vdCBhbGxvdyB0aGUgc3lzdGVtIHRvIGVudGVyIGEgbG93ZXIgCnBvd2VyIHN0YXRlLiBETUEgQ29hbGVzY2luZyBhbGxvd3MgdGhlIGFkYXB0ZXIgdG8gY29sbGVjdCBwYWNrZXRzIGJlZm9yZSBpdCAKaW5pdGlhdGVzIGEgRE1BIGV2ZW50LiBUaGlzIG1heSBpbmNyZWFzZSBuZXR3b3JrIGxhdGVuY3kgYnV0IGFsc28gaW5jcmVhc2VzCnRoZSBjaGFuY2VzIHRoYXQgdGhlIHN5c3RlbSB3aWxsIGVudGVyIGEgbG93ZXIgcG93ZXIgc3RhdGUuIAoKVHVybmluZyBvbiBETUEgQ29hbGVzY2luZyBtYXkgc2F2ZSBlbmVyZ3kgd2l0aCBrZXJuZWwgMi42LjMyIGFuZCBsYXRlci4gVGhpcwp3aWxsIGltcGFydCB0aGUgZ3JlYXRlc3QgY2hhbmNlIGZvciB5b3VyIHN5c3RlbSB0byBjb25zdW1lIGxlc3MgcG93ZXIuIERNQSAKQ29hbGVzY2luZyBpcyBlZmZlY3RpdmUgaW4gaGVscGluZyBwb3RlbnRpYWxseSBzYXZpbmcgdGhlIHBsYXRmb3JtIHBvd2VyIG9ubHkKd2hlbiBpdCBpcyBlbmFibGVkIGFjcm9zcyBhbGwgYWN0aXZlIHBvcnRzLgoKSW50ZXJydXB0VGhyb3R0bGVSYXRlIChJVFIpIHNob3VsZCBiZSBzZXQgdG8gZHluYW1pYy4gV2hlbiBJVFI9MCwgRE1BIApDb2FsZXNjaW5nIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQuIAogCkEgd2hpdGVwYXBlciBjb250YWluaW5nIGluZm9ybWF0aW9uIG9uIGhvdyB0byBiZXN0IGNvbmZpZ3VyZSB5b3VyIHBsYXRmb3JtIAppcyBhdmFpbGFibGUgb24gdGhlIEludGVsIHdlYnNpdGUuCgpNREQgKE1hbGljaW91cyBEcml2ZXIgRGV0ZWN0aW9uKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogMCwgMTsgMCA9IERpc2FibGUsIDEgPSBFbmFibGUKRGVmYXVsdCBWYWx1ZTogMQoKVGhpcyBwYXJhbWV0ZXIgaXMgb25seSByZWxldmFudCBmb3IgSTM1MCBkZXZpY2VzIG9wZXJhdGluZyBpbiBTUi1JT1YgbW9kZS4gV2hlbgp0aGlzIHBhcmFtZXRlciBpcyBzZXQsIHRoZSBkcml2ZXIgZGV0ZWN0cyBtYWxpY2lvdXMgVkYgZHJpdmVyIGFuZCBkaXNhYmxlcyBpdHMKVFgvUlggcXVldWVzIHVudGlsIGEgVkYgZHJpdmVyIHJlc2V0IG9jY3Vycy4KIAoKQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09CgogIENvbmZpZ3VyaW5nIHRoZSBEcml2ZXIgb24gRGlmZmVyZW50IERpc3RyaWJ1dGlvbnMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQ29uZmlndXJpbmcgYSBuZXR3b3JrIGRyaXZlciB0byBsb2FkIHByb3Blcmx5IHdoZW4gdGhlIHN5c3RlbSBpcyBzdGFydGVkCiAgaXMgZGlzdHJpYnV0aW9uIGRlcGVuZGVudC4gIFR5cGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBpbnZvbHZlcwogIGFkZGluZyBhbiBhbGlhcyBsaW5lIHRvIC9ldGMvbW9kdWxlcy5jb25mIG9yIC9ldGMvbW9kcHJvYmUuY29uZiBhcyB3ZWxsCiAgYXMgZWRpdGluZyBvdGhlciBzeXN0ZW0gc3RhcnR1cCBzY3JpcHRzIGFuZC9vciBjb25maWd1cmF0aW9uIGZpbGVzLiAgTWFueQogIHBvcHVsYXIgTGludXggZGlzdHJpYnV0aW9ucyBzaGlwIHdpdGggdG9vbHMgdG8gbWFrZSB0aGVzZSBjaGFuZ2VzIGZvciB5b3UuCiAgVG8gbGVhcm4gdGhlIHByb3BlciB3YXkgdG8gY29uZmlndXJlIGEgbmV0d29yayBkZXZpY2UgZm9yIHlvdXIgc3lzdGVtLAogIHJlZmVyIHRvIHlvdXIgZGlzdHJpYnV0aW9uIGRvY3VtZW50YXRpb24uICBJZiBkdXJpbmcgdGhpcyBwcm9jZXNzIHlvdSBhcmUKICBhc2tlZCBmb3IgdGhlIGRyaXZlciBvciBtb2R1bGUgbmFtZSwgdGhlIG5hbWUgZm9yIHRoZSBMaW51eCBCYXNlIERyaXZlcgogIGZvciB0aGUgR2lnYWJpdCBGYW1pbHkgb2YgQWRhcHRlcnMgaXMgaWdiLgoKICBBcyBhbiBleGFtcGxlLCBpZiB5b3UgaW5zdGFsbCB0aGUgaWdiIGRyaXZlciBmb3IgdHdvIEdpZ2FiaXQgYWRhcHRlcnMgCiAgKGV0aDAgYW5kIGV0aDEpIGFuZCB3YW50IHRvIHNldCB0aGUgaW50ZXJydXB0IG1vZGUgdG8gTVNJLVggYW5kIE1TSSAKICByZXNwZWN0aXZlbHksIGFkZCB0aGUgZm9sbG93aW5nIHRvIG1vZHVsZXMuY29uZiBvciAvZXRjL21vZHByb2JlLmNvbmY6CgogICAgICAgYWxpYXMgZXRoMCBpZ2IKICAgICAgIGFsaWFzIGV0aDEgaWdiCiAgICAgICBvcHRpb25zIGlnYiBJbnRNb2RlPTIsMQoKICBWaWV3aW5nIExpbmsgTWVzc2FnZXMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBMaW5rIG1lc3NhZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgY29uc29sZSBpZiB0aGUgZGlzdHJpYnV0aW9uIGlzCiAgcmVzdHJpY3Rpbmcgc3lzdGVtIG1lc3NhZ2VzLiAgSW4gb3JkZXIgdG8gc2VlIG5ldHdvcmsgZHJpdmVyIGxpbmsgbWVzc2FnZXMKICBvbiB5b3VyIGNvbnNvbGUsIHNldCBkbWVzZyB0byBlaWdodCBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nOgoKICAgICAgIGRtZXNnIC1uIDgKCiAgTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4KCiAgSnVtYm8gRnJhbWVzCiAgLS0tLS0tLS0tLS0tCiAgSnVtYm8gRnJhbWVzIHN1cHBvcnQgaXMgZW5hYmxlZCBieSBjaGFuZ2luZyB0aGUgTVRVIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4KICB0aGUgZGVmYXVsdCBvZiAxNTAwLiAgVXNlIHRoZSBpZmNvbmZpZyBjb21tYW5kIHRvIGluY3JlYXNlIHRoZSBNVFUgc2l6ZS4KICBGb3IgZXhhbXBsZToKCiAgICAgICBpZmNvbmZpZyBldGg8eD4gbXR1IDkwMDAgdXAKCiAgVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4gIEl0IGNhbiBiZSBtYWRlIHBlcm1hbmVudCBpZgogIHlvdSBhZGQ6CgogICAgICAgTVRVPTkwMDAKCiAgIHRvIHRoZSBmaWxlIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cy9pZmNmZy1ldGg8eD4uICBUaGlzIGV4YW1wbGUKICAgYXBwbGllcyB0byB0aGUgUmVkIEhhdCBkaXN0cmlidXRpb25zOyBvdGhlciBkaXN0cmlidXRpb25zIG1heSBzdG9yZSB0aGlzCiAgIHNldHRpbmcgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24uCgogIE5vdGVzOgoKICAtIFRvIGVuYWJsZSBKdW1ibyBGcmFtZXMsIGluY3JlYXNlIHRoZSBNVFUgc2l6ZSBvbiB0aGUgaW50ZXJmYWNlIGJleW9uZAogICAgMTUwMC4KCiAgLSBUaGUgbWF4aW11bSBNVFUgc2V0dGluZyBmb3IgSnVtYm8gRnJhbWVzIGlzIDkyMTYuICBUaGlzIHZhbHVlIGNvaW5jaWRlcwogICAgd2l0aCB0aGUgbWF4aW11bSBKdW1ibyBGcmFtZXMgc2l6ZSBvZiA5MjM0IGJ5dGVzLgoKICAtIFVzaW5nIEp1bWJvIGZyYW1lcyBhdCAxMCBvciAxMDAgTWJwcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBtYXkgcmVzdWx0IGluCiAgICBwb29yIHBlcmZvcm1hbmNlIG9yIGxvc3Mgb2YgbGluay4KCiAgZXRodG9vbAogIC0tLS0tLS0KICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCiAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIGV0aHRvb2wKICB2ZXJzaW9uIDMuMCBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbHRob3VnaCB3ZSAKICBzdHJvbmdseSByZWNvbW1lbmQgZG93bmxvYWRpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGF0OgoKICBodHRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvZXRodG9vbC8uCgogIFNwZWVkIGFuZCBEdXBsZXggQ29uZmlndXJhdGlvbgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEluIGFkZHJlc3Npbmcgc3BlZWQgYW5kIGR1cGxleCBjb25maWd1cmF0aW9uIGlzc3VlcywgeW91IG5lZWQgdG8gCiAgZGlzdGluZ3Vpc2ggYmV0d2VlbiBjb3BwZXItYmFzZWQgYWRhcHRlcnMgYW5kIGZpYmVyLWJhc2VkIGFkYXB0ZXJzLiAKCgogIEluIHRoZSBkZWZhdWx0IG1vZGUsIGFuIEludGVsKFIpIE5ldHdvcmsgQWRhcHRlciB1c2luZyBjb3BwZXIgY29ubmVjdGlvbnMgCiAgd2lsbCBhdHRlbXB0IHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggaXRzIGxpbmsgcGFydG5lciB0bwogIGRldGVybWluZSB0aGUgYmVzdCBzZXR0aW5nLiBJZiB0aGUgYWRhcHRlciBjYW5ub3QgZXN0YWJsaXNoIGxpbmsgd2l0aCB0aGUgCiAgbGluayBwYXJ0bmVyIHVzaW5nIGF1dG8tbmVnb3RpYXRpb24sIHlvdSBtYXkgbmVlZCB0byBtYW51YWxseSBjb25maWd1cmUgdGhlIAogIGFkYXB0ZXIgYW5kIGxpbmsgcGFydG5lciB0byBpZGVudGljYWwgc2V0dGluZ3MgdG8gZXN0YWJsaXNoIGxpbmsgYW5kIHBhc3MKICBwYWNrZXRzLiBUaGlzIHNob3VsZCBvbmx5IGJlIG5lZWRlZCB3aGVuIGF0dGVtcHRpbmcgdG8gbGluayB3aXRoIGFuIG9sZGVyIAogIHN3aXRjaCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgYXV0by1uZWdvdGlhdGlvbiBvciBvbmUgdGhhdCBoYXMgYmVlbiBmb3JjZWQgCiAgdG8gYSBzcGVjaWZpYyBzcGVlZCBvciBkdXBsZXggbW9kZS4gWW91ciBsaW5rIHBhcnRuZXIgbXVzdCBtYXRjaCB0aGUgCiAgc2V0dGluZyB5b3UgY2hvb3NlLiAKICAKICBTcGVlZCBhbmQgRHVwbGV4IGFyZSBjb25maWd1cmVkIHRocm91Z2ggdGhlIGV0aHRvb2wqIHV0aWxpdHkuIGV0aHRvb2wgaXMgCiAgaW5jbHVkZWQgd2l0aCBhbGwgdmVyc2lvbnMgb2YgUmVkIEhhdCBhZnRlciBSZWQgSGF0IDcuMi4gRm9yIG90aGVyIExpbnV4CiAgZGlzdHJpYnV0aW9ucywgZG93bmxvYWQgYW5kIGluc3RhbGwgZXRodG9vbCBmcm9tIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZTogCiAgPGEgaHJlZj0iaHR0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvLgoKICBDYXV0aW9uOiBPbmx5IGV4cGVyaWVuY2VkIG5ldHdvcmsgYWRtaW5pc3RyYXRvcnMgc2hvdWxkIGZvcmNlIHNwZWVkIGFuZCAKICBkdXBsZXggbWFudWFsbHkuIFRoZSBzZXR0aW5ncyBhdCB0aGUgc3dpdGNoIG11c3QgYWx3YXlzIG1hdGNoIHRoZSBhZGFwdGVyIAogIHNldHRpbmdzLiBBZGFwdGVyIHBlcmZvcm1hbmNlIG1heSBzdWZmZXIgb3IgeW91ciBhZGFwdGVyIG1heSBub3QgCiAgb3BlcmF0ZSBpZiB5b3UgY29uZmlndXJlIHRoZSBhZGFwdGVyIGRpZmZlcmVudGx5IGZyb20geW91ciBzd2l0Y2guCgogIEFuIEludGVsriBOZXR3b3JrIEFkYXB0ZXIgdXNpbmcgZmliZXItYmFzZWQgY29ubmVjdGlvbnMsIGhvd2V2ZXIsIHdpbGwgbm90IAogIGF0dGVtcHQgYXV0by1uZWdvdGlhdGUgd2l0aCBpdHMgbGluayBwYXJ0bmVyIHNpbmNlIHRob3NlIGFkYXB0ZXJzIG9wZXJhdGUgCiAgb25seSBpbiBmdWxsIGR1cGxleCwgYW5kIG9ubHkgYXQgdGhlaXIgbmF0aXZlIHNwZWVkLiAKCiAgCiAgRW5hYmxpbmcgV2FrZSBvbiBMQU4qIChXb0wpCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgV29MIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgZXRodG9vbCogdXRpbGl0eS4gIGV0aHRvb2wgaXMgaW5jbHVkZWQgd2l0aAogIGFsbCB2ZXJzaW9ucyBvZiBSZWQgSGF0IGFmdGVyIFJlZCBIYXQgNy4yLiAgRm9yIG90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMsCiAgZG93bmxvYWQgYW5kIGluc3RhbGwgZXRodG9vbCBmcm9tIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZToKICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCgogIEZvciBpbnN0cnVjdGlvbnMgb24gZW5hYmxpbmcgV29MIHdpdGggZXRodG9vbCwgcmVmZXIgdG8gdGhlIHdlYnNpdGUgbGlzdGVkCiAgYWJvdmUuCgogIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4KICBGb3IgdGhpcyBkcml2ZXIgdmVyc2lvbiwgaW4gb3JkZXIgdG8gZW5hYmxlIFdvTCwgdGhlIGlnYiBkcml2ZXIgbXVzdCBiZQogIGxvYWRlZCB3aGVuIHNodXR0aW5nIGRvd24gb3IgcmVib290aW5nIHRoZSBzeXN0ZW0uCgogIFdha2UgT24gTEFOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHBvcnQgQSBvZiBtdWx0aS1wb3J0IGFkYXB0ZXJzLgoKICBXYWtlIE9uIExBTiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgSW50ZWwoUikgR2lnYWJpdCBWVCBRdWFkIFBvcnQgU2VydmVyIAogIEFkYXB0ZXIuCgogIE11bHRpcXVldWUKICAtLS0tLS0tLS0tCiAgSW4gdGhpcyBtb2RlLCBhIHNlcGFyYXRlIE1TSS1YIHZlY3RvciBpcyBhbGxvY2F0ZWQgZm9yIGVhY2ggcXVldWUgYW5kIG9uZQogIGZvciAib3RoZXIiIGludGVycnVwdHMgc3VjaCBhcyBsaW5rIHN0YXR1cyBjaGFuZ2UgYW5kIGVycm9ycy4gIEFsbCAKICBpbnRlcnJ1cHRzIGFyZSB0aHJvdHRsZWQgdmlhIGludGVycnVwdCBtb2RlcmF0aW9uLiAgSW50ZXJydXB0IG1vZGVyYXRpb24gCiAgbXVzdCBiZSB1c2VkIHRvIGF2b2lkIGludGVycnVwdCBzdG9ybXMgd2hpbGUgdGhlIGRyaXZlciBpcyBwcm9jZXNzaW5nIG9uZSAKICBpbnRlcnJ1cHQuICBUaGUgbW9kZXJhdGlvbiB2YWx1ZSBzaG91bGQgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIGV4cGVjdGVkCiAgdGltZSBmb3IgdGhlIGRyaXZlciB0byBwcm9jZXNzIGFuIGludGVycnVwdC4gTXVsdGlxdWV1ZSBpcyBvZmYgYnkgZGVmYXVsdC4KCiAgUkVRVUlSRU1FTlRTOiBNU0ktWCBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciBNdWx0aXF1ZXVlLiBJZiBNU0ktWCBpcyBub3QgCiAgZm91bmQsIHRoZSBzeXN0ZW0gd2lsbCBmYWxsYmFjayB0byBNU0kgb3IgdG8gTGVnYWN5IGludGVycnVwdHMuIFRoaXMgZHJpdmVyCiAgc3VwcG9ydHMgbXVsdGlxdWV1ZSBpbiBrZXJuZWwgdmVyc2lvbnMgMi42LjI0IGFuZCBncmVhdGVyLiBUaGlzIGRyaXZlciAKICBzdXBwb3J0cyByZWNlaXZlIG11bHRpcXVldWUgb24gYWxsIGtlcm5lbHMgdGhhdCBzdXBwb3J0IE1TSS1YLiAKICBOT1RFUzogRG8gbm90IHVzZSBNU0ktWCB3aXRoIHRoZSAyLjYuMTkgb3IgMi42LjIwIGtlcm5lbHMuCiAgT24gc29tZSBrZXJuZWxzIGEgcmVib290IGlzIHJlcXVpcmVkIHRvIHN3aXRjaCBiZXR3ZWVuIGEgc2luZ2xlIHF1ZXVlIG1vZGUKICBhbmQgbXVsdGlxdWV1ZSBtb2Rlcywgb3IgdmljZS12ZXJzYS4KCiAgTFJPCiAgLS0tCiAgTGFyZ2UgUmVjZWl2ZSBPZmZsb2FkIChMUk8pIGlzIGEgdGVjaG5pcXVlIGZvciBpbmNyZWFzaW5nIGluYm91bmQgdGhyb3VnaHB1dAogIG9mIGhpZ2gtYmFuZHdpZHRoIG5ldHdvcmsgY29ubmVjdGlvbnMgYnkgcmVkdWNpbmcgQ1BVIG92ZXJoZWFkLiBJdCB3b3JrcyBieQogIGFnZ3JlZ2F0aW5nIG11bHRpcGxlIGluY29taW5nIHBhY2tldHMgZnJvbSBhIHNpbmdsZSBzdHJlYW0gaW50byBhIGxhcmdlciAKICBidWZmZXIgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCBoaWdoZXIgdXAgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHRodXMgcmVkdWNpbmcKICB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBoYXZlIHRvIGJlIHByb2Nlc3NlZC4gTFJPIGNvbWJpbmVzIG11bHRpcGxlIAogIEV0aGVybmV0IGZyYW1lcyBpbnRvIGEgc2luZ2xlIHJlY2VpdmUgaW4gdGhlIHN0YWNrLCB0aGVyZWJ5IHBvdGVudGlhbGx5IAogIGRlY3JlYXNpbmcgQ1BVIHV0aWxpemF0aW9uIGZvciByZWNlaXZlcy4KCiAgTk9URTogTFJPIHJlcXVpcmVzIDIuNC4yMiBvciBsYXRlciBrZXJuZWwgdmVyc2lvbi4KCiAgSUdCX0xSTyBpcyBhIGNvbXBpbGUgdGltZSBmbGFnLiBUaGUgdXNlciBjYW4gZW5hYmxlIGl0IGF0IGNvbXBpbGUgCiAgdGltZSB0byBhZGQgc3VwcG9ydCBmb3IgTFJPIGZyb20gdGhlIGRyaXZlci4gVGhlIGZsYWcgaXMgdXNlZCBieSBhZGRpbmcgCiAgQ0ZMQUdTX0VYVFJBPSItRElHQl9MUk8iIHRvIHRoZSBtYWtlIGZpbGUgd2hlbiBpdCdzIGJlaW5nIGNvbXBpbGVkLiAKCiAgICAgbWFrZSBDRkxBR1NfRVhUUkE9Ii1ESUdCX0xSTyIgaW5zdGFsbAoKICBZb3UgY2FuIHZlcmlmeSB0aGF0IHRoZSBkcml2ZXIgaXMgdXNpbmcgTFJPIGJ5IGxvb2tpbmcgYXQgdGhlc2UgY291bnRlcnMgaW4gCiAgZXRodG9vbDoKCiAgbHJvX2FnZ3JlZ2F0ZWQgLSBjb3VudCBvZiB0b3RhbCBwYWNrZXRzIHRoYXQgd2VyZSBjb21iaW5lZAogIGxyb19mbHVzaGVkIC0gY291bnRzIHRoZSBudW1iZXIgb2YgcGFja2V0cyBmbHVzaGVkIG91dCBvZiBMUk8KICBscm9fcmVjeWNsZWQgLSByZWZsZWN0cyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgcmV0dXJuZWQgdG8gdGhlIHJpbmcgZnJvbSAKICByZWN5Y2xpbmcKCiAgTk9URTogSVB2NiBhbmQgVURQIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExSTy4KCiAgCiAgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIEhhcmR3YXJlIENsb2NrIChQSEMpCiAgLS0tCgogIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJRUVFIDE1ODgKICBzcGVjaWZpY2F0aW9uIGFsbG93aW5nIG5ldHdvcmsgY2FyZHMgdG8gc3luY2hyb25pemUgdGhlaXIgY2xvY2tzIG92ZXIgYSAKICBQVFAtZW5hYmxlZCBuZXR3b3JrLiBJdCB3b3JrcyB0aHJvdWdoIGEgc2VyaWVzIG9mIHN5bmNocm9uaXphdGlvbiBhbmQgZGVsYXkKICBub3RpZmljYXRpb24gdHJhbnNhY3Rpb25zIHRoYXQgYWxsb3cgYSBzb2Z0d2FyZSBkYWVtb24gdG8gaW1wbGVtZW50IGEgUElECiAgY29udHJvbGxlciB0byBzeW5jaHJvbml6ZSB0aGUgbmV0d29yayBjYXJkIGNsb2Nrcy4KICAKICBOT1RFOiBQVFAgcmVxdWlyZXMgMy4wLjAgb3IgbGF0ZXIga2VybmVsIHZlcnNpb24gdGhhdCBoYXMgUFRQIHN1cHBvcnQKICAgICAgICBlbmFibGVkIGluIHRoZSBrZXJuZWwgYW5kIGEgdXNlci1zcGFjZSBzb2Z0d2FyZSBkYWVtb24uCiAgCiAgSUdCX1BUUCBpcyBhIGNvbXBpbGUgdGltZSBmbGFnLiBUaGUgdXNlciBjYW4gZW5hYmxlIGl0IGF0IGNvbXBpbGUgdGltZSB0byBhZGQKICBzdXBwb3J0IGZvciBQVFAgZnJvbSB0aGUgZHJpdmVyLiBUaGUgZmxhZyBpcyB1c2VkIGJ5IGFkZGluZwogIENGTEFHU19FWFRSQT0iLURJR0JfUFRQIiB0byB0aGUgbWFrZSBmaWxlIHdoZW4gaXQncyBiZWluZyBjb21waWxlZC4KCiAgICAgbWFrZSBDRkxBR1NfRVhUUkE9Ii1ESUdCX1BUUCIgaW5zdGFsbAoKICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIGNvbXBpbGUgaWYgeW91ciBrZXJuZWwgZG9lcyBub3QKICBzdXBwb3J0IFBUUC4KICAKICBZb3UgY2FuIHZlcmlmeSB0aGF0IHRoZSBkcml2ZXIgaXMgdXNpbmcgUFRQIGJ5IGxvb2tpbmcgYXQgdGhlIHN5c3RlbSBsb2cgdG8KICBzZWUgd2hldGhlciBhIFBIQyB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQgb3Igbm90LiBJZiB5b3UgaGF2ZSBhIGtlcm5lbAogIGFuZCB2ZXJzaW9uIG9mIGV0aHRvb2wgd2l0aCBQVFAgc3VwcG9ydCwgeW91IGNhbiBjaGVjayB0aGUgUFRQIHN1cHBvcnQgaW4gdGhlCiAgZHJpdmVyIGJ5IGV4ZWN1dGluZzoKCiAgICAgZXRodG9vbCAtVCBldGhYCgoKICBNQUMgYW5kIFZMQU4gYW50aS1zcG9vZmluZyBmZWF0dXJlCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFdoZW4gYSBtYWxpY2lvdXMgZHJpdmVyIGF0dGVtcHRzIHRvIHNlbmQgYSBzcG9vZmVkIHBhY2tldCwgaXQgaXMgZHJvcHBlZCBieSAKICB0aGUgaGFyZHdhcmUgYW5kIG5vdCB0cmFuc21pdHRlZC4gIEFuIGludGVycnVwdCBpcyBzZW50IHRvIHRoZSBQRiBkcml2ZXIgCiAgbm90aWZ5aW5nIGl0IG9mIHRoZSBzcG9vZiBhdHRlbXB0LgoKICBXaGVuIGEgc3Bvb2ZlZCBwYWNrZXQgaXMgZGV0ZWN0ZWQgdGhlIFBGIGRyaXZlciB3aWxsIHNlbmQgdGhlIGZvbGxvd2luZyAKICBtZXNzYWdlIHRvIHRoZSBzeXN0ZW0gbG9nIChkaXNwbGF5ZWQgYnkgIHRoZSAiZG1lc2ciIGNvbW1hbmQpOgoKICBTcG9vZiBldmVudChzKSBkZXRlY3RlZCBvbiBWRihuKQoKICBXaGVyZSBuPXRoZSBWRiB0aGF0IGF0dGVtcHRlZCB0byBkbyB0aGUgc3Bvb2ZpbmcuCgogIFNldHRpbmcgTUFDIEFkZHJlc3MsIFZMQU4gYW5kIFJhdGUgTGltaXQgVXNpbmcgSVByb3V0ZTIgVG9vbAogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFlvdSBjYW4gc2V0IGEgTUFDIGFkZHJlc3Mgb2YgYSBWaXJ0dWFsIEZ1bmN0aW9uIChWRiksIGEgZGVmYXVsdCBWTEFOIGFuZCB0aGUKICByYXRlIGxpbWl0IHVzaW5nIHRoZSBJUHJvdXRlMiB0b29sLiBEb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIAogIGlwcm91dGUyIHRvb2wgZnJvbSBTb3VyY2Vmb3JnZSBpZiB5b3VyIHZlcnNpb24gZG9lcyBub3QgaGF2ZSBhbGwgdGhlCiAgZmVhdHVyZXMgeW91IHJlcXVpcmUuCgogIApLbm93biBJc3N1ZXMvVHJvdWJsZXNob290aW5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkhhcmR3YXJlIElzc3VlczoKLS0tLS0tLS0tLS0tLS0tLQpGb3Iga25vd24gaGFyZHdhcmUgYW5kIHRyb3VibGVzaG9vdGluZyBpc3N1ZXMsIGVpdGhlciByZWZlciB0byB0aGUgIlJlbGVhc2UgCk5vdGVzIiBpbiB5b3VyIFVzZXIgR3VpZGUsIG9yIGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uLCBnbyB0byB0aGUgCmZvbGxvd2luZyB3ZWJzaXRlOgoKICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tCgpJbiB0aGUgc2VhcmNoIGJveCBlbnRlciB5b3VyIGRldmljZXMgY29udHJvbGxlciBJRCBmb2xsb3dlZCBieSAic3BlYyB1cGRhdGUiIAooaS5lLiwgODI1OTkgc3BlYyB1cGRhdGUpLiBUaGUgc3BlYyB1cGRhdGUgZmlsZSBoYXMgY29tcGxldGUgaW5mb3JtYXRpb24gb24Ka25vd24gaGFyZHdhcmUgaXNzdWVzLgoKU29mdHdhcmUgSXNzdWVzOgotLS0tLS0tLS0tLS0tLS0tCgogIE5PVEU6IEFmdGVyIGluc3RhbGxpbmcgdGhlIGRyaXZlciwgaWYgeW91ciBJbnRlbCBFdGhlcm5ldCBOZXR3b3JrIENvbm5lY3Rpb24KICBpcyBub3Qgd29ya2luZywgdmVyaWZ5IHRoYXQgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjb3JyZWN0IGRyaXZlci4KCiAgVXNpbmcgdGhlIGlnYiBkcml2ZXIgb24gMi40IG9yIG9sZGVyIDIuNiBiYXNlZCBrZXJuZWxzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgRHVlIHRvIGxpbWl0ZWQgc3VwcG9ydCBmb3IgUENJLUV4cHJlc3MgaW4gMi40IGtlcm5lbHMgYW5kIG9sZGVyIDIuNiBrZXJuZWxzLAogIHRoZSBpZ2IgZHJpdmVyIG1heSBydW4gaW50byBpbnRlcnJ1cHQgcmVsYXRlZCBwcm9ibGVtcyBvbiBzb21lIHN5c3RlbXMsIAogIHN1Y2ggYXMgbm8gbGluayBvciBoYW5nIHdoZW4gYnJpbmdpbmcgdXAgdGhlIGRldmljZS4KCiAgV2UgcmVjb21tZW5kIHRoZSBuZXdlciAyLjYgYmFzZWQga2VybmVscywgYXMgdGhlc2Uga2VybmVscyBjb3JyZWN0bHkKICBjb25maWd1cmUgdGhlIFBDSS1FeHByZXNzIGNvbmZpZ3VyYXRpb24gc3BhY2Ugb2YgdGhlIGFkYXB0ZXIgYW5kIGFsbAogIGludGVydmVuaW5nIGJyaWRnZXMuIElmIHlvdSBhcmUgcmVxdWlyZWQgdG8gdXNlIGEgMi40IGtlcm5lbCwgdXNlIGEgMi40IGtlcm5lbCAKICBuZXdlciB0aGFuIDIuNC4zMC4gRm9yIDIuNiBrZXJuZWxzIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgMi42LjIxIGtlcm5lbCBvciAKICBuZXdlci4KCiAgQWx0ZXJuYXRpdmVseSwgb24gMi42IGtlcm5lbHMgeW91IG1heSBkaXNhYmxlIE1TSSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgYnkgCiAgYm9vdGluZyB3aXRoIHRoZSAicGNpPW5vbXNpIiBvcHRpb24gb3IgcGVybWFuZW50bHkgZGlzYWJsZSBNU0kgc3VwcG9ydCBpbiAKICB5b3VyIGtlcm5lbCBieSBjb25maWd1cmluZyB5b3VyIGtlcm5lbCB3aXRoIENPTkZJR19QQ0lfTVNJIHVuc2V0LgoKICBJbnRlbChSKSBBY3RpdmUgTWFuYWdlbWVudCBUZWNobm9sb2d5IDIuMCwgMi4xLCAyLjUgbm90IHN1cHBvcnRlZCBpbiAKICBjb25qdW5jdGlvbiB3aXRoIExpbnV4IGRyaXZlcgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBEcml2ZXIgQ29tcGlsYXRpb24KICAtLS0tLS0tLS0tLS0tLS0tLS0KICBXaGVuIHRyeWluZyB0byBjb21waWxlIHRoZSBkcml2ZXIgYnkgcnVubmluZyBtYWtlIGluc3RhbGwsIHRoZSBmb2xsb3dpbmcKICBlcnJvciBtYXkgb2NjdXI6CgogICAgIkxpbnV4IGtlcm5lbCBzb3VyY2Ugbm90IGNvbmZpZ3VyZWQgLSBtaXNzaW5nIHZlcnNpb24uaCIKCiAgVG8gc29sdmUgdGhpcyBpc3N1ZSwgY3JlYXRlIHRoZSB2ZXJzaW9uLmggZmlsZSBieSBnb2luZyB0byB0aGUgTGludXggc291cmNlCiAgdHJlZSBhbmQgZW50ZXJpbmc6CgogICAgbWFrZSBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaC4KCiAgUGVyZm9ybWFuY2UgRGVncmFkYXRpb24gd2l0aCBKdW1ibyBGcmFtZXMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIERlZ3JhZGF0aW9uIGluIHRocm91Z2hwdXQgcGVyZm9ybWFuY2UgbWF5IGJlIG9ic2VydmVkIGluIHNvbWUgSnVtYm8gZnJhbWVzIAogIGVudmlyb25tZW50cy4gSWYgdGhpcyBpcyBvYnNlcnZlZCwgaW5jcmVhc2luZyB0aGUgYXBwbGljYXRpb24ncyBzb2NrZXQgYnVmZmVyCiAgc2l6ZSBhbmQvb3IgaW5jcmVhc2luZyB0aGUgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF8qbWVtIGVudHJ5IHZhbHVlcyBtYXkgaGVscC4KICBTZWUgdGhlIHNwZWNpZmljIGFwcGxpY2F0aW9uIG1hbnVhbCBhbmQgCiAgL3Vzci9zcmMvbGludXgqL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGZvciBtb3JlIGRldGFpbHMuCgogIEp1bWJvIEZyYW1lcyBvbiBGb3VuZHJ5IEJpZ0lyb24gODAwMCBzd2l0Y2gKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgVGhlcmUgaXMgYSBrbm93biBpc3N1ZSB1c2luZyBKdW1ibyBmcmFtZXMgd2hlbiBjb25uZWN0ZWQgdG8gYSBGb3VuZHJ5CiAgQmlnSXJvbiA4MDAwIHN3aXRjaC4gIFRoaXMgaXMgYSAzcmQgcGFydHkgbGltaXRhdGlvbi4gIElmIHlvdSBleHBlcmllbmNlCiAgbG9zcyBvZiBwYWNrZXRzLCBsb3dlciB0aGUgTVRVIHNpemUuCgogIE11bHRpcGxlIEludGVyZmFjZXMgb24gU2FtZSBFdGhlcm5ldCBCcm9hZGNhc3QgTmV0d29yawogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIER1ZSB0byB0aGUgZGVmYXVsdCBBUlAgYmVoYXZpb3Igb24gTGludXgsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlCiAgb25lIHN5c3RlbSBvbiB0d28gSVAgbmV0d29ya3MgaW4gdGhlIHNhbWUgRXRoZXJuZXQgYnJvYWRjYXN0IGRvbWFpbgogIChub24tcGFydGl0aW9uZWQgc3dpdGNoKSBiZWhhdmUgYXMgZXhwZWN0ZWQuICBBbGwgRXRoZXJuZXQgaW50ZXJmYWNlcwogIHdpbGwgcmVzcG9uZCB0byBJUCB0cmFmZmljIGZvciBhbnkgSVAgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgc3lzdGVtLgogIFRoaXMgcmVzdWx0cyBpbiB1bmJhbGFuY2VkIHJlY2VpdmUgdHJhZmZpYy4KCiAgSWYgeW91IGhhdmUgbXVsdGlwbGUgaW50ZXJmYWNlcyBpbiBhIHNlcnZlciwgZWl0aGVyIHR1cm4gb24gQVJQCiAgZmlsdGVyaW5nIGJ5IGVudGVyaW5nOgoKICAgIGVjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL2FsbC9hcnBfZmlsdGVyCiAgKHRoaXMgb25seSB3b3JrcyBpZiB5b3VyIGtlcm5lbCdzIHZlcnNpb24gaXMgaGlnaGVyIHRoYW4gMi40LjUpLAoKICBOT1RFOiBUaGlzIHNldHRpbmcgaXMgbm90IHNhdmVkIGFjcm9zcyByZWJvb3RzLiAgVGhlIGNvbmZpZ3VyYXRpb24KICBjaGFuZ2UgY2FuIGJlIG1hZGUgcGVybWFuZW50IGJ5IGFkZGluZyB0aGUgbGluZToKICAgIG5ldC5pcHY0LmNvbmYuYWxsLmFycF9maWx0ZXIgPSAxCiAgdG8gdGhlIGZpbGUgL2V0Yy9zeXNjdGwuY29uZgoKICAgICAgb3IsCgogIGluc3RhbGwgdGhlIGludGVyZmFjZXMgaW4gc2VwYXJhdGUgYnJvYWRjYXN0IGRvbWFpbnMgKGVpdGhlciBpbgogIGRpZmZlcmVudCBzd2l0Y2hlcyBvciBpbiBhIHN3aXRjaCBwYXJ0aXRpb25lZCB0byBWTEFOcykuCgogIERpc2FibGUgcnggZmxvdyBjb250cm9sIHdpdGggZXRodG9vbAogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEluIG9yZGVyIHRvIGRpc2FibGUgcmVjZWl2ZSBmbG93IGNvbnRyb2wgdXNpbmcgZXRodG9vbCwgeW91IG11c3QgdHVybgogIG9mZiBhdXRvLW5lZ290aWF0aW9uIG9uIHRoZSBzYW1lIGNvbW1hbmQgbGluZS4KCiAgRm9yIGV4YW1wbGU6CgogICBldGh0b29sIC1BIGV0aD8gYXV0b25lZyBvZmYgcnggb2ZmCgogIFVucGx1Z2dpbmcgbmV0d29yayBjYWJsZSB3aGlsZSBldGh0b29sIC1wIGlzIHJ1bm5pbmcKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgSW4ga2VybmVsIHZlcnNpb25zIDIuNS41MCBhbmQgbGF0ZXIgKGluY2x1ZGluZyAyLjYga2VybmVsKSwgdW5wbHVnZ2luZyAKICB0aGUgbmV0d29yayBjYWJsZSB3aGlsZSBldGh0b29sIC1wIGlzIHJ1bm5pbmcgd2lsbCBjYXVzZSB0aGUgc3lzdGVtIHRvIAogIGJlY29tZSB1bnJlc3BvbnNpdmUgdG8ga2V5Ym9hcmQgY29tbWFuZHMsIGV4Y2VwdCBmb3IgY29udHJvbC1hbHQtZGVsZXRlLiAgCiAgUmVzdGFydGluZyB0aGUgc3lzdGVtIGFwcGVhcnMgdG8gYmUgdGhlIG9ubHkgcmVtZWR5LgoKICBUcm91YmxlIHBhc3NpbmcgdHJhZmZpYyB3aXRoIG9uIHBvcnRzIDEgYW5kIDIgdXNpbmcgUkhFTDMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBUaGVyZSBpcyBhIGtub3duIGhhcmR3YXJlIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gc29tZSBzeXN0ZW1zIHdpdGggUkhFTDMgCiAga2VybmVscy4gVHJhZmZpYyBvbiBwb3J0cyAxIGFuZCAyIG1heSBiZSBzbG93ZXIgdGhhbiBleHBlY3RlZCBhbmQgcGluZyB0aW1lcwogIGhpZ2hlciB0aGFuIGV4cGVjdGVkLiAKCiAgVGhpcyBpc3N1ZSBNQVkgYmUgcmVzb2x2ZWQgYnkgdXBkYXRpbmcgdG8gdGhlIGxhdGVzdCBrZXJuZWwgYW5kIEJJT1MuIFlvdSBjYW4gCiAgY2hlY2sgeW91ciBzeXN0ZW0ncyBCSU9TIGJ5IGRvd25sb2FkaW5nIHRoZSBMaW51eCBGaXJtd2FyZSBEZXZlbG9wZXIgS2l0IHRoYXQgCiAgY2FuIGJlIG9idGFpbmVkIGF0IGh0dHA6Ly93d3cubGludXhmaXJtd2FyZWtpdC5vcmcvCgogIERvIE5vdCBVc2UgTFJPIFdoZW4gUm91dGluZyBQYWNrZXRzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBEdWUgdG8gYSBrbm93biBnZW5lcmFsIGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCBMUk8gYW5kIHJvdXRpbmcsIGRvIG5vdCB1c2UKICBMUk8gd2hlbiByb3V0aW5nIHBhY2tldHMuCgogIEJ1aWxkIGVycm9yIHdpdGggQXNpYW51eCAzLjAgLSByZWRlZmluaXRpb24gb2YgdHlwZWRlZiAnaXJxX2hhbmRsZXJfdCcKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTb21lIHN5c3RlbXMgbWF5IGV4cGVyaWVuY2UgYnVpbGQgaXNzdWVzIGR1ZSB0byByZWRlZmluaXRpb24gb2YgaXJxX2hhbmRsZXJfdC4gIAogIFRvIHJlc29sdmUgdGhpcyBpc3N1ZSBidWlsZCB0aGUgZHJpdmVyIChzdGVwIDQgYWJvdmUpIHVzaW5nIHRoZSBjb21tYW5kOgoKICAgIG1ha2UgQ0ZMQUdTX0VYVFJBPS1EQVhfUkVMRUFTRV9DT0RFPTEgaW5zdGFsbAoKICBNU0ktWCBJc3N1ZXMgd2l0aCBLZXJuZWxzIGJldHdlZW4gMi42LjE5IC0gMi42LjIxIChpbmNsdXNpdmUpCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEtlcm5lbCBwYW5pY3MgYW5kIGluc3RhYmlsaXR5IG1heSBiZSBvYnNlcnZlZCBvbiBhbnkgTVNJLVggaGFyZHdhcmUgaWYgeW91IAogIHVzZSBpcnFiYWxhbmNlIHdpdGgga2VybmVscyBiZXR3ZWVuIDIuNi4xOSBhbmQgMi42LjIxLiBJZiBzdWNoIHByb2JsZW1zIGFyZSAKICBlbmNvdW50ZXJlZCwgeW91IG1heSBkaXNhYmxlIHRoZSBpcnFiYWxhbmNlIGRhZW1vbiBvciB1cGdyYWRlIHRvIGEgbmV3ZXIgCiAga2VybmVsLgoKICBSeCBQYWdlIEFsbG9jYXRpb24gRXJyb3JzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFBhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlLiBvcmRlcjowIGVycm9ycyBtYXkgb2NjdXIgdW5kZXIgc3RyZXNzIHdpdGgga2VybmVscyAKICAyLjYuMjUgYW5kIGFib3ZlLiBUaGlzIGlzIGNhdXNlZCBieSB0aGUgd2F5IHRoZSBMaW51eCBrZXJuZWwgcmVwb3J0cyB0aGlzIAogIHN0cmVzc2VkIGNvbmRpdGlvbi4KCiAgVW5kZXIgUmVkaGF0IDUuNC1HQSAtIFN5c3RlbSBNYXkgQ3Jhc2ggd2hlbiBDbG9zaW5nIEd1ZXN0IE9TIFdpbmRvdyBhZnRlciAKICBMb2FkaW5nL1VubG9hZGluZyBQaHlzaWNhbCBGdW5jdGlvbiAoUEYpIERyaXZlcgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBEbyBub3QgcmVtb3ZlIHRoZSBpZ2IgZHJpdmVyIGZyb20gRG9tMCB3aGlsZSBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKSBhcmUgCiAgYXNzaWduZWQgdG8gZ3Vlc3RzLiBWRnMgbXVzdCBmaXJzdCB1c2UgdGhlIHhtICJwY2ktZGV0YWNoIiBjb21tYW5kIHRvIAogIGhvdC1wbHVnIHRoZSBWRiBkZXZpY2Ugb3V0IG9mIHRoZSBWTSBpdCBpcyBhc3NpZ25lZCB0byBvciBlbHNlIHNodXQgZG93biB0aGUKICBWTS4KCiAgU0xFUzEwIFNQMyByYW5kb20gc3lzdGVtIHBhbmljIHdoZW4gcmVsb2FkaW5nIGRyaXZlcgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFRoaXMgaXMgYSBrbm93biBTTEVTLTEwIFNQMyBpc3N1ZS4gQWZ0ZXIgcmVxdWVzdGluZyBpbnRlcnJ1cHRzIGZvciBNU0ktWCAKICB2ZWN0b3JzLCBzeXN0ZW0gbWF5IHBhbmljLiAKCiAgQ3VycmVudGx5IHRoZSBvbmx5IGtub3duIHdvcmthcm91bmQgaXMgdG8gYnVpbGQgdGhlIGRyaXZlcnMgd2l0aCAKICBDRkxBR1NfRVhUUkE9LURESVNBQkxFX1BDSV9NU0kgaWYgdGhlIGRyaXZlciBuZWVkIHRvIGJlIGxvYWRlZC91bmxvYWRlZC4KICBPdGhlcndpc2UgdGhlIGRyaXZlciBjYW4gYmUgbG9hZGVkIG9uY2UgYW5kIHdpbGwgYmUgc2FmZSwgYnV0IHVubG9hZGluZyBpdCAKICB3aWxsIGxlYWQgdG8gdGhlIGlzc3VlLgoKICBFbmFibGluZyBTUi1JT1YgaW4gYSAzMi1iaXQgTWljcm9zb2Z0KiBXaW5kb3dzKiBTZXJ2ZXIgMjAwOCBHdWVzdCBPUyB1c2luZwogIEludGVsIChSKSA4MjU3Ni1iYXNlZCBHYkUgb3IgSW50ZWwgKFIpIDgyNTk5LWJhc2VkIDEwR2JFIGNvbnRyb2xsZXIgdW5kZXIgS1ZNCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBLVk0gSHlwZXJ2aXNvci9WTU0gc3VwcG9ydHMgZGlyZWN0IGFzc2lnbm1lbnQgb2YgYSBQQ0llIGRldmljZSB0byBhIFZNLiAgVGhpcyAKICBpbmNsdWRlcyB0cmFkaXRpb25hbCBQQ0llIGRldmljZXMsIGFzIHdlbGwgYXMgU1ItSU9WLWNhcGFibGUgZGV2aWNlcyB1c2luZwogIEludGVsIDgyNTc2LWJhc2VkIGFuZCA4MjU5OS1iYXNlZCBjb250cm9sbGVycy4KCiAgV2hpbGUgZGlyZWN0IGFzc2lnbm1lbnQgb2YgYSBQQ0llIGRldmljZSBvciBhbiBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbiAoVkYpCiAgdG8gYSBMaW51eC1iYXNlZCBWTSBydW5uaW5nIDIuNi4zMiBvciBsYXRlciBrZXJuZWwgd29ya3MgZmluZSwgdGhlcmUgaXMgYQogIGtub3duIGlzc3VlIHdpdGggTWljcm9zb2Z0IFdpbmRvd3MgU2VydmVyIDIwMDggVk0gdGhhdCByZXN1bHRzIGluIGEgInllbGxvdyAKICBiYW5nIiBlcnJvci4gVGhpcyBwcm9ibGVtIGlzIHdpdGhpbiB0aGUgS1ZNIFZNTSBpdHNlbGYsIG5vdCB0aGUgSW50ZWwgZHJpdmVyLAogIG9yIHRoZSBTUi1JT1YgbG9naWMgb2YgdGhlIFZNTSwgYnV0IHJhdGhlciB0aGF0IEtWTSBlbXVsYXRlcyBhbiBvbGRlciBDUFUgCiAgbW9kZWwgZm9yIHRoZSBndWVzdHMsIGFuZCB0aGlzIG9sZGVyIENQVSBtb2RlbCBkb2VzIG5vdCBzdXBwb3J0IE1TSS1YCiAgaW50ZXJydXB0cywgd2hpY2ggaXMgYSByZXF1aXJlbWVudCBmb3IgSW50ZWwgU1ItSU9WLiAgCgogIElmIHlvdSB3aXNoIHRvIHVzZSB0aGUgSW50ZWwgODI1NzYgb3IgODI1OTktYmFzZWQgY29udHJvbGxlcnMgaW4gU1ItSU9WIG1vZGUKICB3aXRoIEtWTSBhbmQgYSBNaWNyb3NvZnQgV2luZG93cyBTZXJ2ZXIgMjAwOCBndWVzdCB0cnkgdGhlIGZvbGxvd2luZyAKICB3b3JrYXJvdW5kLiBUaGUgd29ya2Fyb3VuZCBpcyB0byB0ZWxsIEtWTSB0byBlbXVsYXRlIGEgZGlmZmVyZW50IG1vZGVsIG9mIENQVQogIHdoZW4gdXNpbmcgcWVtdSB0byBjcmVhdGUgdGhlIEtWTSBndWVzdDogCgogICAgICAgIi1jcHUgcWVtdTY0LG1vZGVsPTEzIgoKICBIb3N0IG1heSByZWJvb3QgYWZ0ZXIgcmVtb3ZpbmcgUEYgd2hlbiBWRiBpcyBhY3RpdmUgaW4gZ3Vlc3QKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBVc2luZyBrZXJuZWwgdmVyc2lvbnMgZWFybGllciB0aGFuIDMuMiwgZG8gbm90IHVubG9hZCB0aGUgUEYgZHJpdmVyIHdpdGggCiAgYWN0aXZlIFZGcy4gRG9pbmcgdGhpcyB3aWxsIGNhdXNlIHlvdXIgVkZzIHRvIHN0b3Agd29ya2luZyB1bnRpbCB5b3UgcmVsb2FkCiAgdGhlIFBGIGRyaXZlciBhbmQgbWF5IGNhdXNlIGEgc3BvbnRhbmVvdXMgcmVib290IG9mIHlvdXIgc3lzdGVtLgoKClN1cHBvcnQKPT09PT09PQoKRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24sIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0IHdlYnNpdGUgYXQ6CgogICAgd3d3LmludGVsLmNvbS9zdXBwb3J0LwoKb3IgdGhlIEludGVsIFdpcmVkIE5ldHdvcmtpbmcgcHJvamVjdCBob3N0ZWQgYnkgU291cmNlZm9yZ2UgYXQ6CgogICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMTAwMAoKSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCmtlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkCnRvIHRoZSBpc3N1ZSB0byBlMTAwMC1kZXZlbEBsaXN0cy5zZi5uZXQKCkxpY2Vuc2UKPT09PT09PQoKSW50ZWwgR2lnYWJpdCBMaW51eCBkcml2ZXIuCkNvcHlyaWdodChjKSAxOTk5IC0gMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CnVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgpUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCm1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCjUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCgpUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgp0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgoKVHJhZGVtYXJrcwo9PT09PT09PT09CgpJbnRlbCwgSXRhbml1bSwgYW5kIFBlbnRpdW0gYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mCkludGVsIENvcnBvcmF0aW9uIG9yIGl0cyBzdWJzaWRpYXJpZXMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIG90aGVyCmNvdW50cmllcy4KCiogT3RoZXIgbmFtZXMgYW5kIGJyYW5kcyBtYXkgYmUgY2xhaW1lZCBhcyB0aGUgcHJvcGVydHkgb2Ygb3RoZXJzLgo=