TGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwMDAgRmFtaWx5IG9mIEFkYXB0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKTm92ZW1iZXIgMTUsIDIwMDUKCgpDb250ZW50cwo9PT09PT09PQoKLSBJbiBUaGlzIFJlbGVhc2UKLSBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKLSBDb21tYW5kIExpbmUgUGFyYW1ldGVycwotIFNwZWVkIGFuZCBEdXBsZXggQ29uZmlndXJhdGlvbgotIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKLSBLbm93biBJc3N1ZXMKLSBTdXBwb3J0CgoKSW4gVGhpcyBSZWxlYXNlCj09PT09PT09PT09PT09PQoKVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwMDAgRmFtaWx5Cm9mIEFkYXB0ZXJzLiAgVGhpcyBkcml2ZXIgaW5jbHVkZXMgc3VwcG9ydCBmb3IgSXRhbml1bShSKTItYmFzZWQgc3lzdGVtcy4KCkZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uCnN1cHBsaWVkIHdpdGggeW91ciBJbnRlbCBQUk8vMTAwMCBhZGFwdGVyLiBBbGwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGxpc3RlZAphcHBseSB0byB1c2Ugd2l0aCBMaW51eC4KClRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIG5vdyBhdmFpbGFibGUgaW4gc3VwcG9ydGVkIGtlcm5lbHM6CiAtIE5hdGl2ZSBWTEFOcwogLSBDaGFubmVsIEJvbmRpbmcgKHRlYW1pbmcpCiAtIFNOTVAKCkNoYW5uZWwgQm9uZGluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZToKL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAoKVGhlIGRyaXZlciBpbmZvcm1hdGlvbiBwcmV2aW91c2x5IGRpc3BsYXllZCBpbiB0aGUgL3Byb2MgZmlsZXN5c3RlbSBpcyBub3QKc3VwcG9ydGVkIGluIHRoaXMgcmVsZWFzZS4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGV0aHRvb2wgKHZlcnNpb24gMS42Cm9yIGxhdGVyKSwgbHNwY2ksIGFuZCBpZmNvbmZpZyB0byBvYnRhaW4gdGhlIHNhbWUgaW5mb3JtYXRpb24uCgpJbnN0cnVjdGlvbnMgb24gdXBkYXRpbmcgZXRodG9vbCBjYW4gYmUgZm91bmQgaW4gdGhlIHNlY3Rpb24gIkFkZGl0aW9uYWwKQ29uZmlndXJhdGlvbnMiIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuCgoKSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCj09PT09PT09PT09PT09PT09PT09PT09PQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgJgpEcml2ZXIgSUQgR3VpZGUgYXQ6CgogICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9hZGFwdGVyL3BybzEwMC8yMTM5Ny5odG0KCkZvciB0aGUgbGF0ZXN0IEludGVsIG5ldHdvcmsgZHJpdmVycyBmb3IgTGludXgsIHJlZmVyIHRvIHRoZSBmb2xsb3dpbmcKd2Vic2l0ZS4gSW4gdGhlIHNlYXJjaCBmaWVsZCwgZW50ZXIgeW91ciBhZGFwdGVyIG5hbWUgb3IgdHlwZSwgb3IgdXNlIHRoZQpuZXR3b3JraW5nIGxpbmsgb24gdGhlIGxlZnQgdG8gc2VhcmNoIGZvciB5b3VyIGFkYXB0ZXI6CgogICAgaHR0cDovL2Rvd25sb2FkZmluZGVyLmludGVsLmNvbS9zY3JpcHRzLWRmL3N1cHBvcnRfaW50ZWwuYXNwCgoKQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMgPT09PT09PT09PT09PT09PT09PT09PT0KCklmIHRoZSBkcml2ZXIgaXMgYnVpbHQgYXMgYSBtb2R1bGUsIHRoZSAgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMKYXJlIHVzZWQgYnkgZW50ZXJpbmcgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggdGhlIG1vZHByb2JlIG9yIGluc21vZApjb21tYW5kIHVzaW5nIHRoaXMgc3ludGF4OgoKICAgICBtb2Rwcm9iZSBlMTAwMCBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dCgogICAgIGluc21vZCBlMTAwMCBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dCgpGb3IgZXhhbXBsZSwgd2l0aCB0d28gUFJPLzEwMDAgUENJIGFkYXB0ZXJzLCBlbnRlcmluZzoKCiAgICAgaW5zbW9kIGUxMDAwIFR4RGVzY3JpcHRvcnM9ODAsMTI4Cgpsb2FkcyB0aGUgZTEwMDAgZHJpdmVyIHdpdGggODAgVFggZGVzY3JpcHRvcnMgZm9yIHRoZSBmaXJzdCBhZGFwdGVyIGFuZCAxMjgKVFggZGVzY3JpcHRvcnMgZm9yIHRoZSBzZWNvbmQgYWRhcHRlci4KClRoZSBkZWZhdWx0IHZhbHVlIGZvciBlYWNoIHBhcmFtZXRlciBpcyBnZW5lcmFsbHkgdGhlIHJlY29tbWVuZGVkIHNldHRpbmcsCnVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCgpOT1RFUzogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBdXRvTmVnLCBEdXBsZXgsIGFuZCBTcGVlZAogICAgICAgIHBhcmFtZXRlcnMsIHNlZSB0aGUgIlNwZWVkIGFuZCBEdXBsZXggQ29uZmlndXJhdGlvbiIgc2VjdGlvbiBpbgogICAgICAgIHRoaXMgZG9jdW1lbnQuCgogICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUsCiAgICAgICAgUnhJbnREZWxheSwgVHhJbnREZWxheSwgUnhBYnNJbnREZWxheSwgYW5kIFR4QWJzSW50RGVsYXkKICAgICAgICBwYXJhbWV0ZXJzLCBzZWUgdGhlIGFwcGxpY2F0aW9uIG5vdGUgYXQ6CiAgICAgICAgaHR0cDovL3d3dy5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvYXBwbG5vdHMvYXA0NTAuaHRtCgogICAgICAgIEEgZGVzY3JpcHRvciBkZXNjcmliZXMgYSBkYXRhIGJ1ZmZlciBhbmQgYXR0cmlidXRlcyByZWxhdGVkIHRvCiAgICAgICAgdGhlIGRhdGEgYnVmZmVyLiBUaGlzIGluZm9ybWF0aW9uIGlzIGFjY2Vzc2VkIGJ5IHRoZSBoYXJkd2FyZS4KCgpBdXRvTmVnCi0tLS0tLS0KKFN1cHBvcnRlZCBvbmx5IG9uIGFkYXB0ZXJzIHdpdGggY29wcGVyIGNvbm5lY3Rpb25zKQpWYWxpZCBSYW5nZTogICAweDAxLTB4MEYsIDB4MjAtMHgyRgpEZWZhdWx0IFZhbHVlOiAweDJGCgpUaGlzIHBhcmFtZXRlciBpcyBhIGJpdCBtYXNrIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHNwZWVkIGFuZCBkdXBsZXgKc2V0dGluZ3MgdGhlIGJvYXJkIGFkdmVydGlzZXMuIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCwgdGhlIFNwZWVkCmFuZCBEdXBsZXggcGFyYW1ldGVycyBtdXN0IG5vdCBiZSBzcGVjaWZpZWQuCgpOT1RFOiAgUmVmZXIgdG8gdGhlIFNwZWVkIGFuZCBEdXBsZXggc2VjdGlvbiBvZiB0aGlzIHJlYWRtZSBmb3IgbW9yZQogICAgICAgaW5mb3JtYXRpb24gb24gdGhlIEF1dG9OZWcgcGFyYW1ldGVyLgoKCkR1cGxleAotLS0tLS0KKFN1cHBvcnRlZCBvbmx5IG9uIGFkYXB0ZXJzIHdpdGggY29wcGVyIGNvbm5lY3Rpb25zKQpWYWxpZCBSYW5nZTogICAwLTIgKDA9YXV0by1uZWdvdGlhdGUsIDE9aGFsZiwgMj1mdWxsKQpEZWZhdWx0IFZhbHVlOiAwCgpEZWZpbmVzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggZGF0YSBpcyBhbGxvd2VkIHRvIGZsb3cuIENhbiBiZSBlaXRoZXIKb25lIG9yIHR3by1kaXJlY3Rpb25hbC4gSWYgYm90aCBEdXBsZXggYW5kIHRoZSBsaW5rIHBhcnRuZXIgYXJlIHNldCB0bwphdXRvLW5lZ290aWF0ZSwgdGhlIGJvYXJkIGF1dG8tZGV0ZWN0cyB0aGUgY29ycmVjdCBkdXBsZXguIElmIHRoZSBsaW5rCnBhcnRuZXIgaXMgZm9yY2VkIChlaXRoZXIgZnVsbCBvciBoYWxmKSwgRHVwbGV4IGRlZmF1bHRzIHRvIGhhbGYtZHVwbGV4LgoKCkZsb3dDb250cm9sCi0tLS0tLS0tLS0KVmFsaWQgUmFuZ2U6ICAgMC0zICgwPW5vbmUsIDE9Unggb25seSwgMj1UeCBvbmx5LCAzPVJ4JlR4KQpEZWZhdWx0IFZhbHVlOiBSZWFkcyBmbG93IGNvbnRyb2wgc2V0dGluZ3MgZnJvbSB0aGUgRUVQUk9NCgpUaGlzIHBhcmFtZXRlciBjb250cm9scyB0aGUgYXV0b21hdGljIGdlbmVyYXRpb24oVHgpIGFuZCByZXNwb25zZShSeCkKdG8gRXRoZXJuZXQgUEFVU0UgZnJhbWVzLgoKCkludGVycnVwdFRocm90dGxlUmF0ZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KKG5vdCBzdXBwb3J0ZWQgb24gSW50ZWwgODI1NDIsIDgyNTQzIG9yIDgyNTQ0LWJhc2VkIGFkYXB0ZXJzKQpWYWxpZCBSYW5nZTogICAxMDAtMTAwMDAwICgwPW9mZiwgMT1keW5hbWljKQpEZWZhdWx0IFZhbHVlOiA4MDAwCgpUaGlzIHZhbHVlIHJlcHJlc2VudHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGludGVycnVwdHMgcGVyIHNlY29uZCB0aGUKY29udHJvbGxlciBnZW5lcmF0ZXMuIEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBhbm90aGVyIHNldHRpbmcgdXNlZCBpbgppbnRlcnJ1cHQgbW9kZXJhdGlvbi4gRHluYW1pYyBtb2RlIHVzZXMgYSBoZXVyaXN0aWMgYWxnb3JpdGhtIHRvIGFkanVzdApJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdHJhZmZpYyBsb2FkLgoKTk9URTogIEludGVycnVwdFRocm90dGxlUmF0ZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIFR4QWJzSW50RGVsYXkgYW5kCiAgICAgICBSeEFic0ludERlbGF5IHBhcmFtZXRlcnMuIEluIG90aGVyIHdvcmRzLCBtaW5pbWl6aW5nIHRoZSByZWNlaXZlCiAgICAgICBhbmQvb3IgdHJhbnNtaXQgYWJzb2x1dGUgZGVsYXlzIGRvZXMgbm90IGZvcmNlIHRoZSBjb250cm9sbGVyIHRvCiAgICAgICBnZW5lcmF0ZSBtb3JlIGludGVycnVwdHMgdGhhbiB3aGF0IHRoZSBJbnRlcnJ1cHQgVGhyb3R0bGUgUmF0ZQogICAgICAgYWxsb3dzLgoKQ0FVVElPTjogIElmIHlvdSBhcmUgdXNpbmcgdGhlIEludGVsIFBSTy8xMDAwIENUIE5ldHdvcmsgQ29ubmVjdGlvbgogICAgICAgICAgKGNvbnRyb2xsZXIgODI1NDcpLCBzZXR0aW5nIEludGVycnVwdFRocm90dGxlUmF0ZSB0byBhIHZhbHVlCiAgICAgICAgICBncmVhdGVyIHRoYW4gNzUsMDAwLCBtYXkgaGFuZyAoc3RvcCB0cmFuc21pdHRpbmcpIGFkYXB0ZXJzCiAgICAgICAgICB1bmRlciBjZXJ0YWluIG5ldHdvcmsgY29uZGl0aW9ucy4gSWYgdGhpcyBvY2N1cnMgYSBORVRERVYKICAgICAgICAgIFdBVENIRE9HIG1lc3NhZ2UgaXMgbG9nZ2VkIGluIHRoZSBzeXN0ZW0gZXZlbnQgbG9nLiBJbgogICAgICAgICAgYWRkaXRpb24sIHRoZSBjb250cm9sbGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQsIHJlc3RvcmluZwogICAgICAgICAgdGhlIG5ldHdvcmsgY29ubmVjdGlvbi4gVG8gZWxpbWluYXRlIHRoZSBwb3RlbnRpYWwgZm9yIHRoZQogICAgICAgICAgaGFuZywgZW5zdXJlIHRoYXQgSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIHNldCBubyBncmVhdGVyCiAgICAgICAgICB0aGFuIDc1LDAwMCBhbmQgaXMgbm90IHNldCB0byAwLgoKTk9URTogIFdoZW4gZTEwMDAgaXMgbG9hZGVkIHdpdGggZGVmYXVsdCBzZXR0aW5ncyBhbmQgbXVsdGlwbGUgYWRhcHRlcnMKICAgICAgIGFyZSBpbiB1c2Ugc2ltdWx0YW5lb3VzbHksIHRoZSBDUFUgdXRpbGl6YXRpb24gbWF5IGluY3JlYXNlIG5vbi0KICAgICAgIGxpbmVhcmx5LiBJbiBvcmRlciB0byBsaW1pdCB0aGUgQ1BVIHV0aWxpemF0aW9uIHdpdGhvdXQgaW1wYWN0aW5nCiAgICAgICB0aGUgb3ZlcmFsbCB0aHJvdWdocHV0LCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UgbG9hZCB0aGUgZHJpdmVyIGFzCiAgICAgICBmb2xsb3dzOgoKICAgICAgICAgICBpbnNtb2QgZTEwMDAubyBJbnRlcnJ1cHRUaHJvdHRsZVJhdGU9MzAwMCwzMDAwLDMwMDAKCiAgICAgICBUaGlzIHNldHMgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB0byAzMDAwIGludGVycnVwdHMvc2VjIGZvcgogICAgICAgdGhlIGZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBpbnN0YW5jZXMgb2YgdGhlIGRyaXZlci4gVGhlIHJhbmdlCiAgICAgICBvZiAyMDAwIHRvIDMwMDAgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHdvcmtzIG9uIGEgbWFqb3JpdHkgb2YKICAgICAgIHN5c3RlbXMgYW5kIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IHRoZSBvcHRpbWFsIHZhbHVlIHdpbGwKICAgICAgIGJlIHBsYXRmb3JtLXNwZWNpZmljLiBJZiBDUFUgdXRpbGl6YXRpb24gaXMgbm90IGEgY29uY2VybiwgdXNlCiAgICAgICBSWF9QT0xMSU5HIChOQVBJKSBhbmQgZGVmYXVsdCBkcml2ZXIgc2V0dGluZ3MuCgoKUnhEZXNjcmlwdG9ycwotLS0tLS0tLS0tLS0tClZhbGlkIFJhbmdlOiAgIDgwLTI1NiBmb3IgODI1NDIgYW5kIDgyNTQzLWJhc2VkIGFkYXB0ZXJzCiAgICAgICAgICAgICAgIDgwLTQwOTYgZm9yIGFsbCBvdGhlciBzdXBwb3J0ZWQgYWRhcHRlcnMKRGVmYXVsdCBWYWx1ZTogMjU2CgpUaGlzIHZhbHVlIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGJ5IHRoZQpkcml2ZXIuIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhbGxvd3MgdGhlIGRyaXZlciB0byBidWZmZXIgbW9yZSBpbmNvbWluZwpwYWNrZXRzLiAgRWFjaCBkZXNjcmlwdG9yIGlzIDE2IGJ5dGVzLiAgQSByZWNlaXZlIGJ1ZmZlciBpcyBhbHNvCmFsbG9jYXRlZCBmb3IgZWFjaCBkZXNjcmlwdG9yIGFuZCBpcyAyMDQ4LgoKClJ4SW50RGVsYXkKLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogICAwLTY1NTM1ICgwPW9mZikKRGVmYXVsdCBWYWx1ZTogMAoKVGhpcyB2YWx1ZSBkZWxheXMgdGhlIGdlbmVyYXRpb24gb2YgcmVjZWl2ZSBpbnRlcnJ1cHRzIGluIHVuaXRzIG9mIDEuMDI0Cm1pY3Jvc2Vjb25kcy4gIFJlY2VpdmUgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUgZWZmaWNpZW5jeSBpZgpwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWRkcwpleHRyYSBsYXRlbmN5IHRvIGZyYW1lIHJlY2VwdGlvbiBhbmQgY2FuIGVuZCB1cCBkZWNyZWFzaW5nIHRoZSB0aHJvdWdocHV0Cm9mIFRDUCB0cmFmZmljLiBJZiB0aGUgc3lzdGVtIGlzIHJlcG9ydGluZyBkcm9wcGVkIHJlY2VpdmVzLCB0aGlzIHZhbHVlCm1heSBiZSBzZXQgdG9vIGhpZ2gsIGNhdXNpbmcgdGhlIGRyaXZlciB0byBydW4gb3V0IG9mIGF2YWlsYWJsZSByZWNlaXZlCmRlc2NyaXB0b3JzLgoKQ0FVVElPTjogIFdoZW4gc2V0dGluZyBSeEludERlbGF5IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiAwLCBhZGFwdGVycyBtYXkKICAgICAgICAgIGhhbmcgKHN0b3AgdHJhbnNtaXR0aW5nKSB1bmRlciBjZXJ0YWluIG5ldHdvcmsgY29uZGl0aW9ucy4gSWYKICAgICAgICAgIHRoaXMgb2NjdXJzIGEgTkVUREVWIFdBVENIRE9HIG1lc3NhZ2UgaXMgbG9nZ2VkIGluIHRoZSBzeXN0ZW0KICAgICAgICAgIGV2ZW50IGxvZy4gSW4gYWRkaXRpb24sIHRoZSBjb250cm9sbGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQsCiAgICAgICAgICByZXN0b3JpbmcgdGhlIG5ldHdvcmsgY29ubmVjdGlvbi4gVG8gZWxpbWluYXRlIHRoZSBwb3RlbnRpYWwKICAgICAgICAgIGZvciB0aGUgaGFuZyBlbnN1cmUgdGhhdCBSeEludERlbGF5IGlzIHNldCB0byAwLgoKClJ4QWJzSW50RGVsYXkKLS0tLS0tLS0tLS0tLQooVGhpcyBwYXJhbWV0ZXIgaXMgc3VwcG9ydGVkIG9ubHkgb24gODI1NDAsIDgyNTQ1IGFuZCBsYXRlciBhZGFwdGVycy4pClZhbGlkIFJhbmdlOiAgIDAtNjU1MzUgKDA9b2ZmKQpEZWZhdWx0IFZhbHVlOiAxMjgKClRoaXMgdmFsdWUsIGluIHVuaXRzIG9mIDEuMDI0IG1pY3Jvc2Vjb25kcywgbGltaXRzIHRoZSBkZWxheSBpbiB3aGljaCBhCnJlY2VpdmUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gVXNlZnVsIG9ubHkgaWYgUnhJbnREZWxheSBpcyBub24temVybywKdGhpcyB2YWx1ZSBlbnN1cmVzIHRoYXQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhZnRlciB0aGUgaW5pdGlhbApwYWNrZXQgaXMgcmVjZWl2ZWQgd2l0aGluIHRoZSBzZXQgYW1vdW50IG9mIHRpbWUuICBQcm9wZXIgdHVuaW5nLAphbG9uZyB3aXRoIFJ4SW50RGVsYXksIG1heSBpbXByb3ZlIHRyYWZmaWMgdGhyb3VnaHB1dCBpbiBzcGVjaWZpYyBuZXR3b3JrCmNvbmRpdGlvbnMuCgoKU3BlZWQKLS0tLS0KKFRoaXMgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZCBvbmx5IG9uIGFkYXB0ZXJzIHdpdGggY29wcGVyIGNvbm5lY3Rpb25zLikKVmFsaWQgU2V0dGluZ3M6IDAsIDEwLCAxMDAsIDEwMDAKRGVmYXVsdCBWYWx1ZTogIDAgKGF1dG8tbmVnb3RpYXRlIGF0IGFsbCBzdXBwb3J0ZWQgc3BlZWRzKQoKU3BlZWQgZm9yY2VzIHRoZSBsaW5lIHNwZWVkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gbWVnYWJpdHMgcGVyIHNlY29uZAooTWJwcykuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgc2V0IHRvIDAgYW5kIHRoZSBsaW5rCnBhcnRuZXIgaXMgc2V0IHRvIGF1dG8tbmVnb3RpYXRlLCB0aGUgYm9hcmQgd2lsbCBhdXRvLWRldGVjdCB0aGUgY29ycmVjdApzcGVlZC4gRHVwbGV4IHNob3VsZCBhbHNvIGJlIHNldCB3aGVuIFNwZWVkIGlzIHNldCB0byBlaXRoZXIgMTAgb3IgMTAwLgoKClR4RGVzY3JpcHRvcnMKLS0tLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogICA4MC0yNTYgZm9yIDgyNTQyIGFuZCA4MjU0My1iYXNlZCBhZGFwdGVycwogICAgICAgICAgICAgICA4MC00MDk2IGZvciBhbGwgb3RoZXIgc3VwcG9ydGVkIGFkYXB0ZXJzCkRlZmF1bHQgVmFsdWU6IDI1NgoKVGhpcyB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0IGRlc2NyaXB0b3JzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLgpJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gcXVldWUgbW9yZSB0cmFuc21pdHMuIEVhY2gKZGVzY3JpcHRvciBpcyAxNiBieXRlcy4KCk5PVEU6ICBEZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBzeXN0ZW0gcmVzb3VyY2VzLCB0aGUgcmVxdWVzdCBmb3IgYQogICAgICAgaGlnaGVyIG51bWJlciBvZiB0cmFuc21pdCBkZXNjcmlwdG9ycyBtYXkgYmUgZGVuaWVkLiAgSW4gdGhpcyBjYXNlLAogICAgICAgdXNlIGEgbG93ZXIgbnVtYmVyLgoKClR4SW50RGVsYXkKLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogICAwLTY1NTM1ICgwPW9mZikKRGVmYXVsdCBWYWx1ZTogNjQKClRoaXMgdmFsdWUgZGVsYXlzIHRoZSBnZW5lcmF0aW9uIG9mIHRyYW5zbWl0IGludGVycnVwdHMgaW4gdW5pdHMgb2YKMS4wMjQgbWljcm9zZWNvbmRzLiBUcmFuc21pdCBpbnRlcnJ1cHQgcmVkdWN0aW9uIGNhbiBpbXByb3ZlIENQVQplZmZpY2llbmN5IGlmIHByb3Blcmx5IHR1bmVkIGZvciBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMuIElmIHRoZQpzeXN0ZW0gaXMgcmVwb3J0aW5nIGRyb3BwZWQgdHJhbnNtaXRzLCB0aGlzIHZhbHVlIG1heSBiZSBzZXQgdG9vIGhpZ2gKY2F1c2luZyB0aGUgZHJpdmVyIHRvIHJ1biBvdXQgb2YgYXZhaWxhYmxlIHRyYW5zbWl0IGRlc2NyaXB0b3JzLgoKClR4QWJzSW50RGVsYXkKLS0tLS0tLS0tLS0tLQooVGhpcyBwYXJhbWV0ZXIgaXMgc3VwcG9ydGVkIG9ubHkgb24gODI1NDAsIDgyNTQ1IGFuZCBsYXRlciBhZGFwdGVycy4pClZhbGlkIFJhbmdlOiAgIDAtNjU1MzUgKDA9b2ZmKQpEZWZhdWx0IFZhbHVlOiA2NAoKVGhpcyB2YWx1ZSwgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzLCBsaW1pdHMgdGhlIGRlbGF5IGluIHdoaWNoIGEKdHJhbnNtaXQgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gVXNlZnVsIG9ubHkgaWYgVHhJbnREZWxheSBpcyBub24temVybywKdGhpcyB2YWx1ZSBlbnN1cmVzIHRoYXQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhZnRlciB0aGUgaW5pdGlhbApwYWNrZXQgaXMgc2VudCBvbiB0aGUgd2lyZSB3aXRoaW4gdGhlIHNldCBhbW91bnQgb2YgdGltZS4gIFByb3BlciB0dW5pbmcsCmFsb25nIHdpdGggVHhJbnREZWxheSwgbWF5IGltcHJvdmUgdHJhZmZpYyB0aHJvdWdocHV0IGluIHNwZWNpZmljCm5ldHdvcmsgY29uZGl0aW9ucy4KClhzdW1SWAotLS0tLS0KKFRoaXMgcGFyYW1ldGVyIGlzIE5PVCBzdXBwb3J0ZWQgb24gdGhlIDgyNTQyLWJhc2VkIGFkYXB0ZXIuKQpWYWxpZCBSYW5nZTogICAwLTEKRGVmYXVsdCBWYWx1ZTogMQoKQSB2YWx1ZSBvZiAnMScgaW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciBzaG91bGQgZW5hYmxlIElQIGNoZWNrc3VtCm9mZmxvYWQgZm9yIHJlY2VpdmVkIHBhY2tldHMgKGJvdGggVURQIGFuZCBUQ1ApIHRvIHRoZSBhZGFwdGVyIGhhcmR3YXJlLgoKClNwZWVkIGFuZCBEdXBsZXggQ29uZmlndXJhdGlvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRocmVlIGtleXdvcmRzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHNwZWVkIGFuZCBkdXBsZXggY29uZmlndXJhdGlvbi4KVGhlc2Uga2V5d29yZHMgYXJlIFNwZWVkLCBEdXBsZXgsIGFuZCBBdXRvTmVnLgoKSWYgdGhlIGJvYXJkIHVzZXMgYSBmaWJlciBpbnRlcmZhY2UsIHRoZXNlIGtleXdvcmRzIGFyZSBpZ25vcmVkLCBhbmQgdGhlCmZpYmVyIGludGVyZmFjZSBib2FyZCBvbmx5IGxpbmtzIGF0IDEwMDAgTWJwcyBmdWxsLWR1cGxleC4KCkZvciBjb3BwZXItYmFzZWQgYm9hcmRzLCB0aGUga2V5d29yZHMgaW50ZXJhY3QgYXMgZm9sbG93czoKCiAgVGhlIGRlZmF1bHQgb3BlcmF0aW9uIGlzIGF1dG8tbmVnb3RpYXRlLiBUaGUgYm9hcmQgYWR2ZXJ0aXNlcyBhbGwKICBzdXBwb3J0ZWQgc3BlZWQgYW5kIGR1cGxleCBjb21iaW5hdGlvbnMsIGFuZCBpdCBsaW5rcyBhdCB0aGUgaGlnaGVzdAogIGNvbW1vbiBzcGVlZCBhbmQgZHVwbGV4IG1vZGUgSUYgdGhlIGxpbmsgcGFydG5lciBpcyBzZXQgdG8gYXV0by1uZWdvdGlhdGUuCgogIElmIFNwZWVkID0gMTAwMCwgbGltaXRlZCBhdXRvLW5lZ290aWF0aW9uIGlzIGVuYWJsZWQgYW5kIG9ubHkgMTAwMCBNYnBzCiAgaXMgYWR2ZXJ0aXNlZCAoVGhlIDEwMDBCYXNlVCBzcGVjIHJlcXVpcmVzIGF1dG8tbmVnb3RpYXRpb24uKQoKICBJZiBTcGVlZCA9IDEwIG9yIDEwMCwgdGhlbiBib3RoIFNwZWVkIGFuZCBEdXBsZXggc2hvdWxkIGJlIHNldC4gQXV0by0KICBuZWdvdGlhdGlvbiBpcyBkaXNhYmxlZCwgYW5kIHRoZSBBdXRvTmVnIHBhcmFtZXRlciBpcyBpZ25vcmVkLiBQYXJ0bmVyCiAgU0hPVUxEIGFsc28gYmUgZm9yY2VkLgoKVGhlIEF1dG9OZWcgcGFyYW1ldGVyIGlzIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wgaXMgcmVxdWlyZWQgb3ZlciB0aGUKYXV0by1uZWdvdGlhdGlvbiBwcm9jZXNzLiAgSXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB5b3Ugd2lzaCB0byBjb250cm9sIHdoaWNoCnNwZWVkIGFuZCBkdXBsZXggY29tYmluYXRpb25zIGFyZSBhZHZlcnRpc2VkIGR1cmluZyB0aGUgYXV0by1uZWdvdGlhdGlvbgpwcm9jZXNzLgoKVGhlIHBhcmFtZXRlciBtYXkgYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBhIGRlY2ltYWwgb3IgaGV4aWRlY2ltYWwgdmFsdWUgYXMKZGV0ZXJtaW5lZCBieSB0aGUgYml0bWFwIGJlbG93LgoKQml0IHBvc2l0aW9uICAgNyAgICAgIDYgICAgICA1ICAgICAgIDQgICAgICAgMyAgICAgIDIgICAgICAxICAgICAgIDAKRGVjaW1hbCBWYWx1ZSAgMTI4ICAgIDY0ICAgICAzMiAgICAgIDE2ICAgICAgOCAgICAgIDQgICAgICAyICAgICAgIDEKSGV4IHZhbHVlICAgICAgODAgICAgIDQwICAgICAyMCAgICAgIDEwICAgICAgOCAgICAgIDQgICAgICAyICAgICAgIDEKU3BlZWQgKE1icHMpICAgTi9BICAgIE4vQSAgICAxMDAwICAgIE4vQSAgICAgMTAwICAgIDEwMCAgICAxMCAgICAgIDEwCkR1cGxleCAgICAgICAgICAgICAgICAgICAgICAgRnVsbCAgICAgICAgICAgIEZ1bGwgICBIYWxmICAgRnVsbCAgICBIYWxmCgpTb21lIGV4YW1wbGVzIG9mIHVzaW5nIEF1dG9OZWc6CgogIG1vZHByb2JlIGUxMDAwIEF1dG9OZWc9MHgwMSAoUmVzdHJpY3RzIGF1dG9uZWdvdGlhdGlvbiB0byAxMCBIYWxmKQogIG1vZHByb2JlIGUxMDAwIEF1dG9OZWc9MSAoU2FtZSBhcyBhYm92ZSkKICBtb2Rwcm9iZSBlMTAwMCBBdXRvTmVnPTB4MDIgKFJlc3RyaWN0cyBhdXRvbmVnb3RpYXRpb24gdG8gMTAgRnVsbCkKICBtb2Rwcm9iZSBlMTAwMCBBdXRvTmVnPTB4MDMgKFJlc3RyaWN0cyBhdXRvbmVnb3RpYXRpb24gdG8gMTAgSGFsZiBvciAxMCBGdWxsKQogIG1vZHByb2JlIGUxMDAwIEF1dG9OZWc9MHgwNCAoUmVzdHJpY3RzIGF1dG9uZWdvdGlhdGlvbiB0byAxMDAgSGFsZikKICBtb2Rwcm9iZSBlMTAwMCBBdXRvTmVnPTB4MDUgKFJlc3RyaWN0cyBhdXRvbmVnb3RpYXRpb24gdG8gMTAgSGFsZiBvciAxMDAKICBIYWxmKQogIG1vZHByb2JlIGUxMDAwIEF1dG9OZWc9MHgwMjAgKFJlc3RyaWN0cyBhdXRvbmVnb3RpYXRpb24gdG8gMTAwMCBGdWxsKQogIG1vZHByb2JlIGUxMDAwIEF1dG9OZWc9MzIgKFNhbWUgYXMgYWJvdmUpCgpOb3RlIHRoYXQgd2hlbiB0aGlzIHBhcmFtZXRlciBpcyB1c2VkLCBTcGVlZCBhbmQgRHVwbGV4IG11c3Qgbm90IGJlIHNwZWNpZmllZC4KCklmIHRoZSBsaW5rIHBhcnRuZXIgaXMgZm9yY2VkIHRvIGEgc3BlY2lmaWMgc3BlZWQgYW5kIGR1cGxleCwgdGhlbiB0aGlzCnBhcmFtZXRlciBzaG91bGQgbm90IGJlIHVzZWQuICBJbnN0ZWFkLCB1c2UgdGhlIFNwZWVkIGFuZCBEdXBsZXggcGFyYW1ldGVycwpwcmV2aW91c2x5IG1lbnRpb25lZCB0byBmb3JjZSB0aGUgYWRhcHRlciB0byB0aGUgc2FtZSBzcGVlZCBhbmQgZHVwbGV4LgoKCkFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PQoKICBDb25maWd1cmluZyB0aGUgRHJpdmVyIG9uIERpZmZlcmVudCBEaXN0cmlidXRpb25zCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBDb25maWd1cmluZyBhIG5ldHdvcmsgZHJpdmVyIHRvIGxvYWQgcHJvcGVybHkgd2hlbiB0aGUgc3lzdGVtIGlzIHN0YXJ0ZWQKICBpcyBkaXN0cmlidXRpb24gZGVwZW5kZW50LiBUeXBpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgaW52b2x2ZXMKICBhZGRpbmcgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBvciAvZXRjL21vZHByb2JlLmNvbmYgYXMgd2VsbAogIGFzIGVkaXRpbmcgb3RoZXIgc3lzdGVtIHN0YXJ0dXAgc2NyaXB0cyBhbmQvb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gTWFueQogIHBvcHVsYXIgTGludXggZGlzdHJpYnV0aW9ucyBzaGlwIHdpdGggdG9vbHMgdG8gbWFrZSB0aGVzZSBjaGFuZ2VzIGZvciB5b3UuCiAgVG8gbGVhcm4gdGhlIHByb3BlciB3YXkgdG8gY29uZmlndXJlIGEgbmV0d29yayBkZXZpY2UgZm9yIHlvdXIgc3lzdGVtLAogIHJlZmVyIHRvIHlvdXIgZGlzdHJpYnV0aW9uIGRvY3VtZW50YXRpb24uIElmIGR1cmluZyB0aGlzIHByb2Nlc3MgeW91IGFyZQogIGFza2VkIGZvciB0aGUgZHJpdmVyIG9yIG1vZHVsZSBuYW1lLCB0aGUgbmFtZSBmb3IgdGhlIExpbnV4IEJhc2UgRHJpdmVyCiAgZm9yIHRoZSBJbnRlbCBQUk8vMTAwMCBGYW1pbHkgb2YgQWRhcHRlcnMgaXMgZTEwMDAuCgogIEFzIGFuIGV4YW1wbGUsIGlmIHlvdSBpbnN0YWxsIHRoZSBlMTAwMCBkcml2ZXIgZm9yIHR3byBQUk8vMTAwMCBhZGFwdGVycwogIChldGgwIGFuZCBldGgxKSBhbmQgc2V0IHRoZSBzcGVlZCBhbmQgZHVwbGV4IHRvIDEwZnVsbCBhbmQgMTAwaGFsZiwgYWRkCiAgdGhlIGZvbGxvd2luZyB0byBtb2R1bGVzLmNvbmYgb3IgbW9kcHJvYmUuY29uZjoKCiAgICAgICBhbGlhcyBldGgwIGUxMDAwCiAgICAgICBhbGlhcyBldGgxIGUxMDAwCiAgICAgICBvcHRpb25zIGUxMDAwIFNwZWVkPTEwLDEwMCBEdXBsZXg9MiwxCgogIFZpZXdpbmcgTGluayBNZXNzYWdlcwogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBMaW5rIG1lc3NhZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgY29uc29sZSBpZiB0aGUgZGlzdHJpYnV0aW9uIGlzCiAgcmVzdHJpY3Rpbmcgc3lzdGVtIG1lc3NhZ2VzLiBJbiBvcmRlciB0byBzZWUgbmV0d29yayBkcml2ZXIgbGluayBtZXNzYWdlcwogIG9uIHlvdXIgY29uc29sZSwgc2V0IGRtZXNnIHRvIGVpZ2h0IGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6CgogICAgICAgZG1lc2cgLW4gOAoKICBOT1RFOiBUaGlzIHNldHRpbmcgaXMgbm90IHNhdmVkIGFjcm9zcyByZWJvb3RzLgoKICBKdW1ibyBGcmFtZXMKICAtLS0tLS0tLS0tLS0KCiAgVGhlIGRyaXZlciBzdXBwb3J0cyBKdW1ibyBGcmFtZXMgZm9yIGFsbCBhZGFwdGVycyBleGNlcHQgODI1NDIgYW5kCiAgODI1NzMtYmFzZWQgYWRhcHRlcnMuIEp1bWJvIEZyYW1lcyBzdXBwb3J0IGlzIGVuYWJsZWQgYnkgY2hhbmdpbmcgdGhlCiAgTVRVIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQgb2YgMTUwMC4gVXNlIHRoZSBpZmNvbmZpZyBjb21tYW5kCiAgdG8gaW5jcmVhc2UgdGhlIE1UVSBzaXplLiBGb3IgZXhhbXBsZToKCiAgICAgICBpZmNvbmZpZyBldGg8eD4gbXR1IDkwMDAgdXAKCiAgVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4gIEl0IGNhbiBiZSBtYWRlIHBlcm1hbmVudCBpZgogIHlvdSBhZGQ6CgogICAgICAgTVRVPTkwMDAKCiAgIHRvIHRoZSBmaWxlIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cy9pZmNmZy1ldGg8eD4uICBUaGlzIGV4YW1wbGUKICAgYXBwbGllcyB0byB0aGUgUmVkIEhhdCBkaXN0cmlidXRpb25zOyBvdGhlciBkaXN0cmlidXRpb25zIG1heSBzdG9yZSB0aGlzCiAgIHNldHRpbmcgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24uCgogIE5vdGVzOgoKICAtIFRvIGVuYWJsZSBKdW1ibyBGcmFtZXMsIGluY3JlYXNlIHRoZSBNVFUgc2l6ZSBvbiB0aGUgaW50ZXJmYWNlIGJleW9uZAogICAgMTUwMC4KICAtIFRoZSBtYXhpbXVtIE1UVSBzZXR0aW5nIGZvciBKdW1ibyBGcmFtZXMgaXMgMTYxMTAuIFRoaXMgdmFsdWUgY29pbmNpZGVzCiAgICB3aXRoIHRoZSBtYXhpbXVtIEp1bWJvIEZyYW1lcyBzaXplIG9mIDE2MTI4LgogIC0gVXNpbmcgSnVtYm8gRnJhbWVzIGF0IDEwIG9yIDEwMCBNYnBzIG1heSByZXN1bHQgaW4gcG9vciBwZXJmb3JtYW5jZSBvcgogICAgbG9zcyBvZiBsaW5rLgogIC0gU29tZSBJbnRlbCBnaWdhYml0IGFkYXB0ZXJzIHRoYXQgc3VwcG9ydCBKdW1ibyBGcmFtZXMgaGF2ZSBhIGZyYW1lIHNpemUKICAgIGxpbWl0IG9mIDkyMzggYnl0ZXMsIHdpdGggYSBjb3JyZXNwb25kaW5nIE1UVSBzaXplIGxpbWl0IG9mIDkyMTYgYnl0ZXMuCiAgICBUaGUgYWRhcHRlcnMgd2l0aCB0aGlzIGxpbWl0YXRpb24gYXJlIGJhc2VkIG9uIHRoZSBJbnRlbCA4MjU3MUVCIGFuZAogICAgODI1NzJFSSBjb250cm9sbGVycywgd2hpY2ggY29ycmVzcG9uZCB0byB0aGVzZSBwcm9kdWN0IG5hbWVzOgogICAgIEludGVsriBQUk8vMTAwMCBQVCBEdWFsIFBvcnQgU2VydmVyIEFkYXB0ZXIKICAgICBJbnRlbK4gUFJPLzEwMDAgUEYgRHVhbCBQb3J0IFNlcnZlciBBZGFwdGVyCiAgICAgSW50ZWyuIFBSTy8xMDAwIFBUIFNlcnZlciBBZGFwdGVyCiAgICAgSW50ZWyuIFBSTy8xMDAwIFBUIERlc2t0b3AgQWRhcHRlcgogICAgIEludGVsriBQUk8vMTAwMCBQRiBTZXJ2ZXIgQWRhcHRlcgoKICAtIFRoZSBJbnRlbCBQUk8vMTAwMCBQTSBOZXR3b3JrIENvbm5lY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBqdW1ibyBmcmFtZXMuCgoKICBFdGh0b29sCiAgLS0tLS0tLQoKICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCiAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIEV0aHRvb2wKICB2ZXJzaW9uIDEuNiBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgoKICBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgZXRodG9vbCBjYW4gYmUgZm91bmQgZnJvbQogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KCiAgTk9URTogRXRodG9vbCAxLjYgb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgc2V0IG9mIGV0aHRvb2wgb3B0aW9ucy4gU3VwcG9ydAogIGZvciBhIG1vcmUgY29tcGxldGUgZXRodG9vbCBmZWF0dXJlIHNldCBjYW4gYmUgZW5hYmxlZCBieSB1cGdyYWRpbmcKICBldGh0b29sIHRvIGV0aHRvb2wtMS44LjEuCgogIEVuYWJsaW5nIFdha2Ugb24gTEFOKiAoV29MKQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBXb0wgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBFdGh0b29sKiB1dGlsaXR5LiBFdGh0b29sIGlzIGluY2x1ZGVkIHdpdGgKICBhbGwgdmVyc2lvbnMgb2YgUmVkIEhhdCBhZnRlciBSZWQgSGF0IDcuMi4gRm9yIG90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMsCiAgZG93bmxvYWQgYW5kIGluc3RhbGwgRXRodG9vbCBmcm9tIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZToKICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCgogIEZvciBpbnN0cnVjdGlvbnMgb24gZW5hYmxpbmcgV29MIHdpdGggRXRodG9vbCwgcmVmZXIgdG8gdGhlIHdlYnNpdGUgbGlzdGVkCiAgYWJvdmUuCgogIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4KICBGb3IgdGhpcyBkcml2ZXIgdmVyc2lvbiwgaW4gb3JkZXIgdG8gZW5hYmxlIFdvTCwgdGhlIGUxMDAwIGRyaXZlciBtdXN0IGJlCiAgbG9hZGVkIHdoZW4gc2h1dHRpbmcgZG93biBvciByZWJvb3RpbmcgdGhlIHN5c3RlbS4KCiAgTkFQSQogIC0tLS0KCiAgTkFQSSAoUnggcG9sbGluZyBtb2RlKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIGUxMDAwIGRyaXZlci4gTkFQSSBpcyBlbmFibGVkCiAgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGtlcm5lbC4gVG8gb3ZlcnJpZGUKICB0aGUgZGVmYXVsdCwgdXNlIHRoZSBmb2xsb3dpbmcgY29tcGlsZS10aW1lIGZsYWdzLgoKICBUbyBlbmFibGUgTkFQSSwgY29tcGlsZSB0aGUgZHJpdmVyIG1vZHVsZSwgcGFzc2luZyBpbiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uOgoKICAgICAgIG1ha2UgQ0ZMQUdTX0VYVFJBPS1ERTEwMDBfTkFQSSBpbnN0YWxsCgogIFRvIGRpc2FibGUgTkFQSSwgY29tcGlsZSB0aGUgZHJpdmVyIG1vZHVsZSwgcGFzc2luZyBpbiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uOgoKICAgICAgIG1ha2UgQ0ZMQUdTX0VYVFJBPS1ERTEwMDBfTk9fTkFQSSBpbnN0YWxsCgogIFNlZSB3d3cuY3liZXJ1cy5jYS9+aGFkaS91c2VuaXgtcGFwZXIudGd6IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE5BUEkuCgoKS25vd24gSXNzdWVzCj09PT09PT09PT09PQoKICBKdW1ibyBGcmFtZXMgU3lzdGVtIFJlcXVpcmVtZW50CiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBoYXZlIGJlZW4gb2JzZXJ2ZWQgb24gTGludXggc3lzdGVtcyB3aXRoIDY0IE1CCiAgb2YgUkFNIG9yIGxlc3MgdGhhdCBhcmUgcnVubmluZyBKdW1ibyBGcmFtZXMuIElmIHlvdSBhcmUgdXNpbmcgSnVtYm8KICBGcmFtZXMsIHlvdXIgc3lzdGVtIG1heSByZXF1aXJlIG1vcmUgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBtaW5pbXVtCiAgcmVxdWlyZW1lbnQgb2YgNjQgTUIgb2Ygc3lzdGVtIG1lbW9yeS4KCiAgUGVyZm9ybWFuY2UgRGVncmFkYXRpb24gd2l0aCBKdW1ibyBGcmFtZXMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBEZWdyYWRhdGlvbiBpbiB0aHJvdWdocHV0IHBlcmZvcm1hbmNlIG1heSBiZSBvYnNlcnZlZCBpbiBzb21lIEp1bWJvIGZyYW1lcwogIGVudmlyb25tZW50cy4gSWYgdGhpcyBpcyBvYnNlcnZlZCwgaW5jcmVhc2luZyB0aGUgYXBwbGljYXRpb24ncyBzb2NrZXQKICBidWZmZXIgc2l6ZSBhbmQvb3IgaW5jcmVhc2luZyB0aGUgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF8qbWVtIGVudHJ5IHZhbHVlcwogIG1heSBoZWxwLiBTZWUgdGhlIHNwZWNpZmljIGFwcGxpY2F0aW9uIG1hbnVhbCBhbmQKICAvdXNyL3NyYy9saW51eCovRG9jdW1lbnRhdGlvbi8KICBuZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgZm9yIG1vcmUgZGV0YWlscy4KCiAgSnVtYm8gZnJhbWVzIG9uIEZvdW5kcnkgQmlnSXJvbiA4MDAwIHN3aXRjaAogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBUaGVyZSBpcyBhIGtub3duIGlzc3VlIHVzaW5nIEp1bWJvIGZyYW1lcyB3aGVuIGNvbm5lY3RlZCB0byBhIEZvdW5kcnkKICBCaWdJcm9uIDgwMDAgc3dpdGNoLiBUaGlzIGlzIGEgM3JkIHBhcnR5IGxpbWl0YXRpb24uIElmIHlvdSBleHBlcmllbmNlCiAgbG9zcyBvZiBwYWNrZXRzLCBsb3dlciB0aGUgTVRVIHNpemUuCgogIE11bHRpcGxlIEludGVyZmFjZXMgb24gU2FtZSBFdGhlcm5ldCBCcm9hZGNhc3QgTmV0d29yawogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBEdWUgdG8gdGhlIGRlZmF1bHQgQVJQIGJlaGF2aW9yIG9uIExpbnV4LCBpdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZQogIG9uZSBzeXN0ZW0gb24gdHdvIElQIG5ldHdvcmtzIGluIHRoZSBzYW1lIEV0aGVybmV0IGJyb2FkY2FzdCBkb21haW4KICAobm9uLXBhcnRpdGlvbmVkIHN3aXRjaCkgYmVoYXZlIGFzIGV4cGVjdGVkLiBBbGwgRXRoZXJuZXQgaW50ZXJmYWNlcwogIHdpbGwgcmVzcG9uZCB0byBJUCB0cmFmZmljIGZvciBhbnkgSVAgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgc3lzdGVtLgogIFRoaXMgcmVzdWx0cyBpbiB1bmJhbGFuY2VkIHJlY2VpdmUgdHJhZmZpYy4KCiAgSWYgeW91IGhhdmUgbXVsdGlwbGUgaW50ZXJmYWNlcyBpbiBhIHNlcnZlciwgZWl0aGVyIHR1cm4gb24gQVJQCiAgZmlsdGVyaW5nIGJ5IGVudGVyaW5nOgoKICAgICAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL2FycF9maWx0ZXIKICAodGhpcyBvbmx5IHdvcmtzIGlmIHlvdXIga2VybmVsJ3MgdmVyc2lvbiBpcyBoaWdoZXIgdGhhbiAyLjQuNSksCgogIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuIFRoZSBjb25maWd1cmF0aW9uCiAgY2hhbmdlIGNhbiBiZSBtYWRlIHBlcm1hbmVudCBieSBhZGRpbmcgdGhlIGxpbmU6CiAgICAgIG5ldC5pcHY0LmNvbmYuYWxsLmFycF9maWx0ZXIgPSAxCiAgdG8gdGhlIGZpbGUgL2V0Yy9zeXNjdGwuY29uZgoKICAgICAgICBvciwKCiAgaW5zdGFsbCB0aGUgaW50ZXJmYWNlcyBpbiBzZXBhcmF0ZSBicm9hZGNhc3QgZG9tYWlucyAoZWl0aGVyIGluCiAgZGlmZmVyZW50IHN3aXRjaGVzIG9yIGluIGEgc3dpdGNoIHBhcnRpdGlvbmVkIHRvIFZMQU5zKS4KCiAgODI1NDEvODI1NDcgY2FuJ3QgbGluayBvciBhcmUgc2xvdyB0byBsaW5rIHdpdGggc29tZSBsaW5rIHBhcnRuZXJzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgVGhlcmUgaXMgYSBrbm93biBjb21wYXRpYmlsaXR5IGlzc3VlIHdpdGggODI1NDEvODI1NDcgYW5kIHNvbWUKICBsb3ctZW5kIHN3aXRjaGVzIHdoZXJlIHRoZSBsaW5rIHdpbGwgbm90IGJlIGVzdGFibGlzaGVkLCBvciB3aWxsCiAgYmUgc2xvdyB0byBlc3RhYmxpc2guICBJbiBwYXJ0aWN1bGFyLCB0aGVzZSBzd2l0Y2hlcyBhcmUga25vd24gdG8KICBiZSBpbmNvbXBhdGlibGUgd2l0aCA4MjU0MS84MjU0NzoKCiAgICAgIFBsYW5leCBGWEctMDhURQogICAgICBJLU8gRGF0YSBFVEctU0g4CgogIFRvIHdvcmthcm91bmQgdGhpcyBpc3N1ZSwgdGhlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQgd2l0aCBhbiBvdmVycmlkZQogIG9mIHRoZSBQSFkncyBtYXN0ZXIvc2xhdmUgc2V0dGluZy4gIEZvcmNpbmcgbWFzdGVyIG9yIGZvcmNpbmcgc2xhdmUKICBtb2RlIHdpbGwgaW1wcm92ZSB0aW1lLXRvLWxpbmsuCgogICAgICAjIG1ha2UgRVhUUkFfQ0ZMQUdTPS1ERTEwMDBfTUFTVEVSX1NMQVZFPTxuPgoKICBXaGVyZSA8bj4gaXM6CgogICAgICAwID0gSGFyZHdhcmUgZGVmYXVsdAogICAgICAxID0gTWFzdGVyIG1vZGUKICAgICAgMiA9IFNsYXZlIG1vZGUKICAgICAgMyA9IEF1dG8gbWFzdGVyL3NsYXZlCgogIERpc2FibGUgcnggZmxvdyBjb250cm9sIHdpdGggZXRodG9vbAogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBJbiBvcmRlciB0byBkaXNhYmxlIHJlY2VpdmUgZmxvdyBjb250cm9sIHVzaW5nIGV0aHRvb2wsIHlvdSBtdXN0IHR1cm4KICBvZmYgYXV0by1uZWdvdGlhdGlvbiBvbiB0aGUgc2FtZSBjb21tYW5kIGxpbmUuCgogIEZvciBleGFtcGxlOgoKICAgICBldGh0b29sIC1BIGV0aD8gYXV0b25lZyBvZmYgcnggb2ZmCgoKU3VwcG9ydAo9PT09PT09CgpGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKCiAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20KCiAgICBvciB0aGUgSW50ZWwgV2lyZWQgTmV0d29ya2luZyBwcm9qZWN0IGhvc3RlZCBieSBTb3VyY2Vmb3JnZSBhdDoKCiAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwCgpJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKa2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQKdG8gdGhlIGlzc3VlIHRvIGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAoKCkxpY2Vuc2UKPT09PT09PQoKVGhpcyBzb2Z0d2FyZSBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2UgYWdyZWVtZW50CmJldHdlZW4geW91ICgnTGljZW5zZWUnKSBhbmQgSW50ZWwuIERvIG5vdCB1c2Ugb3IgbG9hZCB0aGlzIHNvZnR3YXJlIG9yIGFueQphc3NvY2lhdGVkIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5LCB0aGUgJ1NvZnR3YXJlJykgdW50aWwgeW91IGhhdmUgY2FyZWZ1bGx5CnJlYWQgdGhlIGZ1bGwgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGZpbGUgQ09QWUlORyBsb2NhdGVkIGluIHRoaXMgc29mdHdhcmUKcGFja2FnZS4gQnkgbG9hZGluZyBvciB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcwpBZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGRvIG5vdAppbnN0YWxsIG9yIHVzZSB0aGUgU29mdHdhcmUuCgoqIE90aGVyIG5hbWVzIGFuZCBicmFuZHMgbWF5IGJlIGNsYWltZWQgYXMgdGhlIHByb3BlcnR5IG9mIG90aGVycy4K