RGFuaWVsICgyOCBEZWNlbWJlciAxOTk5KToKIC0gVGltIFZlcmhvZXZlbiBjb3JyZWN0bHkgaWRlbnRpZmllZCB0aGF0IGN1cmwKICAgZG9lc24ndCBzdXBwb3J0IFVSTCBmb3JtYXR0ZWQgZmlsZSBuYW1lcyB3aGVuIGdldHRpbmcgZnRwLiBOb3csIHRoZXJlJ3MgYQogICBwcm9ibGVtIHdpdGggZ2V0dGluZyB2ZXJ5IHdlaXJkIGZpbGUgbmFtZXMgb2ZmIEZUUCBzZXJ2ZXJzLiBSRkMgOTU5IGRlZmluZXMKICAgdGhhdCB0aGUgZmlsZSBuYW1lIHN5bnRheCB0byB1c2Ugc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGluIHRoZSBuYXRpdmUgT1Mgb2YKICAgdGhlIHNlcnZlci4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgcGVlciBzZXJ2ZXIgc3lzdGVtIHdlIGN1cnJlbnRseSBqdXN0CiAgIHRyYW5zbGF0ZSB0aGUgVVJMIHN5bnRheCBpbnRvIHBsYWluIGxldHRlcnMuIEl0IGlzIHN0aWxsIGJldHRlciBhbmQgd2l0aAogICB0aGUgc29sYXJpcyAyLjYtc3VwcGxpZWQgZnRwIHNlcnZlciBpdCB3b3JrcyB3aXRoIHNwYWNlcyBpbiB0aGUgZmlsZSBuYW1lcy4KCkRhbmllbCAoMjcgRGVjZW1iZXIgMTk5OSk6CiAtIFdoZW4gY3VybCBwYXJzZWQgY29va2llcyBzdHJhaWdodCBvZmYgYSByZW1vdGUgc2l0ZSwgaXQgY29ycnVwdGVkIHRoZSBpbnB1dAogICBkYXRhLCB3aGljaCwgaWYgdGhlIGRvd25sb2FkZWQgaGVhZGVycyB3ZXJlIHN0b3JlZCBtYWRlIHZlcnkgb2RkIGNoYXJhY3RlcnMKICAgaW4gdGhlIHNhdmVkIGRhdGEuIENvcnJlY3RseSBpZGVudGlmaWVkIGFuZCByZXBvcnRlZCBieSBQYXVsIEhhcnJpbmd0b24uCgpEYW5pZWwgKDEzIERlY2VtYmVyIDE5OTkpOgogLSBHZW5lcmFsIGNsZWFudXBzIGluIHRoZSBsaWJyYXJ5IGludGVyZmFjZS4gVGhlcmUgaGFkIGJlZW4gc29tZSBiYWQga2x1ZGdlcwogICBhZGRlZCBkdXJpbmcgdGltZXMgb2Ygc3RyZXNzIGFuZCBJIGRpZCBteSBiZXN0IHRvIGNsZWFuIHRoZW0gb2ZmLiBJdCB3YXMKICAgYm90aCByZWdhcmRpbmcgdGhlIGxpYiBBUEkgYXMgd2VsbCBhcyBpbmNsdWRlIGZpbGUgY29uZnVzaW9ucy4KCkRhbmllbCAoMyBEZWNlbWJlciAxOTk5KToKIC0gQSBzbWFsbCAtLXN0ZGVyciBidWcgd2FzIHJlcG9ydGVkIGJ5IEVldHUgT2phbmVuLi4uCgogLSB3aG8gYWxzbyBicm91Z2h0IHRoZSBzdWdnZXN0aW9uIG9mIGV4dGVuZGluZyB0aGUgLVggZmxhZyB0byBmdHAgbGlzdCBhcwogICB3ZWxsLiBTbywgbm93IGl0IGlzIGFuZCB0aGUgbG9uZyBvcHRpb24gaXMgbm93IC0tcmVxdWVzdCBpbnN0ZWFkLiBJdCBpcwogICBvbmx5IGZvciBmdHAgbGlzdCBmb3Igbm93IChhbmQgdGhlIGZvcm1lciBodHRwIHN0dWZmIHRvbyBvZiBjb3Vyc2UpLgoKTGFycyBKLiBBYXMgKDI0IE5vdmVtYmVyIDE5OTkpOgogLSBQYXRjaGVkIGN1cmwgdG8gY29tcGlsZSBhbmQgYnVpbGQgdW5kZXIgQmVPUy4gRG9lc24ndCB3b3JrIHlldCB0aG91Z2ghCgogLSBDb3JyZWN0ZWQgdGhlIE1ha2VmaWxlLmFtIGZpbGVzIHRvIGFsbG93IHB1dHRpbmcgb2JqZWN0IGZpbGVzIGluCiAgIGRpZmZlcmVudCBkaXJlY3RvcmllcyB0aGFuIHRoZSBzb3VyY2VzLgoKVmVyc2lvbiA2LjMuMQoKRGFuaWVsICgyMyBOb3ZlbWJlciAxOTk5KToKIC0gSSd2ZSBoYWQgdGhpcyBtYWpvciBkaXNrIGNyYXNoLiBNeSBnb29kIG9sZCB0cnVzdC13b3J0aHkgc291cmNlIGRpc2sgZGllZAogICBhbG9uZyB3aXRoIHRoZSBtYWNoaW5lIHRoYXQgaG9zdGVkIGl0LiBUaGFuayBnb29kbmVzcyBtb3N0IG9mIGFsbCB0aGUKICAgdGhpbmdzIEkndmUgZG9uZSBhcmUgZWl0aGVyIGJhY2tlZCB1cCBlbHNld2hlcmUgb3Igc3RvcmVkIGluIHRoaXMgQ1ZTCiAgIHNlcnZlciEKCiAtIE1pY2hhZWwgUy4gU3RldWVyIHBvaW50ZWQgb3V0IGEgYnVnIGluIHRoZSAtRiBoYW5kbGluZwogICB0aGF0IG1hZGUgY3VybCBoYW5nIGlmIHlvdSBwb3N0ZWQgYW4gZW1wdHkgdmFyaWFibGUgc3VjaCBhcyAnLUYgbmFtZT0nLiBJdAogICB3YXMgb25lIG9mIHRob3NlIG9sZCBidWdzIHRoYXQgbmV2ZXIgaGF2ZSB3b3JrZWQgcHJvcGVybHkuLi4KCiAtIEphc29uIEJhaWV0dG8gcG9pbnRlZCBvdXQgYSBnZW5lcmFsIGZsYXcgaW4gdGhlIEhUVFAKICAgZG93bmxvYWQuIEN1cmwgZGlkbid0IGNvbXBsYWluIGlmIGl0IHdhcyBwcmVtYXR1cmVseSBhYm9ydGVkIGJlZm9yZSB0aGUKICAgZW50aXJlIGRvd25sb2FkIHdhcyBjb21wbGV0ZWQuIEl0IGRvZXMgbm93LgoKRGFuaWVsICgxOSBOb3ZlbWJlciAxOTk5KToKIC0gQ2hyaXMgTWFsdGJ5IHZlcnkgYWNjdXJhdGVseSBjcml0aWNpemVkIHRoZSBsYWNrIG9mCiAgIHJldHVybiBjb2RlIGNoZWNrcyBvbiB0aGUgZndyaXRlKCkgY2FsbHMuIEkgZGlkIGEgdGhvcm91Z2ggY2hlY2sgZm9yIGFsbAogICBvY2N1cnJlbmNlcyBhbmQgY29ycmVjdGVkIHRoaXMuCgpEYW5pZWwgKDE3IE5vdmVtYmVyIDE5OTkpOgogLSBQYXVsIEhhcnJpbmd0b24gcG9pbnRlZCBvdXQgdGhhdCB0aGUgLW0vLS1tYXgtdGltZSBvcHRpb24KICAgZG9lc24ndCB3b3JrIGZvciB0aGUgc2xvdyBzeXN0ZW0gY2FsbHMgbGlrZSBnZXRob3N0YnluYW1lKCkuLi4gSSBkb24ndCBoYXZlCiAgIGFueSBnb29kIGZpeCB5ZXQsIGp1c3QgYSBzbGlnaHRseSBsZXNzIGJhZCBvbmUgdGhhdCBtYWtlcyBjdXJsIGV4aXQgaGFyZAogICB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuCgogLSBCam9ybiBSZWVzZSBoZWxwZWQgbWUgcG9pbnQgb3V0IGEgcG9zc2libGUgcHJvYmxlbSB0aGF0IG1pZ2h0IGJlIHRoZSByZWFzb24KICAgd2h5IFRob21hcyBIdXJzdCBleHBlcmllbmNlIHByb2JsZW1zIGluIGhpcyBBbWlnYSB2ZXJzaW9uLgoKIERhbmllbCAoMTIgTm92ZW1iZXIgMTk5OSk6CiAtIEkgZm91bmQgYSBjcmFzaCBpbiB0aGUgbmV3IGNvb2tpZSBmaWxlIHBhcnNlci4gSXQgY3Jhc2hlZCB3aGVuIHlvdSBnYXZlCiAgIGEgcGxhaW4gaHR0cCBoZWFkZXIgZmlsZSBhcyBpbnB1dC4uLgoKVmVyc2lvbiA2LjMKCiBEYW5pZWwgKDEwIE5vdmVtYmVyIDE5OTkpOgogLSBJIGtpbmQgb2YgZm91bmQgb3V0IHRoYXQgdGhlIEhUVFAgdGltZS1jb25kaXRpb25hbCBHRVRzICgteikgYXJlbid0IGFsd2F5cwogICByZXNwZWN0ZWQgYnkgdGhlIHdlYiBzZXJ2ZXIgYW5kIHRoZSBkb2N1bWVudCBpcyB0aGVyZWZvcmUgc2VudCBpbiB3aG9sZQogICBhZ2FpbiwgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBtYXRjaCB0aGUgcmVxdWVzdGVkIGNvbmRpdGlvbi4gQWZ0ZXIgcmVhZGluZwogICBzZWN0aW9uIDEzLjMuNCBvZiBSRkMgMjYxNiwgSSB0aGluayBJJ20gZG9pbmcgdGhlIHJpZ2h0IHRoaW5nIG5vdyB3aGVuIEkgZG8KICAgbXkgb3duIGNoZWNrIGFzIHdlbGwuIElmIGN1cmwgdGhpbmtzIHRoZSBjb25kaXRpb24gaXNuJ3QgbWV0LCB0aGUgdHJhbnNmZXIKICAgaXMgYWJvcnRlZCBwcmVtYXR1cmVseSAoYWZ0ZXIgYWxsIHRoZSBoZWFkZXJzIGhhdmUgYmVlbiByZWNlaXZlZCkuCgogLSBBZnRlciBjb21tZW50cyBmcm9tIFJvYmVydCBMaW5kZW4gSSBhbHNvIHJld3JvdGUgc29tZSBwYXJ0cyBvZiB0aGUgbWFuIHBhZ2UKICAgdG8gYmV0dGVyIGRlc2NyaWJlIGhvdyB0aGUgLUYgd29ya3MuCgogLSBNaWNoYWVsIEFudGkgcHV0IHVwIGEgbmV3IGN1cmwgZG93bmxvYWQgbWlycm9yIGluCiAgIENoaW5hOiAgaHR0cDovL3d3dy5wc2hvd2luZy5jb20vY3VybC8KCiAtIEkgYWRkZWQgdGhlIGxpc3Qgb2YgZG93bmxvYWQgbWlycm9ycyB0byB0aGUgUkVBRE1FIGZpbGUKCiAtIEkgZGlkIGFkZCBtb3JlIGV4cGxhbmF0aW9ucyB0byB0aGUgbWFuIHBhZ2UKCiBEYW5pZWwgKDggTm92ZW1iZXIgMTk5OSk6CiAtIEkgbWFkZSB0aGUgLWIvLS1jb29raWUgb3B0aW9uIGNhcGFibGUgb2YgcmVhZGluZyBuZXRzY2FwZSBmb3JtYXR0ZWQgY29va2llCiAgIGZpbGVzIGFzIHdlbGwgYXMgbm9ybWFsIGh0dHAtaGVhZGVyIGZpbGVzLiBJdCBzaG91bGQgYmUgYWJsZSB0bwogICB0cmFuc3BhcmVudGx5IGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGZpbGUgaXQgZ290IGFzIGlucHV0LgoKIERhbmllbCAoMjkgT2N0b2JlciAxOTk5KToKIC0gQW5vdGhlciBvbmUgb2YgU2ViYXN0aWFhbiB2YW4gRXJrJ3MgaWRlYXMgKHRoYXQgaGFzIGJlZW4gcmVxdWVzdGVkIGJlZm9yZQogICBidXQgSSBzZWVtIHRvIGhhdmUgZm9yZ290dGVuIHdobyBpdCB3YXMpLCBpcyB0byBhZGQgc3VwcG9ydCBmb3IgcmFuZ2VzIGluCiAgIEZUUCBkb3dubG9hZHMuIEFzIHVzdWFsLCBvbmUgcmVxdWVzdCBpcyBqdXN0IGEgcmVxdWVzdCwgd2hlbiB0aGV5J3JlIHR3bwogICBpdCBpcyBhIGRlbWFuZC4gSSd2ZSBhZGRlZCBzaW1wbGUgc3VwcG9ydCBmb3IgWC1ZIHN0eWxlIGZldGNoZXMuIFggaGFzIHRvCiAgIGJlIHRoZSBsb3dlciBudW1iZXIsIHRob3VnaCB5b3UgbWF5IG9taXQgb25lIG9mIHRoZSBudW1iZXJzLiBVc2UgdGhlIC1yLwogICAtLXJhbmdlIHN3aXRjaCAocHJldmlvdXNseSBIVFRQLW9ubHkpLgoKIC0gU2ViYXN0aWFhbiB2YW4gRXJrIHN1Z2dlc3RlZCB0aGF0IGN1cmwgc2hvdWxkIGJlCiAgIGFibGUgdG8gc2hvdyB0aGUgZmlsZSBzaXplIG9mIGEgc3BlY2lmaWVkIGZpbGUuIEkgdGhpbmsgdGhpcyBpcyBhIHNwbGVuZGlkCiAgIGlkZWEgYW5kIHRoZSAtSSBmbGFnIGlzIG5vdyB3b3JraW5nIGZvciBGVFAuIEl0IGRpc3BsYXlzIHRoZSBmaWxlIHNpemUgaW4KICAgdGhpcyBtYW5uZXI6CiAgICAgICAgQ29udGVudC1MZW5ndGg6IFhYWFgKICAgQXMgaXQgcmVzZW1ibGVzIG5vcm1hbCBoZWFkZXJzLCBhbmQgbGVhdmVzIHVzIHRoZSBvcHBvcnR1bml0eSB0byBhZGQgbW9yZQogICBpbmZvIGluIHRoYXQgZGlzcGxheSBpZiB3ZSBjYW4gY29tZSB1cCB3aXRoIG1vcmUgaW4gdGhlIGZ1dHVyZSEgSXQgYWxzbwogICBtYWtlcyBzZW5zZSBzaW5jZSBpZiB5b3UgYWNjZXNzIGZ0cCB0aHJvdWdoIGEgSFRUUCBwcm94eSwgeW91J2QgZ2V0IHRoZQogICBmaWxlIHNpemUgdGhlIHNhbWUgd2F5LgoKICAgSSBjaGFuZ2VkIHRoZSBvcmRlciBvZiB0aGUgUVVPVEUgY29tbWFuZCBleGVjdXRpb25zLiBUaGV5J3JlIG5vdyBleGVjdXRlZAogICBqdXN0IGFmdGVyIHRoZSBsb2dpbiBhbmQgYmVmb3JlIGFueSBvdGhlciBjb21tYW5kLiBJIG1hZGUgdGhpcyB0byBlbmFibGUKICAgcXVvdGUgY29tbWFuZHMgdG8gcnVuIGJlZm9yZSB0aGUgLUkgc3R1ZmYgaXMgZG9uZSB0b28uCgogLSBJIGZvdW5kIG91dCB0aGF0IC1ELy0tZHVtcC1oZWFkZXIgYW5kIC1WLy0tdmVyc2lvbiB3ZXJlbid0IGRvY3VtZW50ZWQgaW4KICAgdGhlIG1hbiBwYWdlLgoKIC0gTWFueSBIVFRQLzEuMSBzZXJ2ZXJzIGRvIG5vdCBzdXBwb3J0IHJhbmdlcy4gRG9uJ3QgYXNrIG1lIHdoeS4gSSBkaWQgYWRkCiAgIHNvbWUgdGV4dCBhYm91dCB0aGlzIGluIHRoZSBtYW4gcGFnZSBmb3IgdGhlIHJhbmdlIG9wdGlvbi4gVGhlIHRocmVhZCBpbgogICB0aGUgbWFpbGluZyBsaXN0IHRoYXQgc3RhcnRlZCB0aGlzIHdhcyBpbml0aWF0ZWQgYnkgTWljaGFlbCBBbnRpLgoKIC0gSSBnZXQgcmVwb3J0cyBhYm91dCBucm9mZiBjcmFzaGVzIG9uIHNvbGFyaXMgMi42KyB3aGVuIGRpc3BsYXlpbmcgdGhlIGN1cmwKICAgbWFuIHBhZ2UuIFN3aXRjaCB0byBnbnJvZmYgaW5zdGVhZCwgaXQgaXMgcmVwb3J0ZWQgdG8gd29yayghKS4gQWRhbSBCYXJjbGF5CiAgIHJlcG9ydGVkIGFuZCBicm91Z2h0IHRoZSBzdWdnZXN0aW9uLgoKIC0gSW4gYSBkaWFsb2d1ZSB3aXRoIEpvaGFubmVzIEcuIEtyaXN0aW5zc29uIHdlIGNhbWUKICAgdXAgd2l0aCB0aGUgaWRlYSB0byBsZXQgLUgvLS1oZWFkZXIgc3BlY2lmaWVkIGhlYWRlcnMgcmVwbGFjZSB0aGUKICAgaW50ZXJuYWxseSBnZW5lcmF0ZWQgaGVhZGVycywgaWYgeW91IGhhcHBlbmVkIHRvIHNlbGVjdCB0byBhZGQgYSBoZWFkZXIKICAgdGhhdCBjdXJsIG5vcm1hbGx5IHVzZXMgYnkgaXRzZWxmLiBUaGUgYWR2YW50YWdlIHdpdGggdGhpcyBpcyBub3QgZW50aXJlbHkKICAgb2J2aW91cywgYnV0IGluIEpvaGFubmVzJyBjYXNlIGl0IG1lYW5zIHRoYXQgaGUgY2FuIHVzZSBhbm90aGVyIEhvc3Q6IHRoYW4KICAgdGhlIG9uZSBjdXJsIHdvdWxkIHNldC4KCiBEYW5pZWwgKDI3IE9jdG9iZXIgMTk5OSk6CiAtIEpvbmdraSBTdXdhbmRpIGJyb3VnaHQgYSBuaWNlIHBhdGNoIGZvciAoeWV0IGFub3RoZXIpIGNyYXNoIHdoZW4gZm9sbG93aW5nCiAgIGEgbG9jYXRpb246LiBUaGlzIHRpbWUgeW91IGhhZCB0byBmb2xsb3cgYSBodHRwczovLyBzZXJ2ZXIncyByZWRpcmVjdCB0bwogICBnZXQgdGhlIGNvcmUuCgpWZXJzaW9uIDYuMgoKIERhbmllbCAoMjEgT2N0b2JlciAxOTk5KToKIC0gSSB0aGluayBJIG1hbmFnZWQgdG8gcmVtb3ZlIHRoZSBzdXNwaWNpb3VzIChuaWwpIHRoYXQgaGFzIGJlZW4gc2VlbiBqdXN0CiAgIGJlZm9yZSB0aGUgIkhvc3Q6IiBpbiBIVFRQIHJlcXVlc3RzIHdoZW4gLXYgd2FzIHVzZWQuCiAtIEkgZm91bmQgb3V0IHRoYXQgaWYgeW91IGZvbGxvd2VkIGEgbG9jYXRpb246IHdoZW4gdXNpbmcgYSBwcm94eSwgd2l0aG91dAogICBoYXZpbmcgc3BlY2lmaWVkIGh0dHA6Ly8gaW4gdGhlIFVSTCwgdGhlIHByb3RvY29sIHBhcnQgd2FzIGFkZGVkIG9uY2UgYWdhaW4KICAgd2hlbiBtb3ZpbmcgdG8gdGhlIG5leHQgVVJMISAoVGhlIHByb3RvY29sIHBhcnQgaGFzIHRvIGJlIGFkZGVkIHRvIHRoZQogICBVUkwgd2hlbiBnb2luZyB0aHJvdWdoIGEgcHJveHkgc2luY2UgaXQgaGFzIG5vIHByb3RvY29sLWd1ZXNzaW5nIHN5c3RlbQogICBzdWNoIGFzIGN1cmwgaGFzLikKIC0gQmVuamFtaW4gUml0Y2V5IHJlcG9ydGVkIGEgY29yZSBkdW1wIHVuZGVyIHNvbGFyaXMgMi42CiAgIHdpdGggT3BlblNTTCAwLjkuNC4gSXQgdHVybmVkIG91dCB0aGlzIHdhcyBkdWUgdG8gYSBiYWQgZnJlZSgpIGluIG1haW4uYwogICB0aGF0IG9jY3VycmVkIGFmdGVyIHRoZSBkb3dubG9hZCB3YXMgZG9uZSBhbmQgY29tcGxldGVkLgogLSBCZW5qYW1pbiBmb3VuZCBmdHAgZG93bmxvYWRzIHRvIHNob3cgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGRvd25sb2FkIG1ldGVyCiAgIHRvIGdldCB3cml0dGVuIHR3aWNlLCBhbmQgSSByZW1vdmVkIHRoYXQgcHJvYmxlbS4gSXQgd2FzIGludHJvZHVjZWQgd2l0aAogICB0aGUgbXVsdGlwbGUgVVJMIHN1cHBvcnQuCiAtIERhbiBaaXR0ZXIgY29ycmVjdGx5IHBvaW50ZWQgb3V0IHRoYXQgY3VybCA2LjEgYW5kIGVhcmxpZXIgdmVyc2lvbnMgZGlkbid0CiAgIGhvbm9yIFJGQyAyNjE2IGNoYXB0ZXIgNCBzZWN0aW9uIDIsICJNZXNzYWdlIEhlYWRlcnMiOiAiLi4uRmllbGQgbmFtZXMgYXJlCiAgIGNhc2UtaW5zZW5zaXRpdmUuLi4iICBIVFRQIGhlYWRlciBwYXJzaW5nIGFzc3VtZWQgYSBjZXJ0YWluIGNhc2luZy4gRGFuCiAgIGFsc28gcHJvdmlkZWQgbWUgd2l0aCBhIHBhdGNoIHRoYXQgY29ycmVjdGVkIHRoaXMsIHdoaWNoIEkgdG9vayB0aGUgbGliZXJ0eQogICBvZiBlZGl0aW5nIHNsaWdodGx5LgogLSBEYW4gWml0dGVyIGFsc28gcHJvdmlkZWQgYSBuaWNlIHBhdGNoIGZvciBjb25maWcuZ3Vlc3MgdG8gYmV0dGVyIHJlY29nbml6ZQogICB0aGUgTWFjIE9TIFgKIC0gRGFuIGFsc28gY29ycmVjdGVkIGEgbWlub3IgcHJvYmxlbSBpbiB0aGUgbGliL01ha2VmaWxlIHRoYXQgY2F1c2VkIGxpbmtpbmcKICAgdG8gZmFpbCBvbiBPUyBYLgoKIERhbmllbCAoMTkgT2N0b2JlciAxOTk5KToKIC0gTGVuIE1hcmluYWNjaW8gY2FtZSB1cCB3aXRoIHNvbWUgcHJvYmxlbXMgd2l0aCBjdXJsLiAgU2luY2UgV2luZG93cyBoYXMgYQogICBjcmlwcGxlZCBzaGVsbCwgaXQgY2FuJ3QgcmVkaXJlY3Qgc3RkZXJyIGFuZCB0aGF0IGNhdXNlcyB0cm91YmxlLiBJIGFkZGVkCiAgIC0tc3RkZXJyIHRvZGF5IHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byByZWRpcmVjdCB0aGUgc3RkZXJyIHN0cmVhbSB0byBhCiAgIGZpbGUgb3Igc3Rkb3V0LgoKIERhbmllbCAoMTggT2N0b2JlciAxOTk5KToKIC0gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgbm93IHVuZGVyc3RhbmRzIHRoZSAnLS13aXRob3V0LXNzbCcgZmxhZywgd2hpY2ggbm93CiAgIHRvdGFsbHkgZGlzYWJsZSBTU0wvaHR0cHMgc3VwcG9ydC4gUHJldmlvdXNseSBpdCB3YXNuJ3QgcG9zc2libGUgdG8gZm9yY2UKICAgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gbGVhdmUgU1NMIGFsb25lLiBUaGUgcHJldmlvdXMgZnVuY3Rpb25hbGl0eSBoYXMKICAgYmVlbiByZXRhaW5lZC4gVHJveSBFbmdlbCBoZWxwZWQgdGVzdCB0aGlzIG5ldyBvbmUuCgpWZXJzaW9uIDYuMQoKIERhbmllbCAoMTcgT2N0b2JlciAxOTk5KToKIC0gSSBpZmRlZidlZCBvciBjb21tZW50ZWQgYWxsIHRoZSB6bGliIHN0dWZmIGluIHRoZSBzb3VyY2VzIGFuZCBjb25maWd1cmUKICAgc2NyaXB0LiBJdCB0dXJuZWQgb3V0IHdlIG5lZWRlZCB0byBtb2NrIG1vcmUgd2l0aCB6bGliIHRoYW4gSSBpbml0aWFsbHkKICAgdGhvdWdodCwgdG8gbWFrZSBpdCBjYXBhYmxlIG9mIGRvd25sb2FkaW5nIGNvbXByZXNzZWQgSFRUUCBkb2N1bWVudHMgYW5kCiAgIHVuY29tcHJlc3MgdGhlbSBvbiB0aGUgZmx5LiBJIGRpZG4ndCBtZWFuIHRoZSB6bGliIHBhcnRzIG9mIGN1cmwgdG8gYmVjb21lCiAgIG1vcmUgdGhhbiBtaW5vciBzbyB0aGlzIG1lYW5zIEkgaGFsdCB0aGUgemxpYiBleHBlZGl0aW9uIGZvciBub3cgYW5kIHdhaXQKICAgdW50aWwgc29tZW9uZSBlaXRoZXIgd3JpdGVzIHRoZSBjb2RlIG9yIHpsaWIgZ2V0cyB1cGRhdGVkIGFuZCBiZXR0ZXIKICAgYWRqdXN0ZWQgZm9yIHRoaXMga2luZCBvZiB1c2FnZS4gIEkgd29uJ3QgZ2V0IGludG8gZGV0YWlscyBoZXJlLCBidXQgYQogICBzaG9ydCBhIHN1bW1hcnkgaXMgc3VpdGFibGU6CiAgIC0gemxpYiBjYW4ndCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGV0aGVyIHRvIHVzZSB6bGliIG9yIGd6aXAKICAgICBkZWNvbXByZXNzaW9uIG1ldGhvZHMuCiAgIC0gemxpYiBpcyB2ZXJ5IG5lYXQgZm9yIHJlYWRpbmcgZ3ppcHBlZCBmaWxlcyBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yLAogICAgIGFsdGhvdWdoIG5vdCBhcyBuaWNlIGZvciByZWFkaW5nIGJ1ZmZlci1iYXNlZCBkYXRhIHN1Y2ggYXMgd2Ugd291bGQKICAgICB3YW50IGl0LgogICAtIHRoZXJlIGFyZSBzdGlsbCBzb21lIHByb2JsZW1zIHdpdGggdGhlIHdpbjMyIHZlcnNpb24gd2hlbiByZWFkaW5nIGZyb20KICAgICBhIGZpbGUgZGVzY3JpcHRvciBpZiB0aGF0IGlzIGEgc29ja2V0CgogRGFuaWVsICgxNCBPY3RvYmVyIDE5OTkpOgogLSBNb3ZlZCB0aGUgKGV4dGVybmFsKSBpbmNsdWRlIGZpbGVzIGZvciBsaWJjdXJsIGludG8gYSBzdWJkaXJlY3RvcnkgbmFtZWQKICAgY3VybCBhbmQgYWRqdXN0ZWQgYWxsICNpbmNsdWRlIGxpbmVzIHRvIHVzZSA8Y3VybC9YWFhYPiB0byBtYWludGFpbiBhCiAgIGJldHRlciBuYW1lIHNwYWNlIGFuZCBjb250cm9sIG9mIHRoZSBoZWFkZXJzLiBUaGlzIGhhcyBiZWVuIHJlcXVlc3RlZC4KCiBEYW5pZWwgKDEyIE9jdG9iZXIgMTk5OSk6CiAtIEkgbW9kaWZpZWQgdGhlICdtYWtldGd6JyBzY3JpcHQgdG8gcGVyZm9ybSBhICdtYWtlJyB0b28gYmVmb3JlIGEgcmVsZWFzZQogICBhcmNoaXZlIGlzIHB1dCB0b2dldGhlciBpbiBhbiBhdHRlbXB0IHRvIG1ha2UgdGhlIHRpbWUgc3RhbXBzIGJldHRlciBhbmQKICAgaG9wZWZ1bGx5IGF2b2lkIHRoZSBkb3VibGUgY29uZmlndXJlLXJ1bm5pbmcgdGhhdCB1c2UgdG8gb2NjdXIuCgogRGFuaWVsICgxMSBPY3RvYmVyIDE5OTkpOgogLSBBcHBsaWVkIEr2cm4ncyBwYXRjaGVzIHRoYXQgZml4ZXMgemxpYiBmb3IgbWluZ3czMiBjb21waWxlcyBhcyB3ZWxsIGFzCiAgIHNvbWUgb3RoZXIgbWlzc2luZyB6bGliICNpZmRlZiBhbmQgbW9yZSB0ZXh0IG9uIHRoZSBtdWx0aXBsZSBVUkwgZG9jcyBpbgogICB0aGUgbWFuIHBhZ2UuCgpWZXJzaW9uIDYuMWJldGEKCiBEYW5pZWwgKDYgT2N0b2JlciAxOTk5KToKIC0gRG91Z2xhcyBFLiBXZWdzY2hlaWQgc2VudCBtZSBhIHBhdGNoIHRoYXQgbWFkZSB0aGUgZXhhY3Qgc2FtZSB0aGluZyBhcyBJCiAgIGp1c3QgbWFkZTogdGhlIC1kIHN3aXRjaCBpcyBub3cgY2FwYWJsZSBvZiByZWFkaW5nIHBvc3QgZGF0YSBmcm9tIGEgbmFtZWQKICAgZmlsZSBvciBzdGRpbi4gIFVzZSBpdCBzaW1pbGFybHkgdG8gdGhlIC1GLiBUbyByZWFkIHRoZSBwb3N0IGRhdGEgZnJvbSBhCiAgIGdpdmVuIGZpbGU6CgogICAgICAgIGN1cmwgLWQgQHBhdGgvdG8vZmlsZW5hbWUgd3d3LnBvc3RzaXRlLmNvbQoKICAgb3IgbGV0IGN1cmwgcmVhZCBpdCBvdXQgZnJvbSBzdGRpbjoKCiAgICAgICAgY3VybCAtZCBALSB3d3cucG9zdGl0LmNvbQoKIEr2cm4gSGFydHJvdGggKDMgT2N0b2JlciAxOTk5KToKIC0gQnJvdWdodCBzb21lIG1vcmUgcGF0Y2hlcyBmb3IgbXVsdGlwbGUgVVJMIGZ1bmN0aW9uYWxpdHkuIFRoZSBNSU1FCiAgIHNlcGFyYXRpb24gaWRlYXMgYXJlIGFsbW9zdCBzY3JhcHBlZCBub3csIGFuZCBhIGN1c3RvbSBzZXBhcmF0b3IgaXMgYmVpbmcKICAgdXNlZCBpbnN0ZWFkLiBUaGlzIGlzIHN0aWxsIGNvbXBpbGUtdGltZSAiZmxhZ2dlZCIuCgogRGFuaWVsCiAtIFVwZGF0ZWQgY3VybC4xIHdpdGggbXVsdGlwbGUgVVJMIGluZm8uCgogRGFuaWVsICgzMCBTZXB0ZW1iZXIgMTk5OSk6CiAtIEZlbGl4IHZvbiBMZWl0bmVyIGJyb3VnaHQgb3BlbnNzbC1jaGVjayBmaXhlcyBmb3IgY29uZmlndXJlLmluIHRvIHdvcmsKICAgb3V0LW9mLXRoZS1ib3ggd2hlbiB0aGUgb3BlbnNzbCBmaWxlcyBhcmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0gZGVmYXVsdAogICBkaXJzLgoKIERhbmllbCAoMjggU2VwdGVtYmVyIDE5OTkpCiAtIEFkZGVkIGxpYnogZnVuY3Rpb25hbGl0eS4gVGhpcyBzaG91bGQgZW5hYmxlIGRlY29tcHJlc3NpbmcgZ3ppcCwgY29tcHJlc3MKICAgb3IgZGVmbGF0ZSBlbmNvZGluZyBIVFRQIGRvY3VtZW50cy4gSXQgYWxzbyBtYWtlcyBjdXJsIHNlbmQgYW4gYWNjZXB0IHRoYXQKICAgaXQgYWNjZXB0cyB0aGF0IGtpbmQgb2YgZW5jb2RpbmcuIENvbXByZXNzZWQgY29udGVudHMgdXN1YWxseSBzaG9ydGVucwogICBkb3dubG9hZCB0aW1lLiBJICpuZWVkKiBzb21lb25lIHRvIHRlbGwgbWUgYSBzaXRlIHRoYXQgdXNlcyBjb21wcmVzc2VkIEhUVFAKICAgZG9jdW1lbnRzIHNvIHRoYXQgSSBjYW4gdGVzdCB0aGlzIG91dCBwcm9wZXJseS4KCiAtIEFzIGEgcmVzdWx0IG9mIHRoZSBhZGRpbmcgb2YgemxpYiBhd2FyZW5lc3MsIEkgY2hhbmdlZCB0aGUgdmVyc2lvbiBzdHJpbmcKICAgYSBsaXR0bGUuIEkgcGxhbiB0byBhZGQgb3BlbmxkYXAgdmVyc2lvbiByZXBvcnRpbmcgaW4gdGhlcmUgdG9vLgoKIERhbmllbCAoMTcgU2VwdGVtYmVyIDE5OTkpCiAtIE1hZGUgdGhlIC1GIG9wdGlvbiBhbGxvdyBzdGRpbiB3aGVuIHNwZWNpZnlpbmcgZmlsZXMuIEJ5IHVzaW5nICctJyBpbnN0ZWFkCiAgIG9mIGZpbGUgbmFtZSwgdGhlIGRhdGEgd2lsbCBiZSByZWFkIGZyb20gc3RkaW4uCgpWZXJzaW9uIDYuMAoKIERhbmllbCAoMTMgU2VwdGVtYmVyIDE5OTkpCiAtIEFkZGVkIC1YLy0taHR0cC1yZXF1ZXN0IDxyZXF1ZXN0PiB0byBlbmFibGUgYW55IEhUVFAgY29tbWFuZCB0byBiZSBzZW50LgogICBEbyBub3QgdGhhdCB5b3VyIHNlcnZlciBoYXMgdG8gc3VwcG9ydCB0aGUgZXhhY3Qgc3RyaW5nIHlvdSBlbnRlci4gVGhpcwogICBzaG91bGQgcG9zc2libHkgYSBzdHJpbmcgbGlrZSBERUxFVEUgb3IgVFJBQ0UuCgogLSBBcHBsaWVkIERvdWdsYXMnIG1pbmd3MzItZml4ZXMgZm9yIHRoZSBtYWtlZmlsZXMuCgogRGFuaWVsICgxMCBTZXB0ZW1iZXIgMTk5OSkKIC0gRG91Z2xhcyBFLiBXZWdzY2hlaWQgcG9pbnRlZCBvdXQgYSBwcm9ibGVtLiBDdXJsIGRpZG4ndCBjaGVjayB0aGUgRlRQCiAgIHNlcnZlcnMgcmV0dXJuIGNvZGUgcHJvcGVybHkgYWZ0ZXIgdGhlIC0tcXVvdGUgY29tbWFuZHMgd2VyZSBpc3N1ZWQuIEl0CiAgIHRvb2sgYW55dGhpbmcgbm9uIDIwMCBhcyBhbiBlcnJvciwgd2hlbiBhbGwgMlhYIGNvZGVzIHNob3VsZCBiZSBhY2NlcHRlZCBhcwogICBPSy4KCiAtIFNlbmRpbmcgY29va2llcyB0byB0aGUgc2FtZSBzaXRlIGluIG11bHRpcGxlIGxpbmVzIGxpa2UgY3VybCB1c2VkIHRvIGRvCiAgIHR1cm5lZCBvdXQgdG8gYmUgYmFkIGFuZCBicmVha2luZyB0aGUgY29va2llIHNwZWNzLiBDdXJsIG5vdyBzZW5kcyBhbGwKICAgY29va2llcyBvbiBhIHNpbmdsZSBDb29raWU6IGxpbmUuIEN1cmwgaXMgbm90IHlldCBSRkMgMjEwOSBjb21wbGlhbnQsIGJ1dCBJCiAgIGRvdWJ0IHRoYXQgbWFueSBzZXJ2ZXJzIGRvIHVzZSB0aGF0IHN5bnRheCAoeWV0KS4KCiBEYW5pZWwgKDggU2VwdGVtYmVyIDE5OTkpCiAtIEr2cm4gaGVscGVkIG1lIG1ha2Ugc3VyZSBpdCBzdGlsbCBjb21waWxlcyBuaWNlbHkgd2l0aCBtaW5ndzMyIHVuZGVyIHdpbjMyLgoKIERhbmllbCAoNyBTZXB0ZW1iZXIgMTk5OSkKIC0gRlRQIHVwbG9hZCB0aHJvdWdoIHByb3h5IGlzIG5vdyB0dXJuZWQgaW50byBhIEhUVFAgUFVULiBSZXF1ZXN0ZWQgYnkKICAgU3RlZmFuIEthbnRoYWsuCgogLSBBZGRlZCB0aGUgbGRhcCBmaWxlcyB0byB0aGUgLm0zMiBtYWtlZmlsZS4KCiBEYW5pZWwgKDMgU2VwdGVtYmVyIDE5OTkpCiAtIE1hZGUgY29va2llIG1hdGNoaW5nIHdvcmsgd2hpbGUgdXNpbmcgSFRUUCBwcm94eS4KCiBCam9ybiBSZWVzZSAoMzEgQXVndXN0IDE5OTkpCiAtIFBhc3NlZCBoaXMgbGRhcDovLyBwYXRjaC4gTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgdGhlIG9wZW5sZGFwIHNoYXJlZAogICBsaWJyYXJ5IHRvIGJlIGluc3RhbGxlZCBhbmQgdGhhdCBMRF9MSUJSQVJZX1BBVEggcG9pbnRzIHRvIHRoZQogICBkaXJlY3Rvcnkgd2hlcmUgdGhlIGxpYiB3aWxsIGJlIGZvdW5kIHdoZW4gY3VybCBpcyBydW4gd2l0aCBhCiAgIGxkYXA6Ly8gVVJMLgoKIEr2cm4gSGFydHJvdGggKDMxIEF1Z3VzdCAxOTk5KQogLSBNYWRlIHRoZSBNaW5ndzMyIG1ha2VmaWxlcyBpbnRvIHNpbmdsZSBmaWxlcy4KIC0gTWFkZSBmaWxlOi8vIHdvcmsgZm9yIFdpbjMyLiBUaGUgc2FtZSBjb2RlIGlzIG5vdyB1c2VkIGZvciB1bml4IGFzIHdlbGwgZm9yCiAgIHBlcmZvcm1hbmNlIHJlYXNvbnMuCgogRG91Z2xhcyBFLiBXZWdzY2hlaWQgKDMwIEF1Z3VzdCAxOTk5KQogLSBQYXRjaGVkIHRoZSBNaW5ndzMyIG1ha2VmaWxlcyBmb3IgU1NMIGJ1aWxkcy4KCiBNYXR0aGV3IENsYXJrZSAoMzAgQXVndXN0IDE5OTkpCiAtIE1hZGUgYSBjb29sIHBhdGNoIGZvciBjb25maWd1cmUuaW4gdG8gYWxsb3cgLS13aXRoLXNzbCB0byBzcGVjaWZ5IHRoZQogICByb290IGRpciBvZiB0aGUgb3BlbnNzbCBpbnN0YWxsYXRpb24sIGFzIGluCgogICAgICAgIC4vY29uZmlndXJlIC0td2l0aC1zc2w9L3Vzci9zc2xfaGVyZQoKIC0gQ29ycmVjdGVkIHRoZSAncmVjb25mJyBzY3JpcHQgdG8gd29yayBiZXR0ZXIgd2l0aCBzb21lIHNoZWxscy4KCiBK9nJuIEhhcnRyb3RoICgyNiBBdWd1c3QgMTk5OSkKIC0gRml4ZWQgdGhlIE1pbmd3MzIgbWFrZWZpbGVzIGluIGxpYi8gYW5kIGNvcnJlY3RlZCB0aGUgZmlsZS5jIGZvciB3aW4zMgogICBjb21waWxlcy4KClZlcnNpb24gNS4xMQoKIERhbmllbCAoMjUgQXVndXN0IDE5OTkpCiAtIEpvaG4gV2Vpc21pbGxlciBwb2ludGVkIG91dCBhIGJ1ZyBpbiB0aGUgaGVhZGVyLWxpbmUKICAgcmVhbGxvYygpIHN5c3RlbSBpbiBkb3dubG9hZC5jLgoKIC0gSSBhZGRlZCBsaWIvZmlsZS5bY2hdIHRvIG9mZmVyIGEgZmlyc3QsIHNpbXBsZSwgZmlsZTovLyBzdXBwb3J0LiBJdAogICBwcm9iYWJseSB3b24ndCBkbyBtdWNoIGdvb2Qgb24gd2luMzIgc3lzdGVtIGF0IHRoaXMgcG9pbnQsIGJ1dCBJIHNlZSBpdAogICBhcyBhIHN0YXJ0LgoKIC0gTWFkZSB0aGUgcmVsZWFzZSBhcmNoaXZlcyBnZXQgYSBNYWtlZmlsZSBpbiB0aGUgcm9vdCBkaXIsIHdoaWNoIGNhbiBiZQogICB1c2VkIHRvIHN0YXJ0IHRoZSBjb21waWxpbmcvYnVpbGRpbmcgcHJvY2VzcyBlYXNpZXIuIEkgaGF2ZW4ndCByZWFsbHkKICAgY2hhbmdlZCBhbnkgSU5TVEFMTCB0ZXh0IHlldCwgSSB3YW50ZWQgdG8gZ2V0IHNvbWUgZmVlZC1iYWNrIG9uIHRoaXMKICAgZmlyc3QuCgogRGFuaWVsICgxNyBBdWd1c3QgMTk5OSkKIC0gQW5vdGhlciBMb2NhdGlvbjogYnVnLiBDdXJsIGRpZG4ndCBkbyBwcm9wZXIgcmVsYXRpdmUgbG9jYXRpb25zIGlmIHRoZQogICBvcmlnaW5hbCBVUkwgaGFkIGNnaS1wYXJhbWV0ZXJzIHRoYXQgY29udGFpbmVkIGEgc2xhc2guIE51c3UncyBwYWdlCiAgIGFnYWluLgoKIC0gQ29ycmVjdGVkIHRoZSBOT19QUk9YWSB1c2FnZS4gSXQgaXMgYSBsaXN0IG9mIHN1YnN0cmluZ3MgdGhhdCBpZiBvbmUgb2YKICAgdGhlbSBtYXRjaGVzIHRoZSB0YWlsIG9mIHRoZSBob3N0IG5hbWUgaXQgc2hvdWxkIGNvbm5lY3QgdG8sIGN1cmwgc2hvdWxkCiAgIG5vdCB1c2UgYSBwcm94eSB0byBjb25uZWN0IHRoZXJlLiBQb2ludGVkIG91dCB0byBtZSBieSBEb3VnbGFzCiAgIEUuIFdlZ3NjaGVpZC4gIEkgYWxzbyBjaGFuZ2VkIHRoZSBSRUFETUUgdGV4dCBhIGxpdHRsZSByZWdhcmRpbmcgdGhpcy4KCiBEYW5pZWwgKDE2IEF1Z3VzdCAxOTk5KQogLSBGaXhlZCBhIG1lbW9yeSBidWcgd2l0aCBodHRwLXNlcnZlcnMgdGhhdCBzZW50IExvY2F0aW9uOiB0byBhIExvY2F0aW9uOgogICBwYWdlLiBOdXN1J3MgcGFnZSBzaG93ZWQgdGhpcyB0b28uCgogLSBNYWRlIGNvb2tpZXMgd29yayBhIGxvdCBiZXR0ZXIuIFNldHRpbmcgdGhlIHNhbWUgY29va2llIG5hbWUgc2V2ZXJhbCB0aW1lcwogICB1c2VkIHRvIGFkZCBtb3JlIGNvb2tpZXMgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlIGZvcm1lciBvbmUgd2hpY2ggaXQKICAgc2hvdWxkJ3ZlLiBOdXN1IDxudXMgYXQgaW50ZXJnb3JqLnJvPiBicm91Z2h0IG1lIGFuIFVSTCB0aGF0IG1hZGUgdGhpcwogICBwYWluZnVsbHkgdmlzaWJsZS4uLgoKIFRyb3kgKDE1IEF1Z3VzdCAxOTk5KQogLSBCcm91Z2h0IG5ldyAuc3BlYyBmaWxlcyBhcyB3ZWxsIGFzIGEgcGF0Y2ggZm9yIGNvbmZpZ3VyZS5pbiB0aGF0IGxldHMgdGhlCiAgIGNvbmZpZ3VyZSBzY3JpcHQgZmluZCB0aGUgb3BlbnNzbCBmaWxlcyBiZXR0ZXIsIGV2ZW4gd2hlbiB0aGUgaW5jbHVkZQogICBmaWxlcyBhcmUgaW4gL3Vzci9pbmNsdWRlL29wZW5zc2wKClZlcnNpb24gNS4xMAoKIERhbmllbCAoMTMgQXVndXN0IDE5OTkpCiAtIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKCkgaGFzIGJlZW4gbW9kaWZpZWQgaW4gdGhlIDAuOS40IHZlcnNpb24gb2YKICAgT3BlblNTTC4gTm93IHdoeSBjb3VsZG4ndCB0aGV5IHNpbXBseSBhZGQgYSAqbmV3KiBmdW5jdGlvbiBpbnN0ZWFkIG9mCiAgIG1vZGlmeWluZyB0aGUgcGFyYW1ldGVycyBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIGZ1bmN0aW9uPyBUaGlzIHdheSwgd2UgZ2V0CiAgIGEgY29tcGlsZXIgd2FybmluZyBpZiBjb21waWxpbmcgd2l0aCAwLjkuNCBidXQgbm90IHdpdGggZWFybGllci4gU28sIEkgaGFkCiAgIHRvIGNvbWUgdXAgd2l0aCBhICNpZiBjb25zdHJ1Y3Rpb24gdGhhdCBkZWFscyB3aXRoIHRoaXMuLi4KCiAtIE1hZGUgY3VybCBvdXRwdXQgdGhlIFNTTCB2ZXJzaW9uIG51bWJlciBnZXQgZGlzcGxheWVkIHByb3Blcmx5IHdpdGggMC45LjQuCgogVHJveSAoMTIgQXVndXN0IDE5OTkpCiAtIEFkZGVkIE1pbmdXMzIgKEdDQy0yLjk1KSBzdXBwb3J0IHVuZGVyIFdpbjMyLiBUaGUgSU5TVEFMTCBmaWxlIHdhcyBhbHNvCiAgIGEgYml0IHJlYXJyYW5nZWQuCiAKIERhbmllbCAoMTIgQXVndXN0IDE5OTkpCiAtIEkgaGFkIHRvIGNvcHkgYSBnb29kIDxhcnBhL3RlbG5ldC5oPiBpbmNsdWRlIGZpbGUgaW50byB0aGUgY3VybCBzb3VyY2UKICAgdHJlZSB0byBlbmFibGUgdGhlIHNpbGx5IHdpbjMyIHN5c3RlbXMgdG8gY29tcGlsZS4gVGhlIGRpc3RyaWJ1dGlvbiByaWdodHMKICAgYWxsb3dzIHVzIHRvIGRvIHRoYXQgYXMgbG9uZyBhcyB0aGUgZmlsZSByZW1haW5zIHVubW9kaWZpZWQuCgogLSBJIGNvcnJlY3RlZCBhIGZldyBtaW5vciB0aGluZ3MgdGhhdCBtYWRlIHRoZSBjb21waWxlciBjb21wbGFpbiB3aGVuCiAgIC1XYWxsIC1wZWRhbnRpYyB3YXMgdXNlZC4KCiAtIEknbSBtb3ZpbmcgdGhlIG9mZmljaWFsIGN1cmwgd2ViIHBhZ2UgdG8gaHR0cDovL2N1cmwuaGF4eC5udS4gSSB0aGluayBpdAogICB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIHJlbWVtYmVyIGFzIGl0IGlzIGEgbG90IHNob3J0ZXIgYW5kIGxlc3MgY3J5cHRpYy4KICAgVGhlIG9sZCBvbmUgc3RpbGwgd29ya3MgYW5kIHNob3dzIHRoZSBzYW1lIGluZm8uCgogRGFuaWVsICgxMSBBdWd1c3QgMTk5OSkKIC0gQWxiZXJ0IENoaW4tQS1Zb3VuZyBtYWlsZWQgbWUgYW5vdGhlciBjb3JyZWN0aW9uIGZvciBOUk9GRiBpbiB0aGUKICAgY29uZmlndXJlLmluIHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgYmV0dGVyIGZvciBJUklYIHVzZXJzLgoKIERhbmllbCAoMTAgQXVndXN0IDE5OTkpCiAtIEFsYmVydCBDaGluLUEtWW91bmcgaGVscGVkIG1lIHdpdGggc29tZSBzdHVwaWQgTWFrZWZpbGUgdGhpbmdzLCBhcyB3ZWxsIGFzCiAgIHNvbWUgZmlkZGxpbmcgd2l0aCB0aGUgZ2V0ZGF0ZS5jIHN0dWZmIHRoYXQgaGUgaGFkIHByb2JsZW1zIHdpdGggdW5kZXIKICAgSFAtVVggdjEwLiBnZXRkYXRlLnkgd2lsbCBub3cgYmUgY29tcGlsZWQgaW50byBnZXRkYXRlLmMgaWYgdGhlIGFwcHJvcHJpYXRlCiAgIHlhY2Mgb3IgYmlzb24gaXMgZm91bmQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuIFNpbmNlIHRoaXMgaXMgc2xpZ2h0bHkgbmV3LAogICB3ZSBuZWVkIHRvIHRlc3QgdGhlIG91dHB1dCBnZXRkYXRlLmMgd2l0aCB3aW4zMiBzeXN0ZW1zIHRvIG1ha2Ugc3VyZSBpdAogICBzdGlsbCBjb21waWxlcyB0aGVyZS4KCiBEYW5pZWwgKDUgQXVndXN0IDE5OTkpCiAtIEkndmUganVzdCBzZXR1cCBhIG5ldyBtYWlsaW5nIGxpc3Qgd2l0aCB0aGUgaW50ZW50aW9uIHRvIGtlZXAgZGlzY3Vzc2lvbnMKICAgYXJvdW5kIGxpYmN1cmwgZGV2ZWxvcG1lbnQgaW4gaXQuIEkgbWFpbmx5IGV4cGVjdCBpdCB0byBiZSBmb3IgdGhvdWdodHMgYW5kCiAgIGJyYWluc3Rvcm1pbmcgYXJvdW5kIGEgIm5leHQgZ2VuZXJhdGlvbiIgbGlicmFyeSwgcmF0aGVyIHRoYW4gbml0cGlja2luZwogICBhYm91dCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvciBkZXRhaWxzIGluIHRoZSBjdXJyZW50IGxpYmN1cmwuCgogICBUbyBqb2luIG91ciBoYXBweSBidW5jaCBvZiBmdXR1cmUtbG9va2luZyBnZWVrcywgZW50ZXIgJ3N1YnNjcmliZQogICA8YWRkcmVzcz4nIGluIHRoZSBib2R5IG9mIGEgbWFpbCBhbmQgc2VuZCBpdCB0bwogICBsaWJjdXJsLXJlcXVlc3RAbGlzdHNlcnYuZnRzLmZyb250ZWMuc2UuICBDdXJsIGJ1ZyByZXBvcnRzLCB0aGUgdXN1YWwgY3VybAogICB0YWxrIGFuZCBldmVyeXRoaW5nIGVsc2Ugc2hvdWxkIHN0aWxsIGJlIGtlcHQgaW4gdGhpcyBtYWlsaW5nIGxpc3QuIEkndmUKICAgc3RhcnRlZCB0byBhcmNoaXZlIHRoaXMgbWFpbGluZyBsaXN0IGFuZCBoYXZlIHB1dCB0aGUgbGliY3VybCB3ZWIgcGFnZSBhdAogICB3d3cuZnRzLmZyb250ZWMuc2UvfmRhc3QvbGliY3VybC8uCgogLSBTdGVmYW4gS2FudGhhayBjb250YWN0ZWQgbWUgcmVnYXJkaW5nIGEgZmV3IHByb2JsZW1zIGluIHRoZSBjb25maWd1cmUKICAgc2NyaXB0IHdoaWNoIGhlIGRpc2NvdmVyZWQgd2hlbiB0cnlpbmcgdG8gbWFrZSBjdXJsIGNvbXBpbGUgYW5kIGJ1aWxkIHVuZGVyCiAgIFNpZW1lbnMgU0lOSVgtWiBWNS40MkIyMDA0IQoKIC0gTWFyY3VzIEtsZWluIHZlcnkgYWNjdXJhdGVseSBpbmZvcm1lZCBtZSB0aGF0IHNyYy92ZXJzaW9uLmggd2FzIG5vdCBwcmVzZW50CiAgIGluIHRoZSBDVlMgcmVwb3NpdG9yeS4gT2gsIGhvdyBzaWxseS4uLgoKIC0gTGludXMgTmllbHNlbiByZXdyb3RlIHRoZSB0ZWxuZXQ6Ly8gcGFydCBhbmQgbm93IGN1cmwgb2ZmZXJzIGxpbWl0ZWQgdGVsbmV0CiAgIHN1cHBvcnQuIElmIHlvdSBydW4gY3VybCBsaWtlICdjdXJsIHRlbG5ldDovL2hvc3QnIHlvdSdsbCBnZXQgYWxsIG91dHB1dCBvbgogICB0aGUgc2NyZWVuIGFuZCBjdXJsIHdpbGwgcmVhZCBpbnB1dCBmcm9tIHN0ZGluLiBZb3UnbGwgYmUgYWJsZSB0byBsb2dpbiBhbmQKICAgcnVuIGNvbW1hbmRzIGV0YywgYnV0IHNpbmNlIHRoZSBvdXRwdXQgaXMgYnVmZmVyZWQsIGV4cGVjdCB0byBnZXQgYSBsaXR0bGUKICAgd2VpcmQgb3V0cHV0LgoKICAgVGhpcyBpcyBzdGlsbCBpbiBpdHMgaW5mYW5jeSBhbmQgaXQgbWlnaHQgZ2V0IGNoYW5nZWQuIFdlIG5lZWQgeW91cgogICBmZWVkLWJhY2sgYW5kIGlucHV0IGluIGhvdyB0aGlzIGlzIGJlc3QgZG9uZS4KCiAgIFdJTjMyIE5PVEU6IEkgYmV0IHdlJ2xsIGdldCBwcm9ibGVtcyB3aGVuIHRyeWluZyB0byBjb21waWxlIHRoZSBjdXJyZW50CiAgIGxpYi90ZWxuZXQuYyBvbiB3aW4zMiwgYnV0IEkgdGhpbmsgd2UgY2FuIHNvcnQgdGhlbSBvdXQgaW4gdGltZS4KCiAtIERhdmlkIFNhbmRlcnNvbiByZXBvcnRlZCB0aGF0IEZPUkNFX0FMTE9DQV9IIG9yIEhBVkVfQUxMT0NBX0ggbXVzdCBiZQogICBkZWZpbmVkIGZvciBnZXRkYXRlLmMgdG8gY29tcGlsZSBwcm9wZXJseSBvbiBIUC1VWCAxMS4wLiBJIHVwZGF0ZWQgdGhlCiAgIGNvbmZpZ3VyZSBzY3JpcHQgdG8gY2hlY2sgZm9yIGFsbG9jYS5oIHdoaWNoIHNob3VsZCBtYWtlIGl0LgoKIERhbmllbCAoNCBBdWd1c3QgMTk5OSkKIC0gSSBmaW5hbGx5IGdvdCB0byB1bmRlcnN0YW5kIE1hcmN1cyBLbGVpbidzIGZ0cCBkb3dubG9hZCByZXN1bWUgcHJvYmxlbSwKICAgd2hpY2ggdHVybnMgb3V0IHRvIGJlIGR1ZSB0byBkaWZmZXJlbnQgb3V0cHV0cyBmcm9tIGRpZmZlcmVudCBmdHAKICAgc2VydmVycy4gSXQgbWFrZXMgZnRwIGRvd25sb2FkIHJlc3VtaW5nIGEgbGl0dGxlIHRyaWNraWVyLCBidXQgSSd2ZSBtYWRlCiAgIHNvbWUgbW9kaWZpY2F0aW9ucyBJIHJlYWxseSBiZWxpZXZlIHdpbGwgd29yayBmb3IgbW9zdCBmdHAgc2VydmVycyBhbmQgSSBkbwogICBob3BlIHlvdSByZXBvcnQgaWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCB0aGlzIQoKIC0gQWRkZWQgdGV4dCBhYm91dCBmaWxlIHRyYW5zZmVyIHJlc3VtaW5nIHRvIFJFQURNRS5jdXJsLgoKIERhbmllbCAoMiBBdWd1c3QgMTk5OSkKIC0gQXBwbGllZCBhIHByb2dyZXNzLWJhciBwYXRjaCBmcm9tIExhcnMgSi4gQWFzLiBJdCBvZmZlcnMKICAgYSBuZXcgc3R5bGVkIHByb2dyZXNzIGJhciBlbmFibGVkIHdpdGggLSMvLS1wcm9ncmVzcy1iYXIuIAoKIFQuIFlhbWFkYSA8dGFpIGF0IGltYXN5Lm9yLmpwPiAoMzAgSnVseSAxOTk5KQogLSBJdCBicmVha3Mgd2l0aCBzZWdmYXVsdCB3aGVuIDEpIGN1cmwgaXMgdXNpbmcgLm5ldHJjIHRvIG9idGFpbgogICB1c2VybmFtZS9wYXNzd29yZCAob3B0aW9uICctbicpLCBhbmQgMikgaXMgYXV0b21hdGljYWxseSByZWRpcmVjdGVkIHRvCiAgIGFub3RoZXIgbG9jYXRpb24gKG9wdGlvbiAnLUwnKS4KCiAgIFRoZXJlIGlzIGEgc21hbGwgYnVnIGluIGxpYi91cmwuYyAoYmxvY2sgc3RhcnRpbmcgZnJvbSBsaW5lIDY0MSksIHdoaWNoCiAgIHRyaWVzIHRvIHRha2Ugb3V0IHVzZXJuYW1lL3Bhc3N3b3JkIGZyb20gdXNlci0gc3VwcGxpZWQgY29tbWFuZC1saW5lCiAgIGFyZ3VtZW50ICgnLXUnIG9wdGlvbikuIFRoaXMgYmxvY2sgaXMgbmV2ZXIgZXhlY3V0ZWQgb24gZmlyc3QgYXR0ZW1wdCBzaW5jZQogICBDT05GX1VTRVJQV0QgYml0IGlzbid0IHNldCBhdCBmaXJzdCwgYnV0IGN1cmwgbGF0ZXIgdHVybnMgaXQgb24gd2hlbiBpdAogICBjaGVja3MgZm9yIENPTkZfTkVUUkMgYml0LiBTbyB3aGVuIGN1cmwgdHJpZXMgdG8gcmVkbyBldmVyeXRoaW5nIGR1ZSB0bwogICByZWRpcmVjdGlvbiwgaXQgc2VnZmF1bHRzIHRyeWluZyB0byBhY2Nlc3MgKmRhdGEtPnVzZXJwd2QuCgpWZXJzaW9uIDUuOS4xCgogRGFuaWVsICgzMCBKdWx5IDE5OTkpCiAtIFN0ZXZlIFdhbGNoIHBvaW50ZWQgb3V0IHRoYXQgdGhlcmUgaXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZm9ybWRhdGEKICAgZnVuY3Rpb25zLiBJIGFkZGVkIGEgRm9ybUZyZWUoKSBmdW5jdGlvbiB0aGF0IGlzIG5vdyB1c2VkIGFuZCBzdXBwb3NlZCB0bwogICBjb3JyZWN0IHRoaXMgZmxhdy4KCiAtIE1hcmsgV290dG9uIHJlcG9ydGVkOgogICAnY3VybCAtTCBodHRwczovL3d3dy5jd2EuY29tLmF1LycgY29yZSBkdW1wcy4gIEkgbWFuYWdlZCB0byBjdXJlIHRoaXMgYnkKICAgY29ycmVjdGluZyB0aGUgY2xlYW51cCBwcm9jZWR1cmUuIFRoZSBidWcgc2VlbXMgdG8gYmUgZ29uZSB3aXRoIG15IE9wZW5TU0wKICAgMC45LjJiLCBhbHRob3VnaCBzdGlsbCBvY2N1cnMgd2hlbiBJIHJ1biB0aGUgfjEwMCB5ZWFycyBvbGQgU1NMZWF5IDAuOC4wLiBJCiAgIGRvbid0IGtub3cgd2hldGhlciBpdCBpcyBjdXJsIG9yIFNTTGVheSB0aGF0IGlzIHRvIGJsYW1lIGZvciB0aGF0LgoKIC0gTWFyY3VzIEtsZWluOgogICBSZXBvcnRlZCBhbiBGVFAgdXBsb2FkIHJlc3VtZSBidWcgdGhhdCBJIHJlYWxseSBjYW4ndCByZXBlYXQgbm9yIHVuZGVyc3RhbmQuCiAgIEkgbGVhdmUgaXQgaGVyZSBzbyB0aGF0IGl0IHdvbid0IGJlIGZvcmdvdHRlbi4KCiBEYW5pZWwgKDI5IEp1bHkgMTk5OSkKIC0gQ29zdHlhIFNodWx5dXBpbiBzdWdnZXN0ZWQgc3VwcG9ydCBmb3IgbG9uZ2VyIFVSTHMgd2hlbiBmb2xsb3dpbmcgTG9jYXRpb246CiAgIGFuZCBJIGNvdWxkIG9ubHkgYWdyZWUgYW5kIGZpeCBpdCEKCiAtIExlaWdoIFB1cmRpZSBmb3VuZCBhIHByb2JsZW0gaW4gdGhlIHVwbG9hZC9QT1NUIGRlcGFydG1lbnQuIEl0IHR1cm5lZCBvdXQKICAgdGhhdCBodHRwLmMgYWNjaWRlbnRhbHkgY2xlYXJlZCB0aGUgcG9pbnRlciBpbnN0ZWFkIG9mIHRoZSBieXRlIGNvdW50ZXIKICAgd2hlbiBzdXBwb3NlZCB0by4KCiAtIENvc3R5YSBTaHVseXVwaW4gcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdpdGggcG9ydCBudW1iZXJzIGFuZCBMb2NhdGlvbjouIElmCiAgIHlvdSBoYWQgYSBzZXJ2ZXIgYXQgYSBub24tc3RhbmRhcmQgcG9ydCB0aGF0IHJlZGlyZWN0ZWQgdG8gYW4gVVJMIHVzaW5nIGEKICAgc3RhbmRhcmQgcG9ydCBudW1iZXIsIGN1cmwgc3RpbGwgdXNlZCB0aGF0IGZpcnN0IHBvcnQgbnVtYmVyLgoKIC0gUmFscGggQmVja21hbm4gcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdoZW4gdXNpbmcgYm90aCBDT05GX0ZPTExPV0xPQ0FUSU9OCiAgIGFuZCBDT05GX0ZBSUxPTkVSUk9SIHNpbXVsdGFuZW91c2x5LiBTaW5jZSB0aGUgQ09ORl9GQUlMT05FUlJPUiBleGl0cyBvbgogICB0aGUgMzAyLWNvZGUgdGhhdCB0aGUgZm9sbG93IGxvY2F0aW9uIGhlYWRlciBvdXRwdXRzIGl0IHdpbGwgbmV2ZXIgc2hvdyBhbnkKICAgaHRtbCBvbiBsb2NhdGlvbjogcGFnZXMuIEkgaGF2ZSBub3cgbWFkZSBpdCBsb29rIGZvciA+PTQwMCBjb2RlcyBpZgogICBDT05GX0ZPTExPV0xPQ0FUSU9OIGlzIHNldC4KCiAtICdzdHJ1Y3Qgc2xpc3QnIGlzIG5vdyByZW5hbWVkIHRvICdzdHJ1Y3QgY3VybF9zbGlzdCcgKGFzIHN1Z2dlc3RlZCBieSBSYWxwaAogICBCZWNrbWFubikuCgogLSBKb3NodWEgU3dpbmsgYW5kIFJpY2sgV2VseWtvY2h5IHdlcmUgdGhlIGZpcnN0IHRvIHBvaW50IG91dCB0byBtZSB0aGF0IHRoZQogICBsYXRlc3QgT3BlblNTTCBwYWNrYWdlIG5vdyBoYXZlIG1vdmVkIHRoZSBzdGFuZGFyZCBpbmNsdWRlIHBhdGguIEl0IGlzIG5vdwogICBpbiAvdXNyL2xvY2FsL3NzbC9pbmNsdWRlL29wZW5zc2wgYW5kIEkgaGF2ZSBub3cgbW9kaWZpZWQgdGhlIC0tZW5hYmxlLXNzbAogICBvcHRpb24gZm9yIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSB0aGF0IGFzIHRoZSBwcmltYXJ5IHBhdGgsIGFuZCBJCiAgIGxlYXZlIHRoZSBmb3JtZXIgcGF0aCB0b28gdG8gd29yayB3aXRoIG9sZGVyIHBhY2thZ2VzIG9mIE9wZW5TU0wgdG9vLgoKIERhbmllbCAoOSBKdW5lIDE5OTkpCiAtIEkgZmluYWxseSB1bmRlcnN0b29kIHRoZSBJUklYIHByb2JsZW0gYW5kIG5vdyBpdCBzZWVtIHRvIGNvbXBpbGUgb24gaXQhCiAgIEkgYW0gZ29ubmEgcmVtb3ZlIHRob3NlICNkZWZpbmUgc3RyY2FzZWNtcCgpIHRoaW5ncyBvbmNlIGFuZCBmb3IgYWxsIG5vdy4KCiBEYW5pZWwgKDQgSnVuZSAxOTk5KQogLSBJIGFkanVzdGVkIHRoZSBGVFAgcmVwbHkgMjI3IHBhcnNlciB0byBtYWtlIHRoZSBQQVNWIGNvbW1hbmQgd29yayBiZXR0ZXIKICAgd2l0aCBtb3JlIGZ0cCBzZXJ2ZXJzLiBBcHBlYXJhbnRseSB0aGUgUm94ZW4gQ2hhbGxhbmdlciBzZXJ2ZXIgcmVwbGllZAogICBzb21ldGhpbmcgY3VybCA1LjkgY291bGQgZGVhbCB3aXRoISA6LSggUmVwb3J0ZWQgYnkgQXNobGV5IFJlaWQtTW9udGFuYXJvCiAgIGFuZCBNYXJrIEJ1dGxlciBicm91Z2h0IGEgc29sdXRpb24gZm9yIGl0LgoKIERhbmllbCAoMjYgTWF5IDE5OTkpCiAtIFJlYXJyYW5nZWQuIFJFQURNRSBpcyBuZXcsIHRoZSBvbGQgb25lIGlzIG5vdyBSRUFETUUuY3VybCBhbmQgSSBhZGRlZCBhCiAgIFJFQURNRS5saWJjdXJsIHdpdGggdGV4dCBJIGdvdCBmcm9tIFJhbHBoIEJlY2ttYW5uLgoKIC0gSSBhbHNvIHVwZGF0ZWQgdGhlIElOU1RBTEwgdGV4dC4KCiBEYW5pZWwgKDI1IE1heSAxOTk5KQogLSBEYXZpZCBKb25hdGhhbiBMb3dza3kgY29ycmVjdGx5IHBvaW50ZWQgb3V0IHRoYXQgY3VybCBkaWRuJ3QgcHJvcGVybHkgZGVhbAogICB3aXRoIGZvcm0gcG9zdGluZyB3aGVyZSB0aGUgdmFyaWFibGUgc2hvdWxkbid0IGhhdmUgYW55IGNvbnRlbnQsIGFzIGluIGN1cmwKICAgLUYgImZvcm09IiB3d3cuc2l0ZS5jb20uIEl0IHdhcyBub3cgZml4ZWQuCgpWZXJzaW9uIDUuOQoKIERhbmllbCAoMjIgTWF5IDE5OTkpCiAtIEkndmUgZ290IGEgYnVnIHJlcG9ydCBmcm9tIEFhcm9uIFNjYXJpc2JyaWNrIGluIHdoaWNoIGhlIHN0YXRlcyBoZSBoYXMgc29tZQogICBwcm9ibGVtcyB3aXRoIC1MIHVuZGVyIEZyZWVCU0QgMy4wLiBJIGhhdmUgcHJldmlvdXNseSBnb3QgYW5vdGhlciBidWcKICAgcmVwb3J0IGZyb20gU3RlZmFuIEdyZXRoZXIgd2hpY2ggcG9pbnRzIGF0IGFuIGVycm9yIHdpdGggc2ltaWxhciBzeW1wdGhvbXMKICAgd2hlbiB1c2luZyB3aW4zMi4gSSBtYWRlIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBuZXcgdXJsIHN0cmluZyBhIGJpdCBmYXN0ZXIKICAgYW5kIGRpZmZlcmVudCwgZG9uJ3Qga25vdyBpZiBpdCBhY3R1YWxseSBpbXByb3ZlcyBhbnl0aGluZyB0aG91Z2guLi4KCiBEYW5pZWwgKDIwIE1heSAxOTk5KQogLSBNYWRlIHRoZSBjb29raWUgcGFyc2VyIGRlYWwgd2l0aCBDUkxGIG5ld2xpbmVzIHRvby4KCiBEYW5pZWwgKDE5IE1heSAxOTk5KQogLSBEb3dubG9hZCgpIGRpZG4ndCBwcm9wZXJseSBkZWFsIHdpdGggZmFpbGluZyByZXR1cm4gY29kZXMgZnJvbSB0aGUgc3JlYWQoKQogICBmdW5jdGlvbi4gQWRhbSBDb3luZSBmb3VuZCB0aGUgcHJvYmxlbSBpbiB0aGUgd2luMzIgdmVyc2lvbiwgYW5kIFRyb3kgRW5nZWwKICAgaGVscGVkIG1lIG91dCBpc29sYXRpbmcgaXQuCgogRGFuaWVsICgxNiBNYXkgMTk5OSkKIC0gUmljaGFyZCBBZGFtcyBwb2ludGVkIG91dCBhIGJ1ZyBJIGludHJvZHVjZWQgaW4gNS44LiAtLWR1bXAtaGVhZGVyIGRvZXNuJ3QKICAgd29yayBhbnltb3JlISA6LS8gSSBmaXhlZCBpdCBub3cuCgogLSBBZnRlciBhIHN1Z2dlc3Rpb24gYnkgSm9zaHVhIFN3aW5rIEkgYWRkZWQgLVMgLyAtLXNob3ctZXJyb3IgdG8gZm9yY2UgY3VybAogICB0byBkaXNwbGF5IHRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb3IsIGV2ZW4gaWYgLXMvLS1zaWxlbnQgd2FzCiAgIHVzZWQuCgogRGFuaWVsICgxMCBNYXkgMTk5OSkKIC0gSSBtb3ZlZCB0aGUgc3R1ZmYgY29uY2VybmluZyBIVFRQLCBESUNUIGFuZCBURUxORVQgaXQgdGhlaXIgb3duIHNvdXJjZQogICBmaWxlcyBub3cuIEl0IGlzIGEgYmVnaW5uaW5nIG9uIG15IGNsZWFuLXVwIG9mIHRoZSBzb3VyY2VzIHRvIG1ha2UgdGhlbQogICBsYXllciBhbGwgdGhvc2UgcHJvdG9jb2xzIGJldHRlciB0byBlbmFibGUgbW9yZSB0byBiZSBhZGRlZCBlYXNpZXIgaW4gdGhlCiAgIGZ1dHVyZSEKCiAtIExlb24gQnJlZWR0IHNlbnQgbWUgc29tZSBmaWxlcyBJJ3ZlIG5vdCBwdXQgaW50byB0aGUgbWFpbiBjdXJsCiAgIGFyY2hpdmUuIFRoZXkncmUgZm9yIGNyZWF0aW5nIHRoZSBEZWJpYW4gcGFja2FnZSB0aGluZ2llLiBIZSBhbHNvIHNlbnQgbWUgYQogICBkZWJpYW4gcGFja2FnZSB0aGF0IEkndmUgbWFkZSBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGF0IHRoZSB3ZWIgcGFnZQoKIERhbmllbCAoOSBNYXkgMTk5OSkKIC0gTWFkZSBpdCBjb21waWxlIG9uIGN5Z3dpbiB0b28uCgogVHJveSBFbmdlbCAoNyBNYXkgMTk5OSkKIC0gQnJvdWdodCBhIHNlcmllcyBvZiBwYXRjaGVzIHRvIGFsbG93IGN1cmwgdG8gY29tcGlsZSBzbW9vdGhseSBvbiBNU1ZDKysgNgogICBhZ2FpbiEKCiBEYW5pZWwgKDYgTWF5IDE5OTkpCiAtIEkgY2hhbmdlZCB0aGUgI2lmZGVmIEhBVkVfU1RSRlRJTUUgcGxhY2VtZW50IGZvciB0aGUgLXogY29kZSBzbyB0aGF0IGl0CiAgIHdpbGwgYmUgZWFzaWVyIHRvIGRpc2NvdmVyIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIHRoYXQgZnVuY3Rpb24gYW5kIHRodXMKICAgY2FuJ3QgdXNlIC16IHN1Y2Nlc3NmdWxseS4gTWFkZSB0aGUgc3RyZnRpbWUoKSBnZXQgdXNlZCBpZiBXSU4zMiBpcyBkZWZpbmVkCiAgIHRvby4KClZlcnNpb24gNS44CgogRGFuaWVsICg1IE1heSAxOTk5KQogLSBJJ3ZlIGhhZCBpdCB3aXRoIHRoaXMgYXV0b2NvbmYvYXV0b21ha2UgbWVzcy4gSXQgc2VlbXMgdG8gd29yayBhbGxyaWdodAogICBmb3IgbW9zdCBwZW9wbGUgd2hvIGRvbid0IGhhdmUgYXV0b21ha2UgaW5zdGFsbGVkLCBidXQgZm9yIHRob3NlIHdobyBoYXZlCiAgIHRoZXJlIGFyZSBwcm9ibGVtcyBhbGwgb3Zlci4KCiAgIEkndmUgZ290IGxpa2UgZml2ZSBkaWZmZXJlbnQgYnVnIHJlcG9ydHMgb24gdGhpcyBvbmx5IHRoZSBsYXN0CiAgIHdlZWsuLi4gQ2xhdWRpbyBOZXZlcyBhbmQgRmVkZXJpY28gQmlhbmNoaSBhbmQgcm9vdCA8ZHVnZ2VyajAwMSBhdAogICBoYXdhaWkucnIuY29tPiBhcmUgc29tZSBvZiB0aGVtIHJlcG9ydGluZyB0aGlzLgoKICAgQ3VycmVudGx5LCBJIGhhdmUgbm8gcmVhbGx5IGdvb2QgZml4IHNpbmNlIEkgd2FudCB0byB1c2UgYXV0b21ha2UgbXlzZWxmIHRvCiAgIGdlbmVyYXRlIHRoZSBNYWtlZmlsZS5pbiBmaWxlcy4gSSd2ZSBmb3VuZCBvdXQgdGhhdCB0aGUgQFNIRUxMQC1wcm9ibGVtcwogICBjYW4gb2Z0ZW4gYmUgZml4ZWQgYnkgbWFudWFsbHkgaW52b2tpbmcgJ2F1dG9tYWtlJyBpbiB0aGUgYXJjaGl2ZSByb290CiAgIGJlZm9yZSB5b3UgcnVuIC4vY29uZmlndXJlLi4uIEkndmUgaGFja2VkIG15IG1ha2V0Z3ogc2NyaXB0IG5vdyB0byBmaWRkbGUKICAgYSBiaXQgd2l0aCB0aGlzIGFuZCBteSB0ZXN0cyBzZWVtIHRvIHdvcmsgYmV0dGVyIHRoYW4gYmVmb3JlIGF0IGxlYXN0IQoKIERhbmllbCAoNCBNYXkgMTk5OSkKIC0gbWtoZWxwLnBsIGhhcyBiZWVuIGRvaW5nIGJhZGx5IGxhdGVseS4gSSBjb3JyZWN0ZWQgYSBjYXNlIHByb2JsZW0gaW4KICAgdGhlIHJlZ2V4ZXMuCgogLSBJJ3ZlIG5vdyByZW1hZGUgdGhlIC1vIG9wdGlvbiB0byBub3QgdG91Y2ggdGhlIGZpbGUgdW5sZXNzIGl0IG5lZWRzIHRvLgogICBJIGhhZCB0byBkbyB0aGlzIHRvIG1ha2UgLXogb3B0aW9uIHJlYWxseSBmaW5lLCBzaW5jZSBub3cgeW91IGNhbiBtYWtlIGEKICAgY3VybCBmZXRjaCBhbmQgdXNlIGEgbG9jYWwgY29weSdzIHRpbWUgd2hlbiBkb3dubG9hZGluZyB0byB0aGF0IGZpbGUsIGFzCiAgIGluOgoKICAgICAgICBjdXJsIC16IGR1bXAgLW8gZHVtcCByZW1vdGUuc2l0ZS5jb20vZmlsZS5odG1sCgogICBUaGlzIHdpbGwgb25seSBnZXQgdGhlIGZpbGUgaWYgdGhlIHJlbW90ZSBvbmUgaXMgbmV3ZXIgdGhhbiB0aGUgbG9jYWwuCiAgIEknbSBhd2FyZSB0aGF0IHRoaXMgYWx0ZXJzIHByZXZpb3VzIGJlaGF2aW91ciBhIGxpdHRsZS4gU29tZSBzY3JpcHRzIG91dAogICB0aGVyZSBtYXkgZGVwZW5kIG9uIHRoYXQgdGhlIGZpbGUgaXMgYWx3YXlzIHRvdWNoZWQuLi4KCiAtIENvcnJlY3RlZCBhIGJ1ZyBpbiB0aGUgU1NMdjIvdjMgc2VsZWN0aW9uLgoKIC0gRmVsaXggdm9uIExlaXRuZXIgcmVxdWVzdGVkIHRoYXQgY3VybCBzaG91bGQgYmUgYWJsZSB0byBzZW5kCiAgICJJZi1Nb2RpZmllZC1TaW5jZSIgaGVhZGVycywgd2hpY2ggaW5kZWVkIGlzIGEgZmFpciBpZGVhLiAgSSBpbXBsZW1lbnRlZCBpdAogICByaWdodCBhd2F5ISBUcnkgLXogPGV4cHJlc3Npb24+IHdoZXJlIGV4cHJlc3Npb24gaXMgYSBmdWxsIEdOVSBkYXRlCiAgIGV4cHJlc3Npb24gb3IgYSBmaWxlIG5hbWUgdG8gZ2V0IHRoZSBkYXRlIGZyb20hCgogU3RlcGhhbiBMYWdlcmhvbG0gKDMwIEFwciAxOTk5KQogLSBQb2ludGVkIG91dCBhIHByb2JsZW0gd2l0aCB0aGUgc3JjL01ha2VmaWxlIGZvciBGcmVlQlNELiBUaGUgUk0gdmFyaWFibGUKICAgaXNuJ3Qgc2V0IGFuZCBjYXVzZXMgdGhlIG1ha2UgdG8gZmFpbC4KCiBEYW5pZWwgKDI2IEFwcmlsIDE5OTkpCiAtIEFtIEkgc2lsbHkgb3Igd2hhdD8gSXJ2aW5nIFdvbGZlIHBvaW50ZWQgb3V0IHRvIG1lIHRoYXQgdGhlIGN1cmwgdmVyc2lvbgogICBudW1iZXIgd2FzIG5vdCBzZXQgcHJvcGVybHkuIEhhc24ndCBiZWVuIHNpbmNlIDUuNi4gVGhpcyB3YXMgZHVlIHRvIGEgYnVnCiAgIGluIG15IG1ha2V0Z3ogc2NyaXB0IQoKIERhdmlkIEVyaWtzc29uICgyNSBBcHIgMTk5OSkKIC0gRm91bmQgYSBidWcgaW4gY29va2llcy5jIHRoYXQgbWFkZSBpdCBjcmFzaCBhdCB0aW1lcy4KClZlcnNpb24gNS43LjEKCiBEb3VnIEthdWZtYW4gKDIzIEFwciAxOTk5KQogLSBCcm91Z2h0IHR3byBzdW5vcyA0IGZpeGVzLiBPbmUgb2YgdGhlbSBiZWluZyB0aGUgaG9zdGlwLmMgZml4IG1lbnRpb25lZAogICBiZWxvdyBhbmQgdGhlIG90aGVyIG9uZSBhIGNvcnJlY3Rpb24gaW4gaW5jbHVkZS9zdGRjaGVhZGVycy5oCgogLSBBZGRlZCBhIHBhcmFncmFwaCBhYm91dCBjb21waWxpbmcgd2l0aCB0aGUgVVMtdmVyc2lvbiBvZiBvcGVuc3NsIHRvIHRoZQogICBJTlNUQUxMIGZpbGUuCgogRGFuaWVsCiAtIE5ldyBtYWlsaW5nIGxpc3QgYWRkcmVzcy4gSW5mbyB1cGRhdGVkIG9uIHRoZSB3ZWIgcGFnZSBhcyB3ZWxsIGFzIGluIHRoZQogICBSRUFETUUgZmlsZQoKIEdyZWcgT251ZmVyICgyMCBBcHIgMTk5OSkKIC0gaG9zdGlwLmMgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkgb24gU3VuT1MgNS41LjEuCiAgIEl0IG5lZWRzIGFuICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KClZlcnNpb24gNS43CgogRGFuaWVsIChBcHIgMjAgMTk5OSkKIC0gRGVjaWRlZCB0byB1cGxvYWQgYSBub24tYmV0YSB2ZXJzaW9uIHJpZ2h0IG5vdyEKCiAtIE1hZGUgY3VybCBzdXBwb3J0IGFueS1sZW5ndGggSFRUUCBoZWFkZXJzLiBUaGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdwogICBzaW1wbHkgZW5sYXJnZWQgZXZlcnkgdGltZSBpdCB0dXJucyBvdXQgdG8gYmUgdG9vIHNtYWxsIQoKIC0gQWRkZWQgdGhlIEZBUSBmaWxlIHRvIHRoZSBhcmNoaXZlLiBTdGlsbCBhIGJpdCBzbWFsbGlzaCwgYnV0IGl0IGlzIGEKICAgc3RhcnQuCgogRXJpYyBUaGVsaW4gKDE1IEFwciAxOTk5KQogLSBNYWRlIC1EIGFjY2VwdCAnLScgaW5zdGVhZCBvZiBmaWxlbmFtZSB0byB3cml0ZSB0byBzdGRvdXQuCgpWZXJzaW9uIDUuNi4zYmV0YQoKIERhbmllbCAoQXByIDEyIDE5OTkpCgogLSBDaGFuZ2VkIHR3byAjaWZkZWYgV0lOMzIgdG8gYmV0dGVyICNpZmRlZiA8ZXJyb3Jjb2RlPiB3aGVuIGNvbm5lY3QoKWluZwogICBpbiB1cmwuYyBhbmQgZnRwLmMuIE1ha2VzIGN5Z3dpbjMyIGRlYWwgd2l0aCB0aGVtIGJldHRlciB0b28uIFdlIHNob3VsZAogICB0cnkgdG8gZ2V0IHNvbWUgZGVjZW50IHdpbjMyLXJlcGxhY2VtZW50IHRoZXJlLiBBbnlvbmU/CgogLSBUaGUgb2xkIC0zLy0tY3JsZiBvcHRpb24gaXMgbm93IE9OTFkgLS1jcmxmIQoKIC0gSSBjaGFuZ2VkIHRoZSAiU1NMIGZpeCIgdG8gYSBtb3JlIGxhbWUgb25lLCBidXQgdGhhdCBkb2Vzbid0IHJlbW92ZSBhcwogICBtdWNoIGZ1bmN0aW9uYWxpdHkuIE5vdyBJJ3ZlIGVuYWJsZWQgdGhlIGxpYiB0byBzZWxlY3Qgd2hhdCBTU0wgdmVyc2lvbiBpdAogICBzaG91bGQgdHJ5IGZpcnN0LiBBcHBlYXJhbnRseSBzb21lIG9sZGVyIFNTTC1zZXJ2ZXJzIGRvbid0IGxpa2Ugd2hlbiB5b3UKICAgdGFsayB2MyB3aXRoIHRoZW0gc28geW91IG5lZWQgdG8gYmUgYWJsZSB0byBmb3JjZSBjdXJsIHRvIHRhbGsgdjIgZnJvbSB0aGUKICAgc3RhcnQuIFRoZSBmaXggZGF0ZWQgQXByaWwgNiBhbmQgcG9zdGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QgZm9yY2VkIGN1cmwgdG8KICAgdXNlIHYyIGF0IGFsbCB0aW1lcyB1c2luZyBhIG1vZGVybiBPcGVuU1NMIHZlcnNpb24sIGJ1dCB3ZSBkb24ndCByZWFsbHkKICAgd2FudCBzdWNoIGEgY3JpcHBsZWQgc29sdXRpb24uCiAKIC0gTWFyYyBCb3VjaGVyIHNlbnQgbWUgYSBwYXRjaCB0aGF0IGNvcnJlY3RlZCBhIG1hdGggZXJyb3IgZm9yIHRoZQogICAiQ3Vyci5TcGVlZCIgcHJvZ3Jlc3MgbWV0ZXIuCgogLSBFcmljIFRoZWxpbiBzZW50IG1lIGEgcGF0Y2ggdGhhdCBlbmFibGVzICctSyAtJyB0byByZWFkIGEgY29uZmlnIGZpbGUgZnJvbQogICBzdGRpbi4KCiAtIEkgZm91bmQgb3V0IHdlIGRpZG4ndCBjbG9zZSB0aGUgZmlsZSBwcm9wZXJseSBiZWZvcmUgc28gSSBhZGRlZCBpdCEKCiBEYW5pZWwgKEFwciA5IDE5OTkpCiAtIFl1IFhpbiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2l0aCBmdHAgZG93bmxvYWQgcmVzdW1lLiAgSXQgZGlkbid0IHdvcmsgYXQKICAgYWxsISA7LU8KCiBEYW5pZWwgKEFwciA2IDE5OTkpCiAtIENvcnJlY3RlZCB0aGUgdmVyc2lvbiBzdHJpbmcgcGFydCBnZW5lcmF0ZWQgZm9yIHRoZSBTU0wgdmVyc2lvbi4KCiAtIEkgZm91bmQgYSB3YXkgdG8gbWFrZSBzb21lIG90aGVyIFNTTCBwYWdlIHdvcmsgd2l0aCBvcGVuc3NsIDAuOS4xKyB0aGF0CiAgIHByZXZpb3VzbHkgZGlkbid0IChzc2xlYXkgMC44LjAgd29ya3Mgd2l0aCBpdCB0aG91Z2ghKS4gVHJ5aW5nIHRvIGdldAogICBzb21lIHJlYWwgaW5mbyBmcm9tIHRoZSBPcGVuU1NMIGd1eXMgdG8gc2VlIGhvdyBJIHNob3VsZCBkbyB0byBiZWhhdmUgdGhlCiAgIGJlc3Qgd2F5LiBTU0xlYXkgMC44LjAgc2hvdWxkbid0IGJlIHRoYXQgbXVjaCBpbiB1c2UgYW55d2F5IHRoZXNlIGRheXMhCgpWZXJzaW9uIDUuNi4yYmV0YQoKIERhbmllbCAoQXByIDQgMTk5OSkKIC0gRmluYWxseSBoYXZlIGN1cmwgbW9yZSBjb29raWUgImF3YXJlIi4gTm93IHJlYWQgY2FyZWZ1bGx5LiBUaGlzIGlzIGhvdwogICBpdCB3b3Jrcy4KICAgVG8gbWFrZSBjdXJsIHJlYWQgY29va2llcyBmcm9tIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZSwgaW4gcGxhaW4gaGVhZGVyLQogICBmb3JtYXQgKGxpa2UgZnJvbSB0aGUgaGVhZGVycyBvZiBhIHByZXZpb3VzIGZldGNoKSBpbnZva2UgY3VybCB3aXRoIHRoZQogICAtYiBmbGFnIGxpa2U6CgogICAgICAgIGN1cmwgLWIgZmlsZSBodHRwOi8vc2l0ZS9mb28uaHRtbAoKICAgQ3VybCB3aWxsIHRoZW4gdXNlIGFsbCBjb29raWVzIGl0IGZpbmRzIG1hdGNoaW5nLiBUaGUgb2xkIHN0eWxlIHRoYXQgc2V0cwogICBhIHNpbmdsZSBjb29raWUgd2l0aCAtYiBpcyBzdGlsbCBzdXBwb3J0ZWQgYW5kIGlzIHVzZWQgaWYgdGhlIHN0cmluZwogICBmb2xsb3dpbmcgLWIgaW5jbHVkZXMgYSAnPScgbGV0dGVyLCBhcyBpbiAiLWIgbmFtZT1kYW5pZWwiLgoKICAgVG8gbWFrZSBjdXJsIHJlYWQgdGhlIGNvb2tpZXMgc2VudCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgbG9jYXRpb246ICh3aGljaAogICBzaXRlcyBvZnRlbiBkbykgcG9pbnQgY3VybCB0byByZWFkIGEgbm9uLWV4aXN0aW5nIGZpbGUgYXQgZmlyc3QgKGkuZQogICB0byBzdGFydCB3aXRoIG5vIGV4aXN0aW5nIGNvb2tpZXMpLCBsaWtlOgoKICAgICAgICBjdXJsIC1iIG5vd2hlcmUgaHR0cDovL3NpdGUvc2V0Y29va2llYW5kcmVsb2NhdGUuaHRtbAoKIC0gQWRkZWQgYSBwYXJhZ3JhcGggaW4gdGhlIFRPRE8gZmlsZSBhYm91dCB0aGUgU1NMIHByb2JsZW1zIHJlY2VudGx5CiAgIHJlcG9ydGVkLiBFdmlkZW50bHksIHNvbWUga2luZCBvZiBTU0wtcHJvYmxlbSBjdXJsIG1heSBuZWVkIHRvIGFkZHJlc3MuCgogLSBCZXR0ZXIgIkxvY2F0aW9uOiIgZm9sbG93aW5nLgoKIERvdWdsYXMgRS4gV2Vnc2NoZWlkIChUdWUsIDMwIE1hciAxOTk5KQogLSBBIHN1YnNlY29uZCBkaXNwbGF5IHBhdGNoLgoKIERhbmllbCAoTWFyIDE0IDE5OTkpCiAtIEkndmUgc2VwYXJhdGVkIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBsaWJjdXJsIGFuZCBjdXJsIG5vdy4gVG8gbWFrZQogICB0aGluZ3MgYSBsaXR0bGUgZWFzaWVyLCBJIGRlY2lkZWQgdG8gc3RhcnQgdGhlIGN1cmwgbnVtYmVyaW5nIGZyb20KICAgNS42IGFuZCB0aGUgZm9ybWVyIHZlcnNpb24gbnVtYmVyIGtub3duIGFzICJjdXJsIiBpcyBub3cgdGhlIG9uZQogICBzZXQgZm9yIGxpYmN1cmwuCgogLSBSZW1vdmVkIHRoZSAnZW5hYmxlLW5vLXBhc3MnIGZyb20gY29uZmlndXJlLCBJIGRvdWJ0IGFueW9uZSB3YW50ZWQKICAgdGhhdC4KCiAtIE1hZGUgbG90cyBvZiB0aW55IGFkanVzdG1lbnRzIHRvIGNvbXBpbGUgc21vb3RobHkgd2l0aCBjeWd3aW4gdW5kZXIKICAgd2luMzIuIEl0J3MgYSBraWxsZXIgZm9yIHBvcnRpbmcgdGhpcyB0byB3aW4zMiwgYnllIGJ5ZSBWQysrISA7LSkKICAgQ29tcGlsZXMgYW5kIGJ1aWxkcyBvdXQtb2YtdGhlLWJveCBub3cuIFNlZSB0aGUgbmV3IHdvcmRpbmdzIGluCiAgIElOU1RBTEwgZm9yIGRldGFpbHMuCgogLSBCZWdpbm5pbmcgZXhwZXJpbWVudHMgd2l0aCBkb3dubG9hZGluZyBtdWx0aXBsZSBkb2N1bWVudCBmcm9tIGEgaHR0cAogICBzZXJ2ZXIgd2hpbGUgcmVtYWluaW5nIGNvbm5lY3RlZC4KClZlcnNpb24gNS42YmV0YQoKIERhbmllbCAoTWFyIDEzIDE5OTkpCiAtIFNpbmNlIEkndmUgY2hhbmdlZCBzbyBtdWNoLCBJIHRob3VnaHQgSSdkIGp1c3QgZ28gYWhlYWQgYW5kIGltcGxlbWVudCB0aGUKICAgc3VnZ2VzdGlvbiBmcm9tIERvdWdsYXMgRS4gV2Vnc2NoZWlkLiAtRCBvciAtLWR1bXAtaGVhZGVyIGlzIG5vdyBzdG9yaW5nCiAgIEhUVFAgaGVhZGVycyBzZXBhcmF0ZWx5IGluIHRoZSBzcGVjaWZpZWQgZmlsZS4KCiAtIEFkZGVkIG5ldyB0ZXh0IHRvIElOU1RBTEwgb24gd2hhdCB0byBkbyB0byBidWlsZCB0aGlzIG9uIHdpbjMyIG5vdy4KCiAtIEFhYXJnaC4gSSBoYWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgcHJlZml4IHRoZSBzaGFyZWQgI2luY2x1ZGUgZmlsZXMKICAgaW4gdGhlIHNvdXJjZXMgd2l0aCAiLi4vaW5jbHVkZS8iIHRvIHBsZWFzZSBWQysrLi4uCgogRGFuaWVsIChNYXIgMTIgMTk5OSkKIC0gU3BsaXQgdGhlIHVybC5jIHNvdXJjZSBpbnRvIG1hbnkgdGlueSBzb3VyY2VzIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkKICAgYW5kIHNtYWxsZXIgc2l6ZS4KCiBEYW5pZWwgKE1hciAxMSAxOTk5KQogLSBTdGFydGVkIHRvIGNoYW5nZSBzdHVmZiBmb3IgYSBtb3ZlIHRvIG1ha2UgbGliY3VybCBhbmQgYSBtb3JlIHNlcGFyYXRlCiAgIGN1cmwgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBsaWJjdXJsLiBNYWRlIHRoZSBsaWJjdXJsIHNvdXJjZXMgaW50bwogICB0aGUgbmV3IGxpYiBkaXJlY3Rvcnkgd2hpbGUgdGhlIGN1cmwgYXBwbGljYXRpb24gd2lsbCByZW1haW4gaW4gc3JjIGFzCiAgIGJlZm9yZS4gTmV3IG1ha2VmaWxlcywgYWRqdXN0ZWQgY29uZmlndXJlIHNjcmlwdCBhbmQgc28uCgogICBsaWJjdXJsLmEgYnVpbHQgcXVpY2tseSBhbmQgZWFzaWx5LiBJIGJldHRlciBtYWtlIGEgYmV0dGVyIGludGVyZmFjZSB0bwogICB0aGUgbGliIGZ1bmN0aW9ucyB0aG91Z2guCgogICBUaGUgbmV3IHJvb3QgZGlyIGluY2x1ZGUvIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4gdGhlIHB1YmxpYyBpbmZvcm1hdGlvbgogICBhYm91dCB0aGUgbmV3IGxpYmN1cmwuIEl0IGlzIGEgbGl0dGxlIHVnbHkgc28gZmFyIDotKQoKCiBEYW5pZWwgKE1hciAxIDE5OTkpCiAtIFRvZGQgS2F1Zm1hbm4gc2VudCBtZSBhIGdvb2QgbGluayB0byBOZXRzY2FwZSdzIGNvb2tpZSBzcGVjIGFzIHdlbGwgYXMgdGhlCiAgIGluZm8gdGhhdCBSRkMgMjEwOSBzcGVjaWZpZXMgaG93IHRvIHVzZSB0aGVtLiAgVGhlIGxpbmsgaXMgbm93IGluIHRoZQogICBSRUFETUUgYW5kIHRoZSBSRkMgaW4gdGhlIFJFU09VUkNFUy4KCiBEYW5pZWwgKEZlYiAyMyAxOTk5KQogLSBGaW5hbGx5IG1hZGUgY29uZmlndXJlIGFjY2VwdCAtLXdpdGgtc3NsIHRvIGxvb2sgZm9yIFNTTCBsaWJzIGFuZCBpbmNsdWRlcwogICBpbiB0aGUgInN0YW5kYXJkIiBwbGFjZSAvdXNyL2xvY2FsL3NzbC4uLgoKIERhbmllbCAoRmViIDIyIDE5OTkpCiAtIFZlcmlmaWVkIHRoYXQgY3VybCBsaW5rZWQgZmluZSB3aXRoIE9wZW5TU0wgMC45LjFjIHdoaWNoIHNlZW1zIHRvIGJlCiAgIHRoZSBtb3N0IHJlY2VudC4KCiBIZW5yaSBHb21leiAoRnJpIEZlYiAgNSAxOTk5KQogLSBTZW50IGluIGFuIHVwZGF0ZWQgY3VybC1zc2wuc3BlYy4gSSBzdGlsbCBtaXNzIHRoZSBzY3JpcHQgdGhhdCBidWlsZHMgYW4KICAgUlBNIGF1dG9tYXRpY2FsbHkuLi4KClZlcnNpb24gNS41LjEKCiBNYXJrIEJ1dGxlciAoMjcgSmFuIDE5OTkpCiAtIENvcnJlY3RlZCBwcm9ibGVtcyBpbiBEb3dubG9hZCgpLgoKIERhbml0ZWwgU3RlbmJlcmcgKDI1IEphbiAxOTk5KQogLSBKZXJlbWllIFBldGl0IHBvaW50ZWQgb3V0IGEgZmV3IGZsYXdzIGluIHRoZSBzb3VyY2UgdGhhdCBwcmV2ZW50ZWQgaXQgZnJvbQogICBjb21waWxlIHdhcm5pbmcgZnJlZSB3aXRoIHRoZSBuYXRpdmUgY29tcGlsZXIgdW5kZXIgRGlnaXRhbCBVbml4IHY0LjBkLgoKVmVyc2lvbiA1LjUKCiBEYW5pZWwgU3RlbmJlcmcgKDE1IEphbiAxOTk5KQogLSBBZGRlZCBCam9ybnMgc21hbGwgdGV4dCB0byB0aGUgUkVBRE1FIGFib3V0IHRoZSBESUNUIHByb3RvY29sLgoKIERhbmllbCBTdGVuYmVyZyAoMTEgSmFuIDE5OTkpCiAtIDxqc3dpbmsgYXQgc29mdGNvbS5uZXQ+IHJlcG9ydGVkIGFib3V0IHRoZSB3aW4zMi12ZXJzaW9pbjogIkRvZXNuJ3QgdXNlCiAgIEFMTF9QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZSIuIFR1cm5lZCBvdXQgdG8gYmUgYmVjYXVzZSBvZiB0aGUgc3RhdGljLQogICBidWZmZXIgbmF0dXJlIG9mIHRoZSB3aW4zMiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxscyEKCiBCam9ybiBSZWVzZSAoMTAgSmFuIDE5OTkpCiAtIEkgaGF2ZSBhdHRhY2hlZCBhIHNpbXBsZSBhZGRpdGlvbiBmb3IgdGhlIERJQ1QgcHJvdG9jb2wgKFJGQyAyMjI5KS4KICAgSXQgcGVyZm9ybXMgZGljdGlvbmFyeSBsb29rdXBzLiBUaGUgb3V0cHV0IHN0aWxsIG5lZWRzIHRvIGJlIGJldHRlcgogICBmb3JtYXR0ZWQuCgogICBUbyB0ZXN0IGl0IHRyeSAodGhlIGV4YWN0IGZvcm1hdCwgYW5kIG1vcmUgZXhhbXBsZXMgYXJlIGRlc2NyaWJlZCBpbgogICB0aGUgUkZDKQoKICAgICAgICBkaWN0Oi8vZGljdC5vcmcvbTpoZWxsbwogICAgICAgIGRpY3Q6Ly9kaWN0Lm9yZy9tOmhlbGxvOjpzb3VuZGV4CgoKIFZpY2VudGUgR2FyY2lhICgxMCBKYW4gMTk5OSkKIC0gQ29ycmVjdGVkIHRoZSBwcm9ncmVzcyBtZXRlciBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gMjBNQi4KCiBEYW5pZWwgU3RlbmJlcmcgKDcgSmFuIDE5OTkpCiAtIENvcnJlY3RlZCB0aGUgLXQgYW5kIC1UIGhlbHAgdGV4dHMuIFRoZXkgY2xhaW1lZCB0byBiZSBGVFAgb25seS4KClZlcnNpb24gNS40CgogRGFuaWVsIFN0ZW5iZXJnCiAoNyBKYW4gMTk5OSkKIC0gSXJ2aW5nIFdvbGZlIHJlcG9ydGVkIHRoYXQgY3VybCAtcyBkaWRuJ3QgYWx3YXlzIHN1cHJlc3MgdGhlIHByb2dyZXNzCiAgIHJlcG9ydGluZy4gSXQgd2FzIHRoZSBmb3JtIHBvc3QgdGhhdCBhdXRvYW10aWNhbGx5IGFsd2F5cyBzd2l0Y2hlZCBpdCBvbgogICBhZ2Fpbi4gVGhpcyBpcyBub3cgY29ycmVjdGVkIQoKICg0IEphbiAxOTk5KQogLSBBbmRyZWFzIEtvc3R5cmthIHN1Z2dlc3RlZCBJJ2QgYWRkIFBVVCBhbmQgaGUgaGVscGVkIG1lIG91dCB0byB0ZXN0IGl0LiBJZgogICB5b3UgdXNlIC10IG9yIC1UIG5vdyBvbiBhIGh0dHAgb3IgaHR0cHMgc2VydmVyLCBQVVQgd2lsbCBiZSB1c2VkIGZvciBmaWxlCiAgIHVwbG9hZC4KCiAgIEkgcmVtb3ZlZCB0aGUgZm9ybWVyIHVzZSBvZiAtVCB3aXRoIEhUVFAuIEkgZG91YnQgYW55b25lIGV2ZXIgcmVhbGx5IHVzZWQKICAgdGhhdC4KCiAoNCBKYW4gMTk5OSkKIC0gRXJpayBKYWNvYnNlbiBmb3VuZCBhIHdpZHRoIGJ1ZyBpbiB0aGUgbXByaW50ZigpIGZ1bmN0aW9uLiAgSSBjb3JyZWN0ZWQgaXQKICAgbm93LgoKICg0IEphbiAxOTk5KQogLSBBcyBKb2huIFYuIENob3cgcG9pbnRlZCBvdXQgdG8gbWUsIGN1cmwgYWNjZXB0ZWQgdmVyeSBsaW1pdGVkIFVSTCBzaXplcy4gSXQKICAgc2hvdWxkIG5vdyBhY2NlcHQgcGF0aCBwYXJ0cyB0aGF0IGFyZSB1cCB0byBhdCBsZWFzdCA0MDk2IGJ5dGVzLgoKIC0gU29tZWhvdyBJIHNjcmV3ZWQgdXAgd2hlbiBhcHBseWluZyB0aGUgQUlYIGZpeCBmcm9tIEdpbGJlcnQgUmFtaXJleiwgc28KICAgSSByZWRpZCB0aGF0IG5vdy4KClZlcnNpb24gNS4zYSAod2luMzIgb25seSkKCiBUcm95IEVuZ2VsCiAtIENvcnJlY3RlZCBhIHdpbjMyIGJ1ZyBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgcGFydC4KClZlcnNpb24gNS4zCgogR2lsYmVydCBSYW1pcmV6IEpyLiAoMjEgRGVjIDE5OTgpCiAtIEkgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgInF1b3RlIiBmdW5jdGlvbiBvZiBGVFAgY2xpZW50cy4gSXQgYWxsb3dzIHlvdSB0bwogICBzZW5kIGFyYml0cmFyeSBjb21tYW5kcyB0byB0aGUgcmVtb3RlIEZUUCBzZXJ2ZXIuIEkgY2hvc2UgdGhlIC1RLy0tcXVvdGUKICAgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KCiAgIFlvdSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHF1b3RlZCBzdHJpbmcsIGFuZCBjdXJsIHdpbGwgYXBwbHkgdGhlbSBpbgogICBvcmRlci4gIFRoaXMgaXMgd2hhdCBJIHVzZSBmb3IgbXkgTVZTIHVwbG9hZDoKCiAgY3VybCAtQiAtLWNybGYgLVEgInNpdGUgbHJlY2w9ODAiIC1RICJzaXRlIGJsaz04MDAwIiAtVCBmaWxlIGZ0cDovL29zMzkwL3Rlc3QKCiAgIEN1cmwgd2lsbCBzZW5kIHRoZSB0d28gcXVvdGVkICJzaXRlIiBjb21tYW5kcyBpbiB0aGUgcHJvcGVyIG9yZGVyLgoKIC0gTWFkZSBpdCBjb21waWxlIHNtb290aGx5IG9uIEFJWC4KCiBHaWxiZXJ0IFJhbWlyZXogSnIuICgxOCBEZWMgMTk5OCkKIC0gQnJvdWdodCBhbiBNVlMgcGF0Y2g6IC0zLy0tbXZzLCBmb3IgZnRwIHVwbG9hZCB0byB0aGUgTVZTIGZ0cCBzZXJ2ZXIuCgogVHJveSBFbmdlbCAoMTcgRGVjIDE5OTgpCiAtIEJyb3VnaHQgYSBjb3JyZWN0aW9uIHRoYXQgZml4ZXMgdGhlIHdpbjMyIGN1cmwgYnVnLgoKIERhbmllbCBTdGVuYmVyZwogLSBBIGJ1ZywgcG9pbnRlZCBvdXQgdG8gbWUgYnkgRHIgSC4gVC4gTGV1bmcsIGNhdXNlZCBjdXJsIHRvIGNyYXNoIG9uIHRoZSAtQQogICBmbGFnIG9uIGNlcnRhaW4gc3lzdGVtcy4gQWN0dWFsbHksIGFsbCBzeXN0ZW1zIHNob3VsZCd2ZSEKCiAtIEFkZGVkIGEgZmV3IGRlZmluZXMgdG8gbWFrZSBkaXJlY3Rvcmllcy9maWxlIG5hbWVzIGdldCBidWlsZCBuaWNlciAod2l0aCBfCiAgIGluc3RlYWQgb2YgLiBhbmQgXCBpbnN0ZWFkIG9mIC8gaW4gd2luMzIpLgoKIC0gc3RldmUgPGZpc2sgYXQgcG9sYXIuYm93ZG9pbi5lZHU+IHJlcG9ydGVkIGEgd2VpcmQgYnVnIHRoYXQgb2NjdXJlZCBpZiB0aGUKICAgZnRwIHNlcnZlciByZXNwb25zZSBsaW5lIGhhZCBhIHBhcmVudGhlc2lzIG9uIHRoZSBsaW5lIGJlZm9yZSB0aGUgKHNpemUpCiAgIGluZm8uIEkgaG9wZSBpdCB3b3JrcyBiZXR0ZXIgbm93IQoKVmVyc2lvbiA1LjIuMQoKIFN0ZXZlbiBHLiBKb2huc29uIChEZWMgMTQsIDE5OTgpCiAtIEJyb3VnaHQgYSBmaXggdGhhdCBjb3JyZWN0ZWQgYSBjcmFzaCBpbiA1LjIgZHVlIHRvIGJhZCB0cmVhdG1lbnQgb2YgdGhlCiAgIGVudmlyb25tZW50IHZhcmlhYmxlcy4KClZlcnNpb24gNS4yCgogRGFuaWVsIFN0ZW5iZXJnIChEZWMgMTQsIDE5OTgpCiAtIFJld3JvdGUgdGhlIG1raGVscCBzY3JpcHQgYW5kIG5vdywgdGhlIG1raGVscC5wbCBzY3JpcHQgZ2VuZXJhdGVzIHRoZQogICBodWdlaGVscC5jIGZpbGUgZnJvbSB0aGUgUkVBRE1FICphbmQqIHRoZSBtYW4gcGFnZSBmaWxlIGN1cmwuMS4gQnkgdXNpbmcKICAgYm90aCBmaWxlcywgSSBubyBsb25nZXIgbmVlZCB0byBoYXZlIGRvdWJsZSBpbmZvcm1hdGlvbiBpbiBib3RoIHRoZSBtYW4KICAgcGFnZSBhbmQgdGhlIFJFQURNRSBhcyB3ZWxsLiBTbywgd2luMzItdXNlcnMgd2lsbCBvbmx5IGhhdmUgdGhlIGh1Z2VoZWxwLmMKICAgZmlsZSBmb3IgYWxsIGluZm8sIGJ1dCB0aGVuLCB0aGV5IGRvd25sb2FkIHRoZSBwbGFpbiBiaW5hcnkgbW9zdCB0aW1lcwogICBhbnl3YXkuCgogLSBnY2MyLjguMSB3aXRoIHRoZSAtV2FsbCBmbGFnIGNvbXBsYWludHMgYSBsb3Qgb24gc3Vic2NyaXB0IGhhcyB0eXBlIGBjaGFyJwogICBpZiBJIGRvbid0IGV4cGxpY2l0bHkgdHlwZWNhc3QgdGhlIGFyZ3VtZW50IHRvIGlzZGlnaXQoKSBvciBpc3NwYWNlKCkgdG8KICAgaW50LiBTbyBJIGRpZCB0byBjb21waWxlIHdhcm5pbmcgZnJlZSB3aXRoIHRoYXQgdG9vLgoKIC0gQWRkZWQgY2hlY2tzIGZvciAnbG9uZyBkb3VibGUnIGFuZCAnbG9uZyBsb25nJyBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4gSQogICBuZWVkIHRob3NlIGZvciB0aGUgbXByaW50Zi5jIHNvdXJjZSB0byBjb21waWxlIHdlbGwgb24gbm9uIGxvbmcgbG9uZwogICBjb21mb3JtaW5nIHN5c3RlbXMhCgpWZXJzaW9uIDUuMSAobm90IHB1YmxpY2x5IHJlbGVhc2VkKQoKIERhbmllbCBTdGVuYmVyZyAoRGVjIDEwLCAxOTk4KQogLSBJIGdvdCBhIHJlcXVlc3QgZm9yIGEgcHJlLWNvbXBpbGVkIE5UIEFscGhhIHZlcnNpb24uIEFueW9uZT8KCiAtIEFkZGVkIEx5bngvQ0VSTiB3d3cgbGliIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlIHN1cHBvcnQuIFRoYXQgbWVhbnMgY3VybAogICBub3cgcmVhZHMgYW5kIHVuZGVyc3RhbmRzIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOgoKCUhUVFBfUFJPWFksIEhUVFBTX1BST1hZLCBGVFBfUFJPWFksIEdPUEhFUl9QUk9YWQoKICAgVGhleSBzaG91bGQgYmUgc2V0IGZvciBwcm90b2NvbC1zcGVjaWZpYyBwcm94aWVzLiBHZW5lcmFsIHByb3h5IHNob3VsZCBiZQogICBzZXQgd2l0aAoJCglBTExfUFJPWFkKCiAgIEFuZCBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGhvc3QgbmFtZXMgdGhhdCBzaG91bGRuJ3QgZ28gdGhyb3VnaCBhbnkKICAgcHJveHkgaXMgc2V0IGluIChvbmx5IGFuIGFzdGVyaXNrLCAnKicgbWF0Y2hlcyBhbGwgaG9zdHMpLgoKCU5PX1BST1hZCgogICBUaGUgdXNhZ2Ugb2YgdGhlIC14Ly0tcHJveHkgZmxhZyBvdmVycmlkZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KCiAtIFByb3h5IGNhbiBub3cgYmUgc3BlY2lmaWVkIHdpdGggYSBwcm9jb3RvbDovLyBwcmVmaXguCgogLSBXcm90ZSB0aGUgY3VybC4xIG1hbiBwYWdlLgoKIC0gSW50cm9kdWNlZCBhIHdob2xlIG5ldyBkeW5hbWljIGJ1ZmZlciBzeXN0ZW0gZm9yIGFsbCBzcHJpbnRmKClzLiBJdCBpcwogICBiYXNlZCBvbiB0aGUgKnByaW50ZigpIHBhY2thZ2UgYnkgeW91cnMgdHJ1bHkgYW5kIEJqb3JuIFJlZXNlLiBIb3BlZnVsbHksCiAgIHRoZXJlIGFyZW4ndCB0aGF0IG1hbnkgYnVmZmVyIG92ZXJmbG93IHJpc2tzIGxlZnQgbm93LgoKIC0gQWgsIEkgc2hvdWxkIG1lbnRpb24gSSd2ZSBjb21waWxlZCBhbmQgYnVpbHQgY3VybCBzdWNjZXNzZnVsbHkgdW5kZXIKICAgc29sYXJpcyAyLjYgd2l0aCBnY2Mgbm93LCBnY2MgMi43LjIgd29uJ3Qgd29yayBidXQgMi44LjEgZGlkIG9rLgoKIE9yZW4gVGlyb3NoIChEZWMgMywgMTk5OCkKIC0gQnJvdWdodCB0d28gLnNwZWMgZmlsZXMsIHRvIHVzZSB3aGVuIGNyZWF0aW5nIChMaW51eCkgUmVkaGF0IHN0eWxlIFJQTQogICBwYWNrYWdlcy4gVGhleSdyZSBuYW1lZCBjdXJsLnNwZWMgYW5kIGN1cmwtc3NsLnNwZWMuCgogVHJveSBFbmdlbAogLSBTdXBwbGllZCB0aGUgc3JjL01ha2VmaWxlLnZjNiBmb3IgZWFzeSBjb21waWxpbmcgd2l0aCBWQysrIHVuZGVyIFdpbjMyLgoKVmVyc2lvbiA1LjAKCiBEYW5pZWwgU3RlbmJlcmcgKERlYyAxLCAxOTk4KQogLSBOb3QgYSBzaW5nbGUgYnVnIHJlcG9ydCBpbiBhZ2VzLgogLSBDb3JyZWN0ZWQgZ2V0cGFzcy5jIGFuZCBtYWluLmMgdG8gY29tcGlsZSB3YXJuaW5nIGFuZCBlcnJvciBmcmVlIHdpdGggdGhlCiAgIFdpbjMyIFZDKysgY3JhcC4KClZlcnNpb24gNS4wIGJldGEgMjQKCiBEYW5pZWwgU3RlbmJlcmcgKE5vdiAyMCwgMTk5OCkKCiBIT1cgVE8gQlVJTEQgQSBSRUxFQVNFIEFSQ0hJVkU6CgogKiBQcmUtcmVxdWlzaXRlIHNvZnR3YXJlOgogICBXaGF0CQkgICAgIFRvIGJ1aWxkIHdoYXQgICAgICAgICAgICAgUmVhZHMgZGF0YSBmcm9tCiAgID09PT0gICAgICAgICAgICAgID09PT09PT09PT09PT0gICAgICAgICAgICAgPT09PT09PT09PT09PT09CiAgIEdOVSBhdXRvbWFrZSAgICAgIE1ha2VmaWxlLmluLCBhY2xvY2FsLm00ICAgY29uZmlndXJlLmluCiAgICAgR05VIG1ha2UoMSkgICAgICAtICIgLQogICAgIEdOVSBnY2MoMSkgICAgICAgLSAiIC0KICAgR05VIGF1dG9jb25mICAgICAgY29uZmlndXJlICAgICAgICAgICAgICAgICBjb25maWd1cmUuaW4KICAgR05VIGF1dG9oZWFkZXIoMikgY29uZmlnLmguaW4JICAgICAgIGNvbmZpZ3VyZS5pbiwgYWNjb25maWcuaAoKICogTWFrZSBzdXJlIGFsbCBmaWxlcyB0aGF0IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBhcmNoaXZlIGFyZSBwdXQgaW4gRklMRVMuCgogKiBSdW4gJy4vbWFrZXRneicgYW5kIGVudGVyIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBuZXcgdG8gYmVjb21lIGFyY2hpdmUuCgogICBtYWtldGd6IGRvZXM6CgogICAtIEVudGVycyB0aGUgbmV3bHkgY3JlYXRlZCB2ZXJzaW9uIG51bWJlciBpbiB1cmwuaC4KICAgLSAoSWYgeW91IGRvbid0IGhhdmUgYXV0b21ha2UsIHRoaXMgc2NyaXB0IHdpbGwgd2FybiBhYm91dCB0aGF0LCBidXQgdW5sZXNzCiAgICAgeW91IGhhdmUgY2hhbmdlZCB0aGUgTWFrZWZpbGUuYW0gZmlsZXMsIHRoYXQgaXMgbm90aGluZyB0byBjYXJlIGFib3V0LikKICAgICBJZiB5b3UgaGF2ZSBpdCwgaXQnbGwgcnVuIGl0LgogICAtIElmIHlvdSBoYXZlIGF1dG9jb25mLCB0aGUgY29uZmlndXJlLmluIHdpbGwgYmUgZWRpdGVkIHRvIGdldCB0aGUgbmV3bHkKICAgICBjcmVhdGVkIHZlcnNpb24gbnVtYmVyIGFuZCBhdXRvY29uZiB3aWxsIGJlIHJ1bi4KICAgLSBDcmVhdGVzIGEgbmV3IGRpcmVjdG9yeSBuYW1lZCBjdXJsLTx2ZXJzaW9uPi4gKEFjdHVhbGx5LCBpdCB1c2VzIHRoZSBiYXNlCiAgICAgbmFtZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgdXAgdG8gdGhlIGZpcnN0ICctJy4pCiAgIC0gQ29waWVzIGFsbCBmaWxlcyBtZW50aW9uZWQgaW4gRklMRVMgdG8gdGhlIG5ldyBkaXJlY3RvcnkuIFNhdmluZwogICAgIHBlcm1pc3Npb25zIGFuZCBkaXJlY3Rvcnkgc3RydWN0dXJlLgogICAtIFVzZXMgdGFyIHRvIGNyZWF0ZSBhbiBhcmNoaXZlIG9mIGl0IGFsbCwgbmFtZWQgY3VybC08dmVyc2lvbj4udGFyLmd6CiAgIC0gZ3ppcHMgdGhlIGFyY2hpdmUKICAgLSBSZW1vdmVzIHRoZSBuZXcgZGlyZWN0b3J5IGFuZCBhbGwgaXRzIGNvbnRlbnRzLgoKICogV2hlbiBkb25lLCB5b3UgaGF2ZSBhbiBhcmNoaXZlIHN0b3JlZCBpbiB5b3VyIGRpcmVjdG9yeSBuYW1lZAogICBjdXJsLTx2ZXJzaW9uPi50YXIuZ3ouCgogICBEb25lIQoKICAgKDEpIFRoZXkncmUgcmVxdWlyZWQgdG8gbWFrZSBhdXRvbWFrZSBydW4gcHJvcGVybHkuCiAgICgyKSBJdCBpcyBkaXN0cmlidXRlZCBhcyBhIHBhcnQgb2YgdGhlIEdOVSBhdXRvY29uZiBhcmNoaXZlLgoKIERhbmllbCBTdGVuYmVyZyAoTm92IDE4LCAxOTk4KQogLSBJIGNoYW5nZWQgdGhlIFRBRy1zeXN0ZW0uIElmIHlvdSBldmVyIHVzZWQgdXJsZ2V0KCkgZnJvbSB0aGlzIHBhY2thZ2UgaW4KICAgYW5vdGhlciBwcm9kdWN0LCB5b3UgbmVlZCB0byByZWNvbXBpbGUgd2l0aCB0aGUgbmV3IGhlYWRlcnMuIEkgZGlkIHRoaXMKICAgbmV3IHN0dWZmIHRvIGJldHRlciBkZWFsIHdpdGggZGlmZmVyZW50IGNvbXBpbGVycyBhbmQgc3lzdGVtIHdpdGggZGlmZmVyZW50CiAgIHZhcmlhYmxlIHNpemVzLiBJIHRoaW5rIGl0IG1ha2VzIGl0IGEgbGl0dGxlIG1vcmUgcG9ydGFibGUuIFRoaXMgcHJvdmVzCiAgIHRvIGNvbXBpbGUgd2FybmluZyBmcmVlIHdpdGggdGhlIHByb2JsZW1hdGljIElSSVggY29tcGlsZXIhCiAtIFdpbjMyIGNvbXBpbGVkIHdpdGggYSBzaWxseSBlcnJvci4gQ29ycmVjdGVkIG5vdy4KIC0gQnJpYW4gQ2hhcGxpbiByZXBvcnRlZCB5ZXQgYW5vdGhlciBwcm9ibGVtIGluCiAgIG11bHRpbGluZSBGVFAgcmVzcG9uc2VzLiBJJ3ZlIHRyaWVkIHRvIGNvcnJlY3QgaXQuIEkgbWFpbGVkIGhpbSBhIG5ldwogICB2ZXJzaW9uIGFuZCBJIGhvcGUgaGUgZ2V0cyBiYWNrIHNvb24gd2l0aCBwb3NpdGl2ZSBmZWVkYmFjayEKIC0gSW1wcm92ZWQgdGhlICdtYWtldGd6JyB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRyZWUgd2hpY2ggaXQgbWFrZXMKICAgYW4gYXJjaGl2ZSBmcm9tIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIHJlbmFtaW5nIG9mIHRoZSBjdXJyZW50IG9uZS4KIC0gTWFpbGluZyBsaXN0IG9wZW5lZCAoc2VlIFJFQURNRSkuCiAtIE1hZGUgLXYgbW9yZSB2ZXJib3NlIG9uIHRoZSBQQVNWIHNlY3Rpb24gb2YgZnRwIHRyYW5zZmVycy4gTm93IGl0IHRlbGxzCiAgIGhvc3QgbmFtZSBhbmQgSVAgb2YgdGhlIG5ldyBob3N0IChhbmQgcG9ydCBudW1iZXIpLiBJIGFsc28gYWRkZWQgYSBzZWN0aW9uCiAgIGFib3V0IFBPUlQgdnMgUEFTViBpbiB0aGUgUkVBRE1FLgoKVmVyc2lvbiA1LjAgYmV0YSAyMQoKIEFuZ3VzIE1hY2theSAoTm92IDE1LCAxOTk4KQogLSBJbnRyb2R1Y2VkIGF1dG9tYWtlIHN0dWZmLgoKIERhbmllbCBTdGVuYmVyZyAoTm92IDEzLCAxOTk4KQogLSBKdXN0IG1hZGUgYSBzdWNjZXNzZnVsIEdFVCBvZiBhIGRvY3VtZW50IGZyb20gYW4gU1NMLXNlcnZlciB1c2luZyBteSBvd24KICAgcHJpdmF0ZSBjZXJ0aWZpY2F0ZSBmb3IgYXV0aGVudGljYXRpb24hIFRoZSBjZXJ0aWZpY2F0ZSBoYXMgdG8gYmUgaW4gUEVNCiAgIGZvcm1hdC4gWW91IGRvIHRoYXQgdGhlIGVhc2llc3Qgd2F5IChhbHRob3VnaCBub3QgKnRoYXQqIGVhc3kpIGJ5CiAgIGRvd25sb2FkaW5nIHRoZSBTU0x5ZWF5IFBLQ1MjMTItcGF0Y2ggYnkgRHIgU3RlcGhlbiBOLiBIZW5zb24gZnJvbSBoaXMgc2l0ZQogICBhdDogaHR0cDovL3d3dy5kcmgtY29uc3VsdGFuY3kuZGVtb24uY28udWsvLiBVc2luZyBoaXMgdG9vbCwgeW91IGNhbgogICBjb252ZXJ0IGFueSBtb2Rlcm4gTmV0c2NhcGUgb3IgKGV2ZW4pIE1TSUUgY2VydGlmaWNhdGUgdG8gUEVNLWZvcm1hdC4gIFVzZQogICBpdCB3aXRoICdjdXJsIC1FIDxjZXJ0aWZpY2F0ZTpwYXNzd29yZD4gaHR0cHM6Ly9zaXRlLmNvbScuICBJZiB0aGlzIGlzbid0IGEKICAgY29vbCBmZWF0dXJlLCB0aGVuIEkgZG9uJ3Qga25vdyB3aGF0IGNvb2wgZmVhdHVyZXMgbG9vayBsaWtlISA7LSkKIC0gV29ya2luZyBzbG93bHkgb24gdGVsbmV0IGNvbm5lY3Rpb25zLiAjZGVmaW5lIFRSWV9URUxORVQgdG8gdHJ5IGl0IG91dC4KICAgKGN1cmwgLXUgdXNlcjpwYXNzd2QgInRlbG5ldDovL2hvc3QuY29tL2NhdCAubG9naW4iIGlzIG9uZSBleGFtcGxlKSBJIGRvCiAgIGhhdmUgcHJvYmxlbSB0byBkZWZpbmUgaG93IGl0IHNob3VsZCB3b3JrLiBUaGUgcHJpbWUgcHVycG9zZSBmb3IgdGhpcyBtdXN0CiAgIGJlIHRvIGdldCAoOGJpdCBjbGVhbikgZmlsZXMgdmlhIHRlbG5ldCwgYW5kIGl0IHJlYWxseSBpc24ndCB0aGF0IGVhc3kgdG8KICAgZ2V0IGZpbGVzIHRoaXMgd2F5LiBTdGlsbCBoYXZpbmcgcHJvYmxlbXMgd2l0aCBcbiBiZWluZyBjb252ZXJ0ZWQgdG8gXHJcbi4KCiBBbmd1cyBNYWNrYXkgKE5vdiAxMiwgMTk5OCkKIC0gQ29ycmVjdGVkIGFub3RoZXIgYnVnIGluIHRoZSBsb25nIHBhcmFtZXRlciBuYW1lIHBhcnNlci4KIC0gTW9kaWZpZWQgZ2V0cGFzcy5jIChOT1RFOiBzZWUgdGhlIHNwZWNpYWwgbGljZW5zaW5nIGluIHRoZSB0b3Agb2YgdGhhdAogICBzb3VyY2UgZmlsZSkuCgogRGFuaWVsIFN0ZW5iZXJnIChOb3YgMTIsIDE5OTgpCiAtIFdlIG1heSBoYXZlIHJlbW92ZWQgdGhlIHNpbGx5IHdhcm5pbmdzIGZyb20gdXJsLmMgd2hlbiBjb21waWxlZCB1bmRlciBJUklYLgogICBUaGFua3MgYWdhaW4gdG8gQmpvcm4gUmVlc2UgYW5kIE1hcnRpbiBTdGFhZWwuCiAtIFdyb3RlIGZvcm1maW5kLnBsIHdoaWNoIGlzIGEgbmV3IHBlcmwgc2NyaXB0IGludGVuZGVkIHRvIGhlbHAgeW91IGZpbmQgb3V0CiAgIGhvdyBhIEZPUk0gc3VibWlzc2lvbiBzaG91bGQgYmUgZG9uZS4gVGhpcyBuZWVkcyBhIGxpdHRsZSBtb3JlIHdvcmsgdG8gZ2V0CiAgIHJlYWxseSBnb29kLgoKIERhbmllbCBTdGVuYmVyZyAoTm92IDExLCAxOTk4KQogLSBNYWRlIHRoZSBIVFRQIGhlYWRlci1jaGVja2VyIGFjY2VwdCB3aGl0ZSBzcGFjZXMgYmVmb3JlIHRoZSBIVFRQLzEuPyBsaW5lLgogICBBcHBlYXJhbnRseSBzb21lIHByb3hpZXMvc2l0ZXMgYWRkIHN1Y2ggYXQgdGltZXMgKG15IHRlc3QgcHJveHkgZGlkIHdoZW4gSQogICBkb3dubG9hZGVkIGEgZ29waGVyIHBhZ2Ugd2l0aCBpdCkhCiAtIE1vdmVkIHRoZSBmb3JtZXIgLWggdG8gLU0gYW5kIG1hZGUgLWggc2hvdyB0aGUgc2hvcnQgaGVscCB0ZXh0IGluc3RlYWQuIEkKICAgaGFkIHRvIGVuYWJsZSBhIGZvcmNlZCBoZWxwIHRleHQgb3B0aW9uLiBOb3cgYW4gZXZlbiBzaG9ydGVyIGhlbHAgdGV4dCB3aWxsCiAgIGJlIHByZXNlbnRlZCB3aGVuIGFuIHVua25vd24gb3B0aW9uIGFuZCBzaW1pbGFyLCBpcyB1c2VkLgogLSBzdGRjaGVhZGVycy5oIGRpZG4ndCB3b3JrIHdpdGggSVJJWCA2LjQgbmF0aXZlIGNjIGNvbXBpbGVyLiBJIGhvcGUgbXkKICAgY2hhbmdlcyBkb24ndCBtYWtlIG90aGVyIHZlcnNpb25zIGdvIG51dHMgaW5zdGVhZC4KCiBEYW5pZWwgU3RlbmJlcmcgKE5vdiAxMCwgMTk5OCkKIC0gQWRkZWQgYSB3ZWlyZCBjaGVjayBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCB0byBjaGVjayBmb3IgdGhlIHNpbGx5IEFJWAogICB3YXJuaW5ncyBhYm91dCBteSAjZGVmaW5lIHN0cmNhc2VjbXAoKSBzdHVmZi4gSSBkbyB0aGF0IGRlZmluZSB0byBwcmV2ZW50CiAgIG1lIGFuZCBvdGhlciBjb250cmlidXRvcnMgdG8gYWNjaWRlbnRhbHkgdXNlIHRoYXQgZnVuY3Rpb24gbmFtZSBpbnN0ZWFkCiAgIG9mIHN0cmVxdWFsKCkuLi4KIC0gSSBidWdmaXhlZCBBbmd1cydzIGdldHBhc3MuYyB2ZXJ5IGxpdHRsZS4KIC0gRml4ZWQgdGhlIHZlcmJvc2UgZmxhZyBuYW1lcyB0byBnZXRvcHQtc3R5bGUsIGkuZSAnY3VybCAtLWxvYycgd2lsbCBiZQogICBzdWZmaWNpZW50IGluc3RlYWQgb2YgLS1sb2NhdGlvbiBhcyAibG9jIiBpcyBhIHVuaXF1ZSBwcmVmaXguIEFsc28sIGFueXRoaW5nCiAgIGFmdGVyIGEgJy0tJyBpcyB0cmVhdGVkIGFzIGFuIFVSTC4gU28gaWYgeW91IGRvIGhhdmUgYSBob3N0IHdpdGggYSB3ZWVlaXJkCiAgIG5hbWUgeW91IGNhbiBkbyAnY3VybCAtLSAtaG9zdC5jb20nLgogLSBBbm90aGVyIGdldG9wdC1hZGp1c3Q7IGN1cmwgbm93IGFjY2VwdHMgZmxhZ3MgYWZ0ZXIgdGhlIFVSTCBvbiB0aGUgY29tbWFuZAogICBsaW5lLiAnY3VybCB3d3cuZm9vLmNvbSAtTycgaXMgcGVyZmVjdGx5IHZhbGlkLgogLSBDb3JyZWN0ZWQgdGhlIC5jdXJscmMgcGFyc2VyIHNvIHRoYXQgc3RydG9rKCkgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIEkKICAgYmVsaWV2ZSBpdCB3b3JrcyBiZXR0ZXIuIEV2ZW4gVVJMcyBjYW4gYmUgc3BlY2lmaWVkIGluIGl0IG5vdy4KCiBBbmd1cyBNYWNrYXkgKE5vdiA5LCAxOTk4KQogLSBSZXBsYWNlZCBnZXRwYXNzLmMgd2l0aCBhIG5ld2x5IHdyaXR0ZW4gb25lLCBub3QgdW5kZXIgR1BMIGxpY2Vuc2UKIC0gQ2hhbmdlZCBPUyB0byBhICNkZWZpbmUgaW4gY29uZmlnLmggaW5zdGVhZCBvZiBjb21waWxlciBmbGFnCiAtIE1ha2VmaWxlIG5vdyB1c2VzIC1ESEFWRV9DT05GSUdfSAoKIERhbmllbCBTdGVuYmVyZyAoTm92IDksIDE5OTgpCiAtIE9rLCBJIGV4cGFuZGVkIHRoZSB0Z3otdGFyZ2V0IHRvIHVwZGF0ZSB0aGUgdmVyc2lvbiBzdHJpbmcgb24gZWFjaCBvY2NhdGlvbgogICBJIGJ1aWxkIGEgcmVsZWFzZSBhcmNoaXZlIQogLSBJIHJlYWN0ZWQgb24gQW5ndXMgTWFja2F5J3MgaW5pdGlhdGl2ZSBhbmQgcmVtYWRlIHRoZSBwYXJhbWV0ZXIgcGFyc2VyIHRvCiAgIGJlIG1vcmUgZ2V0b3B0IGNvbXBsaWFudC4gQ3VybCBub3cgc3VwcG9ydHMgIm1lcmdlZCIgZmxhZ3MgYXMgaW4gCgljdXJsIC1sc3YgZnRwLnNpdGUuY29tCiAgIERvIG5vdGUgdGhhdCBJIGhhZCB0byBtb3ZlIHRocmVlIHNob3J0LW5hbWVzIG9mIHRoZSBvcHRpb25zLiBQYXJhbWV0ZXJzCiAgIHRoYXQgbmVlZHMgYW4gYWRkaXRpb25hbCBzdHJpbmcgc3VjaCBhcyAteCBtdXN0IGJlIHN0YW5kLWFsb25lIG9yIHRoZQogICBsYXN0IGluIGEgbWVyZ2VkIHNlcXVlbmNlOgoJY3VybCAtbHN4IG15LXByb3h5IGZ0cC5zaXRlLmNvbQogICBpcyBvaywgYnV0IHVzaW5nIHRoZSBmbGFncyBpbiBhIGRpZmZlcmVudCBvcmRlciBsaWtlICctbHhzJyB3b3VsZCBjYXVzZQogICB1bmV4cGVjdGVkIHJlc3VsdHMgKGFzIHRoZSAncycgb3B0aW9uIHdvdWxkIGJlIHNraXBwZWQpLgogLSBJJ3ZlIGNoYW5nZWQgdGhlIGhlYWRlcnMgaW4gYWxsIGZpbGVzIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIE1velBMCiAgIGxpY2Vuc2UsIGFzIHRoZXkgYXJlIHN1cHBvc2VkIHRvIGxvb2sgbGlrZSB3aGVuIGNvbmZvcm1pbmcuCiAtIE1hZGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgbWFrZSB0aGUgY29uZmlnLmguIFRoZSBmb3JtZXIgY29uZmlnLmggaXMgbm93CiAgIHNldHVwLmguCiAtIFRoZSBSRVNPVVJDRVMgYW5kIFRPRE8gZmlsZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBhcmNoaXZlLgoKIEFuZ3VzIE1hY2theSAoTm92IDUsIDE5OTgpCiAtIEZpeGVkIGdldHBhc3MuYyBhbmQgdmFyaW91cyBjb25maWd1cmUgc3R1ZmYKCiBEYW5pZWwgU3RlbmJlcmcgKE5vdiAzLCAxOTk4KQogLSBVc2UgLUgvLS1oZWFkZXIgZm9yIGN1c3RvbSBIVFRQLWhlYWRlcnMuIExldHMgeW91IHBhc3Mgb24geW91ciBvd24KICAgc3BlY2lmaWVkIGhlYWRlcnMgdG8gdGhlIHJlbW90ZSBzZXJ2ZXIuIEkgd291bGRuJ3QgcmVjb21tZW5kIHRyeWluZyB0byB1c2UKICAgYSBoZWFkZXIgd2l0aCBhIGRlZmluZWQgdXNhZ2UgYWNjb3JkaW5nIHRvIHN0YW5kYXJkcy4gVXNlIHRoaXMgZmxhZyBvbmNlCiAgIGZvciBldmVyeSBjdXN0b20gaGVhZGVyIHlvdSB3YW50IHRvIGFkZC4KIC0gVXNlIC1CLy0tZnRwLWFzY2lpIHRvIGZvcmNlIGZ0cCB0byB1c2UgQVNDSUkgbW9kZSB3aGVuIHRyYW5zZmVyaW5nIGZpbGVzLgogLSBDb3JyZWN0ZWQgdGhlICdnZXRsaW5rcy5wbCcgc2NyaXB0LCBJIGFjY2lkZW50YWxseSBsZWZ0IG15IHNpbGx5IHByb3h5CiAgIHVzYWdlIGluIHRoZXJlISBTaW5jZSB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSAuY3VybHJjIGZpbGUsIGl0IGlzIGVhc2llciB0bwogICB3cml0ZSBzY3JpcHRzIHRoYXQgdXNlIGN1cmwgc2luY2UgcHJveGllcyBhbmQgc3R1ZmYgc2hvdWxkIGJlIGluIHRoZQogICAuY3VybHJjIGZpbGUgYW55d2F5LgogLSBJbnRyb2R1Y2luZyB0aGUgbmV3IC1GIGZsYWcgZm9yIEhUVFAgUE9TVC4gSXQgc3VwcG9ydHMgbXVsdGlwYXJ0L2Zvcm0tZGF0YQogICB3aGljaCBtZWFucyBpdCBpcyBnb25uYSBiZSBwb3NzaWJsZSB0byB1cGxvYWQgZmlsZXMgZXRjIHRocm91Z2ggSFRUUCBQT1NULgogICBTaGlyYXogS2FuZ2EgYXNrZWQgZm9yIHRoZSBmZWF0dXJlIGFuZCBteSBicm90aGVyLAogICBCavZybiBTdGVuYmVyZyBoZWxwZWQgbWUgZGVzaWduIHRoZSB1c2VyCiAgIGludGVyZmFjZSBmb3IgdGhpcyBiZWFzdC4gIFRoaXMgZmVhdHVyZSByZXF1aXJlcyBxdWl0ZSBzb21lIGRvY3MsCiAgIHNpbmNlIGl0IGhhcyB0dXJuZWQgb3V0IG5vdCBvbmx5IHF1aXRlIGNhcGFibGUsIGJ1dCBhbHNvIGNvbXBsaWNhdGVkISA6LSkKIC0gQSBub3RlIGhlcmUsIHNpbmNlIEkndmUgcmVjZWl2ZWQgbWFpbCBhYm91dCBpdC4gU1NMZWF5IHZlcnNpb25zIHByaW9yIHRvCiAgIDAuOCB3aWxsICpub3QqIHdvcmsgd2l0aCBjdXJsIQogLSBXaWwgTGFuZ2ZvcmQgcmVwb3J0ZWQgYSBidWcgdGhhdCBvY2N1cnJlZCBzaW5jZSBjdXJsCiAgIGRpZCBub3QgcHJvcGVybHkgdXNlIENSTEYgd2hlbiBpc3N1aW5nIGZ0cCBjb21tYW5kcy4gSSBmaXhlZCBpdC4KIC0gUmVhcnJhbmdlZCB0aGUgb3JkZXIgY29uZmlnIGZpbGVzIGFyZSByZWFkLiAuY3VybHJjIGlzIG5vdyAqYWx3YXlzKiByZWFkCiAgIGZpcnN0IGFuZCBiZWZvcmUgdGhlIGNvbW1hbmQgbGluZSBmbGFncy4gLUsgY29uZmlnIGZpbGVzIHRoZW4gYWN0IGFzCiAgIGFkZGl0aW9uYWwgY29uZmlnIGl0ZW1zLgogLSBVc2UgLXEgQVMgVEhFIEZJUlNUIE9QVElPTiBzcGVjaWZpZWQgdG8gcHJldmVudCAuY3VybHJjIGZyb20gYmVpbmcgcmVhZC4KIC0gWW91IGNhbiBub3cgZGlzYWJsZSBhIHByb3h5IGJ5IHVzaW5nIC14ICIiLiBVc2VmdWwgaWYgdGhlIC5jdXJscmMgZmlsZQogICBzcGVjaWZpZXMgYSBwcm94eSBhbmQgeW91IHdhbm5hIGZldGNoIHNvbWV0aGluZyB3aXRob3V0IGdvaW5nIHRocm91Z2gKICAgdGhhdC4KIC0gSSdtIHRoaW5raW5nIG9mIGRyb3BwaW5nIHRoZSAtcCBzdXBwb3J0LiBJdHMgcmVhbGx5IG5vdCB1c2VmdWwgc2luY2UgcG9ydHMKICAgY291bGQgKGFuZCBzaG91bGQ/KSBiZSBzcGVjaWZpZWQgYXMgOjxwb3J0PiBhcHBlbmRlZCBvbiB0aGUgaG9zdCBuYW1lCiAgIGluc3RlYWQsIGJvdGggaW4gVVJMcyBhbmQgdG8gcHJveHkgaG9zdCBuYW1lcy4KIC0gTWFydGluIFN0YWFlbCByZXBvcnRzIGN1cmwgLUwgYnVncyB1bmRlciBXaW5kb3dzIE5UCiAgICh0ZXN0IHdpdGggVVJMIGh0dHA6Ly9jb21lLnRvL3Njc2RlKS4gVGhpcyBidWcgaXMgbm90IHByZXNlbnQgaW4gdGhpcwogICB2ZXJzaW9uIGFueW1vcmUuCiAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSB3ZWlyZCBGVFAgVVJMIHR5cGU9IHRoaW5nLiBZb3UgY2FuIGRvd25sb2FkIGEgZmlsZQogICB1c2luZyBBU0NJSSB0cmFuc2ZlciBieSBhcHBlbmRpbmcgIjt0eXBlPUEiIHRvIHRoZSByaWdodCBvZiBpdC4gT3RoZXIKICAgYXZhaWxhYmxlIHR5cGVzIGFyZSB0eXBlPUQgZm9yIGRpci1saXN0IChOTFNUKSBhbmQgdHlwZT1JIGZvciBiaW5hcnkKICAgdHJhbnNmZXIuIEkgY2FuJ3Qgc2F5IEkndmUgZXZlciBzZWVuIGFueW9uZSB1c2UgdGhpcyBraW5kIG9mIFVSTCB0aG91Z2ghCiAgIDotKQogLSBUcm95IEVuZ2VsIHBvaW50ZWQgb3V0IGEgYnVnIGluIG15IGdldGVudigiSE9NRSIpCiAgIHVzYWdlIGZvciB3aW4zMiBzeXN0ZW1zLiBJIGludHJvZHVjZSBnZXRlbnYuYyB0byBiZXR0ZXIgY29wZSB3aXRoCiAgIHRoaXMuIE1yIEVuZ2VsIGhlbHBzIG1lIHdpdGggdGhlIGRldGFpbHMgYXJvdW5kIHRoYXQuLi4KIC0gQSBsaXR0bGUgbm90ZSB0byBteXNlbGYgYW5kIG90aGVycywgSSBzaG91bGQgbWFrZSB0aGUgd2luMzItYmluYXJ5IGJ1aWx0CiAgIHdpdGggU1NMIHN1cHBvcnQuLi4KIC0gUnlhbiBOZWxzb24gc2VudCBtZSBjb21tZW50cyBhYm91dCBidWlsZGluZyBjdXJsCiAgIHdpdGggU1NMIHVuZGVyIEZyZWVCU0QuIFNlZSB0aGUgTWFrZWZpbGUgZm9yIGRldGFpbHMuIFVzaW5nIHRoZSBjb25maWd1cmUKICAgc2NyaXB0LCBpdCBzaG91bGQgd29yayBiZXR0ZXIgYW5kIGF1dG9tYXRpY2FsbHkgbm93Li4uCiAtIENsZWFuZWQgdXAgaW4gdGhlIHBvcnQgbnVtYmVyIG1lc3MgaW4gdGhlIHNvdXJjZS4gTm8gbG9uZ2VyIHN0b3JlcyBhbmQgdXNlcwogICBwcm94eSBwb3J0IG51bWJlciBzZXBhcmF0ZSBmcm9tIG5vcm1hbCBwb3J0IG51bWJlci4KIC0gJ2NvbmZpZ3VyZScgc2NyaXB0IHdvcmtpbmcuIENvbmZpcm1lZCBjb21waWxlcyBvbjoKICAgIEhvc3QgICAgICAgICBTU0wgIENvbXBpbGVyCiAgICBTdW5PUyA1LjUgICAgbm8gICBnY2MKICAgIFN1bk9TIDUuNS4xICB5ZXMgIGdjYwogICAgU3VuT1MgNS42ICAgIG5vICAgY2MgICh3aXRoIGdjYywgaXQgaGFzIHRoZSAiZ2NjIGluY2x1ZGUgZmlsZXMiIHByb2JsZW0pCiAgICBTdW5PUyA0LjEuMyAgbm8gICBnY2MgKHdpdGhvdXQgQU5TSSBDIGhlYWRlcnMpCiAgICBTdW5PUyA0LjEuMiAgbm8gICBnY2MgKG5hdGl2ZSBjb21waWxlciBmYWlsZWQpCiAgICBMaW51eCAyLjAuMTggbm8gICBnY2MKICAgIExpbnV4IDIuMC4zMiB5ZXMgIGdjYwogICAgTGludXggMi4wLjM1IG5vICAgZ2NjICh3aXRoIGdsaWJjKQogICAgSVJJWCA2LjIgICAgIG5vICAgZ2NjIChjYyBjb21waWxlcyBnZW5lcmF0ZSBhIGZldyB3YXJuaW5ncykKICAgIElSSVggNi40ICAgICBubyAgIGNjICAoZ2VuZXJhdGVkIHdhcm5pbmdzIHRob3VnaCkKICAgIFdpbjMyICAgICAgICBubyAgIEJvcmxhbmQKICAgIE9TRjQuMAkgbm8gICA/CgogLSBPb29wcy4gVGhlIDViZXRhIChhbmQgNC4xMCkgdW5kZXIgd2luMzIgZmFpbGVkIGlmIHRoZSBIT01FIHZhcmlhYmxlIHdhc24ndAogICBzZXQuCiAtIFdoZW4gdXNpbmcgYSBwcm94eSwgY3VybCBub3cgZ3Vlc3NlcyBhbmQgdXNlcyB0aGUgcHJvdG9jb2wgcGFydCBpbiBjYXNlcwogICBsaWtlOgoJY3VybCAteCBwcm94eTo4MCB3d3cuc2l0ZS5jb20KICAgUHJveGllcyBub3JtYWxseSBnbyBudXRzIHVubGVzcyBodHRwOi8vIGlzIHByZXBlbmRlZCB0byB0aGUgaG9zdCBuYW1lLCBzbwogICBpZiBjdXJsIGlzIHVzZWQgbGlrZSB0aGlzLCBpdCBndWVzc2VzIHByb3RvY29sIGFuZCBhcHBlbmRzIHRoZSBwcm90b2NvbAogICBzdHJpbmcgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIHByb3h5LiBJdCBhbHJlYWR5IGRpZCB0aGlzIHdoZW4gdXNlZAogICB3aXRob3V0IHByb3h5LgogLSBCZXR0ZXIgcG9ydCB1c2FnZSB3aXRoIFNTTCB0aHJvdWdoIHByb3h5IG5vdy4gSWYgeW91IHNwZWNpZmllZCBhIGRpZmZlcmVudAogICBodHRwcy1wb3J0IHdoZW4gYWNjZXNzaW5nIHRocm91Z2ggYSBwcm94eSwgaXQgZGlkbid0IHVzZSB0aGF0IG51bWJlcgogICBjb3JyZWN0bHkuIEkgYWxzbyByZXdyb3RlIHRoZSBjb2RlIHRoYXQgcGFyc2VzIHRoZSBzdHVmZiByZWFkIGZyb20gdGhlCiAgIHByb3h5IHdoZW4geW91IHdhbm5hIGNvbm5lY3QgdGhyb3VnaCBpdCB3aXRoIFNTTC4KIC0gQmpvcm4gUmVlc2UgaGVscGVkIG1lIHdvcmsgYXJvdW5kIG9uZSBvZiB0aGUgY29tcGlsZXIKICAgd2FybmluZ3Mgb24gSVJJWCBuYXRpdmUgY2MgY29tcGlsZXMuCgpWZXJzaW9uIDQuMTAgKE9jdCAyNiwgMTk5OCkKIERhbmllbCBTdGVuYmVyZwogLSBKb2huIEEuIEJyaXN0b3Igc3VnZ2VzdGVkIGEgY29uZmlnIGZpbGUgc3dpdGNoLAogICBhbmQgc2luY2UgSSd2ZSBiZWVuIGhhdmluZyB0aGF0IGlkZWEga2luZCBvZiBpbiB0aGUgYmFja2dyb3VuZCBmb3IgYSBsb25nCiAgIHRpbWUgSSByZXdyb3RlIHRoZSBwYXJhbWV0ZXIgcGFyc2luZyBmdW5jdGlvbiBhIGxpdHRsZSBhbmQgbm93IEkgaW50cm9kdWNlCiAgIHRoZSAtSy8tLWNvbmZpZyBmbGFnLiBJIGFsc28gbWFkZSBjdXJsICphbHdheXMqICh1bmxlc3MgLUsgaXMgdXNlZCkgdHJ5IHRvCiAgIGxvYWQgdGhlIC5jdXJscmMgZmlsZSBmb3IgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuIFRoZSBzeW50YXggZm9yIHRoZQogICBjb25maWcgZmlsZSBpcyB0aGUgc3RhbmRhcmQgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHN0eWxlLiBEZXRhaWxzIGluICdjdXJsCiAgIC1oJyBvciB0aGUgUkVBRE1FLgogLSBJIHJlbW92ZWQgdGhlIC1rIG9wdGlvbi4gS2VlcC1hbGl2ZSBpc24ndCByZWFsbHkgYW55dGhpbmcgYW55b25lIHdvdWxkCiAgIHdhbnQgdG8gZW5hYmxlIHdpdGggY3VybCBhbnl3YXkuCiAtIE1hcnRpbiBTdGFhZWwgaGVscGVkIG1lIGFkZCB0aGUgJ2lyaXgnIHRhcmdldC4gTm93CiAgICJtYWtlIGlyaXgiIHNob3VsZCBidWlsZCBjdXJsIHN1Y2Nlc3NmdWxseSBvbiBub24tZ2NjIFNHSSBtYWNoaW5lcy4KIC0gU2luZ2xlIHN3aXRjaGVzIG5vdyB0b2dnbGUgYmVoYXZpb3Vycy4gSS5lIGlmIHlvdSB1c2UgLXYgLXYgdGhlIHNlY29uZAogICB3aWxsIHN3aXRjaCBvZmYgdGhlIHZlcmJvc2UgbW9kZSB0aGUgZmlyc3Qgb25lIGVuYWJsZWQuIFRoaXMgaXMgc28gdGhhdAogICB5b3UgY2FuIGRpc2FibGUgYSBkZWZhdWx0IHNldHRpbmcgYSAuY3VybHJjIGZpbGUgZW5hYmxlcyBldGMuCgpWZXJzaW9uIDQuOSAoT2N0IDcsIDE5OTgpCiBEYW5pZWwgU3RlbmJlcmcKIC0gTWFydGluIFN0YWFlbCBzdWdnZXN0ZWQgY3VybCB3b3VsZCBzdXBwb3J0IGNvb2tpZXMuCiAgIEkgYWRkZWQgLWIvLS1jb29raWUgdG8gZW5hYmxlIGZyZWUtdGV4dCBjb29raWUgZGF0YSB0byBiZSBwYXNzZWQuIFRoZXJlJ3MKICAgYWxzbyBhIGxpdHRsZSBibHVyYiBhYm91dCBnZW5lcmFsIGNvb2tpZSBzdHVmZiBpbiB0aGUgUkVBRE1FL2hlbHAgdGV4dC4KIC0gZG1oIDxkbWggYXQgamV0LmVzPiBzdWdnZXN0ZWQgSFRUUCByZXN1bWUgY2FwYWJpbGl0aWVzLiBBbHRob3VnaCB5b3UgY291bGQKICAgbWFudWFsbHkgZ2V0IGN1cmwgdG8gcmVzdW1lIEhUVFAgZG9jdW1lbnRzLCBJIG1hZGUgdGhlIC1jIHJlc3VtZSBmbGFnIHdvcmsKICAgZm9yIEhUVFAgdG9vICh1bmxlc3MgLXIgaXMgdXNlZCB0b28sIHdoaWNoIHdvdWxkIGJlIHZlcnkgb2RkIGFueXdheSkuCiAtIEFkZGVkIGNoZWNrbGlua3MucGwgdG8gdGhlIGFyY2hpdmUuIEl0IGlzIGEgc3RpbGwgZXhwZXJpbWVudGFsIHBlcmwgc2NyaXB0CiAgIHRoYXQgY2hlY2tzIGFsbCBsaW5rcyBvZiBhIHdlYiBwYWdlIGJ5IHVzaW5nIGN1cmwuCiAtIFJlYXJyYW5nZWQgdGhlIGFyY2hpdmUgaGllcmFyY2h5IGEgbGl0dGxlLiBCdWlsZCB0aGUgZXhlY3V0YWJsZSBpbiB0aGUKICAgc3JjLyBkaXIgZnJvbSBub3cgb24hCiAtIFZlcnNpb24gNC45IGFuZCBoZXJlYWZ0ZXIsIGlzIG5vIGxvbmdlciByZWxlYXNlZCB1bmRlciB0aGUgR1BMIGxpY2Vuc2UuCiAgIEkgaGF2ZSBub3cgdXBkYXRlZCB0aGUgTEVHQUwgZmlsZSBldGMgYW5kIG5vdyB0aGlzIGlzIHJlbGVhc2VkIHVzaW5nIHRoZQogICBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIHRvIGF2b2lkIHRoZSBwbGFndWUga25vd24gYXMgInRoZSBHUEwgdmlydXMiLiBZb3UKICAgbXVzdCBtYWtlIHRoZSBzb3VyY2UgYXZhaWxhYmxlIGlmIHlvdSBkZWNpZGUgdG8gY2hhbmdlIGFuZC9vciByZWRpc3RyaWJ1dGUKICAgY3VybCwgYnV0IGlmIHlvdSBkZWNpZGUgdG8gdXNlIGN1cmwgd2l0aGluIHNvbWV0aGluZyBlbHNlIHlvdSBkbyBub3QgbmVlZAogICB0byBvZmZlciB0aGUgd29ybGQgdGhlIHNvdXJjZSB0byB0aGF0IHRvby4KIC0gQ3VybCBkaWQgbm90IGxpa2UgSFRUUCBzZXJ2ZXJzIHRoYXQgc2VudCBubyBoZWFkZXJzIGF0IGFsbCBvbiBhIEdFVAogICByZXF1ZXN0LiAgSXQgaXMgYSB2aW9sYXRpb24gb2YgUkZDMjA2OCBidXQgYXBwZWFyYW50bHkgc29tZSBzZXJ2ZXJzIGRvCiAgIHRoYXQgYW55d2F5LiAgVGhhbmtzIHRvIEdvcmRvbiBCZWF0b24gZm9yIHRoZSByZXBvcnQhCiAtIC1MLy0tbG9jYXRpb24gd2FzIGFkZGVkIGFmdGVyIGEgc3VnZ2VzdGlvbiBmcm9tIE1hcnRpbiBTdGFhZWwuIFRoaXMgbWFrZXMKICAgY3VybCBBVFRFTVBUIHRvIGZvbGxvdyB0aGUgTG9jYXRpb246IHJlZGlyZWN0IGlmIG9uZSBpcyBwcmVzZW50IGluIHRoZSBIVFRQCiAgIGhlYWRlcnMuIElmIC1pIG9yIC1JIGlzIHVzZWQgd2l0aCB0aGlzIGZsYWcsIHlvdSB3aWxsIHNlZSBoZWFkZXJzIGZyb20gYWxsCiAgIHNpdGVzIHRoZSBMb2NhdGlvbjogcG9pbnRzIHRvLiBEbyBub3RlIHRoYXQgdGhlIGZpcnN0IHNlcnZlciBjYW4gcG9pbnQgdG8gYQogICBzZWNvbmQgdGhhdCBwb2ludHMgdG8gYSB0aGlyZCBldGMuIEl0IHNlZW1zIHRoZSBMb2NhdGlvbjogcGFyYW1ldGVyIChzYWlkCiAgIHRvIGJlIGFuIEFic29sdXRlVVJJIGluIFJGQzIwNjgpIGlzbid0IGFsd2F5cyBhYnNvbHV0ZS4uIDotLyBBbnl3YXksIEkndmUKICAgbWFkZSBjdXJsIEFUVEVNUFQgdG8gZG8gdGhlIGJlc3QgaXQgY2FuIHRvIGRlYWwgd2l0aCB0aGUgcmVhbGl0eS4KIC0gQWRkZWQgZ2V0bGlua3MucGwgdG8gdGhlIGFyY2hpdmUuIGdldGxpbmtzLnBsIHNlbGVjdGl2ZWx5IGRvd25sb2FkcwogICBmaWxlcyB0aGF0IGEgd2ViIHBhZ2UgbGlua3MgdG8uCgpWZXJzaW9uIDQuOC40CiBEYW5pZWwgU3RlbmJlcmcKIC0gQXMgSnVsaWFuIFJvbWVybyBOaWV0byByZXBvcnRlZCwgY3VybCByZXBvcnRlZCB3cm9uZyB2ZXJzaW9uIG51bWJlci4KIC0gQXMgVGVlbXUgWWxpLUVsc2lsYSBwb2ludGVkIG91dCwgdGhlIHdpbjMyIHZlcnNpb24gb2YgNC44IChhbmQgcHJvYmFibHkgYWxsCiAgIG90aGVyIHZlcnNpb25zIGZvciB3aW4zMikgZGlkbid0IHdvcmsgd2l0aCBiaW5hcnkgZmlsZXMgc2luY2UgSSdtIHRvbyB1c2VkCiAgIHRvIHRoZSBVTklYIHN0eWxlIGZvcGVuKCkgd2hlcmUgYmluYXJ5IGFuZCB0ZXh0IGRvbid0IGRpZmZlci4uLgogLSBSYWxwaCBCZWNrbWFubiBicm91Z2h0IG1lIHNvbWUgY2hhbmdlcyB0aGF0IGxldHMgY3VybCBjb21waWxlIGVycm9yIGFuZAogICB3YXJuaW5nIGZyZWUgd2l0aCAtV2FsbCAtcGVkYW50aWMgd2l0aCBnKysuIEkgYWxzbyB0b29rIHRoZSBvcHBvcnR1bml0eSB0bwogICBjbGVhbiBvZmYgc29tZSB1bnVzZWQgdmFyaWFibGVzIGFuZCBzaW1pbGFyLgogLSBSYWxwaCBCZWNrbWFubiBtYWRlIG1lIGF3YXJlIG9mIGEgcmVhbGx5IG9kZCBidWcgbm93IGNvcnJlY3RlZC4gV2hlbiBjdXJsCiAgIHJlYWQgYSBzZXQgb2YgaGVhZGVycyBmcm9tIGEgSFRUUCBzZXJ2ZXIsIGRpdmlkZWQgaW50byBtb3JlIHRoYW4gb25lIHJlYWQKICAgYW5kIHRoZSBmaXJzdCByZWFkIHNob3dlZCBhIGZ1bGwgbGluZSAqZXhhY3RseSogKGkuZSBlbmRpbmcgd2l0aCBhCiAgIG5ld2xpbmUpLCBjdXJsIGRpZCBub3QgYmVoYXZlIHdlbGwuCgpWZXJzaW9uIDQuOC4zCiBEYW5pZWwgU3RlbmJlcmcKIC0gSSB3YXMgdG9vIHF1aWNrIHRvIHJlbGVhc2UgNC44LjIgd2l0aCB0b28gbGl0dGxlIHRlc3RpbmcuIE9uZSBvZiB0aGUKICAgY2hhbmdlcyBpcyBub3cgcmV2ZXJ0ZWQgc2xpZ2h0bHkgdG8gdGhlIDQuOC4xIHdheSBzaW5jZSA0LjguMiBjb3VsZG4ndAogICB1cGxvYWQgZmlsZXMuIEkgc3RpbGwgdGhpbmsgYm90aCBwcm9ibGVtcyBjb3JyZWN0ZWQgaW4gNC44LjIgcmVtYWluCiAgIGNvcnJlY3RlZC4gIFJlcG9ydGVkIGJ5IEp1bGlhbiBSb21lcm8gTmlldG8uCgpWZXJzaW9uIDQuOC4yCiBEYW5pZWwgU3RlbmJlcmcKIC0gQmVybmhhcmQgSXNlbGJvcm4gcmVwb3J0ZWQgdHdvIEZUUCBwcm90b2NvbCBlcnJvcnMgY3VybCBkaWQuIFRoZXkncmUgbm93CiAgIGNvcnJlY3RlZC4gQm90aCBhcHBlYXJlZCB3aGVuIGdldHRpbmcgZmlsZXMgZnJvbSBhIE1TIEZUUCBzZXJ2ZXIhIDotKQoKVmVyc2lvbiA0LjguMQogRGFuaWVsIFN0ZW5iZXJnCiAtIEFkZGVkIGEgbGFzdCB1cGRhdGUgb2YgdGhlIHByb2dyZXNzIG1ldGVyIHdoZW4gdGhlIHRyYW5zZmVyIGlzIGRvbmUuIFRoZQogICBmaW5hbCBvdXRwdXQgb24gdGhlIHNjcmVlbiBkaWRuJ3QgaGF2ZSB0byBiZSB0aGUgZmluYWwgc2l6ZSB0cmFuc2ZlcmVkCiAgIHdoaWNoIG1hZGUgaXQgc29tZXRpbWVzIGxvb2sgb2RkLgogLSBUaGFua3MgdG8gRGF2aWQgTG9uZyBJIGdvdCByaWQgb2YgYSBzaWxseSBidWcgdGhhdCBoYXBwZW5lZCBpZiBhIEhUVFAtcGFnZQogICBoYWQgbm90aGluZyBidXQgaGVhZGVyLiBBcHBlYXJhbnRseSBTb2xhcmlzIGRlYWxzIHdpdGggbmVnYXRpdmUgc2l6ZXMgaW4KICAgZndyaXRlKCkgY2FsbHMgYSBsb3QgYmV0dGVyIHRoYW4gTGludXggZG9lcy4uLiA9Qi1dCgpWZXJzaW9uIDQuOAogRGFuaWVsIFN0ZW5iZXJnCiAtIENvbnRpbnVlIEZUUCBmaWxlIHRyYW5zZmVyLiAtYyBpcyB0aGUgc3dpdGNoLiBOb3RlIHRoYXQgeW91IG5lZWQgdG8KICAgc3BlY2lmeSBhIGZpbGUgbmFtZSBpZiB5b3Ugd2FubmEgcmVzdW1lIGEgZG93bmxvYWQgKHlvdSBjYW4ndCByZXN1bWUgYQogICBkb3dubG9hZCBzZW50IHRvIHN0ZG91dCkuIFJlc3VtaW5nIHVwbG9hZCBtYXkgYmUgbGltaXRlZCBieSB0aGUgc2VydmVyCiAgIHNpbmNlIGN1cmwgaXMgdGhlbiB1c2luZyB0aGUgbm9uLVJGQzk1OSBjb21tYW5kIFNJWkUgdG8gZ2V0IHRoZSBzaXplIG9mCiAgIHRoZSB0YXJnZXQgZmlsZSBiZWZvcmUgdXBsb2FkIGJlZ2lucyAodG8gZmlndXJlIG91dCB3aGljaCBvZmZzZXQgdG8KICAgdXNlKS4gVXNlIC1DIHRvIHNwZWNpZnkgdGhlIG9mZnNldCB5b3Vyc2VsZiEgLUMgaXMgaGFuZHkgaWYgeW91J3JlIGRvaW5nCiAgIHRoZSBvdXRwdXQgdG8gc29tZXRoaW5nIGVsc2UgYnV0IGEgcGxhaW4gZmlsZSBvciB3aGVuIHlvdSBqdXN0IHdhbnQgdG8gZ2V0CiAgIHRoZSBlbmQgb2YgYSBmaWxlLgogLSByZWN1cnNpdmVmdHBnZXQucGwgbm93IGZlYXR1cmVzIGEgbWF4aW11bSByZWN1cnNpdmUgbGV2ZWwgYXJndW1lbnQuCgpWZXJzaW9uIDQuNwogRGFuaWVsIFN0ZW5iZXJnCiAtIEFkZGVkIHN1cHBvcnQgdG8gYWJvcnQgYSBkb3dubG9hZCBpZiB0aGUgc3BlZWQgaXMgYmVsb3cgYSBjZXJ0YWluIGFtb3VudAogICAoc3BlZWQtbGltaXQpIGJ5dGVzIHBlciBzZWNvbmQgZm9yIGEgY2VydGFpbiAoc3BlZWQtdGltZSkgdGltZS4KIC0gV3JvdGUgYSBwZXJsIHNjcmlwdCAncmVjdXJzaXZlZnRwZ2V0LnBsJyB0byByZWN1cnNpdmVseSB1c2UgY3VybCB0byBnZXQgYQogICB3aG9sZSBmdHAgZGlyZWN0b3J5IHRyZWUuIEl0IGlzIG1lYW50IGFzIGFuIGV4YW1wbGUgb2YgaG93IGN1cmwgY2FuIGJlCiAgIHVzZWQuICBJIGFncmVlIGl0IGlzbid0IHRoZSB3aXNlc3QgdGhpbmcgdG8gZG8gdG8gbWFrZSBhIHNlcGFyYXRlIG5ldwogICBjb25uZWN0aW9uIGZvciBlYWNoIGZpbGUgYW5kIGRpcmVjdG9yeSBmb3IgdGhpcy4KClZlcnNpb24gNC42CiBEYW5pZWwgU3RlbmJlcmcKIC0gQWRkZWQgYSBmaXJzdCBhdHRlbXB0IHRvIG9wdGlvbmFsbHkgcGFyc2UgdGhlIC5uZXRyYyBmaWxlIGZvciBsb2dpbiB1c2VyCiAgIGFuZCBwYXNzd29yZC4gSWYgdXNlZCB3aXRoIGh0dHAsIGl0IGVuYWJsZXMgdXNlciBhdXRoZW50aWNhdGlvbi4gLW4gaXMKICAgdGhlIG5ldyBzd2l0Y2guCiAtIFJlbW92ZWQgdGhlIGV4dHJhIG5ld2xpbmVzIG9uIHRoZSBkZWZhdWx0IHVzZXItYWdlbnQgc3RyaW5nLgogLSBDb3JyZWN0ZWQgdGhlIG1pc3NpbmcgZnRwIHVwbG9hZCBlcnJvciBtZXNzYWdlcyB3aGVuIGl0IGZhaWxlZCB3aXRob3V0IHRoZQogICB2ZXJib3NlIGZsYWcgc2V0LiBHYXJ5IFcuIFN3ZWFyaW5nZW4gZm91bmQgaXQuCiAtIE5vdyB1c2luZyBhbGFybSgpIHRvIGVuYWJsZSBzZWNvbmQtcHJlY2lzaW9uIHRpbWVvdXQgZXZlbiBvbiB0aGUgbmFtZQogICByZXNvbHZpbmcvY29ubmVjdGluZyBwaGFzZS4gVGhlIHRpbWVvdXQgaXMgYWx0aG91Z2ggcmVzZXQgYWZ0ZXIgdGhhdCBmaXJzdAogICBzZXF1ZW5jZS4gKFRoaXMgc2hvdWxkIGJlIGNvcnJlY3RlZC4pIEdhcnkgVy4gU3dlYXJpbmdlbiByZXBvcnRlZC4KIC0gTm93IHNwZWxscyAiVW5rbm93biIgcHJvcGVybHksIGFzIGluICJVbmtub3duIG9wdGlvbiAneiciLi4uIDotKQogLSBBZGRlZCBidWcgcmVwb3J0IGVtYWlsIGFkZHJlc3MgaW4gdGhlIFJFQURNRS4KIC0gQWRkZWQgYSAiY3VycmVudCBzcGVlZCIgZmllbGQgdG8gdGhlIHByb2dyZXNzIG1ldGVyLiBJdCBzaG93cyB0aGUgYXZlcmFnZQogICBzcGVlZCB0aGUgbGFzdCA1IHNlY29uZHMuIFRoZSBvdGhlciBzcGVlZCBmaWVsZCBzaG93cyB0aGUgYXZlcmFnZSBzcGVlZCBvZgogICB0aGUgZW50aXJlIHRyYW5zZmVyIHNvIGZhci4KClZlcnNpb24gNC41LjEKIExpbmFzIFZlcHN0YXMKIC0gU1NMIHRocm91Z2ggcHJveHkgZml4CiAtIEFkZGVkIC1BIHRvIGFsbG93IFVzZXItQWdlbnQ6IGNoYW5nZXMKCiBEYW5pZWwgU3RlbmJlcmcgCiAtIE1hZGUgdGhlIC1BIHdvcmsgd2hlbiBTU0wtdGhyb3VnaC1wcm94eS4KClZlcnNpb24gNC41CiBMaW5hcyBWZXBzdGFzCiAtIE1vcmUgU1NMIGNvcnJlY3Rpb25zCiAtIEkndmUgYWRkZWQgYSBwb3J0IHRvIEFJWC4KIC0gcnVubmluZyBTU0wgdGhyb3VnaCBhIHByb3h5IGNhdXNlcyBhIGNodW5rIG9mIGNvZGUgdG8gYmUgZXhlY3V0cmVkIHR3aWNlLgogICBvbmUgb2YgdGhvc2UgYmxvY2tzIG5lZWRzIHRvIGJlIGRlbGV0ZWQuCgogRGFuaWVsIFN0ZW5iZXJnCiAtIE1hZGUgLWkgYW5kIC1JIHdvcmsgYWdhaW4KClZlcnNpb24gNC40CiBMaW5hcyBWZXBzdGFzCiAtIC14IGNhbiBub3cgYWxzbyBzcGVjaWZ5IHByb3h5cG9ydCB3aGVuIHVzZWQgYXMgaW4gJ3Byb3h5aG9zdDpwcm94eXBvcnQnCiAtIFNTTCBmaXhlcwoKVmVyc2lvbiA0LjMKIERhbmllbCBTdGVuYmVyZwogLSBBZGp1c3RlZCB0byBjb21waWxlIHVuZGVyIHdpbjMyIChWaXN1YWxDKysgNSkuIFRoZSAtUCBzd2l0Y2ggZG9lcyBub3QKICAgc3VwcG9ydCBuZXR3b3JrIGludGVyZmFjZSBuYW1lcyBpbiB3aW4zMi4gSSBjb3VsZG4ndCBmaWd1cmUgb3V0IGhvdyEKClZlcnNpb24gNC4yCiBMaW5hcyBWZXBzdGFzIC8gU2FtcG8gS2VsbG9tYWtpCiAtIEFkZGVkIFNTTCAvIFNTTGVheSBzdXBwb3J0IChodHRwczovLykKIC0gQWRkZWQgdGhlIC1UIHVzYWdlIGZvciBIVFRQIFBPU1QuCgogRGFuaWVsIFN0ZW5iZXJnCiAtIEJ1Z2ZpeGVkIHRoZSBTU0wgaW1wbGVtZW50YXRpb24uCiAtIE1hZGUgLVAgYSBsb3QgYmV0dGVyIHRvIHVzZSBvdGhlciBJUCBhZGRyZXNzZXMuIEl0IG5vdyBhY2NlcHRzIGEgZm9sbG93aW5nCiAgIHBhcmFtZXRlciB0aGF0IGNhbiBiZSBlaXRoZXIKICAgICAgICBpbnRlcmZhY2UgLSBpLmUgImV0aDAiIHRvIHNwZWNpZnkgd2hpY2ggaW50ZXJmYWNlJ3MgSVAgYWRkcmVzcyB5b3UKICAgICAgICAgICAgICAgICAgICB3YW50IHRvIHVzZQogICAgICAgIElQIGFkZHJlc3MgLSBpLmUgIjE5Mi4xNjguMTAuMSIgdG8gc3BlY2lmeSBleGFjdCBJUCBudW1iZXIKICAgICAgICBob3N0IG5hbWUgLSBpLmUgIm15Lmhvc3QuZG9tYWluIiB0byBzcGVjaWZ5IG1hY2hpbmUKICAgICAgICAiLSIgICAgICAgLSAoYW55IHNpbmdsZS1sZXR0ZXIgc3RyaW5nKSB0byBtYWtlIGl0IHBpY2sgdGhlIG1hY2hpbmUncwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQKIC0gVGhlIE1ha2VmaWxlIGlzIG5vdyByZWFkeSB0byBjb21waWxlIGZvciBzb2xhcmlzLCBzdW5vczQgYW5kIGxpbnV4IHJpZ2h0CiAgIG91dCBvZiB0aGUgYm94LgogLSBCZXR0ZXIgZ2VuZXJhdGVkIHZlcnNpb24gc3RyaW5nIHNlZW4gd2l0aCAnY3VybCAtVicKClZlcnNpb24gNC4xCiBEYW5pZWwgU3RlbmJlcmcKIC0gVGhlIElQIG51bWJlciByZXR1cm5lZCBieSB0aGUgZnRwIHNlcnZlciBhcyBhIHJlcGx5IHRvIFBBU1YgZG9lcyBubyBsb25nZXIKICAgaGF2ZSB0byBETlMgcmVzb2x2ZS4gSW4gZmFjdCwgbm8gSVAtbnVtYmVyLW9ubHkgYWRkcmVzc2VzIGhhdmUgdG8gYW55bW9yZS4KIC0gQmluZHMgYmV0dGVyIHRvIGF2YWlsYWJsZSBwb3J0IHdoZW4gLVAgaXMgdXNlZC4KIC0gTm93IExJU1RzIC4vIGluc3RlYWQgb2YgLyB3aGVuIHVzZWQgYXMgaW4gZnRwOi8vZnRwLmZ1bmV0LmZpLy4gVGhlIHJlYXNvbgogICBmb3IgdGhpcyBpcyB0aGF0IGV4YWN0bHkgdGhhdCBzaXRlLCBmdHAuZnVuZXQuZmksIGRvZXMgbm90IGFsbG93IExJU1QgLwogICB3aGlsZSBMSVNUIC4vIGlzIGZpbmUuIEFueSBvYmplY3Rpb25zPwoKVmVyc2lvbiA0ICgxOTk4LTAzLTIwKQogRGFuaWVsIFN0ZW5iZXJnCiAtIEkgdG9vayBhbm90aGVyIGh1Z2Ugc3RlcCBhbmQgY2hhbmdlZCBib3RoIHZlcnNpb24gbnVtYmVyIGFuZCBwcm9qZWN0IG5hbWUhCiAgIFRoZSByZWFzb24gZm9yIHRoZSBuZXcgbmFtZSBpcyB0aGF0IHRoZXJlIGFyZSBqdXN0IG9uZSB0b28gbWFueSBwcm9ncmFtcwogICBuYW1lZCB1cmxnZXQgYWxyZWFkeSBhbmQgdGhpcyBwcm9ncmFtIGFscmVhZHkgY2FuIGEgbG90IG1vcmUgdGhhbiBtZXJlbHkKICAgZ2V0dGluZyBVUkxzLCBhbmQgdGhlIHJlYXNvbiBmb3IgdGhlIHZlcnNpb24gbnVtYmVyIGlzIHRoYXQgSSBkaWQgYWRkIHRoZQogICBwcmV0dHkgYmlnIGNoYW5nZSBpbiAtUCBhbmQgc2luY2UgSSBjaGFuZ2VkIG5hbWUgSSB3YW50ZWQgdG8gc3RhcnQgd2l0aAogICBzb21ldGhpbmcgZnJlc2ghCiAtIFRoZSAtLXN0eWxlIGZsYWdzIGFyZSB3b3JraW5nIGJldHRlciBub3cuCiAtIExpc3RpbmcgZGlyZWN0b3JpZXMgd2l0aCBGVFAgb2Z0ZW4gcmVwb3J0ZWQgdGhhdCB0aGUgZmlsZSB0cmFuc2ZlciB3YXMKICAgaW5jb21wbGV0ZS4gV3JvbmcgYXNzdW1wdGlvbnMgd2VyZSB0b28gY29tbW9uIGZvciBkaXJlY3Rvcmllcywgd2h5IG5vCiAgIHNpemUgd2lsbCBiZSBhdHRlbXB0ZWQgdG8gZ2V0IGNvbXBhcmVkIG9uIHRoZW0gZnJvbSBub3cgb24uCiAtIEltcGxlbWVudGVkIHRoZSAtUCBmbGFnIHRoYXQgbGV0J3MgdGhlIGZ0cCBjb250cm9sIGlzc3VlIGEgUE9SVCBjb21tYW5kCiAgIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIFBBU1YuCiAtIC1hIGZvciBhcHBlbmRpbmcgRlRQIHVwbG9hZHMgd29ya3MuCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKClZlcnNpb24gMy4xMiAoMTQgTWFyY2ggMTk5OCkKIERhbmllbCBTdGVuYmVyZwogLSBFbmQtb2YtaGVhZGVyIHRyYWNraW5nIHN0aWxsIGxhY2tlZCBzdXBwb3J0IGZvciBcclxuIG9yIGp1c3QgXG4gYXQgdGhlCiAgIGVuZCBvZiB0aGUgbGFzdCBoZWFkZXIgbGluZS4KIFNlcmdpbyBCYXJyZXNpCiAtIEFkZGVkIFBST1hZIGF1dGhlbnRpY2F0aW9uLgogUmFmYWVsIFNhZ3VsYQogLSBGaXhlZCBzb21lIGxpdHRsZSBidWdzLgoKVmVyc2lvbiAzLjExCiBEYW5pZWwgU3RlbmJlcmcKIC0gVGhlIGhlYWRlciBwYXJzaW5nIHdhcyBzdGlsbCBub3QgY29ycmVjdCBzaW5jZSB0aGUgMy4yIG1vZGlmaWNhdGlvbi4uLgoKVmVyc2lvbiAzLjEwCiBEYW5pZWwgU3RlbmJlcmcKIC0gMy43IGFuZCAzLjkgd2VyZSBzaW11bHRhbmVvdXNseSBkZXZlbG9wZWQgYW5kIG1lcmdlZCBpbnRvIHRoaXMgdmVyc2lvbi4KIC0gRlRQIHVwbG9hZCBkaWQgbm90IHdvcmsgY29ycmVjdGx5IHNpbmNlIDMuMi4KClZlcnNpb24gMy45CiBSYWZhZWwgU2FndWxhCiAtIEFkZGVkIHRoZSAiLWUgPHVybD4gLyAtLXJlZmVyZXIgPHVybD4iIG9wdGlvbiB3aGVyZSB3ZSBjYW4gc3BlY2lmeQogICB0aGUgcmVmZXJlciBwYWdlLiBPYnZpb3VzbHksIHRoaXMgaXMgbmVjZXNzYXJ5IG9ubHkgdG8gZm9vbCB0aGUKICAgc2VydmVyLCBidXQuLi4KClZlcnNpb24gMy43CiBEYW5pZWwgU3RlbmJlcmcKIC0gTm93IGNoZWNrcyB0aGUgbGFzdCBlcnJvciBjb2RlIHNlbnQgZnJvbSB0aGUgZnRwIHNlcnZlciBhZnRlciBhIGZpbGUgaGFzCiAgIGJlZW4gcmVjZWl2ZWQgb3IgdXBsb2FkZWQuIFdhc24ndCBkb25lIHByZXZpb3VzbHkuCiAtIFdoZW4gJ3VybGdldCA8aG9zdD4nIGlzIHVzZWQgd2l0aG91dCBhICdwcm90b2NvbDovLycgZmlyc3QgaW4gdGhlIGhvc3QgcGFydCwKICAgaXQgbm93IGNoZWNrcyBmb3IgaG9zdCBuYW1lcyBzdGFydGluZyB3aXRoIGZ0cCBvciBnb3BoZXIgYW5kIGlmIGl0IGRvZXMsCiAgIGl0IHVzZXMgdGhhdCBwcm90b2NvbCBieSBkZWZhdWx0IGluc3RlYWQgb2YgaHR0cC4KClZlcnNpb24gMy42CiBEYW5pZWwgU3RlbmJlcmcKIC0gU2lsbHkgbWlzdGFrZSBtYWRlIHRoZSBQT1NUIGJ1Zy4gVGhpcyBoYXMgbm93IGFsc28gYmVlbiB0ZXN0ZWQgdG8gd29yayB3aXRoCiAgIHByb3h5LgoKVmVyc2lvbiAzLjUKIERhbmllbCBTdGVuYmVyZwogLSBIaWdobHkgaW5zcGlyZWQgYnkgUmFmYWVsIFNhZ3VsYSdzIGNoYW5nZXMgdG8gdGhlIDMuMSB0aGF0IGFkZGVkIGFuIGFsbW9zdAogICBmdW5jdGlvbmFsIFBPU1QsIEkgYXBwbGllZCBoaXMgY2hhbmdlcyBpbnRvIHRoaXMgdmVyc2lvbiBhbmQgbWFkZSB0aGVtIHdvcmsuCiAgIChJdCBzZWVtcyBQT1NUIHJlcXVpcmVzIHRoZSBDb250ZW50LVR5cGUgYW5kIENvbnRlbnQtTGVuZ3RoIGhlYWRlcnMuKSBJdCBpcwogICBub3cgdXNhYmxlIHdpdGggdGhlIC1kIHN3aXRjaC4KClZlcnNpb24gMy4zIC0gMy40CiBQYXNzZWQgdG8gYXZvaWQgY29uZnVzaW9ucwoKVmVyc2lvbiAzLjIKIERhbmllbCBTdGVuYmVyZwogLSBNYWpvciByZXdyaXRlIG9mIHR3byBjcnVjaWFsIHBhcnRzIG9mIHRoaXMgY29kZTogdXBsb2FkIGFuZCBkb3dubG9hZC4KICAgVGhleSBhcmUgYm90aCBub3cgdXNpbmcgYSBzZWxlY3QoKSBzd2l0Y2gsIHRoYXQgYWxsb3dzIG11Y2ggYmV0dGVyCiAgIHByb2dyZXNzIG1ldGVyIGFuZCB0aW1lIGNvbnRyb2wuIAogLSBhbGFybSgpIHVzYWdlIHJlbW92ZWQgY29tcGxldGVseQogLSBGVFAgZ2V0IGNhbiBub3cgbGlzdCBkaXJlY3RvcnkgY29udGVudHMgaWYgdGhlIHBhdGggZW5kcyB3aXRoIGEgc2xhc2ggJy8nLgogICBVcmxnZXQgb24gYSBmdHAtcGF0aCB0aGF0IGRvZXNuJ3QgZW5kIHdpdGggYSBzbGFzaCBtZWFucyB1cmxnZXQgd2lsbAogICBhdHRlbXB0IGdldHRpbmcgaXQgYXMgYSBmaWxlIG5hbWUuCiAtIEZUUCBkaXJlY3RvcnkgdmlldyBzdXBwb3J0cyAtbCBmb3IgImxpc3Qtb25seSIgd2hpY2ggbGlzdHMgdGhlIGZpbGUgbmFtZXMKICAgb25seS4KIC0gQWxsIG9wZXJhdGlvbnMgc3VwcG9ydCAtbSBmb3IgbWF4IHRpbWUgdXNhZ2UgaW4gc2Vjb25kcyBhbGxvd2VkLgogLSBGVFAgdXBsb2FkIG5vdyBhbGxvd3MgdGhlIHNpemUgb2YgdGhlIHVwbG9hZGVkIGZpbGUgdG8gYmUgcHJvdmlkZWQsIGFuZAogICB0aHVzIGl0IGNhbiBiZXR0ZXIgY2hlY2sgaXQgYWN0dWFsbHkgdXBsb2FkZWQgdGhlIHdob2xlIGZpbGUuIEl0IGFsc28KICAgbWFrZXMgdGhlIHByb2dyZXNzIG1ldGVyIGZvciB1cGxvYWRzIG11Y2ggYmV0dGVyIQogLSBNYWRlIHRoZSBwYXJhbWV0ZXIgcGFyc2luZyBmYWlsIGluIGNhc2VzIGxpa2UgJ3VybGdldCAtciA5MDAnIHdoaWNoCiAgIHByZXZpb3VzbHkgdHJpZWQgdG8gY29ubmVjdCB0byB0aGUgaG9zdCBuYW1lZCAnOTAwJy4KClZlcnNpb24gMy4xCiBLamVsbCBFcmljc29uCiAtIFBvaW50ZWQgb3V0IGhvdyB0byBjb3JyZWN0IHRoZSAzIHdhcm5pbmdzIGluIHdpbjMyLWNvbXBpbGVzLgoKIERhbmllbCBTdGVuYmVyZwogLSBSZW1vdmVkIGFsbCBjYWxscyB0byBleGl0KCkuCiAtIE1hZGUgdGhlIHNob3J0IGhlbHAgdGV4dCBnZXQgd3JpdHRlbiB0byBzdGRvdXQgaW5zdGVhZCBvZiBzdGRlcnIuCiAtIE1hZGUgdGhpcyBmaWxlIGluc3RlYWQgb2Yga2VlcGluZyB0aGVzZSBjb21tZW50cyBpbiB0aGUgc291cmNlLgogLSBNYWRlIHR3byBjYWxsYmFjayBob29rcywgdGhhdCBlbmFibGUgZXh0ZXJuYWwgcHJvZ3JhbXMgdG8gdXNlIHVybGdldCgpCiAgIGVhc2llciBhbmQgdG8gZ3JhYiB0aGUgb3V0cHV0L29mZmVyIHRoZSBpbnB1dCBlYXNpZXIuCiAtIEl0IGlzIGV2aWRlbnQgdGhhdCBXaW4zMi1jb21waWxlcyBhcmUgcGFpbmZ1bC4gSSB3YXRjaGVkIHRoZSBvdXRwdXQgZnJvbQogICB0aGUgQm9ybGFuZCBDKysgdjUgYW5kIGl0IHdhcyBhd2Z1bC4gSnVzdCBpZ25vcmUgYWxsIHRob3NlIHdhcm5pbmdzLgoKVmVyc2lvbiAzLjAKIERhbmllbCBTdGVuYmVyZwogLSBBZGRlZCBGVFAgdXBsb2FkIGNhcGFiaWxpdGllcy4gVGhlIG5hbWUgdXJsZ2V0IGdldHMgYSBiaXQgc2lsbHkgbm93CiAgIHdoZW4gd2UgY2FuIHB1dCB0b28uLi4gPSkKIC0gUmVzdHJ1Y3R1cmVkIHRoZSBzb3VyY2UgcXVpdGUgYSBsb3QuCiAgIENoYW5nZWQgdGhlIHVybGdldCgpIGludGVyZmFjZS4gVGhpcyB3YXksIHdlIHdpbGwgc3Vydml2ZSBjaGFuZ2VzIG11Y2gKICAgYmV0dGVyLiBOZXcgZmVhdHVyZXMgY2FuIGNvbWUgYW5kIG9sZCBjYW4gYmUgcmVtb3ZlZCB3aXRob3V0IHVzIG5lZWRpbmcKICAgdG8gY2hhbmdlIHRoZSBpbnRlcmZhY2UuIEkndmUgd3JpdHRlbiBhIHNtYWxsIGV4cGxhbmF0aW9uIGluIHVybGdldC5oCiAgIHRoYXQgZXhwbGFpbnMgaXQuCiAtIE5ldyBmbGFncyBpbmNsdWRlIC10LCAtVCwgLU8gYW5kIC1oLiBUaGUgLWggdGV4dCBpcyBnZW5lcmF0ZWQgYnkgdGhlIG5ldwogICBta2hlbHAgc2NyaXB0LgoKVmVyc2lvbiAyLjkKIFJlbWNvIHZhbiBIb29mZgogLSBBZGRlZCBhIGZpeCB0byBtYWtlIGl0IGNvbXBpbGUgc21vb3RobHkgb24gQW1pZ2EgdXNpbmcgdGhlIFNBUy9DCiAgIGNvbXBpbGVyLgogIAogRGFuaWVsIFN0ZW5iZXJnCiAtIEJlbGlldmUgaXQgb3Igbm90LCBidXQgdGhlIFNUVVBJRCBOb3ZlbGwgd2ViIHNlcnZlciBzZWVtcyB0byByZXF1aXJlCiAgIHRoYXQgdGhlIEhvc3Q6IGtleXdvcmQgaXMgdXNlZCwgc28gd2VsbCBJIHVzZSBpdCBhbmQgSSAocmUtaW50cm9kdWNlKSB0aGUKICAgdXJsZ2V0IFVzZXItQWdlbnQ6LiBJIHN0aWxsIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGlzIEhvc3Q6IHVzYWdlIHdvcmtzIHdpdGgKICAgcHJveGllcy4uLiAnSG9zdDonIGlzIHJlcXVpcmVkIGZvciBIVFRQLzEuMSBHRVQgYWNjb3JkaW5nIHRvIFJGQzIwNjguCgpWZXJzaW9uIDIuOAogUmFmYWVsIFNhZ3VsYQogLSBzb21lIGxpdHRsZSBtb2RpZmljYXRpb25zCgpWZXJzaW9uIDIuNwogRGFuaWVsIFN0ZW5iZXJnCiAtIFJlbW92ZWQgdGhlIC1sIG9wdGlvbiBhbmQgaW50cm9kdWNlZCB0aGUgLWYgb3B0aW9uIGluc3RlYWQuIE5vdyBJJ2xsCiAgIHJld3JpdGUgdGhlIGZvcm1lciAtbCBrbHVkZ2UgaW4gYW4gZXh0ZXJuYWwgc2NyaXB0IHRoYXQnbGwgdXNlIHVybGdldCB0bwogICBmZXRjaCBtdWx0aXBhcnQgZmlsZXMgbGlrZSB0aGF0LgogLSAnLWYnIGlzIGludHJvZHVjZWQsIGl0IG1lYW5zIEZhaWwgd2l0aG91dCBvdXRwdXQgaW4gY2FzZSBvZiBIVFRQIHNlcnZlcgogICBlcnJvcnMgKHJldHVybiBjb2RlID49MzAwKS4KIC0gQWRkZWQgc3VwcG9ydCBmb3IgLXIsIHJhbmdlcy4gU3BlY2lmeSB3aGljaCBwYXJ0IG9mIGEgZG9jdW1lbnQgeW91IAogICB3YW50LCBhbmQgb25seSB0aGF0IHBhcnQgaXMgcmV0dXJuZWQuIE9ubHkgd2l0aCBIVFRQLzEuMS1zZXJ2ZXJzLgogLSBTcGxpdCB1cCB0aGUgc291cmNlIGluIDMgcGFydHMuIE5vdyBhbGwgcHVyZSBVUkwgZnVuY3Rpb25zIGFyZSBpbgogICB1cmxnZXQuYyBhbmQgc3R1ZmYgdGhhdCBkZWFscyB3aXRoIHRoZSBzdGFuZC1hbG9uZSBwcm9ncmFtIGlzIGluIG1haW4uYy4KIC0gSSB0b29rIGEgZmV3IG1pbnV0ZXMgYW5kIHdyb3RlIGFuIGVtYnJ5byBvZiBhIFJFQURNRSBmaWxlIHRvIGV4cGxhaW4KICAgYSBmZXcgdGhpbmdzLgoKVmVyc2lvbiAyLjYKIERhbmllbCBTdGVuYmVyZwogLSBNYWRlIHRoZSAtbCAobG9vcCkgdGhpbmcgdXNlIHRoZSBuZXcgQ09ORl9GQUlMT05FUlJPUiB3aGljaCBtYWtlcwogICB1cmxnZXQoKSByZXR1cm4gZXJyb3IgY29kZSBpZiBub24tc3VjY2Vzc2Z1bC4gSXQgYWxzbyB3b24ndCBvdXRwdXQgYW55dGhpbmcKICAgdGhlbi4gTm93IGZpbmFsbHkgcmVtb3ZlZCB0aGUgSFRUUCAxLjAgYW5kIGVycm9yIDQwNCBkZXBlbmRlbmNpZXMuCiAtIEFkZGVkIC1JIHdoaWNoIHVzZXMgdGhlIEhFQUQgcmVxdWVzdCB0byBnZXQgdGhlIGhlYWRlciBvbmx5IGZyb20gYQogICBodHRwLXNlcnZlci4KClZlcnNpb24gMi41CiBSYWZhZWwgU2FndWxhCiAtIE1hZGUgdGhlIHByb2dyZXNzIG1ldGVyIHVzZSBISEg6TU06U1MgaW5zdGVhZCBvZiBvbmx5IHNlY29uZHMuCgpWZXJzaW9uIDIuNAogRGFuaWVsIFN0ZW5iZXJnCiAtIEFkZGVkIHByb2dyZXNzIG1ldGVyLiBJdCBhcHBlYXJzIHdoZW4gZG93bmxvYWRpbmcgPiBCVUZGRVIgU0laRSBhbmQKICAgbXV0ZSBpcyBub3Qgc2VsZWN0ZWQuIEkgZm91bmQgb3V0IHRoYXQgd2hlbiBkb3dubG9hZGluZyBsYXJnZSBmaWxlcyBmcm9tCiAgIHJlYWxseSByZWFsbHkgc2xvdyBzaXRlcywgaXQgaXMgZGVzaXJhYmxlIHRvIGtub3cgdGhlIHN0YXR1cyBvZiB0aGUKICAgZG93bmxvYWQuIERvIG5vdGUgdGhhdCBzb21lIGRvd25sb2FkcyBhcmUgZG9uZSB1bmF3YXJpbmcgb2YgdGhlIHNpemUsIHdoaWNoCiAgIG1ha2VzIHRoZSBwcm9ncmVzcyBtZXRlciBsZXNzIHRocmlsbGluZyA7KSBJZiB0aGUgb3V0cHV0IGlzIHNlbnQgdG8gYSB0dHksCiAgIHRoZSBwcm9ncmVzcyBtZXRlciBpcyBzaHV0IG9mZi4KIC0gSW5jcmVhc2VkIGJ1ZmZlciBzaXplIHVzZWQgZm9yIHJlYWRpbmcuCiAtIEFkZGVkIGxlbmd0aCBjaGVja3MgaW4gdGhlIHVzZXIrcGFzc3dkIHBhcnNpbmcuCiAtIE1hZGUgaXQgZ3JvayB1c2VyK3Bhc3N3ZCBmb3IgSFRUUCBmZXRjaGVzLiBUaGUgdHJpY2sgaXMgdG8gYmFzZTY0CiAgIGVuY29kZSB0aGUgdXNlcitwYXNzd2QgYW5kIHNlbmQgYW4gZXh0cmEgaGVhZGVyIGxpbmUuIFJlYWQgY2hhcHRlciAxMS4xIGluCiAgIFJGQzIwNjggZm9yIGRldGFpbHMuIEkgYWRkZWQgaXQgdG8gYmUgdXNlZCBqdXN0IGxpa2UgdGhlIGZ0cCBvbmUuICBUbyBnZXQgYQogICBodHRwIGRvY3VtZW50IGZyb20gYSBwbGFjZSB0aGF0IHJlcXVpcmVzIHVzZXIgYW5kIHBhc3N3b3JkLCB1c2UgYW4gVVJMCiAgIGxpa2U6CgogICAgICAgIGh0dHA6Ly91c2VyOnBhc3N3ZEB3d3cuc2l0ZS50by5sZWFjaC9kb2MuaHRtbAoKICAgSSBhbHNvIGFkZGVkIHRoZSAtdSBmbGFnLCBzaW5jZSBXSEVOIFVTSU5HIEEgUFJPWFkgWU9VIENBTidUIFNQRUNJRlkgVEhFCiAgIFVTRVIgQU5EIFBBU1NXT1JEIFdJVEggSFRUUCBMSUtFIFRIQVQuIFRoZSAtdSBmbGFnIHdvcmtzIGZvciBmdHAgdG9vLCBidXQKICAgbm90IGlmIHVzZWQgd2l0aCBwcm94eS4gVG8gZG8gdGhlIHNhbWUgYXMgdGhlIGFib3ZlIG9uZSwgeW91IGNhbiBpbnZva2U6CgogICAgICAgIHVybGdldCAtdSB1c2VyOnBhc3N3ZCBodHRwOi8vd3d3LnNpdGUudG8ubGVhY2gvZG9jLmh0bWwKClZlcnNpb24gMi4zCiBSYWZhZWwgU2FndWxhCiAtIEFkZGVkICItbyIgb3B0aW9uIChvdXRwdXQgZmlsZSkKIC0gQWRkZWQgVVJHX0hUVFBfTk9UX0ZPVU5EIHJldHVybiBjb2RlLgogICAoRGFuaWVsJ3Mgbm90ZTopCiAgIFBlcmhhcHMgd2Ugc2hvdWxkIGRldGVjdCBhbGwga2luZHMgb2YgZXJyb3JzIGFuZCBpbnN0ZWFkIG9mIHdyaXRpbmcgdGhhdAogICBjdXN0b20gc3RyaW5nIGZvciB0aGUgcGFydGljdWxhciA0MDQtZXJyb3IsIHVzZSB0aGUgZXJyb3IgdGV4dCB3ZSBhY3R1YWxseQogICBnZXQgZnJvbSB0aGUgc2VydmVyLiBTZWUgZnVydGhlciBkZXRhaWxzIGluIFJGQzIwNjggKEhUVFAgMS4xCiAgIGRlZmluaXRpb24pLiBUaGUgY3VycmVudCB3YXkgYWxzbyByZWxpZXMgb24gYSBIVFRQLzEuMCByZXBseSwgd2hpY2ggbmV3ZXIKICAgc2VydmVycyBtaWdodCBub3QgZG8uCiAtIExvb3BpbmcgbW9kZSAoIi1sIiBvcHRpb24pLiBJdCdzIGVhc2llciB0byBnZXQgdmFyaW91cyBzcGxpdCBmaWxlcy4KICAgKERhbmllbCdzIG5vdGU6KQogICBVc2UgaXQgbGlrZSAndXJsZ2V0IC1sIDEgaHR0cDovL2Zyb20udGhpcy5zaXRlL2ZpbGUlZC5odG1sJywgd2hpY2ggd2lsbAogICBtYWtlIHVybGdldCB0byBhdHRlbXB0IHRvIGZldGNoIGFsbCBmaWxlcyBuYW1lZCBmaWxlMS5odG1sLCBmaWxlMi5odG1sIGV0YwogICB1bnRpbCBubyBtb3JlIGZpbGVzIGFyZSBmb3VuZC4gVGhpcyBpcyBvbmx5IGEgbW9kaWZpY2F0aW9uIG9mIHRoZQogICBTVEFORF9BTE9ORSBwYXJ0LCBub3RoaW5nIGluIHRoZSB1cmxnZXQoKSBmdW5jdGlvbiB3YXMgbW9kZmlmaWVkIGZvciB0aGlzLgogRGFuaWVsIFN0ZW5iZXJnCiAtIENoYW5nZWQgdGhlIC1oIHRvIGJlIC1pIGluc3RlYWQuIC1oIHNob3VsZCBiZSBwcmVzZXJ2ZWQgdG8gaGVscCB1c2UuCiAtIEJqb3JuIFJlZXNlIGluZGljYXRlZCB0aGF0IEJvcmxhbmQgX21pZ2h0XyB1c2UgJ19XSU4zMicgaW5zdGVhZCBvZiB0aGUKICAgVkMrKyBXSU4zMiBkZWZpbmUgYW5kIHRoZXJlZm9yZSBJIGFkZGVkIGEgbGl0dGxlIGZpeCBmb3IgdGhhdC4KClZlcnNpb24gMi4yCiBKb2hhbiBBbmRlcnNzb24KIC0gVGhlIHVybGdldCBmdW5jdGlvbiBkaWRuJ3Qgc2V0IHRoZSBwYXRoIHRvIHVybCB3aGVuIHVzaW5nIHByb3h5LgogLSBGaXhlZCBidWcgd2l0aCBJTUMgcHJveHkuIE5vdyB1c2luZyAoYWxtb3N0KSBjb21wbGV0ZSBHRVQgY29tbWFuZC4KICAKIERhbmllbCBTdGVuYmVyZwogLSBNYWRlIGl0IGNvbXBpbGUgb24gU29sYXJpcy4gSGFkIHRvIHJlb3JnYW5pemUgdGhlIGluY2x1ZGVzIGEgYml0LgogICAoc28gV2luMzIsIExpbnV4LCBTdW5PUyA0IGFuZCBTb2xhcmlzIDIgY29tcGlsZSBmaW5lLikKIC0gTWFkZSBKb2hhbidzIGtlZXBhbGl2ZSBrZXl3b3JkIG9wdGlvbmFsIHdpdGggdGhlIC1rIGZsYWcgKHNpbmNlIGl0CiAgIG1ha2VzIGEgbG90IG9mIHVybGdldHMgdGFrZSBhIGxvdCBsb25nZXIgdGltZSkuCiAtIE1hZGUgYSAnLWgnIHN3aXRjaCBpbiBjYXNlIHlvdSB3YW50IHRoZSBIVFRQLWhlYWRlciBpbiB0aGUgb3V0cHV0LgoKVmVyc2lvbiAyLjEKIERhbmllbCBTdGVuYmVyZyBhbmQgS2plbGwgRXJpY3NvbgogLSBXaW4zMi1jb21waWxhYmxlCiAtIE5vIG1vcmUgZ2xvYmFsIHZhcmlhYmxlcwogLSBNdXRlIG9wdGlvbiAobm8gb3V0cHV0IGF0IGFsbCB0byBzdGRlcnIpCiAtIEZ1bGwgcmFuZ2Ugb2YgcmV0dXJuIGNvZGVzIGZyb20gdXJsZ2V0KCksIHdoaWNoIGlzIG5vdyB3cml0dGVuIHRvIGJlIGEKICAgZnVuY3Rpb24gZm9yIGVhc3ktdG8tdXNlIGluIFtvdGhlcl0gcHJvZ3JhbXMuCiAtIERlZmluZSBTVEFORF9BTE9ORSB0byBjb21waWxlIHRoZSBzdGFuZCBhbG9uZSB1cmxnZXQgcHJvZ3JhbQogLSBOb3cgY29tcGlsZXMgd2l0aCBnY2Mgb3B0aW9ucyAtYW5zaSAtV2FsbCAtcGVkYW50aWMgOykKClZlcnNpb24gMi4wCiAtIEludHJvZHVjaW5nIGZ0cCBHRVQgc3VwcG9ydC4gVGhlIEZUUCBVUkwgdHlwZSBpcyByZWNvZ25pemVkIGFuZCB1c2VkLgogLSBSZW5hbWVkIHRoZSBwcm9qZWN0IHRvICd1cmxnZXQnLgogLSBTdXBwb3J0cyB0aGUgdXNlcitwYXNzd2QgaW4gdGhlIEZUUCBVUkwgKG90aGVyd2lzZSBpdCB0cmllcyBhbm9ueW1vdXMKICAgbG9naW4gd2l0aCBhIHdlaXJkIGVtYWlsIGFkZHJlc3MgYXMgcGFzc3dvcmQpLgoKVmVyc2lvbiAxLjUKIERhbmllbCBTdGVuYmVyZwogLSBUaGUgc2tpcF9oZWFkZXIoKSBjcmFwIG1lc3NlZCBpdCB1cCBiaWctdGltZS4gQnkgc2ltcGx5IHJlbW92aW5nIHRoYXQKICAgb25lIHdlIGNhbiBhbGwgb2YgYSBzdWRkZW4gZG93bmxvYWQgYW55dGhpbmcgOykKIC0gTm8gbG9uZ2VyIHJlcXVpcmVzIGEgdHJhaWxpbmcgc2xhc2ggb24gdGhlIFVSTHMuCiAtIElmIHRoZSBnaXZlbiBVUkwgaXNuJ3QgcHJlZml4ZWQgd2l0aCAnaHR0cDovLycsIEhUVFAgaXMgYXNzdW1lZCBhbmQKICAgZ2l2ZW4gYSB0cnkhCiAtICd2b2lkIG1haW4oKScgaXMgaGlzdG9yeS4KClZlcnNpb24gMS40CiBEYW5pZWwgU3RlbmJlcmcKIC0gVGhlIGdvcGhlciBzb3VyY2UgdXNlZCB0aGUgcHBhdGggdmFyaWFibGUgaW5zdGVhZCBvZiBwYXRoIHdoaWNoIGNvdWxkCiAgIGxlYWQgdG8gZGlzYXN0ZXIuCgpWZXJzaW9uIDEuMwogRGFuaWVsIFN0ZW5iZXJnCiAtIFdlbGwsIEkgYWRkZWQgYSBsYW1lIHRleHQgYWJvdXQgdGhlIHRpbWUgaXQgdG9vayB0byBnZXQgdGhlIGRhdGEuIEkgYWxzbwogICBmb3VnaHQgYWdhaW5zdCBKb2hhbiB0byBwcmV2ZW50IGhpcyAtZiBvcHRpb24gKHRvIHNwZWNpZnkgYSBmaWxlIG5hbWUKICAgdGhhdCBzaG91bGQgYmUgd3JpdHRlbiBpbnN0ZWFkIG9mIHN0ZG91dCkhID0pCiAtIE1hZGUgaXQgd3JpdGUgJ2Nvbm5lY3Rpb24gcmVmdXNlZCcgZm9yIHRoYXQgcGFydGljdWxhciBjb25uZWN0KCkKICAgcHJvYmxlbS4KIC0gUmVudW1iZXJlZCB0aGUgdmVyc2lvbi4gTGV0J3Mgbm90IG1ha2Ugc2lsbHkgMS4wLlggdmVyc2lvbnMsIHRoaXMgaXMKICAgYSBwbGFpbiAxLjMgaW5zdGVhZC4KClZlcnNpb24gMS4yCiBKb2hhbiBBbmRlcnNzb24KIC0gRGlzY292ZXJlZCBhbmQgZml4ZWQgdGhlIHByb2JsZW0gd2l0aCBnZXR0aW5nIGJpbmFyeSBmaWxlcy4gcHV0cygpIGlzCiAgIG5vdyByZXBsYWNlZCB3aXRoIGZ3cml0ZSgpLiAoRGFuaWVsJ3Mgbm90ZTogdGhpcyBhbHNvIGZpeGVkIHRoZSBidWZmZXIKICAgb3ZlcndyaXRlIHByb2JsZW0gSSBmb3VuZCBpbiB0aGUgcHJldmlvdXMgdmVyc2lvbi4pCgogUmFmYWVsIFNhZ3VsYQogLSBMZXQgIi1wIiBiZWZvcmUgIi14Ii4KCiBEYW5pZWwgU3RlbmJlcmcKIC0gQnVnZml4ZWQgdGhlIHByb3h5IHVzYWdlLiBJdCBzaG91bGQgKk5PVCogdXNlIG5vciBzdHJpcCB0aGUgcG9ydCBudW1iZXIKICAgZnJvbSB0aGUgVVJMIGJ1dCBzaW1wbHkgcGFzcyB0aGF0IGluZm9ybWF0aW9uIHRvIHRoZSBwcm94eS4gVGhpcyBhbHNvCiAgIG1hZGUgdGhlIHVzZXIvcGFzc3dvcmQgZmllbGRzIHBvc3NpYmxlIHRvIHVzZSBpbiBwcm94eSBbZnRwLV0gVVJMcy4KICAgKGxpa2UgaW4gZnRwOi8vdXNlcjpwYXNzd29yZEBmdHAubXkuc2l0ZTo4MDIxL1JFQURNRSkKCiBKb2hhbiBBbmRlcnNzb24KIC0gSW1wbGVtZW50ZWQgSFRUUCBwcm94eSBzdXBwb3J0LgogLSBSZWNlaXZlIGJ5dGUgY291bnRlciBhZGRlZC4KCiBCam9ybiBSZWVzZQogLSBJbXBsZW1lbnRlZCBVUkxzIChhbmQgc2tpcHBlZCB0aGUgb2xkIHN5bnRheCkuCiAtIE91dHB1dCBpcyB3cml0dGVuIHRvIHN0ZG91dCwgc28gdG8gYWNoaWV2ZSB0aGUgYWJvdmUgZXhhbXBsZSwgZG86CiAgIGh0dHBnZXQgaHR0cDovLzE0My41NC4xMC42L2luZm9fbG9nby5naWYgPiB0ZXN0LmdpZgoKVmVyc2lvbiAxLjEKIERhbmllbCBTdGVuYmVyZwogLSBBZGp1c3RlZCBpdCBzbGlnaHRseSB0byBhY2NlcHQgbmFtZWQgaG9zdHMgb24gdGhlIGNvbW1hbmQgbGluZS4gV2UKICAgd291bGRuJ3Qgd2FubmEgdXNlIElQIG51bWJlcnMgZm9yIHRoZSByZXN0IG9mIG91ciBsaWZlcywgd291bGQgd2U/CgpWZXJzaW9uIDEuMAogIFJhZmFlbCBTYWd1bGEKICAtIFdyb3RlIHRoZSBpbml0aWFsIGh0dHBnZXQsIHdoaWNoIHN0YXJ0ZWQgYWxsIHRoaXMhCg==