VGhpcyBsaWNlbnNlIGdvdmVybnMgdXNlIG9mIGNvZGUgbWFya2VkIGFzIJNzYW1wbGWUIG9yIJNleGFtcGxllCBhdmFpbGFibGUgb24gCnRoaXMgd2ViIHNpdGUgd2l0aG91dCBhIGxpY2Vuc2UgYWdyZWVtZW50LCBhcyBwcm92aWRlZCB1bmRlciB0aGUgc2VjdGlvbiBhYm92ZSAKdGl0bGVkIJNOT1RJQ0UgU1BFQ0lGSUMgVE8gU09GVFdBUkUgQVZBSUxBQkxFIE9OIFRISVMgV0VCIFNJVEUulCBJZiB5b3UgdXNlIApzdWNoIGNvZGUgKHRoZSCTc29mdHdhcmWUKSwgeW91IGFjY2VwdCB0aGlzIGxpY2Vuc2UuIElmIHlvdSBkbyBub3QgYWNjZXB0IHRoZSAKbGljZW5zZSwgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCgoxLiBEZWZpbml0aW9ucwoKVGhlIHRlcm1zIJNyZXByb2R1Y2UslCCTcmVwcm9kdWN0aW9uLJQgk2Rlcml2YXRpdmUgd29ya3MslCBhbmQgk2Rpc3RyaWJ1dGlvbpQgCmhhdmUgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdy4KCkEgk2NvbnRyaWJ1dGlvbpQgaXMgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLCBvciBhbnkgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gdGhlIApzb2Z0d2FyZS4KCkEgk2NvbnRyaWJ1dG9ylCBpcyBhbnkgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgaXRzIGNvbnRyaWJ1dGlvbiB1bmRlciB0aGlzIApsaWNlbnNlLgoKk0xpY2Vuc2VkIHBhdGVudHOUIGFyZSBhIGNvbnRyaWJ1dG9yknMgcGF0ZW50IGNsYWltcyB0aGF0IHJlYWQgZGlyZWN0bHkgb24gaXRzIApjb250cmlidXRpb24uCgoyLiBHcmFudCBvZiBSaWdodHMKCihBKSBDb3B5cmlnaHQgR3JhbnQgLSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgCmxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSAKbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlIGl0cyAKY29udHJpYnV0aW9uLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgaXRzIGNvbnRyaWJ1dGlvbiwgYW5kIGRpc3RyaWJ1dGUgaXRzIApjb250cmlidXRpb24gb3IgYW55IGRlcml2YXRpdmUgd29ya3MgdGhhdCB5b3UgY3JlYXRlLgoKKEIpIFBhdGVudCBHcmFudCAtIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIApjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIApub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHVuZGVyIGl0cyBsaWNlbnNlZCBwYXRlbnRzIHRvIAptYWtlLCBoYXZlIG1hZGUsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIApvZiBpdHMgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBjb250cmlidXRpb24gaW4gCnRoZSBzb2Z0d2FyZS4KCjMuIENvbmRpdGlvbnMgYW5kIExpbWl0YXRpb25zCgooQSkgTm8gVHJhZGVtYXJrIExpY2Vuc2UtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCB5b3UgcmlnaHRzIHRvIHVzZSBhbnkgCmNvbnRyaWJ1dG9yc5IgbmFtZSwgbG9nbywgb3IgdHJhZGVtYXJrcy4KCihCKSBJZiB5b3UgYnJpbmcgYSBwYXRlbnQgY2xhaW0gYWdhaW5zdCBhbnkgY29udHJpYnV0b3Igb3ZlciBwYXRlbnRzIHRoYXQgeW91IApjbGFpbSBhcmUgaW5mcmluZ2VkIGJ5IHRoZSBzb2Z0d2FyZSwgeW91ciBwYXRlbnQgbGljZW5zZSBmcm9tIHN1Y2ggY29udHJpYnV0b3IgCnRvIHRoZSBzb2Z0d2FyZSBlbmRzIGF1dG9tYXRpY2FsbHkuCgooQykgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlLCB5b3UgbXVzdCByZXRhaW4gYWxsIApjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSAKc29mdHdhcmUuCgooRCkgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIHNvdXJjZSBjb2RlIGZvcm0sIHlvdSBtYXkgCmRvIHNvIG9ubHkgdW5kZXIgdGhpcyBsaWNlbnNlIGJ5IGluY2x1ZGluZyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBsaWNlbnNlIAp3aXRoIHlvdXIgZGlzdHJpYnV0aW9uLiBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gCmNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm0sIHlvdSBtYXkgb25seSBkbyBzbyB1bmRlciBhIGxpY2Vuc2UgdGhhdCBjb21wbGllcyAKd2l0aCB0aGlzIGxpY2Vuc2UuCgooRSkgVGhlIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIJNhcy1pcy6UIFlvdSBiZWFyIHRoZSByaXNrIG9mIHVzaW5nIGl0LiBUaGUgCmNvbnRyaWJ1dG9ycyBnaXZlIG5vIGV4cHJlc3Mgd2FycmFudGllcywgZ3VhcmFudGVlcyBvciBjb25kaXRpb25zLiBZb3UgbWF5IApoYXZlIGFkZGl0aW9uYWwgY29uc3VtZXIgcmlnaHRzIHVuZGVyIHlvdXIgbG9jYWwgbGF3cyB3aGljaCB0aGlzIGxpY2Vuc2UgCmNhbm5vdCBjaGFuZ2UuIFRvIHRoZSBleHRlbnQgcGVybWl0dGVkIHVuZGVyIHlvdXIgbG9jYWwgbGF3cywgdGhlIGNvbnRyaWJ1dG9ycyAKZXhjbHVkZSB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIApwdXJwb3NlIGFuZCBub24taW5mcmluZ2VtZW50LgoKKEYpIFBsYXRmb3JtIExpbWl0YXRpb24gLSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBzZWN0aW9ucyAyKEEpIGFuZCAyKEIpIApleHRlbmQgb25seSB0byB0aGUgc29mdHdhcmUgb3IgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IHlvdSBjcmVhdGUgdGhhdCBydW4gb24gYSAKTWljcm9zb2Z0IFdpbmRvd3Mgb3BlcmF0aW5nIHN5c3RlbSBwcm9kdWN0Lgo=