Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEKLy8gCi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwovLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAovLwovLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgovLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgovLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAovLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwovLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8gQGZpbGUgICAgICAgPHNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmg+Ci8vLyBAYnJpZWYgICAgICBBcmNoaXRlY3R1cmUgZGVzY3JpcHRpb24gZmlsZQovLy8KCmBpZm5kZWYgU0NSMV9BUkNIX0RFU0NSSVBUSU9OX1NWSApgZGVmaW5lIFNDUjFfQVJDSF9ERVNDUklQVElPTl9TVkgKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDT1JFIEZVTkRBTUVOVEFMIFBBUkFNRVRFUlMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFNDUjEgY29yZSBpZGVudGlmaWVycwpgZGVmaW5lIFNDUjFfTUlNUElEICAgICAgICAgICAgIDMyJ2gyMTA1MTQwMApgZGVmaW5lIFNDUjFfTVZFTkRPUklEICAgICAgICAgIDMyJ2gwMDAwMDAwMAoKLy8gV2lkdGggb2YgbWFpbiByZWdpc3RlcnMgYW5kIGJ1c2VzCmBkZWZpbmUgU0NSMV9YTEVOICAgICAgICAgICAgICAgMzIKYGRlZmluZSBTQ1IxX0lNRU1fQVdJRFRIICAgICAgICBgU0NSMV9YTEVOCmBkZWZpbmUgU0NSMV9JTUVNX0RXSURUSCAgICAgICAgYFNDUjFfWExFTgpgZGVmaW5lIFNDUjFfRE1FTV9BV0lEVEggICAgICAgIGBTQ1IxX1hMRU4KYGRlZmluZSBTQ1IxX0RNRU1fRFdJRFRIICAgICAgICBgU0NSMV9YTEVOCgovLyBUQVAgSURDT0RFCmBkZWZpbmUgU0NSMV9UQVBfSURDT0RFICAgICAgICAgJ2hERUIxMTAwMQoKCmBpZmRlZiBTQ1IxX0FSQ0hfQ1VTVE9NCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIElOQ0xVREUgU0NSMV9BUkNIX0NVU1RPTS5TVkgKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFRoZSBleHRlcm5hbCBmaWxlIHNjcjFfYXJjaF9jdXN0b20uc3ZoIGlzIHVzZWQgZm9yIHRoZSBvcGVuIFNDUjEtU0RLIHByb2plY3QsCi8vIGFuZCBjYW4gYWxzbyBiZSB1c2VkIGZvciBhbnkgY3VzdG9tIHByb2plY3RzLgoKLy8gVGhlIGZpbGUgc2V0czoKLy8gLSB0YXJnZXQgcGxhdGZvcm0gKEZQR0EvQVNJQyksIHdoaWNoIGFmZmVjdHMgdGhlIGNob2ljZSBvZiBsb2dpY2FsIGNvbnN0cnVjdHM7Ci8vIC0gZGV2aWNlIGJ1aWxkIElEOwovLyAtIGFkZHJlc3MgY29uc3RhbnRzOwovLyAtIGNvdWxkIGVuYWJsZXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoKLy8gUG9zc2libGUgdGFyZ2V0czoKLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9JTlRFTCAgICAgICAgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBJbnRlbCBGUEdBcwovLyBgZGVmaW5lIFNDUjFfVFJHVF9GUEdBX0lOVEVMX01BWDEwICAgLy8gdGFyZ2V0IHBsYXRmb3JtIGlzIEludGVsIE1BWCAxMCBGUEdBcyAodXNlZCBpbiB0aGUgU0NSMS1TREsgcHJvamVjdCkKLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9JTlRFTF9BUlJJQVYgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBJbnRlbCBBcnJpYSBWIEZQR0FzICh1c2VkIGluIHRoZSBTQ1IxLVNESyBwcm9qZWN0KQovLyBgZGVmaW5lIFNDUjFfVFJHVF9GUEdBX1hJTElOWCAgICAgICAgLy8gdGFyZ2V0IHBsYXRmb3JtIGlzIFhpbGlueCBGUEdBcyAodXNlZCBpbiB0aGUgU0NSMS1TREsgcHJvamVjdCkKLy8gYGRlZmluZSBTQ1IxX1RSR1RfQVNJQyAgICAgICAgICAgICAgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBBU0lDCi8vIGBkZWZpbmUgU0NSMV9UUkdUX1NJTVVMQVRJT04gICAgICAgICAvLyB0YXJnZXQgaXMgc2ltdWxhdGlvbiAoZW5hYmxlIHNpbXVsYXRpb24gY29kZSkKCiBgaW5jbHVkZSAic2NyMV9hcmNoX2N1c3RvbS5zdmgiCgpgZW5kaWYgLy8gU0NSMV9BUkNIX0NVU1RPTQoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFJFQ09NTUVOREVEIENPUkUgQVJDSElURUNUVVJFIENPTkZJR1VSQVRJT05TCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBVbmNvbW1lbnQgb25lIG9mIHRoZXNlIGRlZmluZXMgdG8gc2V0IHRoZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uOgoKYGRlZmluZSBTQ1IxX0NGR19SVjMySU1DX01BWAovL2BkZWZpbmUgU0NSMV9DRkdfUlYzMklDX0JBU0UKLy9gZGVmaW5lIFNDUjFfQ0ZHX1JWMzJFQ19NSU4KCi8vIElmIGFsbCBkZWZpbmVzIGFyZSBjb21tZW50ZWQsIGN1c3RvbSBjb25maWd1cmF0aW9uIHdpbGwgYmUgdXNlZCAoc2VlIGJlbG93KQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gUkVBRC1PTkxZOiBzZXR0aW5ncyBmb3IgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbnMKYGlmZGVmICBTQ1IxX0NGR19SVjMySU1DX01BWAogIGBkZWZpbmUgU0NSMV9SVklfRVhUCiAgYGRlZmluZSBTQ1IxX1JWTV9FWFQKICBgZGVmaW5lIFNDUjFfUlZDX0VYVAogIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPSAyNjsKICBgZGVmaW5lIFNDUjFfTVRWRUNfTU9ERV9FTiAgICAgICAgICAvLyBlbmFibGUgd3JpdGFibGUgTVRWRUMubW9kZSBmaWVsZCB0byBhbGxvdyB2ZWN0b3JlZCBpcnEgbW9kZSwgb3RoZXJ3aXNlIG9ubHkgZGlyZWN0IG1vZGUgaXMgcG9zc2libGUKLy8gYGRlZmluZSBTQ1IxX0ZBU1RfTVVMICAgICAgICAgICAgICAgLy8gZW5hYmxlIGZhc3Qgb25lLWN5Y2xlIG11bHRpcGxpY2F0aW9uLCBvdGhlcndpc2UgbXVsdGlwbGljYXRpb24gdGFrZXMgMzIgY3ljbGVzCi8vYGRlZmluZSBTQ1IxX01QUkZfUlNUX0VOIC0geW9zeXMgZml4LCB0d28gZGltZW5zaW9uYWwgYXJyYXkgaW5pdCBub3QgYWxsb3dlZAogIGBkZWZpbmUgU0NSMV9NQ09VTlRFTl9FTiAgICAgICAgICAgIC8vIGVuYWJsZSBjdXN0b20gTUNPVU5URU4gQ1NSIGZvciBjb3VudGVyIGNvbnRyb2wKLy9gZGVmaW5lIFNDUjFfREJHX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgRGVidWcgU3Vic3lzdGVtIChUQVBDLCBETSwgU0NVLCBIRFUpCi8vYGRlZmluZSBTQ1IxX1REVV9FTiAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFRyaWdnZXIgRGVidWcgVW5pdCAoaGFyZHdhcmUgYnJlYWtwb2ludHMpCi8vICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfVERVX1RSSUdfTlVNID0gNDsKLy8gYGRlZmluZSBTQ1IxX1REVV9JQ09VTlRfRU4gICAgICAgICAgLy8gZW5hYmxlIGhhcmR3YXJlIHRyaWdnZXJzIG9uIGluc3RydWN0aW9uIGNvdW50ZXIKICBgZGVmaW5lIFNDUjFfSVBJQ19FTiAgICAgICAgICAgICAgICAvLyBlbmFibGUgSW50ZWdyYXRlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIKICBgZGVmaW5lIFNDUjFfSVBJQ19TWU5DX0VOICAgICAgICAgICAvLyBlbmFibGUgSVBJQyBzeW5jaHJvbml6ZXIKLy8gIGBkZWZpbmUgU0NSMV9UQ01fRU4KICBgZGVmaW5lIFNDUjFfTkVXX1BDX1JFRyAgICAgICAgICAgICAvLyBlbmFibGUgcmVnaXN0ZXIgaW4gSUZVIGZvciBOZXdfUEMgdmFsdWUKICBgZGVmaW5lIFNDUkMxX01QUkZfU1RBR0UgICAgICAgICAgICAvLyBlbmFibGVkIHJlZ2lzdGVyIGF0IFJlYWQgcGF0aCBvZiBNUFJGCmBlbHNpZiAgU0NSMV9DRkdfUlYzMklDX0JBU0UKICBgZGVmaW5lIFNDUjFfUlZJX0VYVAogIGBkZWZpbmUgU0NSMV9SVkNfRVhUCiAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX01UVkVDX0JBU0VfV1JfQklUUyA9IDE2OwogIGBkZWZpbmUgU0NSMV9NVFZFQ19NT0RFX0VOCiAgYGRlZmluZSBTQ1IxX05PX0RFQ19TVEFHRQogIGBkZWZpbmUgU0NSMV9NUFJGX1JTVF9FTgogIGBkZWZpbmUgU0NSMV9NQ09VTlRFTl9FTgogIGBkZWZpbmUgU0NSMV9EQkdfRU4KICBgZGVmaW5lIFNDUjFfVERVX0VOCiAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX1REVV9UUklHX05VTSA9IDI7CiAgYGRlZmluZSBTQ1IxX1REVV9JQ09VTlRfRU4KICBgZGVmaW5lIFNDUjFfSVBJQ19FTgogIGBkZWZpbmUgU0NSMV9JUElDX1NZTkNfRU4KICBgZGVmaW5lIFNDUjFfVENNX0VOCmBlbHNpZiAgU0NSMV9DRkdfUlYzMkVDX01JTgogIGBkZWZpbmUgU0NSMV9SVkVfRVhUCiAgYGRlZmluZSBTQ1IxX1JWQ19FWFQKICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTID0gMDsKICBgZGVmaW5lIFNDUjFfTk9fREVDX1NUQUdFCiAgYGRlZmluZSBTQ1IxX05PX0VYRV9TVEFHRQogIGBkZWZpbmUgU0NSMV9UQ01fRU4KCmBlbHNlIC8vIGJlZ2luIGN1c3RvbSBjb25maWd1cmF0aW9uIHNlY3Rpb24KCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDVVNUT00gQ09SRSBBUkNISVRFQ1RVUkUgQ09ORklHVVJBVElPTgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gVG8gZmluZS10dW5lIGN1c3RvbSBjb25maWd1cmF0aW9uLCB5b3UgY2FuIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRoaXMgc2VjdGlvbi4KLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGRlZmluZXMgb2YgdGhlIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBjb21tZW50ZWQsCi8vIG90aGVyd2lzZSB0aGlzIHNlY3Rpb24gd2lsbCBiZSBpbmFjdGl2ZS4KCi8vIFJJU0MtViBJU0Egb3B0aW9ucwovL2BkZWZpbmUgU0NSMV9SVkVfRVhUICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBSVjMyRSBiYXNlIGludGVnZXIgaW5zdHJ1Y3Rpb24gc2V0LCBvdGhlcndpc2UgUlYzMkkgd2lsbCBiZSB1c2VkCmBkZWZpbmUgU0NSMV9SVk1fRVhUICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBzdGFuZGFyZCBleHRlbnNpb24gIk0iIGZvciBpbnRlZ2VyIGhhcmR3YXJlIG11bHRpcGxpZXIgYW5kIGRpdmlkZXIKYGRlZmluZSBTQ1IxX1JWQ19FWFQgICAgICAgICAgICAgICAgLy8gZW5hYmxlIHN0YW5kYXJkIGV4dGVuc2lvbiAiQyIgZm9yIGNvbXByZXNzZWQgaW5zdHJ1Y3Rpb25zCnBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPSAyNjsgICAgLy8gbnVtYmVyIG9mIHdyaXRhYmxlIGhpZ2gtb3JkZXIgYml0cyBpbiBNVFZFQy5iYXNlIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlZ2FsIHZhbHVlcyBhcmUgMCB0byAyNgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFkLW9ubHkgYml0cyBhcmUgaGFyZHdpcmVkIHRvIHJlc2V0IHZhbHVlCmBkZWZpbmUgU0NSMV9NVFZFQ19NT0RFX0VOICAgICAgICAgIC8vIGVuYWJsZSB3cml0YWJsZSBNVFZFQy5tb2RlIGZpZWxkIHRvIGFsbG93IHZlY3RvcmVkIGlycSBtb2RlLCBvdGhlcndpc2Ugb25seSBkaXJlY3QgbW9kZSBpcyBwb3NzaWJsZQoKYGlmbmRlZiBTQ1IxX1JWRV9FWFQKICBgZGVmaW5lIFNDUjFfUlZJX0VYVCAvLyBSVjMyRSBiYXNlIGludGVnZXIgaW5zdHJ1Y3Rpb24gc2V0IGlmIFNDUjFfUlZFX0VYVCBpcyBub3QgZW5hYmxlZApgZW5kaWYgLy8gflNDUjFfUlZFX0VYVAoKLy8gQ29yZSBwaXBlbGluZSBvcHRpb25zIChwb3dlci1wZXJmb3JtYW5jZS1hcmVhIG9wdGltaXphdGlvbikKYGRlZmluZSBTQ1IxX05PX0RFQ19TVEFHRSAgICAgICAgICAgLy8gZGlzYWJsZSByZWdpc3RlciBiZXR3ZWVuIElGVSBhbmQgSURVCmBkZWZpbmUgU0NSMV9OT19FWEVfU1RBR0UgICAgICAgICAgIC8vIGRpc2FibGUgcmVnaXN0ZXIgYmV0d2VlbiBJRFUgYW5kIEVYVQpgZGVmaW5lIFNDUjFfTkVXX1BDX1JFRyAgICAgICAgICAgICAvLyBlbmFibGUgcmVnaXN0ZXIgaW4gSUZVIGZvciBOZXdfUEMgdmFsdWUKYGRlZmluZSBTQ1IxX0ZBU1RfTVVMICAgICAgICAgICAgICAgLy8gZW5hYmxlIGZhc3Qgb25lLWN5Y2xlIG11bHRpcGxpY2F0aW9uLCBvdGhlcndpc2UgbXVsdGlwbGljYXRpb24gdGFrZXMgMzIgY3ljbGVzCmBkZWZpbmUgU0NSMV9DTEtDVFJMX0VOICAgICAgICAgICAgIC8vIGVuYWJsZSBnbG9iYWwgY2xvY2sgZ2F0aW5nCmBkZWZpbmUgU0NSMV9NUFJGX1JTVF9FTiAgICAgICAgICAgIC8vIGVuYWJsZSByZXNldCBmb3IgTVBSRgpgZGVmaW5lIFNDUjFfTUNPVU5URU5fRU4gICAgICAgICAgICAvLyBlbmFibGUgY3VzdG9tIE1DT1VOVEVOIENTUiBmb3IgY291bnRlciBjb250cm9sCgovLyBVbmNvcmUgb3B0aW9ucwpgZGVmaW5lIFNDUjFfREJHX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgRGVidWcgU3Vic3lzdGVtIChUQVBDLCBETSwgU0NVLCBIRFUpCmBkZWZpbmUgU0NSMV9URFVfRU4gICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBUcmlnZ2VyIERlYnVnIFVuaXQgKGhhcmR3YXJlIGJyZWFrcG9pbnRzKQpwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfVERVX1RSSUdfTlVNID0gMjsgICAvLyBudW1iZXIgb2YgaGFyZHdhcmUgdHJpZ2dlcnMKYGRlZmluZSBTQ1IxX1REVV9JQ09VTlRfRU4gICAgICAgICAgLy8gZW5hYmxlIGhhcmR3YXJlIHRyaWdnZXJzIG9uIGluc3RydWN0aW9uIGNvdW50ZXIKYGRlZmluZSBTQ1IxX0lQSUNfRU4gICAgICAgICAgICAgICAgLy8gZW5hYmxlIEludGVncmF0ZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyCmBkZWZpbmUgU0NSMV9JUElDX1NZTkNfRU4gICAgICAgICAgIC8vIGVuYWJsZSBJUElDIHN5bmNocm9uaXplcgpgZGVmaW5lIFNDUjFfVENNX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgVGlnaHRseS1Db3VwbGVkIE1lbW9yeQoKYGVuZGlmIC8vIGVuZCBjdXN0b20gY29uZmlndXJhdGlvbiBzZWN0aW9uCgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ09SRSBJTlRFR1JBVElPTiBPUFRJT05TCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBCeXBhc3NlcyBvbiBBWEkvQUhCIGJyaWRnZSBJL08KYGRlZmluZSBTQ1IxX0lNRU1fQUhCX0lOX0JQICAgICAgICAgLy8gYnlwYXNzIGluc3RydWN0aW9uIG1lbW9yeSBBSEIgYnJpZGdlIGlucHV0IHJlZ2lzdGVyCmBkZWZpbmUgU0NSMV9JTUVNX0FIQl9PVVRfQlAgICAgICAgIC8vIGJ5cGFzcyBpbnN0cnVjdGlvbiBtZW1vcnkgQUhCIGJyaWRnZSBvdXRwdXQgcmVnaXN0ZXIKYGRlZmluZSBTQ1IxX0RNRU1fQUhCX0lOX0JQICAgICAgICAgLy8gYnlwYXNzIGRhdGEgbWVtb3J5IEFIQiBicmlkZ2UgaW5wdXQgcmVnaXN0ZXIKYGRlZmluZSBTQ1IxX0RNRU1fQUhCX09VVF9CUCAgICAgICAgLy8gYnlwYXNzIGRhdGEgbWVtb3J5IEFIQiBicmlkZ2Ugb3V0cHV0IHJlZ2lzdGVyCmBkZWZpbmUgU0NSMV9JTUVNX0FYSV9SRVFfQlAgICAgICAgIC8vIGJ5cGFzcyBpbnN0cnVjdGlvbiBtZW1vcnkgQVhJIGJyaWRnZSByZXF1ZXN0IHJlZ2lzdGVyCmBkZWZpbmUgU0NSMV9JTUVNX0FYSV9SRVNQX0JQICAgICAgIC8vIGJ5cGFzcyBpbnN0cnVjdGlvbiBtZW1vcnkgQVhJIGJyaWRnZSByZXNwb25zZSByZWdpc3RlcgpgZGVmaW5lIFNDUjFfRE1FTV9BWElfUkVRX0JQICAgICAgICAvLyBieXBhc3MgZGF0YSBtZW1vcnkgQVhJIGJyaWRnZSByZXF1ZXN0IHJlZ2lzdGVyCmBkZWZpbmUgU0NSMV9ETUVNX0FYSV9SRVNQX0JQICAgICAgIC8vIGJ5cGFzcyBkYXRhIG1lbW9yeSBBWEkgYnJpZGdlIHJlc3BvbnNlIHJlZ2lzdGVyCgpgaWZuZGVmIFNDUjFfQVJDSF9DVVNUT00KLy8gRGVmYXVsdCBhZGRyZXNzIGNvbnN0YW50cyAoaWYgc2NyMV9hcmNoX2N1c3RvbS5zdmggaXMgbm90IHVzZWQpCnBhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICBTQ1IxX0FSQ0hfUlNUX1ZFQ1RPUiAgICAgICAgPSAnaDIwMDsgICAgICAgICAgICAvLyBSZXNldCB2ZWN0b3IgdmFsdWUgKHN0YXJ0IGFkZHJlc3MgYWZ0ZXIgcmVzZXQpCnBhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICBTQ1IxX0FSQ0hfTVRWRUNfQkFTRSAgICAgICAgPSAnaDFDMDsgICAgICAgICAgICAvLyBNVFZFQy5iYXNlIGZpZWxkIHJlc2V0IHZhbHVlLCBvciBjb25zdGFudCB2YWx1ZSBmb3IgTVRWRUMuYmFzZSBiaXRzIHRoYXQgYXJlIGhhcmR3aXJlZAoKcGFyYW1ldGVyIGJpdCBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIFNDUjFfVENNX0FERFJfTUFTSyAgICAgICAgICA9ICdoRkZGRjAwMDA7ICAgICAgIC8vIFRDTSBtYXNrIGFuZCBzaXplOyBzaXplIGluIGJ5dGVzIGlzIHR3bydzIGNvbXBsZW1lbnQgb2YgdGhlIG1hc2sgdmFsdWUKcGFyYW1ldGVyIGJpdCBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIFNDUjFfVENNX0FERFJfUEFUVEVSTiAgICAgICA9ICdoMDA0ODAwMDA7ICAgICAgIC8vIFRDTSBhZGRyZXNzIG1hdGNoIHBhdHRlcm4KCnBhcmFtZXRlciBiaXQgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBTQ1IxX1RJTUVSX0FERFJfTUFTSyAgICAgICAgPSAnaEZGRkZGRkUwOyAgICAgICAvLyBUaW1lciBtYXNrCnBhcmFtZXRlciBiaXQgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBTQ1IxX1RJTUVSX0FERFJfUEFUVEVSTiAgICAgPSAnaDAwNDkwMDAwOyAgICAgICAvLyBUaW1lciBhZGRyZXNzIG1hdGNoIHBhdHRlcm4KCi8vIERldmljZSBidWlsZCBJRAogYGRlZmluZSBTQ1IxX0FSQ0hfQlVJTERfSUQgICAgICAgICAgICAgYFNDUjFfTUlNUElECgpgZW5kaWYgLy8gU0NSMV9BUkNIX0NVU1RPTQoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFRBUkdFVC1TUEVDSUZJQyBPUFRJT05TCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBSQU0tYmFzZWQgTVBSRiBjYW4gYmUgdXNlZCBmb3IgSW50ZWwgRlBHQXMgb25seQpgaWZkZWYgU0NSMV9UUkdUX0ZQR0FfSU5URUwKICBgZGVmaW5lIFNDUjFfTVBSRl9SQU0gICAgICAgICAgIC8vIGltcGxlbWVudHMgTVBSRiB3aXRoIGRlZGljYXRlZCBSQU0gYmxvY2tzCmBlbmRpZgoKLy8gRVhVX1NUQUdFX0JZUEFTUyBhbmQgTVBSRl9SU1RfRU4gbXVzdCBiZSBkaXNhYmxlZCBmb3IgUkFNLWJhc2VkIE1QUkYKYGlmZGVmIFNDUjFfTVBSRl9SQU0KICBgdW5kZWYgIFNDUjFfTk9fRVhFX1NUQUdFCiAgYHVuZGVmICBTQ1IxX01QUkZfUlNUX0VOCmBlbmRpZgoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFNJTVVMQVRJT04gT1BUSU9OUwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9gZGVmaW5lIFNDUjFfVFJHVF9TSU1VTEFUSU9OICAgICAgICAgICAgLy8gZW5hYmxlIHNpbXVsYXRpb24gY29kZSAoYXV0b21hdGljYWxseSBkZWZpbmVkIGJ5IHJvb3QgbWFrZWZpbGUpCi8vYGRlZmluZSBTQ1IxX1RSQUNFX0xPR19FTiAgICAgICAgICAgICAgIC8vIGVuYWJsZSB0cmFjZWxvZwovL2BkZWZpbmUgU0NSMV9YUFJPUF9FTiAgICAgICAgICAgICAgICAgICAvLyBlbmFibGUgWC1wcm9wYWdhdGlvbgoKLy8gQWRkcmVzc2VzIHVzZWQgaW4gdGVzdGJlbmNoCmxvY2FscGFyYW0gW2BTQ1IxX1hMRU4tMTowXSAgICAgIFNDUjFfU0lNX0VYSVRfQUREUiAgICAgID0gMzInaDAwMDBfMDBGODsKbG9jYWxwYXJhbSBbYFNDUjFfWExFTi0xOjBdICAgICAgU0NSMV9TSU1fUFJJTlRfQUREUiAgICAgPSAzMidoRjAwMF8wMDAwOwpsb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9FWFRfSVJRX0FERFIgICA9IDMyJ2hGMDAwXzAxMDA7CmxvY2FscGFyYW0gW2BTQ1IxX1hMRU4tMTowXSAgICAgIFNDUjFfU0lNX1NPRlRfSVJRX0FERFIgID0gMzInaEYwMDBfMDIwMDsKCmBlbmRpZiAvLyBTQ1IxX0FSQ0hfREVTQ1JJUFRJT05fU1ZICg==