Li4gTWFjcm9zL0NvbmZpZ3VyYXRpb24vL0JPT1NUX01QTF9MSU1JVF9NQVBfU0laRSB8NjAKCkJPT1NUX01QTF9MSU1JVF9NQVBfU0laRQo9PT09PT09PT09PT09PT09PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgI2lmICFkZWZpbmVkKEJPT1NUX01QTF9MSU1JVF9NQVBfU0laRSkKICAgICMgICBkZWZpbmUgQk9PU1RfTVBMX0xJTUlUX01BUF9TSVpFIFxcCiAgICAgICAgICAgIHxpZGljfCBcXAogICAgL1wqXCovCiAgICAjZW5kaWYKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKYGBCT09TVF9NUExfTElNSVRfTUFQX1NJWkVgYCBpcyBhbiBvdmVycmlkYWJsZSBjb25maWd1cmF0aW9uIG1hY3JvIHJlZ3VsYXRpbmcKdGhlIG1heGltdW0gYXJpdHkgb2YgdGhlIGBgbWFwYGBcICdzIGB2YXJpYWRpYyBmb3JtYF9fLiBJbiB0aGlzIAppbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSwgYGBCT09TVF9NUExfTElNSVRfTUFQX1NJWkVgYCBoYXMgYSBkZWZhdWx0IHZhbHVlCm9mIDIwLiBUbyBvdmVycmlkZSB0aGUgZGVmYXVsdCBsaW1pdCwgZGVmaW5lIGBgQk9PU1RfTVBMX0xJTUlUX01BUF9TSVpFYGAgdG8KdGhlIGRlc2lyZWQgbWF4aW11bSBhcml0eSByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRlbiBiZWZvcmUgCmluY2x1ZGluZyBhbnkgbGlicmFyeSBoZWFkZXIuIHxwcmVwcm9jZXNzZWQgaGVhZGVycyBkaXNjbGFpbWVyfAoKX18gYFZhcmlhZGljIFNlcXVlbmNlYF8KCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICAjZGVmaW5lIEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMKICAgICNkZWZpbmUgQk9PU1RfTVBMX0xJTUlUX01BUF9TSVpFIDEwCiAgICBgYCNgYFwgaW5jbHVkZSA8Ym9vc3QvbXBsL21hcC5ocHA+CiAgICBgYCNgYFwgaW5jbHVkZSA8Ym9vc3QvbXBsL3BhaXIuaHBwPgogICAgYGAjYGBcIGluY2x1ZGUgPGJvb3N0L21wbC9pbnQuaHBwPgogICAgCiAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6Om1wbDsKCiAgICB0ZW1wbGF0ZTwgaW50IGkgPiBzdHJ1Y3QgaW50cyA6IHBhaXI8IGludF88aT4saW50XzxpPiA+IHt9OwogICAgCiAgICB0eXBlZGVmIG1hcDwgaW50czwxPiA+IG1fMTsKICAgIHR5cGVkZWYgbWFwPCBpbnRzPDE+LCBpbnRzPDI+LCBpbnRzPDM+LCBpbnRzPDQ+LCBpbnRzPDU+CiAgICAgICAgaW50czw2PiwgaW50czw3PiwgaW50czw4PiwgaW50czw5PiwgaW50czwxMD4gPiBtXzEwOwogICAgCiAgICAvLyB0eXBlZGVmIG1hcDwgaW50czwxPiwgaW50czwyPiwgaW50czwzPiwgaW50czw0PiwgaW50czw1PgogICAgLy8gICAgIGludHM8Nj4sIGludHM8Nz4sIGludHM8OD4sIGludHM8OT4sIGludHM8MTA+LCBpbnRzPDExPiA+IG1fMTE7IC8vIGVycm9yIQoKClNlZSBhbHNvCi0tLS0tLS0tCgp8Q29uZmlndXJhdGlvbnwsIHxCT09TVF9NUExfQ0ZHX05PX1BSRVBST0NFU1NFRF9IRUFERVJTfCwgfEJPT1NUX01QTF9MSU1JVF9TRVRfU0laRXwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==