LyoKICogJElkJAogKgogKiBDb3B5cmlnaHQgqSAyMDAzIEtlaXRoIFBhY2thcmQKICoKICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CiAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAogKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCiAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEtlaXRoIFBhY2thcmQgbm90IGJlIHVzZWQgaW4KICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0CiAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBLZWl0aCBQYWNrYXJkIG1ha2VzIG5vCiAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdAogKiBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgogKgogKiBLRUlUSCBQQUNLQVJEIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAogKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCiAqIEVWRU5UIFNIQUxMIEtFSVRIIFBBQ0tBUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCiAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogKi8KCkBSRVRACQlGY0Jvb2wgCQpARlVOQ0AJCUZjRmlsZVNjYW4gCkBUWVBFMUAJCUZjRm9udFNldCAqCQkJQEFSRzFACQlzZXQJCkBUWVBFMkAJCUZjU3RyU2V0ICoJCQlAQVJHMkAJCWRpcnMJCkBUWVBFM0AJCUZjRmlsZUNhY2hlICoJCQlAQVJHM0AJCWNhY2hlCQpAVFlQRTRACQlGY0JsYW5rcyAqCQkJQEFSRzRACQlibGFua3MJCkBUWVBFNUAJCWNvbnN0IGNoYXIgKgkJCUBBUkc1QAkJZmlsZQkKQFRZUEU2QAkJRmNCb29sIAkJCQlAQVJHNkAJCWZvcmNlCQpAUFVSUE9TRUAJc2NhbiBhIGZvbnQgZmlsZQpAREVTQ0AKU2NhbnMgYSBzaW5nbGUgZmlsZSBhbmQgYWRkcyBhbGwgZm9udHMgZm91bmQgdG8gPHBhcmFtZXRlcj5zZXQ8L3BhcmFtZXRlcj4uCklmIDxwYXJhbWV0ZXI+Zm9yY2U8L3BhcmFtZXRlcj4gaXMgRmNUcnVlLCB0aGVuIHRoZSBmaWxlIGlzIHNjYW5uZWQgZXZlbiBpZgphc3NvY2lhdGVkIGluZm9ybWF0aW9uIGlzIGZvdW5kIGluIDxwYXJhbWV0ZXI+Y2FjaGU8L3BhcmFtZXRlcj4uICBJZgo8cGFyYW1ldGVyPmZpbGU8L3BhcmFtZXRlcj4gaXMgYSBkaXJlY3RvcnksIGl0IGlzIGFkZGVkIHRvCjxwYXJhbWV0ZXI+ZGlyczwvcGFyYW1ldGVyPi4KQEAKCkBSRVRACQlGY0Jvb2wgCQpARlVOQ0AJCUZjRGlyU2NhbiAKQFRZUEUxQAkJRmNGb250U2V0ICoJCQlAQVJHMUAJCXNldAkKQFRZUEUyQAkJRmNTdHJTZXQgKgkJCUBBUkcyQAkJZGlycwkKQFRZUEUzQAkJRmNGaWxlQ2FjaGUgKgkJCUBBUkczQAkJY2FjaGUJCkBUWVBFNEAJCUZjQmxhbmtzICoJCQlAQVJHNEAJCWJsYW5rcwkKQFRZUEU1QAkJY29uc3QgY2hhciAqCQkJQEFSRzVACQlkaXIJCkBUWVBFNkAJCUZjQm9vbCAJCQkJQEFSRzZACQlmb3JjZQkKQFBVUlBPU0VACXNjYW4gYSBmb250IGRpcmVjdG9yeQpAREVTQ0AKU2NhbnMgYW4gZW50aXJlIGRpcmVjdG9yeSBhbmQgYWRkcyBhbGwgZm9udHMgZm91bmQgdG8KPHBhcmFtZXRlcj5zZXQ8L3BhcmFtZXRlcj4uICBJZiA8cGFyYW1ldGVyPmZvcmNlPC9wYXJhbWV0ZXI+IGlzIEZjVHJ1ZSwgdGhlbgp0aGUgZGlyZWN0b3J5IGFuZCBhbGwgZmlsZXMgd2l0aGluIGl0IGFyZSBzY2FubmVkIGV2ZW4gaWYgaW5mb3JtYXRpb24gaXMKcHJlc2VudCBpbiB0aGUgcGVyLWRpcmVjdG9yeSBjYWNoZSBmaWxlIG9yIDxwYXJhbWV0ZXI+Y2FjaGU8L3BhcmFtZXRlcj4uICBBbnkKc3ViZGlyZWN0b3JpZXMgZm91bmQgYXJlIGFkZGVkIHRvIDxwYXJhbWV0ZXI+ZGlyczwvcGFyYW1ldGVyPi4KQEAKCkBSRVRACQlGY0Jvb2wgCQpARlVOQ0AJCUZjRGlyU2F2ZSAKQFRZUEUxQAkJRmNGb250U2V0ICoJCQlAQVJHMUAJCXNldAkKQFRZUEUyQAkJRmNTdHJTZXQgKgkJCUBBUkcyQAkJZGlycwkKQFRZUEUzQAkJY29uc3QgY2hhciAqCQkJQEFSRzNACQlkaXIJCkBQVVJQT1NFQAlzYXZlIGEgZGlyZWN0b3J5IGNhY2hlCkBERVNDQApDcmVhdGVzIHRoZSBwZXItZGlyZWN0b3J5IGNhY2hlIGZpbGUgZm9yIDxwYXJhbWV0ZXI+ZGlyPC9wYXJhbWV0ZXI+IGFuZApwb3B1bGF0ZXMgaXQgd2l0aCB0aGUgZm9udHMgaW4gPHBhcmFtZXRlcj5zZXQ8L3BhcmFtZXRlcj4gYW5kIHN1YmRpcmVjdG9yaWVzCmluIDxwYXJhbWV0ZXI+ZGlyczwvcGFyYW1ldGVyPi4KQEAKCkBSRVRACQlGY0Jvb2wgCQpARlVOQ0AJCUZjRGlyQ2FjaGVWYWxpZCAKQFRZUEUxQAkJY29uc3QgRmNDaGFyOCAqCQkJQEFSRzFACQljYWNoZV9maWxlCQpAUFVSUE9TRUAJY2hlY2sgZGlyZWN0b3J5IGNhY2hlIHRpbWVzdGFtcApAREVTQ0AKUmV0dXJucyBGY1RydWUgaWYgPHBhcmFtZXRlcj5jYWNoZV9maWxlPC9wYXJhbWV0ZXI+IGlzIG5vIG9sZGVyIHRoYW4gdGhlCmRpcmVjdG9yeSBjb250YWluaW5nIGl0LCBlbHNlIEZjRmFsc2UuCkBACg==