REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 35.81 KB
Close
//opt/alt/python37/lib/python3.7/site-packages/pip/_vendor/__pycache__/distro.cpython-37.pyc
Text
Base64
Qg0NCgAAAACalVJlbKoAAOMAAAAAAAAAAAAAAAAGAAAAQAAAAHOEAQAAZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaA2QBZAJsBFoEZAFkAmwFWgVkAWQCbAZaBmQBZAJsB1oHZAFkAmwIWghlAWoJoApkA2QEoQJaC2QFWgxkBmQHaQFaDWQHZAdkCGQIZAhkCZwFWg5kCmQIaQFaD2UCoBBkC6EBWhFlAqAQZAyhAVoSZA1kDmQPZQxkEGQRZgZaE2RBZBNkFIQBWhRkFWQWhABaFWRCZBhkGYQBWhZkQ2QaZBuEAVoXZERkHGQdhAFaGGRFZB5kH4QBWhlkRmQgZCGEAVoaZEdkImQjhAFaG2QkZCWEAFocZCZkJ4QAWh1kSGQoZCmEAVoeZCpkK4QAWh9kLGQthABaIGQuZC+EAFohZDBkMYQAWiJkMmQzhABaI2Q0ZDWEAFokZDZkN4QAWiVkOGQ5hABaJkcAZDpkO4QAZDtlJ4MDWihHAGQ8ZD2EAGQ9ZSeDA1opZSmDAFoqZD5kP4QAWitlLGRAawKQAXKAZSuDAAEAZAJTAClJYQwDAAAKVGhlIGBgZGlzdHJvYGAgcGFja2FnZSAoYGBkaXN0cm9gYCBzdGFuZHMgZm9yIExpbnV4IERpc3RyaWJ1dGlvbikgcHJvdmlkZXMKaW5mb3JtYXRpb24gYWJvdXQgdGhlIExpbnV4IGRpc3RyaWJ1dGlvbiBpdCBydW5zIG9uLCBzdWNoIGFzIGEgcmVsaWFibGUKbWFjaGluZS1yZWFkYWJsZSBkaXN0cm8gSUQsIG9yIHZlcnNpb24gaW5mb3JtYXRpb24uCgpJdCBpcyB0aGUgcmVjb21tZW5kZWQgcmVwbGFjZW1lbnQgZm9yIFB5dGhvbidzIG9yaWdpbmFsCjpweTpmdW5jOmBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb25gIGZ1bmN0aW9uLCBidXQgaXQgcHJvdmlkZXMgbXVjaCBtb3JlCmZ1bmN0aW9uYWxpdHkuIEFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIGJlY2FtZSBuZWNlc3NhcnkgYmVjYXVzZSBQeXRob24KMy41IGRlcHJlY2F0ZWQgdGhpcyBmdW5jdGlvbiwgYW5kIFB5dGhvbiAzLjggd2lsbCByZW1vdmUgaXQgYWx0b2dldGhlci4KSXRzIHByZWRlY2Vzc29yIGZ1bmN0aW9uIDpweTpmdW5jOmBwbGF0Zm9ybS5kaXN0YCB3YXMgYWxyZWFkeQpkZXByZWNhdGVkIHNpbmNlIFB5dGhvbiAyLjYgYW5kIHdpbGwgYWxzbyBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjguClN0aWxsLCB0aGVyZSBhcmUgbWFueSBjYXNlcyBpbiB3aGljaCBhY2Nlc3MgdG8gT1MgZGlzdHJpYnV0aW9uIGluZm9ybWF0aW9uCmlzIG5lZWRlZC4gU2VlIGBQeXRob24gaXNzdWUgMTMyMiA8aHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzIyPmBfIGZvcgptb3JlIGluZm9ybWF0aW9uLgrpAAAAAE5aC1VOSVhDT05GRElSegQvZXRjegpvcy1yZWxlYXNl2gJvbNoGb3JhY2xl2gRyaGVsKQXaFmVudGVycHJpc2VlbnRlcnByaXNlYXPaGmVudGVycHJpc2VlbnRlcnByaXNlc2VydmVy2htyZWRoYXRlbnRlcnByaXNld29ya3N0YXRpb27aFnJlZGhhdGVudGVycHJpc2VzZXJ2ZXLaG3JlZGhhdGVudGVycHJpc2Vjb21wdXRlbm9kZdoGcmVkaGF0ekEoPzpbXildKlwpKC4qKVwoKT8gKig/OlNUTCApPyhbXGQuK1wtYS16XSpcZCkgKig/OmVzYWVsZXIgKik/KC4rKXobKFx3KylbLV9dKHJlbGVhc2V8dmVyc2lvbikk2g5kZWJpYW5fdmVyc2lvbnoLbHNiLXJlbGVhc2V6C29lbS1yZWxlYXNleg5zeXN0ZW0tcmVsZWFzZXoNcGxlc2stcmVsZWFzZVRjAQAAAAAAAAABAAAAAwAAAEMAAABzCgAAAHQAoAF8AKEBUwApAWEbBAAACiAgICBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uIGFzIGEgdHVwbGUKICAgIGBgKGlkX25hbWUsIHZlcnNpb24sIGNvZGVuYW1lKWBgIHdpdGggaXRlbXMgYXMgZm9sbG93czoKCiAgICAqIGBgaWRfbmFtZWBgOiAgSWYgKmZ1bGxfZGlzdHJpYnV0aW9uX25hbWUqIGlzIGZhbHNlLCB0aGUgcmVzdWx0IG9mCiAgICAgIDpmdW5jOmBkaXN0cm8uaWRgLiBPdGhlcndpc2UsIHRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5uYW1lYC4KCiAgICAqIGBgdmVyc2lvbmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gLgoKICAgICogYGBjb2RlbmFtZWBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmNvZGVuYW1lYC4KCiAgICBUaGUgaW50ZXJmYWNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcmlnaW5hbAogICAgOnB5OmZ1bmM6YHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbmAgZnVuY3Rpb24sIHN1cHBvcnRpbmcgYSBzdWJzZXQgb2YKICAgIGl0cyBwYXJhbWV0ZXJzLgoKICAgIFRoZSBkYXRhIGl0IHJldHVybnMgbWF5IG5vdCBleGFjdGx5IGJlIHRoZSBzYW1lLCBiZWNhdXNlIGl0IHVzZXMgbW9yZSBkYXRhCiAgICBzb3VyY2VzIHRoYW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLCBhbmQgdGhhdCBtYXkgbGVhZCB0byBkaWZmZXJlbnQgZGF0YSBpZgogICAgdGhlIE9TIGRpc3RyaWJ1dGlvbiBpcyBub3QgY29uc2lzdGVudCBhY3Jvc3MgbXVsdGlwbGUgZGF0YSBzb3VyY2VzIGl0CiAgICBwcm92aWRlcyAodGhlcmUgYXJlIGluZGVlZCBzdWNoIGRpc3RyaWJ1dGlvbnMgLi4uKS4KCiAgICBBbm90aGVyIHJlYXNvbiBmb3IgZGlmZmVyZW5jZXMgaXMgdGhlIGZhY3QgdGhhdCB0aGUgOmZ1bmM6YGRpc3Ryby5pZGAKICAgIG1ldGhvZCBub3JtYWxpemVzIHRoZSBkaXN0cm8gSUQgc3RyaW5nIHRvIGEgcmVsaWFibGUgbWFjaGluZS1yZWFkYWJsZSB2YWx1ZQogICAgZm9yIGEgbnVtYmVyIG9mIHBvcHVsYXIgT1MgZGlzdHJpYnV0aW9ucy4KICAgICkC2gdfZGlzdHJv2hJsaW51eF9kaXN0cmlidXRpb24pAdoWZnVsbF9kaXN0cmlidXRpb25fbmFtZakAcg8AAAD6gS9idWlsZGRpci9idWlsZC9CVUlMRFJPT1QvYWx0LXB5dGhvbjM3LXBpcC0yMC4yLjQtNi5lbDgueDg2XzY0L29wdC9hbHQvcHl0aG9uMzcvbGliL3B5dGhvbjMuNy9zaXRlLXBhY2thZ2VzL3BpcC9fdmVuZG9yL2Rpc3Ryby5weXINAAAAZAAAAHMCAAAAABlyDQAAAGMAAAAAAAAAAAAAAAACAAAAQwAAAHMIAAAAdACgAaEAUwApAWFECwAACiAgICBSZXR1cm4gdGhlIGRpc3RybyBJRCBvZiB0aGUgY3VycmVudCBkaXN0cmlidXRpb24sIGFzIGEKICAgIG1hY2hpbmUtcmVhZGFibGUgc3RyaW5nLgoKICAgIEZvciBhIG51bWJlciBvZiBPUyBkaXN0cmlidXRpb25zLCB0aGUgcmV0dXJuZWQgZGlzdHJvIElEIHZhbHVlIGlzCiAgICAqcmVsaWFibGUqLCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBpcyBkb2N1bWVudGVkIGFuZCB0aGF0IGl0IGRvZXMgbm90IGNoYW5nZQogICAgYWNyb3NzIHJlbGVhc2VzIG9mIHRoZSBkaXN0cmlidXRpb24uCgogICAgVGhpcyBwYWNrYWdlIG1haW50YWlucyB0aGUgZm9sbG93aW5nIHJlbGlhYmxlIGRpc3RybyBJRCB2YWx1ZXM6CgogICAgPT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICBEaXN0cm8gSUQgICAgICAgRGlzdHJpYnV0aW9uCiAgICA9PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICJ1YnVudHUiICAgICAgICBVYnVudHUKICAgICJkZWJpYW4iICAgICAgICBEZWJpYW4KICAgICJyaGVsIiAgICAgICAgICBSZWRIYXQgRW50ZXJwcmlzZSBMaW51eAogICAgImNlbnRvcyIgICAgICAgIENlbnRPUwogICAgImZlZG9yYSIgICAgICAgIEZlZG9yYQogICAgInNsZXMiICAgICAgICAgIFNVU0UgTGludXggRW50ZXJwcmlzZSBTZXJ2ZXIKICAgICJvcGVuc3VzZSIgICAgICBvcGVuU1VTRQogICAgImFtYXpvbiIgICAgICAgIEFtYXpvbiBMaW51eAogICAgImFyY2giICAgICAgICAgIEFyY2ggTGludXgKICAgICJjbG91ZGxpbnV4IiAgICBDbG91ZExpbnV4IE9TCiAgICAiZXhoZXJibyIgICAgICAgRXhoZXJibyBMaW51eAogICAgImdlbnRvbyIgICAgICAgIEdlblRvbyBMaW51eAogICAgImlibV9wb3dlcmt2bSIgIElCTSBQb3dlcktWTQogICAgImt2bWlibSIgICAgICAgIEtWTSBmb3IgSUJNIHogU3lzdGVtcwogICAgImxpbnV4bWludCIgICAgIExpbnV4IE1pbnQKICAgICJtYWdlaWEiICAgICAgICBNYWdlaWEKICAgICJtYW5kcml2YSIgICAgICBNYW5kcml2YSBMaW51eAogICAgInBhcmFsbGVscyIgICAgIFBhcmFsbGVscwogICAgInBpZG9yYSIgICAgICAgIFBpZG9yYQogICAgInJhc3BiaWFuIiAgICAgIFJhc3BiaWFuCiAgICAib3JhY2xlIiAgICAgICAgT3JhY2xlIExpbnV4IChhbmQgT3JhY2xlIEVudGVycHJpc2UgTGludXgpCiAgICAic2NpZW50aWZpYyIgICAgU2NpZW50aWZpYyBMaW51eAogICAgInNsYWNrd2FyZSIgICAgIFNsYWNrd2FyZQogICAgInhlbnNlcnZlciIgICAgIFhlblNlcnZlcgogICAgIm9wZW5ic2QiICAgICAgIE9wZW5CU0QKICAgICJuZXRic2QiICAgICAgICBOZXRCU0QKICAgICJmcmVlYnNkIiAgICAgICBGcmVlQlNECiAgICAibWlkbmlnaHRic2QiICAgTWlkbmlnaHRCU0QKICAgID09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgIElmIHlvdSBoYXZlIGEgbmVlZCB0byBnZXQgZGlzdHJvcyBmb3IgcmVsaWFibGUgSURzIGFkZGVkIGludG8gdGhpcyBzZXQsCiAgICBvciBpZiB5b3UgZmluZCB0aGF0IHRoZSA6ZnVuYzpgZGlzdHJvLmlkYCBmdW5jdGlvbiByZXR1cm5zIGEgZGlmZmVyZW50CiAgICBkaXN0cm8gSUQgZm9yIG9uZSBvZiB0aGUgbGlzdGVkIGRpc3Ryb3MsIHBsZWFzZSBjcmVhdGUgYW4gaXNzdWUgaW4gdGhlCiAgICBgZGlzdHJvIGlzc3VlIHRyYWNrZXJgXy4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHkgYW5kIHRyYW5zZm9ybWF0aW9uczoqKgoKICAgIEZpcnN0LCB0aGUgSUQgaXMgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXMsIGluIHRoZSBzcGVjaWZpZWQKICAgIG9yZGVyLiBUaGUgZmlyc3QgYXZhaWxhYmxlIGFuZCBub24tZW1wdHkgdmFsdWUgaXMgdXNlZDoKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIklEIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIkRpc3RyaWJ1dG9yIElEIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgIGNvbW1hbmQsCgogICAgKiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZmlsZSBuYW1lIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLAoKICAgIFRoZSBzbyBkZXRlcm1pbmVkIElEIHZhbHVlIHRoZW4gcGFzc2VzIHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtYXRpb25zLAogICAgYmVmb3JlIGl0IGlzIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kOgoKICAgICogaXQgaXMgdHJhbnNsYXRlZCB0byBsb3dlciBjYXNlLAoKICAgICogYmxhbmtzICh3aGljaCBzaG91bGQgbm90IGJlIHRoZXJlIGFueXdheSkgYXJlIHRyYW5zbGF0ZWQgdG8gdW5kZXJzY29yZXMsCgogICAgKiBhIG5vcm1hbGl6YXRpb24gb2YgdGhlIElEIGlzIHBlcmZvcm1lZCwgYmFzZWQgdXBvbgogICAgICBgbm9ybWFsaXphdGlvbiB0YWJsZXNgXy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBub3JtYWxpemF0aW9uIGlzIHRvIGVuc3VyZQogICAgICB0aGF0IHRoZSBJRCBpcyBhcyByZWxpYWJsZSBhcyBwb3NzaWJsZSwgZXZlbiBhY3Jvc3MgaW5jb21wYXRpYmxlIGNoYW5nZXMKICAgICAgaW4gdGhlIE9TIGRpc3RyaWJ1dGlvbnMuIEEgY29tbW9uIHJlYXNvbiBmb3IgYW4gaW5jb21wYXRpYmxlIGNoYW5nZSBpcwogICAgICB0aGUgYWRkaXRpb24gb2YgYW4gb3MtcmVsZWFzZSBmaWxlLCBvciB0aGUgYWRkaXRpb24gb2YgdGhlIGxzYl9yZWxlYXNlCiAgICAgIGNvbW1hbmQsIHdpdGggSUQgdmFsdWVzIHRoYXQgZGlmZmVyIGZyb20gd2hhdCB3YXMgcHJldmlvdXNseSBkZXRlcm1pbmVkCiAgICAgIGZyb20gdGhlIGRpc3RybyByZWxlYXNlIGZpbGUgbmFtZS4KICAgICkCcgwAAADaAmlkcg8AAAByDwAAAHIPAAAAchAAAAByEQAAAIAAAABzAgAAAABMchEAAABGYwEAAAAAAAAAAQAAAAMAAABDAAAAcwoAAAB0AKABfAChAVMAKQFhawQAAAogICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBodW1hbi1yZWFkYWJsZQogICAgc3RyaW5nLgoKICAgIElmICpwcmV0dHkqIGlzIGZhbHNlLCB0aGUgbmFtZSBpcyByZXR1cm5lZCB3aXRob3V0IHZlcnNpb24gb3IgY29kZW5hbWUuCiAgICAoZS5nLiAiQ2VudE9TIExpbnV4IikKCiAgICBJZiAqcHJldHR5KiBpcyB0cnVlLCB0aGUgdmVyc2lvbiBhbmQgY29kZW5hbWUgYXJlIGFwcGVuZGVkLgogICAgKGUuZy4gIkNlbnRPUyBMaW51eCA3LjEuMTUwMyAoQ29yZSkiKQoKICAgICoqTG9va3VwIGhpZXJhcmNoeToqKgoKICAgIFRoZSBuYW1lIGlzIG9idGFpbmVkIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzLCBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyLgogICAgVGhlIGZpcnN0IGF2YWlsYWJsZSBhbmQgbm9uLWVtcHR5IHZhbHVlIGlzIHVzZWQ6CgogICAgKiBJZiAqcHJldHR5KiBpcyBmYWxzZToKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiTkFNRSIgYXR0cmlidXRlIG9mIHRoZSBvcy1yZWxlYXNlIGZpbGUsCgogICAgICAtIHRoZSB2YWx1ZSBvZiB0aGUgIkRpc3RyaWJ1dG9yIElEIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgICAgY29tbWFuZCwKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiPG5hbWU+IiBmaWVsZCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZS4KCiAgICAqIElmICpwcmV0dHkqIGlzIHRydWU6CgogICAgICAtIHRoZSB2YWx1ZSBvZiB0aGUgIlBSRVRUWV9OQU1FIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiRGVzY3JpcHRpb24iIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgICBjb21tYW5kLAoKICAgICAgLSB0aGUgdmFsdWUgb2YgdGhlICI8bmFtZT4iIGZpZWxkIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLCBhcHBlbmRlZAogICAgICAgIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwcmV0dHkgdmVyc2lvbiAoIjx2ZXJzaW9uX2lkPiIgYW5kICI8Y29kZW5hbWU+IgogICAgICAgIGZpZWxkcykgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUsIGlmIGF2YWlsYWJsZS4KICAgICkCcgwAAADaBG5hbWUpAdoGcHJldHR5cg8AAAByDwAAAHIQAAAAchIAAADPAAAAcwIAAAAAJHISAAAAYwIAAAAAAAAAAgAAAAQAAABDAAAAcwwAAAB0AKABfAB8AaECUwApAWF2BgAACiAgICBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLCBhcyBhIGh1bWFuLXJlYWRhYmxlCiAgICBzdHJpbmcuCgogICAgSWYgKnByZXR0eSogaXMgZmFsc2UsIHRoZSB2ZXJzaW9uIGlzIHJldHVybmVkIHdpdGhvdXQgY29kZW5hbWUgKGUuZy4KICAgICI3LjAiKS4KCiAgICBJZiAqcHJldHR5KiBpcyB0cnVlLCB0aGUgY29kZW5hbWUgaW4gcGFyZW50aGVzaXMgaXMgYXBwZW5kZWQsIGlmIHRoZQogICAgY29kZW5hbWUgaXMgbm9uLWVtcHR5IChlLmcuICI3LjAgKE1haXBvKSIpLgoKICAgIFNvbWUgZGlzdHJpYnV0aW9ucyBwcm92aWRlIHZlcnNpb24gbnVtYmVycyB3aXRoIGRpZmZlcmVudCBwcmVjaXNpb25zIGluCiAgICB0aGUgZGlmZmVyZW50IHNvdXJjZXMgb2YgZGlzdHJpYnV0aW9uIGluZm9ybWF0aW9uLiBFeGFtaW5pbmcgdGhlIGRpZmZlcmVudAogICAgc291cmNlcyBpbiBhIGZpeGVkIHByaW9yaXR5IG9yZGVyIGRvZXMgbm90IGFsd2F5cyB5aWVsZCB0aGUgbW9zdCBwcmVjaXNlCiAgICB2ZXJzaW9uIChlLmcuIGZvciBEZWJpYW4gOC4yLCBvciBDZW50T1MgNy4xKS4KCiAgICBUaGUgKmJlc3QqIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBhcHByb2FjaCBmb3IgdGhlIHJldHVybmVkCiAgICB2ZXJzaW9uOgoKICAgIElmICpiZXN0KiBpcyBmYWxzZSwgdGhlIGZpcnN0IG5vbi1lbXB0eSB2ZXJzaW9uIG51bWJlciBpbiBwcmlvcml0eSBvcmRlciBvZgogICAgdGhlIGV4YW1pbmVkIHNvdXJjZXMgaXMgcmV0dXJuZWQuCgogICAgSWYgKmJlc3QqIGlzIHRydWUsIHRoZSBtb3N0IHByZWNpc2UgdmVyc2lvbiBudW1iZXIgb3V0IG9mIGFsbCBleGFtaW5lZAogICAgc291cmNlcyBpcyByZXR1cm5lZC4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHk6KioKCiAgICBJbiBhbGwgY2FzZXMsIHRoZSB2ZXJzaW9uIG51bWJlciBpcyBvYnRhaW5lZCBmcm9tIHRoZSBmb2xsb3dpbmcgc291cmNlcy4KICAgIElmICpiZXN0KiBpcyBmYWxzZSwgdGhpcyBvcmRlciByZXByZXNlbnRzIHRoZSBwcmlvcml0eSBvcmRlcjoKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIlZFUlNJT05fSUQiIGF0dHJpYnV0ZSBvZiB0aGUgb3MtcmVsZWFzZSBmaWxlLAogICAgKiB0aGUgdmFsdWUgb2YgdGhlICJSZWxlYXNlIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgIGNvbW1hbmQsCiAgICAqIHRoZSB2ZXJzaW9uIG51bWJlciBwYXJzZWQgZnJvbSB0aGUgIjx2ZXJzaW9uX2lkPiIgZmllbGQgb2YgdGhlIGZpcnN0IGxpbmUKICAgICAgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUsCiAgICAqIHRoZSB2ZXJzaW9uIG51bWJlciBwYXJzZWQgZnJvbSB0aGUgIlBSRVRUWV9OQU1FIiBhdHRyaWJ1dGUgb2YgdGhlCiAgICAgIG9zLXJlbGVhc2UgZmlsZSwgaWYgaXQgZm9sbG93cyB0aGUgZm9ybWF0IG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlcy4KICAgICogdGhlIHZlcnNpb24gbnVtYmVyIHBhcnNlZCBmcm9tIHRoZSAiRGVzY3JpcHRpb24iIGF0dHJpYnV0ZSByZXR1cm5lZCBieQogICAgICB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCwgaWYgaXQgZm9sbG93cyB0aGUgZm9ybWF0IG9mIHRoZSBkaXN0cm8gcmVsZWFzZQogICAgICBmaWxlcy4KICAgICkCcgwAAADaB3ZlcnNpb24pAnITAAAA2gRiZXN0cg8AAAByDwAAAHIQAAAAchQAAAD2AAAAcwIAAAAAKXIUAAAAYwEAAAAAAAAAAQAAAAMAAABDAAAAcwoAAAB0AKABfAChAVMAKQFhoAEAAAogICAgUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiBhcyBhIHR1cGxlCiAgICBgYChtYWpvciwgbWlub3Is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c3RyaWJ1dGlvbiBpbiByZWdhcmRzIHRvIHBhY2thZ2luZwogICAgYW5kIHByb2dyYW1taW5nIGludGVyZmFjZXMsIGZvciBleGFtcGxlIGRpc3RyaWJ1dGlvbnMgdGhlIGN1cnJlbnQKICAgIGRpc3RyaWJ1dGlvbiBpcyBhIGRlcml2YXRpdmUgZnJvbS4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHk6KioKCiAgICBUaGlzIGluZm9ybWF0aW9uIGl0ZW0gaXMgb25seSBwcm92aWRlZCBieSB0aGUgb3MtcmVsZWFzZSBmaWxlLgogICAgRm9yIGRldGFpbHMsIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlICJJRF9MSUtFIiBhdHRyaWJ1dGUgaW4gdGhlCiAgICBgb3MtcmVsZWFzZSBtYW4gcGFnZQogICAgPGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N5c3RlbWQvbWFuL29zLXJlbGVhc2UuaHRtbD5gXy4KICAgICkCcgwAAADaBGxpa2VyDwAAAHIPAAAAcg8AAAByEAAAAHIaAAAAWgEAAHMCAAAAAA5yGgAAAGMAAAAAAAAAAAAAAAACAAAAQwAAAHMIAAAAdACgAaEAUwApAWGmAgAACiAgICBSZXR1cm4gdGhlIGNvZGVuYW1lIGZvciB0aGUgcmVsZWFzZSBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24sCiAgICBhcyBhIHN0cmluZy4KCiAgICBJZiB0aGUgZGlzdHJpYnV0aW9uIGRvZXMgbm90IGhhdmUgYSBjb2RlbmFtZSwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgoKICAgIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgY29kZW5hbWUgaXMgbm90IGFsd2F5cyByZWFsbHkgYSBjb2RlbmFtZS4gRm9yCiAgICBleGFtcGxlLCBvcGVuU1VTRSByZXR1cm5zICJ4ODZfNjQiLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBzdWNoCiAgICBjYXNlcyBpbiBhbnkgc3BlY2lhbCB3YXkgYW5kIGp1c3QgcmV0dXJucyB0aGUgc3RyaW5nIGl0IGZpbmRzLCBpZiBhbnkuCgogICAgKipMb29rdXAgaGllcmFyY2h5OioqCgogICAgKiB0aGUgY29kZW5hbWUgd2l0aGluIHRoZSAiVkVSU0lPTiIgYXR0cmlidXRlIG9mIHRoZSBvcy1yZWxlYXNlIGZpbGUsIGlmCiAgICAgIHByb3ZpZGVkLAoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiQ29kZW5hbWUiIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIjxjb2RlbmFtZT4iIGZpZWxkIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLgogICAgKQJyDAAAANoIY29kZW5hbWVyDwAAAHIPAAAAcg8AAAByEAAAAHIbAAAAawEAAHMCAAAAABVyGwAAAGMCAAAAAAAAAAIAAAAEAAAAQwAAAHMMAAAAdACgAXwAfAGhAlMAKQFh1AQAAAogICAgUmV0dXJuIGNlcnRhaW4gbWFjaGluZS1yZWFkYWJsZSBpbmZvcm1hdGlvbiBpdGVtcyBhYm91dCB0aGUgY3VycmVudCBPUwogICAgZGlzdHJpYnV0aW9uIGluIGEgZGljdGlvbmFyeSwgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgoKICAgIC4uIHNvdXJjZWNvZGU6OiBweXRob24KCiAgICAgICAgewogICAgICAgICAgICAnaWQnOiAncmhlbCcsCiAgICAgICAgICAgICd2ZXJzaW9uJzogJzcuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uX3BhcnRzJzogewogICAgICAgICAgICAgICAgJ21ham9yJzogJzcnLAogICAgICAgICAgICAgICAgJ21pbm9yJzogJzAnLAogICAgICAgICAgICAgICAgJ2J1aWxkX251bWJlcic6ICcnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdsaWtlJzogJ2ZlZG9yYScsCiAgICAgICAgICAgICdjb2RlbmFtZSc6ICdNYWlwbycKICAgICAgICB9CgogICAgVGhlIGRpY3Rpb25hcnkgc3RydWN0dXJlIGFuZCBrZXlzIGFyZSBhbHdheXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2gKICAgIGluZm9ybWF0aW9uIGl0ZW1zIGFyZSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgZGF0YSBzb3VyY2VzLiBUaGUgdmFsdWVzCiAgICBmb3IgdGhlIHZhcmlvdXMga2V5cyBhcmUgYXMgZm9sbG93czoKCiAgICAqIGBgaWRgYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5pZGAuCgogICAgKiBgYHZlcnNpb25gYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby52ZXJzaW9uYC4KCiAgICAqIGBgdmVyc2lvbl9wYXJ0cyAtPiBtYWpvcmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLm1ham9yX3ZlcnNpb25gLgoKICAgICogYGB2ZXJzaW9uX3BhcnRzIC0+IG1pbm9yYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubWlub3JfdmVyc2lvbmAuCgogICAgKiBgYHZlcnNpb25fcGFydHMgLT4gYnVpbGRfbnVtYmVyYGA6ICBUaGUgcmVzdWx0IG9mCiAgICAgIDpmdW5jOmBkaXN0cm8uYnVpbGRfbnVtYmVyYC4KCiAgICAqIGBgbGlrZWBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmxpa2VgLgoKICAgICogYGBjb2RlbmFtZWBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmNvZGVuYW1lYC4KCiAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgKnByZXR0eSogYW5kICpiZXN0KiBwYXJhbWV0ZXJzLCBzZWUgdGhlCiAgICA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gIG1ldGhvZC4KICAgICkCcgwAAADaBGluZm8pAnITAAAAchUAAAByDwAAAHIPAAAAchAAAAByHAAAAIMBAABzAgAAAAApchwAAABjAAAAAAAAAAAAAAAAAgAAAEMAAABzCAAAAHQAoAGhAFMAKQF64gogICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIGluZm9ybWF0aW9uIGl0ZW1zCiAgICBmcm9tIHRoZSBvcy1yZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLgoKICAgIFNlZSBgb3MtcmVsZWFzZSBmaWxlYF8gZm9yIGRldGFpbHMgYWJvdXQgdGhlc2UgaW5mb3JtYXRpb24gaXRlbXMuCiAgICApAnIMAAAA2g9vc19yZWxlYXNlX2luZm9yDwAAAHIPAAAAcg8AAAByEAAAAHIdAAAArwEAAHMCAAAAAAdyHQAAAGMAAAAAAAAAAAAAAAACAAAAQwAAAHMIAAAAdACgAaEAUwApAXr1CiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24gaXRlbXMKICAgIGZyb20gdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgZGF0YSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLgoKICAgIFNlZSBgbHNiX3JlbGVhc2UgY29tbWFuZCBvdXRwdXRgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbgogICAgaXRlbXMuCiAgICApAnIMAAAA2hBsc2JfcmVsZWFzZV9pbmZvcg8AAAByDwAAAHIPAAAAchAAAAByHgAAALkBAABzAgAAAAAIch4AAABjAAAAAAAAAAAAAAAAAgAAAEMAAABzCAAAAHQAoAGhAFMAKQF66gogICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIGluZm9ybWF0aW9uIGl0ZW1zCiAgICBmcm9tIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlIGRhdGEgc291cmNlIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbi4KCiAgICBTZWUgYGRpc3RybyByZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbiBpdGVtcy4KICAgICkCcgwAAADaE2Rpc3Ryb19yZWxlYXNlX2luZm9yDwAAAHIPAAAAcg8AAAByEAAAAHIfAAAAxAEAAHMCAAAAAAdyHwAAAGMAAAAAAAAAAAAAAAACAAAAQwAAAHMIAAAAdACgAaEAUwApAXqfCiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24gaXRlbXMKICAgIGZyb20gdGhlIGRpc3RybyByZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLgogICAgKQJyDAAAANoKdW5hbWVfaW5mb3IPAAAAcg8AAAByDwAAAHIQAAAAciAAAADOAQAAcwIAAAAABXIgAAAAYwEAAAAAAAAAAQAAAAMAAABDAAAAcwoAAAB0AKABfAChAVMAKQFhkwEAAAogICAgUmV0dXJuIGEgc2luZ2xlIG5hbWVkIGluZm9ybWF0aW9uIGl0ZW0gZnJvbSB0aGUgb3MtcmVsZWFzZSBmaWxlIGRhdGEgc291cmNlCiAgICBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24uCgogICAgUGFyYW1ldGVyczoKCiAgICAqIGBgYXR0cmlidXRlYGAgKHN0cmluZyk6IEtleSBvZiB0aGUgaW5mb3JtYXRpb24gaXRlbS4KCiAgICBSZXR1cm5zOgoKICAgICogKHN0cmluZyk6IFZhbHVlIG9mIHRoZSBpbmZvcm1hdGlvbiBpdGVtLCBpZiB0aGUgaXRlbSBleGlzdHMuCiAgICAgIFRoZSBlbXB0eSBzdHJpbmcsIGlmIHRoZSBpdGVtIGRvZXMgbm90IGV4aXN0LgoKICAgIFNlZSBgb3MtcmVsZWFzZSBmaWxlYF8gZm9yIGRldGFpbHMgYWJvdXQgdGhlc2UgaW5mb3JtYXRpb24gaXRlbXMuCiAgICApAnIMAAAA2g9vc19yZWxlYXNlX2F0dHIpAdoJYXR0cmlidXRlcg8AAAByDwAAAHIQAAAAciEAAADWAQAAcwIAAAAAEHIhAAAAYwEAAAAAAAAAAQAAAAMAAABDAAAAcwoAAAB0AKABfAChAVMAKQFhrQEAAAogICAgUmV0dXJuIGEgc2luZ2xlIG5hbWVkIGluZm9ybWF0aW9uIGl0ZW0gZnJvbSB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCBvdXRwdXQKICAgIGRhdGEgc291cmNlIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbi4KCiAgICBQYXJhbWV0ZXJzOgoKICAgICogYGBhdHRyaWJ1dGVgYCAoc3RyaW5nKTogS2V5IG9mIHRoZSBpbmZvcm1hdGlvbiBpdGVtLgoKICAgIFJldHVybnM6CgogICAgKiAoc3RyaW5nKTogVmFsdWUgb2YgdGhlIGluZm9ybWF0aW9uIGl0ZW0sIGlmIHRoZSBpdGVtIGV4aXN0cy4KICAgICAgVGhlIGVtcHR5IHN0cmluZywgaWYgdGhlIGl0ZW0gZG9lcyBub3QgZXhpc3QuCgogICAgU2VlIGBsc2JfcmVsZWFzZSBjb21tYW5kIG91dHB1dGBfIGZvciBkZXRhaWxzIGFib3V0IHRoZXNlIGluZm9ybWF0aW9uCiAgICBpdGVtcy4KICAgICkCcgwAAADaEGxzYl9yZWxlYXNlX2F0dHIpAXIiAAAAcg8AAAByDwAAAHIQAAAAciMAAADpAQAAcwIAAAAAEXIjAAAAYwEAAAAAAAAAAQAAAAMAAABDAAAAcwoAAAB0AKABfAChAVMAKQFhmwEAAAogICAgUmV0dXJuIGEgc2luZ2xlIG5hbWVkIGluZm9ybWF0aW9uIGl0ZW0gZnJvbSB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZQogICAgZGF0YSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLgoKICAgIFBhcmFtZXRlcnM6CgogICAgKiBgYGF0dHJpYnV0ZWBgIChzdHJpbmcpOiBLZXkgb2YgdGhlIGluZm9ybWF0aW9uIGl0ZW0uCgogICAgUmV0dXJuczoKCiAgICAqIChzdHJpbmcpOiBWYWx1ZSBvZiB0aGUgaW5mb3JtYXRpb24gaXRlbSwgaWYgdGhlIGl0ZW0gZXhpc3RzLgogICAgICBUaGUgZW1wdHkgc3RyaW5nLCBpZiB0aGUgaXRlbSBkb2VzIG5vdCBleGlzdC4KCiAgICBTZWUgYGRpc3RybyByZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbiBpdGVtcy4KICAgICkCcgwAAADaE2Rpc3Ryb19yZWxlYXNlX2F0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ICAgIGBjb25zb2xpZGF0ZWQgYWNjZXNzb3IgZnVuY3Rpb25zYF8gYW5kIGBzaW5nbGUgc291cmNlIGFjY2Vzc29yIGZ1bmN0aW9uc2BfLgogICAgQnkgdXNpbmcgZGVmYXVsdCBpbml0aWFsaXphdGlvbiBhcmd1bWVudHMsIHRoYXQgbW9kdWxlLWdsb2JhbCBpbnN0YW5jZQogICAgcmV0dXJucyBkYXRhIGFib3V0IHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiAoaS5lLiB0aGUgZGlzdHJvIHRoaXMKICAgIHBhY2thZ2UgcnVucyBvbikuCgogICAgTm9ybWFsbHksIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY3JlYXRlIGFkZGl0aW9uYWwgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MuCiAgICBIb3dldmVyLCBpbiBzaXR1YXRpb25zIHdoZXJlIGNvbnRyb2wgaXMgbmVlZGVkIG92ZXIgdGhlIGV4YWN0IGRhdGEgc291cmNlcwogICAgdGhhdCBhcmUgdXNlZCwgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgY2FuIGJlIGNyZWF0ZWQgd2l0aCBhIHNwZWNpZmljCiAgICBkaXN0cm8gcmVsZWFzZSBmaWxlLCBvciBhIHNwZWNpZmljIG9zLXJlbGVhc2UgZmlsZSwgb3Igd2l0aG91dCBpbnZva2luZyB0aGUKICAgIGxzYl9yZWxlYXNlIGNvbW1hbmQuCiAgICBU2gBjBQAAAAAAAAAFAAAABAAAAEMAAABzLgAAAHwCcBB0AGoBoAJ0A3QEoQJ8AF8FfANwGmQBfABfBnwBfABfB3wEfABfCGQCUwApA2FwCwAACiAgICAgICAgVGhlIGluaXRpYWxpemF0aW9uIG1ldGhvZCBvZiB0aGlzIGNsYXNzIGdhdGhlcnMgaW5mb3JtYXRpb24gZnJvbSB0aGUKICAgICAgICBhdmFpbGFibGUgZGF0YSBzb3VyY2VzLCBhbmQgc3RvcmVzIHRoYXQgaW4gcHJpdmF0ZSBpbnN0YW5jZSBhdHRyaWJ1dGVzLgogICAgICAgIFN1YnNlcXVlbnQgYWNjZXNzIHRvIHRoZSBpbmZvcm1hdGlvbiBpdGVtcyB1c2VzIHRoZXNlIHByaXZhdGUgaW5zdGFuY2UKICAgICAgICBhdHRyaWJ1dGVzLCBzbyB0aGF0IHRoZSBkYXRhIHNvdXJjZXMgYXJlIHJlYWQgb25seSBvbmNlLgoKICAgICAgICBQYXJhbWV0ZXJzOgoKICAgICAgICAqIGBgaW5jbHVkZV9sc2JgYCAoYm9vbCk6IENvbnRyb2xzIHdoZXRoZXIgdGhlCiAgICAgICAgICBgbHNiX3JlbGVhc2UgY29tbWFuZCBvdXRwdXRgXyBpcyBpbmNsdWRlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAgIElmIHRoZSBsc2JfcmVsZWFzZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHByb2dyYW0gZXhlY3V0aW9uCiAgICAgICAgICBwYXRoLCB0aGUgZGF0YSBzb3VyY2UgZm9yIHRoZSBsc2JfcmVsZWFzZSBjb21tYW5kIHdpbGwgYmUgZW1wdHkuCgogICAgICAgICogYGBvc19yZWxlYXNlX2ZpbGVgYCAoc3RyaW5nKTogVGhlIHBhdGggbmFtZSBvZiB0aGUKICAgICAgICAgIGBvcy1yZWxlYXNlIGZpbGVgXyB0aGF0IGlzIHRvIGJlIHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgICBBbiBlbXB0eSBzdHJpbmcgKHRoZSBkZWZhdWx0KSB3aWxsIGNhdXNlIHRoZSBkZWZhdWx0IHBhdGggbmFtZSB0bwogICAgICAgICAgYmUgdXNlZCAoc2VlIGBvcy1yZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscykuCgogICAgICAgICAgSWYgdGhlIHNwZWNpZmllZCBvciBkZWZhdWx0ZWQgb3MtcmVsZWFzZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUKICAgICAgICAgIGRhdGEgc291cmNlIGZvciB0aGUgb3MtcmVsZWFzZSBmaWxlIHdpbGwgYmUgZW1wdHkuCgogICAgICAgICogYGBkaXN0cm9fcmVsZWFzZV9maWxlYGAgKHN0cmluZyk6IFRoZSBwYXRoIG5hbWUgb2YgdGhlCiAgICAgICAgICBgZGlzdHJvIHJlbGVhc2UgZmlsZWBfIHRoYXQgaXMgdG8gYmUgdXNlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAgIEFuIGVtcHR5IHN0cmluZyAodGhlIGRlZmF1bHQpIHdpbGwgY2F1c2UgYSBkZWZhdWx0IHNlYXJjaCBhbGdvcml0aG0KICAgICAgICAgIHRvIGJlIHVzZWQgKHNlZSBgZGlzdHJvIHJlbGVhc2UgZmlsZWBfIGZvciBkZXRhaWxzKS4KCiAgICAgICAgICBJZiB0aGUgc3BlY2lmaWVkIGRpc3RybyByZWxlYXNlIGZpbGUgZG9lcyBub3QgZXhpc3QsIG9yIGlmIG5vIGRlZmF1bHQKICAgICAgICAgIGRpc3RybyByZWxlYXNlIGZpbGUgY2FuIGJlIGZvdW5kLCB0aGUgZGF0YSBzb3VyY2UgZm9yIHRoZSBkaXN0cm8KICAgICAgICAgIHJlbGVhc2UgZmlsZSB3aWxsIGJlIGVtcHR5LgoKICAgICAgICAqIGBgaW5jbHVkZV91bmFtZWBgIChib29sKTogQ29udHJvbHMgd2hldGhlciB1bmFtZSBjb21tYW5kIG91dHB1dCBpcwogICAgICAgICAgaW5jbHVkZWQgYXMgYSBkYXRhIHNvdXJjZS4gSWYgdGhlIHVuYW1lIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbgogICAgICAgICAgdGhlIHByb2dyYW0gZXhlY3V0aW9uIHBhdGggdGhlIGRhdGEgc291cmNlIGZvciB0aGUgdW5hbWUgY29tbWFuZCB3aWxsCiAgICAgICAgICBiZSBlbXB0eS4KCiAgICAgICAgUHVibGljIGluc3RhbmNlIGF0dHJpYnV0ZXM6CgogICAgICAgICogYGBvc19yZWxlYXNlX2ZpbGVgYCAoc3RyaW5nKTogVGhlIHBhdGggbmFtZSBvZiB0aGUKICAgICAgICAgIGBvcy1yZWxlYXNlIGZpbGVgXyB0aGF0IGlzIGFjdHVhbGx5IHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4gVGhlCiAgICAgICAgICBlbXB0eSBzdHJpbmcgaWYgbm8gZGlzdHJvIHJlbGVhc2UgZmlsZSBpcyB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICogYGBkaXN0cm9fcmVsZWFzZV9maWxlYGAgKHN0cmluZyk6IFRoZSBwYXRoIG5hbWUgb2YgdGhlCiAgICAgICAgICBgZGlzdHJvIHJlbGVhc2UgZmlsZWBfIHRoYXQgaXMgYWN0dWFsbHkgdXNlZCBhcyBhIGRhdGEgc291cmNlLiBUaGUKICAgICAgICAgIGVtcHR5IHN0cmluZyBpZiBubyBkaXN0cm8gcmVsZWFzZSBmaWxlIGlzIHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgKiBgYGluY2x1ZGVfbHNiYGAgKGJvb2wpOiBUaGUgcmVzdWx0IG9mIHRoZSBgYGluY2x1ZGVfbHNiYGAgcGFyYW1ldGVyLgogICAgICAgICAgVGhpcyBjb250cm9scyB3aGV0aGVyIHRoZSBsc2IgaW5mb3JtYXRpb24gd2lsbCBiZSBsb2FkZWQuCgogICAgICAgICogYGBpbmNsdWRlX3VuYW1lYGAgKGJvb2wpOiBUaGUgcmVzdWx0IG9mIHRoZSBgYGluY2x1ZGVfdW5hbWVgYAogICAgICAgICAgcGFyYW1ldGVyLiBUaGlzIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHVuYW1lIGluZm9ybWF0aW9uIHdpbGwKICAgICAgICAgIGJlIGxvYWRlZC4KCiAgICAgICAgUmFpc2VzOgoKICAgICAgICAqIDpweTpleGM6YElPRXJyb3JgOiBTb21lIEkvTyBpc3N1ZSB3aXRoIGFuIG9zLXJlbGVhc2UgZmlsZSBvciBkaXN0cm8KICAgICAgICAgIHJlbGVhc2UgZmlsZS4KCiAgICAgICAgKiA6cHk6ZXhjOmBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcmA6IFRoZSBsc2JfcmVsZWFzZSBjb21tYW5kIGhhZAogICAgICAgICAgc29tZSBpc3N1ZSAob3RoZXIgdGhhbiBub3QgYmVpbmcgYXZhaWxhYmxlIGluIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbgogICAgICAgICAgcGF0aCkuCgogICAgICAgICogOnB5OmV4YzpgVW5pY29kZUVycm9yYDogQSBkYXRhIHNvdXJjZSBoYXMgdW5leHBlY3RlZCBjaGFyYWN0ZXJzIG9yCiAgICAgICAgICB1c2VzIGFuIHVuZXhwZWN0ZWQgZW5jb2RpbmcuCiAgICAgICAgcjgAAABOKQnaAm9z2gRwYXRo2gRqb2lu2gxfVU5JWENPTkZESVLaFF9PU19SRUxFQVNFX0JBU0VOQU1F2g9vc19yZWxlYXNlX2ZpbGXaE2Rpc3Ryb19yZWxlYXNlX2ZpbGXaC2luY2x1ZGVfbHNi2g1pbmNsdWRlX3VuYW1lKQVyKgAAAHJAAAAAcj4AAAByPwAAAHJBAAAAcg8AAAByDwAAAHIQAAAAciwAAABCAgAAcwoAAAAASAQBEAEKAQYBehpMaW51eERpc3RyaWJ1dGlvbi5fX2luaXRfX2MBAAAAAAAAAAEAAAADAAAAQwAAAHMMAAAAZAFqAHwAZAKNAVMAKQN6IFJldHVybiByZXByIG9mIGFsbCBpbmZvCiAgICAgICAgYWUBAABMaW51eERpc3RyaWJ1dGlvbihvc19yZWxlYXNlX2ZpbGU9e3NlbGYub3NfcmVsZWFzZV9maWxlIXJ9LCBkaXN0cm9fcmVsZWFzZV9maWxlPXtzZWxmLmRpc3Ryb19yZWxlYXNlX2ZpbGUhcn0sIGluY2x1ZGVfbHNiPXtzZWxmLmluY2x1ZGVfbHNiIXJ9LCBpbmNsdWRlX3VuYW1lPXtzZWxmLmluY2x1ZGVfdW5hbWUhcn0sIF9vc19yZWxlYXNlX2luZm89e3NlbGYuX29zX3JlbGVhc2VfaW5mbyFyfSwgX2xzYl9yZWxlYXNlX2luZm89e3NlbGYuX2xzYl9yZWxlYXNlX2luZm8hcn0sIF9kaXN0cm9fcmVsZWFzZV9pbmZvPXtzZWxmLl9kaXN0cm9fcmVsZWFzZV9pbmZvIXJ9LCBfdW5hbWVfaW5mbz17c2VsZi5fdW5hbWVfaW5mbyFyfSkpAXIqAAAAKQFyLgAAACkBcioAAAByDwAAAHIPAAAAchAAAADaCF9fcmVwcl9fkAIAAHMEAAAAAAQECXoaTGludXhEaXN0cmlidXRpb24uX19yZXByX19jAgAAAAAAAAACAAAABAAAAEMAAABzIgAAAHwBcgx8AKAAoQBuBnwAoAGhAHwAoAKhAHwAoAOhAGYDUwApAXr4CiAgICAgICAgUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBPUyBkaXN0cmlidXRpb24gdGhhdCBpcyBjb21wYXRpYmxlCiAgICAgICAgd2l0aCBQeXRob24ncyA6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uYCwgc3VwcG9ydGluZyBhIHN1YnNldAogICAgICAgIG9mIGl0cyBwYXJhbWV0ZXJzLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8ubGludXhfZGlzdHJpYnV0aW9uYC4KICAgICAgICApBHISAAAAchEAAAByFAAAAHIbAAAAKQJyKgAAAHIOAAAAcg8AAAByDwAAAHIQAAAAcg0AAACfAgAAcwYAAAAACRIBBgF6JExpbnV4RGlzdHJpYnV0aW9uLmxpbnV4X2Rpc3RyaWJ1dGlvbmMBAAAAAAAAAAMAAAADAAAAQwAAAHNsAAAAZAFkAoQAfQF8AKAAZAOhAX0CfAJyIHwBfAJ0AYMCUwB8AKACZAShAX0CfAJyOHwBfAJ0A4MCUwB8AKAEZAOhAX0CfAJyUHwBfAJ0BYMCUwB8AKAGZAOhAX0CfAJyaHwBfAJ0BYMCUwBkBVMAKQZ6b1JldHVybiB0aGUgZGlzdHJvIElEIG9mIHRoZSBPUyBkaXN0cmlidXRpb24sIGFzIGEgc3RyaW5nLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8uaWRgLgogICAgICAgIGMCAAAAAAAAAAIAAAAEAAAAUwAAAHMcAAAAfACgAKEAoAFkAWQCoQJ9AHwBoAJ8AHwAoQJTACkDTvoBINoBXykD2gVsb3dlctoHcmVwbGFjZdoDZ2V0KQLaCWRpc3Ryb19pZNoFdGFibGVyDwAAAHIPAAAAchAAAADaCW5vcm1hbGl6ZbICAABzBAAAAAABEAF6J0xpbnV4RGlzdHJpYnV0aW9uLmlkLjxsb2NhbHM+Lm5vcm1hbGl6ZXIRAAAA2g5kaXN0cmlidXRvcl9pZHI4AAAAKQdyIQAAANoQTk9STUFMSVpFRF9PU19JRHIjAAAA2hFOT1JNQUxJWkVEX0xTQl9JRHIkAAAA2hROT1JNQUxJWkVEX0RJU1RST19JRHIlAAAAKQNyKgAAAHJKAAAAckgAAAByDwAAAHIPAAAAchAAAAByEQAAAK0CAABzHAAAAAAFCAQKAQQBCgIKAQQBCgIKAQQBCgIKAQQBCgJ6FExpbnV4RGlzdHJpYnV0aW9uLmlkRmMCAAAAAAAAAAQAAAADAAAAQwAAAHN8AAAAfACgAGQBoQFwJnwAoAFkAqEBcCZ8AKACZAGhAXAmfACgA2QBoQF9AnwBcnR8AKAAZAOhAXA+fACgAWQEoQF9AnwCc3R8AKACZAGhAXBWfACgA2QBoQF9AnwAagRkBWQGjQF9A3wDcnR8AmQHFwB8AxcAfQJ8AnB6ZAhTACkJenUKICAgICAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBzdHJpbmcuCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5uYW1lYC4KICAgICAgICByEgAAAHJLAAAA2gtwcmV0dHlfbmFtZdoLZGVzY3JpcHRpb25UKQFyEwAAAHJDAAAAcjgAAAApBXIhAAAAciMAAAByJAAAAHIlAAAAchQAAAApBHIqAAAAchMAAAByEgAAAHIUAAAAcg8AAAByDwAAAHIQAAAAchIAAADIAgAAcxwAAAAABgoBCgEKAQoBBAEKAQoBBAEKAQoBDAEEAQwBehZMaW51eERpc3RyaWJ1dGlvbi5uYW1lYwMAAAAAAAAABgAAAAkAAABDAAAAc8gAAAB8AKAAZAGhAXwAoAFkAqEBfACgAmQBoQF8AKADfACgAGQDoQGhAaAEZAFkBKECfACgA3wAoAFkBaEBoQGgBGQBZAShAnwAoAVkAqEBZwZ9A2QEfQR8AnKIeEp8A0QAXSR9BXwFoAZkBqEBfASgBmQGoQFrBHN+fARkBGsCcl58BX0EcV5XAG4ceBp8A0QAXRJ9BXwFZARrA3KOfAV9BFAAcY5XAHwBcsR8BHLEfACgB6EAcsRkB6AIfAR8AKAHoQChAn0EfARTACkIensKICAgICAgICBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBzdHJpbmcuCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby52ZXJzaW9uYC4KICAgICAgICDaCnZlcnNpb25faWTaB3JlbGVhc2VyTwAAAHI4AAAAclAAAADaAS56CXswfSAoezF9KSkJciEAAAByIwAAAHIkAAAA2h1fcGFyc2VfZGlzdHJvX3JlbGVhc2VfY29udGVudHJHAAAAciUAAADaBWNvdW50chsAAAByLgAAACkGcioAAAByEwAAAHIVAAAA2gh2ZXJzaW9uc3IUAAAA2gF2cg8AAAByDwAAAHIQAAAAchQAAADdAgAAcygAAAAABwgBCAEIAQQBEgEEARIBDAIEAQQFCgEcAQoCCgEIAQQBBgEQARABehlMaW51eERpc3RyaWJ1dGlvbi52ZXJzaW9uYwIAAAAAAAAACAAAAAMAAABDAAAAc0wAAAB8AGoAfAFkAY0BfQJ8AnJIdAGgAmQCoQF9A3wDoAN8AqEBfQR8BHJIfASgBKEAXAN9BX0GfQd8BXwGcD5kA3wHcERkA2YDUwBkBFMAKQV6mwogICAgICAgIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgT1MgZGlzdHJpYnV0aW9uLCBhcyBhIHR1cGxlIG9mIHZlcnNpb24KICAgICAgICBudW1iZXJzLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8udmVyc2lvbl9wYXJ0c2AuCiAgICAgICAgKQFyFQAAAHoXKFxkKylcLj8oXGQrKT9cLj8oXGQrKT9yOAAAACkDcjgAAAByOAAAAHI4AAAAKQVyFAAAANoCcmXaB2NvbXBpbGXaBW1hdGNo2gZncm91cHMpCHIqAAAAchUAAADaC3ZlcnNpb25fc3Ry2g12ZXJzaW9uX3JlZ2V42gdtYXRjaGVz2gVtYWpvctoFbWlub3JyGQAAAHIPAAAAcg8AAAByEAAAAHIWAAAA/wIAAHMQAAAAAAcMAQQBCgEKAQQBDgESAXofTGludXhEaXN0cmlidXRpb24udmVyc2lvbl9wYXJ0c2MCAAAAAAAAAAIAAAADAAAAQwAAAHMOAAAAfACgAHwBoQFkARkAUwApAnqGCiAgICAgICAgUmV0dXJuIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgY3VycmVudCBkaXN0cmlidXRpb24uCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5tYWpvcl92ZXJzaW9uYC4KICAgICAgICByAQAAACkBchYAAAApAnIqAAAAchUAAAByDwAAAHIPAAAAchAAAAByFwAAAA8DAABzAgAAAAAGeh9MaW51eERpc3RyaWJ1dGlvbi5tYWpvcl92ZXJzaW9uYwIAAAAAAAAAAgAAAAMAAABDAAAAcw4AAAB8AKAAfAGhAWQBGQBTACkCeoYKICAgICAgICBSZXR1cm4gdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLm1pbm9yX3ZlcnNpb25gLgogICAgICAgIOkBAAAAKQFyFgAAACkCcioAAAByFQAAAHIPAAAAcg8AAAByEAAAAHIYAAAAFwMAAHMCAAAAAAZ6H0xpbnV4RGlzdHJpYnV0aW9uLm1pbm9yX3ZlcnNpb25jAgAAAAAAAAACAAAAAwAAAEMAAABzDgAAAHwAoAB8AaEBZAEZAFMAKQJ6fQogICAgICAgIFJldHVybiB0aGUgYnVpbGQgbnVtYmVyIG9mIHRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLmJ1aWxkX251bWJlcmAuCiAgICAgICAg6QIAAAApAXIWAAAAKQJyKgAAAHIVAAAAcg8AAAByDwAAAHIQAAAAchkAAAAfAwAAcwIAAAAABnoeTGludXhEaXN0cmlidXRpb24uYnVpbGRfbnVtYmVyYwEAAAAAAAAAAQAAAAMAAABDAAAAcw4AAAB8AKAAZAGhAXAMZAJTACkDeoMKICAgICAgICBSZXR1cm4gdGhlIElEcyBvZiBkaXN0cmlidXRpb25zIHRoYXQgYXJlIGxpa2UgdGhlIE9TIGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLmxpa2VgLgogICAgICAgINoHaWRfbGlrZXI4AAAAKQFyIQAAACkBcioAAAByDwAAAHIPAAAAchAAAAByGgAAACcDAABzAgAAAAAGehZMaW51eERpc3RyaWJ1dGlvbi5saWtlYwEAAAAAAAAAAQAAAAgAAABDAAAAczgAAAB5CnwAagBkARkAUwAEAHQBawpyMgEAAQABAHwAoAJkAaEBcDB8AKADZAGhAXAwZAJTAFgAZANTACkEenAKICAgICAgICBSZXR1cm4gdGhlIGNvZGVuYW1lIG9mIHRoZSBPUyBkaXN0cmlidXRpb24uCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5jb2RlbmFtZWAuCiAgICAgICAgchsAAAByOAAAAE4pBNoQX29zX3JlbGVhc2VfaW5mb9oIS2V5RXJyb3JyIwAAAHIkAAAAKQFyKgAAAHIPAAAAcg8AAAByEAAAAHIbAAAALwMAAHMMAAAAAAYCAwoBDgEKAQoBehpMaW51eERpc3RyaWJ1dGlvbi5jb2RlbmFtZWMDAAAAAAAAAAMAAAAJAAAAQwAAAHNCAAAAdAB8AKABoQB8AKACfAF8AqECdAB8AKADfAKhAXwAoAR8AqEBfACgBXwCoQFkAY0DfACgBqEAfACgB6EAZAKNBVMAKQN6jwogICAgICAgIFJldHVybiBjZXJ0YWluIG1hY2hpbmUtcmVhZGFibGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE9TCiAgICAgICAgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8uaW5mb2AuCiAgICAgICAgKQNyXwAAAHJgAAAAchkAAAApBXIRAAAAchQAAAByFgAAAHIaAAAAchsAAAApCNoEZGljdHIRAAAAchQAAAByFwAAAHIYAAAAchkAAAByGgAAAHIbAAAAKQNyKgAAAHITAAAAchUAAAByDwAAAHIPAAAAchAAAAByHAAAAD4DAABzEgAAAAAHAgEGAQoBAgEIAQgBDAIGAXoWTGludXhEaXN0cmlidXRpb24uaW5mb2MBAAAAAAAAAAEAAAABAAAAQwAAAHMGAAAAfABqAFMAKQF62QogICAgICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbgogICAgICAgIGl0ZW1zIGZyb20gdGhlIG9zLXJlbGVhc2UgZmlsZSBkYXRhIHNvdXJjZSBvZiB0aGUgT1MgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8ub3NfcmVsZWFzZV9pbmZvYC4KICAgICAgICApAXJkAAAAKQFyKgAAAHIPAAAAcg8AAAByEAAAAHIdAAAAUQMAAHMCAAAAAAd6IUxpbnV4RGlzdHJpYnV0aW9uLm9zX3JlbGVhc2VfaW5mb2MBAAAAAAAAAAEAAAABAAAAQwAAAHMGAAAAfABqAFMAKQF65gogICAgICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbgogICAgICAgIGl0ZW1zIGZyb20gdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgZGF0YSBzb3VyY2Ugb2YgdGhlIE9TCiAgICAgICAgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8ubHNiX3JlbGVhc2VfaW5mb2AuCiAgICAgICAgKQHaEV9sc2JfcmVsZWFzZV9pbmZvKQFyKgAAAHIPAAAAcg8AAAByEAAAAHIeAAAAWgMAAHMCAAAAAAh6IkxpbnV4RGlzdHJpYnV0aW9uLmxzYl9yZWxlYXNlX2luZm9jAQAAAAAAAAABAAAAAQAAAEMAAABzBgAAAHwAagBTACkBeukKICAgICAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24KICAgICAgICBpdGVtcyBmcm9tIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlIGRhdGEgc291cmNlIG9mIHRoZSBPUwogICAgICAgIGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLmRpc3Ryb19yZWxlYXNlX2luZm9gLgogICAgICAgICkB2hRfZGlzdHJvX3JlbGVhc2VfaW5mbykBcioAAAByDwAAAHIPAAAAchAAAAByHwAAAGQDAABzAgAAAAAIeiVMaW51eERpc3RyaWJ1dGlvbi5kaXN0cm9fcmVsZWFzZV9pbmZvYwEAAAAAAAAAAQAAAAEAAABDAAAAcwYAAAB8AGoAUwApAXrSCiAgICAgICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBw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eqAKICAgICAgICBHZXQgdGhlIGluZm9ybWF0aW9uIGl0ZW1zIGZyb20gdGhlIHNwZWNpZmllZCBkaXN0cm8gcmVsZWFzZSBmaWxlLgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBhbGwgaW5mb3JtYXRpb24gaXRlbXMuCiAgICAgICAgchIAAADaCmNsb3VkbGludXhyEQAAAHJhAAAAegxTdVNFLXJlbGVhc2V6DGFyY2gtcmVsZWFzZXoMYmFzZS1yZWxlYXNleg5jZW50b3MtcmVsZWFzZXoOZmVkb3JhLXJlbGVhc2V6DmdlbnRvby1yZWxlYXNleg5tYWdlaWEtcmVsZWFzZXoQbWFuZHJha2UtcmVsZWFzZXoQbWFuZHJpdmEtcmVsZWFzZXoVbWFuZHJpdmFsaW51eC1yZWxlYXNleg9tYW5qYXJvLXJlbGVhc2V6Dm9yYWNsZS1yZWxlYXNleg5yZWRoYXQtcmVsZWFzZXoKc2wtcmVsZWFzZXoRc2xhY2t3YXJlLXZlcnNpb25OKQ9yPwAAANoaX3BhcnNlX2Rpc3Ryb19yZWxlYXNlX2ZpbGVyOQAAAHI6AAAA2ghiYXNlbmFtZdogX0RJU1RST19SRUxFQVNFX0JBU0VOQU1FX1BBVFRFUk5yWgAAAHJFAAAAcn4AAADaB2xpc3RkaXJyPAAAANoEc29ydHKMAAAA2iBfRElTVFJPX1JFTEVBU0VfSUdOT1JFX0JBU0VOQU1FU3I7AAAAKQZyKgAAANoLZGlzdHJvX2luZm9ypQAAAHJaAAAA2gliYXNlbmFtZXPaCGZpbGVwYXRocg8AAAByDwAAAHIQAAAAcmgAAAA+BAAAc1gAAAAACAYDBAEIAQ4FCgEIARABCgEEAQ4BBAICAQoEDAEOBQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgEMAQoBCAECAQoBBAEOAQoBCAIGAQ4BEgEIAQgBeiZMaW51eERpc3RyaWJ1dGlvbi5fZGlzdHJvX3JlbGVhc2VfaW5mb2MCAAAAAAAAAAMAAAAJAAAAQwAAAHNAAAAAeSJ0AHwBgwGPEH0CfACgAXwCoAKhAKEBUwBRAFIAWABXAG4YBAB0A3QEZgJrCnI6AQABAAEAaQBTAFgAZAFT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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 8
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
appdirs.cpython-37.pyc
21.05 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
contextlib2.cpython-37.pyc
15.04 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
distro.cpython-37.pyc
35.81 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ipaddress.cpython-37.pyc
64.93 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-37.pyc
236.85 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
retrying.cpython-37.pyc
7.93 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-37.pyc
26.31 KB
lrw-r--r--
2023-11-13 21:31:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
2.93 KB
lrw-r--r--
2023-11-13 21:31:06
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).