Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEKLy8gCi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwovLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAovLwovLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgovLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgovLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAovLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwovLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8gQGZpbGUgICAgICAgPHNjcjFfdGFwYy5zdmg+Ci8vLyBAYnJpZWYgICAgICBUQVBDIGhlYWRlciBmaWxlCi8vLwoKYGlmbmRlZiBTQ1IxX0lOQ0xVREVfVEFQQ19ERUZTCmBkZWZpbmUgU0NSMV9JTkNMVURFX1RBUENfREVGUwoKYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCgpgaWZkZWYgU0NSMV9EQkdfRU4KCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIFBhcmFtZXRlcnMKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9UQVBfU1RBVEVfV0lEVEggICAgICAgICAgICA9IDQ7CmxvY2FscGFyYW0gaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVEFQX0lOU1RSVUNUSU9OX1dJRFRIICAgICAgPSA1Owpsb2NhbHBhcmFtIGludCB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1RBUF9EUl9JRENPREVfV0lEVEggICAgICAgID0gMzI7CmxvY2FscGFyYW0gaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVEFQX0RSX0JMRF9JRF9XSURUSCAgICAgICAgPSAzMjsKbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9UQVBfRFJfQllQQVNTX1dJRFRIICAgICAgICA9IDE7Ci8vbG9jYWxwYXJhbSBiaXQgW1NDUjFfVEFQX0RSX0lEQ09ERV9XSURUSC0xOjBdICAgU0NSMV9UQVBfSURDT0RFX1JJU0NWX1NDICAgICAgICA9IGBTQ1IxX1RBUF9JRENPREU7CmxvY2FscGFyYW0gYml0IFtTQ1IxX1RBUF9EUl9CTERfSURfV0lEVEgtMTowXSAgIFNDUjFfVEFQX0JMRF9JRF9WQUxVRSAgICAgICAgICAgPSBgU0NSMV9NSU1QSUQ7CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBUeXBlcwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp0eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfVEFQX1NUQVRFX1dJRFRILTE6MF0gewogICAgU0NSMV9UQVBfU1RBVEVfUkVTRVQsCiAgICBTQ1IxX1RBUF9TVEFURV9JRExFLAogICAgU0NSMV9UQVBfU1RBVEVfRFJfU0VMX1NDQU4sCiAgICBTQ1IxX1RBUF9TVEFURV9EUl9DQVBUVVJFLAogICAgU0NSMV9UQVBfU1RBVEVfRFJfU0hJRlQsCiAgICBTQ1IxX1RBUF9TVEFURV9EUl9FWElUMSwKICAgIFNDUjFfVEFQX1NUQVRFX0RSX1BBVVNFLAogICAgU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDIsCiAgICBTQ1IxX1RBUF9TVEFURV9EUl9VUERBVEUsCiAgICBTQ1IxX1RBUF9TVEFURV9JUl9TRUxfU0NBTiwKICAgIFNDUjFfVEFQX1NUQVRFX0lSX0NBUFRVUkUsCiAgICBTQ1IxX1RBUF9TVEFURV9JUl9TSElGVCwKICAgIFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQxLAogICAgU0NSMV9UQVBfU1RBVEVfSVJfUEFVU0UsCiAgICBTQ1IxX1RBUF9TVEFURV9JUl9FWElUMiwKICAgIFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURQpgaWZkZWYgU0NSMV9YUFJPUF9FTgogICAgLAogICAgU0NSMV9UQVBfU1RBVEVfWFhYICAgICAgID0gJ1gKYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KfSB0eXBlX3NjcjFfdGFwX3N0YXRlX2U7Cgp0eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfVEFQX0lOU1RSVUNUSU9OX1dJRFRIIC0gMTowXSB7CiAgICBTQ1IxX1RBUF9JTlNUUl9JRENPREUgICAgICAgICAgICA9IDUnaDAxLAogICAgU0NSMV9UQVBfSU5TVFJfQkxEX0lEICAgICAgICAgICAgPSA1J2gwNCwKICAgIFNDUjFfVEFQX0lOU1RSX1NDVV9BQ0NFU1MgICAgICAgID0gNSdoMDksCgogICAgU0NSMV9UQVBfSU5TVFJfRFRNQ1MgICAgICAgICAgICAgPSA1J2gxMCwKICAgIFNDUjFfVEFQX0lOU1RSX0RNSV9BQ0NFU1MgICAgICAgID0gNSdoMTEsCgogICAgU0NSMV9UQVBfSU5TVFJfQllQQVNTICAgICAgICAgICAgPSA1J2gxRgpgaWZkZWYgU0NSMV9YUFJPUF9FTgogICAgLAogICAgU0NSMV9UQVBfSU5TVFJfWFhYICAgICAgICAgICAgICAgPSAnWApgZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgp9IHR5cGVfc2NyMV90YXBfaW5zdHJfZTsKCmBlbmRpZiAvLyBTQ1IxX0RCR19FTgpgZW5kaWYgLy8gU0NSMV9JTkNMVURFX1RBUENfREVGUwo=