CSAgICAgICBSRUFETUUgZmlsZSBmb3IgbmV0LXNubXAgVmVyc2lvbjogNS40LjQKCkRJU0NMQUlNRVIKCiAgVGhlIEF1dGhvcnMgYXNzdW1lIG5vIHJlc3BvbnNpYmlsaXR5IGZvciBkYW1hZ2Ugb3IgbG9zcyBvZiBzeXN0ZW0KICBwZXJmb3JtYW5jZSBhcyBhIGRpcmVjdCBvciBpbmRpcmVjdCByZXN1bHQgb2YgdGhlIHVzZSBvZiB0aGlzCiAgc29mdHdhcmUuICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yCiAgaW1wbGllZCB3YXJyYW50eS4KClRBQkxFIE9GIENPTlRFTlRTCgogIERpc2NsYWltZXIKICBUYWJsZSBPZiBDb250ZW50cwogIEludHJvZHVjdGlvbgoqIFN1cHBvcnRlZCBBcmNoaXRlY3R1cmVzCiAgQXZhaWxhYmlsaXR5CiAgV2ViIFBhZ2UKKiBJbnN0YWxsYXRpb24KICBDb3B5aW5nIEFuZCBDb3B5cmlnaHRzCiogRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKICBIZWxwaW5nIE91dAoqIENvZGUgVXBkYXRlIEFubm91bmNlbWVudHMKKiBNYWlsaW5nIExpc3RzCiAgQWdlbnQgRXh0ZW5zaWJpbGl0eQogIEV4YW1wbGUgQWdlbnQgQ29uZmlndXJhdGlvbiBhbmQgVXNhZ2UKICBDb25maWd1cmF0aW9uCiAgU3VibWl0dGluZyBCdWcgUmVwb3J0cwogIENsb3NpbmcKICBUaGFua3MKCiAgKiA9IFJlcXVpcmVkIFJlYWRpbmcuCgpJTlRST0RVQ1RJT04KCiAgVGhpcyBwYWNrYWdlIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHRoZSBDTVUgMi4xLjIuMSBzbm1wIGNvZGUuICBJdAogIGhhcyBiZWVuIGdyZWF0bHkgbW9kaWZpZWQsIHJlc3RydWN0dXJlZCwgZW5oYW5jZWQgYW5kIGZpeGVkLiAgSXQKICBoYXJkbHkgbG9va3MgdGhlIHNhbWUgYXMgYW55dGhpbmcgdGhhdCBDTVUgaGFzIGV2ZXIgcmVsZWFzZWQuICBJdAogIHdhcyByZW5hbWVkIGZyb20gY211LXNubXAgdG8gdWNkLXNubXAgaW4gMTk5NSBhbmQgbGF0ZXIgcmVuYW1lZCBmcm9tCiAgdWNkLXNubXAgdG8gbmV0LXNubXAgaW4gTm92ZW1iZXIgMjAwMC4KCiAgVGhpcyBSRUFETUUgZmlsZSBzZXJ2ZXMgYXMgYSBzdGFydGluZyBwbGFjZSB0byBsZWFybiBhYm91dCB0aGUKICBwYWNrYWdlLCBidXQgdmVyeSBsaXR0bGUgb2YgdGhlIGRvY3VtZW50YXRpb24gaXMgY29udGFpbmVkIHdpdGhpbgogIHRoaXMgZmlsZS4gIFRoZSBGQVEgaXMgYW4gZXhjZWxsZW50IHBsYWNlIHRvIHN0YXJ0IGFzIHdlbGwuCiAgQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgYSBidW5jaCBvZiBSRUFETUUgZmlsZXMgZm9yIHNwZWNpZmljCiAgYXJjaGl0ZWN0dXJlcyBhbmQgc3BlY2lmaWMgZmVhdHVyZXMuICBZb3UgbWlnaHQgd2lzaCB0byBsb29rIGF0IHNvbWUKICBvZiB0aGVzZSBvdGhlciBmaWxlcyBhcyB3ZWxsLgoKU1VQUE9SVEVEIEFSQ0hJVEVDVFVSRVMKCiAgUGxlYXNlIHNlZSB0aGUgRkFRIGZvciB0aGlzIGluZm9ybWF0aW9uLgoKICBQbGVhc2UgbGV0IHVzIGtub3cgaWYgeW91IGNvbXBpbGUgaXQgb24gb3RoZXIgT1MgdmVyc2lvbnMgYW5kIGl0CiAgd29ya3MgZm9yIHlvdSBzbyB3ZSBjYW4gYWRkIHRoZW0gdG8gdGhlIGFib3ZlIGxpc3QuCgogIFBvcnRpbmc6ICBQbGVhc2UhIHJlYWQgdGhlIFBPUlRJTkcgZmlsZS4KCiAgQWxzbyBub3RlIHRoYXQgbWFueSBhcmNoaXRlY3R1cmUgaGF2ZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgUkVBRE1FCiAgZmlsZXMsIHNvIHlvdSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIG9uZSBhcHByb3ByaWF0ZSB0bwogIHlvdXIgcGxhdGZvcm0uCgpBVkFJTEFCSUxJVFkKCiAgRG93bmxvYWQ6CiAgICAtIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2Rvd25sb2FkLwogICAgLSBmdHA6Ly9mdHAubmV0LXNubXAub3JnL3B1Yi9zb3VyY2Vmb3JnZS9uZXQtc25tcC8KICBXZWIgcGFnZToKICAgIC0gaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvCiAgUHJvamVjdCBXaWtpOgogICAgLSBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpLwogIFNvdXJjZWZvcmdlIFByb2plY3QgcGFnZToKICAgIC0gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9uZXQtc25tcAogIE1pcnJvcnM6CiAgICAtIFVTOiAgICAgICAgZnRwOi8vZnRwLmZyZWVzbm1wLmNvbS9taXJyb3JzL25ldC1zbm1wLwoKICBUaGUgb2xkIHVjZC1zbm1wLnVjZGF2aXMuZWR1IHdlYiBzaXRlIGFuZCBmdHAgc2VydmVyIGlzIG5vdwogIG9mZmxpbmUgYW5kIHNob3VsZCBub3QgYmUgYWNjZXNzZWQgYW55IGxvbmdlci4KCldFQiBQQUdFUwoKICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy8KICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL25ldC1zbm1wCiAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS8KCklOU1RBTExBVElPTgoKICBTZWUgdGhlIElOU1RBTEwgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgcGFja2FnZS4KCkNPUFlJTkcgQU5EIENPUFlSSUdIVFMKCiAgU2VlIHRoZSBDT1BZSU5HIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHBhY2thZ2UuCgpGUkVRVUVOVExZIEFTS0VEIFFVRVNUSU9OUwoKICBTZWUgdGhlIEZBUSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBwYWNrYWdlLgogIFRoaXMgaXMgYWxzbyBhdmFpbGFibGUgb24gdGhlIHByb2plY3QgV2lraSBhdAoKICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9GQVEKCiAgc28gdGhhdCB0aGUgd2lkZXIgTmV0LVNOTVAgY29tbXVuaXR5IGNhbiBoZWxwIG1haW50YWluIGl0IQoKSEVMUElORyBPVVQKCiAgVGhpcyBpcyBhIHByb2plY3Qgd29ya2VkIG9uIGJ5IHBlb3BsZSBhcm91bmQgdGhlIG5ldC4gIFdlJ2QgbG92ZQogIHlvdXIgaGVscCwgYnV0IHBsZWFzZSByZWFkIHRoZSBQT1JUSU5HIGZpbGUgZmlyc3QuICBBbHNvLCBzdWJzY3JpYmUKICB0byB0aGUgbmV0LXNubXAtY29kZXJzIGxpc3QgZGVzY3JpYmVkIGJlbG93IGFuZCBtZW50aW9uIHdoYXQgeW91J3JlCiAgZ29pbmcgdG8gd29yayBvbiB0byBtYWtlIHN1cmUgbm8gb25lIGVsc2UgaXMgYWxyZWFkeSBkb2luZyBzbyEKICBZb3UnbGwgYWxzbyBuZWVkIHRvIGtlZXAgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3QgY29kZSBzbmFwIHNob3QsCiAgd2hpY2ggY2FuIGJlIG9idGFpbmVkIGZyb20gQ1ZTIHVzaW5nIHRoZSBpbmZvcm1hdGlvbiBmb3VuZCBhdAogIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2N2cy8uCgogIENvbnRyaWJ1dGlvbnMgdG8gdGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGluIGFueSBmb3JtIGFyZSBncmVhdGx5CiAgYXBwcmVjaWF0ZWQuICBXZSBleHBlY3QgdGhlIHBhcnRpZXMgcHJvdmlkaW5nIHN1Y2ggY29udHJpYnV0aW9ucyB0bwogIGhhdmUgdGhlIHJpZ2h0IHRvIGNvbnRyaWJ1dGUgdGhlbSB0byB0aGUgTmV0LVNOTVAgcHJvamVjdCBvciB0aGF0CiAgdGhlIHBhcnRpZXMgdGhhdCBkbyBoYXZlIHRoZSByaWdodCBoYXZlIGRpcmVjdGVkIHRoZSBwZXJzb24KICBzdWJtaXR0aW5nIHRoZSBjb250cmlidXRpb24gdG8gZG8gc28uICBJbiBhZGRpdGlvbiwgYWxsIGNvbnRyaWJ1dG9ycwogIG5lZWQgdG8gYmUgYXdhcmUgdGhhdCBpZiB0aGUgY29udHJpYnV0aW9uIGlzIGFjY2VwdGVkIGFuZAogIGluY29ycG9yYXRlZCBpbnRvIHRoZSBOZXQtU05NUCBwcm9qZWN0LCBpdCB3aWxsIGJlIHJlZGlzdHJpYnV0ZWQKICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgYWdyZWVtZW50IHVzZWQgZm9yIHRoZSBlbnRpcmUgYm9keSBvZgogIHdvcmsgdGhhdCBjb21wcmlzZXMgdGhlIE5ldC1TTk1QIHByb2plY3QgKHNlZSB0aGUgQ09QWUlORyBmaWxlIGZvcgogIGRldGFpbHMpLiAgSWYgdGhpcyBsaWNlbnNlIGFncmVlbWVudCBldmVyIGNoYW5nZXMgdGhlIGNvbnRyaWJ1dGlvbgogIHdpbGwgY29udGludWUgdG8gYmUgcmVsZWFzZWQgdW5kZXIgYW55IG5ldyBsaWNlbnNlcyBhcyB3ZWxsLiAgVGhhbmsKICB5b3UsIGluIGFkdmFuY2UsIGZvciB5b3VyIGdyYWNpb3VzIGNvbnRyaWJ1dGlvbnMuCgpDT0RFIFVQREFURSBBTk5PVU5DRU1FTlRTCgogIFNlZSB0aGUgTkVXUyBmaWxlIGFuZCB0aGUgQ2hhbmdlTG9nIGZpbGUgZm9yIGRldGFpbHMgb24gd2hhdCBoYXMKICBjaGFuZ2VkIGJldHdlZW4gcmVsZWFzZXMuCgogIFdlIGhhdGUgYnJvYWRjYXN0aW5nIGFubm91bmNlIG1lc3NhZ2VzIHRvIG90aGVyIG1haWxpbmcgbGlzdHMgYW5kCiAgbmV3c2dyb3Vwcywgc28gdGhlcmUgaXMgYSBtYWlsaW5nIGxpc3Qgc2V0IHVwIHRvIGhhbmRsZSByZWxlYXNlCiAgYW5ub3VuY2VtZW50cy4gIEFueSB0aW1lIHdlIHB1dCBuZXcgc29mdHdhcmUgb3V0IGZvciBmdHAsIHdlJ2xsIG1haWwKICB0aGlzIGZhY3QgdG8gbmV0LXNubXAtYW5ub3VuY2VAbGlzdHMuc291cmNlZm9yZ2UubmV0LiAgU2VlIHRoZQogIE1BSUxJTkcgTElTVFMgc2VjdGlvbiBkZXNjcmliZWQgYmVsb3cgdG8gc2lnbiB1cCBmb3IgdGhlc2UKICBhbm5vdW5jZW1lbnRzLgoKICBXZSB3aWxsIHBvc3QgbmV3IGFubm91bmNlbWVudHMgb24gYSB2ZXJ5IGluZnJlcXVlbnQgYmFzaXMgdG8gdGhlCiAgb3RoZXIgY2hhbm5lbHMgKHRoZSBvdGhlciBzbm1wIG1haWxpbmcgbGlzdHMgYW5kIG5ld3Nncm91cHMgbGlrZQogIGNvbXAucHJvdG9jb2xzLnNubXApLCBidXQgb25seSBmb3IgbWFqb3IgY29kZSByZXZpc2lvbnMgYW5kIG5vdCBmb3IKICBidWctZml4IHBhdGNoZXMgb3Igc21hbGwgZmVhdHVyZSB1cGdyYWRlcy4KCk1BSUxJTkcgTElTVFMKCiAgVGhlIGxpc3RzOgoKICAgIEEgbnVtYmVyIG9mIG1haWxpbmcgbGlzdHMgaGF2ZSBiZWVuIGNyZWF0ZWQgZm9yIHN1cHBvcnQgb2YgdGhlIHByb2plY3Q6CiAgICBUaGUgbWFpbiBvbmVzIGFyZToKCiAgICAgIG5ldC1zbm1wLWFubm91bmNlQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAgLS0gRm9yIG9mZmljaWFsIGFubm91bmNlbWVudHMKICAgICAgbmV0LXNubXAtdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICAgICAtLSBGb3IgdXNhZ2UgZGlzY3Vzc2lvbnMKICAgICAgbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAgICAtLSBGb3IgZGV2ZWxvcG1lbnQgZGlzY3Vzc2lvbnMKCiAgICBUaGUgLWNvZGVycyBsaXN0IGlzIGludGVuZGVkIGZvciBkaXNjdXNzaW9uIG9uIGRldmVsb3BtZW50IG9mIGNvZGUKICAgIHRoYXQgd2lsbCBiZSBzaGlwcGVkIGFzIHBhcnQgb2YgdGhlIHBhY2thZ2UuICBUaGUgLXVzZXJzIGxpc3QgaXMKICAgIGZvciBnZW5lcmFsIGRpc2N1c3Npb24gb24gY29uZmlndXJpbmcgYW5kIHVzaW5nIHRoZSBwYWNrYWdlLAogICAgaW5jbHVkaW5nIGlzc3VlcyB3aXRoIGNvZGluZyB1c2VyLWRldmVsb3BlZCBhcHBsaWNhdGlvbnMgKGNsaWVudHMsCiAgICBtYW5hZ2VycywgTUlCIG1vZHVsZXMsIGV0YykuCgogICAgUGxlYXNlIGRvICpOT1QqIHNlbmQgbWVzc2FnZXMgdG8gYm90aCAtdXNlcnMgYW5kIC1jb2RlcnMgbGlzdHMuCiAgICBUaGlzIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnksIGFuZCBzaW1wbHkgc2VydmVzIHRvIGZ1cnRoZXIKICAgIG92ZXJsb2FkIChhbmQgYW5ub3kpIHRoZSBjb3JlIGRldmVsb3BtZW50IHRlYW0uICAgSWYgaW4gZG91YnQsCiAgICBqdXN0IHVzZSB0aGUgLXVzZXJzIGxpc3QuCgoKICAgIFRoZSBvdGhlciBsaXN0cyBvZiBwb3NzaWJsZSBpbnRlcmVzdCBhcmU6CgogICAgICBuZXQtc25tcC1jdnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICAgICAgIC0tIEZvciBjdnMgdXBkYXRlIGFubm91bmNlbWVudHMKICAgICAgbmV0LXNubXAtYnVnc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgICAgICAtLSBGb3IgQnVnIGRhdGFiYXNlIHVwZGF0ZSBhbm5vdW5jZW1lbnRzCiAgICAgIG5ldC1zbm1wLXBhdGNoZXNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICAgLS0gRm9yIFBhdGNoIGRhdGFiYXNlIHVwZGF0ZSBhbm5vdW5jZW1lbnRzCgogICAgUGxlYXNlIGRvIE5PVCBwb3N0IG1lc3NhZ2VzIHRvIHRoZXNlIGxpc3RzIChvciB0byB0aGUgYW5ub3VuY2UgbGlzdCBhYm92ZSkuCiAgICBCdWcgcmVwb3J0cyBhbmQgUGF0Y2hlcyBzaG91bGQgYmUgc3VibWl0dGVkIHZpYSB0aGUgU291cmNlIEZvcmdlIHRyYWNrZXIKICAgIHN5c3RlbS4gIFNlZSB0aGUgbWFpbiBwcm9qZWN0IHdlYiBwYWdlcyBmb3IgZGV0YWlscy4KCiAgICBUbyBzdWJzY3JpYmUgdG8gYW55IG9mIHRoZXNlIGxpc3RzLCBwbGVhc2Ugc2VlOgogIAogICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9saXN0cy8KCgogIEFyY2hpdmVzOgogICAgVGhlIGFyY2hpdmVzIGZvciB0aGVzZSBtYWlsaW5nIGxpc3RzIGNhbiBiZSBmb3VuZCBieSBmb2xsb3dpbmcgbGlua3MgYXQKCiAgICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2xpc3RzLwoKQUdFTlQgRVhURU5TSUJJTElUWQoKICBUaGUgYWdlbnQgdGhhdCBjb21lcyB3aXRoIHRoaXMgcGFja2FnZSBpcyBleHRlbnNpYmxlIHRocm91Z2ggdXNlIG9mCiAgc2hlbGwgc2NyaXB0cyBhbmQgb3RoZXIgbWV0aG9kcy4gIFNlZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWwgcGFnZXMKICAobGlrZSBzbm1wZC5jb25mKSBhbmQgcnVuIHRoZSBzbm1wY29uZiBwZXJsIHNjcmlwdCBmb3IgZnVydGhlciBkZXRhaWxzLgoKICBZb3UgY2FuIGFsc28gZXh0ZW5kIHRoZSBhZ2VudCBieSB3cml0aW5nIEMgY29kZSBkaXJlY3RseS4gIFRoZSBhZ2VudAogIGlzIGV4dHJlbWVseSBtb2R1bGFyIGluIG5hdHVyZSBhbmQgeW91IG5lZWQgb25seSBjcmVhdGUgbmV3IGZpbGVzLAogIHJlLXJ1biBjb25maWd1cmUgYW5kIHJlLWNvbXBpbGUgKG9yIGxpbmsgYWdhaW5zdCBpdHMgbGlicmFyaWVzKS4gIE5vCiAgbW9kaWZpY2F0aW9uIG9mIHRoZSBkaXN0cmlidXRlZCBzb3VyY2UgZmlsZXMgYXJlIG5lY2Vzc2FyeS4gIFNlZSB0aGUKICBmb2xsb3dpbmcgZmlsZXMgZm9yIGRldGFpbHMgb24gaG93IHRvIGdvIGFib3V0IHRoaXM6CiAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0LywKICBhZ2VudC9taWJncm91cC9leGFtcGxlcy8qLmMKCiAgQWxzbywgc2VlIHRoZSBsb2NhbC9taWIyYyBwcm9ncmFtIGFuZCBpdHMgUkVBRE1FIGZpbGUgZm9yIGhlbHAgaW4KICB0dXJuaW5nIGEgdGV4dHVhbCBtaWIgZGVzY3JpcHRpb24gaW50byBhIEMgY29kZSB0ZW1wbGF0ZS4KCiAgV2Ugbm93IHN1cHBvcnQgQWdlbnRYIGZvciBzdWJhZ2VudCBleHRlbnNpYmlsaXR5LiAgVGhlIG5ldC1zbm1wCiAgYWdlbnQgY2FuIHJ1biBhcyBib3RoIGEgbWFzdGVyIGFnZW50IGFuZCBhIHN1YmFnZW50LiAgQWRkaXRpb25hbGx5LAogIGEgdG9vbGtpdCBpcyBwcm92aWRlZCB0aGF0IGVuYWJsZXMgdXNlcnMgb2YgaXQgdG8gZWFzaWx5IGVtYmVkIGEKICBhZ2VudHggY2xpZW50IGludG8gZXh0ZXJuYWwgYXBwbGljYXRpb25zLiAgU2VlIHRoZSB0dXRvcmlhbCBhdAogIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvdG9vbGtpdC8gZm9yIGFuIGV4YW1wbGUgb2YgaG93CiAgZ28gYWJvdXQgZG9pbmcgdGhpcy4KCkNPTkZJR1VSQVRJT04KCiAgU2VlIHRoZSBtYW4vc25tcC5jb25mLjUgbWFudWFsIHBhZ2UuCgogIEZvciB0aGUgYWdlbnQsIGFkZGl0aW9uYWxseSBzZWUgdGhlIG1hbi9zbm1wZC5jb25mLjUgbWFudWFsIHBhZ2UuCgogIEZvciB0aGUgc25tcHRyYXBkLCBzZWUgdGhlIG1hbi9zbm1wdHJhcGQuY29uZi41IG1hbnVhbCBwYWdlLgoKICBZb3UgY2FuIGFsc28gcnVuIHRoZSBzbm1wY29uZiBwZXJsIHNjcmlwdCB0byBoZWxwIHlvdSBjcmVhdGUgc29tZSBvZgogIHRoZXNlIGZpbGVzLgoKU1VCTUlUVElORyBCVUcgUkVQT1JUUwoKICBJbXBvcnRhbnQ6ICpQbGVhc2UqIGluY2x1ZGUgd2hhdCB2ZXJzaW9uIG9mIHRoZSBuZXQtc25tcCAob3IKICB1Y2Qtc25tcCkgcGFja2FnZSB5b3UgYXJlIHVzaW5nIGFuZCB3aGF0IGFyY2hpdGVjdHVyZShzKSB5b3UncmUKICB1c2luZywgYXMgd2VsbCBhcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBleGFjdGx5IHdoYXQgaXMgd3JvbmcuCgogIFRvIHN1Ym1pdCBhIGJ1ZyByZXBvcnQsIHBsZWFzZSB1c2UgdGhlIHdlYiBpbnRlcmZhY2UgYXQKICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9idWdzLy4gIEl0IGlzIGEgZnVsbC1mbGVkZ2VkCiAgYnVnLXRyYWNraW5nIHN5c3RlbSB0aGF0IHdpbGwgYWxsb3cgeW91IHRvIHNlYXJjaCBmb3IgYWxyZWFkeQogIGV4aXN0aW5nIGJ1ZyByZXBvcnRzIGFzIHdlbGwgYXMgdHJhY2sgdGhlIHN0YXR1cyBvZiB5b3VyIHJlcG9ydCBhcwogIGl0IGlzIHByb2Nlc3NlZCBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgoKICBJZiB5b3UgaW50ZW5kIHRvIHN1Ym1pdCBhIHBhdGNoIGFzIHdlbGwsIHBsZWFzZSByZWFkIHRoZSBQT1JUSU5HCiAgZmlsZSBiZWZvcmUgeW91IGRvIHNvIGFuZCB0aGVuIHN1Ym1pdCBpdCB0bwogIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3BhdGNoZXMvLgoKQ0xPU0lORwoKICBXZSBsb3ZlIHBhdGNoZXMuICBTZW5kIHNvbWUgdG8gdXMhICBCdXQgYmVmb3JlIHlvdSBkbywgcGxlYXNlIHNlZQogIHRoZSAnUE9SVElORycgZmlsZSBmb3IgaW5mb3JtYXRpb24gb24gaGVscGluZyB1cyBvdXQgd2l0aCB0aGUKICBwcm9jZXNzIG9mIGludGVncmF0aW5nIHlvdXIgcGF0Y2hlcyAocmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0cyBhIG5ldwogIGZlYXR1cmUgaW1wbGVtZW50YXRpb24gb3IgYSBuZXcgcG9ydCkuCgogIEFsc28sIFdlJ3JlIGludGVyZXN0ZWQgaWYgYW55b25lIGFjdHVhbGx5IHVzZXMvbGlrZXMvaGF0ZXMvd2hhdGV2ZXIKICB0aGlzIHBhY2thZ2UuLi4gIE1haWwgdXMgYSBub3RlIGFuZCBsZXQgdXMga25vdyB3aGF0IHlvdSB0aGluayBvZiBpdCEKCiAgSGF2ZSBmdW4gYW5kIG1heSBpdCBtYWtlIHlvdXIgbGlmZSBlYXNpZXIsCgogICAgVGhlIG5ldC1zbm1wIGRldmVsb3BlcnMKClRIQU5LUwoKICBUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHZhcmlvdXMgcGF0Y2hlcyBhbmQKICBpbXByb3ZlbWVudHMuICBUbyB0aGVtIHdlIG93ZSBvdXIgZGVlcGVzdCB0aGFua3MgKGFuZCB5b3UgZG8gdG9vISk6CgogICAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBTdGV2ZSBXYWxkYnVzc2VyIDx3YWxkYnVzc2VyQG5leHRiZWFjb24uY29tPgogICAgRGFuIEEuIERpY2tleSA8ZGRpY2tleUB0cmFuc2l0aW9uLmNvbT4KICAgIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGNzYy5saXYuYWMudWs+CiAgICBHaW92YW5uaSBTLiBNYXJ6b3QgPGdtYXJ6b3RAbm9ydGVsbmV0d29ya3MuY29tPgogICAgTmllbHMgQmFnZ2VzZW4gPHJlY25iYUBtZWRpYXRvci51bmktYy5kaz4KICAgIFNpbW9uIExlaW5lbiA8c2ltb25AbGltbWF0LnN3aXRjaC5jaD4KICAgIERhdmlkIFQuIFBlcmtpbnMgPGRwZXJraW5zQGRzcGVya2lucy5jb20+CiAgICBNaWtlIFBlcmlrIDxtaWtlcEBjcnQuY29tPgogICAgU2FuamFpIE5hcmFpbiA8bmFyYWluQHRodW1wZXIuYmVsbGNvcmUuY29tPgogICAgZnJhbmN1c0BtZXRzbnkuZGVscGhpLmNvbQogICAgR2FyeSBQYWxtZXIgPGdwYWxtZXJAZnJlZWJzZC5vcmc+CiAgICBNYXJjIEcuIEZvdXJuaWVyIDxzY3JhcHB5QGtpLm5ldD4KICAgIEdhcnkgQS4gSGF5d2FyZCA8Z2FoQGJlbGxjb3JlLmNvbT4KICAgIEplbm5pZmVyIEJyYXkgPGpicmF5QG9yaWdpbi1hdC5jby51az4KICAgIFBoaWxpcCBHdWVudGhlciA8Z3VlbnRoZXJAZ2FjLmVkdT4KICAgIEVsd3luIEIgRGF2aWVzIDxlZGF2aWVzQG9yaWdpbi1hdC5jby51az4KICAgIFNpbW9uIEJ1cmdlIDxzaW1vbmJAdGVsc3RyYS5jb20uYXU+CiAgICBEYXZpZCBQYXVsIFppbW1lcm1hbiA8ZHB6QGFwcGxlLmNvbT4KICAgIEFsYW4gQmF0aWUgPGJhdGllQGFhaHouamYuaW50ZWwuY29tPgogICAgTWljaGFlbCBEb3VnbGFzcyA8bWlrZWRvdWdAdGV4YXMubmV0PgogICAgVGVkIFJ1bGUgPFRlZF9SdWxlQEZMRVhURUNILkNPLlVLPgogICAgQ3JhaWcgQmV2aW5zIDxjcmFpZ2JAYml0Y29tLm5ldC5hdT4KICAgIEFydGhlciBIeXVuIDxhcnRodXJAcHNpLmNvbT4KICAgIENyaXN0aWFuIEVzdGFuIDxDcmlzdGlhbi5Fc3RhbkBuZXQudXRjbHVqLnJvPgogICAgRXVnZW5lIFBvbG92bmlrb3YgPGV1Z2VuQHJkLnpnaWsuemFwb3Jpemh6aGUudWE+CiAgICBKYWtvYiBFbGxlcnN0ZWR0IDxqYWtvYkBkeW5hcmMuc2U+CiAgICBNaWNoYWVsIEouIFNsaWZjYWsgPHNsaWZAYmVsbHNvdXRoLm5ldD4KICAgIEpvbmFzIE9sc3NvbiA8am9sc3NvbkBlcnYuZXJpY3Nzb24uc2U+CiAgICBKYW1lcyBILiBZb3VuZyA8c3lzamh5QGdzdS5lZHU+CiAgICBKZWZmIEpvaG5zb24gPGpiakByZWRoYXQuY29tPgogICAgTWFya2t1IExhdWtrYW5lbiA8bWFybGF1a2tAc3R5YmJhLm50Yy5ub2tpYS5jb20+CiAgICBEZXJlayBTaW1rb3dpYWsgPGRlcmVrc0BrZC1kZXYuY29tPgogICAgRGF2aWQgRi4gTmV3bWFuIDxkbmV3bWFuQGVwbmV0LmNvbT4KICAgIE5pY2sgQW1hdG8gPG5hYW1hdG9AbWVyaXQuZWR1PgogICAgTWlrZSBCYWVyIDxiYWVybUBjYWx3ZWIuY29tPgogICAgUGF0cmljayBMYXdyZW5jZSA8cGpsYXdyZW5jZUB1Y2RhdmlzLmVkdT4KICAgIFJ1c3MgTXVuZHkgPG11bmR5QHRpc2xhYnMuY29tPgogICAgT2xhZnVyIEd1ZG11bmRzc29uIDxvZ3VkQHRpc2xhYnMuY29tPgogICAgRGF2aWQgUmVlZGVyIDxkcmVlZGVyQHRpc2xhYnMuY29tPgogICAgRWQgTGV3aXMgPGxld2lzQHRpc2xhYnMuY29tPgogICAgQmlsbCBCYWJzb24gPHdiYWJzb25AdGlzbGFicy5jb20+CiAgICBDaHJpcyBTbWl0aCA8Y3NtaXRoQHBsYXRmb3JtLmNvbT4KICAgIE1pa2UgTWljaGF1ZCA8bWlrZW1pY2hhdWRAZWFydGhsaW5rLm5ldD4KICAgIEFuZHkgSG9vZCA8YWhvb2RAd2VzdHBhYy5jb20uYXU+CiAgICBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CiAgICBCZXJ0IERyaWVodWlzIDxkcmllaHVpc0BwbGF5YmVpbmcub3JnPgogICAgSnVlcmdlbiBTY2hvZW53YWVsZGVyIDxzY2hvZW53QGlici5jcy50dS1icy5kZT4KICAgIEZyYW5rIFN0cmF1c3MgPHN0cmF1c3NAaWJyLmNzLnR1LWJzLmRlPgogICAgUmFnbmFyIEtq+HJzdGFkIDx1Y2RAcmFnbmFyay52ZXN0ZGF0YS5ubz4KICAgIEpvY2hlbiBLbWlldHNjaCA8am9jaGVuLmttaWV0c2NoQHR1LWNsYXVzdGhhbC5kZT4KICAgIEp1bi1pY2hpcm8gaXRvanVuIEhhZ2lubyA8aXRvanVuQGlpamxhYi5uZXQ+CiAgICBKb2huIEwgVmlsbGFsb3ZvcyA8am9obi5sLnZpbGxhbG92b3NAaW50ZWwuY29tPgogICAgQ2hyaXN0b3BoIE1hbW1pdHpzY2ggPENocmlzdG9waC5NYW1taXR6c2NoQHR1LWNsYXVzdGhhbC5kZT4KICAgIEFybmUgT2VzbGVib2UgPEFybmUuT2VzbGVib2VAaXRlbS5udG51Lm5vPgogICAgSmVmZiBDb3VycyA8amVmZkB1bHRyYWRucy5jb20+CiAgICBLYXJsIFNjaGlsa2UgPGthcmxfc2NoaWxrZUBlbGkubmV0PgogICAgSm9obiBOYXlsb24gPGpicG5AY2FtYnJpZGdlYnJvYWRiYW5kLmNvbT4KICAgIEtlbiBIb3Juc3RlaW4gPGtlbmhAY21mLm5ybC5uYXZ5Lm1pbD4KICAgIE1hcnRpbiBPbGRmaWVsZCA8bUBtYWlsLnRjPgogICAgSGFycmllIEhhemV3aW5rZWwgPGhhcnJpZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBNYXJrIEZlcmxhdHRlIDxmZXJsYXR0ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBNYXJ1cyBNZWlzc25lciA8bWFyY3VzbWVpc3NuZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgU3RlcGhhbiBXZW56ZXIgPHN0ZXBoYW53ZW56ZWxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgUm9uIE1ldmlzc2VuIDxyb24ubWV2aXNzZW5AZWVkLmVyaWNzc29uLnNlPgogICAgVC5KLiBNYXRoZXIgPHRqbWF0aGVyQHRqbWF0aGVyLmNvbT4KICAgIENyYWlnIFNldGVyYSA8c2V0ZXJhanVua0BjaGFydGVyLm5ldD4KICAgIEthdHN1aGlzYSBBQkUgPGFiZWthdHN1QGN5c29scy5jb20+CiAgICBBeGVsIEtpdHRlbmJlcmdlciA8QXhlbC5LaXR0ZW5iZXJnZXJAbWF4eGlvLmNvbT4KICAgIEpvaGFubmVzIFNjaG1pZHQtRmlzY2hlciA8anNmQEludGVyRmFjZS1BRy5jb20+CiAgICBKZWZmcmV5IFdhdHNvbiA8bm9zdGF3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIEJydWNlIFNoYXcgPEJydWNlLlNoYXdAZ292LmFiLmNhPgogICAgU3RlZmFuIFJhZG1hbiA8c3JhZG1hbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBTdGVwaGVuIEouIEZyaWVkbCA8c2pmcmllZGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgQWxleCBCdXJnZXIgPGFsZXhfYkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBDaHJpc3RvcGhlIFZhcm9xdWkgPGV4dC5kZXZvdGVhbS52YXJvcXVpQHNuY2YuZnI+CiAgICBTcmlrYW50aCBQaW5kaXByb2xpIDxzcmlwaW5kaXBAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgS2V2aW4gR3JhaGFtIDxrZXZncmFoYW03QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIFhpYW9mZW5nIExpbmcgPHhmbGluZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBCcmFuZG9uIEtuaXR0ZXIgPGtuaXR0ZXJiQGJsLi4uPgogICAgQW5kcmV3IEZpbmRsYXkgPGFuZHJldy5maW5kbGF5QHNraWxscy0xc3QuY28udWs+CiAgICBSb24gVGFib3IgPHJ0YWJvckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBQZXRlciBXYXJhc2luIDxkcmctcjNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgQm9iIFJvd2xhbmRzIDxyb2JlcnQucm93bGFuZHNAc3VuLmNvbT4KICAgIFBldGVyIEhpY2tzIDxQZXRlci5IaWNrc0BQT0dHUy5DTy5VSz4KICAgIEFuZHkgU21pdGggPHdhc21pdGgzMkBlYXJ0aGxpbmsubmV0PgogICAgTmljayBCYXJrYXMgPG5iYXJrYXNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgogICAgR2VlcnQgRGUgUGV1dGVyIDxnZWVydEBkZXBldXRlci5vcmc+CiAgICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KICAgIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzbWVpc3NuZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgQW5kcmV3IFJ1Y2tlciBKb25lcyA8YXJqb25lc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBEYWkuSC4gPGRnLWZAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBWbGFkaXNsYXYgQm9nZGFub3YgPHNsYXZhX3JlZ0Buc3lzLmJ5PgogICAgUGV0ZXIgTWFydGluIDxwbm1hcnRpbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBUaG9tYXMgTGFja2V5IDx0ZWxhY2tleUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBKb2UgQnVlaGxlciA8amJ1ZWhsZXJAc3BpcmVudGNvbS5jb20+CiAgICBCYXJ0IFZhbiBBc3NjaGUgPGJhcnQudmFuYXNzY2hlQGdtYWlsLmNvbT4KCiAgV2UndmUgcHJvYmFibHkgZm9yZ290dGVuIHBlb3BsZSBvbiB0aGlzIGxpc3QuICBMZXQgdXMga25vdyBpZiB5b3UndmUKICBjb250cmlidXRlZCBjb2RlIGFuZCB3ZSd2ZSBsZWZ0IHlvdSBvdXQuCg==