ICA8c2VjdDEgaWQ9InJlZ2lzdHJ5Ij4KICAgIDx0aXRsZT5UaGUgUmVnaXN0cnk8L3RpdGxlPgoKICAgIDxwYXJhPgogICAgICBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgT3ZlIEvldmVuCiAgICA8L3BhcmE+CgogICAgPHBhcmE+CiAgICAgIEFmdGVyIFdpbjMueCwgdGhlIHJlZ2lzdHJ5IGJlY2FtZSBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgV2luZG93cy4KICAgICAgSXQgaXMgdGhlIHBsYWNlIHdoZXJlIGJvdGggV2luZG93cyBpdHNlbGYsIGFuZCBhbGwKICAgICAgV2luOTUvOTgvTlQvMjAwMC93aGF0ZXZlci1jb21wbGlhbnQgYXBwbGljYXRpb25zLCBzdG9yZQogICAgICBjb25maWd1cmF0aW9uIGFuZCBzdGF0ZSBkYXRhLiBXaGlsZSBtb3N0IHNhbmUgc3lzdGVtCiAgICAgIGFkbWluaXN0cmF0b3JzIChhbmQgV2luZSBkZXZlbG9wZXJzKSBjdXJzZSBiYWRseSBhdCB0aGUgdHdpc3RlZAogICAgICBuYXR1cmUgb2YgdGhlIFdpbmRvd3MgcmVnaXN0cnksIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSBmb3IgV2luZQogICAgICB0byBzdXBwb3J0IGl0IHNvbWVob3cuCiAgICA8L3BhcmE+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+VGhlIGRlZmF1bHQgcmVnaXN0cnk8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgQSBXaW5kb3dzIHJlZ2lzdHJ5IGNvbnRhaW5zIG1hbnkga2V5cyBieSBkZWZhdWx0LCBhbmQgc29tZSBvZgogICAgICAgIHRoZW0gYXJlIG5lY2Vzc2FyeSBmb3IgZXZlbiBpbnN0YWxsZXJzIHRvIG9wZXJhdGUgY29ycmVjdGx5LgogICAgICAgIFRoZSBrZXlzIHRoYXQgdGhlIFdpbmUgZGV2ZWxvcGVycyBoYXZlIGZvdW5kIG5lY2Vzc2FyeSB0bwogICAgICAgIGluc3RhbGwgYXBwbGljYXRpb25zIGFyZSBkaXN0cmlidXRlZCBpbiBhIGZpbGUgY2FsbGVkCiAgICAgICAgPGZpbGVuYW1lPndpbmVkZWZhdWx0LnJlZzwvZmlsZW5hbWU+LiBJdCBpcyBhdXRvbWF0aWNhbGx5CiAgICAgICAgaW5zdGFsbGVkIGZvciB5b3UgaWYgeW91IHVzZSB0aGUKICAgICAgICA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlIFdpbmUgc291cmNlLAoJYnV0IGlmIHlvdSB3YW50IHRvIGluc3RhbGwgaXQgbWFudWFsbHksIHlvdSBjYW4gZG8gc28gYnkgdXNpbmcgdGhlCiAgICAgICAgPGNvbW1hbmQ+cmVnZWRpdDwvY29tbWFuZD4gdG9vbCB0byBiZSBmb3VuZCBpbiB0aGUKCTxmaWxlbmFtZT5wcm9ncmFtcy9yZWdlZGl0LzwvZmlsZW5hbWU+CglkaXJlY3RvcnkgaW4gV2luZSBzb3VyY2UuCgk8ZmlsZW5hbWU+d2luZWRlZmF1bHQucmVnPC9maWxlbmFtZT4gc2hvdWxkIGV2ZW4gYmUgYXBwbGllZCBpZgoJeW91IHBsYW4gdG8gdXNlIGEgbmF0aXZlIFdpbmRvd3MgcmVnaXN0cnksIHNpbmNlIFdpbmUgbmVlZHMgc29tZQoJc3BlY2lmaWMgcmVnaXN0cnkgc2V0dGluZ3MgaW4gaXRzIHJlZ2lzdHJ5IChmb3Igc3BlY2lhbAoJd29ya2Fyb3VuZHMgZm9yIGNlcnRhaW4gcHJvZ3JhbXMgZXRjLikuCglJbiB0aGUgbWFpbiBXaW5lIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBpbiBhIDxnbG9zc3Rlcm0+dGVybWluYWw8L2dsb3NzdGVybT4sIHJ1bjoKICAgICAgPC9wYXJhPgo8c2NyZWVuPgo8cHJvbXB0PiQgPC8+PHVzZXJpbnB1dD5jZCBwcm9ncmFtcy9yZWdlZGl0PC8+Cjxwcm9tcHQ+JCA8Lz48dXNlcmlucHV0Pi4vcmVnZWRpdCAuLi8uLi93aW5lZGVmYXVsdC5yZWc8Lz4KPC9zY3JlZW4+CiAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlVzaW5nIGEgV2luZG93cyByZWdpc3RyeTwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBJZiB5b3UgcG9pbnQgV2luZSBhdCBhbiBleGlzdGluZyBXaW5kb3dzIGluc3RhbGxhdGlvbiAoYnkKICAgICAgICBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcmllcyBpbgogICAgICAgIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+LCB0aGVuIFdpbmUgaXMgYWJsZSB0byBsb2FkCiAgICAgICAgcmVnaXN0cnkgZGF0YSBmcm9tIGl0LiBIb3dldmVyLCBXaW5lIHdpbGwgbm90IHNhdmUgYW55dGhpbmcgdG8KICAgICAgICB0aGUgcmVhbCBXaW5kb3dzIHJlZ2lzdHJ5LCBidXQgcmF0aGVyIHRvIGl0cyBvd24gcmVnaXN0cnkKICAgICAgICBmaWxlcyAoc2VlIGJlbG93KS4gT2YgY291cnNlLCBpZiBhIHBhcnRpY3VsYXIgcmVnaXN0cnkgdmFsdWUKICAgICAgICBleGlzdHMgaW4gYm90aCB0aGUgV2luZG93cyByZWdpc3RyeSBhbmQgaW4gdGhlIFdpbmUgcmVnaXN0cnksCiAgICAgICAgdGhlbiBXaW5lIHdpbGwgdXNlIHRoZSBsYXR0ZXIuIEluIHRoZSBXaW5lIGNvbmZpZyBmaWxlLCB0aGVyZQoJYXJlIGEgbnVtYmVyIG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW4gdGhlIFtyZWdpc3RyeV0gc2VjdGlvbgoJKHNlZSBiZWxvdykgc3BlY2lmaWMgdG8gdGhlIGhhbmRsaW5nIG9mIFdpbmRvd3MgcmVnaXN0cnkgY29udGVudCBieSBXaW5lLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIE9jY2FzaW9uYWxseSwgV2luZSBtYXkgaGF2ZSB0cm91YmxlIGxvYWRpbmcgdGhlIFdpbmRvd3MKICAgICAgICByZWdpc3RyeS4gVXN1YWxseSwgdGhpcyBpcyBiZWNhdXNlIHRoZSByZWdpc3RyeSBpcwogICAgICAgIGluY29uc2lzdGVudCBvciBkYW1hZ2VkIGluIHNvbWUgd2F5LiBJZiB0aGF0IGJlY29tZXMgYQogICAgICAgIHByb2JsZW0sIHlvdSBtYXkgd2FudCB0byBkb3dubG9hZCB0aGUKICAgICAgICA8ZmlsZW5hbWU+cmVnY2xlYW4uZXhlPC9maWxlbmFtZT4gZnJvbSB0aGUgTVMgd2Vic2l0ZSBhbmQgdXNlCiAgICAgICAgaXQgdG8gY2xlYW4gdXAgdGhlIHJlZ2lzdHJ5LiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsd2F5cyB1c2UKICAgICAgICA8ZmlsZW5hbWU+cmVnZWRpdC5leGU8L2ZpbGVuYW1lPiB0byBleHBvcnQgdGhlIHJlZ2lzdHJ5IGRhdGEKICAgICAgICB5b3Ugd2FudCBpbnRvIGEgdGV4dCBmaWxlLCBhbmQgdGhlbiBpbXBvcnQgaXQgaW4gV2luZS4KICAgICAgPC9wYXJhPgogICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+VGhlIFJlZ2lzdHJ5PC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBpbml0aWFsIGRlZmF1bHQgcmVnaXN0cnkgY29udGVudCB0byBiZSB1c2VkIGJ5IHRoZSBXaW5lCgkgIHJlZ2lzdHJ5IGZpbGVzIGlzIGluIHRoZSBmaWxlCiAgICAgICAgICA8ZmlsZW5hbWU+d2luZWRlZmF1bHQucmVnPC9maWxlbmFtZT4uIEl0IGNvbnRhaW5zIGRpcmVjdG9yeQogICAgICAgICAgcGF0aHMsIGNsYXNzIElEcywgYW5kIG1vcmU7IGl0IG11c3QgYmUgaW5zdGFsbGVkIGJlZm9yZSBtb3N0CiAgICAgICAgICA8ZmlsZW5hbWU+SU5TVEFMTC5FWEU8L2ZpbGVuYW1lPiBvcgogICAgICAgICAgPGZpbGVuYW1lPlNFVFVQLkVYRTwvZmlsZW5hbWU+IGFwcGxpY2F0aW9ucyB3aWxsIHdvcmsuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlJlZ2lzdHJ5IHN0cnVjdHVyZTwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBUaGUgV2luZG93cyByZWdpc3RyeSBpcyBhbiBlbGFib3JhdGUgdHJlZSBzdHJ1Y3R1cmUsIGFuZCBub3QKICAgICAgICBldmVuIG1vc3QgV2luZG93cyBwcm9ncmFtbWVycyBhcmUgZnVsbHkgYXdhcmUgb2YgaG93IHRoZQogICAgICAgIHJlZ2lzdHJ5IGlzIGxhaWQgb3V0LCB3aXRoIGl0cyBkaWZmZXJlbnQgImhpdmVzIiBhbmQgbnVtZXJvdXMKICAgICAgICBsaW5rcyBiZXR3ZWVuIHRoZW07IGEgZnVsbCBjb3ZlcmFnZSBpcyBvdXQgb2YgdGhlIHNjb3BlIG9mCiAgICAgICAgdGhpcyBkb2N1bWVudC4gQnV0IGhlcmUgYXJlIHRoZSBiYXNpYyByZWdpc3RyeSBrZXlzIHlvdSBtaWdodAogICAgICAgIG5lZWQgdG8ga25vdyBhYm91dCBmb3Igbm93LgogICAgICA8L3BhcmE+CgoKICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+SEtFWV9MT0NBTF9NQUNISU5FPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIGZ1bmRhbWVudGFsIHJvb3Qga2V5IChpbiB3aW45eCBpdCdzIHN0b3JlZCBpbiB0aGUKICAgICAgICAgICAgICBoaWRkZW4gZmlsZSA8ZmlsZW5hbWU+c3lzdGVtLmRhdDwvZmlsZW5hbWU+KSBjb250YWlucwogICAgICAgICAgICAgIGV2ZXJ5dGhpbmcgcGVydGFpbmluZyB0byB0aGUgY3VycmVudCBXaW5kb3dzCiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX1VTRVJTPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIGZ1bmRhbWVudGFsIHJvb3Qga2V5IChpbiB3aW45eCBpdCdzIHN0b3JlZCBpbiB0aGUKICAgICAgICAgICAgICBoaWRkZW4gZmlsZSA8ZmlsZW5hbWU+dXNlci5kYXQ8L2ZpbGVuYW1lPikgY29udGFpbnMKICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGRhdGEgZm9yIGV2ZXJ5IHVzZXIgb2YgdGhlIGluc3RhbGxhdGlvbi4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+SEtFWV9DTEFTU0VTX1JPT1Q8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgaXMgYSBsaW5rIHRvIEhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxDbGFzc2VzLgogICAgICAgICAgICAgIEl0IGNvbnRhaW5zIGRhdGEgZGVzY3JpYmluZyB0aGluZ3MgbGlrZSBmaWxlCiAgICAgICAgICAgICAgYXNzb2NpYXRpb25zLCBPTEUgZG9jdW1lbnQgaGFuZGxlcnMsIGFuZCBDT00gY2xhc3Nlcy4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+SEtFWV9DVVJSRU5UX1VTRVI8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgaXMgYSBsaW5rIHRvIEhLRVlfVVNFUlNceW91cl91c2VybmFtZSwgaS5lLiwgeW91cgogICAgICAgICAgICAgIHBlcnNvbmFsIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgPC9zZWN0Mj4KCiAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5XaW5lIHJlZ2lzdHJ5IGRhdGEgZmlsZXM8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgSW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwgdGhlcmUgaXMgYSBzdWJkaXJlY3RvcnkgbmFtZWQKICAgICAgICA8ZmlsZW5hbWU+LndpbmU8L2ZpbGVuYW1lPiwgd2hlcmUgV2luZSB3aWxsIHRyeSB0byBzYXZlIGl0cwogICAgICAgIHJlZ2lzdHJ5IGJ5IGRlZmF1bHQuIEl0IHNhdmVzIGludG8gZm91ciBmaWxlcywgd2hpY2ggYXJlOgogICAgICA8L3BhcmE+CgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+c3lzdGVtLnJlZzwvZmlsZW5hbWU+PC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgSEtFWV9MT0NBTF9NQUNISU5FLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+dXNlci5yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfQ1VSUkVOVF9VU0VSLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+dXNlcmRlZi5yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfVVNFUlNcLkRlZmF1bHQgKGkuZS4gdGhlIGRlZmF1bHQKICAgICAgICAgICAgICB1c2VyIHNldHRpbmdzKS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPndpbmUudXNlcnJlZzwvZmlsZW5hbWU+PC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBXaW5lIHNhdmVzIEhLRVlfVVNFUlMgdG8gdGhpcyBmaWxlIChib3RoIGN1cnJlbnQgYW5kCiAgICAgICAgICAgICAgZGVmYXVsdCB1c2VyKSwgYnV0IGRvZXMgbm90IGxvYWQgZnJvbSBpdCwgdW5sZXNzCiAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXJkZWYucmVnPC9maWxlbmFtZT4gaXMgbWlzc2luZy4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgIDxwYXJhPgogICAgICAgIEFsbCBvZiB0aGVzZSBmaWxlcyBhcmUgaHVtYW4tcmVhZGFibGUgdGV4dCBmaWxlcywgc28gdW5saWtlCiAgICAgICAgV2luZG93cywgeW91IGNhbiBhY3R1YWxseSB1c2UgYW4gb3JkaW5hcnkgdGV4dCBlZGl0b3Igb24gdGhlbQogICAgICAgIGlmIHlvdSB3YW50IChtYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgV2luZSBydW5uaW5nIHdoZW4gbW9kaWZ5aW5nCgl0aGVtLCBvdGhlcndpc2UgeW91ciBjaGFuZ2VzIHdpbGwgYmUgZGlzY2FyZGVkKS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBGSVhNRTogZ2xvYmFsIGNvbmZpZ3VyYXRpb24gY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC4KCiAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlc2UgZmlsZXMsIFdpbmUgY2FuIGFsc28gb3B0aW9uYWxseSBsb2FkIGZyb20KICAgICAgICBnbG9iYWwgcmVnaXN0cnkgZmlsZXMgcmVzaWRpbmcgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZQogICAgICAgIGdsb2JhbCA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gKGkuZS4KICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC9ldGM8L2ZpbGVuYW1lPiBpZiB5b3UgY29tcGlsZWQgZnJvbQogICAgICAgIHNvdXJjZSkuIFRoZXNlIGFyZToKICAgICAgPC9wYXJhPgoKICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPndpbmUuc3lzdGVtcmVnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPkNvbnRhaW5zIEhLRVlfTE9DQUxfTUFDSElORS48L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+d2luZS51c2VycmVnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPkNvbnRhaW5zIEhLRVlfVVNFUlMuPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlN5c3RlbSBhZG1pbmlzdHJhdGlvbjwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBXaXRoIHRoZSBhYm92ZSBmaWxlIHN0cnVjdHVyZSwgaXQgaXMgcG9zc2libGUgZm9yIGEgc3lzdGVtCiAgICAgICAgYWRtaW5pc3RyYXRvciB0byBjb25maWd1cmUgdGhlIHN5c3RlbSBzbyB0aGF0IGEgc3lzdGVtIFdpbmUKICAgICAgICBpbnN0YWxsYXRpb24gKGFuZCBhcHBsaWNhdGlvbnMpIGNhbiBiZSBzaGFyZWQgYnkgYWxsIHRoZQogICAgICAgIHVzZXJzLCBhbmQgc3RpbGwgbGV0IHRoZSB1c2VycyBhbGwgaGF2ZSB0aGVpciBvd24gcGVyc29uYWxpemVkCiAgICAgICAgY29uZmlndXJhdGlvbi4gQW4gYWRtaW5pc3RyYXRvciBjYW4sIGFmdGVyIGhhdmluZyBpbnN0YWxsZWQKICAgICAgICBXaW5lIGFuZCBhbnkgV2luZG93cyBhcHBsaWNhdGlvbiBzb2Z0d2FyZSBoZSB3YW50cyB0aGUgdXNlcnMKICAgICAgICB0byBoYXZlIGFjY2VzcyB0bywgY29weSB0aGUgcmVzdWx0aW5nCiAgICAgICAgPGZpbGVuYW1lPnN5c3RlbS5yZWc8L2ZpbGVuYW1lPiBhbmQKICAgICAgICA8ZmlsZW5hbWU+d2luZS51c2VycmVnPC9maWxlbmFtZT4gb3ZlciB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5CiAgICAgICAgZmlsZXMgKHdoaWNoIHdlIGFzc3VtZSB3aWxsIHJlc2lkZSBpbgogICAgICAgIDxmaWxlbmFtZT4vdXNyL2xvY2FsL2V0YzwvZmlsZW5hbWU+IGhlcmUpLCB3aXRoOgogICAgICA8L3BhcmE+CiAgICAgIDxzY3JlZW4+CmNkIH4vLndpbmUKY3Agc3lzdGVtLnJlZyAvdXNyL2xvY2FsL2V0Yy93aW5lLnN5c3RlbXJlZwpjcCB3aW5lLnVzZXJyZWcgL3Vzci9sb2NhbC9ldGMvd2luZS51c2VycmVnCiAgICAgIDwvc2NyZWVuPgogICAgICA8cGFyYT4KICAgICAgICBhbmQgcGVyaGFwcyBldmVuIHN5bWxpbmsgdGhlc2UgYmFjayB0byB0aGUgYWRtaW5pc3RyYXRvcidzCiAgICAgICAgYWNjb3VudCwgdG8gbWFrZSBpdCBlYXNpZXIgdG8gaW5zdGFsbCBhcHBzIHN5c3RlbS13aWRlIGxhdGVyOgogICAgICA8L3BhcmE+CiAgICAgIDxzY3JlZW4+CmxuIC1zZiAvdXNyL2xvY2FsL2V0Yy93aW5lLnN5c3RlbXJlZyBzeXN0ZW0ucmVnCmxuIC1zZiAvdXNyL2xvY2FsL2V0Yy93aW5lLnVzZXJyZWcgd2luZS51c2VycmVnCiAgICAgIDwvc2NyZWVuPgogICAgICA8cGFyYT4KICAgICAgICBOb3RlIHRoYXQgdGhlIDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+IHNjcmlwdAogICAgICAgIGFscmVhZHkgZG9lcyBhbGwgb2YgdGhpcyBmb3IgeW91LCBpZiB5b3UgaW5zdGFsbCBXaW5lIHNvdXJjZSBhcyByb290LgogICAgICAgIElmIHlvdSB0aGVuIGluc3RhbGwgV2luZG93cyBhcHBsaWNhdGlvbnMgd2hpbGUgbG9nZ2VkIGluIGFzCiAgICAgICAgcm9vdCwgYWxsIHlvdXIgdXNlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFibGUgdG8gdXNlIHRoZW0uCiAgICAgICAgV2hpbGUgdGhlIGFwcGxpY2F0aW9uIHNldHVwIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgZ2xvYmFsCiAgICAgICAgcmVnaXN0cnksIHRoZSB1c2VycycgcGVyc29uYWxpemVkIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgc2F2ZWQKICAgICAgICBpbiB0aGVpciBvd24gaG9tZSBkaXJlY3Rvcmllcy4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBCdXQgYmUgY2FyZWZ1bCB3aXRoIHdoYXQgeW91IGRvIHdpdGggdGhlIGFkbWluaXN0cmF0b3IgYWNjb3VudAogICAgICAgIC0gaWYgeW91IGRvIGNvcHkgb3IgbGluayB0aGUgYWRtaW5pc3RyYXRvcidzIHJlZ2lzdHJ5IHRvIHRoZQogICAgICAgIGdsb2JhbCByZWdpc3RyeSwgYW55IHVzZXIgbWlnaHQgYmUgYWJsZSB0byByZWFkIHRoZQogICAgICAgIGFkbWluaXN0cmF0b3IncyBwcmVmZXJlbmNlcywgd2hpY2ggbWlnaHQgbm90IGJlIGdvb2QgaWYKICAgICAgICBzZW5zaXRpdmUgaW5mb3JtYXRpb24gKHBhc3N3b3JkcywgcGVyc29uYWwgaW5mb3JtYXRpb24sIGV0YykKICAgICAgICBpcyBzdG9yZWQgdGhlcmUuIE9ubHkgdXNlIHRoZSBhZG1pbmlzdHJhdG9yIGFjY291bnQgdG8gaW5zdGFsbAogICAgICAgIHNvZnR3YXJlLCBub3QgZm9yIGRhaWx5IHdvcms7IHVzZSBhbiBvcmRpbmFyeSB1c2VyIGFjY291bnQgZm9yCiAgICAgICAgdGhhdC4KICAgICAgPC9wYXJhPgogICAgPC9zZWN0Mj4KCiAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5UaGUgW3JlZ2lzdHJ5XSBzZWN0aW9uPC90aXRsZT4KCiAgICAgIDxwYXJhPgogICAgICAgIE5vdyBsZXQncyBsb29rIGF0IHRoZSA8bGluayBsaW5rZW5kPSJjb25maWctZmlsZSI+V2luZQoJY29uZmlndXJhdGlvbiBmaWxlPC9saW5rPiBvcHRpb25zIGZvciBoYW5kbGluZyB0aGUgcmVnaXN0cnkuCiAgICAgIDwvcGFyYT4KCiAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KCSAgPHRlcm0+R2xvYmFsUmVnaXN0cnlEaXI8L3Rlcm0+CgkgIDxsaXN0aXRlbT4KCSAgICA8cGFyYT4KCSAgICAgIE9wdGlvbmFsLiAgU2V0cyB0aGUgcGF0aCB0byBsb29rIGZvciB0aGUgR2xvYmFsCgkgICAgICBSZWdpc3RyeS4KCSAgICA8L3BhcmE+CgkgIDwvbGlzdGl0ZW0+Cgk8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+TG9hZEdsb2JhbFJlZ2lzdHJ5RmlsZXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdG8gdHJ5IHRvIGxvYWQgdGhlIGdsb2JhbCByZWdpc3RyeQogICAgICAgICAgICAgIGZpbGVzLCBpZiB0aGV5IGV4aXN0LgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5Mb2FkSG9tZVJlZ2lzdHJ5RmlsZXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdG8gdHJ5IHRvIGxvYWQgdGhlIHVzZXIncyByZWdpc3RyeQogICAgICAgICAgICAgIGZpbGVzIChpbiB0aGUgPGZpbGVuYW1lPi53aW5lPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IG9mCiAgICAgICAgICAgICAgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSkuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPkxvYWRXaW5kb3dzUmVnaXN0cnlGaWxlczwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciBXaW5lIHdpbGwgYXR0ZW1wdCB0byBsb2FkIHJlZ2lzdHJ5IGRhdGEKICAgICAgICAgICAgICBmcm9tIGEgcmVhbCBXaW5kb3dzIHJlZ2lzdHJ5IGluIGFuIGV4aXN0aW5nIE1TIFdpbmRvd3MKICAgICAgICAgICAgICBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPldyaXRldG9Ib21lUmVnaXN0cnlGaWxlczwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciByZWdpc3RyeSBkYXRhIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUKICAgICAgICAgICAgICB1c2VyJ3MgcmVnaXN0cnkgZmlsZXMuIChDdXJyZW50bHksIHRoZXJlIGlzIG5vCiAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUsIHNvIGlmIHlvdSB0dXJuIHRoaXMgb2ZmLCBXaW5lIGNhbm5vdCBzYXZlCiAgICAgICAgICAgICAgdGhlIHJlZ2lzdHJ5IG9uIGRpc2sgYXQgYWxsOyBhZnRlciB5b3UgZXhpdCBXaW5lLCB5b3VyCiAgICAgICAgICAgICAgY2hhbmdlcyB3aWxsIGJlIGxvc3QuKQogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5TYXZlT25seVVwZGF0ZWRLZXlzPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHRoZSBlbnRpcmUgcmVnaXN0cnkgaXMgc2F2ZWQgdG8gdGhlCiAgICAgICAgICAgICAgdXNlcidzIHJlZ2lzdHJ5IGZpbGVzLCBvciBvbmx5IHN1YmtleXMgdGhlIHVzZXIgaGF2ZQogICAgICAgICAgICAgIGFjdHVhbGx5IGNoYW5nZWQuIENvbnNpZGVyaW5nIHRoYXQgdGhlIHVzZXIncyByZWdpc3RyeQogICAgICAgICAgICAgIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCByZWdpc3RyeSBmaWxlcyBhbmQgV2luZG93cwogICAgICAgICAgICAgIHJlZ2lzdHJ5IGZpbGVzLCBpdCB1c3VhbGx5IG1ha2VzIHNlbnNlIHRvIG9ubHkgc2F2ZQogICAgICAgICAgICAgIHVzZXItbW9kaWZpZWQgc3Via2V5czsgdGhhdCB3YXksIGNoYW5nZXMgdG8gdGhlIHJlc3Qgb2YKICAgICAgICAgICAgICB0aGUgZ2xvYmFsIG9yIFdpbmRvd3MgcmVnaXN0cmllcyB3aWxsIHN0aWxsIGFmZmVjdCB0aGUKICAgICAgICAgICAgICB1c2VyLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5QZXJpb2RpY1NhdmU8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byBhIG5vbnplcm8gdmFsdWUsIGl0IHNwZWNpZmllcwogICAgICAgICAgICAgIHRoYXQgeW91IHdhbnQgdGhlIHJlZ2lzdHJ5IHRvIGJlIHNhdmVkIHRvIGRpc2sgYXQgdGhlCiAgICAgICAgICAgICAgZ2l2ZW4gaW50ZXJ2YWwuIElmIGl0IGlzIG5vdCBzZXQsIHRoZSByZWdpc3RyeSB3aWxsIG9ubHkKICAgICAgICAgICAgICBiZSBzYXZlZCB0byBkaXNrIHdoZW4gdGhlIHdpbmVzZXJ2ZXIgdGVybWluYXRlcy4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+VXNlTmV3Rm9ybWF0PC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBvYnNvbGV0ZS4gV2luZSBub3cgYWx3YXlzIHVzZXMgdGhlIG5ldwogICAgICAgICAgICAgIGZvcm1hdDsgc3VwcG9ydCBmb3IgdGhlIG9sZCBmb3JtYXQgd2FzIHJlbW92ZWQgYSB3aGlsZQogICAgICAgICAgICAgIGFnby4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICA8L3NlY3QyPgogIDwvc2VjdDE+Cgo8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKTG9jYWwgdmFyaWFibGVzOgptb2RlOiBzZ21sCnNnbWwtcGFyZW50LWRvY3VtZW50OigiY29uZmlndXJpbmcuc2dtbCIgImNoYXB0ZXIiICJzZWN0MSIgIiIpCkVuZDoKLS0+Cg==