ICA8c2VjdDEgaWQ9InJlZ2lzdHJ5Ij4KICAgIDx0aXRsZT5UaGUgUmVnaXN0cnk8L3RpdGxlPgoKICAgIDxwYXJhPgogICAgICBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgT3ZlIEvldmVuCiAgICA8L3BhcmE+CgogICAgPHBhcmE+CiAgICAgIEFmdGVyIFdpbjMueCwgdGhlIHJlZ2lzdHJ5IGJlY2FtZSBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgV2luZG93cy4KICAgICAgSXQgaXMgdGhlIHBsYWNlIHdoZXJlIGJvdGggV2luZG93cyBpdHNlbGYsIGFuZCBhbGwKICAgICAgV2luOTUvOTgvTlQvMjAwMC93aGF0ZXZlci1jb21wbGlhbnQgYXBwbGljYXRpb25zLCBzdG9yZQogICAgICBjb25maWd1cmF0aW9uIGFuZCBzdGF0ZSBkYXRhLiBXaGlsZSBtb3N0IHNhbmUgc3lzdGVtCiAgICAgIGFkbWluaXN0cmF0b3JzIChhbmQgV2luZSBkZXZlbG9wZXJzKSBjdXJzZSBiYWRseSBhdCB0aGUgdHdpc3RlZAogICAgICBuYXR1cmUgb2YgdGhlIFdpbmRvd3MgcmVnaXN0cnksIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSBmb3IgV2luZQogICAgICB0byBzdXBwb3J0IGl0IHNvbWVob3cuCiAgICA8L3BhcmE+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+VGhlIGRlZmF1bHQgcmVnaXN0cnk8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgQSBXaW5kb3dzIHJlZ2lzdHJ5IGNvbnRhaW5zIG1hbnkga2V5cyBieSBkZWZhdWx0LCBhbmQgc29tZSBvZgogICAgICAgIHRoZW0gYXJlIG5lY2Vzc2FyeSBmb3IgZXZlbiBpbnN0YWxsZXJzIHRvIG9wZXJhdGUgY29ycmVjdGx5LgogICAgICAgIFRoZSBrZXlzIHRoYXQgdGhlIFdpbmUgZGV2ZWxvcGVycyBoYXZlIGZvdW5kIG5lY2Vzc2FyeSB0bwogICAgICAgIGluc3RhbGwgYXBwbGljYXRpb25zIGFyZSBkaXN0cmlidXRlZCBpbiBhIGZpbGUgY2FsbGVkCiAgICAgICAgPGZpbGVuYW1lPndpbmVkZWZhdWx0LnJlZzwvZmlsZW5hbWU+LiBJdCBpcyBhdXRvbWF0aWNhbGx5CiAgICAgICAgaW5zdGFsbGVkIGZvciB5b3UgaWYgeW91IHVzZSB0aGUKICAgICAgICA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlIFdpbmUgc291cmNlLAoJYnV0IGlmIHlvdSB3YW50IHRvIGluc3RhbGwgaXQgbWFudWFsbHksIHlvdSBjYW4gZG8gc28gYnkgdXNpbmcgdGhlCiAgICAgICAgPGNvbW1hbmQ+cmVnZWRpdDwvY29tbWFuZD4gdG9vbCB0byBiZSBmb3VuZCBpbiB0aGUKCTxmaWxlbmFtZT5wcm9ncmFtcy9yZWdlZGl0LzwvZmlsZW5hbWU+CglkaXJlY3RvcnkgaW4gV2luZSBzb3VyY2UuCgk8ZmlsZW5hbWU+d2luZWRlZmF1bHQucmVnPC9maWxlbmFtZT4gc2hvdWxkIGV2ZW4gYmUgYXBwbGllZCBpZgoJeW91IHBsYW4gdG8gdXNlIGEgbmF0aXZlIFdpbmRvd3MgcmVnaXN0cnksIHNpbmNlIFdpbmUgbmVlZHMgc29tZQoJc3BlY2lmaWMgcmVnaXN0cnkgc2V0dGluZ3MgaW4gaXRzIHJlZ2lzdHJ5IChmb3Igc3BlY2lhbAoJd29ya2Fyb3VuZHMgZm9yIGNlcnRhaW4gcHJvZ3JhbXMgZXRjLikuCglJbiB0aGUgbWFpbiBXaW5lIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBpbiBhIDxnbG9zc3Rlcm0+dGVybWluYWw8L2dsb3NzdGVybT4sIHJ1bjoKICAgICAgPC9wYXJhPgogIDxzY3JlZW4+CiAgPHByb21wdD4kIDwvPjx1c2VyaW5wdXQ+Y2QgcHJvZ3JhbXMvcmVnZWRpdDwvPgogIDxwcm9tcHQ+JCA8Lz48dXNlcmlucHV0Pi4vcmVnZWRpdCAuLi8uLi93aW5lZGVmYXVsdC5yZWc8Lz4KICA8L3NjcmVlbj4KICAgIDwvc2VjdDI+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+VXNpbmcgYSBXaW5kb3dzIHJlZ2lzdHJ5PC90aXRsZT4KCiAgICAgIDxwYXJhPgogICAgICAgIElmIHlvdSBwb2ludCBXaW5lIGF0IGFuIGV4aXN0aW5nIFdpbmRvd3MgaW5zdGFsbGF0aW9uIChieQogICAgICAgIHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yaWVzIGluCiAgICAgICAgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4sIHRoZW4gV2luZSBpcyBhYmxlIHRvIGxvYWQKICAgICAgICByZWdpc3RyeSBkYXRhIGZyb20gaXQuIEhvd2V2ZXIsIFdpbmUgd2lsbCBub3Qgc2F2ZSBhbnl0aGluZyB0bwogICAgICAgIHRoZSByZWFsIFdpbmRvd3MgcmVnaXN0cnksIGJ1dCByYXRoZXIgdG8gaXRzIG93biByZWdpc3RyeQogICAgICAgIGZpbGVzIChzZWUgYmVsb3cpLiBPZiBjb3Vyc2UsIGlmIGEgcGFydGljdWxhciByZWdpc3RyeSB2YWx1ZQogICAgICAgIGV4aXN0cyBpbiBib3RoIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGFuZCBpbiB0aGUgV2luZSByZWdpc3RyeSwKICAgICAgICB0aGVuIFdpbmUgd2lsbCB1c2UgdGhlIGxhdHRlci4gSW4gdGhlIFdpbmUgY29uZmlnIGZpbGUsIHRoZXJlCglhcmUgYSBudW1iZXIgb2YgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpbiB0aGUgW3JlZ2lzdHJ5XSBzZWN0aW9uCgkoc2VlIGJlbG93KSBzcGVjaWZpYyB0byB0aGUgaGFuZGxpbmcgb2YgV2luZG93cyByZWdpc3RyeSBjb250ZW50IGJ5IFdpbmUuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgT2NjYXNpb25hbGx5LCBXaW5lIG1heSBoYXZlIHRyb3VibGUgbG9hZGluZyB0aGUgV2luZG93cwogICAgICAgIHJlZ2lzdHJ5LiBVc3VhbGx5LCB0aGlzIGlzIGJlY2F1c2UgdGhlIHJlZ2lzdHJ5IGlzCiAgICAgICAgaW5jb25zaXN0ZW50IG9yIGRhbWFnZWQgaW4gc29tZSB3YXkuIElmIHRoYXQgYmVjb21lcyBhCiAgICAgICAgcHJvYmxlbSwgeW91IG1heSB3YW50IHRvIGRvd25sb2FkIHRoZQogICAgICAgIDxmaWxlbmFtZT5yZWdjbGVhbi5leGU8L2ZpbGVuYW1lPiBmcm9tIHRoZSBNUyB3ZWJzaXRlIGFuZCB1c2UKICAgICAgICBpdCB0byBjbGVhbiB1cCB0aGUgcmVnaXN0cnkuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWx3YXlzIHVzZQogICAgICAgIDxmaWxlbmFtZT5yZWdlZGl0LmV4ZTwvZmlsZW5hbWU+IHRvIGV4cG9ydCB0aGUgcmVnaXN0cnkgZGF0YQogICAgICAgIHlvdSB3YW50IGludG8gYSB0ZXh0IGZpbGUsIGFuZCB0aGVuIGltcG9ydCBpdCBpbiBXaW5lLgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5UaGUgUmVnaXN0cnk8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhlIGluaXRpYWwgZGVmYXVsdCByZWdpc3RyeSBjb250ZW50IHRvIGJlIHVzZWQgYnkgdGhlIFdpbmUKCSAgcmVnaXN0cnkgZmlsZXMgaXMgaW4gdGhlIGZpbGUKICAgICAgICAgIDxmaWxlbmFtZT53aW5lZGVmYXVsdC5yZWc8L2ZpbGVuYW1lPi4gSXQgY29udGFpbnMgZGlyZWN0b3J5CiAgICAgICAgICBwYXRocywgY2xhc3MgSURzLCBhbmQgbW9yZTsgaXQgbXVzdCBiZSBpbnN0YWxsZWQgYmVmb3JlIG1vc3QKICAgICAgICAgIDxmaWxlbmFtZT5JTlNUQUxMLkVYRTwvZmlsZW5hbWU+IG9yCiAgICAgICAgICA8ZmlsZW5hbWU+U0VUVVAuRVhFPC9maWxlbmFtZT4gYXBwbGljYXRpb25zIHdpbGwgd29yay4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+UmVnaXN0cnkgc3RydWN0dXJlPC90aXRsZT4KCiAgICAgIDxwYXJhPgogICAgICAgIFRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGlzIGFuIGVsYWJvcmF0ZSB0cmVlIHN0cnVjdHVyZSwgYW5kIG5vdAogICAgICAgIGV2ZW4gbW9zdCBXaW5kb3dzIHByb2dyYW1tZXJzIGFyZSBmdWxseSBhd2FyZSBvZiBob3cgdGhlCiAgICAgICAgcmVnaXN0cnkgaXMgbGFpZCBvdXQsIHdpdGggaXRzIGRpZmZlcmVudCAiaGl2ZXMiIGFuZCBudW1lcm91cwogICAgICAgIGxpbmtzIGJldHdlZW4gdGhlbTsgYSBmdWxsIGNvdmVyYWdlIGlzIG91dCBvZiB0aGUgc2NvcGUgb2YKICAgICAgICB0aGlzIGRvY3VtZW50LiBCdXQgaGVyZSBhcmUgdGhlIGJhc2ljIHJlZ2lzdHJ5IGtleXMgeW91IG1pZ2h0CiAgICAgICAgbmVlZCB0byBrbm93IGFib3V0IGZvciBub3cuCiAgICAgIDwvcGFyYT4KCgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX0xPQ0FMX01BQ0hJTkU8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZnVuZGFtZW50YWwgcm9vdCBrZXkgKGluIHdpbjl4IGl0J3Mgc3RvcmVkIGluIHRoZQogICAgICAgICAgICAgIGhpZGRlbiBmaWxlIDxmaWxlbmFtZT5zeXN0ZW0uZGF0PC9maWxlbmFtZT4pIGNvbnRhaW5zCiAgICAgICAgICAgICAgZXZlcnl0aGluZyBwZXJ0YWluaW5nIHRvIHRoZSBjdXJyZW50IFdpbmRvd3MKICAgICAgICAgICAgICBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPkhLRVlfVVNFUlM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZnVuZGFtZW50YWwgcm9vdCBrZXkgKGluIHdpbjl4IGl0J3Mgc3RvcmVkIGluIHRoZQogICAgICAgICAgICAgIGhpZGRlbiBmaWxlIDxmaWxlbmFtZT51c2VyLmRhdDwvZmlsZW5hbWU+KSBjb250YWlucwogICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgZXZlcnkgdXNlciBvZiB0aGUgaW5zdGFsbGF0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX0NMQVNTRVNfUk9PVDwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBpcyBhIGxpbmsgdG8gSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXENsYXNzZXMuCiAgICAgICAgICAgICAgSXQgY29udGFpbnMgZGF0YSBkZXNjcmliaW5nIHRoaW5ncyBsaWtlIGZpbGUKICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMsIE9MRSBkb2N1bWVudCBoYW5kbGVycywgYW5kIENPTSBjbGFzc2VzLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX0NVUlJFTlRfVVNFUjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBpcyBhIGxpbmsgdG8gSEtFWV9VU0VSU1x5b3VyX3VzZXJuYW1lLCBpLmUuLCB5b3VyCiAgICAgICAgICAgICAgcGVyc29uYWwgY29uZmlndXJhdGlvbi4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPldpbmUgcmVnaXN0cnkgZGF0YSBmaWxlczwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBJbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LCB0aGVyZSBpcyBhIHN1YmRpcmVjdG9yeSBuYW1lZAogICAgICAgIDxmaWxlbmFtZT4ud2luZTwvZmlsZW5hbWU+LCB3aGVyZSBXaW5lIHdpbGwgdHJ5IHRvIHNhdmUgaXRzCiAgICAgICAgcmVnaXN0cnkgYnkgZGVmYXVsdC4gSXQgc2F2ZXMgaW50byBmb3VyIGZpbGVzLCB3aGljaCBhcmU6CiAgICAgIDwvcGFyYT4KCiAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT5zeXN0ZW0ucmVnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZmlsZSBjb250YWlucyBIS0VZX0xPQ0FMX01BQ0hJTkUuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT51c2VyLnJlZzwvZmlsZW5hbWU+PC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgSEtFWV9DVVJSRU5UX1VTRVIuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT51c2VyZGVmLnJlZzwvZmlsZW5hbWU+PC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgSEtFWV9VU0VSU1wuRGVmYXVsdCAoaS5lLiB0aGUgZGVmYXVsdAogICAgICAgICAgICAgIHVzZXIgc2V0dGluZ3MpLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+d2luZS51c2VycmVnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFdpbmUgc2F2ZXMgSEtFWV9VU0VSUyB0byB0aGlzIGZpbGUgKGJvdGggY3VycmVudCBhbmQKICAgICAgICAgICAgICBkZWZhdWx0IHVzZXIpLCBidXQgZG9lcyBub3QgbG9hZCBmcm9tIGl0LCB1bmxlc3MKICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNlcmRlZi5yZWc8L2ZpbGVuYW1lPiBpcyBtaXNzaW5nLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgPHBhcmE+CiAgICAgICAgQWxsIG9mIHRoZXNlIGZpbGVzIGFyZSBodW1hbi1yZWFkYWJsZSB0ZXh0IGZpbGVzLCBzbyB1bmxpa2UKICAgICAgICBXaW5kb3dzLCB5b3UgY2FuIGFjdHVhbGx5IHVzZSBhbiBvcmRpbmFyeSB0ZXh0IGVkaXRvciBvbiB0aGVtCiAgICAgICAgaWYgeW91IHdhbnQgKG1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBXaW5lIHJ1bm5pbmcgd2hlbiBtb2RpZnlpbmcKCXRoZW0sIG90aGVyd2lzZSB5b3VyIGNoYW5nZXMgd2lsbCBiZSBkaXNjYXJkZWQpLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIEZJWE1FOiBnbG9iYWwgY29uZmlndXJhdGlvbiBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkLgoKICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGVzZSBmaWxlcywgV2luZSBjYW4gYWxzbyBvcHRpb25hbGx5IGxvYWQgZnJvbQogICAgICAgIGdsb2JhbCByZWdpc3RyeSBmaWxlcyByZXNpZGluZyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCiAgICAgICAgZ2xvYmFsIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiAoaS5lLgogICAgICAgIDxmaWxlbmFtZT4vdXNyL2xvY2FsL2V0YzwvZmlsZW5hbWU+IGlmIHlvdSBjb21waWxlZCBmcm9tCiAgICAgICAgc291cmNlKS4gVGhlc2UgYXJlOgogICAgICA8L3BhcmE+CgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+d2luZS5zeXN0ZW1yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29udGFpbnMgSEtFWV9MT0NBTF9NQUNISU5FLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+d2luZS51c2VycmVnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRhaW5zIEhLRVlfVVNFUlMuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgPC9zZWN0Mj4KCiAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5TeXN0ZW0gYWRtaW5pc3RyYXRpb248L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgV2l0aCB0aGUgYWJvdmUgZmlsZSBzdHJ1Y3R1cmUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHN5c3RlbQogICAgICAgIGFkbWluaXN0cmF0b3IgdG8gY29uZmlndXJlIHRoZSBzeXN0ZW0gc28gdGhhdCBhIHN5c3RlbSBXaW5lCiAgICAgICAgaW5zdGFsbGF0aW9uIChhbmQgYXBwbGljYXRpb25zKSBjYW4gYmUgc2hhcmVkIGJ5IGFsbCB0aGUKICAgICAgICB1c2VycywgYW5kIHN0aWxsIGxldCB0aGUgdXNlcnMgYWxsIGhhdmUgdGhlaXIgb3duIHBlcnNvbmFsaXplZAogICAgICAgIGNvbmZpZ3VyYXRpb24uIEFuIGFkbWluaXN0cmF0b3IgY2FuLCBhZnRlciBoYXZpbmcgaW5zdGFsbGVkCiAgICAgICAgV2luZSBhbmQgYW55IFdpbmRvd3MgYXBwbGljYXRpb24gc29mdHdhcmUgaGUgd2FudHMgdGhlIHVzZXJzCiAgICAgICAgdG8gaGF2ZSBhY2Nlc3MgdG8sIGNvcHkgdGhlIHJlc3VsdGluZwogICAgICAgIDxmaWxlbmFtZT5zeXN0ZW0ucmVnPC9maWxlbmFtZT4gYW5kCiAgICAgICAgPGZpbGVuYW1lPndpbmUudXNlcnJlZzwvZmlsZW5hbWU+IG92ZXIgdG8gdGhlIGdsb2JhbCByZWdpc3RyeQogICAgICAgIGZpbGVzICh3aGljaCB3ZSBhc3N1bWUgd2lsbCByZXNpZGUgaW4KICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC9ldGM8L2ZpbGVuYW1lPiBoZXJlKSwgd2l0aDoKICAgICAgPC9wYXJhPgogIDxzY3JlZW4+CiAgY2Qgfi8ud2luZQogIGNwIHN5c3RlbS5yZWcgL3Vzci9sb2NhbC9ldGMvd2luZS5zeXN0ZW1yZWcKICBjcCB3aW5lLnVzZXJyZWcgL3Vzci9sb2NhbC9ldGMvd2luZS51c2VycmVnCiAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIGFuZCBwZXJoYXBzIGV2ZW4gc3ltbGluayB0aGVzZSBiYWNrIHRvIHRoZSBhZG1pbmlzdHJhdG9yJ3MKICAgICAgICBhY2NvdW50LCB0byBtYWtlIGl0IGVhc2llciB0byBpbnN0YWxsIGFwcHMgc3lzdGVtLXdpZGUgbGF0ZXI6CiAgICAgIDwvcGFyYT4KICA8c2NyZWVuPgogIGxuIC1zZiAvdXNyL2xvY2FsL2V0Yy93aW5lLnN5c3RlbXJlZyBzeXN0ZW0ucmVnCiAgbG4gLXNmIC91c3IvbG9jYWwvZXRjL3dpbmUudXNlcnJlZyB3aW5lLnVzZXJyZWcKICA8L3NjcmVlbj4KICAgICAgPHBhcmE+CiAgICAgICAgTm90ZSB0aGF0IHRoZSA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBzY3JpcHQKICAgICAgICBhbHJlYWR5IGRvZXMgYWxsIG9mIHRoaXMgZm9yIHlvdSwgaWYgeW91IGluc3RhbGwgV2luZSBzb3VyY2UgYXMgcm9vdC4KICAgICAgICBJZiB5b3UgdGhlbiBpbnN0YWxsIFdpbmRvd3MgYXBwbGljYXRpb25zIHdoaWxlIGxvZ2dlZCBpbiBhcwogICAgICAgIHJvb3QsIGFsbCB5b3VyIHVzZXJzIHdpbGwgYXV0b21hdGljYWxseSBiZSBhYmxlIHRvIHVzZSB0aGVtLgogICAgICAgIFdoaWxlIHRoZSBhcHBsaWNhdGlvbiBzZXR1cCB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGdsb2JhbAogICAgICAgIHJlZ2lzdHJ5LCB0aGUgdXNlcnMnIHBlcnNvbmFsaXplZCBjb25maWd1cmF0aW9ucyB3aWxsIGJlIHNhdmVkCiAgICAgICAgaW4gdGhlaXIgb3duIGhvbWUgZGlyZWN0b3JpZXMuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgQnV0IGJlIGNhcmVmdWwgd2l0aCB3aGF0IHlvdSBkbyB3aXRoIHRoZSBhZG1pbmlzdHJhdG9yIGFjY291bnQKICAgICAgICAtIGlmIHlvdSBkbyBjb3B5IG9yIGxpbmsgdGhlIGFkbWluaXN0cmF0b3IncyByZWdpc3RyeSB0byB0aGUKICAgICAgICBnbG9iYWwgcmVnaXN0cnksIGFueSB1c2VyIG1pZ2h0IGJlIGFibGUgdG8gcmVhZCB0aGUKICAgICAgICBhZG1pbmlzdHJhdG9yJ3MgcHJlZmVyZW5jZXMsIHdoaWNoIG1pZ2h0IG5vdCBiZSBnb29kIGlmCiAgICAgICAgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIChwYXNzd29yZHMsIHBlcnNvbmFsIGluZm9ybWF0aW9uLCBldGMpCiAgICAgICAgaXMgc3RvcmVkIHRoZXJlLiBPbmx5IHVzZSB0aGUgYWRtaW5pc3RyYXRvciBhY2NvdW50IHRvIGluc3RhbGwKICAgICAgICBzb2Z0d2FyZSwgbm90IGZvciBkYWlseSB3b3JrOyB1c2UgYW4gb3JkaW5hcnkgdXNlciBhY2NvdW50IGZvcgogICAgICAgIHRoYXQuCiAgICAgIDwvcGFyYT4KICAgIDwvc2VjdDI+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+VGhlIFtyZWdpc3RyeV0gc2VjdGlvbjwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBOb3cgbGV0J3MgbG9vayBhdCB0aGUgPGxpbmsgbGlua2VuZD0iY29uZmlnLWZpbGUiPldpbmUKCWNvbmZpZ3VyYXRpb24gZmlsZTwvbGluaz4gb3B0aW9ucyBmb3IgaGFuZGxpbmcgdGhlIHJlZ2lzdHJ5LgogICAgICA8L3BhcmE+CgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CgkgIDx0ZXJtPkdsb2JhbFJlZ2lzdHJ5RGlyPC90ZXJtPgoJICA8bGlzdGl0ZW0+CgkgICAgPHBhcmE+CgkgICAgICBPcHRpb25hbC4gIFNldHMgdGhlIHBhdGggdG8gbG9vayBmb3IgdGhlIEdsb2JhbAoJICAgICAgUmVnaXN0cnkuCgkgICAgPC9wYXJhPgoJICA8L2xpc3RpdGVtPgoJPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPkxvYWRHbG9iYWxSZWdpc3RyeUZpbGVzPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHRvIHRyeSB0byBsb2FkIHRoZSBnbG9iYWwgcmVnaXN0cnkKICAgICAgICAgICAgICBmaWxlcywgaWYgdGhleSBleGlzdC4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+TG9hZEhvbWVSZWdpc3RyeUZpbGVzPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHRvIHRyeSB0byBsb2FkIHRoZSB1c2VyJ3MgcmVnaXN0cnkKICAgICAgICAgICAgICBmaWxlcyAoaW4gdGhlIDxmaWxlbmFtZT4ud2luZTwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZgogICAgICAgICAgICAgIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkpLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5Mb2FkV2luZG93c1JlZ2lzdHJ5RmlsZXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgV2luZSB3aWxsIGF0dGVtcHQgdG8gbG9hZCByZWdpc3RyeSBkYXRhCiAgICAgICAgICAgICAgZnJvbSBhIHJlYWwgV2luZG93cyByZWdpc3RyeSBpbiBhbiBleGlzdGluZyBNUyBXaW5kb3dzCiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5Xcml0ZXRvSG9tZVJlZ2lzdHJ5RmlsZXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgcmVnaXN0cnkgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlCiAgICAgICAgICAgICAgdXNlcidzIHJlZ2lzdHJ5IGZpbGVzLiAoQ3VycmVudGx5LCB0aGVyZSBpcyBubwogICAgICAgICAgICAgIGFsdGVybmF0aXZlLCBzbyBpZiB5b3UgdHVybiB0aGlzIG9mZiwgV2luZSBjYW5ub3Qgc2F2ZQogICAgICAgICAgICAgIHRoZSByZWdpc3RyeSBvbiBkaXNrIGF0IGFsbDsgYWZ0ZXIgeW91IGV4aXQgV2luZSwgeW91cgogICAgICAgICAgICAgIGNoYW5nZXMgd2lsbCBiZSBsb3N0LikKICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+U2F2ZU9ubHlVcGRhdGVkS2V5czwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0aGUgZW50aXJlIHJlZ2lzdHJ5IGlzIHNhdmVkIHRvIHRoZQogICAgICAgICAgICAgIHVzZXIncyByZWdpc3RyeSBmaWxlcywgb3Igb25seSBzdWJrZXlzIHRoZSB1c2VyIGhhdmUKICAgICAgICAgICAgICBhY3R1YWxseSBjaGFuZ2VkLiBDb25zaWRlcmluZyB0aGF0IHRoZSB1c2VyJ3MgcmVnaXN0cnkKICAgICAgICAgICAgICB3aWxsIG92ZXJyaWRlIGFueSBnbG9iYWwgcmVnaXN0cnkgZmlsZXMgYW5kIFdpbmRvd3MKICAgICAgICAgICAgICByZWdpc3RyeSBmaWxlcywgaXQgdXN1YWxseSBtYWtlcyBzZW5zZSB0byBvbmx5IHNhdmUKICAgICAgICAgICAgICB1c2VyLW1vZGlmaWVkIHN1YmtleXM7IHRoYXQgd2F5LCBjaGFuZ2VzIHRvIHRoZSByZXN0IG9mCiAgICAgICAgICAgICAgdGhlIGdsb2JhbCBvciBXaW5kb3dzIHJlZ2lzdHJpZXMgd2lsbCBzdGlsbCBhZmZlY3QgdGhlCiAgICAgICAgICAgICAgdXNlci4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+UGVyaW9kaWNTYXZlPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYSBub256ZXJvIHZhbHVlLCBpdCBzcGVjaWZpZXMKICAgICAgICAgICAgICB0aGF0IHlvdSB3YW50IHRoZSByZWdpc3RyeSB0byBiZSBzYXZlZCB0byBkaXNrIGF0IHRoZQogICAgICAgICAgICAgIGdpdmVuIGludGVydmFsLiBJZiBpdCBpcyBub3Qgc2V0LCB0aGUgcmVnaXN0cnkgd2lsbCBvbmx5CiAgICAgICAgICAgICAgYmUgc2F2ZWQgdG8gZGlzayB3aGVuIHRoZSB3aW5lc2VydmVyIHRlcm1pbmF0ZXMuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPlVzZU5ld0Zvcm1hdDwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgb2Jzb2xldGUuIFdpbmUgbm93IGFsd2F5cyB1c2VzIHRoZSBuZXcKICAgICAgICAgICAgICBmb3JtYXQ7IHN1cHBvcnQgZm9yIHRoZSBvbGQgZm9ybWF0IHdhcyByZW1vdmVkIGEgd2hpbGUKICAgICAgICAgICAgICBhZ28uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgPC9zZWN0Mj4KICA8L3NlY3QxPgoKPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCkxvY2FsIHZhcmlhYmxlczoKbW9kZTogc2dtbApzZ21sLXBhcmVudC1kb2N1bWVudDooImNvbmZpZ3VyaW5nLnNnbWwiICJjaGFwdGVyIiAic2VjdDEiICIiKQpFbmQ6Ci0tPgo=