VXNpbmcgdGhlIFB5dGhvbiBub3QgT3BlcmF0b3IsSG93YXJkIEZyYW5jaXMsMTQgTGVzc29ucywzMG0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKU1FMaXRlIGFuZCBTUUxBbGNoZW15IGluIFB5dGhvbjogTW92aW5nIFlvdXIgRGF0YSBCZXlvbmQgRmxhdCBGaWxlcyxDaHJpc3RvcGhlciBUcnVkZWF1LDggTGVzc29ucywxaCZuYnNwOzExbSwmcXVvdDtkYXRhYmFzZXMsIGludGVybWVkaWF0ZSwgd2ViLWRldiZxdW90OwpVc2luZyB0aGUgUHl0aG9uIGFuZCBPcGVyYXRvcixIb3dhcmQgRnJhbmNpcywxNSBMZXNzb25zLDM2bSwmcXVvdDtiYXNpY3MsIGJlc3QtcHJhY3RpY2VzLCBweXRob24mcXVvdDsKQnVpbGRpbmcgYSBTaXRlIENvbm5lY3Rpdml0eSBDaGVja2VyLERhcnJlbiBKb25lcywxMCBMZXNzb25zLDQxbSwmcXVvdDtpbnRlcm1lZGlhdGUsIHByb2plY3RzLCBweXRob24mcXVvdDsKUHl0aG9uIG1tYXA6IERvaW5nIEZpbGUgSS9PIFdpdGggTWVtb3J5IE1hcHBpbmcsQ2hyaXN0b3BoZXIgVHJ1ZGVhdSw2IExlc3NvbnMsNDFtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7CkNvbWJpbmluZyBEYXRhIGluIHBhbmRhcyBXaXRoIGNvbmNhdCgpIGFuZCBtZXJnZSgpLE1hcnRpbiBCcmV1c3MsMjAgTGVzc29ucywxaCZuYnNwOzM0bSwmcXVvdDtkYXRhLXNjaWVuY2UsIGludGVybWVkaWF0ZSZxdW90OwpXcml0ZSBhbmQgVGVzdCBhIFB5dGhvbiBGdW5jdGlvbjogSW50ZXJ2aWV3IFByYWN0aWNlLFJlYWwgUHl0aG9uIFRlYW0sOCBMZXNzb25zLDU0bSx0ZXN0aW5nCkRhdGEgQ2xlYW5pbmcgV2l0aCBwYW5kYXMgYW5kIE51bVB5LElhbiBDdXJyaWUsMTYgTGVzc29ucywxaCZuYnNwOzI4bSwmcXVvdDtkYXRhLXNjaWVuY2UsIGludGVybWVkaWF0ZSZxdW90OwpFeHBsb3JpbmcgU2NvcGVzIGFuZCBDbG9zdXJlcyBpbiBQeXRob24sTWFydGluIEJyZXVzcyw1IExlc3NvbnMsMjhtLCZxdW90O2NvbW11bml0eSwgaW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKVXNpbmcgUHl0aG9uIENsYXNzIENvbnN0cnVjdG9ycyxEYXJyZW4gSm9uZXMsMTEgTGVzc29ucywzNm0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKRGVwbG95aW5nIGEgRmxhc2sgQXBwbGljYXRpb24gVXNpbmcgSGVyb2t1LERhcnJlbiBKb25lcyw2IExlc3NvbnMsMjhtLCZxdW90O2Rldm9wcywgZmxhc2ssIGludGVybWVkaWF0ZSwgd2ViLWRldiZxdW90OwpUZXN0aW5nIFlvdXIgQ29kZSBXaXRoIHB5dGVzdCxDaHJpc3RvcGhlciBUcnVkZWF1LDUgTGVzc29ucywyNW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24sIHRlc3RpbmcmcXVvdDsKQnVpbGRpbmcgYSBEamFuZ28gVXNlciBNYW5hZ2VtZW50IFN5c3RlbSxEYXJyZW4gSm9uZXMsMTMgTGVzc29ucyw0Mm0sJnF1b3Q7ZGphbmdvLCBpbnRlcm1lZGlhdGUmcXVvdDsKRXhwbG9yaW5nIEtleXdvcmRzIGluIFB5dGhvbixQaGlsaXBwIEFjc2FueSw3IExlc3NvbnMsMzBtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClB5dGhvbiBSRVNUIEFQSXMgV2l0aCBGYXN0QVBJLERvdWdsYXMgU3Rhcm5lcyw5IExlc3NvbnMsMzdtLCZxdW90O2FwaSwgYmFzaWNzLCB3ZWItZGV2JnF1b3Q7ClVzaW5nIFB5dGhvbidzIGRhdGV0aW1lIE1vZHVsZSxDaHJpc3RvcGhlciBUcnVkZWF1LDYgTGVzc29ucywzNW0saW50ZXJtZWRpYXRlClB5dGhvbiBCYXNpY3M6IENvZGUgWW91ciBGaXJzdCBQeXRob24gUHJvZ3JhbSxDaHJpc3RvcGhlciBCYWlsZXksNiBMZXNzb25zLDMzbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpTb3J0aW5nIERhdGEgaW4gUHl0aG9uIFdpdGggUGFuZGFzLERhcnJlbiBKb25lcyw5IExlc3NvbnMsMjZtLCZxdW90O2RhdGEtc2NpZW5jZSwgaW50ZXJtZWRpYXRlJnF1b3Q7CkNvdW50aW5nIFdpdGggUHl0aG9uJ3MgQ291bnRlcixDaHJpc3RvcGhlciBUcnVkZWF1LDcgTGVzc29ucywzNm0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKRXhwbG9yaW5nIHRoZSBGaWJvbmFjY2kgU2VxdWVuY2UgV2l0aCBQeXRob24sRGFycmVuIEpvbmVzLDExIExlc3NvbnMsMjNtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7ClN0YXJ0aW5nIFdpdGggTGluZWFyIFJlZ3Jlc3Npb24gaW4gUHl0aG9uLENlc2FyIEFndWlsYXIsOSBMZXNzb25zLDQ2bSwmcXVvdDtkYXRhLXNjaWVuY2UsIGludGVybWVkaWF0ZSwgbWFjaGluZS1sZWFybmluZyZxdW90OwpQeXRob24gYW55KCk6IFBvd2VyZWQgVXAgQm9vbGVhbiBGdW5jdGlvbixJYW4gQ3VycmllLDkgTGVzc29ucywzNm0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKRGVmaW5pbmcgUHl0aG9uIEZ1bmN0aW9ucyBXaXRoIE9wdGlvbmFsIEFyZ3VtZW50cyxEYXJyZW4gSm9uZXMsMTMgTGVzc29ucywzNG0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKUHl0aG9uJ3MgbGVuKCkgRnVuY3Rpb24sQ2hyaXN0b3BoZXIgVHJ1ZGVhdSw2IExlc3NvbnMsMjRtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7Ckxvb3BpbmcgV2l0aCBQeXRob24gZW51bWVyYXRlKCksUGhpbGlwcCBBY3NhbnksNyBMZXNzb25zLDI4bSwmcXVvdDtiYXNpY3MsIGJlc3QtcHJhY3RpY2VzJnF1b3Q7ClN0YXJ0aW5nIFdpdGggUHl0aG9uIElETEUsRGFycmVuIEpvbmVzLDggTGVzc29ucywyNW0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKV29ya2luZyBXaXRoIFBpcGVudixDaHJpc3RvcGhlciBUcnVkZWF1LDUgTGVzc29ucywzNW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCB0b29scyZxdW90OwpEZXBsb3kgWW91ciBQeXRob24gU2NyaXB0IG9uIHRoZSBXZWIgV2l0aCBGbGFzayxEYXJyZW4gSm9uZXMsMTEgTGVzc29ucyw1Nm0sJnF1b3Q7ZGV2b3BzLCBmbGFzaywgaW50ZXJtZWRpYXRlLCB3ZWItZGV2JnF1b3Q7ClJhaXNpbmcgYW5kIEhhbmRsaW5nIFB5dGhvbiBFeGNlcHRpb25zLE1hcnRpbiBCcmV1c3MsOSBMZXNzb25zLDMzbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpIb3N0IFlvdXIgRGphbmdvIFByb2plY3Qgb24gSGVyb2t1LEJhcnRvc3ogWmFjennFhHNraSwxNCBMZXNzb25zLDQ1bSwmcXVvdDtkZXZvcHMsIGRqYW5nbywgaW50ZXJtZWRpYXRlLCBweXRob24sIHdlYi1kZXYmcXVvdDsKJnF1b3Q7QmluYXJ5LCBCeXRlcywgYW5kIEJpdHdpc2UgT3BlcmF0b3JzIGluIFB5dGhvbiZxdW90OyxDaHJpc3RvcGhlciBUcnVkZWF1LDEyIExlc3NvbnMsMWgmbmJzcDszOW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKRGF0YSBWaXN1YWxpemF0aW9uIEludGVyZmFjZXMgaW4gUHl0aG9uIFdpdGggRGFzaCxEYXJyZW4gSm9uZXMsMTMgTGVzc29ucyw1MW0sJnF1b3Q7ZGF0YS1zY2llbmNlLCBpbnRlcm1lZGlhdGUmcXVvdDsKQnVpbGRpbmcgYSBOZXVyYWwgTmV0d29yayAmYW1wOyBNYWtpbmcgUHJlZGljdGlvbnMgV2l0aCBQeXRob24gQUksRG91Z2xhcyBTdGFybmVzLDggTGVzc29ucywyNW0sJnF1b3Q7ZGF0YS1zY2llbmNlLCBpbnRlcm1lZGlhdGUsIG1hY2hpbmUtbGVhcm5pbmcmcXVvdDsKQnVpbGRpbmcgTGlzdHMgV2l0aCBQeXRob24ncyAuYXBwZW5kKCksSG93YXJkIEZyYW5jaXMsMTEgTGVzc29ucyw0MG0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKVXNpbmcgcGx0LnNjYXR0ZXIoKSB0byBWaXN1YWxpemUgRGF0YSBpbiBQeXRob24sRGFycmVuIEpvbmVzLDExIExlc3NvbnMsMzFtLGludGVybWVkaWF0ZQpSZWFkaW5nIElucHV0IGFuZCBXcml0aW5nIE91dHB1dCBpbiBQeXRob24sTWFydGluIEJyZXVzcyw2IExlc3NvbnMsMTVtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7CldyaXRpbmcgSWRpb21hdGljIFB5dGhvbixNYXJ0aW4gQnJldXNzLDEwIExlc3NvbnMsMjJtLCZxdW90O2Jhc2ljcywgYmVzdC1wcmFjdGljZXMsIHB5dGhvbiZxdW90OwpQeXRob24gQXNzaWdubWVudCBFeHByZXNzaW9ucyBhbmQgVXNpbmcgdGhlIFdhbHJ1cyBPcGVyYXRvcixEYXJyZW4gSm9uZXMsMTMgTGVzc29ucyw0N20sJnF1b3Q7YmVzdC1wcmFjdGljZXMsIGludGVybWVkaWF0ZSZxdW90OwpVc2luZyBQeWdhbWUgdG8gQnVpbGQgYW4gQXN0ZXJvaWRzIEdhbWUgaW4gUHl0aG9uLENocmlzdG9waGVyIFRydWRlYXUsMTQgTGVzc29ucywxaCZuYnNwOzI0bSwmcXVvdDtnYW1lZGV2LCBpbnRlcm1lZGlhdGUsIHByb2plY3RzJnF1b3Q7CkNvb2wgTmV3IEZlYXR1cmVzIGluIFB5dGhvbiAzLjEwLENocmlzdG9waGVyIFRydWRlYXUsOSBMZXNzb25zLDU4bSwmcXVvdDtpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwomcXVvdDtSb2NrLCBQYXBlciwgU2Npc3NvcnMgV2l0aCBQeXRob246IEEgQ29tbWFuZCBMaW5lIEdhbWUmcXVvdDssQ2hyaXN0b3BoZXIgVHJ1ZGVhdSw1IExlc3NvbnMsMjZtLCZxdW90O2Jhc2ljcywgZ2FtZWRldiwgcHl0aG9uJnF1b3Q7ClBhc3MgYnkgUmVmZXJlbmNlIGluIFB5dGhvbjogQmVzdCBQcmFjdGljZXMsSG93YXJkIEZyYW5jaXMsMTYgTGVzc29ucywxaCZuYnNwOzE3bSwmcXVvdDtiZXN0LXByYWN0aWNlcywgaW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKVXNpbmcgRGF0YSBDbGFzc2VzIGluIFB5dGhvbixEYXJyZW4gSm9uZXMsMTIgTGVzc29ucyw0NW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKR3JhcGggWW91ciBEYXRhIFdpdGggUHl0aG9uIGFuZCBnZ3Bsb3QsTWFydGluIEJyZXVzcywxOCBMZXNzb25zLDU5bSwmcXVvdDtkYXRhLXNjaWVuY2UsIGludGVybWVkaWF0ZSZxdW90OwpTcGxpdHRpbmcgRGF0YXNldHMgV2l0aCBzY2lraXQtbGVhcm4gYW5kIHRyYWluX3Rlc3Rfc3BsaXQoKSxEYXJyZW4gSm9uZXMsMTEgTGVzc29ucywyOW0sJnF1b3Q7ZGF0YS1zY2llbmNlLCBpbnRlcm1lZGlhdGUsIG1hY2hpbmUtbGVhcm5pbmcmcXVvdDsKRXhwbG9yaW5nIHRoZSBQeXRob24gbWF0aCBNb2R1bGUsQ2VzYXIgQWd1aWxhciwxNiBMZXNzb25zLDFoJm5ic3A7MjBtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7ClJlYWRpbmcgYW5kIFdyaXRpbmcgRmlsZXMgV2l0aCBQYW5kYXMsRGFycmVuIEpvbmVzLDE5IExlc3NvbnMsNDltLCZxdW90O2RhdGFiYXNlcywgZGF0YS1zY2llbmNlLCBpbnRlcm1lZGlhdGUmcXVvdDsKVXNpbmcgdGhlIFB5dGhvbiByZXR1cm4gU3RhdGVtZW50IEVmZmVjdGl2ZWx5LEhvd2FyZCBGcmFuY2lzLDIxIExlc3NvbnMsMWgmbmJzcDsyNm0sJnF1b3Q7YmFzaWNzLCBiZXN0LXByYWN0aWNlcywgcHl0aG9uJnF1b3Q7ClVzaW5nIHNsZWVwKCkgdG8gQ29kZSBhIFB5dGhvbiBVcHRpbWUgQm90LE1hcnRpbiBCcmV1c3MsOCBMZXNzb25zLDIybSwmcXVvdDtpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwpUaGUgUGFuZGFzIERhdGFGcmFtZTogV29ya2luZyBXaXRoIERhdGEgRWZmaWNpZW50bHksQ2VzYXIgQWd1aWxhciwyNSBMZXNzb25zLDJoJm5ic3A7MTBtLCZxdW90O2RhdGEtc2NpZW5jZSwgaW50ZXJtZWRpYXRlJnF1b3Q7ClNwZWVjaCBSZWNvZ25pdGlvbiBXaXRoIFB5dGhvbixEYXJyZW4gSm9uZXMsMTEgTGVzc29ucywzOG0sJnF1b3Q7YWR2YW5jZWQsIGRhdGEtc2NpZW5jZSwgbWFjaGluZS1sZWFybmluZyZxdW90OwpUaGUgU3F1YXJlIFJvb3QgRnVuY3Rpb24gaW4gUHl0aG9uLENocmlzdG9waGVyIFRydWRlYXUsNSBMZXNzb25zLDE5bSxiYXNpY3MKRGVmaW5pbmcgYW5kIENhbGxpbmcgUHl0aG9uIEZ1bmN0aW9ucyxIb3dhcmQgRnJhbmNpcywyNyBMZXNzb25zLDJoJm5ic3A7MjNtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClB5dGhvbiBJbm5lciBGdW5jdGlvbnMsQ2hyaXN0b3BoZXIgVHJ1ZGVhdSw2IExlc3NvbnMsMzdtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7ClB5dGhvbiB2cyBKYXZhU2NyaXB0IGZvciBQeXRob24gRGV2ZWxvcGVycyxDaHJpc3RvcGhlciBUcnVkZWF1LDEzIExlc3NvbnMsMWgmbmJzcDs1Nm0sJnF1b3Q7ZnJvbnQtZW5kLCBpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwpVc2luZyBQYW5kYXMgdG8gTWFrZSBhIEdyYWRlYm9vayBpbiBQeXRob24sQ2VzYXIgQWd1aWxhciwxMyBMZXNzb25zLDFoJm5ic3A7MzdtLCZxdW90O2FkdmFuY2VkLCBkYXRhLXNjaWVuY2UsIHByb2plY3RzJnF1b3Q7ClB5dGhvbiBCYXNpY3M6IFNldHRpbmcgVXAgUHl0aG9uLERhdmlkIEFtb3MsNSBMZXNzb25zLDI1bSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpFeHBsb3JlIFlvdXIgRGF0YXNldCBXaXRoIFBhbmRhcyxEb3VnbGFzIFN0YXJuZXMsMTQgTGVzc29ucyw0N20sJnF1b3Q7YmFzaWNzLCBkYXRhLXNjaWVuY2UmcXVvdDsKSG93IHRvIFNldCBVcCBhIERqYW5nbyBQcm9qZWN0LE1hcnRpbiBCcmV1c3MsMTAgTGVzc29ucywzMm0sJnF1b3Q7YmFzaWNzLCBiZXN0LXByYWN0aWNlcywgZGphbmdvLCB3ZWItZGV2JnF1b3Q7ClVzaW5nIHRoZSBQeXRob24gb3IgT3BlcmF0b3IsSG93YXJkIEZyYW5jaXMsMjAgTGVzc29ucywxaCwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpTdGFja3MgYW5kIFF1ZXVlczogU2VsZWN0aW5nIHRoZSBJZGVhbCBEYXRhIFN0cnVjdHVyZSxDaHJpc3RvcGhlciBUcnVkZWF1LDEwIExlc3NvbnMsNDBtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClNpbXBsaWZ5IFB5dGhvbiBHVUkgRGV2ZWxvcG1lbnQgV2l0aCBQeVNpbXBsZUdVSSxEYXJyZW4gSm9uZXMsOSBMZXNzb25zLDM1bSwmcXVvdDtndWksIGludGVybWVkaWF0ZSZxdW90OwpQeXRob24ncyBtYXAoKSBGdW5jdGlvbjogVHJhbnNmb3JtaW5nIEl0ZXJhYmxlcyxDZXNhciBBZ3VpbGFyLDkgTGVzc29ucywxaCZuYnNwOzE3bSwmcXVvdDtiYXNpY3MsIGJlc3QtcHJhY3RpY2VzLCBweXRob24mcXVvdDsKTGVhcm4gVGV4dCBDbGFzc2lmaWNhdGlvbiBXaXRoIFB5dGhvbiBhbmQgS2VyYXMsRG91Z2xhcyBTdGFybmVzLDEwIExlc3NvbnMsMzZtLCZxdW90O2FkdmFuY2VkLCBkYXRhLXNjaWVuY2UsIG1hY2hpbmUtbGVhcm5pbmcmcXVvdDsKU3RhcnQgTWFuYWdpbmcgTXVsdGlwbGUgUHl0aG9uIFZlcnNpb25zIFdpdGggcHllbnYsSm9oYW4gVmVyZ2VlciwxNCBMZXNzb25zLDQwbSwmcXVvdDthZHZhbmNlZCwgdG9vbHMmcXVvdDsKUHl0aG9uIHZzIEphdmE6IE9iamVjdCBPcmllbnRlZCBQcm9ncmFtbWluZyxIb3dhcmQgRnJhbmNpcywxNiBMZXNzb25zLDFoJm5ic3A7MTdtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7ClVuZGVyc3RhbmRpbmcgUHl0aG9uIExpc3QgQ29tcHJlaGVuc2lvbnMsUmljaCBCaWJieSw1IExlc3NvbnMsMThtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClJlY29yZHMgYW5kIFNldHM6IFNlbGVjdGluZyB0aGUgSWRlYWwgRGF0YSBTdHJ1Y3R1cmUsQ2hyaXN0b3BoZXIgVHJ1ZGVhdSw1IExlc3NvbnMsMzRtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClB5dGhvbiBCb29sZWFuczogTGV2ZXJhZ2luZyB0aGUgVmFsdWVzIG9mIFRydXRoLENlc2FyIEFndWlsYXIsOSBMZXNzb25zLDFoJm5ic3A7OW0saW50ZXJtZWRpYXRlCkRqYW5nbyBWaWV3IEF1dGhvcml6YXRpb246IFJlc3RyaWN0aW5nIEFjY2VzcyxEYXJyZW4gSm9uZXMsOCBMZXNzb25zLDMybSwmcXVvdDtkamFuZ28sIGludGVybWVkaWF0ZSwgd2ViLWRldiZxdW90OwpOYXZpZ2F0aW5nIE5hbWVzcGFjZXMgYW5kIFNjb3BlIGluIFB5dGhvbixKb2hhbiBWZXJnZWVyLDExIExlc3NvbnMsMjdtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7CkRpY3Rpb25hcmllcyBhbmQgQXJyYXlzOiBTZWxlY3RpbmcgdGhlIElkZWFsIERhdGEgU3RydWN0dXJlLENocmlzdG9waGVyIFRydWRlYXUsOSBMZXNzb25zLDUwbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpDcmVhdGluZyBQeVF0IExheW91dHMgZm9yIEdVSSBBcHBsaWNhdGlvbnMsQ2hyaXN0aWFuIEtvY2gsMTIgTGVzc29ucywxaCZuYnNwOzltLCZxdW90O2d1aSwgaW50ZXJtZWRpYXRlJnF1b3Q7ClB5dGhvbiBNb2R1bG86IFVzaW5nIHRoZSAlIE9wZXJhdG9yLENocmlzdG9waGVyIFRydWRlYXUsNiBMZXNzb25zLDMzbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpQbG90IFdpdGggUGFuZGFzOiBQeXRob24gRGF0YSBWaXN1YWxpemF0aW9uIEJhc2ljcyxEYXJyZW4gSm9uZXMsOSBMZXNzb25zLDI4bSwmcXVvdDtkYXRhLXNjaWVuY2UsIGludGVybWVkaWF0ZSZxdW90OwpFdmFsdWF0ZSBFeHByZXNzaW9ucyBEeW5hbWljYWxseSBXaXRoIFB5dGhvbiBldmFsKCksQ2hyaXN0b3BoZXIgVHJ1ZGVhdSw4IExlc3NvbnMsNDltLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7CkludHJvZHVjdGlvbiB0byBTb3J0aW5nIEFsZ29yaXRobXMgaW4gUHl0aG9uLExpYW0gUHVsc2lmZXIsOSBMZXNzb25zLDFoJm5ic3A7M20sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKTWFuYWdpbmcgUHl0aG9uIERlcGVuZGVuY2llcyxEYW4gQmFkZXIsMzcgTGVzc29ucywxaCZuYnNwOzU5bSwmcXVvdDtiZXN0LXByYWN0aWNlcywgaW50ZXJtZWRpYXRlJnF1b3Q7CkJ1aWxkaW5nIEhUVFAgQVBJcyBXaXRoIERqYW5nbyBSRVNUIEZyYW1ld29yayxDaHJpc3RvcGhlciBUcnVkZWF1LDEzIExlc3NvbnMsMmgmbmJzcDsxMG0sJnF1b3Q7YWR2YW5jZWQsIGFwaSwgZGphbmdvLCB3ZWItZGV2JnF1b3Q7CkRqYW5nbyBBZG1pbiBDdXN0b21pemF0aW9uLERhcnJlbiBKb25lcywxMSBMZXNzb25zLDI5bSwmcXVvdDthZHZhbmNlZCwgZGphbmdvLCB3ZWItZGV2JnF1b3Q7ClNlcmlhbGl6aW5nIE9iamVjdHMgV2l0aCB0aGUgUHl0aG9uIHBpY2tsZSBNb2R1bGUsSm9lIFRhdHVza28sOSBMZXNzb25zLDI4bSwmcXVvdDtpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwpQeXRob24gVHVydGxlIGZvciBCZWdpbm5lcnMsRGFycmVuIEpvbmVzLDEwIExlc3NvbnMsMzdtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClNwZWVkIFVwIFB5dGhvbiBXaXRoIENvbmN1cnJlbmN5LENocmlzdG9waGVyIFRydWRlYXUsOSBMZXNzb25zLDFoJm5ic3A7MTJtLCZxdW90O2FkdmFuY2VkLCBiZXN0LXByYWN0aWNlcyZxdW90OwpIb3cgUHl0aG9uIE1hbmFnZXMgTWVtb3J5LEF1c3RpbiBDZXBhbGlhLDEwIExlc3NvbnMsMjdtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7CkZvcm1hdHRpbmcgUHl0aG9uIFN0cmluZ3MsTGlhbSBQdWxzaWZlciw3IExlc3NvbnMsMzJtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClJlZ3VsYXIgRXhwcmVzc2lvbnMgYW5kIEJ1aWxkaW5nIFJlZ2V4ZXMgaW4gUHl0aG9uLENocmlzdG9waGVyIFRydWRlYXUsMTQgTGVzc29ucywxaCZuYnNwOzUzbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpIYW5kbGluZyBNaXNzaW5nIEtleXMgV2l0aCB0aGUgUHl0aG9uIGRlZmF1bHRkaWN0IFR5cGUsQ2hyaXN0aWFuIE1vbmRvcmYsNyBMZXNzb25zLDQzbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpTaW11bGF0aW5nIFJlYWwtV29ybGQgUHJvY2Vzc2VzIGluIFB5dGhvbiBXaXRoIFNpbVB5LEpvZSBUYXR1c2tvLDExIExlc3NvbnMsMjdtLCZxdW90O2RhdGEtc2NpZW5jZSwgaW50ZXJtZWRpYXRlLCB0b29scyZxdW90OwpDcmVhdGluZyBhIEJpbmFyeSBTZWFyY2ggaW4gUHl0aG9uLExpYW0gUHVsc2lmZXIsOCBMZXNzb25zLDQ1bSwmcXVvdDtpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwpHZXR0aW5nIFN0YXJ0ZWQgV2l0aCBNaWNyb1B5dGhvbixEYXJyZW4gSm9uZXMsMTAgTGVzc29ucyw1NW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKV2ViIFNjcmFwaW5nIFdpdGggQmVhdXRpZnVsIFNvdXAgYW5kIFB5dGhvbixNYXJ0aW4gQnJldXNzLDI0IExlc3NvbnMsMWgmbmJzcDszOW0sJnF1b3Q7ZGF0YS1zY2llbmNlLCBpbnRlcm1lZGlhdGUsIHRvb2xzLCB3ZWItc2NyYXBpbmcmcXVvdDsKQ29vbCBOZXcgRmVhdHVyZXMgaW4gUHl0aG9uIDMuOSxDaHJpc3RvcGhlciBUcnVkZWF1LDEwIExlc3NvbnMsNTVtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7ClVzaW5nIEdvb2dsZSBMb2dpbiBXaXRoIEZsYXNrLERvdWdsYXMgU3Rhcm5lcyw4IExlc3NvbnMsMjFtLCZxdW90O2ZsYXNrLCBpbnRlcm1lZGlhdGUsIHdlYi1kZXYmcXVvdDsKV29ya2luZyBXaXRoIExpbmtlZCBMaXN0cyBpbiBQeXRob24sQXVzdGluIENlcGFsaWEsMTUgTGVzc29ucyw1M20sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKQ29tbWFuZCBMaW5lIEludGVyZmFjZXMgaW4gUHl0aG9uLExpYW0gUHVsc2lmZXIsMTkgTGVzc29ucywxaCZuYnNwOzI5bSwmcXVvdDtiZXN0LXByYWN0aWNlcywgaW50ZXJtZWRpYXRlLCB0b29scyZxdW90OwpFeHBsb3JpbmcgSFRUUFMgYW5kIENyeXB0b2dyYXBoeSBpbiBQeXRob24sQ2hyaXN0b3BoZXIgVHJ1ZGVhdSw5IExlc3NvbnMsMWgmbmJzcDsyOG0sJnF1b3Q7aW50ZXJtZWRpYXRlLCB3ZWItZGV2JnF1b3Q7CkVkaXRpbmcgRXhjZWwgU3ByZWFkc2hlZXRzIGluIFB5dGhvbiBXaXRoIG9wZW5weXhsLEpvZSBUYXR1c2tvLDE2IExlc3NvbnMsMWgmbmJzcDsxM20saW50ZXJtZWRpYXRlCkRqYW5nbyBSZWRpcmVjdHMsQ2hyaXN0b3BoZXIgVHJ1ZGVhdSw3IExlc3NvbnMsMzdtLCZxdW90O2RqYW5nbywgaW50ZXJtZWRpYXRlLCB3ZWItZGV2JnF1b3Q7Ck9mZmljZSBIb3VycyBBcmNoaXZlLERhdmlkIEFtb3MsNTEgTGVzc29ucyw1NWgmbmJzcDszOG0sY29tbXVuaXR5CklkZW50aWZ5IEludmFsaWQgUHl0aG9uIFN5bnRheCxEYXJyZW4gSm9uZXMsMTIgTGVzc29ucywyNW0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKUHJhY3RpY2FsIFJlY2lwZXMgZm9yIFdvcmtpbmcgV2l0aCBGaWxlcyBpbiBQeXRob24sTGlhbSBQdWxzaWZlciwxMyBMZXNzb25zLDFoJm5ic3A7MTNtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClB5dGhvbidzIE5vbmU6IE51bGwgaW4gUHl0aG9uLENocmlzdGlhbiBNb25kb3JmLDUgTGVzc29ucywyMG0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKTWFzdGVyaW5nIFB5dGhvbidzIEJ1aWx0LWluIHRpbWUgTW9kdWxlLExpYW0gUHVsc2lmZXIsNyBMZXNzb25zLDM5bSxpbnRlcm1lZGlhdGUKR3JvdyBZb3VyIFB5dGhvbiBQb3J0Zm9saW8gV2l0aCAxMyBJbnRlcm1lZGlhdGUgUHJvamVjdCBJZGVhcyxEYXJyZW4gSm9uZXMsMjIgTGVzc29ucywxaCZuYnNwOzltLCZxdW90O2d1aSwgaW50ZXJtZWRpYXRlLCBwcm9qZWN0cywgd2ViLWRldiZxdW90OwpQb2ludGVycyBhbmQgT2JqZWN0cyBpbiBQeXRob24sQXVzdGluIENlcGFsaWEsMTIgTGVzc29ucyw0N20sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKVW5pY29kZSBpbiBQeXRob246IFdvcmtpbmcgV2l0aCBDaGFyYWN0ZXIgRW5jb2RpbmdzLENocmlzdG9waGVyIFRydWRlYXUsOSBMZXNzb25zLDUxbSwmcXVvdDthZHZhbmNlZCwgYmVzdC1wcmFjdGljZXMsIHB5dGhvbiZxdW90OwpDcmVhdGluZyBhIERpc2NvcmQgQm90IGluIFB5dGhvbixBbmRyZXcgU3RlcGhlbiwxNCBMZXNzb25zLDUybSwmcXVvdDthcGksIGludGVybWVkaWF0ZSwgcHJvamVjdHMmcXVvdDsKUHl0aG9uIEdlbmVyYXRvcnMgMTAxLENocmlzdGlhbiBNb25kb3JmLDUgTGVzc29ucywzMW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKR2V0dGluZyB0aGUgTW9zdCBPdXQgb2YgYSBQeXRob24gVHJhY2ViYWNrLFJpY2ggQmliYnksNSBMZXNzb25zLDIxbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpQYXJhbGxlbCBJdGVyYXRpb24gV2l0aCBQeXRob24ncyB6aXAoKSBGdW5jdGlvbixMaWFtIFB1bHNpZmVyLDYgTGVzc29ucywzNW0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKQSBCZWdpbm5lcidzIEd1aWRlIHRvIFBpcCxBdXN0aW4gQ2VwYWxpYSwxMCBMZXNzb25zLDM0bSwmcXVvdDtiYXNpY3MsIHRvb2xzJnF1b3Q7CkNvbnZlcnQgYSBQeXRob24gU3RyaW5nIHRvIGludCxEYXJyZW4gSm9uZXMsNSBMZXNzb25zLDltLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7CkltcHJvdmUgWW91ciBUZXN0cyBXaXRoIHRoZSBQeXRob24gTW9jayBPYmplY3QgTGlicmFyeSxMZWUgR2FpbmVzLDMxIExlc3NvbnMsMWgmbmJzcDsyOW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCB0ZXN0aW5nJnF1b3Q7ClRoZSBQeXRob24gcHJpbnQoKSBGdW5jdGlvbjogR28gQmV5b25kIHRoZSBCYXNpY3MsQ2hyaXN0b3BoZXIgVHJ1ZGVhdSwxMiBMZXNzb25zLDU3bSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpTdHJ1Y3R1cmluZyBhIFB5dGhvbiBBcHBsaWNhdGlvbixDaHJpc3RvcGhlciBUcnVkZWF1LDYgTGVzc29ucywzNW0sJnF1b3Q7YmFzaWNzLCBiZXN0LXByYWN0aWNlcywgcHl0aG9uJnF1b3Q7ClB5dGhvbiBDb2RpbmcgSW50ZXJ2aWV3czogVGlwcyAmYW1wOyBCZXN0IFByYWN0aWNlcyxKYW1lcyBVZWppbywyMiBMZXNzb25zLDJoJm5ic3A7MjFtLGJlc3QtcHJhY3RpY2VzCkluaGVyaXRhbmNlIGFuZCBDb21wb3NpdGlvbjogQSBQeXRob24gT09QIEd1aWRlLEF1c3RpbiBDZXBhbGlhLDIyIExlc3NvbnMsMmgmbmJzcDs0Nm0sJnF1b3Q7YmVzdC1wcmFjdGljZXMsIGludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7CkFyZHVpbm8gV2l0aCBQeXRob246IEhvdyB0byBHZXQgU3RhcnRlZCxDaHJpc3RvcGhlciBCYWlsZXksOSBMZXNzb25zLDFoJm5ic3A7Nm0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKJnF1b3Q7Q29tcGFyaW5nIFB5dGhvbiBPYmplY3RzIHRoZSBSaWdodCBXYXk6ICZxdW90OyZxdW90O2lzJnF1b3Q7JnF1b3Q7IHZzICZxdW90OyZxdW90Oz09JnF1b3Q7JnF1b3Q7JnF1b3Q7LExpYW0gUHVsc2lmZXIsNSBMZXNzb25zLDI4bSwmcXVvdDtiZXN0LXByYWN0aWNlcywgaW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKVXNpbmcgTnVtUHkncyBucC5hcmFuZ2UoKSBFZmZlY3RpdmVseSxMaWFtIFB1bHNpZmVyLDYgTGVzc29ucywyOG0sJnF1b3Q7ZGF0YS1zY2llbmNlLCBpbnRlcm1lZGlhdGUmcXVvdDsKTWFrZSBhIDJEIFNpZGUtU2Nyb2xsZXIgR2FtZSBXaXRoIFB5R2FtZSxDaHJpc3RvcGhlciBCYWlsZXksMjQgTGVzc29ucywxaCZuYnNwOzQ4bSwmcXVvdDtnYW1lZGV2LCBpbnRlcm1lZGlhdGUsIHByb2plY3RzJnF1b3Q7CkRlZmluaW5nIE1haW4gRnVuY3Rpb25zIGluIFB5dGhvbixSaWNoIEJpYmJ5LDQgTGVzc29ucywxOG0sJnF1b3Q7YmVzdC1wcmFjdGljZXMsIGludGVybWVkaWF0ZSZxdW90OwpIb3cgdG8gSW1wbGVtZW50IGEgUHl0aG9uIFN0YWNrLExpYW0gUHVsc2lmZXIsNCBMZXNzb25zLDIwbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpIb3cgdG8gV29yayBXaXRoIGEgUERGIGluIFB5dGhvbixBbmRyZXcgU3RlcGhlbiw2IExlc3NvbnMsMzFtLGludGVybWVkaWF0ZQpGaW5kaW5nIHRoZSBQZXJmZWN0IFB5dGhvbiBDb2RlIEVkaXRvcixNYXJ0aW4gQnJldXNzLDM2IExlc3NvbnMsMmgmbmJzcDsyOG0sJnF1b3Q7YmFzaWNzLCB0b29scyZxdW90OwpQbGF5aW5nIGFuZCBSZWNvcmRpbmcgU291bmQgaW4gUHl0aG9uLEpvZSBUYXR1c2tvLDE2IExlc3NvbnMsNDBtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClNldHMgaW4gUHl0aG9uLEphbWVzIFVlamlvLDE1IExlc3NvbnMsNDdtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClB5dGhvbiBNb2R1bGVzIGFuZCBQYWNrYWdlczogQW4gSW50cm9kdWN0aW9uLENocmlzdG9waGVyIEJhaWxleSwxMiBMZXNzb25zLDFoJm5ic3A7Mm0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKQmFzaWMgRGF0YSBUeXBlcyBpbiBQeXRob24sRGFycmVuIEpvbmVzLDE4IExlc3NvbnMsMWgmbmJzcDsyN20sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKU3VwZXJjaGFyZ2UgWW91ciBDbGFzc2VzIFdpdGggUHl0aG9uIHN1cGVyKCksQ2hyaXN0b3BoZXIgVHJ1ZGVhdSwzIExlc3NvbnMsMjNtLCZxdW90O2Jlc3QtcHJhY3RpY2VzLCBpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwpQeXRob24gYXJncyBhbmQga3dhcmdzOiBEZW15c3RpZmllZCxSaWNoIEJpYmJ5LDYgTGVzc29ucywxMm0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKU29ydGluZyBEYXRhIFdpdGggUHl0aG9uLEpvZSBUYXR1c2tvLDkgTGVzc29ucywzM20sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKUHl0aG9uIERpY3Rpb25hcnkgSXRlcmF0aW9uOiBBZHZhbmNlZCBUaXBzICZhbXA7IFRyaWNrcyxMaWFtIFB1bHNpZmVyLDkgTGVzc29ucyw0N20sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKRG9jdW1lbnRpbmcgUHl0aG9uIENvZGU6IEEgQ29tcGxldGUgR3VpZGUsQW5kcmV3IFN0ZXBoZW4sNyBMZXNzb25zLDMybSwmcXVvdDtiZXN0LXByYWN0aWNlcywgaW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKVmFyaWFibGVzIGluIFB5dGhvbixNYXJ0aW4gQnJldXNzLDExIExlc3NvbnMsNDFtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7CiZxdW90O1B5dGhvbiwgQm90bzMsIGFuZCBBV1MgUzM6IERlbXlzdGlmaWVkJnF1b3Q7LEpvZSBUYXR1c2tvLDE2IExlc3NvbnMsMWgmbmJzcDs5bSwmcXVvdDtkZXZvcHMsIGludGVybWVkaWF0ZSZxdW90OwpQeXRob24gS2V5RXJyb3IgRXhjZXB0aW9ucyBhbmQgSG93IHRvIEhhbmRsZSBUaGVtLFJpY2ggQmliYnksNSBMZXNzb25zLDEwbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpUaHJlYWRpbmcgaW4gUHl0aG9uLExlZSBHYWluZXMsMTkgTGVzc29ucywxaCZuYnNwOzMwbSwmcXVvdDtiZXN0LXByYWN0aWNlcywgaW50ZXJtZWRpYXRlJnF1b3Q7ClRoaW5raW5nIFJlY3Vyc2l2ZWx5IGluIFB5dGhvbixKYW1lcyBVZWppbyw2IExlc3NvbnMsMjRtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7CkNvb2wgTmV3IEZlYXR1cmVzIGluIFB5dGhvbiAzLjgsQ2hyaXN0b3BoZXIgQmFpbGV5LDExIExlc3NvbnMsNTdtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7ClB5dGhvbiBUeXBlIENoZWNraW5nLENocmlzdG9waGVyIEJhaWxleSwxMCBMZXNzb25zLDU1bSwmcXVvdDtiZXN0LXByYWN0aWNlcywgaW50ZXJtZWRpYXRlJnF1b3Q7ClB5dGhvbiBQbG90dGluZyBXaXRoIE1hdHBsb3RsaWIsQXVzdGluIENlcGFsaWEsMTQgTGVzc29ucywxaCZuYnNwOzE0bSwmcXVvdDtiYXNpY3MsIGRhdGEtc2NpZW5jZSZxdW90OwpUaGUgUHl0aG9uIHJhbmdlKCkgRnVuY3Rpb24sQXVzdGluIENlcGFsaWEsNyBMZXNzb25zLDIybSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpHZXQgU3RhcnRlZCBXaXRoIERqYW5nbzogQnVpbGQgYSBQb3J0Zm9saW8gQXBwLE1hcnRpbiBCcmV1c3MsNDUgTGVzc29ucywzaCZuYnNwOzQ0bSwmcXVvdDtiYXNpY3MsIGRqYW5nbywgcHJvamVjdHMsIHdlYi1kZXYmcXVvdDsKU3RyaW5ncyBhbmQgQ2hhcmFjdGVyIERhdGEgaW4gUHl0aG9uLENocmlzdG9waGVyIEJhaWxleSwxOSBMZXNzb25zLDFoJm5ic3A7NDhtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClRob25ueTogVGhlIEJlZ2lubmVyLUZyaWVuZGx5IFB5dGhvbiBFZGl0b3IsRGFycmVuIEpvbmVzLDkgTGVzc29ucywzNG0sJnF1b3Q7YmFzaWNzLCB0b29scyZxdW90OwpQeXRob24gRGVidWdnaW5nIFdpdGggcGRiLEF1c3RpbiBDZXBhbGlhLDExIExlc3NvbnMsMzZtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uLCB0b29scyZxdW90OwpBYnNvbHV0ZSB2cyBSZWxhdGl2ZSBJbXBvcnRzIGluIFB5dGhvbixKb2UgVGF0dXNrbyw0IExlc3NvbnMsMTZtLCZxdW90O2Jlc3QtcHJhY3RpY2VzLCBpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwpMaXN0cyBhbmQgVHVwbGVzIGluIFB5dGhvbixDaHJpc3RvcGhlciBCYWlsZXksMTEgTGVzc29ucywxaCZuYnNwOzFtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7CkhvdyB0byBVc2UgUHl0aG9uIExhbWJkYSBGdW5jdGlvbnMsRGFycmVuIEpvbmVzLDEwIExlc3NvbnMsMzRtLCZxdW90O2Jlc3QtcHJhY3RpY2VzLCBpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwomcXVvdDtQeXRob24gSGlzdG9ncmFtIFBsb3R0aW5nOiBOdW1QeSwgTWF0cGxvdGxpYiwgUGFuZGFzICZhbXA7IFNlYWJvcm4mcXVvdDssSm9lIFRhdHVza28sOCBMZXNzb25zLDM5bSwmcXVvdDtiYXNpY3MsIGRhdGEtc2NpZW5jZSZxdW90OwpUcmFkaXRpb25hbCBGYWNlIERldGVjdGlvbiBXaXRoIFB5dGhvbixBdXN0aW4gQ2VwYWxpYSwxMSBMZXNzb25zLDI5bSwmcXVvdDtkYXRhLXNjaWVuY2UsIGludGVybWVkaWF0ZSwgbWFjaGluZS1sZWFybmluZyZxdW90OwoxMSBCZWdpbm5lciBUaXBzIGZvciBMZWFybmluZyBQeXRob24sRGFycmVuIEpvbmVzLDEzIExlc3NvbnMsMzdtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7CkRpY3Rpb25hcmllcyBpbiBQeXRob24sUGF1bCBNZWFsdXMsNCBMZXNzb25zLDIwbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpMb2dnaW5nIGluIFB5dGhvbixBdXN0aW4gQ2VwYWxpYSwxMSBMZXNzb25zLDI2bSwmcXVvdDtpbnRlcm1lZGlhdGUsIHRvb2xzJnF1b3Q7CkhvdyB0byBXcml0ZSBQeXRob25pYyBMb29wcyxEYW4gQmFkZXIsNiBMZXNzb25zLDltLCZxdW90O2Jhc2ljcywgYmVzdC1wcmFjdGljZXMsIHB5dGhvbiZxdW90OwpSZWFkaW5nIGFuZCBXcml0aW5nIEZpbGVzIGluIFB5dGhvbixEYXJyZW4gSm9uZXMsOSBMZXNzb25zLDMwbSwmcXVvdDtpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwpGdW5jdGlvbmFsIFByb2dyYW1taW5nIGluIFB5dGhvbixEYW4gQmFkZXIsMzIgTGVzc29ucywxaCZuYnNwOzI1bSwmcXVvdDthZHZhbmNlZCwgcHl0aG9uJnF1b3Q7CkdlbmVyYXRpbmcgUmFuZG9tIERhdGEgaW4gUHl0aG9uLEphY2tpZSBXaWxzb24sNCBMZXNzb25zLDI2bSwmcXVvdDtkYXRhLXNjaWVuY2UsIGludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7CkhvdyB0byBQdWJsaXNoIFlvdXIgT3duIFB5dGhvbiBQYWNrYWdlIHRvIFB5UEksSm9lIFRhdHVza28sMTAgTGVzc29ucywyOW0sJnF1b3Q7YmVzdC1wcmFjdGljZXMsIGludGVybWVkaWF0ZSwgdG9vbHMmcXVvdDsKT09QIE1ldGhvZCBUeXBlcyBpbiBQeXRob246IEBjbGFzc21ldGhvZCB2cyBAc3RhdGljbWV0aG9kIHZzIEluc3RhbmNlIE1ldGhvZHMsRGFuIEJhZGVyLDcgTGVzc29ucywxNG0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKSW50cm9kdWN0aW9uIHRvIEdpdCBhbmQgR2l0SHViIGZvciBQeXRob24gRGV2ZWxvcGVycyxQYXVsIE1lYWx1cyw5IExlc3NvbnMsMzdtLCZxdW90O2ludGVybWVkaWF0ZSwgdG9vbHMmcXVvdDsKQ29udGludW91cyBJbnRlZ3JhdGlvbiBXaXRoIFB5dGhvbixKb2UgVGF0dXNrbyw2IExlc3NvbnMsMjFtLCZxdW90O2Jlc3QtcHJhY3RpY2VzLCBkZXZvcHMsIGludGVybWVkaWF0ZSwgdGVzdGluZyZxdW90OwpJbnRlcmFjdGl2ZSBEYXRhIFZpc3VhbGl6YXRpb24gaW4gUHl0aG9uIFdpdGggQm9rZWgsQ2hyaXN0b3BoZXIgQmFpbGV5LDI2IExlc3NvbnMsMmgmbmJzcDs3bSwmcXVvdDtkYXRhLXNjaWVuY2UsIGludGVybWVkaWF0ZSZxdW90OwomcXVvdDtJbnN0YWxsaW5nIFB5dGhvbiBvbiBXaW5kb3dzLCBtYWNPUywgYW5kIExpbnV4JnF1b3Q7LERhcnJlbiBKb25lcyw4IExlc3NvbnMsMTBtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7CldyaXRpbmcgQ2xlYW5lciBQeXRob24gQ29kZSBXaXRoIFB5TGludCxEYW4gQmFkZXIsOCBMZXNzb25zLDE3bSwmcXVvdDtpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwomcXVvdDtQeXRob24gQ29udGV4dCBNYW5hZ2VycyBhbmQgdGhlICZxdW90OyZxdW90O3dpdGgmcXVvdDsmcXVvdDsgU3RhdGVtZW50JnF1b3Q7LERhbiBCYWRlciw2IExlc3NvbnMsMTJtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7Ck1ha2UgYSBMb2NhdGlvbi1CYXNlZCBXZWIgQXBwIFdpdGggRGphbmdvIGFuZCBHZW9EamFuZ28sSmFja2llIFdpbHNvbiwxMSBMZXNzb25zLDU2bSwmcXVvdDtkamFuZ28sIGludGVybWVkaWF0ZSwgd2ViLWRldiZxdW90OwpDb25kaXRpb25hbCBTdGF0ZW1lbnRzIGluIFB5dGhvbiAoaWYvZWxpZi9lbHNlKSxQYXVsIE1lYWx1cyw2IExlc3NvbnMsMjFtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClNlbmRpbmcgRW1haWxzIFdpdGggUHl0aG9uLEpvZSBUYXR1c2tvLDggTGVzc29ucywzNW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCB3ZWItZGV2JnF1b3Q7CkltbXV0YWJpbGl0eSBpbiBQeXRob24sRGFuIEJhZGVyLDUgTGVzc29ucyw5bSwmcXVvdDtpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwpIYW5kcy1PbiBQeXRob24gMyBDb25jdXJyZW5jeSBXaXRoIHRoZSBhc3luY2lvIE1vZHVsZSxDaHlsZCBNZWRmb3JkLDEyIExlc3NvbnMsMWgmbmJzcDszbSwmcXVvdDthZHZhbmNlZCwgcHl0aG9uJnF1b3Q7ClB5dGhvbiBTdHJpbmcgRm9ybWF0dGluZyBUaXBzICZhbXA7IEJlc3QgUHJhY3RpY2VzLFBhdWwgTWVhbHVzLDYgTGVzc29ucywxNm0sJnF1b3Q7YmFzaWNzLCBiZXN0LXByYWN0aWNlcywgcHl0aG9uJnF1b3Q7ClJ1bm5pbmcgUHl0aG9uIFNjcmlwdHMsRGFycmVuIEpvbmVzLDcgTGVzc29ucywxOG0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKUHl0aG9uIERldmVsb3BtZW50IGluIFZpc3VhbCBTdHVkaW8gQ29kZSAoU2V0dXAgR3VpZGUpLEF1c3RpbiBDZXBhbGlhLDYgTGVzc29ucywyOW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCB0b29scyZxdW90OwpJZGlvbWF0aWMgUGFuZGFzOiBUcmlja3MgJmFtcDsgRmVhdHVyZXMgWW91IE1heSBOb3QgS25vdyxKb2UgVGF0dXNrbywxMSBMZXNzb25zLDQ3bSwmcXVvdDtkYXRhLXNjaWVuY2UsIGludGVybWVkaWF0ZSZxdW90OwpXb3JraW5nIFdpdGggSlNPTiBEYXRhIGluIFB5dGhvbixBdXN0aW4gQ2VwYWxpYSw3IExlc3NvbnMsMzZtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7CkRqYW5nbyBNaWdyYXRpb25zIDEwMSxEYXJyZW4gSm9uZXMsOCBMZXNzb25zLDEzbSwmcXVvdDtpbnRlcm1lZGlhdGUsIHdlYi1kZXYmcXVvdDsKRG9jdW1lbnRpbmcgUHl0aG9uIFByb2plY3RzIFdpdGggU3BoaW54IGFuZCBSZWFkIFRoZSBEb2NzLE1haGRpIFl1c3VmLDYgTGVzc29ucywxN20sJnF1b3Q7YmVzdC1wcmFjdGljZXMsIGludGVybWVkaWF0ZSZxdW90OwpJbnRybyB0byBPYmplY3QtT3JpZW50ZWQgUHJvZ3JhbW1pbmcgKE9PUCkgaW4gUHl0aG9uLEF1c3RpbiBDZXBhbGlhLDcgTGVzc29ucyw0MG0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKUHl0aG9uIERlY29yYXRvcnMgMTAxLENocmlzdG9waGVyIEJhaWxleSwyMCBMZXNzb25zLDFoJm5ic3A7N20sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKV3JpdGluZyBDb21tZW50cyBpbiBQeXRob24sSmFja2llIFdpbHNvbiw0IExlc3NvbnMsMTNtLCZxdW90O2Jhc2ljcywgYmVzdC1wcmFjdGljZXMsIHB5dGhvbiZxdW90OwpNYWtpbmcgSFRUUCBSZXF1ZXN0cyBXaXRoIFB5dGhvbixDaHJpc3RvcGhlciBCYWlsZXksMTcgTGVzc29ucyw0OW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCB3ZWItZGV2JnF1b3Q7CkludHJvZHVjdGlvbiB0byBQeXRob24gRXhjZXB0aW9ucyxEYXJyZW4gSm9uZXMsMyBMZXNzb25zLDEzbSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpXcml0aW5nIEJlYXV0aWZ1bCBQeXRob25pYyBDb2RlIFdpdGggUEVQIDgsSm9lIFRhdHVza28sOCBMZXNzb25zLDM5bSwmcXVvdDtiZXN0LXByYWN0aWNlcywgaW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKUHl0aG9uIDMncyBmLVN0cmluZ3M6IEFuIEltcHJvdmVkIFN0cmluZyBGb3JtYXR0aW5nIFN5bnRheCxDaHJpc3RvcGhlciBCYWlsZXksOCBMZXNzb25zLDIybSwmcXVvdDtiYXNpY3MsIHB5dGhvbiZxdW90OwpJZGlvbWF0aWMgUHl0aG9uIDEwMSxNYWhkaSBZdXN1Ziw4IExlc3NvbnMsOW0sJnF1b3Q7YmFzaWNzLCBiZXN0LXByYWN0aWNlcywgcHl0aG9uJnF1b3Q7ClB5dGhvbmljIE9PUCBTdHJpbmcgQ29udmVyc2lvbjogX19yZXByX18gdnMgX19zdHJfXyxEYW4gQmFkZXIsNyBMZXNzb25zLDEzbSwmcXVvdDtpbnRlcm1lZGlhdGUsIHB5dGhvbiZxdW90OwpUZXN0LURyaXZlbiBEZXZlbG9wbWVudCBXaXRoIFB5VGVzdCxDaHlsZCBNZWRmb3JkLDYgTGVzc29ucywyOW0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24sIHRlc3RpbmcmcXVvdDsKUGFuZGFzIERhdGFGcmFtZXMgMTAxLE1haGRpIFl1c3VmLDUgTGVzc29ucywxOG0sJnF1b3Q7YmFzaWNzLCBkYXRhLXNjaWVuY2UmcXVvdDsKRW11bGF0aW5nIHN3aXRjaC9jYXNlIFN0YXRlbWVudHMgaW4gUHl0aG9uLERhbiBCYWRlciw0IExlc3NvbnMsMTBtLCZxdW90O2ludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7Ck1pZ3JhdGluZyBBcHBsaWNhdGlvbnMgRnJvbSBQeXRob24gMiB0byBQeXRob24gMyxNYWhkaSBZdXN1Ziw1IExlc3NvbnMsMTZtLCZxdW90O2FkdmFuY2VkLCBweXRob24mcXVvdDsKQHN0YXRpY21ldGhvZCB2cyBAY2xhc3NtZXRob2QgaW4gUHl0aG9uLE1haGRpIFl1c3VmLDUgTGVzc29ucywxNG0sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKJnF1b3Q7U3BsaXR0aW5nLCBDb25jYXRlbmF0aW5nLCBhbmQgSm9pbmluZyBTdHJpbmdzIGluIFB5dGhvbiZxdW90OyxKYWNraWUgV2lsc29uLDQgTGVzc29ucywxOG0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKTWFzdGVyaW5nIFdoaWxlIExvb3BzLEthdHkgR2lic29uLDExIExlc3NvbnMsMjZtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7ClVzaW5nIExpc3QgQ29tcHJlaGVuc2lvbnMgRWZmZWN0aXZlbHksRGFuIEJhZGVyLDggTGVzc29ucywxM20sJnF1b3Q7aW50ZXJtZWRpYXRlLCBweXRob24mcXVvdDsKUmVhZGluZyBhbmQgV3JpdGluZyBDU1YgRmlsZXMsSm9lIFRhdHVza28sNiBMZXNzb25zLDIxbSwmcXVvdDtkYXRhLXNjaWVuY2UsIGludGVybWVkaWF0ZSwgcHl0aG9uJnF1b3Q7ClVzaW5nIEp1cHl0ZXIgTm90ZWJvb2tzLE1hcnRpbiBCcmV1c3MsOSBMZXNzb25zLDM2bSwmcXVvdDtpbnRlcm1lZGlhdGUsIHRvb2xzJnF1b3Q7ClB5dGhvbiBJbXBvcnRzIDEwMSxNYWhkaSBZdXN1Ziw1IExlc3NvbnMsMTRtLCZxdW90O2Jhc2ljcywgcHl0aG9uJnF1b3Q7CkZvciBMb29wcyBpbiBQeXRob24gKERlZmluaXRlIEl0ZXJhdGlvbiksRGFycmVuIEpvbmVzLDQgTGVzc29ucywxNm0sJnF1b3Q7YmFzaWNzLCBweXRob24mcXVvdDsKV29ya2luZyBXaXRoIFB5dGhvbiBWaXJ0dWFsIEVudmlyb25tZW50cyxEYW4gQmFkZXIsNiBMZXNzb25zLDhtLCZxdW90O2Jhc2ljcywgdG9vbHMmcXVvdDsKV2VsY29tZSB0byBSZWFsIFB5dGhvbiEsRGFuIEJhZGVyLDE4IExlc3NvbnMsNDZtLCZxdW90O2Jhc2ljcywgY29tbXVuaXR5JnF1b3Q7Cg==
Using the Python not Operator,Howard Francis,14 Lessons,30m,"basics, python"
SQLite and SQLAlchemy in Python: Moving Your Data Beyond Flat Files,Christopher Trudeau,8 Lessons,1h 11m,"databases, intermediate, web-dev"
Using the Python and Operator,Howard Francis,15 Lessons,36m,"basics, best-practices, python"
Building a Site Connectivity Checker,Darren Jones,10 Lessons,41m,"intermediate, projects, python"
Python mmap: Doing File I/O With Memory Mapping,Christopher Trudeau,6 Lessons,41m,"intermediate, python"
Combining Data in pandas With concat() and merge(),Martin Breuss,20 Lessons,1h 34m,"data-science, intermediate"
Write and Test a Python Function: Interview Practice,Real Python Team,8 Lessons,54m,testing
Data Cleaning With pandas and NumPy,Ian Currie,16 Lessons,1h 28m,"data-science, intermediate"
Exploring Scopes and Closures in Python,Martin Breuss,5 Lessons,28m,"community, intermediate, python"
Using Python Class Constructors,Darren Jones,11 Lessons,36m,"intermediate, python"
Deploying a Flask Application Using Heroku,Darren Jones,6 Lessons,28m,"devops, flask, intermediate, web-dev"
Testing Your Code With pytest,Christopher Trudeau,5 Lessons,25m,"intermediate, python, testing"
Building a Django User Management System,Darren Jones,13 Lessons,42m,"django, intermediate"
Exploring Keywords in Python,Philipp Acsany,7 Lessons,30m,"basics, python"
Python REST APIs With FastAPI,Douglas Starnes,9 Lessons,37m,"api, basics, web-dev"
Using Python's datetime Module,Christopher Trudeau,6 Lessons,35m,intermediate
Python Basics: Code Your First Python Program,Christopher Bailey,6 Lessons,33m,"basics, python"
Sorting Data in Python With Pandas,Darren Jones,9 Lessons,26m,"data-science, intermediate"
Counting With Python's Counter,Christopher Trudeau,7 Lessons,36m,"basics, python"
Exploring the Fibonacci Sequence With Python,Darren Jones,11 Lessons,23m,"intermediate, python"
Starting With Linear Regression in Python,Cesar Aguilar,9 Lessons,46m,"data-science, intermediate, machine-learning"
Python any(): Powered Up Boolean Function,Ian Currie,9 Lessons,36m,"basics, python"
Defining Python Functions With Optional Arguments,Darren Jones,13 Lessons,34m,"basics, python"
Python's len() Function,Christopher Trudeau,6 Lessons,24m,"basics, python"
Looping With Python enumerate(),Philipp Acsany,7 Lessons,28m,"basics, best-practices"
Starting With Python IDLE,Darren Jones,8 Lessons,25m,"basics, python"
Working With Pipenv,Christopher Trudeau,5 Lessons,35m,"intermediate, tools"
Deploy Your Python Script on the Web With Flask,Darren Jones,11 Lessons,56m,"devops, flask, intermediate, web-dev"
Raising and Handling Python Exceptions,Martin Breuss,9 Lessons,33m,"basics, python"
Host Your Django Project on Heroku,Bartosz Zaczyński,14 Lessons,45m,"devops, django, intermediate, python, web-dev"
"Binary, Bytes, and Bitwise Operators in Python",Christopher Trudeau,12 Lessons,1h 39m,"intermediate, python"
Data Visualization Interfaces in Python With Dash,Darren Jones,13 Lessons,51m,"data-science, intermediate"
Building a Neural Network & Making Predictions With Python AI,Douglas Starnes,8 Lessons,25m,"data-science, intermediate, machine-learning"
Building Lists With Python's .append(),Howard Francis,11 Lessons,40m,"basics, python"
Using plt.scatter() to Visualize Data in Python,Darren Jones,11 Lessons,31m,intermediate
Reading Input and Writing Output in Python,Martin Breuss,6 Lessons,15m,"basics, python"
Writing Idiomatic Python,Martin Breuss,10 Lessons,22m,"basics, best-practices, python"
Python Assignment Expressions and Using the Walrus Operator,Darren Jones,13 Lessons,47m,"best-practices, intermediate"
Using Pygame to Build an Asteroids Game in Python,Christopher Trudeau,14 Lessons,1h 24m,"gamedev, intermediate, projects"
Cool New Features in Python 3.10,Christopher Trudeau,9 Lessons,58m,"intermediate, python"
"Rock, Paper, Scissors With Python: A Command Line Game",Christopher Trudeau,5 Lessons,26m,"basics, gamedev, python"
Pass by Reference in Python: Best Practices,Howard Francis,16 Lessons,1h 17m,"best-practices, intermediate, python"
Using Data Classes in Python,Darren Jones,12 Lessons,45m,"intermediate, python"
Graph Your Data With Python and ggplot,Martin Breuss,18 Lessons,59m,"data-science, intermediate"
Splitting Datasets With scikit-learn and train_test_split(),Darren Jones,11 Lessons,29m,"data-science, intermediate, machine-learning"
Exploring the Python math Module,Cesar Aguilar,16 Lessons,1h 20m,"intermediate, python"
Reading and Writing Files With Pandas,Darren Jones,19 Lessons,49m,"databases, data-science, intermediate"
Using the Python return Statement Effectively,Howard Francis,21 Lessons,1h 26m,"basics, best-practices, python"
Using sleep() to Code a Python Uptime Bot,Martin Breuss,8 Lessons,22m,"intermediate, python"
The Pandas DataFrame: Working With Data Efficiently,Cesar Aguilar,25 Lessons,2h 10m,"data-science, intermediate"
Speech Recognition With Python,Darren Jones,11 Lessons,38m,"advanced, data-science, machine-learning"
The Square Root Function in Python,Christopher Trudeau,5 Lessons,19m,basics
Defining and Calling Python Functions,Howard Francis,27 Lessons,2h 23m,"basics, python"
Python Inner Functions,Christopher Trudeau,6 Lessons,37m,"intermediate, python"
Python vs JavaScript for Python Developers,Christopher Trudeau,13 Lessons,1h 56m,"front-end, intermediate, python"
Using Pandas to Make a Gradebook in Python,Cesar Aguilar,13 Lessons,1h 37m,"advanced, data-science, projects"
Python Basics: Setting Up Python,David Amos,5 Lessons,25m,"basics, python"
Explore Your Dataset With Pandas,Douglas Starnes,14 Lessons,47m,"basics, data-science"
How to Set Up a Django Project,Martin Breuss,10 Lessons,32m,"basics, best-practices, django, web-dev"
Using the Python or Operator,Howard Francis,20 Lessons,1h,"basics, python"
Stacks and Queues: Selecting the Ideal Data Structure,Christopher Trudeau,10 Lessons,40m,"basics, python"
Simplify Python GUI Development With PySimpleGUI,Darren Jones,9 Lessons,35m,"gui, intermediate"
Python's map() Function: Transforming Iterables,Cesar Aguilar,9 Lessons,1h 17m,"basics, best-practices, python"
Learn Text Classification With Python and Keras,Douglas Starnes,10 Lessons,36m,"advanced, data-science, machine-learning"
Start Managing Multiple Python Versions With pyenv,Johan Vergeer,14 Lessons,40m,"advanced, tools"
Python vs Java: Object Oriented Programming,Howard Francis,16 Lessons,1h 17m,"intermediate, python"
Understanding Python List Comprehensions,Rich Bibby,5 Lessons,18m,"basics, python"
Records and Sets: Selecting the Ideal Data Structure,Christopher Trudeau,5 Lessons,34m,"basics, python"
Python Booleans: Leveraging the Values of Truth,Cesar Aguilar,9 Lessons,1h 9m,intermediate
Django View Authorization: Restricting Access,Darren Jones,8 Lessons,32m,"django, intermediate, web-dev"
Navigating Namespaces and Scope in Python,Johan Vergeer,11 Lessons,27m,"basics, python"
Dictionaries and Arrays: Selecting the Ideal Data Structure,Christopher Trudeau,9 Lessons,50m,"basics, python"
Creating PyQt Layouts for GUI Applications,Christian Koch,12 Lessons,1h 9m,"gui, intermediate"
Python Modulo: Using the % Operator,Christopher Trudeau,6 Lessons,33m,"basics, python"
Plot With Pandas: Python Data Visualization Basics,Darren Jones,9 Lessons,28m,"data-science, intermediate"
Evaluate Expressions Dynamically With Python eval(),Christopher Trudeau,8 Lessons,49m,"intermediate, python"
Introduction to Sorting Algorithms in Python,Liam Pulsifer,9 Lessons,1h 3m,"intermediate, python"
Managing Python Dependencies,Dan Bader,37 Lessons,1h 59m,"best-practices, intermediate"
Building HTTP APIs With Django REST Framework,Christopher Trudeau,13 Lessons,2h 10m,"advanced, api, django, web-dev"
Django Admin Customization,Darren Jones,11 Lessons,29m,"advanced, django, web-dev"
Serializing Objects With the Python pickle Module,Joe Tatusko,9 Lessons,28m,"intermediate, python"
Python Turtle for Beginners,Darren Jones,10 Lessons,37m,"basics, python"
Speed Up Python With Concurrency,Christopher Trudeau,9 Lessons,1h 12m,"advanced, best-practices"
How Python Manages Memory,Austin Cepalia,10 Lessons,27m,"intermediate, python"
Formatting Python Strings,Liam Pulsifer,7 Lessons,32m,"basics, python"
Regular Expressions and Building Regexes in Python,Christopher Trudeau,14 Lessons,1h 53m,"basics, python"
Handling Missing Keys With the Python defaultdict Type,Christian Mondorf,7 Lessons,43m,"basics, python"
Simulating Real-World Processes in Python With SimPy,Joe Tatusko,11 Lessons,27m,"data-science, intermediate, tools"
Creating a Binary Search in Python,Liam Pulsifer,8 Lessons,45m,"intermediate, python"
Getting Started With MicroPython,Darren Jones,10 Lessons,55m,"intermediate, python"
Web Scraping With Beautiful Soup and Python,Martin Breuss,24 Lessons,1h 39m,"data-science, intermediate, tools, web-scraping"
Cool New Features in Python 3.9,Christopher Trudeau,10 Lessons,55m,"intermediate, python"
Using Google Login With Flask,Douglas Starnes,8 Lessons,21m,"flask, intermediate, web-dev"
Working With Linked Lists in Python,Austin Cepalia,15 Lessons,53m,"intermediate, python"
Command Line Interfaces in Python,Liam Pulsifer,19 Lessons,1h 29m,"best-practices, intermediate, tools"
Exploring HTTPS and Cryptography in Python,Christopher Trudeau,9 Lessons,1h 28m,"intermediate, web-dev"
Editing Excel Spreadsheets in Python With openpyxl,Joe Tatusko,16 Lessons,1h 13m,intermediate
Django Redirects,Christopher Trudeau,7 Lessons,37m,"django, intermediate, web-dev"
Office Hours Archive,David Amos,51 Lessons,55h 38m,community
Identify Invalid Python Syntax,Darren Jones,12 Lessons,25m,"basics, python"
Practical Recipes for Working With Files in Python,Liam Pulsifer,13 Lessons,1h 13m,"basics, python"
Python's None: Null in Python,Christian Mondorf,5 Lessons,20m,"basics, python"
Mastering Python's Built-in time Module,Liam Pulsifer,7 Lessons,39m,intermediate
Grow Your Python Portfolio With 13 Intermediate Project Ideas,Darren Jones,22 Lessons,1h 9m,"gui, intermediate, projects, web-dev"
Pointers and Objects in Python,Austin Cepalia,12 Lessons,47m,"intermediate, python"
Unicode in Python: Working With Character Encodings,Christopher Trudeau,9 Lessons,51m,"advanced, best-practices, python"
Creating a Discord Bot in Python,Andrew Stephen,14 Lessons,52m,"api, intermediate, projects"
Python Generators 101,Christian Mondorf,5 Lessons,31m,"intermediate, python"
Getting the Most Out of a Python Traceback,Rich Bibby,5 Lessons,21m,"basics, python"
Parallel Iteration With Python's zip() Function,Liam Pulsifer,6 Lessons,35m,"basics, python"
A Beginner's Guide to Pip,Austin Cepalia,10 Lessons,34m,"basics, tools"
Convert a Python String to int,Darren Jones,5 Lessons,9m,"basics, python"
Improve Your Tests With the Python Mock Object Library,Lee Gaines,31 Lessons,1h 29m,"intermediate, testing"
The Python print() Function: Go Beyond the Basics,Christopher Trudeau,12 Lessons,57m,"basics, python"
Structuring a Python Application,Christopher Trudeau,6 Lessons,35m,"basics, best-practices, python"
Python Coding Interviews: Tips & Best Practices,James Uejio,22 Lessons,2h 21m,best-practices
Inheritance and Composition: A Python OOP Guide,Austin Cepalia,22 Lessons,2h 46m,"best-practices, intermediate, python"
Arduino With Python: How to Get Started,Christopher Bailey,9 Lessons,1h 6m,"intermediate, python"
"Comparing Python Objects the Right Way: ""is"" vs ""==""",Liam Pulsifer,5 Lessons,28m,"best-practices, intermediate, python"
Using NumPy's np.arange() Effectively,Liam Pulsifer,6 Lessons,28m,"data-science, intermediate"
Make a 2D Side-Scroller Game With PyGame,Christopher Bailey,24 Lessons,1h 48m,"gamedev, intermediate, projects"
Defining Main Functions in Python,Rich Bibby,4 Lessons,18m,"best-practices, intermediate"
How to Implement a Python Stack,Liam Pulsifer,4 Lessons,20m,"basics, python"
How to Work With a PDF in Python,Andrew Stephen,6 Lessons,31m,intermediate
Finding the Perfect Python Code Editor,Martin Breuss,36 Lessons,2h 28m,"basics, tools"
Playing and Recording Sound in Python,Joe Tatusko,16 Lessons,40m,"basics, python"
Sets in Python,James Uejio,15 Lessons,47m,"basics, python"
Python Modules and Packages: An Introduction,Christopher Bailey,12 Lessons,1h 2m,"basics, python"
Basic Data Types in Python,Darren Jones,18 Lessons,1h 27m,"basics, python"
Supercharge Your Classes With Python super(),Christopher Trudeau,3 Lessons,23m,"best-practices, intermediate, python"
Python args and kwargs: Demystified,Rich Bibby,6 Lessons,12m,"intermediate, python"
Sorting Data With Python,Joe Tatusko,9 Lessons,33m,"basics, python"
Python Dictionary Iteration: Advanced Tips & Tricks,Liam Pulsifer,9 Lessons,47m,"intermediate, python"
Documenting Python Code: A Complete Guide,Andrew Stephen,7 Lessons,32m,"best-practices, intermediate, python"
Variables in Python,Martin Breuss,11 Lessons,41m,"basics, python"
"Python, Boto3, and AWS S3: Demystified",Joe Tatusko,16 Lessons,1h 9m,"devops, intermediate"
Python KeyError Exceptions and How to Handle Them,Rich Bibby,5 Lessons,10m,"basics, python"
Threading in Python,Lee Gaines,19 Lessons,1h 30m,"best-practices, intermediate"
Thinking Recursively in Python,James Uejio,6 Lessons,24m,"intermediate, python"
Cool New Features in Python 3.8,Christopher Bailey,11 Lessons,57m,"intermediate, python"
Python Type Checking,Christopher Bailey,10 Lessons,55m,"best-practices, intermediate"
Python Plotting With Matplotlib,Austin Cepalia,14 Lessons,1h 14m,"basics, data-science"
The Python range() Function,Austin Cepalia,7 Lessons,22m,"basics, python"
Get Started With Django: Build a Portfolio App,Martin Breuss,45 Lessons,3h 44m,"basics, django, projects, web-dev"
Strings and Character Data in Python,Christopher Bailey,19 Lessons,1h 48m,"basics, python"
Thonny: The Beginner-Friendly Python Editor,Darren Jones,9 Lessons,34m,"basics, tools"
Python Debugging With pdb,Austin Cepalia,11 Lessons,36m,"intermediate, python, tools"
Absolute vs Relative Imports in Python,Joe Tatusko,4 Lessons,16m,"best-practices, intermediate, python"
Lists and Tuples in Python,Christopher Bailey,11 Lessons,1h 1m,"basics, python"
How to Use Python Lambda Functions,Darren Jones,10 Lessons,34m,"best-practices, intermediate, python"
"Python Histogram Plotting: NumPy, Matplotlib, Pandas & Seaborn",Joe Tatusko,8 Lessons,39m,"basics, data-science"
Traditional Face Detection With Python,Austin Cepalia,11 Lessons,29m,"data-science, intermediate, machine-learning"
11 Beginner Tips for Learning Python,Darren Jones,13 Lessons,37m,"basics, python"
Dictionaries in Python,Paul Mealus,4 Lessons,20m,"basics, python"
Logging in Python,Austin Cepalia,11 Lessons,26m,"intermediate, tools"
How to Write Pythonic Loops,Dan Bader,6 Lessons,9m,"basics, best-practices, python"
Reading and Writing Files in Python,Darren Jones,9 Lessons,30m,"intermediate, python"
Functional Programming in Python,Dan Bader,32 Lessons,1h 25m,"advanced, python"
Generating Random Data in Python,Jackie Wilson,4 Lessons,26m,"data-science, intermediate, python"
How to Publish Your Own Python Package to PyPI,Joe Tatusko,10 Lessons,29m,"best-practices, intermediate, tools"
OOP Method Types in Python: @classmethod vs @staticmethod vs Instance Methods,Dan Bader,7 Lessons,14m,"intermediate, python"
Introduction to Git and GitHub for Python Developers,Paul Mealus,9 Lessons,37m,"intermediate, tools"
Continuous Integration With Python,Joe Tatusko,6 Lessons,21m,"best-practices, devops, intermediate, testing"
Interactive Data Visualization in Python With Bokeh,Christopher Bailey,26 Lessons,2h 7m,"data-science, intermediate"
"Installing Python on Windows, macOS, and Linux",Darren Jones,8 Lessons,10m,"basics, python"
Writing Cleaner Python Code With PyLint,Dan Bader,8 Lessons,17m,"intermediate, python"
"Python Context Managers and the ""with"" Statement",Dan Bader,6 Lessons,12m,"intermediate, python"
Make a Location-Based Web App With Django and GeoDjango,Jackie Wilson,11 Lessons,56m,"django, intermediate, web-dev"
Conditional Statements in Python (if/elif/else),Paul Mealus,6 Lessons,21m,"basics, python"
Sending Emails With Python,Joe Tatusko,8 Lessons,35m,"intermediate, web-dev"
Immutability in Python,Dan Bader,5 Lessons,9m,"intermediate, python"
Hands-On Python 3 Concurrency With the asyncio Module,Chyld Medford,12 Lessons,1h 3m,"advanced, python"
Python String Formatting Tips & Best Practices,Paul Mealus,6 Lessons,16m,"basics, best-practices, python"
Running Python Scripts,Darren Jones,7 Lessons,18m,"basics, python"
Python Development in Visual Studio Code (Setup Guide),Austin Cepalia,6 Lessons,29m,"intermediate, tools"
Idiomatic Pandas: Tricks & Features You May Not Know,Joe Tatusko,11 Lessons,47m,"data-science, intermediate"
Working With JSON Data in Python,Austin Cepalia,7 Lessons,36m,"intermediate, python"
Django Migrations 101,Darren Jones,8 Lessons,13m,"intermediate, web-dev"
Documenting Python Projects With Sphinx and Read The Docs,Mahdi Yusuf,6 Lessons,17m,"best-practices, intermediate"
Intro to Object-Oriented Programming (OOP) in Python,Austin Cepalia,7 Lessons,40m,"intermediate, python"
Python Decorators 101,Christopher Bailey,20 Lessons,1h 7m,"intermediate, python"
Writing Comments in Python,Jackie Wilson,4 Lessons,13m,"basics, best-practices, python"
Making HTTP Requests With Python,Christopher Bailey,17 Lessons,49m,"intermediate, web-dev"
Introduction to Python Exceptions,Darren Jones,3 Lessons,13m,"basics, python"
Writing Beautiful Pythonic Code With PEP 8,Joe Tatusko,8 Lessons,39m,"best-practices, intermediate, python"
Python 3's f-Strings: An Improved String Formatting Syntax,Christopher Bailey,8 Lessons,22m,"basics, python"
Idiomatic Python 101,Mahdi Yusuf,8 Lessons,9m,"basics, best-practices, python"
Pythonic OOP String Conversion: __repr__ vs __str__,Dan Bader,7 Lessons,13m,"intermediate, python"
Test-Driven Development With PyTest,Chyld Medford,6 Lessons,29m,"intermediate, python, testing"
Pandas DataFrames 101,Mahdi Yusuf,5 Lessons,18m,"basics, data-science"
Emulating switch/case Statements in Python,Dan Bader,4 Lessons,10m,"intermediate, python"
Migrating Applications From Python 2 to Python 3,Mahdi Yusuf,5 Lessons,16m,"advanced, python"
@staticmethod vs @classmethod in Python,Mahdi Yusuf,5 Lessons,14m,"intermediate, python"
"Splitting, Concatenating, and Joining Strings in Python",Jackie Wilson,4 Lessons,18m,"basics, python"
Mastering While Loops,Katy Gibson,11 Lessons,26m,"basics, python"
Using List Comprehensions Effectively,Dan Bader,8 Lessons,13m,"intermediate, python"
Reading and Writing CSV Files,Joe Tatusko,6 Lessons,21m,"data-science, intermediate, python"
Using Jupyter Notebooks,Martin Breuss,9 Lessons,36m,"intermediate, tools"
Python Imports 101,Mahdi Yusuf,5 Lessons,14m,"basics, python"
For Loops in Python (Definite Iteration),Darren Jones,4 Lessons,16m,"basics, python"
Working With Python Virtual Environments,Dan Bader,6 Lessons,8m,"basics, tools"
Welcome to Real Python!,Dan Bader,18 Lessons,46m,"basics, community"