REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 54.61 KB
Close
/opt/alt/python37/lib64/python3.7/site-packages/numpy/polynomial/__pycache__/legendre.cpython-37.pyc
Text
Base64
Qg0NCgAAAADB2EZkb98AAOMAAAAAAAAAAAAAAAAfAAAAQAAAAHPEAQAAZABaAGQBZAJsAW0CWgJtA1oDbQRaBAEAZAFkA2wFWgVkAWQDbAZaB2QBZANsCG0JWgoBAGQBZARsC20MWgwBAGQFZAZsDW0OWg8BAGQFZAdsEG0RWhEBAGQIZAlkCmQLZAxkDWQOZA9kEGQRZBJkE2QUZBVkFmQXZBhkGWQaZBtkHGQdZB5kH2QgZCFkImQjZCRkJWQmZx9aEmUPahNaFGQnZBeEAFoVZChkFoQAWhZlB6AXZClkBWcCoQFaGGUHoBdkAWcBoQFaGWUHoBdkBWcBoQFaGmUHoBdkAWQFZwKhAVobZCpkDIQAWhxkK2QYhABaHWQsZA2EAFoeZC1kDoQAWh9kLmQPhABaIGQvZBCEAFohZDBkEYQAWiJkRWQyZBKEAVojZEZkM2QUhAFaJGQFZwBkAWQFZAFmBWQ0ZBWEAVolZEdkNmQThAFaJmQ3ZB6EAFonZDhkIIQAWihkOWQfhABaKWQ6ZCGEAFoqZDtkGYQAWitkPGQihABaLGQ9ZCOEAFotZEhkP2QahAFaLmRAZCSEAFovZEFkHIQAWjBkQmQlhABaMWRDZCaEAFoyRwBkRGQdhABkHWURgwNaM2QDUwApSWHICwAACkxlZ2VuZHJlIFNlcmllcyAoOm1vZDogYG51bXB5LnBvbHlub21pYWwubGVnZW5kcmVgKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi4uIGN1cnJlbnRtb2R1bGU6OiBudW1weS5wb2x5bm9taWFsLnBvbHlub21pYWwKClRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgbnVtYmVyIG9mIG9iamVjdHMgKG1vc3RseSBmdW5jdGlvbnMpIHVzZWZ1bCBmb3IKZGVhbGluZyB3aXRoIExlZ2VuZHJlIHNlcmllcywgaW5jbHVkaW5nIGEgYExlZ2VuZHJlYCBjbGFzcyB0aGF0CmVuY2Fwc3VsYXRlcyB0aGUgdXN1YWwgYXJpdGhtZXRpYyBvcGVyYXRpb25zLiAgKEdlbmVyYWwgaW5mb3JtYXRpb24Kb24gaG93IHRoaXMgbW9kdWxlIHJlcHJlc2VudHMgYW5kIHdvcmtzIHdpdGggc3VjaCBwb2x5bm9taWFscyBpcyBpbiB0aGUKZG9jc3RyaW5nIGZvciBpdHMgInBhcmVudCIgc3ViLXBhY2thZ2UsIGBudW1weS5wb2x5bm9taWFsYCkuCgpDb25zdGFudHMKLS0tLS0tLS0tCgouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICBsZWdkb21haW4gICAgICAgICAgICBMZWdlbmRyZSBzZXJpZXMgZGVmYXVsdCBkb21haW4sIFstMSwxXS4KICAgbGVnemVybyAgICAgICAgICAgICAgTGVnZW5kcmUgc2VyaWVzIHRoYXQgZXZhbHVhdGVzIGlkZW50aWNhbGx5IHRvIDAuCiAgIGxlZ29uZSAgICAgICAgICAgICAgIExlZ2VuZHJlIHNlcmllcyB0aGF0IGV2YWx1YXRlcyBpZGVudGljYWxseSB0byAxLgogICBsZWd4ICAgICAgICAgICAgICAgICBMZWdlbmRyZSBzZXJpZXMgZm9yIHRoZSBpZGVudGl0eSBtYXAsIGBgZih4KSA9IHhgYC4KCkFyaXRobWV0aWMKLS0tLS0tLS0tLQoKLi4gYXV0b3N1bW1hcnk6OgogICA6dG9jdHJlZTogZ2VuZXJhdGVkLwoKICAgbGVnbXVseCAgICAgICAgICAgICAgbXVsdGlwbHkgYSBMZWdlbmRyZSBzZXJpZXMgaW4gUF9pKHgpIGJ5IHguCiAgIGxlZ2FkZCAgICAgICAgICAgICAgIGFkZCB0d28gTGVnZW5kcmUgc2VyaWVzLgogICBsZWdzdWIgICAgICAgICAgICAgICBzdWJ0cmFjdCBvbmUgTGVnZW5kcmUgc2VyaWVzIGZyb20gYW5vdGhlci4KICAgbGVnbXVsICAgICAgICAgICAgICAgbXVsdGlwbHkgdHdvIExlZ2VuZHJlIHNlcmllcy4KICAgbGVnZGl2ICAgICAgICAgICAgICAgZGl2aWRlIG9uZSBMZWdlbmRyZSBzZXJpZXMgYnkgYW5vdGhlci4KICAgbGVncG93ICAgICAgICAgICAgICAgcmFpc2UgYSBMZWdlbmRyZSBzZXJpZXMgdG8gYW4gcG9zaXRpdmUgaW50ZWdlciBwb3dlcgogICBsZWd2YWwgICAgICAgICAgICAgICBldmFsdWF0ZSBhIExlZ2VuZHJlIHNlcmllcyBhdCBnaXZlbiBwb2ludHMuCiAgIGxlZ3ZhbDJkICAgICAgICAgICAgIGV2YWx1YXRlIGEgMkQgTGVnZW5kcmUgc2VyaWVzIGF0IGdpdmVuIHBvaW50cy4KICAgbGVndmFsM2QgICAgICAgICAgICAgZXZhbHVhdGUgYSAzRCBMZWdlbmRyZSBzZXJpZXMgYXQgZ2l2ZW4gcG9pbnRzLgogICBsZWdncmlkMmQgICAgICAgICAgICBldmFsdWF0ZSBhIDJEIExlZ2VuZHJlIHNlcmllcyBvbiBhIENhcnRlc2lhbiBwcm9kdWN0LgogICBsZWdncmlkM2QgICAgICAgICAgICBldmFsdWF0ZSBhIDNEIExlZ2VuZHJlIHNlcmllcyBvbiBhIENhcnRlc2lhbiBwcm9kdWN0LgoKQ2FsY3VsdXMKLS0tLS0tLS0KCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIGxlZ2RlciAgICAgICAgICAgICAgIGRpZmZlcmVudGlhdGUgYSBMZWdlbmRyZSBzZXJpZXMuCiAgIGxlZ2ludCAgICAgICAgICAgICAgIGludGVncmF0ZSBhIExlZ2VuZHJlIHNlcmllcy4KCk1pc2MgRnVuY3Rpb25zCi0tLS0tLS0tLS0tLS0tCgouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICBsZWdmcm9tcm9vdHMgICAgICAgICAgY3JlYXRlIGEgTGVnZW5kcmUgc2VyaWVzIHdpdGggc3BlY2lmaWVkIHJvb3RzLgogICBsZWdyb290cyAgICAgICAgICAgICAgZmluZCB0aGUgcm9vdHMgb2YgYSBMZWdlbmRyZSBzZXJpZXMuCiAgIGxlZ3ZhbmRlciAgICAgICAgICAgICBWYW5kZXJtb25kZS1saWtlIG1hdHJpeCBmb3IgTGVnZW5kcmUgcG9seW5vbWlhbHMuCiAgIGxlZ3ZhbmRlcjJkICAgICAgICAgICBWYW5kZXJtb25kZS1saWtlIG1hdHJpeCBmb3IgMkQgcG93ZXIgc2VyaWVzLgogICBsZWd2YW5kZXIzZCAgICAgICAgICAgVmFuZGVybW9uZGUtbGlrZSBtYXRyaXggZm9yIDNEIHBvd2VyIHNlcmllcy4KICAgbGVnZ2F1c3MgICAgICAgICAgICAgIEdhdXNzLUxlZ2VuZHJlIHF1YWRyYXR1cmUsIHBvaW50cyBhbmQgd2VpZ2h0cy4KICAgbGVnd2VpZ2h0ICAgICAgICAgICAgIExlZ2VuZHJlIHdlaWdodCBmdW5jdGlvbi4KICAgbGVnY29tcGFuaW9uICAgICAgICAgIHN5bW1ldHJpemVkIGNvbXBhbmlvbiBtYXRyaXggaW4gTGVnZW5kcmUgZm9ybS4KICAgbGVnZml0ICAgICAgICAgICAgICAgIGxlYXN0LXNxdWFyZXMgZml0IHJldHVybmluZyBhIExlZ2VuZHJlIHNlcmllcy4KICAgbGVndHJpbSAgICAgICAgICAgICAgIHRyaW0gbGVhZGluZyBjb2VmZmljaWVudHMgZnJvbSBhIExlZ2VuZHJlIHNlcmllcy4KICAgbGVnbGluZSAgICAgICAgICAgICAgIExlZ2VuZHJlIHNlcmllcyByZXByZXNlbnRpbmcgZ2l2ZW4gc3RyYWlnaHQgbGluZS4KICAgbGVnMnBvbHkgICAgICAgICAgICAgIGNvbnZlcnQgYSBMZWdlbmRyZSBzZXJpZXMgdG8gYSBwb2x5bm9taWFsLgogICBwb2x5MmxlZyAgICAgICAgICAgICAgY29udmVydCBhIHBvbHlub21pYWwgdG8gYSBMZWdlbmRyZSBzZXJpZXMuCgpDbGFzc2VzCi0tLS0tLS0KICAgIExlZ2VuZHJlICAgICAgICAgICAgQSBMZWdlbmRyZSBzZXJpZXMgY2xhc3MuCgpTZWUgYWxzbwotLS0tLS0tLQpudW1weS5wb2x5bm9taWFsLnBvbHlub21pYWwKbnVtcHkucG9seW5vbWlhbC5jaGVieXNoZXYKbnVtcHkucG9seW5vbWlhbC5sYWd1ZXJyZQpudW1weS5wb2x5bm9taWFsLmhlcm1pdGUKbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlX2UKCukAAAAAKQPaCGRpdmlzaW9u2g9hYnNvbHV0ZV9pbXBvcnTaDnByaW50X2Z1bmN0aW9uTikB2hRub3JtYWxpemVfYXhpc19pbmRleOkBAAAAKQHaCXBvbHl1dGlscykB2gtBQkNQb2x5QmFzZdoHbGVnemVyb9oGbGVnb25l2gRsZWd42glsZWdkb21haW7aB2xlZ2xpbmXaBmxlZ2FkZNoGbGVnc3Vi2gdsZWdtdWx42gZsZWdtdWzaBmxlZ2RpdtoGbGVncG932gZsZWd2YWzaBmxlZ2RlctoGbGVnaW502ghsZWcycG9sedoIcG9seTJsZWfaDGxlZ2Zyb21yb290c9oJbGVndmFuZGVy2gZsZWdmaXTaB2xlZ3RyaW3aCGxlZ3Jvb3Rz2ghMZWdlbmRyZdoIbGVndmFsMmTaCGxlZ3ZhbDNk2glsZWdncmlkMmTaCWxlZ2dyaWQzZNoLbGVndmFuZGVyMmTaC2xlZ3ZhbmRlcjNk2gxsZWdjb21wYW5pb27aCGxlZ2dhdXNz2glsZWd3ZWlnaHRjAQAAAAAAAAAEAAAABQAAAEMAAABzSgAAAHQAoAF8AGcBoQFcAX0AdAJ8AIMBZAEYAH0BZAJ9AngmdAN8AWQDZAODA0QAXRZ9A3QEdAV8AoMBfAB8AxkAgwJ9AnEsVwB8AlMAKQRh7wMAAAogICAgQ29udmVydCBhIHBvbHlub21pYWwgdG8gYSBMZWdlbmRyZSBzZXJpZXMuCgogICAgQ29udmVydCBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIGNvZWZmaWNpZW50cyBvZiBhIHBvbHlub21pYWwgKHJlbGF0aXZlCiAgICB0byB0aGUgInN0YW5kYXJkIiBiYXNpcykgb3JkZXJlZCBmcm9tIGxvd2VzdCBkZWdyZWUgdG8gaGlnaGVzdCwgdG8gYW4KICAgIGFycmF5IG9mIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIGVxdWl2YWxlbnQgTGVnZW5kcmUgc2VyaWVzLCBvcmRlcmVkCiAgICBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGRlZ3JlZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBwb2wgOiBhcnJheV9saWtlCiAgICAgICAgMS1EIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBvbHlub21pYWwgY29lZmZpY2llbnRzCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgYyA6IG5kYXJyYXkKICAgICAgICAxLUQgYXJyYXkgY29udGFpbmluZyB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBlcXVpdmFsZW50IExlZ2VuZHJlCiAgICAgICAgc2VyaWVzLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbGVnMnBvbHkKCiAgICBOb3RlcwogICAgLS0tLS0KICAgIFRoZSBlYXN5IHdheSB0byBkbyBjb252ZXJzaW9ucyBiZXR3ZWVuIHBvbHlub21pYWwgYmFzaXMgc2V0cwogICAgaXMgdG8gdXNlIHRoZSBjb252ZXJ0IG1ldGhvZCBvZiBhIGNsYXNzIGluc3RhbmNlLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkgaW1wb3J0IHBvbHlub21pYWwgYXMgUAogICAgPj4+IHAgPSBQLlBvbHlub21pYWwobnAuYXJhbmdlKDQpKQogICAgPj4+IHAKICAgIFBvbHlub21pYWwoWyAwLiwgIDEuLCAgMi4sICAzLl0sIFstMS4sICAxLl0pCiAgICA+Pj4gYyA9IFAuTGVnZW5kcmUoUC5wb2x5MmxlZyhwLmNvZWYpKQogICAgPj4+IGMKICAgIExlZ2VuZHJlKFsgMS4gICwgIDMuMjUsICAxLiAgLCAgMC43NV0sIFstMS4sICAxLl0pCgogICAgcgYAAAByAQAAAOn/////KQbaAnB12glhc19zZXJpZXPaA2xlbtoFcmFuZ2VyDgAAAHIQAAAAKQRaA3BvbNoDZGVn2gNyZXPaAWmpAHIwAAAA+kwvb3B0L2FsdC9weXRob24zNy9saWI2NC9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy9udW1weS9wb2x5bm9taWFsL2xlZ2VuZHJlLnB5chgAAABpAAAAcwwAAAAAKA4BDAEEARIBFgFjAQAAAAAAAAAJAAAABgAAAEMAAABzsgAAAGQBZAJsAG0BfQFtAn0CbQN9AwEAdASgBXwAZwGhAVwBfQB0BnwAgwF9BHwEZANrAHI2fABTAHwAZAQZAH0FfABkBRkAfQZ4WHQHfARkARgAZAFkBYMDRABdRH0HfAV9CHwCfAB8B2QGGAAZAHwGfAdkARgAFAB8BxsAgwJ9BXwBfAh8A3wGgwFkBnwHFABkARgAFAB8BxsAgwJ9BnFYVwB8AXwFfAN8BoMBgwJTAGQHUwApCGGEBAAACiAgICBDb252ZXJ0IGEgTGVnZW5kcmUgc2VyaWVzIHRvIGEgcG9seW5vbWlhbC4KCiAgICBDb252ZXJ0IGFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgY29lZmZpY2llbnRzIG9mIGEgTGVnZW5kcmUgc2VyaWVzLAogICAgb3JkZXJlZCBmcm9tIGxvd2VzdCBkZWdyZWUgdG8gaGlnaGVzdCwgdG8gYW4gYXJyYXkgb2YgdGhlIGNvZWZmaWNpZW50cwogICAgb2YgdGhlIGVxdWl2YWxlbnQgcG9seW5vbWlhbCAocmVsYXRpdmUgdG8gdGhlICJzdGFuZGFyZCIgYmFzaXMpIG9yZGVyZWQKICAgIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgZGVncmVlLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgMS1EIGFycmF5IGNvbnRhaW5pbmcgdGhlIExlZ2VuZHJlIHNlcmllcyBjb2VmZmljaWVudHMsIG9yZGVyZWQKICAgICAgICBmcm9tIGxvd2VzdCBvcmRlciB0ZXJtIHRvIGhpZ2hlc3QuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgcG9sIDogbmRhcnJheQogICAgICAgIDEtRCBhcnJheSBjb250YWluaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIGVxdWl2YWxlbnQgcG9seW5vbWlhbAogICAgICAgIChyZWxhdGl2ZSB0byB0aGUgInN0YW5kYXJkIiBiYXNpcykgb3JkZXJlZCBmcm9tIGxvd2VzdCBvcmRlciB0ZXJtCiAgICAgICAgdG8gaGlnaGVzdC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIHBvbHkybGVnCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBUaGUgZWFzeSB3YXkgdG8gZG8gY29udmVyc2lvbnMgYmV0d2VlbiBwb2x5bm9taWFsIGJhc2lzIHNldHMKICAgIGlzIHRvIHVzZSB0aGUgY29udmVydCBtZXRob2Qgb2YgYSBjbGFzcyBpbnN0YW5jZS4K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aGluZyBsaWtlIFsyLCAyLCAyLCAzLCAzXS4gVGhlCiAgICByb290cyBjYW4gYXBwZWFyIGluIGFueSBvcmRlci4KCiAgICBJZiB0aGUgcmV0dXJuZWQgY29lZmZpY2llbnRzIGFyZSBgY2AsIHRoZW4KCiAgICAuLiBtYXRoOjogcCh4KSA9IGNfMCArIGNfMSAqIExfMSh4KSArIC4uLiArICBjX24gKiBMX24oeCkKCiAgICBUaGUgY29lZmZpY2llbnQgb2YgdGhlIGxhc3QgdGVybSBpcyBub3QgZ2VuZXJhbGx5IDEgZm9yIG1vbmljCiAgICBwb2x5bm9taWFscyBpbiBMZWdlbmRyZSBmb3JtLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHJvb3RzIDogYXJyYXlfbGlrZQogICAgICAgIFNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIHJvb3RzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIG91dCA6IG5kYXJyYXkKICAgICAgICAxLUQgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgSWYgYWxsIHJvb3RzIGFyZSByZWFsIHRoZW4gYG91dGAgaXMgYQogICAgICAgIHJlYWwgYXJyYXksIGlmIHNvbWUgb2YgdGhlIHJvb3RzIGFyZSBjb21wbGV4LCB0aGVuIGBvdXRgIGlzIGNvbXBsZXgKICAgICAgICBldmVuIGlmIGFsbCB0aGUgY29lZmZpY2llbnRzIGluIHRoZSByZXN1bHQgYXJlIHJlYWwgKHNlZSBFeGFtcGxlcwogICAgICAgIGJlbG93KS4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIHBvbHlmcm9tcm9vdHMsIGNoZWJmcm9tcm9vdHMsIGxhZ2Zyb21yb290cywgaGVybWZyb21yb290cywKICAgIGhlcm1lZnJvbXJvb3RzLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGltcG9ydCBudW1weS5wb2x5bm9taWFsLmxlZ2VuZHJlIGFzIEwKICAgID4+PiBMLmxlZ2Zyb21yb290cygoLTEsMCwxKSkgIyB4XjMgLSB4IHJlbGF0aXZlIHRvIHRoZSBzdGFuZGFyZCBiYXNpcwogICAgYXJyYXkoWyAwLiAsIC0wLjQsICAwLiAsICAwLjRdKQogICAgPj4+IGogPSBjb21wbGV4KDAsMSkKICAgID4+PiBMLmxlZ2Zyb21yb290cygoLWosaikpICMgeF4yICsgMSByZWxhdGl2ZSB0byB0aGUgc3RhbmRhcmQgYmFzaXMKICAgIGFycmF5KFsgMS4zMzMzMzMzMyswLmosICAwLjAwMDAwMDAwKzAuaiwgIDAuNjY2NjY2NjcrMC5qXSkKCiAgICByAQAAAHIGAAAARikBWgR0cmltYwEAAAAAAAAAAgAAAAUAAABTAAAAcxgAAABnAHwAXRB9AXQAfAELAGQAgwKRAnEEUwApAXIGAAAAKQFyDQAAACkC2gIuMNoBcnIwAAAAcjAAAAByMQAAAPoKPGxpc3Rjb21wPkEBAABzAgAAAAYAeiBsZWdmcm9tcm9vdHMuPGxvY2Fscz4uPGxpc3Rjb21wPnI3AAAAYwEAAAAAAAAAAgAAAAcAAAATAAAAcyIAAABnAHwAXRp9AXQAiAF8ARkAiAF8AYgAFwAZAIMCkQJxBFMAcjAAAAApAXIRAAAAKQJyQgAAAHIvAAAAKQLaAW3aAXByMAAAAHIxAAAAckQAAABFAQAAcwIAAAAGAHIoAAAATikJcisAAAByPgAAAFoEb25lc3IpAAAAcioAAADaBHNvcnTaBmRpdm1vZHIsAAAAchEAAAApBNoFcm9vdHNyOgAAAHJDAAAAcj0AAAByMAAAACkCckUAAAByRgAAAHIxAAAAchkAAAALAQAAcxwAAAAAMQwBCgISAQgBDgEIAQoBDgEYAQQBFgEEAQgBYwIAAAAAAAAAAwAAAAQAAABDAAAAc2IAAAB0AKABfAB8AWcCoQFcAn0AfQF0AnwAgwF0AnwBgwFrBHI+fABkAXwBagOFAgUAGQB8ATcAAwA8AHwAfQJuGnwBZAF8AGoDhQIFABkAfAA3AAMAPAB8AX0CdACgBHwCoQFTACkCYfIDAAAKICAgIEFkZCBvbmUgTGVnZW5kcmUgc2VyaWVzIHRvIGFub3RoZXIuCgogICAgUmV0dXJucyB0aGUgc3VtIG9mIHR3byBMZWdlbmRyZSBzZXJpZXMgYGMxYCArIGBjMmAuICBUaGUgYXJndW1lbnRzCiAgICBhcmUgc2VxdWVuY2VzIG9mIGNvZWZmaWNpZW50cyBvcmRlcmVkIGZyb20gbG93ZXN0IG9yZGVyIHRlcm0gdG8KICAgIGhpZ2hlc3QsIGkuZS4sIFsxLDIsM10gcmVwcmVzZW50cyB0aGUgc2VyaWVzIGBgUF8wICsgMipQXzEgKyAzKlBfMmBgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMxLCBjMiA6IGFycmF5X2xpa2UKICAgICAgICAxLUQgYXJyYXlzIG9mIExlZ2VuZHJlIHNlcmllcyBjb2VmZmljaWVudHMgb3JkZXJlZCBmcm9tIGxvdyB0bwogICAgICAgIGhpZ2guCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogbmRhcnJheQogICAgICAgIEFycmF5IHJlcHJlc2VudGluZyB0aGUgTGVnZW5kcmUgc2VyaWVzIG9mIHRoZWlyIHN1bS4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxlZ3N1YiwgbGVnbXVsLCBsZWdkaXYsIGxlZ3BvdwoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgVW5saWtlIG11bHRpcGxpY2F0aW9uLCBkaXZpc2lvbiwgZXRjLiwgdGhlIHN1bSBvZiB0d28gTGVnZW5kcmUgc2VyaWVzCiAgICBpcyBhIExlZ2VuZHJlIHNlcmllcyAod2l0aG91dCBoYXZpbmcgdG8gInJlcHJvamVjdCIgdGhlIHJlc3VsdCBvbnRvCiAgICB0aGUgYmFzaXMgc2V0KSBzbyBhZGRpdGlvbiwganVzdCBsaWtlIHRoYXQgb2YgInN0YW5kYXJkIiBwb2x5bm9taWFscywKICAgIGlzIHNpbXBseSAiY29tcG9uZW50LXdpc2UuIgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkucG9seW5vbWlhbCBpbXBvcnQgbGVnZW5kcmUgYXMgTAogICAgPj4+IGMxID0gKDEsMiwzKQogICAgPj4+IGMyID0gKDMsMiwxKQogICAgPj4+IEwubGVnYWRkKGMxLGMyKQogICAgYXJyYXkoWyA0LiwgIDQuLCAgNC5dKQoKICAgIE4pBXIpAAAAcioAAABy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ZiB0d28gTGVnZW5kcmUgc2VyaWVzIGBjMWAgKiBgYzJgLiAgVGhlIGFyZ3VtZW50cwogICAgYXJlIHNlcXVlbmNlcyBvZiBjb2VmZmljaWVudHMsIGZyb20gbG93ZXN0IG9yZGVyICJ0ZXJtIiB0byBoaWdoZXN0LAogICAgZS5nLiwgWzEsMiwzXSByZXByZXNlbnRzIHRoZSBzZXJpZXMgYGBQXzAgKyAyKlBfMSArIDMqUF8yYGAuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYzEsIGMyIDogYXJyYXlfbGlrZQogICAgICAgIDEtRCBhcnJheXMgb2YgTGVnZW5kcmUgc2VyaWVzIGNvZWZmaWNpZW50cyBvcmRlcmVkIGZyb20gbG93IHRvCiAgICAgICAgaGlnaC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBvdXQgOiBuZGFycmF5CiAgICAgICAgT2YgTGVnZW5kcmUgc2VyaWVzIGNvZWZmaWNpZW50cyByZXByZXNlbnRpbmcgdGhlaXIgcHJvZHVjdC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxlZ2FkZCwgbGVnc3ViLCBsZWdkaXYsIGxlZ3BvdwoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgSW4gZ2VuZXJhbCwgdGhlIChwb2x5bm9taWFsKSBwcm9kdWN0IG9mIHR3byBDLXNlcmllcyByZXN1bHRzIGluIHRlcm1zCiAgICB0aGF0IGFyZSBub3QgaW4gdGhlIExlZ2VuZHJlIHBvbHlub21pYWwgYmFzaXMgc2V0LiAgVGh1cywgdG8gZXhwcmVzcwogICAgdGhlIHByb2R1Y3QgYXMgYSBMZWdlbmRyZSBzZXJpZXMsIGl0IGlzIG5lY2Vzc2FyeSB0byAicmVwcm9qZWN0IiB0aGUKICAgIHByb2R1Y3Qgb250byBzYWlkIGJhc2lzIHNldCwgd2hpY2ggbWF5IHByb2R1Y2UgInVuaW50dWl0aXZlIiAoYnV0CiAgICBjb3JyZWN0KSByZXN1bHRzOyBzZWUgRXhhbXBsZXMgc2VjdGlvbiBiZWxvdy4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBmcm9tIG51bXB5LnBvbHlub21pYWwgaW1wb3J0IGxlZ2VuZHJlIGFzIEwKICAgID4+PiBjMSA9ICgxLDIsMykKICAgID4+PiBjMiA9ICgzLDIpCiAgICA+Pj4gUC5sZWdtdWwoYzEsYzIpICMgbXVsdGlwbGljYXRpb24gcmVxdWlyZXMgInJlcHJvamVjdGlvbiIKICAgIGFycmF5KFsgIDQuMzMzMzMzMzMsICAxMC40ICAgICAgICwgIDExLjY2NjY2NjY3LCAgIDMuNiAgICAgICBdKQoKICAgIHIGAAAAcgEAAAByNwAAAHI2AAAAcigAAAByNQAAACkHcikAAAByKgAAAHIrAAAAciwAAAByDwAAAHIOAAAAchAAAAApCHI8AAAAckwAAAByOQAAAFoCeHNyOwAAANoCbmRyLwAAAHI9AAAAcjAAAAByMAAAAHIxAAAAchEAAADiAQAAcyoAAAAAKRICEAEEAQYCBAEEAgwBDAEGAQwBDAEOAggBDAEMARgBBAEIASABIgFjAgAAAAAAAAAJAAAABgAAAEMAAABzBgEAAHQAoAF8AHwBZwKhAVwCfQB9AXwBZAEZAGQCawJyJHQCgwCCAXQDfACDAX0CdAN8AYMBfQN8AnwDawByUHwAZANkBIUCGQBkAhQAfABmAlMAfANkBGsCcnR8AHwBZAEZABsAfABkA2QEhQIZAGQCFABmAlMAdARqBXwCfAMYAGQEFwB8AGoGZAWNAn0EfAB9BXhidAd8AnwDGABkAWQBgwNEAF1OfQZ0CGQCZwF8BhQAZARnARcAfAGDAn0HfAVkARkAfAdkARkAGwB9CHwFZANkAYUCGQB8CHwHZANkAYUCGQAUABgAfQV8CHwEfAY8AHGiVwB8BHQAoAl8BaEBZgJTAGQDUwApBmF6BQAACiAgICBEaXZpZGUgb25lIExlZ2VuZHJlIHNlcmllcyBieSBhbm90aGVyLgoKICAgIFJldHVybnMgdGhlIHF1b3RpZW50LXdpdGgtcmVtYWluZGVyIG9mIHR3byBMZWdlbmRyZSBzZXJpZXMKICAgIGBjMWAgLyBgYzJgLiAgVGhlIGFyZ3VtZW50cyBhcmUgc2VxdWVuY2VzIG9mIGNvZWZmaWNpZW50cyBmcm9tIGxvd2VzdAogICAgb3JkZXIgInRlcm0iIHRvIGhpZ2hlc3QsIGUuZy4sIFsxLDIsM10gcmVwcmVzZW50cyB0aGUgc2VyaWVzCiAgICBgYFBfMCArIDIqUF8xICsgMypQXzJgYC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBjMSwgYzIgOiBhcnJheV9saWtlCiAgICAgICAgMS1EIGFycmF5cyBvZiBMZWdlbmRyZSBzZXJpZXMgY29lZmZpY2llbnRzIG9yZGVyZWQgZnJvbSBsb3cgdG8KICAgICAgICBoaWdoLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHF1bywgcmVtIDogbmRhcnJheXMKICAgICAgICBPZiBMZWdlbmRyZSBzZXJpZXMgY29lZmZpY2llbnRzIHJlcHJlc2VudGluZyB0aGUgcXVvdGllbnQgYW5kCiAgICAgICAgcmVtYWluZGVyLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbGVnYWRkLCBsZWdzdWIsIGxlZ211bCwgbGVncG93CgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBJbiBnZW5lcmFsLCB0aGUgKHBvbHlub21pYWwpIGRpdmlzaW9uIG9mIG9uZSBMZWdlbmRyZSBzZXJpZXMgYnkgYW5vdGhlcgogICAgcmVzdWx0cyBpbiBxdW90aWVudCBhbmQgcmVtYWluZGVyIHRlcm1zIHRoYXQgYXJlIG5vdCBpbiB0aGUgTGVnZW5kcmUKICAgIHBvbHlub21pYWwgYmFzaXMgc2V0LiAgVGh1cywgdG8gZXhwcmVzcyB0aGVzZSByZXN1bHRzIGFzIGEgTGVnZW5kcmUKICAgIHNlcmllcywgaXQgaXMgbmVjZXNzYXJ5IHRvICJyZXByb2plY3QiIHRoZSByZXN1bHRzIG9udG8gdGhlIExlZ2VuZHJlCiAgICBiYXNpcyBzZXQsIHdoaWNoIG1heSBwcm9kdWNlICJ1bmludHVpdGl2ZSIgKGJ1dCBjb3JyZWN0KSByZXN1bHRzOyBzZWUKICAgIEV4YW1wbGVzIHNlY3Rpb24gYmVsb3cuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gZnJvbSBudW1weS5wb2x5bm9taWFsIGltcG9ydCBsZWdlbmRyZSBhcyBM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IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBMZWdlbmRyZSBzZXJpZXMgY29lZmZpY2llbnRzLiBJZiBjIGlzIG11bHRpZGltZW5zaW9uYWwgdGhlCiAgICAgICAgZGlmZmVyZW50IGF4aXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnQgdmFyaWFibGVzIHdpdGggdGhlIGRlZ3JlZSBpbgogICAgICAgIGVhY2ggYXhpcyBnaXZlbiBieSB0aGUgY29ycmVzcG9uZGluZyBpbmRleC4KICAgIG0gOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgTnVtYmVyIG9mIGRlcml2YXRpdmVzIHRha2VuLCBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4gKERlZmF1bHQ6IDEpCiAgICBzY2wgOiBzY2FsYXIsIG9wdGlvbmFsCiAgICAgICAgRWFjaCBkaWZmZXJlbnRpYXRpb24gaXMgbXVsdGlwbGllZCBieSBgc2NsYC4gIFRoZSBlbmQgcmVzdWx0IGlzCiAgICAgICAgbXVsdGlwbGljYXRpb24gYnkgYGBzY2wqKm1gYC4gIFRoaXMgaXMgZm9yIHVzZSBpbiBhIGxpbmVhciBjaGFuZ2Ugb2YKICAgICAgICB2YXJpYWJsZS4gKERlZmF1bHQ6IDEpCiAgICBheGlzIDogaW50LCBvcHRpb25hbAogICAgICAgIEF4aXMgb3ZlciB3aGljaCB0aGUgZGVyaXZhdGl2ZSBpcyB0YWtlbi4gKERlZmF1bHQ6IDApLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGRlciA6IG5kYXJyYXkKICAgICAgICBMZWdlbmRyZSBzZXJpZXMgb2YgdGhlIGRlcml2YXRpdmUuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBsZWdpbnQKCiAgICBOb3RlcwogICAgLS0tLS0KICAgIEluIGdlbmVyYWwsIHRoZSByZXN1bHQgb2YgZGlmZmVyZW50aWF0aW5nIGEgTGVnZW5kcmUgc2VyaWVzIGRvZXMgbm90CiAgICByZXNlbWJsZSB0aGUgc2FtZSBvcGVyYXRpb24gb24gYSBwb3dlciBz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YW5nZSBvZiB2YXJpYWJsZS4gICgiQnV5ZXIKICAgIGJld2FyZSI6IG5vdGUgdGhhdCwgZGVwZW5kaW5nIG9uIHdoYXQgb25lIGlzIGRvaW5nLCBvbmUgbWF5IHdhbnQgYHNjbGAKICAgIHRvIGJlIHRoZSByZWNpcHJvY2FsIG9mIHdoYXQgb25lIG1pZ2h0IGV4cGVjdDsgZm9yIG1vcmUgaW5mb3JtYXRpb24sCiAgICBzZWUgdGhlIE5vdGVzIHNlY3Rpb24gYmVsb3cuKSAgVGhlIGFyZ3VtZW50IGBjYCBpcyBhbiBhcnJheSBvZgogICAgY29lZmZpY2llbnRzIGZyb20gbG93IHRvIGhpZ2ggZGVncmVlIGFsb25nIGVhY2ggYXhpcywgZS5nLiwgWzEsMiwzXQogICAgcmVwcmVzZW50cyB0aGUgc2VyaWVzIGBgTF8wICsgMipMXzEgKyAzKkxfMmBgIHdoaWxlIFtbMSwyXSxbMSwyXV0KICAgIHJlcHJlc2VudHMgYGAxKkxfMCh4KSpMXzAoeSkgKyAxKkxfMSh4KSpMXzAoeSkgKyAyKkxfMCh4KSpMXzEoeSkgKwogICAgMipMXzEoeCkqTF8xKHkpYGAgaWYgYXhpcz0wIGlzIGBgeGBgIGFuZCBheGlzPTEgaXMgYGB5YGAuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBMZWdlbmRyZSBzZXJpZXMgY29lZmZpY2llbnRzLiBJZiBjIGlzIG11bHRpZGltZW5zaW9uYWwgdGhlCiAgICAgICAgZGlmZmVyZW50IGF4aXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnQgdmFyaWFibGVzIHdpdGggdGhlIGRlZ3JlZSBpbgogICAgICAgIGVhY2ggYXhpcyBnaXZlbiBieSB0aGUgY29ycmVzcG9uZGluZyBpbmRleC4KICAgIG0gOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgT3JkZXIgb2YgaW50ZWdyYXRpb24sIG11c3QgYmUgcG9zaXRpdmUuIChEZWZhdWx0OiAxKQogICAgayA6IHtbXSwgbGlzdCwgc2NhbGFyfSwgb3B0aW9uYWwKICAgICAgICBJbnRlZ3JhdGlvbiBjb25zdGFudChzKS4gIFRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW50ZWdyYWwgYXQKICAgICAgICBgYGxibmRgYCBpcyB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlIGxpc3QsIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kCiAgICAgICAgaW50ZWdyYWwgYXQgYGBsYm5kYGAgaXMgdGhlIHNlY29uZCB2YWx1ZSwgZXRjLiAgSWYgYGBrID09IFtdYGAgKHRoZQogICAgICAgIGRlZmF1bHQpLCBhbGwgY29uc3RhbnRzIGFyZSBzZXQgdG8gemVyby4gIElmIGBgbSA9PSAxYGAsIGEgc2luZ2xlCiAgICAgICAgc2NhbGFyIGNhbiBiZSBnaXZlbiBpbnN0ZWFkIG9mIGEgbGlzdC4KICAgIGxibmQgOiBzY2FsYXIsIG9wdGlvbmFsCiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBpbnRlZ3JhbC4gKERlZmF1bHQ6IDApCiAgICBzY2wgOiBzY2FsYXIsIG9wdGlvbmFsCiAgICAgICAgRm9sbG93aW5nIGVhY2ggaW50ZWdyYXRpb24gdGhlIHJlc3VsdCBpcyAqbXVsdGlwbGllZCogYnkgYHNjbGAKICAgICAgICBiZWZvcmUgdGhlIGludGVncmF0aW9uIGNvbnN0YW50IGlzIGFkZGVkLiAoRGVmYXVsdDogMSkKICAgIGF4aXMgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgQXhpcyBvdmVyIHdoaWNoIHRoZSBpbnRlZ3JhbCBpcyB0YWtlbi4gKERlZmF1bHQ6IDApLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIFMgOiBuZGFycmF5CiAgICAgICAgTGVnZW5kcmUgc2VyaWVzIGNvZWZmaWNpZW50IGFycmF5IG9mIHRoZSBpbnRlZ3JhbC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgVmFsdWVFcnJvcgogICAgICAgIElmIGBgbSA8IDBgYCwgYGBsZW4oaykgPiBtYGAsIGBgbnAuaXNzY2FsYXIobGJuZCkgPT0gRmFsc2VgYCwgb3IKICAgICAgICBgYG5wLmlzc2NhbGFyKHNjbCkgPT0gRmFsc2VgYC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxlZ2RlcgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgTm90ZSB0aGF0IHRoZSByZXN1bHQgb2YgZWFjaCBpbnRlZ3JhdGlvbiBpcyAqbXVsdGlwbGllZCogYnkgYHNjbGAuCiAgICBXaHkgaXMgdGhpcyBpbXBvcnRhbnQgdG8gbm90ZT8gIFNheSBvbmUgaXMgbWFraW5nIGEgbGluZWFyIGNoYW5nZSBvZgogICAgdmFyaWFibGUgOm1hdGg6YHUgPSBheCArIGJgIGluIGFuIGludGVncmFsIHJlbGF0aXZlIHRvIGB4YC4gIFRoZW4KICAgIDptYXRoOmBkeCA9IGR1L2FgLCBzbyBvbmUgd2lsbCBuZWVkIHRvIHNldCBgc2NsYCBlcXVhbCB0bwogICAgOm1hdGg6YDEvYWAgLSBwZXJoYXBzIG5vdCB3aGF0IG9uZSB3b3VsZCBoYXZlIGZpcnN0IHRob3VnaHQuCgogICAgQWxzbyBub3RlIHRoYXQsIGluIGdlbmVyYWwsIHRoZSByZXN1bHQgb2YgaW50ZWdyYXRpbmcgYSBDLXNlcmllcyBuZWVkcwogICAgdG8gYmUgInJlcHJvamVjdGVkIiBvbnRvIHRoZSBDLXNlcmllcyBiYXNpcyBzZXQuICBUaHVzLCB0eXBpY2FsbHksCiAgICB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgInVuaW50dWl0aXZlLCIgYWxiZWl0IGNvcnJlY3Q7IHNlZQogICAgRXhhbXBsZXMgc2VjdGlvbiBiZWxvdy4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBmcm9tIG51bXB5LnBvbHlub21pYWwgaW1wb3J0IGxlZ2VuZHJlIGFzIEwKICAgID4+PiBjID0gKDEsMiwzKQogICAgPj4+IEwubGVnaW50KGMpCiAgICBhcnJheShbIDAuMzMzMzMzMzMsICAwLjQgICAgICAgLCAgMC42NjY2NjY2NywgIDAuNiAgICAgICBdKQogICAgPj4+IEwubGVnaW50KGMsIDMpCiAgICBhcnJh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aGVuIGBwKHgpYCB3aWxsIGhhdmUgdGhlIHNhbWUgc2hhcGUgYXMgYHhgLiAgSWYKICAgIGBjYCBpcyBtdWx0aWRpbWVuc2lvbmFsLCB0aGVuIHRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlCiAgICB2YWx1ZSBvZiBgdGVuc29yYC4gSWYgYHRlbnNvcmAgaXMgdHJ1ZSB0aGUgc2hhcGUgd2lsbCBiZSBjLnNoYXBlWzE6XSArCiAgICB4LnNoYXBlLiBJZiBgdGVuc29yYCBpcyBmYWxzZSB0aGUgc2hhcGUgd2lsbCBiZSBjLnNoYXBlWzE6XS4gTm90ZSB0aGF0CiAgICBzY2FsYXJzIGhhdmUgc2hhcGUgKCwpLgoKICAgIFRyYWlsaW5nIHplcm9zIGluIHRoZSBjb2VmZmljaWVudHMgd2lsbCBiZSB1c2VkIGluIHRoZSBldmFsdWF0aW9uLCBzbwogICAgdGhleSBzaG91bGQgYmUgYXZvaWRlZCBpZiBlZmZpY2llbmN5IGlzIGEgY29uY2Vybi4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3QKICAgICAgICBJZiBgeGAgaXMgYSBsaXN0IG9yIHR1cGxlLCBpdCBpcyBjb252ZXJ0ZWQgdG8gYW4gbmRhcnJheSwgb3RoZXJ3aXNlCiAgICAgICAgaXQgaXMgbGVmdCB1bmNoYW5nZWQgYW5kIHRyZWF0ZWQgYXMgYSBzY2FsYXIuIEluIGVpdGhlciBjYXNlLCBgeGAKICAgICAgICBvciBpdHMgZWxlbWVudHMgbXVzdCBzdXBwb3J0IGFkZGl0aW9uIGFuZCBtdWx0aXBsaWNhdGlvbiB3aXRoCiAgICAgICAgd2l0aCB0aGVtc2VsdmVzIGFuZCB3aXRoIHRoZSBlbGVtZW50cyBvZiBgY2AuCiAgICBjIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIGNvZWZmaWNpZW50cyBvcmRlcmVkIHNvIHRoYXQgdGhlIGNvZWZmaWNpZW50cyBmb3IgdGVybXMgb2YKICAgICAgICBkZWdyZWUgbiBhcmUgY29udGFpbmVkIGluIGNbbl0uIElmIGBjYCBpcyBtdWx0aWRpbWVuc2lvbmFsIHRoZQogICAgICAgIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZSBwb2x5bm9taWFscy4gSW4gdGhlIHR3bwogICAgICAgIGRpbWVuc2lvbmFsIGNhc2UgdGhlIGNvZWZmaWNpZW50cyBtYXkgYmUgdGhvdWdodCBvZiBhcyBzdG9yZWQgaW4KICAgICAgICB0aGUgY29sdW1ucyBvZiBgY2AuCiAgICB0ZW5zb3IgOiBib29sZWFuLCBvcHRpb25hbAogICAgICAgIElmIFRydWUsIHRoZSBzaGFwZSBvZiB0aGUgY29lZmZpY2llbnQgYXJyYXkgaXMgZXh0ZW5kZWQgd2l0aCBvbmVzCiAgICAgICAgb24gdGhlIHJpZ2h0LCBvbmUgZm9yIGVhY2ggZGltZW5zaW9uIG9mIGB4YC4gU2NhbGFycyBoYXZlIGRpbWVuc2lvbiAwCiAgICAgICAgZm9yIHRoaXMgYWN0aW9uLiBUaGUgcmVzdWx0IGlzIHRoYXQgZXZlcnkgY29sdW1uIG9mIGNvZWZmaWNpZW50cyBpbgogICAgICAgIGBjYCBpcyBldmFsdWF0ZWQgZm9yIGV2ZXJ5IGVsZW1lbnQgb2YgYHhgLiBJZiBGYWxzZSwgYHhgIGlzIGJyb2FkY2FzdAogICAgICAgIG92ZXIgdGhlIGNvbHVtbnMgb2YgYGNgIGZvciB0aGUgZXZhbHVhdGlvbi4gIFRoaXMga2V5d29yZCBpcyB1c2VmdWwKICAgICAgICB3aGVuIGBjYCBpcyBtdWx0aWRpbWVuc2lvbmFsLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBUcnVlLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbHVlcyA6IG5kYXJyYXksIGFsZ2VicmFfbGlrZQogICAgICAgIFRoZSBzaGFwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGRlc2NyaWJlZCBhYm92ZS4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxlZ3ZhbDJkLCBsZWdncmlkMmQsIGxlZ3ZhbDNkLCBsZWdncmlkM2QKCiAgICBOb3RlcwogICAgLS0tLS0KICAgIFRoZSBldmFsdWF0aW9uIHVzZXMgQ2xlbnNoYXcgcmVjdXJzaW9uLCBha2Egc3ludGhldGljIGRpdmlzaW9uLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQoKICAgIHIGAAAAcgEAAAApAnJdAAAAcl4AAAB6DT9iQmhIaUlsTHFRcFApAXIGAAAAcjcAAAByNgAAAHIoAAAAcjUAAAApEHI+AAAAcj8AAAByTgAAAHJgAAAAcmEAAAByYgAAANoKaXNpbnN0YW5jZdoFdHVwbGVyagAAANoHYXNhcnJheVoHbmRhcnJhedoHcmVzaGFwZXJlAAAAcmMAAAByKwAAAHIsAAAAKQjaAXhyOQAAANoGdGVuc29ycjsAAAByPAAAAHJUAAAAci8AAAByPQAAAHIwAAAAcjAAAAByMQAAAHIUAAAAfQMAAHMsAAAAAD4QAQwBDAEOAQoBEAEWAgwBCAEGAQwBCAEKAggBCAEIARgBBAEIARoBIAFjAwAAAAAAAAADAAAABgAAAEMAAABzTAAAAHkadABqAXwAfAFmAmQBZAKNAlwCfQB9AVcAbhQBAAEAAQB0AmQDgwGCAVkAbgJYAHQDfAB8AoMCfQJ0A3wBfAJkBGQFjQN9AnwCUwApBmFEBgAACiAgICBFdmFsdWF0ZSBhIDItRCBMZWdlbmRyZSBzZXJpZXMgYXQgcG9pbnRzICh4LCB5KS4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcCh4LHkpID0gXHN1bV97aSxqfSBjX3tpLGp9ICogTF9pKHgpICogTF9qKHkpCgogICAgVGhlIHBhcmFtZXRlcnMgYHhgIGFuZCBgeWAgYXJlIGNvbnZlcnRlZCB0byBhcnJheXMgb25seSBpZiB0aGV5IGFyZQogICAgdHVwbGVzIG9yIGEgbGlzdHMsIG90aGVyd2lzZSB0aGV5IGFyZSB0cmVhdGVkIGFzIGEgc2NhbGFycyBhbmQgdGhleQogICAgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFmdGVyIGNvbnZlcnNpb24uIEluIGVpdGhlciBjYXNlLCBlaXRoZXIgYHhgCiAgICBhbmQgYHlgIG9yIHRoZWlyIGVsZW1lbnRzIG11c3Qgc3VwcG9ydCBtdWx0aXBsaWNhdGlvbiBhbmQgYWRkaXRpb24gYm90aAogICAgd2l0aCB0aGVtc2VsdmVzIGFuZCB3aXRoIHRoZSBlbGVtZW50cyBvZiBgY2AuCgogICAgSWYgYGNgIGlzIGEgMS1EIGFycmF5IGEgb25lIGlzIGltcGxpY2l0bHkgYXBwZW5kZWQgdG8gaXRzIHNoYXBlIHRvIG1ha2UKICAgIGl0IDItRC4gVGhlIHNoYXBlIG9mIHRoZSByZXN1bHQgd2lsbCBiZSBjLnNoYXBlWzI6XSArIHguc2hhcGUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0cwogICAgICAgIFRoZSB0d28gZGltZW5zaW9uYWwgc2VyaWVzIGlzIGV2YWx1YXRlZCBhdCB0aGUgcG9pbnRzIGAoeCwgeSlgLAogICAgICAgIHdoZXJlIGB4YCBhbmQgYHlgIG11c3QgaGF2ZSB0aGUgc2FtZSBzaGFwZS4gSWYgYHhgIG9yIGB5YCBpcyBhIGxpc3QKICAgICAgICBvciB0dXBsZSwgaXQgaXMgZmlyc3QgY29udmVydGVkIHRvIGFuIG5kYXJyYXksIG90aGVyd2lzZSBpdCBpcyBsZWZ0CiAgICAgICAgdW5jaGFuZ2VkIGFuZCBpZiBpdCBpc24ndCBhbiBuZGFycmF5IGl0IGlzIHRyZWF0ZWQgYXMgYSBzY2FsYXIuCiAgICBjIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIGNvZWZmaWNpZW50cyBvcmRlcmVkIHNvIHRoYXQgdGhlIGNvZWZmaWNpZW50IG9mIHRoZSB0ZXJtCiAgICAgICAgb2YgbXVsdGktZGVncmVlIGksaiBpcyBjb250YWluZWQgaW4gYGBjW2ksal1gYC4gSWYgYGNgIGhhcwogICAgICAgIGRpbWVuc2lvbiBncmVhdGVyIHRoYW4gdHdvIHRoZSByZW1haW5pbmcgaW5kaWNlcyBlbnVtZXJhdGUgbXVsdGlwbGUKICAgICAgICBzZXRzIG9mIGNvZWZmaWNpZW50cy4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICB2YWx1ZXMgOiBuZGFycmF5LCBjb21wYXRpYmxlIG9iamVjdAogICAgICAgIFRoZSB2YWx1ZXMgb2YgdGhlIHR3byBkaW1lbnNpb25hbCBMZWdlbmRyZSBzZXJpZXMgYXQgcG9pbnRzIGZvcm1lZAogICAgICAgIGZyb20gcGFpcnMgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSBgeGAgYW5kIGB5YC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxlZ3ZhbCwgbGVnZ3JpZDJkLCBsZWd2YWwzZCwgbGVnZ3JpZDNkCgogICAgTm90ZXMKICAgIC0tLS0tCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS43LjAKCiAgICByAQAAACkBcl4AAAB6FXgsIHkgYXJlIGluY29tcGF0aWJsZUYpAXJxAAAAKQRyPgAAAHI/AAAAcloAAAByFAAAACkDcnAAAADaAXlyOQAAAHIwAAAAcjAAAAByMQAAAHIfAAAA1QMAAHMOAAAAAC4CARoBBgEOAgoBDgFjAwAAAAAAAAADAAAAAwAAAEMAAABzGAAAAHQAfAB8AoMCfQJ0AHwBfAKDAn0CfAJTACkBYeMGAAAKICAgIEV2YWx1YXRlIGEgMi1EIExlZ2VuZHJlIHNlcmllcyBvbiB0aGUgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgeCBhbmQgeS4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcChhLGIpID0gXHN1bV97aSxqfSBjX3tpLGp9ICogTF9pKGEpICogTF9qKGIpCgogICAgd2hlcmUgdGhlIHBvaW50cyBgKGEsIGIpYCBjb25zaXN0IG9mIGFsbCBwYWlycyBmb3JtZWQgYnkgdGFraW5nCiAgICBgYWAgZnJvbSBgeGAgYW5kIGBiYCBmcm9tIGB5YC4gVGhlIHJlc3VsdGluZyBwb2ludHMgZm9ybSBhIGdyaWQgd2l0aAogICAgYHhgIGluIHRoZSBmaXJzdCBkaW1lbnNpb24gYW5kIGB5YCBpbiB0aGUgc2Vjb25kLgoKICAgIFRoZSBwYXJhbWV0ZXJzIGB4YCBhbmQgYHlgIGFyZSBjb252ZXJ0ZWQgdG8gYXJyYXlzIG9ubHkgaWYgdGhleSBhcmUKICAgIHR1cGxlcyBvciBhIGxpc3RzLCBvdGhlcndpc2UgdGhleSBhcmUgdHJlYXRlZCBhcyBhIHNjYWxhcnMuIEluIGVpdGhlcgogICAgY2FzZSwgZWl0aGVyIGB4YCBhbmQgYHlgIG9yIHRoZWlyIGVsZW1lbnRzIG11c3Qgc3VwcG9ydCBtdWx0aXBsaWNhdGlvbgogICAgYW5kIGFkZGl0aW9uIGJvdGggd2l0aCB0aGVtc2VsdmVzIGFuZCB3aXRoIHRoZSBlbGVtZW50cyBvZiBgY2AuCgogICAgSWYgYGNgIGhhcyBmZXdlciB0aGFuIHR3byBkaW1lbnNpb25zLCBvbmVzIGFyZSBpbXBsaWNpdGx5IGFwcGVuZGVkIHRvCiAgICBpdHMgc2hhcGUgdG8gbWFrZSBpdCAyLUQuIFRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0IHdpbGwgYmUgYy5zaGFwZVsyOl0gKwogICAgeC5zaGFwZSArIHkuc2hhcGUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0cwogICAgICAgIFRoZSB0d28gZGltZW5zaW9uYWwgc2VyaWVzIGlzIGV2YWx1YXRlZCBhdCB0aGUgcG9pbnRzIGluIHRoZQogICAgICAgIENhcnRlc2lhbiBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgLiAgSWYgYHhgIG9yIGB5YCBpcyBhIGxpc3Qgb3IKICAgICAgICB0dXBsZSwgaXQgaXMgZmlyc3QgY29udmVydGVkIHRvIGFuIG5kYXJyYXksIG90aGVyd2lzZSBpdCBpcyBsZWZ0CiAgICAgICAgdW5jaGFuZ2VkIGFuZCwgaWYgaXQgaXNuJ3QgYW4gbmRhcnJheSwgaXQgaXMgdHJlYXRlZCBhcyBhIHNjYWxhci4KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgY29lZmZpY2llbnRzIG9yZGVyZWQgc28gdGhhdCB0aGUgY29lZmZpY2llbnQgb2YgdGhlIHRlcm0gb2YKICAgICAgICBtdWx0aS1kZWdyZWUgaSxqIGlzIGNvbnRhaW5lZCBpbiBgY1tpLGpdYC4gSWYgYGNgIGhhcyBkaW1lbnNpb24KICAgICAgICBncmVhdGVyIHRoYW4gdHdvIHRoZSByZW1haW5pbmcgaW5kaWNlcyBlbnVtZXJhdGUgbXVsdGlwbGUgc2V0cyBvZgogICAgICAgIGNvZWZmaWNpZW50cy4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICB2YWx1ZXMgOiBuZGFycmF5LCBjb21wYXRpYmxlIG9iamVjdAogICAgICAgIFRoZSB2YWx1ZXMgb2YgdGhlIHR3byBkaW1lbnNpb25hbCBDaGVieXNoZXYgc2VyaWVzIGF0IHBvaW50cyBpbiB0aGUKICAgICAgICBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiBgeGAgYW5kIGB5YC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxlZ3ZhbCwgbGVndmFsMmQsIGxlZ3ZhbDNkLCBsZWdncmlkM2QKCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgICkBchQAAAApA3JwAAAAcnIAAAByOQAAAHIwAAAAcjAAAAByMQAAAHIhAAAADQQAAHMGAAAAADIKAQoBYwQAAAAAAAAABAAAAAYAAABDAAAAc14AAAB5HnQAagF8AHwBfAJmA2QBZAKNAlwDfQB9AX0CVwBuFAEAAQABAHQCZAODAYIBWQBuAlgAdAN8AHwDgwJ9A3QDfAF8A2QEZAWNA30DdAN8AnwDZARkBY0DfQN8A1MAKQZhngYAAAogICAgRXZhbHVhdGUgYSAzLUQgTGVnZW5kcmUgc2VyaWVzIGF0IHBvaW50cyAoeCwgeSwgeikuCgogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZXM6CgogICAgLi4gbWF0aDo6IHAoeCx5LHopID0gXHN1bV97aSxqLGt9IGNfe2ksaixrfSAqIExfaSh4KSAqIExfaih5KSAqIExfayh6KQoKICAgIFRoZSBwYXJhbWV0ZXJzIGB4YCwgYHlgLCBhbmQgYHpgIGFyZSBjb252ZXJ0ZWQgdG8gYXJyYXlzIG9ubHkgaWYKICAgIHRoZXkgYXJlIHR1cGxlcyBvciBhIGxpc3RzLCBvdGhlcndpc2UgdGhleSBhcmUgdHJlYXRlZCBhcyBhIHNjYWxhcnMgYW5kCiAgICB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSBzaGFwZSBhZnRlciBjb252ZXJzaW9uLiBJbiBlaXRoZXIgY2FzZSwgZWl0aGVyCiAgICBgeGAsIGB5YCwgYW5kIGB6YCBvciB0aGVpciBlbGVtZW50cyBtdXN0IHN1cHBvcnQgbXVsdGlwbGljYXRpb24gYW5kCiAgICBhZGRpdGlvbiBib3RoIHdpdGggdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYGNgLgoKICAgIElmIGBjYCBoYXMgZmV3ZXIgdGhhbiAzIGRpbWVuc2lvbnMsIG9uZXMgYXJlIGltcGxpY2l0bHkgYXBwZW5kZWQgdG8gaXRzCiAgICBzaGFwZSB0byBtYWtlIGl0IDMtRC4gVGhlIHNoYXBlIG9mIHRoZSByZXN1bHQgd2lsbCBiZSBjLnNoYXBlWzM6XSArCiAgICB4LnNoYXBlLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHgsIHksIHogOiBhcnJheV9saWtlLCBjb21wYXRpYmxlIG9iamVjdAogICAgICAgIFRoZSB0aHJlZSBkaW1lbnNpb25hbCBzZXJpZXMgaXMgZXZhbHVhdGVkIGF0IHRoZSBwb2ludHMKICAgICAgICBgKHgsIHksIHopYCwgd2hlcmUgYHhgLCBgeWAsIGFuZCBgemAgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlLiAgSWYKICAgICAgICBhbnkgb2YgYHhgLCBgeWAsIG9yIGB6YCBpcyBhIGxpc3Qgb3IgdHVwbGUsIGl0IGlzIGZpcnN0IGNvbnZlcnRlZAogICAgICAgIHRvIGFuIG5kYXJyYXksIG90aGVyd2lzZSBpdCBpcyBsZWZ0IHVuY2hhbmdlZCBhbmQgaWYgaXQgaXNuJ3QgYW4KICAgICAgICBuZGFycmF5IGl0IGlzICB0cmVhdGVkIGFzIGEgc2NhbGFyLgogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBjb2VmZmljaWVudHMgb3JkZXJlZCBzbyB0aGF0IHRoZSBjb2VmZmljaWVudCBvZiB0aGUgdGVybSBvZgogICAgICAgIG11bHRpLWRlZ3JlZSBpLGosayBpcyBjb250YWluZWQgaW4gYGBjW2ksaixrXWBgLiBJZiBgY2AgaGFzIGRpbWVuc2lvbgogICAgICAgIGdyZWF0ZXIgdGhhbiAzIHRoZSByZW1haW5pbmcgaW5kaWNlcyBlbnVtZXJhdGUgbXVsdGlwbGUgc2V0cyBvZgogICAgICAgIGNvZWZmaWNpZW50cy4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICB2YWx1ZXMgOiBuZGFycmF5LCBjb21wYXRpYmxlIG9iamVjdAogICAgICAgIFRoZSB2YWx1ZXMgb2YgdGhlIG11bHRpZGltZW5zaW9uYWwgcG9seW5vbWlhbCBvbiBwb2ludHMgZm9ybWVkIHdpdGgKICAgICAgICB0cmlwbGVzIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZyb20gYHhgLCBgeWAsIGFuZCBgemAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBsZWd2YWwsIGxlZ3ZhbDJkLCBsZWdncmlkMmQsIGxlZ2dyaWQzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgcgEAAAApAXJeAAAAehh4LCB5LCB6IGFyZSBpbmNvbXBhdGlibGVGKQFycQAAACkEcj4AAAByPwAAAHJaAAAAchQAAAApBHJwAAAAcnIAAADaAXpyOQAAAHIwAAAAcjAAAAByMQAAAHIgAAAARAQAAHMQAAAAADACAR4BBgEOAgoBDgEOAWMEAAAAAAAAAAQAAAADAAAAQwAAAHMiAAAAdAB8AHwDgwJ9A3QAfAF8A4MCfQN0AHwCfAODAn0DfANTACkBYUsHAAAKICAgIEV2YWx1YXRlIGEgMy1EIExlZ2VuZHJlIHNlcmllcyBvbiB0aGUgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgeCwgeSwgYW5kIHouCgogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZXM6CgogICAgLi4gbWF0aDo6IHAoYSxiLGMpID0gXHN1bV97aSxqLGt9IGNfe2ksaixrfSAqIExfaShhKSAqIExfaihiKSAqIExfayhjKQoKICAgIHdoZXJlIHRoZSBwb2ludHMgYChhLCBiLCBjKWAgY29uc2lzdCBvZiBhbGwgdHJpcGxlcyBmb3JtZWQgYnkgdGFraW5nCiAgICBgYWAgZnJvbSBgeGAsIGBiYCBmcm9tIGB5YCwgYW5kIGBjYCBmcm9tIGB6YC4gVGhlIHJlc3VsdGluZyBwb2ludHMgZm9ybQogICAgYSBncmlkIHdpdGggYHhgIGluIHRoZSBmaXJzdCBkaW1lbnNpb24sIGB5YCBpbiB0aGUgc2Vjb25kLCBhbmQgYHpgIGluCiAgICB0aGUgdGhpcmQuCgogICAgVGhlIHBhcmFtZXRlcnMgYHhgLCBgeWAsIGFuZCBgemAgYXJlIGNvbnZlcnRlZCB0byBhcnJheXMgb25seSBpZiB0aGV5CiAgICBhcmUgdHVwbGVzIG9yIGEgbGlzdHMsIG90aGVyd2lzZSB0aGV5IGFyZSB0cmVhdGVkIGFzIGEgc2NhbGFycy4gSW4KICAgIGVpdGhlciBjYXNlLCBlaXRoZXIgYHhgLCBgeWAsIGFuZCBgemAgb3IgdGhlaXIgZWxlbWVudHMgbXVzdCBzdXBwb3J0CiAgICBtdWx0aXBsaWNhdGlvbiBhbmQgYWRkaXRpb24gYm90aCB3aXRoIHRoZW1zZWx2ZXMgYW5kIHdpdGggdGhlIGVsZW1lbnRzCiAgICBvZiBgY2AuCgogICAgSWYgYGNgIGhhcyBmZXdlciB0aGFuIHRocmVlIGRpbWVuc2lvbnMsIG9uZXMgYXJlIGltcGxpY2l0bHkgYXBwZW5kZWQgdG8KICAgIGl0cyBzaGFwZSB0byBtYWtlIGl0IDMtRC4gVGhlIHNoYXBlIG9mIHRoZSByZXN1bHQgd2lsbCBiZSBjLnNoYXBlWzM6XSArCiAgICB4LnNoYXBlICsgeS5zaGFwZSArIHouc2hhcGUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSwgeiA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0cwogICAgICAgIFRoZSB0aHJlZSBkaW1lbnNpb25hbCBzZXJpZXMgaXMgZXZhbHVhdGVkIGF0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IGMpYGAgd2lsbCBiZSB0aGUgc2FtZQogICAgdXAgdG8gcm91bmRvZmYuIFRoaXMgZXF1aXZhbGVuY2UgaXMgdXNlZnVsIGJvdGggZm9yIGxlYXN0IHNxdWFyZXMKICAgIGZpdHRpbmcgYW5kIGZvciB0aGUgZXZhbHVhdGlvbiBvZiBhIGxhcmdlIG51bWJlciBvZiAyLUQgTGVnZW5kcmUKICAgIHNlcmllcyBvZiB0aGUgc2FtZSBkZWdyZWVzIGFuZCBzYW1wbGUgcG9pbnRzLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHgsIHkgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXlzIG9mIHBvaW50IGNvb3JkaW5hdGVzLCBhbGwgb2YgdGhlIHNhbWUgc2hhcGUuIFRoZSBkdHlwZXMKICAgICAgICB3aWxsIGJlIGNvbnZlcnRlZCB0byBlaXRoZXIgZmxvYXQ2NCBvciBjb21wbGV4MTI4IGRlcGVuZGluZyBvbgogICAgICAgIHdoZXRoZXIgYW55IG9mIHRoZSBlbGVtZW50cyBhcmUgY29tcGxleC4gU2NhbGFycyBhcmUgY29udmVydGVkIHRvCiAgICAgICAgMS1EIGFycmF5cy4KICAgIGRlZyA6IGxpc3Qgb2YgaW50cwogICAgICAgIExpc3Qgb2YgbWF4aW11bSBkZWdyZWVzIG9mIHRoZSBmb3JtIFt4X2RlZywgeV9kZWddLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbmRlcjJkIDogbmRhcnJheQogICAgICAgIFRoZSBzaGFwZSBvZiB0aGUgcmV0dXJuZWQgbWF0cml4IGlzIGBgeC5zaGFwZSArIChvcmRlciwpYGAsIHdoZXJlCiAgICAgICAgOm1hdGg6YG9yZGVyID0gKGRlZ1swXSsxKSooZGVnKFsxXSsxKWAuICBUaGUgZHR5cGUgd2lsbCBiZSB0aGUgc2FtZQogICAgICAgIGFzIHRoZSBjb252ZXJ0ZWQgYHhgIGFuZCBgeWAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBsZWd2YW5kZXIsIGxlZ3ZhbmRlcjNkLiBsZWd2YWwyZCwgbGVndmFsM2QKCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIGMBAAAAAAAAAAIAAAAEAAAAUwAAAHMUAAAAZwB8AF0MfQF0AHwBgwGRAnEEUwByMAAAACkBclkAAAApAnJCAAAA2gFkcjAAAAByMAAAAHIxAAAAckQAAAAjBQAAcwIAAAAGAHofbGVndmFuZGVyMmQuPGxvY2Fscz4uPGxpc3Rjb21wPmMBAAAAAAAAAAMAAAAEAAAAUwAAAHMgAAAAZwB8AF0YXAJ9AX0CfAF8AmsCbxp8AWQAawWRAnEEUwApAXIBAAAAcjAAAAApA3JCAAAA2gJpZHJ2AAAAcjAAAAByMAAAAHIxAAAAckQAAAAkBQAAcwIAAAAGAHIGAAAAeiVkZWdyZWVzIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGludGVnZXJzcgEAAAApAXJeAAAAZwAAAAAAAAAAKQIuTi5OcjYAAAApAXIoAAAAKQfaA3ppcHJaAAAAcj4AAAByPwAAAHIaAAAAcm8AAAByZQAAACkKcnAAAABycgAAAHItAAAAcnQAAADaCGlzX3ZhbGlk2gRkZWd42gRkZWd52gJ2eNoCdnlydQAAAHIwAAAAcjAAAAByMQAAAHIjAAAA8QQAAHMUAAAAADIOARQBDAEIAQgBGgIKAQoBGgFjBAAAAAAAAAANAAAABwAAAEMAAABzxgAAAGQBZAKEAHwDRACDAX0EZANkAoQAdAB8BHwDgwJEAIMBfQV8BWQEZARkBGcDawNyOHQBZAWDAYIBfARcA30GfQd9CHQCagN8AHwBfAJmA2QGZAeNAmQIFwBcA30AfQF9AnQEfAB8BoMCfQl0BHwBfAeDAn0KdAR8AnwIgwJ9C3wJZAkZAHwKZApkC2QLZAuFAmQLZgQZABQAfAtkCmQLZAtkC2QLhQJmBBkAFAB9DHwMoAV8DGoGZAtkDIUCGQBkDRcAoQFTACkOYRYHAABQc2V1ZG8tVmFuZGVybW9uZGUgbWF0cml4IG9mIGdpdmVuIGRlZ3JlZXMuCgogICAgUmV0dXJucyB0aGUgcHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeCBvZiBkZWdyZWVzIGBkZWdgIGFuZCBzYW1wbGUKICAgIHBvaW50cyBgKHgsIHksIHopYC4gSWYgYGwsIG0sIG5gIGFyZSB0aGUgZ2l2ZW4gZGVncmVlcyBpbiBgeCwgeSwgemAsCiAgICB0aGVuIFRoZSBwc2V1ZG8tVmFuZGVybW9uZGUgbWF0cml4IGlzIGRlZmluZWQgYnkKCiAgICAuLiBtYXRoOjogVlsuLi4sIChtKzEpKG4rMSlpICsgKG4rMSlqICsga10gPSBMX2koeCkqTF9qKHkpKkxfayh6KSwKCiAgICB3aGVyZSBgMCA8PSBpIDw9IGxgLCBgMCA8PSBqIDw9IG1gLCBhbmQgYDAgPD0gaiA8PSBuYC4gIFRoZSBsZWFkaW5nCiAgICBpbmRpY2VzIG9mIGBWYCBpbmRleCB0aGUgcG9pbnRzIGAoeCwgeSwgeilgIGFuZCB0aGUgbGFzdCBpbmRleCBlbmNvZGVzCiAgICB0aGUgZGVncmVlcyBvZiB0aGUgTGVnZW5kcmUgcG9seW5vbWlhbHMuCgogICAgSWYgYGBWID0gbGVndmFuZGVyM2QoeCwgeSwgeiwgW3hkZWcsIHlkZWcsIHpkZWddKWBgLCB0aGVuIHRoZSBjb2x1bW5zCiAgICBvZiBgVmAgY29ycmVzcG9uZCB0byB0aGUgZWxlbWVudHMgb2YgYSAzLUQgY29lZmZpY2llbnQgYXJyYXkgYGNgIG9mCiAgICBzaGFwZSAoeGRlZyArIDEsIHlkZWcgKyAxLCB6ZGVnICsgMSkgaW4gdGhlIG9yZGVyCgogICAgLi4gbWF0aDo6IGNfezAwMH0sIGNfezAwMX0sIGNfezAwMn0sLi4uICwgY197MDEwfSwgY197MDExfSwgY197MDEyfSwuLi4KCiAgICBhbmQgYGBucC5kb3QoViwgYy5mbGF0KWBgIGFuZCBgYGxlZ3ZhbDNkKHgsIHksIHosIGMpYGAgd2lsbCBiZSB0aGUKICAgIHNhbWUgdXAgdG8gcm91bmRvZmYuIFRoaXMgZXF1aXZhbGVuY2UgaXMgdXNlZnVsIGJvdGggZm9yIGxlYXN0IHNxdWFyZXMKICAgIGZpdHRpbmcgYW5kIGZvciB0aGUgZXZhbHVhdGlvbiBvZiBhIGxhcmdlIG51bWJlciBvZiAzLUQgTGVnZW5kcmUKICAgIHNlcmllcyBvZiB0aGUgc2FtZSBkZWdyZWVzIGFuZCBzYW1wbGUgcG9p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ICAgICAgIHktY29vcmRpbmF0ZXMgb2YgdGhlIHNhbXBsZSBwb2ludHMuIFNldmVyYWwgZGF0YSBzZXRzIG9mIHNhbXBsZQogICAgICAgIHBvaW50cyBzaGFyaW5nIHRoZSBzYW1lIHgtY29vcmRpbmF0ZXMgY2FuIGJlIGZpdHRlZCBhdCBvbmNlIGJ5CiAgICAgICAgcGFzc2luZyBpbiBhIDJELWFycmF5IHRoYXQgY29udGFpbnMgb25lIGRhdGFzZXQgcGVyIGNvbHVtbi4KICAgIGRlZyA6IGludCBvciAxLUQgYXJyYXlfbGlrZQogICAgICAgIERlZ3JlZShzKSBvZiB0aGUgZml0dGluZyBwb2x5bm9taWFscy4gSWYgYGRlZ2AgaXMgYSBzaW5nbGUgaW50ZWdlcgogICAgICAgIGFsbCB0ZXJtcyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBgZGVnYCd0aCB0ZXJtIGFyZSBpbmNsdWRlZCBpbiB0aGUKICAgICAgICBmaXQuIEZvciBOdW1QeSB2ZXJzaW9ucyA+PSAxLjExLjAgYSBsaXN0IG9mIGludGVnZXJzIHNwZWNpZnlpbmcgdGhlCiAgICAgICAgZGVncmVlcyBvZiB0aGUgdGVybXMgdG8gaW5jbHVkZSBtYXkgYmUgdXNlZCBpbnN0ZWFkLgogICAgcmNvbmQgOiBmbG9hdCwgb3B0aW9uYWwKICAgICAgICBSZWxhdGl2ZSBjb25kaXRpb24gbnVtYmVyIG9mIHRoZSBmaXQuIFNpbmd1bGFyIHZhbHVlcyBzbWFsbGVyIHRoYW4KICAgICAgICB0aGlzIHJlbGF0aXZlIHRvIHRoZSBsYXJnZXN0IHNpbmd1bGFyIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4gVGhlCiAgICAgICAgZGVmYXVsdCB2YWx1ZSBpcyBsZW4oeCkqZXBzLCB3aGVyZSBlcHMgaXMgdGhlIHJlbGF0aXZlIHByZWNpc2lvbiBvZgogICAgICAgIHRoZSBmbG9hdCB0eXBlLCBhYm91dCAyZS0xNiBpbiBtb3N0IGNhc2VzLgogICAgZnVsbCA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgU3dpdGNoIGRldGVybWluaW5nIG5hdHVyZSBvZiByZXR1cm4gdmFsdWUuIFdoZW4gaXQgaXMgRmFsc2UgKHRoZQogICAgICAgIGRlZmF1bHQpIGp1c3QgdGhlIGNvZWZmaWNpZW50cyBhcmUgcmV0dXJuZWQsIHdoZW4gVHJ1ZSBkaWFnbm9zdGljCiAgICAgICAgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2luZ3VsYXIgdmFsdWUgZGVjb21wb3NpdGlvbiBpcyBhbHNvIHJldHVybmVkLgogICAgdyA6IGFycmF5X2xpa2UsIHNoYXBlIChgTWAsKSwgb3B0aW9uYWwKICAgICAgICBXZWlnaHRzLiBJZiBub3QgTm9uZSwgdGhlIGNvbnRyaWJ1dGlvbiBvZiBlYWNoIHBvaW50CiAgICAgICAgYGAoeFtpXSx5W2ldKWBgIHRvIHRoZSBmaXQgaXMgd2VpZ2h0ZWQgYnkgYHdbaV1gLiBJZGVhbGx5IHRoZQogICAgICAgIHdlaWdodHMgYXJlIGNob3NlbiBzbyB0aGF0IHRoZSBlcnJvcnMgb2YgdGhlIHByb2R1Y3RzIGBgd1tpXSp5W2ldYGAKICAgICAgICBhbGwgaGF2ZSB0aGUgc2FtZSB2YXJpYW5jZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNS4wCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgY29lZiA6IG5kYXJyYXksIHNoYXBlIChNLCkgb3IgKE0sIEspCiAgICAgICAgTGVnZW5kcmUgY29lZmZpY2llbnRzIG9yZGVyZWQgZnJvbSBsb3cgdG8gaGlnaC4gSWYgYHlgIHdhcwogICAgICAgIDItRCwgdGhlIGNvZWZmaWNpZW50cyBmb3IgdGhlIGRhdGEgaW4gY29sdW1uIGsgb2YgYHlgIGFyZSBpbgogICAgICAgIGNvbHVtbiBga2AuIElmIGBkZWdgIGlzIHNwZWNpZmllZCBhcyBhIGxpc3QsIGNvZWZmaWNpZW50cyBmb3IKICAgICAgICB0ZXJtcyBub3QgaW5jbHVkZWQgaW4gdGhlIGZpdCBhcmUgc2V0IGVxdWFsIHRvIHplcm8gaW4gdGhlCiAgICAgICAgcmV0dXJuZWQgYGNvZWZgLgoKICAgIFtyZXNpZHVhbHMsIHJhbmssIHNpbmd1bGFyX3ZhbHVlcywgcmNvbmRdIDogbGlzdAogICAgICAgIFRoZXNlIHZhbHVlcyBhcmUgb25seSByZXR1cm5lZCBpZiBgZnVsbGAgPSBUcnVlCgogICAgICAgIHJlc2lkIC0tIHN1bSBvZiBzcXVhcmVkIHJlc2lkdWFscyBvZiB0aGUgbGVhc3Qgc3F1YXJlcyBmaXQKICAgICAgICByYW5rIC0tIHRoZSBudW1lcmljYWwgcmFuayBvZiB0aGUgc2NhbGVkIFZhbmRlcm1vbmRlIG1hdHJpeAogICAgICAgIHN2IC0tIHNpbmd1bGFyIHZhbHVlcyBvZiB0aGUgc2NhbGVkIFZhbmRlcm1vbmRlIG1hdHJpeAogICAgICAgIHJjb25kIC0tIHZhbHVlIG9mIGByY29uZGAuCgogICAgICAgIEZvciBtb3JlIGRldGFpbHMsIHNlZSBgbGluYWxnLmxzdHNxYC4KCiAgICBXYXJucwogICAgLS0tLS0KICAgIFJhbmtXYXJuaW5nCiAgICAgICAgVGhlIHJhbmsgb2YgdGhlIGNvZWZmaWNpZW50IG1hdHJpeCBpbiB0aGUgbGVhc3Qtc3F1YXJlcyBmaXQgaXMKICAgICAgICBkZWZpY2llbnQuIFRoZSB3YXJuaW5nIGlzIG9ubHkgcmFpc2VkIGlmIGBmdWxsYCA9IEZhbHNlLiAgVGhlCiAgICAgICAgd2FybmluZ3MgY2FuIGJlIHR1cm5lZCBvZmYgYnkKCiAgICAgICAgPj4+IGltcG9ydCB3YXJuaW5ncwogICAgICAgID4+PiB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIFJhbmtXYXJuaW5nKQoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgY2hlYmZpdCwgcG9seWZpdCwgbGFnZml0LCBoZXJtZml0LCBoZXJtZWZpdAogICAgbGVndmFsIDogRXZhbHVhdGVzIGEgTGVnZW5kcmUgc2VyaWVzLgogICAgbGVndmFuZGVyIDogVmFuZGVybW9uZGUgbWF0cml4IG9mIExlZ2VuZHJlIHNlcmllcy4KICAgIGxlZ3dlaWdodCA6IExlZ2VuZHJlIHdlaWdodCBmdW5jdGlvbiAoPSAxKS4KICAgIGxpbmFsZy5sc3RzcSA6IENvbXB1dGVzIGEgbGVhc3Qtc3F1YXJlcyBmaXQgZnJvbSB0aGUgbWF0cml4LgogICAgc2NpcHkuaW50ZXJwb2xhdGUuVW5pdmFyaWF0ZVNwbGluZSA6IENvbXB1dGVzIHNwbGluZSBmaXRzLgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgVGhlIHNvbHV0aW9uIGlzIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIExlZ2VuZHJlIHNlcmllcyBgcGAgdGhhdAogICAgbWluaW1pemVzIHRoZSBzdW0gb2YgdGhlIHdlaWdodGVkIHNxdWFyZWQgZXJyb3JzCgogICAgLi4gbWF0aDo6IEUgPSBcc3VtX2ogd19qXjIgKiB8eV9qIC0gcCh4X2opfF4yLAoKICAgIHdoZXJlIDptYXRoOmB3X2pgIGFyZSB0aGUgd2VpZ2h0cy4gVGhpcyBwcm9ibGVtIGlzIHNvbHZlZCBieSBzZXR0aW5nIHVwCiAgICBhcyB0aGUgKHR5cGljYWxseSkgb3ZlcmRldGVybWluZWQgbWF0cml4IGVxdWF0aW9uCgogICAgLi4gbWF0aDo6IFYoeCkgKiBjID0gdyAqIHksCgogICAgd2hlcmUgYFZgIGlzIHRoZSB3ZWlnaHRlZCBwc2V1ZG8gVmFuZGVybW9uZGUgbWF0cml4IG9mIGB4YCwgYGNgIGFyZSB0aGUKICAgIGNvZWZmaWNpZW50cyB0byBiZSBzb2x2ZWQgZm9yLCBgd2AgYXJlIHRoZSB3ZWlnaHRzLCBhbmQgYHlgIGFyZSB0aGUKICAgIG9ic2VydmVkIHZhbHVlcy4gIFRoaXMgZXF1YXRpb24gaXMgdGhlbiBzb2x2ZWQgdXNpbmcgdGhlIHNpbmd1bGFyIHZhbHVlCiAgICBkZWNvbXBvc2l0aW9uIG9mIGBWYC4KCiAgICBJZiBzb21lIG9mIHRoZSBzaW5ndWxhciB2YWx1ZXMgb2YgYFZgIGFyZSBzbyBzbWFsbCB0aGF0IHRoZXkgYXJlCiAgICBuZWdsZWN0ZWQsIHRoZW4gYSBgUmFua1dhcm5pbmdgIHdpbGwgYmUgaXNzdWVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlCiAgICBjb2VmZmljaWVudCB2YWx1ZXMgbWF5IGJlIHBvb3JseSBkZXRlcm1pbmVkLiBVc2luZyBhIGxvd2VyIG9yZGVyIGZpdAogICAgd2lsbCB1c3VhbGx5IGdldCByaWQgb2YgdGhlIHdhcm5pbmcuICBUaGUgYHJjb25kYCBwYXJhbWV0ZXIgY2FuIGFsc28gYmUKICAgIHNldCB0byBhIHZhbHVlIHNtYWxsZXIgdGhhbiBpdHMgZGVmYXVsdCwgYnV0IHRoZSByZXN1bHRpbmcgZml0IG1heSBiZQogICAgc3B1cmlvdXMgYW5kIGhhdmUgbGFyZ2UgY29udHJpYnV0aW9ucyBmcm9tIHJvdW5kb2ZmIGVycm9yLgoKICAgIEZpdHMgdXNpbmcgTGVnZW5kcmUgc2VyaWVzIGFyZSB1c3VhbGx5IGJldHRlciBjb25kaXRpb25lZCB0aGFuIGZpdHMKICAgIHVzaW5nIHBvd2VyIHNlcmllcywgYnV0IG11Y2ggY2FuIGRlcGVuZCBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZQogICAgc2FtcGxlIHBvaW50cyBhbmQgdGhlIHNtb290aG5lc3Mgb2YgdGhlIGRhdGEuIElmIHRoZSBxdWFsaXR5IG9mIHRoZSBmaXQKICAgIGlzIGluYWRlcXVhdGUgc3BsaW5lcyBtYXkgYmUgYSBnb29kIGFsdGVybmF0aXZlLgoKICAgIFJlZmVyZW5jZXMKICAgIC0tLS0tLS0tLS0KICAgIC4uIFsxXSBXaWtpcGVkaWEsICJDdXJ2ZSBmaXR0aW5nIiwKICAgICAgICAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N1cnZlX2ZpdHRpbmcKCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KCiAgICBnAAAAAAAAAAByBgAAANoCaXVyAQAAAHowZGVnIG11c3QgYmUgYW4gaW50IG9yIG5vbi1lbXB0eSAxLUQgYXJyYXkgb2YgaW50ehFleHBlY3RlZCBkZWcgPj0gMHoYZXhwZWN0ZWQgMUQgdmVjdG9yIGZvciB4eh9leHBlY3RlZCBub24tZW1wdHkgdmVjdG9yIGZvciB4cjcAAAB6HWV4cGVjdGVkIDFEIG9yIDJEIGFycmF5IGZvciB5eiRleHBlY3RlZCB4IGFuZCB5IHRvIGhhdmUgc2FtZSBsZW5ndGhyKAAAAE56GGV4cGVjdGVkIDFEIHZlY3RvciBmb3Igd3okZXhwZWN0ZWQgeCBhbmQgdyB0byBoYXZlIHNhbWUgbGVuZ3RoKQFyTgAAAHohVGhlIGZpdCBtYXkgYmUgcG9vcmx5IGNvbmRpdGlvbmVkKQHaCnN0YWNrbGV2ZWwpH3I+AAAAcm4AAAByYwAAAHJOAAAA2gRraW5kckoAAADaCVR5cGVFcnJvctoDbWlucloAAAByKwAAAHIaAAAAckcAAADaAVRaBWZpbmZv2gNlcHPaCmlzc3ViY2xhc3PaBHR5cGVaD2NvbXBsZXhmbG9hdGluZ9oEc3FydNoGc3F1YXJl2gRyZWFs2gRpbWFn2gNzdW3aAmxhWgVsc3RzcdoFemVyb3NyZQAAANoId2FybmluZ3PaBHdhcm5yKQAAAFoLUmFua1dhcm5pbmcpEnJwAAAAcnIAAAByLQAAAFoFcmNvbmTaBGZ1bGzaAXdaBGxtYXjaBW9yZGVyWgN2YW7aA2xoc9oDcmhzckEAAAByOQAAAFoGcmVzaWRzWgRyYW5rclMAAADaAmNj2gNtc2dyMAAAAHIwAAAAcjEAAAByGwAAAHEFAABzagAAAAB5DgEOAQoDIAEIAQwBCAEKAQgBCgEIARQBCAEQAQgCCgEEAQgBDAIKAQgBCAEWAwYBBgEKAQ4BDAEIARIBCAMIAQgDCgEWAxIBJgIWAQwDHgEMAwwBDAEgAhQBCAEEAxABBAESAgYBEAJjAQAAAAAAAAAGAAAABwAAAEMAAABzMgEAAHQAoAF8AGcBoQFcAX0AdAJ8AIMBZAFrAHIidANkAoMBggF0AnwAgwFkAWsCckp0BKAFfABkAxkACwB8AGQEGQAbAGcBZwGhAVMAdAJ8AIMBZAQYAH0BdARqBnwBfAFmAnwAagdkBY0CfQJkBnQEoAhkAXQEoAl8AaEBFABkBBcAoQEbAH0DfAKgCmQHoQFkBGQIfAFkBBcAhQMZAH0EfAKgCmQHoQF8AWQIfAFkBBcAhQMZAH0FdASgCWQEfAGhAnwDZAh8AWQEGACFAhkAFAB8A2QEfAGFAhkAFAB8BGQJPAB8BHwFZAk8AHwCZAhkCIUCZAdmAgUAGQB8AGQIZAeFAhkAfABkBxkAGwB8A3wDZAcZABsAFAB8AWQBfAEUAGQEGAAbABQAOAADADwAfAJTACkKYZQCAABSZXR1cm4gdGhlIHNjYWxlZCBjb21wYW5pb24gbWF0cml4IG9mIGMuCgogICAgVGhlIGJhc2lzIHBvbHlub21pYWxzIGFyZSBzY2FsZWQgc28gdGhhdCB0aGUgY29tcGFuaW9uIG1hdHJpeCBpcwogICAgc3ltbWV0cmljIHdoZW4gYGNgIGlzIGFuIExlZ2VuZHJlIGJhc2lzIHBvbHlub21pYWwuIFRoaXMgcHJvdmlkZXMKICAgIGJldHRlciBlaWdlbnZhbHVlIGVzdGltYXRlcyB0aGFuIHRoZSB1bnNjYWxlZCBjYXNlIGFuZCBmb3IgYmFzaXMKICAgIHBvbHlub21pYWxzIHRoZSBlaWdlbnZhbHVlcyBhcmUgZ3VhcmFudGVlZCB0byBiZSByZWFsIGlmCiAgICBgbnVtcHkubGluYWxnLmVpZ3ZhbHNoYCBpcyB1c2VkIHRvIG9idGFpbiB0aGVtLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgMS1EIGFycmF5IG9mIExlZ2VuZHJlIHNlcmllcyBjb2VmZmljaWVudHMgb3JkZXJlZCBmcm9tIGxvdyB0byBoaWdoCiAgICAgICAgZGVncmVlLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIG1hdCA6IG5kYXJyYXkKICAgICAgICBTY2FsZWQgY29tcGFuaW9uIG1hdHJpeCBvZiBkaW1lbnNpb25zIChkZWcsIGRlZykuCgogICAgTm90ZXMKICAgIC0tLS0tCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS43LjAKCiAgICByNwAAAHouU2VyaWVzIG11c3QgaGF2ZSBtYXhpbXVtIGRlZ3JlZSBvZiBhdCBsZWFzdCAxLnIBAAAAcgYAAAApAXJOAAAAZwAAAAAAAPA/cigAAABOLikLcikAAAByKgAAAHIrAAAAcloAAAByPgAAAHI/AAAAco4AAAByTgAAAHKIAAAAWgZhcmFuZ2VybwAAACkGcjkAAAByOgAAANoDbWF0ckEAAADaA3RvcFoDYm90cjAAAAByMAAAAHIxAAAAciUAAAA3BgAAcxwAAAAAGw4BDAEIAQwBHAIMARQBHAEYARgBLAEIAUQBYwEAAAAAAAAAAwAAAAUAAABDAAAAc24AAAB0AKABfABnAaEBXAF9AHQCfACDAWQBawByKnQDagRnAHwAagVkAo0CUwB0AnwAgwFkAWsCclB0A6AEfABkAxkACwB8AGQEGQAbAGcBoQFTAHQGfACDAX0BdAegCHwBoQF9AnwCoAmhAAEAfAJTACkFYTMFAAAKICAgIENvbXB1dGUgdGhlIHJvb3RzIG9mIGEgTGVnZW5kcmUgc2VyaWVzLgoKICAgIFJldHVybiB0aGUgcm9vdHMgKGEuay5hLiAiemVyb3MiKSBvZiB0aGUgcG9seW5vbWlhbAoKICAgIC4uIG1hdGg6OiBwKHgpID0gXHN1bV9pIGNbaV0gKiBMX2koeCkuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYyA6IDEtRCBhcnJheV9saWtlCiAgICAgICAgMS1EIGFycmF5IG9mIGNvZWZmaWNpZW50cy4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBvdXQgOiBuZGFycmF5CiAgICAgICAgQXJyYXkgb2YgdGhlIHJvb3RzIG9mIHRoZSBzZXJpZXMuIElmIGFsbCB0aGUgcm9vdHMgYXJlIHJlYWwsCiAgICAgICAgdGhlbiBgb3V0YCBpcyBhbHNvIHJlYWwsIG90aGVyd2lzZSBpdCBpcyBjb21wbGV4LgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgcG9seXJvb3RzLCBjaGVicm9vdHMsIGxhZ3Jvb3RzLCBoZXJtcm9vdHMsIGhlcm1lcm9vdHMKCiAgICBOb3RlcwogICAgLS0tLS0KICAgIFRoZSByb290IGVzdGltYXRlcyBhcmUgb2J0YWluZWQgYXMgdGhlIGVpZ2VudmFsdWVzIG9mIHRoZSBjb21wYW5pb24KICAgIG1hdHJpeCwgUm9vdHMgZmFyIGZyb20gdGhlIG9yaWdpbiBvZiB0aGUgY29tcGxleCBwbGFuZSBtYXkgaGF2ZSBsYXJnZQogICAgZXJyb3JzIGR1ZSB0byB0aGUgbnVtZXJpY2FsIGluc3RhYmlsaXR5IG9mIHRoZSBzZXJpZXMgZm9yIHN1Y2ggdmFsdWVzLgogICAgUm9vdHMgd2l0aCBtdWx0aXBsaWNpdHkgZ3JlYXRlciB0aGFuIDEgd2lsbCBhbHNvIHNob3cgbGFyZ2VyIGVycm9ycyBhcwogICAgdGhlIHZhbHVlIG9mIHRoZSBzZXJpZXMgbmVhciBzdWNoIHBvaW50cyBpcyByZWxhdGl2ZWx5IGluc2Vuc2l0aXZlIHRvCiAgICBlcnJvcnMgaW4gdGhlIHJvb3RzLiBJc29sYXRlZCByb290cyBuZWFyIHRoZSBvcmlnaW4gY2FuIGJlIGltcHJvdmVkIGJ5CiAgICBhIGZldyBpdGVyYXRpb25zIG9mIE5ld3RvbidzIG1ldGhvZC4KCiAgICBUaGUgTGVnZW5kcmUgc2VyaWVzIGJhc2lzIHBvbHlub21pYWxzIGFyZW4ndCBwb3dlcnMgb2YgYGB4YGAgc28gdGhlCiAgICByZXN1bHRzIG9mIHRoaXMgZnVuY3Rpb24gbWF5IHNlZW0gdW5pbnR1aXRpdmUuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gaW1wb3J0IG51bXB5LnBvbHlub21pYWwubGVnZW5kcmUgYXMgbGVnCiAgICA+Pj4gbGVnLmxlZ3Jvb3RzKCgxLCAyLCAzLCA0KSkgIyA0TF8zICsgM0xfMiArIDJMXzEgKyAxTF8wLCBhbGwgcmVhbCByb290cwogICAgYXJyYXkoWy0wLjg1MDk5NTQzLCAtMC4xMTQwNzE5MiwgIDAuNTE1MDY3MzVdKQoKICAgIHI3AAAAKQFyTgAAAHIBAAAAcgYAAAApCnIpAAAAcioAAAByKwAAAHI+AAAAcj8AAAByTgAAAHIlAAAAco0AAABaB2VpZ3ZhbHNyRwAAACkDcjkAAAByRQAAAHJDAAAAcjAAAAByMAAAAHIxAAAAch0AAABjBgAAcxIAAAAALA4BDAEQAQwBGgIIAQoBCAFjAQAAAAAAAAAJAAAABQAAAEMAAABz8gAAAHQAfACDAX0BfAF8AGsDcxh8AWQBawByIHQBZAKDAYIBdAKgA2QDZwF8ABQAZAFnARcAoQF9AnQEfAKDAX0DdAWgBnwDoQF9BHQHfAR8AoMCfQV0B3wEdAh8AoMBgwJ9BnwEfAV8BhsAOAB9BHQHfAR8AmQBZASFAhkAgwJ9B3wHdAKgCXwHoQGgCqEAHQB9B3wGdAKgCXwGoQGgCqEAHQB9BmQBfAd8BhQAGwB9CHwIfAhkBGQEZAWFAxkAFwBkBhsAfQh8BHwEZARkBGQFhQMZABgAZAYbAH0EfAhkB3wIoAuhABsAOQB9CHwEfAhmAlMAKQhh6QMAAAogICAgR2F1c3MtTGVnZW5kcmUgcXVhZHJhdHVyZS4KCiAgICBDb21wdXRlcyB0aGUgc2FtcGxlIHBvaW50cyBhbmQgd2VpZ2h0cyBmb3IgR2F1c3MtTGVnZW5kcmUgcXVhZHJhdHVyZS4KICAgIFRoZXNlIHNhbXBsZSBwb2ludHMgYW5kIHdlaWdodHMgd2lsbCBjb3JyZWN0bHkgaW50ZWdyYXRlIHBvbHlub21pYWxzIG9mCiAgICBkZWdyZWUgOm1hdGg6YDIqZGVnIC0gMWAgb3IgbGVzcyBvdmVyIHRoZSBpbnRlcnZhbCA6bWF0aDpgWy0xLCAxXWAgd2l0aAogICAgdGhlIHdlaWdodCBmdW5jdGlvbiA6bWF0aDpgZih4KSA9IDFgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGRlZyA6IGludAogICAgICAgIE51bWJlciBvZiBzYW1wbGUgcG9pbnRzIGFuZCB3ZWlnaHRzLiBJdCBtdXN0IGJlID49IDEuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgeCA6IG5kYXJyYXkKICAgICAgICAxLUQgbmRhcnJheSBjb250YWluaW5nIHRoZSBzYW1wbGUgcG9pbnRzLgogICAgeSA6IG5kYXJyYXkKICAgICAgICAxLUQgbmRhcnJheSBjb250YWluaW5nIHRoZSB3ZWlnaHRzLgoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgVGhlIHJlc3VsdHMgaGF2ZSBvbmx5IGJlZW4gdGVzdGVkIHVwIHRvIGRlZ3JlZSAxMDAsIGhpZ2hlciBkZWdyZWVzIG1heQogICAgYmUgcHJvYmxlbWF0aWMuIFRoZSB3ZWlnaHRzIGFyZSBkZXRlcm1pbmVkIGJ5IHVzaW5nIHRoZSBmYWN0IHRoYXQKCiAgICAuLiBtYXRoOjogd19rID0gYyAvIChMJ19uKHhfaykgKiBMX3tuLTF9KHhfaykpCgogICAgd2hlcmUgOm1hdGg6YGNgIGlzIGEgY29uc3RhbnQgaW5kZXBlbmRlbnQgb2YgOm1hdGg6YGtgIGFuZCA6bWF0aDpgeF9rYAogICAgaXMgdGhlIGsndGggcm9vdCBvZiA6bWF0aDpgTF9uYCwgYW5kIHRoZW4gc2NhbGluZyB0aGUgcmVzdWx0cyB0byBnZXQKICAgIHRoZSByaWdodCB2YWx1ZSB3aGVuIGludGVncmF0aW5nIDEuCgogICAgcgYAAAB6ImRlZyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJyAQAAAE5yKAAAAHI3AAAAZwAAAAAAAABAKQxyWQAAAHJaAAAAcj4AAAByPwAAAHIlAAAAco0AAABaCGVpZ3ZhbHNochQAAAByFQAAANoDYWJz2gNtYXhyjAAAACkJci0AAABydAAAAHI5AAAAckUAAABycAAAAFoCZHlaAmRmWgJmbXKSAAAAcjAAAAByMAAAAHIxAAAAciYAAACbBgAAcyIAAAAAJAgBEAEIBBYBCAEKAwoBDgEMBBIBEgESAQwDFgEWAxACYwEAAAAAAAAAAgAAAAIAAABDAAAAcxAAAAB8AGQBFABkAhcAfQF8AVMAKQNh6QEAAAogICAgV2VpZ2h0IGZ1bmN0aW9uIG9mIHRoZSBMZWdlbmRyZSBwb2x5bm9taWFscy4KCiAgICBUaGUgd2VpZ2h0IGZ1bmN0aW9uIGlzIDptYXRoOmAxYCBhbmQgdGhlIGludGVydmFsIG9mIGludGVncmF0aW9uIGlzCiAgICA6bWF0aDpgWy0xLCAxXWAuIFRoZSBMZWdlbmRyZSBwb2x5bm9taWFscyBhcmUgb3J0aG9nb25hbCwgYnV0IG5vdAogICAgbm9ybWFsaXplZCwgd2l0aCByZXNwZWN0IHRvIHRoaXMgd2VpZ2h0IGZ1bmN0aW9uLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHggOiBhcnJheV9saWtlCiAgICAgICBWYWx1ZXMgYXQgd2hpY2ggdGhlIHdlaWdodCBmdW5jdGlvbiB3aWxsIGJlIGNvbXB1dGVkLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHcgOiBuZGFycmF5CiAgICAgICBUaGUgd2VpZ2h0IGZ1bmN0aW9uIGF0IGB4YC4KCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIGcAAAAAAAAAAGcAAAAAAADwP3IwAAAAKQJycAAAAHKSAAAAcjAAAAByMAAAAHIxAAAAcicAAADfBgAAcwQAAAAAGAwBYwAAAAAAAAAAAAAAAAMAAABAAAAAc4gAAABlAFoBZABaAmQBWgNlBGUFgwFaBmUEZQeDAVoIZQRlCYMBWgplBGULgwFaDGUEZQ2DAVoOZQRlD4MBWhBlBGURgwFaEmUEZRODAVoUZQRlFYMBWhZlBGUXgwFaGGUEZRmDAVoaZQRlG4MBWhxkAlodZR6gH2UgoQFaIWUeoB9lIKEBWiJkA1MAKQRyHgAAAGEbAwAAQSBMZWdlbmRyZSBzZXJpZXMgY2xhc3MuCgogICAgVGhlIExlZ2VuZHJlIGNsYXNzIHByb3ZpZGVzIHRoZSBzdGFuZGFyZCBQeXRob24gbnVtZXJpY2FsIG1ldGhvZHMKICAgICcrJywgJy0nLCAnKicsICcvLycsICclJywgJ2Rpdm1vZCcsICcqKicsIGFuZCAnKCknIGFzIHdlbGwgYXMgdGhlCiAgICBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIGxpc3RlZCBpbiB0aGUgYEFCQ1BvbHlCYXNlYCBkb2N1bWVudGF0aW9uLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGNvZWYgOiBhcnJheV9saWtlCiAgICAgICAgTGVnZW5kcmUgY29lZmZpY2llbnRzIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgZGVncmVlLCBpLmUuLAogICAgICAgIGBgKDEsIDIsIDMpYGAgZ2l2ZXMgYGAxKlBfMCh4KSArIDIqUF8xKHgpICsgMypQXzIoeClgYC4KICAgIGRvbWFpbiA6ICgyLCkgYXJyYXlfbGlrZSwgb3B0aW9uYWwKICAgICAgICBEb21haW4gdG8gdXNlLiBUaGUgaW50ZXJ2YWwgYGBbZG9tYWluWzBdLCBkb21haW5bMV1dYGAgaXMgbWFwcGVkCiAgICAgICAgdG8gdGhlIGludGVydmFsIGBgW3dpbmRvd1swXSwgd2luZG93WzFdXWBgIGJ5IHNoaWZ0aW5nIGFuZCBzY2FsaW5nLgogICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFstMSwgMV0uCiAgICB3aW5kb3cgOiAoMiwpIGFycmF5X2xpa2UsIG9wdGlvbmFsCiAgICAgICAgV2luZG93LCBzZWUgYGRvbWFpbmAgZm9yIGl0cyB1c2UuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFstMSwgMV0uCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNi4wCgogICAgWgNsZWdOKSPaCF9fbmFtZV9f2gpfX21vZHVsZV9f2gxfX3F1YWxuYW1lX1/aB19fZG9jX1/aDHN0YXRpY21ldGhvZHIOAAAAWgRfYWRkcg8AAABaBF9zdWJyEQAAAFoEX211bHISAAAAWgRfZGl2chMAAABaBF9wb3dyFAAAAFoEX3ZhbHIWAAAA2gRfaW50chUAAABaBF9kZXJyGwAAAFoEX2ZpdHINAAAA2gVfbGluZXIdAAAAWgZfcm9vdHNyGQAAAFoKX2Zyb21yb290c1oIbmlja25hbWVyPgAAAHI/AAAAcgwAAADaBmRvbWFpbtoGd2luZG93cjAAAAByMAAAAHIwAAAAcjEAAAByHgAAAP4GAABzIAAAAAgVBAIIAQgBCAEIAQgBCAEIAQgBCAEIAQgBCAMEAQoBKQFyWAAAACkDcgYAAAByBgAAAHIBAAAAKQFUKQNORk4pNHKfAAAA2gpfX2Z1dHVyZV9fcgIAAAByAwAAAHIEAAAAco8AAADaBW51bXB5cj4AAABaDG51bXB5LmxpbmFsZ9oGbGluYWxnco0AAABaFW51bXB5LmNvcmUubXVsdGlhcnJheXIFAAAA2gByBwAAAHIpAAAAWglfcG9seWJhc2VyCAAAANoHX19hbGxfX1oIdHJpbWNvZWZyHAAAAHIYAAAAchcAAAByPwAAAHIMAAAAcgkAAAByCgAAAHILAAAAcg0AAAByGQAAAHIOAAAAcg8AAAByEAAAAHIRAAAAchIAAAByEwAAAHIVAAAAchYAAAByFAAAAHIfAAAAciEAAAByIAAAAHIiAAAAchoAAAByIwAAAHIkAAAAchsAAAByJQAAAHIdAAAAciYAAAByJwAAAHIeAAAAcjAAAAByMAAAAHIwAAAAcjEAAADaCDxtb2R1bGU+UwAAAHNcAAAABAEUAggBCAEMAQwCDAEMAwwBDgEKAQwBCgEIAgYDCDAIQg4DDAMMAw4DCCQIQggyCDUILghECEQKMwpgFH8AAQpYCDgINwg7CDsINwg/CEEKfwBHCCwIOAhECB8=
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 10
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
chebyshev.cpython-37.pyc
60.57 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hermite.cpython-37.pyc
55.33 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hermite_e.cpython-37.pyc
55.36 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
laguerre.cpython-37.pyc
53.73 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
legendre.cpython-37.pyc
54.61 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
polynomial.cpython-37.pyc
50.42 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
polyutils.cpython-37.pyc
11.91 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-37.pyc
603 B
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_polybase.cpython-37.pyc
30.24 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
1.37 KB
lrw-r--r--
2023-04-24 19:38:36
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).