VGhlIGZvbGxvdyBtYXkgYmUgdHJhZGVtYXJrZWQgYnkgdGhlaXIgcmVzcGVjdGl2ZSBvcmdhbml6YXRpb25zLgoKM0RFUyAgICAgICAgICAgIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQKQUlYCkFOU0kgICAgICAgICAgICBBbWVyaWNhbiBOYXRpb25hbCBTdGFuZGFyZHMgSW5zdGl0dXRlCkFTQ0lJICAgICAgICAgICBBbWVyaWNhbiBTdGFuZGFyZCBDb2RlIGZvciBJbmZvcm1hdGlvbiBJbnRlcmNoYW5nZQpBU04uMSAgICAgICAgICAgQWJzdHJhY3QgU3ludGF4IE5vdGF0aW9uIDEKQkFUT04KQkVSICAgICAgICAgICAgIEJhc2ljIEVuY29kaW5nIFJ1bGVzCkJNUCAgICAgICAgICAgICBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUKQnJpdGlzaCBUZWxlY29tCkNBU1QKQ0FTVDEyOApDQVNUMwpDQVNUNQpDQ0lUVCAgICAgICAgICAgQ29taXTpIENvbnN1bHRhdGlmIEludGVybmF0aW9uYWwgVOls6XBob25pcXVlIGV0IFTpbOlncmFwaGlxdWUKQ0RNRgpDRVIgICAgICAgICAgICAgQ2Fub25pY2FsIEVuY29kaW5nIFJ1bGVzCkNSTUYgICAgICAgICAgICBDZXJ0aWZpY2F0ZSBSZXF1ZXN0IE1lc3NhZ2UgRm9ybWF0CmN0YWdzICAgICAgICAgICBjdGFncygxKQpDb2x1bWJpYSBVbml2ZXJzaXR5CkNyeXB0b2tpCkRFUiAgICAgICAgICAgICBEaXN0aW5ndWlzaGVkIEVuY29kaW5nIFJ1bGVzCkRFUyAgICAgICAgICAgICBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQKREVTMiAgICAgICAgICAgIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZCAoMiBrZXkpCkRFUzMgICAgICAgICAgICBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQgKDMga2V5IC8gdHJpcGxlKQpESCAgICAgICAgICAgICAgRGlmZmllLUhlbGxtYW4KRElDT00KRExMICAgICAgICAgICAgIER5bmFtaWNhbGx5IExvYWRhYmxlIExpYnJhcnkKRFNBICAgICAgICAgICAgIERpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobQpEZXBhcnRtZW50IG9mIERlZmVuc2UKRS4xNjMtNApFQ0RTQQpFQ01BICAgICAgICAgICAgRXVyb3BlYW4gQ29tcHV0ZXJzIE1hbnVmYWN0dXJpbmcgQXNzb2NpYXRpb24KRURJICAgICAgICAgICAgIEVsZWN0cm9uaWMgRGF0YSBJbnRlcmNoYW5nZQplbWFjcyAgICAgICAgICAgZW1hY3MoMSkKRVdPUyAgICAgICAgICAgIEV1cm9wZWFuIFdvcmtzaG9wIG9uIE9wZW4gU3lzdGVtcwpFbnRydXN0CkV4YW1wbGUuY29tCkZPUlRFWlpBCkdJRiAgICAgICAgICAgICBHcmFwaGljYWwgSW50ZXJjaGFuZ2UgRm9ybWF0CkhQCQlIZXdsZXR0IFBhY2thcmQKSFBVWApIVE1MICAgICAgICAgICAgSHlwZXJ0ZXh0IE1hcmt1cCBMYW5ndWFnZQpJQU5BICAgICAgICAgICAgSW50ZXJuZXQgQXNzaWduZWQgTnVtYmVycyBBdXRob3JpdHkKSUJNCQlJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmUKSURFQQpJRUVFCklQU0VDCklSSVgKSVNPICAgICAgICAgICAgIEludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24KSVRVICAgICAgICAgICAgIEludGVybmF0aW9uYWwgVGVsZWNvbW11bmljYXRpb24gVW5pb24KSmF2YQpKUEVHICAgICAgICAgICAgSm9pbnQgUGhvdG9ncmFwaGljIEV4cGVydHMgR3JvdXAKSlVOSVBFUgpLRUEgICAgICAgICAgICAgS2V5IEVuY3J5cHRpb24gQWxnb3JpdGhtCkxEQVAgICAgICAgICAgICBMaWdodHdlaWdodCBEaXJlY3RvcnkgQWNjZXNzIFByb3RvY29sCkxXRVIgICAgICAgICAgICBMaWdodHdlaWdodCBFbmNvZGluZyBSdWxlcwpNYWNpbnRvc2gKTUQyCk1ENQpNSU1FICAgICAgICAgICAgTXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9ucwpNSVNTSQpNaWNyb3NvZnQKTkFUTyAgICAgICAgICAgIE5vcnRoIEF0bGFudGljIFRyZWF0eSBPcmdhbml6YXRpb24KTlNQUiAgICAgICAgICAgIE5ldHNjYXBlIFBvcnRhYmxlIFJ1bnRpbWUKTlNTICAgICAgICAgICAgIE5ldHdvcmsgU2VjdXJpdHkgU2VydmljZXMKTmV0c2NhcGUKTmV0c2NhcGUgQ2VydGlmaWNhdGUgU2VydmVyCk5ldHNjYXBlIERpcmVjdG9yeQpOb3JkdW5ldApPQUVQCk9DU1AgICAgICAgICAgICBPbmxpbmUgQ2VydGlmaWNhdGUgU3RhdHVzIFByb3RvY29sCk9JRCAgICAgICAgICAgICBPYmplY3QgSWRlbnRpZmllcgpPU0kgICAgICAgICAgICAgT3BlbiBTeXN0ZW1zIEludGVyY29ubmVjdGlvbgpPU0YJCU9wZW4gU29mdHdhcmUgRm91bmRhdGlvbgpPU0YxClBFUkwgICAgICAgICAgICBQcmFjdGljYWwgRXh0cmFjdGlvbiBhbmQgUmVwb3J0IExhbmd1YWdlClBHUCAgICAgICAgICAgICBQcmV0dHkgR29vZCBQcml2YWN5ClBIRwpQS0NTICAgICAgICAgICAgUHVibGljIEtleSBDcnlwdG9ncmFwaHkgU3RhbmRhcmRzClBLSVggICAgICAgICAgICBQdWJsaWMgS2V5IEluZnJhc3RydWN0dXJlIChYLjUwOSkKUE9TSVgKUFRIUkVBRFMgICAgICAgIFBvc2l4IFRocmVhZHMKUFVSSUZZClJDMgpSQzQKUkM1ClJGQwpSU0EKUlNBIERhdGEgU2VjdXJpdHkKUlNBIFNlY3VyaXR5ClNIQTEgICAgICAgICAgICBTZWN1cmUgSGFzaGluZyBBbGdvcml0aG0KU0lUQSAgICAgICAgICAgIFNvY2lldGUgSW50ZXJuYXRpb25hbGUgZGUgVGVsZWNvbW11bmljYXRpb25zIEFlcm9uYXV0aXF1ZXMKU0tJUEpBQ0sKU01JTUUgICAgICAgICAgIFNlY3VyZSBNSU1FClNNUFRFICAgICAgICAgICBTb2NpZXR5IG9mIE1vdGlvbiBQaWN0dXJlIGFuZCBUZWxldmlzaW9uIEVuZ2luZWVycwpTTk1QICAgICAgICAgICAgU2ltcGxlIE5ldHdvcmsgTWFuYWdlbWVudCBQcm90b2NvbApTR0kJCVNpbGljb24gR3JhcGhpY3MgSW5jb3Jwb3JhdGVkClNTTCAgICAgICAgICAgICBTZWN1cmUgU29ja2V0cyBMYXllcgpTdW4KU3VuT1MKU29sYXJpcwpUTFMgICAgICAgICAgICAgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5ClRlbGV0ZXgKVGVsZXRydXN0ClRlbGV4ClRoYXd0ZQpVQ1MtNCAgICAgICAgICAgVW5pdmVyc2FsIENvZGVkIENoYXJhY3RlciBTZXQKVU5JWApVUkkgICAgICAgICAgICAgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyClVSTCAgICAgICAgICAgICBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IKVVRGLTggICAgICAgICAgIFVuaWNvZGUgVHJhbnNmb3JtYXRpb24gRm9ybWF0ClVuaXN5cwpWZXJpc2lnbgpXSU4zMiAgICAgICAgICAgV2luZG93cwpXSU5OVCAgICAgICAgICAgV2luZG93cyBOVApXaW5kb3dzCldvcmRQZXJmZWN0ClguMTIxClguMjUKWC40MDAKWC41MDkKWC41MjAKWDkuNDIKWDkuNTcKWEFQSUEKWjM5LjUwCgo=