ICA8Y2hhcHRlciBpZD0iY29uZmlnLXdpbmUtbWFpbiI+CiAgICA8dGl0bGU+Q29uZmlndXJpbmcgV2luZTwvdGl0bGU+CiAgICA8cGFyYT4KICAgICAgTm93IHRoYXQgeW91IGhvcGVmdWxseSBtYW5hZ2VkIHRvIHN1Y2Nlc3NmdWxseSBpbnN0YWxsCiAgICAgIHRoZSBXaW5lIHByb2dyYW0gZmlsZXMsCiAgICAgIHRoaXMgY2hhcHRlciB3aWxsIHRlbGwgeW91IGhvdyB0byBjb25maWd1cmUgdGhlIFdpbmUgZW52aXJvbm1lbnQKICAgICAgcHJvcGVybHkgdG8gcnVuIHlvdXIgV2luZG93cyBwcm9ncmFtcy4KICAgIDwvcGFyYT4KICAgIDxwYXJhPgogICAgICBGaXJzdCwgd2UnbGwgZ2l2ZSB5b3UgYW4gb3ZlcnZpZXcgYWJvdXQgd2hpY2gga2luZHMgb2YKICAgICAgY29uZmlndXJhdGlvbiBhbmQgcHJvZ3JhbSBleGVjdXRpb24gYXNwZWN0cyBhIGZ1bGx5IGNvbmZpZ3VyZWQKICAgICAgV2luZG93cyBlbnZpcm9ubWVudCBoYXMgdG8gZnVsZmlsbCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBtYW55CiAgICAgIFdpbmRvd3MgcHJvZ3JhbXMgcnVuIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGVuY291bnRlcmluZyBhbnkKICAgICAgbWlzY29uZmlndXJlZCBvciBtaXNzaW5nIGl0ZW1zLgogICAgICBOZXh0LCB3ZSdsbCBzaG93IHlvdSB3aGljaCBlYXN5IGhlbHBlciBwcm9ncmFtcyBleGlzdAogICAgICB0byBlbmFibGUgZXZlbiBub3ZpY2UgdXNlcnMgdG8gY29tcGxldGUgdGhlIFdpbmUgZW52aXJvbm1lbnQKICAgICAgY29uZmlndXJhdGlvbiBpbiBhIGZhc3QgYW5kIGVhc3kgd2F5LgogICAgICBUaGUgbmV4dCBzZWN0aW9uIHdpbGwgZXhwbGFpbiB0aGUgcHVycG9zZSBvZiB0aGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUsCiAgICAgIGFuZCB3ZSdsbCBsaXN0IGFsbCBvZiBpdHMgc2V0dGluZ3MuCiAgICAgIEFmdGVyIHRoYXQsIHRoZSBuZXh0IHNlY3Rpb24gd2lsbCBkZXRhaWwgdGhlIG1vc3QgaW1wb3J0YW50IGFuZAogICAgICB1bmZvcnR1bmF0ZWx5IG1vc3QgZGlmZmljdWx0IGNvbmZpZ3VyYXRpb24gcGFydDoKICAgICAgaG93IHRvIGNvbmZpZ3VyZSB0aGUgZmlsZSBzeXN0ZW0gYW5kIERPUyBkcml2ZSBlbnZpcm9ubWVudCB0aGF0CiAgICAgIFdpbmRvd3MgcHJvZ3JhbXMgbmVlZC4KICAgICAgSW4gdGhlIGxhc3Qgc3RlcCB3ZSdsbCB0ZWxsIHlvdSBob3cgdG8gZXN0YWJsaXNoIGEgd29ya2luZyBXaW5kb3dzCiAgICAgIHJlZ2lzdHJ5IGJhc2UuCiAgICAgIEZpbmFsbHksIHRoZSByZW1haW5pbmcgcGFydHMgb2YgdGhpcyBjaGFwdGVyIGNvbnRhaW4gZGVzY3JpcHRpb25zCiAgICAgIG9mIHNwZWNpZmljIFdpbmUgY29uZmlndXJhdGlvbiBpdGVtcyB0aGF0IG1pZ2h0IGFsc28gYmUKICAgICAgb2YgaW50ZXJlc3QgdG8geW91LgogICAgPC9wYXJhPgoKICAgIDxzZWN0MSBpZD0iY29uZmlnLXJlcXVpcmVtZW50cy13aW5kb3dzIiB4cmVmbGFiZWw9Ii0tSW5zdGFsbGluZyBTZWN0aW9uLS0iPgogICAgICA8dGl0bGU+V2hhdCBhcmUgdGhlIHJlcXVpcmVtZW50cyBvZiBhIGZ1bGx5IHdvcmtpbmcgV2luZG93cyBlbnZpcm9ubWVudD88L3RpdGxlPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIEEgV2luZG93cyBpbnN0YWxsYXRpb24gaXMgYSB2ZXJ5IGNvbXBsZXggc3RydWN0dXJlLiBJdCBjb25zaXN0cyBvZgoJICBtYW55IGRpZmZlcmVudCBwYXJ0cyB3aXRoIHZlcnkgZGlmZmVyZW50IGZ1bmN0aW9uYWxpdHkuCgkgIFdlJ2xsIHRyeSB0byBvdXRsaW5lIHRoZSBtb3N0IGltcG9ydGFudCBhc3BlY3RzIG9mIGl0LgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgUmVnaXN0cnkuIE1hbnkga2V5cyBhcmUgc3VwcG9zZWQgdG8gZXhpc3QgYW5kIGNvbnRhaW4KICAgICAgICAgICAgICBtZWFuaW5nZnVsIGRhdGEsIGV2ZW4gaW4gYSBuZXdseS1pbnN0YWxsZWQgV2luZG93cy4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgRGlyZWN0b3J5IHN0cnVjdHVyZS4gQXBwbGljYXRpb25zIGV4cGVjdCB0byBmaW5kIGFuZC9vcgogICAgICAgICAgICAgIGluc3RhbGwgdGhpbmdzIGluIHNwZWNpZmljIHByZWRldGVybWluZWQgbG9jYXRpb25zLiBNb3N0CiAgICAgICAgICAgICAgb2YgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIGV4cGVjdGVkIHRvIGV4aXN0LiBCdXQgdW5saWtlCiAgICAgICAgICAgICAgVW5peCBkaXJlY3Rvcnkgc3RydWN0dXJlcywgbW9zdCBvZiB0aGVzZSBsb2NhdGlvbnMgYXJlCiAgICAgICAgICAgICAgbm90IGhhcmRjb2RlZCwgYW5kIGNhbiBiZSBxdWVyaWVkIHZpYSB0aGUgV2luZG93cyBBUEkKICAgICAgICAgICAgICBhbmQgdGhlIHJlZ2lzdHJ5LiBUaGlzIHBsYWNlcyBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBvbgogICAgICAgICAgICAgIGEgV2luZSBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFN5c3RlbSBETExzLiBJbiBXaW5kb3dzLCB0aGVzZSB1c3VhbGx5IHJlc2lkZSBpbiB0aGUKICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtPC9maWxlbmFtZT4gKG9yCiAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbTMyPC9maWxlbmFtZT4pIGRpcmVjdG9yeS4gU29tZSBXaW5kb3dzCiAgICAgICAgICAgICAgcHJvZ3JhbXMgY2hlY2sgZm9yIHRoZWlyIGV4aXN0ZW5jZSBpbiB0aGVzZQogICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGxvYWQgdGhlbS4gV2hpbGUgV2luZQogICAgICAgICAgICAgIGlzIGFibGUgdG8gbG9hZCBpdHMgb3duIGludGVybmFsIERMTHMKICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGVzKSB3aGVuIHRoZSBwcm9ncmFtCiAgICAgICAgICAgICAgYXNrcyBmb3IgYSBETEwsIFdpbmUgZG9lcyBub3Qgc2ltdWxhdGUgdGhlIHByZXNlbmNlIG9mCiAgICAgICAgICAgICAgbm9uLWV4aXN0ZW50IGZpbGVzLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIFdoaWxlIHRoZSB1c2VycyBhcmUgb2YgY291cnNlIGZyZWUgdG8gc2V0IHVwIGV2ZXJ5dGhpbmcKICAgICAgICAgIHRoZW1zZWx2ZXMsIHRoZSBXaW5lIHRlYW0gd2lsbCBtYWtlIHRoZSBhdXRvbWF0ZWQgV2luZSBzb3VyY2UKICAgICAgICAgIGluc3RhbGxhdGlvbiBzY3JpcHQsIDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+LAogICAgICAgICAgZG8gZXZlcnl0aGluZyB3ZSBmaW5kIG5lY2Vzc2FyeSB0byBkbzsgcnVubmluZyB0aGUKICAgICAgICAgIGNvbnZlbnRpb25hbCA8dXNlcmlucHV0PmNvbmZpZ3VyZSAmJiBtYWtlIGRlcGVuZCAmJiBtYWtlICYmIG1ha2UKICAgICAgICAgICAgaW5zdGFsbDwvdXNlcmlucHV0PiBjeWNsZSBpcyB0aHVzIG5vdCByZWNvbW1lbmRlZCwgdW5sZXNzCiAgICAgICAgICB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gQXQgdGhlIG1vbWVudCwKICAgICAgICAgIDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+IGlzIGFibGUgdG8gY3JlYXRlIGEKICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSwgaW5zdGFsbCB0aGUgcmVnaXN0cnksIGFuZCBjcmVhdGUgdGhlCiAgICAgICAgICBkaXJlY3Rvcnkgc3RydWN0dXJlIGl0c2VsZi4KICAgICAgICA8L3BhcmE+CgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImNvbmZpZy1oZWxwZXItcHJvZ3JhbXMiPgogICAgICA8dGl0bGU+RWFzeSBjb25maWd1cmF0aW9uIGhlbHBlciBwcm9ncmFtczwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBNYW5hZ2luZyB0aGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUgc2V0dGluZ3MgY2FuIGJlIGEKCWRpZmZpY3VsdCB0YXNrLCBzb21ldGltZXMgdG9vIGRpZmZpY3VsdCBmb3Igc29tZSBwZW9wbGUuCglUaGF0J3Mgd2h5IHRoZXJlIGFyZSBzb21lIGhlbHBlciBhcHBsaWNhdGlvbnMgZm9yIGVhc2lseSBzZXR0aW5nIHVwIGFuCglpbml0aWFsIHdpbmUgY29uZmlndXJhdGlvbiBmaWxlIHdpdGggdXNlZnVsIGRlZmF1bHQgc2V0dGluZ3MuCiAgICAgIDwvcGFyYT4KCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLWhlbHBlci13aW5lc2V0dXB0ayI+CiAgICAgICAgPHRpdGxlPldpbmVTZXR1cFRrPC90aXRsZT4KCTxwYXJhPgoJICBXaW5lU2V0dXBUayBpcyBhIGdyYXBoaWNhbCBXaW5lIGNvbmZpZ3VyYXRpb24gdG9vbCB3aXRoCgkgIGluY3JlZGlibHkgZWFzeSBoYW5kbGluZyBvZiBXaW5lIGNvbmZpZ3VyYXRpb24gaXNzdWVzLCB0byBiZQoJICB1c2VkIGZvciBjb25maWd1cmluZyB0aGUgV2luZSBlbnZpcm9ubWVudCBhZnRlciBoYXZpbmcKCSAgaW5zdGFsbGVkIHRoZSBXaW5lIGZpbGVzLgoJICBJdCBoYXMgYmVlbiB3cml0dGVuIGJ5IENvZGVXZWF2ZXJzIGluIDIwMDAgYXMgcGFydCBvZiBhIGhvc3QKCSAgb2Ygb3RoZXIgZWZmb3J0cyB0byBtYWtlIFdpbmUgbW9yZSBkZXNrdG9wIG9yaWVudGVkLCBhbmQgdXBkYXRlZAoJICBpbiAyMDAzIGJ5IFZpbmNlbnQgQulyb24sIEFsZXggUGFzYWR5biBhbmQgSXZhbiBMZW8gTXVycmF5LVNtaXRoLgoJPC9wYXJhPgoJPHBhcmE+CgkgIElmIHlvdSdyZSB1c2luZyBEZWJpYW4sIHNpbXBseSBpbnN0YWxsIHRoZSBXaW5lU2V0dXBUawoJICBwYWNrYWdlIChhcyByb290KToKCTwvcGFyYT4KICA8c2NyZWVuPgogIDxwcm9tcHQ+IyA8L3Byb21wdD48dXNlcmlucHV0PmFwdC1nZXQgaW5zdGFsbCB3aW5lc2V0dXB0azwvdXNlcmlucHV0PgogIDwvc2NyZWVuPgoJPHBhcmE+CgkgIElmIHlvdSdyZSB1c2luZyBhbm90aGVyIGRpc3RyaWJ1dGlvbiwgeW91IGNhbiBnZXQgV2luZVNldHVwVGsgZnJvbSB0aGUKCSAgPHVsaW5rIHVybD0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjI0MSI+CiAgICAgICAgICBzb3VyY2Vmb3JnZS5uZXQgV2luZSBkb3dubG9hZCBwYWdlPC91bGluaz4KCTwvcGFyYT4KICAgICAgPC9zZWN0Mj4KICAgICAgCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLWhlbHBlci13aW5laW5zdGFsbCI+CiAgICAgICAgPHRpdGxlPndpbmVpbnN0YWxsPC90aXRsZT4KCTxwYXJhPgoJICA8Y29tbWFuZD53aW5laW5zdGFsbDwvY29tbWFuZD4gaXMgYSBzbWFsbCBjb25maWd1cmF0aW9uIHRvb2wKCSAgcmVzaWRpbmcgYXMgPGZpbGVuYW1lPnRvb2xzL3dpbmVpbnN0YWxsPC9maWxlbmFtZT4gaW4gYSBXaW5lCgkgIHNvdXJjZSBjb2RlIHRyZWUuICBJdCBoYXMgYmVlbiB3cml0dGVuIHRvIGFsbG93IGZvciBhbiBlYXN5CgkgIGFuZCBjb21wbGV0ZSBjb21waWxhdGlvbi9pbnN0YWxsYXRpb24gb2YgV2luZSBzb3VyY2UgY29kZSBmb3IKCSAgcGVvcGxlIHdobyBkb24ndCBib3RoZXIgd2l0aCByZWFkaW5nIGhlYXBzIG9mIHZlcnkgdmFsdWFibGUKCSAgYW5kIGluZm9ybWF0aXZlIGRvY3VtZW50YXRpb24gOy0pCgk8L3BhcmE+Cgk8cGFyYT4KCSAgT25jZSB5b3UgaGF2ZSBzdWNjZXNzZnVsbHkgZXh0cmFjdGVkIHRoZSBXaW5lIHNvdXJjZSBjb2RlCgkgIHRyZWUsIGNoYW5nZSB0byB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgaXQgYW5kIHRoZW4gcnVuIChhcwoJICB1c2VyKToKCTwvcGFyYT4KICA8c2NyZWVuPgogIDxwcm9tcHQ+JCA8L3Byb21wdD48dXNlcmlucHV0Pi4vdG9vbHMvd2luZWluc3RhbGw8L3VzZXJpbnB1dD4KICA8L3NjcmVlbj4KCTxwYXJhPgoJICBEb2luZyBzbyB3aWxsIGNvbXBpbGUgV2luZSwgaW5zdGFsbCBXaW5lIGFuZCBjb25maWd1cmUgdGhlCgkgIFdpbmUgZW52aXJvbm1lbnQgKGVpdGhlciBieSBwcm92aWRpbmcgYWNjZXNzIHRvIGEgV2luZG93cwoJICBwYXJ0aXRpb24gb3IgYnkgY3JlYXRpbmcgYSBwcm9wZXJseSBjb25maWd1cmVkIG5vLXdpbmRvd3MKCSAgZGlyZWN0b3J5IGVudmlyb25tZW50KS4KCTwvcGFyYT4KCiAgICAgIDwvc2VjdDI+CjwhLS0KICAgICAgQ29tbWVudGluZyBvdXQgdW50aWwgd2luZWNmZyBkb2Vzbid0IGFjdHVhbGx5IGRvIHNvbWV0aGluZy4KICAgICAgPHNlY3QyIGlkPSJjb25maWctaGVscGVyLXdpbmVjZmciPgogICAgICAgIDx0aXRsZT53aW5lY2ZnPC90aXRsZT4KCTxwYXJhPgoJICA8Y29tbWFuZD53aW5lY2ZnPC9jb21tYW5kPiBpcyBhIHNtYWxsIGdyYXBoaWNhbCBjb25maWd1cmF0aW9uIHRvb2wKCSAgcmVzaWRpbmcgYXMgPGZpbGVuYW1lPnByb2dyYW1zL3dpbmVjZmc8L2ZpbGVuYW1lPiBpbiBhIFdpbmUKCSAgc291cmNlIGNvZGUgdHJlZS4gSXQgaXMgYSBXaW5lbGliIGFwcCBtYWtpbmcgdXNlIG9mIHN0YW5kYXJkCgkgIFdpbjMyIEdVSSBjb250cm9scyB0byBlYXNpbHkgY3VzdG9taXplIGVudHJpZXMgaW4gYSBXaW5lCgkgIGNvbmZpZ3VyYXRpb24gZmlsZS4KCTwvcGFyYT4KICAgICAgPC9zZWN0Mj4KLS0+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0iY29uZmlnLXZlcmlmeSI+CiAgICAgIDx0aXRsZT5WZXJpZmljYXRpb24gb2YgY29ycmVjdCBjb25maWd1cmF0aW9uPC90aXRsZT4KCiAgICAgIDxwYXJhPgogICAgICAgIFRPRE86IEFmdGVyIHlvdSBoYXZlIGZpbmlzaGVkIGNvbmZpZ3VyaW5nIFdpbmUgeW91IGNhbiB2ZXJpZnkKICAgICAgICB5b3VyIFdpbmUgY29uZmlndXJhdGlvbiBieSBydW5uaW5nIHdpbmVjZmcuCiAgICAgICAgVGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgYWRkZWQgdG8gd2luZWNmZwogICAgICAgIGluIHRoZSBuZWFyIGZ1dHVyZS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBQbGVhc2UgY2hlY2sgb3V0IHRoZQogICAgICAgIGNvbmZpZ3VyYXRpb24gZG9jdW1lbnRhdGlvbiBiZWxvdyB0byBmaW5kIG91dCBtb3JlIGFib3V0IFdpbmUncwogICAgICAgIGNvbmZpZ3VyYXRpb24sIG9yIHByb2NlZWQgdG8gdGhlIDxsaW5rIGxpbmtlbmQ9ImJ1Z3MiPlRyb3VibGVzaG9vdGluZwogICAgICAgIGNoYXB0ZXI8L2xpbms+LgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0iY29uZmlnLWZpbGUiPgogICAgICA8dGl0bGU+VGhlIFdpbmUgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KICAgICAgPHBhcmE+CiAgICAgICAgVGhpcyBzZWN0aW9uIGlzIG1lYW50IHRvIGNvbnRhaW4gYm90aCBhbiBlYXN5IHN0ZXAtYnktc3RlcCBpbnRyb2R1Y3Rpb24KCXRvIHRoZSBXaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSAoZm9yIG5ldyBXaW5lIHVzZXJzKQoJYW5kIGEgY29tcGxldGUgcmVmZXJlbmNlIHRvIGFsbCBXaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXR0aW5ncyAoZm9yCglhZHZhbmNlZCB1c2VycykuCiAgICAgIDwvcGFyYT4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBGaWxlIEludHJvZHVjdGlvbjwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgdGhlIGNlbnRyYWwgZmlsZSB0byBzdG9yZQoJICBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBXaW5lLgoJICBUaGlzIGZpbGUgKHdoaWNoIGlzIGNhbGxlZCA8ZmlsZW5hbWU+Y29uZmlnPC9maWxlbmFtZT4pCgkgIGNhbiBiZSBmb3VuZCBpbiB0aGUgc3ViIGRpcmVjdG9yeSA8ZmlsZW5hbWU+LndpbmUvPC9maWxlbmFtZT4KCSAgb2YgeW91ciB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkKCSAgKGRpcmVjdG9yeSA8ZmlsZW5hbWU+L2hvbWUvdXNlci88L2ZpbGVuYW1lPikuIEluIG90aGVyIHdvcmRzLCB0aGUgV2luZQoJICBjb25maWd1cmF0aW9uIGZpbGUgaXMgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4uCgkgIE5vdGUgdGhhdCBzaW5jZSB0aGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgYSBwYXJ0IG9mIHRoZQoJICBXaW5lIHJlZ2lzdHJ5IGZpbGUgc3lzdGVtLCB0aGlzIGZpbGUgYWxzbwoJICA8ZW1waGFzaXM+cmVxdWlyZXM8L2VtcGhhc2lzPiBhIGNvcnJlY3QgIldJTkUgUkVHSVNUUlkKCSAgVmVyc2lvbiAyIiBoZWFkZXIgbGluZSB0byBiZSByZWNvZ25pemVkIHByb3Blcmx5LCBqdXN0IGxpa2UKCSAgYWxsIG90aGVyIFdpbmUgcmVnaXN0cnkgdGV4dCBmaWxlcyAoanVzdCBpbiBjYXNlIHlvdSBkZWNpZGVkCgkgIHRvIHdyaXRlIHlvdXIgb3duIHJlZ2lzdHJ5IGZpbGUgZnJvbSBzY3JhdGNoIGFuZCB3b25kZXIgd2h5CgkgIFdpbmUga2VlcHMgcmVqZWN0aW5nIGl0KS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgc2V0dGluZ3MgYXZhaWxhYmxlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaW5jbHVkZToKICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIERyaXZlcyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlbQogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgRGlyZWN0b3J5IHNldHRpbmdzCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBQb3J0IHNldHRpbmdzCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBUaGUgV2luZSBsb29rIGFuZCBmZWVsCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBXaW5lJ3MgRExMIHVzYWdlCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBXaW5lJ3MgbXVsdGltZWRpYSBkcml2ZXJzIGFuZCBETEwgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgIDwvcGFyYT4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgT3IgTW9kaWZ5aW5nIFRoZSBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgogICAgICAgIDxwYXJhPgoJICBJZiB5b3UganVzdCBpbnN0YWxsZWQgV2luZSBmb3IgdGhlIGZpcnN0IHRpbWUgYW5kIHdhbnQgdG8KCSAgZmluaXNoIFdpbmUgaW5zdGFsbGF0aW9uIGJ5IGNvbmZpZ3VyaW5nIGl0IG5vdywgdGhlbiB5b3UgY291bGQKCSAgdXNlIG91ciBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIDxmaWxlbmFtZT5jb25maWc8L2ZpbGVuYW1lPgoJICAod2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBkaXJlY3RvcnkKCSAgPGZpbGVuYW1lPmRvY3VtZW50YXRpb24vc2FtcGxlcy88L2ZpbGVuYW1lPiBvZiB0aGUgV2luZSBzb3VyY2UKCSAgY29kZSBkaXJlY3RvcnkpIGFzIGEgYmFzZSBmb3IgYWRhcHRpbmcgdGhlIFdpbmUgY29uZmlndXJhdGlvbgoJICBmaWxlIHRvIHRoZSBzZXR0aW5ncyB5b3Ugd2FudC4KCSAgRmlyc3QsIEkgc2hvdWxkIG1lbnRpb24gdGhhdCB5b3Ugc2hvdWxkIG5vdCBmb3JnZXQgdG8gbWFrZQoJICBzdXJlIHRoYXQgYW55IHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZSBhdAoJICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBoYXMgYmVlbiBzYWZlbHkgbW92ZWQgb3V0CgkgIG9mIHRoZSB3YXkgaW5zdGVhZCBvZiBzaW1wbHkgb3ZlcndyaXRpbmcgaXQgd2hlbiB5b3Ugd2lsbCBub3cKCSAgY29weSBvdmVyIHRoZSBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlLgogICAgICAgIDwvcGFyYT4KCTxwYXJhPgoJICBJZiB5b3UgZG9uJ3QgaGF2ZSBhIHByZS1leGlzdGluZyBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHRodXMKCSAgbmVlZCB0byBjb3B5IG92ZXIgb3VyIHNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgdG8gdGhlCgkgIHN0YW5kYXJkIFdpbmUgY29uZmlndXJhdGlvbiBmaWxlIGxvY2F0aW9uLCBkbyBpbiBhCgkgIDxnbG9zc3Rlcm0+dGVybWluYWw8L2dsb3NzdGVybT46CiAgPHNjcmVlbj4KICA8cHJvbXB0PiQgPC8+PHVzZXJpbnB1dD5ta2RpciB+Ly53aW5lLzwvPgogIDxwcm9tcHQ+JCA8Lz48dXNlcmlucHV0PmNwIDxyZXBsYWNlYWJsZT5kaXJfdG9fd2luZV9zb3VyY2VfY29kZTwvcmVwbGFjZWFibGU+L2RvY3VtZW50YXRpb24vc2FtcGxlcy9jb25maWcgfi8ud2luZS9jb25maWc8Lz4KICA8L3NjcmVlbj4KCSAgT3RoZXJ3aXNlLCBzaW1wbHkgdXNlIHRoZSBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZQoJICBhdCA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPi4KCTwvcGFyYT4KCTxwYXJhPgoJICBOb3cgeW91IGNhbiBzdGFydCBhZGFwdGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlJ3Mgc2V0dGluZ3Mgd2l0aCBhbgoJICA8Z2xvc3N0ZXJtPmVkaXRvcjwvZ2xvc3N0ZXJtPiBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRpb24KCSAgYmVsb3cuCgkgIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIDxlbXBoYXNpcz5vbmx5PC9lbXBoYXNpcz4gY2hhbmdlCgkgIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXR0aW5ncyBpZiB3aW5lc2VydmVyIGlzIG5vdCBydW5uaW5nIChpbgoJICBvdGhlciB3b3JkczogaWYgeW91ciB1c2VyIGRvZXNuJ3QgaGF2ZSBhIFdpbmUgc2Vzc2lvbiBydW5uaW5nKSwKCSAgb3RoZXJ3aXNlIFdpbmUgd29uJ3QgdXNlIHRoZW0gLSBhbmQgZXZlbiB3b3JzZSwgd2luZXNlcnZlciB3aWxsCgkgIG92ZXJ3cml0ZSB0aGVtIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBvbmNlIHdpbmVzZXJ2ZXIgcXVpdHMhIQoJPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctZmlsZS1ob3ciPgogICAgICAgIDx0aXRsZT5XaGF0IERvZXMgSXQgQ29udGFpbj88L3RpdGxlPgoKICAgICAgICA8cGFyYT4KCSAgTGV0J3Mgc3RhcnQgYnkgZ2l2aW5nIGFuIG92ZXJ2aWV3IG9mIHdoaWNoIHNlY3Rpb25zIGEKCSAgY29uZmlndXJhdGlvbiBmaWxlIG1heSBjb250YWluLCBhbmQgd2hldGhlciB0aGUgaW5jbHVzaW9uIG9mCgkgIHRoZSByZXNwZWN0aXZlIHNlY3Rpb24gaXMgPGVtcGhhc2lzPm5lZWRlZDwvZW1waGFzaXM+IG9yIG9ubHkgPGVtcGhhc2lzPnJlY29tbWVuZGVkPC9lbXBoYXNpcz4gKCJyZWNtZCIpLgoJPC9wYXJhPgoKICAgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0iYWxsIj4KICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PlNlY3Rpb24gTmFtZTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+TmVlZGVkPzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+V2hhdCBpdCBEb2VzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0RyaXZlIHhdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT55ZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlNldHMgdXAgZHJpdmUgbWFwcGluZ3MgdG8gYmUgdXNlZCBieSBXaW5lPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5Plt3aW5lXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+eWVzPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5HZW5lcmFsIHNldHRpbmdzIGZvciBXaW5lPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltEbGxPdmVycmlkZXNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5yZWNtZDwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+T3ZlcnJpZGVzIGRlZmF1bHRzIGZvciBETEwgbG9hZGluZzwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5beDExZHJ2XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkdyYXBoaWNzIGRyaXZlciBzZXR0aW5nczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bZm9udHNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT55ZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkZvbnQgYXBwZWFyYW5jZSBhbmQgcmVjb2duaXRpb248L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3NlcmlhbHBvcnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkNPTSBwb3J0cyBzZWVuIGJ5IFdpbmU8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3BhcmFsbGVscG9ydHNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+TFBUIHBvcnRzIHNlZW4gYnkgV2luZTwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bcHBkZXZdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+UGFyYWxsZWxwb3J0IGVtdWxhdGlvbjwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bc3Bvb2xlcl08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5QcmludCBzcG9vbGluZzwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bcG9ydHNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+RGlyZWN0IHBvcnQgYWNjZXNzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltEZWJ1Z108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5XaGF0IHRvIGRvIHdpdGggY2VydGFpbiBkZWJ1ZyBtZXNzYWdlczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bUmVnaXN0cnldPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+U3BlY2lmaWVzIGxvY2F0aW9ucyBvZiB3aW5kb3dzIHJlZ2lzdHJ5IGZpbGVzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5Pltwcm9ncmFtc108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5Qcm9ncmFtcyB0byBiZSBydW4gYXV0b21hdGljYWxseTwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bQ29uc29sZV08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5Db25zb2xlIHNldHRpbmdzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltDbGlwYm9hcmRdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+SW50ZXJhY3Rpb24gZm9yIFdpbmUgYW5kIFgxMSBjbGlwYm9hcmQ8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W2FmbWRpcnNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+UG9zdHNjcmlwdCBkcml2ZXIgc2V0dGluZ3M8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W1dpbk1NXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+eWVzPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5NdWx0aW1lZGlhIHNldHRpbmdzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltBcHBEZWZhdWx0c108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5PdmVyd3JpdGUgdGhlIHNldHRpbmdzIG9mIHByZXZpb3VzIHNlY3Rpb25zIGZvciBzcGVjaWFsIHByb2dyYW1zPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGdyb3VwPgogICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KCiAgICAgICAgPHBhcmE+CgkgIE5vdyBsZXQncyBleHBsYWluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgc2VjdGlvbnMgaW4gYQoJICBkZXRhaWxlZCB3YXkuCgk8L3BhcmE+CgkKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEcml2ZSB4XSBTZWN0aW9uczwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KCSAgICBGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGVzZSBjb25maWd1cmF0aW9uIGZpbGUKCSAgICBzZWN0aW9ucyB3aGljaCBhcmUgdXNlZCB0byBzZXQgdXAgRE9TIGRyaXZlIG1hcHBpbmdzIHRvIFVuaXgKCSAgICBkaXJlY3Rvcnkgc3BhY2UsIHBsZWFzZSBsb29rIGF0IHRoZSA8bGluawoJICAgIGxpbmtlbmQ9ImNvbmZpZy1kcml2ZS1zZWN0aW9ucyI+V2luZSBmaWxlIHN5c3RlbSBsYXllcgoJICAgIGNvbmZpZ3VyYXRpb24gc2VjdGlvbjwvbGluaz4uCgkgIDwvcGFyYT4KCTwvc2VjdDM+CgogICAgICAgIDxzZWN0MyBpZD0iY29uZmlnLXdpbmUiPgogICAgICAgICAgPHRpdGxlPlRoZSBbd2luZV0gU2VjdGlvbiA8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBbd2luZV0gc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5zIGFsbCBraW5kcwogICAgICAgICAgICBvZiBnZW5lcmFsIHNldHRpbmdzIGZvciBXaW5lLgogIAkgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJXaW5kb3dzIiA9ICJjOlxcd2luZG93cyIKIlN5c3RlbSIgPSAiYzpcXHdpbmRvd3NcXHN5c3RlbSIKIlRlbXAiID0gImM6XFx0ZW1wIgoiUGF0aCIgPSAiYzpcXHdpbmRvd3M7YzpcXHdpbmRvd3NcXHN5c3RlbTtjOlxcYmxhbmNvIgoiU2hvd0RpclN5bWxpbmtzIiA9ICIxIgogICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgoJICAgIEZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGRyaXZlIGxheWVyIGNvbmZpZ3VyYXRpb24gYW5kCgkgICAgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcGFyYW1ldGVycywgcGxlYXNlIGxvb2sgYXQgdGhlIDxsaW5rCgkgICAgbGlua2VuZD0iY29uZmlnLWRyaXZlLW1haW4iPldpbmUgZmlsZSBzeXN0ZW0gbGF5ZXIKCSAgICBjb25maWd1cmF0aW9uIHNlY3Rpb248L2xpbms+LgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iR3JhcGhpY3NEcml2ZXIiID0gIngxMWRydnx0dHlkcnYiPC9wcm9ncmFtbGlzdGluZz4KICAJICAgIFNldHMgdGhlIGdyYXBoaWNzIGRyaXZlciB0byB1c2UgZm9yIFdpbmUgb3V0cHV0LgogIAkgICAgeDExZHJ2IGlzIGZvciBYMTEgb3V0cHV0LCB0dHlkcnYgaXMgZm9yIHRleHQgY29uc29sZSBvdXRwdXQuCiAgCSAgICBXQVJOSU5HOiBpZiB5b3UgdXNlIHR0eWRydiBoZXJlLCB0aGVuIHlvdSB3b24ndCBiZSBhYmxlIHRvIHJ1bgogIAkgICAgYSBsb3Qgb2YgV2luZG93cyBHVUkgcHJvZ3JhbXMgKHR0eWRydiBpcyBzdGlsbCBwcmV0dHkgImJyb2tlbiIKICAJICAgIGF0IHJ1bm5pbmcgZ3JhcGhpY2FsIGFwcHMpLiBUaHVzIHRoaXMgb3B0aW9uIGlzIG1haW5seSBpbnRlcmVzdGluZwogIAkgICAgZm9yIGUuZy4gZW1iZWRkZWQgdXNlIG9mIFdpbmUgaW4gd2ViIHNlcnZlciBzY3JpcHRzLgogIAkgICAgTm90ZSB0aGF0IHR0eWRydiBpcyBzdGlsbCB2ZXJ5IGxhY2tpbmcsIHNvIGlmIGl0IGRvZXNuJ3Qgd29yaywKICAJICAgIHJlc29ydCB0byB1c2luZyAieHZmYiIsIGEgdmlydHVhbCBYMTEgc2VydmVyLgogIAkgICAgQW5vdGhlciB3YXkgdG8gcnVuIFdpbmUgd2l0aG91dCBkaXNwbGF5IHdvdWxkIGJlIHRvIHJ1biBYMTEKICAJICAgIHZpYSBYdm5jLCB0aGVuIGNvbm5lY3QgdG8gdGhhdCBWTkMgZGlzcGxheSB1c2luZyB4dm5jdmlld2VyCiAgCSAgICAodGhhdCB3YXkgeW91J3JlIHN0aWxsIGFibGUgdG8gY29ubmVjdCB0byB5b3VyIGFwcCBhbmQKICAJICAgIGNvbmZpZ3VyZSBpdCBpZiBuZWVkIGJlKS4KICAJICA8L3BhcmE+CiAgCSAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUHJpbnRlciIgPSAib2ZmfG9uIjwvcHJvZ3JhbWxpc3Rpbmc+IFRlbGxzIHdpbmUKICAgICAgICAgICAgd2hldGhlciB0byBhbGxvdyBwcmludGluZyB2aWEgcHJpbnRlciBkcml2ZXJzIHRvIHdvcmsuCiAgCSAgICBUaGlzIG9wdGlvbiBpc24ndCBuZWVkZWQgZm9yIG91ciBidWlsdC1pbiBwc2RydiBwcmludGVyIGRyaXZlcgogIAkgICAgYXQgYWxsLgogICAgICAgICAgICBVc2luZyB0aGVzZSB0aGluZ3MgYXJlIHByZXR0eSBhbHBoYSwgc28geW91IG1pZ2h0IHdhbnQgdG8KICAgICAgICAgICAgd2F0Y2ggb3V0LiBTb21lIHBlb3BsZSBtaWdodCBmaW5kIGl0IHVzZWZ1bCwgaG93ZXZlci4gSWYKICAgICAgICAgICAgeW91J3JlIG5vdCBwbGFubmluZyB0byB3b3JrIG9uIHByaW50aW5nIHZpYSB3aW5kb3dzIHByaW50ZXIKICAJICAgIGRyaXZlcnMsIGRvbid0IGV2ZW4gYWRkIHRoaXMgdG8geW91ciB3aW5lIGNvbmZpZ3VyYXRpb24gZmlsZQogIAkgICAgKEl0IHByb2JhYmx5IGlzbid0IGFscmVhZHkgaW4gaXQpLgogIAkgICAgQ2hlY2sgb3V0IHRoZSBbc3Bvb2xlcl0gYW5kIFtwYXJhbGxlbHBvcnRzXSBzZWN0aW9ucyB0b28uCiAgICAgICAgICA8L3BhcmE+CiAgCSAgPHBhcmE+CiAgCSAgICA8cHJvZ3JhbWxpc3Rpbmc+IlNoZWxsTGlua2VyIiA9ICJ3aW5lc2hlbGxsaW5rIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgCSAgICBUaGlzIHNldHRpbmcgc3BlY2lmaWVzIHRoZSBzaGVsbCBsaW5rZXIgc2NyaXB0IHRvIHVzZSBmb3Igc2V0dGluZwogIAkgICAgdXAgV2luZG93cyBpY29ucyBpbiBlLmcuIEtERSBvciBHbm9tZSB0aGF0IGFyZSBnaXZlbiBieSBwcm9ncmFtcwogIAkgICAgbWFraW5nIHVzZSBvZiBhcHByb3ByaWF0ZSBzaGVsbDMyLmRsbCBmdW5jdGlvbmFsaXR5IHRvIGNyZWF0ZQogIAkgICAgaWNvbnMgb24gdGhlIGRlc2t0b3Avc3RhcnQgbWVudSBkdXJpbmcgaW5zdGFsbGF0aW9uLgogIAkgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlN5bWJvbFRhYmxlRmlsZSIgPSAid2luZS5zeW0iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2V0cyB1cCB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgZm9yIHRoZSB3aW5lIGRlYnVnZ2VyLiBZb3UKICAgICAgICAgICAgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBmaWRkbGUgd2l0aCB0aGlzLiBNYXkgYmUgdXNlZnVsIGlmCiAgICAgICAgICAgIHlvdXIgd2luZSBpcyBzdHJpcHBlZC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy1kbGxvdmVycmlkZXMiPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGxsT3ZlcnJpZGVzXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgZm9ybWF0IGZvciB0aGlzIHNlY3Rpb24gaXMgdGhlIHNhbWUgZm9yIGVhY2ggbGluZToKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiZsdDtETEw+eywmbHQ7RExMPiwmbHQ7RExMPi4uLn0gPSAmbHQ7Rk9STT57LCZsdDtGT1JNPiwmbHQ7Rk9STT4uLi59PC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGxvYWQgYnVpbHQtaW4gS0VSTkVMIHBhaXIgKGNhc2UgZG9lc24ndAogICAgICAgICAgICBtYXR0ZXIgaGVyZSk6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4ia2VybmVsLGtlcm5lbDMyIiA9ICJidWlsdGluIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRvIGxvYWQgdGhlIG5hdGl2ZSBDT01NRExHIHBhaXIsIGJ1dCBpZiB0aGF0IGRvZXNuJ3Qgd29yawogICAgICAgICAgICB0cnkgYnVpbHQtaW46CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iY29tbWRsZyxjb21kbGczMiIgPSAibmF0aXZlLCBidWlsdGluIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRvIGxvYWQgdGhlIG5hdGl2ZSBDT01DVEwzMjoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJjb21jdGwzMiIgPSAibmF0aXZlIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEhlcmUgaXMgYSBnb29kIGdlbmVyaWMgc2V0dXAgKEFzIGl0IGlzIGRlZmluZWQgaW4gY29uZmlnCiAgICAgICAgICAgIHRoYXQgd2FzIGluY2x1ZGVkIHdpdGggeW91ciB3aW5lIHBhY2thZ2UpOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CltEbGxPdmVycmlkZXNdCiJycGNydDQiICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm9sZWF1dDMyIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoib2xlMzIiICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJjb21tZGxnIiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImNvbWRsZzMyIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoidmVyIiAgICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJ2ZXJzaW9uIiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKInNoZWxsIiAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoic2hlbGwzMiIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJzaGZvbGRlciIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKInNobHdhcGkiICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoic2hkb2N2dyIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJsemV4cGFuZCIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImx6MzIiICAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiY29tY3RsMzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJjb21tY3RybCIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImFkdmFwaTMyIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiY3J0ZGxsIiAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtcHIiICAgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIndpbnNwb29sLmRydiIgPSAiYnVpbHRpbiwgbmF0aXZlIgoiZGRyYXciICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJkaW5wdXQiICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImRzb3VuZCIgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoib3BlbmdsMzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtc3ZjcnQiICAgICAgID0gIm5hdGl2ZSwgYnVpbHRpbiIKIm1zdmlkZW8iICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibXN2ZnczMiIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtY2ljZGEuZHJ2IiAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1jaXNlcS5kcnYiICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibWNpd2F2ZS5kcnYiICA9ICJidWlsdGluLCBuYXRpdmUiCiJtY2lhdmkuZHJ2IiAgID0gIm5hdGl2ZSwgYnVpbHRpbiIKIm1jaWFuaW0uZHJ2IiAgPSAibmF0aXZlLCBidWlsdGluIgoibXNhY20uZHJ2IiAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtc2FjbSIgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1zYWNtMzIiICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibWlkaW1hcC5kcnYiICA9ICJidWlsdGluLCBuYXRpdmUiCjsgeW91IGNhbiBzcGVjaWZ5IHByb2dyYW1zIHRvbwoibm90ZXBhZC5leGUiICA9ICJuYXRpdmUsIGJ1aWx0aW4iCjsgZGVmYXVsdCBmb3IgYWxsIG90aGVyIERMTHMKIioiID0gIm5hdGl2ZSwgYnVpbHRpbiIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxub3RlPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBJZiBsb2FkaW5nIG9mIHRoZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIGZpcnN0IGZhaWxzLAogICAgICAgICAgICAgIHdpbmUgd2lsbCBqdXN0IGdvIG9uIGJ5IHVzaW5nIHRoZSBzZWNvbmQgb3IgdGhpcmQgb3B0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L25vdGU+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzIGlkPSJjb25maWctZm9udHMiPgogICAgICAgICAgPHRpdGxlPlRoZSBbZm9udHNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBzZXRzIHVwIHdpbmUncyBmb250IGhhbmRsaW5nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUmVzb2x1dGlvbiIgPSAiOTYiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2luY2UgdGhlIHdheSBYIGhhbmRsZXMgZm9udHMgaXMgZGlmZmVyZW50IGZyb20gdGhlIHdheQogICAgICAgICAgICBXaW5kb3dzIGRvZXMsIHdpbmUgdXNlcyBhIHNwZWNpYWwgbWVjaGFuaXNtIHRvIGRlYWwgd2l0aAogICAgICAgICAgICB0aGVtLiBJdCBtdXN0IHNjYWxlIHRoZW0gdXNpbmcgdGhlIG51bWJlciBkZWZpbmVkIGluIHRoZQogICAgICAgICAgICAiUmVzb2x1dGlvbiIgc2V0dGluZy4gNjAtMTIwIGFyZSByZWFzb25hYmxlIHZhbHVlcywgOTYgaXMKICAgICAgICAgICAgYSBuaWNlIGluIHRoZSBtaWRkbGUgb25lLiBJZiB5b3UgaGF2ZSB0aGUgcmVhbCB3aW5kb3dzCiAgICAgICAgICAgIGZvbnRzIGF2YWlsYWJsZSAsIHRoaXMgcGFyYW1ldGVyIHdpbGwgbm90IGJlIGFzCiAgICAgICAgICAgIGltcG9ydGFudC4gT2YgY291cnNlLCBpdCdzIGFsd2F5cyBnb29kIHRvIGdldCB5b3VyIFggZm9udHMKICAgICAgICAgICAgd29ya2luZyBhY2NlcHRhYmx5IGluIHdpbmUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0IiA9ICItYWRvYmUtdGltZXMtIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvbnQgd2luZSB1c2VzLiBGb29sIGFyb3VuZCB3aXRoIGl0IGlmIHlvdSdkIGxpa2UuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICBPUFRJT05BTDoKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgPGxpdGVyYWw+QWxpYXM8L2xpdGVyYWw+IHNldHRpbmcgYWxsb3dzIHlvdSB0byBtYXAgYW4gWCBmb250IHRvIGEgZm9udAogICAgICAgICAgICB1c2VkIGluIHdpbmUuIFRoaXMgaXMgZ29vZCBmb3IgYXBwcyB0aGF0IG5lZWQgYSBzcGVjaWFsIGZvbnQgeW91IGRvbid0IGhhdmUsCiAgICAgICAgICAgIGJ1dCBhIGdvb2QgcmVwbGFjZW1lbnQgZXhpc3RzLiBUaGUgc3ludGF4IGlzIGxpa2Ugc286CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iQWxpYXNYIiA9ICJbRmFrZSB3aW5kb3dzIG5hbWVdLFtSZWFsIFggbmFtZV0iJmx0OyxvcHRpb25hbCAibWFza2luZyIgc2VjdGlvbj48L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBSZXBsYWNlICJBbGlhc1giIHdpdGggIkFsaWFzMCIsCiAgICAgICAgICAgIHRoZW4gIkFsaWFzMSIgYW5kIHNvIG9uLiBUaGUgZmFrZSB3aW5kb3dzIG5hbWUgaXMgdGhlIG5hbWUKICAgICAgICAgICAgdGhhdCB0aGUgZm9udCB3aWxsIGJlIHVuZGVyIGEgd2luZG93cyBhcHAgaW4gd2luZS4gVGhlCiAgICAgICAgICAgIHJlYWwgWCBuYW1lIGlzIHRoZSBmb250IG5hbWUgYXMgc2VlbiBieSBYIChSdW4KICAgICAgICAgICAgInhmb250c2VsIikuIFRoZSBvcHRpb25hbCAibWFza2luZyIgc2VjdGlvbiBhbGxvd3MgeW91IHRvCiAgICAgICAgICAgIHV0aWxpemUgdGhlIGZha2Ugd2luZG93cyBuYW1lIHlvdSBkZWZpbmUuIElmIGl0IGlzIG5vdAogICAgICAgICAgICB1c2VkLCB0aGVuIHdpbmUgd2lsbCBqdXN0IHRyeSB0byBleHRyYWN0IHRoZSBmYWtlIHdpbmRvd3MKICAgICAgICAgICAgbmFtZSBpdHNlbGYgYW5kIG5vdCB1c2UgdGhlIHZhbHVlIHlvdSBlbnRlci4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYW4gYWxpYXMgd2l0aG91dCBtYXNraW5nLiBUaGUgZm9udCB3aWxsIHNob3cgdXAgaW4gd2luZG93cwogICAgICAgICAgICBhcHBzIGFzICJHb29nbGUiLgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkFsaWFzMCIgPSAiRm9vLC0tZ29vZ2xlLSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgd2l0aCBtYXNraW5nIGVuYWJsZWQuIFRoZSBmb250IHdpbGwgc2hvdyB1cCBhcyAiRm9vIiBpbgogICAgICAgICAgICB3aW5kb3dzIGFwcHMuCiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iQWxpYXMxIiA9ICJGb28sLS1nb29nbGUtLHN1YnN0IjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGNoZWNrIG91dCB0aGUgPGxpbmsgbGlua2VuZD0iY29uZmlnLWZvbnRzLW1haW4iPkZvbnRzPC9saW5rPgogIAkgICAgY2hhcHRlci4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy1pbyI+CiAgICAgICAgICA8dGl0bGU+VGhlIFtzZXJpYWxwb3J0c10sIFtwYXJhbGxlbHBvcnRzXSwgW3Nwb29sZXJdLCBhbmQgW3BvcnRzXSBTZWN0aW9uczwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgRXZlbiB0aG91Z2ggaXQgc291bmRzIGxpa2UgYSBsb3Qgb2Ygc2VjdGlvbnMsIHRoZXNlIGFyZQogICAgICAgICAgICBhbGwgY2xvc2VseSByZWxhdGVkLiBUaGV5IGFyZSBhbGwgZm9yIGNvbW11bmljYXRpb25zIGFuZAogICAgICAgICAgICBwYXJhbGxlbCBwb3J0cy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3NlcmlhbHBvcnRzXSBzZWN0aW9uIHRlbGxzIHdpbmUgd2hhdCBzZXJpYWwgcG9ydHMgaXQKICAgICAgICAgICAgaXMgYWxsb3dlZCB0byB1c2UuCiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iQ29tWCIgPSAiL2Rldi90dHlTWSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBSZXBsYWNlIDxsaXRlcmFsPlg8L2xpdGVyYWw+IHdpdGggdGhlIG51bWJlciBvZiB0aGUgQ09NCiAgICAgICAgICAgIHBvcnQgaW4gV2luZG93cyAoMS04KSBhbmQgPGxpdGVyYWw+WTwvbGl0ZXJhbD4gd2l0aCB0aGUKICAgICAgICAgICAgbnVtYmVyIG9mIGl0IGluIDxsaXRlcmFsPlg8L2xpdGVyYWw+IChVc3VhbGx5IHRoZSBudW1iZXIKICAgICAgICAgICAgb2YgdGhlIHBvcnQgaW4gV2luZG93cyBtaW51cyAxKS4gPGxpdGVyYWw+Q29tWDwvbGl0ZXJhbD4KICAgICAgICAgICAgY2FuIGFjdHVhbGx5IGVxdWFsIGFueSBkZXZpY2UKICAgICAgICAgICAgKDxtZWRpYWxhYmVsPi9kZXYvbW9kZW08L21lZGlhbGFiZWw+IGlzIGFjY2VwdGFibGUpLiBJdCBpcwogICAgICAgICAgICBub3QgYWx3YXlzIG5lY2Vzc2FyeSB0byBkZWZpbmUgYW55IENPTSBwb3J0cyAoQW4gb3B0aW9uYWwKICAgICAgICAgICAgc2V0dGluZykuIEhlcmUgaXMgYW4gZXhhbXBsZToKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJDb20xIiA9ICIvZGV2L3R0eVMwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFVzZSBhcyBtYW55IG9mIHRoZXNlIGFzIHlvdSBsaWtlIGluIHRoZSBzZWN0aW9uIHRvIGRlZmluZQogICAgICAgICAgICBhbGwgb2YgdGhlIENPTSBwb3J0cyB5b3UgbmVlZC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3BhcmFsbGVscG9ydHNdIHNlY3Rpb24gc2V0cyB1cCBhbnkgcGFyYWxsZWwgcG9ydHMKICAgICAgICAgICAgdGhhdCB3aWxsIGJlIGFsbG93ZWQgYWNjZXNzIHVuZGVyIHdpbmUuCiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iTHB0WCIgPSAiL2Rldi9scFkiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU291bmRzIGZhbWlsaWFyPyBTeW50YXggaXMganVzdCBsaWtlIHRoZSBDT00gcG9ydCBzZXR0aW5nLgogICAgICAgICAgICBSZXBsYWNlIDxsaXRlcmFsPlg8L2xpdGVyYWw+IHdpdGggYSB2YWx1ZSBmcm9tIDEtNCBhcyBpdAogICAgICAgICAgICBpcyBpbiBXaW5kb3dzIGFuZCA8bGl0ZXJhbD5ZPC9saXRlcmFsPiB3aXRoIGEgdmFsdWUgZnJvbQogICAgICAgICAgICAwLTMgKDxsaXRlcmFsPlk8L2xpdGVyYWw+IGlzIHVzdWFsbHkgdGhlIHZhbHVlIGluIHdpbmRvd3MKICAgICAgICAgICAgbWludXMgMSwganVzdCBsaWtlIGZvciBDT00gcG9ydHMpLiBZb3UgZG9uJ3QgYWx3YXlzIG5lZWQKICAgICAgICAgICAgdG8gZGVmaW5lIGEgcGFyYWxsZWwgcG9ydCAoQUtBLCBpdCdzIG9wdGlvbmFsKS4gQXMgd2l0aAogICAgICAgICAgICB0aGUgb3RoZXIgc2VjdGlvbiwgTHB0WCBjYW4gZXF1YWwgYW55IGRldmljZSAoTWF5YmUKICAgICAgICAgICAgPG1lZGlhbGFiZWw+L2Rldi9wcmludGVyPC9tZWRpYWxhYmVsPikuIEhlcmUgaXMgYW4KICAgICAgICAgICAgZXhhbXBsZTogIDxwcm9ncmFtbGlzdGluZz4iTHB0MSIgPSAiL2Rldi9scDAiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgVGhlIFtzcG9vbGVyXSBzZWN0aW9uIHdpbGwgaW5mb3JtIHdpbmUgd2hlcmUgdG8gc3Bvb2wKICAgICAgICAgICAgcHJpbnQgam9icy4gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gdHJ5IHByaW50aW5nLiBXaW5lCiAgICAgICAgICAgIGRvY3MgY2xhaW0gdGhhdCBzcG9vbGluZyBpcyAicmF0aGVyIHByaW1pdGl2ZSIgYXQgdGhpcwogICAgICAgICAgICB0aW1lLCBzbyBpdCB3b24ndCB3b3JrIHBlcmZlY3RseS4gPGVtcGhhc2lzPkl0IGlzIG9wdGlvbmFsLjwvZW1waGFzaXM+IFRoZSBvbmx5CiAgICAgICAgICAgIHNldHRpbmcgeW91IHVzZSBpbiB0aGlzIHNlY3Rpb24gd29ya3MgdG8gbWFwIGEgcG9ydCAoTFBUMSwKICAgICAgICAgICAgZm9yIGV4YW1wbGUpIHRvIGEgZmlsZSBvciBhIGNvbW1hbmQuIEhlcmUgaXMgYW4gZXhhbXBsZSwKICAgICAgICAgICAgbWFwcGluZyBMUFQxIHRvIHRoZSBmaWxlIDxmaWxlbmFtZT5vdXQucHM8L2ZpbGVuYW1lPjoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJMUFQxOiIgPSAib3V0LnBzIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBtYXBzIHByaW50aW5nIGpvYnMgdG8gTFBUMSB0byB0aGUKICAgICAgICAgICAgY29tbWFuZCA8Y29tbWFuZD5scHI8L2NvbW1hbmQ+LiBOb3RpY2UgIHRoZSB8OgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkxQVDE6IiA9ICJ8bHByIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBbcG9ydHNdIHNlY3Rpb24gaXMgdXN1YWxseSB1c2VmdWwgb25seSBmb3IgcGVvcGxlIHdobwogICAgICAgICAgICBuZWVkIGRpcmVjdCBwb3J0IGFjY2VzcyBmb3IgcHJvZ3JhbXMgcmVxdWlyaW5nIGRvbmdsZXMgb3IKICAgICAgICAgICAgc2Nhbm5lcnMuIDxlbXBoYXNpcz5JZiB5b3UgZG9uJ3QgbmVlZCBpdCwgZG9uJ3QgdXNlCgkgICAgaXQhPC9lbXBoYXNpcz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+InJlYWQiID0gIjB4Nzc5LDB4Mzc5LDB4MjgwLTB4MmEwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEdpdmVzIGRpcmVjdCByZWFkIGFjY2VzcyB0byB0aG9zZSBJTydzLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4id3JpdGUiID0gIjB4Nzc5LDB4Mzc5LDB4MjgwLTB4MmEwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEdpdmVzIGRpcmVjdCB3cml0ZSBhY2Nlc3MgdG8gdGhvc2UgSU8ncy4gSXQncyBwcm9iYWJseSBhCiAgICAgICAgICAgIGdvb2QgaWRlYSB0byBrZWVwIHRoZSB2YWx1ZXMgb2YgdGhlCiAgICAgICAgICAgIDxsaXRlcmFsPnJlYWQ8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD53cml0ZTwvbGl0ZXJhbD4KICAgICAgICAgICAgc2V0dGluZ3MgdGhlIHNhbWUuIFRoaXMgc3R1ZmYgd2lsbCBvbmx5IHdvcmsgd2hlbiB5b3UncmUKICAgICAgICAgICAgcm9vdC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy1kZWJ1Zy1ldGMiPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGVidWddLCBbUmVnaXN0cnldLCBhbmQgW3Byb2dyYW1zXSBTZWN0aW9uczwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgW0RlYnVnXSBpcyB1c2VkIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSBkZWJ1ZyBtZXNzYWdlcywgYW5kIHRvCiAgICAgICAgICAgIG91dHB1dCB0aGVtIHRvIGEgZmlsZS4gVGhlIGxhdHRlciBpcyByYXJlbHkgdXNlZC4gPGVtcGhhc2lzPlRoZXNlCiAgICAgICAgICAgIGFyZSBhbGwgb3B0aW9uYWwgYW5kIHlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGFkZCBvcgogICAgICAgICAgICByZW1vdmUgYW55dGhpbmcgaW4gdGhpcyBzZWN0aW9uIHRvIHlvdXIgY29uZmlnLjwvZW1waGFzaXM+IChJbiBleHRyZW1lCiAgICAgICAgICAgIGNhc2VzIHlvdSBtYXkgd2FudCB0byB1c2UgdGhlc2Ugb3B0aW9ucyB0byBtYW5hZ2UgdGhlIGFtb3VudAogICAgICAgICAgICBvZiBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIDxwYXJhbWV0ZXI+LS1kZWJ1Z21zZyArcmVsYXkKICAgICAgICAgICAgPC9wYXJhbWV0ZXI+IG9wdGlvbi4pCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJGaWxlIiA9ICIvYmxhbmNvIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdGhlIGxvZ2ZpbGUgZm9yIHdpbmUuIFNldCB0byBDT04gdG8gbG9nIHRvIHN0YW5kYXJkIG91dC4KICAgICAgICAgICAgPGVtcGhhc2lzPlRoaXMgaXMgcmFyZWx5IHVzZWQuPC9lbXBoYXNpcz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlNweUV4Y2x1ZGUiID0gIldNX1NJWkU7V01fVElNRVI7IjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEV4Y2x1ZGVzIGRlYnVnIG1lc3NhZ2VzIGFib3V0IDxjb25zdGFudD5XTV9TSVpFPC9jb25zdGFudD4KICAgICAgICAgICAgYW5kIDxjb25zdGFudD5XTV9USU1FUjwvY29uc3RhbnQ+IGluIHRoZSBsb2dmaWxlLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iU3B5SW5jbHVkZSIgPSAiV01fU0laRTtXTV9USU1FUjsiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgSW5jbHVkZXMgZGVidWcgbWVzc2FnZXMgYWJvdXQgPGNvbnN0YW50PldNX1NJWkU8L2NvbnN0YW50PgogICAgICAgICAgICBhbmQgPGNvbnN0YW50PldNX1RJTUVSPC9jb25zdGFudD4gaW4gdGhlIGxvZ2ZpbGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJSZWxheUluY2x1ZGUiID0gInVzZXIzMi5DcmVhdGVXaW5kb3dBO2NvbWN0bDMyLioiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgSW5jbHVkZSBvbmx5IHRoZSBsaXN0ZWQgZnVuY3Rpb25zIGluIGEKICAgICAgICAgICAgPHBhcmFtZXRlcj4tLWRlYnVnbXNnICtyZWxheTwvcGFyYW1ldGVyPiB0cmFjZS4gIFRoaXMgZW50cnkgaXMKICAgICAgICAgICAgaWdub3JlZCBpZiB0aGVyZSBpcyBhIDxwYXJhbWV0ZXI+UmVsYXlFeGNsdWRlPC9wYXJhbWV0ZXI+IGVudHJ5LgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUmVsYXlFeGNsdWRlIiA9ICJSdGxFbnRlckNyaXRpY2FsU2VjdGlvbjtSdGxMZWF2ZUNyaXRpY2FsU2VjdGlvbiI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBFeGNsdWRlIHRoZSBsaXN0ZWQgZnVuY3Rpb25zIGluIGEKICAgICAgICAgICAgPHBhcmFtZXRlcj4tLWRlYnVnbXNnICtyZWxheTwvcGFyYW1ldGVyPiB0cmFjZS4gIFRoaXMgZW50cnkKICAgICAgICAgICAgb3ZlcnJpZGVzIGFueSBzZXR0aW5ncyBpbiBhIDxwYXJhbWV0ZXI+UmVsYXlJbmNsdWRlPC9wYXJhbWV0ZXI+CiAgICAgICAgICAgIGVudHJ5LiAgSWYgbmVpdGhlciBlbnRyeSBpcyBwcmVzZW50IHRoZW4gdGhlIHRyYWNlIGluY2x1ZGVzCiAgICAgICAgICAgIGV2ZXJ5dGhpbmcuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgSW4gYm90aCBlbnRyaWVzIHRoZSBmdW5jdGlvbnMgbWF5IGJlIHNwZWNpZmllZCBlaXRoZXIgYXMgYQogICAgICAgICAgICBmdW5jdGlvbiBuYW1lIG9yIGFzIGEgbW9kdWxlIGFuZCBmdW5jdGlvbi4gIEluIHRoaXMgbGF0dGVyCiAgICAgICAgICAgIGNhc2Ugc3BlY2lmeSBhbiBhc3RlcmlzayBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgdG8gaW5jbHVkZS9leGNsdWRlCiAgICAgICAgICAgIGFsbCBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbUmVnaXN0cnldIGNhbiBiZSB1c2VkIHRvIHRlbGwgd2luZSB3aGVyZSB5b3VyIG9sZCB3aW5kb3dzCiAgICAgICAgICAgIHJlZ2lzdHJ5IGZpbGVzIGV4aXN0LiBUaGlzIHNlY3Rpb24gaXMgY29tcGxldGVseSBvcHRpb25hbAogICAgICAgICAgICBhbmQgdXNlbGVzcyB0byBwZW9wbGUgdXNpbmcgd2luZSB3aXRob3V0IGFuIGV4aXN0aW5nCiAgICAgICAgICAgIHdpbmRvd3MgaW5zdGFsbGF0aW9uLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iVXNlckZpbGVOYW1lIiA9ICIvZGlycy90by91c2VyLnJlZyI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgeW91ciBvbGQgPGZpbGVuYW1lPnVzZXIucmVnPC9maWxlbmFtZT4gZmlsZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbcHJvZ3JhbXNdIGNhbiBiZSB1c2VkIHRvIHNheSB3aGF0IHByb2dyYW1zIHJ1biB1bmRlcgogICAgICAgICAgICBzcGVjaWFsIGNvbmRpdGlvbnMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0IiA9ICIvcHJvZ3JhbS90by9leGVjdXRlLmV4ZSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBTZXRzIHRoZSBwcm9ncmFtIHRvIGJlIHJ1biBpZiB3aW5lIGlzIHN0YXJ0ZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcHJvZ3JhbS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlN0YXJ0dXAiID0gIi9wcm9ncmFtL3RvL2V4ZWN1dGUuZXhlIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdGhlIHByb2dyYW0gdG8gYXV0b21hdGljYWxseSBiZSBydW4gYXQgc3RhcnR1cCBldmVyeSB0aW1lLgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0MyBpZD0iY29uZmlnLXdpbm1tIj4KICAgICAgICAgIDx0aXRsZT5UaGUgW1dpbk1NXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbV2luTU1dIGlzIHVzZWQgdG8gZGVmaW5lIHdoaWNoIG11bHRpbWVkaWEgZHJpdmVycyBoYXZlIHRvIGJlIGxvYWRlZC4gU2luY2UKICAJICAgIHRob3NlIGRyaXZlcnMgbWF5IGRlcGVuZCBvbiB0aGUgbXVsdGltZWRpYSBpbnRlcmZhY2VzIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbQogIAkgICAgKE9TUywgQUxTQS4uLiB0byBuYW1lIGEgZmV3KSwgaXQncyBuZWVkZWQgdG8gYmUgYWJsZSB0byBjb25maWd1cmUgd2hpY2ggZHJpdmVyCiAgCSAgICBoYXMgdG8gYmUgbG9hZGVkLgogICAgICAgICAgPC9wYXJhPgoKICAgICAgICAgIDxwYXJhPgogIAkgICAgVGhlIGNvbnRlbnQgb2YgdGhlIHNlY3Rpb24gbG9va3MgbGlrZToKICAJICAgIDxwcm9ncmFtbGlzdGluZz4KW1dpbk1NXQoiRHJpdmVycyIgPSAid2luZW9zcy5kcnYiCiJXYXZlTWFwcGVyIiA9ICJtc2FjbS5kcnYiCiJNaWRpTWFwcGVyIiA9ICJtaWRpbWFwLmRydiIKICAJICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgCSAgICBBbGwgdGhlIGtleXMgbXVzdCBiZSBkZWZpbmVkOgogIAkgICAgPGl0ZW1pemVkbGlzdD4KICAJICAgICAgPGxpc3RpdGVtPgogIAkgICAgICAgIDxwYXJhPgogIAkJICBUaGUgIkRyaXZlcnMiIGtleSBpcyBhICc7JyBzZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGVzIG5hbWUsIGVhY2ggb2YKICAJCSAgdGhlbSBjb250YWluaW5nIGEgbG93IGxldmVsIGRyaXZlci4gQWxsIHRob3NlIGRyaXZlcnMgd2lsbCBiZSBsb2FkZWQKICAJCSAgd2hlbiBNTVNZU1RFTS9XSU5NTSBpcyBzdGFydGVkIGFuZCB3aWxsIHByb3ZpZGUgdGhlaXIgaW5uZXIgZmVhdHVyZXMuCiAgCSAgICAgICAgPC9wYXJhPgogIAkgICAgICA8L2xpc3RpdGVtPgogIAkgICAgICA8bGlzdGl0ZW0+CiAgCSAgICAgICAgPHBhcmE+CiAgCQkgIFRoZSAiV2F2ZU1hcHBlciIgcmVwcmVzZW50cyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIFdhdmUKICAJCSAgTWFwcGVyIGRyaXZlci4gT25seSBvbmUgd2F2ZSBtYXBwZXIgY2FuIGJlIGRlZmluZWQgaW4gdGhlIHN5c3RlbS4KICAJICAgICAgICA8L3BhcmE+CiAgCSAgICAgIDwvbGlzdGl0ZW0+CiAgCSAgICAgIDxsaXN0aXRlbT4KICAJICAgICAgICA8cGFyYT4KICAJCSAgVGhlICJNaWRpTWFwcGVyIiByZXByZXNlbnRzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgY29udGFpbmluZyB0aGUgTUlESQogIAkJICBNYXBwZXIgZHJpdmVyLiBPbmx5IG9uZSBNSURJIG1hcHBlciBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgc3lzdGVtLgogIAkgICAgICAgIDwvcGFyYT4KICAJICAgICAgPC9saXN0aXRlbT4KICAJICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgPC9wYXJhPgogIAk8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy1uZXR3b3JrIj4KICAgICAgICAgIDx0aXRsZT5UaGUgW05ldHdvcmtdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFtOZXR3b3JrXSBjb250YWlucyBzZXR0aW5ncyByZWxhdGVkIHRvCiAgICAgICAgICAgIG5ldHdvcmtpbmcuIEN1cnJlbnRseSB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSB0aGF0IGNhbiBiZSBzZXQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPlVzZURuc0NvbXB1dGVyTmFtZTwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgQSBib29sZWFuIHNldHRpbmcgKGRlZmF1bHQ6IDxsaXRlcmFsPlk8L2xpdGVyYWw+KQogICAgICAgICAgICAgICAgICB0aGF0IGFmZmVjdHMgdGhlIHdheSBXaW5lIHNldHMgdGhlIGNvbXB1dGVyIG5hbWUuIFRoZSBjb21wdXRlcgogICAgICAgICAgICAgICAgICBuYW1lIGluIHRoZSBXaW5kb3dzIHdvcmxkIGlzIHRoZSBzby1jYWxsZWQgPGVtcGhhc2lzPk5ldEJJT1MgbmFtZTwvZW1waGFzaXM+LgogICAgICAgICAgICAgICAgICBJdCBpcyBjb250YWluZWQgaW4gdGhlIDx2YXJuYW1lPkNvbXB1dGVyTmFtZTwvdmFybmFtZT4gaW4gdGhlIHJlZ2lzdHJ5IGVudHJ5CiAgICAgICAgICAgICAgICAgIDx2YXJuYW1lPkhLRVlfTE9DQUxfTUFDSElORVxTeXN0ZW1cQ3VycmVudENvbnRyb2xTZXRcQ29udHJvbFxDb21wdXRlck5hbWVcQ29tcHV0ZXJOYW1lPC92YXJuYW1lPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gIlkiIG9yIG1pc3NpbmcsIFdpbmUgd2lsbCBzZXQgdGhlCiAgICAgICAgICAgICAgICAgIE5ldEJJT1MgbmFtZSB0byB0aGUgVW5peCBob3N0IG5hbWUgb2YgeW91ciBjb21wdXRlciwgaWYKICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IHRydW5jYXRlZCB0byAzMSBjaGFyYWN0ZXJzLiBUaGUgVW5peCBob3N0bmFtZSBpcyB0aGUgb3V0cHV0CiAgICAgICAgICAgICAgICAgIG9mIHRoZSBzaGVsbCBjb21tYW5kIDxjb21tYW5kPmhvc3RuYW1lPC9jb21tYW5kPiwgdXAgdG8gYnV0IG5vdAogICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIGZpcnN0IGRvdCAoJy4nKS4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIG1lYW5zIHRoYXQKICAgICAgICAgICAgICAgICAgV2luZG93cyBwcm9ncmFtcyBydW5uaW5nIHVuZGVyIFdpbmUgY2Fubm90IGNoYW5nZSB0aGUgTmV0QklPUyBjb21wdXRlciBuYW1lLgogICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byAiTiIsIFdpbmUgd2lsbCB1c2UgdGhlIHJlZ2lzdHJ5IHZhbHVlIGFib3ZlCiAgICAgICAgICAgICAgICAgIHRvIHNldCB0aGUgTmV0QklPUyBuYW1lLiBPbmx5IGlmIHRoZSByZWdpc3RyeSBlbnRyeSBkb2Vzbid0IGV4aXN0ICh1c3VhbGx5CiAgICAgICAgICAgICAgICAgIG9ubHkgZHVyaW5nIHRoZSBmaXJzdCB3aW5lIHN0YXJ0dXApIGl0IHdpbGwgdXNlIHRoZSBVbml4IGhvc3RuYW1lIGFzCiAgICAgICAgICAgICAgICAgIHVzdWFsLiBXaW5kb3dzIHByb2dyYW1zIGNhbiBjaGFuZ2UgdGhlIE5ldEJJT1MgbmFtZS4gVGhlIGNoYW5nZQogICAgICAgICAgICAgICAgICB3aWxsIGJlIGVmZmVjdGl2ZSBhZnRlciBhICJyZWJvb3QiLCBpLmUuIGFmdGVyIHJlc3RhcnRpbmcgV2luZS4KICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0MyBpZD0iY29uZmlnLWFwcGRlZmF1bHRzIj4KICAgICAgICAgIDx0aXRsZT5UaGUgW0FwcERlZmF1bHRzXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgc2VjdGlvbiBpcyB1c2VkIHRvIG92ZXJ3cml0ZSBjZXJ0YWluIHNldHRpbmdzIG9mIHRoaXMgZmlsZSBmb3IgYQogICAgICAgICAgICBzcGVjaWFsIHByb2dyYW0gd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MuCiAgICAgICAgICAgIFtBcHBEZWZhdWx0c10gaXMgbm90IHRoZSByZWFsIG5hbWUgb2YgdGhlIHNlY3Rpb24uIFRoZSByZWFsIG5hbWUKICAgICAgICAgICAgY29uc2lzdHMgb2YgdGhlIGxlYWRpbmcgd29yZCBBcHBEZWZhdWx0cyBmb2xsb3dlZCBieSB0aGUgbmFtZQogICAgICAgICAgICBvZiB0aGUgZXhlY3V0YWJsZSB0aGUgc2VjdGlvbiBpcyB2YWxpZCBmb3IuCiAgCSAgICBUaGUgZW5kIG9mIHRoZSBzZWN0aW9uIG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlCiAgCSAgICBjb3JyZXNwb25kaW5nICJzdGFuZGFyZCIgc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCiAgCSAgICB0aGF0IHNob3VsZCBoYXZlIHNvbWUgb2YgaXRzIHNldHRpbmdzIG92ZXJ3cml0dGVuIHdpdGggdGhlCiAgCSAgICBwcm9ncmFtIHNwZWNpZmljIHNldHRpbmdzIHlvdSBkZWZpbmUuCiAgCSAgICBUaGUgdGhyZWUgcGFydHMgb2YgdGhlIHNlY3Rpb24gbmFtZSBhcmUgc2VwYXJhdGVkIGJ5IHR3byBiYWNrc2xhc2hlcy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBDdXJyZW50bHkgd2luZSBzdXBwb3J0cyBvdmVycmlkaW5nIHNlbGVjdGVkIHNldHRpbmdzIHdpdGhpbgogIAkgICAgdGhlIHNlY3Rpb25zIFtEbGxPdmVycmlkZXNdLCBbeDExZHJ2XSwgW3ZlcnNpb25dIGFuZCBbZHNvdW5kXSBvbmx5LgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IG92ZXJyaWRlcyB0aGUgbm9ybWFsIHNldHRpbmdzIGZvciBhCiAgICAgICAgICAgIHByb2dyYW06CiAgCSAgICA8cHJvZ3JhbWxpc3Rpbmc+Cjs7IGRlZmF1bHQgc2V0dGluZ3MKW3gxMWRydl0KIk1hbmFnZWQiID0gIlkiCiJEZXNrdG9wIiA9ICJOIgoKOzsgcnVuIGluc3RhbGwgaW4gZGVza3RvcCBtb2RlCltBcHBEZWZhdWx0c1xcaW5zdGFsbC5leGVcXHgxMWRydl0KIk1hbmFnZWQiID0gIk4iCiJEZXNrdG9wIiA9ICI4MDB4NjAwIgogIAkgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctdHJvdWJsZSI+CiAgICAgICAgPHRpdGxlPldoYXQgSWYgSXQgRG9lc24ndCBXb3JrPzwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGVyZSBpcyBhbHdheXMgYSBjaGFuY2UgdGhhdCB0aGluZ3Mgd2lsbCBnbyB3cm9uZy4gSWYgdGhlCiAgICAgICAgICB1bnRoaW5rYWJsZSBoYXBwZW5zLCByZXBvcnQgdGhlIHByb2JsZW0gdG8KICAJICA8dWxpbmsgdXJsPSJodHRwOi8vYnVncy53aW5laHEub3JnLyI+V2luZSBCdWd6aWxsYTwvdWxpbms+LAogIAkgIHRyeSB0aGUgbmV3c2dyb3VwCiAgICAgICAgICA8c3lzdGVtaXRlbT5jb21wLmVtdWxhdG9ycy5tcy13aW5kb3dzLndpbmU8L3N5c3RlbWl0ZW0+LAogIAkgIG9yIHRoZSBJUkMgY2hhbm5lbCA8c3lzdGVtaXRlbT4jV2luZUhRPC9zeXN0ZW1pdGVtPiBmb3VuZCBvbgogICAgICAgICAgaXJjLmZyZWVub2RlLm5ldCwgb3IgY29ubmVjdGVkIHNlcnZlcnMuCiAgCSAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgbG9va2VkIG92ZXIgdGhpcyBkb2N1bWVudCB0aG9yb3VnaGx5LAogIAkgIGFuZCBoYXZlIGFsc28gcmVhZDoKICAgICAgICA8L3BhcmE+CiAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+CiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vd3d3LndpbmVocS5vcmcvdHJvdWJsZS88L2ZpbGVuYW1lPgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgaW5kZWVkIGl0IGxvb2tzIGxpa2UgeW91J3ZlIGRvbmUgeW91ciByZXNlYXJjaCwgYmUKICAgICAgICAgIHByZXBhcmVkIGZvciBoZWxwZnVsIHN1Z2dlc3Rpb25zLiBJZiB5b3UgaGF2ZW4ndCwgYnJhY2UKICAgICAgICAgIHlvdXJzZWxmIGZvciBoZWF2aW5nIGZsYW1pbmcuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImNvbmZpZy1kcml2ZS1tYWluIj4KICAgICAgPHRpdGxlPlRoZSBXaW5lIEZpbGUgU3lzdGVtIEFuZCBEcml2ZSBMYXllcjwvdGl0bGU+CiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+RXh0cmVtZWx5IEltcG9ydGFudCBQcmVyZXF1aXNpdGVzPC90aXRsZT4KCTxwYXJhPgoJICBJZiB5b3UncmUgcGxhbm5pbmcgdG8gaW5jbHVkZSBhY2Nlc3MgdG8gYSBDRC1ST00gZHJpdmUgaW4geW91ciBXaW5lCgkgIGNvbmZpZ3VyYXRpb24gb24gTGludXgsIHRoZW4gPGVtcGhhc2lzPm1ha2Ugc3VyZTwvZW1waGFzaXM+IHRvIGFkZAoJICB0aGUgPHF1b3RlPnVuaGlkZTwvcXVvdGU+IG1vdW50IG9wdGlvbiB0byB0aGUgQ0QtUk9NIGZpbGUgc3lzdGVtCgkgIGVudHJ5IGluIDxmaWxlbmFtZT4vZXRjL2ZzdGFiPC9maWxlbmFtZT4sIGUuZy46CgkgIDxwcm9ncmFtbGlzdGluZz4vZGV2L2Nkcm9tIC9jZHJvbSAgaXNvOTY2MCBybyxub2F1dG8sdXNlcnMsdW5oaWRlIDAgMDwvcHJvZ3JhbWxpc3Rpbmc+CgkgIFNldmVyYWwgV2luZG93cyBwcm9ncmFtIHNldHVwIENELVJPTXMgb3Igb3RoZXIgQ0QtUk9NcyBjaG9zZQoJICB0byBkbyBzdWNoIGJyYWluZGFtYWdlZCB0aGluZ3MgYXMgbWFya2luZyB2ZXJ5IGltcG9ydGFudCBzZXR1cAoJICBoZWxwZXIgZmlsZXMgb24gdGhlIENELVJPTSBhcyA8cXVvdGU+aGlkZGVuPC9xdW90ZT4uCgkgIFRoYXQncyBubyBwcm9ibGVtIG9uIFdpbmRvd3MsIHNpbmNlIHRoZSBXaW5kb3dzIENELVJPTSBkcml2ZXIgYnkKCSAgZGVmYXVsdCBkaXNwbGF5cyBldmVuIGZpbGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlCgkgIDxxdW90ZT5oaWRkZW48L3F1b3RlPi4gQnV0IG9uIExpbnV4LCB3aGljaCBjaG9zZSB0bwoJICA8ZW1waGFzaXM+aGlkZTwvZW1waGFzaXM+IDxxdW90ZT5oaWRkZW48L3F1b3RlPiBmaWxlcyBvbiBDRCBieQoJICBkZWZhdWx0LCB0aGlzIGlzIDxlbXBoYXNpcz5GQVRBTDwvZW1waGFzaXM+IQoJICAodGhlIHByb2dyYW1zIHdpbGwgc2ltcGx5IGFib3J0IHdpdGggYW4gPHF1b3RlPmluc3RhbGxhdGlvbiBmaWxlIG5vdCBmb3VuZDwvcXVvdGU+IG9yIHNpbWlsYXIgZXJyb3IpCgkgIFRodXMgeW91IHNob3VsZCBuZXZlciBmb3JnZXQgdG8gYWRkIHRoaXMgc2V0dGluZy4KCTwvcGFyYT4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+U2hvcnQgSW50cm9kdWN0aW9uPC90aXRsZT4KICAgICAgICA8cGFyYT4KCSAgV2luZSBlbXVsYXRlcyBkcml2ZXMgYnkgcGxhY2luZyB0aGVpciB2aXJ0dWFsIGRyaXZlIHJvb3RzIHRvCgkgIHVzZXItY29uZmlndXJhYmxlIHBvaW50cyBpbiB0aGUgVW5peCBmaWxlc3lzdGVtLCBzbyBpdCdzIHlvdXIKCSAgY2hvaWNlIHdoZXJlIDxtZWRpYWxhYmVsPkM6PC9tZWRpYWxhYmVsPidzIHJvb3Qgc2hvdWxkIGJlCgkgICg8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiB3aWxsIGV2ZW4gYXNrIHlvdSkuIElmCgkgIHlvdSBjaG9vc2UsIHNheSwgPGZpbGVuYW1lPn4vd2luZTwvZmlsZW5hbWU+IChvciwgaW4gb3RoZXIKCSAgd29yZHMsIDxmaWxlbmFtZT4vaG9tZS91c2VyL3dpbmU8L2ZpbGVuYW1lPiwgc2luY2UgIn4iCgkgIGluZGljYXRlcyB0aGUgaG9tZSBkaXJlY3Rvcnkgb2YgYSB1c2VyKSwgYXMgdGhlIHJvb3Qgb2YgeW91cgoJICB2aXJ0dWFsIGRyaXZlIDxtZWRpYWxhYmVsPkM6PC9tZWRpYWxhYmVsPiwgdGhlbiB5b3UnZCBwdXQgdGhpcwoJICBpbnRvIHlvdXIgV2luZSBjb25maWd1cmF0aW9uIGZpbGU6CiAgICAgICAgPC9wYXJhPgoKICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CltEcml2ZSBDXQoiUGF0aCIgPSAiJUhPTUUlL3dpbmUiCiJUeXBlIiA9ICJoZCIKICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIFdpdGggdGhpcyBjb25maWd1cmF0aW9uLCB3aGF0IHdpbmRvd3MgYXBwcyB0aGluayBvZiBhcwogICAgICAgICAgImM6XHdpbmRvd3Ncc3lzdGVtIiB3b3VsZCBtYXAgdG8KICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS91c2VyL3dpbmUvd2luZG93cy9zeXN0ZW08L2ZpbGVuYW1lPiBpbiB0aGUgVU5JWAogICAgICAgICAgZmlsZXN5c3RlbS4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDIgaWQ9ImNvbmZpZy1kcml2ZS1kaXIiPgogICAgICAgIDx0aXRsZT5XaW5kb3dzIERpcmVjdG9yeSBTdHJ1Y3R1cmU8L3RpdGxlPgogICAgICAgIDxwYXJhPgoJICBIZXJlJ3MgdGhlIGZ1bmRhbWVudGFsIGxheW91dCB0aGF0IFdpbmRvd3MgcHJvZ3JhbXMgYW5kCgkgIGluc3RhbGxlcnMgZXhwZWN0IGFuZCB0aGF0IHdlIHRodXMgbmVlZCB0byBjb25maWd1cmUgcHJvcGVybHkKCSAgaW4gV2luZS4gV2l0aG91dCBpdCwgdGhleSBzZWxkb21seSBvcGVyYXRlIGNvcnJlY3RseS4gIElmIHlvdQoJICBpbnRlbmQgdG8gdXNlIGEgbm8td2luZG93cyBlbnZpcm9ubWVudCAobm90IHVzaW5nIGFuIGV4aXN0aW5nCgkgIFdpbmRvd3MgcGFydGl0aW9uKSwgdGhlbiBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgZWl0aGVyCgkgIDxjb21tYW5kPldpbmVTZXR1cFRrPC9jb21tYW5kPidzIG9yCgkgIDxjb21tYW5kPndpbmVpbnN0YWxsPC9jb21tYW5kPidzIGNhcGFiaWxpdGllcyB0byBjcmVhdGUgYW4KCSAgaW5pdGlhbCB3aW5kb3dzIGRpcmVjdG9yeSB0cmVlLCBzaW5jZSBjcmVhdGluZyBhIGRpcmVjdG9yeQoJICBzdHJ1Y3R1cmUgbWFudWFsbHkgaXMgdGlyZXNvbWUgYW5kIGVycm9yLXByb25lLgogICAgICAgIDwvcGFyYT4KCjxwcm9ncmFtbGlzdGluZz4KQzpcICAgICAgICAgICAgICAgIFJvb3QgZGlyZWN0b3J5IG9mIHByaW1hcnkgZGlzayBkcml2ZQogIFdpbmRvd3NcICAgICAgICAgV2luZG93cyBkaXJlY3RvcnksIGNvbnRhaW5pbmcgLklOSSBmaWxlcywKICAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3JpZXMsIGV0Yy4KICAgIFN5c3RlbVwgICAgICAgIFdpbjMueC85NS85OC9NRSBkaXJlY3RvcnkgZm9yIGNvbW1vbiBETExzCiAgICAgICAgICAgICAgICAgICAgIFdpbk5ULzIwMDAgZGlyZWN0b3J5IGZvciBjb21tb24gMTYtYml0IERMTHMKICAgIFN5c3RlbTMyXCAgICAgIFdpbk5ULzIwMDAgZGlyZWN0b3J5IGZvciBjb21tb24gMzItYml0IERMTHMKICAgIFN0YXJ0IE1lbnVcICAgIFByb2dyYW0gbGF1bmNoZXIgZGlyZWN0b3J5IHN0cnVjdHVyZQogICAgICBQcm9ncmFtc1wgICAgUHJvZ3JhbSBsYXVuY2hlciBsaW5rcyAoLkxOSyBmaWxlcykgdG8gcHJvZ3JhbXMKICBQcm9ncmFtIEZpbGVzXCAgIEFwcGxpY2F0aW9uIGJpbmFyaWVzICguRVhFIGFuZCAuRExMIGZpbGVzKQo8L3Byb2dyYW1saXN0aW5nPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctZHJpdmUtc2VjdGlvbnMiPgogICAgICAgIDx0aXRsZT5UaGUgW0RyaXZlIHhdIFNlY3Rpb25zPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlc2Ugc2VjdGlvbnMgYXJlIHN1cHBvc2VkIHRvIG1ha2UgY2VydGFpbiBVbml4CiAgICAgICAgICAgIGRpcmVjdG9yeSBsb2NhdGlvbnMgYWNjZXNzaWJsZSB0byBXaW5lIGFzIGEgRE9TL1dpbmRvd3MgZHJpdmUKICAgICAgICAgICAgKGRyaXZlICd4OicpIGFuZCB0aHVzIGFjY2Vzc2libGUgdG8gV2luZG93cyBwcm9ncmFtcwogICAgICAgICAgICB1bmRlciB0aGUgZHJpdmUgbmFtZSB5b3Ugc3BlY2lmaWVkLgoJICAgIEV2ZXJ5IERPUy9XaW5kb3dzIHByb2dyYW0gc29ydCBvZiBleHBlY3RzIGF0IGxlYXN0IGEgQzoKCSAgICBkcml2ZSAoYW5kIHNvbWV0aW1lcyBhbHNvIGFuIEE6IGZsb3BweSBkcml2ZSksIHNvIHlvdXIKCSAgICBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIGF0IGxlYXN0IGNvbnRhaW4gdGhlIGNvcnJlc3BvbmRpbmcKCSAgICBzZWN0aW9ucywgW0RyaXZlIENdIGFuZCBbRHJpdmUgQV0uCiAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRlY2lkZSBvbiB3aGV0aGVyIHlvdSB3YW50IHRvIHVzZSBhbiBleGlzdGluZyBXaW5kb3dzCiAgICAgICAgICAgIHBhcnRpdGlvbiBhcyB0aGUgQyBkcml2ZSBvciB3aGV0aGVyIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93bgogICAgICAgICAgICBXaW5lIGRyaXZlIEMgZGlyZWN0b3J5IHRyZWUgc29tZXdoZXJlICh0YWtlIGNhcmUgYWJvdXQKICAgICAgICAgICAgcGVybWlzc2lvbnMhKS4KICAgICAgICAgICAgRWFjaCBkcml2ZSBzZWN0aW9uIG1heSBzcGVjaWZ5IHVwIHRvIDYgZGlmZmVyZW50IHNldHRpbmdzCiAgICAgICAgICAgIGFzIGV4cGxhaW5lZCBiZWxvdy4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+W0RyaXZlIHhdPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIFRoZSBhYm92ZSBsaW5lIGJlZ2lucyB0aGUgc2VjdGlvbiBmb3IgYSBkcml2ZSB3aG9zZSBsZXR0ZXIgaXMgeAogICAgICAgICAgICAoRE9TIG5vdGF0aW9uOiBkcml2ZSAneDonKS4KICAgICAgICAgICAgWW91IGNvdWxkIGUuZy4gY3JlYXRlIGFuIGVxdWl2YWxlbnQgdG8gYSBkcml2ZSAnQzonCiAgICAgICAgICAgIHVuZGVyIERPUy9XaW5kb3dzIGJ5IHVzaW5nIGEgW0RyaXZlIENdIHNlY3Rpb24gbmFtZS4KCSAgICBOb3RlIHRoYXQgdGhlIGRyaXZlIGxldHRlciBpcyBjYXNlIGluc2Vuc2l0aXZlLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUGF0aCIgPSAiL2Rpci90by9wYXRoIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGRyaXZlIHdpbGwgYmVnaW4uCiAgICAgICAgICAgIFdoZW4gV2luZSBpcyBicm93c2luZyBpbiBkcml2ZSB4LCBpdCB3aWxsIGJlIGFibGUKICAgICAgICAgICAgdG8gc2VlIHRoZSBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgZGlyZWN0b3J5CiAgICAgICAgICAgIDxmaWxlbmFtZT4vZGlyL3RvL3BhdGg8L2ZpbGVuYW1lPiBhbmQgYmVsb3cuCiAgICAgICAgICAgIChub3RlIHRoYXQgc3ltbGlua3MgdG8gZGlyZWN0b3JpZXMgd29uJ3QgZ2V0IGluY2x1ZGVkIQogICAgICAgICAgICBzZWUgIjxsaW5rIGxpbmtlbmQ9ImRpcnN5bWxpbmtzIj5TaG93RGlyU3ltbGlua3M8L2xpbms+IgogICAgICAgICAgICBjb25maWd1cmF0aW9uIHNldHRpbmcpCiAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBtYWtlIHVzZSBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbGlrZSAkSE9NRSBoZXJlLAoJICAgIGFuIGV4YW1wbGUgZm9yIHVzaW5nIGEgPGZpbGVuYW1lPm15d2luZWRyaXZlPC9maWxlbmFtZT4KCSAgICBkaXJlY3RvcnkgaW4geW91ciBob21lIGRpciB3b3VsZCBiZQogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlBhdGgiID0gIiVIT01FJS9teXdpbmVkcml2ZSI8L3Byb2dyYW1saXN0aW5nPiwKCSAgICBidXQgZG9uJ3QgZm9yZ2V0IHRvIHB1dCBpdCBhcyBhIERPUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwKCSAgICBpZSBzdXJyb3VuZGVkIGJ5ICclJyBzaWducyByYXRoZXIgdGhhbiBwcmVjZWRlZCBieSBhICckJy4KICAgICAgICAgICAgRG9uJ3QgZm9yZ2V0IHRvIGxlYXZlIG9mZiB0aGUgdHJhaWxpbmcgc2xhc2ghCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJUeXBlIiA9ICJoZHxjZHJvbXxuZXR3b3JrfGZsb3BweSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgU2V0cyB1cCB0aGUgdHlwZSBvZiBkcml2ZSBXaW5lIHdpbGwgc2VlIGl0IGFzLiBUeXBlIG11c3QKICAgICAgICAgIGVxdWFsIG9uZSBvZiB0aGUgZm91ciA8bGl0ZXJhbD5mbG9wcHk8L2xpdGVyYWw+LAogICAgICAgICAgPGxpdGVyYWw+aGQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5jZHJvbTwvbGl0ZXJhbD4sIG9yCiAgICAgICAgICA8bGl0ZXJhbD5uZXR3b3JrPC9saXRlcmFsPi4gVGhleSBhcmUgc2VsZi1leHBsYW5hdG9yeS4KICAgICAgICAgIChUaGUgfCdzIG1lYW4gIlR5cGUgPSAnJmx0O29uZSBvZiB0aGUgb3B0aW9ucyZndDsnIi4pCiAgICAgICAgICBVc3VhbGx5LCB5b3UgY2hvb3NlICJoZCIgZm9yIGEgZHJpdmUgKCJoZCIgaXMgZGVmYXVsdCBhbnl3YXkpLgoJICBGb3IgYSBob21lIGRpcmVjdG9yeSBlbnRyeSwgaXQgbWFrZXMgc2Vuc2UgdG8gY2hvb3NlCgkgICJuZXR3b3JrIiBzb21ldGltZXMsIHNpbmNlIHNvbWUgaG9tZSBkaXJlY3RvcmllcyBhcmUgYmVpbmcKCSAgZXhwb3J0ZWQgb3ZlciB0aGUgbmV0d29yayB2aWEgTkZTIGFuZCB0aHVzIGNhbiBoYXZlIHNsb3cgcmVzcG9uc2UKCSAgdGltZXMuCiAgICAgICAgPC9wYXJhPgoKICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkRldmljZSIgPSAiL2Rldi94eCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgIDxwYXJhPgogICAgICAgICAgTmVlZGVkIGZvciByYXcgZGV2aWNlIGFjY2VzcyBhbmQgPGxpbmsgbGlua2VuZD0iY29uZmlnLWRyaXZlLWNkcm9tLWxhYmVscyI+bGFiZWwgYW5kIHNlcmlhbCBudW1iZXIgcmVhZGluZzwvbGluaz4uCiAgICAgICAgICBVc2UgdGhpcyA8ZW1waGFzaXM+b25seTwvZW1waGFzaXM+IGZvciBmbG9wcHkgYW5kIGNkcm9tIGRldmljZXMuIFVzaW5nIGl0IG9uCiAgICAgICAgICBFeHRlbmRlZDIgb3Igb3RoZXIgVW5peCBmaWxlIHN5c3RlbXMgY2FuIGhhdmUgZGlyZSByZXN1bHRzCiAgICAgICAgICAod2hlbiBhIHdpbmRvd3MgYXBwIHRyaWVzIHRvIGRvIGEgbG93bGV2ZWwgd3JpdGUsCiAgICAgICAgICB0aGV5IGRvIGl0IGluIGEgRkFUIHdheSAtLSBGQVQgZm9ybWF0IGlzIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20KICAgICAgICAgIGFueSBVbml4IGZpbGUgc3lzdGVtKS4KICAgICAgICAgIEFsc28sIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHByb3BlciBwZXJtaXNzaW9ucyB0byB0aGlzIGRldmljZQogICAgICAgICAgZmlsZS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPG5vdGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhpcyBzZXR0aW5nIGlzIG5vdCByZWFsbHkgaW1wb3J0YW50OyBhbG1vc3QgYWxsIGFwcHMKICAgICAgICAgICAgd2lsbCBoYXZlIG5vIHByb2JsZW0gaWYgaXQgcmVtYWlucyB1bnNwZWNpZmllZC4gRm9yCiAgICAgICAgICAgIENELVJPTXMgaXQncyBxdWl0ZSB1c2VmdWwgaW4gb3JkZXIgdG8gZ2V0IGF1dG9tYXRpYyBsYWJlbAogICAgICAgICAgICBkZXRlY3Rpb24sIHRob3VnaC4gSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgc3BlY2lmeWluZwogICAgICAgICAgICBkZXZpY2UgbmFtZXMsIGp1c3QgbGVhdmUgb3V0IHRoaXMgc2V0dGluZyBmb3IgeW91cgogICAgICAgICAgICBkcml2ZXMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9ub3RlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgICBIZXJlIGFyZSBhIGZldyBzYW1wbGUgZW50cmllczoKICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KSGVyZSBpcyBhIHNldHVwIGZvciBEcml2ZSBDLCBhIGdlbmVyaWMgaGFyZCBkcml2ZToKW0RyaXZlIENdCiJQYXRoIiA9ICIvZG9zYyIKIlR5cGUiID0gImhkIgpUaGlzIGlzIGEgc2V0dXAgZm9yIERyaXZlIEUsIGEgZ2VuZXJpYyBDRC1ST00gZHJpdmU6CltEcml2ZSBFXQoiUGF0aCIgPSAiL21udC9jZHJvbSIKIlR5cGUiID0gImNkcm9tIgoiRGV2aWNlIiA9ICIvZGV2L2Nkcm9tIgpBbmQgaGVyZSBpcyBhIHNldHVwIGZvciBEcml2ZSBBLCBhIGdlbmVyaWMgZmxvcHB5IGRyaXZlOgpbRHJpdmUgQV0KIlR5cGUiID0gImZsb3BweSIKIlBhdGgiID0gIi9tbnQvZmxvcHB5IgoiRGV2aWNlIiA9ICIvZGV2L2ZkMCIKICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgICAgPHRpdGxlPkZpbGUgc3lzdGVtIHNldHRpbmdzIGluIHRoZSBbd2luZV0gc2VjdGlvbjwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IldpbmRvd3MiID0gImM6XFx3aW5kb3dzIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBUaGlzIHRlbGxzIFdpbmUgYW5kIFdpbmRvd3MgcHJvZ3JhbXMgd2hlcmUgdGhlCiAgICAgICAgICA8ZmlsZW5hbWU+V2luZG93czwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcy4gIEl0IGlzCiAgICAgICAgICByZWNvbW1lbmRlZCB0byBoYXZlIHRoaXMgZGlyZWN0b3J5IHNvbWV3aGVyZSBvbiB5b3VyCiAgICAgICAgICBjb25maWd1cmVkIDxtZWRpYWxhYmVsPkM8L21lZGlhbGFiZWw+IGRyaXZlLCBhbmQgaXQncyBhbHNvCiAgICAgICAgICByZWNvbW1lbmRlZCB0byBqdXN0IGNhbGwgdGhlIGRpcmVjdG9yeSAid2luZG93cyIgKHRoaXMgaXMKICAgICAgICAgIHRoZSBkZWZhdWx0IHNldHVwIG9uIFdpbmRvd3MsIGFuZCBzb21lIHN0dXBpZCBwcm9ncmFtcwogICAgICAgICAgbWlnaHQgcmVseSBvbiB0aGlzKS4gIFNvIGluIGNhc2UgeW91IGNob3NlIGEgIldpbmRvd3MiCiAgICAgICAgICBzZXR0aW5nIG9mICJjOlxcd2luZG93cyIgYW5kIHlvdSBjaG9zZSB0byBzZXQgdXAgYSBkcml2ZSBDCiAgICAgICAgICBlLmcuIGF0IDxmaWxlbmFtZT4vdXNyL2xvY2FsL3dpbmVfYzwvZmlsZW5hbWU+LCB0aGUKICAgICAgICAgIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5IHdvdWxkIGJlCiAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC93aW5lX2Mvd2luZG93czwvZmlsZW5hbWU+LiAgTWFrZSBvbmUKICAgICAgICAgIGlmIHlvdSBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiA8ZW1waGFzaXM+Tm8gdHJhaWxpbmcgc2xhc2g8L2VtcGhhc2lzPiAoPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+CiAgICAgICAgICA8ZmlsZW5hbWU+QzpcXHdpbmRvd3NcPC9maWxlbmFtZT4pISBXcml0ZSBhY2Nlc3Mgc3Ryb25nbHkKICAgICAgICAgIHJlY29tbWVuZGVkLCBhcyBXaW5kb3dzIHByb2dyYW1zIGFsd2F5cyBhc3N1bWUgd3JpdGUgYWNjZXNzCiAgICAgICAgICAgIHRvIHRoZSBXaW5kb3dzIGRpcmVjdG9yeSEKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlN5c3RlbSIgPSAiYzpcXHdpbmRvd3NcXHN5c3RlbSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgVGhpcyBzZXRzIHVwIHdoZXJlIHRoZSB3aW5kb3dzIHN5c3RlbSBmaWxlcyBhcmUuIFRoZSBXaW5kb3dzCiAgICAgICAgICAgIHN5c3RlbSBkaXJlY3Rvcnkgc2hvdWxkIHJlc2lkZSBiZWxvdyB0aGUgZGlyZWN0b3J5IHVzZWQgZm9yIHRoZQogICAgICAgICAgPGxpdGVyYWw+V2luZG93czwvbGl0ZXJhbD4gc2V0dGluZy4KICAgICAgICAgICAgVGh1cyB3aGVuIHVzaW5nIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgc3lzdGVtIGRpcmVjdG9yeSB3b3VsZCBiZQogICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC93aW5lX2Mvd2luZG93cy9zeXN0ZW08L2ZpbGVuYW1lPi4KICAgICAgICAgIEFnYWluLCBubyB0cmFpbGluZyBzbGFzaCwgYW5kIHdyaXRlIGFjY2VzcyEKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlRlbXAiID0gImM6XFx0ZW1wIjwvcHJvZ3JhbWxpc3Rpbmc+IFRoaXMgc2hvdWxkCiAgICAgICAgICBiZSB0aGUgZGlyZWN0b3J5IHlvdSB3YW50IHlvdXIgdGVtcCBmaWxlcyBzdG9yZWQgaW4sCiAgICAgICAgICAgIC91c3IvbG9jYWwvd2luZV9jL3RlbXAgaW4gb3VyIGV4YW1wbGUuCiAgICAgICAgICBBZ2Fpbiwgbm8gdHJhaWxpbmcgc2xhc2gsIGFuZCA8ZW1waGFzaXM+d3JpdGUKICAgICAgICAgICAgYWNjZXNzPC9lbXBoYXNpcz4hIQogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUGF0aCIgPSAiYzpcXHdpbmRvd3M7YzpcXHdpbmRvd3NcXHN5c3RlbTtjOlxcYmxhbmNvIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBCZWhhdmVzIGxpa2UgdGhlIDxlbnZhcj5QQVRIPC9lbnZhcj4gc2V0dGluZyBvbiBVTklYCiAgICAgICAgICBib3hlcy4gV2hlbiB3aW5lIGlzIHJ1biBsaWtlIDx1c2VyaW5wdXQ+d2luZQogICAgICAgICAgICBzb2wuZXhlPC91c2VyaW5wdXQ+LCBpZiA8ZmlsZW5hbWU+c29sLmV4ZTwvZmlsZW5hbWU+CiAgICAgICAgICByZXNpZGVzIGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBpbiB0aGUKICAgICAgICAgIDxsaXRlcmFsPlBhdGg8L2xpdGVyYWw+IHNldHRpbmcsIHdpbmUgd2lsbCBydW4gaXQgKE9mCiAgICAgICAgICBjb3Vyc2UsIGlmIDxmaWxlbmFtZT5zb2wuZXhlPC9maWxlbmFtZT4gcmVzaWRlcyBpbiB0aGUKICAgICAgICAgIGN1cnJlbnQgZGlyZWN0b3J5LCB3aW5lIHdpbGwgcnVuIHRoYXQgb25lKS4gTWFrZSBzdXJlIGl0CiAgICAgICAgICBhbHdheXMgaGFzIHlvdXIgPGZpbGVuYW1lPndpbmRvd3M8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kCiAgICAgICAgICBzeXN0ZW0gZGlyZWN0b3J5IChGb3IgdGhpcyBzZXR1cCwgaXQgbXVzdCBoYXZlCiAgICAgICAgICA8ZmlsZW5hbWU+ImM6XFx3aW5kb3dzO2M6XFx3aW5kb3dzXFxzeXN0ZW0iPC9maWxlbmFtZT4pLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYSBpZD0iZGlyc3ltbGlua3MiPgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTaG93RGlyU3ltbGlua3MiID0gIjEiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIFdpbmUgZG9lc24ndCBwYXNzIGRpcmVjdG9yeSBzeW1saW5rcyB0byBXaW5kb3dzIHByb2dyYW1zIGJ5CiAgICAgICAgICBkZWZhdWx0LCBhcyBkb2luZyBzbyBtYXkgY3Jhc2ggc29tZSBwcm9ncmFtcyB0aGF0IGRvCiAgICAgICAgICByZWN1cnNpdmUgbG9va3VwcyBvZiB3aG9sZSBzdWJkaXJlY3RvcnkgdHJlZXMKICAgICAgICAgIHdoZW5ldmVyIGEgZGlyZWN0b3J5IHN5bWxpbmsgcG9pbnRzIGJhY2sgdG8gaXRzZWxmIG9yIG9uZSBvZiBpdHMKICAgICAgICAgIHBhcmVudCBkaXJlY3Rvcmllcy4KICAgICAgICAgIFRoYXQncyB3aHkgd2UgZGlzYWxsb3dlZCB0aGUgdXNlIG9mIGRpcmVjdG9yeSBzeW1saW5rcwogICAgICAgICAgYW5kIGFkZGVkIHRoaXMgc2V0dGluZyB0byByZWVuYWJsZSAoIjEiKSB0aGlzIGZ1bmN0aW9uYWxpdHkuCgkgIElmIHlvdSA8ZW1waGFzaXM+cmVhbGx5PC9lbXBoYXNpcz4gbmVlZCBXaW5lIHRvIHRha2UgaW50bwoJICBhY2NvdW50IHN5bWxpbmtlZCBkaXJlY3RvcmllcywgdGhlbiByZWVuYWJsZSBpdCwgYnV0CgkgIDxlbXBoYXNpcz5iZSBwcmVwYXJlZCBmb3IgY3Jhc2hlczwvZW1waGFzaXM+IGluIGNlcnRhaW4KCSAgV2luZG93cyBwcm9ncmFtcyB3aGVuIHVzaW5nIHRoZSBhYm92ZSBtZXRob2QhIChpbiBvdGhlciB3b3JkczoKCSAgZW5hYmxpbmcgaXQgaXMgY2VydGFpbmx5IG5vdCByZWNvbW1lbmRlZCkKICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPk1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24gYWJvdXQgZmlsZSBzeXN0ZW0gZGlmZmVyZW5jZXM8L3RpdGxlPgogICAgICAgIDxwYXJhPgoJICBXaW5kb3dzIHVzZXMgYSBkaWZmZXJlbnQgKGFuZCBpbmZlcmlvcikgd2F5IHRoYW4gVW5peCB0byBkZXNjcmliZSB0aGUKCSAgbG9jYXRpb24gb2YgZmlsZXMgaW4gYSBjb21wdXRlci4gVGh1cyBXaW5kb3dzIHByb2dyYW1zIGFsc28gZXhwZWN0CgkgIHRvIGZpbmQgdGhpcyBkaWZmZXJlbnQgd2F5IHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLgoJICBTaW5jZSB3ZSBpbnRlbmQgdG8gcnVuIFdpbmRvd3MgcHJvZ3JhbXMgb24KCSAgYSBVbml4IHN5c3RlbSwgd2UncmUgaW4gdHJvdWJsZSwgYXMgd2UgbmVlZCB0byB0cmFuc2xhdGUKCSAgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgZmlsZSBhY2Nlc3MgdGVjaG5pcXVlcy4KCTwvcGFyYT4KCTxwYXJhPgogICAgICAgICAgV2luZG93cyB1c2VzIGRyaXZlIGxldHRlcnMgdG8gZGVzY3JpYmUgZHJpdmVzIG9yCiAgICAgICAgICBhbnkgb3RoZXIgZm9ybSBvZiBzdG9yYWdlIG1lZGlhIGFuZCB0byBhY2Nlc3MgZmlsZXMgb24gdGhlbS4KCSAgRm9yIGV4YW1wbGUsIGNvbW1vbiBkcml2ZSBuYW1lcyBhcmUKCSAgPGZpbGVuYW1lPkM6PC9maWxlbmFtZT4gZm9yIHRoZSBtYWluIFdpbmRvd3Mgc3lzdGVtIHBhcnRpdGlvbgoJICBvbiB0aGUgZmlyc3QgaGFyZGRpc2sgYW5kIDxmaWxlbmFtZT5BOjwvZmlsZW5hbWU+IGZvciB0aGUKCSAgZmlyc3QgZmxvcHB5IGRyaXZlLgoJICBBbHNvLCBXaW5kb3dzIHVzZXMgPGZpbGVuYW1lPlw8L2ZpbGVuYW1lPiAoYmFja3NsYXNoKSBhcyB0aGUKCSAgZGlyZWN0b3J5IHNlcGFyYXRvciBzaWduLCB3aGVyZWFzIFVuaXggdXNlcwoJICA8ZmlsZW5hbWU+LzwvZmlsZW5hbWU+IChzbGFzaCkuCgkgIFRodXMsIGFuIGV4YW1wbGUgZG9jdW1lbnQgb24gdGhlIGZpcnN0IGRhdGEgcGFydGl0aW9uIGluCgkgIFdpbmRvd3MgbWlnaHQgYmUgYWNjZXNzZWQgYnkgdGhlIG5hbWUgb2YKCSAgPGZpbGVuYW1lPkQ6XG15d29ya1xteWRvY3VtZW50LnR4dDwvZmlsZW5hbWU+LgoJPC9wYXJhPgoJPHBhcmE+CgkgIFNvIG11Y2ggZm9yIHRoZSBXaW5kb3dzIHdheSBvZiBkb2luZyB0aGluZ3MuCgk8L3BhcmE+Cgk8cGFyYT4KCSAgV2VsbCwgdGhlIHByb2JsZW0gaXMsIGluIFVuaXggdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcwoJICA8cXVvdGU+ZHJpdmUgbGV0dGVyczwvcXVvdGU+LiBJbnN0ZWFkLCBVbml4IGNob3NlIHRvIGdvIHRoZQoJICBtdWNoIGJldHRlciB3YXkgb2YgaGF2aW5nIG9uZSBzaW5nbGUgdW5pZm9ybSBkaXJlY3RvcnkgdHJlZQoJICAoc3RhcnRpbmcgd2l0aCB0aGUgcm9vdCBkaXJlY3RvcnkKCSAgPGZpbGVuYW1lPi88L2ZpbGVuYW1lPiksIHdoaWNoIGhhcyB2YXJpb3VzIHN0b3JhZ2UgZGV2aWNlcwoJICBzdWNoIGFzIGUuZy4gaGFyZGRpc2sgcGFydGl0aW9ucyBhcHBlbmRlZCBhdCB2YXJpb3VzIGRpcmVjdG9yeQoJICBsb2NhdGlvbnMgd2l0aGluIHRoZSB0cmVlIChhbiBleGFtcGxlIHdvdWxkIGJlCgkgIDxmaWxlbmFtZT4vZGF0YTEvbXl3b3JrPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZSBmaXJzdCBkYXRhCgkgIHBhcnRpdGlvbiBtb3VudGVkL2F0dGFjaGVkIHRvIGEgZGlyZWN0b3J5IGNhbGxlZCBkYXRhMSBpbiB0aGUKCSAgcm9vdCBkaXJlY3RvcnkgPGZpbGVuYW1lPi88L2ZpbGVuYW1lPjsgbXl3b3JrIGlzIGEgc3ViCgkgIGRpcmVjdG9yeSBvZiB0aGUgZGF0YSBwYXJ0aXRpb24gZmlsZSBzeXN0ZW0gdGhhdCdzIG1vdW50ZWQKCSAgdW5kZXIgPGZpbGVuYW1lPi9kYXRhMTwvZmlsZW5hbWU+KS4KCSAgSW4gVW5peCwgdGhlIFdpbmRvd3MgZXhhbXBsZSBkb2N1bWVudCBtZW50aW9uZWQgYWJvdmUgY291bGQgZS5nLgoJICBiZSBhY2Nlc3NlZCBieSB0aGUgbmFtZSBvZgoJICA8ZmlsZW5hbWU+L2RhdGExL215d29yay9teWRvY3VtZW50LnR4dDwvZmlsZW5hbWU+LAoJICBwcm92aWRlZCB0aGF0IHRoZSBhZG1pbmlzdHJhdG9yIGRlY2lkZWQgdG8gbW91bnQgKGF0dGFjaCkgdGhlIGZpcnN0CgkgIGRhdGEgcGFydGl0aW9uIGF0IHRoZSBkaXJlY3RvcnkgL2RhdGExIGluc2lkZSB0aGUgVW5peAoJICBkaXJlY3RvcnkgdHJlZS4gTm90ZSB0aGF0IGluIFVuaXgsIHRoZSBhZG1pbmlzdHJhdG9yIGNhbgoJICA8ZW1waGFzaXM+Y2hvb3NlPC9lbXBoYXNpcz4gYW55IGN1c3RvbSBwYXJ0aXRpb24gbG9jYXRpb24gaGUKCSAgd2FudHMgKGhlcmUsIDxmaWxlbmFtZT4vZGF0YTE8L2ZpbGVuYW1lPiksIHdoZXJlYXMgaW4gV2luZG93cyB0aGUgc3lzdGVtCgkgIDxlbXBoYXNpcz5zZWxlY3RzPC9lbXBoYXNpcz4gYW55IGRyaXZlIGxldHRlciBpdCBkZWVtcwoJICBzdWl0YWJsZSBmb3IgdGhlIGZpcnN0IGRhdGEgcGFydGl0aW9uIChoZXJlLAoJICA8ZmlsZW5hbWU+RDo8L2ZpbGVuYW1lPiksIGFuZCwgZXZlbiB3b3JzZSwgaWYgdGhlcmUgaXMgc29tZQoJICBjaGFuZ2UgaW4gcGFydGl0aW9uIG9yZGVyLCBXaW5kb3dzIGF1dG9tYXRpY2FsbHkKCSAgPGVtcGhhc2lzPmNoYW5nZXM8L2VtcGhhc2lzPiB0aGUgZHJpdmUgbGV0dGVyLCBhbmQgeW91IG1pZ2h0CgkgIHN1ZGRlbmx5IGZpbmQgeW91cnNlbGYgd2l0aCBhIGZpcnN0IGRhdGEgcGFydGl0aW9uIGF0IGRyaXZlCgkgIGxldHRlciA8ZmlsZW5hbWU+RTo8L2ZpbGVuYW1lPiwgd2l0aCBhbGwgdGhlIGZpbGUgbmFtaW5nIGFuZAoJICByZWZlcmVuY2luZyBjb25mdXNpb24gdGhhdCBlbnRhaWxzLiBUaHVzLCB0aGUgV2luZG93cyB3YXkgb2YKCSAgdXNpbmcgZXZlci1jaGFuZ2luZyBkcml2ZSBsZXR0ZXJzIGlzIDxlbXBoYXNpcz5jbGVhcmx5CgkgIGluZmVyaW9yPC9lbXBoYXNpcz4gdG8gdGhlIFVuaXggd2F5IG9mIGFzc2lnbmluZwoJICA8ZW1waGFzaXM+Zml4ZWQ8L2VtcGhhc2lzPiBkaXJlY3RvcnkgdHJlZSBsb2NhdGlvbnMgZm9yIGV2ZXJ5CgkgIGRhdGEgc3RvcmFnZSBtZWRpdW0uCgkgIEFzIHdlJ2xsIHNlZSBzb29uLCBmb3J0dW5hdGVseSB0aGlzIFdpbmRvd3MgbGltaXRhdGlvbiBvZgoJICBjaGFuZ2luZyBkcml2ZSBsZXR0ZXJzIGRvZXNuJ3QgYWZmZWN0IHVzIGluIFdpbmUgYXQgYWxsLCBzaW5jZQoJICB3ZSBjYW4gcHJvcGVybHkgbWFwIDxlbXBoYXNpcz5uZXZlci1jaGFuZ2luZzwvZW1waGFzaXM+IGRyaXZlIGxldHRlcnMgdG8gPGVtcGhhc2lzPmZpeGVkPC9lbXBoYXNpcz4gbG9jYXRpb25zIGluc2lkZSB0aGUgVW5peCBkaXJlY3RvcnkgdHJlZSAoYW5kIGV2ZW4gaWYgdGhlIGxvY2F0aW9uIG9mIHRoZSByZXNwZWN0aXZlIFVuaXggZGlyZWN0b3J5IGNoYW5nZXMsIHdlIGNhbiBzdGlsbCBzaW1wbHkgdXBkYXRlIHRoZSBXaW5lIGRyaXZlIG1hcHBpbmcgdG8gcmVmbGVjdCB0aGUgdXBkYXRlZCBsb2NhdGlvbiBhbmQgYXQgdGhlIHNhbWUgdGltZSBrZWVwIHRoZSBvcmlnaW5hbCBkcml2ZSBsZXR0ZXIpLgoJPC9wYXJhPgoJPHBhcmE+CgkgIE9LLCBub3cgdGhhdCB3ZSBrbm93IHNvbWUgdGhlb3J5IGFib3V0IFdpbmRvd3MgYW5kIFVuaXggZHJpdmUKCSAgYW5kIGZpbGVuYW1lIG1hcHBpbmcsIGl0J3MgcHJvYmFibHkgdGltZSB0byBhc2sgaG93IFdpbmUKCSAgYWNoaWV2ZXMgdGhlIG1hZ2ljIG9mIG1hcHBpbmcgYSBVbml4IGRpcmVjdG9yeSBsb2NhdGlvbiB0byBhCgkgIFdpbmRvd3MgZHJpdmUuLi4KCTwvcGFyYT4KCTxwYXJhPgogICAgICAgICAgV2luZSBjaG9zZSB0byBkbyB0aGUgZm9sbG93aW5nOgoJICBJbiBXaW5lLCB5b3UgZG9uJ3QgYXNzaWduIHNvbWUgcmVhbCBwaHlzaWNhbCBzdG9yYWdlIG1lZGl1bQoJICAoc3VjaCBhcyBhIGhhcmRkaXNrIHBhcnRpdGlvbiBvciBzaW1pbGFyKSB0byBlYWNoIGRyaXZlIGxldHRlcgoJICBtYXBwaW5nIGVudHJ5LgogICAgICAgICAgSW5zdGVhZCwgeW91IGNob29zZSBjZXJ0YWluIHN1YiBkaXJlY3RvcnkgdHJlZXMgaW5zaWRlIHRoZSBVbml4CiAgICAgICAgICBkaXJlY3RvcnkgdHJlZSAodGhhdCBzdGFydHMgd2l0aCA8ZmlsZW5hbWU+LzwvZmlsZW5hbWU+KSB0aGF0CiAgICAgICAgICB5b3Ugd291bGQgbGlrZSB0byBhc3NpZ24gYSBkcml2ZSBsZXR0ZXIgdG8uCgk8L3BhcmE+Cgk8cGFyYT4KCSAgTm90ZSB0aGF0IGZvciBldmVyeSBVbml4IHN1YiBkaXJlY3RvcnkgdHJlZSB0aGF0IHlvdSBpbnRlbmQgdG8KCSAgc3RhcnQgV2luZG93cyBwcm9ncmFtcyBpbiwgaXQgaXMgPGVtcGhhc2lzPmFic29sdXRlbHkKCSAgcmVxdWlyZWQ8L2VtcGhhc2lzPiB0byBoYXZlIGEgV2luZSBkcml2ZSBtYXBwaW5nIGVudHJ5OgoJPC9wYXJhPgoJPHBhcmE+CgkgIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkIGEgcHVibGljbHkgd3JpdGFibGUgPHF1b3RlPldpbmRvd3MKCSAgZGlyZWN0b3J5IHNwYWNlPC9xdW90ZT4gdW5kZXIgPGZpbGVuYW1lPi91c3IvbXl3aW5lPC9maWxlbmFtZT4sIHRoZW4gaW4gb3JkZXIgdG8gYmUKCSAgYWJsZSB0byBhY2Nlc3MgdGhpcyBzdWIgZGlyZWN0b3J5IHRyZWUgZnJvbSBXaW5lLCB5b3Ugc2hvdWxkCgkgIGhhdmUgYSBkcml2ZSBtYXBwaW5nIGVudHJ5IHRoYXQgbWFwcyBhIGNlcnRhaW4gZHJpdmUgbGV0dGVyCgkgIChmb3IgZXhhbXBsZSwgbGV0J3MgdGFrZSBkcml2ZSBsZXR0ZXIgPGZpbGVuYW1lPlA6PC9maWxlbmFtZT4pCgkgIGVpdGhlciB0byA8ZmlsZW5hbWU+L3Vzci9teXdpbmU8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+L3VzcjwvZmlsZW5hbWU+ICh0byBhbHNvIGFjY2VzcyBhbnkgZGlyZWN0b3JpZXMgYmVsb25naW5nIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5KSBvciA8ZmlsZW5hbWU+LzwvZmlsZW5hbWU+ICh0byBhbHNvIGFjY2VzcyBhbnkgZGlyZWN0b3J5IHdoYXRzb2V2ZXIgb24gdGhpcyBzeXN0ZW0gYnkgdGhpcyBkcml2ZSBsZXR0ZXIgbWFwcGluZykuIFRoZSBET1MgZHJpdmUvZGlyZWN0b3J5IGxvY2F0aW9uIHRvIGFjY2VzcyBmaWxlcyBpbiA8ZmlsZW5hbWU+L3Vzci9teXdpbmU8L2ZpbGVuYW1lPiA8ZW1waGFzaXM+aW4gV2luZTwvZW1waGFzaXM+IGluIHRoZXNlIGNvbmZpZ3VyYXRpb24gY2FzZXMgd291bGQgdGhlbiBiZSA8ZmlsZW5hbWU+UDpcPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPlA6XG15d2luZTwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5QOlx1c3JcbXl3aW5lPC9maWxlbmFtZT4sIHJlc3BlY3RpdmVseS4KCTwvcGFyYT4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLW5vLXdpbmRvd3MiPgogICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIFdpbmUgV2l0aG91dCBXaW5kb3dzPC90aXRsZT4KCiAgICAgICAgPHBhcmE+CiAgICAgICAgICBBIG1ham9yIGdvYWwgb2YgV2luZSBpcyB0byBhbGxvdyB1c2VycyB0byBydW4gV2luZG93cyBwcm9ncmFtcwogICAgICAgICAgd2l0aG91dCBoYXZpbmcgdG8gaW5zdGFsbCBXaW5kb3dzIG9uIHRoZWlyIG1hY2hpbmUuIFdpbmUKICAgICAgICAgIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG1haW4gRExMcyB1c3VhbGx5CiAgICAgICAgICBwcm92aWRlZCB3aXRoIFdpbmRvd3MuIFRoZXJlZm9yZSwgb25jZSBXaW5lIGlzIGZpbmlzaGVkLCB5b3UKICAgICAgICAgIHdpbGwgbm90IG5lZWQgdG8gaGF2ZSBXaW5kb3dzIGluc3RhbGxlZCB0byB1c2UgV2luZS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBXaW5lIGhhcyBhbHJlYWR5IG1hZGUgZW5vdWdoIHByb2dyZXNzIHRoYXQgaXQgbWF5IGJlIHBvc3NpYmxlCiAgICAgICAgICB0byBydW4geW91ciB0YXJnZXQgcHJvZ3JhbXMgd2l0aG91dCBXaW5kb3dzIGluc3RhbGxlZC4gSWYKICAgICAgICAgIHlvdSB3YW50IHRvIHRyeSBpdCwgZm9sbG93IHRoZXNlIHN0ZXBzOgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPG9yZGVyZWRsaXN0PgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBQb2ludCA8bWVkaWFsYWJlbD5bRHJpdmUgQ108L21lZGlhbGFiZWw+IGluCiAgICAgICAgICAgICAgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4gdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB5b3Ugd2FudAogICAgICAgICAgICAgIDxmaWxlbmFtZT5DOjwvZmlsZW5hbWU+IHRvIGJlLiBSZWZlciB0byB0aGUgd2luZS5jb25mIG1hbiBwYWdlCiAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgCSAgICBUaGUgZGlyZWN0b3J5IHRvIGJlIHVzZWQgZm9yIGVtdWxhdGluZyBhIEM6IGRyaXZlIHdpbGwgYmUKICAJICAgIHRoZSBiYXNlIGRpcmVjdG9yeSBmb3Igc29tZSBXaW5kb3dzIHNwZWNpZmljIGRpcmVjdG9yaWVzCiAgCSAgICBjcmVhdGVkIGJlbG93LgogICAgICAgICAgICA8L3BhcmE+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+CiAgICAgICAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgRkFUIGFuZAogICAgICAgICAgVkZBVCBmaWxlIHN5c3RlbSBwZXJtaXNzaW9ucyB3b3JrIGluIExpbnV4CiAgICAgICAgICB3aXRoIGEgZm9jdXMgb24gY29uZmlndXJpbmcgdGhlbSBmb3IgV2luZS4KICAgICAgICA8L3BhcmE+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIExpbnV4IGlzIGFibGUgdG8gYWNjZXNzIERPUyBhbmQgV2luZG93cyBmaWxlIHN5c3RlbXMgdXNpbmcKICAgICAgICAgICAgZWl0aGVyIHRoZSBGQVQgKG9sZGVyIDguMyBET1MgZmlsZXN5c3RlbXMpIG9yIFZGQVQgKG5ld2VyCiAgICAgICAgICAgIFdpbmRvd3MgOTUgb3IgbGF0ZXIgbG9uZyBmaWxlbmFtZSBmaWxlc3lzdGVtcykgbW9kdWxlcy4KICAgICAgICAgICAgTW91bnRlZCBGQVQgb3IgVkZBVCBmaWxlc3lzdGVtcyBwcm92aWRlIHRoZSBwcmltYXJ5IG1lYW5zCiAgICAgICAgICAgIGZvciB3aGljaCBleGlzdGluZyBwcm9ncmFtcyBhbmQgdGhlaXIgZGF0YSBhcmUgYWNjZXNzZWQKICAgICAgICAgICAgdGhyb3VnaCBXaW5lIGZvciBkdWFsIGJvb3QgKExpbnV4ICsgV2luZG93cykgc3lzdGVtcy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBXaW5lIG1hcHMgbW91bnRlZCBGQVQgZmlsZXN5c3RlbXMsIHN1Y2ggYXMKICAgICAgICAgICAgPGZpbGVuYW1lPi9jPC9maWxlbmFtZT4sIHRvIGRyaXZlciBsZXR0ZXJzLCBzdWNoIGFzCiAgICAgICAgICAgIDxxdW90ZT5jOjwvcXVvdGU+LCBhcyBpbmRpY2F0ZWQgYnkgdGhlCiAgICAgICAgICAgIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+IGZpbGUuICBUaGUgZm9sbG93aW5nIGV4Y2VycHQKICAgICAgICAgICAgZnJvbSBhIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+IGZpbGUgZG9lcyB0aGlzOgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPgpbRHJpdmUgQ10KIlBhdGgiID0gIi9jIgoiVHlwZSIgPSAiaGQiCiAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEFsdGhvdWdoIFZGQVQgZmlsZXN5c3RlbXMgYXJlIHByZWZlcmFibGUgdG8gRkFUIGZpbGVzeXN0ZW1zCiAgICAgICAgICAgIGZvciB0aGVpciBsb25nIGZpbGVuYW1lIHN1cHBvcnQsIHRoZSB0ZXJtIDxxdW90ZT5GQVQ8L3F1b3RlPgogICAgICAgICAgICB3aWxsIGJlIHVzZWQgdGhyb3VnaG91dCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgZG9jdW1lbnQgdG8KICAgICAgICAgICAgcmVmZXIgdG8gRkFUIGZpbGVzeXN0ZW1zIGFuZCB0aGVpciBkZXJpdmF0aXZlcy4gQWxzbywKICAgICAgICAgICAgPHF1b3RlPi9jPC9xdW90ZT4gd2lsbCBiZSB1c2VkIGFzIHRoZSBGQVQgbW91bnQgcG9pbnQgaW4KICAgICAgICAgICAgZXhhbXBsZXMgdGhyb3VnaG91dCB0aGlzIGRvY3VtZW50LgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIE1vc3QgbW9kZXJuIExpbnV4IGRpc3RyaWJ1dGlvbnMgZWl0aGVyIGRldGVjdCBvciBhbGxvdwogICAgICAgICAgICBleGlzdGluZyBGQVQgZmlsZSBzeXN0ZW1zIHRvIGJlIGNvbmZpZ3VyZWQgc28gdGhhdCB0aGV5IGNhbiBiZQogICAgICAgICAgICBtb3VudGVkLCBpbiBhIGxvY2F0aW9uIHN1Y2ggYXMgPGZpbGVuYW1lPi9jPC9maWxlbmFtZT4sCiAgICAgICAgICAgIGVpdGhlciBwZXJzaXN0ZW50bHkgKG9uIGJvb3R1cCkgb3Igb24gYW4gYXMgbmVlZGVkIGJhc2lzLiBJbgogICAgICAgICAgICBlaXRoZXIgY2FzZSwgYnkgZGVmYXVsdCwgdGhlIHBlcm1pc3Npb25zIHdpbGwgcHJvYmFibHkgYmUKICAgICAgICAgICAgY29uZmlndXJlZCBzbyB0aGF0IHRoZXkgbG9vayBsaWtlOgogICAgICAgICAgPC9wYXJhPgogIDxzY3JlZW4+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Y2QgL2M8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pi9jPjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bHMgLWw8L3VzZXJpbnB1dD4KICA8Y29tcHV0ZXJvdXRwdXQ+LXJ3eHIteHIteCAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgOTEgT2N0IDEwIDE3OjU4IGF1dG9leGVjLmJhdAogIC1yd3hyLXhyLXggICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgMjQ1IE9jdCAxMCAxNzo1OCBjb25maWcuc3lzCiAgZHJ3eHIteHIteCAgNDEgcm9vdCAgICAgcm9vdCAgICAgICAgMTYzODQgRGVjIDMwICAxOTk4IHdpbmRvd3M8L2NvbXB1dGVyb3V0cHV0PgogIDwvc2NyZWVuPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIHdoZXJlIGFsbCB0aGUgZmlsZXMgYXJlIG93bmVkIGJ5ICJyb290IiwgYXJlIGluIHRoZSAicm9vdCIKICAgICAgICAgICAgZ3JvdXAgYW5kIGFyZSBvbmx5IHdyaXRhYmxlIGJ5ICJyb290IgogICAgICAgICAgICAoPGxpdGVyYWw+NzU1PC9saXRlcmFsPiBwZXJtaXNzaW9ucykuIFRoaXMgaXMgcmVzdHJpY3RpdmUgaW4KICAgICAgICAgICAgdGhhdCBpdCByZXF1aXJlcyB0aGF0IFdpbmUgYmUgcnVuIGFzIHJvb3QgaW4gb3JkZXIgZm9yCiAgICAgICAgICAgIHByb2dyYW1zIHRvIGJlIGFibGUgdG8gd3JpdGUgdG8gYW55IHBhcnQgb2YgdGhlCiAgICAgICAgICAgIGZpbGVzeXN0ZW0uCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIG1ham9yIGFwcHJvYWNoZXMgdG8gb3ZlcmNvbWluZyB0aGUgcmVzdHJpY3RpdmUKICAgICAgICAgICAgcGVybWlzc2lvbnMgbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGg6CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFJ1biA8YXBwbGljYXRpb24+V2luZTwvYXBwbGljYXRpb24+IGFzIHJvb3QKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIE1vdW50IHRoZSBGQVQgZmlsZXN5c3RlbSB3aXRoIGxlc3MgcmVzdHJpY3RpdmUKICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBTaGFkb3cgdGhlIEZBVCBmaWxlc3lzdGVtIGJ5IGNvbXBsZXRlbHkgb3IgcGFydGlhbGx5CiAgICAgICAgICAgICAgICBjb3B5aW5nIGl0CiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC9vcmRlcmVkbGlzdD4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBFYWNoIGFwcHJvYWNoIHdpbGwgYmUgZGlzY3Vzc2VkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlJ1bm5pbmcgV2luZSBhcyByb290PC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBSdW5uaW5nIFdpbmUgYXMgcm9vdCBpcyB0aGUgZWFzaWVzdCBhbmQgbW9zdCB0aG9yb3VnaCB3YXkgb2YgZ2l2aW5nCiAgICAgICAgICAgIHByb2dyYW1zIHRoYXQgV2luZSBydW5zIHVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gRkFUIGZpbGVzIHN5c3RlbXMuCiAgICAgICAgICAgIFJ1bm5pbmcgd2luZSBhcyByb290IGFsc28gYWxsb3dzIHByb2dyYW1zIHRvIGRvIHRoaW5ncyB1bnJlbGF0ZWQKICAgICAgICAgICAgdG8gRkFUIGZpbGVzeXN0ZW1zLCBzdWNoIGFzIGxpc3RlbmluZyB0byBwb3J0cyB0aGF0IGFyZSBsZXNzIHRoYW4KICAgICAgICAgICAgMTAyNC4gIFJ1bm5pbmcgV2luZSBhcyByb290IGlzIGRhbmdlcm91cyBzaW5jZSB0aGVyZSBpcyBubyBsaW1pdCB0bwogICAgICAgICAgICB3aGF0IHRoZSBwcm9ncmFtIGNhbiBkbyB0byB0aGUgc3lzdGVtLCBzbyBpdCdzIDxlbXBoYXNpcz5ISUdITFkgRElTQ09VUkFHRUQ8L2VtcGhhc2lzPi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+TW91bnRpbmcgRkFUIGZpbGVzeXN0ZW1zPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgRkFUIGZpbGVzeXN0ZW0gY2FuIGJlIG1vdW50ZWQgd2l0aCBwZXJtaXNzaW9ucyBsZXNzIHJlc3RyaWN0aXZlCiAgICAgICAgICAgIHRoYW4gdGhlIGRlZmF1bHQuICBUaGlzIGNhbiBiZSBkb25lIGJ5IGVpdGhlciBjaGFuZ2luZyB0aGUgdXNlciB0aGF0CiAgICAgICAgICAgIG1vdW50cyB0aGUgRkFUIGZpbGVzeXN0ZW0gb3IgYnkgZXhwbGljaXRseSBjaGFuZ2luZyB0aGUgcGVybWlzc2lvbnMKICAgICAgICAgICAgdGhhdCB0aGUgRkFUIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCB3aXRoLiAgVGhlIHBlcm1pc3Npb25zIGFyZQogICAgICAgICAgICBpbmhlcml0ZWQgZnJvbSB0aGUgcHJvY2VzcyB0aGF0IG1vdW50cyB0aGUgRkFUIGZpbGVzeXN0ZW0uICBTaW5jZSB0aGUKICAgICAgICAgICAgcHJvY2VzcyB0aGF0IG1vdW50cyB0aGUgRkFUIGZpbGVzeXN0ZW0gaXMgdXN1YWxseSBhIHN0YXJ0dXAgc2NyaXB0CiAgICAgICAgICAgIHJ1bm5pbmcgYXMgcm9vdCB0aGUgRkFUIGZpbGVzeXN0ZW0gaW5oZXJpdHMgcm9vdCdzIHBlcm1pc3Npb25zLiAgVGhpcwogICAgICAgICAgICByZXN1bHRzIGluIHRoZSBmaWxlcyBvbiB0aGUgRkFUIGZpbGVzeXN0ZW0gaGF2aW5nIHBlcm1pc3Npb25zIHNpbWlsYXIKICAgICAgICAgICAgdG8gZmlsZXMgY3JlYXRlZCBieSByb290LiAgRm9yIGV4YW1wbGU6CiAgICAgICAgICA8L3BhcmE+CiAgPHNjcmVlbj4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD53aG9hbWk8L3VzZXJpbnB1dD4KICA8Y29tcHV0ZXJvdXRwdXQ+cm9vdDwvY29tcHV0ZXJvdXRwdXQ+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+dG91Y2ggcm9vdF9maWxlPC91c2VyaW5wdXQ+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bHMgLWwgcm9vdF9maWxlPC91c2VyaW5wdXQ+CiAgPGNvbXB1dGVyb3V0cHV0PjwvY29tcHV0ZXJvdXRwdXQ+LXJ3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgIDAgRGVjIDEwIDAwOjIwIHJvb3RfZmlsZQogIDwvc2NyZWVuPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIHdoaWNoIG1hdGNoZXMgdGhlIG93bmVyLCBncm91cCBhbmQgcGVybWlzc2lvbnMgb2YgZmlsZXMgc2VlbgogICAgICAgICAgICBvbiB0aGUgRkFUIGZpbGVzeXN0ZW0gZXhjZXB0IGZvciB0aGUgbWlzc2luZyAneCdzLiAgVGhlCiAgICAgICAgICAgIHBlcm1pc3Npb25zIG9uIHRoZSBGQVQgZmlsZXN5c3RlbSBjYW4gYmUgY2hhbmdlZCBieSBjaGFuZ2luZwogICAgICAgICAgICByb290J3MgdW1hc2sgKHVuc2V0IHBlcm1pc3Npb25zIGJpdHMpLiAgRm9yIGV4YW1wbGU6CiAgICAgICAgICA8L3BhcmE+CiAgPHNjcmVlbj4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD51bW91bnQgL2M8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD51bWFzazwvdXNlcmlucHV0PgogIDxjb21wdXRlcm91dHB1dD4wMjI8L2NvbXB1dGVyb3V0cHV0PgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PnVtYXNrIDA3MzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0Pm1vdW50IC9jPC91c2VyaW5wdXQ+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Y2QgL2M8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pi9jPjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bHMgLWw8L3VzZXJpbnB1dD4KICA8Y29tcHV0ZXJvdXRwdXQ+LXJ3eC0tLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgOTEgT2N0IDEwIDE3OjU4IGF1dG9leGVjLmJhdAogIC1yd3gtLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgMjQ1IE9jdCAxMCAxNzo1OCBjb25maWcuc3lzCiAgZHJ3eC0tLXItLSAgNDEgcm9vdCAgICAgcm9vdCAgICAgICAgMTYzODQgRGVjIDMwICAxOTk4IHdpbmRvd3M8L2NvbXB1dGVyb3V0cHV0PgogIDwvc2NyZWVuPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIE1vdW50aW5nIHRoZSBGQVQgZmlsZXN5c3RlbSB3aXRoIGEgdW1hc2sgb2YKICAgICAgICAgICAgPGxpdGVyYWw+MDAwPC9saXRlcmFsPiBnaXZlcyBhbGwgdXNlcnMgY29tcGxldGUgY29udHJvbCBvdmVyCiAgICAgICAgICAgIGl0LiBFeHBsaWNpdGx5IHNwZWNpZnlpbmcgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBGQVQKICAgICAgICAgICAgZmlsZXN5c3RlbSB3aGVuIGl0IGlzIG1vdW50ZWQgcHJvdmlkZXMgYWRkaXRpb25hbCBjb250cm9sLgogICAgICAgICAgICBUaGVyZSBhcmUgdGhyZWUgbW91bnQgb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byBGQVQKICAgICAgICAgICAgcGVybWlzc2lvbnM6IDxsaXRlcmFsPnVpZDwvbGl0ZXJhbD4sIDxsaXRlcmFsPmdpZDwvbGl0ZXJhbD4KICAgICAgICAgICAgYW5kIDxsaXRlcmFsPnVtYXNrPC9saXRlcmFsPi4gIFRoZXkgY2FuIGVhY2ggYmUgc3BlY2lmaWVkCiAgICAgICAgICAgIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgbWFudWFsbHkgbW91bnRlZC4gIEZvciBleGFtcGxlOgogICAgICAgICAgPC9wYXJhPgogIDxzY3JlZW4+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+dW1vdW50IC9jPC91c2VyaW5wdXQ+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bW91bnQgLW8gdWlkPTUwMCAtbyBnaWQ9NTAwIC1vIHVtYXNrPTAwMiAvYzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PmNkIC9jPC91c2VyaW5wdXQ+CiAgPHByb21wdD4vYz48L3Byb21wdD48dXNlcmlucHV0PmxzIC1sPC91c2VyaW5wdXQ+CiAgPGNvbXB1dGVyb3V0cHV0Pi1yd3hyd3hyLXggICAxIHNsZSAgICAgIHNsZSAgICAgICAgICAgIDkxIE9jdCAxMCAxNzo1OCBhdXRvZXhlYy5iYXQKICAtcnd4cnd4ci14ICAgMSBzbGUgICAgICBzbGUgICAgICAgICAgIDI0NSBPY3QgMTAgMTc6NTggY29uZmlnLnN5cwogIGRyd3hyd3hyLXggIDQxIHNsZSAgICAgIHNsZSAgICAgICAgIDE2Mzg0IERlYyAzMCAgMTk5OCB3aW5kb3dzPC9jb21wdXRlcm91dHB1dD4KICA8L3NjcmVlbj4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICB3aGljaCBnaXZlcyAic2xlIiBjb21wbGV0ZSBjb250cm9sIG92ZXIKICAgICAgICAgICAgPGZpbGVuYW1lPi9jPC9maWxlbmFtZT4uICBUaGUgb3B0aW9ucyBsaXN0ZWQgYWJvdmUgY2FuIGJlCiAgICAgICAgICAgIG1hZGUgcGVybWFuZW50IGJ5IGFkZGluZyB0aGVtIHRvIHRoZQogICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9mc3RhYjwvZmlsZW5hbWU+IGZpbGU6CiAgICAgICAgICA8L3BhcmE+CiAgPHNjcmVlbj4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD5ncmVwIC9jIC9ldGMvZnN0YWI8L3VzZXJpbnB1dD4KICA8Y29tcHV0ZXJvdXRwdXQ+L2Rldi9oZGExICAvYyAgdmZhdCAgdWlkPTUwMCxnaWQ9NTAwLHVtYXNrPTAwMixleGVjLGRldixzdWlkLHJ3IDEgMTwvY29tcHV0ZXJvdXRwdXQ+CiAgPC9zY3JlZW4+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSB1bWFzayBvZiA8bGl0ZXJhbD4wMDI8L2xpdGVyYWw+IGlzIGNvbW1vbiBpbgogICAgICAgICAgICB0aGUgdXNlciBwcml2YXRlIGdyb3VwIGZpbGUgcGVybWlzc2lvbiBzY2hlbWUuICBPbiBGQVQgZmlsZQogICAgICAgICAgICBzeXN0ZW1zIHRoaXMgdW1hc2sgYXNzdXJlcyB0aGF0IGFsbCBmaWxlcyBhcmUgZnVsbHkKICAgICAgICAgICAgYWNjZXNzaWJsZSBieSBhbGwgdXNlcnMgaW4gdGhlIHNwZWNpZmllZCB1c2VyIGdyb3VwCiAgICAgICAgICAgICg8bGl0ZXJhbD5naWQ8L2xpdGVyYWw+KS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+U2hhZG93aW5nIEZBVCBmaWxlc3lzdGVtczwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgU2hhZG93aW5nIHByb3ZpZGVzIGEgZmluZXIgZ3JhbnVsYXJpdHkgb2YgY29udHJvbC4gIFBhcnRzIG9mCiAgICAgICAgICAgIHRoZSBvcmlnaW5hbCBGQVQgZmlsZXN5c3RlbSBjYW4gYmUgY29waWVkIHNvIHRoYXQgdGhlCiAgICAgICAgICAgIHByb2dyYW0gY2FuIHNhZmVseSB3b3JrIHdpdGggdGhvc2UgY29waWVkIHBhcnRzIHdoaWxlCiAgICAgICAgICAgIHRoZSBwcm9ncmFtIGNvbnRpbnVlcyB0byBkaXJlY3RseSByZWFkIHRoZSByZW1haW5pbmcKICAgICAgICAgICAgcGFydHMuICBUaGlzIGlzIGRvbmUgd2l0aCBzeW1ib2xpYyBsaW5rcy4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIGNvbnNpZGVyIGEgc3lzdGVtIHdoZXJlIGEgcHJvZ3JhbSBuYW1lZAogICAgICAgICAgICA8YXBwbGljYXRpb24+QW5BcHA8L2FwcGxpY2F0aW9uPiBtdXN0IGJlIGFibGUgdG8gcmVhZCBhbmQKICAgICAgICAgICAgd3JpdGUgdG8gdGhlIDxmaWxlbmFtZT5jOlx3aW5kb3dzPC9maWxlbmFtZT4gYW5kCiAgICAgICAgICAgIDxmaWxlbmFtZT5jOlxBbkFwcDwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGFzIHdlbGwgYXMgaGF2ZQogICAgICAgICAgICByZWFkIGFjY2VzcyB0byB0aGUgZW50aXJlIEZBVCBmaWxlc3lzdGVtLiAgT24gdGhpcyBzeXN0ZW0KICAgICAgICAgICAgdGhlIEZBVCBmaWxlc3lzdGVtIGhhcyBkZWZhdWx0IHBlcm1pc3Npb25zIHdoaWNoIHNob3VsZCBub3QKICAgICAgICAgICAgYmUgY2hhbmdlZCBmb3Igc2VjdXJpdHkgcmVhc29ucyBvciBjYW4gbm90IGJlIGNoYW5nZWQgZHVlIHRvCiAgICAgICAgICAgIGxhY2sgb2Ygcm9vdCBhY2Nlc3MuICBPbiB0aGlzIHN5c3RlbSBhIHNoYWRvdyBkaXJlY3RvcnkKICAgICAgICAgICAgbWlnaHQgYmUgc2V0IHVwIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOgogICAgICAgICAgPC9wYXJhPgogIDxzY3JlZW4+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Y2QgLzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+Lz48L3Byb21wdD48dXNlcmlucHV0Pm1rZGlyIGNfc2hhZG93PC91c2VyaW5wdXQ+CiAgPHByb21wdD4vPjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Y2QgY19zaGFkb3c8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pi9jX3NoYWRvdz48L3Byb21wdD48dXNlcmlucHV0PmxuIC1zIC9jXy8qIC48L3VzZXJpbnB1dD4KICA8cHJvbXB0Pi9jX3NoYWRvdz48L3Byb21wdD48dXNlcmlucHV0PnJtIHdpbmRvd3MgQW5BcHA8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pi9jX3NoYWRvdz48L3Byb21wdD48dXNlcmlucHV0PmNwIC1SIC9jXy97d2luZG93cyxBbkFwcH0gLjwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2Nfc2hhZG93PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Y2htb2QgLVIgNzc3IHdpbmRvd3MgQW5BcHA8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pi9jX3NoYWRvdz48L3Byb21wdD48dXNlcmlucHV0PnBlcmwgLXAgLWkgLWUgJ3N8L2MkfC9jX3NoYWRvd3xnJyB+Ly53aW5lL2NvbmZpZzwvdXNlcmlucHV0PgogIDwvc2NyZWVuPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgYWJvdmUgZ2l2ZXMgZXZlcnlvbmUgY29tcGxldGUgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvCiAgICAgICAgICB0aGUgPGZpbGVuYW1lPndpbmRvd3M8L2ZpbGVuYW1lPiBhbmQKICAgICAgICAgIDxmaWxlbmFtZT5BbkFwcDwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIHdoaWxlIG9ubHkgcm9vdCBoYXMKICAgICAgICAgIHdyaXRlIGFjY2VzcyB0byBhbGwgb3RoZXIgZGlyZWN0b3JpZXMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLWRyaXZlLWNkcm9tLWxhYmVscyI+CgogICAgICA8dGl0bGU+RHJpdmUgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVyczwvdGl0bGU+CiAgICAgIDxwYXJhPgogICAgICAgIFVudGlsIG5vdywgeW91ciBvbmx5IHBvc3NpYmlsaXR5IG9mIHNwZWNpZnlpbmcgZHJpdmUgdm9sdW1lCiAgICAgICAgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycyB3YXMgdG8gc2V0IHRoZW0gbWFudWFsbHkgaW4gdGhlIHdpbmUKICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuIEJ5IG5vdywgd2luZSBjYW4gcmVhZCB0aGVtIGRpcmVjdGx5IGZyb20gdGhlCiAgICAgICAgZGV2aWNlIGFzIHdlbGwuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IgbWFueSBXaW4gOXggZ2FtZXMgb3IKICAgICAgICBmb3Igc2V0dXAgcHJvZ3JhbXMgZGlzdHJpYnV0ZWQgb24gQ0QtUk9NcyB0aGF0IGNoZWNrIGZvcgogICAgICAgIHZvbHVtZSBsYWJlbC4KICAgICAgPC9wYXJhPgoKICAgICAgPHNlY3QzPgogICAgICAgIDx0aXRsZT5XaGF0J3MgU3VwcG9ydGVkPzwvdGl0bGU+CgogICAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJhbGwiPgogICAgICAgICAgPHRncm91cCBjb2xzPSIzIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAJPHJvdz4KICAgICAgCSAgPGVudHJ5PkZpbGUgU3lzdGVtPC9lbnRyeT4KICAgICAgCSAgPGVudHJ5PlR5cGVzPC9lbnRyeT4KICAgICAgCSAgPGVudHJ5PkNvbW1lbnQ8L2VudHJ5PgogICAgICAJPC9yb3c+CiAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgCTxyb3c+CiAgICAgIAkgIDxlbnRyeT5GQVQgc3lzdGVtczwvZW50cnk+CiAgICAgIAkgIDxlbnRyeT5oZCwgZmxvcHB5PC9lbnRyeT4KICAgICAgCSAgPGVudHJ5PnJlYWRzIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnM8L2VudHJ5PgogICAgICAJPC9yb3c+CiAgICAgIAk8cm93PgogICAgICAJICA8ZW50cnk+SVNPOTY2MDwvZW50cnk+CiAgICAgIAkgIDxlbnRyeT5jZHJvbTwvZW50cnk+CiAgICAgIAkgIDxlbnRyeT5yZWFkcyBsYWJlbHMgYW5kIHNlcmlhbCBudW1iZXJzIChub3QgbWl4ZWQtbW9kZSBDRHMgeWV0ISk8L2VudHJ5PgogICAgICAJPC9yb3c+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICA8L3Rncm91cD4KICAgICAgICA8L2luZm9ybWFsdGFibGU+CgogICAgICA8L3NlY3QzPgoKICAgICAgPHNlY3QzPgogICAgICAgIDx0aXRsZT5Ib3cgVG8gU2V0IFVwPzwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBSZWFkaW5nIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMganVzdCB3b3JrcyBhdXRvbWF0aWNhbGx5CiAgICAgICAgICBpZiB5b3Ugc3BlY2lmeSBhIDxsaXRlcmFsPiJEZXZpY2UiID08L2xpdGVyYWw+IGxpbmUgaW4gdGhlCiAgICAgICAgICBbRHJpdmUgeF0gc2VjdGlvbiBpbiB5b3VyIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+LgogICAgICAgICAgTm90ZSB0aGF0IHRoZSBkZXZpY2UgaGFzIHRvIGV4aXN0IGFuZCBtdXN0IGJlIGFjY2Vzc2libGUgYnkgdGhlIHVzZXIKICAgICAgICAgIHJ1bm5pbmcgV2luZSBpZiB5b3UgZG8gdGhpcywgdGhvdWdoLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIElmIHlvdSBkb24ndCB3YW50IHRvIHJlYWQgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycyBkaXJlY3RseSBmcm9tCiAgICAgICAgICB0aGUgZGV2aWNlLCB5b3UgY2FuIGNyZWF0ZSBmaWxlcyBhdCB0aGUgcm9vdCBvZiB0aGUgZHJpdmUKICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT4ud2luZG93cy1sYWJlbDwvZmlsZW5hbWU+IGFuZAogICAgICAgICAgPGZpbGVuYW1lPi53aW5kb3dzLXNlcmlhbDwvZmlsZW5hbWU+IHJlc3BlY3RpdmVseS4gVGhlc2UgYXJlCiAgICAgICAgICBzaW1wbGUgQVNDSUkgZmlsZXMgdGhhdCB5b3UgY2FuIGNyZWF0ZSB3aXRoIGFueSB0ZXh0IGVkaXRvcjsKICAgICAgICAgIHRoZSBsYWJlbCBjYW4gYmUgc2V0IHRvIGFueSBzdHJpbmcgeW91IGxpa2UsIHRoZSBzZXJpYWwKICAgICAgICAgIG51bWJlciBzaG91bGQgYmUgZXhwcmVzc2VkIGFzIGFuIGhleGFkZWNpbWFsIG51bWJlci4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDM+CgogICAgICA8c2VjdDM+CiAgICAgICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIEhlcmUncyBhIHNpbXBsZSBleGFtcGxlIG9mIENELVJPTSBhbmQgZmxvcHB5OgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CltEcml2ZSBBXQoiUGF0aCIgPSAiL21udC9mbG9wcHkiCiJUeXBlIiA9ICJmbG9wcHkiCiJEZXZpY2UiID0gIi9kZXYvZmQwIgoKW0RyaXZlIFJdCiJQYXRoIiA9ICIvbW50L2Nkcm9tIgoiVHlwZSIgPSAiY2Ryb20iCiJEZXZpY2UiID0gIi9kZXYvaGRhMSIKICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICA8L3NlY3QzPgoKICAgICAgPHNlY3QzPgogICAgICAgIDx0aXRsZT5Ub2RvIC8gT3BlbiBJc3N1ZXM8L3RpdGxlPgogICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAJVGhlIENELVJPTSBsYWJlbCBjYW4gYmUgcmVhZCBvbmx5IGlmIHRoZSBkYXRhIHRyYWNrIG9mCiAgICAgIAl0aGUgZGlzayByZXNpZGVzIGluIHRoZSBmaXJzdCB0cmFjayBhbmQgdGhlIGNkcm9tIGlzCiAgICAgIAlpc285NjYwLgogICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAJU3VwcG9ydCBmb3IgbGFiZWxzL3NlcmlhbCBudW1zIFdSSVRJTkcuCiAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+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+Cjx0aXRsZT5ETEwgT3ZlcnJpZGVzPC90aXRsZT4KCjxwYXJhPgogIFRoZSB3aW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmVzIFtEbGxEZWZhdWx0c10KICBhbmQgW0RsbE92ZXJyaWRlc10gYXJlIHRoZSBzdWJqZWN0IG9mIHNvbWUgY29uZnVzaW9uLiBUaGUKICBvdmVyYWxsIHB1cnBvc2Ugb2YgbW9zdCBvZiB0aGVzZSBkaXJlY3RpdmVzIGFyZSBjbGVhciBlbm91Z2gsCiAgdGhvdWdoIC0gZ2l2ZW4gYSBjaG9pY2UsIHNob3VsZCBXaW5lIHVzZSBpdHMgb3duIGJ1aWx0LWluCiAgRExMcywgb3Igc2hvdWxkIGl0IHVzZSA8ZmlsZW5hbWU+LkRMTDwvZmlsZW5hbWU+IGZpbGVzIGZvdW5kCiAgaW4gYW4gZXhpc3RpbmcgV2luZG93cyBpbnN0YWxsYXRpb24/IFRoaXMgZG9jdW1lbnQgZXhwbGFpbnMKICBob3cgdGhpcyBmZWF0dXJlIHdvcmtzLgo8L3BhcmE+Cgo8c2VjdDM+CiAgPHRpdGxlPkRMTCB0eXBlczwvdGl0bGU+CiAgPHZhcmlhYmxlbGlzdD4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPm5hdGl2ZTwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgQSAibmF0aXZlIiBETEwgaXMgYSA8ZmlsZW5hbWU+LkRMTDwvZmlsZW5hbWU+IGZpbGUKCSAgd3JpdHRlbiBmb3IgdGhlIHJlYWwgTWljcm9zb2Z0IFdpbmRvd3MuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPmJ1aWx0aW48L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIEEgImJ1aWx0LWluIiBETEwgaXMgYSBXaW5lIERMTC4gVGhlc2UgY2FuIGVpdGhlciBiZSBhCgkgIHBhcnQgb2YgPGZpbGVuYW1lPmxpYndpbmUuc288L2ZpbGVuYW1lPiwgb3IgbW9yZQoJICByZWNlbnRseSwgaW4gYSBzcGVjaWFsIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlCgkgIHRoYXQgV2luZSBpcyBhYmxlIHRvIGxvYWQgb24gZGVtYW5kLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgPC92YXJpYWJsZWxpc3Q+Cjwvc2VjdDM+Cgo8c2VjdDM+CiAgPHRpdGxlPlRoZSBbRGxsRGVmYXVsdHNdIHNlY3Rpb248L3RpdGxlPgogIDx2YXJpYWJsZWxpc3Q+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5EZWZhdWx0TG9hZE9yZGVyPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBUaGlzIHNwZWNpZmllcyBpbiB3aGF0IG9yZGVyIFdpbmUgc2hvdWxkIHNlYXJjaCBmb3IKCSAgYXZhaWxhYmxlIERMTCB0eXBlcywgaWYgdGhlIERMTCBpbiBxdWVzdGlvbiB3YXMgbm90CgkgIGZvdW5kIGluIHRoZSBbRGxsT3ZlcnJpZGVzXSBzZWN0aW9uLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgPC92YXJpYWJsZWxpc3Q+Cjwvc2VjdDM+Cgo8c2VjdDM+CiAgPHRpdGxlPlRoZSBbRGxsUGFpcnNdIHNlY3Rpb248L3RpdGxlPgogIDxwYXJhPgogICAgQXQgb25lIHRpbWUsIHRoZXJlIHdhcyBhIHNlY3Rpb24gY2FsbGVkIFtEbGxQYWlyc10gaW4gdGhlCiAgICBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSwgYnV0IHRoaXMgaGFzIGJlZW4gb2Jzb2xldGVkCiAgICBiZWNhdXNlIHRoZSBwYWlyaW5nIGluZm9ybWF0aW9uIGhhcyBub3cgYmVlbiBlbWJlZGRlZCBpbnRvCiAgICBXaW5lIGl0c2VsZi4gKFRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB3YXMgbWVyZWx5IHRvIGJlCiAgICBhYmxlIHRvIGlzc3VlIHdhcm5pbmdzIGlmIHRoZSB1c2VyIGF0dGVtcHRlZCB0byBwYWlyCiAgICBjb2RlcGVuZGVudCAxNi1iaXQvMzItYml0IERMTHMgb2YgZGlmZmVyZW50IHR5cGVzLikgSWYgeW91CiAgICBzdGlsbCBoYXZlIHRoaXMgaW4geW91ciA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBvcgogICAgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+LCB5b3UgbWF5IHNhZmVseSBkZWxldGUgaXQuCiAgPC9wYXJhPgo8L3NlY3QzPgoKPHNlY3QzPgogIDx0aXRsZT5UaGUgW0RsbE92ZXJyaWRlc10gc2VjdGlvbjwvdGl0bGU+CiAgPHBhcmE+CiAgICBUaGlzIHNlY3Rpb24gc3BlY2lmaWVzIGhvdyB5b3Ugd2FudCBzcGVjaWZpYyBETExzIHRvIGJlCiAgICBoYW5kbGVkLCBpbiBwYXJ0aWN1bGFyIHdoZXRoZXIgeW91IHdhbnQgdG8gdXNlICJuYXRpdmUiIERMTHMKICAgIG9yIG5vdCwgaWYgeW91IGhhdmUgc29tZSBmcm9tIGEgcmVhbCBXaW5kb3dzIGNvbmZpZ3VyYXRpb24uCiAgICBCZWNhdXNlIGJ1aWx0LWlucyBkbyBub3QgbWl4IHNlYW1sZXNzbHkgd2l0aCBuYXRpdmUgRExMcyB5ZXQsCiAgICBjZXJ0YWluIERMTCBkZXBlbmRlbmNpZXMgbWF5IGJlIHByb2JsZW1hdGljLCBidXQgd29ya2Fyb3VuZHMKICAgIGV4aXN0IGluIFdpbmUgZm9yIG1hbnkgcG9wdWxhciBETEwgY29uZmlndXJhdGlvbnMuIEFsc28gc2VlCiAgICBXV04ncyBbMTZdU3RhdHVzIFBhZ2UgdG8gZmlndXJlIG91dCBob3cgd2VsbCB5b3VyIGZhdm9yaXRlCiAgICBETEwgaXMgaW1wbGVtZW50ZWQgaW4gV2luZS4KICA8L3BhcmE+CiAgPHBhcmE+CiAgICBJdCBpcyBvZiBjb3Vyc2UgYWxzbyBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGVzZSBzZXR0aW5ncyBieQogICAgZXhwbGljaXRseSB1c2luZyBXaW5lJ3MgPHBhcmFtZXRlcj4tLWRsbDwvcGFyYW1ldGVyPgogICAgY29tbWFuZC1saW5lIG9wdGlvbiAoc2VlIHRoZSBtYW4gcGFnZSBmb3IgZGV0YWlscykuICBTb21lCiAgICBoaW50cyBmb3IgY2hvb3NpbmcgeW91ciBvcHRpbWFsIGNvbmZpZ3VyYXRpb24gKGxpc3RlZCBieQogICAgMTYvMzItYml0IERMTCBwYWlyKToKICA8L3BhcmE+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+TWlzc2luZyBETExzPC90aXRsZT4KCjxwYXJhPgogIEluIGNhc2UgV2luZSBjb21wbGFpbnMgYWJvdXQgYSBtaXNzaW5nIERMTCwgeW91IHNob3VsZCBjaGVjayB3aGV0aGVyCiAgdGhpcyBmaWxlIGlzIGEgcHVibGljbHkgYXZhaWxhYmxlIERMTCBvciBhIGN1c3RvbSBETEwgYmVsb25naW5nCiAgdG8geW91ciBwcm9ncmFtIChieSBzZWFyY2hpbmcgZm9yIGl0cyBuYW1lIG9uIHRoZSBpbnRlcm5ldCkuCiAgSWYgeW91IG1hbmFnZWQgdG8gZ2V0IGhvbGQgb2YgdGhlIERMTCwgdGhlbiB5b3Ugc2hvdWxkIG1ha2Ugc3VyZQogIHRoYXQgV2luZSBpcyBhYmxlIHRvIGZpbmQgYW5kIGxvYWQgaXQuCiAgRExMcyB1c3VhbGx5IGdldCBsb2FkZWQgYWNjb3JkaW5nIHRvIHRoZSBtZWNoYW5pc20gb2YgdGhlCiAgU2VhcmNoUGF0aCgpIGZ1bmN0aW9uLgogIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZGlyZWN0b3JpZXMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKCiAgPG9yZGVyZWRsaXN0PgogICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KCVRoZSBkaXJlY3RvcnkgdGhlIHByb2dyYW0gd2FzIHN0YXJ0ZWQgZnJvbS4KICAgICAgPC9wYXJhPgogICAgPC9saXN0aXRlbT4KICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CglUaGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgoJVGhlIFdpbmRvd3Mgc3lzdGVtIGRpcmVjdG9yeS4KICAgICAgPC9wYXJhPgogICAgPC9saXN0aXRlbT4KICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CglUaGUgV2luZG93cyBkaXJlY3RvcnkuCiAgICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgoJVGhlIFBBVEggdmFyaWFibGUgZGlyZWN0b3JpZXMuCiAgICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAgPC9vcmRlcmVkbGlzdD4KCiAgSW4gc2hvcnQ6IGVpdGhlciBwdXQgdGhlIHJlcXVpcmVkIERMTCBpbnRvIHlvdXIgcHJvZ3JhbQogIGRpcmVjdG9yeSAobWlnaHQgYmUgdWdseSksIG9yIHVzdWFsbHkgcHV0IGl0IGludG8gdGhlIFdpbmRvd3Mgc3lzdGVtCiAgZGlyZWN0b3J5LiBKdXN0IGZpbmQgb3V0IGl0cyBkaXJlY3RvcnkgYnkgaGF2aW5nIGEgbG9vayBhdCB0aGUgV2luZQogIGNvbmZpZ3VyYXRpb24gZmlsZSB2YXJpYWJsZSAiU3lzdGVtIiAod2hpY2ggaW5kaWNhdGVzIHRoZSBsb2NhdGlvbiBvZiB0aGUKICBXaW5kb3dzIHN5c3RlbSBkaXJlY3RvcnkpIGFuZCB0aGUgYXNzb2NpYXRlZCBkcml2ZSBlbnRyeS4KICBOb3RlIHRoYXQgeW91IHByb2JhYmx5IHNob3VsZG4ndCB1c2UgTlQtYmFzZWQgbmF0aXZlIERMTHMsCiAgc2luY2UgV2luZSdzIE5UIEFQSSBzdXBwb3J0IGlzIHNvbWV3aGF0IHdlYWtlciB0aGFuIGl0cyBXaW45eAogIEFQSSBzdXBwb3J0ICh0aHVzIGxlYWRpbmcgdG8gZXZlbiB3b3JzZSBjb21wYXRpYmlsaXR5IHdpdGggTlQgRExMcwogIHRoYW4gd2l0aCBhIG5vLXdpbmRvd3Mgc2V0dXAhKSwgc28gYmV0dGVyIHVzZSBXaW45eCBuYXRpdmUgRExMcwogIGluc3RlYWQgb3Igbm8gbmF0aXZlIERMTHMgYXQgYWxsLgo8L3BhcmE+Cjwvc2VjdDI+Cgo8c2VjdDIgaWQ9ImNvbmZpZy1kbGwtd2luZG93cyI+Cjx0aXRsZT5GZXRjaGluZyBuYXRpdmUgRExMcyBmcm9tIGEgV2luZG93cyBDRDwvdGl0bGU+Cgo8cGFyYT4KVGhlIExpbnV4IDxjb21tYW5kPmNhYmV4dHJhY3Q8L2NvbW1hbmQ+IHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8KZXh0cmFjdCBuYXRpdmUgV2luZG93cyAuZGxsIGZpbGVzIGZyb20gLmNhYiBmaWxlcyB0aGF0IGFyZSB0byBiZQpmb3VuZCBvbiBtYW55IFdpbmRvd3MgaW5zdGFsbGF0aW9uIENEcy4KPC9wYXJhPgo8L3NlY3QyPgo8L3NlY3QxPgoKPHNlY3QxIGlkPSJjb25maWctZ3JhcGhpY3MtZHJpdmVyIj4KPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBncmFwaGljcyBkcml2ZXIgKHgxMWRydiwgdHR5ZHJ2IGV0Yy4pPC90aXRsZT4KCjxwYXJhPgpXaW5lIGN1cnJlbnRseSBzdXBwb3J0cyBzZXZlcmFsIGRpZmZlcmVudCBkaXNwbGF5IHN1YnN5c3RlbXMKKGdyYXBoaWNzIC8gdGV4dCkgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHZhcmlvdXMgb3BlcmF0aW5nCnN5c3RlbXMgdG9kYXkuCkZvciBlYWNoIG9mIHRoZXNlLCBXaW5lIGltcGxlbWVudHMgaXRzIG93biBpbnRlcmZhY2luZyBkcml2ZXIuClRoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gc2VsZWN0IG9uZSBvZiB0aGVzZSBkcml2ZXJzCmFuZCBob3cgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIHJlc3BlY3RpdmUgZHJpdmVyLgpPbmNlIHlvdSdyZSBmaW5pc2hlZCB3aXRoIHRoYXQsIHlvdSBjYW4gY29uc2lkZXIgeW91ciBXaW5lIGluc3RhbGxhdGlvbgp0byBiZSBmaW5pc2hlZC4KPC9wYXJhPgoKPHBhcmE+ClRoZSBkaXNwbGF5IGRyaXZlcnMgY3VycmVudGx5IGltcGxlbWVudGVkIGluIFdpbmUgYXJlOgp4MTFkcnYsIHdoaWNoIGlzIHVzZWQgZm9yIGludGVyZmFjaW5nIHRvIFgxMSBncmFwaGljcwoodGhlIG9uZSB5b3UnbGwgbW9zdCBsaWtlbHkgd2FudCB0byB1c2UpIGFuZCB0dHlkcnYKKHVzZWQgZm9yIHRleHQgbW9kZSBjb25zb2xlIGFwcHMgbWFpbmx5IHRoYXQgZG9uJ3QgcmVhbGx5IG5lZWQKYW55IGdyYXBoaWNzIG91dHB1dCkuCk9uY2UgeW91IGhhdmUgZGVjaWRlZCB3aGljaCBkaXNwbGF5IGRyaXZlciB0byB1c2UsIGl0IGlzIGNob3Nlbgp3aXRoIHRoZSA8bGl0ZXJhbD5HcmFwaGljc0RyaXZlcjwvbGl0ZXJhbD4gb3B0aW9uIGluIHRoZQpbd2luZV0gc2VjdGlvbiBvZiA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPi4KPC9wYXJhPgoKPHNlY3QyPgo8dGl0bGU+Q29uZmlndXJpbmcgdGhlIHgxMWRydiBncmFwaGljcyBkcml2ZXI8L3RpdGxlPgoKPHNlY3QzPgogIDx0aXRsZT54MTFkcnYgbW9kZXMgb2Ygb3BlcmF0aW9uPC90aXRsZT4KCiAgPHBhcmE+CiAgICBUaGUgeDExZHJ2IGRyaXZlciBjb25zaXN0cyBvZiB0d28gY29uY2VwdHVhbGx5IGRpc3RpbmN0CiAgICBwaWVjZXMsIHRoZSBncmFwaGljcyBkcml2ZXIgKEdESSBwYXJ0KSwgYW5kIHRoZSB3aW5kb3dpbmcKICAgIGRyaXZlciAoVVNFUiBwYXJ0KS4gQm90aCBvZiB0aGVzZSBhcmUgbGlua2VkIGludG8gdGhlCiAgICA8ZmlsZW5hbWU+bGlieDExZHJ2LnNvPC9maWxlbmFtZT4gbW9kdWxlLCB0aG91Z2ggKHdoaWNoIHlvdQogICAgbG9hZCB3aXRoIHRoZSA8bGl0ZXJhbD5HcmFwaGljc0RyaXZlcjwvbGl0ZXJhbD4gb3B0aW9uKS4gSW4KICAgIFdpbmUsIHJ1bm5pbmcgb24gWDExLCB0aGUgZ3JhcGhpY3MgZHJpdmVyIG11c3QgZHJhdyBvbgogICAgZHJhd2FibGVzICh3aW5kb3cgaW50ZXJpb3JzKSBwcm92aWRlZCBieSB0aGUgd2luZG93aW5nCiAgICBkcml2ZXIuIFRoaXMgZGlmZmVycyBhIGJpdCBmcm9tIHRoZSBXaW5kb3dzIG1vZGVsLCB3aGVyZSB0aGUKICAgIHdpbmRvd2luZyBzeXN0ZW0gY3JlYXRlcyBhbmQgY29uZmlndXJlcyBkZXZpY2UgY29udGV4dHMKICAgIGNvbnRyb2xsZWQgYnkgdGhlIGdyYXBoaWNzIGRyaXZlciwgYW5kIHByb2dyYW1zIGFyZQogICAgYWxsb3dlZCB0byBob29rIGludG8gdGhpcyByZWxhdGlvbnNoaXAgYW55d2hlcmUgdGhleSBsaWtlLgogICAgVGh1cywgdG8gcHJvdmlkZSBhbnkgcmVhc29uYWJsZSB0cmFkZW9mZiBiZXR3ZWVuCiAgICBjb21wYXRpYmlsaXR5IGFuZCB1c2FiaWxpdHksIHRoZSB4MTFkcnYgaGFzIHRocmVlIGRpZmZlcmVudAogICAgbW9kZXMgb2Ygb3BlcmF0aW9uLgogIDwvcGFyYT4KCiAgPHZhcmlhYmxlbGlzdD4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPk1hbmFnZWQ8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBUaGUgZGVmYXVsdC4gU3BlY2lmaWVkIGJ5IHVzaW5nIHRoZSA8bGl0ZXJhbD5NYW5hZ2VkPC9saXRlcmFsPgoJICB3aW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBvcHRpb24gKHNlZSBiZWxvdykuCgkgIE9yZGluYXJ5IHRvcC1sZXZlbCBmcmFtZSB3aW5kb3dzIHdpdGggdGhpY2sgYm9yZGVycywKCSAgdGl0bGUgYmFycywgYW5kIHN5c3RlbSBtZW51cyB3aWxsIGJlIG1hbmFnZWQgYnkgeW91cgoJICB3aW5kb3cgbWFuYWdlci4gVGhpcyBsZXRzIHRoZXNlIHByb2dyYW1zIGludGVncmF0ZQoJICBiZXR0ZXIgd2l0aCB0aGUgcmVzdCBvZiB5b3VyIGRlc2t0b3AsIGJ1dCBtYXkgbm90CgkgIGFsd2F5cyB3b3JrIHBlcmZlY3RseSAoYSByZXdyaXRlIG9mIHRoaXMgbW9kZSBvZgoJICBvcGVyYXRpb24sIHRvIG1ha2UgaXQgbW9yZSByb2J1c3QgYW5kIGxlc3MgcGF0Y2h5LCBpcwoJICBjdXJyZW50bHkgYmVpbmcgZG9uZSwgdGhvdWdoLCBhbmQgaXQncyBwbGFubmVkIHRvIGJlCgkgIGZpbmlzaGVkIGJlZm9yZSB0aGUgV2luZSAxLjAgcmVsZWFzZSkuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPlVubWFuYWdlZCAvIE5vcm1hbDwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIFdpbmRvdyBtYW5hZ2VyIGluZGVwZW5kZW50IChhbnkgcnVubmluZwoJICB3aW5kb3cgbWFuYWdlciBpcyBpZ25vcmVkIGNvbXBsZXRlbHkpLiBXaW5kb3cKCSAgZGVjb3JhdGlvbnMgKHRpdGxlIGJhcnMsIGJvcmRlcnMsIGV0YykgYXJlIGRyYXduIGJ5CgkgIFdpbmUgdG8gbG9vayBhbmQgZmVlbCBsaWtlIHRoZSByZWFsIFdpbmRvd3MuIFRoaXMgaXMKCSAgY29tcGF0aWJsZSB3aXRoIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uIGJlaW5nIGFibGUKCSAgdG8gY29tcHV0ZSB0aGUgZXhhY3Qgc2l6ZXMgb2YgYW55IHN1Y2ggZGVjb3JhdGlvbnMsIG9yCgkgIHRoYXQgd2FudCB0byBkcmF3IHRoZWlyIG93bi4KCSAgVW5tYW5hZ2VkIG1vZGUgaXMgb25seSB1c2VkIGlmIGJvdGggTWFuYWdlZCBhbmQgRGVza3RvcAoJICBhcmUgc2V0IHRvIGRpc2FibGVkLgoJPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5EZXNrdG9wLWluLWEtQm94PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgU3BlY2lmaWVkIGJ5IHVzaW5nIHRoZSA8bGl0ZXJhbD5EZXNrdG9wPC9saXRlcmFsPgoJd2luZSBjb25maWd1cmF0aW9uIGZpbGUgb3B0aW9uIChzZWUgYmVsb3cpLgoJICAoYWRkaW5nIGEgZ2VvbWV0cnksIGUuZy4gPGxpdGVyYWw+ODAweDYwMDwvbGl0ZXJhbD4KCWZvciBhIHN1Y2gtc2l6ZWQgZGVza3RvcCwgb3IKCSAgZXZlbiA8bGl0ZXJhbD44MDB4NjAwKzArMDwvbGl0ZXJhbD4gdG8KCSAgYXV0b21hdGljYWxseSBwb3NpdGlvbiB0aGUgZGVza3RvcCBhdCB0aGUgdXBwZXItbGVmdAoJICBjb3JuZXIgb2YgdGhlIGRpc3BsYXkpLiBUaGlzIGlzIHRoZSBtb2RlIG1vc3QKCSAgY29tcGF0aWJsZSB3aXRoIHRoZSBXaW5kb3dzIG1vZGVsLiBBbGwgcHJvZ3JhbQoJICB3aW5kb3dzIHdpbGwganVzdCBiZSBXaW5lLWRyYXduIHdpbmRvd3MgaW5zaWRlIHRoZQoJICBXaW5lLXByb3ZpZGVkIGRlc2t0b3Agd2luZG93ICh3aGljaCB3aWxsIGl0c2VsZiBiZQoJICBtYW5hZ2VkIGJ5IHlvdXIgd2luZG93IG1hbmFnZXIpLCBhbmQgV2luZG93cwoJICBwcm9ncmFtcyBjYW4gcm9hbSBmcmVlbHkgd2l0aGluIHRoaXMgdmlydHVhbAoJICB3b3Jrc3BhY2UgYW5kIHRoaW5rIHRoZXkgb3duIGl0IGFsbCwgd2l0aG91dAoJICBkaXN0dXJiaW5nIHlvdXIgb3RoZXIgWCBhcHBzLgoJTm90ZTogY3VycmVudGx5IHRoZXJlJ3Mgb25lIGRlc2t0b3Agd2luZG93IGZvciBldmVyeQoJcHJvZ3JhbTsgdGhpcyB3aWxsIGJlIGZpeGVkIGF0IHNvbWUgdGltZS4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogIDwvdmFyaWFibGVsaXN0Pgo8L3NlY3QzPgoKPHNlY3QzPgogIDx0aXRsZT5UaGUgW3gxMWRydl0gc2VjdGlvbjwvdGl0bGU+CgogIDx2YXJpYWJsZWxpc3Q+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5NYW5hZ2VkPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgV2luZSBjYW4gbGV0IGZyYW1lIHdpbmRvd3MgYmUgbWFuYWdlZCBieSB5b3VyIHdpbmRvdwoJICBtYW5hZ2VyLiBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0aGF0CgkgIGJ5IGRlZmF1bHQuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPkRlc2t0b3A8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBDcmVhdGVzIGEgbWFpbiBkZXNrdG9wIHdpbmRvdyBvZiBhIHNwZWNpZmllZCBzaXplCgl0byBkaXNwbGF5IGFsbCBXaW5kb3dzIHByb2dyYW1zIGluLgoJVGhlIHNpemUgYXJndW1lbnQgY291bGQgZS5nLiBiZSAiODAweDYwMCIuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPkRYR3JhYjwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIElmIHlvdSBkb24ndCB1c2UgREdBLCB5b3UgbWF5IHdhbnQgYW4gYWx0ZXJuYXRpdmUKCSAgbWVhbnMgdG8gY29udmluY2UgdGhlIG1vdXNlIGN1cnNvciB0byBzdGF5IHdpdGhpbiB0aGUKCSAgZ2FtZSB3aW5kb3cuIFRoaXMgb3B0aW9uIGRvZXMgdGhhdC4gT2YgY291cnNlLCBhcyB3aXRoCgkgIERHQSwgaWYgV2luZSBjcmFzaGVzLCB5b3UncmUgaW4gdHJvdWJsZSAoYWx0aG91Z2ggbm90CgkgIGFzIGJhZGx5IGFzIGluIHRoZSBER0EgY2FzZSwgc2luY2UgeW91IGNhbiBzdGlsbCB1c2UKCSAgdGhlIGtleWJvYXJkIHRvIGdldCBvdXQgb2YgWCkuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPlVzZURHQTwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgRGlyZWN0RHJhdyB0byB1c2UKCSAgWEZyZWU4NidzIDxmaXJzdHRlcm0+RGlyZWN0IEdyYXBoaWNzCgkgICAgQXJjaGl0ZWN0dXJlPC9maXJzdHRlcm0+IChER0EpLCB3aGljaCBpcyBhYmxlIHRvCgkgIHRha2Ugb3ZlciB0aGUgZW50aXJlIGRpc3BsYXkgYW5kIHJ1biB0aGUgZ2FtZQoJICBmdWxsLXNjcmVlbiBhdCBtYXhpbXVtIHNwZWVkLiAoV2l0aCBER0ExIChYRnJlZTg2CgkgIDMueCksIHlvdSBzdGlsbCBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUgWCBzZXJ2ZXIgdG8gdGhlCgkgIGdhbWUncyByZXF1ZXN0ZWQgYnBwIGZpcnN0LCBidXQgd2l0aCBER0EyIChYRnJlZTg2CgkgIDQueCksIHJ1bnRpbWUgZGVwdGgtc3dpdGNoaW5nIG1heSBiZSBwb3NzaWJsZSwKCSAgZGVwZW5kaW5nIG9uIHlvdXIgZHJpdmVyJ3MgY2FwYWJpbGl0aWVzLikgQnV0IGJlIGF3YXJlCgkgIHRoYXQgaWYgV2luZSBjcmFzaGVzIHdoaWxlIGluIERHQSBtb2RlLCBpdCBtYXkgbm90IGJlCgkgIHBvc3NpYmxlIHRvIHJlZ2FpbiBjb250cm9sIG92ZXIgeW91ciBjb21wdXRlciB3aXRob3V0CgkgIHJlYm9vdGluZy4gREdBIG5vcm1hbGx5IHJlcXVpcmVzIGVpdGhlciByb290CgkgIHByaXZpbGVnZXMgb3IgcmVhZC93cml0ZSBhY2Nlc3MgdG8KCSAgPGZpbGVuYW1lPi9kZXYvbWVtPC9maWxlbmFtZT4uCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPkRlc2t0b3BEb3VibGVCdWZmZXJlZDwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIEFwcGxpZXMgb25seSBpZiB5b3UgdXNlIHRoZQoJICA8cGFyYW1ldGVyPi0tZGVza3RvcDwvcGFyYW1ldGVyPiBjb21tYW5kLWxpbmUgb3B0aW9uCgkgIHRvIHJ1biBpbiBhIGRlc2t0b3Agd2luZG93LiBTcGVjaWZpZXMgd2hldGhlciB0bwoJICBjcmVhdGUgdGhlIGRlc2t0b3Agd2luZG93IHdpdGggYSBkb3VibGUtYnVmZmVyZWQKCSAgdmlzdWFsLCBzb21ldGhpbmcgbW9zdCBPcGVuR0wgZ2FtZXMgbmVlZCB0byBydW4KCSAgY29ycmVjdGx5LgoJPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5BbGxvY1N5c3RlbUNvbG9yczwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIEFwcGxpZXMgb25seSBpZiB5b3UgaGF2ZSBhIHBhbGV0dGUtYmFzZWQgZGlzcGxheSwgaS5lLgoJICBpZiB5b3VyIFggc2VydmVyIGlzIHNldCB0byBhIGRlcHRoIG9mIDhicHAsIGFuZCBpZiB5b3UKCSAgaGF2ZW4ndCByZXF1ZXN0ZWQgYSBwcml2YXRlIGNvbG9yIG1hcC4gSXQgc3BlY2lmaWVzCgkgIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzaGFyZWQgY29sb3JtYXAgY2VsbHMgKHBhbGV0dGUKCSAgZW50cmllcykgV2luZSBzaG91bGQgb2NjdXB5LiBUaGUgaGlnaGVyIHRoaXMgdmFsdWUsCgkgIHRoZSBsZXNzIGNvbG9ycyB3aWxsIGJlIGF2YWlsYWJsZSB0byBvdGhlcgoJICBwcm9ncmFtcy4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+UHJpdmF0ZUNvbG9yTWFwPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgQXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGEgcGFsZXR0ZS1iYXNlZCBkaXNwbGF5LCBpLmUuCgkgIGlmIHlvdXIgWCBzZXJ2ZXIgaXMgc2V0IHRvIGEgZGVwdGggb2YgOGJwcC4gSXQKCSAgc3BlY2lmaWVzIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBzaGFyZWQgY29sb3IKCSAgbWFwLCBidXQgYSBwcml2YXRlIGNvbG9yIG1hcCwgd2hlcmUgYWxsIDI1NiBjb2xvcnMgYXJlCgkgIGF2YWlsYWJsZS4gVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IFdpbmUncyBwcml2YXRlCgkgIGNvbG9yIG1hcCBpcyBvbmx5IHNlZW4gd2hpbGUgdGhlIG1vdXNlIHBvaW50ZXIgaXMKCSAgaW5zaWRlIGEgV2luZSB3aW5kb3csIHNvIHBzeWNoZWRlbGljIGZsYXNoaW5nIGFuZAoJICBmdW5reSBjb2xvcnMgd2lsbCBiZWNvbWUgcm91dGluZSBpZiB5b3UgdXNlIHRoZSBtb3VzZQoJICBhIGxvdC4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+U3luY2hyb25vdXM8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBUbyBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgWDExIG9wZXJhdGlvbnMuCglJZiBXaW5lIGNyYXNoZXMgd2l0aCBhbiBYMTEgZXJyb3IsIHRoZW4geW91IHNob3VsZCBlbmFibGUKCVN5bmNocm9ub3VzIG1vZGUgdG8gZGlzYWJsZSBYMTEgcmVxdWVzdCBjYWNoaW5nIGluIG9yZGVyCgl0byBtYWtlIHN1cmUgdGhhdCB0aGUgWDExIGVycm9yIGhhcHBlbnMgZGlyZWN0bHkgYWZ0ZXIKCXRoZSBjb3JyZXNwb25kaW5nIFgxMSBjYWxsIGluIHRoZSBsb2cgZmlsZSBhcHBlYXJzLgoJV2lsbCBzbG93IGRvd24gWDExIG91dHB1dCEKCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+U2NyZWVuRGVwdGg8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBBcHBsaWVzIG9ubHkgdG8gbXVsdGktZGVwdGggZGlzcGxheXMuIEl0IHNwZWNpZmllcwoJICB3aGljaCBvZiB0aGUgYXZhaWxhYmxlIGRlcHRocyBXaW5lIHNob3VsZCB1c2UgKGFuZAoJICB0ZWxsIFdpbmRvd3MgYXBwcyBhYm91dCkuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPkRpc3BsYXk8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBUaGlzIHNwZWNpZmllcyB3aGljaCBYMTEgZGlzcGxheSB0byB1c2UsIGFuZCBpZgoJICBzcGVjaWZpZWQsIHdpbGwgb3ZlcnJpZGUgdGhlCgkgIDxlbnZhcj5ESVNQTEFZPC9lbnZhcj4gZW52aXJvbm1lbnQgdmFyaWFibGUuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPlBlcmZlY3RHcmFwaGljczwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIFRoaXMgb3B0aW9uIG9ubHkgZGV0ZXJtaW5lcyB3aGV0aGVyIGZhc3QgWDExIHJvdXRpbmVzCgkgIG9yIGV4YWN0IFdpbmUgcm91dGluZXMgd2lsbCBiZSB1c2VkIGZvciBjZXJ0YWluIFJPUAoJICBjb2RlcyBpbiBibGl0IG9wZXJhdGlvbnMuIE1vc3QgdXNlcnMgd29uJ3Qgbm90aWNlIGFueQoJICBkaWZmZXJlbmNlLgoJPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgPC92YXJpYWJsZWxpc3Q+Cjwvc2VjdDM+Cjwvc2VjdDI+Cgo8c2VjdDI+Cjx0aXRsZT5Db25maWd1cmluZyB0aGUgdHR5ZHJ2IGdyYXBoaWNzIGRyaXZlcjwvdGl0bGU+CjxwYXJhPgogIEN1cnJlbnRseSwgdGhlIHR0eWRydiBkb2Vzbid0IGhhdmUgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbgogIG9wdGlvbnMgdG8gc2V0IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCjwvcGFyYT4KPC9zZWN0Mj4KCjwvc2VjdDE+Cgo8c2VjdDEgaWQ9ImNvbmZpZy13aW5kb3dzLXZlcnNpb25zIj4KCjx0aXRsZT5TZXR0aW5nIHRoZSBXaW5kb3dzIGFuZCBET1MgdmVyc2lvbiB2YWx1ZTwvdGl0bGU+Cgo8cGFyYT4KVGhlIHdpbmRvd3MgYW5kIERPUyB2ZXJzaW9uIHZhbHVlIGEgcHJvZ3JhbSBnZXRzIGUuZy4gYnkgY2FsbGluZyB0aGUKV2luZG93cyBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgcGxheXMgYSB2ZXJ5IGltcG9ydGFudCByb2xlOgpJZiB5b3VyIFdpbmUgaW5zdGFsbGF0aW9uIGZvciB3aGF0ZXZlciByZWFzb24gZmFpbHMgdG8gcHJvdmlkZQp0byB5b3VyIHByb2dyYW0gdGhlIGNvcnJlY3QgdmVyc2lvbiB2YWx1ZSB0aGF0IGl0IGV4cGVjdHMsCnRoZW4gdGhlIHByb2dyYW0gbWlnaHQgYXNzdW1lIHNvbWUgdmVyeSBiYWQgdGhpbmdzIGFuZCBmYWlsIChpbgp0aGUgd29yc3QgY2FzZSBldmVuIHNpbGVudGx5ISkuCgpGb3J0dW5hdGVseSBXaW5lIGNvbnRhaW5zIHNvbWUgbW9yZSBvciBsZXNzIGludGVsbGlnZW50IFdpbmRvd3MKdmVyc2lvbiBndWVzc2luZyBhbGdvcml0aG0gdGhhdCB3aWxsIHRyeSB0byBndWVzcyB0aGUgV2luZG93cwp2ZXJzaW9uIGEgcHJvZ3JhbSBtaWdodCBleHBlY3QgYW5kIHBhc3MgdGhhdCBvbmUgb24gdG8gdGhlCnByb2dyYW0uCgpUaHVzIHlvdSBzaG91bGQgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGxpZ2h0bHkgY29uZmlndXJlIGEgdmVyc2lvbiB2YWx1ZSwgYXMgdGhpcyB3aWxsIGJlIGEgImZvcmNlZCIgdmFsdWUgYW5kIHRodXMgdHVybiBvdXQgdG8gYmUgcmF0aGVyIGhhcm1mdWwgdG8gcHJvcGVyIG9wZXJhdGlvbi4gSW4gb3RoZXIgd29yZHM6IG9ubHkgZXhwbGljaXRseSBzZXQgYSBXaW5kb3dzIHZlcnNpb24gdmFsdWUgaW4gY2FzZSBXaW5lJ3Mgb3duIHZlcnNpb24gZGV0ZWN0aW9uIHdhcyB1bmFibGUgdG8gcHJvdmlkZSB0aGUgY29ycmVjdCBXaW5kb3dzIHZlcnNpb24gYW5kIHRoZSBwcm9ncmFtIGZhaWxzLgo8L3BhcmE+Cgo8c2VjdDI+Cjx0aXRsZT5Ib3cgdG8gY29uZmlndXJlIHRoZSBXaW5kb3dzIGFuZCBET1MgdmVyc2lvbiB2YWx1ZSBXaW5lCnNob3VsZCByZXR1cm48L3RpdGxlPgoKPHBhcmE+ClRoZSB2ZXJzaW9uIHZhbHVlcyBjYW4gYmUgY29uZmlndXJlZCBpbiB0aGUgd2luZSBjb25maWd1cmF0aW9uIGZpbGUgaW4KdGhlIFtWZXJzaW9uXSBzZWN0aW9uLgo8L3BhcmE+Cgo8dmFyaWFibGVsaXN0PgogIDx2YXJsaXN0ZW50cnk+CiAgICA8dGVybT4iV2luZG93cyIgPSAiJmx0O3ZlcnNpb24gc3RyaW5nJmd0OyI8L3Rlcm0+CiAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgoJZGVmYXVsdDogbm9uZTsgY2hvc2VuIGJ5IHNlbWktaW50ZWxsaWdlbnQgZGV0ZWN0aW9uCgltZWNoYW5pc20gYmFzZWQgb24gRExMIGVudmlyb25tZW50LgoJVXNlZCB0byBzcGVjaWZ5IHdoaWNoIFdpbmRvd3MgdmVyc2lvbiB0byByZXR1cm4gdG8KCXByb2dyYW1zICAoZm9yY2VkICB2YWx1ZSwgb3ZlcnJpZGVzIHN0YW5kYXJkIGRldGVjdGlvbgoJbWVjaGFuaXNtISkuIFZhbGlkICBzZXR0aW5ncyBhcmUgZS5nLiAid2luMzEiLCAid2luOTUiLAoJIndpbjk4IiwgICJ3aW4yayIsICAid2lueHAiLgoJQWxzbyB2YWxpZCBhcyBhbgoJPGxpbmsgbGlua2VuZD0iY29uZmlnLWFwcGRlZmF1bHRzIj5BcHBEZWZhdWx0czwvbGluaz4KCXNldHRpbmcgKHJlY29tbWVuZGVkL3ByZWZlcnJlZCB1c2UpLgogICAgICA8L3BhcmE+CiAgICA8L2xpc3RpdGVtPgogIDwvdmFybGlzdGVudHJ5PgogIDx2YXJsaXN0ZW50cnk+CiAgICA8dGVybT4iRE9TIj0iJmx0O3ZlcnNpb24gc3RyaW5nJmd0OyI8L3Rlcm0+CiAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgoJVXNlZCB0byBzcGVjaWZ5IHRoZSBET1MgdmVyc2lvbiB0aGF0IHNob3VsZCBiZSByZXR1cm5lZAoJdG8gcHJvZ3JhbXMuIE9ubHkgdGFrZXMgZWZmZWN0IGluIGNhc2UgV2luZSBhY3RzIGFzCgkid2luMzEiIFdpbmRvd3MgdmVyc2lvbiEgQ29tbW9uIERPUyB2ZXJzaW9uIHNldHRpbmdzCglpbmNsdWRlIDYuMjIsIDYuMjAsIDYuMDAsIDUuMDAsIDQuMDAsIDMuMzAsIDMuMTAuCglBbHNvIHZhbGlkIGFzIGFuCgk8bGluayBsaW5rZW5kPSJjb25maWctYXBwZGVmYXVsdHMiPkFwcERlZmF1bHRzPC9saW5rPgoJc2V0dGluZyAocmVjb21tZW5kZWQvcHJlZmVycmVkIHVzZSkuCiAgICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAgPC92YXJsaXN0ZW50cnk+CjwvdmFyaWFibGVsaXN0Pgo8L3NlY3QyPgo8L3NlY3QxPgoKJmZvbnRzOwomcHJpbnRpbmc7CgogICAgPHNlY3QxIGlkPSJjb25maWctc2NzaS1zdXBwb3J0Ij4KICAgICAgPHRpdGxlPlNDU0kgU3VwcG9ydDwvdGl0bGU+CiAgICAgIDxwYXJhPgogICAgICAgIFRoaXMgZmlsZSBkZXNjcmliZXMgc2V0dGluZyB1cCB0aGUgV2luZG93cyBBU1BJIGludGVyZmFjZS4KICAgICAgICBBU1BJIGlzIGEgZGlyZWN0IGxpbmsgdG8gU0NTSSBkZXZpY2VzIGZyb20gd2luZG93cyBwcm9ncmFtcy4gCglBU1BJIGp1c3QgZm9yd2FyZHMgdGhlIFNDU0kgY29tbWFuZHMgdGhhdCBwcm9ncmFtcyBzZW5kCiAgICAgICAgdG8gaXQgdG8gdGhlIFNDU0kgYnVzLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIElmIHlvdSB1c2UgdGhlIHdyb25nIFNDU0kgZGV2aWNlIGluIHlvdXIgc2V0dXAgZmlsZSwgeW91IGNhbiBzZW5kCiAgICAgICAgY29tcGxldGVseSBib2d1cyBjb21tYW5kcyB0byB0aGUgd3JvbmcgZGV2aWNlIC0gQW4gZXhhbXBsZSB3b3VsZCBiZQogICAgICAgIGZvcm1hdHRpbmcgeW91ciBoYXJkIGRyaXZlcyAoYXNzdW1pbmcgdGhlIGRldmljZSBnYXZlIHlvdSBwZXJtaXNzaW9uIC0KICAgICAgICBpZiB5b3UncmUgcnVubmluZyBhcyByb290LCBhbGwgYmV0cyBhcmUgb2ZmKS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBTbyBwbGVhc2UgbWFrZSBzdXJlIHRoYXQgPGVtcGhhc2lzPmFsbDwvZW1waGFzaXM+IFNDU0kgZGV2aWNlcyBub3QgbmVlZGVkIGJ5IHRoZSBwcm9ncmFtCiAgICAgICAgaGF2ZSB0aGVpciBwZXJtaXNzaW9ucyBzZXQgYXMgcmVzdHJpY3RlZCBhcyBwb3NzaWJsZSEKICAgICAgPC9wYXJhPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5XaW5kb3dzIHJlcXVpcmVtZW50czwvdGl0bGU+CiAgICAgICAgPG9yZGVyZWRsaXN0PgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGUgc29mdHdhcmUgbmVlZHMgdG8gdXNlIHRoZSAiQWRhcHRlYyIKICAgICAgICAgICAgICBjb21wYXRpYmxlIGRyaXZlcnMgKEFTUEkpLiBBdCBsZWFzdCB3aXRoIE11c3RlaywgdGhleQogICAgICAgICAgICAgIGFsbG93IHlvdSB0aGUgY2hvaWNlIG9mIHVzaW5nIHRoZSBidWlsdC1pbiBjYXJkIG9yIHRoZQogICAgICAgICAgICAgICJBZGFwdGVjIChBSEEpIiBjb21wYXRpYmxlIGRyaXZlcnMuIFRoaXMgd2lsbCBub3Qgd29yawogICAgICAgICAgICAgIGFueSBvdGhlciB3YXkuIFNvZnR3YXJlIHRoYXQgYWNjZXNzZXMgdGhlIHNjYW5uZXIgdmlhIGEKICAgICAgICAgICAgICBET1MgQVNQSSBkcml2ZXIgKGUuZy4gQVNQSTJET1MpIGlzIHN1cHBvcnRlZCwgdG9vLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBZb3UgcHJvYmFibHkgbmVlZCBhIHJlYWwgd2luZG93cyBpbnN0YWxsIG9mIHRoZSBzb2Z0d2FyZQogICAgICAgICAgICAgIHRvIHNldCB0aGUgTFVOJ3MvU0NTSSBpZCdzIHVwIGNvcnJlY3RseS4gSSdtIG5vdCBleGFjdGx5CiAgICAgICAgICAgICAgc3VyZS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5MaW51eCByZXF1aXJlbWVudHM8L3RpdGxlPgogICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgWW91ciBTQ1NJIGNhcmQgbXVzdCBiZSBzdXBwb3J0ZWQgdW5kZXIgTGludXguIFRoaXMgd2lsbAogICAgICAgICAgICAgIG5vdCB3b3JrIHdpdGggYW4gdW5rbm93biBTQ1NJIGNhcmQuIEV2ZW4gZm9yIGNoZWFwJ24KICAgICAgICAgICAgICBjcmFwcHkgInNjYW5uZXIgb25seSIgY29udHJvbGxlcnMgc29tZSBzcGVjaWFsIExpbnV4CiAgICAgICAgICAgICAgZHJpdmVycyBleGlzdCBvbiB0aGUgbmV0LgoJICAgICAgSWYgeW91IGludGVuZCB0byB1c2UgeW91ciBJREUgZGV2aWNlLCB5b3UgbmVlZCB0byB1c2UgdGhlCgkgICAgICBpZGUtc2NzaSBlbXVsYXRpb24uCgkgICAgICBSZWFkCgkgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmxpbnV4ZG9jLm9yZy9IT1dUTy9DRC1Xcml0aW5nLUhPV1RPLmh0bWwiPgoJICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5saW51eGRvYy5vcmcvSE9XVE8vQ0QtV3JpdGluZy1IT1dUTy5odG1sPC91bGluaz4KCSAgICAgIGZvciBpZGUtc2NzaSBzZXR1cCBpbnN0cnVjdGlvbnMuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbXBpbGUgZ2VuZXJpYyBTQ1NJIGRyaXZlcnMgaW50byB5b3VyIGtlcm5lbC4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CgkgICAgICBUaGlzIHNlZW1zIHRvIGJlIG5vdCByZXF1aXJlZCBhbnkgbW9yZSBmb3IgbmV3ZXIgKDIuMi54KSBrZXJuZWxzOgogICAgICAgICAgICAgIExpbnV4IGJ5IGRlZmF1bHQgdXNlcyBzbWFsbGVyIFNDU0kgYnVmZmVycyB0aGFuIFdpbmRvd3MuCiAgICAgICAgICAgICAgVGhlcmUgaXMgYSBrZXJuZWwgYnVpbGQgZGVmaW5lIDxsaXRlcmFsPlNHX0JJR19CVUZGPC9saXRlcmFsPiAoaW4KICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2cuaDwvZmlsZW5hbWU+KSB0aGF0IGlzIGJ5IGRlZmF1bHQgc2V0IHRvbwogICAgICAgICAgICAgIGxvdy4gVGhlIFNBTkUgcHJvamVjdCByZWNvbW1lbmRzCiAgICAgICAgICAgICAgPGxpdGVyYWw+MTMwNTYwPC9saXRlcmFsPiBhbmQgdGhpcyBzZWVtcyB0byB3b3JrIGp1c3QKICAgICAgICAgICAgICBmaW5lLiBUaGlzIGRvZXMgcmVxdWlyZSBhIGtlcm5lbCByZWJ1aWxkLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBNYWtlIHRoZSBkZXZpY2VzIGZvciB0aGUgc2Nhbm5lciAoZ2VuZXJpYyBTQ1NJIGRldmljZXMpCiAgICAgICAgICAgICAgLSBsb29rIGF0IHRoZSBTQ1NJIHByb2dyYW1taW5nIEhPV1RPIGF0CiAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5saW51eGRvYy5vcmcvSE9XVE8vU0NTSS1Qcm9ncmFtbWluZy1IT1dUTy5odG1sIj4KCQkJICBodHRwOi8vd3d3LmxpbnV4ZG9jLm9yZy9IT1dUTy9TQ1NJLVByb2dyYW1taW5nLUhPV1RPLmh0bWw8L3VsaW5rPgoJICAgICAgZm9yIGRldmljZSBudW1iZXJpbmcuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIEkgd291bGQgcmVjb21tZW5kIG1ha2luZyB0aGUgc2Nhbm5lciBkZXZpY2Ugd3JpdGFibGUgYnkKICAgICAgICAgICAgICBhIGdyb3VwLiBJIG1hZGUgYSBncm91cCBjYWxsZWQKICAgICAgICAgICAgICA8bGl0ZXJhbD5zY2FubmVyPC9saXRlcmFsPiBhbmQgYWRkZWQgbXlzZWxmIHRvIGl0LgogICAgICAgICAgICAgIFJ1bm5pbmcgYXMgcm9vdCBpbmNyZWFzZXMgeW91ciByaXNrIG9mIHNlbmRpbmcgYmFkIFNDU0kKICAgICAgICAgICAgICBjb21tYW5kcyB0byB0aGUgd3JvbmcgZGV2aWNlLiBXaXRoIGEgcmVndWxhciB1c2VyLCB5b3UKICAgICAgICAgICAgICBhcmUgYmV0dGVyIHByb3RlY3RlZC4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CgkgICAgICBGb3IgV2luMzIgc29mdHdhcmUgKFdOQVNQSTMyKSwgV2luZSBoYXMgYXV0by1kZXRlY3Rpb24gaW4gcGxhY2UuCgkgICAgICBGb3IgV2luMTYgc29mdHdhcmUgKFdJTkFTUEkpLCB5b3UgbmVlZCB0byBhZGQgYSBTQ1NJIGRldmljZSBlbnRyeQoJICAgICAgZm9yIHlvdXIgcGFydGljdWxhciBzY2FubmVyIHRvIH4vLndpbmUvY29uZmlnLiBUaGUgZm9ybWF0IGlzCgkgICAgICA8bGl0ZXJhbD5bc2NzaSBjQ3RUZERdPC9saXRlcmFsPiB3aGVyZQogICAgICAgICAgICAgIDxsaXRlcmFsPiJDIiA9ICJjb250cm9sbGVyIjwvbGl0ZXJhbD4sCiAgICAgICAgICAgICAgPGxpdGVyYWw+IlQiID0gInRhcmdldCI8L2xpdGVyYWw+LCA8bGl0ZXJhbD5EPUxVTjwvbGl0ZXJhbD4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgSSBzZXQgbWluZSB1cCBhcyAgY29udHJvbGxlciA8bGl0ZXJhbD4wPC9saXRlcmFsPiwKICAgICAgICAgICAgICBUYXJnZXQgPGxpdGVyYWw+NjwvbGl0ZXJhbD4sIExVTiA8bGl0ZXJhbD4wPC9saXRlcmFsPi4KICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CltzY3NpIGMwdDZkMF0KIkRldmljZSIgPSAiL2Rldi9zZ2kiCiAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgICBZb3VycyB3aWxsIHZhcnkgd2l0aCB5b3VyIHBhcnRpY3VsYXIgU0NTSSBzZXR1cC4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgYmlnZ2VzdCBkcmF3YmFjayBpcyB0aGF0IGl0IG9ubHkgd29ya3MgdW5kZXIgTGludXggYXQgdGhlIG1vbWVudC4KICAgICAgICAgIFRoZSBBU1BJIGNvZGUgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgd2l0aDoKICAgICAgICA8L3BhcmE+CiAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgYSBNdXN0ZWsgODAwU1Agd2l0aCBhIEJ1c2xvZ2ljIGNvbnRyb2xsZXIgdW5kZXIgTGludXggW0JNXQogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBhIFNpZW1lbnMgTml4ZG9yZiA5MDM2IHdpdGggQWRhcHRlYyBBVkEtMTUwNSB1bmRlciBMaW51eAogICAgICAgICAgICAgIGFjY2Vzc2VkIHZpYSBET1NBU1BJLiBOb3RlIHRoYXQgSSBoYWQgY29sb3IgcHJvYmxlbXMsCiAgICAgICAgICAgICAgdGhvdWdoIChiYXJlbHkgcmVhZGFibGUgcmVzdWx0KSBbQU1dCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIGEgRnVqaXRzdSBNMjUxM0EgTU8gZHJpdmUgKDY0ME1CKSB1c2luZyBnZW5lcmljIFNDU0kKICAgICAgICAgICAgICBkcml2ZXJzLiBGb3JtYXR0aW5nIGFuZCBlamVjdGluZyB3b3JrZWQgcGVyZmVjdGx5LgogICAgICAgICAgICAgIFRoYW5rcyB0byBVd2UgQm9ubmVzIGZvciBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlISBbQU1dCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgIDwvc2VjdDI+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0iY29uZmlnLW9kYmMiPgogICAgICA8dGl0bGU+VXNpbmcgT0RCQzwvdGl0bGU+CiAgICAgIDxwYXJhPgogICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IE9EQkMgd29ya3Mgd2l0aGluIFdpbmUgYW5kIGhvdyB0byBjb25maWd1cmUgaXQuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgVGhlIE9EQkMgc3lzdGVtIHdpdGhpbiBXaW5lLCBhcyB3aXRoIHRoZSBwcmludGluZyBzeXN0ZW0sIGlzIGRlc2lnbmVkCiAgICAgICAgdG8gaG9vayBhY3Jvc3MgdG8gdGhlIFVuaXggc3lzdGVtIGF0IGEgaGlnaCBsZXZlbC4gIFJhdGhlciB0aGFuCiAgICAgICAgZW5zdXJpbmcgdGhhdCBhbGwgdGhlIHdpbmRvd3MgY29kZSB3b3JrcyB1bmRlciB3aW5lIGl0IHVzZXMgYSBzdWl0YWJsZQogICAgICAgIFVuaXggT0RCQyBwcm92aWRlciwgc3VjaCBhcyBVbml4T0RCQy4gIFRodXMgaWYgeW91IGNvbmZpZ3VyZSBXaW5lIHRvCiAgICAgICAgdXNlIHRoZSBidWlsdC1pbiBvZGJjMzIuZGxsLCB0aGF0IFdpbmUgRExMIHdpbGwgaW50ZXJmYWNlIHRvIHlvdXIKICAgICAgICBVbml4IE9EQkMgcGFja2FnZSBhbmQgbGV0IHRoYXQgZG8gdGhlIHdvcmssIHdoZXJlYXMgaWYgeW91IGNvbmZpZ3VyZQogICAgICAgIFdpbmUgdG8gdXNlIHRoZSBuYXRpdmUgb2RiYzMyLmRsbCBpdCB3aWxsIHRyeSB0byB1c2UgdGhlIG5hdGl2ZQogICAgICAgIE9EQkMzMiBkcml2ZXJzIGV0Yy4KICAgICAgPC9wYXJhPgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPlVzaW5nIGEgVW5peCBPREJDIHN5c3RlbSB3aXRoIFdpbmU8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhlIGZpcnN0IHN0ZXAgaW4gdXNpbmcgYSBVbml4IE9EQkMgc3lzdGVtIHdpdGggV2luZSBpcywgb2YgY291cnNlLAogICAgICAgICAgdG8gZ2V0IHRoZSBVbml4IE9EQkMgc3lzdGVtIHdvcmtpbmcgaXRzZWxmLiAgVGhpcyBtYXkgaW52b2x2ZQogICAgICAgICAgZG93bmxvYWRpbmcgY29kZSBvciBSUE1zIGV0Yy4gIFRoZXJlIGFyZSBzZXZlcmFsIFVuaXggT0RCQyBzeXN0ZW1zCiAgICAgICAgICBhdmFpbGFibGU7IHRoZSBvbmUgdGhlIGF1dGhvciBpcyB1c2VkIHRvIGlzIHVuaXhPREJDICh3aXRoIHRoZQogICAgICAgICAgSUJNIERCMiBkcml2ZXIpLiBUeXBpY2FsbHkgc3VjaCBzeXN0ZW1zIHdpbGwgaW5jbHVkZSBhIHRvb2wsIHN1Y2gKICAgICAgICAgIGFzIDxjb21tYW5kPmlzcWw8L2NvbW1hbmQ+LCB3aGljaCB3aWxsIGFsbG93IHlvdSB0byBhY2Nlc3MgdGhlIGRhdGEgZnJvbSB0aGUgY29tbWFuZAogICAgICAgICAgbGluZSBzbyB0aGF0IHlvdSBjYW4gY2hlY2sgdGhhdCB0aGUgc3lzdGVtIGlzIHdvcmtpbmcuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhlIG5leHQgc3RlcCBpcyB0byBob29rIHRoZSBVbml4IE9EQkMgbGlicmFyeSB0byB0aGUgd2luZSBidWlsdC1pbgogICAgICAgICAgb2RiYzMyIERMTC4gIFRoZSBidWlsdC1pbiBvZGJjMzIgKGN1cnJlbnRseSkgbG9va3MgdG8gdGhlCiAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSA8ZW1waGFzaXM+TElCX09EQkNfRFJJVkVSX01BTkFHRVI8L2VtcGhhc2lzPgogICAgICAgICAgZm9yIHRoZSBuYW1lIG9mIHRoZSBPREJDIGxpYnJhcnkuICBGb3IgZXhhbXBsZSBpbiB0aGUgYXV0aG9yJ3MKICAgICAgICAgIC5iYXNocmMgZmlsZSBpcyB0aGUgbGluZToKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHByb2dyYW1saXN0aW5nPgpleHBvcnQgTElCX09EQkNfRFJJVkVSX01BTkFHRVI9L3Vzci9saWIvbGlib2RiYy5zby4xLjAuMAogICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBJZiB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQgdGhlbiBpdCBsb29rcyBmb3IgYQogICAgICAgICAgbGlicmFyeSBjYWxsZWQgbGlib2RiYy5zbyBhbmQgc28geW91IGNhbiBhZGQgYSBzeW1ib2xpYyBsaW5rIHRvCiAgICAgICAgICBlcXVhdGUgdGhhdCB0byB5b3VyIG93biBsaWJyYXJ5LiAgRm9yIGV4YW1wbGUgYXMgcm9vdCB5b3UgY291bGQKICAgICAgICAgIHJ1biB0aGUgY29tbWFuZHM6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxzY3JlZW4+Cjxwcm9tcHQ+IyA8L3Byb21wdD48dXNlcmlucHV0PmxuIC1zIGxpYm9kYmMuc28uMS4wLjAgL3Vzci9saWIvbGlib2RiYy5zbzwvdXNlcmlucHV0Pgo8cHJvbXB0PiMgPC9wcm9tcHQ+PHVzZXJpbnB1dD4vc2Jpbi9sZGNvbmZpZzwvdXNlcmlucHV0PgogICAgICAgIDwvc2NyZWVuPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhlIGxhc3Qgc3RlcCBpbiBjb25maWd1cmluZyB0aGlzIGlzIHRvIGVuc3VyZSB0aGF0IFdpbmUgaXMgc2V0IHVwCiAgICAgICAgICB0byBydW4gdGhlIGJ1aWx0LWluIHZlcnNpb24gb2Ygb2RiYzMyLmRsbCwgYnkgbW9kaWZ5aW5nIHRoZSBETEwKICAgICAgICAgIGNvbmZpZ3VyYXRpb24uICBUaGlzIGJ1aWx0LWluIERMTCBtZXJlbHkgYWN0cyBhcyBhIHN0dWIgYmV0d2VlbiB0aGUKICAgICAgICAgIGNhbGxpbmcgY29kZSBhbmQgdGhlIFVuaXggT0RCQyBsaWJyYXJ5LgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIElmIHlvdSBoYXZlIGFueSBwcm9ibGVtcyB0aGVuIHlvdSBjYW4gdXNlIHRoZSBkZWJ1Z21zZyBjaGFubmVsCiAgICAgICAgICBvZGJjMzIgdG8gdHJhY2Ugd2hhdCBpcyBoYXBwZW5pbmcuICBPbmUgd29yZCBvZiB3YXJuaW5nLiAgU29tZQogICAgICAgICAgcHJvZ3JhbXMgYWN0dWFsbHkgY2hlYXQgYSBsaXR0bGUgYW5kIGJ5cGFzcyB0aGUgT0RCQyBsaWJyYXJ5LiAgRm9yCiAgICAgICAgICBleGFtcGxlIHRoZSBDcnlzdGFsIFJlcG9ydHMgZW5naW5lIGdvZXMgdG8gdGhlIHJlZ2lzdHJ5IHRvIGNoZWNrIG9uCiAgICAgICAgICB0aGUgRFNOLiAgVGhlIGZpeCBmb3IgdGhpcyBpcyBkb2N1bWVudGVkIGF0IHVuaXhPREJDJ3Mgc2l0ZSB3aGVyZQogICAgICAgICAgdGhlcmUgaXMgYSBzZWN0aW9uIG9uIHVzaW5nIHVuaXhPREJDIHdpdGggV2luZS4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+VXNpbmcgV2luZG93cyBPREJDIGRyaXZlcnM8L3RpdGxlPgogICAgICAgIDxwYXJhPgoJICBOYXRpdmUgT0RCQyBkcml2ZXJzIGhhdmUgYmVlbiByZXBvcnRlZCB0byB3b3JrIGZvciBtYW55IHR5cGVzIG9mIAoJICBkYXRhYmFzZXMgaW5jbHVkaW5nIE1TU1FMIGFuZCBPcmFjbGUuIEluIGZhY3QsIHNvbWUgbGlrZSBNU1NRTCBjYW4gCiAgICAgICAgICBvbmx5IGJlIGFjY2Vzc2VkIG9uIExpbnV4IHRocm91Z2ggYSBXaW5lbGliIGFwcC4gICBSYXRoZXIgdGhhbgogICAgICAgICAganVzdCBjb3B5aW5nIERMTCBmaWxlcywgbW9zdCBPREJDIGRyaXZlcnMgcmVxdWlyZSBhIFdpbmRvd3MtYmFzZWQKICAgICAgICAgIGluc3RhbGxlciB0byBydW4gdG8gcHJvcGVybHkgY29uZmlndXJlIHRoaW5ncyBzdWNoIGFzIHJlZ2lzdHJ5IGtleXMuCgk8L3BhcmE+Cgk8cGFyYT4KCSAgSW4gb3JkZXIgdG8gc2V0IHVwIE1TU1FMIHN1cHBvcnQgeW91IHdpbGwgZmlyc3QgbmVlZCB0byBkb3dubG9hZAoJICBhbmQgcnVuIHRoZSBtZGFjX3R5cC5leGUgaW5zdGFsbGVyIGZyb20gbWljcm9zb2Z0LmNvbS4gIEluIG9yZGVyIHRvIAogICAgICAgICAgY29uZmlndXJlIHlvdXIgT0RCQyBjb25uZWN0aW9ucyB5b3UgbXVzdCB0aGVuIHJ1biBDTElDT05GRy5FWEUgYW5kIAoJICBPREJDQUQzMi5FWEUgdW5kZXIgV2luZS4gIFlvdSBjYW4gZmluZCB0aGVtIGluIHRoZSB3aW5kb3dzXHN5c3RlbQogICAgICAgICAgZGlyZWN0b3J5IGFmdGVyIG1kYWNfdHlwIHJ1bnMuICBDb21wYXJlIHRoZSBvdXRwdXQgb2YgdGhlc2UgcHJvZ3JhbXMKICAgICAgICAgIHdpdGggdGhlIG91dHB1dCBvbiBhIG5hdGl2ZSBXaW5kb3dzIG1hY2hpbmUuICBTb21lIHRoaW5ncywgc3VjaAogICAgICAgICAgYXMgcHJvdG9jb2xzLCBtYXkgYmUgbWlzc2luZyBiZWNhdXNlIHRoZXkgcmVseSBvbiBiZWluZyBpbnN0YWxsZWQKCSAgYWxvbmcgd2l0aCB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIElmIHNvLCB5b3UgbWF5IGJlIGFibGUgdG8gY29weQogICAgICAgICAgbWlzc2luZyBmdW5jdGlvbmFsaXR5IGZyb20gYW4gZXhpc3RpbmcgV2luZG93cyBpbnN0YWxsYXRpb24gYXMKICAgICAgICAgIHdlbGwgYXMgYW55IHJlZ2lzdHJ5IHZhbHVlcyByZXF1aXJlZC4gIEEgbmF0aXZlIFdpbmRvd3MgaW5zdGFsbGF0aW9uCiAgICAgICAgICBjb25maWd1cmVkIHRvIGJlIHVzZWQgYnkgV2luZSBzaG91bGQgd29yayB0aGUgc2FtZSB3YXkgaXQgZGlkCiAgICAgICAgICB3aGVuIHJ1biBuYXRpdmVseS4KCTwvcGFyYT4KCTxwYXJhPgoJICBUeXBlcyBzdWNjZXNzZnVsbHkgdGVzdGVkIHVuZGVyIHdpbmU6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxpbmZvcm1hbHRhYmxlPgogICAgICAgICAgPHRncm91cCBjb2xzPSIyIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+REIgVHlwZTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+VXNlZnVsbmVzczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5Pk1TIFNRTDwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+MTAwJTwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgIAkgICAgIDwvdGJvZHk+CiAgICAJICAgPC90Z3JvdXA+CiAgICAJIDwvaW5mb3JtYWx0YWJsZT4KICAgICAgICA8cGFyYT4gCgkgIFBsZWFzZSByZXBvcnQgYW55IG90aGVyIHN1Y2Nlc3NlcyB0byB0aGUKCSAgPHVsaW5rIHVybD0ibWFpbHRvOndpbmUtZGV2ZWxAd2luZWhxLm9yZyI+d2luZS1kZXZlbDwvdWxpbms+IAoJICBtYWlsaW5nIGxpc3QuCgk8L3BhcmE+CiAgICAgIDwvc2VjdDI+CiAgICA8L3NlY3QxPgoKICA8L2NoYXB0ZXI+Cgo8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKTG9jYWwgdmFyaWFibGVzOgptb2RlOiBzZ21sCnNnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS11c2VyLnNnbWwiICJzZXQiICJib29rIiAiY2hhcHRlciIgIiIpCkVuZDoKLS0+Cg==