REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 37.38 KB
Close
/opt/alt/python310/lib/python3.10/site-packages/pip/_vendor/__pycache__/distro.cpython-310.pyc
Text
Base64
bw0NCgAAAAAVHGFpHr0AAOMAAAAAAAAAAAAAAAAAAAAACAAAAEAAAABzyAEAAGQAWgBkAWQCbAFaAWQBZAJsAloCZAFkAmwDWgNkAWQCbARaBGQBZAJsBVoFZAFkAmwGWgZkAWQCbAdaB2QBZAJsCFoIZAFkAmwJWglkA1oKCQBlBGoaoBtkCmQLoQJaHGUEahqgG2QMZA2hAlodZA5aHmQPZBBpAVofZBBkEGQRZBFkEWQSnAVaIGQTZBFpAVohZQWgImQUoQFaI2UFoCJkFaEBWiRkFmQXZBhlHmQZZBpkG2YHWiVkS2QdZB6EAVomZB9kIIQAWidkTGQhZCKEAVooZE1kI2QkhAFaKWRMZCVkJoQBWipkTGQnZCiEAVorZExkKWQqhAFaLGRMZCtkLIQBWi1kLWQuhABaLmQvZDCEAFovZE1kMWQyhAFaMGQzZDSEAFoxZDVkNoQAWjJkN2Q4hABaM2Q5ZDqEAFo0ZDtkPIQAWjVkPWQ+hABaNmQ/ZECEAFo3ZEFkQoQAWjh6CGQBZENsOW06WjoBAFcAbhEEAGU7eckBAAEAAQBHAGREZEWEAGRFZTyDA1o6WQBuAXcARwBkRmRHhABkR2U8gwNaPWU9gwBaPmRIZEmEAFo/ZUBkSmsCcuJlP4MAAQBkAlMAZAJTAClOYfsCAAAKVGhlIGBgZGlzdHJvYGAgcGFja2FnZSAoYGBkaXN0cm9gYCBzdGFuZHMgZm9yIExpbnV4IERpc3RyaWJ1dGlvbikgcHJvdmlkZXMKaW5mb3JtYXRpb24gYWJvdXQgdGhlIExpbnV4IGRpc3RyaWJ1dGlvbiBpdCBydW5zIG9uLCBzdWNoIGFzIGEgcmVsaWFibGUKbWFjaGluZS1yZWFkYWJsZSBkaXN0cm8gSUQsIG9yIHZlcnNpb24gaW5mb3JtYXRpb24uCgpJdCBpcyB0aGUgcmVjb21tZW5kZWQgcmVwbGFjZW1lbnQgZm9yIFB5dGhvbidzIG9yaWdpbmFsCjpweTpmdW5jOmBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb25gIGZ1bmN0aW9uLCBidXQgaXQgcHJvdmlkZXMgbXVjaCBtb3JlCmZ1bmN0aW9uYWxpdHkuIEFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIGJlY2FtZSBuZWNlc3NhcnkgYmVjYXVzZSBQeXRob24KMy41IGRlcHJlY2F0ZWQgdGhpcyBmdW5jdGlvbiwgYW5kIFB5dGhvbiAzLjggcmVtb3ZlZCBpdCBhbHRvZ2V0aGVyLiBJdHMKcHJlZGVjZXNzb3IgZnVuY3Rpb24gOnB5OmZ1bmM6YHBsYXRmb3JtLmRpc3RgIHdhcyBhbHJlYWR5IGRlcHJlY2F0ZWQgc2luY2UKUHl0aG9uIDIuNiBhbmQgcmVtb3ZlZCBpbiBQeXRob24gMy44LiBTdGlsbCwgdGhlcmUgYXJlIG1hbnkgY2FzZXMgaW4gd2hpY2gKYWNjZXNzIHRvIE9TIGRpc3RyaWJ1dGlvbiBpbmZvcm1hdGlvbiBpcyBuZWVkZWQuIFNlZSBgUHl0aG9uIGlzc3VlIDEzMjIKPGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTMyMj5gXyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4K6QAAAABOegUxLjYuMEYpC9oDQW552ghDYWxsYWJsZdoERGljdNoISXRlcmFibGXaCE9wdGlvbmFs2ghTZXF1ZW5jZdoGVGV4dElP2gVUdXBsZdoEVHlwZdoJVHlwZWREaWN02gVVbmlvbtoLVmVyc2lvbkRpY3SpA9oFbWFqb3LaBW1pbm9y2gxidWlsZF9udW1iZXLaCEluZm9EaWN0qQXaAmlk2gd2ZXJzaW9u2g12ZXJzaW9uX3BhcnRz2gRsaWtl2ghjb2RlbmFtZVoLVU5JWENPTkZESVJ6BC9ldGNaDVVOSVhVU1JMSUJESVJ6CC91c3IvbGliegpvcy1yZWxlYXNl2gJvbNoGb3JhY2xl2gRyaGVsKQXaFmVudGVycHJpc2VlbnRlcnByaXNlYXPaGmVudGVycHJpc2VlbnRlcnByaXNlc2VydmVy2htyZWRoYXRlbnRlcnByaXNld29ya3N0YXRpb27aFnJlZGhhdGVudGVycHJpc2VzZXJ2ZXLaG3JlZGhhdGVudGVycHJpc2Vjb21wdXRlbm9kZdoGcmVkaGF0ekEoPzpbXildKlwpKC4qKVwoKT8gKig/OlNUTCApPyhbXGQuK1wtYS16XSpcZCkgKig/OmVzYWVsZXIgKik/KC4rKXobKFx3KylbLV9dKHJlbGVhc2V8dmVyc2lvbikk2g5kZWJpYW5fdmVyc2lvbnoLbHNiLXJlbGVhc2V6C29lbS1yZWxlYXNleg5zeXN0ZW0tcmVsZWFzZXoNcGxlc2stcmVsZWFzZXoQaXJlZG1haWwtcmVsZWFzZVRjAQAAAAAAAAAAAAAAAQAAAAUAAABDAAAAcxoAAAB0AGoBZAF0AmQCZAONAwEAdAOgBHwAoQFTACkEYUcFAAAKICAgIC4uIGRlcHJlY2F0ZWQ6OiAxLjYuMAoKICAgICAgICA6ZnVuYzpgZGlzdHJvLmxpbnV4X2Rpc3RyaWJ1dGlvbigpYCBpcyBkZXByZWNhdGVkLiBJdCBzaG91bGQgb25seSBiZQogICAgICAgIHVzZWQgYXMgYSBjb21wYXRpYmlsaXR5IHNoaW0gd2l0aCBQeXRob24ncwogICAgICAgIDpweTpmdW5jOmBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb24oKWAuIFBsZWFzZSB1c2UgOmZ1bmM6YGRpc3Ryby5pZGAsCiAgICAgICAgOmZ1bmM6YGRpc3Ryby52ZXJzaW9uYCBhbmQgOmZ1bmM6YGRpc3Ryby5uYW1lYCBpbnN0ZWFkLgoKICAgIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24gYXMgYSB0dXBsZQogICAgYGAoaWRfbmFtZSwgdmVyc2lvbiwgY29kZW5hbWUpYGAgd2l0aCBpdGVtcyBhcyBmb2xsb3dzOgoKICAgICogYGBpZF9uYW1lYGA6ICBJZiAqZnVsbF9kaXN0cmlidXRpb25fbmFtZSogaXMgZmFsc2UsIHRoZSByZXN1bHQgb2YKICAgICAgOmZ1bmM6YGRpc3Ryby5pZGAuIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLm5hbWVgLgoKICAgICogYGB2ZXJzaW9uYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8udmVyc2lvbmAuCgogICAgKiBgYGNvZGVuYW1lYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8uY29kZW5hbWVgLgoKICAgIFRoZSBpbnRlcmZhY2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9yaWdpbmFsCiAgICA6cHk6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uYCBmdW5jdGlvbiwgc3VwcG9ydGluZyBhIHN1YnNldCBvZgogICAgaXRzIHBhcmFtZXRlcnMuCgogICAgVGhlIGRhdGEgaXQgcmV0dXJucyBtYXkgbm90IGV4YWN0bHkgYmUgdGhlIHNhbWUsIGJlY2F1c2UgaXQgdXNlcyBtb3JlIGRhdGEKICAgIHNvdXJjZXMgdGhhbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24sIGFuZCB0aGF0IG1heSBsZWFkIHRvIGRpZmZlcmVudCBkYXRhIGlmCiAgICB0aGUgT1MgZGlzdHJpYnV0aW9uIGlzIG5vdCBjb25zaXN0ZW50IGFjcm9zcyBtdWx0aXBsZSBkYXRhIHNvdXJjZXMgaXQKICAgIHByb3ZpZGVzICh0aGVyZSBhcmUgaW5kZWVkIHN1Y2ggZGlzdHJpYnV0aW9ucyAuLi4pLgoKICAgIEFub3RoZXIgcmVhc29uIGZvciBkaWZmZXJlbmNlcyBpcyB0aGUgZmFjdCB0aGF0IHRoZSA6ZnVuYzpgZGlzdHJvLmlkYAogICAgbWV0aG9kIG5vcm1hbGl6ZXMgdGhlIGRpc3RybyBJRCBzdHJpbmcgdG8gYSByZWxpYWJsZSBtYWNoaW5lLXJlYWRhYmxlIHZhbHVlCiAgICBmb3IgYSBudW1iZXIgb2YgcG9wdWxhciBPUyBkaXN0cmlidXRpb25zLgogICAgespkaXN0cm8ubGludXhfZGlzdHJpYnV0aW9uKCkgaXMgZGVwcmVjYXRlZC4gSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIGNvbXBhdGliaWxpdHkgc2hpbSB3aXRoIFB5dGhvbidzIHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbigpLiBQbGVhc2UgdXNlIGRpc3Ryby5pZCgpLCBkaXN0cm8udmVyc2lvbigpIGFuZCBkaXN0cm8ubmFtZSgpIGluc3RlYWQu6QIAAAApAdoKc3RhY2tsZXZlbCkF2gh3YXJuaW5nc9oEd2FybtoSRGVwcmVjYXRpb25XYXJuaW5n2gdfZGlzdHJv2hJsaW51eF9kaXN0cmlidXRpb24pAdoWZnVsbF9kaXN0cmlidXRpb25fbmFtZakAcisAAAD6hC9idWlsZGRpci9idWlsZC9CVUlMRFJPT1QvYWx0LXB5dGhvbjMxMC1waXAtMjEuMy4xLTUuZWw4Lng4Nl82NC9vcHQvYWx0L3B5dGhvbjMxMC9saWIvcHl0aG9uMy4xMC9zaXRlLXBhY2thZ2VzL3BpcC9fdmVuZG9yL2Rpc3Ryby5weXIpAAAAiAAAAHMMAAAABCECAQIDAgEG+woHcikAAABjAAAAAAAAAAAAAAAAAAAAAAIAAABDAAAA8wgAAAB0AKABoQBTACkBYUQLAAAKICAgIFJldHVybiB0aGUgZGlzdHJvIElEIG9mIHRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbiwgYXMgYQogICAgbWFjaGluZS1yZWFkYWJsZSBzdHJpbmcuCgogICAgRm9yIGEgbnVtYmVyIG9mIE9TIGRpc3RyaWJ1dGlvbnMsIHRoZSByZXR1cm5lZCBkaXN0cm8gSUQgdmFsdWUgaXMKICAgICpyZWxpYWJsZSosIGluIHRoZSBzZW5zZSB0aGF0IGl0IGlzIGRvY3VtZW50ZWQgYW5kIHRoYXQgaXQgZG9lcyBub3QgY2hhbmdlCiAgICBhY3Jvc3MgcmVsZWFzZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KCiAgICBUaGlzIHBhY2thZ2UgbWFpbnRhaW5zIHRoZSBmb2xsb3dpbmcgcmVsaWFibGUgZGlzdHJvIElEIHZhbHVlczoKCiAgICA9PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIERpc3RybyBJRCAgICAgICBEaXN0cmlidXRpb24KICAgID09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgInVidW50dSIgICAgICAgIFVidW50dQogICAgImRlYmlhbiIgICAgICAgIERlYmlhbgogICAgInJoZWwiICAgICAgICAgIFJlZEhhdCBFbnRlcnByaXNlIExpbnV4CiAgICAiY2VudG9zIiAgICAgICAgQ2VudE9TCiAgICAiZmVkb3JhIiAgICAgICAgRmVkb3JhCiAgICAic2xlcyIgICAgICAgICAgU1VTRSBMaW51eCBFbnRlcnByaXNlIFNlcnZlcgogICAgIm9wZW5zdXNlIiAgICAgIG9wZW5TVVNFCiAgICAiYW1hem9uIiAgICAgICAgQW1hem9uIExpbnV4CiAgICAiYXJjaCIgICAgICAgICAgQXJjaCBMaW51eAogICAgImNsb3VkbGludXgiICAgIENsb3VkTGludXggT1MKICAgICJleGhlcmJvIiAgICAgICBFeGhlcmJvIExpbnV4CiAgICAiZ2VudG9vIiAgICAgICAgR2VuVG9vIExpbnV4CiAgICAiaWJtX3Bvd2Vya3ZtIiAgSUJNIFBvd2VyS1ZNCiAgICAia3ZtaWJtIiAgICAgICAgS1ZNIGZvciBJQk0geiBTeXN0ZW1zCiAgICAibGludXhtaW50IiAgICAgTGludXggTWludAogICAgIm1hZ2VpYSIgICAgICAgIE1hZ2VpYQogICAgIm1hbmRyaXZhIiAgICAgIE1hbmRyaXZhIExpbnV4CiAgICAicGFyYWxsZWxzIiAgICAgUGFyYWxsZWxzCiAgICAicGlkb3JhIiAgICAgICAgUGlkb3JhCiAgICAicmFzcGJpYW4iICAgICAgUmFzcGJpYW4KICAgICJvcmFjbGUiICAgICAgICBPcmFjbGUgTGludXggKGFuZCBPcmFjbGUgRW50ZXJwcmlzZSBMaW51eCkKICAgICJzY2llbnRpZmljIiAgICBTY2llbnRpZmljIExpbnV4CiAgICAic2xhY2t3YXJlIiAgICAgU2xhY2t3YXJlCiAgICAieGVuc2VydmVyIiAgICAgWGVuU2VydmVyCiAgICAib3BlbmJzZCIgICAgICAgT3BlbkJTRAogICAgIm5ldGJzZCIgICAgICAgIE5ldEJTRAogICAgImZyZWVic2QiICAgICAgIEZyZWVCU0QKICAgICJtaWRuaWdodGJzZCIgICBNaWRuaWdodEJTRAogICAgPT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgSWYgeW91IGhhdmUgYSBuZWVkIHRvIGdldCBkaXN0cm9zIGZvciByZWxpYWJsZSBJRHMgYWRkZWQgaW50byB0aGlzIHNldCwKICAgIG9yIGlmIHlvdSBmaW5kIHRoYXQgdGhlIDpmdW5jOmBkaXN0cm8uaWRgIGZ1bmN0aW9uIHJldHVybnMgYSBkaWZmZXJlbnQKICAgIGRpc3RybyBJRCBmb3Igb25lIG9mIHRoZSBsaXN0ZWQgZGlzdHJvcywgcGxlYXNlIGNyZWF0ZSBhbiBpc3N1ZSBpbiB0aGUKICAgIGBkaXN0cm8gaXNzdWUgdHJhY2tlcmBfLgoKICAgICoqTG9va3VwIGhpZXJhcmNoeSBhbmQgdHJhbnNmb3JtYXRpb25zOioqCgogICAgRmlyc3QsIHRoZSBJRCBpcyBvYnRhaW5lZCBmcm9tIHRoZSBmb2xsb3dpbmcgc291cmNlcywgaW4gdGhlIHNwZWNpZmllZAogICAgb3JkZXIuIFRoZSBmaXJzdCBhdmFpbGFibGUgYW5kIG5vbi1lbXB0eSB2YWx1ZSBpcyB1c2VkOgoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiSUQiIGF0dHJpYnV0ZSBvZiB0aGUgb3MtcmVsZWFzZSBmaWxlLAoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiRGlzdHJpYnV0b3IgSUQiIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwKCiAgICAqIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUsCgogICAgVGhlIHNvIGRldGVybWluZWQgSUQgdmFsdWUgdGhlbiBwYXNzZXMgdGhlIGZvbGxvd2luZyB0cmFuc2Zvcm1hdGlvbnMsCiAgICBiZWZvcmUgaXQgaXMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2Q6CgogICAgKiBpdCBpcyB0cmFuc2xhdGVkIHRvIGxvd2VyIGNhc2UsCgogICAgKiBibGFua3MgKHdoaWNoIHNob3VsZCBub3QgYmUgdGhlcmUgYW55d2F5KSBhcmUgdHJhbnNsYXRlZCB0byB1bmRlcnNjb3JlcywKCiAgICAqIGEgbm9ybWFsaXphdGlvbiBvZiB0aGUgSUQgaXMgcGVyZm9ybWVkLCBiYXNlZCB1cG9uCiAgICAgIGBub3JtYWxpemF0aW9uIHRhYmxlc2BfLiBUaGUgcHVycG9zZSBvZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgdG8gZW5zdXJlCiAgICAgIHRoYXQgdGhlIElEIGlzIGFzIHJlbGlhYmxlIGFzIHBvc3NpYmxlLCBldmVuIGFjcm9zcyBpbmNvbXBhdGlibGUgY2hhbmdlcwogICAgICBpbiB0aGUgT1MgZGlzdHJpYnV0aW9ucy4gQSBjb21tb24gcmVhc29uIGZvciBhbiBpbmNvbXBhdGlibGUgY2hhbmdlIGlzCiAgICAgIHRoZSBhZGRpdGlvbiBvZiBhbiBvcy1yZWxlYXNlIGZpbGUsIG9yIHRoZSBhZGRpdGlvbiBvZiB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwgd2l0aCBJRCB2YWx1ZXMgdGhhdCBkaWZmZXIgZnJvbSB3aGF0IHdhcyBwcmV2aW91c2x5IGRldGVybWluZWQKICAgICAgZnJvbSB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZSBuYW1lLgogICAgKQJyKAAAAHIUAAAAcisAAAByKwAAAHIrAAAAciwAAAByFAAAALMAAABzAgAAAAhNchQAAABjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAA8woAAAB0AKABfAChAVMAKQFhawQAAAogICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBodW1hbi1yZWFkYWJsZQogICAgc3RyaW5nLgoKICAgIElmICpwcmV0dHkqIGlzIGZhbHNlLCB0aGUgbmFtZSBpcyByZXR1cm5lZCB3aXRob3V0IHZlcnNpb24gb3IgY29kZW5hbWUuCiAgICAoZS5nLiAiQ2VudE9TIExpbnV4IikKCiAgICBJZiAqcHJldHR5KiBpcyB0cnVlLCB0aGUgdmVyc2lvbiBhbmQgY29kZW5hbWUgYXJlIGFwcGVuZGVkLgogICAgKGUuZy4gIkNlbnRPUyBMaW51eCA3LjEuMTUwMyAoQ29yZSkiKQoKICAgICoqTG9va3VwIGhpZXJhcmNoeToqKgoKICAgIFRoZSBuYW1lIGlzIG9idGFpbmVkIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzLCBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyLgogICAgVGhlIGZpcnN0IGF2YWlsYWJsZSBhbmQgbm9uLWVtcHR5IHZhbHVlIGlzIHVzZWQ6CgogICAgKiBJZiAqcHJldHR5KiBpcyBmYWxzZToKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiTkFNRSIgYXR0cmlidXRlIG9mIHRoZSBvcy1yZWxlYXNlIGZpbGUsCgogICAgICAtIHRoZSB2YWx1ZSBvZiB0aGUgIkRpc3RyaWJ1dG9yIElEIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgICAgY29tbWFuZCwKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiPG5hbWU+IiBmaWVsZCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZS4KCiAgICAqIElmICpwcmV0dHkqIGlzIHRydWU6CgogICAgICAtIHRoZSB2YWx1ZSBvZiB0aGUgIlBSRVRUWV9OQU1FIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiRGVzY3JpcHRpb24iIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgICBjb21tYW5kLAoKICAgICAgLSB0aGUgdmFsdWUgb2YgdGhlICI8bmFtZT4iIGZpZWxkIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLCBhcHBlbmRlZAogICAgICAgIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwcmV0dHkgdmVyc2lvbiAoIjx2ZXJzaW9uX2lkPiIgYW5kICI8Y29kZW5hbWU+IgogICAgICAgIGZpZWxkcykgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUsIGlmIGF2YWlsYWJsZS4KICAgICkCcigAAADaBG5hbWWpAdoGcHJldHR5cisAAAByKwAAAHIsAAAAci8AAAADAQAAcwIAAAAKJXIvAAAAYwIAAAAAAAAAAAAAAAIAAAAEAAAAQwAAAPMMAAAAdACgAXwAfAGhAlMAKQFhdgYAAAogICAgUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBodW1hbi1yZWFkYWJsZQogICAgc3RyaW5nLgoKICAgIElmICpwcmV0dHkqIGlzIGZhbHNlLCB0aGUgdmVyc2lvbiBpcyByZXR1cm5lZCB3aXRob3V0IGNvZGVuYW1lIChlLmcuCiAgICAiNy4wIikuCgogICAgSWYgKnByZXR0eSogaXMgdHJ1ZSwgdGhlIGNvZGVuYW1lIGluIHBhcmVudGhlc2lzIGlzIGFwcGVuZGVkLCBpZiB0aGUKICAgIGNvZGVuYW1lIGlzIG5vbi1lbXB0eSAoZS5nLiAiNy4wIChNYWlwbykiKS4KCiAgICBTb21lIGRpc3RyaWJ1dGlvbnMgcHJvdmlkZSB2ZXJzaW9uIG51bWJlcnMgd2l0aCBkaWZmZXJlbnQgcHJlY2lzaW9ucyBpbgogICAgdGhlIGRpZmZlcmVudCBzb3VyY2VzIG9mIGRpc3RyaWJ1dGlvbiBpbmZvcm1hdGlvbi4gRXhhbWluaW5nIHRoZSBkaWZmZXJlbnQKICAgIHNvdXJjZXMgaW4gYSBmaXhlZCBwcmlvcml0eSBvcmRlciBkb2VzIG5vdCBhbHdheXMgeWllbGQgdGhlIG1vc3QgcHJlY2lzZQogICAgdmVyc2lvbiAoZS5nLiBmb3IgRGViaWFuIDguMiwgb3IgQ2VudE9TIDcuMSkuCgogICAgVGhlICpiZXN0KiBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgYXBwcm9hY2ggZm9yIHRoZSByZXR1cm5lZAogICAgdmVyc2lvbjoKCiAgICBJZiAqYmVzdCogaXMgZmFsc2UsIHRoZSBmaXJzdCBub24tZW1wdHkgdmVyc2lvbiBudW1iZXIgaW4gcHJpb3JpdHkgb3JkZXIgb2YKICAgIHRoZSBleGFtaW5lZCBzb3VyY2VzIGlzIHJldHVybmVkLgoKICAgIElmICpiZXN0KiBpcyB0cnVlLCB0aGUgbW9zdCBwcmVjaXNlIHZlcnNpb24gbnVtYmVyIG91dCBvZiBhbGwgZXhhbWluZWQKICAgIHNvdXJjZXMgaXMgcmV0dXJuZWQuCgogICAgKipMb29rdXAgaGllcmFyY2h5OioqCgogICAgSW4gYWxsIGNhc2VzLCB0aGUgdmVyc2lvbiBudW1iZXIgaXMgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXMuCiAgICBJZiAqYmVzdCogaXMgZmFsc2UsIHRoaXMgb3JkZXIgcmVwcmVzZW50cyB0aGUgcHJpb3JpdHkgb3JkZXI6CgogICAgKiB0aGUgdmFsdWUgb2YgdGhlICJWRVJTSU9OX0lEIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiUmVsZWFzZSIgYXR0cmlidXRlIHJldHVybmVkIGJ5IHRoZSBsc2JfcmVsZWFzZQogICAgICBjb21tYW5kLAogICAgKiB0aGUgdmVyc2lvbiBudW1iZXIgcGFyc2VkIGZyb20gdGhlICI8dmVyc2lvbl9pZD4iIGZpZWxkIG9mIHRoZSBmaXJzdCBsaW5lCiAgICAgIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLAogICAgKiB0aGUgdmVyc2lvbiBudW1iZXIgcGFyc2VkIGZyb20gdGhlICJQUkVUVFlfTkFNRSIgYXR0cmlidXRlIG9mIHRoZQogICAgICBvcy1yZWxlYXNlIGZpbGUsIGlmIGl0IGZvbGxvd3MgdGhlIGZvcm1hdCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZXMuCiAgICAqIHRoZSB2ZXJzaW9uIG51bWJlciBwYXJzZWQgZnJvbSB0aGUgIkRlc2NyaXB0aW9uIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkKICAgICAgdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQsIGlmIGl0IGZvbGxvd3MgdGhlIGZvcm1hdCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UKICAgICAgZmlsZXMuCiAgICApAnIoAAAAchUAAACpAnIxAAAA2gRiZXN0cisAAAByKwAAAHIsAAAAchUAAAArAQAA8wIAAAAMKnIVAAAAYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHIuAAAAKQFhoAEAAAogICAgUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiBhcyBhIHR1cGxlCiAgICBgYChtYWpvciwgbWlub3IsIGJ1aWxkX251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ZmFjZXMsIGZvciBleGFtcGxlIGRpc3RyaWJ1dGlvbnMgdGhlIGN1cnJlbnQKICAgIGRpc3RyaWJ1dGlvbiBpcyBhIGRlcml2YXRpdmUgZnJvbS4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHk6KioKCiAgICBUaGlzIGluZm9ybWF0aW9uIGl0ZW0gaXMgb25seSBwcm92aWRlZCBieSB0aGUgb3MtcmVsZWFzZSBmaWxlLgogICAgRm9yIGRldGFpbHMsIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlICJJRF9MSUtFIiBhdHRyaWJ1dGUgaW4gdGhlCiAgICBgb3MtcmVsZWFzZSBtYW4gcGFnZQogICAgPGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N5c3RlbWQvbWFuL29zLXJlbGVhc2UuaHRtbD5gXy4KICAgICkCcigAAAByFwAAAHIrAAAAcisAAAByKwAAAHIsAAAAchcAAACUAQAAcwIAAAAID3IXAAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQwAAAHItAAAAKQFhpgIAAAogICAgUmV0dXJuIHRoZSBjb2RlbmFtZSBmb3IgdGhlIHJlbGVhc2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLAogICAgYXMgYSBzdHJpbmcuCgogICAgSWYgdGhlIGRpc3RyaWJ1dGlvbiBkb2VzIG5vdCBoYXZlIGEgY29kZW5hbWUsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KCiAgICBOb3RlIHRoYXQgdGhlIHJldHVybmVkIGNvZGVuYW1lIGlzIG5vdCBhbHdheXMgcmVhbGx5IGEgY29kZW5hbWUuIEZvcgogICAgZXhhbXBsZSwgb3BlblNVU0UgcmV0dXJucyAieDg2XzY0Ii4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgc3VjaAogICAgY2FzZXMgaW4gYW55IHNwZWNpYWwgd2F5IGFuZCBqdXN0IHJldHVybnMgdGhlIHN0cmluZyBpdCBmaW5kcywgaWYgYW55LgoKICAgICoqTG9va3VwIGhpZXJhcmNoeToqKgoKICAgICogdGhlIGNvZGVuYW1lIHdpdGhpbiB0aGUgIlZFUlNJT04iIGF0dHJpYnV0ZSBvZiB0aGUgb3MtcmVsZWFzZSBmaWxlLCBpZgogICAgICBwcm92aWRlZCwKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIkNvZGVuYW1lIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgIGNvbW1hbmQsCgogICAgKiB0aGUgdmFsdWUgb2YgdGhlICI8Y29kZW5hbWU+IiBmaWVsZCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZS4KICAgICkCcigAAAByGAAAAHIrAAAAcisAAAByKwAAAHIsAAAAchgAAACmAQAAcwIAAAAIFnIYAAAAYwIAAAAAAAAAAAAAAAIAAAAEAAAAQwAAAHIyAAAAKQFh1AQAAAogICAgUmV0dXJuIGNlcnRhaW4gbWFjaGluZS1yZWFkYWJsZSBpbmZvcm1hdGlvbiBpdGVtcyBhYm91dCB0aGUgY3VycmVudCBPUwogICAgZGlzdHJpYnV0aW9uIGluIGEgZGljdGlvbmFyeSwgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgoKICAgIC4uIHNvdXJjZWNvZGU6OiBweXRob24KCiAgICAgICAgewogICAgICAgICAgICAnaWQnOiAncmhlbCcsCiAgICAgICAgICAgICd2ZXJzaW9uJzogJzcuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uX3BhcnRzJzogewogICAgICAgICAgICAgICAgJ21ham9yJzogJzcnLAogICAgICAgICAgICAgICAgJ21pbm9yJzogJzAnLAogICAgICAgICAgICAgICAgJ2J1aWxkX251bWJlcic6ICcnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdsaWtlJzogJ2ZlZG9yYScsCiAgICAgICAgICAgICdjb2RlbmFtZSc6ICdNYWlwbycKICAgICAgICB9CgogICAgVGhlIGRpY3Rpb25hcnkgc3RydWN0dXJlIGFuZCBrZXlzIGFyZSBhbHdheXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2gKICAgIGluZm9ybWF0aW9uIGl0ZW1zIGFyZSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgZGF0YSBzb3VyY2VzLiBUaGUgdmFsdWVzCiAgICBmb3IgdGhlIHZhcmlvdXMga2V5cyBhcmUgYXMgZm9sbG93czoKCiAgICAqIGBgaWRgYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5pZGAuCgogICAgKiBgYHZlcnNpb25gYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby52ZXJzaW9uYC4KCiAgICAqIGBgdmVyc2lvbl9wYXJ0cyAtPiBtYWpvcmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLm1ham9yX3ZlcnNpb25gLgoKICAgICogYGB2ZXJzaW9uX3BhcnRzIC0+IG1pbm9yYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubWlub3JfdmVyc2lvbmAuCgogICAgKiBgYHZlcnNpb25fcGFydHMgLT4gYnVpbGRfbnVtYmVyYGA6ICBUaGUgcmVzdWx0IG9mCiAgICAgIDpmdW5jOmBkaXN0cm8uYnVpbGRfbnVtYmVyYC4KCiAgICAqIGBgbGlrZWBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmxpa2VgLgoKICAgICogYGBjb2RlbmFtZWBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmNvZGVuYW1lYC4KCiAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgKnByZXR0eSogYW5kICpiZXN0KiBwYXJhbWV0ZXJzLCBzZWUgdGhlCiAgICA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gIG1ldGhvZC4KICAgICkCcigAAADaBGluZm9yMwAAAHIrAAAAcisAAAByLAAAAHI7AAAAvwEAAHI1AAAAcjsAAABjAAAAAAAAAAAAAAAAAAAAAAIAAABDAAAAci0AAAApAXriCiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24gaXRlbXMKICAgIGZyb20gdGhlIG9zLXJlbGVhc2UgZmlsZSBkYXRhIHNvdXJjZSBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24uCgogICAgU2VlIGBvcy1yZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbiBpdGVtcy4KICAgICkCcigAAADaD29zX3JlbGVhc2VfaW5mb3IrAAAAcisAAAByKwAAAHIsAAAAcjwAAADsAQAA8wIAAAAICHI8AAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQwAAAHItAAAAKQF69QogICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIGluZm9ybWF0aW9uIGl0ZW1zCiAgICBmcm9tIHRoZSBsc2JfcmVsZWFzZSBjb21tYW5kIGRhdGEgc291cmNlIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbi4KCiAgICBTZWUgYGxzYl9yZWxlYXNlIGNvbW1hbmQgb3V0cHV0YF8gZm9yIGRldGFpbHMgYWJvdXQgdGhlc2UgaW5mb3JtYXRpb24KICAgIGl0ZW1zLgogICAgKQJyKAAAANoQbHNiX3JlbGVhc2VfaW5mb3IrAAAAcisAAAByKwAAAHIsAAAAcj4AAAD3AQAAcwIAAAAICXI+AAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQwAAAHItAAAAKQF66gogICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIGluZm9ybWF0aW9uIGl0ZW1zCiAgICBmcm9tIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlIGRhdGEgc291cmNlIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbi4KCiAgICBTZWUgYGRpc3RybyByZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbiBpdGVtcy4KICAgICkCcigAAADaE2Rpc3Ryb19yZWxlYXNlX2luZm9yKwAAAHIrAAAAcisAAAByLAAAAHI/AAAAAwIAAHI9AAAAcj8AAABjAAAAAAAAAAAAAAAAAAAAAAIAAABDAAAAci0AAAApAXqfCiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24gaXRlbXMKICAgIGZyb20gdGhlIGRpc3RybyByZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLgogICAgKQJyKAAAANoKdW5hbWVfaW5mb3IrAAAAcisAAAByKwAAAHIsAAAAckAAAAAOAgAAcwIAAAAIBnJAAAAAYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHIuAAAAKQFhkwEAAAogICAgUmV0dXJuIGEgc2luZ2xlIG5hbWVkIGluZm9ybWF0aW9uIGl0ZW0gZnJvbSB0aGUgb3MtcmVsZWFzZSBmaWxlIGRhdGEgc291cmNlCiAgICBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24uCgogICAgUGFyYW1ldGVyczoKCiAgICAqIGBgYXR0cmlidXRlYGAgKHN0cmluZyk6IEtleSBvZiB0aGUgaW5mb3JtYXRpb24gaXRlbS4KCiAgICBSZXR1cm5zOgoKICAgICogKHN0cmluZyk6IFZhbHVlIG9mIHRoZSBpbmZvcm1hdGlvbiBpdGVtLCBpZiB0aGUgaXRlbSBleGlzdHMuCiAgICAgIFRoZSBlbXB0eSBzdHJpbmcsIGlmIHRoZSBpdGVtIGRvZXMgbm90IGV4aXN0LgoKICAgIFNlZSBgb3MtcmVsZWFzZSBmaWxlYF8gZm9yIGRldGFpbHMgYWJvdXQgdGhlc2UgaW5mb3JtYXRpb24gaXRlbXMuCiAgICApAnIoAAAA2g9vc19yZWxlYXNlX2F0dHKpAdoJYXR0cmlidXRlcisAAAByKwAAAHIsAAAAckEAAAAXAgAA8wIAAAAKEXJBAAAAYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHIuAAAAKQFhrQEAAAogICAgUmV0dXJuIGEgc2luZ2xlIG5hbWVkIGluZm9ybWF0aW9uIGl0ZW0gZnJvbSB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCBvdXRwdXQKICAgIGRhdGEgc291cmNlIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbi4KCiAgICBQYXJhbWV0ZXJzOgoKICAgICogYGBhdHRyaWJ1dGVgYCAoc3RyaW5nKTogS2V5IG9mIHRoZSBpbmZvcm1hdGlvbiBpdGVtLgoKICAgIFJldHVybnM6CgogICAgKiAoc3RyaW5nKTogVmFsdWUgb2YgdGhlIGluZm9ybWF0aW9uIGl0ZW0sIGlmIHRoZSBpdGVtIGV4aXN0cy4KICAgICAgVGhlIGVtcHR5IHN0cmluZywgaWYgdGhlIGl0ZW0gZG9lcyBub3QgZXhpc3QuCgogICAgU2VlIGBsc2JfcmVsZWFzZSBjb21tYW5kIG91dHB1dGBfIGZvciBkZXRhaWxzIGFib3V0IHRoZXNlIGluZm9ybWF0aW9uCiAgICBpdGVtcy4KICAgICkCcigAAADaEGxzYl9yZWxlYXNlX2F0dHJyQgAAAHIrAAAAcisAAAByLAAAAHJFAAAAKwIAAHMCAAAAChJyRQAAAGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAAByLgAAACkBYZsBAAAKICAgIFJldHVybiBhIHNpbmdsZSBuYW1lZCBpbmZvcm1hdGlvbiBpdGVtIGZyb20gdGhlIGRpc3RybyByZWxlYXNlIGZpbGUKICAgIGRhdGEgc291cmNlIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbi4KCiAgICBQYXJhbWV0ZXJzOgoKICAgICogYGBhdHRyaWJ1dGVgYCAoc3RyaW5nKTogS2V5IG9mIHRoZSBpbmZvcm1hdGlvbiBpdGVtLgoKICAgIFJldHVybnM6CgogICAgKiAoc3RyaW5nKTogVmFsdWUgb2YgdGhlIGluZm9ybWF0aW9uIGl0ZW0sIGlmIHRoZSBpdGVtIGV4aXN0cy4KICAgICAgVGhlIGVtcHR5IHN0cmluZywgaWYgdGhlIGl0ZW0gZG9lcyBub3QgZXhpc3QuCgogICAgU2VlIGBkaXN0cm8gcmVsZWFzZSBmaWxlYF8gZm9yIGRldGFpbHMgYWJvdXQgdGhlc2UgaW5mb3JtYXRpb24gaXRlbXMuCiAgICApAnIoAAAA2hNkaXN0cm9fcmVsZWFzZV9hdHRyckIAAAByKwAAAHIrAAAAciwAAAByRgAAAEACAAByRAAAAHJGAAAAYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHIuAAAAKQFhWgEAAAogICAgUmV0dXJuIGEgc2luZ2xlIG5hbWVkIGluZm9ybWF0aW9uIGl0ZW0gZnJv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aXphdGlvbiBhcmd1bWVudHMsIHRoYXQgbW9kdWxlLWdsb2JhbCBpbnN0YW5jZQogICAgcmV0dXJucyBkYXRhIGFib3V0IHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiAoaS5lLiB0aGUgZGlzdHJvIHRoaXMKICAgIHBhY2thZ2UgcnVucyBvbikuCgogICAgTm9ybWFsbHksIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY3JlYXRlIGFkZGl0aW9uYWwgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MuCiAgICBIb3dldmVyLCBpbiBzaXR1YXRpb25zIHdoZXJlIGNvbnRyb2wgaXMgbmVlZGVkIG92ZXIgdGhlIGV4YWN0IGRhdGEgc291cmNlcwogICAgdGhhdCBhcmUgdXNlZCwgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgY2FuIGJlIGNyZWF0ZWQgd2l0aCBhIHNwZWNpZmljCiAgICBkaXN0cm8gcmVsZWFzZSBmaWxlLCBvciBhIHNwZWNpZmljIG9zLXJlbGVhc2UgZmlsZSwgb3Igd2l0aG91dCBpbnZva2luZyB0aGUKICAgIGxzYl9yZWxlYXNlIGNvbW1hbmQuCiAgICBU2gBOYwYAAAAAAAAAAAAAAAgAAAAEAAAAQwAAAHOiAAAAfAV8AF8AfAVyDHQBagKgA3wFZAGhAm4BdAR8AF8FfAVyGHQBagKgA3wFZAKhAm4BdAZ8AF8HfAJyIXwCfABfCG4jdAFqAqADfABqBXQJoQJ9BnQBagKgA3wAagd0CaECfQd0AWoCoAp8BqEBcz10AWoCoAp8B6EBc0F8BnwAXwhuA3wHfABfCHwDcEdkA3wAXwt8AXwAXwx8BHwAXw1kBFMAKQVh9QsAAAogICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiBtZXRob2Qgb2YgdGhpcyBjbGFzcyBnYXRoZXJzIGluZm9ybWF0aW9uIGZyb20gdGhlCiAgICAgICAgYXZhaWxhYmxlIGRhdGEgc291cmNlcywgYW5kIHN0b3JlcyB0aGF0IGluIHByaXZhdGUgaW5zdGFuY2UgYXR0cmlidXRlcy4KICAgICAgICBTdWJzZXF1ZW50IGFjY2VzcyB0byB0aGUgaW5mb3JtYXRpb24gaXRlbXMgdXNlcyB0aGVzZSBwcml2YXRlIGluc3RhbmNlCiAgICAgICAgYXR0cmlidXRlcywgc28gdGhhdCB0aGUgZGF0YSBzb3VyY2VzIGFyZSByZWFkIG9ubHkgb25jZS4KCiAgICAgICAgUGFyYW1ldGVyczoKCiAgICAgICAgKiBgYGluY2x1ZGVfbHNiYGAgKGJvb2wpOiBDb250cm9scyB3aGV0aGVyIHRoZQogICAgICAgICAgYGxzYl9yZWxlYXNlIGNvbW1hbmQgb3V0cHV0YF8gaXMgaW5jbHVkZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgICBJZiB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbgogICAgICAgICAgcGF0aCwgdGhlIGRhdGEgc291cmNlIGZvciB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCB3aWxsIGJlIGVtcHR5LgoKICAgICAgICAqIGBgb3NfcmVsZWFzZV9maWxlYGAgKHN0cmluZyk6IFRoZSBwYXRoIG5hbWUgb2YgdGhlCiAgICAgICAgICBgb3MtcmVsZWFzZSBmaWxlYF8gdGhhdCBpcyB0byBiZSB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICAgQW4gZW1wdHkgc3RyaW5nICh0aGUgZGVmYXVsdCkgd2lsbCBjYXVzZSB0aGUgZGVmYXVsdCBwYXRoIG5hbWUgdG8KICAgICAgICAgIGJlIHVzZWQgKHNlZSBgb3MtcmVsZWFzZSBmaWxlYF8gZm9yIGRldGFpbHMpLgoKICAgICAgICAgIElmIHRoZSBzcGVjaWZpZWQgb3IgZGVmYXVsdGVkIG9zLXJlbGVhc2UgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlCiAgICAgICAgICBkYXRhIHNvdXJjZSBmb3IgdGhlIG9zLXJlbGVhc2UgZmlsZSB3aWxsIGJlIGVtcHR5LgoKICAgICAgICAqIGBgZGlzdHJvX3JlbGVhc2VfZmlsZWBgIChzdHJpbmcpOiBUaGUgcGF0aCBuYW1lIG9mIHRoZQogICAgICAgICAgYGRpc3RybyByZWxlYXNlIGZpbGVgXyB0aGF0IGlzIHRvIGJlIHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgICBBbiBlbXB0eSBzdHJpbmcgKHRoZSBkZWZhdWx0KSB3aWxsIGNhdXNlIGEgZGVmYXVsdCBzZWFyY2ggYWxnb3JpdGhtCiAgICAgICAgICB0byBiZSB1c2VkIChzZWUgYGRpc3RybyByZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscykuCgogICAgICAgICAgSWYgdGhlIHNwZWNpZmllZCBkaXN0cm8gcmVsZWFzZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBvciBpZiBubyBkZWZhdWx0CiAgICAgICAgICBkaXN0cm8gcmVsZWFzZSBmaWxlIGNhbiBiZSBmb3VuZCwgdGhlIGRhdGEgc291cmNlIGZvciB0aGUgZGlzdHJvCiAgICAgICAgICByZWxlYXNlIGZpbGUgd2lsbCBiZSBlbXB0eS4KCiAgICAgICAgKiBgYGluY2x1ZGVfdW5hbWVgYCAoYm9vbCk6IENvbnRyb2xzIHdoZXRoZXIgdW5hbWUgY29tbWFuZCBvdXRwdXQgaXMKICAgICAgICAgIGluY2x1ZGVkIGFzIGEgZGF0YSBzb3VyY2UuIElmIHRoZSB1bmFtZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4KICAgICAgICAgIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbiBwYXRoIHRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHVuYW1lIGNvbW1hbmQgd2lsbAogICAgICAgICAgYmUgZW1wdHkuCgogICAgICAgICogYGByb290X2RpcmBgIChzdHJpbmcpOiBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gdXNlCiAgICAgICAgICB0byBmaW5kIGRpc3Ryby1yZWxhdGVkIGluZm9ybWF0aW9uIGZpbGVzLgoKICAgICAgICBQdWJsaWMgaW5zdGFuY2UgYXR0cmlidXRlczoKCiAgICAgICAgKiBgYG9zX3JlbGVhc2VfZmlsZWBgIChzdHJpbmcpOiBUaGUgcGF0aCBuYW1lIG9mIHRoZQogICAgICAgICAgYG9zLXJlbGVhc2UgZmlsZWBfIHRoYXQgaXMgYWN0dWFsbHkgdXNlZCBhcyBhIGRhdGEgc291cmNlLiBUaGUKICAgICAgICAgIGVtcHR5IHN0cmluZyBpZiBubyBkaXN0cm8gcmVsZWFzZSBmaWxlIGlzIHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgKiBgYGRpc3Ryb19yZWxlYXNlX2ZpbGVgYCAoc3RyaW5nKTogVGhlIHBhdGggbmFtZSBvZiB0aGUKICAgICAgICAgIGBkaXN0cm8gcmVsZWFzZSBmaWxlYF8gdGhhdCBpcyBhY3R1YWxseSB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuIFRoZQogICAgICAgICAgZW1wdHkgc3RyaW5nIGlmIG5vIGRpc3RybyByZWxlYXNlIGZpbGUgaXMgdXNlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAqIGBgaW5jbHVkZV9sc2JgYCAoYm9vbCk6IFRoZSByZXN1bHQgb2YgdGhlIGBgaW5jbHVkZV9sc2JgYCBwYXJhbWV0ZXIuCiAgICAgICAgICBUaGlzIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGxzYiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvYWRlZC4KCiAgICAgICAgKiBgYGluY2x1ZGVfdW5hbWVgYCAoYm9vbCk6IFRoZSByZXN1bHQgb2YgdGhlIGBgaW5jbHVkZV91bmFtZWBgCiAgICAgICAgICBwYXJhbWV0ZXIuIFRoaXMgY29udHJvbHMgd2hldGhlciB0aGUgdW5hbWUgaW5mb3JtYXRpb24gd2lsbAogICAgICAgICAgYmUgbG9hZGVkLgoKICAgICAgICBSYWlzZXM6CgogICAgICAgICogOnB5OmV4YzpgSU9FcnJvcmA6IFNvbWUgSS9PIGlzc3VlIHdpdGggYW4gb3MtcmVsZWFzZSBmaWxlIG9yIGRpc3RybwogICAgICAgICAgcmVsZWFzZSBmaWxlLgoKICAgICAgICAqIDpweTpleGM6YHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yYDogVGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgaGFkCiAgICAgICAgICBzb21lIGlzc3VlIChvdGhlciB0aGFuIG5vdCBiZWluZyBhdmFpbGFibGUgaW4gdGhlIHByb2dyYW0gZXhlY3V0aW9uCiAgICAgICAgICBwYXRoKS4KCiAgICAgICAgKiA6cHk6ZXhjOmBVbmljb2RlRXJyb3JgOiBBIGRhdGEgc291cmNlIGhhcyB1bmV4cGVjdGVkIGNoYXJhY3RlcnMgb3IKICAgICAgICAgIHVzZXMgYW4gdW5leHBlY3RlZCBlbmNvZGluZy4KICAgICAgICDaA2V0Y3oHdXNyL2xpYnJZAAAATikO2ghyb290X2RpctoCb3PaBHBhdGjaBGpvaW7aDF9VTklYQ09ORkRJUtoHZXRjX2RpctoOX1VOSVhVU1JMSUJESVLaC3Vzcl9saWJfZGly2g9vc19yZWxlYXNlX2ZpbGXaFF9PU19SRUxFQVNFX0JBU0VOQU1F2gZpc2ZpbGXaE2Rpc3Ryb19yZWxlYXNlX2ZpbGXaC2luY2x1ZGVfbHNi2g1pbmNsdWRlX3VuYW1lKQhyTAAAAHJnAAAAcmMAAAByZgAAAHJoAAAAclsAAADaF2V0Y19kaXJfb3NfcmVsZWFzZV9maWxl2hd1c3JfbGliX29zX3JlbGVhc2VfZmlsZXIrAAAAcisAAAByLAAAAHJOAAAAjgIAAHMkAAAABk8YARQCBP8EBAgBEAIGAQYBBP8SBgIBBP8IAwYCCgIGAQoBehpMaW51eERpc3RyaWJ1dGlvbi5fX2luaXRfX2MBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzDAAAAGQBagB8AGQCjQFTACkDehdSZXR1cm4gcmVwciBvZiBhbGwgaW5mb2FlAQAATGludXhEaXN0cmlidXRpb24ob3NfcmVsZWFzZV9maWxlPXtzZWxmLm9zX3JlbGVhc2VfZmlsZSFyfSwgZGlzdHJvX3JlbGVhc2VfZmlsZT17c2VsZi5kaXN0cm9fcmVsZWFzZV9maWxlIXJ9LCBpbmNsdWRlX2xzYj17c2VsZi5pbmNsdWRlX2xzYiFyfSwgaW5jbHVkZV91bmFtZT17c2VsZi5pbmNsdWRlX3VuYW1lIXJ9LCBfb3NfcmVsZWFzZV9pbmZvPXtzZWxmLl9vc19yZWxlYXNlX2luZm8hcn0sIF9sc2JfcmVsZWFzZV9pbmZvPXtzZWxmLl9sc2JfcmVsZWFzZV9pbmZvIXJ9LCBfZGlzdHJvX3JlbGVhc2VfaW5mbz17c2VsZi5fZGlzdHJv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eERpc3RyaWJ1dGlvbi5pbmZvYwEAAAAAAAAAAAAAAAEAAAABAAAAQwAAAPMGAAAAfABqAFMAKQF62QogICAgICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbgogICAgICAgIGl0ZW1zIGZyb20gdGhlIG9zLXJlbGVhc2UgZmlsZSBkYXRhIHNvdXJjZSBvZiB0aGUgT1MgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8ub3NfcmVsZWFzZV9pbmZvYC4KICAgICAgICApAXKPAAAAcmsAAAByKwAAAHIrAAAAciwAAAByPAAAAMwDAADzAgAAAAYIeiFMaW51eERpc3RyaWJ1dGlvbi5vc19yZWxlYXNlX2luZm9jAQAAAAAAAAAAAAAAAQAAAAEAAABDAAAAcpIAAAApAXrmCiAgICAgICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIGluZm9ybWF0aW9uCiAgICAgICAgaXRlbXMgZnJvbSB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCBkYXRhIHNvdXJjZSBvZiB0aGUgT1MKICAgICAgICBkaXN0cmlidXRpb24uCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5sc2JfcmVsZWFzZV9pbmZvYC4KICAgICAgICApAdoRX2xzYl9yZWxlYXNlX2luZm9yawAAAHIrAAAAcisAAAByLAAAAHI+AAAA1gMAAPMCAAAABgl6IkxpbnV4RGlzdHJpYnV0aW9uLmxzYl9yZWxlYXNlX2luZm9jAQAAAAAAAAAAAAAAAQAAAAEAAABDAAAAcpIAAAApAXrpCiAgICAgICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIGluZm9ybWF0aW9uCiAgICAgICAgaXRlbXMgZnJvbSB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZSBkYXRhIHNvdXJjZSBvZiB0aGUgT1MKICAgICAgICBkaXN0cmli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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 4
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
distro.cpython-310.pyc
37.38 KB
lrw-r--r--
2026-01-09 15:17:42
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-310.pyc
232.25 KB
lrw-r--r--
2026-01-09 15:17:42
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-310.pyc
26.98 KB
lrw-r--r--
2026-01-09 15:17:42
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-310.pyc
2.89 KB
lrw-r--r--
2026-01-09 15:17:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).