U1dJRyAoU2ltcGxpZmllZCBXcmFwcGVyIGFuZCBJbnRlcmZhY2UgR2VuZXJhdG9yKQoKVmVyc2lvbjogMS4zLjM1ICg3IEFwcmlsIDIwMDgpCgpUYWdsaW5lOiBTV0lHIGlzIGEgY29tcGlsZXIgdGhhdCBpbnRlZ3JhdGVzIEMgYW5kIEMrKyB3aXRoIGxhbmd1YWdlcwogICAgICAgICBpbmNsdWRpbmcgUGVybCwgUHl0aG9uLCBUY2wsIFJ1YnksIFBIUCwgSmF2YSwgT2NhbWwsIEx1YSwKICAgICAgICAgU2NoZW1lIChHdWlsZSwgTXpTY2hlbWUsIENISUNLRU4pLCBQaWtlLCBDIywgTW9kdWxhLTMsCiAgICAgICAgIENvbW1vbiBMaXNwIChDTElTUCwgQWxsZWdybyBDTCwgQ0ZGSSwgVUZGSSksIE9jdGF2ZSBhbmQgUi4KClNXSUcgcmVhZHMgYW5ub3RhdGVkIEMvQysrIGhlYWRlciBmaWxlcyBhbmQgY3JlYXRlcyB3cmFwcGVyIGNvZGUgKGdsdWUKY29kZSkgaW4gb3JkZXIgdG8gbWFrZSB0aGUgY29ycmVzcG9uZGluZyBDL0MrKyBsaWJyYXJpZXMgYXZhaWxhYmxlIHRvCnRoZSBsaXN0ZWQgbGFuZ3VhZ2VzLCBvciB0byBleHRlbmQgQy9DKysgcHJvZ3JhbXMgd2l0aCBhIHNjcmlwdGluZwpsYW5ndWFnZS4KClRoaXMgZGlzdHJpYnV0aW9uIHJlcHJlc2VudHMgdGhlIGxhdGVzdCBkZXZlbG9wbWVudCByZWxlYXNlIG9mIFNXSUcuClRoZSBndWlsdHkgcGFydGllcyB3b3JraW5nIG9uIHRoaXMgYXJlOgoKQWN0aXZlIERldmVsb3BlcnM6CiBXaWxsaWFtIEZ1bHRvbiAod3NmQGZ1bHRvbmRlc2lnbnMuY28udWspICAgICAgICAgICAgICAgKFNXSUcgY29yZSwgSmF2YSwgQyMsIFdpbmRvd3MsIEN5Z3dpbikKIE9sbHkgQmV0dHMgKG9sbHlAc3VydmV4LmNvbSkgICAgICAgICAgICAgICAgICAgICAgICAgICAoUEhQKQogSm9obiBMZW56ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHdWlsZSwgTXpTY2hlbWUgdXBkYXRlcywgQ2hpY2tlbiBtb2R1bGUsIHJ1bnRpbWUgc3lzdGVtKQogTWFyayBHb3NzYWdlIChtYXJrQGdvc3NhZ2UuY2piLm5ldCkgICAgICAgICAgICAgICAgICAgIChMdWEpCiBKb3NlcGggV2FuZyAoam9lQGduYWNhZGVteS5vcmcpICAgICAgICAgICAgICAgICAgICAgICAgKFIpCiBHb256YWxvIEdhcnJhbXVubyAoZ2dhcnJhQGFkdmFuY2Vkc2wuY29tLmFyKSAgICAgICAgICAgKFJ1YnksIFJ1YnkncyBVVEwpCiBYYXZpZXIgRGVsYWNvdXIgKHhhdmllci5kZWxhY291ckBnbWFpbC5jb20pICAgICAgICAgICAgKE9jdGF2ZSkKCk1ham9yIGNvbnRyaWJ1dG9ycyBpbmNsdWRlOgogRGF2ZSBCZWF6bGV5IChkYXZlLXN3aWdAZGFiZWF6LmNvbSkgICAgICAgICAgICAgICAgICAgIChTV0lHIGNvcmUsIFB5dGhvbiwgVGNsLCBQZXJsKQogSGVubmluZyBUaGllbGVtYW5uIChzd2lnQGhlbm5pbmctdGhpZWxlbWFubi5kZSkgICAgICAgIChNb2R1bGEzKQogTWF0dGhpYXMgS/ZwcGUgKG1rb2VwcGVAbWFpbC5tYXRoLnVuaS1tYWdkZWJ1cmcuZGUpICAgIChHdWlsZSwgTXpTY2hlbWUpCiBMdWlnaSBCYWxsYWJpbyAobHVpZ2kuYmFsbGFiaW9AZmFzdHdlYm5ldC5pdCkgICAgICAgICAgKFNUTCB3cmFwcGluZykKIE1pa2VsIEJhbmNyb2Z0IChtaWtlbEBmcmFuei5jb20pICAgICAgICAgICAgICAgICAgICAgICAoQWxsZWdybyBDTCkKIFN1cmVuZHJhIFNpbmdoaSAoZWZ1enp5b25lQG5ldHNjYXBlLm5ldCkgICAgICAgICAgICAgICAoQ0xJU1AsIENGRkkpCiBNYXJjZWxvIE1hdHVzIChtbWF0dXNAYWNtcy5hcml6b25hLmVkdSkgICAgICAgICAgICAgICAgKFNXSUcgY29yZSwgUHl0aG9uLCBVVExbcHl0aG9uLHBlcmwsdGNsLHJ1YnldKQogQXJ0IFllcmtlcyAoYXllcmtlc0BzcGVha2Vhc3kubmV0KSAgICAgICAgICAgICAgICAgICAgIChPY2FtbCkKIEx5bGUgSm9obnNvbiAobHlsZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpICAgICAgICAgICAgICAoUnVieSkKIENoYXJsaWUgU2F2YWdlIChjZmlzQGludGVyc2Vydi5jb20pICAgICAgICAgICAgICAgICAgICAoUnVieSkKIFRoaWVuLVRoaSBOZ3V5ZW4gKHR0bkBnbHVnLm9yZykgICAgICAgICAgICAgICAgICAgICAgICAoYnVpbGQvdGVzdC9taXNjKQogUmljaGFyZCBQYWxtZXIgKHJpY2hhcmRAbWFnaWNhbGl0eS5vcmcpICAgICAgICAgICAgICAgIChQSFApCiBTYW0gTGlkZGljb3R0IC0gQW5vbm92YSBMdGQgKHNhbWxAbGlkZGljb3R0LmNvbSkgICAgICAgKFBIUCkKIFRpbSBIb2NraW4gLSBTdW4gTWljcm9zeXN0ZW1zICh0aG9ja2luQHN1bi5jb20pICAgICAgICAoUEhQKQogS2V2aW4gUnVsYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQSFApCiBTaGlidWthd2EgWW9zaGlraSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEphcGFuZXNlIFRyYW5zbGF0aW9uKQogSmFzb24gU3Rld2FydCAoamFzb25Ab3BlbmluZm9ybWF0aWNzLmNvbSkgICAgICAgICAgICAgIChQZXJsNSkKIExvaWMgRGFjaGFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUGVybDUpCiBEYXZpZCBGbGV0Y2hlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBlcmw1KQogR2FyeSBIb2x0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQZXJsNSkKIE1hc2FraSBGdWt1c2hpbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnVieSkKIFNjb3R0IE1pY2hlbCAoc2NvdHRtQGNzLnVjbGEuZWR1KSAgICAgICAgICAgICAgICAgICAgICAoSmF2YSBkaXJlY3RvcnMpCiBUaWdlciBGZW5nIChzb25neWFuZkBjcy51Y2hpY2Fnby5lZHUpICAgICAgICAgICAgICAgICAgKFNXSUcgY29yZSkKIE1hcmsgUm9zZSAobXJvc2VAc3RtLmxibC5nb3YpICAgICAgICAgICAgICAgICAgICAgICAgICAoRGlyZWN0b3JzKQogSm9uYWggQmVja2ZvcmQgKGJlY2tmb3JkQHVzZXJtYWlsLmNvbSkgICAgICAgICAgICAgICAgIChDSElDS0VOKQogQWhtb24gRGFuY3kgKGRhbmN5QGZyYW56LmNvbSkJCQkJKEFsbGVncm8gQ0wpCiBEaXJrIEdlcnJpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFsbGVncm8gQ0wpCiBOZWlsIENhd3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEMjKQogSGFyY28gZGUgSGlsc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKYXZhKQogQWxleGV5IER5YWNoZW5rbyAoZHlhY2hlbmtvQGZyb21ydS5jb20pICAgICAgICAgICAgICAgIChUY2wpCiBCb2IgVGVjaGVudGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRjbCkKIE1hcnRpbiBGcm9laGxpY2ggPE1hcnRpbkZyb2VobGljaEBBQ00ub3JnPiAgICAgICAgICAgICAoR3VpbGUpCiBNYXJjaW8gTHVpcyBUZWl4ZWlyYSA8bWFyY2lvdEBob2xseS5jb2xvc3RhdGUuZWR1PiAgICAgKEd1aWxlKQogRHVuY2FuIFRlbXBsZSBMYW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSKQoKUGFzdCBjb250cmlidXRvcnMgaW5jbHVkZToKIEphbWVzIE1pY2hhZWwgRHVQb250LCBDbGFyayBNY0dyZXcsIER1c3RpbiBNaXRjaGVsbCwgSWFuIENvb2tlLCBDYXRhbGluIER1bWl0cmVzY3UsIEJhcmFuCiBLb3Z1aywgT2xlZyBUb2xtYXRjZXYsIFRhbCBTaGFsaWYsIExsdWlzIFBhZHJvLCBDaHJpcyBTZWF0b3J5LCBJZ29yIEJlbHksIFJvYmluIER1bm4KIChTZWUgQ0hBTkdFUyBmb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3QpLgoKUG9ydGlvbnMgYWxzbyBjb3B5cmlnaHRlZCBieSBjb21wYW5pZXMvY29ycG9yYXRpb25zOwogTmV0d29yayBBcHBsaWVkIENvbW11bmljYXRpb24gTGFib3JhdG9yeSwgSW5jCiBJbmZvcm1hdGlvbi10ZWNobm9sb2d5IFByb21vdGlvbiBBZ2VuY3ksIEphcGFuCgpVcC10by1kYXRlIFNXSUcgcmVsYXRlZCBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgYXQKCiAgICAgICAgaHR0cDovL3d3dy5zd2lnLm9yZwoKQSBTV0lHIEZBUSBhbmQgb3RoZXIgaGludHMgY2FuIGJlIGZvdW5kIG9uIHRoZSBTV0lHIFdpa2k6CgogICAgICAgaHR0cDovL3d3dy5kYWJlYXouY29tL2NnaS1iaW4vd2lraS5wbAoKCiEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKISEhISEhISAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRBTlQgICAgICAgICAgICAgICAgICAgICAgICAgISEhISEhIQohISEhISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhISEhISEhCiEhISEhISEgUHJldmlvdXMgU1dJRy0xLjEgdXNlcnMgc2hvdWxkIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gICEhISEhISEKISEhISEhISBmaWxlIERvYy9NYW51YWwvU1dJRy5odG1sIGJlZm9yZSB0cnlpbmcgdG8gdXNlIFNXSUctMS4zISEhISEhIQohISEhISEhIG9uIGV4aXN0aW5nIFNXSUcgaW50ZXJmYWNlcy4gIFRoaXMgaXMgdGhlIG1vc3QgY3VycmVudCAhISEhISEhCiEhISEhISEgZG9jdW1lbnRhdGlvbiB0aGF0IGRlc2NyaWJlcyBuZXcgMS4zIGZlYXR1cmVzIGFuZCAgICAgICEhISEhISEKISEhISEhISBpbmNvbXBhdGliaWxpdGllcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISEhISEhIQohISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCgpXaGF0J3MgTmV3Pwo9PT09PT09PT09PQoKU1dJRy0xLjMuMzUgc3VtbWFyeToKLSBPY3RhdmUgbGFuZ3VhZ2UgbW9kdWxlIGFkZGVkCi0gQnVnIGZpeGVzIGluIFB5dGhvbiwgTHVhLCBKYXZhLCBDIywgUGVybCBtb2R1bGVzCi0gQSBmZXcgb3RoZXIgZ2VuZXJpYyBidWdzIGFuZCBydW50aW1lIGFzc2VydGlvbnMgZml4ZWQKClNXSUctMS4zLjM0IHN1bW1hcnk6Ci0gc2hhcmVkX3B0ciBzdXBwb3J0IGZvciBQeXRob24KLSBTdXBwb3J0IGZvciBsYXRlc3QgUiAtIHZlcnNpb24gMi42Ci0gVmFyaW91cyBtaW5vciBpbXByb3ZlbWVudHMvYnVnIGZpeGVzIGZvciBSLCBMdWEsIFB5dGhvbiwgSmF2YSwgQyMKLSBBIGZldyBvdGhlciBnZW5lcmljIGJ1ZyBmaXhlcywgbWFpbmx5IGZvciB0ZW1wbGF0ZXMgYW5kIHVzaW5nIHN0YXRlbWVudHMKClNXSUctMS4zLjMzIHN1bW1hcnk6Ci0gRml4IHJlZ3Jlc3Npb24gZm9yIFBlcmwgd2hlcmUgQysrIHdyYXBwZXJzIHdvdWxkIG5vdCBjb21waWxlCi0gRml4IHJlZ3Jlc3Npb24gcGFyc2luZyBtYWNyb3MKClNXSUctMS4zLjMyIHN1bW1hcnk6Ci0gc2hhcmVkX3B0ciBzdXBwb3J0IGZvciBKYXZhIGFuZCBDIwotIEVuaGFuY2VkIFNUTCBzdXBwb3J0IGZvciBSdWJ5Ci0gV2luZG93cyBzdXBwb3J0IGZvciBSCi0gRml4ZWQgbG9uZy1zdGFuZGluZyBtZW1vcnkgbGVhayBpbiBQSFAgTW9kdWxlCi0gTnVtZXJvdXMgZml4ZXMgYW5kIG1pbm9yIGVuaGFuY2VtZW50cyBmb3IgQWxsZWdyb2NsLCBDIywgY2ZmaSwgQ2hpY2tlbiwgR3VpbGUsCiAgSmF2YSwgTHVhLCBPY2FtbCwgUGVybCwgUEhQLCBQeXRob24sIFJ1YnksIFRjbC4KLSBJbXByb3ZlZCB3YXJuaW5nIHN1cHBvcnQKClNXSUctMS4zLjMxIHN1bW1hcnk6Ci0gUHl0aG9uIG1vZGVybiBjbGFzc2VzIHJlZ3Jlc3Npb24gZml4CgpTV0lHLTEuMy4zMCBzdW1tYXJ5OgotIFB5dGhvbi0yLjUgc3VwcG9ydAotIE5ldyBsYW5ndWFnZSBtb2R1bGU6IFIKLSBEaXJlY3RvciBzdXBwb3J0IGFkZGVkIGZvciBDIwotIE51bWVyb3VzIGRpcmVjdG9yIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMKLSBJbXByb3ZlZCBtaW5ndy9tc3lzIHN1cHBvcnQKLSBCZXR0ZXIgY29uc3RhbnRzIHN1cHBvcnQgaW4gR3VpbGUgYW5kIGNoaWNrZW4gbW9kdWxlcwotIFN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgUEhQNSBjbGFzcyB3cmFwcGVycwotIEltcG9ydGFudCBKYXZhIHByZW1hdHVyZSBnYXJiYWdlIGNvbGxlY3Rpb24gZml4Ci0gTWlub3IgaW1wcm92ZW1lbnRzL2ZpeGVzIGluIGNmZmksIHBocCwgYWxsZWdyb2NsLCBwZXJsLCBjaGlja2VuLCBsdWEsIHJ1YnksCiAgb2NhbWwsIHB5dGhvbiwgamF2YSwgYyMgYW5kIGd1aWxlIGxhbmd1YWdlIG1vZHVsZXMKLSBNYW55IG1hbnkgb3RoZXIgYnVnIGZpeGVzCgpTV0lHLTEuMy4yOSBzdW1tYXJ5OgotIE51bWVyb3VzIGltcG9ydGFudCBidWcgZml4ZXMKLSBGZXcgbWlub3IgbmV3IGZlYXR1cmVzCi0gU29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgaW4gZ2VuZXJhdGVkIGNvZGUgZm9yIFB5dGhvbgoKU1dJRy0xLjMuMjggc3VtbWFyeToKLSBNb3JlIHBvd2VyZnVsIHJlbmFtaW5nICglcmVuYW1lKSBjYXBhYmlsaXR5LgotIE1vcmUgdXNlciBmcmllbmRseSB3YXJuaW5nIGhhbmRsaW5nLgotIEFkZCBmaW5lciBjb250cm9sIGZvciBkZWZhdWx0IGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMuIFdlIGRpc2NvdXJhZ2UKICB0aGUgdXNlIG9mIHRoZSAnbm9kZWZhdWx0JyBvcHRpb24sIHdoaWNoIGRpc2FibGVzIGJvdGggY29uc3RydWN0b3JzIGFuZAogIGRlc3RydWN0b3JzLCBsZWFkaW5nIHRvIHBvc3NpYmxlIG1lbW9yeSBsZWFrcy4gVXNlIGluc3RlYWQgJ25vZGVmYXVsdGN0b3InCiAgYW5kL29yICdub2RlZmF1bHRkdG9yJy4KLSBBdXRvbWF0aWMgY29weSBjb25zdHJ1Y3RvciB3cmFwcGVyIGdlbmVyYXRpb24gdmlhIHRoZSAnY29weWN0b3InIG9wdGlvbi9mZWF0dXJlLgotIEJldHRlciBoYW5kbGluZyBvZiBXaW5kb3dzIGV4dGVuc2lvbnMgYW5kIHR5cGVzLgotIEJldHRlciBydW50aW1lIGVycm9yIHJlcG9ydGluZy4KLSBBZGQgdGhlICVjYXRjaGVzIGRpcmVjdGl2ZSB0byBjYXRjaCBhbmQgZGlzcGF0Y2ggZXhjZXB0aW9ucy4KLSBBZGQgdGhlICVuYXR1cmFsdmFyIGRpcmVjdGl2ZSBmb3IgbW9yZSAnbmF0dXJhbCcgdmFyaWFibGUgd3JhcHBpbmcuCi0gQmV0dGVyIGRlZmF1bHQgaGFuZGxpbmcgb2Ygc3RkOjpzdHJpbmcgdmFyaWFibGVzIHVzaW5nIHRoZSAlbmF0dXJhbHZhciBkaXJlY3RpdmUuCi0gQWRkIHRoZSAlYWxsb3dleGNlcHQgYW5kICVleGNlcHRpb252YXIgZGlyZWN0aXZlcyB0byBoYW5kbGUgZXhjZXB0aW9ucyB3aGVuCiAgYWNjZXNzaW5nIGEgdmFyaWFibGUuCi0gQWRkIHRoZSAlZGVsb2JqZWN0IGRpcmVjdGl2ZSB0byBtYXJrIG1ldGhvZHMgdGhhdCBhY3QgbGlrZSBkZXN0cnVjdG9ycy4KLSBBZGQgdGhlIC1mYXN0ZGlzcGF0Y2ggb3B0aW9uIHRvIGVuYWJsZSBzbWFsbGVyIGFuZCBmYXN0ZXIgb3ZlcmxvYWQgZGlzcGF0Y2gKICBtZWNoYW5pc20uCi0gVGVtcGxhdGUgc3VwcG9ydCBmb3IgJXJlbmFtZSwgJWZlYXR1cmUgYW5kICV0eXBlbWFwIGltcHJvdmVkLgotIEFkZC9kb2MgbW9yZSBkZWJ1ZyBvcHRpb25zLCBzdWNoIGFzIC1kdW1wX21vZHVsZSwgLWRlYnVnX3R5cGVtYXBzLCBldGMuCi0gVW5pZmllZCB0eXBlbWFwIGxpYnJhcnkgKFVUTCkgcG90ZW50aWFsbHkgcHJvdmlkaW5nIGNvcmUgdHlwZW1hcHMgZm9yIGFsbAogIHNjcmlwdGluZyBsYW5ndWFnZXMgYmFzZWQgb24gdGhlIHJlY2VudGx5IGV2b2x2aW5nIFB5dGhvbiB0eXBlbWFwcy4KLSBOZXcgbGFuZ3VhZ2UgbW9kdWxlOiBDb21tb24gTGlzcCB3aXRoIENGRkkuCi0gUHl0aG9uLCBSdWJ5LCBQZXJsIGFuZCBUY2wgdXNlIHRoZSBuZXcgVVRMLCBtYW55IG9sZCByZXBvcnRlZCBhbmQgaGlkZGVuIAogIGVycm9ycyB3aXRoIHR5cGVtYXBzIGFyZSBub3cgZml4ZWQuCi0gSW5pdGlhbCBKYXZhIHN1cHBvcnQgZm9yIGxhbmd1YWdlcyB1c2luZyB0aGUgVVRMIHZpYSBHQ0osIHlvdSBjYW4gbm93IHVzZSAKICBKYXZhIGxpYnJhcmllcyBpbiB5b3VyIGZhdm9yaXRlIHNjcmlwdCBsYW5ndWFnZSB1c2luZyBnY2ogKyBzd2lnLgotIFRjbCBzdXBwb3J0IGZvciBzdGQ6OndzdHJpbmcuCi0gUEhQNCBtb2R1bGUgdXBkYXRlLCBtYW55IGVycm9yIGZpeGVzIGFuZCBhY3RpdmVseSBtYWludGFpbmVkIGFnYWluLgotIEFsbGVncm9jbCBzdXBwb3J0IGZvciBDKyssIGFsc28gZW5oYW5jZWQgQyBzdXBwb3J0LgotIFJ1Ynkgc3VwcG9ydCBmb3IgYmFuZyBtZXRob2RzLgotIFJ1Ynkgc3VwcG9ydCBmb3IgdXNlciBjbGFzc2VzIGFzIG5hdGl2ZSBleGNlcHRpb25zLgotIFBlcmwgaW1wcm92ZWQgZGlzcGF0Y2hpbmcgaW4gb3ZlcmxvYWRlZCBmdW5jdGlvbnMgdmlhIHRoZSBuZXcgY2FzdCBhbmQgcmFuawogIG1lY2hhbmlzbS4KLSBQZXJsIGltcHJvdmVkIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIDUuMDA0IGFuZCBsYXRlciB0ZXN0ZWQgYW5kIHdvcmtpbmcuCi0gUHl0aG9uIGltcHJvdmVkIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIDEuNS4yIGFuZCBsYXRlciB0ZXN0ZWQgYW5kIHdvcmtpbmcuCi0gUHl0aG9uIGNhbiB1c2UgdGhlIHNhbWUgY2FzdC9yYW5rIG1lY2hhbmlzbSB2aWEgdGhlIC1jYXN0bW9kZSBvcHRpb24uCi0gUHl0aG9uIGltcGxpY2l0IGNvbnZlcnNpb24gbWVjaGFuaXNtIHNpbWlsYXIgdG8gQysrLCB2aWEgdGhlICVpbXBsaWNpdGNvbnYKICBkaXJlY3RpdmUgKHJlcGxhY2VzIGFuZCBpbXByb3ZlcyB0aGUgaW1wbGljaXQuaSBsaWJyYXJ5KS4gCi0gUHl0aG9uIHRocmVhZGluZyBzdXBwb3J0IGFkZGVkLgotIFB5dGhvbiBTVEwgc3VwcG9ydCBpbXByb3ZlZCwgaXRlcmF0b3JzIGFyZSBzdXBwb3J0ZWQgYW5kIFNUTCBjb250YWluZXJzIGNhbgogIHVzZSBub3cgdGhlIG5hdGl2ZSBQeU9iamVjdCB0eXBlLgotIFB5dGhvbiBtYW55IHBlcmZvcm1hbmNlIG9wdGlvbnMgYW5kIGltcHJvdmVtZW50cywgdHJ5IHRoZSAtTyBvcHRpb24gdG8gdGVzdAogIGFsbCBvZiB0aGVtLiBQeXRob24gcnVudGltZSBiZW5jaG1hcmtzIHNob3cgdXAgdG8gMjAgdGltZXMgYmV0dGVyIHBlcmZvcm1hbmNlCiAgY29tcGFyZWQgdG8gMS4zLjI3IGFuZCBvbGRlciB2ZXJzaW9ucy4KLSBQeXRob24gc3VwcG9ydCBmb3IgJ211bHRpLWluaGVyaXRhbmNlJyBvbiB0aGUgcHl0aG9uIHNpZGUuCi0gUHl0aG9uIHNpbXBsaWZpZWQgcHJveHkgY2xhc3Nlcywgbm93IHN3aWcgZG9lc24ndCBuZWVkIHRvIGdlbmVyYXRlIHRoZQogIGFkZGl0aW9uYWwgJ0NsYXNzUHRyJyBjbGFzc2VzLgotIFB5dGhvbiBleHRlbmRlZCBzdXBwb3J0IGZvciBzbWFydCBwb2ludGVycy4KLSBQeXRob24gYmV0dGVyIHN1cHBvcnQgZm9yIHN0YXRpYyBtZW1iZXIgdmFyaWFibGVzLgotIFB5dGhvbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGltcHJvdmVkLCBtYW55IHByb2plY3RzIHRoYXQgdXNlZCB0byB3b3JrCiAgb25seSB3aXRoICBzd2lnLTEuMy4yMSB0byBzd2lnLTEuMy4yNCBhcmUgd29ya2luZyBhZ2FpbiB3aXRoIHN3aWctMS4zLjI4Ci0gUHl0aG9uIHRlc3Qtc3VpdGUgaXMgbm93ICd2YWxncmluZGVkJyBiZWZvcmUgcmVsZWFzZSwgYW5kIHN3aWcgYWxzbwogIHJlcG9ydHMgbWVtb3J5IGxlYWtzIGR1ZSB0byBtaXNzaW5nIGRlc3RydWN0b3JzLgotIE1pbm9yIGJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIHRvIHRoZSBMdWEsIFJ1YnksIEphdmEsIEMjLCBQeXRob24sIEd1aWxlLAogIENoaWNrZW4sIFRjbCBhbmQgUGVybCBtb2R1bGVzLgoKU1dJRy0xLjMuMjcgc3VtbWFyeToKLSBGaXggYnVnIGluIGFub255bW91cyB0eXBlZGVmIHN0cnVjdHVyZXMgd2hpY2ggd2FzIGxlYWRpbmcgdG8gc3RyYW5nZSBiZWhhdmlvdXIKClNXSUctMS4zLjI2IHN1bW1hcnk6Ci0gTmV3IGxhbmd1YWdlIG1vZHVsZXM6IEx1YSwgQ0xJU1AgYW5kIENvbW1vbiBMaXNwIHdpdGggVUZGSS4KLSBCaWcgb3ZlcmhhdWwgdG8gdGhlIFBIUCBtb2R1bGUuCi0gQ2hhbmdlIHRvIHRoZSB3YXkgJ2V4dGVybicgaXMgaGFuZGxlZC4KLSBNaW5vciBidWcgZml4ZXMgc3BlY2lmaWMgdG8gIEMjLCBKYXZhLCBNb2R1bGEzLCBPY2FtbCwgQWxsZWdybyBDTCwKICBYTUwsIExpc3Agcy1leHByZXNzaW9ucywgVGNsLCBSdWJ5IGFuZCBQeXRob24gbW9kdWxlcy4KLSBPdGhlciBtaW5vciBpbXByb3ZlbWVudHMgYW5kIGJ1ZyBmaXhlcy4KClNXSUctMS4zLjI1IHN1bW1hcnk6Ci0gSW1wcm92ZWQgcnVudGltZSB0eXBlIHN5c3RlbS4gIFNwZWVkIG9mIG1vZHVsZSBsb2FkaW5nIGltcHJvdmVkIGluCiAgbW9kdWxlcyB3aXRoIGxvdHMgb2YgdHlwZXMuICBTV0lHX1JVTlRJTUVfVkVSU0lPTiBoYXMgYmVlbiBpbmNyZWFzZWQKICBmcm9tIDEgdG8gMiwgYnV0IHRoZSBBUEkgaXMgZXhhY3RseSB0aGUgc2FtZTsgb25seSBpbnRlcm5hbCBjaGFuZ2VzCiAgd2VyZSBtYWRlLgotIFRoZSBsYW5ndWFnZXMgdGhhdCB1c2UgdGhlIHJ1bnRpbWUgdHlwZSBzeXN0ZW0gbm93IHN1cHBvcnQgZXh0ZXJuYWwKICBhY2Nlc3MgdG8gdGhlIHJ1bnRpbWUgdHlwZSBzeXN0ZW0uCi0gVmFyaW91cyBpbXByb3ZlbWVudHMgd2l0aCB0eXBlbWFwcyBhbmQgdGVtcGxhdGUgaGFuZGxpbmcuCi0gRmV3ZXIgd2FybmluZ3MgaW4gZ2VuZXJhdGVkIGNvZGUuCi0gSW1wcm92ZWQgY29sb3VyIGRvY3VtZW50YXRpb24uCi0gTWFueSBDIyBtb2R1bGUgaW1wcm92ZW1lbnRzIChleGNlcHRpb24gaGFuZGxpbmcsIHByZXZlbnRpb24gb2YgZWFybHkKICBnYXJiYWdlIGNvbGxlY3Rpb24sIEMjIGF0dHJpYnV0ZXMgc3VwcG9ydCBhZGRlZCwgbW9yZSBmbGV4aWJsZSB0eXBlCiAgbWFyc2hhbGxpbmcvYXN5bW1ldHJpYyB0eXBlcy4pCi0gTWlub3IgaW1wcm92ZW1lbnRzIGFuZCBidWcgZml4ZXMgc3BlY2lmaWMgdG8gdGhlIEMjLCBKYXZhLCBUQ0wsIEd1aWxlLAogIENoaWNrZW4sIE16U2NoZW1lLCBQZXJsLCBQaHAsIFB5dGhvbiwgUnVieSBhbmQgT2NhbWwgbW9kdWxlcykuCi0gVmFyaW91cyBvdGhlciBidWcgZml4ZXMgYW5kIG1lbW9yeSBsZWFrIGZpeGVzLgoKU1dJRy0xLjMuMjQgc3VtbWFyeToKLSBJbXByb3ZlZCBlbnVtIGhhbmRsaW5nCi0gTW9yZSBydW50aW1lIGxpYnJhcnkgb3B0aW9ucwotIE1vcmUgYnVncyBmaXhlcyBmb3IgdGVtcGxhdGVzIGFuZCB0ZW1wbGF0ZSBkZWZhdWx0IGFyZ3VtZW50cywgZGlyZWN0b3JzCiAgYW5kIG90aGVyIGFyZWFzLgotIEJldHRlciBzbWFydCBwb2ludGVyIHN1cHBvcnQsIGluY2x1ZGluZyBkYXRhIG1lbWJlcnMsIHN0YXRpYyBtZW1iZXJzCiAgYW5kICVleHRlbmQuCgpTV0lHLTEuMy4yMyBzdW1tYXJ5OgotIEltcHJvdmVkIHN1cHBvcnQgZm9yIGNhbGxiYWNrcwotIFB5dGhvbiBkb2NzdHJpbmcgc3VwcG9ydCBhbmQgYmV0dGVyIGVycm9yIGhhbmRsaW5nCi0gQysrIGRlZmF1bHQgYXJndW1lbnQgc3VwcG9ydCBmb3IgSmF2YSBhbmQgQyMgYWRkZWQuCi0gSW1wcm92ZWQgYysrIGRlZmF1bHQgYXJndW1lbnQgc3VwcG9ydCBmb3IgdGhlIHNjcmlwdGluZyBsYW5ndWFnZXMgcGx1cwogIG9wdGlvbiB0byB1c2Ugb3JpZ2luYWwgKGNvbXBhY3QpIGRlZmF1bHQgYXJndW1lbnRzLgotICVmZWF0dXJlIGFuZCAlaWdub3JlLyVyZW5hbWUgYnVnIGZpeGVzIGFuZCBtb2RzIC0gdGhleSBtaWdodCBuZWVkIGRlZmF1bHQKICBhcmd1bWVudHMgc3BlY2lmaWVkIHRvIG1haW50YWluIGNvbXBhdGlibGUgYmVoYXZpb3VyIHdoZW4gdXNpbmcgdGhlIG5ldwogIGRlZmF1bHQgYXJndW1lbnRzIHdyYXBwaW5nLgotIFJ1bnRpbWUgbGlicmFyeSBjaGFuZ2VzOiBSdW50aW1lIGNvZGUgY2FuIG5vdyBleGlzdCBpbiBtb3JlIHRoYW4gb25lIG1vZHVsZQogIGFuZCBzbyBuZWVkIG5vdCBiZSBjb21waWxlZCBpbnRvIGp1c3Qgb25lIG1vZHVsZQotIEZ1cnRoZXIgaW1wcm92ZWQgc3VwcG9ydCBmb3IgdGVtcGxhdGVzIGFuZCBuYW1lc3BhY2VzCi0gT3ZlcmxvYWRlZCB0ZW1wbGF0ZWQgZnVuY3Rpb24gc3VwcG9ydCBhZGRlZAotIE1vcmUgcG93ZXJmdWwgZGVmYXVsdCB0eXBlbWFwcyAobWl4ZWQgZGVmYXVsdCB0eXBlbWFwcykKLSBTb21lIGltcG9ydGFudCAlZXh0ZW5kIGFuZCBkaXJlY3RvciBjb2RlIGJ1ZyBmaXhlcwotIEd1aWxlIG5vdyBkZWZhdWx0cyB0byB1c2luZyBTQ00gQVBJLiAgVGhlIG9sZCBpbnRlcmZhY2UgY2FuIGJlIG9idGFpbmVkIGJ5CiAgdGhlIC1naCBvcHRpb24uCi0gVmFyaW91cyBtaW5vciBpbXByb3ZlbWVudHMgYW5kIGJ1ZyBmaXhlcyBmb3IgQyMsIENoaWNrZW4sIEd1aWxlLCBKYXZhLCAKICBNelNjaGVtZSwgUGVybCwgUHl0aG9uIGFuZCBSdWJ5Ci0gSW1wcm92ZWQgZGVwZW5kZW5jaWVzIGdlbmVyYXRpb24gZm9yIGNvbnN0cnVjdGluZyBNYWtlZmlsZXMuCgpTV0lHLTEuMy4yMiBzdW1tYXJ5OgotIEltcHJvdmVkIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgdHJhbnNsYXRpb24gb2YgQyBlcnJvcnMgb3IgQysrCiAgZXhjZXB0aW9ucyBpbnRvIHRhcmdldCBsYW5ndWFnZSBleGNlcHRpb25zLgotIEltcHJvdmVkIGVudW0gc3VwcG9ydCwgbWFwcGluZyB0byBidWlsdC1pbiBKYXZhIDEuNSBlbnVtcyBhbmQgQyMKICBlbnVtcyBvciB0aGUgdHlwZXNhZmUgZW51bSBwYXR0ZXJuIGZvciB0aGVzZSB0d28gbGFuZ3VhZ2VzLgotIFB5dGhvbiAtIG11Y2ggYmV0dGVyIFNUTCBzdXBwcG9ydCBhbmQgc3VwcG9ydCBmb3Igc3RkOjp3c3RyaW5nLAogIHdjaGFyX3QgYW5kIEZJTEUgKi4KLSBJbml0aWFsIHN1cHBvcnQgZm9yIE1vZHVsYTMgYW5kIEFsbGVncm8gQ0wuCi0gNjQgYml0IFRDTCBzdXBwb3J0LgotIEphdmEgYW5kIEMjJ3MgcHJveHkgY2xhc3NlcyBhcmUgbm93IG5lYXJseSAxMDAlIGdlbmVyYXRlZCBmcm9tCiAgdHlwZW1hcHMgYW5kL29yIGZlYXR1cmVzIGZvciBmaW5lciBjb250cm9sIG9uIHRoZSBnZW5lcmF0ZWQgY29kZS4KLSBTV0lHIHJ1bnRpbWUgbGlicmFyeSBzdXBwb3J0IGRlcHJlY2F0aW9uLgotIEltcHJvdmVkIGRvY3VtZW50YXRpb24uIFNXSUcgbm93IGFkZGl0aW9uYWxseSBwcm92aWRlcyBkb2N1bWVudGF0aW9uCiAgaW4gdGhlIGZvcm0gb2YgYSBzaW5nbGUgSFRNTCBwYWdlIGFzIHdlbGwgYXMgYSBwZGYgZG9jdW1lbnQuCi0gRW5oYW5jZWQgQysrIGZyaWVuZCBkZWNsYXJhdGlvbiBzdXBwb3J0LgotIEJldHRlciBzdXBwb3J0IGZvciByZWZlcmVuY2UgY291bnRlZCBjbGFzc2VzLgotIFZhcmlvdXMgJWZyYWdtZW50IGltcHJvdmVtZW50cy4KLSBSUE0gZml4ZXMuCi0gVmFyaW91cyBtaW5vciBpbXByb3ZlbWVudHMgYW5kIGJ1ZyBmaXhlcyBmb3IgQyMsIENoaWNrZW4sIEd1aWxlLCBKYXZhLCAKICBNelNjaGVtZSwgUGVybCwgUGhwLCBQeXRob24sIFJ1YnkgYW5kIFhNTC4KCgpUaGUgU1dJRy0xLjMueCBkZXZlbG9wbWVudCByZWxlYXNlcyBvZmZlciBhIGh1Z2UgbnVtYmVyIG9mIGltcHJvdmVtZW50cwpvdmVyIG9sZGVyIFNXSUctMS4xIHJlbGVhc2VzLiBUaGVzZSBpbXByb3ZlbWVudHMgaW5jbHVkZToKCiAgIC0gU3VwcG9ydCBmb3IgQysrIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGFuZCBtZXRob2RzLgogICAtIFN1cHBvcnQgZm9yIEMrKyBzbWFydCBwb2ludGVycy4KICAgLSBTdXBwb3J0IGZvciBDKysgbmFtZXNwYWNlcwogICAtIFN1cHBvcnQgZm9yIEMrKyBvdmVybG9hZGVkIG9wZXJhdG9ycy4KICAgLSBTdXBwb3J0IGZvciBDKysgdGVtcGxhdGVzIGluY2x1ZGluZyBtZW1iZXIgdGVtcGxhdGVzLgogICAtIFN1cHBvcnQgZm9yIEMrKyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBhbmQgcGFydGlhbCBzcGVjaWFsaXphdGlvbi4KICAgLSBTdXBwb3J0IGZvciBDKysgZnJpZW5kIGRlY2xhcmF0aW9ucy4KICAgLSBQYXJzaW5nIHN1cHBvcnQgZm9yIGFsbW9zdCBhbGwgQy9DKysgZGF0YXR5cGVzLgogICAtIEF1dG9tYXRpYyB0cmFuc2xhdGlvbiBvZiBDKysgZXhjZXB0aW9uIHNwZWNpZmllcnMuCiAgIC0gQ29udHJhY3Qgc3VwcG9ydC4KICAgLSBBIGZ1bGwgQyBwcmVwcm9jZXNzb3Igd2l0aCBtYWNybyBleHBhbnNpb24uIEluY2x1ZGVzIEM5OSB2YXJpYWRpYyBtYWNyb3MuCiAgIC0gSmF2YSwgUnVieSwgTXpTY2hlbWUsIFBIUDQsIE9DQU1MLCBQaWtlLCBDSElDS0VOLCBYTUwgYW5kIEMjIG1vZHVsZXMKICAgICBhZGRlZC4gIEd1aWxlIG1vZHVsZSBpbXByb3ZlZC4KICAgLSBEaXJlY3RvciBzdXBwb3J0IC0gdXBjYWxscyBmb3IgQysrIHZpcnR1YWwgZnVuY3Rpb25zIGludG8gdGhlIHRhcmdldCAKICAgICBsYW5ndWFnZSBwcm94eSBjbGFzcy4KICAgLSBCZXR0ZXIgY29kZSBnZW5lcmF0aW9uLiAgIFNXSUcgaXMgYmV0dGVyIGFibGUgdG8gbWFrZSBvcHRpbWl6YXRpb25zCiAgICAgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgbGVzcyBjb2RlLgogICAtIFRlc3RpbmcgZnJhbWV3b3JrIHBhcnQgb2YgdGhlIGRpc3RyaWJ1dGlvbiAoIm1ha2UgLWsgY2hlY2siIHN1cHBvcnQpLgogICAtIEEgbG90IG9mIG1pbm9yIGJ1ZyBmaXhlcyBhbmQgY2xlYW51cC4KICAgLSBCZXR0ZXIgV2luZG93cyBzdXBwb3J0LgoKSWYgeW91IHVzZWQgU1dJRy0xLjEsIGEgbnVtYmVyIG9mIG9sZCBmZWF0dXJlcyBhcmUgbWlzc2luZyBmcm9tIFNXSUctMS4zLgoKICAgLSBUaGUgU1dJRy0xLjEgZG9jdW1lbnRhdGlvbiBzeXN0ZW0gaXMgZ29uZSBhbmQgaGFzbid0IGJlZW4KICAgICByZXBsYWNlZCB5ZXQuICBUaGlzIGlzIG9uIHRoZSBsb25nLXRlcm0gdG8tZG8gbGlzdC4KCiAgIC0gVGhlIFRjbDcueCBhbmQgUGVybDQgbW9kdWxlcyBhcmUgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyCiAgICAgaW5jbHVkZWQuCgogICAtIEEgd2lkZSB2YXJpZXR5IG9mIG9sZCBTV0lHIGNvbW1hbmQtbGluZSBvcHRpb25zIGFuZAogICAgIG9ic2N1cmUgZmVhdHVyZXMgYXJlIGdvbmUuCgogICAtIEEgbG90IG9mIG9sZCAlcHJhZ21hIGRpcmVjdGl2ZXMgYW5kIG9ic2N1cmUgdW5kb2N1bWVudGVkCiAgICAgY3VzdG9taXphdGlvbiBmZWF0dXJlcyBoYXZlIGJlZW4gZWxpbWluYXRlZC4gIFRoZSBzYW1lCiAgICAgZnVuY3Rpb25hbGl0eSBpcyBub3cgYXZhaWxhYmxlIHRocm91Z2ggb3RoZXIgbWVhbnMuCgogICAtIE9iamVjdGl2ZSBDIHN1cHBvcnQgZG9lc24ndCB3b3JrIHJpZ2h0IG5vdy4gIE5vIEVUQSBhcyB0bwogICAgIHdoZW4gaXQgd2lsbCByZXR1cm4uCgpBbHRob3VnaCB3ZSBhcmUgbWFraW5nIHNvbWUgYXR0ZW1wdCB0byBwcmVzZXJ2ZSBiYWNrd2FyZHMKY29tcGF0aWJpbGl0eSB3aXRoIGludGVyZmFjZXMgd3JpdHRlbiBmb3IgU1dJRy0xLjEsIFNXSUctMS4zCmluY29ycG9yYXRlcyBhIG51bWJlciBvZiB2ZXJ5IHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbnMgdG8gdHlwZQpoYW5kbGluZywgdHlwZW1hcHMsIGFuZCB3cmFwcGVyIGNvZGUgZ2VuZXJhdGlvbi4gIFRoZXJlZm9yZSwgaWYgeW91CmFyZSBtYWtpbmcgZXh0ZW5zaXZlIHVzZSBvZiBhZHZhbmNlZCBTV0lHIGZlYXR1cmVzLCBpbnRlcmZhY2VzIHdyaXR0ZW4KZm9yIFNXSUctMS4xIG1heSBub3Qgd29yay4gIFdlIGFwb2xvZ2l6ZSBmb3IgdGhlIGluY29udmVuaWVuY2UsIGJ1dAp0aGVzZSBjaGFuZ2VzIGFyZSBuZWVkZWQgaW4gb3JkZXIgdG8gZml4IGEgbnVtYmVyIG9mIGFubm95aW5nCiJmZWF0dXJlcyIgaW4gU1dJRy0xLjEuICBIb3BlZnVsbHkgdGhlIGxpc3Qgb2YgbmV3IGZlYXR1cmVzIHdpbGwKcHJvdmlkZSBlbm91Z2ggaW5jZW50aXZlIGZvciB5b3UgdG8gdXBncmFkZSAoYW5kIHRoYXQgdGhlCm1vZGlmaWNhdGlvbnMgdG8geW91ciBpbnRlcmZhY2VzIHdpbGwgb25seSBiZSBtaW5vcikuCgpJbiBhZGRpdGlvbiwgU1dJRy0xLjMgbWFrZXMgbm8gYXR0ZW1wdCB0byBiZSBjb21wYXRpYmxlIHdpdGggU1dJRy0xLjEgYXQKdGhlIEMrKyBBUEkgbGV2ZWwgc28gbGFuZ3VhZ2UgbW9kdWxlcyB3cml0dGVuIGZvciBTV0lHLTEuMSB3aWxsIG1vc3QKZGVmaW5pdGVseSBub3Qgd29yayB3aXRoIHRoaXMgcmVsZWFzZS4KClNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBvZiB0aGUgU1dJR19WRVJTSU9OIHByZXByb2Nlc3NvcgpzeW1ib2wgaWYgeW91IGhhdmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZXMgYW5kIG5lZWQgdG8gdXNlIG1vcmUKdGhhbiBvbmUgdmVyc2lvbiBvZiBTV0lHLgoKVGhlIGZpbGVzIE5FVyBhbmQgQ0hBTkdFUyBkZXNjcmliZSBpbiBzb21lIGRldGFpbCBhbGwgb2YgdGhlIGltcG9ydGFudApjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHN5c3RlbS4gIEV4cGVyaWVuY2VkIHVzZXJzIHdvdWxkIGJlCndlbGwgYWR2aXNlZCB0byByZWFkIHRoaXMuCgpSZWxlYXNlIE5vdGVzCj09PT09PT09PT09PT0KUGxlYXNlIHNlZSB0aGUgQ0hBTkdFUyBmaWxlcyBmb3IgYSBkZXRhaWxlZCBsaXN0IG9mIGJ1ZyBmaXhlcyBhbmQKbmV3IGZlYXR1cmVzLiBBIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgaXMgaW5jbHVkZWQgaW4gdGhpcyBSRUFETUUgZmlsZS4KCldpbmRvd3MgSW5zdGFsbGF0aW9uCj09PT09PT09PT09PT09PT09PT09ClBsZWFzZSBzZWUgdGhlIERvYy9NYW51YWwvV2luZG93cy5odG1sIGZpbGUgZm9yIGluc3RydWN0aW9ucyBvbiBpbnN0YWxsaW5nClNXSUcgb24gV2luZG93cyBhbmQgcnVubmluZyB0aGUgZXhhbXBsZXMuIFRoZSBXaW5kb3dzIGRpc3RyaWJ1dGlvbiBpcwpjYWxsZWQgc3dpZ3dpbiBhbmQgaW5jbHVkZXMgYSBwcmVidWlsdCBTV0lHIGV4ZWN1dGFibGUsIHN3aWcuZXhlLCBpbmNsdWRlZCBpbgp0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcyBSRUFETUUgZmlsZS4gT3RoZXJ3aXNlIGl0IGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMKdGhlIG1haW4gU1dJRyBkaXN0cmlidXRpb24uIFRoZXJlIGlzIG5vIG5lZWQgdG8gZG93bmxvYWQgYW55dGhpbmcgZWxzZS4KClVuaXggSW5zdGFsbGF0aW9uCj09PT09PT09PT09PT09PT09CllvdSBtdXN0IHVzZSBHTlUgYG1ha2UnIHRvIGJ1aWxkIFNXSUcuCgpodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbWFrZS8KClRvIGJ1aWxkIGFuZCBpbnN0YWxsIFNXSUcsIHNpbXBseSB0eXBlIHRoZSBmb2xsb3dpbmc6CgogICAgICUgLi9jb25maWd1cmUKICAgICAlIG1ha2UKICAgICAlIG1ha2UgaW5zdGFsbAoKQnkgZGVmYXVsdCBTV0lHIGluc3RhbGxzIGl0c2VsZiBpbiAvdXNyL2xvY2FsLiAgSWYgeW91IG5lZWQgdG8gaW5zdGFsbCBTV0lHIGluCmEgZGlmZmVyZW50IGxvY2F0aW9uIG9yIGluIHlvdXIgaG9tZSBkaXJlY3RvcnksIHVzZSB0aGUgLS1wcmVmaXggb3B0aW9uCnRvIC4vY29uZmlndXJlLiAgRm9yIGV4YW1wbGU6CgogICAgICUgLi9jb25maWd1cmUgLS1wcmVmaXg9L2hvbWUveW91cm5hbWUvcHJvamVjdHMKICAgICAlIG1ha2UKICAgICAlIG1ha2UgaW5zdGFsbAoKTm90ZTogdGhlIGRpcmVjdG9yeSBnaXZlbiB0byAtLXByZWZpeCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGhuYW1lLiAgRG8gKk5PVCogdXNlCnRoZSB+IHNoZWxsLWVzY2FwZSB0byByZWZlciB0byB5b3VyIGhvbWUgZGlyZWN0b3J5LiAgU1dJRyB3b24ndCB3b3JrIHByb3Blcmx5CmlmIHlvdSBkbyB0aGlzLgoKVGhlIGZpbGUgSU5TVEFMTCBkZXRhaWxzIG1vcmUgYWJvdXQgdXNpbmcgY29uZmlndXJlLiBBbHNvIHRyeQoKICAgICAlIC4vY29uZmlndXJlIC0taGVscC4KClRoZSBjb25maWd1cmUgc2NyaXB0IHdpbGwgYXR0ZW1wdCB0byBsb2NhdGUgdmFyaW91cyBwYWNrYWdlcyBvbiB5b3VyIG1hY2hpbmUKaW5jbHVkaW5nIFRjbCwgUGVybDUsIFB5dGhvbiBhbmQgYWxsIHRoZSBvdGhlciB0YXJnZXQgbGFuZ3VhZ2VzIHRoYXQgU1dJRwp1c2VzLiAgRG9uJ3QgcGFuaWMgaWYgeW91IGdldCAnbm90IGZvdW5kJyBtZXNzYWdlcy0tU1dJRyBkb2VzIG5vdCBuZWVkIHRoZXNlCnBhY2thZ2VzIHRvIGNvbXBpbGUgb3IgcnVuLiAgIFRoZSBjb25maWd1cmUgc2NyaXB0IGlzIGFjdHVhbGx5IGxvb2tpbmcgZm9yCnRoZXNlIHBhY2thZ2VzIHNvIHRoYXQgeW91IGNhbiB0cnkgb3V0IHRoZSBTV0lHIGV4YW1wbGVzIGNvbnRhaW5lZAppbiB0aGUgJ0V4YW1wbGVzJyBkaXJlY3Rvcnkgd2l0aG91dCBoYXZpbmcgdG8gaGFjayBNYWtlZmlsZXMuCgpQbGVhc2Ugc2VlIHRoZSBEb2N1bWVudGF0aW9uIHNlY3Rpb24gYmVsb3cgb24gaW5zdGFsbGluZyBkb2N1bWVudGF0aW9uIGFzCm5vbmUgaXMgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuCgpTV0lHIHVzZWQgdG8gaW5jbHVkZSBhIHNldCBvZiBydW50aW1lIGxpYnJhcmllcyBmb3Igc29tZSBsYW5ndWFnZXMgZm9yIHdvcmtpbmcKd2l0aCBtdWx0aXBsZSBtb2R1bGVzLiBUaGVzZSBhcmUgbm8gbG9uZ2VyIGJ1aWx0IGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHN0YWdlLgpIb3dldmVyLCB1c2VycyBjYW4gYnVpbGQgdGhlbSBqdXN0IGxpa2UgYW55IHdyYXBwZXIgbW9kdWxlIGFzIGRlc2NyaWJlZCBpbgp0aGUgZG9jdW1lbnRhdGlvbiwgRG9jL01hbnVhbC9Nb2R1bGVzLmh0bWwuIFRoZSBDSEFOR0VTIGZpbGUgYWxzbyBsaXN0cyBzb21lCmV4YW1wbGVzIHdoaWNoIGJ1aWxkIHRoZSBydW50aW1lIGxpYnJhcnkuCgpOb3RlczoKCigxKSBJZiB5b3UgY2hlY2tlZCB0aGUgY29kZSBvdXQgdmlhIFNWTiwgeW91IHdpbGwgaGF2ZSB0byBydW4gLi9hdXRvZ2VuLnNoCiAgICBiZWZvcmUgdHlwaW5nICdjb25maWd1cmUnLiAgICBJbiBhZGRpdGlvbiwgYSBmdWxsIGJ1aWxkIG9mIFNXSUcgcmVxdWlyZXMKICAgIHRoZSB1c2Ugb2YgYmlzb24uCgpNYWNpbnRvc2ggT1MgWCBJbnN0YWxsYXRpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PQpTV0lHIGlzIGtub3duIHRvIHdvcmsgb24gdmFyaW91cyBmbGF2b3JzIG9mIE9TIFguICBGb2xsb3cgdGhlIFVuaXggaW5zdGFsbGF0aW9uCmluc3RydWN0aW9ucyBhYm92ZS4gICBIb3dldmVyLCBhcyBvZiB0aGlzIHdyaXRpbmcsIHRoZXJlIGlzIHN0aWxsIGdyZWF0IGRlYWwgb2YKaW5jb25zaXN0ZW5jeSB3aXRoIGhvdyBzaGFyZWQgbGliYXJpZXMgYXJlIGhhbmRsZWQgYnkgdmFyaW91cyBzY3JpcHRpbmcgbGFuZ3VhZ2VzCm9uIE9TIFguICAgV2UndmUgdHJpZWQgdG8gcmVzb2x2ZSB0aGVzZSBkaWZmZXJlbmNlcyB0byB0aGUgZXh0ZW50IG9mIG91ciBrbm93bGVkZ2UuClRoaXMgcmVsZWFzZSB3YXMgbW9zdCByZWNlbnRseSBjaGVja2VkIHdpdGggdGhlIFBhbnRoZXIgcmVsZWFzZSBvZiBPUyBYIG9uIGEgCk1hY2ludG9zaCBHNSBzeXN0ZW0uICAgWW91ciBtaWxlYWdlIG1heSB2YXJ5LgoKVXNlcnMgb2YgT1MgWCBzaG91bGQgYmUgYXdhcmUgdGhhdCBEYXJ3aW4gaGFuZGxlcyBzaGFyZWQgbGlicmFyaWVzIGFuZCBsaW5raW5nIGluIAphIHJhZGljYWxseSBkaWZmZXJlbnQgd2F5IHRoYW4gbW9zdCBVbml4IHN5c3RlbXMuICBJbiBvcmRlciB0byB0ZXN0IFNXSUcgYW5kIHJ1bgp0aGUgZXhhbXBsZXMsIFNXSUcgY29uZmlndXJlcyBpdHNlbGYgdG8gdXNlIGZsYXQgbmFtZXNwYWNlcyBhbmQgdG8gYWxsb3cgdW5kZWZpbmVkIApzeW1ib2xzICgtZmxhdF9uYW1lc3BhY2UgLXVuZGVmaW5lZCBzdXBwcmVzcykuICBUaGlzIG1vc3RseSBjbG9zZWx5IGZvbGxvd3MgdGhlIFVuaXggCm1vZGVsIGFuZCBtYWtlcyBpdCBtb3JlIGxpa2VseSB0aGF0IHRoZSBTV0lHIGV4YW1wbGVzIHdpbGwgd29yayB3aXRoIHdoYXRldmVyIAppbnN0YWxsYXRpb24gb2Ygc29mdHdhcmUgeW91IG1pZ2h0IGhhdmUuICAgSG93ZXZlciwgdGhpcyBpcyBnZW5lcmFsbHkgbm90IHRoZSByZWNvbW1lbmRlZAp0ZWNobmlxdWUgZm9yIGJ1aWxkaW5nIGxhcmdlciBleHRlbnNpb24gbW9kdWxlcy4gIEluc3RlYWQsIHlvdSBzaG91bGQgdXRpbGl6ZQpEYXJ3aW4ncyB0d28tbGV2ZWwgbmFtZXNwYWNlcy4gIFNvbWUgZGV0YWlscyBhYm91dCB0aGlzIGNhbiBiZSBmb3VuZCBoZXJlCgpodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL1JlbGVhc2VOb3Rlcy9EZXZlbG9wZXJUb29scy9Ud29MZXZlbE5hbWVzcGFjZXMuaHRtbAoKTmVlZGxlc3MgdG8gc2F5LCB5b3UgbWlnaHQgaGF2ZSB0byBleHBlcmltZW50IGEgYml0IHRvIGdldCB0aGluZ3Mgd29ya2luZyBhdCBmaXJzdC4KClRlc3RpbmcKPT09PT09PQpJZiB5b3Ugd2FudCB0byB0ZXN0IFNXSUcgYmVmb3JlIGluc3RhbGxhdGlvbiwgdHlwZSB0aGUgZm9sbG93aW5nOgoKICAgICUgbWFrZSAtayBjaGVjawoKJ21ha2UgLWsgY2hlY2snIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBvZiB0aGUgdGFyZ2V0IGxhbmd1YWdlcyB0byBiZQppbnN0YWxsZWQuICBJZiBpdCBmYWlscywgaXQgbWF5IG1lYW4gdGhhdCB5b3UgaGF2ZSBhbiB1bmluc3RhbGxlZApsYW5ndWFnZSBtb2R1bGUgb3IgdGhhdCB0aGUgZmlsZSAnRXhhbXBsZXMvTWFrZWZpbGUnIGhhcyBiZWVuCmluY29ycmVjdGx5IGNvbmZpZ3VyZWQuICBJdCBtYXkgYWxzbyBmYWlsIGR1ZSB0byBjb21waWxlciBpc3N1ZXMgc3VjaAphcyBicm9rZW4gQysrIGNvbXBpbGVyLiAgRXZlbiBpZiAnbWFrZSAtayBjaGVjaycgZmFpbHMsIHRoZXJlIGlzIGEKcHJldHR5IGdvb2QgY2hhbmNlIFNXSUcgc3RpbGwgd29ya3MgY29ycmVjdGx5LS0teW91IHdpbGwganVzdCBoYXZlIHRvCm1lc3MgYXJvdW5kIHdpdGggb25lIG9mIHRoZSBleGFtcGxlcyBhbmQgc29tZSBtYWtlZmlsZXMgdG8gZ2V0IGl0IHRvIHdvcmsuCgpUaGUgdGVzdGluZyBzdWl0ZSBleGVjdXRlZCBieSAnbWFrZSAtayBjaGVjaycgaXMgZGVzaWduZWQgdG8gc3RyZXNzLXRlc3QKbWFueSBwYXJ0cyBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW5jbHVkaW5nIG9ic2N1cmUgY29ybmVyIGNhc2VzLiBJZiBzb21lCm9mIHRoZXNlIHRlc3RzIGZhaWwgb3IgZ2VuZXJhdGUgd2FybmluZyBtZXNzYWdlcywgdGhlcmUgaXMgbm8gcmVhc29uIGZvcgphbGFybS0tLXRoZSB0ZXN0IG1heSBiZSByZWxhdGVkIHRvIHNvbWUgbmV3IFNXSUcgZmVhdHVyZSBvciBhIGRpZmZpY3VsdCBidWcKdGhhdCB3ZSdyZSB0cnlpbmcgdG8gcmVzb2x2ZS4gIENoYW5jZXMgYXJlIHRoYXQgU1dJRyB3aWxsIHdvcmsganVzdCBmaW5lCmZvciB5b3UuIE5vdGUgdGhhdCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIENQVS9jb3JlLCB0aGVuIHlvdSBjYW4gdXNlCnBhcmFsbGVsIG1ha2UgY2FuIGJlIHVzZWQgdG8gc3BlZWQgdXAgdGhlIGNoZWNrIGFzIGl0IGRvZXMgdGFrZSBxdWl0ZSBzb21lCnRpbWUgdG8gcnVuLCBmb3IgZXhhbXBsZToKCiAgICAlIG1ha2UgLWoyIC1rIGNoZWNrCgpBbHNvLCBTV0lHJ3Mgc3VwcG9ydCBmb3IgQysrIGlzIHN1ZmZpY2llbnRseSBhZHZhbmNlZCB0aGF0IGNlcnRhaW4KdGVzdHMgbWF5IGZhaWwgb24gb2xkZXIgQysrIGNvbXBpbGVycyAoZm9yIGluc3RhbmNlIGlmIHlvdXIgY29tcGlsZXIKZG9lcyBub3Qgc3VwcG9ydCBtZW1iZXIgdGVtcGxhdGVzKS4gICBUaGVzZSBlcnJvcnMgYXJlIGhhcm1sZXNzIGlmIHlvdQpkb24ndCBpbnRlbmQgdG8gdXNlIHRoZXNlIGZlYXR1cmVzIGluIHlvdXIgb3duIHByb2dyYW1zLgoKTm90ZTogVGhlIHRlc3Qtc3VpdGUgY3VycmVudGx5IGNvbnRhaW5zIGFyb3VuZCAyNTAgdGVzdHMuICBJZiB5b3UKaGF2ZSBtYW55IGRpZmZlcmVudCB0YXJnZXQgbGFuZ3VhZ2VzIGluc3RhbGxlZCBhbmQgYSBzbG93IG1hY2hpbmUsIGl0Cm1pZ2h0IHRha2UgbW9yZSB0aGFuIGFuIGhvdXIgdG8gcnVuIHRoZSB0ZXN0LXN1aXRlLgoKRXhhbXBsZXMKPT09PT09PT0KVGhlIEV4YW1wbGVzIGRpcmVjdG9yeSBjb250YWlucyBhIHZhcmlldHkgb2YgZXhhbXBsZXMgb2YgdXNpbmcgU1dJRwphbmQgaXQgaGFzIHNvbWUgYnJvd3NhYmxlIGRvY3VtZW50YXRpb24uICBTaW1wbHkgcG9pbnQgeW91ciBicm93c2VyIHRvCnRoZSBmaWxlICJFeGFtcGxlL2luZGV4Lmh0bWwiLgoKVGhlIEV4YW1wbGVzIGRpcmVjdG9yeSBhbHNvIGluY2x1ZGVzIFZpc3VhbCBDKysgcHJvamVjdCAoLmRzcCkgZmlsZXMgZm9yCmJ1aWxkaW5nIHNvbWUgb2YgdGhlIGV4YW1wbGVzIG9uIFdpbmRvd3MuCgpLbm93biBJc3N1ZXMKPT09PT09PT09PT09ClRoZXJlIGFyZSBtaW5vciBrbm93biBidWdzLCBkZXRhaWxzIG9mIHdoaWNoIGFyZSBpbiB0aGUgYnVnIHRyYWNrZXIsIHNlZQpodHRwOi8vd3d3LnN3aWcub3JnL2J1Z3MuaHRtbC4KClRyb3VibGVzaG9vdGluZwo9PT09PT09PT09PT09PT0KSW4gb3JkZXIgdG8gb3BlcmF0ZSBjb3JyZWN0bHksIFNXSUcgcmVsaWVzIHVwb24gYSBzZXQgb2YgbGlicmFyeQpmaWxlcy4gIElmIGFmdGVyIGJ1aWxkaW5nIFNXSUcsIHlvdSBnZXQgZXJyb3IgbWVzc2FnZXMgbGlrZSB0aGlzLAoKICAgICUgc3dpZyBmb28uaQogICAgOjEuIFVuYWJsZSB0byBmaW5kICdzd2lnLnN3ZycKICAgIDozLiBVbmFibGUgdG8gZmluZCAndGNsOC5zd2cnCgppdCBtZWFucyB0aGF0IFNXSUcgaGFzIGVpdGhlciBiZWVuIGluY29ycmVjdGx5IGNvbmZpZ3VyZWQgb3IKaW5zdGFsbGVkLiAgVG8gZml4IHRoaXM6CgogICAgMS4gIE1ha2Ugc3VyZSB5b3UgcmVtZW1iZXJlZCB0byBkbyBhICdtYWtlIGluc3RhbGwnIGFuZCB0aGF0CiAgICAgICAgdGhlIGluc3RhbGxhdGlvbiBhY3R1YWxseSB3b3JrZWQuICBNYWtlIHN1cmUgeW91IGhhdmUKICAgICAgICB3cml0ZSBwZXJtaXNzaW9uIG9uIHRoZSBpbnN0YWxsIGRpcmVjdG9yeS4KCiAgICAyLiAgSWYgdGhhdCBkb2Vzbid0IHdvcmssIHR5cGUgJ3N3aWcgLXN3aWdsaWInIHRvIGZpbmQgb3V0CiAgICAgICAgd2hlcmUgU1dJRyB0aGlua3MgaXRzIGxpYnJhcnkgaXMgbG9jYXRlZC4KCiAgICAzLiAgSWYgdGhlIGxvY2F0aW9uIGlzIG5vdCB3aGVyZSB5b3UgZXhwZWN0LCBwZXJoYXBzCiAgICAgICAgeW91IHN1cHBsaWVkIGEgYmFkIG9wdGlvbiB0byBjb25maWd1cmUuICBVc2UKICAgICAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD1wYXRobmFtZSB0byBzZXQgdGhlIFNXSUcgaW5zdGFsbAogICAgICAgIGxvY2F0aW9uLiAgIEFsc28sIG1ha2Ugc3VyZSB5b3UgZG9uJ3QgaW5jbHVkZSBhIHNoZWxsCiAgICAgICAgZXNjYXBlIGNoYXJhY3RlciBzdWNoIGFzIH4gd2hlbiB5b3Ugc3BlY2lmeSB0aGUgcGF0aC4KCiAgICA0LiAgVGhlIFNXSUcgbGlicmFyeSBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHRoZSBTV0lHX0xJQgogICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlLiAgSG93ZXZlciwgeW91IHJlYWxseSBzaG91bGRuJ3QKICAgICAgICBoYXZlIHRvIGRvIHRoaXMuCgpJZiB5b3UgYXJlIGhhdmluZyBvdGhlciB0cm91YmxlcywgeW91IG1pZ2h0IGxvb2sgYXQgdGhlIFNXSUcgV2lraSBhdApodHRwOi8vd3d3LmRhYmVhei5jb20vY2dpLWJpbi93aWtpLnBsLgoKRG9jdW1lbnRhdGlvbgo9PT09PT09PT09PT09ClRoZSBEb2MvTWFudWFsIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbW9zdCByZWNlbnQgc2V0IG9mIHVwZGF0ZWQKZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyByZWxlYXNlLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgaW4KdGhyZWUgZGlmZmVyZW50IGZvcm1hdHMsIGVhY2ggb2Ygd2hpY2ggY29udGFpbnMgaWRlbnRpY2FsIGNvbnRlbnQuClRoZXNlIGZvcm1hdCBhcmUsIHBkZiAoU1dJR0RvY3VtZW50YXRpb24ucGRmKSwgc2luZ2xlCnBhZ2UgaHRtbCAoRG9jL01hbnVhbC9TV0lHRG9jdW1lbnRhdGlvbi5odG1sKSBvciBtdWx0aXBsZSBwYWdlIGh0bWwKKG90aGVyIGZpbGVzIGluIERvYy9NYW51YWwpLiBQbGVhc2Ugc2VsZWN0IHlvdXIgY2hvc2VuIGZvcm1hdCBhbmQKY29weS9pbnN0YWxsIHRvIHdoZXJldmVyIHRha2VzIHlvdXIgZmFuY3kuCgpUaGlzIGlzIGEgZGV2ZWxvcG1lbnQgcmVsZWFzZSBhbmQgdGhlIGRvY3VtZW50YXRpb24gaXMgbGFyZ2VseSwgYnV0IApub3QgZW50aXJlbHkgdXAgdG8gZGF0ZS4gIFdlIGFyZSB3b3JraW5nIG9uIGl0LCBidXQgdGhlcmUKd2FzIGEgbG90IG9mIG9sZCBkb2N1bWVudGF0aW9uIGFuZCBpdCBpcyB0YWtpbmcgc29tZSB0aW1lIHRvCnVwZGF0ZSBhbmQgY29tcGxldGUuIFBsZWFzZSBiZSBwYXRpZW50IG9yIHZvbHVudGVlciB0byBoZWxwLgoKVGhlcmUgaXMgc29tZSB0ZWNobmljYWwgZGV2ZWxvcGVyIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGluIHRoZQpEb2MvRGV2ZWwgc3ViZGlyZWN0b3J5LiAgVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdXAtdG8tZGF0ZSwgYnV0IGl0CmhhcyBzb21lIGluZm9ybWF0aW9uIG9uIFNXSUcgaW50ZXJuYWxzLgoKUGFydGljaXBhdGUhCj09PT09PT09PT09PQpQbGVhc2UgcmVwb3J0IGFueSBlcnJvcnMgYW5kIHN1Ym1pdCBwYXRjaGVzIChpZiBwb3NzaWJsZSkhICBXZSBvbmx5CmhhdmUgYWNjZXNzIHRvIGEgbGltaXRlZCB2YXJpZXR5IG9mIGhhcmR3YXJlIChMaW51eCwgU29sYXJpcywgT1MtWCwKYW5kIFdpbmRvd3MpLiBBbGwgY29udHJpYnV0aW9ucyBoZWxwLgoKSWYgeW91IHdvdWxkIGxpa2UgdG8gam9pbiB0aGUgU1dJRyBkZXZlbG9wbWVudCB0ZWFtIG9yIGNvbnRyaWJ1dGUgYQpsYW5ndWFnZSBtb2R1bGUgdG8gdGhlIGRpc3RyaWJ1dGlvbiwgcGxlYXNlIGNvbnRhY3QgdGhlIHN3aWctZGV2Cm1haWxpbmcgbGlzdCwgZGV0YWlscyBhdCBodHRwOi8vd3d3LnN3aWcub3JnL21haWwuaHRtbC4KCgogLS0gVGhlIFNXSUcgTWFpbnRhaW5lcnMKCgoK