VGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGhhdmUgbWFkZSBsYXJnZSBjb250cmlidXRpb25zCnRvIHRoZSBwdWJsaWMgdmVyc2lvbiBvZiBQcm90b2NvbCBCdWZmZXJzLgoKT3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uOgogIFNhbmpheSBHaGVtYXdhdCA8c2FuamF5QGdvb2dsZS5jb20+CiAgSmVmZiBEZWFuIDxqZWZmQGdvb2dsZS5jb20+CiAgRGFuaWVsIER1bGl0eiA8ZGFuaWVsQGdvb2dsZS5jb20+CiAgQ3JhaWcgU2lsdmVyc3RlaW4KICBQYXVsIEhhYWhyIDxoYWFockBnb29nbGUuY29tPgogIENvcmV5IEFuZGVyc29uIDxjb3JpbkBnb29nbGUuY29tPgogIChhbmQgbWFueSBvdGhlcnMpCgpQcm90bzIgQysrIGFuZCBKYXZhIHByaW1hcnkgYXV0aG9yOgogIEtlbnRvbiBWYXJkYSA8a2VudG9uQGdvb2dsZS5jb20+CgpQcm90bzIgUHl0aG9uIHByaW1hcnkgYXV0aG9yczoKICBXaWxsIFJvYmluc29uIDxyb2JpbnNvbkBnb29nbGUuY29tPgogIFBldGFyIFBldHJvdiA8cGV0YXJAZ29vZ2xlLmNvbT4KCkxhcmdlIGNvZGUgY29udHJpYnV0aW9uczoKICBKYXNvbiBIc3VlaCA8amFzb25oQGdvb2dsZS5jb20+CiAgSm9zZXBoIFNjaG9yciA8anNjaG9yckBnb29nbGUuY29tPgogIFdlbmJvIFpodSA8d2VuYm96QGdvb2dsZS5jb20+CgpMYXJnZSBxdWFudGl0eSBvZiBjb2RlIHJldmlld3M6CiAgU2NvdHQgQnJ1Y2UgPHNicnVjZUBnb29nbGUuY29tPgogIEZyYW5rIFllbGxpbgogIE5lYWwgTm9yd2l0eiA8bm5vcndpdHpAZ29vZ2xlLmNvbT4KICBKZWZmcmV5IFlhc3NraW4gPGp5YXNza2luQGdvb2dsZS5jb20+CiAgQW1icm9zZSBGZWluc3RlaW4gPGFtYnJvc2VAZ29vZ2xlLmNvbT4KCkRvY3VtZW50YXRpb246CiAgTGlzYSBDYXJleSA8bGNhcmV5QGdvb2dsZS5jb20+CgpNYXZlbiBwYWNrYWdpbmc6CiAgR3JlZ29yeSBLaWNrIDxnYWtAZ29vZ2xlLmNvbT4KClBhdGNoIGNvbnRyaWJ1dG9yczoKICBLZXZpbiBLbyA8a2V2aW4ucy5rb0BnbWFpbC5jb20+CiAgICAqIFNtYWxsIHBhdGNoIHRvIGhhbmRsZSB0cmFpbGluZyBzbGFzaGVzIGluIC0tcHJvdG9fcGF0aCBmbGFnLgogIEpvaGFuIEV1cGhyb3NpbmUgPHByb3BweUBhbWluY2hlLmNvbT4KICAgICogU21hbGwgcGF0Y2ggdG8gZml4IFB5dGhvbiBDYWxsTWV0aG9kKCkuCiAgVWxyaWNoIEt1bml0eiA8a3VuZUBkZWluZS10YWxlci5kZT4KICAgICogU21hbGwgb3B0aW1pemF0aW9ucyB0byBQeXRob24gc2VyaWFsaXphdGlvbi4KICBMZWFuZHJvIEx1Y2FyZWxsYSA8bGx1Y2F4QGdtYWlsLmNvbT4KICAgICogVkkgc3ludGF4IGhpZ2hsaWdodGluZyB0d2Vha3MuCiAgICAqIEZpeCBjb21waWxlciB0byBub3QgbWFrZSBvdXRwdXQgZXhlY3V0YWJsZS4KICBEaWxpcCBKb3NlcGggPGRpbGlwLmFudG9ueS5qb3NlcGhAZ21haWwuY29tPgogICAgKiBIZXVyaXN0aWMgZGV0ZWN0aW9uIG9mIHN1Yi1tZXNzYWdlcyB3aGVuIHByaW50aW5nIHVua25vd24gZmllbGRzIGluCiAgICAgIHRleHQgZm9ybWF0LgogIEJyaWFuIEF0a2luc29uIDxuYWlyYjc3NEBnbWFpbC5jb20+CiAgICAqIEFkZGVkIEBPdmVycmlkZSBhbm5vdGF0aW9uIHRvIGdlbmVyYXRlZCBKYXZhIGNvZGUgd2hlcmUgYXBwcm9wcmlhdGUuCiAgVmluY2VudCBDaG9pbmnocmUgPENob2luaWVyZS5WaW5jZW50QGh5ZHJvLnFjLmNhPgogICAgKiBUcnU2NCBzdXBwb3J0LgogIE1vbnR5IFRheWxvciA8bW9udHkudGF5bG9yQGdtYWlsLmNvbT4KICAgICogU29sYXJpcyAxMCArIFN1biBTdHVkaW8gZml4ZXMuCiAgQWxlayBTdG9ybSA8YWxlay5zdG9ybUBnbWFpbC5jb20+CiAgICAqIFNsaWNpbmcgc3VwcG9ydCBmb3IgcmVwZWF0ZWQgc2NhbGFyIGZpZWxkcyBmb3IgdGhlIFB5dGhvbiBBUEkuCiAgT2xlZyBTbW9sc2t5IDxvbGVnLnNtb2xza3lAZ21haWwuY29tPgogICAgKiBNUyBWaXN1YWwgU3R1ZGlvIGVycm9yIGZvcm1hdCBvcHRpb24uCiAgQnJpYW4gT2xzb24gPGJyaWFub2xzb25AZ29vZ2xlLmNvbT4KICAgICogZ3ppcC96bGliIEkvTyBzdXBwb3J0LgogIE1pY2hhZWwgUG9vbGUgPG1kcG9vbGVAdHJvaWx1cy5vcmc+CiAgICAqIEZpeGVkIHdhcm5pbmdzIGFib3V0IGdlbmVyYXRlZCBjb25zdHJ1Y3RvcnMgbm90IGV4cGxpY2l0bHkgaW5pdGlhbGl6aW5nCiAgICAgIGFsbCBmaWVsZHMgKG9ubHkgcHJlc2VudCB3aXRoIGNlcnRhaW4gY29tcGlsZXIgc2V0dGluZ3MpLgogICAgKiBBZGRlZCBnZW5lcmF0aW9uIG9mIGZpZWxkIG51bWJlciBjb25zdGFudHMuCiAgV2luayBTYXZpbGxlIDx3aW5rQGdvb2dsZS5jb20+CiAgICAqIEZpeGVkIGluaXRpYWxpemF0aW9uIG9yZGVyaW5nIHByb2JsZW0gaW4gbG9nZ2luZyBjb2RlLgogIFdpbGwgUGllcmNlIDx3aWxscEBudWNsZWkuY29tPgogICAgKiBTbWFsbCBwYXRjaCBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugb2YgaW4gUHl0aG9uIHNlcmlhbGl6YXRpb24uCiAgQWxleGFuZHJlIFZhc3NhbG90dGkgPGFsZXhhbmRyZUBwZWFkcm9wLmNvbT4KICAgICogRW1hY3MgbW9kZSBmb3IgUHJvdG9jb2wgQnVmZmVycyAoZWRpdG9ycy9wcm90b2J1Zi1tb2RlLmVsKS4KICBTY290dCBTdGFmZm9yZCA8c2NvdHQuc3RhZmZvcmRAZ21haWwuY29tPgogICAgKiBBZGRlZCBTd2FwKCksIFN3YXBFbGVtZW50cygpLCBhbmQgUmVtb3ZlTGFzdCgpIHRvIFJlZmxlY3Rpb24gaW50ZXJmYWNlLgogIEFsZXhhbmRlciBNZWxuaWtvdiA8YWxtQHNpYm1haWwucnU+CiAgICAqIEhQVVggc3VwcG9ydC4KICBPbGl2ZXIgSm93ZXR0IDxvbGl2ZXIuam93ZXR0QGdtYWlsLmNvbT4KICAgICogRGV0ZWN0IHdoZXRoZXIgemxpYiBpcyBuZXcgZW5vdWdoIGluIGNvbmZpZ3VyZSBzY3JpcHQuCg==