ICA8Y2hhcHRlciBpZD0iY29uZmlnLXdpbmUtbWFpbiI+CiAgICA8dGl0bGU+Q29uZmlndXJpbmcgV2luZTwvdGl0bGU+CiAgICA8cGFyYT4KICAgICAgTm93IHRoYXQgeW91IGhvcGVmdWxseSBtYW5hZ2VkIHRvIHN1Y2Nlc3NmdWxseSBpbnN0YWxsCiAgICAgIHRoZSBXaW5lIHByb2dyYW0gZmlsZXMsCiAgICAgIHRoaXMgY2hhcHRlciB3aWxsIHRlbGwgeW91IGhvdyB0byBjb25maWd1cmUgdGhlIFdpbmUgZW52aXJvbm1lbnQKICAgICAgcHJvcGVybHkgdG8gcnVuIHlvdXIgV2luZG93cyBwcm9ncmFtcy4KICAgIDwvcGFyYT4KICAgIDxwYXJhPgogICAgICBGaXJzdCwgd2UnbGwgZ2l2ZSB5b3UgYW4gb3ZlcnZpZXcgYWJvdXQgd2hpY2gga2luZHMgb2YKICAgICAgY29uZmlndXJhdGlvbiBhbmQgcHJvZ3JhbSBleGVjdXRpb24gYXNwZWN0cyBhIGZ1bGx5IGNvbmZpZ3VyZWQKICAgICAgV2luZG93cyBlbnZpcm9ubWVudCBoYXMgdG8gZnVsZmlsbCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBtYW55CiAgICAgIFdpbmRvd3MgcHJvZ3JhbXMgcnVuIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGVuY291bnRlcmluZyBhbnkKICAgICAgbWlzY29uZmlndXJlZCBvciBtaXNzaW5nIGl0ZW1zLgogICAgICBOZXh0LCB3ZSdsbCBzaG93IHlvdSB3aGljaCBlYXN5IGhlbHBlciBwcm9ncmFtcyBleGlzdAogICAgICB0byBlbmFibGUgZXZlbiBub3ZpY2UgdXNlcnMgdG8gY29tcGxldGUgdGhlIFdpbmUgZW52aXJvbm1lbnQKICAgICAgY29uZmlndXJhdGlvbiBpbiBhIGZhc3QgYW5kIGVhc3kgd2F5LgogICAgICBUaGUgbmV4dCBzZWN0aW9uIHdpbGwgZXhwbGFpbiB0aGUgcHVycG9zZSBvZiB0aGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUsCiAgICAgIGFuZCB3ZSdsbCBsaXN0IGFsbCBvZiBpdHMgc2V0dGluZ3MuCiAgICAgIEFmdGVyIHRoYXQsIHRoZSBuZXh0IHNlY3Rpb24gd2lsbCBkZXRhaWwgdGhlIG1vc3QgaW1wb3J0YW50IGFuZAogICAgICB1bmZvcnR1bmF0ZWx5IG1vc3QgZGlmZmljdWx0IGNvbmZpZ3VyYXRpb24gcGFydDoKICAgICAgaG93IHRvIGNvbmZpZ3VyZSB0aGUgZmlsZSBzeXN0ZW0gYW5kIERPUyBkcml2ZSBlbnZpcm9ubWVudCB0aGF0CiAgICAgIFdpbmRvd3MgcHJvZ3JhbXMgbmVlZC4KICAgICAgSW4gdGhlIGxhc3Qgc3RlcCB3ZSdsbCB0ZWxsIHlvdSBob3cgdG8gZXN0YWJsaXNoIGEgd29ya2luZyBXaW5kb3dzCiAgICAgIHJlZ2lzdHJ5IGJhc2UuCiAgICAgIEZpbmFsbHksIHRoZSByZW1haW5pbmcgcGFydHMgb2YgdGhpcyBjaGFwdGVyIGNvbnRhaW4gZGVzY3JpcHRpb25zCiAgICAgIG9mIHNwZWNpZmljIFdpbmUgY29uZmlndXJhdGlvbiBpdGVtcyB0aGF0IG1pZ2h0IGFsc28gYmUKICAgICAgb2YgaW50ZXJlc3QgdG8geW91LgogICAgPC9wYXJhPgoKICAgIDxzZWN0MSBpZD0iY29uZmlnLXJlcXVpcmVtZW50cy13aW5kb3dzIiB4cmVmbGFiZWw9Ii0tSW5zdGFsbGluZyBTZWN0aW9uLS0iPgogICAgICA8dGl0bGU+V2hhdCBhcmUgdGhlIHJlcXVpcmVtZW50cyBvZiBhIGZ1bGx5IHdvcmtpbmcgV2luZG93cyBlbnZpcm9ubWVudD88L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgRm9ybWVybHkgYSBwYXJ0IG9mOiAiV1dOICM1MiBGZWF0dXJlOiBSZXBsYWNpbmcgV2luZG93cyIuCiAgICAgICAgV3JpdHRlbiBieSAmbmFtZS1vdmUta2FhdmVuOyA8ZW1haWw+JmVtYWlsLW92ZS1rYWF2ZW47PC9lbWFpbD4KICAgICAgPC9wYXJhPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIEEgV2luZG93cyBpbnN0YWxsYXRpb24gaXMgYSB2ZXJ5IGNvbXBsZXggc3RydWN0dXJlLiBJdCBjb25zaXN0cyBvZgoJICBtYW55IGRpZmZlcmVudCBwYXJ0cyB3aXRoIHZlcnkgZGlmZmVyZW50IGZ1bmN0aW9uYWxpdHkuCgkgIFdlJ2xsIHRyeSB0byBvdXRsaW5lIHRoZSBtb3N0IGltcG9ydGFudCBhc3BlY3RzIG9mIGl0LgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgUmVnaXN0cnkuIE1hbnkga2V5cyBhcmUgc3VwcG9zZWQgdG8gZXhpc3QgYW5kIGNvbnRhaW4KICAgICAgICAgICAgICBtZWFuaW5nZnVsIGRhdGEsIGV2ZW4gaW4gYSBuZXdseS1pbnN0YWxsZWQgV2luZG93cy4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgRGlyZWN0b3J5IHN0cnVjdHVyZS4gQXBwbGljYXRpb25zIGV4cGVjdCB0byBmaW5kIGFuZC9vcgogICAgICAgICAgICAgIGluc3RhbGwgdGhpbmdzIGluIHNwZWNpZmljIHByZWRldGVybWluZWQgbG9jYXRpb25zLiBNb3N0CiAgICAgICAgICAgICAgb2YgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIGV4cGVjdGVkIHRvIGV4aXN0LiBCdXQgdW5saWtlCiAgICAgICAgICAgICAgVW5peCBkaXJlY3Rvcnkgc3RydWN0dXJlcywgbW9zdCBvZiB0aGVzZSBsb2NhdGlvbnMgYXJlCiAgICAgICAgICAgICAgbm90IGhhcmRjb2RlZCwgYW5kIGNhbiBiZSBxdWVyaWVkIHZpYSB0aGUgV2luZG93cyBBUEkKICAgICAgICAgICAgICBhbmQgdGhlIHJlZ2lzdHJ5LiBUaGlzIHBsYWNlcyBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBvbgogICAgICAgICAgICAgIGEgV2luZSBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFN5c3RlbSBETExzLiBJbiBXaW5kb3dzLCB0aGVzZSB1c3VhbGx5IHJlc2lkZSBpbiB0aGUKICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtPC9maWxlbmFtZT4gKG9yCiAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbTMyPC9maWxlbmFtZT4pIGRpcmVjdG9yeS4gU29tZSBXaW5kb3dzCiAgICAgICAgICAgICAgcHJvZ3JhbXMgY2hlY2sgZm9yIHRoZWlyIGV4aXN0ZW5jZSBpbiB0aGVzZQogICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGxvYWQgdGhlbS4gV2hpbGUgV2luZQogICAgICAgICAgICAgIGlzIGFibGUgdG8gbG9hZCBpdHMgb3duIGludGVybmFsIERMTHMKICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGVzKSB3aGVuIHRoZSBwcm9ncmFtCiAgICAgICAgICAgICAgYXNrcyBmb3IgYSBETEwsIFdpbmUgZG9lcyBub3Qgc2ltdWxhdGUgdGhlIGV4aXN0ZW5jZSBvZgogICAgICAgICAgICAgIG5vbmV4aXN0aW5nIGZpbGVzLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIFdoaWxlIHRoZSB1c2VycyBhcmUgb2YgY291cnNlIGZyZWUgdG8gc2V0IHVwIGV2ZXJ5dGhpbmcKICAgICAgICAgIHRoZW1zZWx2ZXMsIHRoZSBXaW5lIHRlYW0gd2lsbCBtYWtlIHRoZSBhdXRvbWF0ZWQgV2luZSBzb3VyY2UKICAgICAgICAgIGluc3RhbGxhdGlvbiBzY3JpcHQsIDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+LAogICAgICAgICAgZG8gZXZlcnl0aGluZyB3ZSBmaW5kIG5lY2Vzc2FyeSB0byBkbzsgcnVubmluZyB0aGUKICAgICAgICAgIGNvbnZlbnRpb25hbCA8dXNlcmlucHV0PmNvbmZpZ3VyZSAmJiBtYWtlIGRlcGVuZCAmJiBtYWtlICYmIG1ha2UKICAgICAgICAgICAgaW5zdGFsbDwvdXNlcmlucHV0PiBjeWNsZSBpcyB0aHVzIG5vdCByZWNvbW1lbmRlZCwgdW5sZXNzCiAgICAgICAgICB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gQXQgdGhlIG1vbWVudCwKICAgICAgICAgIDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+IGlzIGFibGUgdG8gY3JlYXRlIGEKICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSwgaW5zdGFsbCB0aGUgcmVnaXN0cnksIGFuZCBjcmVhdGUgdGhlCiAgICAgICAgICBkaXJlY3Rvcnkgc3RydWN0dXJlIGl0c2VsZi4KICAgICAgICA8L3BhcmE+CgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImNvbmZpZy1oZWxwZXItcHJvZ3JhbXMiPgogICAgICA8dGl0bGU+RWFzeSBjb25maWd1cmF0aW9uIGhlbHBlciBwcm9ncmFtczwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBNYW5hZ2luZyB0aGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUgc2V0dGluZ3MgY2FuIGJlIGEKCWRpZmZpY3VsdCB0YXNrLCBzb21ldGltZXMgdG9vIGRpZmZpY3VsdCBmb3Igc29tZSBwZW9wbGUuCglUaGF0J3Mgd2h5IHRoZXJlIGFyZSBzb21lIGhlbHBlciBhcHBsaWNhdGlvbnMgZm9yIGVhc2lseSBzZXR0aW5nIHVwIGFuCglpbml0aWFsIHdpbmUgY29uZmlndXJhdGlvbiBmaWxlIHdpdGggdXNlZnVsIGRlZmF1bHQgc2V0dGluZ3MuCiAgICAgIDwvcGFyYT4KCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLWhlbHBlci13aW5lc2V0dXB0ayI+CiAgICAgICAgPHRpdGxlPldpbmVTZXR1cFRrPC90aXRsZT4KCTxwYXJhPgoJICBXaW5lU2V0dXBUayBpcyBhIGdyYXBoaWNhbCBXaW5lIGNvbmZpZ3VyYXRpb24gdG9vbCB3aXRoCgkgIGluY3JlZGlibHkgZWFzeSBoYW5kbGluZyBvZiBXaW5lIGNvbmZpZ3VyYXRpb24gaXNzdWVzLCB0byBiZQoJICB1c2VkIGZvciBjb25maWd1cmluZyB0aGUgV2luZSBlbnZpcm9ubWVudCBhZnRlciBoYXZpbmcKCSAgaW5zdGFsbGVkIHRoZSBXaW5lIGZpbGVzLgoJICBJdCBoYXMgYmVlbiB3cml0dGVuIGJ5IENvZGVXZWF2ZXJzIGluIDIwMDAgYXMgcGFydCBvZiBhIGhvc3QKCSAgb2Ygb3RoZXIgZWZmb3J0cyB0byBtYWtlIFdpbmUgbW9yZSBkZXNrdG9wIG9yaWVudGVkLgoJPC9wYXJhPgoJPHBhcmE+CgkgIElmIHlvdSdyZSB1c2luZyBEZWJpYW4sIHNpbXBseSBpbnN0YWxsIHRoZSB3aW5lc2V0dXB0awoJICBwYWNrYWdlIChhcyByb290KToKCTwvcGFyYT4KICAgICAgICA8c2NyZWVuPgogIDxwcm9tcHQ+IyA8L3Byb21wdD48dXNlcmlucHV0PmFwdC1nZXQgaW5zdGFsbCB3aW5lc2V0dXB0azwvdXNlcmlucHV0PgogICAgICAgIDwvc2NyZWVuPgoJPHBhcmE+CgkgIElmIHlvdSdyZSB1c2luZyBhbm90aGVyIGRpc3RyaWJ1dGlvbiwgc2VhcmNoIGZvciB0aGUgcGFja2FnZSBvbgoJICB0aGUgbmV0LgoJPC9wYXJhPgogICAgICA8L3NlY3QyPgogICAgICAKICAgICAgPHNlY3QyIGlkPSJjb25maWctaGVscGVyLXdpbmVpbnN0YWxsIj4KICAgICAgICA8dGl0bGU+d2luZWluc3RhbGw8L3RpdGxlPgoJPHBhcmE+CgkgIDxjb21tYW5kPndpbmVpbnN0YWxsPC9jb21tYW5kPiBpcyBhIHNtYWxsIGNvbmZpZ3VyYXRpb24gdG9vbAoJICByZXNpZGluZyBhcyA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBpbiBhIFdpbmUKCSAgc291cmNlIGNvZGUgdHJlZS4gIEl0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gYWxsb3cgZm9yIGFuIGVhc3kKCSAgYW5kIGNvbXBsZXRlIGNvbXBpbGF0aW9uL2luc3RhbGxhdGlvbiBvZiBXaW5lIHNvdXJjZSBjb2RlIGZvcgoJICBwZW9wbGUgd2hvIGRvbid0IGJvdGhlciB3aXRoIHJlYWRpbmcgaGVhcHMgb2YgdmVyeSB2YWx1YWJsZQoJICBhbmQgaW5mb3JtYXRpdmUgZG9jdW1lbnRhdGlvbiA7LSkKCTwvcGFyYT4KCTxwYXJhPgoJICBPbmNlIHlvdSBoYXZlIHN1Y2Nlc3NmdWxseSBleHRyYWN0ZWQgdGhlIFdpbmUgc291cmNlIGNvZGUKCSAgdHJlZSwgY2hhbmdlIHRvIHRoZSBtYWluIGRpcmVjdG9yeSBvZiBpdCBhbmQgdGhlbiBydW4gKGFzCgkgIHVzZXIpOgoJPC9wYXJhPgogICAgICAgIDxzY3JlZW4+CiAgPHByb21wdD4kIDwvcHJvbXB0Pjx1c2VyaW5wdXQ+Li90b29scy93aW5laW5zdGFsbDwvdXNlcmlucHV0PgogICAgICAgIDwvc2NyZWVuPgoJPHBhcmE+CgkgIERvaW5nIHNvIHdpbGwgY29tcGlsZSBXaW5lLCBpbnN0YWxsIFdpbmUgYW5kIGNvbmZpZ3VyZSB0aGUKCSAgV2luZSBlbnZpcm9ubWVudCAoZWl0aGVyIGJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYSBXaW5kb3dzCgkgIHBhcnRpdGlvbiBvciBieSBjcmVhdGluZyBhIHByb3Blcmx5IGNvbmZpZ3VyZWQgbm8td2luZG93cwoJICBkaXJlY3RvcnkgZW52aXJvbm1lbnQpLgoJPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctaGVscGVyLXdpbmVjZmciPgogICAgICAgIDx0aXRsZT53aW5lY2ZnPC90aXRsZT4KCTxwYXJhPgoJICA8Y29tbWFuZD53aW5lY2ZnPC9jb21tYW5kPiBpcyBhIHNtYWxsIGdyYXBoaWNhbCBjb25maWd1cmF0aW9uIHRvb2wKCSAgcmVzaWRpbmcgYXMgPGZpbGVuYW1lPnByb2dyYW1zL3dpbmVjZmc8L2ZpbGVuYW1lPiBpbiBhIFdpbmUKCSAgc291cmNlIGNvZGUgdHJlZS4gSXQgaXMgYSBXaW5lbGliIGFwcCBtYWtpbmcgdXNlIG9mIHN0YW5kYXJkCgkgIFdpbjMyIEdVSSBjb250cm9scyB0byBlYXNpbHkgY3VzdG9taXplIGVudHJpZXMgaW4gYSBXaW5lCgkgIGNvbmZpZ3VyYXRpb24gZmlsZS4KCTwvcGFyYT4KICAgICAgPC9zZWN0Mj4KICAgIDwvc2VjdDE+CgogICAgPHNlY3QxIGlkPSJjb25maWctdmVyaWZ5Ij4KICAgICAgPHRpdGxlPlZlcmlmaWNhdGlvbiBvZiBjb3JyZWN0IGNvbmZpZ3VyYXRpb248L3RpdGxlPgoKICAgICAgPHBhcmE+CglBZnRlciB5b3UgZmluaXNoZWQgY29uZmlndXJpbmcgV2luZSwgeW91IG1heSBydW4gYSBQZXJsCglzY3JpcHQgY2FsbGVkIDxjb21tYW5kPndpbmVjaGVjazwvY29tbWFuZD4sIHRvIGJlIGZvdW5kCglpbiBXaW5lJ3MgdG9vbHMvIGRpcmVjdG9yeS4gSXQgdHJpZXMgdG8gY2hlY2sgeW91cgoJY29uZmlndXJhdGlvbidzIGNvcnJlY3RuZXNzIGJ5IGNoZWNraW5nIGZvciBzb21lIHBvcHVsYXIKCXByb2JsZW1zLgoKCVRoZSBsYXRlc3QgdmVyc2lvbiBjYW4gYWx3YXlzIGJlIGZvdW5kIGF0Cgk8dWxpbmsgdXJsPSJodHRwOi8vaG9tZS5hcmNvci5kZS9hbmRpLm1vaHIvZG93bmxvYWQvd2luZWNoZWNrIj5odHRwOi8vaG9tZS5hcmNvci5kZS9hbmRpLm1vaHIvZG93bmxvYWQvd2luZWNoZWNrPC91bGluaz4uCgogICAgICAgIFRvIHJ1biBpdCwgcnVuIGluIGEgPGdsb3NzdGVybT50ZXJtaW5hbDwvZ2xvc3N0ZXJtPiBpbiB0aGUgV2luZSBzb3VyY2UgdHJlZSBkaXJlY3Rvcnk6CiAgICAgIDwvcGFyYT4KICAgICAgPHNjcmVlbj4KICA8cHJvbXB0PiQgPC8+PHVzZXJpbnB1dD5jZCB0b29sczwvPgogIDxwcm9tcHQ+JCA8Lz48dXNlcmlucHV0PnBlcmwgLi93aW5lY2hlY2s8Lz4KICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgoJVGhlIHdpbmVjaGVjayBvdXRwdXQgd2lsbCBiZSBhIHBlcmNlbnRhZ2Ugc2NvcmUgaW5kaWNhdGluZyBXaW5lCgljb25maWd1cmF0aW9uIGNvcnJlY3RuZXNzLgoJTm90ZSB0aGF0IHdpbmVjaGVjayBpcyBvbmx5IGFscGhhLCBzbyBpdCdzIG5vdCB2ZXJ5IGNvbXBsZXRlIG9yCgkxMDAlIGFjY3VyYXRlLgogICAgICA8L3BhcmE+CgogICAgICA8cGFyYT4KICAgICAgICBJZiB0aGlzIHlpZWxkcyBhICJnb29kIiBwZXJjZW50YWdlIHNjb3JlLCB0aGVuIHlvdSBjYW4gY29uc2lkZXIKCXlvdXIgV2luZSBpbnN0YWxsYXRpb24gdG8gYmUgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5OgoJQ29uZ3JhdHVsYXRpb25zIQoJT3RoZXJ3aXNlIChvciBpZiB0aGVyZSBhcmUgc3RpbGwgc29tZSBjb25maWd1cmF0aW9uIHByb2JsZW1zCgl0aGF0IDxjb21tYW5kPndpbmVjaGVjazwvY29tbWFuZD4gZG9lc24ndCBjYXRjaCBwcm9wZXJseSksIHBsZWFzZSBjaGVjayBvdXQgdGhlCgljb25maWd1cmF0aW9uIGRvY3VtZW50YXRpb24gYmVsb3cgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBzb21lCglwYXJ0cywgb3IgcHJvY2VlZCB0byB0aGUgPGxpbmsgbGlua2VuZD0iYnVncyI+VHJvdWJsZXNob290aW5nCgljaGFwdGVyPC9saW5rPi4KICAgICAgPC9wYXJhPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImNvbmZpZy1maWxlIj4KICAgICAgPHRpdGxlPlRoZSBXaW5lIENvbmZpZ3VyYXRpb24gRmlsZTwvdGl0bGU+CiAgICAgIDxwYXJhPgogICAgICAgIFRoaXMgc2VjdGlvbiBpcyBtZWFudCB0byBjb250YWluIGJvdGggYW4gZWFzeSBzdGVwLWJ5LXN0ZXAgaW50cm9kdWN0aW9uCgl0byB0aGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUgKGZvciBuZXcgV2luZSB1c2VycykKCWFuZCBhIGNvbXBsZXRlIHJlZmVyZW5jZSB0byBhbGwgV2luZSBjb25maWd1cmF0aW9uIGZpbGUgc2V0dGluZ3MgKGZvcgoJYWR2YW5jZWQgdXNlcnMpLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIFBhcnRzIHRha2VuIGZyb20gdGhlIGZvcm1lciBmaWxlIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vY29uZmlnPC9maWxlbmFtZT4sCiAgICAgICAgQ29weXJpZ2h0IDE5OTkgJm5hbWUtYWRhbS1zYWNhcm55OyA8ZW1haWw+JmVtYWlsLWFkYW0tc2FjYXJueTs8L2VtYWlsPgogICAgICA8L3BhcmE+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gRmlsZSBJbnRyb2R1Y3Rpb248L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhlIFdpbmUgY29uZmlndXJhdGlvbiBmaWxlIGlzIHRoZSBjZW50cmFsIGZpbGUgdG8gc3RvcmUKCSAgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgV2luZS4KCSAgVGhpcyBmaWxlICh3aGljaCBpcyBjYWxsZWQgPGZpbGVuYW1lPmNvbmZpZzwvZmlsZW5hbWU+KQoJICBjYW4gYmUgZm91bmQgaW4gdGhlIHN1YiBkaXJlY3RvcnkgPGZpbGVuYW1lPi53aW5lLzwvZmlsZW5hbWU+CgkgIG9mIHlvdXIgdXNlcidzIGhvbWUgZGlyZWN0b3J5CgkgIChkaXJlY3RvcnkgPGZpbGVuYW1lPi9ob21lL3VzZXIvPC9maWxlbmFtZT4pLiBJbiBvdGhlciB3b3JkcywgdGhlIFdpbmUKCSAgY29uZmlndXJhdGlvbiBmaWxlIGlzIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+LgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBzZXR0aW5ncyBhdmFpbGFibGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbmNsdWRlOgogICAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgRHJpdmVzIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGVtCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBEaXJlY3Rvcnkgc2V0dGluZ3MKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFBvcnQgc2V0dGluZ3MKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFRoZSBXaW5lIGxvb2sgYW5kIGZlZWwKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFdpbmUncyBETEwgdXNhZ2UKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFdpbmUncyBtdWx0aW1lZGlhIGRyaXZlcnMgYW5kIERMTCBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5DcmVhdGluZyBPciBNb2RpZnlpbmcgVGhlIENvbmZpZ3VyYXRpb24gRmlsZTwvdGl0bGU+CiAgICAgICAgPHBhcmE+CgkgIElmIHlvdSBqdXN0IGluc3RhbGxlZCBXaW5lIGZvciB0aGUgZmlyc3QgdGltZSBhbmQgd2FudCB0bwoJICBmaW5pc2ggV2luZSBpbnN0YWxsYXRpb24gYnkgY29uZmlndXJpbmcgaXQgbm93LCB0aGVuIHlvdSBjb3VsZAoJICB1c2Ugb3VyIHNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgPGZpbGVuYW1lPmNvbmZpZzwvZmlsZW5hbWU+CgkgICh3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlIGRpcmVjdG9yeQoJICA8ZmlsZW5hbWU+ZG9jdW1lbnRhdGlvbi9zYW1wbGVzLzwvZmlsZW5hbWU+IG9mIHRoZSBXaW5lIHNvdXJjZQoJICBjb2RlIGRpcmVjdG9yeSkgYXMgYSBiYXNlIGZvciBhZGFwdGluZyB0aGUgV2luZSBjb25maWd1cmF0aW9uCgkgIGZpbGUgdG8gdGhlIHNldHRpbmdzIHlvdSB3YW50LgoJICBGaXJzdCwgSSBzaG91bGQgbWVudGlvbiB0aGF0IHlvdSBzaG91bGQgbm90IGZvcmdldCB0byBtYWtlCgkgIHN1cmUgdGhhdCBhbnkgcHJldmlvdXMgY29uZmlndXJhdGlvbiBmaWxlIGF0CgkgIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+IGhhcyBiZWVuIHNhZmVseSBtb3ZlZCBvdXQKCSAgb2YgdGhlIHdheSBpbnN0ZWFkIG9mIHNpbXBseSBvdmVyd3JpdGluZyBpdCB3aGVuIHlvdSB3aWxsIG5vdwoJICBjb3B5IG92ZXIgdGhlIHNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUuCiAgICAgICAgPC9wYXJhPgoJPHBhcmE+CgkgIElmIHlvdSBkb24ndCBoYXZlIGEgcHJlLWV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgdGh1cwoJICBuZWVkIHRvIGNvcHkgb3ZlciBvdXIgc2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSB0byB0aGUKCSAgc3RhbmRhcmQgV2luZSBjb25maWd1cmF0aW9uIGZpbGUgbG9jYXRpb24sIGRvIGluIGEKCSAgPGdsb3NzdGVybT50ZXJtaW5hbDwvZ2xvc3N0ZXJtPjoKICAgICAgICAgIDxzY3JlZW4+CiAgPHByb21wdD4kIDwvPjx1c2VyaW5wdXQ+bWtkaXIgfi8ud2luZS88Lz4KICA8cHJvbXB0PiQgPC8+PHVzZXJpbnB1dD5jcCA8cmVwbGFjZWFibGU+ZGlyX3RvX3dpbmVfc291cmNlX2NvZGU8L3JlcGxhY2VhYmxlPi9kb2N1bWVudGF0aW9uL3NhbXBsZXMvY29uZmlnIH4vLndpbmUvY29uZmlnPC8+CiAgICAgICAgICA8L3NjcmVlbj4KCSAgT3RoZXJ3aXNlLCBzaW1wbHkgdXNlIHRoZSBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZQoJICBhdCA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPi4KCTwvcGFyYT4KCTxwYXJhPgoJICBOb3cgeW91IGNhbiBzdGFydCBhZGFwdGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlJ3Mgc2V0dGluZ3Mgd2l0aCBhbgoJICA8Z2xvc3N0ZXJtPmVkaXRvcjwvZ2xvc3N0ZXJtPiBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRpb24KCSAgYmVsb3cuCgkgIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIDxlbXBoYXNpcz5vbmx5PC9lbXBoYXNpcz4gY2hhbmdlCgkgIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXR0aW5ncyBpZiB3aW5lc2VydmVyIGlzIG5vdCBydW5uaW5nIChpbgoJICBvdGhlciB3b3JkczogaWYgeW91ciB1c2VyIGRvZXNuJ3QgaGF2ZSBhIFdpbmUgc2Vzc2lvbiBydW5uaW5nKSwKCSAgb3RoZXJ3aXNlIFdpbmUgd29uJ3QgdXNlIHRoZW0gLSBhbmQgZXZlbiB3b3JzZSwgd2luZXNlcnZlciB3aWxsCgkgIG92ZXJ3cml0ZSB0aGVtIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBvbmNlIHdpbmVzZXJ2ZXIgcXVpdHMhIQoJPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctZmlsZS1ob3ciPgogICAgICAgIDx0aXRsZT5XaGF0IERvZXMgSXQgQ29udGFpbj88L3RpdGxlPgoKICAgICAgICA8cGFyYT4KCSAgTGV0J3Mgc3RhcnQgYnkgZ2l2aW5nIGFuIG92ZXJ2aWV3IG9mIHdoaWNoIHNlY3Rpb25zIGEKCSAgY29uZmlndXJhdGlvbiBmaWxlIG1heSBjb250YWluLCBhbmQgd2hldGhlciB0aGUgaW5jbHVzaW9uIG9mCgkgIHRoZSByZXNwZWN0aXZlIHNlY3Rpb24gaXMgPGVtcGhhc2lzPm5lZWRlZDwvZW1waGFzaXM+IG9yIG9ubHkgPGVtcGhhc2lzPnJlY29tbWVuZGVkPC9lbXBoYXNpcz4gKCJyZWNtZCIpLgoJPC9wYXJhPgoKICAgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0iYWxsIj4KICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PlNlY3Rpb24gTmFtZTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+TmVlZGVkPzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+V2hhdCBpdCBEb2VzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0RyaXZlIHhdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT55ZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlNldHMgdXAgZHJpdmUgbWFwcGluZ3MgdG8gYmUgdXNlZCBieSBXaW5lPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5Plt3aW5lXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+eWVzPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5HZW5lcmFsIHNldHRpbmdzIGZvciBXaW5lPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltEbGxEZWZhdWx0c108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnJlY21kPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5EZWZhdWx0cyBmb3IgbG9hZGluZyBETEwnczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bRGxsUGFpcnNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5yZWNtZDwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+U2FuaXR5IGNoZWNrZXJzIGZvciBETEwnczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bRGxsT3ZlcnJpZGVzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pk92ZXJyaWRlcyBkZWZhdWx0cyBmb3IgRExMIGxvYWRpbmc8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3gxMWRydl08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnJlY21kPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5HcmFwaGljcyBkcml2ZXIgc2V0dGluZ3M8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W2ZvbnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+eWVzPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5Gb250IGFwcGVhcmFuY2UgYW5kIHJlY29nbml0aW9uPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltzZXJpYWxwb3J0c108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5DT00gcG9ydHMgc2VlbiBieSBXaW5lPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltwYXJhbGxlbHBvcnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkxQVCBwb3J0cyBzZWVuIGJ5IFdpbmU8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3BwZGV2XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlBhcmFsbGVscG9ydCBlbXVsYXRpb248L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3Nwb29sZXJdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+UHJpbnQgc3Bvb2xpbmc8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3BvcnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkRpcmVjdCBwb3J0IGFjY2VzczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bRGVidWddPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+V2hhdCB0byBkbyB3aXRoIGNlcnRhaW4gZGVidWcgbWVzc2FnZXM8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W1JlZ2lzdHJ5XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlNwZWNpZmllcyBsb2NhdGlvbnMgb2Ygd2luZG93cyByZWdpc3RyeSBmaWxlczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bdHdlYWsubGF5b3V0XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkFwcGVhcmFuY2Ugb2YgV2luZTwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bcHJvZ3JhbXNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+UHJvZ3JhbXMgdG8gYmUgcnVuIGF1dG9tYXRpY2FsbHk8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0NvbnNvbGVdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+Q29uc29sZSBzZXR0aW5nczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bQ2xpcGJvYXJkXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkludGVyYWN0aW9uIGZvciBXaW5lIGFuZCBYMTEgY2xpcGJvYXJkPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PlthZm1kaXJzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlBvc3RzY3JpcHQgZHJpdmVyIHNldHRpbmdzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltXaW5NTV08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnllczwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+TXVsdGltZWRpYSBzZXR0aW5nczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bQXBwRGVmYXVsdHNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+T3ZlcndyaXRlIHRoZSBzZXR0aW5ncyBvZiBwcmV2aW91cyBzZWN0aW9ucyBmb3Igc3BlY2lhbCBwcm9ncmFtczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICA8L3Rncm91cD4KICAgICAgICA8L2luZm9ybWFsdGFibGU+CgogICAgICAgIDxwYXJhPgoJICBOb3cgbGV0J3MgZXhwbGFpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHNlY3Rpb25zIGluIGEKCSAgZGV0YWlsZWQgd2F5LgoJPC9wYXJhPgoJCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbRHJpdmUgeF0gU2VjdGlvbnM8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CgkgICAgRm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlc2UgY29uZmlndXJhdGlvbiBmaWxlCgkgICAgc2VjdGlvbnMgd2hpY2ggYXJlIHVzZWQgdG8gc2V0IHVwIERPUyBkcml2ZSBtYXBwaW5ncyB0byBVbml4CgkgICAgZGlyZWN0b3J5IHNwYWNlLCBwbGVhc2UgbG9vayBhdCB0aGUgPGxpbmsKCSAgICBsaW5rZW5kPSJjb25maWctZHJpdmUtc2VjdGlvbnMiPldpbmUgZmlsZSBzeXN0ZW0gbGF5ZXIKCSAgICBjb25maWd1cmF0aW9uIHNlY3Rpb248L2xpbms+LgoJICA8L3BhcmE+Cgk8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy13aW5lIj4KICAgICAgICAgIDx0aXRsZT5UaGUgW3dpbmVdIFNlY3Rpb24gPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3dpbmVdIHNlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb250YWlucyBhbGwga2luZHMKICAgICAgICAgICAgb2YgZ2VuZXJhbCBzZXR0aW5ncyBmb3IgV2luZS4KICAJICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgoiV2luZG93cyIgPSAiYzpcXHdpbmRvd3MiCiJTeXN0ZW0iID0gImM6XFx3aW5kb3dzXFxzeXN0ZW0iCiJUZW1wIiA9ICJjOlxcdGVtcCIKIlBhdGgiID0gImM6XFx3aW5kb3dzO2M6XFx3aW5kb3dzXFxzeXN0ZW07YzpcXGJsYW5jbyIKIlNob3dEaXJTeW1saW5rcyIgPSAiMSIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KCSAgICBGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBkcml2ZSBsYXllciBjb25maWd1cmF0aW9uIGFuZAoJICAgIHRoZSBtZWFuaW5nIG9mIHRoZXNlIHBhcmFtZXRlcnMsIHBsZWFzZSBsb29rIGF0IHRoZSA8bGluawoJICAgIGxpbmtlbmQ9ImNvbmZpZy1kcml2ZS1tYWluIj5XaW5lIGZpbGUgc3lzdGVtIGxheWVyCgkgICAgY29uZmlndXJhdGlvbiBzZWN0aW9uPC9saW5rPi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkdyYXBoaWNzRHJpdmVyIiA9ICJ4MTFkcnZ8dHR5ZHJ2IjwvcHJvZ3JhbWxpc3Rpbmc+CiAgCSAgICBTZXRzIHRoZSBncmFwaGljcyBkcml2ZXIgdG8gdXNlIGZvciBXaW5lIG91dHB1dC4KICAJICAgIHgxMWRydiBpcyBmb3IgWDExIG91dHB1dCwgdHR5ZHJ2IGlzIGZvciB0ZXh0IGNvbnNvbGUgb3V0cHV0LgogIAkgICAgV0FSTklORzogaWYgeW91IHVzZSB0dHlkcnYgaGVyZSwgdGhlbiB5b3Ugd29uJ3QgYmUgYWJsZSB0byBydW4KICAJICAgIGEgbG90IG9mIFdpbmRvd3MgR1VJIHByb2dyYW1zICh0dHlkcnYgaXMgc3RpbGwgcHJldHR5ICJicm9rZW4iCiAgCSAgICBhdCBydW5uaW5nIGdyYXBoaWNhbCBhcHBzKS4gVGh1cyB0aGlzIG9wdGlvbiBpcyBtYWlubHkgaW50ZXJlc3RpbmcKICAJICAgIGZvciBlLmcuIGVtYmVkZGVkIHVzZSBvZiBXaW5lIGluIHdlYiBzZXJ2ZXIgc2NyaXB0cy4KICAJICAgIE5vdGUgdGhhdCB0dHlkcnYgaXMgc3RpbGwgdmVyeSBsYWNraW5nLCBzbyBpZiBpdCBkb2Vzbid0IHdvcmssCiAgCSAgICByZXNvcnQgdG8gdXNpbmcgInh2ZmIiLCBhIHZpcnR1YWwgWDExIHNlcnZlci4KICAJICAgIEFub3RoZXIgd2F5IHRvIHJ1biBXaW5lIHdpdGhvdXQgZGlzcGxheSB3b3VsZCBiZSB0byBydW4gWDExCiAgCSAgICB2aWEgWHZuYywgdGhlbiBjb25uZWN0IHRvIHRoYXQgVk5DIGRpc3BsYXkgdXNpbmcgeHZuY3ZpZXdlcgogIAkgICAgKHRoYXQgd2F5IHlvdSdyZSBzdGlsbCBhYmxlIHRvIGNvbm5lY3QgdG8geW91ciBhcHAgYW5kCiAgCSAgICBjb25maWd1cmUgaXQgaWYgbmVlZCBiZSkuCiAgCSAgPC9wYXJhPgogIAkgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlByaW50ZXIiID0gIm9mZnxvbiI8L3Byb2dyYW1saXN0aW5nPiBUZWxscyB3aW5lCiAgICAgICAgICAgIHdoZXRoZXIgdG8gYWxsb3cgcHJpbnRpbmcgdmlhIHByaW50ZXIgZHJpdmVycyB0byB3b3JrLgogIAkgICAgVGhpcyBvcHRpb24gaXNuJ3QgbmVlZGVkIGZvciBvdXIgYnVpbHQtaW4gcHNkcnYgcHJpbnRlciBkcml2ZXIKICAJICAgIGF0IGFsbC4KICAgICAgICAgICAgVXNpbmcgdGhlc2UgdGhpbmdzIGFyZSBwcmV0dHkgYWxwaGEsIHNvIHlvdSBtaWdodCB3YW50IHRvCiAgICAgICAgICAgIHdhdGNoIG91dC4gU29tZSBwZW9wbGUgbWlnaHQgZmluZCBpdCB1c2VmdWwsIGhvd2V2ZXIuIElmCiAgICAgICAgICAgIHlvdSdyZSBub3QgcGxhbm5pbmcgdG8gd29yayBvbiBwcmludGluZyB2aWEgd2luZG93cyBwcmludGVyCiAgCSAgICBkcml2ZXJzLCBkb24ndCBldmVuIGFkZCB0aGlzIHRvIHlvdXIgd2luZSBjb25maWd1cmF0aW9uIGZpbGUKICAJICAgIChJdCBwcm9iYWJseSBpc24ndCBhbHJlYWR5IGluIGl0KS4KICAJICAgIENoZWNrIG91dCB0aGUgW3Nwb29sZXJdIGFuZCBbcGFyYWxsZWxwb3J0c10gc2VjdGlvbnMgdG9vLgogICAgICAgICAgPC9wYXJhPgogIAkgIDxwYXJhPgogIAkgICAgPHByb2dyYW1saXN0aW5nPiJTaGVsbExpbmtlciIgPSAid2luZXNoZWxsbGluayI8L3Byb2dyYW1saXN0aW5nPgogIAkgICAgVGhpcyBzZXR0aW5nIHNwZWNpZmllcyB0aGUgc2hlbGwgbGlua2VyIHNjcmlwdCB0byB1c2UgZm9yIHNldHRpbmcKICAJICAgIHVwIFdpbmRvd3MgaWNvbnMgaW4gZS5nLiBLREUgb3IgR25vbWUgdGhhdCBhcmUgZ2l2ZW4gYnkgcHJvZ3JhbXMKICAJICAgIG1ha2luZyB1c2Ugb2YgYXBwcm9wcmlhdGUgc2hlbGwzMi5kbGwgZnVuY3Rpb25hbGl0eSB0byBjcmVhdGUKICAJICAgIGljb25zIG9uIHRoZSBkZXNrdG9wL3N0YXJ0IG1lbnUgZHVyaW5nIGluc3RhbGxhdGlvbi4KICAJICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTeW1ib2xUYWJsZUZpbGUiID0gIndpbmUuc3ltIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdXAgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIGZvciB0aGUgd2luZSBkZWJ1Z2dlci4gWW91CiAgICAgICAgICAgIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZmlkZGxlIHdpdGggdGhpcy4gTWF5IGJlIHVzZWZ1bCBpZgogICAgICAgICAgICB5b3VyIHdpbmUgaXMgc3RyaXBwZWQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzIGlkPSJjb25maWctZGxsZGVmYXVsdHMiPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGxsRGVmYXVsdHNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZXNlIHNldHRpbmdzIHByb3ZpZGUgd2luZSdzIGRlZmF1bHQgaGFuZGxpbmcgb2YgRExMIGxvYWRpbmcuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0TG9hZE9yZGVyIiA9IiBuYXRpdmUsIGJ1aWx0aW4iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGlzIHNldHRpbmcgaXMgYSBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiB0aGUgb3JkZXIgaW4KICAgICAgICAgICAgd2hpY2ggdG8gYXR0ZW1wdCBsb2FkaW5nIERMTHMuIElmIHRoZSBmaXJzdCBvcHRpb24gZmFpbHMsCiAgICAgICAgICAgIGl0IHdpbGwgdHJ5IHRoZSBzZWNvbmQsIGFuZCBzbyBvbi4gVGhlIG9yZGVyIHNwZWNpZmllZAogICAgICAgICAgICBhYm92ZSBpcyBwcm9iYWJseSB0aGUgYmVzdCBpbiBtb3N0IGNvbmRpdGlvbnMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGxsUGFpcnNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICBBdCBvbmUgdGltZSwgdGhlcmUgd2FzIGEgc2VjdGlvbiBjYWxsZWQgW0RsbFBhaXJzXSBpbiB0aGUKICAgICAgICAgIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlLCBidXQgdGhpcyBoYXMgYmVlbiBvYnNvbGV0ZWQKICAgICAgICAgIGJlY2F1c2UgdGhlIHBhaXJpbmcgaW5mb3JtYXRpb24gaGFzIG5vdyBiZWVuIGVtYmVkZGVkIGludG8KICAgICAgICAgIFdpbmUgaXRzZWxmLiAoVGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHdhcyBtZXJlbHkgdG8gYmUKICAgICAgICAgIGFibGUgdG8gaXNzdWUgd2FybmluZ3MgaWYgdGhlIHVzZXIgYXR0ZW1wdGVkIHRvIHBhaXIKICAgICAgICAgIGNvZGVwZW5kZW50IDE2LWJpdC8zMi1iaXQgRExMcyBvZiBkaWZmZXJlbnQgdHlwZXMuKSBJZiB5b3UKICAgICAgICAgIHN0aWxsIGhhdmUgdGhpcyBpbiB5b3VyIDxmaWxlbmFtZT5+Ly53aW5lLy5jb25maWc8L2ZpbGVuYW1lPiBvcgogICAgICAgICAgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+LCB5b3UgbWF5IHNhZmVseSBkZWxldGUgaXQuCiAgICAgICAgICA8L3BhcmE+CiAgCTwvc2VjdDM+CgogICAgICAgIDxzZWN0MyBpZD0iY29uZmlnLWRsbG92ZXJyaWRlcyI+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEbGxPdmVycmlkZXNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBmb3JtYXQgZm9yIHRoaXMgc2VjdGlvbiBpcyB0aGUgc2FtZSBmb3IgZWFjaCBsaW5lOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiAgJmx0O0RMTD57LCZsdDtETEw+LCZsdDtETEw+Li4ufSA9ICZsdDtGT1JNPnssJmx0O0ZPUk0+LCZsdDtGT1JNPi4uLn0KICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gbG9hZCBidWlsdC1pbiBLRVJORUwgcGFpciAoY2FzZSBkb2Vzbid0CiAgICAgICAgICAgIG1hdHRlciBoZXJlKToKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgogICJrZXJuZWwsa2VybmVsMzIiID0gImJ1aWx0aW4iCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVG8gbG9hZCB0aGUgbmF0aXZlIENPTU1ETEcgcGFpciwgYnV0IGlmIHRoYXQgZG9lc24ndCB3b3JrCiAgICAgICAgICAgIHRyeSBidWlsdC1pbjoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgogICJjb21tZGxnLGNvbWRsZzMyIiA9ICJuYXRpdmUsIGJ1aWx0aW4iCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVG8gbG9hZCB0aGUgbmF0aXZlIENPTUNUTDMyOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiAgImNvbWN0bDMyIiA9ICJuYXRpdmUiCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgSGVyZSBpcyBhIGdvb2QgZ2VuZXJpYyBzZXR1cCAoQXMgaXQgaXMgZGVmaW5lZCBpbiBjb25maWcKICAgICAgICAgICAgdGhhdCB3YXMgaW5jbHVkZWQgd2l0aCB5b3VyIHdpbmUgcGFja2FnZSk6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KICBbRGxsT3ZlcnJpZGVzXQogICJycGNydDQiICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKICAib2xlYXV0MzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiAgIm9sZTMyIiAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJjb21tZGxnIiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKICAiY29tZGxnMzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiAgInZlciIgICAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJ2ZXJzaW9uIiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKICAic2hlbGwiICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiAgInNoZWxsMzIiICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJzaGZvbGRlciIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKICAic2hsd2FwaSIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiAgInNoZG9jdnciICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJsemV4cGFuZCIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKICAibHozMiIgICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiAgImNvbWN0bDMyIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJjb21tY3RybCIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKICAiYWR2YXBpMzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiAgImNydGRsbCIgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJtcHIiICAgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKICAid2luc3Bvb2wuZHJ2IiA9ICJidWlsdGluLCBuYXRpdmUiCiAgImRkcmF3IiAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJkaW5wdXQiICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKICAiZHNvdW5kIiAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiAgIm9wZW5nbDMyIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJtc3ZjcnQiICAgICAgID0gIm5hdGl2ZSwgYnVpbHRpbiIKICAibXN2aWRlbyIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiAgIm1zdmZ3MzIiICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJtY2ljZGEuZHJ2IiAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKICAibWNpc2VxLmRydiIgICA9ICJidWlsdGluLCBuYXRpdmUiCiAgIm1jaXdhdmUuZHJ2IiAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJtY2lhdmkuZHJ2IiAgID0gIm5hdGl2ZSwgYnVpbHRpbiIKICAibWNpYW5pbS5kcnYiICA9ICJuYXRpdmUsIGJ1aWx0aW4iCiAgIm1zYWNtLmRydiIgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgogICJtc2FjbSIgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKICAibXNhY20zMiIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiAgIm1pZGltYXAuZHJ2IiAgPSAiYnVpbHRpbiwgbmF0aXZlIgogIDsgeW91IGNhbiBzcGVjaWZ5IHByb2dyYW1zIHRvbwogICJub3RlcGFkLmV4ZSIgID0gIm5hdGl2ZSwgYnVpbHRpbiIKICA7IGRlZmF1bHQgZm9yIGFsbCBvdGhlciBETExzCiAgIioiID0gIm5hdGl2ZSwgYnVpbHRpbiIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxub3RlPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBJZiBsb2FkaW5nIG9mIHRoZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIGZpcnN0IGZhaWxzLAogICAgICAgICAgICAgIHdpbmUgd2lsbCBqdXN0IGdvIG9uIGJ5IHVzaW5nIHRoZSBzZWNvbmQgb3IgdGhpcmQgb3B0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L25vdGU+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzIGlkPSJjb25maWctZm9udHMiPgogICAgICAgICAgPHRpdGxlPlRoZSBbZm9udHNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBzZXRzIHVwIHdpbmUncyBmb250IGhhbmRsaW5nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUmVzb2x1dGlvbiIgPSAiOTYiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBTaW5jZSB0aGUgd2F5IFggaGFuZGxlcyBmb250cyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgd2F5CiAgICAgICAgICAgIFdpbmRvd3MgZG9lcywgd2luZSB1c2VzIGEgc3BlY2lhbCBtZWNoYW5pc20gdG8gZGVhbCB3aXRoCiAgICAgICAgICAgIHRoZW0uIEl0IG11c3Qgc2NhbGUgdGhlbSB1c2luZyB0aGUgbnVtYmVyIGRlZmluZWQgaW4gdGhlCiAgICAgICAgICAgICJSZXNvbHV0aW9uIiBzZXR0aW5nLiA2MC0xMjAgYXJlIHJlYXNvbmFibGUgdmFsdWVzLCA5NiBpcwogICAgICAgICAgICBhIG5pY2UgaW4gdGhlIG1pZGRsZSBvbmUuIElmIHlvdSBoYXZlIHRoZSByZWFsIHdpbmRvd3MKICAgICAgICAgICAgZm9udHMgYXZhaWxhYmxlICg8ZmlsZW5hbWU+Jmx0O2RpcnMgdG8KICAgICAgICAgICAgICB3aW5lPi9kb2N1bWVudGF0aW9uL3R0ZnNlcnZlcjwvZmlsZW5hbWU+IGFuZAogICAgICAgICAgICA8ZmlsZW5hbWU+Zm9udHM8L2ZpbGVuYW1lPiksIHRoaXMgcGFyYW1ldGVyIHdpbGwgbm90IGJlIGFzCiAgICAgICAgICAgIGltcG9ydGFudC4gT2YgY291cnNlLCBpdCdzIGFsd2F5cyBnb29kIHRvIGdldCB5b3VyIFggZm9udHMKICAgICAgICAgICAgd29ya2luZyBhY2NlcHRhYmx5IGluIHdpbmUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0IiA9ICItYWRvYmUtdGltZXMtIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvbnQgd2luZSB1c2VzLiBGb29sIGFyb3VuZCB3aXRoIGl0IGlmIHlvdSdkIGxpa2UuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICBPUFRJT05BTDoKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgPGxpdGVyYWw+QWxpYXM8L2xpdGVyYWw+IHNldHRpbmcgYWxsb3dzIHlvdSB0byBtYXAgYW4gWCBmb250IHRvIGEgZm9udAogICAgICAgICAgICB1c2VkIGluIHdpbmUuIFRoaXMgaXMgZ29vZCBmb3IgYXBwcyB0aGF0IG5lZWQgYSBzcGVjaWFsIGZvbnQgeW91IGRvbid0IGhhdmUsCiAgICAgICAgICAgIGJ1dCBhIGdvb2QgcmVwbGFjZW1lbnQgZXhpc3RzLiBUaGUgc3ludGF4IGlzIGxpa2Ugc286CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KICAiQWxpYXNYIiA9ICJbRmFrZSB3aW5kb3dzIG5hbWVdLFtSZWFsIFggbmFtZV0iJmx0OyxvcHRpb25hbCAibWFza2luZyIgc2VjdGlvbj4KICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBSZXBsYWNlICJBbGlhc1giIHdpdGggIkFsaWFzMCIsCiAgICAgICAgICAgIHRoZW4gIkFsaWFzMSIgYW5kIHNvIG9uLiBUaGUgZmFrZSB3aW5kb3dzIG5hbWUgaXMgdGhlIG5hbWUKICAgICAgICAgICAgdGhhdCB0aGUgZm9udCB3aWxsIGJlIHVuZGVyIGEgd2luZG93cyBhcHAgaW4gd2luZS4gVGhlCiAgICAgICAgICAgIHJlYWwgWCBuYW1lIGlzIHRoZSBmb250IG5hbWUgYXMgc2VlbiBieSBYIChSdW4KICAgICAgICAgICAgInhmb250c2VsIikuIFRoZSBvcHRpb25hbCAibWFza2luZyIgc2VjdGlvbiBhbGxvd3MgeW91IHRvCiAgICAgICAgICAgIHV0aWxpemUgdGhlIGZha2Ugd2luZG93cyBuYW1lIHlvdSBkZWZpbmUuIElmIGl0IGlzIG5vdAogICAgICAgICAgICB1c2VkLCB0aGVuIHdpbmUgd2lsbCBqdXN0IHRyeSB0byBleHRyYWN0IHRoZSBmYWtlIHdpbmRvd3MKICAgICAgICAgICAgbmFtZSBpdHNlbGYgYW5kIG5vdCB1c2UgdGhlIHZhbHVlIHlvdSBlbnRlci4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYW4gYWxpYXMgd2l0aG91dCBtYXNraW5nLiBUaGUgZm9udCB3aWxsIHNob3cgdXAgaW4gd2luZG93cwogICAgICAgICAgICBhcHBzIGFzICJHb29nbGUiLgoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgogICJBbGlhczAiID0gIkZvbywtLWdvb2dsZS0iCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdpdGggbWFza2luZyBlbmFibGVkLiBUaGUgZm9udCB3aWxsIHNob3cgdXAgYXMgIkZvbyIgaW4KICAgICAgICAgICAgd2luZG93cyBhcHBzLgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiAgIkFsaWFzMSIgPSAiRm9vLC0tZ29vZ2xlLSxzdWJzdCIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayBvdXQgdGhlIDxsaW5rIGxpbmtlbmQ9ImNvbmZpZy1mb250cy1tYWluIj5Gb250czwvbGluaz4KICAJICAgIGNoYXB0ZXIuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzIGlkPSJjb25maWctaW8iPgogICAgICAgICAgPHRpdGxlPlRoZSBbc2VyaWFscG9ydHNdLCBbcGFyYWxsZWxwb3J0c10sIFtzcG9vbGVyXSwgYW5kIFtwb3J0c10gU2VjdGlvbnM8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEV2ZW4gdGhvdWdoIGl0IHNvdW5kcyBsaWtlIGEgbG90IG9mIHNlY3Rpb25zLCB0aGVzZSBhcmUKICAgICAgICAgICAgYWxsIGNsb3NlbHkgcmVsYXRlZC4gVGhleSBhcmUgYWxsIGZvciBjb21tdW5pY2F0aW9ucyBhbmQKICAgICAgICAgICAgcGFyYWxsZWwgcG9ydHMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIFtzZXJpYWxwb3J0c10gc2VjdGlvbiB0ZWxscyB3aW5lIHdoYXQgc2VyaWFsIHBvcnRzIGl0CiAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gdXNlLgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkNvbVgiID0gIi9kZXYvdHR5U1kiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBSZXBsYWNlIDxsaXRlcmFsPlg8L2xpdGVyYWw+IHdpdGggdGhlIG51bWJlciBvZiB0aGUgQ09NCiAgICAgICAgICAgIHBvcnQgaW4gV2luZG93cyAoMS04KSBhbmQgPGxpdGVyYWw+WTwvbGl0ZXJhbD4gd2l0aCB0aGUKICAgICAgICAgICAgbnVtYmVyIG9mIGl0IGluIDxsaXRlcmFsPlg8L2xpdGVyYWw+IChVc3VhbGx5IHRoZSBudW1iZXIKICAgICAgICAgICAgb2YgdGhlIHBvcnQgaW4gV2luZG93cyBtaW51cyAxKS4gPGxpdGVyYWw+Q29tWDwvbGl0ZXJhbD4KICAgICAgICAgICAgY2FuIGFjdHVhbGx5IGVxdWFsIGFueSBkZXZpY2UKICAgICAgICAgICAgKDxtZWRpYWxhYmVsPi9kZXYvbW9kZW08L21lZGlhbGFiZWw+IGlzIGFjY2VwdGFibGUpLiBJdCBpcwogICAgICAgICAgICBub3QgYWx3YXlzIG5lY2Vzc2FyeSB0byBkZWZpbmUgYW55IENPTSBwb3J0cyAoQW4gb3B0aW9uYWwKICAgICAgICAgICAgc2V0dGluZykuIEhlcmUgaXMgYW4gZXhhbXBsZToKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJDb20xIiA9ICIvZGV2L3R0eVMwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVXNlIGFzIG1hbnkgb2YgdGhlc2UgYXMgeW91IGxpa2UgaW4gdGhlIHNlY3Rpb24gdG8gZGVmaW5lCiAgICAgICAgICAgIGFsbCBvZiB0aGUgQ09NIHBvcnRzIHlvdSBuZWVkLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBbcGFyYWxsZWxwb3J0c10gc2VjdGlvbiBzZXRzIHVwIGFueSBwYXJhbGxlbCBwb3J0cwogICAgICAgICAgICB0aGF0IHdpbGwgYmUgYWxsb3dlZCBhY2Nlc3MgdW5kZXIgd2luZS4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJMcHRYIiA9ICIvZGV2L2xwWSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFNvdW5kcyBmYW1pbGlhcj8gU3ludGF4IGlzIGp1c3QgbGlrZSB0aGUgQ09NIHBvcnQgc2V0dGluZy4KICAgICAgICAgICAgUmVwbGFjZSA8bGl0ZXJhbD5YPC9saXRlcmFsPiB3aXRoIGEgdmFsdWUgZnJvbSAxLTQgYXMgaXQKICAgICAgICAgICAgaXMgaW4gV2luZG93cyBhbmQgPGxpdGVyYWw+WTwvbGl0ZXJhbD4gd2l0aCBhIHZhbHVlIGZyb20KICAgICAgICAgICAgMC0zICg8bGl0ZXJhbD5ZPC9saXRlcmFsPiBpcyB1c3VhbGx5IHRoZSB2YWx1ZSBpbiB3aW5kb3dzCiAgICAgICAgICAgIG1pbnVzIDEsIGp1c3QgbGlrZSBmb3IgQ09NIHBvcnRzKS4gWW91IGRvbid0IGFsd2F5cyBuZWVkCiAgICAgICAgICAgIHRvIGRlZmluZSBhIHBhcmFsbGVsIHBvcnQgKEFLQSwgaXQncyBvcHRpb25hbCkuIEFzIHdpdGgKICAgICAgICAgICAgdGhlIG90aGVyIHNlY3Rpb24sIExwdFggY2FuIGVxdWFsIGFueSBkZXZpY2UgKE1heWJlCiAgICAgICAgICAgIDxtZWRpYWxhYmVsPi9kZXYvcHJpbnRlcjwvbWVkaWFsYWJlbD4pLiBIZXJlIGlzIGFuCiAgICAgICAgICAgIGV4YW1wbGU6ICA8cHJvZ3JhbWxpc3Rpbmc+IkxwdDEiID0gIi9kZXYvbHAwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIFtzcG9vbGVyXSBzZWN0aW9uIHdpbGwgaW5mb3JtIHdpbmUgd2hlcmUgdG8gc3Bvb2wKICAgICAgICAgICAgcHJpbnQgam9icy4gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gdHJ5IHByaW50aW5nLiBXaW5lCiAgICAgICAgICAgIGRvY3MgY2xhaW0gdGhhdCBzcG9vbGluZyBpcyAicmF0aGVyIHByaW1pdGl2ZSIgYXQgdGhpcwogICAgICAgICAgICB0aW1lLCBzbyBpdCB3b24ndCB3b3JrIHBlcmZlY3RseS4gPGVtcGhhc2lzPkl0IGlzIG9wdGlvbmFsLjwvZW1waGFzaXM+IFRoZSBvbmx5CiAgICAgICAgICAgIHNldHRpbmcgeW91IHVzZSBpbiB0aGlzIHNlY3Rpb24gd29ya3MgdG8gbWFwIGEgcG9ydCAoTFBUMSwKICAgICAgICAgICAgZm9yIGV4YW1wbGUpIHRvIGEgZmlsZSBvciBhIGNvbW1hbmQuIEhlcmUgaXMgYW4gZXhhbXBsZSwKICAgICAgICAgICAgbWFwcGluZyBMUFQxIHRvIHRoZSBmaWxlIDxmaWxlbmFtZT5vdXQucHM8L2ZpbGVuYW1lPjoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJMUFQxOiIgPSAib3V0LnBzIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIG1hcHMgcHJpbnRpbmcgam9icyB0byBMUFQxIHRvIHRoZQogICAgICAgICAgICBjb21tYW5kIDxjb21tYW5kPmxwcjwvY29tbWFuZD4uIE5vdGljZSAgdGhlIHw6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iTFBUMToiID0gInxscHIiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3BvcnRzXSBzZWN0aW9uIGlzIHVzdWFsbHkgdXNlZnVsIG9ubHkgZm9yIHBlb3BsZSB3aG8KICAgICAgICAgICAgbmVlZCBkaXJlY3QgcG9ydCBhY2Nlc3MgZm9yIHByb2dyYW1zIHJlcXVpcmluZyBkb25nbGVzIG9yCiAgICAgICAgICAgIHNjYW5uZXJzLiA8ZW1waGFzaXM+SWYgeW91IGRvbid0IG5lZWQgaXQsIGRvbid0IHVzZQoJICAgIGl0ITwvZW1waGFzaXM+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJyZWFkIiA9ICIweDc3OSwweDM3OSwweDI4MC0weDJhMCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBHaXZlcyBkaXJlY3QgcmVhZCBhY2Nlc3MgdG8gdGhvc2UgSU8ncy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IndyaXRlIiA9ICIweDc3OSwweDM3OSwweDI4MC0weDJhMCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBHaXZlcyBkaXJlY3Qgd3JpdGUgYWNjZXNzIHRvIHRob3NlIElPJ3MuIEl0J3MgcHJvYmFibHkgYQogICAgICAgICAgICBnb29kIGlkZWEgdG8ga2VlcCB0aGUgdmFsdWVzIG9mIHRoZQogICAgICAgICAgICA8bGl0ZXJhbD5yZWFkPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+d3JpdGU8L2xpdGVyYWw+CiAgICAgICAgICAgIHNldHRpbmdzIHRoZSBzYW1lLiBUaGlzIHN0dWZmIHdpbGwgb25seSB3b3JrIHdoZW4geW91J3JlCiAgICAgICAgICAgIHJvb3QuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzIGlkPSJjb25maWctZGVidWctZXRjIj4KICAgICAgICAgIDx0aXRsZT5UaGUgW0RlYnVnXSwgW1JlZ2lzdHJ5XSwgW3R3ZWFrLmxheW91dF0sIGFuZCBbcHJvZ3JhbXNdIFNlY3Rpb25zPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbRGVidWddIGlzIHVzZWQgdG8gaW5jbHVkZSBvciBleGNsdWRlIGRlYnVnIG1lc3NhZ2VzLCBhbmQgdG8KICAgICAgICAgICAgb3V0cHV0IHRoZW0gdG8gYSBmaWxlLiBUaGUgbGF0dGVyIGlzIHJhcmVseSB1c2VkLiA8ZW1waGFzaXM+VGhlc2UKICAgICAgICAgICAgYXJlIGFsbCBvcHRpb25hbCBhbmQgeW91IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gYWRkIG9yCiAgICAgICAgICAgIHJlbW92ZSBhbnl0aGluZyBpbiB0aGlzIHNlY3Rpb24gdG8geW91ciBjb25maWcuPC9lbXBoYXNpcz4gKEluIGV4dHJlbWUKICAgICAgICAgICAgY2FzZXMgeW91IG1heSB3YW50IHRvIHVzZSB0aGVzZSBvcHRpb25zIHRvIG1hbmFnZSB0aGUgYW1vdW50CiAgICAgICAgICAgIG9mIGluZm9ybWF0aW9uIGdlbmVyYXRlZCBieSB0aGUgPHBhcmFtZXRlcj4tLWRlYnVnbXNnICtyZWxheQogICAgICAgICAgICA8L3BhcmFtZXRlcj4gb3B0aW9uLikKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkZpbGUiID0gIi9ibGFuY28iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2V0cyB0aGUgbG9nZmlsZSBmb3Igd2luZS4gU2V0IHRvIENPTiB0byBsb2cgdG8gc3RhbmRhcmQgb3V0LgogICAgICAgICAgICA8ZW1waGFzaXM+VGhpcyBpcyByYXJlbHkgdXNlZC48L2VtcGhhc2lzPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iU3B5RXhjbHVkZSIgPSAiV01fU0laRTtXTV9USU1FUjsiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgRXhjbHVkZXMgZGVidWcgbWVzc2FnZXMgYWJvdXQgPGNvbnN0YW50PldNX1NJWkU8L2NvbnN0YW50PgogICAgICAgICAgICBhbmQgPGNvbnN0YW50PldNX1RJTUVSPC9jb25zdGFudD4gaW4gdGhlIGxvZ2ZpbGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTcHlJbmNsdWRlIiA9ICJXTV9TSVpFO1dNX1RJTUVSOyI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBJbmNsdWRlcyBkZWJ1ZyBtZXNzYWdlcyBhYm91dCA8Y29uc3RhbnQ+V01fU0laRTwvY29uc3RhbnQ+CiAgICAgICAgICAgIGFuZCA8Y29uc3RhbnQ+V01fVElNRVI8L2NvbnN0YW50PiBpbiB0aGUgbG9nZmlsZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlJlbGF5SW5jbHVkZSIgPSAidXNlcjMyLkNyZWF0ZVdpbmRvd0E7Y29tY3RsMzIuKiI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBJbmNsdWRlIG9ubHkgdGhlIGxpc3RlZCBmdW5jdGlvbnMgaW4gYQogICAgICAgICAgICA8cGFyYW1ldGVyPi0tZGVidWdtc2cgK3JlbGF5PC9wYXJhbWV0ZXI+IHRyYWNlLiAgVGhpcyBlbnRyeSBpcwogICAgICAgICAgICBpZ25vcmVkIGlmIHRoZXJlIGlzIGEgPHBhcmFtZXRlcj5SZWxheUV4Y2x1ZGU8L3BhcmFtZXRlcj4gZW50cnkuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJSZWxheUV4Y2x1ZGUiID0gIlJ0bEVudGVyQ3JpdGljYWxTZWN0aW9uO1J0bExlYXZlQ3JpdGljYWxTZWN0aW9uIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEV4Y2x1ZGUgdGhlIGxpc3RlZCBmdW5jdGlvbnMgaW4gYQogICAgICAgICAgICA8cGFyYW1ldGVyPi0tZGVidWdtc2cgK3JlbGF5PC9wYXJhbWV0ZXI+IHRyYWNlLiAgVGhpcyBlbnRyeQogICAgICAgICAgICBvdmVycmlkZXMgYW55IHNldHRpbmdzIGluIGEgPHBhcmFtZXRlcj5SZWxheUluY2x1ZGU8L3BhcmFtZXRlcj4KICAgICAgICAgICAgZW50cnkuICBJZiBuZWl0aGVyIGVudHJ5IGlzIHByZXNlbnQgdGhlbiB0aGUgdHJhY2UgaW5jbHVkZXMKICAgICAgICAgICAgZXZlcnl0aGluZy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBJbiBib3RoIGVudHJpZXMgdGhlIGZ1bmN0aW9ucyBtYXkgYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhCiAgICAgICAgICAgIGZ1bmN0aW9uIG5hbWUgb3IgYXMgYSBtb2R1bGUgYW5kIGZ1bmN0aW9uLiAgSW4gdGhpcyBsYXR0ZXIKICAgICAgICAgICAgY2FzZSBzcGVjaWZ5IGFuIGFzdGVyaXNrIGZvciB0aGUgZnVuY3Rpb24gbmFtZSB0byBpbmNsdWRlL2V4Y2x1ZGUKICAgICAgICAgICAgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgbW9kdWxlLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFtSZWdpc3RyeV0gY2FuIGJlIHVzZWQgdG8gdGVsbCB3aW5lIHdoZXJlIHlvdXIgb2xkIHdpbmRvd3MKICAgICAgICAgICAgcmVnaXN0cnkgZmlsZXMgZXhpc3QuIFRoaXMgc2VjdGlvbiBpcyBjb21wbGV0ZWx5IG9wdGlvbmFsCiAgICAgICAgICAgIGFuZCB1c2VsZXNzIHRvIHBlb3BsZSB1c2luZyB3aW5lIHdpdGhvdXQgYW4gZXhpc3RpbmcKICAgICAgICAgICAgd2luZG93cyBpbnN0YWxsYXRpb24uCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJVc2VyRmlsZU5hbWUiID0gIi9kaXJzL3RvL3VzZXIucmVnIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB5b3VyIG9sZCA8ZmlsZW5hbWU+dXNlci5yZWc8L2ZpbGVuYW1lPiBmaWxlLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFt0d2Vhay5sYXlvdXRdIGlzIGRldm90ZWQgdG8gd2luZSdzIGxvb2suIFRoZXJlIGlzIG9ubHkKICAgICAgICAgICAgb25lIHNldHRpbmcgZm9yIGl0LgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iV2luZUxvb2siID0gIndpbjMxfHdpbjk1fHdpbjk4IjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFdpbGwgY2hhbmdlIHRoZSBsb29rIG9mIHdpbmUgZnJvbSBXaW5kb3dzIDMuMSB0byBXaW5kb3dzIDk1LgogICAgICAgICAgICBUaGUgPGxpdGVyYWw+d2luOTg8L2xpdGVyYWw+IHNldHRpbmcgYmVoYXZlcwogICAgICAgICAgICBqdXN0IGxpa2UgPGxpdGVyYWw+d2luOTU8L2xpdGVyYWw+IG1vc3Qgb2YgdGhlIHRpbWUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgW3Byb2dyYW1zXSBjYW4gYmUgdXNlZCB0byBzYXkgd2hhdCBwcm9ncmFtcyBydW4gdW5kZXIKICAgICAgICAgICAgc3BlY2lhbCBjb25kaXRpb25zLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iRGVmYXVsdCIgPSAiL3Byb2dyYW0vdG8vZXhlY3V0ZS5leGUiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2V0cyB0aGUgcHJvZ3JhbSB0byBiZSBydW4gaWYgd2luZSBpcyBzdGFydGVkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHByb2dyYW0uCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTdGFydHVwIiA9ICIvcHJvZ3JhbS90by9leGVjdXRlLmV4ZSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBTZXRzIHRoZSBwcm9ncmFtIHRvIGF1dG9tYXRpY2FsbHkgYmUgcnVuIGF0IHN0YXJ0dXAgZXZlcnkgdGltZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy13aW5tbSI+CiAgICAgICAgICA8dGl0bGU+VGhlIFtXaW5NTV0gU2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgW1dpbk1NXSBpcyB1c2VkIHRvIGRlZmluZSB3aGljaCBtdWx0aW1lZGlhIGRyaXZlcnMgaGF2ZSB0byBiZSBsb2FkZWQuIFNpbmNlCiAgCSAgICB0aG9zZSBkcml2ZXJzIG1heSBkZXBlbmQgb24gdGhlIG11bHRpbWVkaWEgaW50ZXJmYWNlcyBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0KICAJICAgIChPU1MsIEFMU0EuLi4gdG8gbmFtZSBhIGZldyksIGl0J3MgbmVlZGVkIHRvIGJlIGFibGUgdG8gY29uZmlndXJlIHdoaWNoIGRyaXZlcgogIAkgICAgaGFzIHRvIGJlIGxvYWRlZC4KICAgICAgICAgIDwvcGFyYT4KCiAgICAgICAgICA8cGFyYT4KICAJICAgIFRoZSBjb250ZW50IG9mIHRoZSBzZWN0aW9uIGxvb2tzIGxpa2U6CiAgCSAgICA8cHJvZ3JhbWxpc3Rpbmc+CltXaW5NTV0KIkRyaXZlcnMiID0gIndpbmVvc3MuZHJ2IgoiV2F2ZU1hcHBlciIgPSAibXNhY20uZHJ2IgoiTWlkaU1hcHBlciIgPSAibWlkaW1hcC5kcnYiCiAgCSAgICA8L3Byb2dyYW1saXN0aW5nPgogIAkgICAgQWxsIHRoZSBrZXlzIG11c3QgYmUgZGVmaW5lZDoKICAJICAgIDxpdGVtaXplZGxpc3Q+CiAgCSAgICAgIDxsaXN0aXRlbT4KICAJICAgICAgICA8cGFyYT4KICAJCSAgVGhlICJEcml2ZXJzIiBrZXkgaXMgYSAnOycgc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlcyBuYW1lLCBlYWNoIG9mCiAgCQkgIHRoZW0gY29udGFpbmluZyBhIGxvdyBsZXZlbCBkcml2ZXIuIEFsbCB0aG9zZSBkcml2ZXJzIHdpbGwgYmUgbG9hZGVkCiAgCQkgIHdoZW4gTU1TWVNURU0vV0lOTU0gaXMgc3RhcnRlZCBhbmQgd2lsbCBwcm92aWRlIHRoZWlyIGlubmVyIGZlYXR1cmVzLgogIAkgICAgICAgIDwvcGFyYT4KICAJICAgICAgPC9saXN0aXRlbT4KICAJICAgICAgPGxpc3RpdGVtPgogIAkgICAgICAgIDxwYXJhPgogIAkJICBUaGUgIldhdmVNYXBwZXIiIHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBXYXZlCiAgCQkgIE1hcHBlciBkcml2ZXIuIE9ubHkgb25lIHdhdmUgbWFwcGVyIGNhbiBiZSBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uCiAgCSAgICAgICAgPC9wYXJhPgogIAkgICAgICA8L2xpc3RpdGVtPgogIAkgICAgICA8bGlzdGl0ZW0+CiAgCSAgICAgICAgPHBhcmE+CiAgCQkgIFRoZSAiTWlkaU1hcHBlciIgcmVwcmVzZW50cyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIE1JREkKICAJCSAgTWFwcGVyIGRyaXZlci4gT25seSBvbmUgTUlESSBtYXBwZXIgY2FuIGJlIGRlZmluZWQgaW4gdGhlIHN5c3RlbS4KICAJICAgICAgICA8L3BhcmE+CiAgCSAgICAgIDwvbGlzdGl0ZW0+CiAgCSAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgIDwvcGFyYT4KICAJPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzIGlkPSJjb25maWctbmV0d29yayI+CiAgICAgICAgICA8dGl0bGU+VGhlIFtOZXR3b3JrXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbTmV0d29ya10gY29udGFpbnMgc2V0dGluZ3MgcmVsYXRlZCB0bwogICAgICAgICAgICBuZXR3b3JraW5nLiBDdXJyZW50bHkgdGhlcmUgaXMgb25seSBvbmUgdmFsdWUgdGhhdCBjYW4gYmUgc2V0LgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5Vc2VEbnNDb21wdXRlck5hbWU8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgIEEgYm9vbGVhbiBzZXR0aW5nIChkZWZhdWx0OiA8bGl0ZXJhbD5ZPC9saXRlcmFsPikKICAgICAgICAgICAgICAgICAgdGhhdCBhZmZlY3RzIHRoZSB3YXkgV2luZSBzZXRzIHRoZSBjb21wdXRlciBuYW1lLiBUaGUgY29tcHV0ZXIKICAgICAgICAgICAgICAgICAgbmFtZSBpbiB0aGUgV2luZG93cyB3b3JsZCBpcyB0aGUgc28tY2FsbGVkIDxlbXBoYXNpcz5OZXRCSU9TIG5hbWU8L2VtcGhhc2lzPi4KICAgICAgICAgICAgICAgICAgSXQgaXMgY29udGFpbmVkIGluIHRoZSA8dmFybmFtZT5Db21wdXRlck5hbWU8L3Zhcm5hbWU+IGluIHRoZSByZWdpc3RyeSBlbnRyeQogICAgICAgICAgICAgICAgICA8dmFybmFtZT5IS0VZX0xPQ0FMX01BQ0hJTkVcU3lzdGVtXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcQ29tcHV0ZXJOYW1lXENvbXB1dGVyTmFtZTwvdmFybmFtZT4uCiAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvICJZIiBvciBtaXNzaW5nLCBXaW5lIHdpbGwgc2V0IHRoZQogICAgICAgICAgICAgICAgICBOZXRCSU9TIG5hbWUgdG8gdGhlIFVuaXggaG9zdCBuYW1lIG9mIHlvdXIgY29tcHV0ZXIsIGlmCiAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSB0cnVuY2F0ZWQgdG8gMzEgY2hhcmFjdGVycy4gVGhlIFVuaXggaG9zdG5hbWUgaXMgdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICBvZiB0aGUgc2hlbGwgY29tbWFuZCA8Y29tbWFuZD5ob3N0bmFtZTwvY29tbWFuZD4sIHVwIHRvIGJ1dCBub3QKICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSBmaXJzdCBkb3QgKCcuJykuIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBtZWFucyB0aGF0CiAgICAgICAgICAgICAgICAgIFdpbmRvd3MgcHJvZ3JhbXMgcnVubmluZyB1bmRlciBXaW5lIGNhbm5vdCBjaGFuZ2UgdGhlIE5ldEJJT1MgY29tcHV0ZXIgbmFtZS4KICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gIk4iLCBXaW5lIHdpbGwgdXNlIHRoZSByZWdpc3RyeSB2YWx1ZSBhYm92ZQogICAgICAgICAgICAgICAgICB0byBzZXQgdGhlIE5ldEJJT1MgbmFtZS4gT25seSBpZiB0aGUgcmVnaXN0cnkgZW50cnkgZG9lc24ndCBleGlzdCAodXN1YWxseQogICAgICAgICAgICAgICAgICBvbmx5IGR1cmluZyB0aGUgZmlyc3Qgd2luZSBzdGFydHVwKSBpdCB3aWxsIHVzZSB0aGUgVW5peCBob3N0bmFtZSBhcwogICAgICAgICAgICAgICAgICB1c3VhbC4gV2luZG93cyBwcm9ncmFtcyBjYW4gY2hhbmdlIHRoZSBOZXRCSU9TIG5hbWUuIFRoZSBjaGFuZ2UKICAgICAgICAgICAgICAgICAgd2lsbCBiZSBlZmZlY3RpdmUgYWZ0ZXIgYSAicmVib290IiwgaS5lLiBhZnRlciByZXN0YXJ0aW5nIFdpbmUuCiAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy1hcHBkZWZhdWx0cyI+CiAgICAgICAgICA8dGl0bGU+VGhlIFtBcHBEZWZhdWx0c10gU2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIHNlY3Rpb24gaXMgdXNlZCB0byBvdmVyd3JpdGUgY2VydGFpbiBzZXR0aW5ncyBvZiB0aGlzIGZpbGUgZm9yIGEKICAgICAgICAgICAgc3BlY2lhbCBwcm9ncmFtIHdpdGggZGlmZmVyZW50IHNldHRpbmdzLgogICAgICAgICAgICBbQXBwRGVmYXVsdHNdIGlzIG5vdCB0aGUgcmVhbCBuYW1lIG9mIHRoZSBzZWN0aW9uLiBUaGUgcmVhbCBuYW1lCiAgICAgICAgICAgIGNvbnNpc3RzIG9mIHRoZSBsZWFkaW5nIHdvcmQgQXBwRGVmYXVsdHMgZm9sbG93ZWQgYnkgdGhlIG5hbWUKICAgICAgICAgICAgb2YgdGhlIGV4ZWN1dGFibGUgdGhlIHNlY3Rpb24gaXMgdmFsaWQgZm9yLgogIAkgICAgVGhlIGVuZCBvZiB0aGUgc2VjdGlvbiBuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZQogIAkgICAgY29ycmVzcG9uZGluZyAic3RhbmRhcmQiIHNlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQogIAkgICAgdGhhdCBzaG91bGQgaGF2ZSBzb21lIG9mIGl0cyBzZXR0aW5ncyBvdmVyd3JpdHRlbiB3aXRoIHRoZQogIAkgICAgcHJvZ3JhbSBzcGVjaWZpYyBzZXR0aW5ncyB5b3UgZGVmaW5lLgogIAkgICAgVGhlIHRocmVlIHBhcnRzIG9mIHRoZSBzZWN0aW9uIG5hbWUgYXJlIHNlcGFyYXRlZCBieSB0d28gYmFja3NsYXNoZXMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgQ3VycmVudGx5IHdpbmUgc3VwcG9ydHMgb3ZlcnJpZGluZyBzZWxlY3RlZCBzZXR0aW5ncyB3aXRoaW4KICAJICAgIHRoZSBzZWN0aW9ucyBbRGxsT3ZlcnJpZGVzXSwgW3gxMWRydl0sIFt2ZXJzaW9uXSBhbmQgW2Rzb3VuZF0gb25seS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBvdmVycmlkZXMgdGhlIG5vcm1hbCBzZXR0aW5ncyBmb3IgYQogICAgICAgICAgICBwcm9ncmFtOgogIAkgICAgPHByb2dyYW1saXN0aW5nPgo7OyBkZWZhdWx0IHNldHRpbmdzClt4MTFkcnZdCiJNYW5hZ2VkIiA9ICJZIgoiRGVza3RvcCIgPSAiTiIKCjs7IHJ1biBpbnN0YWxsIGluIGRlc2t0b3AgbW9kZQpbQXBwRGVmYXVsdHNcXGluc3RhbGwuZXhlXFx4MTFkcnZdCiJNYW5hZ2VkIiA9ICJOIgoiRGVza3RvcCIgPSAiODAweDYwMCIKICAJICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLXRyb3VibGUiPgogICAgICAgIDx0aXRsZT5XaGF0IElmIEl0IERvZXNuJ3QgV29yaz88L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhlcmUgaXMgYWx3YXlzIGEgY2hhbmNlIHRoYXQgdGhpbmdzIHdpbGwgZ28gd3JvbmcuIElmIHRoZQogICAgICAgICAgdW50aGlua2FibGUgaGFwcGVucywgcmVwb3J0IHRoZSBwcm9ibGVtIHRvCiAgCSAgPHVsaW5rIHVybD0iaHR0cDovL2J1Z3Mud2luZWhxLmNvbS8iPldpbmUgQnVnemlsbGE8L3VsaW5rPiwKICAJICB0cnkgdGhlIG5ld3Nncm91cAogICAgICAgICAgPHN5c3RlbWl0ZW0+Y29tcC5lbXVsYXRvcnMubXMtd2luZG93cy53aW5lPC9zeXN0ZW1pdGVtPiwKICAJICBvciB0aGUgSVJDIGNoYW5uZWwgPHN5c3RlbWl0ZW0+I1dpbmVIUTwvc3lzdGVtaXRlbT4gZm91bmQgb24KICAgICAgICAgIGlyYy5mcmVlbm9kZS5uZXQsIG9yIGNvbm5lY3RlZCBzZXJ2ZXJzLgogIAkgIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIGxvb2tlZCBvdmVyIHRoaXMgZG9jdW1lbnQgdGhvcm91Z2hseSwKICAJICBhbmQgaGF2ZSBhbHNvIHJlYWQ6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPjxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPjwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vd3d3LndpbmVocS5vcmcvdHJvdWJsZS88L2ZpbGVuYW1lPgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgaW5kZWVkIGl0IGxvb2tzIGxpa2UgeW91J3ZlIGRvbmUgeW91ciByZXNlYXJjaCwgYmUKICAgICAgICAgIHByZXBhcmVkIGZvciBoZWxwZnVsIHN1Z2dlc3Rpb25zLiBJZiB5b3UgaGF2ZW4ndCwgYnJhY2UKICAgICAgICAgIHlvdXJzZWxmIGZvciBoZWF2aW5nIGZsYW1pbmcuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImNvbmZpZy1kcml2ZS1tYWluIj4KICAgICAgPHRpdGxlPlRoZSBXaW5lIEZpbGUgU3lzdGVtIEFuZCBEcml2ZSBMYXllcjwvdGl0bGU+CiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+RXh0cmVtZWx5IEltcG9ydGFudCBQcmVyZXF1aXNpdGVzPC90aXRsZT4KCTxwYXJhPgoJICBJZiB5b3UncmUgcGxhbm5pbmcgdG8gaW5jbHVkZSBhY2Nlc3MgdG8gYSBDRC1ST00gZHJpdmUgaW4geW91ciBXaW5lCgkgIGNvbmZpZ3VyYXRpb24gb24gTGludXgsIHRoZW4gPGVtcGhhc2lzPm1ha2Ugc3VyZTwvZW1waGFzaXM+IHRvIGFkZAoJICB0aGUgPHF1b3RlPnVuaGlkZTwvcXVvdGU+IG1vdW50IG9wdGlvbiB0byB0aGUgQ0QtUk9NIGZpbGUgc3lzdGVtCgkgIGVudHJ5IGluIDxmaWxlbmFtZT4vZXRjL2ZzdGFiPC9maWxlbmFtZT4sIGUuZy46CgkgIDxwcm9ncmFtbGlzdGluZz4KL2Rldi9jZHJvbSAvY2Ryb20gIGlzbzk2NjAgcm8sbm9hdXRvLHVzZXJzLHVuaGlkZSAwIDAKCSAgPC9wcm9ncmFtbGlzdGluZz4KCSAgU2V2ZXJhbCBXaW5kb3dzIHByb2dyYW0gc2V0dXAgQ0QtUk9NcyBvciBvdGhlciBDRC1ST01zIGNob3NlCgkgIHRvIGRvIHN1Y2ggYnJhaW5kYW1hZ2VkIHRoaW5ncyBhcyBtYXJraW5nIHZlcnkgaW1wb3J0YW50IHNldHVwCgkgIGhlbHBlciBmaWxlcyBvbiB0aGUgQ0QtUk9NIGFzIDxxdW90ZT5oaWRkZW48L3F1b3RlPi4KCSAgVGhhdCdzIG5vIHByb2JsZW0gb24gV2luZG93cywgc2luY2UgdGhlIFdpbmRvd3MgQ0QtUk9NIGRyaXZlciBieQoJICBkZWZhdWx0IGRpc3BsYXlzIGV2ZW4gZmlsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUKCSAgPHF1b3RlPmhpZGRlbjwvcXVvdGU+LiBCdXQgb24gTGludXgsIHdoaWNoIGNob3NlIHRvCgkgIDxlbXBoYXNpcz5oaWRlPC9lbXBoYXNpcz4gPHF1b3RlPmhpZGRlbjwvcXVvdGU+IGZpbGVzIG9uIENEIGJ5CgkgIGRlZmF1bHQsIHRoaXMgaXMgPGVtcGhhc2lzPkZBVEFMPC9lbXBoYXNpcz4hCgkgICh0aGUgcHJvZ3JhbXMgd2lsbCBzaW1wbHkgYWJvcnQgd2l0aCBhbiA8cXVvdGU+aW5zdGFsbGF0aW9uIGZpbGUgbm90IGZvdW5kPC9xdW90ZT4gb3Igc2ltaWxhciBlcnJvcikKCSAgVGh1cyB5b3Ugc2hvdWxkIG5ldmVyIGZvcmdldCB0byBhZGQgdGhpcyBzZXR0aW5nLgoJPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5TaG9ydCBJbnRyb2R1Y3Rpb248L3RpdGxlPgogICAgICAgIDxwYXJhPgoJICBXaW5lIGVtdWxhdGVzIGRyaXZlcyBieSBwbGFjaW5nIHRoZWlyIHZpcnR1YWwgZHJpdmUgcm9vdHMgdG8KCSAgdXNlci1jb25maWd1cmFibGUgcG9pbnRzIGluIHRoZSBVbml4IGZpbGVzeXN0ZW0sIHNvIGl0J3MgeW91cgoJICBjaG9pY2Ugd2hlcmUgPG1lZGlhbGFiZWw+Qzo8L21lZGlhbGFiZWw+J3Mgcm9vdCBzaG91bGQgYmUKCSAgKDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+IHdpbGwgZXZlbiBhc2sgeW91KS4gSWYKCSAgeW91IGNob29zZSwgc2F5LCA8ZmlsZW5hbWU+fi93aW5lPC9maWxlbmFtZT4gKG9yLCBpbiBvdGhlcgoJICB3b3JkcywgPGZpbGVuYW1lPi9ob21lL3VzZXIvd2luZTwvZmlsZW5hbWU+LCBzaW5jZSAifiIKCSAgaW5kaWNhdGVzIHRoZSBob21lIGRpcmVjdG9yeSBvZiBhIHVzZXIpLCBhcyB0aGUgcm9vdCBvZiB5b3VyCgkgIHZpcnR1YWwgZHJpdmUgPG1lZGlhbGFiZWw+Qzo8L21lZGlhbGFiZWw+LCB0aGVuIHlvdSdkIHB1dCB0aGlzCgkgIGludG8geW91ciBXaW5lIGNvbmZpZ3VyYXRpb24gZmlsZToKICAgICAgICA8L3BhcmE+CgogICAgICAgIDxwcm9ncmFtbGlzdGluZz4KW0RyaXZlIENdCiJQYXRoIiA9ICIke0hPTUV9L3dpbmUiCiJUeXBlIiA9ICJoZCIKIkxhYmVsIiA9ICJNUy1ET1MiCiJGaWxlc3lzdGVtIiA9ICJ3aW45NSIKICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIFdpdGggdGhpcyBjb25maWd1cmF0aW9uLCB3aGF0IHdpbmRvd3MgYXBwcyB0aGluayBvZiBhcwogICAgICAgICAgImM6XHdpbmRvd3Ncc3lzdGVtIiB3b3VsZCBtYXAgdG8KICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS91c2VyL3dpbmUvd2luZG93cy9zeXN0ZW08L2ZpbGVuYW1lPiBpbiB0aGUgVU5JWAogICAgICAgICAgZmlsZXN5c3RlbS4gTm90ZSB0aGF0IHlvdSBuZWVkIHRvIHNwZWNpZnkKICAgICAgICAgIDxsaXRlcmFsPiJGaWxlc3lzdGVtIiA9ICJ3aW45NSI8L2xpdGVyYWw+LAoJICA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4KICAgICAgICAgIDxsaXRlcmFsPiJGaWxlc3lzdGVtIiA9ICJ1bml4IjwvbGl0ZXJhbD4sIHRvIG1ha2UgV2luZSBzaW11bGF0ZSBhCiAgICAgICAgICBXaW5kb3dzIGNvbXBhdGlibGUgKGNhc2UgaW5zZW5zaXRpdmUpIGZpbGVzeXN0ZW0sIG90aGVyd2lzZQogICAgICAgICAgbW9zdCBhcHBzIHdvbid0IHdvcmsuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctZHJpdmUtZGlyIj4KICAgICAgICA8dGl0bGU+V2luZG93cyBEaXJlY3RvcnkgU3RydWN0dXJlPC90aXRsZT4KICAgICAgICA8cGFyYT4KCSAgSGVyZSdzIHRoZSBmdW5kYW1lbnRhbCBsYXlvdXQgdGhhdCBXaW5kb3dzIHByb2dyYW1zIGFuZAoJICBpbnN0YWxsZXJzIGV4cGVjdCBhbmQgdGhhdCB3ZSB0aHVzIG5lZWQgdG8gY29uZmlndXJlIHByb3Blcmx5CgkgIGluIFdpbmUuIFdpdGhvdXQgaXQsIHRoZXkgc2VsZG9tbHkgb3BlcmF0ZSBjb3JyZWN0bHkuICBJZiB5b3UKCSAgaW50ZW5kIHRvIHVzZSBhIG5vLXdpbmRvd3MgZW52aXJvbm1lbnQgKG5vdCB1c2luZyBhbiBleGlzdGluZwoJICBXaW5kb3dzIHBhcnRpdGlvbiksIHRoZW4gaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGVpdGhlcgoJICA8Y29tbWFuZD5XaW5lU2V0dXBUazwvY29tbWFuZD4ncyBvcgoJICA8Y29tbWFuZD53aW5laW5zdGFsbDwvY29tbWFuZD4ncyBjYXBhYmlsaXRpZXMgdG8gY3JlYXRlIGFuCgkgIGluaXRpYWwgd2luZG93cyBkaXJlY3RvcnkgdHJlZSwgc2luY2UgY3JlYXRpbmcgYSBkaXJlY3RvcnkKCSAgc3RydWN0dXJlIG1hbnVhbGx5IGlzIHRpcmVzb21lIGFuZCBlcnJvci1wcm9uZS4KICAgICAgICA8L3BhcmE+Cgo8cHJvZ3JhbWxpc3Rpbmc+CkM6XCAgICAgICAgICAgICAgICBSb290IGRpcmVjdG9yeSBvZiBwcmltYXJ5IGRpc2sgZHJpdmUKICBXaW5kb3dzXCAgICAgICAgIFdpbmRvd3MgZGlyZWN0b3J5LCBjb250YWluaW5nIC5JTkkgZmlsZXMsCiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yaWVzLCBldGMuCiAgICBTeXN0ZW1cICAgICAgICBXaW4zLngvOTUvOTgvTUUgZGlyZWN0b3J5IGZvciBjb21tb24gRExMcwogICAgICAgICAgICAgICAgICAgICBXaW5OVC8yMDAwIGRpcmVjdG9yeSBmb3IgY29tbW9uIDE2LWJpdCBETExzCiAgICBTeXN0ZW0zMlwgICAgICBXaW5OVC8yMDAwIGRpcmVjdG9yeSBmb3IgY29tbW9uIDMyLWJpdCBETExzCiAgICBTdGFydCBNZW51XCAgICBQcm9ncmFtIGxhdW5jaGVyIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKICAgICAgUHJvZ3JhbXNcICAgIFByb2dyYW0gbGF1bmNoZXIgbGlua3MgKC5MTksgZmlsZXMpIHRvIHByb2dyYW1zCiAgUHJvZ3JhbSBGaWxlc1wgICBBcHBsaWNhdGlvbiBiaW5hcmllcyAoLkVYRSBhbmQgLkRMTCBmaWxlcykKPC9wcm9ncmFtbGlzdGluZz4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLWRyaXZlLXNlY3Rpb25zIj4KICAgICAgICA8dGl0bGU+VGhlIFtEcml2ZSB4XSBTZWN0aW9uczwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZXNlIHNlY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBtYWtlIGNlcnRhaW4gVW5peAogICAgICAgICAgICBkaXJlY3RvcnkgbG9jYXRpb25zIGFjY2Vzc2libGUgdG8gV2luZSBhcyBhIERPUy9XaW5kb3dzIGRyaXZlCiAgICAgICAgICAgIChkcml2ZSAneDonKSBhbmQgdGh1cyBhY2Nlc3NpYmxlIHRvIFdpbmRvd3MgcHJvZ3JhbXMKICAgICAgICAgICAgdW5kZXIgdGhlIGRyaXZlIG5hbWUgeW91IHNwZWNpZmllZC4KCSAgICBFdmVyeSBET1MvV2luZG93cyBwcm9ncmFtIHNvcnQgb2YgZXhwZWN0cyBhdCBsZWFzdCBhIEM6CgkgICAgZHJpdmUgKGFuZCBzb21ldGltZXMgYWxzbyBhbiBBOiBmbG9wcHkgZHJpdmUpLCBzbyB5b3VyCgkgICAgY29uZmlndXJhdGlvbiBmaWxlIHNob3VsZCBhdCBsZWFzdCBjb250YWluIHRoZSBjb3JyZXNwb25kaW5nCgkgICAgc2VjdGlvbnMsIFtEcml2ZSBDXSBhbmQgW0RyaXZlIEFdLgogICAgICAgICAgICBZb3UgbmVlZCB0byBkZWNpZGUgb24gd2hldGhlciB5b3Ugd2FudCB0byB1c2UgYW4gZXhpc3RpbmcgV2luZG93cwogICAgICAgICAgICBwYXJ0aXRpb24gYXMgdGhlIEMgZHJpdmUgb3Igd2hldGhlciB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24KICAgICAgICAgICAgV2luZSBkcml2ZSBDIGRpcmVjdG9yeSB0cmVlIHNvbWV3aGVyZSAodGFrZSBjYXJlIGFib3V0CiAgICAgICAgICAgIHBlcm1pc3Npb25zISkuCiAgICAgICAgICAgIEVhY2ggZHJpdmUgc2VjdGlvbiBtYXkgc3BlY2lmeSB1cCB0byA2IGRpZmZlcmVudCBzZXR0aW5ncwogICAgICAgICAgICBhcyBleHBsYWluZWQgYmVsb3cuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPltEcml2ZSB4XTwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBUaGUgYWJvdmUgbGluZSBiZWdpbnMgdGhlIHNlY3Rpb24gZm9yIGEgZHJpdmUgd2hvc2UgbGV0dGVyIGlzIHgKICAgICAgICAgICAgKERPUyBub3RhdGlvbjogZHJpdmUgJ3g6JykuCiAgICAgICAgICAgIFlvdSBjb3VsZCBlLmcuIGNyZWF0ZSBhbiBlcXVpdmFsZW50IHRvIGEgZHJpdmUgJ0M6JwogICAgICAgICAgICB1bmRlciBET1MvV2luZG93cyBieSB1c2luZyBhIFtEcml2ZSBDXSBzZWN0aW9uIG5hbWUuCgkgICAgTm90ZSB0aGF0IHRoZSBkcml2ZSBsZXR0ZXIgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlBhdGgiID0gIi9kaXIvdG8vcGF0aCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBkcml2ZSB3aWxsIGJlZ2luLgogICAgICAgICAgICBXaGVuIFdpbmUgaXMgYnJvd3NpbmcgaW4gZHJpdmUgeCwgaXQgd2lsbCBiZSBhYmxlCiAgICAgICAgICAgIHRvIHNlZSB0aGUgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIGRpcmVjdG9yeQogICAgICAgICAgICA8ZmlsZW5hbWU+L2Rpci90by9wYXRoPC9maWxlbmFtZT4gYW5kIGJlbG93LgogICAgICAgICAgICAobm90ZSB0aGF0IHN5bWxpbmtzIHRvIGRpcmVjdG9yaWVzIHdvbid0IGdldCBpbmNsdWRlZCEKICAgICAgICAgICAgc2VlICI8bGluayBsaW5rZW5kPSJkaXJzeW1saW5rcyI+U2hvd0RpclN5bWxpbmtzPC9saW5rPiIKICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzZXR0aW5nKQogICAgICAgICAgICBZb3UgY2FuIGFsc28gbWFrZSB1c2Ugb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UgJEhPTUUgaGVyZSwKCSAgICBhbiBleGFtcGxlIGZvciB1c2luZyBhIDxmaWxlbmFtZT5teXdpbmVkcml2ZTwvZmlsZW5hbWU+CgkgICAgZGlyZWN0b3J5IGluIHlvdXIgaG9tZSBkaXIgd291bGQgYmUKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJQYXRoIiA9ICIke0hPTUV9L215d2luZWRyaXZlIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIERvbid0IGZvcmdldCB0byBsZWF2ZSBvZmYgdGhlIHRyYWlsaW5nIHNsYXNoIQogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iVHlwZSIgPSAiaGR8Y2Ryb218bmV0d29ya3xmbG9wcHkiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIFNldHMgdXAgdGhlIHR5cGUgb2YgZHJpdmUgV2luZSB3aWxsIHNlZSBpdCBhcy4gVHlwZSBtdXN0CiAgICAgICAgICBlcXVhbCBvbmUgb2YgdGhlIGZvdXIgPGxpdGVyYWw+ZmxvcHB5PC9saXRlcmFsPiwKICAgICAgICAgIDxsaXRlcmFsPmhkPC9saXRlcmFsPiwgPGxpdGVyYWw+Y2Ryb208L2xpdGVyYWw+LCBvcgogICAgICAgICAgPGxpdGVyYWw+bmV0d29yazwvbGl0ZXJhbD4uIFRoZXkgYXJlIHNlbGYtZXhwbGFuYXRvcnkuCiAgICAgICAgICAoVGhlIHwncyBtZWFuICJUeXBlID0gJyZsdDtvbmUgb2YgdGhlIG9wdGlvbnMmZ3Q7JyIuKQogICAgICAgICAgVXN1YWxseSwgeW91IGNob29zZSAiaGQiIGZvciBhIGRyaXZlICgiaGQiIGlzIGRlZmF1bHQgYW55d2F5KS4KCSAgRm9yIGEgaG9tZSBkaXJlY3RvcnkgZW50cnksIGl0IG1ha2VzIHNlbnNlIHRvIGNob29zZQoJICAibmV0d29yayIgc29tZXRpbWVzLCBzaW5jZSBzb21lIGhvbWUgZGlyZWN0b3JpZXMgYXJlIGJlaW5nCgkgIGV4cG9ydGVkIG92ZXIgdGhlIG5ldHdvcmsgdmlhIE5GUyBhbmQgdGh1cyBjYW4gaGF2ZSBzbG93IHJlc3BvbnNlCgkgIHRpbWVzLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iTGFiZWwiID0gImJsYWgiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgRGVmaW5lcyB0aGUgZHJpdmUgbGFiZWwuIEdlbmVyYWxseSBvbmx5IG5lZWRlZAogICAgICAgICAgICBmb3IgcHJvZ3JhbXMgdGhhdCBsb29rIGZvciBhIHNwZWNpYWwgQ0QtUk9NLgogICAgICAgICAgVGhlIGxhYmVsIG1heSBiZSB1cCB0byAxMSBjaGFyYWN0ZXJzLgogICAgICAgICAgICBOb3RlIHRoYXQgdGhlIHByZWZlcnJlZCB3YXkgb2YgbWFuYWdpbmcgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycwogICAgICAgICAgICBvZiBDRC1ST01zIGFuZCBmbG9wcGllcyBpcyB0byBnaXZlIFdpbmUgcmF3IGRldmljZSBhY2Nlc3MgZm9yCiAgICAgICAgICAgIHJlYWRpbmcgdGhlc2Ugb24gYSBwZXItQ0QgY2FzZSAoc2VlICJEZXZpY2UiIGJlbG93KSBpbnN0ZWFkIG9mCiAgICAgICAgICAgIGhhcmRjb2Rpbmcgb25lIHNwZWNpZmljICJMYWJlbCIuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTZXJpYWwiID0gImRlYWRiZWVmIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBUZWxscyBXaW5lIHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBkcml2ZS4gQSBmZXcgcHJvZ3JhbXMgd2l0aAogICAgICAgICAgaW50ZW5zZSBwcm90ZWN0aW9uIGZvciBwaXJhdGluZyBtaWdodCBuZWVkIHRoaXMsIGJ1dCBvdGhlcndpc2UKICAgICAgICAgIGl0J3Mgbm90IG5lZWRlZC4gVXAgdG8gOCBjaGFyYWN0ZXJzIGFuZCBoZXhhZGVjaW1hbC4KICAgICAgICAgICAgVXNpbmcgYSAiRGV2aWNlIiBlbnRyeSBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgdGhlICJTZXJpYWwiIHByb2JhYmx5CiAgICAgICAgICAgIGlzIGEgc21hcnRlciBjaG9pY2UuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJGaWxlc3lzdGVtIiA9ICJ3aW45NXx1bml4fG1zZG9zIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBTZXRzIHVwIHRoZSB3YXkgV2luZSBsb29rcyBhdCBmaWxlcyBvbiB0aGUgZHJpdmUuCiAgICAgICAgICBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGZpbGUgbmFtZSBsb29rdXAgYW5kIG1hcHBpbmcgb2YKICAgICAgICAgIFdpbmUgdG8gZXhpc3RpbmcgZmlsZSBzeXN0ZW1zIG9uIHlvdXIgUEMsIGl0IGRvZXMKICAgICAgICAgIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiB0ZWxsIGFueXRoaW5nIGFib3V0IHRoZSBmaWxlc3lzdGVtCiAgICAgICAgICB1c2VkIGl0c2VsZi4KICAgICAgICA8L3BhcmE+CgogICAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT48bGl0ZXJhbD53aW45NTwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIENhc2UgaW5zZW5zaXRpdmUuIEFsaWtlIHRvIFdpbmRvd3MgOXgvTlQgNC4gVGhpcyBpcwogICAgICAgICAgICAgICAgdGhlIGxvbmcgZmlsZW5hbWUgZmlsZXN5c3RlbSB5b3UgYXJlIHByb2JhYmx5IHVzZWQKICAgICAgICAgICAgICAgIHRvIHdvcmtpbmcgd2l0aC4gVGhlIGZpbGVzeXN0ZW0gYuZoYXZpb3VyIG9mIGNob2ljZSBmb3IgbW9zdAogICAgICAgICAgICAgICAgcHJvZ3JhbXMgdG8gYmUgcnVuIHVuZGVyIHdpbmUuICA8ZW1waGFzaXM+UHJvYmFibHkgdGhlIG9uZQogICAgICAgICAgICAgICAgeW91IHdhbnQhPC9lbXBoYXNpcz4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnVuaXg8L2xpdGVyYWw+PC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBDYXNlIHNlbnNpdGl2ZS4gVGhpcyBmaWxlc3lzdGVtIGhhcyBhbG1vc3Qgbm8gdXNlCiAgICAgICAgICAgICAgICAoV2luZG93cyBhcHBzIGV4cGVjdCBjYXNlIGluc2Vuc2l0aXZlIGZpbGVuYW1lcyksCiAgICAgICAgCSAgZXhjZXB0IG1heWJlIGZvciBXaW5lbGliIGFwcGxpY2F0aW9ucy4KICAgICAgICAgICAgICAgIFRyeSBpdCBpZiB5b3UgZGFyZSwgYnV0IHdpbjk1IGlzIGEgbXVjaCBiZXR0ZXIKICAgICAgICAgICAgICAgIGFuZCBhbHdheXMgcmVjb21tZW5kZWQgY2hvaWNlLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+bXNkb3M8L2xpdGVyYWw+PC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBDYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0uIEFsaWtlIHRvIERPUyBhbmQKICAgICAgICAgICAgICAgIFdpbmRvd3MgMy54LiA8bGl0ZXJhbD44LjM8L2xpdGVyYWw+IGlzIHRoZSBtYXhpbXVtCiAgICAgICAgICAgICAgICBsZW5ndGggb2YgZmlsZXMgKGVpZ2h0ZG90LjEyMykgLSBsb25nZXIgb25lcyB3aWxsIGJlCiAgICAgICAgICAgICAgICB0cnVuY2F0ZWQuCiAgICAgICAgCSAgPG5vdGU+CiAgICAgICAgCSAgPHBhcmE+CiAgICAgICAgCSAgICBUaGlzIGlzIGEgPGVtcGhhc2lzPnZlcnkgYmFkIGNob2ljZTwvZW1waGFzaXM+IGlmCiAgICAgICAgCSAgICB5b3UgcGxhbiBvbiBydW5uaW5nIGFwcHMgdGhhdCB1c2UgbG9uZyBmaWxlbmFtZXMuCiAgICAgICAgCSAgICB3aW45NSBzaG91bGQgd29yayBmaW5lIHdpdGggYXBwcyB0aGF0IHdlcmUgZGVzaWduZWQKICAgICAgICAJICAgIHRvIHJ1biB1bmRlciB0aGUgbXNkb3Mgc3lzdGVtLiAgSW4gb3RoZXIgd29yZHMsIHlvdQogICAgICAgIAkgICAgbWlnaHQgbm90IHdhbnQgdG8gdXNlIHRoaXMuCiAgICAgICAgCSAgPC9wYXJhPgogICAgICAgIAkgIDwvbm90ZT4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KCiAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZXZpY2UiID0gIi9kZXYveHgiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICA8cGFyYT4KICAgICAgICAgIE5lZWRlZCBmb3IgcmF3IGRldmljZSBhY2Nlc3MgYW5kIDxsaW5rIGxpbmtlbmQ9ImNvbmZpZy1kcml2ZS1jZHJvbS1sYWJlbHMiPmxhYmVsIGFuZCBzZXJpYWwgbnVtYmVyIHJlYWRpbmc8L2xpbms+LgogICAgICAgICAgVXNlIHRoaXMgPGVtcGhhc2lzPm9ubHk8L2VtcGhhc2lzPiBmb3IgZmxvcHB5IGFuZCBjZHJvbSBkZXZpY2VzLiBVc2luZyBpdCBvbgogICAgICAgICAgRXh0ZW5kZWQyIG9yIG90aGVyIFVuaXggZmlsZSBzeXN0ZW1zIGNhbiBoYXZlIGRpcmUgcmVzdWx0cwogICAgICAgICAgKHdoZW4gYSB3aW5kb3dzIGFwcCB0cmllcyB0byBkbyBhIGxvd2xldmVsIHdyaXRlLAogICAgICAgICAgdGhleSBkbyBpdCBpbiBhIEZBVCB3YXkgLS0gRkFUIGZvcm1hdCBpcyBjb21wbGV0ZWx5IGRpZmZlcmVudCBmcm9tCiAgICAgICAgICBhbnkgVW5peCBmaWxlIHN5c3RlbSkuCiAgICAgICAgICBBbHNvLCBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBwcm9wZXIgcGVybWlzc2lvbnMgdG8gdGhpcyBkZXZpY2UKICAgICAgICAgIGZpbGUuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxub3RlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoaXMgc2V0dGluZyBpcyBub3QgcmVhbGx5IGltcG9ydGFudDsgYWxtb3N0IGFsbCBhcHBzCiAgICAgICAgICAgIHdpbGwgaGF2ZSBubyBwcm9ibGVtIGlmIGl0IHJlbWFpbnMgdW5zcGVjaWZpZWQuIEZvcgogICAgICAgICAgICBDRC1ST01zIGl0J3MgcXVpdGUgdXNlZnVsIGluIG9yZGVyIHRvIGdldCBhdXRvbWF0aWMgbGFiZWwKICAgICAgICAgICAgZGV0ZWN0aW9uLCB0aG91Z2guIElmIHlvdSBhcmUgdW5zdXJlIGFib3V0IHNwZWNpZnlpbmcKICAgICAgICAgICAgZGV2aWNlIG5hbWVzLCBqdXN0IGxlYXZlIG91dCB0aGlzIHNldHRpbmcgZm9yIHlvdXIKICAgICAgICAgICAgZHJpdmVzLgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvbm90ZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgICAgSGVyZSBhcmUgYSBmZXcgc2FtcGxlIGVudHJpZXM6CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CkhlcmUgaXMgYSBzZXR1cCBmb3IgRHJpdmUgQywgYSBnZW5lcmljIGhhcmQgZHJpdmU6CltEcml2ZSBDXQoiUGF0aCIgPSAiL2Rvc2MiCiJUeXBlIiA9ICJoZCIKIkxhYmVsIiA9ICJIYXJkIERyaXZlIgoiRmlsZXN5c3RlbSIgPSAid2luOTUiClRoaXMgaXMgYSBzZXR1cCBmb3IgRHJpdmUgRSwgYSBnZW5lcmljIENELVJPTSBkcml2ZToKW0RyaXZlIEVdCiJQYXRoIiA9ICIvbW50L2Nkcm9tIgoiVHlwZSIgPSAiY2Ryb20iCiJMYWJlbCIgPSAiVG90YWwgQW5uaWhpbGF0aW9uIgoiRmlsZXN5c3RlbSIgPSAid2luOTUiCiJEZXZpY2UiID0gIi9kZXYvY2Ryb20iCkFuZCBoZXJlIGlzIGEgc2V0dXAgZm9yIERyaXZlIEEsIGEgZ2VuZXJpYyBmbG9wcHkgZHJpdmU6CltEcml2ZSBBXQoiVHlwZSIgPSAiZmxvcHB5IgoiUGF0aCIgPSAiL21udC9mbG9wcHkiCiJMYWJlbCIgPSAiRmxvcHB5IERyaXZlIgoiU2VyaWFsIiA9ICI4NzY1NDMyMSIKIkZpbGVzeXN0ZW0iID0gIndpbjk1IgoiRGV2aWNlIiA9ICIvZGV2L2ZkMCIKICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgICAgPHRpdGxlPkZpbGUgc3lzdGVtIHNldHRpbmdzIGluIHRoZSBbd2luZV0gc2VjdGlvbjwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IldpbmRvd3MiID0gImM6XFx3aW5kb3dzIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBUaGlzIHRlbGxzIFdpbmUgYW5kIFdpbmRvd3MgcHJvZ3JhbXMgd2hlcmUgdGhlCiAgICAgICAgICA8ZmlsZW5hbWU+V2luZG93czwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcy4gIEl0IGlzCiAgICAgICAgICByZWNvbW1lbmRlZCB0byBoYXZlIHRoaXMgZGlyZWN0b3J5IHNvbWV3aGVyZSBvbiB5b3VyCiAgICAgICAgICBjb25maWd1cmVkIDxtZWRpYWxhYmVsPkM8L21lZGlhbGFiZWw+IGRyaXZlLCBhbmQgaXQncyBhbHNvCiAgICAgICAgICByZWNvbW1lbmRlZCB0byBqdXN0IGNhbGwgdGhlIGRpcmVjdG9yeSAid2luZG93cyIgKHRoaXMgaXMKICAgICAgICAgIHRoZSBkZWZhdWx0IHNldHVwIG9uIFdpbmRvd3MsIGFuZCBzb21lIHN0dXBpZCBwcm9ncmFtcwogICAgICAgICAgbWlnaHQgcmVseSBvbiB0aGlzKS4gIFNvIGluIGNhc2UgeW91IGNob3NlIGEgIldpbmRvd3MiCiAgICAgICAgICBzZXR0aW5nIG9mICJjOlxcd2luZG93cyIgYW5kIHlvdSBjaG9zZSB0byBzZXQgdXAgYSBkcml2ZSBDCiAgICAgICAgICBlLmcuIGF0IDxmaWxlbmFtZT4vdXNyL2xvY2FsL3dpbmVfYzwvZmlsZW5hbWU+LCB0aGUKICAgICAgICAgIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5IHdvdWxkIGJlCiAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC93aW5lX2Mvd2luZG93czwvZmlsZW5hbWU+LiAgTWFrZSBvbmUKICAgICAgICAgIGlmIHlvdSBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiA8ZW1waGFzaXM+Tm8gdHJhaWxpbmcgc2xhc2g8L2VtcGhhc2lzPiAoPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+CiAgICAgICAgICA8ZmlsZW5hbWU+QzpcXHdpbmRvd3NcPC9maWxlbmFtZT4pISBXcml0ZSBhY2Nlc3Mgc3Ryb25nbHkKICAgICAgICAgIHJlY29tbWVuZGVkLCBhcyBXaW5kb3dzIHByb2dyYW1zIGFsd2F5cyBhc3N1bWUgd3JpdGUgYWNjZXNzCiAgICAgICAgICAgIHRvIHRoZSBXaW5kb3dzIGRpcmVjdG9yeSEKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlN5c3RlbSIgPSAiYzpcXHdpbmRvd3NcXHN5c3RlbSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgVGhpcyBzZXRzIHVwIHdoZXJlIHRoZSB3aW5kb3dzIHN5c3RlbSBmaWxlcyBhcmUuIFRoZSBXaW5kb3dzCiAgICAgICAgICAgIHN5c3RlbSBkaXJlY3Rvcnkgc2hvdWxkIHJlc2lkZSBiZWxvdyB0aGUgZGlyZWN0b3J5IHVzZWQgZm9yIHRoZQogICAgICAgICAgPGxpdGVyYWw+V2luZG93czwvbGl0ZXJhbD4gc2V0dGluZy4KICAgICAgICAgICAgVGh1cyB3aGVuIHVzaW5nIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgc3lzdGVtIGRpcmVjdG9yeSB3b3VsZCBiZQogICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC93aW5lX2Mvd2luZG93cy9zeXN0ZW08L2ZpbGVuYW1lPi4KICAgICAgICAgIEFnYWluLCBubyB0cmFpbGluZyBzbGFzaCwgYW5kIHdyaXRlIGFjY2VzcyEKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlRlbXAiID0gImM6XFx0ZW1wIjwvcHJvZ3JhbWxpc3Rpbmc+IFRoaXMgc2hvdWxkCiAgICAgICAgICBiZSB0aGUgZGlyZWN0b3J5IHlvdSB3YW50IHlvdXIgdGVtcCBmaWxlcyBzdG9yZWQgaW4sCiAgICAgICAgICAgIC91c3IvbG9jYWwvd2luZV9jL3RlbXAgaW4gb3VyIGV4YW1wbGUuCiAgICAgICAgICBBZ2Fpbiwgbm8gdHJhaWxpbmcgc2xhc2gsIGFuZCA8ZW1waGFzaXM+d3JpdGUKICAgICAgICAgICAgYWNjZXNzPC9lbXBoYXNpcz4hIQogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIlBhdGgiID0gImM6XFx3aW5kb3dzO2M6XFx3aW5kb3dzXFxzeXN0ZW07YzpcXGJsYW5jbyIKICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgQmVoYXZlcyBsaWtlIHRoZSA8ZW52YXI+UEFUSDwvZW52YXI+IHNldHRpbmcgb24gVU5JWAogICAgICAgICAgYm94ZXMuIFdoZW4gd2luZSBpcyBydW4gbGlrZSA8dXNlcmlucHV0PndpbmUKICAgICAgICAgICAgc29sLmV4ZTwvdXNlcmlucHV0PiwgaWYgPGZpbGVuYW1lPnNvbC5leGU8L2ZpbGVuYW1lPgogICAgICAgICAgcmVzaWRlcyBpbiBhIGRpcmVjdG9yeSBzcGVjaWZpZWQgaW4gdGhlCiAgICAgICAgICA8bGl0ZXJhbD5QYXRoPC9saXRlcmFsPiBzZXR0aW5nLCB3aW5lIHdpbGwgcnVuIGl0IChPZgogICAgICAgICAgY291cnNlLCBpZiA8ZmlsZW5hbWU+c29sLmV4ZTwvZmlsZW5hbWU+IHJlc2lkZXMgaW4gdGhlCiAgICAgICAgICBjdXJyZW50IGRpcmVjdG9yeSwgd2luZSB3aWxsIHJ1biB0aGF0IG9uZSkuIE1ha2Ugc3VyZSBpdAogICAgICAgICAgYWx3YXlzIGhhcyB5b3VyIDxmaWxlbmFtZT53aW5kb3dzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFuZAogICAgICAgICAgc3lzdGVtIGRpcmVjdG9yeSAoRm9yIHRoaXMgc2V0dXAsIGl0IG11c3QgaGF2ZQogICAgICAgICAgPGZpbGVuYW1lPiJjOlxcd2luZG93cztjOlxcd2luZG93c1xcc3lzdGVtIjwvZmlsZW5hbWU+KS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmEgaWQ9ImRpcnN5bWxpbmtzIj4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIlNob3dEaXJTeW1saW5rcyIgPSAiMSIKICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBXaW5lIGRvZXNuJ3QgcGFzcyBkaXJlY3Rvcnkgc3ltbGlua3MgdG8gV2luZG93cyBwcm9ncmFtcyBieQogICAgICAgICAgZGVmYXVsdCwgYXMgZG9pbmcgc28gbWF5IGNyYXNoIHNvbWUgcHJvZ3JhbXMgdGhhdCBkbwogICAgICAgICAgcmVjdXJzaXZlIGxvb2t1cHMgb2Ygd2hvbGUgc3ViZGlyZWN0b3J5IHRyZWVzCiAgICAgICAgICB3aGVuZXZlciBhIGRpcmVjdG9yeSBzeW1saW5rIHBvaW50cyBiYWNrIHRvIGl0c2VsZiBvciBvbmUgb2YgaXRzCiAgICAgICAgICBwYXJlbnQgZGlyZWN0b3JpZXMuCiAgICAgICAgICBUaGF0J3Mgd2h5IHdlIGRpc2FsbG93ZWQgdGhlIHVzZSBvZiBkaXJlY3Rvcnkgc3ltbGlua3MKICAgICAgICAgIGFuZCBhZGRlZCB0aGlzIHNldHRpbmcgdG8gcmVlbmFibGUgKCIxIikgdGhpcyBmdW5jdGlvbmFsaXR5LgoJICBJZiB5b3UgPGVtcGhhc2lzPnJlYWxseTwvZW1waGFzaXM+IG5lZWQgV2luZSB0byB0YWtlIGludG8KCSAgYWNjb3VudCBzeW1saW5rZWQgZGlyZWN0b3JpZXMsIHRoZW4gcmVlbmFibGUgaXQsIGJ1dAoJICA8ZW1waGFzaXM+YmUgcHJlcGFyZWQgZm9yIGNyYXNoZXM8L2VtcGhhc2lzPiBpbiBjZXJ0YWluCgkgIFdpbmRvd3MgcHJvZ3JhbXMgd2hlbiB1c2luZyB0aGUgYWJvdmUgbWV0aG9kISAoaW4gb3RoZXIgd29yZHM6CgkgIGVuYWJsaW5nIGl0IGlzIGNlcnRhaW5seSBub3QgcmVjb21tZW5kZWQpCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Nb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uIGFib3V0IGZpbGUgc3lzdGVtIGRpZmZlcmVuY2VzPC90aXRsZT4KICAgICAgICA8cGFyYT4KCSAgV2luZG93cyB1c2VzIGEgZGlmZmVyZW50IChhbmQgaW5mZXJpb3IpIHdheSB0aGFuIFVuaXggdG8gZGVzY3JpYmUgdGhlCgkgIGxvY2F0aW9uIG9mIGZpbGVzIGluIGEgY29tcHV0ZXIuIFRodXMgV2luZG93cyBwcm9ncmFtcyBhbHNvIGV4cGVjdAoJICB0byBmaW5kIHRoaXMgZGlmZmVyZW50IHdheSBzdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbS4KCSAgU2luY2Ugd2UgaW50ZW5kIHRvIHJ1biBXaW5kb3dzIHByb2dyYW1zIG9uCgkgIGEgVW5peCBzeXN0ZW0sIHdlJ3JlIGluIHRyb3VibGUsIGFzIHdlIG5lZWQgdG8gdHJhbnNsYXRlCgkgIGJldHdlZW4gdGhlc2UgZGlmZmVyZW50IGZpbGUgYWNjZXNzIHRlY2huaXF1ZXMuCgk8L3BhcmE+Cgk8cGFyYT4KICAgICAgICAgIFdpbmRvd3MgdXNlcyBkcml2ZSBsZXR0ZXJzIHRvIGRlc2NyaWJlIGRyaXZlcyBvcgogICAgICAgICAgYW55IG90aGVyIGZvcm0gb2Ygc3RvcmFnZSBtZWRpYSBhbmQgdG8gYWNjZXNzIGZpbGVzIG9uIHRoZW0uCgkgIEZvciBleGFtcGxlLCBjb21tb24gZHJpdmUgbmFtZXMgYXJlCgkgIDxmaWxlbmFtZT5DOjwvZmlsZW5hbWU+IGZvciB0aGUgbWFpbiBXaW5kb3dzIHN5c3RlbSBwYXJ0aXRpb24KCSAgb24gdGhlIGZpcnN0IGhhcmRkaXNrIGFuZCA8ZmlsZW5hbWU+QTo8L2ZpbGVuYW1lPiBmb3IgdGhlCgkgIGZpcnN0IGZsb3BweSBkcml2ZS4KCSAgQWxzbywgV2luZG93cyB1c2VzIDxmaWxlbmFtZT5cPC9maWxlbmFtZT4gKGJhY2tzbGFzaCkgYXMgdGhlCgkgIGRpcmVjdG9yeSBzZXBhcmF0b3Igc2lnbiwgd2hlcmVhcyBVbml4IHVzZXMKCSAgPGZpbGVuYW1lPi88L2ZpbGVuYW1lPiAoc2xhc2gpLgoJICBUaHVzLCBhbiBleGFtcGxlIGRvY3VtZW50IG9uIHRoZSBmaXJzdCBkYXRhIHBhcnRpdGlvbiBpbgoJICBXaW5kb3dzIG1pZ2h0IGJlIGFjY2Vzc2VkIGJ5IHRoZSBuYW1lIG9mCgkgIDxmaWxlbmFtZT5EOlxteXdvcmtcbXlkb2N1bWVudC50eHQ8L2ZpbGVuYW1lPi4KCTwvcGFyYT4KCTxwYXJhPgoJICBTbyBtdWNoIGZvciB0aGUgV2luZG93cyB3YXkgb2YgZG9pbmcgdGhpbmdzLgoJPC9wYXJhPgoJPHBhcmE+CgkgIFdlbGwsIHRoZSBwcm9ibGVtIGlzLCBpbiBVbml4IHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMKCSAgPHF1b3RlPmRyaXZlIGxldHRlcnM8L3F1b3RlPi4gSW5zdGVhZCwgVW5peCBjaG9zZSB0byBnbyB0aGUKCSAgbXVjaCBiZXR0ZXIgd2F5IG9mIGhhdmluZyBvbmUgc2luZ2xlIHVuaWZvcm0gZGlyZWN0b3J5IHRyZWUKCSAgKHN0YXJ0aW5nIHdpdGggdGhlIHJvb3QgZGlyZWN0b3J5CgkgIDxmaWxlbmFtZT4vPC9maWxlbmFtZT4pLCB3aGljaCBoYXMgdmFyaW91cyBzdG9yYWdlIGRldmljZXMKCSAgc3VjaCBhcyBlLmcuIGhhcmRkaXNrIHBhcnRpdGlvbnMgYXBwZW5kZWQgYXQgdmFyaW91cyBkaXJlY3RvcnkKCSAgbG9jYXRpb25zIHdpdGhpbiB0aGUgdHJlZSAoYW4gZXhhbXBsZSB3b3VsZCBiZQoJICA8ZmlsZW5hbWU+L2RhdGExL215d29yazwvZmlsZW5hbWU+LCB3aGljaCBpcyB0aGUgZmlyc3QgZGF0YQoJICBwYXJ0aXRpb24gbW91bnRlZC9hdHRhY2hlZCB0byBhIGRpcmVjdG9yeSBjYWxsZWQgZGF0YTEgaW4gdGhlCgkgIHJvb3QgZGlyZWN0b3J5IDxmaWxlbmFtZT4vPC9maWxlbmFtZT47IG15d29yayBpcyBhIHN1YgoJICBkaXJlY3Rvcnkgb2YgdGhlIGRhdGEgcGFydGl0aW9uIGZpbGUgc3lzdGVtIHRoYXQncyBtb3VudGVkCgkgIHVuZGVyIDxmaWxlbmFtZT4vZGF0YTE8L2ZpbGVuYW1lPikuCgkgIEluIFVuaXgsIHRoZSBXaW5kb3dzIGV4YW1wbGUgZG9jdW1lbnQgbWVudGlvbmVkIGFib3ZlIGNvdWxkIGUuZy4KCSAgYmUgYWNjZXNzZWQgYnkgdGhlIG5hbWUgb2YKCSAgPGZpbGVuYW1lPi9kYXRhMS9teXdvcmsvbXlkb2N1bWVudC50eHQ8L2ZpbGVuYW1lPiwKCSAgcHJvdmlkZWQgdGhhdCB0aGUgYWRtaW5pc3RyYXRvciBkZWNpZGVkIHRvIG1vdW50IChhdHRhY2gpIHRoZSBmaXJzdAoJICBkYXRhIHBhcnRpdGlvbiBhdCB0aGUgZGlyZWN0b3J5IC9kYXRhMSBpbnNpZGUgdGhlIFVuaXgKCSAgZGlyZWN0b3J5IHRyZWUuIE5vdGUgdGhhdCBpbiBVbml4LCB0aGUgYWRtaW5pc3RyYXRvciBjYW4KCSAgPGVtcGhhc2lzPmNob29zZTwvZW1waGFzaXM+IGFueSBjdXN0b20gcGFydGl0aW9uIGxvY2F0aW9uIGhlCgkgIHdhbnRzIChoZXJlLCA8ZmlsZW5hbWU+L2RhdGExPC9maWxlbmFtZT4pLCB3aGVyZWFzIGluIFdpbmRvd3MgdGhlIHN5c3RlbQoJICA8ZW1waGFzaXM+c2VsZWN0czwvZW1waGFzaXM+IGFueSBkcml2ZSBsZXR0ZXIgaXQgZGVlbXMKCSAgc3VpdGFibGUgZm9yIHRoZSBmaXJzdCBkYXRhIHBhcnRpdGlvbiAoaGVyZSwKCSAgPGZpbGVuYW1lPkQ6PC9maWxlbmFtZT4pLCBhbmQsIGV2ZW4gd29yc2UsIGlmIHRoZXJlIGlzIHNvbWUKCSAgY2hhbmdlIGluIHBhcnRpdGlvbiBvcmRlciwgV2luZG93cyBhdXRvbWF0aWNhbGx5CgkgIDxlbXBoYXNpcz5jaGFuZ2VzPC9lbXBoYXNpcz4gdGhlIGRyaXZlIGxldHRlciwgYW5kIHlvdSBtaWdodAoJICBzdWRkZW5seSBmaW5kIHlvdXJzZWxmIHdpdGggYSBmaXJzdCBkYXRhIHBhcnRpdGlvbiBhdCBkcml2ZQoJICBsZXR0ZXIgPGZpbGVuYW1lPkU6PC9maWxlbmFtZT4sIHdpdGggYWxsIHRoZSBmaWxlIG5hbWluZyBhbmQKCSAgcmVmZXJlbmNpbmcgY29uZnVzaW9uIHRoYXQgZW50YWlscy4gVGh1cywgdGhlIFdpbmRvd3Mgd2F5IG9mCgkgIHVzaW5nIGV2ZXItY2hhbmdpbmcgZHJpdmUgbGV0dGVycyBpcyA8ZW1waGFzaXM+Y2xlYXJseQoJICBpbmZlcmlvcjwvZW1waGFzaXM+IHRvIHRoZSBVbml4IHdheSBvZiBhc3NpZ25pbmcKCSAgPGVtcGhhc2lzPmZpeGVkPC9lbXBoYXNpcz4gZGlyZWN0b3J5IHRyZWUgbG9jYXRpb25zIGZvciBldmVyeQoJICBkYXRhIHN0b3JhZ2UgbWVkaXVtLgoJICBBcyB3ZSdsbCBzZWUgc29vbiwgZm9ydHVuYXRlbHkgdGhpcyBXaW5kb3dzIGxpbWl0YXRpb24gb2YKCSAgY2hhbmdpbmcgZHJpdmUgbGV0dGVycyBkb2Vzbid0IGFmZmVjdCB1cyBpbiBXaW5lIGF0IGFsbCwgc2luY2UKCSAgd2UgY2FuIHByb3Blcmx5IG1hcCA8ZW1waGFzaXM+bmV2ZXItY2hhbmdpbmc8L2VtcGhhc2lzPiBkcml2ZSBsZXR0ZXJzIHRvIDxlbXBoYXNpcz5maXhlZDwvZW1waGFzaXM+IGxvY2F0aW9ucyBpbnNpZGUgdGhlIFVuaXggZGlyZWN0b3J5IHRyZWUgKGFuZCBldmVuIGlmIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVzcGVjdGl2ZSBVbml4IGRpcmVjdG9yeSBjaGFuZ2VzLCB3ZSBjYW4gc3RpbGwgc2ltcGx5IHVwZGF0ZSB0aGUgV2luZSBkcml2ZSBtYXBwaW5nIHRvIHJlZmxlY3QgdGhlIHVwZGF0ZWQgbG9jYXRpb24gYW5kIGF0IHRoZSBzYW1lIHRpbWUga2VlcCB0aGUgb3JpZ2luYWwgZHJpdmUgbGV0dGVyKS4KCTwvcGFyYT4KCTxwYXJhPgoJICBPSywgbm93IHRoYXQgd2Uga25vdyBzb21lIHRoZW9yeSBhYm91dCBXaW5kb3dzIGFuZCBVbml4IGRyaXZlCgkgIGFuZCBmaWxlbmFtZSBtYXBwaW5nLCBpdCdzIHByb2JhYmx5IHRpbWUgdG8gYXNrIGhvdyBXaW5lCgkgIGFjaGlldmVzIHRoZSBtYWdpYyBvZiBtYXBwaW5nIGEgVW5peCBkaXJlY3RvcnkgbG9jYXRpb24gdG8gYQoJICBXaW5kb3dzIGRyaXZlLi4uCgk8L3BhcmE+Cgk8cGFyYT4KICAgICAgICAgIFdpbmUgY2hvc2UgdG8gZG8gdGhlIGZvbGxvd2luZzoKCSAgSW4gV2luZSwgeW91IGRvbid0IGFzc2lnbiBzb21lIHJlYWwgcGh5c2ljYWwgc3RvcmFnZSBtZWRpdW0KCSAgKHN1Y2ggYXMgYSBoYXJkZGlzayBwYXJ0aXRpb24gb3Igc2ltaWxhcikgdG8gZWFjaCBkcml2ZSBsZXR0ZXIKCSAgbWFwcGluZyBlbnRyeS4KICAgICAgICAgIEluc3RlYWQsIHlvdSBjaG9vc2UgY2VydGFpbiBzdWIgZGlyZWN0b3J5IHRyZWVzIGluc2lkZSB0aGUgVW5peAogICAgICAgICAgZGlyZWN0b3J5IHRyZWUgKHRoYXQgc3RhcnRzIHdpdGggPGZpbGVuYW1lPi88L2ZpbGVuYW1lPikgdGhhdAogICAgICAgICAgeW91IHdvdWxkIGxpa2UgdG8gYXNzaWduIGEgZHJpdmUgbGV0dGVyIHRvLgoJPC9wYXJhPgoJPHBhcmE+CgkgIE5vdGUgdGhhdCBmb3IgZXZlcnkgVW5peCBzdWIgZGlyZWN0b3J5IHRyZWUgdGhhdCB5b3UgaW50ZW5kIHRvCgkgIHN0YXJ0IFdpbmRvd3MgcHJvZ3JhbXMgaW4sIGl0IGlzIDxlbXBoYXNpcz5hYnNvbHV0ZWx5CgkgIHJlcXVpcmVkPC9lbXBoYXNpcz4gdG8gaGF2ZSBhIFdpbmUgZHJpdmUgbWFwcGluZyBlbnRyeToKCTwvcGFyYT4KCTxwYXJhPgoJICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhIHB1YmxpY2x5IHdyaXRhYmxlIDxxdW90ZT5XaW5kb3dzCgkgIGRpcmVjdG9yeSBzcGFjZTwvcXVvdGU+IHVuZGVyIDxmaWxlbmFtZT4vdXNyL215d2luZTwvZmlsZW5hbWU+LCB0aGVuIGluIG9yZGVyIHRvIGJlCgkgIGFibGUgdG8gYWNjZXNzIHRoaXMgc3ViIGRpcmVjdG9yeSB0cmVlIGZyb20gV2luZSwgeW91IHNob3VsZAoJICBoYXZlIGEgZHJpdmUgbWFwcGluZyBlbnRyeSB0aGF0IG1hcHMgYSBjZXJ0YWluIGRyaXZlIGxldHRlcgoJICAoZm9yIGV4YW1wbGUsIGxldCdzIHRha2UgZHJpdmUgbGV0dGVyIDxmaWxlbmFtZT5QOjwvZmlsZW5hbWU+KQoJICBlaXRoZXIgdG8gPGZpbGVuYW1lPi91c3IvbXl3aW5lPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi91c3I8L2ZpbGVuYW1lPiAodG8gYWxzbyBhY2Nlc3MgYW55IGRpcmVjdG9yaWVzIGJlbG9uZ2luZyB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSkgb3IgPGZpbGVuYW1lPi88L2ZpbGVuYW1lPiAodG8gYWxzbyBhY2Nlc3MgYW55IGRpcmVjdG9yeSB3aGF0c29ldmVyIG9uIHRoaXMgc3lzdGVtIGJ5IHRoaXMgZHJpdmUgbGV0dGVyIG1hcHBpbmcpLiBUaGUgRE9TIGRyaXZlL2RpcmVjdG9yeSBsb2NhdGlvbiB0byBhY2Nlc3MgZmlsZXMgaW4gPGZpbGVuYW1lPi91c3IvbXl3aW5lPC9maWxlbmFtZT4gPGVtcGhhc2lzPmluIFdpbmU8L2VtcGhhc2lzPiBpbiB0aGVzZSBjb25maWd1cmF0aW9uIGNhc2VzIHdvdWxkIHRoZW4gYmUgPGZpbGVuYW1lPlA6XDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5QOlxteXdpbmU8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+UDpcdXNyXG15d2luZTwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCgk8L3BhcmE+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDIgaWQ9ImNvbmZpZy1uby13aW5kb3dzIj4KICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyBXaW5lIFdpdGhvdXQgV2luZG93czwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBXcml0dGVuIGJ5ICZuYW1lLWphbWVzLWp1cmFuOyA8ZW1haWw+JmVtYWlsLWphbWVzLWp1cmFuOzwvZW1haWw+CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vbm8td2luZG93czwvZmlsZW5hbWU+KQogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPHBhcmE+CiAgICAgICAgICBBIG1ham9yIGdvYWwgb2YgV2luZSBpcyB0byBhbGxvdyB1c2VycyB0byBydW4gV2luZG93cyBwcm9ncmFtcwogICAgICAgICAgd2l0aG91dCBoYXZpbmcgdG8gaW5zdGFsbCBXaW5kb3dzIG9uIHRoZWlyIG1hY2hpbmUuIFdpbmUKICAgICAgICAgIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG1haW4gRExMcyB1c3VhbGx5CiAgICAgICAgICBwcm92aWRlZCB3aXRoIFdpbmRvd3MuIFRoZXJlZm9yZSwgb25jZSBXaW5lIGlzIGZpbmlzaGVkLCB5b3UKICAgICAgICAgIHdpbGwgbm90IG5lZWQgdG8gaGF2ZSBXaW5kb3dzIGluc3RhbGxlZCB0byB1c2UgV2luZS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBXaW5lIGhhcyBhbHJlYWR5IG1hZGUgZW5vdWdoIHByb2dyZXNzIHRoYXQgaXQgbWF5IGJlIHBvc3NpYmxlCiAgICAgICAgICB0byBydW4geW91ciB0YXJnZXQgcHJvZ3JhbXMgd2l0aG91dCBXaW5kb3dzIGluc3RhbGxlZC4gSWYKICAgICAgICAgIHlvdSB3YW50IHRvIHRyeSBpdCwgZm9sbG93IHRoZXNlIHN0ZXBzOgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPG9yZGVyZWRsaXN0PgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBQb2ludCA8bWVkaWFsYWJlbD5bRHJpdmUgQ108L21lZGlhbGFiZWw+IGluCiAgICAgICAgICAgICAgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4gdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB5b3Ugd2FudAogICAgICAgICAgICAgIDxmaWxlbmFtZT5DOjwvZmlsZW5hbWU+IHRvIGJlLiBSZWZlciB0byB0aGUgd2luZS5jb25mIG1hbiBwYWdlCiAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgCSAgICBUaGUgZGlyZWN0b3J5IHRvIGJlIHVzZWQgZm9yIGVtdWxhdGluZyBhIEM6IGRyaXZlIHdpbGwgYmUKICAJICAgIHRoZSBiYXNlIGRpcmVjdG9yeSBmb3Igc29tZSBXaW5kb3dzIHNwZWNpZmljIGRpcmVjdG9yaWVzCiAgCSAgICBjcmVhdGVkIGJlbG93LgogIAkgICAgUmVtZW1iZXIgdG8gdXNlCiAgICAgICAgICAgICAgPHVzZXJpbnB1dD4iRmlsZXN5c3RlbSIgPSAid2luOTUiPC91c2VyaW5wdXQ+IQogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAJICAgIFdpdGhpbiB0aGUgZGlyZWN0b3J5IHRvIGJlIHVzZWQgZm9yIEM6LCBjcmVhdGUgZW1wdHkKICAJICAgIDxmaWxlbmFtZT53aW5kb3dzPC9maWxlbmFtZT4sCiAgICAgICAgICAgICAgPGZpbGVuYW1lPndpbmRvd3Mvc3lzdGVtPC9maWxlbmFtZT4sCiAgICAgICAgICAgICAgPGZpbGVuYW1lPndpbmRvd3MvU3RhcnQgTWVudTwvZmlsZW5hbWU+LCBhbmQKICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2luZG93cy9TdGFydCBNZW51L1Byb2dyYW1zPC9maWxlbmFtZT4KICAgICAgICAgICAgICBkaXJlY3Rvcmllcy4gRG8gbm90IHBvaW50IFdpbmUgdG8gYQogICAgICAgICAgICAgIDxmaWxlbmFtZT5XaW5kb3dzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGZ1bGwgb2Ygb2xkCiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9ucyBhbmQgYSBtZXNzeSByZWdpc3RyeS4gKFdpbmUgY3JlYXRlcyBhCiAgICAgICAgICAgICAgc3BlY2lhbCByZWdpc3RyeSBpbiB5b3VyIDxmaWxlbmFtZSA+aG9tZTwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgZGlyZWN0b3J5LCBpbiA8ZmlsZW5hbWU+JEhPTUUvLndpbmUvKi5yZWc8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICBQZXJoYXBzIHlvdSBoYXZlIHRvIHJlbW92ZSB0aGVzZSBmaWxlcykuCiAgCSAgICBJbiBvbmUgbGluZToKICAJICAgIG1rZGlyIC1wIHdpbmRvd3Mgd2luZG93cy9zeXN0ZW0gd2luZG93cy9TdGFydFwgTWVudSB3aW5kb3dzL1N0YXJ0XCBNZW51L1Byb2dyYW1zCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFJ1biBhbmQvb3IgaW5zdGFsbCB5b3VyIHByb2dyYW1zLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvb3JkZXJlZGxpc3Q+CgogICAgICAgIDxwYXJhPgogICAgICAgICAgQmVjYXVzZSBXaW5lIGlzIG5vdCB5ZXQgY29tcGxldGUsIHNvbWUgcHJvZ3JhbXMgd2lsbCB3b3JrCiAgICAgICAgICBiZXR0ZXIgd2l0aCBuYXRpdmUgV2luZG93cyBETExzIHRoYW4gd2l0aCBXaW5lJ3MKICAgICAgICAgIHJlcGxhY2VtZW50cy4gV2luZSBoYXMgYmVlbiBkZXNpZ25lZCB0byBtYWtlIHRoaXMgcG9zc2libGUuCiAgICAgICAgICBIZXJlIGFyZSBzb21lIHRpcHMgYnkgSnVlcmdlbiBTY2htaWVkIChhbmQgb3RoZXJzKSBvbiBob3cgdG8KICAgICAgICAgIHByb2NlZWQuIFRoaXMgYXNzdW1lcyB0aGF0IHlvdXIKICAgICAgICAgIDxmaWxlbmFtZT5DOlx3aW5kb3dzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGluIHRoZSBjb25maWd1cmF0aW9uCiAgICAgICAgICBmaWxlIGRvZXMgbm90IHBvaW50IHRvIGEgbmF0aXZlIFdpbmRvd3MgaW5zdGFsbGF0aW9uIGJ1dCBpcyBpbgogICAgICAgICAgYSBzZXBhcmF0ZSBVbml4IGZpbGUgc3lzdGVtLiAoRm9yIGluc3RhbmNlLCA8cXVvdGU+Qzpcd2luZG93czwvcXVvdGU+IGlzCiAgICAgICAgICByZWFsbHkgc3ViZGlyZWN0b3J5IDxxdW90ZT53aW5kb3dzPC9xdW90ZT4gbG9jYXRlZCBpbgogICAgICAgICAgPHF1b3RlPi9ob21lL2Vnby93aW5lL2RyaXZlcy9jPC9xdW90ZT4pLgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgUnVuIHRoZSBwcm9ncmFtIHdpdGggPHBhcmFtZXRlcj4tLWRlYnVnbXNnCiAgICAgICAgICAgICAgICArbG9hZGRsbDwvcGFyYW1ldGVyPiB0byBmaW5kIG91dCB3aGljaCBmaWxlcyBhcmUKICAgICAgICAgICAgICBuZWVkZWQuIENvcHkgdGhlIHJlcXVpcmVkIERMTHMgb25lIGJ5IG9uZSB0byB0aGUKICAgICAgICAgICAgICA8ZmlsZW5hbWU+Qzpcd2luZG93c1xzeXN0ZW08L2ZpbGVuYW1lPiBkaXJlY3RvcnkuIERvIG5vdAogICAgICAgICAgICAgIGNvcHkgS0VSTkVML0tFUk5FTDMyLCBHREkvR0RJMzIsIFVTRVIvVVNFUjMyIG9yIE5URExMLiBUaGVzZQogICAgICAgICAgICAgIGltcGxlbWVudCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBXaW5kb3dzIEFQSSwgYW5kCiAgICAgICAgICAgICAgdGhlIFdpbmUgaW50ZXJuYWwgdmVyc2lvbnMgbXVzdCBiZSB1c2VkLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBFZGl0IHRoZSA8cXVvdGU+W0RsbE92ZXJyaWRlc108L3F1b3RlPiBzZWN0aW9uIG9mCiAgICAgICAgICAgICAgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4gdG8gc3BlY2lmeQogICAgICAgICAgICAgIDxxdW90ZT5uYXRpdmU8L3F1b3RlPiBiZWZvcmUgPHF1b3RlPmJ1aWx0aW48L3F1b3RlPiBmb3IKICAgICAgICAgICAgICB0aGUgV2luZG93cyBETExzIHlvdSB3YW50IHRvIHVzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24KICAgICAgICAgICAgICBhYm91dCB0aGlzLCBzZWUgdGhlIFdpbmUgbWFucGFnZS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgTm90ZSB0aGF0IHNvbWUgbmV0d29yayBETExzIGFyZSBub3QgbmVlZGVkIGV2ZW4gdGhvdWdoCiAgICAgICAgICAgICAgV2luZSBpcyBsb29raW5nIGZvciB0aGVtLiBUaGUgV2luZG93cwogICAgICAgICAgICAgIDxmaWxlbmFtZT5NUFIuRExMPC9maWxlbmFtZT4gY3VycmVudGx5IGRvZXMgbm90IHdvcms7IHlvdQogICAgICAgICAgICAgIG11c3QgdXNlIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29weSBTSEVMTC5ETEwvU0hFTEwzMi5ETEwsIENPTU1ETEcuRExML0NPTURMRzMyLkRMTAoJICAgICAgYW5kIENPTU1DVFJMLkRMTC9DT01DVEwzMi5ETEwKICAgICAgICAgICAgICBvbmx5IGFzIHBhaXJzIHRvIHlvdXIgV2luZSBkaXJlY3RvcnkgKHRoZXNlIERMTHMgYXJlCiAgICAgICAgICAgICAgPHF1b3RlPmNsZWFuPC9xdW90ZT4gdG8gdXNlKS4gIE1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGVzZQogICAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgPHF1b3RlPltEbGxQYWlyc108L3F1b3RlPiBzZWN0aW9uIG9mCiAgICAgICAgICAgICAgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIEJlIGNvbnNpc3RlbnQ6IFVzZSBvbmx5IERMTHMgZnJvbSB0aGUgc2FtZSBXaW5kb3dzIHZlcnNpb24KICAgICAgICAgICAgICB0b2dldGhlci4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgUHV0IDxmaWxlbmFtZT5yZWdlZGl0LmV4ZTwvZmlsZW5hbWU+IGluIHRoZQogICAgICAgICAgICAgIDxmaWxlbmFtZT5DOlx3aW5kb3dzPC9maWxlbmFtZT4gZGlyZWN0b3J5LgogICAgICAgICAgICAgICg8YXBwbGljYXRpb24+T2ZmaWNlIDk1PC9hcHBsaWNhdGlvbj4gaW1wb3J0cyBhCiAgICAgICAgICAgICAgPGZpbGVuYW1lPioucmVnPC9maWxlbmFtZT4gZmlsZSB3aGVuIGl0IHJ1bnMgd2l0aCBhbiBlbXB0eQogICAgICAgICAgICAgIHJlZ2lzdHJ5LCBkb24ndCBrbm93IGFib3V0CiAgICAgICAgICAgICAgPGFwcGxpY2F0aW9uPk9mZmljZSA5NzwvYXBwbGljYXRpb24+KS4KCSAgICAgIEFzIG9mIG5vdywgaXQgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeSBhbnkgbW9yZSB0byB1c2UKCSAgICAgIHJlZ2VkaXQuZXhlLCBzaW5jZSBXaW5lIGhhcyBpdHMgb3duIHJlZ2VkaXQgV2luZWxpYgoJICAgICAgYXBwbGljYXRpb24gbm93LgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBBbHNvIGFkZCA8ZmlsZW5hbWU+d2luaGVscC5leGU8L2ZpbGVuYW1lPiBhbmQKICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2luaGxwMzIuZXhlPC9maWxlbmFtZT4gaWYgeW91IHdhbnQgdG8gYmUgYWJsZQogICAgICAgICAgICAgIHRvIGJyb3dzZSB0aHJvdWdoIHlvdXIgcHJvZ3JhbXMnIGhlbHAgZnVuY3Rpb24KICAJICAgIChvciBpbiBjYXNlIFdpbmUncyB3aW5oZWxwIGltcGxlbWVudGF0aW9uIGluIHByb2dyYW1zL3dpbmhlbHAvCiAgCSAgICBpcyBub3QgZ29vZCBlbm91Z2gsIGZvciBleGFtcGxlKS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLXdpdGgtd2luZG93cyI+CiAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgV2luZSBVc2luZyBBbiBFeGlzdGluZyBXaW5kb3dzIFBhcnRpdGlvbiBBcyBCYXNlPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFNvbWUgcGVvcGxlIGludGVuZCB0byB1c2UgdGhlIGRhdGEgb2YgYW4gZXhpc3RpbmcgV2luZG93cyBwYXJ0aXRpb24KICAJd2l0aCBXaW5lIGluIG9yZGVyIHRvIGdhaW4gc29tZSBiZXR0ZXIgY29tcGF0aWJpbGl0eSBvciB0byBydW4gYWxyZWFkeQogIAlpbnN0YWxsZWQgcHJvZ3JhbXMgaW4gYSBzZXR1cCBhcyBvcmlnaW5hbCBhcyBwb3NzaWJsZS4KICAJTm90ZSB0aGF0IG1hbnkgV2luZG93cyBwcm9ncmFtcyBhc3N1bWUgdGhhdCB0aGV5IGhhdmUgZnVsbCB3cml0ZQogIAlhY2Nlc3MgdG8gYWxsIHdpbmRvd3MgZGlyZWN0b3JpZXMuCgogIAlUaGlzIG1lYW5zIHRoYXQgeW91IGVpdGhlciBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUgV2luZG93cwogIAlwYXJ0aXRpb24gbW91bnQgcG9pbnQgZm9yIHdyaXRlIHBlcm1pc3Npb24gYnkgeW91ciBXaW5lIHVzZXIKICAJKHNlZSA8bGluayBsaW5rZW5kPSJjb25maWctZHJpdmUtdmZhdCI+RGVhbGluZyB3aXRoIEZBVC9WRkFUIHBhcnRpdGlvbnM8L2xpbms+CiAgCW9uIGhvdyB0byBkbyB0aGF0KSwgb3IgeW91J2xsIGhhdmUgdG8gY29weSBvdmVyIChzb21lIHBhcnRzIG9mKSB0aGUgV2luZG93cwogIAlwYXJ0aXRpb24gY29udGVudCB0byBhIGRpcmVjdG9yeSBvZiBhIFVuaXggcGFydGl0aW9uIGFuZCBtYWtlCiAgCXN1cmUgdGhpcyBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIHdyaXRhYmxlIGJ5IHlvdXIgdXNlci4KICAJV2UgPGVtcGhhc2lzPkhJR0hMWSBESVNDT1VSQUdFPC9lbXBoYXNpcz4gcGVvcGxlIGZyb20gZGlyZWN0bHkgdXNpbmcgYSBXaW5kb3dzIHBhcnRpdGlvbiB3aXRoCiAgCXdyaXRlIGFjY2VzcyBhcyBhIGJhc2UgZm9yIFdpbmUhISAoc29tZSBwcm9ncmFtcywgbm90YWJseQogIAlFeHBsb3JlciwgY29ycnVwdCBsYXJnZSBwYXJ0cyBvZiB0aGUgV2luZG93cyBwYXJ0aXRpb24gaW4gY2FzZQogIAlvZiBhbiBpbmNvcnJlY3Qgc2V0dXA7IHlvdSd2ZSBiZWVuIHdhcm5lZCkuCiAgCU5vdCB0byBtZW50aW9uIHRoYXQgTlRGUyB3cml0ZSBzdXBwb3J0IGluIExpbnV4IGlzIHN0aWxsIHZlcnkKICAJZXhwZXJpbWVudGFsIGFuZCA8ZW1waGFzaXM+ZGFuZ2Vyb3VzPC9lbXBoYXNpcz4gKGluIGNhc2UgeW91J3JlIHVzaW5nIGFuIE5ULWJhc2VkCiAgCVdpbmRvd3MgdmVyc2lvbiB1c2luZyB0aGUgTlRGUyBmaWxlIHN5c3RlbSkuCiAgCVRodXMgd2UgYWR2aXNlIHlvdSB0byBnbyB0aGUgVW5peCBkaXJlY3Rvcnkgd2F5LgogICAgICAgIDwvcGFyYT4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLWRyaXZlLXZmYXQiPgogICAgICAgIDx0aXRsZT5EZWFsaW5nIFdpdGggRkFUL1ZGQVQgUGFydGl0aW9uczwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBXcml0dGVuIGJ5ICZuYW1lLXN0ZXZlbi1lbGxpb3R0OyA8ZW1haWw+JmVtYWlsLXN0ZXZlbi1lbGxpb3R0OzwvZW1haWw+CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vbGludXgtZmF0LXBlcm1pc3Npb25zPC9maWxlbmFtZT4pCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IEZBVCBhbmQKICAgICAgICAgIFZGQVQgZmlsZSBzeXN0ZW0gcGVybWlzc2lvbnMgd29yayBpbiBMaW51eAogICAgICAgICAgd2l0aCBhIGZvY3VzIG9uIGNvbmZpZ3VyaW5nIHRoZW0gZm9yIFdpbmUuCiAgICAgICAgPC9wYXJhPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBMaW51eCBpcyBhYmxlIHRvIGFjY2VzcyBET1MgYW5kIFdpbmRvd3MgZmlsZSBzeXN0ZW1zIHVzaW5nCiAgICAgICAgICAgIGVpdGhlciB0aGUgRkFUIChvbGRlciA4LjMgRE9TIGZpbGVzeXN0ZW1zKSBvciBWRkFUIChuZXdlcgogICAgICAgICAgICBXaW5kb3dzIDk1IG9yIGxhdGVyIGxvbmcgZmlsZW5hbWUgZmlsZXN5c3RlbXMpIG1vZHVsZXMuCiAgICAgICAgICAgIE1vdW50ZWQgRkFUIG9yIFZGQVQgZmlsZXN5c3RlbXMgcHJvdmlkZSB0aGUgcHJpbWFyeSBtZWFucwogICAgICAgICAgICBmb3Igd2hpY2ggZXhpc3RpbmcgcHJvZ3JhbXMgYW5kIHRoZWlyIGRhdGEgYXJlIGFjY2Vzc2VkCiAgICAgICAgICAgIHRocm91Z2ggV2luZSBmb3IgZHVhbCBib290IChMaW51eCArIFdpbmRvd3MpIHN5c3RlbXMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgV2luZSBtYXBzIG1vdW50ZWQgRkFUIGZpbGVzeXN0ZW1zLCBzdWNoIGFzCiAgICAgICAgICAgIDxmaWxlbmFtZT4vYzwvZmlsZW5hbWU+LCB0byBkcml2ZXIgbGV0dGVycywgc3VjaCBhcwogICAgICAgICAgICA8cXVvdGU+Yzo8L3F1b3RlPiwgYXMgaW5kaWNhdGVkIGJ5IHRoZQogICAgICAgICAgICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBmaWxlLiAgVGhlIGZvbGxvd2luZyBleGNlcnB0CiAgICAgICAgICAgIGZyb20gYSA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGRvZXMgdGhpczoKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KICBbRHJpdmUgQ10KICAiUGF0aCIgPSAiL2MiCiAgIlR5cGUiID0gImhkIgogICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBBbHRob3VnaCBWRkFUIGZpbGVzeXN0ZW1zIGFyZSBwcmVmZXJhYmxlIHRvIEZBVCBmaWxlc3lzdGVtcwogICAgICAgICAgICBmb3IgdGhlaXIgbG9uZyBmaWxlbmFtZSBzdXBwb3J0LCB0aGUgdGVybSA8cXVvdGU+RkFUPC9xdW90ZT4KICAgICAgICAgICAgd2lsbCBiZSB1c2VkIHRocm91Z2hvdXQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIGRvY3VtZW50IHRvCiAgICAgICAgICAgIHJlZmVyIHRvIEZBVCBmaWxlc3lzdGVtcyBhbmQgdGhlaXIgZGVyaXZhdGl2ZXMuIEFsc28sCiAgICAgICAgICAgIDxxdW90ZT4vYzwvcXVvdGU+IHdpbGwgYmUgdXNlZCBhcyB0aGUgRkFUIG1vdW50IHBvaW50IGluCiAgICAgICAgICAgIGV4YW1wbGVzIHRocm91Z2hvdXQgdGhpcyBkb2N1bWVudC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBNb3N0IG1vZGVybiBMaW51eCBkaXN0cmlidXRpb25zIGVpdGhlciBkZXRlY3Qgb3IgYWxsb3cKICAgICAgICAgICAgZXhpc3RpbmcgRkFUIGZpbGUgc3lzdGVtcyB0byBiZSBjb25maWd1cmVkIHNvIHRoYXQgdGhleSBjYW4gYmUKICAgICAgICAgICAgbW91bnRlZCwgaW4gYSBsb2NhdGlvbiBzdWNoIGFzIDxmaWxlbmFtZT4vYzwvZmlsZW5hbWU+LAogICAgICAgICAgICBlaXRoZXIgcGVyc2lzdGVudGx5IChvbiBib290dXApIG9yIG9uIGFuIGFzIG5lZWRlZCBiYXNpcy4gSW4KICAgICAgICAgICAgZWl0aGVyIGNhc2UsIGJ5IGRlZmF1bHQsIHRoZSBwZXJtaXNzaW9ucyB3aWxsIHByb2JhYmx5IGJlCiAgICAgICAgICAgIGNvbmZpZ3VyZWQgc28gdGhhdCB0aGV5IGxvb2sgbGlrZToKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxzY3JlZW4+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Y2QgL2M8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pi9jPjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bHMgLWw8L3VzZXJpbnB1dD4KICA8Y29tcHV0ZXJvdXRwdXQ+LXJ3eHIteHIteCAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgOTEgT2N0IDEwIDE3OjU4IGF1dG9leGVjLmJhdAogIC1yd3hyLXhyLXggICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgMjQ1IE9jdCAxMCAxNzo1OCBjb25maWcuc3lzCiAgZHJ3eHIteHIteCAgNDEgcm9vdCAgICAgcm9vdCAgICAgICAgMTYzODQgRGVjIDMwICAxOTk4IHdpbmRvd3M8L2NvbXB1dGVyb3V0cHV0PgogICAgICAgICAgPC9zY3JlZW4+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgd2hlcmUgYWxsIHRoZSBmaWxlcyBhcmUgb3duZWQgYnkgInJvb3QiLCBhcmUgaW4gdGhlICJyb290IgogICAgICAgICAgICBncm91cCBhbmQgYXJlIG9ubHkgd3JpdGFibGUgYnkgInJvb3QiCiAgICAgICAgICAgICg8bGl0ZXJhbD43NTU8L2xpdGVyYWw+IHBlcm1pc3Npb25zKS4gVGhpcyBpcyByZXN0cmljdGl2ZSBpbgogICAgICAgICAgICB0aGF0IGl0IHJlcXVpcmVzIHRoYXQgV2luZSBiZSBydW4gYXMgcm9vdCBpbiBvcmRlciBmb3IKICAgICAgICAgICAgcHJvZ3JhbXMgdG8gYmUgYWJsZSB0byB3cml0ZSB0byBhbnkgcGFydCBvZiB0aGUKICAgICAgICAgICAgZmlsZXN5c3RlbS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGVyZSBhcmUgdGhyZWUgbWFqb3IgYXBwcm9hY2hlcyB0byBvdmVyY29taW5nIHRoZSByZXN0cmljdGl2ZQogICAgICAgICAgICBwZXJtaXNzaW9ucyBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaDoKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgUnVuIDxhcHBsaWNhdGlvbj5XaW5lPC9hcHBsaWNhdGlvbj4gYXMgcm9vdAogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgTW91bnQgdGhlIEZBVCBmaWxlc3lzdGVtIHdpdGggbGVzcyByZXN0cmljdGl2ZQogICAgICAgICAgICAgICAgcGVybWlzc2lvbnMKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFNoYWRvdyB0aGUgRkFUIGZpbGVzeXN0ZW0gYnkgY29tcGxldGVseSBvciBwYXJ0aWFsbHkKICAgICAgICAgICAgICAgIGNvcHlpbmcgaXQKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEVhY2ggYXBwcm9hY2ggd2lsbCBiZSBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+UnVubmluZyBXaW5lIGFzIHJvb3Q8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFJ1bm5pbmcgV2luZSBhcyByb290IGlzIHRoZSBlYXNpZXN0IGFuZCBtb3N0IHRob3JvdWdoIHdheSBvZiBnaXZpbmcKICAgICAgICAgICAgcHJvZ3JhbXMgdGhhdCBXaW5lIHJ1bnMgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBGQVQgZmlsZXMgc3lzdGVtcy4KICAgICAgICAgICAgUnVubmluZyB3aW5lIGFzIHJvb3QgYWxzbyBhbGxvd3MgcHJvZ3JhbXMgdG8gZG8gdGhpbmdzIHVucmVsYXRlZAogICAgICAgICAgICB0byBGQVQgZmlsZXN5c3RlbXMsIHN1Y2ggYXMgbGlzdGVuaW5nIHRvIHBvcnRzIHRoYXQgYXJlIGxlc3MgdGhhbgogICAgICAgICAgICAxMDI0LiAgUnVubmluZyBXaW5lIGFzIHJvb3QgaXMgZGFuZ2Vyb3VzIHNpbmNlIHRoZXJlIGlzIG5vIGxpbWl0IHRvCiAgICAgICAgICAgIHdoYXQgdGhlIHByb2dyYW0gY2FuIGRvIHRvIHRoZSBzeXN0ZW0sIHNvIGl0J3MgPGVtcGhhc2lzPkhJR0hMWSBESVNDT1VSQUdFRDwvZW1waGFzaXM+LgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5Nb3VudGluZyBGQVQgZmlsZXN5c3RlbXM8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBGQVQgZmlsZXN5c3RlbSBjYW4gYmUgbW91bnRlZCB3aXRoIHBlcm1pc3Npb25zIGxlc3MgcmVzdHJpY3RpdmUKICAgICAgICAgICAgdGhhbiB0aGUgZGVmYXVsdC4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgZWl0aGVyIGNoYW5naW5nIHRoZSB1c2VyIHRoYXQKICAgICAgICAgICAgbW91bnRzIHRoZSBGQVQgZmlsZXN5c3RlbSBvciBieSBleHBsaWNpdGx5IGNoYW5naW5nIHRoZSBwZXJtaXNzaW9ucwogICAgICAgICAgICB0aGF0IHRoZSBGQVQgZmlsZXN5c3RlbSBpcyBtb3VudGVkIHdpdGguICBUaGUgcGVybWlzc2lvbnMgYXJlCiAgICAgICAgICAgIGluaGVyaXRlZCBmcm9tIHRoZSBwcm9jZXNzIHRoYXQgbW91bnRzIHRoZSBGQVQgZmlsZXN5c3RlbS4gIFNpbmNlIHRoZQogICAgICAgICAgICBwcm9jZXNzIHRoYXQgbW91bnRzIHRoZSBGQVQgZmlsZXN5c3RlbSBpcyB1c3VhbGx5IGEgc3RhcnR1cCBzY3JpcHQKICAgICAgICAgICAgcnVubmluZyBhcyByb290IHRoZSBGQVQgZmlsZXN5c3RlbSBpbmhlcml0cyByb290J3MgcGVybWlzc2lvbnMuICBUaGlzCiAgICAgICAgICAgIHJlc3VsdHMgaW4gdGhlIGZpbGVzIG9uIHRoZSBGQVQgZmlsZXN5c3RlbSBoYXZpbmcgcGVybWlzc2lvbnMgc2ltaWxhcgogICAgICAgICAgICB0byBmaWxlcyBjcmVhdGVkIGJ5IHJvb3QuICBGb3IgZXhhbXBsZToKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxzY3JlZW4+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+d2hvYW1pPC91c2VyaW5wdXQ+CiAgPGNvbXB1dGVyb3V0cHV0PnJvb3Q8L2NvbXB1dGVyb3V0cHV0PgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PnRvdWNoIHJvb3RfZmlsZTwvdXNlcmlucHV0PgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PmxzIC1sIHJvb3RfZmlsZTwvdXNlcmlucHV0PgogIDxjb21wdXRlcm91dHB1dD48L2NvbXB1dGVyb3V0cHV0Pi1ydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAwIERlYyAxMCAwMDoyMCByb290X2ZpbGUKICAgICAgICAgIDwvc2NyZWVuPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIHdoaWNoIG1hdGNoZXMgdGhlIG93bmVyLCBncm91cCBhbmQgcGVybWlzc2lvbnMgb2YgZmlsZXMgc2VlbgogICAgICAgICAgICBvbiB0aGUgRkFUIGZpbGVzeXN0ZW0gZXhjZXB0IGZvciB0aGUgbWlzc2luZyAneCdzLiAgVGhlCiAgICAgICAgICAgIHBlcm1pc3Npb25zIG9uIHRoZSBGQVQgZmlsZXN5c3RlbSBjYW4gYmUgY2hhbmdlZCBieSBjaGFuZ2luZwogICAgICAgICAgICByb290J3MgdW1hc2sgKHVuc2V0IHBlcm1pc3Npb25zIGJpdHMpLiAgRm9yIGV4YW1wbGU6CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8c2NyZWVuPgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PnVtb3VudCAvYzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PnVtYXNrPC91c2VyaW5wdXQ+CiAgPGNvbXB1dGVyb3V0cHV0PjAyMjwvY29tcHV0ZXJvdXRwdXQ+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+dW1hc2sgMDczPC91c2VyaW5wdXQ+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bW91bnQgL2M8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jZCAvYzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2M+PC9wcm9tcHQ+PHVzZXJpbnB1dD5scyAtbDwvdXNlcmlucHV0PgogIDxjb21wdXRlcm91dHB1dD4tcnd4LS0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICA5MSBPY3QgMTAgMTc6NTggYXV0b2V4ZWMuYmF0CiAgLXJ3eC0tLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAyNDUgT2N0IDEwIDE3OjU4IGNvbmZpZy5zeXMKICBkcnd4LS0tci0tICA0MSByb290ICAgICByb290ICAgICAgICAxNjM4NCBEZWMgMzAgIDE5OTggd2luZG93czwvY29tcHV0ZXJvdXRwdXQ+CiAgICAgICAgICA8L3NjcmVlbj4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBNb3VudGluZyB0aGUgRkFUIGZpbGVzeXN0ZW0gd2l0aCBhIHVtYXNrIG9mCiAgICAgICAgICAgIDxsaXRlcmFsPjAwMDwvbGl0ZXJhbD4gZ2l2ZXMgYWxsIHVzZXJzIGNvbXBsZXRlIGNvbnRyb2wgb3ZlcgogICAgICAgICAgICBpdC4gRXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgRkFUCiAgICAgICAgICAgIGZpbGVzeXN0ZW0gd2hlbiBpdCBpcyBtb3VudGVkIHByb3ZpZGVzIGFkZGl0aW9uYWwgY29udHJvbC4KICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIG1vdW50IG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gRkFUCiAgICAgICAgICAgIHBlcm1pc3Npb25zOiA8bGl0ZXJhbD51aWQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5naWQ8L2xpdGVyYWw+CiAgICAgICAgICAgIGFuZCA8bGl0ZXJhbD51bWFzazwvbGl0ZXJhbD4uICBUaGV5IGNhbiBlYWNoIGJlIHNwZWNpZmllZAogICAgICAgICAgICB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIG1hbnVhbGx5IG1vdW50ZWQuICBGb3IgZXhhbXBsZToKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxzY3JlZW4+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+dW1vdW50IC9jPC91c2VyaW5wdXQ+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bW91bnQgLW8gdWlkPTUwMCAtbyBnaWQ9NTAwIC1vIHVtYXNrPTAwMiAvYzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PmNkIC9jPC91c2VyaW5wdXQ+CiAgPHByb21wdD4vYz48L3Byb21wdD48dXNlcmlucHV0PmxzIC1sPC91c2VyaW5wdXQ+CiAgPGNvbXB1dGVyb3V0cHV0Pi1yd3hyd3hyLXggICAxIHNsZSAgICAgIHNsZSAgICAgICAgICAgIDkxIE9jdCAxMCAxNzo1OCBhdXRvZXhlYy5iYXQKICAtcnd4cnd4ci14ICAgMSBzbGUgICAgICBzbGUgICAgICAgICAgIDI0NSBPY3QgMTAgMTc6NTggY29uZmlnLnN5cwogIGRyd3hyd3hyLXggIDQxIHNsZSAgICAgIHNsZSAgICAgICAgIDE2Mzg0IERlYyAzMCAgMTk5OCB3aW5kb3dzPC9jb21wdXRlcm91dHB1dD4KICAgICAgICAgIDwvc2NyZWVuPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIHdoaWNoIGdpdmVzICJzbGUiIGNvbXBsZXRlIGNvbnRyb2wgb3ZlcgogICAgICAgICAgICA8ZmlsZW5hbWU+L2M8L2ZpbGVuYW1lPi4gIFRoZSBvcHRpb25zIGxpc3RlZCBhYm92ZSBjYW4gYmUKICAgICAgICAgICAgbWFkZSBwZXJtYW5lbnQgYnkgYWRkaW5nIHRoZW0gdG8gdGhlCiAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2ZzdGFiPC9maWxlbmFtZT4gZmlsZToKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxzY3JlZW4+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Z3JlcCAvYyAvZXRjL2ZzdGFiPC91c2VyaW5wdXQ+CiAgPGNvbXB1dGVyb3V0cHV0Pi9kZXYvaGRhMSAgL2MgIHZmYXQgIHVpZD01MDAsZ2lkPTUwMCx1bWFzaz0wMDIsZXhlYyxkZXYsc3VpZCxydyAxIDE8L2NvbXB1dGVyb3V0cHV0PgogICAgICAgICAgPC9zY3JlZW4+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSB1bWFzayBvZiA8bGl0ZXJhbD4wMDI8L2xpdGVyYWw+IGlzIGNvbW1vbiBpbgogICAgICAgICAgICB0aGUgdXNlciBwcml2YXRlIGdyb3VwIGZpbGUgcGVybWlzc2lvbiBzY2hlbWUuICBPbiBGQVQgZmlsZQogICAgICAgICAgICBzeXN0ZW1zIHRoaXMgdW1hc2sgYXNzdXJlcyB0aGF0IGFsbCBmaWxlcyBhcmUgZnVsbHkKICAgICAgICAgICAgYWNjZXNzaWJsZSBieSBhbGwgdXNlcnMgaW4gdGhlIHNwZWNpZmllZCB1c2VyIGdyb3VwCiAgICAgICAgICAgICg8bGl0ZXJhbD5naWQ8L2xpdGVyYWw+KS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+U2hhZG93aW5nIEZBVCBmaWxlc3lzdGVtczwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgU2hhZG93aW5nIHByb3ZpZGVzIGEgZmluZXIgZ3JhbnVsYXJpdHkgb2YgY29udHJvbC4gIFBhcnRzIG9mCiAgICAgICAgICAgIHRoZSBvcmlnaW5hbCBGQVQgZmlsZXN5c3RlbSBjYW4gYmUgY29waWVkIHNvIHRoYXQgdGhlCiAgICAgICAgICAgIHByb2dyYW0gY2FuIHNhZmVseSB3b3JrIHdpdGggdGhvc2UgY29waWVkIHBhcnRzIHdoaWxlCiAgICAgICAgICAgIHRoZSBwcm9ncmFtIGNvbnRpbnVlcyB0byBkaXJlY3RseSByZWFkIHRoZSByZW1haW5pbmcKICAgICAgICAgICAgcGFydHMuICBUaGlzIGlzIGRvbmUgd2l0aCBzeW1ib2xpYyBsaW5rcy4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIGNvbnNpZGVyIGEgc3lzdGVtIHdoZXJlIGEgcHJvZ3JhbSBuYW1lZAogICAgICAgICAgICA8YXBwbGljYXRpb24+QW5BcHA8L2FwcGxpY2F0aW9uPiBtdXN0IGJlIGFibGUgdG8gcmVhZCBhbmQKICAgICAgICAgICAgd3JpdGUgdG8gdGhlIDxmaWxlbmFtZT5jOlx3aW5kb3dzPC9maWxlbmFtZT4gYW5kCiAgICAgICAgICAgIDxmaWxlbmFtZT5jOlxBbkFwcDwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGFzIHdlbGwgYXMgaGF2ZQogICAgICAgICAgICByZWFkIGFjY2VzcyB0byB0aGUgZW50aXJlIEZBVCBmaWxlc3lzdGVtLiAgT24gdGhpcyBzeXN0ZW0KICAgICAgICAgICAgdGhlIEZBVCBmaWxlc3lzdGVtIGhhcyBkZWZhdWx0IHBlcm1pc3Npb25zIHdoaWNoIHNob3VsZCBub3QKICAgICAgICAgICAgYmUgY2hhbmdlZCBmb3Igc2VjdXJpdHkgcmVhc29ucyBvciBjYW4gbm90IGJlIGNoYW5nZWQgZHVlIHRvCiAgICAgICAgICAgIGxhY2sgb2Ygcm9vdCBhY2Nlc3MuICBPbiB0aGlzIHN5c3RlbSBhIHNoYWRvdyBkaXJlY3RvcnkKICAgICAgICAgICAgbWlnaHQgYmUgc2V0IHVwIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHNjcmVlbj4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jZCAvPC91c2VyaW5wdXQ+CiAgPHByb21wdD4vPjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bWtkaXIgY19zaGFkb3c8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pi8+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jZCBjX3NoYWRvdzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2Nfc2hhZG93PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bG4gLXMgL2NfLyogLjwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2Nfc2hhZG93PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+cm0gd2luZG93cyBBbkFwcDwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2Nfc2hhZG93PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Y3AgLVIgL2NfL3t3aW5kb3dzLEFuQXBwfSAuPC91c2VyaW5wdXQ+CiAgPHByb21wdD4vY19zaGFkb3c+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jaG1vZCAtUiA3Nzcgd2luZG93cyBBbkFwcDwvdXNlcmlucHV0Pgo8cHJvbXB0Pi9jX3NoYWRvdz48L3Byb21wdD48dXNlcmlucHV0PnBlcmwgLXAgLWkgLWUgJ3N8L2MkfC9jX3NoYWRvd3xnJyB+Ly53aW5lL2NvbmZpZzwvdXNlcmlucHV0PgogICAgICAgICAgPC9zY3JlZW4+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBhYm92ZSBnaXZlcyBldmVyeW9uZSBjb21wbGV0ZSByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8KICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IGFuZAogICAgICAgICAgPGZpbGVuYW1lPkFuQXBwPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgd2hpbGUgb25seSByb290IGhhcwogICAgICAgICAgd3JpdGUgYWNjZXNzIHRvIGFsbCBvdGhlciBkaXJlY3Rvcmllcy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctZHJpdmUtY2Ryb20tbGFiZWxzIj4KICAgICAgPHNlY3QyaW5mbz4KICAgICAgICA8YXV0aG9yZ3JvdXA+CiAgICAgICAgICA8YXV0aG9yPgogICAgICAgICAgICA8Zmlyc3RuYW1lPlBldHI8L2ZpcnN0bmFtZT4KICAgICAgICAgICAgPHN1cm5hbWU+VG9tYXNlazwvc3VybmFtZT4KICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgogICAgICAJPGFkZHJlc3M+PGVtYWlsPiZlbWFpbC1wZXRyLXRvbWFzZWs7PC9lbWFpbD48L2FkZHJlc3M+CiAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CiAgICAgICAgICAgIDxjb250cmliPk5vdiAxNCAxOTk5PC9jb250cmliPgogICAgICAgICAgPC9hdXRob3I+CiAgICAgICAgICA8YXV0aG9yPgogICAgICAgICAgICA8Zmlyc3RuYW1lPkFuZHJlYXM8L2ZpcnN0bmFtZT4KICAgICAgICAgICAgPHN1cm5hbWU+TW9ocjwvc3VybmFtZT4KICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgogICAgICAJPGFkZHJlc3M+PGVtYWlsPiZlbWFpbC1hbmRyZWFzLW1vaHI7PC9lbWFpbD48L2FkZHJlc3M+CiAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CiAgICAgICAgICAgIDxjb250cmliPkphbiAyNSAyMDAwPC9jb250cmliPgogICAgICAgICAgPC9hdXRob3I+CiAgICAgICAgPC9hdXRob3Jncm91cD4KICAgICAgPC9zZWN0MmluZm8+CgogICAgICA8dGl0bGU+RHJpdmUgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVyczwvdGl0bGU+CiAgICAgIDxwYXJhPgogICAgICAgIFdyaXR0ZW4gYnkgJm5hbWUtcGV0ci10b21hc2VrOyA8ZW1haWw+JmVtYWlsLXBldHItdG9tYXNlazs8L2VtYWlsPgogICAgICAgIE5vdiAxNCAxOTk5CiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgQ2hhbmdlcyBieSAmbmFtZS1hbmRyZWFzLW1vaHI7IDxlbWFpbD4mZW1haWwtYW5kcmVhcy1tb2hyOzwvZW1haWw+CiAgICAgICAgSmFuIDI1IDIwMDAKICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9jZHJvbS1sYWJlbHM8L2ZpbGVuYW1lPikKICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBVbnRpbCBub3csIHlvdXIgb25seSBwb3NzaWJpbGl0eSBvZiBzcGVjaWZ5aW5nIGRyaXZlIHZvbHVtZQogICAgICAgIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMgd2FzIHRvIHNldCB0aGVtIG1hbnVhbGx5IGluIHRoZSB3aW5lCiAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLiBCeSBub3csIHdpbmUgY2FuIHJlYWQgdGhlbSBkaXJlY3RseSBmcm9tIHRoZQogICAgICAgIGRldmljZSBhcyB3ZWxsLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIG1hbnkgV2luIDl4IGdhbWVzIG9yCiAgICAgICAgZm9yIHNldHVwIHByb2dyYW1zIGRpc3RyaWJ1dGVkIG9uIENELVJPTXMgdGhhdCBjaGVjayBmb3IKICAgICAgICB2b2x1bWUgbGFiZWwuCiAgICAgIDwvcGFyYT4KCiAgICAgIDxzZWN0Mz4KICAgICAgICA8dGl0bGU+V2hhdCdzIFN1cHBvcnRlZD88L3RpdGxlPgoKICAgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0iYWxsIj4KICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgCTxyb3c+CiAgICAgIAkgIDxlbnRyeT5GaWxlIFN5c3RlbTwvZW50cnk+CiAgICAgIAkgIDxlbnRyeT5UeXBlczwvZW50cnk+CiAgICAgIAkgIDxlbnRyeT5Db21tZW50PC9lbnRyeT4KICAgICAgCTwvcm93PgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHk+CiAgICAgIAk8cm93PgogICAgICAJICA8ZW50cnk+RkFUIHN5c3RlbXM8L2VudHJ5PgogICAgICAJICA8ZW50cnk+aGQsIGZsb3BweTwvZW50cnk+CiAgICAgIAkgIDxlbnRyeT5yZWFkcyBsYWJlbHMgYW5kIHNlcmlhbCBudW1iZXJzPC9lbnRyeT4KICAgICAgCTwvcm93PgogICAgICAJPHJvdz4KICAgICAgCSAgPGVudHJ5PklTTzk2NjA8L2VudHJ5PgogICAgICAJICA8ZW50cnk+Y2Ryb208L2VudHJ5PgogICAgICAJICA8ZW50cnk+cmVhZHMgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycyAobm90IG1peGVkLW1vZGUgQ0RzIHlldCEpPC9lbnRyeT4KICAgICAgCTwvcm93PgogICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgPC90Z3JvdXA+CiAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgoKICAgICAgPC9zZWN0Mz4KCiAgICAgIDxzZWN0Mz4KICAgICAgICA8dGl0bGU+SG93IFRvIFNldCBVcD88L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgUmVhZGluZyBsYWJlbHMgYW5kIHNlcmlhbCBudW1iZXJzIGp1c3Qgd29ya3MgYXV0b21hZ2ljYWxseQogICAgICAgICAgaWYgeW91IHNwZWNpZnkgYSA8bGl0ZXJhbD4iRGV2aWNlIiA9PC9saXRlcmFsPiBsaW5lIGluIHRoZQogICAgICAgICAgW0RyaXZlIHhdIHNlY3Rpb24gaW4geW91ciA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPi4KICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZGV2aWNlIGhhcyB0byBleGlzdCBhbmQgbXVzdCBiZSBhY2Nlc3NpYmxlIGJ5IHRoZSB1c2VyCiAgICAgICAgICBydW5uaW5nIFdpbmUgaWYgeW91IGRvIHRoaXMsIHRob3VnaC4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBJZiB5b3UgZG9uJ3Qgd2FudCB0byByZWFkIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMgZGlyZWN0bHkgZnJvbQogICAgICAgICAgdGhlIGRldmljZSwgdGhlbiB5b3Ugc2hvdWxkIGdpdmUgZml4ZWQKICAgICAgICAgIDxsaXRlcmFsPiJMYWJlbCIgPTwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+IlNlcmlhbCIgPTwvbGl0ZXJhbD4KICAgICAgICAgIGVudHJpZXMgaW4gPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4sIGFzIFdpbmUgcmV0dXJucwogICAgICAgICAgdGhlc2UgZW50cmllcyBpbnN0ZWFkIGlmIG5vIGRldmljZSBpcyBnaXZlbi4gSWYgdGhleSBkb24ndAogICAgICAgICAgZXhpc3QsIHRoZW4gV2luZSB3aWxsIHJldHVybiBkZWZhdWx0IHZhbHVlcyAobGFiZWwKICAgICAgICAgIDxsaXRlcmFsPkRyaXZlIFg8L2xpdGVyYWw+IGFuZCBzZXJpYWwKICAgICAgICAgIDxsaXRlcmFsPjEyMzQ1Njc4PC9saXRlcmFsPikuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgeW91IHdhbnQgdG8gZ2l2ZSBhIDxsaXRlcmFsPiJEZXZpY2UiID08L2xpdGVyYWw+IGVudHJ5CiAgICAgICAgICA8ZW1waGFzaXM+b25seTwvZW1waGFzaXM+IGZvciBkcml2ZSByYXcgc2VjdG9yIGFjY2Vzc2VzLAogICAgICAgIGJ1dCBub3QgZm9yIHJlYWRpbmcgdGhlIHZvbHVtZSBpbmZvIGZyb20gdGhlIGRldmljZSAoaS5lLiB5b3Ugd2FudAogICAgICAgIGEgPGVtcGhhc2lzPmZpeGVkPC9lbXBoYXNpcz4sIHByZWNvbmZpZ3VyZWQgbGFiZWwpLCB5b3UgbmVlZAogICAgICAgICAgdG8gc3BlY2lmeSA8bGl0ZXJhbD4iUmVhZFZvbEluZm8iID0gIjAiPC9saXRlcmFsPiB0byB0ZWxsIFdpbmUKICAgICAgICAgIHRvIHNraXAgdGhlIHZvbHVtZSByZWFkaW5nLgogICAgICAgIDwvcGFyYT4KICAgICAgPC9zZWN0Mz4KCiAgICAgIDxzZWN0Mz4KICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSGVyZSdzIGEgc2ltcGxlIGV4YW1wbGUgb2YgQ0QtUk9NIGFuZCBmbG9wcHk7IGxhYmVscyB3aWxsIGJlCiAgICAgICAgICByZWFkIGZyb20gdGhlIGRldmljZSBvbiBib3RoIENELVJPTSBhbmQgZmxvcHB5OyBzZXJpYWwKICAgICAgICAgIG51bWJlcnMgb24gZmxvcHB5IG9ubHk6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxzY3JlZW4+CiAgICAgIFtEcml2ZSBBXQogICAgICAiUGF0aCIgPSAiL21udC9mbG9wcHkiCiAgICAgICJUeXBlIiA9ICJmbG9wcHkiCiAgICAgICJEZXZpY2UiID0gIi9kZXYvZmQwIgogICAgICAiRmlsZXN5c3RlbSIgPSAibXNkb3MiCgogICAgICBbRHJpdmUgUl0KICAgICAgIlBhdGgiID0gIi9tbnQvY2Ryb20iCiAgICAgICJUeXBlIiA9ICJjZHJvbSIKICAgICAgIkRldmljZSIgPSAiL2Rldi9oZGExIgogICAgICAiRmlsZXN5c3RlbSIgPSAid2luOTUiCiAgICAgICAgPC9zY3JlZW4+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSBDRC1ST00gbGFiZWw6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxzY3JlZW4+CiAgICAgIFtEcml2ZSBKXQogICAgICAiUGF0aCIgPSAiL21udC9jZHJvbSIKICAgICAgIlR5cGUiID0gImNkcm9tIgogICAgICAiTGFiZWwiID0gIlgyMzRHQ0RTRSIKICAgICAgOyBub3RlIHRoYXQgdGhlIGRldmljZSBpc24ndCByZWFsbHkgbmVlZGVkIGhlcmUgYXMgd2UgaGF2ZSBhIGZpeGVkIGxhYmVsCiAgICAgICJEZXZpY2UiID0gIi9kZXYvY2Ryb20iCiAgICAgICJGaWxlc3lzdGVtIiA9ICJtc2RvcyIKICAgICAgICA8L3NjcmVlbj4KICAgICAgPC9zZWN0Mz4KCiAgICAgIDxzZWN0Mz4KICAgICAgICA8dGl0bGU+VG9kbyAvIE9wZW4gSXNzdWVzPC90aXRsZT4KICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgCVRoZSBDRC1ST00gbGFiZWwgY2FuIGJlIHJlYWQgb25seSBpZiB0aGUgZGF0YSB0cmFjayBvZgogICAgICAJdGhlIGRpc2sgcmVzaWRlcyBpbiB0aGUgZmlyc3QgdHJhY2sgYW5kIHRoZSBjZHJvbSBpcwogICAgICAJaXNvOTY2MC4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgCUJldHRlciBjaGVja2luZyBmb3IgRkFUIHN1cGVyYmxvY2sgKGl0IG5vdyBjaGVja3Mgb25seQogICAgICAJb25lIGJ5dGUpLiA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgCVN1cHBvcnQgZm9yIGxhYmVscy9zZXJpYWwgbnVtcyBXUklUSU5HLgogICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAJQ2FuIHRoZSBsYWJlbCBiZSBsb25nZXIgdGhhbiAxMSBjaGFycz8gKGlzbzk2NjAgaGFzIDMyCiAgICAgIAljaGFycykuCiAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgIAlXaGF0IGFib3V0IHJlYWRpbmcgZXh0MiB2b2x1bWUgbGFiZWw/IC4uLi4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICA8L3NlY3QzPgogICAgPC9zZWN0Mj4KICA8L3NlY3QxPgoKICAmcmVnaXN0cnk7Cgo8c2VjdDEgaWQ9ImNvbmZpZy1kbGwiPgo8dGl0bGU+RExMIGNvbmZpZ3VyYXRpb248L3RpdGxlPgoKPHNlY3QyPgo8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KPHBhcmE+CiAgSWYgeW91ciBwcm9ncmFtcyBkb24ndCB3b3JrIGFzIGV4cGVjdGVkLCB0aGVuIGl0J3Mgb2Z0ZW4gYmVjYXVzZSBvbmUKICBETEwgb3IgYW5vdGhlciBpcyBmYWlsaW5nLiBUaGlzIGNhbiBvZnRlbiBiZSByZXNvbHZlZCBieSBjaGFuZ2luZwogIGNlcnRhaW4gRExMcyBmcm9tIFdpbmUgYnVpbHQtaW4gdG8gbmF0aXZlIFdpbmRvd3MgRExMIGZpbGUgYW5kIHZpY2UKICB2ZXJzYS4KPC9wYXJhPgo8cGFyYT4KICBBIHZlcnkgdXNlZnVsIGhlbHAgdG8gZmluZCBvdXQgd2hpY2ggRExMcyBhcmUgbG9hZGVkIGFzIGJ1aWx0LWluIGFuZAogIHdoaWNoIGFyZSBsb2FkZWQgYXMgbmF0aXZlIFdpbmRvd3MgZmlsZSBjYW4gYmUgdGhlIGRlYnVnIGNoYW5uZWwKICBsb2FkZGxsLCBhY3RpdmF0ZWQgdmlhIHRoZSBXaW5lIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIKICA8Y29tbWFuZD4tLWRlYnVnbXNnICtsb2FkZGxsPC9jb21tYW5kPi4KPC9wYXJhPgo8L3NlY3QyPgoKPHNlY3QyPgo8IS0tIEZJWE1FIGludHJvISEhIC0tPgo8dGl0bGU+SW50cm9kdWN0aW9uIFRvIERMTCBTZWN0aW9uczwvdGl0bGU+CjxwYXJhPgogIFRoZXJlIGFyZSBhIGZldyB0aGluZ3MgeW91IHdpbGwgbmVlZCB0byBrbm93IGJlZm9yZQogIGNvbmZpZ3VyaW5nIHRoZSBETEwgc2VjdGlvbnMgaW4geW91ciB3aW5lIGNvbmZpZ3VyYXRpb24KICBmaWxlLgo8L3BhcmE+CjxzZWN0Mz4KICA8dGl0bGU+V2luZG93cyBETEwgUGFpcnM8L3RpdGxlPgogIDxwYXJhPgogICAgTW9zdCB3aW5kb3dzIERMTCdzIGhhdmUgYSB3aW4xNiAoV2luZG93cyAzLngpIGFuZCB3aW4zMgogICAgKFdpbmRvd3MgOXgvTlQpIGZvcm0uICBUaGUgY29tYmluYXRpb24gb2YgdGhlIHdpbjE2IGFuZAogICAgd2luMzIgRExMIHZlcnNpb25zIGFyZSBjYWxsZWQgdGhlICJETEwgcGFpciIuIFRoaXMgaXMgYQogICAgbGlzdCBvZiB0aGUgbW9zdCBjb21tb24gcGFpcnM6CiAgPC9wYXJhPgoKICA8aW5mb3JtYWx0YWJsZT4KICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgIDx0aGVhZD4KCTxyb3c+CgkgIDxlbnRyeT5XaW4xNjwvZW50cnk+CgkgIDxlbnRyeT5XaW4zMjwvZW50cnk+CgkgIDxlbnRyeT4KCSAgICBOYXRpdmUKCSAgICA8Zm9vdG5vdGU+CgkgICAgICA8cGFyYT4KCQlJcyBpdCBwb3NzaWJsZSB0byB1c2UgbmF0aXZlIERMTCB3aXRoIHdpbmU/CgkJKFNlZSBuZXh0IHNlY3Rpb24pCgkgICAgICA8L3BhcmE+CgkgICAgPC9mb290bm90ZT4KCSAgPC9lbnRyeT4KCTwvcm93PgogICAgICA8L3RoZWFkPgogICAgICA8dGJvZHk+Cgk8cm93PgoJICA8ZW50cnk+S0VSTkVMPC9lbnRyeT4KCSAgPGVudHJ5PktFUk5FTDMyPC9lbnRyeT4KCSAgPGVudHJ5Pk5vITwvZW50cnk+Cgk8L3Jvdz4KCTxyb3c+CgkgIDxlbnRyeT5VU0VSPC9lbnRyeT4KCSAgPGVudHJ5PlVTRVIzMjwvZW50cnk+CgkgIDxlbnRyeT5ObyE8L2VudHJ5PgoJPC9yb3c+Cgk8cm93PgoJICA8ZW50cnk+U0hFTEw8L2VudHJ5PgoJICA8ZW50cnk+U0hFTEwzMjwvZW50cnk+CgkgIDxlbnRyeT5ZZXM8L2VudHJ5PgoJPC9yb3c+Cgk8cm93PgoJICA8ZW50cnk+R0RJPC9lbnRyeT4KCSAgPGVudHJ5PkdESTMyPC9lbnRyeT4KCSAgPGVudHJ5Pk5vITwvZW50cnk+Cgk8L3Jvdz4KCTxyb3c+CgkgIDxlbnRyeT5DT01NRExHPC9lbnRyeT4KCSAgPGVudHJ5PkNPTURMRzMyPC9lbnRyeT4KCSAgPGVudHJ5PlllczwvZW50cnk+Cgk8L3Jvdz4KCTxyb3c+CgkgIDxlbnRyeT5WRVI8L2VudHJ5PgoJICA8ZW50cnk+VkVSU0lPTjwvZW50cnk+CgkgIDxlbnRyeT5ZZXM8L2VudHJ5PgoJPC9yb3c+CiAgICAgIDwvdGJvZHk+CiAgICA8L3Rncm91cD4KICA8L2luZm9ybWFsdGFibGU+Cjwvc2VjdDM+Cgo8c2VjdDM+CiAgPHRpdGxlPkRpZmZlcmVudCBGb3JtcyBPZiBETEwnczwvdGl0bGU+CiAgPHBhcmE+CiAgICBUaGVyZSBhcmUgYSBmZXcgZGlmZmVyZW50IGZvcm1zIG9mIERMTCdzIHdpbmUgY2FuIGxvYWQ6CiAgICA8dmFyaWFibGVsaXN0PgogICAgICA8dmFybGlzdGVudHJ5PgoJPHRlcm0+bmF0aXZlPC90ZXJtPgoJPGxpc3RpdGVtPjxwYXJhPgoJICAgIFRoZSBETEwncyB0aGF0IGFyZSBpbmNsdWRlZCB3aXRoIHdpbmRvd3MuIE1hbnkKCSAgICB3aW5kb3dzIERMTCdzIGNhbiBiZSBsb2FkZWQgaW4gdGhlaXIgbmF0aXZlCgkgICAgZm9ybS4gTWFueSB0aW1lcyB0aGVzZSBuYXRpdmUgdmVyc2lvbnMgd29yawoJICAgIGJldHRlciB0aGFuIHRoZWlyIG5vbi1NaWNyb3NvZnQgZXF1aXZhbGVudCAtLQoJICAgIG90aGVyIHRpbWVzIHRoZXkgZG9uJ3QuCgkgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPHZhcmxpc3RlbnRyeT4KCTx0ZXJtPmJ1aWx0aW48L3Rlcm0+Cgk8bGlzdGl0ZW0+PHBhcmE+CgkgICAgVGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgRExMIGxvYWRpbmcuIFRoaXMgaXMKCSAgICB3aGF0IHlvdSB3aWxsIHVzZSBpZiB0aGUgRExMIGlzIHRvbyBzeXN0ZW0tc3BlY2lmaWMKCSAgICAgIG9yIGVycm9yLXByb25lIGluIG5hdGl2ZSBmb3JtIChLRVJORUwgZm9yIGV4YW1wbGUpLAoJICAgICAgeW91IGRvbid0IGhhdmUgdGhlIG5hdGl2ZSBETEwsIG9yIHlvdSBqdXN0IHdhbnQgdG8gYmUKCSAgICBNaWNyb3NvZnQtZnJlZS4KCSAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8dmFybGlzdGVudHJ5PgoJPHRlcm0+c288L3Rlcm0+Cgk8bGlzdGl0ZW0+PHBhcmE+CgkgICAgTmF0aXZlIEVMRiBsaWJyYXJpZXMuIEhhcyBiZWVuIGRlcHJlY2F0ZWQsIGlnbm9yZWQuCgkgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPHZhcmxpc3RlbnRyeT4KCTx0ZXJtPmVsZmRsbDwvdGVybT4KCTxsaXN0aXRlbT48cGFyYT4KCSAgICBFTEYgZW5jYXBzdWxhdGVkIHdpbmRvd3MgRExMJ3MuCgkgICAgICBObyBsb25nZXIgdXNlZCwgaWdub3JlZC4KCSAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgPC92YXJpYWJsZWxpc3Q+CiAgPC9wYXJhPgo8L3NlY3QzPgo8L3NlY3QyPgoKPHNlY3QyIGlkPSJjb25maWctZGxsLW92ZXJyaWRlcyI+Cjx0aXRsZT5ETEwgT3ZlcnJpZGVzPC90aXRsZT4KCjxwYXJhPgogIFdyaXR0ZW4gYnkgJm5hbWUtb3ZlLWthYXZlbjsgPGVtYWlsPiZlbWFpbC1vdmUta2FhdmVuOzwvZW1haWw+CjwvcGFyYT4KPHBhcmE+CiAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vZGxsLW92ZXJyaWRlczwvZmlsZW5hbWU+KQo8L3BhcmE+Cgo8cGFyYT4KICBUaGUgd2luZSBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlcyBbRGxsRGVmYXVsdHNdCiAgYW5kIFtEbGxPdmVycmlkZXNdIGFyZSB0aGUgc3ViamVjdCBvZiBzb21lIGNvbmZ1c2lvbi4gVGhlCiAgb3ZlcmFsbCBwdXJwb3NlIG9mIG1vc3Qgb2YgdGhlc2UgZGlyZWN0aXZlcyBhcmUgY2xlYXIgZW5vdWdoLAogIHRob3VnaCAtIGdpdmVuIGEgY2hvaWNlLCBzaG91bGQgV2luZSB1c2UgaXRzIG93biBidWlsdC1pbgogIERMTHMsIG9yIHNob3VsZCBpdCB1c2UgPGZpbGVuYW1lPi5ETEw8L2ZpbGVuYW1lPiBmaWxlcyBmb3VuZAogIGluIGFuIGV4aXN0aW5nIFdpbmRvd3MgaW5zdGFsbGF0aW9uPyBUaGlzIGRvY3VtZW50IGV4cGxhaW5zCiAgaG93IHRoaXMgZmVhdHVyZSB3b3Jrcy4KPC9wYXJhPgoKPHNlY3QzPgogIDx0aXRsZT5ETEwgdHlwZXM8L3RpdGxlPgogIDx2YXJpYWJsZWxpc3Q+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5uYXRpdmU8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIEEgIm5hdGl2ZSIgRExMIGlzIGEgPGZpbGVuYW1lPi5ETEw8L2ZpbGVuYW1lPiBmaWxlCgkgIHdyaXR0ZW4gZm9yIHRoZSByZWFsIE1pY3Jvc29mdCBXaW5kb3dzLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5idWlsdGluPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBBICJidWlsdC1pbiIgRExMIGlzIGEgV2luZSBETEwuIFRoZXNlIGNhbiBlaXRoZXIgYmUgYQoJICBwYXJ0IG9mIDxmaWxlbmFtZT5saWJ3aW5lLnNvPC9maWxlbmFtZT4sIG9yIG1vcmUKCSAgcmVjZW50bHksIGluIGEgc3BlY2lhbCA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZQoJICB0aGF0IFdpbmUgaXMgYWJsZSB0byBsb2FkIG9uIGRlbWFuZC4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogIDwvdmFyaWFibGVsaXN0Pgo8L3NlY3QzPgoKPHNlY3QzPgogIDx0aXRsZT5UaGUgW0RsbERlZmF1bHRzXSBzZWN0aW9uPC90aXRsZT4KICA8dmFyaWFibGVsaXN0PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+RGVmYXVsdExvYWRPcmRlcjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgVGhpcyBzcGVjaWZpZXMgaW4gd2hhdCBvcmRlciBXaW5lIHNob3VsZCBzZWFyY2ggZm9yCgkgIGF2YWlsYWJsZSBETEwgdHlwZXMsIGlmIHRoZSBETEwgaW4gcXVlc3Rpb24gd2FzIG5vdAoJICBmb3VuZCBpbiB0aGUgW0RsbE92ZXJyaWRlc10gc2VjdGlvbi4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogIDwvdmFyaWFibGVsaXN0Pgo8L3NlY3QzPgoKPHNlY3QzPgogIDx0aXRsZT5UaGUgW0RsbFBhaXJzXSBzZWN0aW9uPC90aXRsZT4KICA8cGFyYT4KICAgIEF0IG9uZSB0aW1lLCB0aGVyZSB3YXMgYSBzZWN0aW9uIGNhbGxlZCBbRGxsUGFpcnNdIGluIHRoZQogICAgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUsIGJ1dCB0aGlzIGhhcyBiZWVuIG9ic29sZXRlZAogICAgYmVjYXVzZSB0aGUgcGFpcmluZyBpbmZvcm1hdGlvbiBoYXMgbm93IGJlZW4gZW1iZWRkZWQgaW50bwogICAgV2luZSBpdHNlbGYuIChUaGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gd2FzIG1lcmVseSB0byBiZQogICAgYWJsZSB0byBpc3N1ZSB3YXJuaW5ncyBpZiB0aGUgdXNlciBhdHRlbXB0ZWQgdG8gcGFpcgogICAgY29kZXBlbmRlbnQgMTYtYml0LzMyLWJpdCBETExzIG9mIGRpZmZlcmVudCB0eXBlcy4pIElmIHlvdQogICAgc3RpbGwgaGF2ZSB0aGlzIGluIHlvdXIgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4gb3IKICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiwgeW91IG1heSBzYWZlbHkgZGVsZXRlIGl0LgogIDwvcGFyYT4KPC9zZWN0Mz4KCjxzZWN0Mz4KICA8dGl0bGU+VGhlIFtEbGxPdmVycmlkZXNdIHNlY3Rpb248L3RpdGxlPgogIDxwYXJhPgogICAgVGhpcyBzZWN0aW9uIHNwZWNpZmllcyBob3cgeW91IHdhbnQgc3BlY2lmaWMgRExMcyB0byBiZQogICAgaGFuZGxlZCwgaW4gcGFydGljdWxhciB3aGV0aGVyIHlvdSB3YW50IHRvIHVzZSAibmF0aXZlIiBETExzCiAgICBvciBub3QsIGlmIHlvdSBoYXZlIHNvbWUgZnJvbSBhIHJlYWwgV2luZG93cyBjb25maWd1cmF0aW9uLgogICAgQmVjYXVzZSBidWlsdC1pbnMgZG8gbm90IG1peCBzZWFtbGVzc2x5IHdpdGggbmF0aXZlIERMTHMgeWV0LAogICAgY2VydGFpbiBETEwgZGVwZW5kZW5jaWVzIG1heSBiZSBwcm9ibGVtYXRpYywgYnV0IHdvcmthcm91bmRzCiAgICBleGlzdCBpbiBXaW5lIGZvciBtYW55IHBvcHVsYXIgRExMIGNvbmZpZ3VyYXRpb25zLiBBbHNvIHNlZQogICAgV1dOJ3MgWzE2XVN0YXR1cyBQYWdlIHRvIGZpZ3VyZSBvdXQgaG93IHdlbGwgeW91ciBmYXZvcml0ZQogICAgRExMIGlzIGltcGxlbWVudGVkIGluIFdpbmUuCiAgPC9wYXJhPgogIDxwYXJhPgogICAgSXQgaXMgb2YgY291cnNlIGFsc28gcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlc2Ugc2V0dGluZ3MgYnkKICAgIGV4cGxpY3RseSB1c2luZyBXaW5lJ3MgPHBhcmFtZXRlcj4tLWRsbDwvcGFyYW1ldGVyPgogICAgY29tbWFuZC1saW5lIG9wdGlvbiAoc2VlIHRoZSBtYW4gcGFnZSBmb3IgZGV0YWlscykuICBTb21lCiAgICBoaW50cyBmb3IgY2hvb3NpbmcgeW91ciBvcHRpbWFsIGNvbmZpZ3VyYXRpb24gKGxpc3RlZCBieQogICAgMTYvMzItYml0IERMTCBwYWlyKToKICA8L3BhcmE+CiAgPHZhcmlhYmxlbGlzdD4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPmtybmwzODYsIGtlcm5lbDMyPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBOYXRpdmUgdmVyc2lvbnMgb2YgdGhlc2Ugd2lsbCBuZXZlciB3b3JrLCBzbyBkb24ndCB0cnkuIExlYXZlCgkgIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5nZGksIGdkaTMyPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBHcmFwaGljcyBEZXZpY2UgSW50ZXJmYWNlLiBObyBlZmZvcnQgaGFzIGJlZW4gbWFkZSBhdCB0cnlpbmcgdG8KCSAgcnVuIG5hdGl2ZSBHREkuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT51c2VyLCB1c2VyMzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFdpbmRvdyBtYW5hZ2VtZW50IGFuZCBzdGFuZGFyZCBjb250cm9scy4gSXQgd2FzCgkgIHBvc3NpYmxlIHRvIHVzZSBXaW45NSdzIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KCSAgdmVyc2lvbnMgYXQgc29tZSBwb2ludCAoaWYgYWxsIG90aGVyIERMTHMgdGhhdCBkZXBlbmQKCSAgb24gaXQsIHN1Y2ggYXMgY29tY3RsMzIgYW5kIGNvbWRsZzMyLCB3ZXJlIGFsc28gcnVuCgkgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4pLiBIb3dldmVyLCB0aGlzIGlzIG5vIGxvbmdlcgoJICBwb3NzaWJsZSBhZnRlciB0aGUgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uLCBzbyBsZWF2ZQoJICBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+bnRkbGw8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIE5UIGtlcm5lbCBBUEkuIEFsdGhvdWdoIGJhZGx5IGRvY3VtZW50ZWQsIHRoZQoJICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24gb2YgdGhpcyB3aWxsIG5ldmVyCgkgIHdvcmsuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT53MzJza3JubDwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgV2luMzJzIChmb3IgV2luMy54KS4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KCSAgdmVyc2lvbiB3aWxsIHByb2JhYmx5IG5ldmVyIHdvcmsuIExlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT53b3czMjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgV2luMTYgc3VwcG9ydCBsaWJyYXJ5IGZvciBOVC4gVGhlCgkgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiB3aWxsIHByb2JhYmx5IG5ldmVyCgkgIHdvcmsuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5zeXN0ZW08L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFdpbjE2IGtlcm5lbCBzdHVmZi4gV2lsbCBuZXZlciB3b3JrCgkgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4uIExlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5kaXNwbGF5PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBEaXNwbGF5IGRyaXZlci4gRGVmaW5pdGVseSBsZWF2ZSBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+dG9vbGhlbHA8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFRvb2wgaGVscGVyIHJvdXRpbmVzLiBUaGlzIGlzIHJhcmVseSBhIHNvdXJjZSBvZiBwcm9ibGVtcy4KCSAgTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPnZlciwgdmVyc2lvbjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgVmVyc2lvbmluZy4gU2VsZG9tIHVzZWZ1bCB0byBtZXNzIHdpdGguCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPmFkdmFwaTMyPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBSZWdpc3RyeSBhbmQgc2VjdXJpdHkgZmVhdHVyZXMuIFRyeWluZyB0aGUKCSAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIG9mIHRoaXMgbWF5IG9yIG1heQoJICBub3Qgd29yay4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+Y29tbWRsZywgY29tZGxnMzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIENvbW1vbiBEaWFsb2dzLCBzdWNoIGFzIGNvbG9yIHBpY2tlciwgZm9udCBkaWFsb2csCgkgIHByaW50IGRpYWxvZywgb3Blbi9zYXZlIGRpYWxvZywgZXRjLiBJdCBpcyBzYWZlIHRvIHRyeQoJICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5jb21tY3RybCwgY29tY3RsMzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIENvbW1vbiBDb250cm9scy4gVGhpcyBpcyB0b29sYmFycywgc3RhdHVzIGJhcnMsIGxpc3QgY29udHJvbHMsCgkgIHRoZSB3b3Jrcy4gSXQgaXMgc2FmZSB0byB0cnkgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+c2hlbGwsIHNoZWxsMzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFNoZWxsIGludGVyZmFjZSAoZGVza3RvcCwgZmlsZXN5c3RlbSwgZXRjKS4gQmVpbmcgb25lIG9mIHRoZQoJICBtb3N0IHVuZG9jdW1lbnRlZCBwaWVjZXMgb2YgV2luZG93cywgeW91IG1heSBoYXZlIGx1Y2sgd2l0aCB0aGUKCSAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uLCBzaG91bGQgeW91IG5lZWQgaXQuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPndpbnNvY2ssIHdzb2NrMzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFdpbmRvd3MgU29ja2V0cy4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbgoJICB3aWxsIG5vdCB3b3JrIHVuZGVyIFdpbmUsIHNvIGxlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5pY21wPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBJQ01QIHJvdXRpbmVzIGZvciB3c29jazMyLiBBcyB3aXRoIHdzb2NrMzIsIGxlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5tcHI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24gbWF5IG5vdCB3b3JrIGR1ZQoJICB0byB0aHVua2luZyBpc3N1ZXMuIExlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5semV4cGFuZCwgbHozMjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgTGVtcGVsLVppdiBkZWNvbXByZXNzaW9uLiBXaW5lJ3MKCSAgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4gdmVyc2lvbiBvdWdodCB0byB3b3JrIGZpbmUuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPndpbmFzcGksIHduYXNwaTMyPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBBZHZhbmNlZCBTQ1NJIFBlcmlwaGVyYWwgSW50ZXJmYWNlLiBUaGUKCSAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIHdpbGwgcHJvYmFibHkgbmV2ZXIKCSAgd29yay4gTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPmNydGRsbDwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgQyBSdW50aW1lIGxpYnJhcnkuIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+CgkgIHZlcnNpb24gd2lsbCBlYXNpbHkgd29yayBiZXR0ZXIgdGhhbiBXaW5lJ3Mgb24gdGhpcwoJICBvbmUuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPndpbnNwb29sLmRydjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgUHJpbnRlciBzcG9vbGVyLiBZb3UgYXJlIG5vdCBsaWtlbHkgdG8gaGF2ZSBtb3JlIGx1Y2sKCSAgd2l0aCB0aGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5kZHJhdzwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgRGlyZWN0RHJhdy9EaXJlY3QzRC4gU2luY2UgV2luZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlCgkgIERpcmVjdFggSEFMLCB0aGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uCgkgIHdpbGwgbm90IHdvcmsgYXQgdGhpcyB0aW1lLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5kaW5wdXQ8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIERpcmVjdElucHV0LiBSdW5uaW5nIHRoaXMgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPgoJICBtYXkgb3IgbWF5IG5vdCB3b3JrLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5kc291bmQ8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIERpcmVjdFNvdW5kLiBJdCBtYXkgYmUgcG9zc2libGUgdG8gcnVuIHRoaXMKCSAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiwgYnV0IGRvbid0IGNvdW50IG9uIGl0LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5kcGxheS9kcGxheXg8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIERpcmVjdFBsYXkuIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24KCSAgb3VnaHQgdG8gd29yayBiZXN0IG9uIHRoaXMsIGlmIGF0IGFsbC4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+bW1zeXN0ZW0sIHdpbm1tPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBNdWx0aW1lZGlhIHN5c3RlbS4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KCSAgdmVyc2lvbiBpcyBub3QgbGlrZWx5IHRvIHdvcmsuIExlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5tc2FjbSwgbXNhY20zMjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgQXVkaW8gQ29tcHJlc3Npb24gTWFuYWdlci4gVGhlCgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+IHZlcnNpb24gd29ya3MgYmVzdCwgaWYgeW91CgkgIHNldCBtc2FjbS5kcnYgdG8gdGhlIHNhbWUuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPm1zdmlkZW8sIG1zdmZ3MzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFZpZGVvIGZvciBXaW5kb3dzLiBJdCBpcyBzYWZlIChhbmQgcmVjb21tZW5kZWQpIHRvIHRyeQoJICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5tY2ljZGEuZHJ2PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBDRCBBdWRpbyBNQ0kgZHJpdmVyLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5tY2lzZXEuZHJ2PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBNSURJIFNlcXVlbmNlciBNQ0kgZHJpdmVyICg8ZmlsZW5hbWU+Lk1JRDwvZmlsZW5hbWU+CgkgIHBsYXliYWNrKS4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+bWNpd2F2ZS5kcnY8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFdhdmUgYXVkaW8gTUNJIGRyaXZlciAoPGZpbGVuYW1lPi5XQVY8L2ZpbGVuYW1lPiBwbGF5YmFjaykuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPm1jaWF2aS5kcnY8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIEFWSSBNQ0kgZHJpdmVyICg8ZmlsZW5hbWU+LkFWSTwvZmlsZW5hbWU+IHZpZGVvCgkgIHBsYXliYWNrKS4gQmVzdCB0byB1c2UgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+bWNpYW5pbS5kcnY8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIEFuaW1hdGlvbiBNQ0kgZHJpdmVyLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5tc2FjbS5kcnY8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIEF1ZGlvIENvbXByZXNzaW9uIE1hbmFnZXIuIFNldCB0byBzYW1lIGFzIG1zYWNtMzIuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPm1pZGltYXAuZHJ2PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBNSURJIE1hcHBlci4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+d3Byb2NzPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBUaGlzIGlzIGEgcHNldWRvLURMTCB1c2VkIGJ5IFdpbmUgZm9yIHRodW5raW5nCgkgIHB1cnBvc2VzLiBBIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBvZiB0aGlzCgkgIGRvZXNuJ3QgZXhpc3QuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICA8L3ZhcmlhYmxlbGlzdD4KPC9zZWN0Mz4KPC9zZWN0Mj4KCjxzZWN0MiBpZD0iY29uZmlnLXN5c3RlbS1kbGxzIj4KPHRpdGxlPlN5c3RlbSBETExzPC90aXRsZT4KPHBhcmE+CiAgVGhlIFdpbmUgdGVhbSBoYXMgZGV0ZXJtaW5lZCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSB0byBjcmVhdGUKICBmYWtlIERMTCBmaWxlcyB0byB0cmljayBtYW55IHByb2dyYW1zIHRoYXQgY2hlY2sgZm9yCiAgZmlsZSBleGlzdGVuY2UgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIGZlYXR1cmUKICAoc3VjaCBhcyBXaW5zb2NrIGFuZCBpdHMgVENQL0lQIG5ldHdvcmtpbmcpIGlzIGF2YWlsYWJsZS4gSWYKICB0aGlzIGlzIGEgcHJvYmxlbSBmb3IgeW91LCB5b3UgY2FuIGNyZWF0ZSBlbXB0eSBmaWxlcyBpbiB0aGUKICBjb25maWd1cmVkIDxmaWxlbmFtZT5jOlx3aW5kb3dzXHN5c3RlbTwvZmlsZW5hbWU+IGRpcmVjdG9yeQogIHRvIG1ha2UgdGhlIHByb2dyYW0gdGhpbmsgaXQncyB0aGVyZSwgYW5kIFdpbmUncyBidWlsdC1pbiBETEwKICB3aWxsIGJlIGxvYWRlZCB3aGVuIHRoZSBwcm9ncmFtIGFjdHVhbGx5IGFza3MgZm9yIGl0LgogIChVbmZvcnR1bmF0ZWx5LCA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBkb2VzCiAgbm90IGNyZWF0ZSBzdWNoIGVtcHR5IGZpbGVzIGl0c2VsZi4pCjwvcGFyYT4KPHBhcmE+CiAgQXBwbGljYXRpb25zIHNvbWV0aW1lcyBhbHNvIHRyeSB0byBpbnNwZWN0IHRoZSB2ZXJzaW9uCiAgcmVzb3VyY2VzIGZyb20gdGhlIHBoeXNpY2FsIGZpbGVzIChmb3IgZXhhbXBsZSwgdG8gZGV0ZXJtaW5lCiAgdGhlIERpcmVjdFggdmVyc2lvbikuIEVtcHR5IGZpbGVzIHdpbGwgbm90IGRvIGluIHRoaXMgY2FzZSwKICBpdCBpcyByYXRoZXIgbmVjZXNzYXJ5IHRvIGluc3RhbGwgZmlsZXMgd2l0aCBjb21wbGV0ZQogIHZlcnNpb24gcmVzb3VyY2VzLiBUaGlzIHByb2JsZW0gaXMgY3VycmVudGx5IGJlaW5nIHdvcmtlZAogIG9uLiBJbiB0aGUgbWVhbnRpbWUsIHlvdSBtYXkgc3RpbGwgbmVlZCB0byBncmFiIHNvbWUgcmVhbAogIERMTCBmaWxlcyB0byBmb29sIHRoZXNlIGFwcHMgd2l0aC4KPC9wYXJhPgo8cGFyYT4KICBBbmQgdGhlcmUgYXJlIG9mIGNvdXJzZSBETExzIHRoYXQgd2luZSBkb2VzIG5vdCBjdXJyZW50bHkKICBpbXBsZW1lbnQgdmVyeSB3ZWxsIChvciBhdCBhbGwpLiBJZiB5b3UgZG8gbm90IGhhdmUgYSByZWFsCiAgV2luZG93cyB5b3UgY2FuIHN0ZWFsIG5lY2Vzc2FyeSBETExzIGZyb20sIHlvdSBjYW4gYWx3YXlzCiAgZ2V0IHNvbWUgZnJvbSBvbmUgb2YgdGhlIFdpbmRvd3MgRExMIGFyY2hpdmUgc2l0ZXMKICB0aGF0IGNhbiBiZSBmb3VuZCB2aWEgaW50ZXJuZXQgc2VhcmNoIGVuZ2luZS4KICBQbGVhc2UgbWFrZSBzdXJlIHRvIG9iZXkgYW55IGxpY2Vuc2VzIG9uIHRoZSBETExzIHlvdSBmZXRjaC4uLgogIChzb21lIGFyZSByZWRpc3RyaWJ1dGFibGUsIHNvbWUgYXJlbid0KS4KPC9wYXJhPgo8L3NlY3QyPgoKPHNlY3QyIGlkPSJjb25maWctZGxsLW1pc3NpbmciPgo8dGl0bGU+TWlzc2luZyBETExzPC90aXRsZT4KCjxwYXJhPgogIFdyaXR0ZW4gYnkgJm5hbWUtYW5kcmVhcy1tb2hyOyA8ZW1haWw+JmVtYWlsLWFuZHJlYXMtbW9ocjs8L2VtYWlsPgo8L3BhcmE+Cgo8cGFyYT4KICBJbiBjYXNlIFdpbmUgY29tcGxhaW5zIGFib3V0IGEgbWlzc2luZyBETEwsIHlvdSBzaG91bGQgY2hlY2sgd2hldGhlcgogIHRoaXMgZmlsZSBpcyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBETEwgb3IgYSBjdXN0b20gRExMIGJlbG9uZ2luZwogIHRvIHlvdXIgcHJvZ3JhbSAoYnkgc2VhcmNoaW5nIGZvciBpdHMgbmFtZSBvbiB0aGUgaW50ZXJuZXQpLgogIElmIHlvdSBtYW5hZ2VkIHRvIGdldCBob2xkIG9mIHRoZSBETEwsIHRoZW4geW91IHNob3VsZCBtYWtlIHN1cmUKICB0aGF0IFdpbmUgaXMgYWJsZSB0byBmaW5kIGFuZCBsb2FkIGl0LgogIERMTHMgdXN1YWxseSBnZXQgbG9hZGVkIGFjY29yZGluZyB0byB0aGUgbWVjaGFuaXNtIG9mIHRoZQogIFNlYXJjaFBhdGgoKSBmdW5jdGlvbi4KICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGRpcmVjdG9yaWVzIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CgogIDxvcmRlcmVkbGlzdD4KICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CglUaGUgZGlyZWN0b3J5IHRoZSBwcm9ncmFtIHdhcyBzdGFydGVkIGZyb20uCiAgICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgoJVGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogICAgICA8L3BhcmE+CiAgICA8L2xpc3RpdGVtPgogICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KCVRoZSBXaW5kb3dzIHN5c3RlbSBkaXJlY3RvcnkuCiAgICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgoJVGhlIFdpbmRvd3MgZGlyZWN0b3J5LgogICAgICA8L3BhcmE+CiAgICA8L2xpc3RpdGVtPgogICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KCVRoZSBQQVRIIHZhcmlhYmxlIGRpcmVjdG9yaWVzLgogICAgICA8L3BhcmE+CiAgICA8L2xpc3RpdGVtPgogIDwvb3JkZXJlZGxpc3Q+CgogIEluIHNob3J0OiBlaXRoZXIgcHV0IHRoZSByZXF1aXJlZCBETEwgaW50byB5b3VyIHByb2dyYW0KICBkaXJlY3RvcnkgKG1pZ2h0IGJlIHVnbHkpLCBvciB1c3VhbGx5IHB1dCBpdCBpbnRvIHRoZSBXaW5kb3dzIHN5c3RlbQogIGRpcmVjdG9yeS4gSnVzdCBmaW5kIG91dCBpdHMgZGlyZWN0b3J5IGJ5IGhhdmluZyBhIGxvb2sgYXQgdGhlIFdpbmUKICBjb25maWd1cmF0aW9uIGZpbGUgdmFyaWFibGUgIlN5c3RlbSIgKHdoaWNoIGluZGljYXRlcyB0aGUgbG9jYXRpb24gb2YgdGhlCiAgV2luZG93cyBzeXN0ZW0gZGlyZWN0b3J5KSBhbmQgdGhlIGFzc29jaWF0ZWQgZHJpdmUgZW50cnkuCiAgTm90ZSB0aGF0IHlvdSBwcm9iYWJseSBzaG91bGRuJ3QgdXNlIE5ULWJhc2VkIG5hdGl2ZSBETExzLAogIHNpbmNlIFdpbmUncyBOVCBBUEkgc3VwcG9ydCBpcyBzb21ld2hhdCB3ZWFrZXIgdGhhbiBpdHMgV2luOXgKICBBUEkgc3VwcG9ydCAodGh1cyBsZWFkaW5nIHRvIGV2ZW4gd29yc2UgY29tcGF0aWJpbGl0eSB3aXRoIE5UIERMTHMKICB0aGFuIHdpdGggYSBuby13aW5kb3dzIHNldHVwISksIHNvIGJldHRlciB1c2UgV2luOXggbmF0aXZlIERMTHMKICBpbnN0ZWFkIG9yIG5vIG5hdGl2ZSBETExzIGF0IGFsbC4KPC9wYXJhPgo8L3NlY3QyPgoKPHNlY3QyIGlkPSJjb25maWctZGxsLXdpbmRvd3MiPgo8dGl0bGU+RmV0Y2hpbmcgbmF0aXZlIERMTHMgZnJvbSBhIFdpbmRvd3MgQ0Q8L3RpdGxlPgoKPHBhcmE+CiAgV3JpdHRlbiBieSAmbmFtZS1hbmRyZWFzLW1vaHI7IDxlbWFpbD4mZW1haWwtYW5kcmVhcy1tb2hyOzwvZW1haWw+CjwvcGFyYT4KCjxwYXJhPgpUaGUgTGludXggPGNvbW1hbmQ+Y2FiZXh0cmFjdDwvY29tbWFuZD4gdXRpbGl0eSBjYW4gYmUgdXNlZCB0bwpleHRyYWN0IG5hdGl2ZSBXaW5kb3dzIC5kbGwgZmlsZXMgZnJvbSAuY2FiIGZpbGVzIHRoYXQgYXJlIHRvIGJlCmZvdW5kIG9uIG1hbnkgV2luZG93cyBpbnN0YWxsYXRpb24gQ0RzLgo8L3BhcmE+Cjwvc2VjdDI+Cjwvc2VjdDE+Cgo8c2VjdDEgaWQ9ImNvbmZpZy1ncmFwaGljcy1kcml2ZXIiPgo8dGl0bGU+Q29uZmlndXJpbmcgdGhlIGdyYXBoaWNzIGRyaXZlciAoeDExZHJ2LCB0dHlkcnYgZXRjLik8L3RpdGxlPgoKPHBhcmE+CldpbmUgY3VycmVudGx5IHN1cHBvcnRzIHNldmVyYWwgZGlmZmVyZW50IGRpc3BsYXkgc3Vic3lzdGVtcwooZ3JhcGhpY3MgLyB0ZXh0KSB0aGF0IGFyZSBhdmFpbGFibGUgb24gdmFyaW91cyBvcGVyYXRpbmcKc3lzdGVtcyB0b2RheS4KRm9yIGVhY2ggb2YgdGhlc2UsIFdpbmUgaW1wbGVtZW50cyBpdHMgb3duIGludGVyZmFjaW5nIGRyaXZlci4KVGhpcyBzZWN0aW9uIGV4cGxhaW5zIGhvdyB0byBzZWxlY3Qgb25lIG9mIHRoZXNlIGRyaXZlcnMKYW5kIGhvdyB0byBmdXJ0aGVyIGNvbmZpZ3VyZSB0aGUgcmVzcGVjdGl2ZSBkcml2ZXIuCk9uY2UgeW91J3JlIGZpbmlzaGVkIHdpdGggdGhhdCwgeW91IGNhbiBjb25zaWRlciB5b3VyIFdpbmUgaW5zdGFsbGF0aW9uCnRvIGJlIGZpbmlzaGVkLgo8L3BhcmE+Cgo8cGFyYT4KVGhlIGRpc3BsYXkgZHJpdmVycyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgaW4gV2luZSBhcmU6CngxMWRydiwgd2hpY2ggaXMgdXNlZCBmb3IgaW50ZXJmYWNpbmcgdG8gWDExIGdyYXBoaWNzCih0aGUgb25lIHlvdSdsbCBtb3N0IGxpa2VseSB3YW50IHRvIHVzZSkgYW5kIHR0eWRydgoodXNlZCBmb3IgdGV4dCBtb2RlIGNvbnNvbGUgYXBwcyBtYWlubHkgdGhhdCBkb24ndCByZWFsbHkgbmVlZAphbnkgZ3JhcGhpY3Mgb3V0cHV0KS4KT25jZSB5b3UgaGF2ZSBkZWNpZGVkIHdoaWNoIGRpc3BsYXkgZHJpdmVyIHRvIHVzZSwgaXQgaXMgY2hvc2VuCndpdGggdGhlIDxsaXRlcmFsPkdyYXBoaWNzRHJpdmVyPC9saXRlcmFsPiBvcHRpb24gaW4gdGhlClt3aW5lXSBzZWN0aW9uIG9mIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+Lgo8L3BhcmE+Cgo8c2VjdDI+Cjx0aXRsZT5Db25maWd1cmluZyB0aGUgeDExZHJ2IGdyYXBoaWNzIGRyaXZlcjwvdGl0bGU+Cgo8cGFyYT4KICBXcml0dGVuIGJ5ICZuYW1lLW92ZS1rYWF2ZW47IDxlbWFpbD4mZW1haWwtb3ZlLWthYXZlbjs8L2VtYWlsPgo8L3BhcmE+CjxwYXJhPgogIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL3gxMWRydjwvZmlsZW5hbWU+KQo8L3BhcmE+Cgo8c2VjdDM+CiAgPHRpdGxlPngxMWRydiBtb2RlcyBvZiBvcGVyYXRpb248L3RpdGxlPgoKICA8cGFyYT4KICAgIFRoZSB4MTFkcnYgZHJpdmVyIGNvbnNpc3RzIG9mIHR3byBjb25jZXB0dWFsbHkgZGlzdGluY3QKICAgIHBpZWNlcywgdGhlIGdyYXBoaWNzIGRyaXZlciAoR0RJIHBhcnQpLCBhbmQgdGhlIHdpbmRvd2luZwogICAgZHJpdmVyIChVU0VSIHBhcnQpLiBCb3RoIG9mIHRoZXNlIGFyZSBsaW5rZWQgaW50byB0aGUKICAgIDxmaWxlbmFtZT5saWJ4MTFkcnYuc288L2ZpbGVuYW1lPiBtb2R1bGUsIHRob3VnaCAod2hpY2ggeW91CiAgICBsb2FkIHdpdGggdGhlIDxsaXRlcmFsPkdyYXBoaWNzRHJpdmVyPC9saXRlcmFsPiBvcHRpb24pLiBJbgogICAgV2luZSwgcnVubmluZyBvbiBYMTEsIHRoZSBncmFwaGljcyBkcml2ZXIgbXVzdCBkcmF3IG9uCiAgICBkcmF3YWJsZXMgKHdpbmRvdyBpbnRlcmlvcnMpIHByb3ZpZGVkIGJ5IHRoZSB3aW5kb3dpbmcKICAgIGRyaXZlci4gVGhpcyBkaWZmZXJzIGEgYml0IGZyb20gdGhlIFdpbmRvd3MgbW9kZWwsIHdoZXJlIHRoZQogICAgd2luZG93aW5nIHN5c3RlbSBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGRldmljZSBjb250ZXh0cwogICAgY29udHJvbGxlZCBieSB0aGUgZ3JhcGhpY3MgZHJpdmVyLCBhbmQgcHJvZ3JhbXMgYXJlCiAgICBhbGxvd2VkIHRvIGhvb2sgaW50byB0aGlzIHJlbGF0aW9uc2hpcCBhbnl3aGVyZSB0aGV5IGxpa2UuCiAgICBUaHVzLCB0byBwcm92aWRlIGFueSByZWFzb25hYmxlIHRyYWRlb2ZmIGJldHdlZW4KICAgIGNvbXBhdGliaWxpdHkgYW5kIHVzYWJpbGl0eSwgdGhlIHgxMWRydiBoYXMgdGhyZWUgZGlmZmVyZW50CiAgICBtb2RlcyBvZiBvcGVyYXRpb24uCiAgPC9wYXJhPgoKICA8dmFyaWFibGVsaXN0PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+TWFuYWdlZDwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIFRoZSBkZWZhdWx0LiBTcGVjaWZpZWQgYnkgdXNpbmcgdGhlIDxsaXRlcmFsPk1hbmFnZWQ8L2xpdGVyYWw+CgkgIHdpbmUgY29uZmlndXJhdGlvbiBmaWxlIG9wdGlvbiAoc2VlIGJlbG93KS4KCSAgT3JkaW5hcnkgdG9wLWxldmVsIGZyYW1lIHdpbmRvd3Mgd2l0aCB0aGljayBib3JkZXJzLAoJICB0aXRsZSBiYXJzLCBhbmQgc3lzdGVtIG1lbnVzIHdpbGwgYmUgbWFuYWdlZCBieSB5b3VyCgkgIHdpbmRvdyBtYW5hZ2VyLiBUaGlzIGxldHMgdGhlc2UgcHJvZ3JhbXMgaW50ZWdyYXRlCgkgIGJldHRlciB3aXRoIHRoZSByZXN0IG9mIHlvdXIgZGVza3RvcCwgYnV0IG1heSBub3QKCSAgYWx3YXlzIHdvcmsgcGVyZmVjdGx5IChhIHJld3JpdGUgb2YgdGhpcyBtb2RlIG9mCgkgIG9wZXJhdGlvbiwgdG8gbWFrZSBpdCBtb3JlIHJvYnVzdCBhbmQgbGVzcyBwYXRjaHksIGlzCgkgIGN1cnJlbnRseSBiZWluZyBkb25lLCB0aG91Z2gsIGFuZCBpdCdzIHBsYW5uZWQgdG8gYmUKCSAgZmluaXNoZWQgYmVmb3JlIHRoZSBXaW5lIDEuMCByZWxlYXNlKS4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+VW5tYW5hZ2VkIC8gTm9ybWFsPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgV2luZG93IG1hbmFnZXIgaW5kZXBlbmRlbnQgKGFueSBydW5uaW5nCgkgIHdpbmRvdyBtYW5hZ2VyIGlzIGlnbm9yZWQgY29tcGxldGVseSkuIFdpbmRvdwoJICBkZWNvcmF0aW9ucyAodGl0bGUgYmFycywgYm9yZGVycywgZXRjKSBhcmUgZHJhd24gYnkKCSAgV2luZSB0byBsb29rIGFuZCBmZWVsIGxpa2UgdGhlIHJlYWwgV2luZG93cy4gVGhpcyBpcwoJICBjb21wYXRpYmxlIHdpdGggcHJvZ3JhbXMgdGhhdCBkZXBlbmQgb24gYmVpbmcgYWJsZQoJICB0byBjb21wdXRlIHRoZSBleGFjdCBzaXplcyBvZiBhbnkgc3VjaCBkZWNvcmF0aW9ucywgb3IKCSAgdGhhdCB3YW50IHRvIGRyYXcgdGhlaXIgb3duLgoJICBVbm1hbmFnZWQgbW9kZSBpcyBvbmx5IHVzZWQgaWYgYm90aCBNYW5hZ2VkIGFuZCBEZXNrdG9wCgkgIGFyZSBzZXQgdG8gZGlzYWJsZWQuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPkRlc2t0b3AtaW4tYS1Cb3g8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBTcGVjaWZpZWQgYnkgdXNpbmcgdGhlIDxsaXRlcmFsPkRlc2t0b3A8L2xpdGVyYWw+Cgl3aW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBvcHRpb24gKHNlZSBiZWxvdykuCgkgIChhZGRpbmcgYSBnZW9tZXRyeSwgZS5nLiA8bGl0ZXJhbD44MDB4NjAwPC9saXRlcmFsPgoJZm9yIGEgc3VjaC1zaXplZCBkZXNrdG9wLCBvcgoJICBldmVuIDxsaXRlcmFsPjgwMHg2MDArMCswPC9saXRlcmFsPiB0bwoJICBhdXRvbWF0aWNhbGx5IHBvc2l0aW9uIHRoZSBkZXNrdG9wIGF0IHRoZSB1cHBlci1sZWZ0CgkgIGNvcm5lciBvZiB0aGUgZGlzcGxheSkuIFRoaXMgaXMgdGhlIG1vZGUgbW9zdAoJICBjb21wYXRpYmxlIHdpdGggdGhlIFdpbmRvd3MgbW9kZWwuIEFsbCBwcm9ncmFtCgkgIHdpbmRvd3Mgd2lsbCBqdXN0IGJlIFdpbmUtZHJhd24gd2luZG93cyBpbnNpZGUgdGhlCgkgIFdpbmUtcHJvdmlkZWQgZGVza3RvcCB3aW5kb3cgKHdoaWNoIHdpbGwgaXRzZWxmIGJlCgkgIG1hbmFnZWQgYnkgeW91ciB3aW5kb3cgbWFuYWdlciksIGFuZCBXaW5kb3dzCgkgIHByb2dyYW1zIGNhbiByb2FtIGZyZWVseSB3aXRoaW4gdGhpcyB2aXJ0dWFsCgkgIHdvcmtzcGFjZSBhbmQgdGhpbmsgdGhleSBvd24gaXQgYWxsLCB3aXRob3V0CgkgIGRpc3R1cmJpbmcgeW91ciBvdGhlciBYIGFwcHMuCglOb3RlOiBjdXJyZW50bHkgdGhlcmUncyBvbmUgZGVza3RvcCB3aW5kb3cgZm9yIGV2ZXJ5Cglwcm9ncmFtOyB0aGlzIHdpbGwgYmUgZml4ZWQgYXQgc29tZSB0aW1lLgoJPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgPC92YXJpYWJsZWxpc3Q+Cjwvc2VjdDM+Cgo8c2VjdDM+CiAgPHRpdGxlPlRoZSBbeDExZHJ2XSBzZWN0aW9uPC90aXRsZT4KCiAgPHZhcmlhYmxlbGlzdD4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPk1hbmFnZWQ8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBXaW5lIGNhbiBsZXQgZnJhbWUgd2luZG93cyBiZSBtYW5hZ2VkIGJ5IHlvdXIgd2luZG93CgkgIG1hbmFnZXIuIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRoYXQKCSAgYnkgZGVmYXVsdC4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+RGVza3RvcDwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIENyZWF0ZXMgYSBtYWluIGRlc2t0b3Agd2luZG93IG9mIGEgc3BlY2lmaWVkIHNpemUKCXRvIGRpc3BsYXkgYWxsIFdpbmRvd3MgcHJvZ3JhbXMgaW4uCglUaGUgc2l6ZSBhcmd1bWVudCBjb3VsZCBlLmcuIGJlICI4MDB4NjAwIi4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+RFhHcmFiPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgSWYgeW91IGRvbid0IHVzZSBER0EsIHlvdSBtYXkgd2FudCBhbiBhbHRlcm5hdGl2ZQoJICBtZWFucyB0byBjb252aW5jZSB0aGUgbW91c2UgY3Vyc29yIHRvIHN0YXkgd2l0aGluIHRoZQoJICBnYW1lIHdpbmRvdy4gVGhpcyBvcHRpb24gZG9lcyB0aGF0LiBPZiBjb3Vyc2UsIGFzIHdpdGgKCSAgREdBLCBpZiBXaW5lIGNyYXNoZXMsIHlvdSdyZSBpbiB0cm91YmxlIChhbHRob3VnaCBub3QKCSAgYXMgYmFkbHkgYXMgaW4gdGhlIERHQSBjYXNlLCBzaW5jZSB5b3UgY2FuIHN0aWxsIHVzZQoJICB0aGUga2V5Ym9hcmQgdG8gZ2V0IG91dCBvZiBYKS4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+VXNlREdBPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgVGhpcyBzcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCBEaXJlY3REcmF3IHRvIHVzZQoJICBYRnJlZTg2J3MgPGZpcnN0dGVybT5EaXJlY3QgR3JhcGhpY3MKCSAgICBBcmNoaXRlY3R1cmU8L2ZpcnN0dGVybT4gKERHQSksIHdoaWNoIGlzIGFibGUgdG8KCSAgdGFrZSBvdmVyIHRoZSBlbnRpcmUgZGlzcGxheSBhbmQgcnVuIHRoZSBnYW1lCgkgIGZ1bGwtc2NyZWVuIGF0IG1heGltdW0gc3BlZWQuIChXaXRoIERHQTEgKFhGcmVlODYKCSAgMy54KSwgeW91IHN0aWxsIGhhdmUgdG8gY29uZmlndXJlIHRoZSBYIHNlcnZlciB0byB0aGUKCSAgZ2FtZSdzIHJlcXVlc3RlZCBicHAgZmlyc3QsIGJ1dCB3aXRoIERHQTIgKFhGcmVlODYKCSAgNC54KSwgcnVudGltZSBkZXB0aC1zd2l0Y2hpbmcgbWF5IGJlIHBvc3NpYmxlLAoJICBkZXBlbmRpbmcgb24geW91ciBkcml2ZXIncyBjYXBhYmlsaXRpZXMuKSBCdXQgYmUgYXdhcmUKCSAgdGhhdCBpZiBXaW5lIGNyYXNoZXMgd2hpbGUgaW4gREdBIG1vZGUsIGl0IG1heSBub3QgYmUKCSAgcG9zc2libGUgdG8gcmVnYWluIGNvbnRyb2wgb3ZlciB5b3VyIGNvbXB1dGVyIHdpdGhvdXQKCSAgcmVib290aW5nLiBER0Egbm9ybWFsbHkgcmVxdWlyZXMgZWl0aGVyIHJvb3QKCSAgcHJpdmlsZWdlcyBvciByZWFkL3dyaXRlIGFjY2VzcyB0bwoJICA8ZmlsZW5hbWU+L2Rldi9tZW08L2ZpbGVuYW1lPi4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+VXNlWFNobTwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIElmIHlvdSBkb24ndCB3YW50IERpcmVjdFggdG8gdXNlIERHQSwgeW91IGNhbiBhdCBsZWFzdAoJICB1c2UgWCBTaGFyZWQgTWVtb3J5IGV4dGVuc2lvbnMgKFhTaG0pLiBJdCBpcyBtdWNoCgkgIHNsb3dlciB0aGFuIERHQSwgc2luY2UgdGhlIGFwcCBkb2Vzbid0IGhhdmUgZGlyZWN0CgkgIGFjY2VzcyB0byB0aGUgcGh5c2ljYWwgZnJhbWUgYnVmZmVyLCBidXQgdXNpbmcgc2hhcmVkCgkgIG1lbW9yeSB0byBkcmF3IHRoZSBmcmFtZSBpcyBhdCBsZWFzdCBmYXN0ZXIgdGhhbgoJICBzZW5kaW5nIHRoZSBkYXRhIHRocm91Z2ggdGhlIHN0YW5kYXJkIFgxMSBzb2NrZXQsIGV2ZW4KCSAgdGhvdWdoIFdpbmUncyBYU2htIHN1cHBvcnQgaXMgc3RpbGwga25vd24gdG8gY3Jhc2gKCSAgc29tZXRpbWVzLgoJPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5EZXNrdG9wRG91YmxlQnVmZmVyZWQ8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBBcHBsaWVzIG9ubHkgaWYgeW91IHVzZSB0aGUKCSAgPHBhcmFtZXRlcj4tLWRlc2t0b3A8L3BhcmFtZXRlcj4gY29tbWFuZC1saW5lIG9wdGlvbgoJICB0byBydW4gaW4gYSBkZXNrdG9wIHdpbmRvdy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8KCSAgY3JlYXRlIHRoZSBkZXNrdG9wIHdpbmRvdyB3aXRoIGEgZG91YmxlLWJ1ZmZlcmVkCgkgIHZpc3VhbCwgc29tZXRoaW5nIG1vc3QgT3BlbkdMIGdhbWVzIG5lZWQgdG8gcnVuCgkgIGNvcnJlY3RseS4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+QWxsb2NTeXN0ZW1Db2xvcnM8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBBcHBsaWVzIG9ubHkgaWYgeW91IGhhdmUgYSBwYWxldHRlLWJhc2VkIGRpc3BsYXksIGkuZS4KCSAgaWYgeW91ciBYIHNlcnZlciBpcyBzZXQgdG8gYSBkZXB0aCBvZiA4YnBwLCBhbmQgaWYgeW91CgkgIGhhdmVuJ3QgcmVxdWVzdGVkIGEgcHJpdmF0ZSBjb2xvciBtYXAuIEl0IHNwZWNpZmllcwoJICB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2hhcmVkIGNvbG9ybWFwIGNlbGxzIChwYWxldHRlCgkgIGVudHJpZXMpIFdpbmUgc2hvdWxkIG9jY3VweS4gVGhlIGhpZ2hlciB0aGlzIHZhbHVlLAoJICB0aGUgbGVzcyBjb2xvcnMgd2lsbCBiZSBhdmFpbGFibGUgdG8gb3RoZXIKCSAgcHJvZ3JhbXMuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPlByaXZhdGVDb2xvck1hcDwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIEFwcGxpZXMgb25seSBpZiB5b3UgaGF2ZSBhIHBhbGV0dGUtYmFzZWQgZGlzcGxheSwgaS5lLgoJICBpZiB5b3VyIFggc2VydmVyIGlzIHNldCB0byBhIGRlcHRoIG9mIDhicHAuIEl0CgkgIHNwZWNpZmllcyB0aGF0IHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgc2hhcmVkIGNvbG9yCgkgIG1hcCwgYnV0IGEgcHJpdmF0ZSBjb2xvciBtYXAsIHdoZXJlIGFsbCAyNTYgY29sb3JzIGFyZQoJICBhdmFpbGFibGUuIFRoZSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCBXaW5lJ3MgcHJpdmF0ZQoJICBjb2xvciBtYXAgaXMgb25seSBzZWVuIHdoaWxlIHRoZSBtb3VzZSBwb2ludGVyIGlzCgkgIGluc2lkZSBhIFdpbmUgd2luZG93LCBzbyBwc3ljaGVkZWxpYyBmbGFzaGluZyBhbmQKCSAgZnVua3kgY29sb3JzIHdpbGwgYmVjb21lIHJvdXRpbmUgaWYgeW91IHVzZSB0aGUgbW91c2UKCSAgYSBsb3QuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPlN5bmNocm9ub3VzPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgVG8gYmUgdXNlZCBmb3IgZGVidWdnaW5nIFgxMSBvcGVyYXRpb25zLgoJSWYgV2luZSBjcmFzaGVzIHdpdGggYW4gWDExIGVycm9yLCB0aGVuIHlvdSBzaG91bGQgZW5hYmxlCglTeW5jaHJvbm91cyBtb2RlIHRvIGRpc2FibGUgWDExIHJlcXVlc3QgY2FjaGluZyBpbiBvcmRlcgoJdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFgxMSBlcnJvciBoYXBwZW5zIGRpcmVjdGx5IGFmdGVyCgl0aGUgY29ycmVzcG9uZGluZyBYMTEgY2FsbCBpbiB0aGUgbG9nIGZpbGUgYXBwZWFycy4KCVdpbGwgc2xvdyBkb3duIFgxMSBvdXRwdXQhCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPlNjcmVlbkRlcHRoPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgQXBwbGllcyBvbmx5IHRvIG11bHRpLWRlcHRoIGRpc3BsYXlzLiBJdCBzcGVjaWZpZXMKCSAgd2hpY2ggb2YgdGhlIGF2YWlsYWJsZSBkZXB0aHMgV2luZSBzaG91bGQgdXNlIChhbmQKCSAgdGVsbCBXaW5kb3dzIGFwcHMgYWJvdXQpLgoJPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5EaXNwbGF5PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgVGhpcyBzcGVjaWZpZXMgd2hpY2ggWDExIGRpc3BsYXkgdG8gdXNlLCBhbmQgaWYKCSAgc3BlY2lmaWVkLCB3aWxsIG92ZXJyaWRlIHRoZQoJICA8ZW52YXI+RElTUExBWTwvZW52YXI+IGVudmlyb25tZW50IHZhcmlhYmxlLgoJPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5QZXJmZWN0R3JhcGhpY3M8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBUaGlzIG9wdGlvbiBvbmx5IGRldGVybWluZXMgd2hldGhlciBmYXN0IFgxMSByb3V0aW5lcwoJICBvciBleGFjdCBXaW5lIHJvdXRpbmVzIHdpbGwgYmUgdXNlZCBmb3IgY2VydGFpbiBST1AKCSAgY29kZXMgaW4gYmxpdCBvcGVyYXRpb25zLiBNb3N0IHVzZXJzIHdvbid0IG5vdGljZSBhbnkKCSAgZGlmZmVyZW5jZS4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+VGV4dENQPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCUNvZGVwYWdlIHRvIGJlIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgdGV4dCBpbiBYMTEKCW91dHB1dC4gU29tZSBzYW1wbGUgdmFsdWVzIHdvdWxkIGJlIDQzNyAoVVNBLCBDYW5hZGEpLAoJODUwIChFdXJvcGUpLCA4NTIgKENlbnRyYWwvRWFzdGVybiBFdXJvcGUpLCA4NTUKCShDeXJpbGxpYykuIEZvciBhZGRpdGlvbmFsIHN1aXRhYmxlIHZhbHVlcywgc2VlIGUuZy4gdGhlIExpbnV4CglrZXJuZWwncyBjb2RlcGFnZSBjb25maWd1cmF0aW9uIHBhZ2UuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICA8L3ZhcmlhYmxlbGlzdD4KPC9zZWN0Mz4KPC9zZWN0Mj4KCjxzZWN0Mj4KPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSB0dHlkcnYgZ3JhcGhpY3MgZHJpdmVyPC90aXRsZT4KPHBhcmE+CiAgQ3VycmVudGx5LCB0aGUgdHR5ZHJ2IGRvZXNuJ3QgaGF2ZSBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uCiAgb3B0aW9ucyB0byBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KPC9wYXJhPgo8L3NlY3QyPgoKPC9zZWN0MT4KCjxzZWN0MSBpZD0iY29uZmlnLXdpbmRvd3MtdmVyc2lvbnMiPgoKPHRpdGxlPlNldHRpbmcgdGhlIFdpbmRvd3MgYW5kIERPUyB2ZXJzaW9uIHZhbHVlPC90aXRsZT4KCjxwYXJhPgpXcml0dGVuIGJ5ICZuYW1lLWFuZHJlYXMtbW9ocjsgPGVtYWlsPiZlbWFpbC1hbmRyZWFzLW1vaHI7PC9lbWFpbD4KT2N0IDE4IDIwMDIKPC9wYXJhPgoKPHBhcmE+ClRoZSB3aW5kb3dzIGFuZCBET1MgdmVyc2lvbiB2YWx1ZSBhIHByb2dyYW0gZ2V0cyBlLmcuIGJ5IGNhbGxpbmcgdGhlCldpbmRvd3MgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHBsYXlzIGEgdmVyeSBpbXBvcnRhbnQgcm9sZToKSWYgeW91ciBXaW5lIGluc3RhbGxhdGlvbiBmb3Igd2hhdGV2ZXIgcmVhc29uIGZhaWxzIHRvIHByb3ZpZGUKdG8geW91ciBwcm9ncmFtIHRoZSBjb3JyZWN0IHZlcnNpb24gdmFsdWUgdGhhdCBpdCBleHBlY3RzLAp0aGVuIHRoZSBwcm9ncmFtIG1pZ2h0IGFzc3VtZSBzb21lIHZlcnkgYmFkIHRoaW5ncyBhbmQgZmFpbCAoaW4KdGhlIHdvcnN0IGNhc2UgZXZlbiBzaWxlbnRseSEpLgoKRm9ydHVuYXRlbHkgV2luZSBjb250YWlucyBzb21lIG1vcmUgb3IgbGVzcyBpbnRlbGxpZ2VudCBXaW5kb3dzCnZlcnNpb24gZ3Vlc3NpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB0cnkgdG8gZ3Vlc3MgdGhlIFdpbmRvd3MKdmVyc2lvbiBhIHByb2dyYW0gbWlnaHQgZXhwZWN0IGFuZCBwYXNzIHRoYXQgb25lIG9uIHRvIHRoZQpwcm9ncmFtLgoKVGh1cyB5b3Ugc2hvdWxkIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBsaWdodGx5IGNvbmZpZ3VyZSBhIHZlcnNpb24gdmFsdWUsIGFzIHRoaXMgd2lsbCBiZSBhICJmb3JjZWQiIHZhbHVlIGFuZCB0aHVzIHR1cm4gb3V0IHRvIGJlIHJhdGhlciBoYXJtZnVsIHRvIHByb3BlciBvcGVyYXRpb24uIEluIG90aGVyIHdvcmRzOiBvbmx5IGV4cGxpY2l0bHkgc2V0IGEgV2luZG93cyB2ZXJzaW9uIHZhbHVlIGluIGNhc2UgV2luZSdzIG93biB2ZXJzaW9uIGRldGVjdGlvbiB3YXMgdW5hYmxlIHRvIHByb3ZpZGUgdGhlIGNvcnJlY3QgV2luZG93cyB2ZXJzaW9uIGFuZCB0aGUgcHJvZ3JhbSBmYWlscy4KPC9wYXJhPgoKPHNlY3QyPgo8dGl0bGU+SG93IHRvIGNvbmZpZ3VyZSB0aGUgV2luZG93cyBhbmQgRE9TIHZlcnNpb24gdmFsdWUgV2luZQpzaG91bGQgcmV0dXJuPC90aXRsZT4KCjxwYXJhPgpUaGUgdmVyc2lvbiB2YWx1ZXMgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIHdpbmUgY29uZmlndXJhdGlvbiBmaWxlIGluCnRoZSBbVmVyc2lvbl0gc2VjdGlvbi4KPC9wYXJhPgoKPHZhcmlhYmxlbGlzdD4KICA8dmFybGlzdGVudHJ5PgogICAgPHRlcm0+IldpbmRvd3MiID0gIiZsdDt2ZXJzaW9uIHN0cmluZyZndDsiPC90ZXJtPgogICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KCWRlZmF1bHQ6IG5vbmU7IGNob3NlbiBieSBzZW1pLWludGVsbGlnZW50IGRldGVjdGlvbgoJbWVjaGFuaXNtIGJhc2VkIG9uIERMTCBlbnZpcm9ubWVudC4KCVVzZWQgdG8gc3BlY2lmeSB3aGljaCBXaW5kb3dzIHZlcnNpb24gdG8gcmV0dXJuIHRvCglwcm9ncmFtcyAgKGZvcmNlZCAgdmFsdWUsIG92ZXJyaWRlcyBzdGFuZGFyZCBkZXRlY3Rpb24KCW1lY2hhbmlzbSEpLiBWYWxpZCAgc2V0dGluZ3MgYXJlIGUuZy4gIndpbjMxIiwgIndpbjk1IiwKCSJ3aW45OCIsICAid2luMmsiLCAgIndpbnhwIi4KCUFsc28gdmFsaWQgYXMgYW4KCTxsaW5rIGxpbmtlbmQ9ImNvbmZpZy1hcHBkZWZhdWx0cyI+QXBwRGVmYXVsdHM8L2xpbms+CglzZXR0aW5nIChyZWNvbW1lbmRlZC9wcmVmZXJyZWQgdXNlKS4KICAgICAgPC9wYXJhPgogICAgPC9saXN0aXRlbT4KICA8L3Zhcmxpc3RlbnRyeT4KICA8dmFybGlzdGVudHJ5PgogICAgPHRlcm0+IkRPUyI9IiZsdDt2ZXJzaW9uIHN0cmluZyZndDsiPC90ZXJtPgogICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KCVVzZWQgdG8gc3BlY2lmeSB0aGUgRE9TIHZlcnNpb24gdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQKCXRvIHByb2dyYW1zLiBPbmx5IHRha2VzIGVmZmVjdCBpbiBjYXNlIFdpbmUgYWN0cyBhcwoJIndpbjMxIiBXaW5kb3dzIHZlcnNpb24hIENvbW1vbiBET1MgdmVyc2lvbiBzZXR0aW5ncwoJaW5jbHVkZSA2LjIyLCA2LjIwLCA2LjAwLCA1LjAwLCA0LjAwLCAzLjMwLCAzLjEwLgoJQWxzbyB2YWxpZCBhcyBhbgoJPGxpbmsgbGlua2VuZD0iY29uZmlnLWFwcGRlZmF1bHRzIj5BcHBEZWZhdWx0czwvbGluaz4KCXNldHRpbmcgKHJlY29tbWVuZGVkL3ByZWZlcnJlZCB1c2UpLgogICAgICA8L3BhcmE+CiAgICA8L2xpc3RpdGVtPgogIDwvdmFybGlzdGVudHJ5Pgo8L3ZhcmlhYmxlbGlzdD4KPC9zZWN0Mj4KPC9zZWN0MT4KCiZmb250czsKJnByaW50aW5nOwoKPHNlY3QxIGlkPSJjb25maWctd2luOTVsb29rIj4KPHRpdGxlPldpbjk1Lzk4IExvb2sgQW5kIEZlZWw8L3RpdGxlPgo8cGFyYT4KV3JpdHRlbiBieSAmbmFtZS1kYXZpZC1jdXRoYmVydDsgPGVtYWlsPiZlbWFpbC1kYXZpZC1jdXRoYmVydDs8L2VtYWlsPgo8L3BhcmE+CjxwYXJhPgooRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi93aW45NWxvb2s8L2ZpbGVuYW1lPikKPC9wYXJhPgo8cGFyYT4KV2luOTUvV2luOTggaW50ZXJmYWNlIGNvZGUgaXMgYmVpbmcgaW50cm9kdWNlZC4KPC9wYXJhPgo8cGFyYT4KSW5zdGVhZCBvZiBjb21waWxpbmcgV2luZSBmb3IgV2luMy4xIHZzLiBXaW45NSB1c2luZwo8Y29uc3RhbnQ+I2RlZmluZTwvY29uc3RhbnQ+IHN3aXRjaGVzLCB0aGUgY29kZSBub3cgbG9va3MgaW4gYQpzcGVjaWFsIFtUd2Vhay5MYXlvdXRdIHNlY3Rpb24gb2YKPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4gZm9yIGEKPGxpdGVyYWw+IldpbmVMb29rIiA9ICJXaW45NSI8L2xpdGVyYWw+IG9yCjxsaXRlcmFsPiJXaW5lTG9vayIgPSAiV2luOTgiPC9saXRlcmFsPiBlbnRyeS4KPC9wYXJhPgo8cGFyYT4KQSBmZXcgbmV3IHNlY3Rpb25zIGFuZCBhIG51bWJlciBvZiBlbnRyaWVzIGhhdmUgYmVlbiBhZGRlZCB0bwp0aGUgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4gZmlsZSAtLSB0aGVzZSBhcmUgZm9yCmRlYnVnZ2luZyB0aGUgV2luOTUgdHdlYWtzIG9ubHkgYW5kIG1heSBiZSByZW1vdmVkIGluIGEgZnV0dXJlCnJlbGVhc2UhICBUaGVzZSBlbnRyaWVzL3NlY3Rpb25zIGFyZToKPC9wYXJhPgo8cHJvZ3JhbWxpc3Rpbmc+CltUd2Vhay5Gb250c10KIlN5c3RlbS5IZWlnaHQiID0gIiZsdDtwb2ludCBzaXplPiIgICAgIyBTZXRzIHRoZSBoZWlnaHQgb2YgdGhlIHN5c3RlbSB0eXBlZmFjZQoiU3lzdGVtLkJvbGQiID0gIlt0cnVlfGZhbHNlXSIgICAgICAjIFdoZXRoZXIgdGhlIHN5c3RlbSBmb250IHNob3VsZCBiZSBib2xkZmFjZWQKIlN5c3RlbS5JdGFsaWMiID0gIlt0cnVlfGZhbHNlXSIgICAgIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgaXRhbGljaXplZAoiU3lzdGVtLlVuZGVybGluZSIgPSAiW3RydWV8ZmFsc2VdIiAjIFdoZXRoZXIgdGhlIHN5c3RlbSBmb250IHNob3VsZCBiZSB1bmRlcmxpbmVkCiJTeXN0ZW0uU3RyaWtlT3V0IiA9ICJbdHJ1ZXxmYWxzZV0iICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIHN0cnVjayBvdXQKIk9FTUZpeGVkLnh4eCIgICAgICAgICAgICAgICAgICAjIFNhbWUgcGFyYW1ldGVycyBmb3IgdGhlIE9FTSBmaXhlZCB0eXBlZmFjZQoiQW5zaUZpeGVkLnh4eCIgICAgICAgICAgICAgICAgICMgU2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUgQW5zaSBmaXhlZCB0eXBlZmFjZQoiQW5zaVZhci54eHgiICAgICAgICAgICAgICAgICAgICMgU2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUgQW5zaSB2YXJpYWJsZSB0eXBlZmFjZQoiU3lzdGVtRml4ZWQueHh4IiAgICAgICAgICAgICAgICMgU2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUgU3lzdGVtIGZpeGVkIHR5cGVmYWNlCgpbVHdlYWsuTGF5b3V0XQoiV2luZUxvb2siID0gIltXaW4zMXxXaW45NXxXaW45OF0iICAjIENoYW5nZXMgV2luZSdzIGxvb2sgYW5kIGZlZWwKPC9wcm9ncmFtbGlzdGluZz4KPC9zZWN0MT4KCjxzZWN0MSBpZD0iY29uZmlnLWtleWJvYXJkIj4KPHRpdGxlPktleWJvYXJkPC90aXRsZT4KCjxwYXJhPgpXcml0dGVuIGJ5ICZuYW1lLW92ZS1rYWF2ZW47IDxlbWFpbD4mZW1haWwtb3ZlLWthYXZlbjs8L2VtYWlsPgo8L3BhcmE+CjxwYXJhPgooRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9rZXlib2FyZDwvZmlsZW5hbWU+KQo8L3BhcmE+Cgo8cGFyYT4KV2luZSBub3cgbmVlZHMgdG8ga25vdyBhYm91dCB5b3VyIGtleWJvYXJkIGxheW91dC4gVGhpcwpyZXF1aXJlbWVudCBjb21lcyBmcm9tIGEgbmVlZCBmcm9tIG1hbnkgYXBwcyB0byBoYXZlIHRoZQpjb3JyZWN0IHNjYW5jb2RlcyBhdmFpbGFibGUsIHNpbmNlIHRoZXkgcmVhZCB0aGVzZSBkaXJlY3RseSwKaW5zdGVhZCBvZiBqdXN0IHRha2luZyB0aGUgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgWApzZXJ2ZXIuIFRoaXMgbWVhbnMgdGhhdCBXaW5lIG5vdyBuZWVkcyB0byBoYXZlIGEgbWFwcGluZyBmcm9tClgga2V5cyB0byB0aGUgc2NhbmNvZGVzIHRoZXNlIHByb2dyYW1zIGV4cGVjdC4KPC9wYXJhPgo8cGFyYT4KT24gc3RhcnR1cCwgV2luZSB3aWxsIHRyeSB0byByZWNvZ25pemUgdGhlIGFjdGl2ZSBYIGxheW91dCBieQpzZWVpbmcgaWYgaXQgbWF0Y2hlcyBhbnkgb2YgdGhlIGRlZmluZWQgdGFibGVzLiBJZiBpdCBkb2VzLApldmVyeXRoaW5nIGlzIGFscmlnaHQuIElmIG5vdCwgeW91IG5lZWQgdG8gZGVmaW5lIGl0Lgo8L3BhcmE+CjxwYXJhPgpUbyBkbyB0aGlzLCBvcGVuIHRoZSBmaWxlCjxmaWxlbmFtZT5kbGxzL3gxMWRydi9rZXlib2FyZC5jPC9maWxlbmFtZT4gYW5kIHRha2UgYSBsb29rCmF0IHRoZSBleGlzdGluZyB0YWJsZXMuIE1ha2UgYSBiYWNrdXAgY29weSBvZiBpdCwgZXNwZWNpYWxseQppZiB5b3UgZG9uJ3QgdXNlIENWUy4KPC9wYXJhPgo8cGFyYT4KV2hhdCB5b3UgcmVhbGx5IHdvdWxkIG5lZWQgdG8gZG8sIGlzIGZpbmQgb3V0IHdoaWNoIHNjYW5jb2RlCmVhY2gga2V5IG5lZWRzIHRvIGdlbmVyYXRlLiAgRmluZCBpdCBpbiB0aGUKPGZ1bmN0aW9uPm1haW5fa2V5X3NjYW48L2Z1bmN0aW9uPiB0YWJsZSwgd2hpY2ggbG9va3MgbGlrZQp0aGlzOgo8L3BhcmE+Cjxwcm9ncmFtbGlzdGluZz4Kc3RhdGljIGNvbnN0IGludCBtYWluX2tleV9zY2FuW01BSU5fTEVOXSA9CnsKLyogdGhpcyBpcyBteSAoMTAyLWtleSkga2V5Ym9hcmQgbGF5b3V0LCBzb3JyeSBpZiBpdCBkb2Vzbid0IHF1aXRlIG1hdGNoIHlvdXJzICovCjB4MjksMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsCjB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1LDB4MTYsMHgxNywweDE4LDB4MTksMHgxQSwweDFCLAoweDFFLDB4MUYsMHgyMCwweDIxLDB4MjIsMHgyMywweDI0LDB4MjUsMHgyNiwweDI3LDB4MjgsMHgyQiwKMHgyQywweDJELDB4MkUsMHgyRiwweDMwLDB4MzEsMHgzMiwweDMzLDB4MzQsMHgzNSwKMHg1NiAvKiB0aGUgMTAybmQga2V5IChhY3R1YWxseSB0byB0aGUgcmlnaHQgb2YgbC1zaGlmdCkgKi8KfTsKPC9wcm9ncmFtbGlzdGluZz4KPHBhcmE+Ck5leHQsIGFzc2lnbiBlYWNoIHNjYW5jb2RlIHRoZSBjaGFyYWN0ZXJzIGltcHJpbnRlZCBvbiB0aGUKa2V5Y2Fwcy4gVGhpcyB3YXMgZG9uZSAoc29ydCBvZikgZm9yIHRoZSBVUyAxMDEta2V5IGtleWJvYXJkLAp3aGljaCB5b3UgY2FuIGZpbmQgbmVhciB0aGUgdG9wIGluCjxmaWxlbmFtZT5rZXlib2FyZC5jPC9maWxlbmFtZT4uIEl0IGFsc28gc2hvd3MgdGhhdCBpZiB0aGVyZQppcyBubyAxMDJuZCBrZXksIHlvdSBjYW4gc2tpcCB0aGF0Lgo8L3BhcmE+CjxwYXJhPgpIb3dldmVyLCBmb3IgbW9zdCBpbnRlcm5hdGlvbmFsIDEwMi1rZXkga2V5Ym9hcmRzLCB3ZSBoYXZlCmRvbmUgaXQgZWFzeSBmb3IgeW91LiBUaGUgc2NhbmNvZGUgbGF5b3V0IGZvciB0aGVzZSBhbHJlYWR5CnByZXR0eSBtdWNoIG1hdGNoZXMgdGhlIHBoeXNpY2FsIGxheW91dCBpbiB0aGUKPGZ1bmN0aW9uPm1haW5fa2V5X3NjYW48L2Z1bmN0aW9uPiwgc28gYWxsIHlvdSBuZWVkIHRvIGRvIGlzCnRvIGdvIHRocm91Z2ggYWxsIHRoZSBrZXlzIHRoYXQgZ2VuZXJhdGUgY2hhcmFjdGVycyBvbiB5b3VyCm1haW4ga2V5Ym9hcmQgKGV4Y2VwdCBzcGFjZWJhciksIGFuZCBzdHVmZiB0aG9zZSBpbnRvIGFuCmFwcHJvcHJpYXRlIHRhYmxlLiBUaGUgb25seSBleGNlcHRpb24gaXMgdGhhdCB0aGUgMTAybmQga2V5LAp3aGljaCBpcyB1c3VhbGx5IHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBrZXkgb2YgdGhlIGxhc3QgbGluZQoodXN1YWxseSA8a2V5Y2FwPlo8L2tleWNhcD4pLCBtdXN0IGJlIHBsYWNlZCBvbiBhIHNlcGFyYXRlCmxpbmUgYWZ0ZXIgdGhlIGxhc3QgbGluZS4KPC9wYXJhPgo8cGFyYT4KRm9yIGV4YW1wbGUsIG15IE5vcndlZ2lhbiBrZXlib2FyZCBsb29rcyBsaWtlIHRoaXMKPC9wYXJhPgo8c2NyZWVuPgqnICAhICAiICAjICCkICAlICAmICAvICAoICApICA9ICA/ICBgICBCYWNrLQp8ICAxICAyQCAzoyA0JCA1ICA2ICA3eyA4WyA5XSAwfSArICBctCBzcGFjZQoKVGFiIFEgIFcgIEUgIFIgIFQgIFkgIFUgIEkgIE8gIFAgIMUgIF4KCQkJICAgICCofgoJCQkJRW50ZXIKQ2FwcyBBICBTICBEICBGICBHICBIICBKICBLICBMICDYICDGICAqCkxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJwoKU2gtID4gWiAgWCAgQyAgViAgQiAgTiAgTSAgOyAgOiAgXyAgU2hpZnQKaWZ0ICZsdDsgICAgICAgICAgICAgICAgICAgICAgLCAgLiAgLQoKQ3RybCAgQWx0ICAgICAgIFNwYWNlYmFyICAgICAgIEFsdEdyICBDdHJsCjwvc2NyZWVuPgo8cGFyYT4KTm90ZSB0aGUgMTAybmQga2V5LCB3aGljaCBpcyB0aGUgPGtleWNhcD4mbHQ7Pjwva2V5Y2FwPiBrZXksIHRvCnRoZSBsZWZ0IG9mIDxrZXljYXA+Wjwva2V5Y2FwPi4gVGhlIGNoYXJhY3RlciB0byB0aGUgcmlnaHQgb2YKdGhlIG1haW4gY2hhcmFjdGVyIGlzIHRoZSBjaGFyYWN0ZXIgZ2VuZXJhdGVkIGJ5CjxrZXljYXA+QWx0R3I8L2tleWNhcD4uCjwvcGFyYT4KPHBhcmE+ClRoaXMga2V5Ym9hcmQgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgo8L3BhcmE+Cjxwcm9ncmFtbGlzdGluZz4Kc3RhdGljIGNvbnN0IGNoYXIgbWFpbl9rZXlfTk9bTUFJTl9MRU5dWzRdID0KewoifKciLCIxISIsIjJcIkAiLCIzI6MiLCI0pCQiLCI1JSIsIjYmIiwiNy97IiwiOChbIiwiOSldIiwiMD19IiwiKz8iLCJcXLQiLAoicVEiLCJ3VyIsImVFIiwiclIiLCJ0VCIsInlZIiwidVUiLCJpSSIsIm9PIiwicFAiLCLlxSIsIqhefiIsCiJhQSIsInNTIiwiZEQiLCJmRiIsImdHIiwiaEgiLCJqSiIsImtLIiwibEwiLCL42CIsIubGIiwiJyoiLAoieloiLCJ4WCIsImNDIiwidlYiLCJiQiIsIm5OIiwibU0iLCIsOyIsIi46IiwiLV8iLAoiJmx0Oz4iCn07CjwvcHJvZ3JhbWxpc3Rpbmc+CjxwYXJhPgpFeGNlcHQgdGhhdCAiIGFuZCBcIG5lZWRzIHRvIGJlIHF1b3RlZCB3aXRoIGEgYmFja3NsYXNoLCBhbmQKdGhhdCB0aGUgMTAybmQga2V5IGlzIG9uIGEgc2VwYXJhdGUgbGluZSwgaXQncyBwcmV0dHkKc3RyYWlnaHRmb3J3YXJkLgo8L3BhcmE+CjxwYXJhPgpBZnRlciB5b3UgaGF2ZSB3cml0dGVuIHN1Y2ggYSB0YWJsZSwgeW91IG5lZWQgdG8gYWRkIGl0IHRvIHRoZQo8ZnVuY3Rpb24+bWFpbl9rZXlfdGFiW108L2Z1bmN0aW9uPiBsYXlvdXQgaW5kZXggdGFibGUuIFRoaXMKd2lsbCBsb29rIGxpa2UgdGhpczoKPC9wYXJhPgo8cHJvZ3JhbWxpc3Rpbmc+CnN0YXRpYyBzdHJ1Y3QgewpXT1JEIGxhbmcsIGFuc2lfY29kZXBhZ2UsIG9lbV9jb2RlcGFnZTsKY29uc3QgY2hhciAoKmtleSlbTUFJTl9MRU5dWzRdOwp9IG1haW5fa2V5X3RhYltdPXsKLi4uCi4uLgp7TUFLRUxBTkdJRChMQU5HX05PUldFR0lBTixTVUJMQU5HX0RFRkFVTFQpLCAgMTI1MiwgODY1LCAmYW1wO21haW5fa2V5X05PfSwKLi4uCjwvcHJvZ3JhbWxpc3Rpbmc+CjxwYXJhPgpBZnRlciB5b3UgaGF2ZSBhZGRlZCB5b3VyIHRhYmxlLCByZWNvbXBpbGUgV2luZSBhbmQgdGVzdCB0aGF0Cml0IHdvcmtzLiBJZiBpdCBmYWlscyB0byBkZXRlY3QgeW91ciB0YWJsZSwgdHJ5IHJ1bm5pbmcKPC9wYXJhPgo8c2NyZWVuPgp3aW5lIC0tZGVidWdtc2cgK2tleSwra2V5Ym9hcmQgPiYga2V5LmxvZwogICAgICA8L3NjcmVlbj4KICAgICAgPHBhcmE+CiAgICAgICAgYW5kIGxvb2sgaW4gdGhlIHJlc3VsdGluZyA8ZmlsZW5hbWU+a2V5LmxvZzwvZmlsZW5hbWU+IGZpbGUgdG8KICAgICAgICBmaW5kIHRoZSBlcnJvciBtZXNzYWdlcyBpdCBnaXZlcyBmb3IgeW91ciBsYXlvdXQuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgTm90ZSB0aGF0IHRoZSA8Y29uc3RhbnQ+TEFOR18qPC9jb25zdGFudD4gYW5kCiAgICAgICAgPGNvbnN0YW50PlNVQkxBTkdfKjwvY29uc3RhbnQ+IGRlZmluaXRpb25zIGFyZSBpbgogICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlL3dpbm5scy5oPC9maWxlbmFtZT4sIHdoaWNoIHlvdSBtaWdodCBuZWVkIHRvCiAgICAgICAga25vdyB0byBmaW5kIG91dCB3aGljaCBudW1iZXJzIHlvdXIgbGFuZ3VhZ2UgaXMgYXNzaWduZWQsIGFuZAogICAgICAgIGZpbmQgaXQgaW4gdGhlIGRlYnVnbXNnIG91dHB1dC4gVGhlIG51bWJlcnMgd2lsbCBiZQogICAgICAgIDxsaXRlcmFsPihTVUJMQU5HICogMHg0MDAgKyBMQU5HKTwvbGl0ZXJhbD4sIHNvLCBmb3IgZXhhbXBsZQogICAgICAgIHRoZSBjb21iaW5hdGlvbiA8bGl0ZXJhbD5MQU5HX05PUldFR0lBTiAoMHgxNCk8L2xpdGVyYWw+IGFuZAogICAgICAgIDxsaXRlcmFsPlNVQkxBTkdfREVGQVVMVCAoMHgxKTwvbGl0ZXJhbD4gd2lsbCBiZSAoaW4gaGV4KQogICAgICAgIDxsaXRlcmFsPjE0ICsgMSo0MDAgPSA0MTQ8L2xpdGVyYWw+LCBzbyBzaW5jZSBJJ20gTm9yd2VnaWFuLCBJCiAgICAgICAgY291bGQgbG9vayBmb3IgPGxpdGVyYWw+MDQxNDwvbGl0ZXJhbD4gaW4gdGhlIGRlYnVnbXNnIG91dHB1dAogICAgICAgIHRvIGZpbmQgb3V0IHdoeSBteSBrZXlib2FyZCB3b24ndCBkZXRlY3QuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgT25jZSBpdCB3b3Jrcywgc3VibWl0IGl0IHRvIHRoZSBXaW5lIHByb2plY3QuIElmIHlvdSB1c2UgQ1ZTLAogICAgICAgIHlvdSB3aWxsIGp1c3QgaGF2ZSB0byBkbwogICAgICA8L3BhcmE+CiAgICAgIDxzY3JlZW4+CmN2cyAtejMgZGlmZiAtdSBkbGxzL3gxMWRydi9rZXlib2FyZC5jID4gbGF5b3V0LmRpZmYKICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIGZyb20geW91ciBtYWluIFdpbmUgZGlyZWN0b3J5LCB0aGVuIHN1Ym1pdAogICAgICAgIDxmaWxlbmFtZT5sYXlvdXQuZGlmZjwvZmlsZW5hbWU+IHRvCiAgICAgICAgPGVtYWlsPndpbmUtcGF0Y2hlc0B3aW5laHEuY29tPC9lbWFpbD4gYWxvbmcgd2l0aCBhIGJyaWVmIG5vdGUKICAgICAgICBvZiB3aGF0IGl0IGlzLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIElmIHlvdSBkb24ndCB1c2UgQ1ZTLCB5b3UgbmVlZCB0byBkbwogICAgICA8L3BhcmE+CiAgICAgIDxzY3JlZW4+CmRpZmYgLXUgdGhlX2JhY2t1cF9maWxlX3lvdV9tYWRlIGRsbHMveDExZHJ2L2tleWJvYXJkLmMgPiBsYXlvdXQuZGlmZgogICAgICA8L3NjcmVlbj4KICAgICAgPHBhcmE+CiAgICAgICAgYW5kIHN1Ym1pdCBpdCBhcyBleHBsYWluZWQgYWJvdmUuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgSWYgeW91IGRpZCBpdCByaWdodCwgaXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbmV4dCBXaW5lCiAgICAgICAgcmVsZWFzZSwgYW5kIGFsbCB0aGUgdHJvdWJsZXNvbWUgcHJvZ3JhbXMgKGVzcGVjaWFsbHkKICAgICAgICByZW1vdGUtY29udHJvbCBwcm9ncmFtcykgYW5kIGdhbWVzIHRoYXQgdXNlIHNjYW5jb2RlcyB3aWxsCiAgICAgICAgYmUgaGFwcGlseSB1c2luZyB5b3VyIGtleWJvYXJkIGxheW91dCwgYW5kIHlvdSB3b24ndCBnZXQgdGhvc2UKICAgICAgICBhbm5veWluZyBmaXhtZSBtZXNzYWdlcyBlaXRoZXIuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgR29vZCBsdWNrLgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0iY29uZmlnLXNjc2ktc3VwcG9ydCI+CiAgICAgIDx0aXRsZT5TQ1NJIFN1cHBvcnQ8L3RpdGxlPgogICAgICA8cGFyYT4KICAgICAgICBXcml0dGVuIGJ5ICZuYW1lLWJydWNlLW1pbG5lcjsgPGVtYWlsPiZlbWFpbC1icnVjZS1taWxuZXI7PC9lbWFpbD47CiAgICAgICAgQWRkaXRpb25zIGJ5ICZuYW1lLWFuZHJlYXMtbW9ocjsgPGVtYWlsPiZlbWFpbC1hbmRyZWFzLW1vaHI7PC9lbWFpbD4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9hc3BpPC9maWxlbmFtZT4pCiAgICAgIDwvcGFyYT4KCiAgICAgIDxwYXJhPgogICAgICAgIFRoaXMgZmlsZSBkZXNjcmliZXMgc2V0dGluZyB1cCB0aGUgV2luZG93cyBBU1BJIGludGVyZmFjZS4KICAgICAgPC9wYXJhPgoKICAgICAgPHBhcmE+CiAgICAgICAgPHdhcm5pbmc+PHRpdGxlPldhcm5pbmcvV2FybmluZy9XYXJuaW5nISEhISEhPC90aXRsZT4KICAgICAgICAgIDxwYXJhPlRoaXMgbWF5IHRyYXNoIHlvdXIgc3lzdGVtIGlmIHVzZWQgaW5jb3JyZWN0bHkuICBJdCBtYXkKCQkgIGV2ZW4gdHJhc2ggeW91ciBzeXN0ZW0gd2hlbiB1c2VkIDxlbXBoYXNpcz5jb3JyZWN0bHk8Lz4hCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC93YXJuaW5nPgogICAgICA8L3BhcmE+CgogICAgICA8cGFyYT4KICAgICAgICBOb3cgdGhhdCBJIGhhdmUgc2FpZCB0aGF0LiBBU1BJIGlzIGEgZGlyZWN0IGxpbmsgdG8gU0NTSSBkZXZpY2VzIGZyb20KICAgICAgICB3aW5kb3dzIHByb2dyYW1zLiBBU1BJIGp1c3QgZm9yd2FyZHMgdGhlIFNDU0kgY29tbWFuZHMgdGhhdCBwcm9ncmFtcyBzZW5kCiAgICAgICAgdG8gaXQgdG8gdGhlIFNDU0kgYnVzLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIElmIHlvdSB1c2UgdGhlIHdyb25nIFNDU0kgZGV2aWNlIGluIHlvdXIgc2V0dXAgZmlsZSwgeW91IGNhbiBzZW5kCiAgICAgICAgY29tcGxldGVseSBib2d1cyBjb21tYW5kcyB0byB0aGUgd3JvbmcgZGV2aWNlIC0gQW4gZXhhbXBsZSB3b3VsZCBiZQogICAgICAgIGZvcm1hdHRpbmcgeW91ciBoYXJkIGRyaXZlcyAoYXNzdW1pbmcgdGhlIGRldmljZSBnYXZlIHlvdSBwZXJtaXNzaW9uIC0KICAgICAgICBpZiB5b3UncmUgcnVubmluZyBhcyByb290LCBhbGwgYmV0cyBhcmUgb2ZmKS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBTbyBwbGVhc2UgbWFrZSBzdXJlIHRoYXQgPGVtcGhhc2lzPmFsbDwvZW1waGFzaXM+IFNDU0kgZGV2aWNlcyBub3QgbmVlZGVkIGJ5IHRoZSBwcm9ncmFtCiAgICAgICAgaGF2ZSB0aGVpciBwZXJtaXNzaW9ucyBzZXQgYXMgcmVzdHJpY3RlZCBhcyBwb3NzaWJsZSEKICAgICAgPC9wYXJhPgoKICAgICAgPHBhcmE+CiAgICAgICAgQ29va2Jvb2sgZm9yIHNldHRpbmcgdXAgc2Nhbm5lcjogKEF0IGxlYXN0IGhvdyBtaW5lIGlzIHRvIHdvcmspCgkod2VsbCwgZm9yIG90aGVyIGRldmljZXMgc3VjaCBhcyBDRCBidXJuZXJzLCBNTyBkcml2ZXMsIC4uLiwgdG9vKQogICAgICA8L3BhcmE+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPldpbmRvd3MgcmVxdWlyZW1lbnRzPC90aXRsZT4KICAgICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoZSBzY2FubmVyIHNvZnR3YXJlIG5lZWRzIHRvIHVzZSB0aGUgIkFkYXB0ZWMiCiAgICAgICAgICAgICAgY29tcGF0aWJsZSBkcml2ZXJzIChBU1BJKS4gQXQgbGVhc3Qgd2l0aCBNdXN0ZWssIHRoZXkKICAgICAgICAgICAgICBhbGxvdyB5b3UgdGhlIGNob2ljZSBvZiB1c2luZyB0aGUgYnVpbHQtaW4gY2FyZCBvciB0aGUKICAgICAgICAgICAgICAiQWRhcHRlYyAoQUhBKSIgY29tcGF0aWJsZSBkcml2ZXJzLiBUaGlzIHdpbGwgbm90IHdvcmsKICAgICAgICAgICAgICBhbnkgb3RoZXIgd2F5LiBTb2Z0d2FyZSB0aGF0IGFjY2Vzc2VzIHRoZSBzY2FubmVyIHZpYSBhCiAgICAgICAgICAgICAgRE9TIEFTUEkgZHJpdmVyIChlLmcuIEFTUEkyRE9TKSBpcyBzdXBwb3J0ZWQsIHRvby4gW0FNXQogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBZb3UgcHJvYmFibHkgbmVlZCBhIHJlYWwgd2luZG93cyBpbnN0YWxsIG9mIHRoZSBzb2Z0d2FyZQogICAgICAgICAgICAgIHRvIHNldCB0aGUgTFVOJ3MvU0NTSSBpZCdzIHVwIGNvcnJlY3RseS4gSSdtIG5vdCBleGFjdGx5CiAgICAgICAgICAgICAgc3VyZS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5MaW51eCByZXF1aXJlbWVudHM8L3RpdGxlPgogICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgWW91ciBTQ1NJIGNhcmQgbXVzdCBiZSBzdXBwb3J0ZWQgdW5kZXIgTGludXguIFRoaXMgd2lsbAogICAgICAgICAgICAgIG5vdCB3b3JrIHdpdGggYW4gdW5rbm93biBTQ1NJIGNhcmQuIEV2ZW4gZm9yIGNoZWFwJ24KICAgICAgICAgICAgICBjcmFwcHkgInNjYW5uZXIgb25seSIgY29udHJvbGxlcnMgc29tZSBzcGVjaWFsIExpbnV4CiAgICAgICAgICAgICAgZHJpdmVycyBleGlzdCBvbiB0aGUgbmV0LgoJICAgICAgSWYgeW91IGludGVuZCB0byB1c2UgeW91ciBJREUgZGV2aWNlLCB5b3UgbmVlZCB0byB1c2UgdGhlCgkgICAgICBpZGUtc2NzaSBlbXVsYXRpb24uCgkgICAgICBSZWFkCgkgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmxpbnV4ZG9jLm9yZy9IT1dUTy9DRC1Xcml0aW5nLUhPV1RPLmh0bWwiPgoJICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5saW51eGRvYy5vcmcvSE9XVE8vQ0QtV3JpdGluZy1IT1dUTy5odG1sPC91bGluaz4KCSAgICAgIGZvciBpZGUtc2NzaSBzZXR1cCBpbnN0cnVjdGlvbnMuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbXBpbGUgZ2VuZXJpYyBTQ1NJIGRyaXZlcnMgaW50byB5b3VyIGtlcm5lbC4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CgkgICAgICBUaGlzIHNlZW1zIHRvIGJlIG5vdCByZXF1aXJlZCBhbnkgbW9yZSBmb3IgbmV3ZXIgKDIuMi54KSBrZXJuZWxzOgogICAgICAgICAgICAgIExpbnV4IGJ5IGRlZmF1bHQgdXNlcyBzbWFsbGVyIFNDU0kgYnVmZmVycyB0aGFuIFdpbmRvd3MuCiAgICAgICAgICAgICAgVGhlcmUgaXMgYSBrZXJuZWwgYnVpbGQgZGVmaW5lIDxsaXRlcmFsPlNHX0JJR19CVUZGPC9saXRlcmFsPiAoaW4KICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2cuaDwvZmlsZW5hbWU+KSB0aGF0IGlzIGJ5IGRlZmF1bHQgc2V0IHRvbwogICAgICAgICAgICAgIGxvdy4gVGhlIFNBTkUgcHJvamVjdCByZWNvbW1lbmRzCiAgICAgICAgICAgICAgPGxpdGVyYWw+MTMwNTYwPC9saXRlcmFsPiBhbmQgdGhpcyBzZWVtcyB0byB3b3JrIGp1c3QKICAgICAgICAgICAgICBmaW5lLiBUaGlzIGRvZXMgcmVxdWlyZSBhIGtlcm5lbCByZWJ1aWxkLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBNYWtlIHRoZSBkZXZpY2VzIGZvciB0aGUgc2Nhbm5lciAoZ2VuZXJpYyBTQ1NJIGRldmljZXMpCiAgICAgICAgICAgICAgLSBsb29rIGF0IHRoZSBTQ1NJIHByb2dyYW1taW5nIEhPV1RPIGF0CiAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5saW51eGRvYy5vcmcvSE9XVE8vU0NTSS1Qcm9ncmFtbWluZy1IT1dUTy5odG1sIj4KCQkJICBodHRwOi8vd3d3LmxpbnV4ZG9jLm9yZy9IT1dUTy9TQ1NJLVByb2dyYW1taW5nLUhPV1RPLmh0bWw8L3VsaW5rPgoJICAgICAgZm9yIGRldmljZSBudW1iZXJpbmcuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIEkgd291bGQgcmVjb21tZW5kIG1ha2luZyB0aGUgc2Nhbm5lciBkZXZpY2Ugd3JpdGFibGUgYnkKICAgICAgICAgICAgICBhIGdyb3VwLiBJIG1hZGUgYSBncm91cCBjYWxsZWQKICAgICAgICAgICAgICA8bGl0ZXJhbD5zY2FubmVyPC9saXRlcmFsPiBhbmQgYWRkZWQgbXlzZWxmIHRvIGl0LgogICAgICAgICAgICAgIFJ1bm5pbmcgYXMgcm9vdCBpbmNyZWFzZXMgeW91ciByaXNrIG9mIHNlbmRpbmcgYmFkIFNDU0kKICAgICAgICAgICAgICBjb21tYW5kcyB0byB0aGUgd3JvbmcgZGV2aWNlLiBXaXRoIGEgcmVndWxhciB1c2VyLCB5b3UKICAgICAgICAgICAgICBhcmUgYmV0dGVyIHByb3RlY3RlZC4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CgkgICAgICBGb3IgV2luMzIgc29mdHdhcmUgKFdOQVNQSTMyKSwgV2luZSBoYXMgYXV0by1kZXRlY3Rpb24gaW4gcGxhY2UuCgkgICAgICBGb3IgV2luMTYgc29mdHdhcmUgKFdJTkFTUEkpLCB5b3UgbmVlZCB0byBhZGQgYSBTQ1NJIGRldmljZSBlbnRyeQoJICAgICAgZm9yIHlvdXIgcGFydGljdWxhciBzY2FubmVyIHRvIH4vLndpbmUvY29uZmlnLiBUaGUgZm9ybWF0IGlzCgkgICAgICA8bGl0ZXJhbD5bc2NzaSBjQ3RUZERdPC9saXRlcmFsPiB3aGVyZQogICAgICAgICAgICAgIDxsaXRlcmFsPiJDIiA9ICJjb250cm9sbGVyIjwvbGl0ZXJhbD4sCiAgICAgICAgICAgICAgPGxpdGVyYWw+IlQiID0gInRhcmdldCI8L2xpdGVyYWw+LCA8bGl0ZXJhbD5EPUxVTjwvbGl0ZXJhbD4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgSSBzZXQgbWluZSB1cCBhcyAgY29udHJvbGxlciA8bGl0ZXJhbD4wPC9saXRlcmFsPiwKICAgICAgICAgICAgICBUYXJnZXQgPGxpdGVyYWw+NjwvbGl0ZXJhbD4sIExVTiA8bGl0ZXJhbD4wPC9saXRlcmFsPi4KICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CltzY3NpIGMwdDZkMF0KIkRldmljZSIgPSAiL2Rldi9zZ2kiCiAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgICBZb3VycyB3aWxsIHZhcnkgd2l0aCB5b3VyIHBhcnRpY3VsYXIgU0NTSSBzZXR1cC4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5HZW5lcmFsIEluZm9ybWF0aW9uPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBtdXN0ZWsgc2Nhbm5lciBJIGhhdmUgd2FzIHNoaXBwZWQgd2l0aCBhIHBhY2thZ2UKICAgICAgICAgICJpcHBsdXMiLiBUaGlzIHByb2dyYW0gdXNlcyB0aGUgVFdBSU4gZHJpdmVyIHNwZWNpZmljYXRpb24KICAgICAgICAgIHRvIGFjY2VzcyBzY2FubmVycy4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICAoVFdBSU4gTUFOQUdFUikKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CmlwcGx1cy5leGUgJmx0Oy0mZ3Q7IChUV0FJTiBJTlRFUkZBQ0UpICZsdDstJmd0OyAoVFdBSU4gREFUQSBTT1VSQ0UuQVNQSSkgLSZndDsgV0lOQVNQSQogICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPk5PVEVTL0JVR1M8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhlIGJpZ2dlc3QgZHJ3YmFjayBpcyB0aGF0IGl0IG9ubHkgd29ya3MgdW5kZXIgTGludXggYXQgdGhlIG1vbWVudC4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgQVNQSSBjb2RlIGhhcyBvbmx5IGJlZW4gdGVzdGVkIHdpdGg6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIGEgTXVzdGVrIDgwMFNQIHdpdGggYSBCdXNsb2dpYyBjb250cm9sbGVyIHVuZGVyIExpbnV4IFtCTV0KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgYSBTaWVtZW5zIE5peGRvcmYgOTAzNiB3aXRoIEFkYXB0ZWMgQVZBLTE1MDUgdW5kZXIgTGludXgKICAgICAgICAgICAgICBhY2Nlc3NlZCB2aWEgRE9TQVNQSS4gTm90ZSB0aGF0IEkgaGFkIGNvbG9yIHByb2JsZW1zLAogICAgICAgICAgICAgIHRob3VnaCAoYmFyZWx5IHJlYWRhYmxlIHJlc3VsdCkgW0FNXQogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBhIEZ1aml0c3UgTTI1MTNBIE1PIGRyaXZlICg2NDBNQikgdXNpbmcgZ2VuZXJpYyBTQ1NJCiAgICAgICAgICAgICAgZHJpdmVycy4gRm9ybWF0dGluZyBhbmQgZWplY3Rpbmcgd29ya2VkIHBlcmZlY3RseS4KICAgICAgICAgICAgICBUaGFua3MgdG8gVXdlIEJvbm5lcyBmb3IgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSEgW0FNXQogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgIDxwYXJhPgogICAgICAgICAgSSBtYWtlIG5vIHdhcnJhbnR5IHRvIHRoZSBBU1BJIGNvZGUuIEl0IG1ha2VzIG15IHNjYW5uZXIKICAgICAgICAgIHdvcmsuIFlvdXIgZGV2aWNlcyBtYXkgZXhwbG9kZS4gSSBoYXZlIG5vIHdheSBvZiBkZXRlcm1pbmluZwogICAgICAgICAgdGhpcy4gSSB0YWtlIHplcm8gcmVzcG9uc2liaWxpdHkhCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImNvbmZpZy1vZGJjIj4KICAgICAgPHRpdGxlPlVzaW5nIE9EQkM8L3RpdGxlPgogICAgICA8cGFyYT4KICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyBPREJDIHdvcmtzIHdpdGhpbiBXaW5lIGFuZCBob3cgdG8gY29uZmlndXJlCiAgICAgICAgaXQgdG8gZG8gd2hhdCB5b3Ugd2FudCAoaWYgaXQgY2FuIGRvIHdoYXQgeW91IHdhbnQpLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIFRoZSBPREJDIHN5c3RlbSB3aXRoaW4gV2luZSwgYXMgd2l0aCB0aGUgcHJpbnRpbmcgc3lzdGVtLCBpcyBkZXNpZ25lZAogICAgICAgIHRvIGhvb2sgYWNyb3NzIHRvIHRoZSBVbml4IHN5c3RlbSBhdCBhIGhpZ2ggbGV2ZWwuICBSYXRoZXIgdGhhbgogICAgICAgIGVuc3VyaW5nIHRoYXQgYWxsIHRoZSB3aW5kb3dzIGNvZGUgd29ya3MgdW5kZXIgd2luZSBpdCB1c2VzIGEgc3VpdGFibGUKICAgICAgICBVbml4IE9EQkMgcHJvdmlkZXIsIHN1Y2ggYXMgVW5peE9EQkMuICBUaHVzIGlmIHlvdSBjb25maWd1cmUgV2luZSB0bwogICAgICAgIHVzZSB0aGUgYnVpbHQtaW4gb2RiYzMyLmRsbCwgdGhhdCBXaW5lIERMTCB3aWxsIGludGVyZmFjZSB0byB5b3VyCiAgICAgICAgVW5peCBPREJDIHBhY2thZ2UgYW5kIGxldCB0aGF0IGRvIHRoZSB3b3JrLCB3aGVyZWFzIGlmIHlvdSBjb25maWd1cmUKICAgICAgICBXaW5lIHRvIHVzZSB0aGUgbmF0aXZlIG9kYmMzMi5kbGwgaXQgd2lsbCB0cnkgdG8gdXNlIHRoZSBuYXRpdmUKICAgICAgICBPREJDMzIgZHJpdmVycyBldGMuCiAgICAgIDwvcGFyYT4KICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Vc2luZyBhIFVuaXggT0RCQyBzeXN0ZW0gd2l0aCBXaW5lPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBmaXJzdCBzdGVwIGluIHVzaW5nIGEgVW5peCBPREJDIHN5c3RlbSB3aXRoIFdpbmUgaXMsIG9mIGNvdXJzZSwKICAgICAgICAgIHRvIGdldCB0aGUgVW5peCBPREJDIHN5c3RlbSB3b3JraW5nIGl0c2VsZi4gIFRoaXMgbWF5IGludm9sdmUKICAgICAgICAgIGRvd25sb2FkaW5nIGNvZGUgb3IgUlBNcyBldGMuICBUaGVyZSBhcmUgc2V2ZXJhbCBVbml4IE9EQkMgc3lzdGVtcwogICAgICAgICAgYXZhaWxhYmxlOyB0aGUgb25lIHRoZSBhdXRob3IgaXMgdXNlZCB0byBpcyB1bml4T0RCQyAod2l0aCB0aGUKICAgICAgICAgIElCTSBEQjIgZHJpdmVyKS4gVHlwaWNhbGx5IHN1Y2ggc3lzdGVtcyB3aWxsIGluY2x1ZGUgYSB0b29sLCBzdWNoCiAgICAgICAgICBhcyA8Y29tbWFuZD5pc3FsPC9jb21tYW5kPiwgd2hpY2ggd2lsbCBhbGxvdyB5b3UgdG8gYWNjZXNzIHRoZSBkYXRhIGZyb20gdGhlIGNvbW1hbmQKICAgICAgICAgIGxpbmUgc28gdGhhdCB5b3UgY2FuIGNoZWNrIHRoYXQgdGhlIHN5c3RlbSBpcyB3b3JraW5nLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gaG9vayB0aGUgVW5peCBPREJDIGxpYnJhcnkgdG8gdGhlIHdpbmUgYnVpbHQtaW4KICAgICAgICAgIG9kYmMzMiBETEwuICBUaGUgYnVpbHQtaW4gb2RiYzMyIChjdXJyZW50bHkpIGxvb2tzIHRvIHRoZQogICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgPGVtcGhhc2lzPkxJQl9PREJDX0RSSVZFUl9NQU5BR0VSPC9lbXBoYXNpcz4KICAgICAgICAgIGZvciB0aGUgbmFtZSBvZiB0aGUgT0RCQyBsaWJyYXJ5LiAgRm9yIGV4YW1wbGUgaW4gdGhlIGF1dGhvcidzCiAgICAgICAgICAuYmFzaHJjIGZpbGUgaXMgdGhlIGxpbmU6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwcm9ncmFtbGlzdGluZz4KZXhwb3J0IExJQl9PREJDX0RSSVZFUl9NQU5BR0VSPS91c3IvbGliL2xpYm9kYmMuc28uMS4wLjAKICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IHRoZW4gaXQgbG9va3MgZm9yIGEKICAgICAgICAgIGxpYnJhcnkgY2FsbGVkIGxpYm9kYmMuc28gYW5kIHNvIHlvdSBjYW4gYWRkIGEgc3ltYm9saWMgbGluayB0bwogICAgICAgICAgZXF1YXRlIHRoYXQgdG8geW91ciBvd24gbGlicmFyeS4gIEZvciBleGFtcGxlIGFzIHJvb3QgeW91IGNvdWxkCiAgICAgICAgICBydW4gdGhlIGNvbW1hbmRzOgogICAgICAgIDwvcGFyYT4KICAgICAgICA8c2NyZWVuPgo8cHJvbXB0PiMgPC9wcm9tcHQ+PHVzZXJpbnB1dD5sbiAtcyBsaWJvZGJjLnNvLjEuMC4wIC91c3IvbGliL2xpYm9kYmMuc288L3VzZXJpbnB1dD4KPHByb21wdD4jIDwvcHJvbXB0Pjx1c2VyaW5wdXQ+L3NiaW4vbGRjb25maWc8L3VzZXJpbnB1dD4KICAgICAgICA8L3NjcmVlbj4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBsYXN0IHN0ZXAgaW4gY29uZmlndXJpbmcgdGhpcyBpcyB0byBlbnN1cmUgdGhhdCBXaW5lIGlzIHNldCB1cAogICAgICAgICAgdG8gcnVuIHRoZSBidWlsdC1pbiB2ZXJzaW9uIG9mIG9kYmMzMi5kbGwsIGJ5IG1vZGlmeWluZyB0aGUgRExMCiAgICAgICAgICBjb25maWd1cmF0aW9uLiAgVGhpcyBidWlsdC1pbiBETEwgbWVyZWx5IGFjdHMgYXMgYSBzdHViIGJldHdlZW4gdGhlCiAgICAgICAgICBjYWxsaW5nIGNvZGUgYW5kIHRoZSBVbml4IE9EQkMgbGlicmFyeS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBJZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgdGhlbiB5b3UgY2FuIHVzZSB0aGUgZGVidWdtc2cgY2hhbm5lbAogICAgICAgICAgb2RiYzMyIHRvIHRyYWNlIHdoYXQgaXMgaGFwcGVuaW5nLiAgT25lIHdvcmQgb2Ygd2FybmluZy4gIFNvbWUKICAgICAgICAgIHByb2dyYW1zIGFjdHVhbGx5IGNoZWF0IGEgbGl0dGxlIGFuZCBieXBhc3MgdGhlIE9EQkMgbGlicmFyeS4gIEZvcgogICAgICAgICAgZXhhbXBsZSB0aGUgQ3J5c3RhbCBSZXBvcnRzIGVuZ2luZSBnb2VzIHRvIHRoZSByZWdpc3RyeSB0byBjaGVjayBvbgogICAgICAgICAgdGhlIERTTi4gIFRoZSBmaXggZm9yIHRoaXMgaXMgZG9jdW1lbnRlZCBhdCB1bml4T0RCQydzIHNpdGUgd2hlcmUKICAgICAgICAgIHRoZXJlIGlzIGEgc2VjdGlvbiBvbiB1c2luZyB1bml4T0RCQyB3aXRoIFdpbmUuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPlVzaW5nIFdpbmRvd3MgT0RCQyBkcml2ZXJzPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIERvZXMgYW55b25lIGFjdHVhbGx5IGhhdmUgYW55IGV4cGVyaWVuY2Ugb2YgdGhpcyBhbmQgYW55dGhpbmcgdG8KICAgICAgICAgIGFkZD8KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CiAgICA8L3NlY3QxPgoKICA8L2NoYXB0ZXI+Cgo8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKTG9jYWwgdmFyaWFibGVzOgptb2RlOiBzZ21sCnNnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS11c2VyLnNnbWwiICJzZXQiICJib29rIiAiY2hhcHRlciIgIiIpCkVuZDoKLS0+Cg==