Q3VycmVudCBzaG9ydGNvbWluZ3Mgb2YgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIG1vZGVsIGluIEVjbGlwc2UuIApJJ20gaG9waW5nIHRoYXQgdGhlICJTdXBwb3J0IGJhY2tncm91bmQgYWN0aXZpdHkiIGVmZm9ydCBjYW4gYmUgdXNlZCB0byBicmluZyBzb2x1dGlvbnMgaW50byB0aGlzIGFyZWEuCgoxLiBUbyBoYXZlIGEgY2FuY2VsYWJsZSBwcm9ncmVzcyBtb25pdG9yIGFuIG9wZXJhdGlvbiBjYW4gbm90IGJlIHJ1biBpbiB0aGUgZGlzcGxheSB0aHJlYWQgYnV0IGhhcyB0byBiZSBmb3JrZWQgKHNlZSBJUnVubmFibGVDb250ZXh0LnJ1bikuCgoyLiBUaGVyZSBpcyBhIGxvdCBvZiBmdW5jdGlvbmFsaXR5IGluIHRoZSB3b3JrYmVuY2ggd2hpY2ggaXMgYm91bmQgdG8gdGhlIGRpc3BsYXkgdGhyZWFkLgpFdmVuIHNvbWUgbW9kZWwgb3BlcmF0aW9ucyBoYXZlIHRvIHJ1biBpbiB0aGUgZGlzcGxheSB0aHJlYWQgYXMgdGhlIGRvY3VtZW50IGlzIGRpcmVjdGx5IGNvdXBsZWQgd2l0aCB0aGUgdGV4dCB3aWRnZXQuIFRoZXJlIGlzIG5vIHJlYWwgZG9jdW1lbnRhdGlvbiAoQUZBSUspIGFib3V0IHdoaWNoIGNhbGxzIGNhbiBvciBjYW5ub3QgYmUgaW52b2tlZCBpbiBhIG5vbi1VSSB0aHJlYWQuCgozLiBUbyB1c2UgZnVuY3Rpb25hbGl0eSBhcyBkZXNjcmliZWQgaW4gMi4gYnV0IHRvIHN0aWxsIGhhdmUgYSBwcm9ncmVzcyBtb25pdG9yLCBhIHRyaWNrIHRvIHdvcmsgYXJvdW5kIDEuIGlzIHRvIHNsaWNlIHRoZSBvcGVyYXRpb24gaW4gc21hbGxlciBwYXJ0cyB0aGF0IGFyZSBydW4gdXNpbmcgc3luY0V4ZWMgZnJvbSB0aGUgZm9ya2VkIHRocmVhZC4KRXhhbXBsZSBpcyBPcmdhbml6ZUltcG9ydHNBY3Rpb24gb24gYSBwcm9qZWN0Cgo0LiBPcGVyYXRpb25zIHVzdWFsbHkgYXJlIHJ1biBhcyBhbiBhdG9taWMgd29ya3NwYWNlIG9wZXJhdGlvbiB1c2luZyBJV29ya3NwYWNlLnJ1biBzbyB0aGF0IGFsbCByZXNvdXJjZSBkZWx0YXMgYXJlIGZvbGRlZCBhbmQgb25seSBicm9hZGNhc3RlZCBhdCB0aGUgZW5kIG9mIGFuIG9wZXJhdGlvbi4KQW4gKHVuZG9jdW1lbnRlZCkgcmVzdHJpY3Rpb24gb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgdGhhdCBmb2xkaW5nIGlzIGJvdW5kIHRvIHRoZSB0aHJlYWQgd2hlcmUgdGhlIG9wZXJhdGlvbiB3YXMgY2FsbGVkLiBTbyBpZiBhbiBvcGVyYXRpb24gdXNlcyB0aGUgdHJpY2sgZGVzY3JpYmVkIGluIDMuLCBmb2xkaW5nIGhhcHBlbnMgb25seSBmb3IgZGVsdGFzIGlzc3VlZCBpbiB0aGUgZm9ya2VkIHRocmVhZC4gQWxsIGRlbHRhcyByZXN1bHRpbmcgZnJvbSBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgcnVuIHdpdGggc3luY0V4ZWMgYXJlIG5vdCBmb2xkZWQgYnV0IGJyb2FkY2FzdGVkIGltbWVkaWF0ZWx5OiBPcGVyYXRpb25zIHVzaW5nIG1ldGhvZCAzLiBhcmUgcmVzdWx0aW5nIGluIGZsYXNoaW5nIG9mIHZpZXdzLgoKNS4gSmF2YUNvcmUgYWxzbyBhbGxvd3MgZm9sZGluZyBvZiBpdCBKYXZhIGVsZW1lbnQgZGVsdGFzLCBidXQgdG8gZG8gdGhpcywgSmF2YUNvcmUucnVuIGhhcyB0byBiZSB1c2VkIGluc3RlYWQgb2YgSVdvcmtzcGFjZS5ydW4uIEkgdGhpbmsgdGhpcyBzaG91bGQgYmUgcmV2aWV3ZWQgYXMgaXQgZm9yY2VzIGNsaWVudHMgdG8ga25vdyBKYXZhQ29yZSBpbiBvcmRlciB0byBoYXZlIEphdmEgb3BlcmF0aW9ucyBmb2xkZWQuCgo2LiBJbiB0aGUgcGFzdCB3ZSB3ZXJlIGhpdCBieSBzZXZlcmFsIGRlYWRsb2Nrcy4gTW9zdCBvZiB0aGVtIG9jY3VycmVkIGJlY2F1c2UgdGhlcmUgd2FzIG5vIGRlZmluZWQgbG9jayBvcmRlcmluZy4gV2Ugc2hvdWxkIGhhdmUgYSBkZXNpZ24gZG9jdW1lbnQgdGhhdCBkZWZpbmVzIGhvdyBsb2NrcyBtdXN0IGJlIHVzZWQuCgo3LiBXZSBkb24ndCBrbm93IHRoZSBydWxlcyB0aGF0IHNob3VsZCBhcHBseSB0byByZXNvdXJjZSBjaGFuZ2UgbGlzdGVuZXJzLiBUaGV5IHByb2Nlc3MgdGhlIGRlbHRhcyBhbmQgYXMgYSByZXN1bHQgaGF2ZSB0byBkbyBzb21lIHVwZGF0ZSB3b3JrIGxpa2UgcmVmcmVzaGluZyBhIHZpZXcuIENhbiB0aGlzIG9wZXJhdGlvbiBiZSBkaXJlY3RseSBpbnZva2VkPyBJdCBoYXMgdG8gYmUgYXNzdW1lZCB0aGF0IHdlIGFyZSBub3QgaW4gdGhlIGRpc3BsYXkgdGhyZWFkIHNvIGUuZy4gYSB2aWV3ZXIgcmVmcmVzaCBoYXMgcnVuIHVzaW5nIHN5bmNFeGVjLiBUaGlzIGlzIGRhbmdlcm91cyBhcyBpdCBjYW4gbGVhZCB0byBhIGRlYWRsb2NrOiBUaGUgZGlzcGxheSB0aHJlYWQgY291bGQgYmUgd2FpdGluZyBmb3IgdGhlIHdvcmtzcGFjZSBsb2NrLgpTbyBpbiBtb3N0IGNhc2VzIHdlIGRlY2lkZSB0byAncG9zdCcgdGhlIHJlZnJlc2guIAoKOC4gSW4gdGhlIHNjZW5hcmlvIGRlc2NyaWJlZCBpbiA3Liwgd2Ugd2FudCB0byBwb3N0IGEgcmVzdWx0IG9mIGEgcmVzb3VyY2UgbGlzdGVuZXIuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYXN5Y0V4ZWMgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgdGhlIGxpc3RlbmVycyB3ZXJlIGNhbGxlZCBpbiB0aGUgZGlzcGxheSB0aHJlYWQuCklmIGl0IG9jY3VycmVkIGluIGEgZm9ya2VkIHRocmVhZCwgdGhlIG9wZXJhdGlvbiBwb3N0ZWQgd2l0aCBhc3ljRXhlYyB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgZm9ya2VkIG9wZXJhdGlvbiBwcm9iZXMgdGhlIHByb2dyZXNzIG1vbml0b3I6IEluIHRoZSBtaWRkbGUgb2YgdGhlIGZvcmtlZCBvcGVyYXRpb24uCgpJZGVhcyBmb3Igc29sdXRpb25zOgphLikgU29sdmUgMS4gKEhhdmUgYSBwcm9ncmVzcyBtb25pdG9yIHRoYXQgaXMgY2FuY2VsYWJsZSBldmVuIHdoZW4gb3BlcmF0aW9uIHJ1bnMgaW4gZGlzcGxheSB0aHJlYWQpLCBhbmQgZGVmaW5lIHRoYXQgYWxsIG9wZXJhdGlvbnMgaGF2ZSB0byBiZSBydW4gaW4gdGhlIGRpc3BsYXkgdGhyZWFkLgorIG5vIGRlYWRsb2NrcyBhcyBkZXNjcmliZWQgaW4gNy4sIHJlc291cmNlIGxpc3RlbmVycyBjYW4gdXNlIHN5bmNFeGVjIHRvIHVwZGF0ZQorIHByb2JsZW0gOCBpcyBzb2x2ZWQKKyBubyBwcm9ibGVtcyBhcyBkZXNjcmliZWQgaW4gNAotIFVJIGlzIG5vdCByZXBhaW50ZWQgd2hpbGUgaW4gYW4gb3BlcmF0aW9uCgpiLikgY29yZSByZXNvdXJjZXMgc2hvdWxkIG9mZmVyIGFuIGluZnJhc3RydWN0dXJlIGZvciBjbGllbnQgbG9ja3MuIFRoZSBpbmZyYXN0cnVjdHVyZSBtYWtlcyBzdXJlIHRoYXQgYSBjbGllbnQgbG9jayBvbmx5IGNhbiBiZSByZXRyaWV2ZWQgd2hlbiB0aGUgd29ya3NwYWNlIGxvY2sgaXMgb3duZWQuCgpjLikgRG9uknQgZG8gMS4pIGJ1dCBvZmZlciBhIGJldHRlciBlbnZpcm9ubWVudCBmb3IgZm9ya2VkIG9wZXJhdGlvbnM6CkZhY2lsaXR5IHRvIHBvc3QgYmVoaW5kIGFuIG9wZXJhdGlvbgpGYWNpbGl0eSB0byBtZXJnZSBmb2xkZWQgZGVsdGFzIHdoZW4gYSBSdW5uYWJsZSBoYXMgdG8gYmUgZXhlY3V0ZWQgaW4gc3luY0V4ZWMu