IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICAgICAgICAgICBDQURFTkNFIENPUFlSSUdIVCBOT1RJQ0UKIyAgICAgICAgIKkgMjAwOC0yMDEzIENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBGb3VuZGF0aW9uIEZsb3cgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcGVyZm9ybSBzcGVjaWFsaXplZAojIHRhc2tzLgojCiMgVGhpcyB3b3JrIG1heSBub3QgYmUgY29waWVkLCByZS1wdWJsaXNoZWQsIHVwbG9hZGVkLCBvciBkaXN0cmlidXRlZCBpbiBhbnkgd2F5LAojIGluIGFueSBtZWRpdW0sIHdoZXRoZXIgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KIyBmcm9tIENhZGVuY2UuIE5vdHdpdGhzdGFuZGluZyBhbnkgcmVzdHJpY3Rpb25zIGhlcmVpbiwgc3ViamVjdCB0byBjb21wbGlhbmNlCiMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIENhZGVuY2Ugc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgdW5kZXIKIyB3aGljaCB0aGlzIG1hdGVyaWFsIHdhcyBwcm92aWRlZCwgdGhpcyBtYXRlcmlhbCBtYXkgYmUgY29waWVkIGFuZCBpbnRlcm5hbGx5CiMgZGlzdHJpYnV0ZWQgc29sZWx5IGZvciBpbnRlcm5hbCBwdXJwb3NlcyBmb3IgdXNlIHdpdGggQ2FkZW5jZSB0b29scy4KIwojIFRoaXMgd29yayBpcyBDYWRlbmNlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBhbmQgbWF5IHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYmUKIyBnaXZlbiB0byB0aGlyZCBwYXJ0aWVzLCBuZWl0aGVyIGluIG9yaWdpbmFsIG5vciBpbiBtb2RpZmllZCB2ZXJzaW9ucywgd2l0aG91dAojIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIENhZGVuY2UuIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzCiMgdGhlIHByb3ByaWV0YXJ5IGFuZCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb2YgQ2FkZW5jZSBvciBpdHMgbGljZW5zb3JzLCBhbmQKIyBpcyBzdXBwbGllZCBzdWJqZWN0IHRvLCBhbmQgbWF5IGJlIHVzZWQgb25seSBieSBDYWRlbmNlJ3MgY3VycmVudCBjdXN0b21lcnMKIyBpbiBhY2NvcmRhbmNlIHdpdGgsIGEgcHJldmlvdXNseSBleGVjdXRlZCBsaWNlbnNlIGFncmVlbWVudCBiZXR3ZWVuIENhZGVuY2UKIyBhbmQgaXRzIGN1c3RvbWVyLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEJZIENBREVOQ0UgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAojIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KIyBJTiBOTyBFVkVOVCBTSEFMTCBDQURFTkNFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwKIyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAojIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgojIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgIE1BVEVSSUFMLCBFVkVOIElGCiMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnNldCB2YXJzKHN0ZXApIGRlYnVnCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU291cmNlIHNjcmlwdCB0byBkZWZpbmUgZGVzaWduIHNwZWNpZmljIHZhcmlhYmxlcwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmlmIHtbaW5mbyBleGlzdHMgZW52KEZGX1NFVFVQX1BBVEgpXX0gewogICBpZiB7W2ZpbGUgZXhpc3RzICRlbnYoRkZfU0VUVVBfUEFUSCldfSB7CiAgICAgIFB1dHMgIjxGRj4gTE9BRElORyAkZW52KEZGX1NFVFVQX1BBVEgpL3NldHVwLnRjbCAuLi4iCiAgICAgIGlmIHsgWyBjYXRjaCB7IHNvdXJjZSAkZW52KEZGX1NFVFVQX1BBVEgpL3NldHVwLnRjbH0gc2V0dXBfZXJyb3IgXSB9IHsKICAgICAgICAgUHV0cyAiPEZGPiA9PT09PT09PT09PT09IFNFVFVQIEVSUk9SID09PT09PT09PT09PT09PT09PSIKICAgICAgICAgUHV0cyAiPEZGPiAkZXJyb3JJbmZvIgogICAgICAgICBQdXRzICI8RkY+ICRzZXR1cF9lcnJvciIKICAgICAgICAgUHV0cyAiPEZGPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogICAgICAgICBzZXQgcmV0dXJuX2NvZGUgOTkKICAgICAgICAgZXhpdCAkcmV0dXJuX2NvZGUKICAgICAgfQogICB9IGVsc2UgewogICAgICBQdXRzICI8RkY+IEVSUk9SOiAkZW52KEZGX1NFVFVQX1BBVEgpL3NldHVwLnRjbCBkb2VzIG5vdCBleGlzdCIKICAgICAgZXhpdAogICB9Cn0gZWxzZSB7CiAgIGlmIHtbZmlsZSBleGlzdHMgc2V0dXAudGNsXX0gewogICAgICBQdXRzICI8RkY+IExPQURJTkcgc2V0dXAudGNsIC4uLiIKICAgICAgaWYgeyBbIGNhdGNoIHsgc291cmNlIHNldHVwLnRjbH0gc2V0dXBfZXJyb3IgXSB9IHsKICAgICAgICAgUHV0cyAiPEZGPiA9PT09PT09PT09PT09IFNFVFVQIEVSUk9SID09PT09PT09PT09PT09PT09PSIKICAgICAgICAgUHV0cyAiPEZGPiAkZXJyb3JJbmZvIgogICAgICAgICBQdXRzICI8RkY+ICRzZXR1cF9lcnJvciIKICAgICAgICAgUHV0cyAiPEZGPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogICAgICAgICBzZXQgcmV0dXJuX2NvZGUgOTkKICAgICAgICAgZXhpdCAkcmV0dXJuX2NvZGUKICAgICAgfQogICB9IGVsc2UgewogICAgICBQdXRzICI8RkY+IEVSUk9SOiBzZXR1cC50Y2wgZG9lcyBub3QgZXhpc3QiCiAgICAgIGV4aXQKICAgfQp9Cgpzb3VyY2UgJHZhcnMoc2NyaXB0X3Jvb3QpL0VESS9wcm9jcy50Y2wKc291cmNlICR2YXJzKHNjcmlwdF9yb290KS9FVEMvdXRpbHMudGNsCgo6OkZGX0VESTo6aW5pdGlhbGl6ZV9mbG93CgppZiB7W2luZm8gZXhpc3RzIGVudihTVEVQKV19IHsKICAgOjpGRl9FREk6OmxvYWRfZGVzaWduIDAgJGVudihTVEVQKQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgTG9hZCAiYWx3YXlzIHNvdXJjZSIgcGx1Zy1pbiBzY3JpcHQKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo6OkZGOjpzb3VyY2VfcGx1ZyBhbHdheXNfc291cmNlX3RjbAoKd2luCg==