IyBCb29zdC5NdWx0aUluZGV4IHRlc3RzIEphbWZpbGUKIwojIENvcHlyaWdodCAyMDAzLTIwMDcgSm9hcXXtbiBNIEzzcGV6IE118W96LgojIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KIyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CiMgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQojCiMgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXVsdGlfaW5kZXggZm9yIGxpYnJhcnkgaG9tZSBwYWdlLgoKaW1wb3J0IG9zIDsKaW1wb3J0IHR5cGUgOwoKIyBXaW5kb3dzIFZpc3RhIFVBQyBoYXMgYW4gaGV1cmlzdGljIGJ5IHdoaWNoIGV4ZWN1dGFibGUgZmlsZXMgd2hvc2UgbmFtZQojIGNvbnRhaW5zIGFueSBvZiB0aGUgd29yZHMgImluc3RhbGwiLCAic2V0dXAiLCAidXBkYXRlIiwgZXRjLiBhcmUgYXNzdW1lZAojIHRvIGJlIGluc3RhbGxhdGlvbiBwYWNrYWdlcyBuZWVkaW5nIGFkbWluaXN0cmF0aXZlIHJpZ2h0cywgd2hpY2ggY2F1c2VzCiMgdGhlIHN5c3RlbSB0byBicmluZyB1cCBhIHdpbmRvdyBhc2tpbmcgZm9yIGV4ZWN1dGlvbiBjb25maXJtYXRpb24gYnkgdGhlCiMgdXNlciwgdGh1cyBpbnRlcmZlcnJpbmcgaW4gdGhlIHVuYXR0ZW5kZWQgYmphbSBwcm9jZXNzLgojIFByb2JsZW0gYnlwYXNzZWQgYnkgY2hhbmdpbmcgdGhlIEVYRSBuYW1lcyBjb250YWluaW5nIGEgdGFib28gd29yZC4KIyBUaGFua3MgdG8gUmVuZSBSaXZlcmEgZm9yIGd1aWRhbmNlIG9uIHRoZSB1c2Ugb2YgdGhlIDx0YWc+IGZlYXR1cmUuCgpydWxlIGNoYW5nZS10ZXN0X3VwZGF0ZS1leGUtbmFtZSAoIG5hbWUgOiB0eXBlID8gOiBwcm9wZXJ0eS1zZXQgKSAKeyAKICAgIGlmIFsgb3Mub24td2luZG93cyBdICYmIFsgdHlwZS5pcy1zdWJ0eXBlICQodHlwZSkgRVhFIF0KICAgIHsKICAgICAgICByZXR1cm4gdGVzdF91cGRhdC5leGUgOwogICAgfQp9IAoKdGVzdC1zdWl0ZSAibXVsdGlfaW5kZXgiIDoKICAgIFsgcnVuIHRlc3RfYmFzaWMuY3BwICAgICAgICAgICAgdGVzdF9iYXNpY19tYWluLmNwcCAgICAgICAgICAgIF0KICAgIFsgcnVuIHRlc3RfY2FwYWNpdHkuY3BwICAgICAgICAgdGVzdF9jYXBhY2l0eV9tYWluLmNwcCAgICAgICAgIF0KICAgIFsgcnVuIHRlc3RfY29tcGFyaXNvbi5jcHAgICAgICAgdGVzdF9jb21wYXJpc29uX21haW4uY3BwICAgICAgIF0KICAgIFsgcnVuIHRlc3RfY29tcG9zaXRlX2tleS5jcHAgICAgdGVzdF9jb21wb3NpdGVfa2V5X21haW4uY3BwICAgIF0KICAgIFsgcnVuIHRlc3RfY29udl9pdGVyYXRvcnMuY3BwICAgdGVzdF9jb252X2l0ZXJhdG9yc19tYWluLmNwcCAgIF0KICAgIFsgcnVuIHRlc3RfY29weV9hc3NpZ25tZW50LmNwcCAgdGVzdF9jb3B5X2Fzc2lnbm1lbnRfbWFpbi5jcHAgIF0KICAgIFsgcnVuIHRlc3RfaGFzaF9vcHMuY3BwICAgICAgICAgdGVzdF9oYXNoX29wc19tYWluLmNwcCAgICAgICAgIF0KICAgIFsgcnVuIHRlc3RfaXRlcmF0b3JzLmNwcCAgICAgICAgdGVzdF9pdGVyYXRvcnNfbWFpbi5jcHAgICAgICAgIF0KICAgIFsgcnVuIHRlc3Rfa2V5X2V4dHJhY3RvcnMuY3BwICAgdGVzdF9rZXlfZXh0cmFjdG9yc19tYWluLmNwcCAgIF0KICAgIFsgcnVuIHRlc3RfbGlzdF9vcHMuY3BwICAgICAgICAgdGVzdF9saXN0X29wc19tYWluLmNwcCAgICAgICAgIF0KICAgIFsgcnVuIHRlc3RfbW9kaWZpZXJzLmNwcCAgICAgICAgdGVzdF9tb2RpZmllcnNfbWFpbi5jcHAgICAgICAgIF0KICAgIFsgcnVuIHRlc3RfbXBsX29wcy5jcHAgICAgICAgICAgdGVzdF9tcGxfb3BzX21haW4uY3BwICAgICAgICAgIF0KICAgIFsgcnVuIHRlc3Rfb2JzZXJ2ZXJzLmNwcCAgICAgICAgdGVzdF9vYnNlcnZlcnNfbWFpbi5jcHAgICAgICAgIF0gICAgCiAgICBbIHJ1biB0ZXN0X3Byb2plY3Rpb24uY3BwICAgICAgIHRlc3RfcHJvamVjdGlvbl9tYWluLmNwcCAgICAgICBdCiAgICBbIHJ1biB0ZXN0X3JhbmdlLmNwcCAgICAgICAgICAgIHRlc3RfcmFuZ2VfbWFpbi5jcHAgICAgICAgICAgICBdCiAgICBbIHJ1biB0ZXN0X3JlYXJyYW5nZS5jcHAgICAgICAgIHRlc3RfcmVhcnJhbmdlX21haW4uY3BwICAgICAgICBdCiAgICBbIHJ1biB0ZXN0X3NhZmVfbW9kZS5jcHAgICAgICAgIHRlc3Rfc2FmZV9tb2RlX21haW4uY3BwICAgICAgICBdCiAgICBbIHJ1biB0ZXN0X3NlcmlhbGl6YXRpb24uY3BwICAgIHRlc3Rfc2VyaWFsaXphdGlvbjEuY3BwCiAgICAgICAgICB0ZXN0X3NlcmlhbGl6YXRpb24yLmNwcCAgIHRlc3Rfc2VyaWFsaXphdGlvbjMuY3BwCiAgICAgICAgICB0ZXN0X3NlcmlhbGl6YXRpb25fbWFpbi5jcHAKICAgICAgICAgICAgICAgIC9ib29zdC9zZXJpYWxpemF0aW9uLy9ib29zdF9zZXJpYWxpemF0aW9uICAgICAgICAgIF0KICAgIFsgcnVuIHRlc3Rfc2V0X29wcy5jcHAgICAgICAgICAgdGVzdF9zZXRfb3BzX21haW4uY3BwICAgICAgICAgIF0KICAgIFsgcnVuIHRlc3Rfc3BlY2lhbF9zZXRfb3BzLmNwcCAgdGVzdF9zcGVjaWFsX3NldF9vcHNfbWFpbi5jcHAgIF0KICAgIFsgcnVuIHRlc3RfdXBkYXRlLmNwcCAgICAgICAgICAgdGVzdF91cGRhdGVfbWFpbi5jcHAgCiAgICAgICAgOiA6IDogCiAgICAgICAgLTx0YWc+QCQoQk9PU1RfSkFNUk9PVF9NT0RVTEUpJSQoQk9PU1RfSkFNUk9PVF9NT0RVTEUpLnRhZwogICAgICAgIDx0YWc+QGNoYW5nZS10ZXN0X3VwZGF0ZS1leGUtbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgXSAKICAgIDsK