Lyogc3FsaXRlY29tcGF0LmggLSBjb21wYXRpYmlsaXR5IG1hY3Jvcw0KICoNCiAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4NCiAqDQogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4NCiAqDQogKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZA0KICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcw0KICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4NCiAqDQogKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwNCiAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQNCiAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoNCiAqDQogKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdA0KICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUNCiAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQ0KICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4NCiAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlDQogKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuDQogKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLg0KICovDQoNCiNpbmNsdWRlICJQeXRob24uaCINCg0KI2lmbmRlZiBQWVNRTElURV9DT01QQVRfSA0KI2RlZmluZSBQWVNRTElURV9DT01QQVRfSA0KDQovKiBkZWZpbmUgUHlfc3NpemVfdCBmb3IgcHJlLTIuNSB2ZXJzaW9ucyBvZiBQeXRob24gKi8NCg0KI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMA0KdHlwZWRlZiBpbnQgUHlfc3NpemVfdDsNCnR5cGVkZWYgaW50ICgqbGVuZnVuYykoUHlPYmplY3QqKTsNCiNlbmRpZg0KDQoNCi8qIGRlZmluZSBQeURpY3RfQ2hlY2tFeGFjdCBmb3IgcHJlLTIuNCB2ZXJzaW9ucyBvZiBQeXRob24gKi8NCiNpZm5kZWYgUHlEaWN0X0NoZWNrRXhhY3QNCiNkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3Qob3ApICgob3ApLT5vYl90eXBlID09ICZQeURpY3RfVHlwZSkNCiNlbmRpZg0KDQovKiBkZWZpbmUgUHlfQ0xFQVIgZm9yIHByZS0yLjQgdmVyc2lvbnMgb2YgUHl0aG9uICovDQojaWZuZGVmIFB5X0NMRUFSDQojZGVmaW5lIFB5X0NMRUFSKG9wKQkJCQlcDQogICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwNCiAgICAgICAgICAgICAgICBpZiAob3ApIHsJCQlcDQogICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gKFB5T2JqZWN0ICopKG9wKTsJXA0KICAgICAgICAgICAgICAgICAgICAgICAgKG9wKSA9IE5VTEw7CQlcDQogICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsJCVwNCiAgICAgICAgICAgICAgICB9CQkJCVwNCiAgICAgICAgfSB3aGlsZSAoMCkNCiNlbmRpZg0KDQojaWZuZGVmIFB5VmFyT2JqZWN0X0hFQURfSU5JVA0KI2RlZmluZSBQeVZhck9iamVjdF9IRUFEX0lOSVQodHlwZSwgc2l6ZSkgXA0KICAgIFB5T2JqZWN0X0hFQURfSU5JVCh0eXBlKSBzaXplLA0KI2VuZGlmDQoNCiNpZm5kZWYgUHlfVFlQRQ0KI2RlZmluZSBQeV9UWVBFKG9iKSAoKG9iKS0+b2JfdHlwZSkNCiNlbmRpZg0KDQojZW5kaWYNCg==