From 75b2f84c0b8f417cfd5a94727ee147acc2beec02 Mon Sep 17 00:00:00 2001 From: Igor Montagner Date: Wed, 13 Sep 2023 07:41:21 -0300 Subject: [PATCH] Deployed 7af05d0 with MkDocs version: 1.5.2 --- 404.html | 2 +- _snippets/alunos/index.html | 67 +-- _snippets/plano-de-aulas/index.html | 212 ++++---- _snippets/skills-code/index.html | 86 ++-- _snippets/skills-community/index.html | 134 ++--- _snippets/skills-impact/index.html | 110 ++--- _snippets/skills-tutorial/index.html | 142 +++--- agenda_apresentacoes/index.html | 58 +-- apresentacoes/2023/Kdenlive.pdf | Bin 0 -> 794119 bytes assessment/index.html | 466 +++++++++--------- aulas/02-comunidades-de-software/index.html | 2 +- .../slides/index.html | 2 +- .../index.html | 2 +- .../slides/index.html | 2 +- aulas/05-projeto-profissional/index.html | 2 +- .../05-projeto-profissional/slides/index.html | 2 +- aulas/06-distribuicao-software/index.html | 2 +- aulas/07-localizacao/index.html | 2 +- aulas/07-localizacao/slides/index.html | 2 +- aulas/08-testes-automatizados/index.html | 2 +- .../index_2022/index.html | 2 +- .../08-testes-automatizados/slides/index.html | 2 +- aulas/09-cultura-livre/index.html | 2 +- aulas/09-cultura-livre/slides/index.html | 2 +- aulas/09-licencas/index.html | 2 +- aulas/09-licencas/slides/index.html | 2 +- .../10-minha-primeira-contribuicao/index.html | 2 +- .../slides/index.html | 2 +- aulas/11-contribuicoes-externas/index.html | 2 +- .../slides/index.html | 2 +- aulas/12-projeto/slides/index.html | 2 +- impact-2019/index.html | 104 ++-- impact-2020/index.html | 110 ++--- impact-2021/index.html | 2 +- impact-2022/index.html | 140 +++--- impact/index.html | 2 +- index.html | 2 +- lessons/01-distributed-workflow/index.html | 2 +- .../01-distributed-workflow/slides/index.html | 2 +- .../02-software-and-communities/index.html | 2 +- .../slides/index.html | 2 +- lessons/03-software-documentation/index.html | 2 +- .../slides/index.html | 2 +- lessons/04-professional-project/index.html | 2 +- .../04-professional-project/slides/index.html | 2 +- lessons/05-python-packaging/index.html | 2 +- .../06-localization-translation/index.html | 7 +- .../slides/index.html | 2 +- lessons/07-code-quality/index.html | 2 +- lessons/08-automated-testing/index.html | 2 +- .../08-automated-testing/slides/index.html | 2 +- lessons/09-releases/index.html | 2 +- plugins/notification/index.html | 2 +- search/search_index.json | 2 +- sitemap.xml | 106 ++-- sitemap.xml.gz | Bin 689 -> 689 bytes students/index.html | 67 +-- syllabus/index.html | 212 ++++---- 58 files changed, 1066 insertions(+), 1037 deletions(-) create mode 100644 apresentacoes/2023/Kdenlive.pdf diff --git a/404.html b/404.html index 5fab4e58..937cd122 100644 --- a/404.html +++ b/404.html @@ -11,7 +11,7 @@ - + diff --git a/_snippets/alunos/index.html b/_snippets/alunos/index.html index e3bc0d29..ad2ee94b 100644 --- a/_snippets/alunos/index.html +++ b/_snippets/alunos/index.html @@ -13,7 +13,7 @@ - + @@ -560,56 +560,61 @@

Alunos

- - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + +
Antonio FonsecaAntonio FonsecaAbel Cavalcante de AndradeAbel Cavalcante De Andrade
Caio Emmanuel Soares RochaCaio Emmanuel Soares RochaAntonio FonsecaAntonio Fonseca
Cicero Tiago Carneiro ValentimCicero Tiago Carneiro ValentimCaio Emmanuel Soares RochaCaio Emmanuel Soares Rocha
Henrique Simões AlbertiHenrique Simões AlbertiCicero Tiago Carneiro ValentimCicero Tiago Carneiro Valentim
Igor MontagnerIgor MontagnerHenrique Simões AlbertiHenrique Simões Alberti
Joao Pedro Gianfaldoni de AndradeJoao Pedro Gianfaldoni De AndradeIgor MontagnerIgor Montagner
Jorás Custódio Campos de OliveiraJorás Custódio Campos De OliveiraJoao Pedro Gianfaldoni de AndradeJoao Pedro Gianfaldoni De Andrade
Natália Queiroz Menezes CarrerasNatália Queiroz Menezes CarrerasJorás Custódio Campos de OliveiraJorás Custódio Campos De Oliveira
Rafael LibertiniRafael LibertiniNatália Queiroz Menezes CarrerasNatália Queiroz Menezes Carreras
Rafael LibertiniRafael Libertini
diff --git a/_snippets/plano-de-aulas/index.html b/_snippets/plano-de-aulas/index.html index 89bd0c5e..5f779be4 100644 --- a/_snippets/plano-de-aulas/index.html +++ b/_snippets/plano-de-aulas/index.html @@ -13,7 +13,7 @@ - + @@ -560,181 +560,181 @@

Plano de aulas

- - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +
DateQuestion/Problem/ChallengeContentDateQuestion/Problem/ChallengeContent
14/08Introduction to the course and its challengesWorkflow with distributed version control: forks, patches, pull requests, and local repositories. Technical and non-technical aspects surrounding software: infrastructure, support, marketing, funding. Reference: FOGEL Ch. 3; Additional reading: TAPSCOTT & WILLIAMS.14/08Introduction to the course and its challengesWorkflow with distributed version control: forks, patches, pull requests, and local repositories. Technical and non-technical aspects surrounding software: infrastructure, support, marketing, funding. Reference: FOGEL Ch. 3; Additional reading: TAPSCOTT & WILLIAMS.
16/08First code contributionWorkflow with distributed version control: ammend, rebase, revert.16/08First code contributionWorkflow with distributed version control: ammend, rebase, revert.
21/08Project documentation and what to do when it doesn't existTypes of documentation (user, developer). Source code documentation systems: doxygen, Javadoc, pydoc, sphinx; Reference: FOGEL Ch. 3 (Wikis, Website)21/08Project documentation and what to do when it doesn't existTypes of documentation (user, developer). Source code documentation systems: doxygen, Javadoc, pydoc, sphinx; Reference: FOGEL Ch. 3 (Wikis, Website)
23/08Studio class for "Professional Project" activityStudio class for "Professional Project" activity23/08Studio class for "Professional Project" activityStudio class for "Professional Project" activity
28/08Ensuring others can work on the project: API documentationcode quality28/08Ensuring others can work on the project: API documentationcode quality
30/08Software distribution and versioningSoftware distribution tools. Types of distribution. Versioning schemes. Reference: FOGEL Ch. 730/08Software distribution and versioningSoftware distribution tools. Types of distribution. Versioning schemes. Reference: FOGEL Ch. 7
04/09How to make software work in multiple countries?Localization and internationalization. Gettext tool for translations and .po format.04/09How to make software work in multiple countries?Localization and internationalization. Gettext tool for translations and .po format.
06/09Software testingTypes of software testing: unit, integration, and interface. Testing tools: pytest, selenium.06/09Software testingTypes of software testing: unit, integration, and interface. Testing tools: pytest, selenium.
11/09Studio class for "Software Testing" activityStudio class for "Software Testing" activity11/09Studio class for "Software Testing" activityStudio class for "Software Testing" activity
13/09Software licensesCopyrights in Brazil, patents, and software licenses; Reference: LAURENT Ch. 1 and 5, STALLMAN Ch. 613/09Software licensesCopyrights in Brazil, patents, and software licenses; Reference: LAURENT Ch. 1 and 5, STALLMAN Ch. 6
18/09Introduction to contributions in open projects - Activity "My First Contribution"Studio class for group activity "My First Contribution"18/09Introduction to contributions in open projects - Activity "My First Contribution"Studio class for group activity "My First Contribution"
20/09Studio class for group activity "My First Contribution"Studio class for group activity "My First Contribution"20/09Studio class for group activity "My First Contribution"Studio class for group activity "My First Contribution"
25/09Studio class for group activity "My First Contribution"Studio class for group activity "My First Contribution"25/09Studio class for group activity "My First Contribution"Studio class for group activity "My First Contribution"
27/09Working in software communitiesAssessment metrics for the second part of the course; Communication and teamwork. Reference: RAYMOND Ch. 427/09Working in software communitiesAssessment metrics for the second part of the course; Communication and teamwork. Reference: RAYMOND Ch. 4
02/10Course projectStudio class for project development02/10Course projectStudio class for project development
04/10Course projectStudio class for project development04/10Course projectStudio class for project development
09/10EXAM WEEKEXAM WEEK09/10EXAM WEEKEXAM WEEK
11/10EXAM WEEKEXAM WEEK11/10EXAM WEEKEXAM WEEK
16/10Course projectStudio class for project development16/10Course projectStudio class for project development
18/10Course projectStudio class for project development18/10Course projectStudio class for project development
23/10Course projectStudio class for project development23/10Course projectStudio class for project development
25/10Course projectStudio class for project development25/10Course projectStudio class for project development
30/10Course projectStudio class for project development30/10Course projectStudio class for project development
01/11Course projectStudio class for project development01/11Course projectStudio class for project development
06/11Course projectStudio class for project development06/11Course projectStudio class for project development
08/11Course projectStudio class for project development08/11Course projectStudio class for project development
13/11Course projectStudio class for project development13/11Course projectStudio class for project development
15/11PUBLIC HOLIDAYPUBLIC HOLIDAY15/11PUBLIC HOLIDAYPUBLIC HOLIDAY
20/11Topics on free culture and software communitiesnan20/11Topics on free culture and software communitiesnan
22/11Topics on free culture and software communitiesnan22/11Topics on free culture and software communitiesnan
27/11Topics on free culture and software communitiesnan27/11Topics on free culture and software communitiesnan
29/11Topics on free culture and software communitiesnan29/11Topics on free culture and software communitiesnan
04/12EXAM WEEKEXAM WEEK04/12EXAM WEEKEXAM WEEK
06/12EXAM WEEKEXAM WEEK06/12EXAM WEEKEXAM WEEK
diff --git a/_snippets/skills-code/index.html b/_snippets/skills-code/index.html index 27345abc..a37918f4 100644 --- a/_snippets/skills-code/index.html +++ b/_snippets/skills-code/index.html @@ -13,7 +13,7 @@ - + @@ -560,62 +560,62 @@

Skills code

- - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + +
idNameDescriptionXPDateidNameDescriptionXPDate
21Code ContributionSubmitted a pull request fixing a bug.704/1221Code ContributionSubmitted a pull request fixing a bug.704/12
22Contribution Accepted!A non-trivial pull request was accepted by an external project.1304/1222Contribution Accepted!A non-trivial pull request was accepted by an external project.1304/12
23Simple Contribution Accepted!A simple pull request (with trivial changes or small code refactorings) was accepted by an external project.304/1223Simple Contribution Accepted!A simple pull request (with trivial changes or small code refactorings) was accepted by an external project.304/12
24Bug ReportReported a bug in a repository, and another user was able to reproduce it.504/1224Bug ReportReported a bug in a repository, and another user was able to reproduce it.504/12
25Feature RequestMade a request for a new feature in a software.204/1225Feature RequestMade a request for a new feature in a software.204/12
26INSPER ProjectMade additional contributions to an INSPER educational project.504/1226INSPER ProjectMade additional contributions to an INSPER educational project.504/12
diff --git a/_snippets/skills-community/index.html b/_snippets/skills-community/index.html index 9a4fe4de..1d7c5fa3 100644 --- a/_snippets/skills-community/index.html +++ b/_snippets/skills-community/index.html @@ -13,7 +13,7 @@ - + @@ -560,94 +560,94 @@

Skills community

- - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + +
idNameDescriptionXPDateidNameDescriptionXPDate
40Indirect IssueConversations in an issue or pull request led other users to open issues reporting new bugs/improvements.304/1240Indirect IssueConversations in an issue or pull request led other users to open issues reporting new bugs/improvements.304/12
41Beta TesterWhen reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue.304/1241Beta TesterWhen reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue.304/12
42Translation Accepted!Made a translation that was accepted in an open-source software.504/1242Translation Accepted!Made a translation that was accepted in an open-source software.504/12
43New LanguagesAdded support for translations in a previously non-translatable software.1004/1243New LanguagesAdded support for translations in a previously non-translatable software.1004/12
44ReviewerReviewed minor errors in the documentation of a project, and your modifications were accepted.204/1244ReviewerReviewed minor errors in the documentation of a project, and your modifications were accepted.204/12
45Documentation ContributionClosed an issue marked as docs.704/1245Documentation ContributionClosed an issue marked as docs.704/12
46Project PitchDelivered a project pitch.004/1246Project PitchDelivered a project pitch.004/12
47Pitch Accepted!Contributed to a project presented in class.504/1247Pitch Accepted!Contributed to a project presented in class.504/12
48Accepted Suggestion!Another student contributed to the project you pitched.304/1248Accepted Suggestion!Another student contributed to the project you pitched.304/12
49PR ReplayPresented (in 15 minutes) the process of resolving a bug in class.504/1249PR ReplayPresented (in 15 minutes) the process of resolving a bug in class.504/12
diff --git a/_snippets/skills-impact/index.html b/_snippets/skills-impact/index.html index 47e05cf7..c07dbd31 100644 --- a/_snippets/skills-impact/index.html +++ b/_snippets/skills-impact/index.html @@ -13,7 +13,7 @@ - + @@ -560,78 +560,78 @@

Skills impact

- - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + +
idNameDescriptionXPDateidNameDescriptionXPDate
60SpeakerGave a talk about libraries or open-source software.2004/1260SpeakerGave a talk about libraries or open-source software.2004/12
61HelpdeskHad an accepted answer on sites like StackOverflow or email lists.404/1261HelpdeskHad an accepted answer on sites like StackOverflow or email lists.404/12
62Published ContributionOne of your contributions was included in a release.1004/1262Published ContributionOne of your contributions was included in a release.1004/12
63VIP GuestAfter making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill.504/1263VIP GuestAfter making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill.504/12
643 Submitted PRsSubmitted 3 pull requests to the same project.1004/12643 Submitted PRsSubmitted 3 pull requests to the same project.1004/12
653 Accepted PRs3 pull requests you submitted to a project were accepted.3004/12653 Accepted PRs3 pull requests you submitted to a project were accepted.3004/12
66ShoutoutSomething you did was mentioned by the project on social media or through an official channel.1004/1266ShoutoutSomething you did was mentioned by the project on social media or through an official channel.1004/12
77HacktoberfestParticipated in Hacktoberfest by submitting 3 pull requests to external projects.2004/1277HacktoberfestParticipated in Hacktoberfest by submitting 3 pull requests to external projects.2004/12
diff --git a/_snippets/skills-tutorial/index.html b/_snippets/skills-tutorial/index.html index 80add593..37de5c25 100644 --- a/_snippets/skills-tutorial/index.html +++ b/_snippets/skills-tutorial/index.html @@ -13,7 +13,7 @@ - + @@ -560,94 +560,102 @@

Skills tutorial

- - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + + + + + + + + +
idNameDescriptionXPDateidNameDescriptionXPDate
1First StepsAdded to the discipline's repository.221/081First StepsAdded to the discipline's repository.225/09
2Exploring a Project's EnvironmentResearched the history and community of people and services around a project.321/082Exploring a Project's EnvironmentResearched the history and community of people and services around a project.325/09
3Undocumented ProjectReceived an undocumented system and got it up and running.528/083Undocumented ProjectReceived an undocumented system and got it up and running.525/09
4Professional ProjectRefactored poorly written code and created a web page for it.501/094Professional ProjectRefactored poorly written code and created a web page for it.525/09
5Tested and ApprovedCreated unit tests and interface tests for the challenge server.513/095Tested and ApprovedCreated unit tests and interface tests for the challenge server.525/09
6Python PackageCreated a Python package installable via pip.311/096Python PackageCreated a Python package installable via pip.325/09
7DockerfileCreated automated deployment for a Python web system.311/097DockerfileCreated automated deployment for a Python web system.325/09
8Basic TranslationUsed translation tools to translate and localize a small command-line program.211/098Basic TranslationUsed translation tools to translate and localize a small command-line program.225/09
10FLOSS ResearchDelivered a long presentation on a recent and relevant topic related to free and open-source software.504/1210FLOSS ResearchDelivered a long presentation on a recent and relevant topic related to free and open-source software.504/12
11Better codeAddressed linting problems in a poorly written project515/0911Better codeAddressed linting problems in a poorly written project525/09
12Release createdCreated a release and published a binary package for users525/09
diff --git a/agenda_apresentacoes/index.html b/agenda_apresentacoes/index.html index d8652fc0..f2a61143 100644 --- a/agenda_apresentacoes/index.html +++ b/agenda_apresentacoes/index.html @@ -13,7 +13,7 @@ - + @@ -590,22 +590,22 @@

Rubrica

- - + + - - + + - - + + - - + +
ConceitoDescriçãoConceitoDescrição
AApresentação realizada dentro do tempo estipulado. O tema foi organizado de forma excelente, com boa sequência lógica das ideias. O trabalho foi apresentado de forma clara e concisa, usando so slides de forma coesa com a fala. Tem boa postura e segurança, estabelece contato visual com os participantes durante a apresentação. Incorporou elementos visuais de qualidade no material: figuras, tabelas e gráficos são claros e contêm informações suficientes. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).AApresentação realizada dentro do tempo estipulado. O tema foi organizado de forma excelente, com boa sequência lógica das ideias. O trabalho foi apresentado de forma clara e concisa, usando so slides de forma coesa com a fala. Tem boa postura e segurança, estabelece contato visual com os participantes durante a apresentação. Incorporou elementos visuais de qualidade no material: figuras, tabelas e gráficos são claros e contêm informações suficientes. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).
BO tempo de apresentação foi de mais ou menos 5 min do estabelecido. O tema foi parcialmente bem organizado, com sequência de apresentação razoável. Expõe o trabalho corretamente, mas não usa os slides de forma coesa com a fala. Postura e segurança razoáveis. Os elementos visuais são de baixa qualidade: figuras, tabelas e gráficos não são totalmente claros e não contêm informações suficientes para compreensão. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).BO tempo de apresentação foi de mais ou menos 5 min do estabelecido. O tema foi parcialmente bem organizado, com sequência de apresentação razoável. Expõe o trabalho corretamente, mas não usa os slides de forma coesa com a fala. Postura e segurança razoáveis. Os elementos visuais são de baixa qualidade: figuras, tabelas e gráficos não são totalmente claros e não contêm informações suficientes para compreensão. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).
CTempo de apresentação foi de mais ou menos 10 min do estabelecido. A organização da apresentação é confusa, o que prejudica o acompanhamento e compreensão das ideias. Comunicação deficiente, com dificuldade de expor ideias. Não usa adequadamente os slides. Não tem boa postura e segurança durante a apresentação. Os recursos visuas prejudicam a apresentação. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).CTempo de apresentação foi de mais ou menos 10 min do estabelecido. A organização da apresentação é confusa, o que prejudica o acompanhamento e compreensão das ideias. Comunicação deficiente, com dificuldade de expor ideias. Não usa adequadamente os slides. Não tem boa postura e segurança durante a apresentação. Os recursos visuas prejudicam a apresentação. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).
@@ -613,46 +613,46 @@

Agenda

- - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +
Data e horárioTemaData e horárioTema
17/11 (9:45-10:45)GitHub Copilot é ético? [Eiki Yamashiro e Marcelo Miguel]17/11 (9:45-10:45)GitHub Copilot é ético? [Eiki Yamashiro e Marcelo Miguel]
17/11 (10:45-11:45)A relação entre Software as a Service (SaaS) e projetos de Código Aberto [Caroline Chaim, Felipe Lemos, João Farias Araujo]17/11 (10:45-11:45)A relação entre Software as a Service (SaaS) e projetos de Código Aberto [Caroline Chaim, Felipe Lemos, João Farias Araujo]
22/11 (9:45-10:45)Telemetria é "ético"? [Guilherme Lunetta, Rafael Monteiro e João Magalhães]22/11 (9:45-10:45)Telemetria é "ético"? [Guilherme Lunetta, Rafael Monteiro e João Magalhães]
22/11 (10:45-11:45)Regulamentações futuras na Europa sobre responsabilidade legal dos criadores de IAs [Luiza Silvera, Guilherme Batista e Gabriel Zanetti]22/11 (10:45-11:45)Regulamentações futuras na Europa sobre responsabilidade legal dos criadores de IAs [Luiza Silvera, Guilherme Batista e Gabriel Zanetti]
24/11Não teremos aula. Joga do Brasil na Copa do Mundo24/11Não teremos aula. Joga do Brasil na Copa do Mundo
29/11 (9:45-10:45)Regulamentações recentes na Europa sobre durabilidade de smartphones. [Keiya Nishio e Bruno Freitas]29/11 (9:45-10:45)Regulamentações recentes na Europa sobre durabilidade de smartphones. [Keiya Nishio e Bruno Freitas]
29/11 (10:45-11:45)Por que Open Source é crítico para criptomoedas? [Paulo Kim, Raphael Lahiry e Rodrigo Coelho]29/11 (10:45-11:45)Por que Open Source é crítico para criptomoedas? [Paulo Kim, Raphael Lahiry e Rodrigo Coelho]
01/12 (9:45-10:45)The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022? [João Pedro Meirelles, Gustavo Molina e Rafael Almada]01/12 (9:45-10:45)The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022? [João Pedro Meirelles, Gustavo Molina e Rafael Almada]
01/12 (10:45-11:45)Mantainer burnout [Cesar Ades e Jonathan Sutton]01/12 (10:45-11:45)Mantainer burnout [Cesar Ades e Jonathan Sutton]
diff --git a/apresentacoes/2023/Kdenlive.pdf b/apresentacoes/2023/Kdenlive.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e233c07dd9c70beda2051ae7d3a1bd73b8e3728c GIT binary patch literal 794119 zcmeFZ2Ut|gwk|r!IY|(ZOp_&pfD$E(L_so$Bmv1N*(M4Cl7j?6GAKzvl3MgF*wcd~!x@Uv|+olNYU z9j+=ebq7njYAy5UR;K0}@^`N^{JS--%Kq6Ga#l}W%$=~g<(`_jn9G=(+M9ve-Z!_i zba{d;{G$@^IcFEJ&1|vVQVKO~?S~|Bdo2;s&#&csSL`e?ViL;UMJBPj7ECbIs+aDP z>5t&vR2nivd)YklfOv*@B4X>nonV;Z#N!sGpY=``^(Kyj*G(OJ16kA5mEYK8>>F?2I&)@7GL6-nK{?4yn66BCF(~ z%@0p!BSSodaN8L@O@54>A~^33Tz55jHo zI!#A@^r$&ibM-ok<$G_NSAjBoL1$PQgr*cFnM=6IMB<+o4$3^JogcP3GK3}1aBi*_ zk9-d883nlQZDa_pOYyy$cmN5LE(w#Jr`oV2&&@j}+WEFpUE@WHG2JoQV4GG z>3P(no=(=n9_(nx*1h2*zDZeFNcJ(7=OOoP=fSCl^`osGRrG^qI8MLe3~g!yI>63^ zthgN7k|Qb9-M)=2-jt!sSs0L0{bX8TW7+iJi~FdT-ra(J4=m$%o;bxdxvx9Jc^)aA zMyPYf_j@~cLSvmzE^rj(_#&=+>Q6xY>0MVixx$kmukcTYyTa$yEqxHwe@gN4`~o{^ zDQsRY9&Bz?lOLadW0UvFMSg-4l=?%4=NI(yUU~XYi3iUfyZneIinc%eOc8V+CkOj0 zFk`zoJp-|hl&T8gP()P9v z_I6huD+~r4WfNx`Y~HIF0tT3$4kIJ2`48^Gd*%E;qRyYqgZPG+1qkoSDarvz$N+!@ z{sD*yKpH?tMMFnJMMppFt9PPiLtSXSt-dVS^v{7L_I)+d8HEy5(9ut zgoHwbglGn6K|Rrse!PG`Ur5L(puQNGSlBqAz$Zcg83_di85IQ$4HXrX_6ENPP>Im4 z(ep~76RVqGFgTL%`9`HeyJAc0ZFzg@fA_DC~Mny$I#kjHy3E34qP>4{`=y}nvNvUI)I1)4P`C^jXjY|L6 zfW^qKu}k{cX#krHA~46acV*fS%lhrfK!bS)_2JN zpFBA7P8{bWPGr2)@iQS#O4jZDld=?Q-LF>_L|V)cuAJ>Oo5{w+Vm`UF zT3qosS|mf!BwFP0Gu&vohPdH?Ix&-nEZri- z;!)GVSM6%2Tilg%Z>O>2O5j*ARL$w+O&t_(^(?HDn5D*ZlpwtTYr;$jI(Tya%%(Ow z$8`FGpHOul6-ujf2NhA$#!gZC$I`0LpP^jS)3@T~8}4YyDb_FU-qG$r0ED8dLZPBc zj(LhLHOn_NSxK_!U#Wd#Sze6kSWI#BVZ>7!zqe!NV&Mk+Fj)SArSddoibUNgfB!$< zGF~Dls_AaY4N1?7p|1ID&W_9WI%Z*X6O63&tg5oq8>-DS=%RPBPwXEKbM8E|NE#f} z9Wc`AjF-8I)ck0HairQF<>C?{liE}361os{ zToIVJHnSVyF7dP?dZzo_ZYz1X$Z;ubL5$xh%QE2DN^EOv+kG&cW&DmUlrw_7SoVbI zy}_8+VwmB{UHY%YHzPwQOACe%jho#9f2A2hX1)E80$bAvv*Z5k)Zo_P&n5Y z)nXk45V$pOf4VmS+v$c~IDK}AV{L?gHC}Q~AXX{Z+MN1gS@7F4rCx@+O^uY$K*0}P z%8Xsrm8D5f(zf`ii#~qDK-+akDRket;I=1*_JzMj058lDz(U*u?UTNF&IgKhL)$mY z<6drK_>M6|@@Q*hg|*8$cyko#gfXfNT;M|$?e6o9FoHzj=gdK1}C;H%n#YDw+m)X!|0|Zc+cA0I& zs2&Kv2CsQbQG7lOH;xvIn4P%@y>5JTGINHk?QTHZ06Qh)f^F=<4pEEtza-;bu%>Yv zpM-Hp=nc4R*-c8n*DF}}y{MS%94KSE5$h*HMMdSOX-3GaNAj>VB)W`Gxn+umVBQ{W zz2WR|=C7GvEyR&7JY(-{qW7KkyA!gH z04Tif5Xo}x1U1>pq7|H)wrK>U#Pn~8pNOHkyM+-))TwHE2sqv|+Waos8R9jdh+9n3 zKF}GaHPDJ3)qwh3p!1-&J|lz`_*X}<pDH~&M>5rfXPRZ8pjzw|9#=Agw`cug)i z2=`(va^pQbCRvu)RV(bk|gHvcl$1Jl7!$u3j$~!?Md6MsI^4^QpFds{szC<%X!3V14oit9(nzlLAf9yp8~fFO2haCda1M;pU&3 zZE^FDpU5pflA^$hY7k>nqL#{ug`#RY#KkCg?O9$ogf-ZovLy*!Rv>@@ZUfop2mlSX znDb=jcme^))VV!-f#tzJ(FmoX`EYOtI<5^j?>l!#0OMNof?G4?#TQ*^#|H?Y{6n)f z53JF6^g$-rRvu|x`|=+zZXkfD#~W}M_$hgBhr|Cw2mvs(j9$JFg8RfxYY&;g0*RM4 z5CBmiiMsw9@J*6xCe(}3be`3fFupRq5+^o{%+BW}l^r<>g{W!x>`5!^-8v;+e~@~R z#l@);Tc-k2tJFo6Fe4+K#h1{$?b-0{*5%$MuP*)A{pGM|lp^Uz3;pk-RwWrDIikN@ z6MUw}pA*ikdFYY3e2=4UFQRF!JX!Y$j}Ka|D_iNp9dp|ce`W4@965yusvQ*}4nB6R zN9>aFeg{n~3&n?K){GFp#vgeOyONuERjM%Og1beOALL1P;$%7=OR893fhZc-7~DY;n>RqXWyDw7EPi%-0nu-u zBHKIp!fLAaijuSQJu5kYR1ZAQmzZBh0K-cNAVzDWjk+^>(K6vC^@LaZS!2kl1f0wM zQpNaGQ2xST<}3xaZ~ft1`aH~71HLa_lJP|q0fZ(afCmY1WpxB_T?n4beUX%TB_W=D zx#(>o>y`HR?Z1jT4*E{+t#l4nP*Ur8rD!k$*u3EkYMS)r>E9(@fo-=0-sF6ljsUPM zztvV8T!3J3e_@2bHMU^KpRyN{Xu3mIO`+Z}mfIc9^%?3nv;RQA{`|^jqpFbK0_3js z#kE7r&jD~zG3{j#hQET#=J%0p*aR8?E6SC#fgedEEJm3A1F|rFAFFbjpx7*3qi{xS z){IJC@XhDPF)wO4d&l-shilH$ieba=)sMZZorhB_F}_GHu829^@!+@}yP)pWaUH7@ ze^1Z@e$&<_vFqICCawgC64ORmiJosB>Nva-tD(1pOpYeF9=jbZ2vC=LPMq zYRzhKAcuaF5%pJ5WpAd`S2oAVv0>dE%M2z+K*~py4+OnQ-IH%)C1_8O-B9Bu5dfII zj+b90WV`uZU_VG2UnGN}E;JKP$_<7(91vs<(7k8HqwENvFBhyTD($Nkc-nI5)mOk; z9D@MnG)^YqKCn|E3=lc;7wpD2p#2~am}e2d{OZ|~@#!G~pxq~UKZF3%LeEaqbkvPm z5I|%0UgeMRngGrfaiaO|hNpu}G_xivT39A03F76mZiZfcDUN ziF0&N=hd9zWQpJERWrWe*?W;@>g?{C<^FtRuY3?TZgNLm3NkCM3LNIg^L+?40&O&A z$PCO$dNBYs<`4ZXyDDP%9gMYe}lVe%fMoQrz;KhU&F!>snD3Y8$GVWqO0@1xG4> zUx~2b0u5vjtT@7~i$`ME47oJLE~gOMhLwHWv4 zuUhMbj$aHHxWFik`tqkIbQ?$T{ghrk6y#i%bBw361opO!%w?_a<(4HSt;#Amx3nCI z_kx3PTa&~g@9NA6HQ3jr@)ykFS0ib})kwMuJ9&T78geL6zH*U!{n*Ph%@W#ZI+u1v zerSJzABq4%GU3FuxCo%XEfYHHVtk?HWoq;h0bsK<&m3H4LTA>XCsS6c)OxuMI8mZZ z>`;;d&&q$SKw^#;9IA0Wgy0ymAZD}!KuEpX69VJSlbP>l#&98dF!2G?wPUakpxI!$ z_AGaVSK?r^@0%Ljc?$OX(+{~{duh*2M4)f<>u-$TFH*S%@_=tn5mj{3*a zwFII5Gz^1>$y0adzbihmrE{Os(8VE@y(!uK$P#5FM<+}=w2m)R&d+*CwDWgp{ddN> zf*wzUlKw)Ov#<#i%dXdQMt3n}X%ocIqj#2WpM>g-@TaS8ov$qXNa$Rwg zqvyhM5BIKF>F$9)-xr!4q?qt@q;~N{Q3uBqKM{K}w;A=(`RIYW<7-9guWJG=Zob<$ zMhfmCuJmnOy!LLC#mLahCgHQH-AcMVW_%g#%?N?wo4tbyo4Rkqm57I9CWlxvY8T4E z;S~7&sOfw8g#g6as9~DQx$C#u4;EDiqG|lX<_4w?@b3o4?*ph7GpWb;qWzXVsor{< zAOIYj28lyT1kj;~08T>YpmX3*wr&ny6TrvhFZdC_<$c&GJp!2E7;GABQG?xdg?~;F zd~dR$pQH~p4Br5gJ3r`;w)9>ui9#YS(7gU7`siDnFk_Idc`|@Tq%NkQ{Qz{ z<6GYw$CPI+_urd}7|z0q6V+c*t`9;-+xLDSKL2Tc(ePt_vHkzl`~vK}$!6BP?UnGs z*5&=B3cU%IM1g>7L{8|c!*M9Xkr)u|@RP2#QOa7Uu{G=CanC$$3-WkXH3tQp36vrc zVc`Of$Mmu`)rIVQd53ohDBSi(5TH^mkc&&@TVMBh zJ7i!ysp!ZHXA!CI5JoBK5XEONBwZM3Rw)}b9nO{$i1!62km&z%0%-_qlpxbNxzn6* z`(-X^cS*;SezZz0i%G*968uPEY&!dp%1#KLFz$ zRVMs;qN6Xo44f!F1|v@_wDEYi@8V=b z;`=f;T*O%7#G;Y&L35HynnQ2N)Km*fDIqyWm4=)YMZ;n7JBc}&6H7SsQ`-3@SksN7 z5WzjI7>AF6dcqzmgH^v5rTc~Xq;GEOL6b*Cn!Wjlo1@R8>%;csNchv$R3I!A;&EW$ z!)9rcIJhi805f1*p0YSeo^12i9#D4C(19-R9_`&}a|z5e}m=^B9RfTj8h+ zj`&(s=)AK2TSE5#3Zm9^ud${o8fpk=bay+D;489}6#td4Q5(#JiW-~Dtse7U7s{H| zmz(9=#n(9~e-u6@GW(1%dM~0`E1II9R$Lz+5UR}wBHl1WMS9@1&7hDE;02-rkFcUwn*-hfG)(MG?d$(z>5x{<@hi2>d@6(Gf9N;7UpQ!J^iFR1F;s^Cl z(`={8JmPvqKc-mb*tD`1(%ky|(CLCGsZm{J?S;wzWd7#x^@M4)Paf;S&7-&*tn1g` zhej)3{PLqiUL%;oLk(5JMlaW)+#S?Ve^G1rjgr*T_yX-z&FzqOKjr?oI z^Y5J3a0k^)RR)3G|9%ECs6TO<98ZYzcAzv2S#rIp&beG8T0@y{PDtgRwJ>bIh!B5v>}<^zY(LGtKx}cIS%n~37JSXktQPea6KY{K`GMzyzFGyd zS>rPA-}GlZo=~8-BAQ@T&Jyb2V-|XCrMf+~QcyQi>Dv4KM(g77xj)2Y##yDNCiq{x zZhvExdYV;LtSrai`xo}{>DrWfLPqh3KI+xiIn(SLP~y7& zkr3&(2hbXly8dr3U#XnNB=?_p*Nx^wSv=m>eT8wRO1PkTy!Gb{{Vowcy*wY&vM(XW zeeiMF%n?p&GtiZCNb(&PFui19uMQVKWS0=S^mc@gB@cX{s(ayxuvt}3ji;^Rf$dy7 zWY*s3Pz#$tV5smKZP5va$;(~ebYtz z1-%Y!KCv2}JD?;vz7w=5yCb=lx&H5R*Vx0TIEES2{fEx|1<#lLxe z8kIDSJIAn)@VIzU99Y5ry>dKl!oxCfR8A@Gd`04Xw$O+XkL_%!m}%FjB*%Dh$foYO z-oR1U4#8QsK;~vb{&((!q;;+=<1EDUc3}*YOTG%y(q5xSu=bTvsbgK7?Sv?KdX(3J z-@As3zDB;vVLuGTokkne>0`hPOd~zcW>~Pl`8}!FVt{*p>B#8()6=u1VPYesdvccy zw1(Sp?;ekE%Wv;l_m^xWj8x!$!J|A5^?D0`_0bBJ;y&;plWPLLX78`<5vTKhhPy4k zajzu9SZ`+;nqLL#`gt=V=-DM-()nIVsl@q$$uk(P?MvKZ@p9?+>*l^~O^S!1hs6ij z5Ag-pgQy8|2f0fvUu%~+J(=TJH70WwO;JM}RyM>LjU}ZA7QcgzA#kVHz7~?}onW6O zyq$X?nxX?$X=}2LI$zSX5F%{d?pt=N;(P(4>R6Mz=Kn$@p=r+{Sr*m~Ka2>P0L|*g z`N+~bKO}K!%QOD^kawi}U_HU~yWnSIy@~lrH44ifD%guCdwZ+ru&`r+&&FBWP*dGz z!TD)!X#(()`BPhy`sm5`(8KibAQZR5T(6@NC0M&%`t0QNfL0w|H^$9{_fdMoiFfGP z&p3VH{*^7AeIKC=%Z7YsBGZ>`Uw05@Q?zrJu&{G^QwcRgiHV*1E9C+rMd?aI&Z%|U#43inBsg*Fu<#3olaVEmr<9&W;8%y;Y)v8Z%T zw2qA4OV;10eRyq^z{7tA`wOk7FGdZmw=Y2z?F--Q6|_)a+ER%?98up(?>&6C4gaGL z+`Dpv-#55-_;&ojyt=g z-L)vXD{%An4oVU{!BYIh1RJCFlhxU0 z5A?RPG#APct;rdxO-qUM0SrEui$0CfRWd6k~HWZ4qXd|!q zF9w94e4kr_BD{YQ9e(m_c=<&He%`#I@BAD&hQ#b2m1%h0;DPYxa7tD zL8th$Y$tou2j(syC4(E}W`S%cb2k@k?jOb8{qs}$&riia$W=dy8^7xQUm`Vu{E#0U zioaP+ynhmz{-ibW{YjAeU*k3XDE_ZT{vQyVK)%)QObxe`I-M@3Nf{Db)?yC~rCVd_ z{A^ELXI_-~H=+h%H&^UJ!gaHJzR7lA;d^1H)%*1=PR0vFqq{$DjglAC_@4MMZDK`y zILXE;Hr~r?S|H`P3hu>Joc&NQnJRj;DD2y&DWP#u7M?h|pAOcIZF)%DCN zBe{Rfu9zZCN6J`MEJYiJgL~`Yi72Hzi^V;93Q5Lg8Y-Tc(0~dUlQY8xTa#hPE~iD6 z@S|==9#7qZ*LGne(k_y>-^@MC35Yk~Sg7q)ye=mE&V_xwEJsECgNtUxkv9(CD>NM; zu7S*`iC{dPPpXNsPZoJ@LZzIEEw&b4qZG+QOa_m01Tgt!xl0cDgaRYbTa z#tCzf%x(?PbG*;t(S)^MccK?3mVeCj!r;0-7%W^}2Br2DSv&31u5HCEd%`r#oufx5Ql%yO7WO17KNB{a>Y0M3E2@OW$lVUGL_r>dq*w`GM?vObQ=rabmac@cB5W_3O5?1C1SyZy; z^Ir7536E7Hg{5%4A?0p<8|lJ?xsou+9sNUjSf5uS1LtX}PxFTi_?SlPE#1_RGL7D?MD+-6i z)4pJcDikMbyxPs$pH{W0DC!`vz|wcH=$U9%+}D+ER@01P+u@hVQ4o<4mwl}lw_-p{ z*tT?0HC!?|Qo?uv&(IvBwZK8M*<&EKtr}2c6u8em@hwonS?md~x1@|p&68G!q>`C? z4bxR_5!pd@OE0~wUWi6ulHI?xKjNwp`2Azo65dnynFbEECq`O+17tUJKDVwTSv>7e ztS|8}JBnw@AMfpPhvkdu z{BtD!;nG*WFCy?)%>5BfuI~N9LgV`xoPQ8X|4sH7FP|{TL;I6HcE#2Nd7A$=ee7oz z|IdUmzCSpff2Z{S8xY2j`_cXnVeAhg-2e83vHd*KoJh!{&oMq2kfiwInau-2luat+ zuCNp*3BAyJ!{KjTnD#X^88PUtVSM7se6P$WR{O|1r6lsO*Fl1PRAtd{;xXs2-TU*r zDGjvOf1F5?38~k7*v@q|sKjiDVItfoYv(W($bd9v)l=g}nV5ZTrLLncigSp46+uv*=@5 z3?ViTh$G(u3bF5~s|A49b9DyBQkKV(cFbHPH{Z+2tEo6(_DSo$!rj+bbcnpSD<^3s zW0pbOZ~3lptX9cPQ2Dl}8<$rww^?1Jg4{*>16Hw@y`NGAIoJ+uIPR3WQ+zUw!pBw! zpN)2M^YWzXM-`&%r+7lfpwYb!W|o7hDx6)BocMZ?W~tZTuZ~A}%JK%(&Qqn=8I4j}w{VnqSB1mVtCU2)K9J{g}1&J-8xBEm1$j% zKBDItz7S8?qjxWq9^vD;D9>*&*M+;MSG!ik-wDn_BJPbMwwg|C49B?FW~-!JJ39Y) zIHT&8BC2}1qmRLxd7O3O_M=`_AX$2t?&ZAh{7Xn+#jTBCUlw2%cd3eQFUj`HYwugp zf+T@G)v+x!q#aT9i@3NB1Rk*K!Lu(tPi2=g9TJd&#u7Dzv%B5U`mdpj0isAsb9hFW z*(H^4Itcx@1_jc6=9L@(j8Qg~1>P?$o?qr(v^jp6v@ltsY85jMXRlaaW7=bijo+W> z=E|uclqYd)&*ZyJk9_yEGg4J5QXaiz^Hbs$9g#d*sE>1EAp^L0$;YoCee+$?@%kN4 z^BK_~Y(8|=k%G3YnJxh$rn1l78ImMs0W3idA}AZGL(dk_VV3!-xPX4e^9JNrf?0Gt z>xq;1{XI-A!`kYTJ)CvTJx?VGAToz5KC>&|`q8Pzy%$yK&P9u^*_XxZbVxIMSW+b= z%_!Ezc2ZssXrXMEd9N1diit_yvDD&1o^(Cg5p|{&d_~oa6N?i5u4AVEAx5wuZ@w`kLpxe{USWX~Sw@l?y=7Jn z&G7#W6X4jW+W}BHcu>kgOc^OCKHRn_;AC{;;vC%Xeha@J;B%wQPlR?@OKD@Q*v`oF zp!Lo7g-zDvNhK5z6V!IBw@b$PQ8~90Qxi>Zl@{( z9xxyHHQ9o-_|c^8yr)Ln{5Q!4^0-WCTNR7s=UM#CcVmyEn_Lpc4QH9BSGl?u@)+tu z8^xLXMNQ|ZxmAaclsvDO1u(UghciBI=P9BB7gHQy)U}r81r6D&$3kk;9Tu%hp?TUw z39SIhOSdCZ&hp1fZz2yZfJ=VEnG42onN+%}@=C%ETeQK(2Bx?UwDtxF7Xh_z4rAYH z;iZ1lM$Q_qVFwgvvZjUJpDjg!5A(EaXc)U5q`a?sahl{#>8`s{Mup)xl1Fq$E!?jb zS<+0|)6?UAxoI8{`YJ3TTGp1m+4K&hBJ*ph=^Hm4JRYfGP{=+#iBKskQI^;&?cP^L zidGx&L7JBQ=A=mVP>?>5bkNE}EPFbRCJSykwiRz&VNxSZTSGI^fm}50c6XX2-t)D} z4dF^6^7=(OirEgB=pisf)TVA|R5-gbc(`V_QiIw^+Y=_=344QTDgx(mU9P?-jm-gV ztg)@zx8^gDiM~uCiP9Pp2xFY21ByR8)5lao*HXDS*6UwFX~Dgs$Fn{{d7 zrFu*HP0vlrt{>B`zlAMaVL6&7oRL?FezpSXa+*hVK~s<#xli?_;?nR%JMI@v=5a`j z<2UN2$ZzD+7^nxT?f4!cLwjOz70JajW4cN=Bc(W6ao-c}zQ`$Kmt-v}U-K}Wj&Kv%CFLxLlD{q3Ece8BnP-Ck_ zHBI(Wh#O-(z4m6mj}umK;`2xuC!(S0eBBdedyQ!hZ)u_E7StS;AWT1POmVM$De+j` zCDuYQPvs!xRMxE>)7ooXiW*t@9kW{&G?zAfKG+<^CA&*+mqW9R(BrW9#J-DS`g#c; z&hxQ;_2RI{JL*<5thLiyoM<+k#&xv3Gb2icGVUV+K9$f|(LZT$)3tS_ov)4O2{zD( z5lM7lc9>nYTj)Ey=r^NQr4Y6^-l#Wu&D^C=*p7JGm&%(oztAdj?W3;m^Zm&l!gz&? z0?Y;~ywk-ILxAKVJi*k`J)>(;&f+WjzA3-Eg>XH&3we_(#8NQdb?yeW@J!)$o>}xb zh0;x&8#M~y{_kS8y)Jj3poC?7mY(y(Dq5=iR2xSm-czIdZV9J;p9=WK7?Ml-vJet} z$3MR_UL#mW!#j=3NZtj=*+w@N^?QPnkWu-p5M4~Xxesq>^35{uJ;pF33Vcb_?RHVi zsF21io{S0?Wv&^uAwiMc&mmuDdEK4v8CyaY3E!pc>FcEhaBj79H);5h6EjeEzlqFx zvXYO1`UM>+hY?gsOsTN~YR!OC8Mwq3Ot&AJyS;$#bY6P$(~>j(1G@5m=lu`I zBQ^r8ODV)j>H1`}d#hDbt1MkgG~Z#ibF%Nw@c70_0x zS4|MKW9i2d)ah=9Jx|24gZ$YiBK%E9{%|3_&G~JK)73+$r91)SPG5k%z2SU6_$*|Xrp&_l>zv}8?_d4gb!lZ>Rp)|Rd zJh_uQ3OU5%Yp5-52X1KxJFfh)JdMMmyDy)-Bl1*Ox_7jtE)z1gc zEZfZi__t@n%fWV_{k(G0d0 zyF<{m!yw#jysZ!xly?*;M}?u>cx(F*x%tcf4yO7hw!7CL9qrgnEE`~;=Kl5hXMJwGfe|1|9i3@+)P3-nymClmH zZ>Gx4OE6n8Oh)*J6*+jHS>y~ool%2TmIu6xw!p-3p*h5D{{vdIV*?=hMZPHFoNszA z>l|(Sgu$Rku-iz3g$^I-v6Hf1)$U?{6Gf8FoCAcvyl`JWXq-o~qeH;p;Xj~c^%)-J zifY9{(Ku#DWHaMbf)i#(+kNMeGPcQ^kC3%|rGqf&&L}^TWqXn~m&rS`D{){!9!D%HQu&cDx^U3bMXJp5pFMEKxY&<@!wGiZLy~Oo?b`@%F;_)x&7Xh#*iNdE-A#MY zsd|1Q(HPc%07OBm56u696}k0o{`A@x`)_tMM6As|rWn+G>rufOpGQOEa&uXdlF3r3=@&jD>~vwRZkrYUEjp8)R|c zN9Nx~19U>R-3l!$!Y!3N{cu0}`!ripP@jE$IUT{Az6}vfZa}X;}z$FIhz03oGjDclZ*>^ZZsyEe@NbFXleIUT@ zETN=CaE}t+(J;52NvaHwWhdQ&oyS*ho-n^^8WoanQJ`?HN6>V_1DW@T*Pp9zj!P!kxQBYs+rj>9x6%3#T-BX z;O6$ef+T8nM?FB$ulbDjjW<~YSQTK+Rh?hJbC=t4f2*ArZ^o6H$9mET0t>o#tE7)l zBvK?+u|u6)?adkfr@r#sevMPGaggt^OZ?PwfHHf(2a>U^4k>_`evYoEBHr<{798d# z(i0(kmHseu^+&Am{Sr%rYru z<93X!BT-#Sn}cF3+4i${p`ZHRfl7ROjooGRlfq=| zmqe<(u*k_s4BGS!-K*}pLIKiatL&6ki>S$r;8qm}|93QBspWq*C?(-~LWyo&iVz=D zdEyjh3QFoHk{~f!#oXwK7L=lLG{CG!>S#DskyCcwpociH-vjz#Uw7=|6>{HpAaC*EiX%3+JpFK!hQlJNHx|4+vQbF;r) z>sK%Q55=>pm_-cb=_oD1p7eoa{MB(-ta%rIIvI!~UU~?wW-I_wzW#4KROw!dP-C|% zK!~ew;ju_)q+E}{;Y0&E(*P&2AUIuOxxApAlO$5tSpIn-_qPBN>3>%IcCeYSRumQ$ zF&*Q6izbNip-TSj4ER;g=Gv>WXx5mb@oGXy3Y|^M8PHw zn(pmcRj;Y|SXd%4i{#JcjJHE1%FW@c`5e;y%p(Q54CP_<@qR4VBFZY`o2%$dpUX3f z^jL0)(XFscgv5dXt6o|@Y`CyJj$2t&udjAPkxDZZdGsTXM{ z**Uq#?KQ{ta=0d?_B0> zQx=Z2k+l3<&9{zlsz2d$*llC-b&fs7#U0}0Vk)l=nV$+#y@8=|hp2x<;y4U8MFM@& zbvYpGx1xSo+Ng`Is|#@|Vt%F7sMt;ymEs@uEhOqf-ji42iH;rPBblhuIjZY3z4-Es zpPZn7boGyJC&PJ5mi^vfU0-}yz1_m$?m_~iL}%VZ%U>&4P76$bX-|e$Mf4^pMfFXF z4658BmFwce}kh=N@ISc=^@tj)<8x(=d{yc=F~QrQ z3O>dJjBr(8c9h~Wb>?84yBp-k(~g1sQ?ZPTz7q|Ug3|t*+)u@)ta6MDL@KXwW;vU! z^zo)TM)UBi*6w~u!>j9y=3@5aoC1E)O4HeW`mOYXoY)p; z_Q?W&R9Sl9X)C^D0hD~rVa;^_#|`ol%aoh4CyJTx#Tg-{VB){BRSk`)$iKc~VCp1e z5G&&#vLLr>KcJdHh;dPrw|z}FH22R6<^R&5*#keEb8B1UMja0Y^KfRkl;Hab5h?OV zxTf@S(A(M9gAVKNwl*Hm6-6s8%Ui{%#$!eLQwY}!7jggH5)x$-a8KFOwB0QJ!pea{ zNGXToyBTS^FX1A06WlYxa;Z$y1$*4$o2_bkTHb}pg%Aefsvt?ax1-W{5JhPrfS-?N z{$1pAb(o&(_+bh6*0qrpV)v*520nshJ03aV*%ABD!#mzgTNlYzg^D#v1nllYiHvt| zDGsG~6exKrnpA~rCQPr59GSic)V6q9+4FB|7}rO zuDp1fH`-Kf|LMnDM^n-Kr<%T_I&KeC-eB2nai^zsXxoZmxl8g98k6_(AgyT$T(aEL zEqoW=IDa<3pqe^s7wNZ&>x)cBMaAR<{R`acf1`jJ*t*e_WETJ3^*Zyud^oEVp`1Y@ zUX8F5uoe@RRKI5wg`Z3sP*I|ctBviz(jFO!u6S3N>WBip6!tGV0LZFS_CP*)F|Dk! z*=M=5Hmaf5V#P|1_eJ6RsbzJmO_-rr_2uCYNBFDza~Si3?hb7izWy2)H(bP+V4KvF z5Sta8h(WP>T2Bf!+}#RG7~RKlR~J%VzF&a)Jk{XQJIAnV$`0UOl%L-Ei$U~nZTK?#vP5Ajv+2o)Csz93QS}X;+15G6B6yc-iW3%@5vDlt;o2eJ0Fa1 zQH&cfD%S3WIov`qX#43Zr1r|hYeS;_f*(`zWuq!%XyhT!d&R86a^K^~4sTyq;j%@| zlF?a=?L!@6|29xmiZ8J@3WkZ8bLNHfw37`mCeiZ+l0yH!q#YBY1$P^^8DFsZ-VK3W z#yDQ~T|5If0Yw!h90V~H~anWrLyv80nvp6XKBJwE+|eiIaedT-Ft=R?XOeysN= z*a{fw5dcz;SgWhYOJ7@zm+*1UZAM2cy!vV@eyZp@KBg$t4$gXd4-<0w%+rlJ?D4x4 zqIRysJzqf>M8gpPPs4Gs=$8@8T3(6*FxODJHa{5=i_Z?5xB+f*A-KR0U@cXZt=^sT zhZNB#GD2YES|7>n%gLMROpDk`*C@>%Z`-(8gtLD6O3a}^>-K8Cp;vhBT>I_iN7zc6 z8n_40RQ}JB&;?k_)z=bIDNAFtVd^FVyxv7Ry)aID7l;7hC`mW#%iO{3qj+o4fidBq*j{+7frr$6^1Nvz;O{ z&S&Yo5rnKGE8QjduLZ6;S@F0-Vx1V}gNT1a06!G;Sq_(D zm?C|!6@dW6!JR`V_)pFs{3RwrPPUrIST)JFr%ZGhbuX9@oGZ(|c zCq5+f*~}&KGvfEhOE7|Skj+Y< zPMOe2XMzXNC_}cM*=^?On_tbWBC3_mf+(a91qci87zD-_+PXVL%2$bW+(-yV5}a(B zRV7(h51qgxQ!M0?a3{%_Cz;GmZ+IGFP_GkDO|0gpADOKXJwDt+PS{r6oSe0Pj*C>^ zqEo$lSwJ`$Lo$N@IFfw%(aK{b!fP(8(rKM#*(cEX_7iV>N$AG<1Of=x>XJY^=^W|Y zX7v(vbji3CIVoMmB~^d9lb63DX)x@?nKLn^5+CpJx_h^E$<|%kLCA+1pHB`;6uYbD zV+CdI%K#5(3|eQ)@-;=`TNlD-$9YV<*F)yd(2(}f`FmbC3L+#-=xUUOd}fFN+M zZ@Qu@#n9yHnNI1~Z5g#J*F7v-eEwrika|J&d@<^fRPTFJjctmMEAiNr44rOB{g5+{ zd@#gkA${70j2qQ0L$x}i>qv;u_w+PQ0Q~P5`Vf1%e!E-vS$&w`znzFRbVacexI_L> zC$lViH?ErJu09t*9F7kr1q;44hcV7tDS7QlQ8d87u&BWM>`hmd3J)ejbYZI*vl zH&{Z>0CZ1__JZ+j^b&aqj1wQBdzy7wp7D9TN*0UTM9X{l2F zh(qKKF_vKLdMt6ffAH{*+hH~2oTPX~_UZEOEb~fr*lpBSBx;Uec-vQrRa)-Li!1%J zZp-CKEMHxL@gpR2yr~MFZ+vPzX?xPxiKB1JrKHb)O^GT)abF>>xd`*H7br452{g3j zen9<{32ZlzW3Z>$x7nj4v9|#JhH+I!x|ZL%#CvV1$z_{z)?2QjMn_dB3719cGGET5 zX!K*@V29XcyPbi-zj5_Fjn>JLmU8H|yc{-`Ux9>8`a&Hk@Cdhrdn*fJ{s}3#d zmx=k%z5v+weF->wge}fCtwyu{EYxvQ*UebzE#oyM!FgGN&Wf&ts22n5*8$w908;d~ z={hamxvWD)+*?KTv7w3N0nw^l_vL+r9VE$noeg@^X+F5ccQL1!hGPb(XE|{J9V{oM zDvE+KYiB+PAb}0Kvk1M=q8XuXTGxqKggW-Sy%=e3h zza0^{+48mXQ+fW&IOh0UNH;s>Fx%Ul4Y#^mRk>DPrAvjHNf(LITc!1#U-h|);4Hn!zA-KD{1h-(p6Cgm);O@}* zH_7{cXU@5pxtY0`f99f}XZNmERjXF*Rkdna!DTKffnZ;>*(BGu9xUGtB#~`VQ;4cO z(6u5{60w}PIJfot+w;V2vbX0NjugQkK>gmit;Xj5k%X7Xv(LUg>-bOeGXL#QLx{so zG~G4TA|JF_xiCNf7no1=->=iC1~}o3C;m%JoS*09GAGdHxCvFC)A*n2Y zRrTRd(H{<}6N=d3&s_I)rpw9u?;Ty}EnlDfJMTcRzAC-GbhjTVh#0=x`~GLR3Kt50 z!2S@kaNlIn=nq(EQSrMWFJKdV7%i}A9;^GrU&6gDfHAE-a1p>ZxJ9ebxcgpp^$zm~ z^hkXV0qxOMiRgc?c3&>~^PCl+OH+7w<{q%(pRWDG9)MW`2FtZArUNGzEh9kg9q-RP zdj`y{zuWSiTg;W_J3x_;?P+v}*#N{W*Xc*31rf~wvTp5h;XURgAch$<{svJL*?*>T zuT`!~-no^EeOD<(5$=aH~tVw6n9KU4>iI ztvxEMYv;z{)9TytXK;_LN&k=azpQ>zg|pLnxP0Pvj~n^Qx2Knuy@UMTf@PegRPb{I zZfJ$8^;%ntM}D&QYCI=N`~kWIIp+{^IB0`;CO=mxzqT5cwBHFPw5Za`Q^z|YJUr%Csu$!l9m?9Q%cSp`DE(Yj@ zn2+^L36r(|O!xc^>hbI)%Shl1K6uuPzlgu6`in{LeH`t0)~Od&{ey`XxiEaz9Ab6(2^Odhlf|%T&5ai2Z%Mt{tYTl=rOvY z_zjw^P;J+P6OZ3>A3uWwvwExOq4<9qe*8Z}lWn$BVTQT}i{mbAs}0OgE-i*|lyF42 zI5Sllr_ZKq>*|^Ve(6g&X+Jyof`=EG=4rkrnl-H}a(Ur;qhxxz+9hZD!=DyE0KHF0 zzgM zdR-y>%?(eSK)Q#8_AT;TB9W!7A}Oen_W0 zY;{|CTs}Vlo$T59joRLusJv*2Lx>r2EEIoHV|hR26zM~3EdLNcYBOb`Up7U0Zv~<_ z4Fgz6mOMkCXgyl?L)n*KGOv12D%lIEV+F!UXQkpi=#W8B%12ty5nqTy#7Ata$m9AI zL0UP%)bZ-ZR{4K5{F=!zmqzfGXD6Pct|m{lYfIwRDc{dH~V&g^hoam z*np{Tv_>`m$7?8|FXI|fJ;iq-K9lkV`iMq zhw8KtZSE`F#agC5<)ovtpnCG!)p^)R@_MSR9=?6|>#Im!2jDOIZu*eD!o&9P`l}gG zHj(8e=gV@35kbK`pm|p>60;>w_wd?v@c|nCh&MWYW2TGj0`)ZiWN!I1XSeAuye$Q# z7Vq0Hl)*ufo@DH;A$1R37H+7uwKQ+wN-Au`NJ_0zP8xmr4ML3XwbmXr_$IRLUA_J9 zOQgQf)Z4kLSN=rVDMOMlNc^kTiyTxd{&8W9k?!KV{8_|fS|M_)@`7EZwC5tUU`dxPWrv>36}>L+PB^3$+N?* zaY(`83DZpJX?Z=@fUmc-*oX8jVz@ZJ5m}mZ2*jr>Y??LO#)}d|vEAAc+ulA=AIa8n z(^JL4z={!VD^G=TwS@nMCSc>yXYcgJ65+P<@28F`qbtwAigCP=HRkIFEurgcl}n`; z5!WHvSd`>bKaZgo8XFsH*S3s_18+d51YBa0t#OAsa)k@S+4=@uOdbR$EDq)|CK$i2 z1b+BW6+p?B?H{@SNc|DjKE#0~p}1$>FY@^fQ*I}m_cutkFKv07YPVyG?tV)I{>J83 z)|Uf3Ul71{9_DhZ5C>`4+h#HFa4T*jrwICl{7$;C`e<&!8;KTuGSOyj0Mk<>YfqT!Si_$)X~nYE0X?#5#3J$QCUL0(AP1>qFHbH zps?~|8ouyU-=O_xZz^YanP?koKys`{tjcYlm!jA?57TBMlpnDzf6ob2lXT>aj5X~w zp|lFcyKUa!{;H9GgCy%}B*+PQ5(aVD|W|Sk6$k49p6!5^EPv4XP{IXo8 z&S)egTWPJwjc?nTC$-wvnl@U(Gzj9|n)uzHz0-YMP5s~u-#)9aBqIGt2~R?}jTAC; z`nd85=heFAk7fTmJGZep&Bn(SO`o4>MWp<|!uhXk%Lb)8TU7LPUAGJ~Mq2d?_`( z)U@OuNsvbP7e#*xIc6xr`c^W@dnfDoE*VepELgn2T;%5rZ+Q*ilvmxdYhh=X?rX@> z1v|7P3~AWYUfRp6Vm5btb;OzY_I4ofdqr?3wZmG2?RVjp)0mJ9;^U{8t35@w4JUgX zJeE4_1QN<%D)-cLWyp;d3az8lVt?L`Gbxea7=TY@CSxF5`6jN5F*eW*Uw=ijKB3{# z3^|da6Q81%1M(BN))nDhi9v9M2g76xv@kDuwP3+**^Fq_Cke8XUtM(fgOxq0BMN6&}(t%t>qiF#pr&sNjn0r?K6R z(&}AFe9<*`%2ao1sWJBsp1*{1bqtw9W3XYq=UpX`nW$Cow?BQaai!qv9XD*d zdogJG`c&xF$9n#KWyT3#v9$W(#J@qYcSZ+*h?6t_x%ntMo5kH(p|)O?9`GBX7!%;# z8ZvlNYss`_`#y|hB=O>8kV=2*V9ymLgtM-7Xq^Fs@ng#6*cQAbIUKFm%3Q2S(((`o!(RS|NvT+fx&L3+oO9GU^937Zm|; zd`vuJ0aWBSymFBcXH>YbEs5e=k$L`NJ=u<)yAg&^bvsHHUD==O*HqVdGdjr7(;gsu z9@$XWTOpdTgj?JrAa$g$e|S)6InssmZxAc=gr?}59w3h8Re~l_@q3bB%tLiWoQJPTyaks)xa8?sSAHwsheFs z-F@f=Xk=>PZzF=t%jv*YDC&ESH?gJXJ6;KY!Q)i1@sJ1d0oTHC=B+>F9oKl1q~*}9 zaiD`#0WF7%(?3|MhJTf`e!cN&uaJqBn$n~n4f^wy$HnsL7SN5N=!=#FEcLwkSDv1} zA9ceUw{!t&WC9&{0Ej$5JRtJ#XypHc2;r3Xu0EiteSmbTSi9-%h=WsYY8F)Lwmx9^ z@S63X1{BFlo7#bM$OC`|Vy33|uKo2XkgzQ{{U1nPd6s4>?aUKs&)pY=+05|zf5-UQ zwejxeH)vf_hWS8dmfym0^|Ct$HqQx)ne`nYa!-2?H4)retO(5K-<9JPLZ_XJtH02K_u!3^EenlN+ zNaoe$1GW|OGMF5_51$pYZS$xaDdT;}mG6h$C(bma+XiewVaEJxRmCppylyC*W(xup zrAqH5y8Kb2aRjwqGO=%kg^d_~c?RIm*g3Gf+n&rGf@e%mACz z^3`_kPz>D5cda0uw(gCYgGyHyY5=a|%dAKLvphZ=Wb_nz4e(iXs_+NkAm0cVv|;@J z;r_4ak|p6E2)UwOrzij*6HI+Qscw&;-BDrpzkClnfum>i|E+KH8zV`+2$~4cn4xD* zEtP6~!tHo=n>qao1-p@o065hCE4ZtXMFo7;Xym_&EA*Z7vcG@CvJ0VNEGZaD{TgOg z$aS~11AD3V<*s*5hA)KMsLe3uj2csE-iP`1s}gA&CKA;nU3?F#uanpB`U}ypnFnM9 z>Aue#d_KH_u#lb=vRV;wWs^@O;>!q9)t3J7Sw52WF565Q5-6pkYc6DG_Q_%SuJHg( zuYxX`nJ!`?x}2_K)SppE*q(!Hq1AHRv66V#=BZj{exosxHqkV(kLShQJ_nqFkV|OB zUGBDr?cwvd{pI#N9`7gik-n?{?HSg-A@AN8(w39iG|_ZJroVRK{7^tA)rNHS8>FIi z!gf1!6Hb`wwj&U-xAWHM?H!)BUAxTvxf1@oS(@*%`lruzpQ?8iK8U2?jwy=v zGB0O@F~#qguBVw5NqG#2hD3J{euDxO;o;DY)ORkkd~oAyHSqb3x<@X9`wbavj-wnS zt+jkk8LH}FH*i-QohWC2KUhM=5ia~C9s8Q$ffx#yJV<$t?-EOeMdRKj>3I~gCf4D| z{~ceNA`U-3Jn^uuZ<}iS6-ss2IGGMFV%I_e`R*s6RO25~bH^u6Z^h)-{-a zhEHEvA9MKB7lYtv>#%TJLw&1VK#xdMvfl7dU87rvL)v$V#h$rWQ)gvU3?kO2O3beV zFVp`Jbq4-bWn$`-FmoOsNR|(kA3jAdIONqYf_glltEk-2?U{HN#IRttr*>A>zL_%0 zgD+!dJ=PAn$PRw_=e&?_-QuHHBVIPbc|7)$V>>z+izA3i7*UNG!MD|>*PPWYRP)_#gDvo;YEWhvd{Fe*zceloflM3JdNuX7< zX03zMe=jkgidt_1K$$a?p z`pEcqNkI00=sJ|@wg$+q+E`gDO!}70T|q{N1a+_4f5*LSgN4@IO@TJE1t!!?WS0kt z#FH}qoQ?G?(BT$+jC1@eSt;A-=*Cy|u*t7jhrIZnxq{0*DcK~UybJ#J%-wl7@1q?= zc5#(Y*BK@G$K2`seES<_mxy2TD?Jf4g5aNz>(2T~o06*7BY^QMxO~Zm6-R0BCnJgF zzlOwa93eo~r>jyzKV)ltTkfr1BVxNhBX$UUlk2{|#UN5l^PHP8W%T3~d0b?Iboxts zRmJb+m<sMl0z<0>8P+e1N8C{-OUn<`;oJQ<0xKF?Y>;;*-)T^z7GuguV$2l& zGA4zrWU;J6E4eYE``S{oSCpuBfh$wAZC&Vs6CL9lWoo3kqq1}*!ZeUL0Zwp2q>*GP zc4(#I{LWJ5k&>a_bNJy7bJ_*Bo6)pp+r=SaFjFx3yLwe?_X@Y%Z#(c{C zT}fc!COl>jkoTO=i7Yn>&{s=pR;#_+qp!StHy;?(mI>HtGIy9CoAC?F+=M%`OG)?8 z7B23=lKz(SaRYnvvuQQ#NI=>cJ|~Rie6^a=`fVz?NKv3jmY= zdu0%|#s*>gQh$|p%tHtG`-O`SE!?@QL2D0uw=&_v%*2GVgoYGRi7bFf11v?!9S;R5 zaABs7@0ZZi;ol%iBExu~lX{Hbppl1FEOYNR^LpbqCpFp=9{h2rhyB8kNAe$p z9{TnD2La{=#-d9v3gN%463kt=j^CX;jEUhtPnvz;!h;K(mok5bZ*?oU3-|C{>rS+p z`v-G9!n*sV-g@9Jgoov{@jervy>Q3zPl@e+$EHTO!n7n3w$bbRXY?t`|KOT?E4ucl zu~O5FN0f)A9)MW%2SQ63(5F6(rdUn633~E}K)Sp{%#j)uhW!M9fbxe(`PG?!YA3y} zfId)@xrs=abN#GDzde#35Gp=CER38sr`WDy z;m1ngl_12d)ejSWX~EPpMWN;>c?+pOoHF#2v}PW*CR6IjK+Smh62Fjy`@>&MJC2eQ z;c1_u^HZZ2EzvrDP<=_Q!B?=M{a{AA&Zc`M=i3Wxh7A2IxC6^4kloDlZHANb#aYxC z-*q`amff9H-gxyUCduN%!qU7F=ov9N(%0C{`m#HtxAv4%$Xo~lO~~s+$k0LD0&@su z*4*>bMIN;mh}rkc-Z!biH#+4NhNLv;v>-4Cb)bLh>_)o9K*YgTYk)Jd*J`o=$~MIi z=RlQtLPDQRzI)A~QjLQ4^fe+4>B)xs;;M|XQ=y1CZT6%vw{NlT!YJ6mk`!ss2`W52 zCyG9o6`&K|IM+>Xk5;aj?4Z98xHf-AH@Kd{0Ew3ypZ%x~|F--?dF~FT zU}M#s!AKoMsiRF>G$zO3KifQ3(??{lHp!dLt=3%CQVq4P|7f>?f$2AX2@>cU)twZ6 zUJlcodrmv_v%$}MO5w?S2)~5ir2sFrg^K1go*$aCPnt&~W322s0~C_N?%G$@%9VfK z<7&-88u=Qe*zyyGNfe)4i&wcnQ(CQ-2v4+`ABr9m&(|kxc_0|?>Maie+pNq(Qy`Lq6W0#`K8+VZxEU2Um92=ZV)N&N8L}~ z`}W8DTLx;DQv0V)?muOI?EhbHF3Gaza2URIPLy=f58rv$v8Lq`5u9uzj)t1DAe!UH zWq0*og65uilv^}Z{%Um@E-#(_8)UHGaYk5Kqar6}L!9hi?emCN>>ED?qp?sbvYEAj z2s3=>lTkasa}<8c;__l^g}REl(^FvlXk1<5p9WqXyw~w}b$f`Msezkkgy*OM4hTd~ zFCecz*OfL>C{l;U_26VAY4&f2S($2bBPvR8mljWS7rTc_Bf4bxQf?LmW37;WG@URaQFe~EiArL~ z&!JzMMium@B0o#DjIyuIyp7B(fQdkRTVC4MZzX=gbxmB$SR=gFu83a#lIbpL8}mBm zs94r*6X)++?DDD6Q|9ZN-OfL*0;**mP64vCjCs{NZ;o>!#JMv?dRk63| z<{&ulOW0BL%W7lS>k=;?-AMKe?y{J{T6%ai{cCABF{rIv;(lVz;u5;MT&FbE`M9Lt%e_L>)o z3z6Cd*@}%+3Cf)7QoyqPW-WOQV)n)fbU_%doo4vs@dw|6}~P{ZU;BDUx?iu>uUw_D%$QP3;l6d(`42fSq)>f2Mb0y)?Z4*PA_Q1Acgu?rTi=5=cT|2tMQ=a83 z=?YyHwt`02jfD6%JegU4GUBge5P_zkHPmc!e@%AUcv3&*+9tY##|f$Hhr;~kpSWQe zmU19@L8|T&LwCzxQXASky=w^s$z3Hi2UK*mvIkg@HqCDRBLsfhpvER^KTZk#3|SGD zpcI8;Rt#j%jKQyFbdYzJr3RJZp$G^FosMdpaXH+docU(!)MImSsEH2H z(P(oFo|9`7M5E`hA^(zIT-g%1DEpU|7WWvTe7KDXsawKb3xscy@gjVbB%Xx;A#? z-7~!9KU)+2R*Sp*PQVj?*qwv63gHNy4(W7Mr#5(1yLXP@rC&@k|CqDNw_nE*jI*dw z)Q+(nO17qhPrR6rg*F`rRpz$SR)doZ;taQySg5C@3uw_$g+2)!Y7#C!-t>5Za48Md ztwsGr4q7DSP8Pr%L&15(XOqgaw?%<1Ao;>fvBJg^9_-;kYMz)98Q7(L>c1nUh|ak{ z`tq}>8Ip@TWM;$WCH0630y&nZL2rRwoODm%FBB;mnn}Z|WHgh<__qUV48<20L`g+U z93EVvZ&yIv;TF3*UufSS&O4y-%BVhNl1Euu1ErQ?jd!%#&;yr*<0Wf|`-y76)s#7JUmbY|?}w(B_eHMB^EB}^O-mJK%v9_u^H)JoJ?a_WZl z3zVu>prhnC>QD?NQRbM0SM`t*8LET_x^q1(B6onf6)mdrg=qxwmRN#|j%9yvHWgGA zb1;F;U#UY1Q=}OJ%g+-Y zczlbL2%ok{V`KG0=yTDmD&y}QDi9}kD4+wEqDi@S6ANQ}3sJcy5hHlvtg3Ag^ZW}h z)=M

KNt?2vUHDXi|<9*2L8JL2)Euvacvr`|Dlgv-PcE!~t?S0v^6g@PGh>g1*cA z-yp9Wj0D1s<{+YjyX8$Ol^#-#Y*bVtGsK+6!C+`ssS!FCoEcy@E?H@A?a!jd-bCd< zbO)eMZ6ra~5?Y&q9);L4h_FH6>T%U4N{xV5EWYpDvmKZL?1D*m9&PoMwjoryX1He% zmpY9SHEWNV%^ofaIH6P+O-~EvJ=Qb$U=^7cT7))8eHR$(iGRQxF6ws_)Gy4LAD!7` zw4qh65V@TaC}NUuO?DFXxSQm1mN+=_uHx9_oH`}D1nvYCCUg*Uaux4NzB-Bx_$gNOMNn)9l#69 zv~BE*45jQW-dHxp{xnl{Qglb1qN`U9B~x5~#aCPaI3_^q(sNP`vms;?27}^uI=UGJ;BrvI9|EF zPM_=j$7gX&VucP{Ui;)$)K=kc6k~C4x^F+&{MzfA06*o&dT1t`!LnF3wB+`t=wsxo z5glQCPCKcty?k?FMD^>>32>9J!pIT1INFfPTnbe!bUS4|e{hDCDk*!S%@&)@0v?`zoLyu|^UN|9UHI^y6NU$|~Zvqd4n-qb9yiK-X4{ZZ__v{*J9w_carF zd@P3>pokR%H{5y4PIc_IH^KvwE~Ki%rMfxZBAZ8hR7UNCpad?Ro}_=y1XbP}5%{$h z_au->cH~RE>zI+ecZm6Qv6A?z$e|8mZwBVGtmh@L?5fschvOBU8{aVpDotajpSMli z$T~)Po|hA}$tK+I0PDuI@Ng{WHHOVA*_&B%QToZv?;BsXe8qZ5c`LU##k?Dlit-Yg zN}+EzJGi_NmSR#qbL)6U?Ml8mxfTcRYnooIV)K^rayVSqfmClHiuE#_jFaY)ErB(h$~k zU$|{0uo_!&@ySx@Zn*l0?)38{Z|O6lcOudxT&u@jy}Mczr`wt1(u<4FP$30x&!(q1 zy|Gwwp9devPUbXvcoOex@^p|q39X=S5A^D7rY`EL_$bVs>-Y4QKsarsineG6uTAqr z@7t9dDbkUGJf3eD;UO{G%VjKgK!7l6PKs*Nya?q&;Zn4L39_fWb%tEx34OV1_>P8r zGd-`F3DM;Im>ayb9w|rY>wt9}(_JA0Tlnnps<2>6uHA*nt~iAxL|BMZjEycd`u0=i zY=Y*|h~@@RLD}UuaB`+P32ZfJ`c=9g8go1;0L^c+EIb#EC`WlZv6sqK4l zVQ1CkGQn|Hs8qo$GOtee_CljCc#yJ^X;*NS1j^E_WZQ!eXz~W*kcIchkv>a1zz!k` zmwU(A?m`cgpNJz7eX53Sn&}wA_{LI(O`HkSP=cjnsDhd2g6l%hOgDegIA4klb>7Uq z!jx{JY=5NN5D#SxiGt!`vzvS?Nnj02@5Ft_Z0kWQKod*ZBb++?xh`0a!o=kg*r_w^ z@`j${3dNTvF^kdWV89+e!>KGq{Mp_tljY7%tbzR(bO}<4E4kR1VQhbhFIeZRv@mBY5KJl>d%*x47uy zYF#C(c{>xu{6d?olhUFPm9tiC9U~$+!l8zv_Qv@>F=l_Xt=FeK$1eOT0jhN3CA`L0 z!HOrh^0IL0mZ1I zK%AA8o6Qz2y#Tq*{K!%8PuY@9(;9(KR7i_@gBHQ_{RGlz0@PG0;kCM}UCVeGTfx`L)%FPrZDq7)+O#`J>?avEYqzvzmX}brn#$N^wmO4kN0$*6h zuG}>p1OYmTgivH9=wQfTV9~NtD3%)+YrK1 zysTVI)v(QNv>?9+?1HqhzTQ|zws~I*W>+QXTBBdgXR?NPjG-uT5Ad>m4#Cd%3trV* z=tMzwD2{~dl-YhXu5U`QjBrH9Kpg2C6vjcjXR$4$z|r!BRepzu`w z*$n0tw=TBKkkA>*=)>d;D~Ss>Tp|kxLlof173+7GVr|zx1Mbu0s*}j zQ+`RA97RYFv+(Q8?&TB8h$(ZRuyp4TWnP6TbRpMNglBd6QKz|MHI-cz;16$NZGks)yaL3(b30{a38u%C0N9Q}Ww{;5z_zJ7h2i0RH zR6DE#!Enj*-q`U$i=H!A<+SgE#RDEG#Mx-~3d(}eKS4ANR>FVKC;lYhkgF(>y)>UA zU3+2i^p|W%uk`&H7~-#Uz@jQJGVya@JUmy>I3avJjn#9S z`7|dYJU~U$g6J{E*uZNY#U`E)qjHP|>J<3qO7)l+&0R!~u~d0qmUXAj2!N(vGqSH+ zrM^_FmS$vLbChQKmP^>Z<|zM&ovHH`32FE%rf>O(?-jeMY(5lo%7vRpBIap4O{+dt zEmH3^=PyYc3JAsAFSU3dksVby}kLnwpD~ODkaJ0;K}O4RLibeKM8f^ob5~q}S*@ z7>%Y9y~@Q!_WOO?c%&FKT`QJ#n$_bf4Z~!L-;+5w96V4O_Vby=N3Hbwt9oh0-yT}(=SEUnhKXFvrsyjF5m3Di0I|Qx)Bz}yMxl_>{zxR~8E0Qi8Y+1hZmii6S z?2QApjkSugCj1dAbl${@3|QL~~Y8A+{DFkc`MeKn?{3O=N(` zOk}rvZsJ++S*JxLKH|DL&WxAJG>xFoAi=2(FYf?jV6qF4KYnBphyI(7W36O{s+i-JD6h5+lQi3))ZhTP=l#{ek|2xUY z-x=`+*}p*)iMj=y(2-*uP!I&lI`DpZ#)NEyQ^?DzdZ4^i8LJWY#vw=Q>MCYYt5SX< z`840x(JP-ct2qNRKUANPa|o~7`__Z}tkAdHbN}6&%_>})07h-}Ds%;Z&Ua~6;69Ja zbcV~+n1^wIJPF_NTCYb1rHq5y`YjI~uiWlo7p=zx2HN_EwI8uZ2nJ~Dm#${k`wi5r zkfPtG0w%tPdXz4iOR#qmyUuOLxZydob+xv98D??1&x2J&CE^GjKT9t;(T%^>V$;cZ z02JPawoM1yO#C1IArwkkdQAFy6rJY5PhX*=6Mfv0yWh+mOSl~sBXiNT`Y#Os-&jra zwdh^Pfv<}8yNBU_oyfCnN+gg4XjhblH3(hLv-u4=UjkgM#N}^Vu!VJD%5QDh1`hen z>SCctY2nur&$Z#S+QK0)^zty#KvS(bUCVNlVyRD0-hV>M=*5uAmA>JGh%Jm$I|(L% z%dYAsc+6pnM4NilU@?#zQBjb0R`(0hEIinY_n3}M5XUJ}KxaYl$8Nz{&O^bDe)o+v z7dNA+eD*`h03{x^!1`8og|lw!OjH%TyV}E?;ZZ&fh_Z>-UaD@IzDB(KOQyBuHVGIk z{3=Ly5wLNjY;g_-bBRlMU@*lEkjvdRx#6nma`h%V_7||lT|k_HwW!d<20eN8rwXdt zTxwErHCH@d`k;~^QiA%=RBP(_leWqAyOAvXD=pfa{et2mq7ZLKX(u$(_p|F-{-1vm z>6fv?r09ob!YXu*$1zZUPNp{_uK4-9)xZ};LG?8Ga6q0}E*nK9Yy}D@TiGgClOFMj zRz}JA5zRlq9>uEcK~~=oJy@{F^74@L+A! z;#y1!ILo3#pv9$F{c+d$nz~;s{ue3tEc(! zA}wIu^{h~D2XB-*?D19>I&D(6gm>%~xm(E`N$qR?MlsKs%R~Zo2N~S}4mxi??j4Uj z6!lc9g`C?LW_xd~(xkuRUI7_jSwa(~9CEZMi2Tudni%*|T5vg1kXwErY@2*zwOP#LBHSDg1BLA#u|fsHSyJk4Om;FJ6axE(#G4 zXfLj1(H5|g_KTG?dio?SRuA*GkgBh9ZJ^y1F>1!Eb)or^$;g56*JH*)U2ff#56qax z@6H%*X1e11>ikBD8+E=QBWj;LS zv!3=LtIzo^)a2I!wAio8(@FGer)eMSkuc(*0a@8)>S`vC6wmpioQ>w}CRwlCo(%bh z%MJ}f4=~0*^*R{JY}k?!4PbY33%Qt7+g8+Tr7UK zfxj%KHNJk$J! z9Xfb6#(!uO(fza=|;%(gSw^{R(h;pg^m7ilALKw46+@G8` zR)o&a5Nr1B`f^)^i#N&oTHBRAyw>lE=Lz+W+sfKajW*yU^)$XoNYKTTieV8MKjY=; z=Ra|h8-UT*aOWQ@%$;#$`$;B{Q<~i*blx#V**bb~JV$gSTuUa`zgoc32;!!IWCr{)qE?AE+nV^%a(!m;M@Pn*@uFo9Y{cA9=@6Rn% zB(G7xGNKj$3-D)`rt_3G3FV|6<9TXmg3B2pTu-UWr9?VZS)yI`yqdfviXyl4XC(5- zIw0nh^+*Ap;a>*4NeyhkmU(okwipSf1ZV{uqw?LK!ZBaQ5Y7_Osrbv9Yv&R@eFV-b zjWh`-&gc$833$P1lOv&V^+}X$Muhjp>m^iNwq(0Fv2hzxMo-Y2vYsUL# zX=+4(E<9st5y$+lWD}KWN-4#;zjy8Cg((7=owza(9#||^KCvlq3hQTtMD>@8(*PO2 zm@*8dz;w|$0Xo&l5zOZ5e#W!vtY*gIeXxb0&8z|4T;ejLT4pl`WsxAQ$%9#iYb}8R z#3VXn@e0EpmBzZ`pk9^MA;OTf-ykICSmqlr_gCUX=T|+{=E&rMs)6#ftP(%OORHXL z^jVf`2P=v3IxTMI9|4wtH@S#@6R0<#zd?W>PH`9eq`+$VLaf~y5D%w%OAQ28w^RL6 z&^8nX+^t!FSb;z8*5xMdr|=i$f8<~FD4mo45@&7ZGqO&3R3vhq*t+&|B6V0(6F5i9 z32%M^j0pq1M(4vfsg{*C^kozAsZzYc2kC@!7sIq- ze!;PbILu4=t0G*AeEZVbFu5>4M3tdFM>ypX-sj1^gQwwmPa_5FIkv!Or74+ME5VZ< zQiCHf{db6;{nbnNlH$KzhbRS>95OVoo!77Ii@Pl2>**`LaB0_yB_U;qW~#n}HW3GVmEQAB2PMnV#x^sNJAr>(>Ep+#a*zG0 zd_jflDoI>mc4Dyi1goUtMIch5Ppcs1`^`Li1m2F+sm1S$p|dU~uY188;Uenn0(yc;EO;B&~n>%k2x5 z$Di@3N6goa14IO0p%O{ic-Y?0+!dY7-IiXzLa`&t->AIQI>{Y2I;h+bBdya+`9t9t zHs6+xB#`BVt|1U-;p)pQTo2!Yt0R2+->ts2btZ6Y)4dZsC;bm0N7+84uLi&*>lYQfsi`?(VZ{F8Z<(@`R3cQzhoG;x2RLGG4r*h6nBvAWqGN;veD3Nh42Z$zB zWZ|64sMLgSfC$>yl`wG}`xxIa1A#ZA@2vY~4hlHaaG%3cgjz9iSNDQrP!IL@1|$MVgwj{g~uxGcNIt^RJrwjF-?4 zTnPI*l3HdmIg4MX+H6cX(F5MYH6{lTG&4ULkqbHwhedrN!@nLUXdp#CK#@k`m#ZW)4r_j2p~Dj!P0l zBZasY*6o1~M3_tMkdWL9X}7L2PqNTSBb!nEw_iAZ$Q+45v)2AbejRpgnrA2&Cq}Hf zQuS#3>Br5-v4R*8baZjbZv^pWQJF{!t4Fo$emG&X>s3)*&QP-=NmLVQ4>4GuUWF6e z2mzY9%dc6OUSav?nZ2oX!E|(LTW_{2FxN(x&Bc+tIIL| zzQPlxHS&ye2RlwPeqUWclj?}jkC`d1t-DlNtSb#zGCtyA1r$Qw5zYEU;>i)o9|tuf z&@7>CA*(6kdFZ+S25FEW`y|S8cb<$%X;X@P4jZ3m#S%MP!mw<|U}75%kdStq@EbMV z?Rn9ZFxr|tvxtS%^f-Ki_uD6hX3D@y(PCCu!uNnRA>qR`uh)I9U(5WQpDKE^iBf;9 zYxQe5GL9D4KEhpFY8}N?QKx1_`bk=7HVss>k{Odp{$OG>lR*c~y#dILiiehjxP_vmRVIaY4q_ER45{Ro^d zBmUULpIRdMohNzafBS;fNal@8jU2o%DB4`E(Mp$UH~Ne31S>EJ+Ow~LTBK#vnvxy8 zL~(S>4>fn!_jQwu8P2!7>JhJx>7Gw(XcWLiN+TkzXg|O$c=T?7%+>GvtXD(2KdScMFt>{o@p&Le2z)kIv$G<_X&)^ZT+s9ps zq(`%f6wdJIjxYIpW^}q=CgsrhJ4JTxe>6oSir?*ws7e=ic4G`Rr`mo;6MG?j--*+&4tA!9pKRNmjT)KzPIs5h7ZI#OGV-9_!W)wvbYx1^XOn=M1Y?b z!rpL?J|Z#%e^@WEKkw6MsU>*&${U{KGr;4g+Q?Zi82zb5K;Z+LDO#Uul3Pc0Ma#{E z)yp;9UH$uwW(jekQPuPqXY6ndtQv%(k5c*zyR$j&yC^YoFH3g&B)-6=!oz~ZYb?B< z=RXro;zp9j0koT>qKW1=>Q`A9rKo~5$Qje;D1bbtR?Tk4VY5?^8LmNEB0Dr<+K=k2 z$|~kooEwP)>vf0=xM$H;d;PQ5bWPD9b^uA1pDIc>oD&CaSCdklEJ*x)kxrmnS4F;} z*wL=(hSpc7cpOFf8jKhuqQ@HK7d&_YOf&MNvS41pK}Rv|Ivgq4TwbCyJE0XER5jgI z`WP_b^cyRIBBHfAo6x;Sul0J9kI8X-U|CJtbD(LGx36itT}4>*AkG3UK`{-hGRTn_ z>ve~iOZu=Bl1=M4NNn76+^7q2%R5=GVD_zeRK&WkNgy0h_P7H2i|Rrdw)UcEQ;LCn zL&;cd(?tU$b|iig+=_kv&j{DX=m?9b^sT21-Y>94&AA` zPiTH;eP)%&WX(t$po`qSglDUjGB;0P;_I4JG0=7Sf4sAG`A*$X3RsS1-M z^{5pPj?63ZH9#pE*z=irviyt%&FXU$eKZjkjuQ^^kHZL_FxCn>g{z1U9}vbFh{mq0 zI$s%V6F>feX}{D@5k0Aw+F0bxJ!w+ilq|3)>{uI(`%1L_48zqYzDAFVV=d&OV*kLy z$J&~#Zl1EzzDTzZE1_FXg@c|uI?uAX<%a-kZ9uQ6xW2Y($o_T zQwHWoCI)LTMGnfriIS)N(I`hD!Y(NF!g6cYx?_xW$#NAC+c5U0e5Q-gRDaw-@WxHr z%oC$vXTu*0^N>lMF*{Qa;j5Dj=ff{n!aiRr3+}j^Kc~>W3S#?c7EhWgjIQ2m?i_hs z3odk^wkL%J+YTvzKXv7)9lGsUi|2l_mMQtl2L80QW|Fo_!Ip`D)KJ?ZnaezAjO*1_ zU}xDg!e3kBvxQTmBhMu`(2{Ak#7|-t` z8vAe1VSGR-%#d-K7n^%eEy5w1?y&;7m>fr>DJRXLzrHIW)=W-KQ5Lo?3v)Q=|B1(1 zlgkYt9_A*zs~r0=Tol*}0WYOjC@#n`VPuX}r+;;rw|tCivDhDh^Eu1AcXZp!|EM-^ z*&wuw=8==^k9r%8#UJ%Vuf!?ocsJ#aDI-OCX}GV)zv!kK1TG0hYh0y1S*XznwgME@y4pVfwntjqo zb3mHnIxfVn@8dd%V(sqA?#C{b+kLpKeBkJ)WS(8UDe3iv0<|QH=Ny%WFGW)Z^35pp z-#bWRHyhiJHfDf|r^pj=J^MTSb0^avl<9r($We(~Ef({(1d?CHmXdLfjhf3JL>Ev; zIBg@4o({oFWj?n3FZ=|WQcaM+HQb8(C@W=fgQ7vc;j2@UZ+yqOcx+`&=cEjn6#9JU z==~%jxHI##v_H#}k6F33mzM;s{TU$!3(OFQ1L2jmn{V`biKdV*$ZChluDl|#ms61< z@Sh^(H$G^_n0(;gTwnSpKm4;(wV7)o0$I$jiBPo8JSGiQnGOElQ8!?ry&@+GO)`F& zlt6@%7e7LekqOw2LfAT~N={K7y(bc~^3x_u_V5;mJP z4I3$UC2+BDMy+5~Z-Qu_GU%tS0e=Qzl`~`?_Z5F`uLEm|%wFqP^I;Kt>II_R0ao(8f7q3>3WOleve zRK6N^xi3`9j0a26AuvD+(dXzyQOq!X$L{((3WYc>fE}r~4V)@ODi$cvK!e7<572w{ zt;?-a_-p=9GB9TmJNy}VE#KT-x?N|k5V5<3)~ehygDrvF6Ijfwk}l;TM@Xj+R+o)2zPefZmxUemZ^T)42SH}7) zW+)%yeYBzPa?>0^k8E4tu@UO{zJGO$E%hy3IO-3y9o*EHhtwC9X^lK7t#qN`01+Js zEd`$Vi!%9P@XiePSd<})7n$GuLG1d8SQL04}AiQL4+)^XGI<;~_POqWi zurhsFGxlArAn{Ai9iI|nHi%5*FlsV>HzPV+H)1mDi`G_YU+HkI=<_{ptQ?_HF{}oA zyE%$0b)%;98oBVgSdaSl-K~b1$dt9Zl;a) zpbxoNej{@xp=!@@kPbDMlf3|iZKSn7lxbX*f?=Z-Yqd0S8Jb%_Ei~vp|L^yn;fX%< z!j%?r`;$V%R-T6Rw7qmq4N*<=W4}d44q&dm{JFS>LoulfL9@Z+3fYnLYKEQ`xnbDQ!9-2+6WttT34fTa6i zkI-m_^BJN)1t9phGTgm6_1h5iezM_5KZI2Y*zT8v9-{Qx-r_>A0aX>MzA1aVky&xm zOI4L%lJ@qZeAp}fpJB!7!#zGH@lFs&oz-`|pXdNrX{vTgKeEOo)w5rT{Qewx{VTq^ zgo9Z0A=nfYy6;b^4n7*1$Yl~{+C`&`2DaU6`B?WY&K<10{Y6wnC`XY*V_UAWSO5K% z8j?7)Ib$Le6D@IDU#QmFsMj+5MF3G={aQQAt33!}?JjoEU!j7(C@T99d%}MAW(FK= zfLwXr}t5#z2314L8HS_o$@TaRAo@1Xx4x_>Y1KCFQF3BsfXDqKCPz5Z9 z_(a>Nx{e99nmJAo{dANgEW+(KSfNrFGypVo8Y;F~k15ncL47a(Q|Cr`_`n%PWFO_{ zU;=6{#nBpZ5~cYdalp4<2PhMs zY@K;Z7s{Oc*!y|=Aw^-H9-T1p^%}xl@4AoR)&-Z%m(%$T_l@tfe&;1N& z(w#{vSk7r@_ft9@E!;=?1c$#;AQm|WB{E>Q4O;ScNm?-t^t59a**ndD_EYJ!NhxfZ zir+jg@MHP2+iFq2?4IKDJ3L>p8Q+ZnPSQFTBAu=PiP1X5V$K#>=3LDF0(Y4v+YV*y zrnTsyVr4z*qOM?I#bCy>Gw#{@Noaq1a$UdfH2269Iy(H-915SKAN5$m-;+F7oD6zz zJpH8Ogm`nkJRnl`-vfXwUP-3g&q)1WIi!DOAwSTL8hCmin_9CRa2K@pR2{R0C78~RjcJ87Eds&b9bxv`UO2?|ry+=5O^v~67cx--B30RTQ^#DLZd zXs?m0j`-GBAY>R?8{XiJSXfH8Dj#?!O)CMX(i8hDfCUZXcsEV2=~%`j&EHxAU8W86 z!1^5sQ!&ag){K3{hSepz&dXZC9rpWB4Rhz1|7S2a%T=VEvEnN-WCqy+Yh`b5;?KT3 z<1hM!*?R-i^HPNdL8z7yY)EYOJZ6W#UU<9U%!q7*P*HxEbKiy%lsS@kZMYCXrRdux z0@!Ez{fYy1iI!KO!YvVf*BXvSy26;1*!j;k*+jn??b5eKSqR^iiV|Jcn@o#I+`k=V zU$SRGNiK<958#~$rnZUUnRD0%N|*Iv?-9{a|B5O0^c{&1eev>qHm7%f97KVV5=+Jx zzxA=bQnh2&U0LwtKJ*!#Qh9tVK*iNQ9IyN6Ey`?`HGK}CZUZ>wmk^0Awvfv03ru(} z+*SKf z_pec|1?pDKB)iAQS}TBVigyjBEP001VAJy{*&)^Vc7twF0{9u5qkGAO0zYSPp6?U8 zO&KCfVN}^Mj4&@(Pd`h>7uF7{dFdnnQ-rmNBTIQGv3jTg@F#fsoCrDRYM`uedC6wcx2b0Pu2TzPd4OGg^zGm3ZUb} zWNxI+jb+8iFeR&aX}k9>Oq0Dt=!X`2NFp<`jvG3-z%K=F^E1V~Lv}A?7*>JFH0m9F zX4zeET4=#!iA+i8+P!Dlru3a$_#;MtVI|D;eiW!1_>dGfi%oPQO;omzmgmsgc zJNe=Fi#Y~+&h<@390lg;bZ({By%js831{lE%1wT0$8EDh=Ip^Hu6}89PHxpA`4a~% zr-;cKhG6c{I>>MU4LeB zD+ocL27f!GZ)N|=tcL&PAf8YoBkHmA5`+;@&{(nm^NES#Y$0S!$#497)*2=hgG|56 z%D8l1ncuoyv9tVSaR5dmEg+VoCCaGUswD>;?Jb% z9%e3X5n_IE{33WSQ#HbCRpG&5f86GklBX}c_1y!qut-fSeF(>y;Gy zVswyz8B|Y7y7ELZVH@DR7X^sb<514jabJ3Q4Ep?pR>kilFuNwxNQ-Ji_PMLo$6RR4 zZ;_Z~`T9d!T>#bI+v4{v@Z^n+P?oI=c?}c`q+#U7SW~sTF|S|5{TdQ|B#)j!JL$;7 z`s+6?4RYRYuVB-D43JhLXoP#RzlGjxxUrC(ZY`-O-0{<=zz9z*hXD~ zhs|GVrr#R`DuFyvT&?@!s_N{P#Y_~j7}tCY?)n@hG&&B%eiu*a><$+~qs!vVP-kgZ zJq&Lu%sK~y?E)>LkY7kBM~*Ir&24!yLy$fVqr>m*Qn~j9M&%8;-t(RCRZ?q65}0VT zE}s_}tH=RWZ{~9{k6thUDc>O@QhOmytWSTpys2uOu+eEXzJ{u@I~BVr?w0dc5)5_2m`gFtHgl21awlIz=wM zmsMT}FXs$XQ>)rDr9NO(d-lqwLl03&=<6b?K$|DskFlT6!-H?Fbv5UWdM+wowv>Na z`7iOX!c%dty^~L!)|XNvEf{czj!05o*7=|DO3(KU3CCq2Eeh@=Sq)0PVivAQ;=@HJ z%mU*0GPfaRhIThzA2ELo64LgPju5{--C|4^sA)iYX^J4tDovkdM*Ms)JqORRr}m&7 zJC85$>#XvTl_7Il#g@aPv%=`5+4>a1x;|=H+eyv6PQB7u-s3*dg(zpcSSPcq)#2;# zZxO4jYr}bsm3C^BHQc9P^qiroHikh^6e1uAs1gwSW-{? z4@x6<)h9Vh3GXa|dUp33t|XDZnizbItMDY5KdBiwU$q&)&SoIxYKjm-#Pp)2j|)ef zb5^i#HJj?~|2+GUD)cZH?&^lWua!jd16gX@umg|bvX3wyOpp2qGnJ^_bi~$ld3)2E znZ(i(&GA7e5&z03tE-TUCbJfM3iUQf|D1T|X76ZnmaY0=FU(6Nk_O}ArcUSWBlj(G zaw6`7a;2hV{(au(@x8m>@!Fjy^NZ_FvmWBmK+QK2TKw<7M|^e z6)J2yx%D4(FQ((Z&)Us45{&=!MFInz*{r4J0lRE<#m?(Kp^L@cT5Q&laFla^29gSX zbr~$-Ge`-zoT)d9!HElEb|;im&mNVdDZEF1ri>orDe51>PX-@wivcGSCx>;PcRdN! zow#5ecIYmw-Q2%5O79*#!mwFo_~NxVtI$nt^9I`{HJho~^3Vt`&85<3a@^QpKrh^Q zP|QEL#ac+31~f`>C0@CP2RXT`JF&?>^3L(avExiWdlMR2k#z%SPpMIb?K!|rb855PxrU*U1n za9#^V;lKYmSscv&_V09LzASk}p#KXKg-+Csat_vqOttel`nFlRxH0*eGzZc=^x>;4>(9^9GZyy_5R6!*gz; z-qgV(A%R81b@*Ug2Dj8OeOr0ei^O$#!mf>Y0?jVj3gU){_l5XJq6_x5B$7kv3?N5R zu0yS86r>dO_K#WTz(QS2hJ{)@@JB%cFCJI>5SO0`5-fw9}>v1!Mlk2wST2CeL&1;u*ceK)W%_rNo4;qzm+ITk* z5}~EXXc~&VXhtkWN$wb~CgnZw@peXt@uf?6?F}drpXmjtVT>f~U?^_?(08VNlY)?N zD3sSMYP~Te^w=SOD$YT1@+7oDa&^>NH-t`Q-sZE7@FxWBfv_?^?~`{fe#u!Zq6^I| zM{lSNNMl-|pD%gMmWwlAr8p|E{e6Y3>?iyLq0=CDa@01#)(vyNzpHvf)h$wzHmxc!cHJzb#Ya zKJOUnFppQ%qH)k6^x01=XHySRi1yRJz1E}rOuZc?%!r92aF3=U}evZ?C;idS+UPBoMJ;-142pD7Enoa3P8y6`U~ zL%XgA6`$J2qR(&lO1SSVa?<3+oVj=Ad2{m3RHc68$fqyAy%LZdXN*ij0dHl?sj##U z8@Z40g=nt1hqB<9gsB^a@M+g#AVokRE7?^{s0&Ckc8wcb36Ztj6MVq9PZ7382^)sM zN)TEd?_PxFp#rn}Mee7f@^Jtc>3Uwsu|cVcA`L+W)lfJ2C?N|fGOqQS9nE?P1cnaF zcLZrI$;$!|o@!J%UjQK`o*s>?SfcJ)!Dy_iC5w>&O)E}$+9_fcA|y6y z^<8~iIw6yg%wxHiazogSHgnkVt!?`$IqeQZdSG3j+C^dI=g>!7vu0#&SDrL!&Veti zENVQ5`3?{PayOP_^YFpv$lRFMl}4()dVZA6bUaM#e%kE?EHE_(Db}txYOK8o(%e|m z=gXjMnyZS{V3w;P5TG7TZBuaf7D2ti8n&AjGI?q4@ubC4@NO?A>u@X}dHSRY>37iuC%a`3r^ixZE4>Mp-u z65hYXdcHl%E8=)_kATCwoRI+47Ky_90&X4Vk!PO;{Bb(ZsewHW6@+o>+b0?B#gB4%Blfxh33l-UbD=H+y z*DI;B8&3|!rU_M4AZO@+%Ms+9R*|e^B~EA5P+1yF9#r9@js5y=f7&zssBk|YWyh~J z8In9uu!7fZkxA>H7IRw_t_OrF|v})7p51>f9B6nmx7bSuD4|5c(`VY z*37P4!E1D;xL;HWK7%9+XrktD?C@qg(}0D9%{he_IlUfwSH}+MY@-x_{62tyNVbaH=%zMMeVFWf=-4;#;rzFZlTf zkDPkijc1*@5cwdrOhTj%L@u7mq<$Y-+-1t9LW+jI3!@fq-%eYpnSo+?BcE*9=4|F0 z8tj&)s_qojIY@pSN66&$B7jH*H@-og_puUFT)%=ejer_xL0@+fQhDZoPrjX|6bKQQ zm-)M=qU0w++2MUnTqF;$eatsUxWy&?zqOMlejhW@7)4Sl^K0P$xVWNHUugYxaXocH z#4o@DGG8d+EDdFBOA_*L{t*91O|K&N4z0Agfer6&kPiP_SpNK%w3QT0fcp@_M=R}# z7ePwroc84(0$97$;<(3a^qvUYlbA@{wpLhgf^zq%;MEf9$GSDJ4~be~?EbcC=VKV1(z3 z@Iw_S5su-zk+JXd^uj{nqDGWv@mGay=Zjmh_`Oa$0c;pXGRZsZ)Mv7KETZ}PRkz=b zek=Fy^lSV9;K=42zUABcF}f-1_sNP%(CMq`tChq1@K;5Vd|X8UvLfp;u$!3Ri%4)< zxiIjg_JjWtxNV6)F4XCSkVmBlbKmYy1v0L7LB(xc76G6r8hSl;A@a$E6L_OR)a@|oIMD1BjQ()z8 z3NtKGDd`}1oJ-MV?CFWVsN@vQ$0f09*rfuWJ=MZ1-+g_DQlGKfTjS^?y`x(9t@hvJ zKI&aqb^%%g@M~p*P1cNe!6b1KQL||}U5RX^jNE?!9r63+XIP_xR2Ey(1u4unl#l z61@7h%5$a}o5P46_j7-*H+quM4q$;jnsI&aTVJ(N`p=~fjvGC^N6|8Zz)*sxF!YjU~2PP)?{`1Ar{U;ESi1hKY4BoeHjF+Id|2tN8L zJXELpznGY2VMHHEdz@3JnBy!ZSRE}mNzulgNpRU5pY~TIYnk;e`J&~D`>HbM#7df$ z&xqjj?ks;&Kd%P%@Lx#r;aS%hK7aWCdg^gr?nxpcjQ5oZP#qJ^$2P&HJbg*W0Xn@B}x z^2ZE*nZ-_01Q&k~j4yqVD6VPXD zSb#!rN)=135LHX5=UX{d;;bfGTY13|C0p+})D(zGDdxZ$EJnHA_73sUq&jNNqR0*} z(b6MzUGa&H?Z3tAg(+w@*=X~#vcJyTeO*&Aa(J28Y~;A=?;FnR!k3Z^;D0ts-~3vD z>nqUHm9;H(Yfr5F1pQ5-UF;amo!g1JNlq%a7 z9;m{CY9pE~jauG?Et zOz%?-8YzvoW-fp3b*_1w(t%a1V1uyBcEx?UK9Sw`HkfrAQk8`qN4Uba6Z$@Yb;l|B zneLnOSUammB%NQ}|A->&@$AQc$@5bbN;K2OSKRB?hmRr>t`O5VB9hPKdprs*x()R*YdF}~|+X>iat@cy*&XX?V@R$4lf^b!>;Z1|NncfYEJ_4l4=VorRHnX375OPd z`#&XKExyAkUiVb~(*j91wL{!`#gg;}OaAvkFLzmc-0kx0=(21&^c}INv>jAW(5V^b z)xpGX9kZ)|DlWh4A3v0FAw1SFU$~j%O}LxsH$@#!hD6iHmnFx?Xb?1uT( z+{S+8O|fqcyxy|(jC^2<0%I@U6=a}H+3-fr{=kO0$6qDJl?O9_3=-G7Cx z`Np*+C%U;K)+cCDu3tJOCD{kwvmmh=0P~c*|GMK#Zr3|1EU@sPJ;y&GIHqhYO3v2j z>rS0+FPVeeMnCR-mq=af`v^YKtug!0XDpHDA^G&5uVzN-|A}prIYvY9JDmOTr{V@j zSvkbiiwQ!kJb*}f=nwA_B%eC}>0DY@-YF2D54KGWB#8d!sR7;+Vuqq4MIn?}fT%Q8 zXe?1ULSyrrQT;Y<<|#Bp-FnP+v1Am;cLn|h$L;Uw@7CXo0p?!8C7Kq5CH->tbG2Sl z$LBY}4ppo}2C?J;!e^=qPsh;0v>Y58cPX4fMN+0Tr4q`@yJ0^IXd5a_i%Vr*N!`y& zu@p5nh!yt6v*Mxehh`gZz))W)9VD6BNDwQ*@ZFaDgFLjMG!K_2G}R9)TOTE#WqLIj zZ?df>&+Or_^nEDLkv&q`fX;^z;2EFELTk*MeH#2P${e?G1qlkTCq#Kn7T#-w zV*CNjGC(hX7;3b&%|kc|HpBt()Qg1~C;b<^#XhfLNAB7O$wQ3bN{L{PDyT~37QUcz z8q?lTf4JNHlYDb9k&}zUcxM9o8#EL1_yyBe3)mE>Q z9JibG3)BkKgM&>_Mud0tt>L3L!G1dT={XZGFo*>?=!dxkIE)yBK2E-tJHh}F*KdBO zT$3p@eSRP$Ozdqiy|R8a^#;IHYiqxP^*)U6AyEx#el}>j5WT=R{Zn9q%P=0F2PI|s z(g?R)PKtYkLZ9s3IkSy@knpYR#!ul|T#@yoxkvdQ6Vw*VU_B=T?Kv%G{je;mmqkCZB;u&>V*xzylcD)~)EYQ*b(-i{G6NM|tvELMRJ&zLbw3?ND9fdxV^uUK z2I1h4_Gb%kWr{%;aN^Y#yc7hScL+~X zT;SS{jJ2L8cd~hAY3G(@L!R=>j%pCQKh>p&zH?zLyMm<4e%ap76Yt-=gXvQY0@>#1O&M>XLy{hfl;}!3 zS{J4-->#@giN)*7b46!rPP=S$-f^NL=H6Kd+5#nD$;_d%7MAnlH_4;=xeQ z+3tZl(2;Zlz}o!nV)&wHw8~qbkm^AfT4HY=!I%vTJY;Vi6|1O#g0E}EETyW>dTE)5 zDvmh8v@Tft1)HmqTh;Kt)yx-b%_>Nt8_bf}eyGAJQzAfPX5WD4TX`-;@Ci^s8tm{}3JtS@6Ua)4F0G?%W1*d; zO`GPH$f|^i;M`ei2^u--CJy+NwN+NuuwazarRKgI{%PNUh9Q`IBDyf7;qWp(7EPuw z)?0v)rG}Z^nYo-Bp&)?FzbkczFazMo!NQe90GnwPFQOrs3QzR!8TN2ORe7KD4``KHxrHdPQhPZJVr9uJkOm>$EcU4jqhxyNQ2JL~XImvk0eqqc)*s@L z9fYF!_N&O=2B+d{h{V3tl5abYs!mCuj=1mnf^bo>z_BWg4sAvS6FxJDLqeZTYEGxT*;Pxo?W=KXw0YA2QddlOlTMl?d_w5~8Ecnr6L6`CrGz1?6PaFzRpSj{seS z%gO(?aa>4xj%^Klp@corbNCv76KMO!J$}1RXi5neuM=|4*n^g7k6W8p-A7>oQP+|b z30R5~lV@nE6o_YzfHFC{@|f<2v)7P(zPBl!MPW*gf@!A07MlfVojq0y)&`#{{{VKg zt^}^I;vZ9+@`uMet{$tqUhGeNw{g)aXNa%QE09290_5Ur>;16pTZtEOiLPbrMBLPb z1&!D64RVQtruVvt4!7KA>@x}95Dc7l**IyriRQ%pOn5vu8+5N(ZHAvDY<_biM|nLx z=;AR;8u0~+_aN!APPlw(BAMvohkQ;|B*H@_`Ja|YA1E2G2igZX=le;X*;&yfWu#J?KdL7+_dU&$9(kAaa|zv=xD z*r1C}b(6+3F2p`GZy?u7o$`SHrv}VsX?P}Bz|;tGgr?$u{6VBhUpzc0{MUU@MJjq& z3BipD>K~fBL^Psmd#+IH8xYqQJO^cC6hbvL77`k)m$?s304Tb6wOXXhUzeS*JMjuI z>>5rn+lm@sm$+4b_OP@UnKq@Q+jp$qd#bu&OU&5Mg$}$%;h!w{tVK)p4sfPGq5T1$ zuH^NbZRC7Va4B*H&0G?2$a*CcMxU#J%yUx$XENfG!d`qwX2;*okMW@qDcHB_zBJCo z**3y$D^>w(M4Ey?3WQi1S_-0(M=)<(3slz_89FYmec?-F%jr40&*1I<=C8*v0iWlT zdo@S>trn;+W73)GAOW1`5Pa{JTK+~~u;Q~%a+ew0reFu$cJL6ujDzHh(m5XEaZ zwbgTM(`~NHRXFU{;+o2gbcL7GERk%z|9a&iN(0MJwb4h|^*QjIwAx5&s%I!wO*k$ZY1p#ZoMkrP#xLsjX_Ad0I?(3-G$NOIh^utP~z*y<~grR^QHV z`HzDidsOB)xZb63bWJ9T>Q-FK347S&^h8}dVK`qpo!0hr6X84=PAHc71WSWreJE&u zkhAnvYaXRR6;r{D};jG1NJ{NCoR# zyc5R|BfE-oJa7Tp{7h{VrNni*1gu9jFbVh#DblBJc;so}hCF6z2vViQaP;4o6;3OinII?P32zHjyL*&bhDt8T1)cX9vl>y%R{mc2+o}sZ zRav?ww-zHTwk?d0-Q}oh#t<-udAo4a*oVvPO;Yc~G?un~7TFX~^f{s3lP zfBN?S1#*nZK6>P{rVoHia&IO~EmY+NpN~ErR{m4dd@qbaj<-Q}km8xvnhk-@N@4;_ zIH-cUA910DT9WHYj|k6i`+;C)e|lDPV0Vx-IY8&lSHFbONo5Wr zq=<}QZ7EP11gYY~Gs9eq1+PMD16%$f(n^PyKeZG~V_uxD7wSs~9h!IzZ6=Ns-SSZrth881U6VNC6c~bDKS+;-1{q_C=h5aa z`%s9{0AW?p;sy@8y#%i5WL=e7N<~swmHa>qZUxg@s#?aTNAN_-)1{yU-0PyjR}<}- zDTk1h)iqcsDk!wU6@^o-^h%#@I;Bu;DOsa3P~S%)h*Mw=?kNY0;R=h5WT{G|K6rKv z4BB2M&Ak_|5m{=4DxZqSDi80S0BFmtk>ynJrDb`6CZg_kl2# zCS!V+ooC40uv{$Tp65OvjFtCSkzUNT9jj&Sb(8mvyHH2*w?gR@p3_cc@XaCW5aakm z?|<#5@1M!2rT#*cAYCfDdbxU!N$&%{{sE}`0T|_cE$^^>adXO6oK4CFW~Ru`W0PnV z!>=?x3}kL>|HQx^!(;Ls^Kq_7fBV3(S0W$$dhsFXi^O(xIKoZi51<+hcoebO7InJuoBW3!vDr&bdmuHMpm6BJM}$8}w@_WVfa37vumP#_u(DNp9g1 zN&gn_9%_C>5XI}r%vo&+!d$?X!sHjb!%FfL976?F#uH$^!%WR_iWrL6^JG~GFJzwi zt=iV82Pqn&JiJ>ewLYeIu4;a^#NWT(o=UeyZp0|b!-(NsJnU|u8cq6iu!kG>WW;4I zV)?avTP@$T@W5qf`!Qp7h=}4oGlknmIJ0mFxmt(T0{E%# z7E8XhhZ*BTRv1Cs^YI_s|@di?F|1zrxiYs(1-M2J#TFJms7>6cFUVRNM0NhcoG8E2*X|dJSzTk z9_G%6;Apj5alhXanvD<;x6>qjqkE<%5&EGLr}<{;-u8axpT`9wmNh+&fR9hvPfh5i=;yWq9C!@FA9dcXNu> zKY-EyZA%fHeuG8Oq>~Yo9#W2Sfe#ljzrSxn=v2?J&3lT9kUl&;dt!Ti{^wnJ?pS?j4emEKpe7f+@5 zjJ18aU32&-g`d}Xh_GU`Q4`@5RZKYZT4Yxvce7*h!}3HAypZ>0;gU{qq&wgEneJLuM?bO z?=ld!&2J;?BG4o=i-;*w*`pW>oDqD(yF z+Y$p;cyN0&sFRlzovK5T*YE=5ZAR^McC?i~kn#^WIT}&cbz12pV^VMv?{*A-#?`{4 zZ2CH@dEiqInX5OV0H{+|yDe!%!kW(_E0r|RQKtwR&-7zaw(RIJM6>0gZ&|9y3s`-M zRlMzm9;(+EL!!ql2X%7zX)ue`2VNI6TiqxmDwjAI`SAF1f5ALxLn~?h)IA4%S!`@2 zg2?w+YG8nuD5l|9ui-fgnw%Z9#lH(-RDmU8l&qM$?%M5m6cBUlL^DN$3ojfC+Yxfh zlA;r~u=y*tRhD0}PMlM(4vmZ?%Fc&(O{)v3ntpa52TVBWO&UaJ5Sog{de)5NNN?D4 ztUaD?qo37ci^lm!Ka_Cqy}w~z@^ODBJ}iJj@1&eM%0yqOC7Es*rQg_z#>a|@t^r{S zJ9kc~JiG{~8X>R1|0O+A$GdHmFN~jG56tTu5hyN)iDZbY4+K)rcqXe(LwAQz8ww6h zAk7;bcB=b_T$J<3{3_0XhiLSx8pojLylvy>hdBqE=Q@k-g`rmA!=NEIVQFJHGY6i% z&_5^+k%vpukFaMC_&6o=y4_S~d1_y5YsMc2y)JLF%<#E%=C;~oBrYx-37W+DkG$p% zFG-`b)!%*B)W>wJs2=|1)@sci`@cFQ|#A(q%By z5t`xa;q0xk3i8_rr1^P&sDKr5@Axz!ruvkMY^ppV!Gy^7Q`=@u)NyqqTk7r6F=92S&s*~EK`xylNa_$d6irDdg=skKr9_p1Wbnj{d^y*y)7qbbYR2p>4RM zy&3+z?W|LITbp2)PSa&g`KE-jr3~5znVKV-q{jTH_{=y4`DhSns3;Y zEzT6>Z|?IGAongK` zW34)HCl@}EVq~@<7##sqP_5^B)_pMhTzb2t($i*|Ebq}uh!N>C0^VLCt}M9?lbNx~ zUnK7w{~@O~N^uah$V z=KpCOtI>`J;YHs!Lx{G?S*`*Qsnkv?3A}Q(Nbi&h;uXlKvj9?*P``<@sW=YyCUM@y zt(zwhhw2v#xz7F=?VS_}=L&zF7rtAEsU*FLCMRDL%7w4)XY11Vo}+3L`dRT!5g#o+ z@y{^Kv#;Oy|1|h!Y=T`tBl<0Cds#W*J4;myl~9CdoQufQ1qUaG1l#LqIdd>l7Y=W_ zF!ft9z{SP`Ud;#dcYlS+}2oCixWwGDqzwJck6 z@a^bnBr+THq?ln&Riu}>i zfKC73j?0YKjCWbAUp zYnCqY`pQtmH88X%P^r0LFj33u7!Mjzt~H83dEzYNyKqon70)UFq9y>(}gugE)9 zt$dwn7-cD=zRHHss(@o&{;Ztj3mGAH9}eV-GML-`IJ?&l#T`hUAi@omk~8Mzn_{** zLg(___-3@EOcuWAhRsKsJOVPudc*|m;JX{Tl#P;|c%(y+MzzrJm98M?R1t)6GaS2v zYaKRz9vPpYawryfzb~gyLSnylpPz)d!)%>gTQiLeh{umC~GcL-Sw@4ODzZ-T|@G}q-2!Pcn!&m#jOXnaIc`E!h^q>Q_*`Hzow%`|g zH#hf_zYs=W6HS(*Ec}h6_esey&#Vsuxf*6X^St#!zn-{op71%7X7vx*u&YT=`k)Zg zz*;`Nn6KN2b@XS;w#tH9zcLAZ{`Ok=x4`Y=T30Iim@j=D+rr#XhYA;}o>64Atu1M1 zyj&GDff2Rj@uWhHN1JItTtZ;>i`!Vt8zP>7cbO1q9!k_D&!})O5NY?rt=okoTW4vk zI_E+<1L^0`jqSv?ezG$DJsX@*nedJ0?Wp$wjtfmml!z-EbG@gk+R7D2eV#io(0a@& zRZAnUHzf)=&V|ZeMrc>^O(YGDt*Sv^ICYcnCp+Qax5u${g}$0|41hFXFH)+CZOC$t zY}p83`a6r@K(p|xdd;Tuq|@MntdQecYWVE<_|FF-P{^0G|PP{l1>an}kFhQ8Ep4kEFXG;hW1QA) zw?*!)aGTIU4Tc~PB($70mCgDqwm9;`W2S_G46A2zK%J4WdWsPi59W*dpY1A?>JX>wb_7NOCzRJEfz?NkI~xo75MR~bQ(RGGo6o>060my zK>(u3iKyuX6K=#_lNUq-?Db#V2Mq4!zv-&5icd~azA50|F1Xu+mTYKasuEY0J~!+D}!r#90Q? zl*kjSoJD+b>6!R{w*Cq(+qj=bx)#tg9Xx*ZP=7|5F}2QLxZTc}Jt>mog(<(!KE=xpsqs7tnz}wZq@|7tH3;Iq%Gj zb*BCEa(d}ponY%)t_+BT^}SYA+JpMN)~@N;O(WuckqH!8eoU}Iq(*EXSw=xm=jdm} z<8A(iL2M6L?px5YT=%uu9ZzKz>#Qb=9{d&L*HNwn9DYmZ<&NXeM1`P!I-KDGF};g$Lh^T&Z{J-( zaLj=m;Z3#VTQV#gdEnm@7QPYdQ=I8#1W71eFHxj(84ugZBRcRWN4@C1>{o@`|JiiAYVS# zd~OgUp}9&C_HY<6RoE2J7NIeNK|}miw}c|^zT=1ziI)*>elymQ7R!7&y2Iq}VEEBuq)Rb#1+pQzuA7Gv5w<^mgj;Ek^ zYlMTw6i)PJ>`!a`MH0VIgpF$O$JWw#cVtA!yx6JqE)b6#kn2(HR!VZphO#b5nM3-7hd6FnP+C#DyTLGzAsN{C7J;skCr%btnn$q7jo#hH`abJf*j~DjguPjBFl^(kypGw9P|kx@j2n3`4nc! zM|Jij0%Z;rl0k((N8ETo!8e zS%|rJ%2yu`S%yhzvzMB=XOBemWRQnmcduIg@aZgX(IqTXWrw`WLpVp)jrPqA z0j&FY0_o$zH*;YOE?RJ@!f%sG^E3CqOe(nmfvo(TR95{lsboE5dsEV0HzW_A%^q?F ze>DWwI)`K(46Y7Y1N&`?nvOhj&ty4%EScA2{sl9M*4ZT}lLgSQD-XilCFb`2)B7HD z5!k?6eoxayoyM_FK>W0r2I`|=O#`Gg4Wo&IZ?+$8Lhv-K@M`KK-pDGn52Qs z6>NOm*$*}1J|69^GcaYQ1+gzBfA>#Z@=EChKdpw6`PSWgICojA0!ps**-9|`)>4eD zDD#Y}(S+!g5hHUDH_Q4yJX}zx4ZjB;J1*{^orLQSLlr>ElQD42ZLhCSX^Lduy5TakrM5&560)f6F6X{hexR zaRrBWh}@`(Od$2q<-l6$i2%)S4mC)c1=AAn7GeY69woB#ZkJMt^i8E_B!t!)dJVQp zs1Ahs_!Z*8X@FI}!}of`(6+p*@PTSrM;Qy*k16sda1<+J^yJO&xiEXNVPQ>4AAj5C z)4iL_kI;g#L5vmqqRrC3?}W}4*`1gW8Eo6VyG;LjAxa{5J-hjisnZR4E?WZJ6p}V# z#L9OU4sCW?fy=Bkl^-7s3(SL<+WAJzDDf-8UoixkRN0w%k9dd;aZqo^mh;DAnmgM! znpkylA~2rlFMaHGZX8t1T77sMU*6N+k`k*+oNhVNbu}TZ;q;l?b3Yru&>fp1nI?yD zY%VR5Kz)yR!-|S);g3IHZ0+YVeI69K?NCcmUXpA&u*B@VoYN{mxCp}&kw8u8eZs2| zp={W6TQN#FQXHJ*rc}Cv{aLZ%Oz2TJ>jn06acpiB7yeAX)({b>v!{_o6h2xgJ%x5? z_HOp|eFk@PW8Q?UN_&xyndfEV%&1IWZOXE4eIHCq)}+u!tn3L)+FvfSE^PB8%UtL4 zQRM6BvN1uyASNFUVx!)&o(UYjePTct)rWoXnN+nb8(bFCrRXGRbs#{MpdwFR&WNPn zyK?J=rUSS39iQ35dzHZ_y34{XE+mAx^Qc;EHl9ho)v~cjRNDgYQ{Qr8XI*oaOhpVA z$HbV=w~b0z&V46jw&K&NtQ8Y=G~Wdx46#wb!y%98r6`tKt(T4v*dt&L=bi!0()j&yuKn&lDt25o|w58fzCNn}bW z4zQaNIoD5B70b*>MibRZ$F6;_fHk0yqtj`2=$aid*Ct@hNKCHQoFg>(#+QJDI;u-J zIwBG528z@X6PQ|eJ>hJj1GW0t2mAJ-B`9byWd$-bBsMQ~>|FGTgOCyz+=e)unlqV6 z8563A+2y`sy9)M53$eT$=@AIra#?V0#7afR&K9I#Li}Xb=lNESA=$Je*Ty47;+_fJ z=G(Y%R#dh~B6(UoL=9xed6LY?!^g-eFC=cgpqAnEO`)7n_2jjCjV#<2$Ql2{M@jkF zAZ~3f*xQ3Yu7LeyF%DF42Sgq=kmF+9ajjd@C7)26m3`ip3X!Y5p@&6~eK~Y^V?g7E zurL+*mc~FXu)6s+Ck)}A4N0Rlgb1=W0W4VTORUT@2|O3L+Cs5;uDo_ z@Kp!TU^y(z^YuQcbR>IasaVMMGRT_x>7C`zRK{-~I-1VQa5VaU%55wS%!NceV!z`Lp?TR(@0FNseK93|4gK4vK(LEd1~ zhlFPD9(8023NlNFsWFeYnp?>da1pqtmFlhmp23G*HV;#pgfiMV%z;ho<5}HIP(-jQ z%#Ej&A(VNF+Pvm75J-Z2Z@}lez%oe+p4Az^l9^D0QpXA$kDv{p&Nb!71P)nC5vCsrzg5CL^A za{m=mEAK_$4>pX=uL~xkFWJSf2;?y!vfK&Btus5{WmaLLe~BEp;t(QgH9yI#H3-}o z(@WUblXi21W2Pe|)poVLjAFGr9fhA=P>OkY<<;F)l>|d`&7I$H ziF==4_JQG}TxQ@S?_Pm?XXSpYdnrAssBZY(jj;cMR%a9mz1rbK_0MnLiLVC?(({7pmrJ$5jt8YS(Udp8~3!yn3S`U3 zMl8m(k`0iN9t`wJG0ZrJN%B0{{Gk%vda`|vevI7;kD=Aq?GNE(b%UEv-C2ezy*S&@ z5=|1y-@E9YX&Ug_3qU5x?NGh`Yj(VF zZdMy9y=D-1mUBLAPK*$vS9w9xs@!K7q9~jFnr2@%LfK5A3OqW<-ip!=BKP5PQ!pQ4h6I817 zO~{;GuZ0bjyVU4jg#!QGk5+a0Zb-Pv&-C_&fwPf=KO3f1J90;P>kQzHFXl>+Oac*l z+vFBlCqSs`FRbcvc#R>+9bP{bsuu+Ix!Gb$5-3Bz{;t^JrGT^5plP zsHF+iju5}wxN0C%woB~`$)x+^A3t}((b))8Wk2eCw`~GaO(&*iVCeo$sY05Gv!4d5 z{^$UmP0)<%Zpl8)_h!}y{c*0V4jNZHQl~o*pj?7|{O%28wC`kRa;0mO-;!8(nn7ZN zu_omu^s^0&>mN*Mcl(ljGw)_Zbj!Aw8=Xa$fa$;cF(%5A5(FvZf=TMP-+k7t+EgB` zFTK1jQ*Y(EHFaYYG+PfJ^j_HW3O|bdMlU{vwd2T#+quSySr~hFWQ}<~^NLP=EJHm0 zGS}yICrb>ySGSZQ49F;>c_-oRxVF-sWWOY#{GDJQl8I9T0YaMbUgtDn^DzgTajh?5 z#Zz_|w3{G%{~p`Gr6t3&$u8Kj+*aLcz{TFf%ptytXY3iLfM5nCqw#s?gJFYo!rK3SK!@4&!pX zaIMa8Akn3{*|~h4HZ>7x(t>aQ0zs-oK&zY8uKR>8_Bl_q zeHzy_3-v+xVoO57_e^qmy=kF&iQ>heL$`(cz!7jtS5I5ZYHg8= z1juAuTeU&b_+Sfjiew=Mfoej6?%DltS&9(X_z_2% z`Zr&SM7k)Zr@@eA)p2u;vJ5i!+;rNr_tI8x-OD%~4n7Lu;Im{G0=ptpDkU`k;%vuS0&7yXvvNDQ@(@4Vkn)gvFtnqaxCM7a7+lAY$ zEi7K9_1rOewr_FU{ z*!oyoX!-njRWG`3Uf0BT#k66c&x}j^K%kb*B64g(@zC?SND{2dfXS5`>SdA;@tk?h zGF#qt(G%C9Gp0dBUXPx^<3&JMOweL`Xdgn)968-Cucx zpmNY5mB~Z{w{BqV=_>oKnC*RfQUL@_?2ZN(Ncj$_6_?H04_ty~?Jer|W;5VwmmuKm z5)psZB}hz2Z;|8pbKJ}+DW~UkVU*tcar4+!ffLAn{rQ)mUjHb713utD1fk>Te!pwj^*YcA3u~5= z@;!|(fDfPphBu|J2SsJ!L^3r$ngeftEZsWU9)L1KTdK!S=|c@~goU?~2rNhXLh>{K z0M=QO%ZZvd++<5AWqe?!o83&fyRyB#gv7_41=nDV>j@lFUzUt@lH8U>Svr6&mph&_*)rvdjx#teL$0f)J2rmWHQ*Ih8a!2{xm)E*ObLad!WBQew z{4f#`DMw_rjqMUKJ<+)M2Y}^u9g^Pz|TP9tgT@bnR%jE_0}K#! zRRUnbZ?@q3?*)ti`SeW;3`o?wDGTmiwg<}uk5RsSg=|-qe($YrUX7!b&BI}EKdeJ@ z_t`h7(i*EoZO$Eb5Xe`@Ad74=Vti|ZcO%|hr{K1Y-4iEVblQ%86#U{-RMa{~>*wJ6 z0J;7FPHw=`Omny0$X7Y(tN<~tv$lKr0imsY4{ABrOyJtz&6)Q*RPv@Q$w5Grt+f_5 z=Hu0u(2auQ;ao8ui^wdx!Tm^2TQ=7>pB^$Tv?;O6<^nffJY=fU7b@>zP^nGCq2#}`i2 zehEsog=_;k({|oMW<6l1MEF2jwq8IX^X<>j8X*(Dmmoy&B`7F64CmPJU82^`_=Ymj zsw&V*3cNpHw>Slm`#y97h$dgE#Q_z?%`sTtOaM zQ7$0R_VF3`+%5hu5cU6J#uhFJoTiU=g>35sxZas2lfMMLMug7TUbT`02{>mZM-H7P z1F#Lt5}7eMehdD$-a7k97jzUO+szcPk(fHE;;v`nnJx+X7cOcZq?w>x22( zPUs9al#{17)FB@{crMx?+raeb_#>ov+5tSK3V&#J3Hr1O*$3%;12zc|Ie<$a%8y36 zDZ$(A8Up3>HJ7^7!8d9PJ(<4y8r=#M+yUEnhqy= zd==;OgP}J>04%f!LAJ?Dt98e3O%8GVp_OQGWXL6mNcPa9Dg{0ewp*<6*GiwyMR#6I z2~;GHw2Uj2)&v_$*m}$^=-s~Yq{(=V6L(npZDSCZL`m}i?A*drVb^)Cg*#+$DD`G+CzshAltlGhy|z)mayGD zbss;WO;|GKpv!Y;0;KJEpZgg4so^P&uty9Xu-*>Qh8^a>d*i;t2dwJ)bwF2;VaKH3 zOr%oz0t8e-0<@R(EqGLn1ik=11|0CYjtHQYh@7M43lU+ZV(!pV*&)5}O=$niO^Av> zW+U@$tvGpr=v2jC+6zF8i&v@%jfsQI+5uM02uFp%`4j*tMgvm3{)4gJe`6mm&_-@f z;&PHrt2cm9)4y_W`d;Z%Cv3YC=K=(5Iea4@5F?-}DWsR689+(qA4vVhQq%wPlzo8V zEO~`?5x^=tpa|jsRP}>^mE{5ugMSisKXdyM(1`~#RI^Gi~wYVAu$Qy?Mgtoe+o5c;rNqLivwU{ z-<9TlGGHOH0_DUcSJt{50iWdg3o_r)1^i%V=gzBu^D9igp_>bk0v-Bktf^qYM(AEv zl#>Xwe|(1X53b{Y#987Z9cR&~<@ghH1@*hO$%*mYfGqq_J(Is8aN+@(eLWhimFP^Q zc;!gHHINN702sgaGTaOBINsTS(@=;0p*Mil{;9EYaPamAe;V5IDSOy{7T{TPPNM;9 z1>AAb(K);IsrPqnQ_=O%yM43hlfxZlE?Za`e%QI+gTMG1mn)%T85LSLAc4)F0TVUz zuv`Vea{%DR>utlrPSFZ3Es@u$~=0bYc=M~1BxdCvh3 z+qw@-_rzAh@(1A$jerE`kQGYE)(Jo&6L2H!KD1Bt`;&#jUu2QpIt$#U(@w+A)}q91 z^#aucL{153O|?R>?Y66&N_G&+~ej8-_ZSwrmp;( zrykEfc%|~m)e6h@Divj}(^$ydDez67ye zf^y$)gsf@`6`jPzu7z`_8191w^A@*t#UW$hXhC>sPp>q&f6IQlft!ZjB?w*b0`Rg6 zV0aC9+wT$t=pJ0+613KDoA@7>u@Sr;vMSTEpI-;RQFjUj4h=yr+#s{S*9Op=b6;Sa zD{aP(jBFqzWK{=xP7MXb1}ybKPxqmph%P~Z|2shgPOnJUFYw>a1d4qG6i@OJw0czv z_);GLV87si!!AL)IF}&ZAn&$k)^~xDj(}bLN$H3q)-VBWMXMmLf9sZ>095sj6?tjU z|Fc3R4n{O{YO?3W@U-H;Tu8yTb-Duwq6}6LQ{H`YDjm{K!jKJ?k)V)8Eb%YEa!XoY zX_B@p7xyMceueNQYC4kn75N3hgAINQ6+?eGBPZbg*$hDKBovtTKB8fosH(YHAX#hg zVOJpZr&|baY69cmMt=%IQL(fAs%*a{4>^4YJzawC^N5r3i;;{RToc$_FX_z9%jk`} z)f#SNWAnTemh)K0th`85Z@k^wp7ORdRRakqRLs9hPC7PqW|9U;EcOVuLFA5(j;k^f zNheyXePGM6w=K%&Aoj(QWWki(S;R-;W>RDdM}9{$cEntEkt>-VgJBChaxJSJd500Yl5ja>5 zEYOnzl$PL}Qbaj*Dv672=IlnSuLM)e|BFo9TFtxF2VQb~pX*wmaUy&O9NXUA7b zIRvViqlKp_1vcB$P0Cm+Q1ty8BDEsY<`sO`SZSM}_=%8pX_wk`-rGb2-PX@yZFr2H zJOn~Jy`rMT30Lyigxqn8Uzd_O+mmpRNs4p88^n??q*W{8dJ^O%>7KMx-`B^{XF`-N z`pBIjIi*h9y5zUpbJsw)e!srQyv98{pq9qPL|F{o=j*6EdyMI{Y0a2D?wN2HGujTG zqANJ)K$y*-Nh9vmD*2;hMt6+2lK9c-QGE(l&XY(J7R)$mg>X?29jpysVWEQx|8;M; zmi{vvB_Sj&UCd#8g^{LmqPSS6$VOJRc5^vsGB+AjjYX=Jv_!KeHlArHWT6m)7Wc+U zsK_=3BZHTqOFjQ?q8-=ySJGtg@lo71+_8AZ^X|C9a7OaR3)dGJc1bfV3(hKXZODe0 zpyibUnIR8_bj4Kj!|e}U8`QX#Hil1KqKI4T=x_tOwnqxHS5IS_YCUXXOF{*fZd5-Z zH-Jt~*l!9A;tO=J^zlJ(SN4weREtXyd3YmvTL(X;pa!x&xacq`YUYJWOYWgj4~0+}b-IY**~N z@Ao;fXepZSZc;pC5kO20#m6dawX^MSdh)?*&vzueM>6lx7~jMTRJnPHc=~5Ag544( zDuzk<@ysulZB_@F5vD=PY+UpYWnA8Gv6t!8e19ZkaEo`17TG}4_ z2$LTX^2NsGnB&H?KI33lA;-sJp8?oVh8&WA`PLd;v{EA`)>T*EBmf^Q0D^zw(3@a zmx*?^f#KJSPDRO#_uU-IqM8;B{rX#tXZp&bqFHI|(A0!*@<6wr)rQG@@uZB|UrG|lvho&2iu2|%D zdrgWpIZRE#g7@A-IUV%%dZc?=&Qxk6U(|Kfu`_?1Lhr2D}E`fO5Jl@T> z+pSNQ&vQWIjOhcGQT=tA5ta;0+LDV14FWTyCXv&7y(cQ5)XFyN5&!GHUMJ^fYt~G9 zoS)7x>II0q!6vcN!qkjNjKni4YOH3|&FxcQ%KJ&s2|m%~bB`K{jHdpHNEx))=~INf zkX!p^wRC0G^nFrHtoIG)YqaHKm!t^`%yQUjliaPV;9{0{3|aL(=2Yex>yYvc)hp~$ z(n@$&-Ij@piJCfdtlA*cvJV$tena=t*)1W_on9xP`VN%#|iO+ z>?5d_JbN1~fj&=l8a!04wd?QM$y`;HjA>t z(t@G#e9p2%N^k6!(b<+}LW*U`9U$}4jWGlZA?f;bC>S6wPxLlOMAk#tOJu}NBx{=} zU+Ww6?l-*AFL+c};+zhJN;4-nBK5SSsa)CO12NFDOe^ftP>QO|Xe6weT@AQp5EF~` zB1L7<5(@OhbvzWeGg}IBJFiDJA70R|Z%OuN#7Fo5&v^7~}<}jYh zN6V8qQpp9RqE);-*c?2U-!9E=6eYX!aZp{mCUAf^@+J!HtDQ+;CR)w!^q9dZlo}6D zE<~OhElZhKTTpH#Pnac7M2m6Ul48;K^?6kruL zlJ}Cm%%EezZJ;gK1J;F5%(quHh;}CRbia&GG<UPM&Q>sY@TFzp$K2pe?B6f^hg4TW|u_HpC|cB!tg^9rQyZ@&oFHO0%Mz zoj$8ybB^SsjSc`ZImaOP+df)c$v@NDxf$g=D;&f^Ma$Y{P&W2O(u5tH)mznKpCCeC zV5VuDo1?&6*h-Lxp+;reNQLHxOjZ?cqja6TaZ!MjrC^A!lPnA^2v~~AfN#)x8`?!6 z+s8GiAW$73FNKh)m6QxQYQ5%rl=l?!)iRj7m7+(YWnZNpVMUP$TRlAOW1h+V@|wPq z<9rT0_t#kR)Gk{1ruzjAHi?i;)GyM^o$UAouo{Ho0J~iF8@kSNjZxA3! zo9(c1wCdCJNxV;p&Qa2>ISAj)$zLeDfJP%9-E(Tk86dCyDk zJ((~|(CFQr~YfhIB{`fPA)$7;~(g<2wvQciB4`XyDv&4i6$DpH|>O=w1d(zsqM zCUr+oDQ;Ac?9K}tsRdA0@R57paawF`kLx9@n;-8Ko^=CBiL`SVhJjHIVNGe7urAwTBH9?yglvBZjYL ze{Xv*mQxO5=z$xt8!BtB__Ju*z*W(JQ%LGnCPvdootf7R@pJaL?O%@`&6k?^zX(Sr zVN4lgxjQm9a!tSZi`c%v)2HO*iHH_LflgnI9^%9q%P*VOP3oQPPtVFlnI12y3qp3= zYo15fSr0;&KLb&Yd7@V9v9}qT4^gRLbo%7`?*&c1B*J@iGI)CWfduwPt975kyVDmr zbA$KJvi48aF6w|OCrt0$zr?ew;U$Z)99rTXQEU|Q;`PQaoh89ZrsM4*#`QP6UB@!) z6S@Jf{k(LT?=U%E>Pxik5V04{o5PFSa8Kwi>Bvr=8s^0N)oe}MkV+Ci=S2#!E=im* z)Gc9<@8{s;^9SF)7dk4{h0%Wg?UU^@tm08?>Sm`|F{tU5Y~8U>10QhX&|{0!(vrM= z6bS3+CIp7Sv;r4bUl}EpQD6#^_x;^YcIXB|{+qUq7cxR+0yw9`A)Im? zD&eE8ZZF3>I_^r!kwf#q2_X*IPezap^Ve{m;zU8-=xf*o&uu(j9@1~ zV&7Bnyr#^i-2BUUV`m$AF*AzZV|B5Ksbc8#yoRBPlM1{OvIlI*?n7F_){BA3FD`Ui z>fHPiH2!A9`t02F%-*g05(EvoDe=FlsM(HAbwRm9d${YKd^5nB@gHc(9s;Wmu$OgP zsc=5mO-5XqJ9~!9kZL}nu}#Qw_4HAHTAQ3_9eLnj`+rNzSsyDYOy0oZq{=_LkPg?0sr!vv`k(C9h&HX+(!5$iC-xF) z9Q;#K|0!w$oF4v`<)7Bj`;)!&4QC(;vGv(XzadLe`QOUu;q%YH>bd9=fNTi(7xY2Y zlmC?Z;$LF?1wOEO^q-UGKgZ_pTF3k^3v~D$nS^OCb;9kAd4zzRqr;3}B>&bI-fM-$ zp9TdCnTt)yKcG=z?IeV)7o7sy4OKrkxBe+lwVI|mrncl~iOWa+K~z<@JY)490SUjp zLPNktaU+nkQ`o%v?>5DLgL+e{iu#PTwh+kmH3Zm_$A`P^Hz@TwDj+p_>RVgNe?t(f zpOe(#V^3fmw=NgX`@18>zXN`>T|Xw0N~A8v2I^J|IMVoEHTiD;jT(@51^i;p^bfM$ z{L++Pod8CP^Tp^O3=Ype?*I2&B{GEk1VQ#^m7(ch+VqDZ>x5tYBXAEl*%>uJ%A8~> zm!S8eHax1of&5QkVJch%F6vwZUtB2fr2k^ld_n_1COUqpO*?D~tomPT`7z4qkdFjG z&{;L?)EqXi`kRHn70JH{+d$v*OVHE5A=$#IXQyUg zFxQvFIyv4$j}CzE-%n=qVe1C)=j_m}+4mX=j`C0_7c&)TQ&bQ*0K@957WY#i|A7qu z9=%`s|A))e_$_T^Q#$@t@a8Tt?BLx54%8g_H!Amsa%iw&_%IW7gt2ozx)*<5ta99MGY^+sLovZD81cs;c0)%X@`J2jUIf4yV_m=Q5Xx-L%v2?xXq9SaG?A>Qr2IOa@iR$%8u3C1`4d4kYz8Gy;ep@k`&YKa zPBfiR__5^$Biy0}3xMz8Pb2?ZQzbGO;W^ZJ`Eqa6HPFVTy~n=KfKcnVUjLnB*jryi z`|q~Cu(OkhKyS6Omrf|5K3W%CczS287cDt)@DFnS@by$xWXNpSV(s4WM>HbZNwkur z&E1SuTQQ)TCke+H6}zCT^sFOAIlC5+z)0AJ&O-QxhBSbSH2wsTe-i0V)B zI?93nRQCV-rvKJC{4I!W&wuv%%fxbPe>?QQAoo9n!~X=a)RV!F=x%NS*7^v1@NN_g zbu;sRO83w#Bg7stRLS36lQ8TT7`k6nRsx4om0ODhXNDxA({5y@qge;i5 zt%VbV{Klv(6_z%l8lMQn}=ZTWU~?7jiyVG6_t3}9E4jrG0UTRt3_g&0LWtU(+L0g z(pr2?CK%>Do-?Cy#oB$H`e-iBQ9&cKe2IcFgB_L&L7s~P-0^3y)# z-xP}A5vS`-E#g{eXi=)9M5>-X2xBr>KHvunPxJ{`ro&D-%J990~7F-+7utx>L~=A*ld zK9m;&11rPs<)g5Cw7Vcbw$a-?w6yS#1;;~2;qi2o^2)4Opsp0}lc8`^(u{W6AeI+_ z%#j#|k=)2u7f8W|s{G!$T3iL7hgXsS!$DiSu~u*b?M> zTdG>0`tMS7>0>S9A)OkBt=CBPL~?wXbS*4+-MLUEc^VOlqMmZC7&Zw+VtnQS;*1jZ zA;%il7eU1vQ0#yJt6{O$mkt;IZUs~$6D70WHi#ZC1@?*EEM0h zymecoN`Tx36-pYr{OOQO`=-1V<-nBIOLmeBbbGQiG-5Sz25~MQi?}Cl&XMd&+X!tU z-UAt-mTJtm8`-{!$#=w}G3NHxP?Mcb`Ju#Y#%KGsS0{|g`^-*YfRN8-2A8(s(R~pX zd@Ip;?ZIv8`kV)hp;BQTm2pH}Z9VLXscnpOz7t_?T%N1;eWyojCw)Bc-h3)k?Y4bo zEm9@V5UL`MV`HFr5)_K|S%A<)eS0JtxtvG4CYtg-S5p?Z9JDy&MFpmvyx4Ht$yjP6 zhRFEjHkPEbm;t5NVXDcnMD+Xeh9%-?e~&g{q_4~fumm18U=n*W%W<&_jMD*M_et+; zVGvg=$-F%BwZ}rJ9mIiHUk?7_kdJlborycSn4LTmxCWD(7Ao$ZkbO1PTYgb@)Sk;W zlOQN1qDF-jdEZMQ#Q=yd33Gvxem$p7{W7)kx%_sYcIVRV2r}u#IX1s*QI!D#5U*~# zNN8&{Bt(%i)%NBa`e^H-DVb?13S}jp)p~&x*(YK!eGiJfNi)t#(G0b>WXb$od$jfT ziSs!1Aj4gY*L{%rIla^63-d^w30X_}kBU@2_cnvM8Wx;RQ{L5rskGZL777Tk4!{Ar z;Gkw&^}$W66#3G?H z6hpfQBrhzr!%k&JqYYcQHSZD#+_P|KOPc{TiWDS_w$tP~D{{9HNWs*Mue6k$QvgyK z#uK;Gl(?faCMWsHr;cTAmS>MC!fv_0Ot;KNL#Y?YG9QZ`OZue1-SUP&<{dE=LR9^- zsJuu*ws`0v4yIZ0H4H0ycd{=}r!T_jtc+iu_@Oq2q6#+TYc-WAWPe>k_EC7U&`9ln zFD|%RZh?GnXheqq;pr!0D~_lBbBkEe?Hv!u(*A90Y)%G^RG$END7beSYVaVuhl>qVH`XFfw*fmkYaXf-rRTAX6DboS!r=TArF z{9eFT0Arke2!~ef0;y$@(6sfx3(az*rTJrhB1eHu$(ZzuZ*W-c5~{^ zjYcZ0o@?^AZpe|4g!s$02@N@uw#82EGC7P3=&njC+$zazn*twa(B=?ewdKz%ZCiGS z)W+wS$KAX!X704XR+oSrk3`Z&r++?I;dX1aT}H#S<30J@fRj)iz6%2oeA>r*VeXoj zSzPy&W~`pvNg!V>+1M#iAUM<@IP$GBD7k{5Bkmpht=9L)(AkHTgn^UVOkBE>Aw*y5 zqhHX909RnY+9~%1@@wg7jjd5Czp(|su2rxm?h$24Ov~-qxjRnsDJf&ovwb~J_waCP zgxs|p@4Z6BjA0_?sf;6NGwI`+V$=OY8%1kajYuo2t2+lbw5s4aD884r3~ zxHR6;&p#LuZexzge0@BXt@pG6{uR1{m@#Njk^o09Sa!FN)u)T0-NP~%VvsQxh8_4` z04rC0DAM<2`=2u(>&@mtW@}0Y&Fvbmds#%~u#!zZp(ZASP_Zn_)Z6>W^&$u3vE&SS zxX&p{j_pnzsk&OSr{l^$yYKo0O&sl+28W#C2jB`@V3pSyh(#lGZwzncFCgu{5pz?J z4wo{LAozpS0WF~n_`n$q?EbCKy|Ly2uAbn<6R~Ttd!LO=*`$s;PTv%1hO48PcWres ziCRdCnVI_r&j)Oxe3sCm)X-_QN*@xDwzQb}$B=3S0Y2!Nn*|{zz6iNo-pK*p^^(%6GWq$cS9p-)<2?b+;BDK)52yCYEMh8Yvbd2e7!9<@p{*3T z(du*?9`t6It7$d}$&z;Np>7YrBx8->2q93UAk}_pCCI-4HJN(SQ6D0eSGH5V-9z6uok%_J zoUX4K$th!+Op#r=gZHWg^1SJMXo;P1BQdlS@ki&%MWke#aNj$pv}SZ?%E;W|E*3nZ z`p|7-@7W1ET?Z~DCG3=w(DD%?kv&McUWcw#+T=V3F3dPqC67~irRpj;^Ulrf;bLY; zL$dV8iaslvu!UGAhke-vTi=B+?FG`gXMERcMA|GFxK4brK*+es+_$FB=}5ECi3|;I z$f;m+^$Mh5ePl}WMj=oY|8MH0T}eue###fQ!5Ko9(kUzkJYbpYRTj6`Ap5{-p2};|xb4 z>TIxn{@fI|G~+n-n!v_fB+)2U!j!y7X?V!46*8@jC#SjV`Gf1t!!eT$A0wAK)_OrQ zg_-qJ7<5Q}0>m?8vQZg;7E-}h2rT-#Ib9zS)2#Zr zTIOSH1YwEr+{qI>Nvf9&28t=K#7<60TmBY0FQEz#3oK{;-8UlWqX!*Cl34}~K2{`3yImhD>SUixY0*Us11%@(3Fa&RmU-Au0fJU%cBF%y zaq$V~TP^r9A_PIzJ~t$$dy##|1#+I9t6G?{E#2I0wE}ei2vn(G7F@tlx^6%9 z6ZoIls-UUCZTn znN+lUw16tQ)bRt$FCuM#f=+RC*R`aly?*ukDU2I(aul>@y_2(&g7J5M{%UJxqs!EU zPxRWDieO118J%JUA=wbRw?(uxJue#%K0j+dDL)=0)(@9JwvkA;AY}9XK#m`Zu+D@4 z|A%5j4l2n1Soxp-wbl;MD)dXxHx7mY?}ZDug!Acj>uHJ%AEaEP1a`ashhAr)gz-U_ zUqIhLL;mcgV5uOF()@G)u{EJ??-K-o^H(vAJ&lntK2OvC{#T9nG9vYZqktj6yzI|z z-<`Z$lTD~CK``jnJDCMv$>M+OtHd8j|Bta;U$|6oz8wY_LHbWHADj;#01uktkM=a+ zF0z1z_x~*O7H)nDJmi7?i?4W?*O32-TJ`Li;P!6^bMjOz+zr%ASe)g z0DT2_q?aiw@**Mzt^rg#>4x`S>@p!7jErlVsg0TeDJ>t%<}^9?(#<@xnTf=(4v(%U zKFEjkSRX>SB4mHk&0*fclRNSHsa!fYMd3R%kQ*X4&g=u`isqI-D z*iU--_8H`;E!#(zr2VVy`3j-{bQm)-9q$9^`fKodpxzHIKw?#VK{7IfVoitkq91lQ zn?lH+YI`a8GEwbC)UO84dHiVA^&8E%+6&FkB{}j@3UNR&)kP^@>LNFU0)67Y_m%#g z;K$Kov3ds@;DcdEp6m}Qav4U{Chz4aFPM2_Q9uyR-VdG{|DcLdl?}=kXibdOwf}`^k$F z-WO9gOBM`u4;$IVms#Ly4~nh58xn2gj#S$$uo3A*x9Hq#q(egiHN)w;X+GFr$QH-R z1wyjIa>N2ohkhzRN!jaM{S_3FWYSC>wS0?&EJcX1!=ft95N&|8PZAStX zsOS~N6)qXnN0-9%Elky3GUmM5OOzSiz_!&XO}jva`X2sVm`)L&bd-y z-FYU5obSS0lUPtFHb$mh$1y76TetrF`N&?`JaOat?!~FYxy2jcdop@7y>~U$k~%kq zw*oWDWVEYL$p`D1qtB-(x})J;6R@4-qpEqzhceI^m);sRRTIiLjGY)%hCcO`9$B1j z^CYW^!@O0Mj>7GhGZ&4D)M3a7#f-#+k4%rgEd3zNVIgL{X{~`}q6$;1{atnVMF5FB*W4pU{?crB?34 zDaJ@plgxsbTrX;IQ1oP_<_XDQ^QU_yEe*8;;$?TJ@C0UDJ&?DO;4$7Bz`Xhwy8Rbn zz}#8{=PJOn>`-mp0zmr9KMHPG!DYQWUd2*PD%4P4&La!klM8088FqhQb8%>kzTEfd zI(1!|n-GxhkVYEmZd6+7?(Xhp`+Gc|nd7{3&dj{;HQ)99 zCGNfNT79pz?zMpJ4W()pNtIo&2uG9C=r6npdI;Kb^7S1oadLs&65T@Gh<_w1690m~ z3*|kci9f@cimx*O3v}k-r&sSt*WhWwT)S8mcanAI8q?NlkGz-jqPqP+)3ITXKmG!x zzwcsuRXsdQ+qKr^^V$;ei`VCaP7BEy)B7gYrYflQCRjeCg4ewyYccMhHwylN8f~ks zYW|TLf5K^fI=rwhjX*Oe58V60lm+JD5jt~hbcAxg$0m@id%<^k2Y3&DOAq}8eE>c3 zHS?y>0L}UYRtFDVyTHX^z=P)F439F43!HslW^H~1N{%Qy`nXT<=%!jU+io{*UeMd(DapjNPJ{{eStmu%gV zv5$67dqIZehJw$XK4(u$mwURozIgv)4Lb{CfqGsg7)H7L`c0-Vi=$f)H&(!3(&O)t z{xfoF}#{m!}cf8EAg+pW&|Fw8}<-Rn*!LKbr#NvkX62ZqL2R zM)7)O#pL{7FrV8vTspC%S{JOyvZ2% z{yn_VZlIPGuPt*J{~+UHzI<0hW7{u-Bma>t>`*qoLQHMtuTF30k0a^GftnL$3m>PD z!NPu!D!3jN+gFFFKZVGrLj}wK>{ugYeU`_)c-mkBcb{G~oKJ%`8Hrl9Ikm*E!nECA ztk#nv;;h}A??E1?d^y?m#-F5Tm*pXgovpPu#))zj86;~_UKNjEaM`CEl{z|83Vo8) zQHPP5Wh;TcTHlkqw?5@PK{)u_=+&YHi8dJ;B7r@)^?~cacaYSlzZ9490Pb6g|CBrj zDmg@$=O{?QTM^QB&zT%qx8?p!TIyDNE)4y~(b8{YrTXO2;YJ#~L<{Pvo8LuwN53KVqOo2E3kpeA?I46}rNFTP#YnPbgcv=UQmYgJp zrNKJp$GOy8WEl>0`d%GU0{-RWVpH44mZ*lgKO32jgdpV(K!D-*= zKw9FnXBA=k2#eZ&5d|X|Uw8^NZRzQozme#4lO{0fF-Z*cZA6+e zv|p5a2^(43Y>Gd#powIW#trikdIKk8yk-=)z0k1p*QAME8{}jnP{m1g=YD^1)g2!V z6jfn8)U-!HVtM(nQOe|9*9a5%)nyhzCn8kdf-B@Om^ZpaXclgn zoRt1U@iAh)m!gKDh0knPje(O1XN@bvi96^KX&Zl`Z4k%soYEkbz#-k!cQm5rU((<2 zTVs2E3m@frA2~R)@OsV&$17dGO)ew+ua%k79?_o~Af{UEIhISGpVTLl!Ah{S!;|xY z3fccH<^9A^{&b=ueeHq}*-|WppqM>t7YBidZ@;KVt?QI(xUzIpqH=S>0_q&w2+olpK8u4dz`cJMG(Sah zBGQCS(IfMcFcD{CA2b4z>kAZk@J0$)&Bn}b4M!wE5AP*hEx)6@qJI}EoO4mzALfFk zb_w3TZLYRkx&$mbJ_Zb3Ix^8$UH_T(hAgfsm3aL<;{Y--rMBj4l*cebo3OAMS{plm zt)BCL=!ZX3&w~{lA~ZZ-{0H8yr?}JkH=B(l{%4x`LpZgSq9pe_q4*v+G`UAYPd*XK zi9gCxG`6vsSQB<&q~uW0@R zk_ZghA2GR42@#m#lscCEYP4kkAxM7!V^*Z`&p1k1E@Iq(a!E5O>>ZP_(rR?#pc3yZ z6_30`SB89d`ex#KiyY=99}eTy2Y^BI2dDpy5mdB7{T$3L{L$bN^clUypgbt7gED7% zmQ?aq;Ms1RH_$Cx&|A=2Y-)@g3M%`*;jRC^(J|rJjp^aikyK+ZF^e1h#J@|S}2CP#sGCr(A2ujyJP z!gx-k8`wC;z1!M3``?iw_iu)Mb||?gx!8;Lq)C_@C10rQ(s5OuJHgYDk2}n>p)XGY zsYv4 zyPOtM+zDefX5T$5k8`O;TP#AjeIOP9UH;iskS-Xb{H#2_`vJE3&yO?8U_O* z%S$*jSg?^ncLBjDfkyS~1+zHva34}lm}uUHPdx&Acwc@Sqon)dhX_ynaerKw01Wmn zK5F#VRhenVjOXx@6z(y+Aac0#b9SmQFc%yCY*JQgKPD%JcFb3p9tzmWR%BE2#ujK0 z1nVHt>3K_sF`B~p=Oy%^kct(0k3+qt7|$#`+~+ZlJ2V@CI5G-3AmMsAlr@i2LA(TStkXRV_0*gbY7&?zzK2dj-FOQW z>bWDNBpC59J-C~&T$DBR&ElSRru1Fyz5#~Z52{|2u2;2&oX`ilXJrUCVo|XlLiF2{Y%-}P>|)-ST&n>H?+hlULij6AaW##u;)Rk>HiEZ0-SP@ z_eg4OVQ*9muj({xMAYJVSJ69~Ur25}G#2{%_d)5-5Y%RDuT?&S7klr?d~pyr3{evh zsPdKU1FPPMWPb-4_dSp@4o-dv=Yyhfy0{SAu17ZZhP_A>k~0Tp>G~8sPO)?(?%-$H zT2Ullq~l)oRuGXCn+q;oz6A6_?ZRH`GyQQ|y1k4QBCO#9u@i~SD7T`^3t-wt=0_+= zC?#Pg2yg_im&U*Cn`*aUOOFyEDDi=NjN;W%sgi_9((h@&k{`d7S*i1+9L zt9S&0g+0nNp9JdX$lM3HrhAWu?RVpzl{)qt#B8wFTPTr9P*S(I$uY4GvIDXKk^XY3 zIjnTgsK1-5C>f=YKe%{$=d~Ya`h-05%Me`2ORO}08~2Di=kn3@o5ngPEBzy{?w~V` z{0W%^*VBhFbf$W^lG~}9Tx%Ct10p|CJ)pz`Wmg&cV_@lG`NEyi_qHYig4vZYQ>qA% z)dl_b>xrOr7YIr-qUS39YNbkDd8k9OEg}x?C#?RRWcLat!r2jx4xea0t~Dad%K)%y zk(;&xwujF8BZL^L4Q?0$KRSk+6YcJ>{;-!#m?%CF7V`&-(|aWe&s(kh!9^7OYRqWl zB++-`a0CySRT*rEo@~|_61H2zIrG0&OI;vOw{W&Vt|{ly5F)}RGKWLo@Hi{NOV6Ur zE}YZn>Bfwe+(1YB0=vii7#`orvuk}b;7ureJQX9@QWEYJv7!dg8yW{kQV6)|0XbUf zr91Npl3AXW*k*@o-80j%miTb=n_=Q zQ3vK-DNz=TIKap4t!)gHcF(j`2qH**%?2Z`QO;wt8QbK6-pbL%!Xnf&SU{FNx-164JjTo6V->}z3E{20wz#}lwkf&zCSKg?eWA4v%0~2Tb zK?I}pMyxvB=+^LD6px#-+!rmpQuzC;?#cTH6W2G>fMTV#P9rJS26%m@laQ$A_lxht zR>7vpPuU<96p(t}EMCa_1z{+b;`mI;{&cD;s4ebnzx0*C#`A}icjc`ZHi)_i!v*%gEo!tK zCJWRtdKm)#R4bMczT(@U@#U$}--l%1I$lmN-fmP;XU`1Qdm_AM`wsg3$L4>V^(*y7 z)d8`3{$C98(#tTC|9zUs-xuur5NXA~yhr*ML;l4&L|^`L+vP!jvCg^MUvB$fO!t3* z!oQgAFL(EUfdaAmU!C=r*-B)!HJhK|kv;;a2+JSb-ha^Api|ZWs=s*$0kzz0fFhYs z759NYPGP)gy=6NOHXb6QjHddfrgI%C0dJS|ZaRSo+XThp@wFYm*R&PlH5v97XnPia z|8Drc!E+b;{!}wgao=o?zf8U&|MySCFV+u>^)LHP75~j3zPG%1klDo63dkZG;u5uK>IfwhQPo5jQHn7?C(X1 zCcHX-0mOey#Qy?){}*cbYb^cWDDuBbLcgBXPabWtWWD)SXQim2x4sM{T)D^zs3fQ~ z3T^1U|H0iqe*7Ku=hEVTzpMZMCBlE1IQ|n56nVtY-GtwFu78&2H)Y`%|1?-5Bq|b@ z+r+@OiX7F)dD$k#w776jbEcBOihO@K687U0FHF!c-zdQT_yu)4#PckFSP<#QzlCIj ziH?Ya2i?#>8XCjfI{ot=;DX{qH>^wi_Rv}SWj$X1`}e&>nzPL?+aX))qFvB3p$mvdMWYwmEdJ?N}#&GXQr*B^5v4ui5QLS}&anyh-w zNxfnGC-MZFA*0ZlBiDOaffEprEVvti$3SyR?w7}+5G#e8?ylC_wPdgs4!oF3x1JJM z5&*n#?2(AoEc7it5snDqVIYtvQB9{b{)+$|!s|6PRSQ}>aVHP`}sxJk{}hIq%&(PKxGNCJR&8=%0X=99e)z3SO2xbEBqJ zbw1%zj7-dZMz#`!{n~$=M|`N{ z#1=iP}wQXzFF!hd%fEWMq3oAl=ilzsWIIDFk# z<6plV6W@7lFCJ!W&>&6!kJaw{M@hVK2YG7#ucanxB{(l z^o_p$c|_`;!&TxG$o{)06?Jlcr7(yT9_xb*7prDT1DVu@Oagv^Ogw7?f-Z^SxANs- z5#mz%Kf%k=4FzX@2bEgf6?q8%4p6ny>i+wbEblEqCd6J6pB}TDspSC)QzZAO(B@en z@JX3z#_8a|IP>PS4RZ)=a1QL-7moy#Xg7aiCjYHjd+T#x&WXhv0+p}A#@;_s2>yv< ztml}Y{wFGZ(fWanQAsx=_ zO8(6y*ty7lA47_qK^goEhvIcl;e*eyOgU~_l7nNYM};KcL8=abWCCnRI(6BhfQ2rdy>(W3rH83gM48z!NtOgedeIB-9X!PIwm``-LrfAy%z!%-n+JM4#0=3#1Mh`{i=~dA!ylg z;e+02J`sD3!kor<%ba1w z{ms{C;rme5l{16H+PcFbk2U?>BZyR@bTxFSEo2swxRGjx+f5X&lvGmkrC4LWr8qMz z?x5il+ZCHj{ityh=fmgx77>h$B=0^kCJqu1i)f7L^>K>%S4pg=COVC!OXiIwd!5(B z!E;DDfrBt`8y*O}JmbF?RVR|4$-U)2ekM0G)k74RW4t0Ge7sr+FCYl%`tfpym_}=X zcqp*M%#*v`&AU%rqCG;fmtyUe_hC7E>~G)8AT?H43NFSxR4>s*VUHbLD7fkZO0CE} zKIrJ5)~T~|M~*Mx*iV@jdZgSP$M-_A-t7g9Z*)d5|7={rE zF`GwzTaA!`-IIlvNX)6V%++eGJ>O>WgG<5I2yM8J$>ICp0ti88rF4qXvS({7Xxe_r z9xUc!!h)kiQ4-`|3B?u9OQmiW(A}xgx5^vSReLYTL5;z3EW*F_3eRv7wIAoh~zhkE5Xkr%N1jZZ{m!iBeR0jK(q ziVmwFs&|8%cmXGO&wu6`_eMO}xu2|E-LG4|d9gq%#c*UH`z?GcI4gPmlCj`!w`Jsx zJ$L7|N9u)otX)MN=R=c96(o4;>wK&McP8L94sb_k6@47#sZX|f0R`*`MBkh<#!Ewgl!)H4g}vRu@PPXWa3AM&PZ7%CHDpJVG#Q^c`8G zG0|A(DfaER>){Q?%f!=?NJ`@CwT#Q2A|486Lb9QxxLCBcg6!#_njO_Y`&lucH+5IV z2VWe}S4YrpPu6I;aLF`PQrm+5KqNDyxh+kp$ycoI&6R8(E+$L_Gae+I@$E|3f@NkG z0tN_%kpEtup_Va4IuYCnJ%KvAhu*K>?GQix5^`~?1cr0^>c`W?V_1CUh=ZK7PKFO& z4J&}h!EE5$h39PQW9`#FWZV@0ZLL~x5@a(5vPkx~?U(RH6HRsh*^aY+Clcxlq5Uw( zZ+rY5MENDN9pNt2f`rZMJ%n!+q6Cgt)z0uW$i~>+VxCVEtScCC!OX#E=DHe*)6s?g z2CnSi_Mn9q#{A?-44KTe{2lp7!4}65Sr7S3@^8L_pc8|zjIrc4vyykJZ1s!3t!C)< z&fg{fmH%nR23^&O0bnHq9^*G5We_9* zz#8mqIEAKkjB zCnX-DV_s)xK1dG#{I#D<|5wN*0{T_zkYkw<< z=kbA0c!&|6=AR-Q^b2w5HhbP;m6rh^I*t!x(~pr>V^vh_fnytMK3h_3kQ<(b!|mKcZk|= zN@An}jW@HMP=ztANiB~IHiQRDT~gQr6-C!b4f_;Dar z`)$r`JBe4~xzA+?wQ-?80skA~U9t+=(aIahCc6r$9Gn*}PZ`7tDuTTYQ|jA6+%y}Mf*(G6J^B4WUmF1_fk+tL)13f` zE>pe=Sh~l5IlNzLedbOGIC8Lgksjk}JzWYt4olEp)Tfrn1>#J$pZNF(rvTiyA^ZGe`9jD>{x7%`Uj<4CX#fQ{h@JsiBcsl1^@)Am z3*_69OHt}^QX=#KTDBT*S^MiFw}0j9X;1<(DuGGMJtef zG-6D@4ed4?>hYNT$=eM2X!V~gt<~gTXz>=kJ!4z@29r6BXsB93@|~lKD&aq9;Joc^ zM^#yC$zODblBUJQu~5!Df{G;X0wN0kMK3mSf@Rq|GNHn4A2Odeb781L@=C8`PHdSH!@&>s>s}MMZfm7KJ8JewD7f)j9I!ErdnU*vk>ux2NUPLT zAv;y}%M@DPm`5e)xvR`Maw$uJR_P#u)o-x1w6y_9;^Nix7#M~G@mL@7q?1MeK?Qv~ zN_9xn+rolF2!tV)+Wnh75FoeW!Y%U;YJO`S{#Ci_F8Zv5v(LR7BBr?pp-P?3J0bwh&q`WF_h)}x!L{X4zhTiGm>|i6 z=WHtE#Y`~zdzJukI4Vge{~O+PzKIo6J`^H0k8-|I_gVvd3*cDjHCA#!f4)+ez%OJ( zL^EV~6pyApE>wC^CBo;SH01kOYsK2BHi6_NbHAH{>{xotBC*uBV< zTlJWLM7b25ML^mFoJ3Z=@s-pdxq6c%zZ(|eoV zKo*f@jdS8w@A<2OGn}zq4ud!}Yv0e9&xaVtMt@oA@3Q@GMi-sDvC03ix~Bdxf&PXx zz$pFS+HU{1Swt>=$3O<|Lk4@H`>7xId&}#;+vTcFsv`Dia6}SY%y)*lqm=}-x>JQ_ zu6*&I(kGM&GSLvuNc;rI6~B>7lQ#!3NK)J+n}~ChkqLcXsp6!t3LUISVdlM0s+G}P zv1$Ao7bJBLPwzK6hR8gzMOoLoS5(K^E zJwgnQ66Zxf2Q>y!qm~zGg(#R;Ag^~Yzx(ih_z@Ilbpr=7WcW^CTn94A{Nw%OQ1d8R z(961Jqzy50lCzDfr9a#O)D+ru-$H4Kq%~!1cNC)M%(Ad_gBc`ug#S_jsrJ9M&j473g;)j0h9B4yv5vd z##qh6E9bZ>G3w3q_DIz-aIb2uN-1L9_P@AePLh!Tz7&rxNb9D2R5Sc zy^gWKhVlVdw9?SKa1D*+dY}{snbVheLr2dCh(+5#W>ySj@+DNvPi#g<*200{VgzSB zY+b|UQSgRmaJpv1HO^WpOmajDGZ_`hX$Z)1PLBd(R)jaVIiDT}jQ8;m*q-8lyX`Ka z`*5Ek)|%k}$An|I7qg9-7>eO;%xN#jqCR`VuK0eVA;zNiFlucdgmjDIqsqwK*1VXe z^EMU(!@ZNDle$`~wz<9rPP^~e?{klGSQHBCnk>hUph`8Q3J?r$J@;ob`UmBv7DEQA z09eNrQG6@0Lj}su0F`HMCUYQPihk)O}iz zuLbT-lV{3(=RLrvCTaF~wwrK&;KkA)aA?Y&HNFZ1F3V_iZPawy~!3*Hg@4=i8%fo-c`d zQ&^=bMw+Xb-Er1pdnua)V0LT_mfJ8&O6KEu!rDx3dFBx+Ct=cUB*^XW%gq71pDPuc%((NKqx~?MN1d9 zVJNB`9)F@2sd}}9N^ROa5qpc>K@4OQ39)wC;l`MXiUZk14nt}Je{5Gt6$4&M=3FB; zo%m@&KsDS*_-GdS9_08y63*kkT@NB~=P3={h60Zalj|-Zv#D6YH0Vz$(n z1Ch?p!b)B*l#7Ax(miHk0BeN2Tg?FWHaTR^N>8m6-X7uQYapa~!0|$!>i@Ulpgj3B=TwowMA~N|)zkK|` zYpvsmThTb>&a6Lg7kE*)lBCg-LOgFd6k)?gMye4xA_J z>#9@VWsAkxDM*q$j=R70k8Jq*T16eT(CQ{UcP=VtM|d?BXHZD(1-p&d!GxsjClnO; z9)V_m;PrS3=E0uP-i$i$V>*2K^kcxPSgo(`ODK{mSKxlUnLnnUKl29nSam!{9c{NZ zj|SUbz^GBGy5>s<-CwTp1_<25kR>O_BVQ2KO3xrLLov`PiZF>igS<0rV%7MgUy9^E_0sc6YaT5YQDNx`Kuy4L77!_#SN zwsYLnl%ES}DR#mOy7LEWsO-i<$W@)K-(20cik59&n4fABqqE_cVCzh>T`^4djFx^&?QnsyiF- zdYpfWe7fUCHK2ccLHF?}MZRQCQ^d=DLFWYSRRIhvRV!^aJE!r>?RvV(A1y0MZsl** z+IrLlR%j5CR~Y&!P`tA!yHCr6Yeua_Ysw=K<0L@gdRwqVsl@X)k2kLz3J zB3Ih|t-~bFS;7AE7Jr3M`N{_LZu*YbOO3GMpO7{xlqAzI{9`KFt=IbRB=5haR9#=I z4B|n02q2S+8mx13nxE|oM3_(WD53;s5MjaISTzp$`itfhlRV))9Ij7wx^YxN2XDI& zfh>d?g=C?dM*EK{wiTa-AZiCn5Aod*4f}4Wl?dquf% zW(9|rmY%W<=3rGYr>mIsyHaRBMRWlu0)}h(+N$92t;%d>@V1l(7M>t53D*(M{De7*Y)@?f6K+Eu#a8(L~@9(})Vz<%B? zPWOO0k|xz5f*VVU!D&d&lC9KKAHcJk-7O$7Gk>^q0J{N?^WKB_o;so0MF3WlG34wP zJK1hAr-WhJsZaa$X&p2fuj80KJ)a9!D(QJ^Vy?6c!#Z4?bYXxMwI|nnl9=~|nmE>) zJ5{b?;du(lckr@f#*h?cBh-81*T47O?2ci0PrQ=rmdLpf~Q#=aDL;GX@itqzgm z8fvZWwo0TkednRZ5QT6wk%!{sdu@Yt;8FMG)`l5U&9I)xC*0`}B_Y<0&xcq_ct(%5 z%@d}kZ@n?sn~+2V0--kYJ|<+S)0%TA85xu&v<)qT*v?oLY|};O&q>I{;&M-US@p3I zUtQG$`al8TLo7X6agF$cSJ3%ZjjzQfl8hUV20U-obksRt`@NRVRY!M>hMxzjWm7`M%I^rDy?I_J9euK+CPJ)8Z)%B`SAvpa#&(h)3wat3^T?i{@Lp7H zM9aMT+k2yQQ58DI1k|q@W^fVbp#>=o!;fugyG62OC|XWFeGY#Pw^?dJSvn)v}N_K;=qqvS3jGs?(HYt**XG}kk~%Y66o0cNeEWq44~KIsvC z$M84Ds+<(S0|O^XT-RbD%U!n?wj(LT$nhG2SzJPY))SH9S&axAB=3{;ZQ zYKc;pCsxzBBrMt@T#MhX%>4f}5Glt?nJ(o6EW~W0hEh zL{PxPIOp>RE&l3Px@Kmuxn0>dbWy5VfxAw=5pE|tOlQS4p7Eh&?(`hugN@c@SnK_b zsX2+SJB|>!P$M^WWj_TUR#(__cGwvqaj!Y)7V9H9^U5-uYPYmn@mgsH-2g!}DKVy( zhAi@w1#aKI3~OD@q8xeU%vK}#Dj(Jo9eQ6l46y7I~oH% zl-1!o!tI{60ZQ-yo#?IdCk56BAiKr-H%w|%N4lv*Ty?|yR4upkV^S3QY~H8l&&B25 z3u)_-9xWuAly+w8@^!R26=1ZJ&d4K=bq+q1wR@}+-q|8&F{v!2C|fc>B?Oo?^ojS5 zSRx(7C%D6q-H(txpsDoyqJv>pE4cMswS?}x{9 zS}&uWo^^k@2{!MZ>8h~_JgobQOBC9yyM9uFEOQSF z?5;rWpC?q`(G-Z9tjsIsgC(el-5$u#=ry%GStd|)SK2=9w_>7{nA1aBrBzvacaLmg zo`HyC#oC^?qn=QA)P4FjF@OcP?)*t?Z?VPjMf7G^d_>4phRJi>&OCQL-@;-6H2!Hz z6U678103n{%;U(gP{CTrd5;><*uD&I_Dbz$U}56I$gzY@lB`b~`NY`l)yHSgTJh_~ zDMuJe^UFh~o3p?p3HsgE#z1q{{U+9UJ?G-OdsObD2uQ8%Jvi&0uB=RKg8#|vm0dee z+5}_*`1&dCeK}5>bq01DVDC?7X94Vhqa!C z8BTu-Ds=y9VeT%p3Dn^zdoPgddOmKRf&7NMWcN~w&BI??KNwaVtFx<}V-0S?XFV;gVO^ayF}L{9^u8L< z>C$%rwpZO>8c`xYhVv?UUX!!1#b9R8mc$?;RyN&pF6)Lb1_{(S_p9NzFmRp3h;Tpm zxnM@Z|EZzU?Q#mOb2IUYi^$wI7K-ilhIKhBw}g z(*SsuCchTP6Y3R=?h@?`r$4lIaIoeBOwHM#JafP#0OG-A=z9Gnca&8_ooVB{5-M_J z!gbu-W>j1!yWj4Zm#5DmSQc8Q8D4}XonNbkEfO6+3;z?a_R@Rg=DSh1TxgGS)$`X=%ydl0bt(l?>k#LMC}LVNE^ zM2)Y36va89Vioxv^(oMb@}~<&abLlc(n?X2|BuPQw~^OCAIWGarl$%~Z}Pa*>7hK} zl@Nyp($-}-0KEx;!fyg!0%9bet@W%ACNSBVXG`e3VT*@Fu^WU^L3~-`l)h%%zHv!{$TP@uKZ#f|Lks zjx@wAH1*qqGEN?q|Gea44FW-k-`J(Ns^~?p}=z8hk+gar!tvjHyi=kn=}&0l3Z2s5Sh2JsS)<#BC5n$`4eOMtYnTui{odZ8K_{Tg}qY>iVn;* z4CY>ea3iWa55Qv7eR_>|$WIUHql3=;V688VKR?F4#sgYGs1$K!C&Ft^7PolmXu9fao1nM!c$gF+il(dImXv@I%MRaZ3H91FCu9kA>d{|=(3OOs4?sze1o z9xo6hgB?;D#-7JgN$aGX9)tA7LLr;EP7{#hllY(2o`0 z%=KJn^i2n=tiOXKPMy}T-8UiMLE5Qjd9yfTRk$^aYlsln4I{2W+@dmfR?Ti}vT2Oe zsCxXAv71x}C5tEEnY3yJ!4s(yP!SGNhRi0`f|t{qqP?@*V78j17j(AUFEGAJ67S4q zP5IBE>lqY6y6?Mh$LAnMyKQHW62F5U03P6#-JtOaHy7TdeBaf03evc8F8=oeG^bQm z%=vm)gdaxf)YX^o85ZcdER&}YO>q0H2CgFwB4t9>9DhsCPB%;Y5JBGDjr&}s{1a6f zW<)49JMX9`H|d*t7)q|wRO8dwxk-y9)V<{;J3NT>lUNI=e@2y2-*=FPhgryJU)_(C z?h<59t+BIjo=GpLl5rSn-G@IS$5>ODii`MJOug{H4wMfZ2wH*c2^ED#?rjUKo__1% zAWE_7qf>@r=vwVvKHGI=5dxcX$G;|t=KYc3&hp#VLSg1-h4Q;s+VcjB7W--DbNnwb zUxNG}6Q8%hKdLvo4cgWwK8myQcFnkG0N>Bv^)cLE@20vGi_=#__s-5SeP*vDAS)Gy z?m(}Hp!|D#ta(c#D1&J%@UpJ#F1L*9h(E6prEw-9AMu&r4A)?sNNTZx&^@azf9^`t zv*UsI0$SM%mA4&o!%+@Y*0+--Z$Ba^O19<)hqsTVyM9S4?AYZA{7Nj{LIpJ7|e`A|EI}7`Z!mb7{9m zn;yhmuGu#%Asr8*-sGaX#)~;ws`=Ja!Tj{o>(w$6M+og^s7Q2L8Kg%Eur3~t3_0AV zFCIqT<6@avNtK2g8;-q{koCraAYTeO%BXRc#6n0XdE9mu>3y zXLO#`)JBjlKeQ=$bm~62c(3ccvMZLOPRE*$qIMl!V+MBBe|Dz`MtL40D`r@-!(p_G`l!qfAAbRsP=x`)NUe$@K%uLND-^@sQRrajh?Nl}JNkTIIM>q5}Do7Gs z)@Q06y0CE}x($-4^enhcHe)>O#nEn-zzU+e_ktOBq5>V@bPnRLP58WQn1TYg}9FL`;jf$aRg( z7&+TFVKWOdogn}8X?t50yF)D)qjKkFE4Y{TB~^6#`%^m3&IL-K;XO5Ft#+Zxr{Dw~ z3?Y(K(?SM~rkIV~=Y}n2dP3{Pt{>duyYdOV^}G#k%UxGTVsA~sLcw`%iP2AKpHn?$7^Lf6< z)>+#m9Q7cH^pdNjg;zaY!{+R=W-7X-Bde;H1*i9}xk8qi>Lv}lWA_5@`9a3oI!b9G z(d&biaco<<@jIhqt)VyMk?r|1?-|!evudNm+KnyNBQwZjyDg7U@fO3?b=x@JEy%>c ztJ(6e38LSqa3<%@Po!Z;nlEc0yv;c$f!RJ3eLXkd6p4ywnXK$Fd(81+vefK|GAO(G zS({01@B0(>e_ZuC{Wy`c#u$v7K&?-B0-D06e;cnf~JN$6n8IPT#FR<;_g=5 zJ>=Qz`QClLvG+OOpYvl4Miv=stYpp1dC%*;IaX`9W>H&pmu1cEC`{ClQq0}qlFV%cV;|gPlSi2J(SsSVct>FABH)Vv6ZHw%a_1+b(v|; zd?*Mv+^^Ssj<{_|Aw;-0M@blprJN{{#Ig&b2T`eziVyzANcJTr>dF-x8 z?3A@iri#N|i0{-XIcO<(8>f9z%bcapd+$M4q>u;7N+*H)_tPJnk-vMddcV-+sevyV zFEiX`%Z*^4t>y|kn(LDo1@;zkqGi5xN1mrmrt8V;Nc^q)D9Hdc{35(JaRuIOueq?c z;Ge_!bOWgds?|4c<9?QWgbME?BWJn}4GZR2H5wYA_!Xml>mzQqM7svkAK>&TzD&qREjG@A`69W9~hptO5|K0qY*@dZQ#HE&*jP(-k zC_%Nv72hfECX|VUgs%G&>bUIMXXBZUFn(naY4?wD4;VO@hnl=`i-{;3KC)Njt7|fP z6UNn(P*egZZcZIX_&k#ayJhpO)>OR^Rh2vRo}R*GQEN$jdu%OuxH)OX&9 zQ!UT&L2SNteIj({4c~Bb+M{-E+OUeoI#x)fOxv4Q4`Cw;- zPhDMyUH=q#E5UXN`#to;qT%DgSz}O#8ra8Vpavz_hOnlEcJ&dd9tRf9*vnMd$A{bB zG(>LaL}hC%HKuemtimWdBd8C{UL5AgRLG5za1Wanh3U3&;mMuj=>I z88)uMd-T`UEiT{u+GYM*dUb5Dyxe6X`xH+Tl{edg4C z_uABP4_lsQ#u8k_&+gy75(_j(SIUTds372GSG^^(m-|sruZ)PSu+R;lkBEFaNuYU)RIjtws zqL5$Xy1&OI;vbX+QHj-bj{?*ms-PsPrlB0yK+FDpI?&&R&jz3At{Cog2i!Xevdb-l-bVjanlcfvLSYC~BaCwWq zR^Cvbe$-OFizrjJ#aIimGODImgrds0Jt4Nvs@U&nwn%L@|3L|TDAy&XF)I6ElZc*9 z!EGb%>JZ#;*Wrp(0iDH^C!_I(scuj)cPv+ee)}HZWER_>FBYqL0?4akL@RdM(IR!DJQ`FzQ=*>+!V zaIGpsyNLBoBz7lQv5U^_)I|0!dU5rbUZn(KCi2t4|!+Rqw=+UQ@%d)+d8 z);DE&y`%70NlP{s(1rY-kx-PJ$`f%@aaHrAu5-p3KMOT**Tv*eqS0D9@W zMOTKYa4uh5c$eK{1MP^X1nFeG(?hq47mAUMzV2JP3wQ92=Cy$8V4(yyAtdB9YGzn! z-h8!H9_39qwLII`xApY6&zf7OQ@U^n5X5!{!#*gNg`tXzXWJ$0NnWKjhF;TIc6!$y zG-{5rl!ObX=W6USk`KXzdRt7>?TQ7~7LgM!WP@NgDN4{AS%z+#Ka=epxsZ_8SGk`4 zYmRKMz8l1>M1GBQ*(>xN(%3ev$lit}d`r~hkeJ)`q$fW|cEE2W==Zc!>?&U3geGuJ zueZOESNG6gBY|&Q0$wH@h*5J}(X5dC)g={|)13?J%V+5fg}-WdwX^uo1&T_3^aj|G zcYTo~{xl?HMViHDd}c4~O>^i`+{Hn7hO*lCT_n#7mWLaX2oTY<#=lFJCyU21&^ga^&x`leZH-?JC^66Q7!Mg zQs#MgKIFu8u}u7ryvH|gi7Az?(hOGgKH|EB(JogD{w$@x5)ncq zKfZmJKVp%6dv>g*85p3TO!Y#If9iN5{;xNDA#JyilQXsD@fG+rRon?S**KO7ohInW zKPPwZLI6O)tz7qk5{~ z7q9WqHnaJb+l|1WVf+oRjSh8N{f^~=0G;f+GtWqmMP;%$C?iR5un=~}`UM-3d1iAC zXv1iYN^~sYX^oIb6eMCX16{FQ)0gMYwUu@Wzz+I1p9ku9Zt$DrE<6IaI$ivvva)@{ z4;6T6a`O#s^@0~9^SIetkkh53KWD+p2_Trh?G6h*y+v*o=aDD@gYK) zQSi3|1&(y`_B15N5itabu*pK3RxjBH$%zh{-H9mN#?)b%hDVmY& znDEJOv+2Xr*5sF4g5iyfRfUK;gEU!+aiKj-ba-Bdp4N|LnyPT!n#|M%6fs3+vF$3J zy4L3E@V*1^dj`u!OY^v$WAUwM4x8ViWv@f?f3-$S{Y)9g+uq{#IGxQDOnm#hw2k^g zvf?}@DtCG-L?M1i*{>NADCxTXsvM|P=ygttH=cMsabep&Y4QyNmsp+MG4D-TT(+DT z+tdZCC1$Ql&wmmNL`Jejy0jzav9^R=0Z6s-qi6{asmc?wx_*dq2R&w#`+w4Vm+#pz| zA0y@RfF+e!(@wAP*^4lzD?g(MzgCB4?rj&IUKh#)9AWf~IbDJRJE(`4v)k7GP&tS_ zfIv^xEMXJ%O26Z(h5eck1>PT&{p1cnAo4gDOCQ?5B1v?Ry=_2iD1!8&h}Ia~ycCnp z$ZOIcBrZpvYUA8!=vA^SU-OJ)O~Q;hW7@p*H+g!(pYlGE66seQwdLmwwIoInC>R}y z9-T;_&*qH;B=i&DzLF2caeE5)+ZL@{W_{E;GuLfwHa=D)BJLF^YIInyBQM7VMiylY zmR5R&mQHCE82kfb@z$@#Qw=SwN|m@@Te#Xyefyp;H;~Zp!7s_*!CS5H{0-Ln*PTM& z)6bqp72e&mFGwA{;m)L}uPz5f^bW-Kh6T13j~+~al`Y$AD3|1^NTE8)e$vJeKiP{j zT&16Ntc&1t{&P_KthehCOT`U&?XDelAXq;0n5pq&OP;5;#U#~X^O5JAOa;nq>7Ov2 zx!cfAs&Z+&*v7LuOqd9EPiY$gr=rucRzBwgs$$Oy)}A@uVP{YN$2UHlBm)rm?OpMm zhu)O95LfT?mQE5gNTeF;MV6Yk&a_^|NLphFf6*)`ehe8L@(nV(2GmFT@GESG$~&qG z*_^+FKH{Wm!FF3r89 zjEl7o5~HUOKryK*Q?z4hG};?J=#)U`+#8Y=%Kf2txp@wQMRqqDrV=F?Q2z4YjGrWT z**56;K7LNHH!V)*HsVviC^1 z$g@0+GHJAGIvT^;{-#Nxm}9R|X$|amRoE9F9gX=y*`q3=L(EzuVKy4|QVJ*S8u54Q zE_=lq#;Y*^6{^+cVV7O8&4AYTWr>Ys7{{+^dToz@{AVC{L67_J5GW`AlH*&&d69u~ zwoLpri)(WFeaK!IqL-!s0NPnE$*uI`!(%>XU-lp^q9){pY`A&Iw3Z z_Q*R5a9;ijE8-lIlK-E#eyV2SH1j$Hu%;(GZKMBvDKPkZ>ncv*(Z4=5)wCL^Ae4_( zlD`XPoMy*1Hc4LK{*2c{r^WliH%-sZpwz?=yS`1_^*r5=zmY1*$J79u%F6<}HyiSE z07#R8#1)l)lJo<)6uwD707|AksJ-JrT>%Ovv-mNUL;&Alkv%V0#Z(W=B@mUjE_%M7rnqfe zK!__UEP_{z4lVDMWlC}-%lilb#%6FJydy+@Hb(r%Oy)4>oE7o89B_kq!0@OB zQnEWjE-P?AmdueO+S+i>xROO?QHEzm!?Dp&$P5{B=}=vA~|g{{HF zR|2NTX$pATt?^Lsc7hhyw<|({03hV0gn}!oQ zmYww?Bycz95WhQ)tB`}n01*7YZDA@;|HrdO-sjl^+ryBRtxLoJyYjG)(*$}K1eQBp zhKX)9nZISHlZ#mqe`KZf1} zr7=C`m6`kERD&MsOAE>c#4^ubza>ziMO?!vE`~5m^9@srR|%pb#}r6F1Yy zQur2we@6I~(j`0+bP3?74IPgxK39_b{vULZ*Pz4PE|Udi7dKkV+dN}Rt4I$pv2_^4Ts88 z(~(AB#SLf27F1-tFIwlJDevYWg&B$cYZ~U1hF0OOo$Pic2B%%skVqC z6y6k=I0dlf_916+a0fulwRZmxio>H`@>5RA*uRPjK)f6RAn>{vPb5Qh^2o8t9S^*b zFov-=Y_a=?-Y#zLYWOK6sE6@HF|*}&hH^26Q!4{+Nf^PC`s!qc&c$Sr#Jl1Ak-phH zBoIdFVNFdRd#2H4>D19+BNbUMCF*WPl(i0 zUC*@m-7gJ0IniY`5Q_Cf`!nkuR&T_m)stp9ZwwwJj#N~zY)_2alxbku+-)DrvxgIK zj^Dh63KFL848VT{c_Ed<_v)kYV7~Xq6mVh4sYj%xz~6`DF#cTc0(gkL+f*+2m|~&536Y2e)1V(dtEnJINRz+VpUsoo9X0%@(z552b(2NkDI1*&b|%N zOL`H019JAeWHntE>-+D?or@}qBWJRt3bgdvDa&fIHm*+?>UQgy#Ptyas z^td+O7vzmjKMWN%=~Sp<-!sOX_k@5Fl`%$m9a{3+evru$s0C~nTUm0dF`JkUUx^Rc z0;G+le)+wlRkv>eV!D}g-45T97+u_1WHYya(7-lB3k=#BFe5``eY!w~*X+h&nW;&l z^#sZi6PIK4`I+4JN5zhVcz=5yNWyypn<`s>dwsG^x`*_#0ez9+T1lp#W-m;)ud^5+ zr_-Lb8wUBJbRCdhR%E0A-mUF)iKs^M#}1~DZ~P8idis7w^AVjDoS&X4h>d={g%e(d zRaz@+!>n*=KR1$2x5MSg} z)r*S{)x#{fRDZ?w+ht)*obVg@1qUGj;M67KBI|twDAD*_;oHY3G5NHMSxn_nC34C4 z!h2PgT|yzl=pJw8l*XisHRxo9MaCc>#W!;uSQ$CX-5(v* z8=;NP7TtI1inf-KOa9ftD9+-~4~=gTjMSbd^{{u8`Cp{c1Ei(aM$%6Gdy!{|LxS;l zb&Y^#VJG$7@S7w0rZ7J3Nf9;+j!HkF#sjNtR9j2k$fwL3eon6waUumsf(|a^`95=x z=7KUdj5%Tq#7k+RepOjRr#W=05xKO?9GV;3Am*M@{!2)!rujT*`=?rY9!3cBK<$v#t2e{2lb_s_2^kKBvRA6(e}0lvzDcn>`;bbin7hsMNkTD> z&nT^88D!BGGOErum=JS^A;uhEXn&Ab3nvw??Ox=kzCK)7CV_lBrMi0mXJ%A(13^s? zOyDNOo zYVCsLl+;KVt2(}QbBlt6C}*$~wz=CHZZKDwJ+A8=1wQf@M1m;}sdJBv%$zV6|eO zEnE*E5W@|ln7Qqza=WC*q9QNekdRrZ6BGV6xGP^qOdnM%j3^ze_+iMM?uz#pF9Pf^ zuGh60!HhlE^Yp&#*Vt>>Gw1ZzK^Vu&+%~-8ITXxz*bK92cVhBwqE=H&B$IMUOfqlW zvUlxwQ_Ff^e_={H(J=sj-a=c8#V|6FnVpniFjgbGM?DMR!MtS9s^Rvmevwq=<&$m7ss5LJ zWh~d>DSs0Sv9rp>OnKW4KbMJMY|~}UQaYJ?(&$@;$tNBbA8X@%ee$!^h@a5Fkh8I^*2Wjb@c~d2{}QSW6p|$ z>IN&Ul3>{JRNGMmibK&D(&xC!wRQD%Sy&B9AI#Msm$Rn<)?3i)d?)%%r~!#^B@3c9 z`_KSRQWUK!xXg^nCW&<=oHx`JTxPJPv$R}T2or*~w3(mNf_a8-V_r&m!x>FL-Q!sM z8ZV2eNls~ziefP<#_NIgguy544h`0cSn-q7Y}dl^Eg)25nc>o(iC98aUk#>}zt0x> zB4?FObBlplv_0`ZS#S;^cV!z-lEW%>ZH?aw&IjJn^_;n7@0jK!C@?((%Mi+@U7kiZ zHf$-?*1d_TgED%WZsS?azEj$r_pQ%VEUN`|w-ZfT{W0e=qPy&)H?H0Ws5em`2yyH< zHXz50sE=mxA6A;4j(qjZHqz%$>cpVpJ*!OG&hx_MJ}2uToxHu^@F=b#BHs)>xww9u znWua`ILVU=onF_2XG{pZZe4~&8%kz%rk?{DnVz`QQ=1Z3EwnplGO+mcTbA^y|3O+1AGA}f#np zA-sJ#zL}~0+w2a9^G;ldN!h4QbK)#T&}?ShR+}zI){x2uKLp(X3OI>J*6}P4}~51^!Q(t9YMEps?`9$z?d@?~|o zhe{CY$t(Wg*ne4Q<*D7X8E|Z%_V_!^u%f<=qI+lgeEYHqEi${L(na|!AaZf%B-It0 zqS_~pNOArI72!LVtIqUP^XCiU>gloZO_Uqns>sZC)O2o`l;k?#vc_Ki6*sJEkjr$f zB-L$0nNF;yfp`Ip+LUvkGu{>52H_9~C=*-NDWr*lwP^JyF9l<a&I zq^utcS8(C}rjFW8_M|P_uGnUfH<}iffZ)u|A)HG0=T2$uutSp<68BIC_AUx1kPOTG z-i?5xO}ZcK+qbto&;hjj=`xRw)Y_78SK~N&?y!wtN(-l(X?UW>M%fl*?eI*aGw+~l z-E;Xyj~jpaNgniUy=4yj?%s!>mFe?uq4+mQJ-Pz)>>WLE#x1}7>!l^5(5(gH)C)}g znd+Dk4b9bo*+fS@zKM^VOMksD!H%&RA}BV|*O{9!ga>Hd)Zg3Xr6O_;Jfhd4Jm0~F zwuLV@Wzw4$#k@-m$D^IO5F$SY{^T}mk0{(Zgwr-E=+*UHDQ*j-WT}&ee#zXO`2@Nd zJp@UgJso#MRQ&1bWoSlerbNffK+3ex>0WP~f7gT2Y&BY7B2f3=pVwctvqg6*5Hj7YCe5>~hP18RPC9ai` z78VQbd{Xr^bP0=2FlcDxJqgvby~r)lP-fgv>84~`-c3V?TUYN!ltx9} z#x}hF>Wu=SxJ}Fu&^g38Xmw${5NzRb$3Bkj7;DK?=+~lSm4k6@MKYxhS;nlylHo*{ zomT)U45wh(JUJq|d={&{GXcS{atDi*Uo&%;y!_etW(Us?$Rf)dYM^YoTg;zz*1G2= zOr&d=EWYS2_gJE0yQ{A|RMeeYKiE$yi)*AW6)3)E=lSHiz`SqJm?hHO1kH;EgBJNL zG!@PQChib*b?gFe+(kpP@|YpVyA9O~;x05Nta!Y=-jZ~68aeYQzA_jdHHSimchN|M zJd1TF4i69hMfx>zCGMbVX|=dkO?^RHiChGak5C)S?jOaGj1U-0xM z_L(C7+7y%U)nIX$b$-gHlTY>^lza?d^&tLGe#|UlcI4S9rAeys2BGQQsO*t-#7(xA zC+R{$@wX$iK1DDFN+b|6A_~FTe=h}#Xrj&RPx}+1TbpL1xGNh(pk9snfKyGrOv-4x zBl8I@+fmn!c`wuc&};nVT~*G!U58~$U1-5+%HXp4;9!+_mG)h?r;9*lh8??j^D4^K z30%Weq-?;E7Iv`D5yklQBqOQkae{07mQ$4I$yu-BF-XY4bNd&p3)E#B~D97gLFQK76kq&Tv&v z0obi&cbm!)sjN+3pI)v?yCwdWGDdy))9mc#r=nNqrEK}kiQr-B=!?FZqYdwPv=@mQ zgn+|zPP%2zX5j;BJnF7_*01V^=|)qY*4Flnr97}<<=fA}ii&-hTj77sk{T(ZN^{}? zsSP2US5`vHh3~`7b-~bT##6fcR`20+@XBzNt`fLzX`&T$bcT4l>D0KE`6sW|l0~XH0f6 zVr(&xprTzc3%s^4?PXWLMEn?~q76{LDkuIzQ5^GR7=WQSs{dbqP2TKhs+9mztIT2q z+CB9iut)rF56GMu$hH>1L;D10Hok)V>(-r(9OIDHq>kP?shX`Yl$z7ym8KUOn5WuL z3r6zc1v9zp{8Ynw!Ww0BRGzO;{DrxN7^TWp?0kT0=~qPRcK!=;mX+Di3&5~y z;5EY4wXd|FaZqs2Kdb%I{y%bpPmurf>3%pBBHFR`X%zw)`I651&`_*p1+cSc`k9+! zH8m%7v3hZ}0JCCyoGi$-gPzLAv0|iE_9Z|X=g6uBSc=~(L;mmA75Fjv4x>mO_z3fV zc**6!A(wc+o#@>C5Ez-$4gzY*W49WQvi}9ZL)2&z&@C*a%f8m@HEE!R5(Q zDG;b<83G)TP5r=(rCH;+SE3iMYSg$nvZSnBbE}f%ZoD)Wiuz8G20CiP5;fDfloyX} z8Ly_H6stbOYubG_hm-?Y-zMqzI78=qh$vqO0uyM7>4}!!FN)iKczx(m>Hfot4VjSP!WMo*)EckbOy5CZaIx!DHb;s0y`32?!xNVx*lRxN*l*OmNC;Off zh!Y6^2Zc{5%7#tfAkgAaTcc6l^R*L3mo7(ujD`kS=rkbcgNMD#_>ym)YrI_Do-ubM0)oIho>(nsK3}Z zaNdw&HWGjN21>t$fl7L%3#GluyAnBBcyYDJBEAOgWjQQ=&~YIrl43qGM@rg|t9NUZ zw9aXNl5R6su;5jl^P;Uab2mMeyU!AMkN?#ElXAhB_vQPYSYJ^Th{|*Wkv-2r`R}2f zz7P0R4!-Z|e?U-%|qY?;Xs`_~cnCl2PwlU*>_f7um;A zuU}b8+74yq?EWfkYkOrDnu3Dz8U~8;^&`TTT7QvUJu;S_`nk8W(^0G>Vvygd7Xs@z^e zz3}(+c6awgpaM~>i6V3Ktcan8*LLWIns~SFPBh}~`zoENd8xrXk(%_gmX2UR`ogb# z1zc6ON)ZPB`WMTxBclp$0gV*(6Qh~1-=ml8M>WhyxvEnxvxu8gh)+xMzDul`stZ);u^5n4X!)Zt-NEg3GFjZ<+?Npr zvt05kI;;KC8vDgRu2`4(z!WyeQa;OMnDM<GZ@B?yVWti224>RueH!R|>{gm|-Fm9;dc`77d`r4&dy`+!ONm9CFv$g}%&Cm_p$ zs@abxKP6uobm4hvDNtjZdJmpF@9N*zqn?Xb(7_wjuEH2@5f;gtHlN5_K@aALNVWQ0 z<6eOG@wTLXz*9Mjd$6b>Mfnrdc<;xu;<0JkkBapGk(6gz16@~7o4UvfTKK|Tyb}!~ zRpj)RP4v_qw!JvD9H^Ly4%#F^71{p> zC9qc~(ir;`&udZ@4eRSqOdM%eNTH)XAe{xs4B6}CvoL2ebrkzayj|4=1WH+^GF?iW zdQH^v4842OL(z()U`=zhZCiB)?Eordn17A9Jcc1lk(!jbY@>Ee-^276FhXOd0EV2g z4WN1Tj=qAqv^&Wk}_L=&of*to+8kSChH+($}dU$vj zP})+g^>wrd9gZhHEk$VQq?`!Qmspxwd8k7bfniBL7H&P zT}7bRoN4wc@!=|neY!>mJTqIZX{~H0kLk_7qPA|CZ)P`sh#w_0y7jH?MyR>K8;%S8 zYz&^=hkr_l#b&)C&)*cBcK$fZ?!W=`nWK2V?pS?$d7x!l{bOONBb-0yPww;8y&wOe zcpy~OH(;|8+*p6m1t# zkt)M8lhQ>y5>D8>GYg}FIS3^%G45PiYVw!|Wn??sqb5|(*$YP`S&}c2dH5>ANgiMR zg|c!gp5LG`eb94Ag(n0*w=G&#kw&Cpkd`+{WaG1iL;KkpB5)Z#msoY-yLR>p{SZA` z?&zELbosS>!bp_}w`o89tk8Dm&t=qk^EuE~I!9C0RkKa_drE`PHkfE9>v|J9orn*> zICNh_w(5SgZ@03O<#Eo_6&C^jO6abz!*Am(c^0)x>4UHY7Fp+9 zJXeIdl&z)k7SBjR)IGO>WYw;trLgoY7opLbvM`P8R6gB#+B4tloZu{rIP6}d-` zyai{E#oeAq&3GV`q{g=${%e`n~uCpTnXqG(lI4NvOVED}#zFX7X>jG|%-a9x^Bqu2ME?JrpCfl@kj@=Kb? ziMk{)qr@nd`w%cehF-fJ&R5lXc9fTt7Xg9Nn&S>+XDOkboM7QCFpk~ z=8T@OXvJjM1>Q0WU%^db`taFFG`LOvNqmD zpW>e~RKRkFk)+d4_%@3H_4T;WW2eH^+PWB$?RAgYU$YOqTr+Lz6Fr}vc#ThjaE$Iw z^}~sX(TUdsvDE}tQqJx(_lM4n0*f>MdL@8JOgR5Q2@bs(pz+X)?ZQbD0YVD>rqH(+ zYS>+44pY}DKn3=#QA$kS>IGxWkBeSw)~~rCJ%7v=mwV#+g;Fd|=W;4aHuYLZgkmD| zGV0pkBOBtDOoC+|_7*hjiGP%{6j#;N`)aw4`w`5Gk2WVueeer*y#fbGoZv^jmKLG7 zoWyP?*0}x=h-h;Gj6*d-rKvv6OjJ3vtvS50T^g-=GrdP)QRqOM4@Y~wU4d|;EGP+D zL>vUOsfo;ZIts&(TTlPl&Nr)_!-zg{eVFRd{`1T;D19X$YwOm182uB);B)b7#HjJv z+UL5^>(-?oMV6e1pKDXBFG~wyE$n@D9yqk80gje!_QtV-Xn-?TxFuS5+UIdZwZK8_ zon|My&(sTMu~6ssL@R72j^|9=GRDr$^T>2swl4+pq!!YeUyd;iNZq9)=2Y}9^S0MC#uOuYHOx@pU zWg8NwcmJSBO1Xt6Y!=uTt1zIbrzaf#*7h@lfA8Iz>SKpGcPM8;StcdJY|!2c^}29_ zB*HKsru^kx8|(9+ z@s`^@yd#p%Auz4+$siqayx&o?PjJ3SRRynHYqy;sTbp@#-=mlctJbnr{W@D_dKbX0 zbI<;2l(~xntw+d9@0Q+Cxs18@8=qUd)4c1LYU=6m#U;F1GPDXNNOu|4T(Q?dfgCp7 zL``SNEUaxA4x^$32}3;6-P4RH0 zEINQ@7%M($0{qWJAU4HIcm?V8DdjGZB*TojPT73>z@PizH@+O0 zlmeNPPF^AoyYA61%gvku2x!!&bxuxpY^9;^N{r9=ID>1z{YwH)`Dlat_j&~|v#y&) zmlCPV9EwIRD#xddF^HC?Jw3ss#cbOTLs_!Re&@ZBBdwS5rIl_9JcZPwKJ;!*jA3;a z&)u!fMm8H*(~lOTGX+;3Sy<^i*eV|XLBTZY=FX)RdPR`P1f|%zov2X?@YOba`Kjfp zD`H&H>YGovQSOn#q2Xnv?pR}Z(Y}%ir+Z7MLPM6~+%SzVT3RbGWe#vJA)CWb>j^`W zE@f+Q@4i#IF2x|~`ppX6y}dY!Oq8u@Frz7W%c9-+dR3{zji`3+T0E0E6>amv_a%t( z!e62MKSwd^GEjC^0#8VmY|%YnIQ!w>JP>GDEFdW0<*k;HClHHKcZ2>|mgqCJ!0trD zAwuE(ghENS7`^pm@DQ`7dBbuf2SvgYxmfR!I$wBYrqBODDO1n+!45R_fK*SNDfZOq zgX{~oMR+G9t}^hy(>hx4{|8aIZg4(hnj)090ku!zoxCp)Jspj-0|?(E-p$Nl6ihYY zy!@uevg<;wFh63=*V1>uPF?vwz>Y=38zZ!jE`^4r6%*}=_H{)%e8vA?np$PV|EL}> zpH}wS4v{oi&qy@KAzk{~ReD=9DBfp4a1XYCUh^LSV2?_}OC#b*&|fx(mb-w$eeZ{W zk+kS+jIA&!jO|24%KeL{D- z)e(u5+sQsTzeieWkQ3mApNMRz5$=W8R~gHCzDgoE3`Q|W%lhPNQ8M*kU{T-Lu5Q;g zf77jmo&9cHp{e~X{KL<;K4)fx?0vk~78o9vuZk8z-h6TT?i!$K0HAUI<}zUshIZ`D zE&=8bIRIu@hMH$fwUL4fw#r5Mf{K~tOZ`eGO8KHSLFSie)P-0k$L}56Tlsz``xm=_d|o^njinFsn4MRD{dFLl_$^WjKc|Zrau1#eZ%CB|Z+h@t^~! z`e}gR-+;#V7lQZMhgyNlTY)2|eSTZyDd!u6BTt0BC=(N>d6TD3uPf0~a+u^7-@uBE z%;cOLe4H5IZ>}|k&xAL+X_3!rRa-`%58{5e?xH$Y^Yi==73O}P@wGL#S1xkpRipRL z9bNzDHpK>4T3-YK6SjvGZgU}12dkuXh6tt3evhETN8Ge+jGCPH< z^4J9OZd2lak~EkGat8cIQn6#>VJ8mcP!ADWx8ah~$%^GG6PteCqVz(uzOaswXj!T& zD{Dxh2a<1EPxBn3yE}%PftkLIz~e4$CtIb#JQp!1w~oea?rWL$AurqNXOgmyl>#R= zOCt%Cij`k0FXu#_hO1b{czEQRLmi~Qv}A|oknZ!L7y z+~Mmjv5<55jLlWh)epl@NbY4(Yw1_=|sMP;K!S?KNaiN69<_oGn19M{C zh?VU1krYR8$FE}Wj-uYD#34(tG50U^vePNU(Ce0hUH$vU8LT|_KSOV@+KuZL-bqPX zx?*j6?kmhpqz~B%T~t>DR46|$;jXR`N(7B95@=^v6$1M9KI)*I>&!th!)gB2V#SncWG>oQK)w}-*l+@=rrn#j)?aR}#8z-{&vuER(`F^UwNLZKFUkA;Rpj@| zGU{BG_|U}Ut#P$uYYQ|IcXu`Wn46E1<_UZ*=$WgQHmp_tH|6#l zQy+9($*MJPDn3@v?Mn&?BI%^Tyqh$cljaxhD*5EOn{d)`pF$diV1|Ty;}UQcJ)q$B zxxF!I;0@!Av>XxMkIq(_nBZUXo~ih@>KJN;Qj+*nq1Z5GqYC`?qLeqe?zm(>Vhfxt z8;x9f*D7^!ui}I5cCROtdv~zAW$^3bI1k&k!Y#?2cP9#1B&92*1-JxW*xSB))ra!J z8^vD#46?<8hC(4yj#VYkhM{M>FCWi55xwKyCI@ zw*L9P8x@Os8ccF|QvahTXIA)9eRL;m#rgVsJ3A4%;Lq=S;70W6K;c>Ho6W^%VPE-c zD73O$o`tX1bATJ8u__i7Ckn^cSOMGPdYwPp@qPo5@vT-6t*Jr*C>yh)bzRAHWU}nE zv$z5Eo#-Toj;<}3ScT?m$~h~2Tlm79xC6@Ms-nec+XR5tIAWuqY_{o{J&hIm+*nM! zb!K_S1J$98emd9LB~@^sdVE_z(ni`}FY?}TB4Oz7VDX;Eq&TRwtH2>v*_Ad7?k*UK z=!w+54M&*RmHxfeO%egC#EA)kj@Gh5eH^ z=_kH>UD4E{{!}-%XXek1Ix4JwF6M_>YXg=g)yIKU=N^^mE`;&zZwbz_)HaEwh3T6G zlnw8~Pv3*RZiZC8^?8%<6s!jZH+_CjU2SdmnN?h|J7M~|c)?CE%EuY3_mR8#xqR2Q z-=x0Pw({WLM?IY?zSgt;&?zL*cD*YqE+<36;Ng=hWneC~4=p}g?#op)UgzL>Z$2J}7Ji9*%0lQR^qb!5$d~r9aay~oNQ>Rr| zBX-zf*04oJH{QXgweie_an?f3yA*W3zvrDruiE>W9GBIf9R$8n=T}A>R8M;#NWzKC zJ%U$^EvcM)He_xLJGe*7WgOlltYM6N1tr=lZ>D?A)a%o!xp2)e_TTDYi(EkjEaq(m z^{5NK2^kW_ub!+}*&*)REq6R0=f~`EpBRr_wiOZFHK8d%-;Kwo4tITVlD|dYBE}SG zUyGTT{(_ABp=W7qJEKh^z*)|ZFc+h%#Dc_@nev_sG}PuURHXh^@n5M4I3jqCq5a2S zjC^$a_g;5(=i9)KPB&pUsQ|a$uSy{OWgK~1^1IPomXcs>@scE;P)g>a-9C}hhf-Z{ z_Ox!%vgD7aQ&l6s)<<3KRJ}>iefCg(SbqKn#TKab*_y3!wfQ3P_0$QR;fTq+B(Uup zuXMX3*Ik;2XAWFm1gR5gXcvjJx}b|#sZHxEWMMNtu1eCVGMJ7#4t#bl?^GCWjmGC< z0sqBhWl;*7>$yp5rXVT{GymSm{H3XXFYST@yEuNmBu()GbtuCf6IAGA>viHUZ4txV zl%+xYIsM1gxFI9dV_BIiU#X)(LcKfi%~W*R&gQ!hUtWD)>a&n-y`Pg_CnPsgS?qbY zKJ@Yh0Qo+jWu=|VHvPN1`k)>1yHr=msj~3}?bqqOk@6KY)$n2MRIa?V{#(12S39w& z7if`ttO={7Fu5|7zN{C7rul9wRRgyMZN@)SEqSte0k}=w{_-?Tl099cVXE8|U79Uk zp5bb#7Btp&UolLgI=UcPw9(O5YEN{pJGsnROEp0-d6C>-`NlyM=B(h+o@Az$uC_#< znsYbkRL3C%t98Ot0f7z)rlL9CK*)xLf)@MuL*EuGl8i_TN7}>~r}fa|gg$#-2*VVA zCN}FG>MzV+@zU>aRi&wZh9a7!oy9t7cp}#FZnS|MwEbjH3ljcv8o@@_RzfCyD}&+; zjY*x8nQub4ru*0uvrt>O*FCbx)lwnF#sbahqSTP&5iw`8y*-ZN zW4nEM7k(M>qJ_FeeoAFRQ4Pup*rlKEwi?vww49YUQru_``xku6G`W2}N-ss#MFTzH z(4W{X+GKlQqS@{DzbJd_sJ8ZRdo&cQP$*DbLLoqLcL`D?xD+T}tQ42v777K5yA~?C`CWUaa8nv=wO=>c3lE0|f)&{|!3Yy$pV4_7moKS%;E|BFntS3@_u|9D6iE=Xl1n$c z@}_d@@lpuC&0470Jkl`k_#|(0&3s$W@rs(j%qV}sFFQ(_e?)y>@`@CL(NMLC)@K{y za8@jm$_j7Fz+Q*v|7eok*j2kWfhAmS2u1Mr)zbV1kr#L|tjt-378qsCb~f z0O5?)k36>U(91BZZ74s@iKlg^w+hynv(C}-ZF3@^sIb6)PjnMJnu+&)fD(Q1H;BD= z_w;nC0h#ISS)#zW{L(e`DMBVzcEY*w4c(6=3=0h`zYWKZ^wwQQI|2(r-iA2)S&6A*X+J5c^u_Re6P79rMt$4Ox6d)YcE!_)Gz0P(zYb(|#Q*9it3imjeGLKkca$;Oejz_tF zs*S+4tl;3(lU@tMvoVGMn?j=on=@169LYX?4773(6eWYE8iRs{6)>Wz(T8o$ddV80 zuf~+%@_x(dVO%2v)nUqD4RMSTM1Z=`ON0d+Ud@0T@f*bIx*owv+g7Ydda@~fs`zow zPrq>hh0bNumJc-|FGtNv<5rLB3c5!txcXks^*@6G_tuA zs&Hs@vx}pdVEStkb?W5Xe_vr2AC_v;9w}Sc)t?k#RFtper%#+{vaunE@YpzTirgz; z%4s_4gXBZQzM8@A6iqCb+N`~595!@Fa0cD^Z7sbuAfHu@HYy6sh*uBIq5T!|(8XVQ4M^xA+iexGpTA>;}9S2lJgJmvnpjP4q4@vL78 z7boxSnXMkR5pf;&{svh#gv)mrfFn*;P_u)d!6r-JZK6i5l+cPxGb$E&4H~^Hm>rS7 z0OItRVBr$S?~A;h>fi95Zf>AEir-0@>=MEI@@G3wXB z7WQ~B)<=-k(^!2(KpOzv+bN6OMZby3iAzyTo#K_~C5j@5umDy~uv@Bgo~4$~yR>{g zo%XD}_$Nuz_q=Ne2F5fd7VXLX$%M$8>(4rucm4q3q6vD#!=$@x+sqS=%rqibjXMz? zua6K|#9)dU%Nws2nyB)oH905kU0gVVY4s~UL z6#rq}#%hRv?&u+r0du|IiPW7)><<_;@uv|?oC zcDpMgJ$;j~voCW}< zqDc;kZ_S|cER+U(DWG+VN56vTjr5M(&i|Mt^iv3^`pCM9r8w9beZHWbFLAkH7(9ed zz(-GZ|7*j2R+(jg@iWgvPIlA~BuGSAXX*o5%5Wk+et8a6*eZ=hY5!A9af=tK+1IQma>SnJ$Sh9UmG$gz8MT^KTtE18erU+$^43wmWZqc*sEzy%iqLs>(Jb zjdvyn_L5VPSCMy7j9{=7Q_R#Dbhq<Aq&2w9X-h zBbn}N?{-bT0A0xafTAK$+Ym0h_;vc_5db~?`6uh2qoDue1q^+ctccyHKQ>L0>xi1) zpfniqY@!JSx#bL`Rw~rZlU)xAM6V7!>SJNh}(aIx+Y)#yDOP-J6>VOS^4_;K6DA(I}OFWDT=(=08n9l44}UL zzftof)gJ#v!poD*j(W$x&@Hxv-?t@NO)z0YGDr1tX~~aW{10UN?Eeq4bsju1b$Q>lm z>4a#IU$ec+LQ3sRBI{C4JkBGZBYK%B}tRFf2qf1v<%Tx$5S+0gt_aAPsuvJ55JyENuYHKYgomB#ISOTKm405H zz6*n1^zHKXjUu*Q0QvjUV_-d){dpv)TNdnK#yr-wmTvY*8s77^yJ_C_w&@;+4Scq4%A58Vy9%?lmN9`Wnno(kez#~?=T&PqN0 z7%DY@|NX3`_*Rm&bX#4dY0(KwO^V8oFNz!fE?TM;yfw3b{!nzv# z;#0Rt%KQg*H0v$0=`x)Y7GcdK(IjD!UtG?#w+0RuYk%9Wi z2ThvA`UVS&BUw$~NXh4N2Ia1qe_0mmUC8ksPxwW3$XqETF?+RqM-ck3a($P&-m!f7NqxHL8!vfP{Yc_TBTomj=ULbZt{uM&?_W7^+o}Yvaw0-25s02GYHOb~!qSS6*UL!=YUwb4aA)BT~f|;p9rKedj zV0E9kP=64p0GUbhcw;ECMjAe3^RkO=SF+DIP~L6qQ6S_Kn$ebwj^dQKj+LbXRx!0^U)&`5QgD*aQqFr0Ir0Lj6ufAc;r*SBcg3okuGb;alhd$odp0ocLHfqltXwjSUvxTShB`4l)zKH!ZB}HV zoQcUN`!|`-tNjiJlz}?w!@G)(FP(2gGK;TfnFz^P%uEmFO$thR_o_u*-sp@Md=+Bs zKbG_VVu|)4`VnZ#HhGna?4k}=hU(<)X)sht%50~F&U0j69u?(H7^`ZtH0D(bo2Prq zvVDA(w!Sqy1sp^>QEV4ta?hY);${An1QI!+>D|*&H0S*^&nUE>@9-0%=|SYKLHN-w z5*YBe*1vkSl*DK-vVP{e8pCxanEIKlGN9XwPn!Kz$5-n5c?LyI-kJ~e@!u0RG%91< ze^_q4RWhwf$FH^JBtr#XoqN2ZLf9H0rh&+syxOocqHvZAYbR4D#_>)8MGL!$-u%tb5x+N|=sBW4OdP9eCI(KxN&zMXi5L%AhN`AllwJ8x z9c@Ji2nxyrbzjeS`EErW9toMtX;Lgk*aNjRG*$l4{$|6D8}H_pXuD@(5_n4)dK1RP z(vk3T5S}dj@O0`4&O5Jry`gqKg7VY&vcPJROpJ%})DjTL@f|2*^G$HpqNKM2Br;AAq#~2W@nChCx{|XN45UF@bv+b|zNfVgvF?kRPIoc27 za)WBt$8)hX_gBgMi28yIY{prh!R*KeUjqn3uNK)VU8K@<-q;>dZ;hL#g|T5n4;9Y3 z4iY@A_39|Q7Vp(?G*>-p8EXhsT?74!BB^(x(})dRHQBQIBU+Q^u`d-W2pdGO#AV^C zb*afYCsS`+7fuEgMNFUueIoz)#?xwa-q~P!5PHu64yitjB$;yUPYo z1$*{(uwB%V@-Pm$+zsq!8+>#*QF`_Ofg7#mguofem#Pa7rW&+4vw!NrjG|59OTz5v z?I7EqaNI-A_>8a(bv|{PI;SK&FBw)sm>2Q$eT9W6V`YUqAaXY7HUHLYECE?fbVr@| z%tB`D8Wo7Ns$E2)Tm{fGKrwzU(-TW zhFX+}ETTjnmj`p=m;(NN>PdleuDnN$=EZ(9NxSu$Ik*I9+9aJ;nA}U~QIS976;EYd zs1rsAMy|wQ9_tm(`^g|f3Nvti(1)3J^`Z6;c>2@ljp~mZ1;~Ia8*lA&DFydjyG8Q|8It87$Tm z8P9qQ#3_Tvc26wEB|Q?=iWrSw>xG$fz(%$;tY&%SWucXj`!SytA`V353GQ7{*H-n{ z=q)qivf@)Ypzq^#`e^-i-I2p1$WQR7PNywBQap`xb`>o1^E2G41p5}Ft&W_lidC`$QD32GlsF7l}UWJJr zM-pE-o~lm}^^woE6UTYjJ0j#Z&P4D|D10z*@tDr3se9<#~nnfX+ccV6j$XI_vgGPLVbT)>bTbvP~D}!&UZXP$7jsIU+LHwAg zG%6qy|L~A14uU}gF{j@hQkyg<(!x;5L7@WaLO|>S2X48qUBS*iRXOEs#^l}z!RPj( zLDwldf6G!4l!wd^KMg8V)|sfF$}Y!grS@&vqzM_Y4L>W=$l+Wv2&BjJ6Bql4C)>?P zXhg05jqKSsDi5q_ht)~dWkqsd6d^94L0~uVpCr*~DrYaJUz)PECWym!M2&E?NgAtL zNmlz|+su~7Cg$d_Wyx@keM4MgLad?{bC{A*R3_-6ccW-Ri=rr9mrNw|H|QwJ%J7Wn z?@+(Aak=09LMx{KB$3NBn&yF$fQUQK=Hyle5O0$FNyKDM%Eqk8Zhx3Qaj9lJdSC3lyQB`yA)?rdaaTA)Yyd*$k< z4lf!Ax$8Oc(&XWuX9lnV?_=S7LyXwAml$7i~V zc%eO48kUtNcZdKv7D9mFRvz#t+4}c`=Dy=BCmWD=iu;oi1Ee(dg7UveYI!OsQqNUT zbQdw-w!Ex>_+lWHZv($ske+QX&3`@MIKr%7y-v|$?;Ll2+5e=_yy7Z*wWHy~*{75o zAm^gyLQMa`Z_w@e41`l`FgB)+#bea8Xhv%hG$FdmL`^sNx=KNz;a*n?XTMx#qt?=21BNA@t)~uM$b4ye4$Z=b}qPm=I!qT)=w-juh41~(h z{66BY^#ZIUtB)*AymqcV%wMO-JH2)Lc0f7(yJSM17n#JGDb z#Cpg*r7dE@tIzLa?WxrIckVS{_bKrad5fv;LWIm0eiEc~zFXk+IYWtU4oIH1A)!a% zR5@ARWaA`^K#n-VorGIe3Ue|o5`bGC13@TwhY`S-*sjjT5xW4sxkb>SV>P~|{Gt}s zd+;5VH;&!}+^y8x;|V`2r~bPXHRW6kXmZYQjqu~E$CW*d3(zHsjoN&jq&smuxhKg> z!sJK7Q3!RNMe2#nx-p(PXBu`fPWZIrn%1WskGLs5!EF0g{CQ4Z8M7$%dnv_ytIP1b z;V-_dQ^dbetKJ$nYzoOir(c-~7t~AT-M_cBY(0721YCtN1eZo3Kg7ajB|$>}r#R%C zo;)R{UO6*Nz{q4u_$8b*^9+EhU&$E2FmK{-v{b)(iI49E>?PvzGxy`d`+kzi_i&(m>?sot~N^3sFeR{#O_=ycvyBT_0{9$80v!tabWo{cB_ z2zxY-qMXX^KB3{M-3md;VUQX@B$vMQs6tk;%@6Rd6mLvq!BFzDdhF-M#wO*wi?dGPS5Bj@A~ZCUfVbrzM7@(KqZQ#j0R< z$VTRW7EzOX+}s*ivd^+!l>mpp<>TK1DTaKK=9`9?H)dw{mM%+^dfY6;3v=hZ+|Z|p z-0hUc;r6a7qh*?c6F+>?Nsqc*3Jf&|^m<2nLvd9w^A5}+|05+1~ zcDLKm3kf?bE+cs6C6Mnc{fbRPsp>i*XSrM>?ft@`2@!z80n6>h&(^5Yw4Wvl^&pRw z6C2d7&}<#Ox%6*k$)t!8X=|kag9^hHw95Abw!1GH0{Iqb$OG-z3GRHmJX%I+MmyIv zil*ZdrbT>6p6~K86I=5hE#2ImtYjVIKFz7?g(zak+*j)yhjaB1sap!dl`mN`aU1f; zE^Oy+NOx_7jR=kj!||_cUD?qEwup@Ae}gD;_POcYHFPwdH|ieoIU5EY8~jofb`5{- z$U)6g|DYa9EXLv`?f??N?ZGpj#?A3$amS2oU9)ZlHW0)Ovlb<3@n?%P5<0pPJ;|{2 zVDftlH;1NX+rDO6j7m$PP=5ik7B-|JhAuX40*?GW^N z86IP%Z<-Rcblk&$mfrA}I=6IDLsOe55uB3OQ`Nf*T(ZsewMI=*vceI1=GW6s*>O0J zOAR(sO(xFySu@jdnQb4o(a+#U-;fsF7ua?Q*P@Z!#lU~~!taVYX^zo%;ym5gWM}z1 z7=(Fg9wXvSdWwF*isXYAv^-(e%Al0f`|@_I;KqeCXyhSv)A2bV)esb3(nEF2M=-NR zinqIn6*DumcIcS=B;(qG3@`{>zfqnEUt4)^?zto$BJ~zmS}5eAHL&%B6@0Vzt5=hN zNe2?^dpbmMIf7_cfI1jV?i^ z+!XfjS~U6BkvgX}6Z9MnG1$v~$_6M!Deo$2Q}&~X#D93p4tcuDygp)K!QNO|;ok^< zM7GBNAg6a&XgbY8aIhgS*t(2UJpzxU;C_y=P2A&mV=IT9T2CynV(Q-a;riJNmuvWt{hXh* zxm4tRgT2EI={bXrQv{Z%!7>rXxd^Ym5*LE} zRu9Ax!Knx*o&Hp_&3EIgN*;RoJi|-#X?H94)bhi2Oh{xNxa6%{jjJ-2E}JUzN4^b3 zb3q4H8z;$v4-InqLpbF6pBIE=Qlk_C;XS$1Ortuc6sF1}KTZvpr`7b_Jmqo1B*wZq zwxf|ec525`3+a`vC>;{?u~ZTE!;er;N;UUNnUx-BFi50&7@mqqAa5Qy<-Mp&ClPK% zM5StlO^#sg)bbJ4T&UH*e=Se#KXdJf2v^VZ?BW{jXK&Tq0MY~k`YMYnd(?tcKt75N z*n5<*cU4rh~|C!W5t!b6EO2OYgY$A;!;C= zesukELO6dDgRGg5r;JQ4KhuZdJ*VO$Q<72EQJYCDSBmz)>A6nf^nR({wpx466Ef3h z{q#@cMM1d`4n^U*#jE@~`b@V=q?97rA5*@syC45a!d!hsfN!8K{kMZ(!!nS#M!F+# zHubN5t$0QEBmj0{8@-H75tFrfvp;*YhUp||LHoui=#RQN(!ap91>=m#lBp#ka6h3d ziQkYeC-ivElo$jb4Isr65$6*K#?#^qxig#~9O~^_V}4g0ZqozQYPX*aEhKl5s6u)( zFt3QvF7OGPCHTB^I(9n$DjgQ#?}J4q{%P$HlVE)^1BXf7Cl89vs)K+2ejlBEg_Thv;UUtXm~~N-?U$|bO?PvpP6&|KkvoKL#2_-R zuS&81RQFm|NiIZi&)gAnfQTOFPFE57uT-RV;km0^xLMuFT0AwHujyM^%8k0{?H68? zfY$8^_j(i_2phKbAf?>djwPp~LvSzJBcfF@eRZ*PPKT#tAv);;b4dnM1Dmlo*Y@i` zb9YC?2m|8qC$Ln9XM>_7{RI7To29sgYU)E!%OMFb7&jrf2VzV2ZUmb;d3PUKp^Mzy z=seM|wngRJ-0V5}yOTuZea2By3iR&d+dD*bnZ%DX0iHga{isGS|=|kAO+(dZ0-Z}rktJMJ@a)s-UH!*={ zXhKzJhO{4DyA$`Wo@LFpbP5lLXo-3tC;z-PpfII0%ZfHEn7loMQH%ol)@mDI=)E29 zqau4&ist>{y!hVayM51c(d~O$HsQ?gl~|4{ORpQkSwgdt)Js_POT9)oVw{v&AC;%B zl@WJ=-=Abx;b%vqP~&OavkOj3*^o)uJ$HN%QHX+>&%dVm%bzM{wVN>d`;+?W3~*El zxDh|6n_X)Uj+mVSetI0jat25{zE3ykUWr<;d<@i&Fj2#7amUChKhiBv+^@6-MY7om z5KxX@2&9_;Ud?2G|M19tUGVjl&i0ohyV*POd~L|uLrTX-I|%oHqFF?Td-{sFH-E%4 zQMEcq%A#tVepunV35G^q2gG03yXrq5`W5lL3RtT%u3HbIW$u{dq1V4bpOM$kOIW+1 zb9E*ON9jd*PZfk`1F9Z@A^meGOJO*}m0w3S9T$}Vn7SWmm7p3~~Wejijy(#M@*=R6$p&NQ8C{i-}F`-8vY7!h$rlh-lNuo2k02s3; z9J*pfQZ!_8)JVG@YX37J7Vfx5OL<6mrlic&qMjS`GYbzh)r~i?PHWzHZTiYzFW1qa zO~DJVYsk9PJ4!V#gt`8{EM@Ogs{M8@0_E$X(fnx}P<9kOU$s0 z-V_Y-WrZA5W@6!^-X3!Ftv(*Ux<|K=Q_^yo>30vnByw@gf(1cONXDQ?Ku%Gj>1=iT z#HIS9p*TYXx`eS!U%Kby02_*7OIg0o3o)uVyv|j|j&dFe4$OD)vkX&XokfjM>~# zzFpITR(ppVm`j0qcV+{MKD$JSEx(B&DrJ{4fA7j62`5Re0f8ZBo5W=W`0XxjF}4r~ zKaSejEM;^F@n4QhYiFwC!fKnYGa37Wn1iC!>2wpNQ}lRcvk(Vr@&dFYDXqH3@O=|8 zY-z48Z*}0_DYo9-12ht^kXYoiIYTx|&rRZCk(*s}l!I4i5xYC#h1+NW6`>LzpO zDUEYJtNJwxr+80uy4y1~V#3?@6rE~r!i#y2yO`S{8X*5ve|3Xx_%!)_ci=#b0==Vtg~H z6Z^;x-F5XLIM=#+0jmO6iQdnLVJH6yl8O8Qftg$_SAn%iTSg6Si`*XON_bhSEZ+2+TAD zC$}HK*k8k|r@*0)-q$4s$BM+MicB`wyDhjXT!DfBdg=>g!8gQz%Qg@pteIcP?l* zgC5oBAoJ#HDa-l2z#GT#O+<}%GgHj5Ql*(_J#(u~pe9FGGEvkUX_WSx>1_EWZ%Ww}Rgfgf z0B%N-NzU7$qcL0uP{f5KF8v^_7?nwwhNB~!Gr60v4|Z66R_5k^Mw+hrgbnTZW`w}x zd@1OhXWqbzzv)@04Ma04;S`k|#C3v(CO#ElyHUtaYW{$7h_eY?q*Di(LbD=yyeyp9pr z7j>}7SL7LkJy&W(<-AIYd)7rOdjrRrhp#N0^g!miol#x8pUwl(c}ldQZSvBq$FICbjjbIw{QiPulHMeTYS>jBq!L-$=@ZF4LuJG zGUTO&4?-~Y3amm+b3zO|P~lrbs3H!(Nv0P~UiRKqo|Jk8nW=)RedaiU-uelO`k ze2>qW8NYSKaf;;rI|d8*CkAV9LsIPIiqW!vJa`pfpM57#6Hw;!E12TDJEyB2eoMgM z4UzCB4to72u(unYE+80{|BhYGJCCH}%6q_xN$rwA_L~0j0kqVLN%P9p;zfP>uuE8! zoCGFl^+O72beNmp$F!94P4J%+9Q{}HlEwFd8M;gmrN=-N2xjk_$L%Bdoash4ty7b* zpBDpOjGOs_+eTn8tk=|CKK!1)-bHx!0*Q~H$+D9uL_w_^GUr)g8R}TtcbbLDT`Zus zxdh2NPhD?_(xgs0_<7UkhIy|v-oMRFO zGGpy2q{VwqOUfSZXh!ck$P0gce&4%5kGiHuy3Z_(>TQQUSj$HILR2MBq>Da47$1FW z;^|EjyvwCsN%YLiI8Il6X0Ir`<6eKdH99Cudv;b)NWKX01eC+lGf$1Q+_Gam`&pV3 z%@fXtUctrVRIudD%2)foU6OP;^6qTO51|ubi28GgQ=a=^9Yz!Bh$wNDsQl=z_T!k) zMqFqIF6xp2Gct{w2ki3fYe!kxp>CX$qOv6xBU|bqYpHCsH9l10-RlW;HyX`Q6~Bq@ z?0!xNCZlNXH+V|~z4=r=cTA!q3*O?i;spA{P0Js0Mk@0)B&ipK<&o0=pOHEayRzd- zMpSJ+`w*V42^Ou6UCqGAjdaMBH{KUg=%%h)OKTz}^J<{}_A>y-qBm`h9q~VgdeMzm zfU}4ke>$-Pd9g&olGDh#&heedBqWdlGw#uC`)A^fN+tb>;ElMqdq0zxhjf)m3*8f= zIw-_2;V)q*tNh(i)s)27N9QS9Y8_Z&ecg}fWBrHhgypqjrLTm& z8P93N`F8A)OjZ8cDZ^GG%1RtP52WQ4!!r6S&-BUmQc9{jXVX8gcTv&fudSXG&sk|( zXUbaz{1k>Z8XYjo1-}kkAD+r9{FYi?kr2T4_sm>4+Q`a-S$O~v?sqtep}>WCsYSUP z{u|_A;L=xLDm4@O&D*SMF7+eIO3HZdbzEPCJ@v%9qL;7ZXgx`kDI^RVH+Ybvc|hIo zuitdm;`138gyCF(g_@>`8_pX=K_S2BsBa7}$^M*&cJl*IsIGKci~xa{kVb{_vd+C3 z(76=aHQHQ16sp_I$&|EE9nJ+>Td@TENB_E^R@vi7uqFIHZG)rdc@oR1SDO|L>bq1i zR*J^QMst8>tHN$?#WS=BBvD;`}Uu|PD-Sz2t)u1Mce-x(}M$T#CFXT1%ToJ7J zeEj+Dw`-D{Q*}+J^%1i4t~V!gee;pShKSp>(M`72`x8q!CUs7z0Koq`jFm}k`3<`4 zD|q<@kodp+4Qf%Obi4)B8R)XV`qKP;Qul#FAe>H#2?70mlJS+d11>UmCluv(#tEqz zj+=jbYJDnFoktWwRquA>{*eiR?a9xC{AGrv1L(gNp&17hto}ujRnZvWZ`#A!6RW2u zX)6L$JF@>J^LhvVBlDW{ha_(?l;7iEL=oF*66_Gn6~i$fGW2Gat*Uz!n+Owm3&2+f ze<_0$FbYLBwEhKA5m29jBTu=jLVx%`2d9`!Xut7E15&U5cw5oREQ>tpX+2?l|LX{R zPoxL=$J?s$`0y?yh3}81sMPc$oIB5fD}>--HvpilMF`hk8S(<9QX&m#GCyfF7V=DX-oVAI3Tj<^J00@?6mb6+D} zH|LkJLU?N*GQ^k)OHJCLrvyMBQkEfQIf3Q!=03%RC?0>|oO5i1OlLXp?Be~i2wDl_dB7hku}d`^V=pLL^5qu z?KSd;WGs0ST6DP|#Yf6bVdF%Dh(!VMs+s8c;YooR__zR7MrNTi1ebZ56aCs;-gK8;TTZSOxQjSMTF?WDeMZO<@V?b`CZLr2Z#?YQ+I;3rW)zrnc6SN` z|Kqej>{<}v!(H13f7ixjt{K77t76G)_Fn8T0hRLhK$XTUFZn*dvUMtTBir*}$t zFeC;>U%-vxDFevFg@Geacy?~=!e0Eiqn;uqDAKj8g@iVK7Z-xJ$sM=J3SeTSZ4Ll! z89=eNC0vX`f0XVKOgLTu8X&V|NM=d-tkq9fB~}Nr=oQ6|IwY(ueSPcdNv?Dgs6+f@j8}(i+Ap)Ej+23DpCT3rXe5k&)mt|av zXbPd3E?F1rjS$~*E2DIO7bD~9sDG28Q;)vC-;z;-r^eEQhut%lQJyQ`#$@Z!bFl_J z?N%PkY@T{+1w)ZhlA$Li*o3(kx#z9Hldiy1m4}CRxkm@N5OcS?!~xIM9EGj%@;BDB zg)B-+C#Lny>269_YtakJ`Sc+>qQtwJvs#~$S*aG^`AJknln0PUPSq8GuTE=$X<~I( zB;RpReieduJ$GTz-czTuDR(ep&&(7O?$ z_R29U`hM)G8%1dje{+*-T|9ksE_x#QdOb$W_unAZ@t=!;)1V76gtB@>r%=7TFQmUY zyKHFY1|#HX^70oINZ2D)Q}Qs*rTL5T(xk^l%nmZcO#x04 zw0XbFfoq|IDA+lfQtUZ1jp%JQajAi#jyA#MMpPDGl1!1u^waw?NJ>OiE!Qxt9_ynC zRUrJXuY>_E4y$r}Jz$4fumjksne%-*SBXW9q{BxZ;o&iE29>@L6=|S;O*Jdc`A~Sh zsFT|hSQ9KllW9*)>+moP>NlaorB{TS5x1(?2M?(p2u4)5@>SW2%AYYNyvgD{9Q*a* z3~0k5!t{WTr+B+Ld4#VS^Wft}$5v7P+|^}Sd8*03YEeojPSu~zZWZH{hb!EC7QOqN z0W-(_Rmw#X3CaPzg!FNg0A=_K1$RJ9Ms0CJ_m+ zpc(}XO|)K2RwqxJa`hkh0-EyOnA_T(ukD4KOY?G74eS#e_9CcY=A3@YAoDLP*)}qI zED*_|MShw(VO7%n$b9IAbnA!K)m<%MPX4+Tj-S#B_2Qp!7HASYVUGP=0Ar&<6R@iArxIS-2n^xhRLcJmh+OvPm_P|oG<>iB%2<(&py%REiz(3*PFk4N&5LdlKb z^nMkms(;E+7Ej>-Gvc06w%SIGpY{Xm8mPyKTT@djxwdQbD{# z!x;9H%G;7cUS)!ZgSfTc{UgHF)%rYl8+`H<=!>*hDTG%p^c^8I{ipV70ir@sg|(aU zi4a*)@P^nH731@>cMuSi%fK)F#dub8v)0QDa}6A}g7($3GVP()n|N$@f8f)e^P+^m?;ZZ_1UIO?`I-hJGLM{ZnE!j|0Xt8ZaR9%M&2A(&@FW&&w;0D3-^!JZacxS$c6OyG;qY3P0d<(j=wE2 zu%99Y%BW9LA{p{82J_dswKP43KdkB#*ccAIE*GkMrLg94R&h!PN)@6Wq?P? z5G;$Tt0&M=V87HzDm3FZclj*(Q7}F!LO}THLRJjSemM4tZNHQ*;bopA#HK3j7PY4g zqs4QM{&Hkf^Q@kA|NM!235+WUU8dly=%RssZh0YPT0&wsX)l+>tv z7!}Gy$}t6(>NJ^NZ9`Ze+?D#-mvghtJI3x>_Z3s$oZERRwCJTG5DEx{P**?y=p>xC zD4$FT2q$U}UPZX|b$eX&0l}|xLY9>$q`-XdY$hR&BW)?!)lWu!^7g7SBjmo~SS#){j2O1O;+cs#i!w%0)n7z^6yCx4qiR=8P z))=}Uk>AfFM6FQuC!551x`wLPV%kU?k6fOFh?Y|Zu`rkS-N~L0)Q@dS)}^B+Wq$zT zf*C9D@-=uy4Ic=%k}`U=9@M7OBe2n{L*SO*;;^#(>PhZV2qb=~PQLhdD^h%kdmTji z1{I5))5_4cIsR_A&aCWbKchT+wrY3RTVmAK2JECDi%C3;!+jf?&(i;B{nfk}34dQ1 z_0j#WPl>Q++p2OG{hb)9KcXC=Tq#{stj@XxuPxznfIi4VJNfBN$iVKyJ~N`vdb2+C zb@KT?(?nrjXB<_gs3}>?;Swwo`Z9g%RPjdi6CX+Lm6*EEV%eKQ*x0Yl>PZg$pe2@9 zOs^-b({G-csp&L#au6m{*vAmKAT_0Qajxw&fQxsy>2`#@4B=^ zT6%LCj5dbOMirJCzdbRP@g{hsxW*gshYl~iN|YNr7^>dyNqh-fwGh^VIRC=Go<^@a z@r^?>`2_Tf8Pr2bc3gJB@k- zWO*Jav65HglHt#qH}SB5*^*4%B-3vxoSU=%a|>araxn7cY(Z^Atp>JFk3;6P=O%po z2FW({b#!AKrJ6`>h{>A#0lNUzbi}Npvt`%5saqeKsm8$Wy@s%Oc1zu9lU4mHmS}w! z<^RLpTgSz*bZeu71PCEGL4pMd1PSgkxC999?g4^32@HXRAcF^YcL)|Bc!ImT1b26t z*|*8w*>Cna@A-ZAlY8$U_xv$4-90_k)m1gCtDg0&XDzI|R0K+uT$NUj7Hpl9^9(h0 zKC-}0X=uZbXd17xEuPZT${FK9GqQW1OkTTXfa-{0qBuwREPQ!Krhu{q8Se7NO+@m)U%GfH7P=nsH;~@2skOl|^pbqMkZ#Pk=PFz1|1Y1AQlTA%G zy8Q!`BeBz=Y^i~Y#IF_qWdb&!s@34HH2&PKME5P8i~$GKOr1Y38}g^vXPugNvQZWg zZ`iQFF*HsUF@GD?L8ch%Nt9_%{K}CAdSQx|F}o^gNwH!ez$hvVWcpd43!7KE*09KU z{D4o6d|Y@ujrBN~J@vqOe*GvlumB_AU@Zpe+3_G%Ny?<>PRF(3=^kGgS5Ab&`Z0)VqwLs!1~RnZZ+Cz#Hh->$k9Z?!WN{6%+G* z^6i0n8XMnz2ZW#&m+0u!Imhc0HP@|`M3uu7Akiq|f|kMtG}*22j9~CO8d%c%X{$PW zjmD=0Iu9tG=BoSw>gBvn+ftFSvj<`gK1qMyFbgR!AHy>2(@;13nVN=I0;ifg+|k~g zY_Db7?2<}(VE1%6zbegiW|SOr|FmKS`N#~bicWdv`P$*NdA z?-YJiS(xNa7D~pj-?K1%yLZ$3-1OD=FtlF(@R7UL{2u zHv)squYZ8lgsTT!VwR`YphR2m27;^AgKaIy1FE*uX%ACBtSnv;aM}YIy+cZIfrW3} zA>4HySTOu2rjFYRBljq=@76rR zFu~Nd!*?0XWo3L?tOeLyC<~N;XCMd>z2czyRv+GkVL&A~DWl3m;vb zBUrdeLeHa{%;C?sf*dcxwhs$N!z*J$GES^N6uFgmKRQKGR{+o2$UBC_XIQ& zNB4&0@?L+#_R;D>+7Lh>T3tcn+L+KAvQ#(svL&z7>%0Z580_LIKp!b;+A^FWpAIE9fHf6nlbBc?XeB zOQ@}oq}1BtsYgCn4dRB(<37H4pC#X9bc*EJQuJV1&Iy5yx4Uz6p~lZmy6>y&>{#>j zI4hCQ5Q^aOJ;IN3qUt@3w7C ze9286PX6K2F3y}x$UQPEi+!A<0!1Z8c2=+z8{+V1H^_B5HnS)W{zxp`{!jqU7h^qOU^V~349gQ&x8z# zQB2ex1YTDMq6%}@Q!$(*B!9Y9D5-u73k^e=Af*5SkOFzGc z%`|uJWVRiT2W1W7er*2In))^HLb@ZRFfvJ^xIeEdoJ;(goS2 zxUy^p>be#v{9VYpXL~}6I0ZWb^P%f>(pOg;$4ux7!$%|}>gp!}RIBkr(PPU1GHRm* zjDQ|xSP8(p1V58gb{gB&)rtTiQi4_;MM94f~0$6a6sdb-3aB}wv;_T~38 zP?r1{8WPwtn(mM*?(lkKzJc240NK1NnkIkn`n#%iVs+5Sf%J?j3sU+8jRPZLs}FV6 z=fj-Dd2>V#O1g}0XFZR$tCxD}{H3WOg|L^39Ziqn-zJLJLoaj(*H@snt45k-w`{}3 zC2v{q%f%kdQ*ia3#8Ne=wxv?nO}ciy{iZR+7{9#BZv>ZWG+lBJLb^2JEv2Fq<&3@g zD1wiHrx&Bvm?-q((+*69bT;+fxg6wbi2`=`Ol5(n`x!2x6efsNLyw$xbXCMaDZzyG z4Tft0^$|*9&;5D{y7E#vjscg#bBo~b*xs$!;L>LcYHzxy5`P58nn zc;lEK*X)MBF=6l$k?8$(&wCNSw;4Okvtp}|b3{iIpN zU6%*CUmuQaruo5RRwZmjZfKwB>0q4c6HPKS#~I{a-lPC3r<-1MM0ECB9<|? z>#>6=*;R>gp0+RO%g1-HVZGBP_L?d`Z5HgJeJbAOzgUIw?vwb@3X!Icl~7Zd8tM}d+mbr)Ztba?jTW!Pzc@dNBVNtl5OP*eYa>x} zW_o)5gxVA-)#f>b#L96y_I!(gOEL(8T;Ux$+GSpd` zS}C>XZ>I#^T4v48dDtC_Bhr+Y#ph@yhmEf!zP2TR;(U$RuBC+H7=*5XNm|cknK={m zdM<^%PLTxP8MvD})6N&G&IvSBJl9St5U!s7pg`xmbxh)FtZ<_cl%E;AE3_gfG5T2Z zO+9bRiM+t1a7HUUzD&{{Ra;KzrVphzM~|N9xQjGxpkYvMY*GFz3a*N7vMwXm64Q6O zZ$fqP3xV|SuNFgXk#t!O) zYab%(1Y|My5mL?5bnbuKKqZLGy%qI%63iHwsIJvwv9Bwb)>F8XDo|hFsPVav`)C7n z#z(qd@xop3a-`FF|MlE0cd)GUy{%Ah49~*hx7;RmZ(!l6sro=%>4%^~$RH7zAqNly zG^=KfLyq|FxHEXES}p!+q;u9eV-!x7ZWHM)EJ7nDa=vqw*qrlL=yQ$sy_=*=nHecn zg6=J0zOmwn?BeIxQO zwiNGi1gn+LENs}wyJ+JV`6@xNJy9x_j>w}~ogbbmt`)fLwCr0GH)v;e;zL<7olr!G zyUz=%!U#T=cqhEx!hUEnbB!;-+A(a4 z{MhD!Hm;l}K}hcusTqV?#X6O3q~tYi;=(px4pEy;a;l_&%=~cM0>3~=o`-;JrS~%8 z{$md&S)xJ2FRwXoY_NEC%V{jcV>_M07(=TsLtdRkGB@~f46QnL?_8REIb9^$;+d?_ z$!U=l+b4z#-v_5>6r6FENE4Q^zuqj&*-x|g#4qBMkq=f%c7}S5+caZaX+#s*v6zI3 zu!|0g@fP1K5?ir~It%ld+cNsudN#y3(o z^nDr4>fuX_o!xDI07Rq%X%36cdqqp%MVOZ zpR)}r@ns6VQM7QdQ^KACUF-~QX-}tGRu)YsnyYP4I!`Xtg+jiu+VFpFNEFNJJ?^+uDpGRvkG5krNox3z9H4b+AMRfVKYDp7y zAMKYL$yzqww|kAU8$>0{95qub7j-jRP2{64XH*N*os zFCD?xDM?+zKDta6GShY3N+nCq3U2III|>hsT2UR^JxyB9b+d@>;pOe@Rryp0Jv=RU zEbF_NJfO-hE!~hHqX+K997s7ZRJNw1f4Y-VVFl5LGK>oMtH4yLplQds8~(J zyM!3|Zl$w3?(+;|kdimx@@CwM=G}9OqhICzhN`!U2xey#kU4IQvFjVgZbLzSfx_l1 z;HA=w-cMSN1Fzr_-)FTEwE1eRB)RGV{(*JO#d+NrlPzYICxV9jW`h^5rk$wtK}$WP za_&eVMc{^NS?(d+ayls7jV;+d->Td|&c|K(0Mp|X&kCi zgq0{Cf=h4b<;$U}e=9g*Q5D5`k1TTrQ}#Q=r*h>eW$Cbi2aD)NPPfQ2C0z7s!hEtV zB%ZSF)sK6Ro~-Tf)FVY3xaLkD?WgjqlclM8H<4-4P;q_wh|^K%`Qv>n%(IB&67_{y zgjDhS&JO}X-@PWRj#B2Dh{Cp39tch>i>&NJ>j)&9sOIczkAFO76-+)ur7n4tFP9e< z?X~Ob=7TxBr^PNJ2gQ}cy^pNX-VVjp?nQQ_F;S;};%yUJaT)ab09Q}<>zarYT8rJr zmQKM6v#>Y!vB#Rs>U->W&Cr$LfV{D_6jDQer@C(*gWtKs`;%B=u^grc7%|H( z{q-6rT;<$rUrW*gG>&IJKa6Ca=4)nsRFLYs>3Qzt=gI?wn%8jsiaG!J`FFk-h2PV_ z#3yKE*8Kre0fKTgaEZ;dNqAF6*kYf^B8{ewliez!3pz_3)lxrshwLpW$~2e*_|2`( zz#~y{aP7RYKR_>{B#MrHM%Nb-`219lP$Cf`Yy%%FxGdh7--bFk{1$bz;PDYITM95} zUN=XUqEnn{Qk((nW=n$ku*2>g5SOzzv=bFfHD`SQLf>t;3HI`RY8;%E{ zD~LupnGgiW<99S{jVw^(Y`(IGpBWaC7~TSYWv_-85ae*gw8OPyCWAXPqWMKv$(zN? z)3_~df~~cBj$y#j|9(*HvKr9kEW5G!15}}j)_k-@2Xir81!CKNJB;%8;n}+oqtN3& zQ44kw!UL?bvpiNxL{Shl+);r{a~quEFt}uCtN1QyTpVt)cu3N$23}_d)|F+5;fCVt z`LHrEm{DrU8F-+k2>Hyu0PZ>&XE(50=H^9sJEC|3tVal1r-9n`XnOtu;=H5l47NMC zL5_}NPCW+8H^ZRKdw+m}5?oEj*cSazmlDe~T?!;Pu5vje5btXcBYTl7OJ{#*OIxJ4 z=vT18h@O)sOvH2SaND3LvF47o>q=9&+QYi;?}Q7%BtDKVHey%TjTP_h#yunTXaD@Y zM-gJYCvTQ^7!J4!z*%q@|(K(kKITiJ`Pnxw1d=@PFRbJ4) zfQ}d``I_WdK{ZtBhb6dybKW;22;2ldNc8D;Og@6bW^}e2_;Q1a70!zfFcZ)yqo2SI z2hmV-t=@IVuMu@4QByN2{8?iw>x;~D$F+~xQZi8P`<=~~nD@L`T3{64XJRWYW@=)X zH|weBX`&G#BxD2xZoj2tv40&sC?0se6ouD$-4(cvK#_q`xU6^(ezV@#yd3`0+!bky*oXb_p3g8QaF|>>xwwG4&2U6G7^1o)q7L3oF!*s5U z)KDlsSeAQ0bS6-4!!NUMKosJaE80o49YYwPs_6N=Y0{lj1qQth&JJx}94v8%lZ{fQ zERTT@Wk@`v-}*nH`udEkYxY8V} z=+EIB`w7NhQN(zqEX10Qrm{Y0tjKmuc3m}ti#0S=woU7PI_TMX<72a9Lci>>EYp^S z#wx5sxTma7+g`F1pspdJ!Rmy`&gv7xOwjk{QEimI^$511x`{~Vb>Ov++9FsTkVeRY zECvGp^)yL=rd22D@)r{m+cWmu53X>Ib%j+@6%81w&g0l(+E++ZAudhn5S@u^BktxQ z$fij~(RSNb=Nn?eayi@k;8&5WV3&JJ;Fwo6AI{Pp>`MSLT^hVvJ9b1jh2dIed5%(P z7gEd4*w}KKzsh&DoIUY{gz5E=7GUP324QEP|wTrosotA)5?~7t7$od`iD_l!WCm z8WanxCpef|P7if617$CJ z>oySbM>i;pp?z`@bcT*u*}IdK`x=5jd6j+2EmfAinf1>j{K`js_8>%GwwLu&+lz$HxqNqY>hHIRahk%iG$Iojfl%rW%@OuTV_IUs>f7xkmC=OMnR6JMM~4%#w0U+ zO5JEPFG!&PdbbzZerX1WH$Ai?f7@{B+BeQGuq)rs_*d!2yo=Yiem3}?ns z(M?Ofh8}#@gADFK7OS&%0j1CD#fv=~sbD^A;NIyUKaLXR88LGacvN9;aQ&d{*>i+@ z!G3C%Peg?pcXEo!UOwU(W+g_k;-xqn;D1SPFz_HF999H8VT2$@!*GJK9OnL0+L_I~ zbhM_ks6(Hd#YP$IRy&f|h5T^g(a9_l$j79f8LJ(8N9y#j_$qx}E4R(3E{& zj0ZF9MrQiy;w&59Szf3d4Ctb_W1oOb09sF@dyK)cM_n{3__%0Wd-Anm=MKPK@*+px zS^)N*OZvX)EBf-Vl!+-LT1pP z{TvasTYW*Ks~bshxa<82ewj&6TdDns2Zupu{`SPE-dq*-T>EN^wG38O>sQygB`h;t$a70O!=Cq5MKv}hVZ`{{i`8PryZxhaNo;g zIUCn?lwfx12w{$1kSNh<@mFhlYc_9;v+`Q`<*N=4-cYOGepvM?uPgXmY1gtO^c%M1 ziT^gWj^eMuR6;_(Dt7L;Yw7K`0*C0rVI@qDIA-TzxsN;XY#Hl&$m^_h1dKXrePAaFCJthJxvn~s*t-PRwSBX&?+g-3Xq9{ zwK$L8!Oby&T?CA5ZJK8FL^;-#fkyz86#Cd&(04%y{blKfm-$`&jghmn1AZJe*dAnTUaN| zdLG~D`L}bm8>--$dFYDrC(BZNRh@4?l9MKZKj5P(`m9LQirlZni$=8osyP7=<87pW z4ZsON&*jOnba~p}wHWbG{myF8RRg4vX5J;58ZP!A9^mDQGl)Ed58UU}OqtwZkIR<{}U}ceZ1wM$$gC*{+@I&*+*b9APoPsx2r7L$crpj#X&JU&k z{A-W>vR)+*A0$3XVLE5;6wcuD!~XnU0>~`eNlZPaVZI*FDP5gVrdPE`^E#I;JesI; zL!T!g%Zl0V8{%p&A<`DDS_2?A;0^%DrK5j<=yw#&G3BOCCXW(N3?l;~7nv(`L#0G< zJJ;?Ve_C=*R)_pOGSL~+BFUNtgnqYtJVc$dhQJ_wH7reqWl7%7YikiENBFmH$?2NGXbBXrC@X8`h6~-X@IC$u%b6e@xlFfH`vk6dS zh_V5wqq8ilHva!ojyU-*)^NYC)#`J$Bd0nkA7w0vAUr8=q1?!I?leKIw%Ab(DUi>2 zfv5y}DFZTc4pYRR3EqJzT~FTM{8awZh`aL?+&7|`A|o}|{E7s4GH#?9hO2RSPNeR1WY zM-)frY2pSJbeHm5?GO~Hv}lSPl~GgG^;H+^p}*I1I=06$hgLPaYsa)rL6XJqF&(vC zfBK=L?)=b9H5OicZyKNeE(*`}n<)IozZHcySh!>1+r|Ri$xLUYH-;|sD*&czUd1`$63OL<2{ ztLO84JL854D;>c@0#km-UXkIo6)@N*g}fR1-I)qf!rGu?oGP{Vv|^8!b!AGj6Bf{d z*g6zJ<6h5vRaYXHVrW04(5RqSBxAq9w)&)mGEuXvuc=pCm!wp;NIMy~fkPzzv<-pX zF}kH#hd%w`;N=TfaE*5j3~5i;K4~355N0jioRjx<62IMPGF07pw0-$m(7r?Hzj9AZ zjC`X63#8M0;e9bTNX#|!>RnKbet|f zLEem@Yi=b*;K))E_-sV^w%_&vgMGrZK7~+d9`RUO)l5g;hw7c6=ViDSEFsZ$O)bQj zkSE$r_b1oKO-A>hn=iW9=b8v11dbmdPBTq@jbuOzS2FQQYa|Fi98`GY`uRq}T(&Xx zscI{-BppSGz4&wunR{LL?q>d2#UvbwUpG|j$JV+1`e&?$c}A%eE&2RW$9$D5Ly z{cdl{^kM)x-4ZoS2!dqrepHGrdZM9MPk-VysC&lIAV73eQsImb7UlH%himT#S*|!F z%09>`@6OQ73ej>yXPcm8F=WyWnDLG@(wt2AE1HFITS-h_tYVnBIoqLy++=aYoX$vFM~AZoL<%3A`XSBDD12#dj}Sv1#gN?$brRWDFn6iFAGN zL2MSO33bx{T2nJuW)PrXCP(={t(5PV8dyuD&#dD78_*h?0IyPH08*$)kS&SvIGx1K zTmMt=^$DObp6JWI`5TGoj!eXeavNDF?I(RO2U+Fa@%nsV6nQ4|1;fG$jSgPdsr*C; zisMSpJNS|@`*1guHm}b~1fE+*H&-mWlepc$0#Hz-Z!fs$U(ioy1~aPo1=FV^-o2`B zX`V!Pki6x=795tT*oTthwOmm2X_(9A_`Vglz`8w(0|IjkjJ!5(sjuZnDLvm-2o7@W zjw0Ug`bJ3^A;PzsnD^*ob~i!SjoI4XQs^-n-}CoTDEx?Q&`F+hZ~CdGn0PY$MD7IJ zVyi>J3R!y&8K~gey%q{;e<(HtjkRSd_^ht6XYPuowk zOsR(6=#7bX34?_03LG5|rvFtkOgNMG<&zvEfK@;GA8RQT0(`1ORoo*R%MnxW;c zrT#}R#-RoTFR4^pu~QS->r=S;M)f8H)7D>0uTSYz39FVx*LY0tOt4`wZpvnEsaixT z%MHsa?JDu00ecWL=2g3rgh`x@ky*+u`Uy-9E~Y8aya6y-IP@=kfmywrd>ngV4kb>@ z<92mM=bKqbD_^Cqw+0WqiaSn|-C&l9mreFDuD~iU#YBTo;~RxhDB&Y32j4F0TE0^h zCCyW=RZbIpK2?8?u1}ggEI*~0oYTba7%wj5B$1ib^=wgLv>}nFQ3VS?o{wC}q)qr5 znU#kaSJccdZ`VmCFuZAtX9uqcT?ViBz{g=? zU+UKQf6F{2{U-jz#$F=n49|vB4178D&+Wu7@oL{-5G#^$^B;6vd^eMS`7S+bS)-cX zl$YB2J?JO`1(p1g0J)On7rbiExst{VsPw8u(f&zHvpmtk`4eyb-+Xxc{ROl(XUpb% zw|Q1aB^RakA(kEV9qKFf#xjbLLWhlbjeDP*eHxiwbo6rzT&z}6qAv&RD4aGn>Y2yw zMmGd>oQlZzp@|erfNf^|zsfeF{Ohr-lc<-d#+?uuCFj=?$!P{+^+3gBi%ym1N__{Z zTHM_yW53ZWWfyXsX_!+yOc)J@V}vqf0C;pSek$5ca}&CAVh}tT0_!$5%q>C!JL|69=xKhzGa^DzXZ+B{DfvJ7Jm}T{(@!; z@~{IGD|`0QRx939t{y?J)u;<$(kG?Fw@iBlhaA5i*V`X&+naxI{ZQW7d^=82y=hpC zH{O(YHF5SQQv3CIZ+bpve^Bh7k!}A$=_&k9>1j9)253AyFP;Ld?~;09djgV=3>jk( zc@(p767`7#-;~16hv&Owckc&_K;kpQP!wZo=6+m<)~$Irs}0K6M=jX$ zp&3QW6q@pG^0s??@LC<}nK6jV*-G$%7Ry`BcqgW z#PG!1>=C*k06ArJ8hogRG+t}Q+h}6<+7~o96$M#(zb9|zCpo|hbb&&;#Ae~w`2EGh z1FVRDfRtJn;W4!QMc)Ng<`#P&XN2w(`C%ceHJJcL48lMBTI>2*>Yv+!?eJr`t2l)u z$Ittd{&^3+|2w+^-gIqESYJkMe>7_OOp?5NZrd%;Y2c{$r9h~9BF9n47jZ=DDbsV5 zg*i+b^kPy7Fz8ASf@nHeBIi!wDZKy#&;TY12N7d=EYn%JXD+^>%xGVA$HhFEyKCi@dB5++;twhh$s z-qc1xzYCni_2$XrfTc0Zxe>oHpd4&^V>?H>_El?2ZEzzJ>q157!TC z)unY-Tw}xS6fq13rti|CGIh~)vg%N9L|B76gega40VMH54eaz8c!_cZNIV6MJP4xz zaiNdJx^X`b>jcX!4T&NQnYsC3jp8uE3Ve$F1wbu6Y55HH*@xVQ@80;l^cjl3KGAXo z2cGFZ=(RDct`F809?CocPA-w6m8vfYDfBc)knH%HFvV7w4q!t zTnRqm+HA(^>wH;tPqhc9`{N4V3F82lCe%947aycRxwCIG1gDTDoMNU$R9Jr|%6o-& za?gt7rENRWdinadyTm}1Mm&B~i(x{J21o{zuPvkYhjTThj&o6|VO5=52Gl<*QmpYv zjbLr;`^T*w(%S{Y{C~EctL4aluta3;eu!1>Pi9SsGkYN|w8bHdSA?9+Kj$#jf&@2R zcHiD^41~NJJe1ScEN(swv$CXyxpo2*939wOG;Hg-tUKY8>Q9^C;`y@=<4-&P z(S_-#{|9$Rf6HSK^3(n(LjB@+DdD?-!zG>A;Fn8UWlR&it+;f%h27)QeB6JRuR!H* z_I}Kt9%r$#pLw?mk)$&(e{(QnV%<5I`+)N52eJPEb#skE_TrAYT3g|TEAYB-7>1^s zz_LN$k6t*jR|Wb{fMTqgVDdWStQ2qf*~m|L!s?mgoMPS?7YzmgP)rza+Po}8G`zoQ z0LV%GJ5kHUf8%zxBOYXEdc(U;hXz+=NG)UDvtQ_ub{=er_{+FxyA3kN) zs+z=oaZ;QEhnzu5BZTgLLbn4e$2G;zywsGeZ=JUv${82vO*0mw2tm=FWMP7p6&f4f zOq*EwJ{A%6QzYJ(?Y^7b>;jV;>Avurox2BEP9wOQqmFxTCzVm`Pkh4Q;o~<89|wkO z8aMS$sNvTD1R++=A0=I4uW^5SQT2AGjJbMxI#y@*l;t1T!+)Z-ZxB&*#P}brbN*lc-sG_-q=tr6HJR7!$*%d-lPqEW+r5vLKFfKUbzFOp%zj|(mgG*iWDVB%Y zgO(kktBZI&CX$;&FacbD9bD`C9(0aaNZ6fE#o#>zhvBp)~Ei?-(zdfN<3)`($v zkyTHXLO-G)VJ^)d8xAsC&y#z+RYLnUfYo-Hj;>GXC0jDa>I!xGa-PCt^+?kQiFY*m zS5{dFCJ8U?_sk@_Zn)7pBna%jyiw;sxRPUV%S-3gGhP|UBmcr66;s4o)HK9yl7l=Ao}LCyz5vdm>7Wuqzl68 z{9G95lwuk9R_g1Q@Vsd>42!vkZC^wwjWkIA)EU{j7@i8T_gGnG)pF+sGcCuU+R zfEv?)V>EQR_<3mImmHzM_YdM7*BNEf5gp$p|45Z4fTrgrnikwsVP@|f(XPI|~G)6$gnVNN33f;w)inJw?1F?{zsP0e}3FAC> z*2hqSS1Fbuw^BeD)6}_$(G4$O_kb*r)I#H55jurVUG*Fo**|^+fbjMi`YgFsAPsztdY|>84pP^x!`P$N=tv-xWiy1@9C?q<+TB zv;){q;3?uSaOeMTpQ&lv&%yJ6Xmsvxb_Ibfbne_;*o=)&VY(+YJlQP*NIpODUYN4s zqe^X4z)<#ylY=4guFSrqYUPJg+F<;SD>NiQjP@U2G^~`o23Q)ju7LX&8(szZ zdkcMoU=>*43*M<6d9p(Wc>vH`!L9i)NFOrT1}>rawZRro$nE7dE9;CTe?Zyhmh|#c zx6Zu-?X>f0MtPX1Ej`1Jm{af~!N|Y82*Nw70!6D==N(-y5Tb2J{g8d{qc(|jR_o~d zI3u-OdkNw((6;o3b5bJk?fDA0mKgrJ&G26v5d_ig7t1SyHrSSQOg-A{s0qF(9^eMS z36yGg$3kl?cTUW(Run#(A0Pnr^w`mtzNOMMJUPPJ`Flg8)X_jb?WF%sq)CpH{XTXB zE$2I*J{AoZ+6cKzB6U^G=>h?$wt$DLdx1D3H{eUIz8l ziofQobmRPK?OBm~*%b?lPmo!m>7hcTrg7H}^kLkO?6{lU>4?rbmF3YlwL1JH(L`Fv zwZy}FqxY>mSI9*B4M#a$$4kwy9E`t9<1Pzbxzi!#x2%-NW?#Oxe&i^3{++Y}i^D!9 zg8Bs6Y(vP&%Ov1w@S_U!9*d=P)ZBKGO(qhj*W-?s^VzL(c{{won2QajFQEUgrYqy{7GTbpYj`nE zF-6#X+6%wVy79SyCjgE}i2cGJpi!2a^@#5`h(8ahL5u+QB5-IseD7xQ8bDXx4#S$? z`~i}0K1c+CKeIr#;$Uae=l2d^?7+V-AHMi!+5Hr=7k6b}r6c`!N&nqW|2+!+``_~a zp)F8a*mCENxT-{cmW=z6x1hP^;LdEFC@omW@i<(m;-kHkQHBoP0~TEIz{>DXPu~Bj z&wov#)M9UHBHlakbs^)NrlaACfOaBPVNEM=pXcC%rGj&CHpN8?z$fJXwc$pLI=c_v zSYCm{NrV@Hl@XYb;^J`ZhGGQk1`t_${MY9rM68-Q$Y6UX?3UB}S8+wL=W%$5%Em3c z-2f94J^F@!=LW#+E_xszC^_JN7dCu;6Ml6GEEAgpN*@bEvP+nJe9n$J)_Gh2t}Jb? zw+GC9-lY->{2x##Z5$5zxJFBIRDrV*) z2Hw~E=8J)Q9hjKv{BSh{#k~uPlOx~;ArC3+?>JE*;Ww8y;=k2d>h-=vH%>5VZI^&5 zMUU^Zznd-VUq5{XvDAmS0dqmc!(2skXAH?chX|CH1dwmO&;D+f-%e+&WOzcwl5FO) zC!|o2?bYRQvgE{pnrly8kd1^aG^>tpjUI1t4ko=-c{EnIy) zL|tk@EZQd2{0jBconEjcZUuGVST|un6rYp(ZOdlV0K*+0g6;vvvunOSnroVosRLQzYjXEZU zaC;<=87(sMC z*RpAoST$t3&m{8nhy`O5i6~HD7fRQKN6m6_T51w3&M$okt8S{xnO5{T4k>V?iz7nN z>|<;lqzf*$UCIZBnVKHFlyCn7TU6W zaZp68V~2mO$Xjg}0P77Ut%JrpDKV@toN4A5rrN=z4zpPHc(m1^S6nOsn~X(4gRJX$2GOe)2^=ZRW9MyYf`+#U#u!f-Ly|T(61B2E zWY?gHvM`wC9@M`5>}>EV`y;X|Dpl#WSI$KKFxPG%TxAz3joT5(E=!~YS{*`_ev`g6 zaXsEf{Pj_J&1$%rE^+cv|2R;Q!;m2Pmy+PI@FIz!M?nk_KF$;z$~8q&Yx6~ z3hW=W(^zOde|mql{izN}36FePcJO{A^m@G49!Hm&nMxCq#)wu#H7N{hPUC3)tM8=w(mK~Gz# z>IyY1Oddq7VmLW>8Y>`dt6qY?*I=htBrdajk;RXV3SS@yQxVI8hW$8E+ifD7Rv^fd zEqQ_Q*>jh=JW77U5-0Mayg3;dr79f7Uk}G{Z2|@sv{ksOYa*^3iOG61&33ye%{Hdg zZR|0nxtoo1a#rdGn#`c(4*nK!zFt!F4f=G<3*|$Nq}+ZcO`Vj{_^iaYop!>j9%puW zT-M-^Znl(oHZ15Eu~Awe6gFsA8V|jkFXI4xE~@3SBC2GT)zRR2caEb2b14U!MCi?X zzNdkur}xZiUl!HEU>_TI&^;!Yrru~nyXJ)2D8{hQlWC-VuVHvf&S@m zkclW9SyWdjQa&MONLuC$d+@GAZAmbRg?T)Zn(#|DEy_Dtr zgfO$|^Ppy|fj6-@G5$T#YDD{*pChrb1>Y`)^iheYFvXTTN$BFVt3b$`SBYA;mDc7F z`1F{FQ7_)YZ2C6SF*h_0y<_8+t_~!3Lve36Nue7zgK&hNHu;xgZ*2$g-fyG3SwIkMmE zUtsY+v*7-o5%>SgZ8=+bvO^7;i30QvyN5WLI28d^+W77+-7404CoGFKyQO+3fM(O^I7~g004% zzjS`X)^laao~nA2;`K%iPoFrOy`L>gd^{nDZrfU9{_uM%S%1BL=)^ZycBmy|WU6q? z9y!-xSO|~*W9_P>mq2c@>;PT!XQac?$4@90%1}njN|u5qWVy+vN%2w{ZfqPMt9{{# zdhBAmOxui4R&rP$ESx!W- zR$87OfP)xB>JdJ@WJMh@afvuC%cjmI(%HDk0)?}fB zeyK(>{I#Pm2sUF$lz;k=VNs=WJh!$fcx*<5CcJ-uC;_y~F$6c$EUyG*2y6TQO!*7wggN>8F_J97*LiJHQxp zxa!zj*iPCaXzPZAGz5hP7d@{;E^jA|d%lI;X5=RZjgo%JM>DSbPzBA*Q*bi0EmxA4 z@0=51E0yJAE1{#Dd%B^5B`?vVG)s3`tbCf=%!YIOOE?fW34nY#(y%;BAULG?XcSIh zpddB3(ALwIj*REu;Rwe^m=n$2!qa+XaiQ_Z2Qni(PB(2Jj)~PhdSE%5<8(dJN!HjB zV914dI4d(q9)mN!H^T`Xc=6nUI~n7wlR)P}=}Xjzdgw(R5t0=?LI}@wJ>&v%?yO%E zzzlVHvJ@SIs6VODCFUNpFIYU78s9Unkmb zoa;?YI_l1gMb5Xs`m*MqJxzq3_qkYzLb0Yn`(b-mpnppjaXw46&FmC14_;h|gLf^+ z5*7JqGFmMkDF@yL(B3z0fOOT&lCC+^GrF>ZgjAlU#ON}7!nH7)w47k6Q2!_2gF%sY zw7B*s_vuPKQKu%Y?3WbCZCqj%RD0Zr*%Am>g=0D&d>~?L38FKNa_|-@gxOfDQ==X* z#%ty=1P{jm`N`lo5Aops;LBSV$hRkerV!AD6k)aKj9EMQ0KH)SItOxf31lSt`!v_y z%ea?SqxNmwJYw7I=}~CB!taB-GAoO8@HCXmb4UoDF!s3fD+tfq{unKDmBHRp#0Y%x z4XI16`~6~gbL97P#ER-I=A3a$8^nOoH5}V;%iedsQo?_L3N~LV@Z9L!?A|v&2c$X? zk)@Flq5%s0c4L3rq{>wdE-}R``7{v_(lJQ$*%aiDX>@ZtGiMhkb7R}PEqfDdbaoze zR`k0KHcoCHPPSi%+4%lCEGUT1B4uyqg8plR6P=wM_)g`|!(8a>9RJ$mMrY^z*B%c# zJJ-)WVPSL@C1V#Cb0@pIV(xae6iuwnP5&%a*4Eh4oEM#)`|pz_JzS(!U5s7Ke_mDe zwZki8R&+MjKa2jk%ZARz_V?*ZPWGm%<}T>Ez-1()&{@>XJzUUPeikeC*QfYjpR(xs zch~=Q^SnSAcQ=1`b84Or=6Ch9{Q2%=4&3vfmtavaH?uMpv-bcla90N&c2;ywRxY3< z7IC0ufD@h3+3(s5XcHB4XM0yCQ*&o@j$hTav$F?I;P|W2q@CozYPoOa1h=jSDm8rRkwAfuOf2-&}y2I)<(3C*?zXn=J!rau}45+cZxt*oUD|C*( zTjj5A_DHVQQE;B+#+KAiV@)CF7orYt<@9ZDFLV}*3y>%-D}!JB0=d5ZtK%0fL3#!GpWIySuwXaJK@A%B!63 zJKg8>?Y`3Qy*tLeqic*!F>2M`wddM0=URLI{+luerMzW@`ukBJGV51APU(tke>hJFpdKjCjWwP_v^BEX7+;AF(#o*2ZIZ?u1;)u| z7h`ej2ly$`1fF#npJv_c7G38=Xpk^U$>LMvcJuW}J_#pHCyB(zVOEy9j#O363$z69 zzCWfW2)6(fddR&w8EC|jFJt{c`R#KeUht(f@08JulY!&6r$s11MzfzDbnF0@k9hE& zw6uTwoX=KnZjS1L-czI@PMEj^;6wWR2GzyPPc&P zirIW(vZJnSyT(_Mz_cdFP3<}XDIS;+{IEhE@kxTWj8&tWyU1r7bWZQm^re-iT;8RF zuEP9K_4<*RPy1$+sNVu+<0o)h`%bc`uXPDIjHyLvXK>m8BkwhH(K&&DzY!e=bRWO! zrTAV-v~|;0Jnbhjh32yYnWVl2cv0CkX5rNwm^GcK67pRBsFq_yfjA^9}et!F4~Fub7if=HO2(uJQcA*=G?wG{^KSM{rOn z2wj_7(O(2DCe;vEj`d3oW_uo9(W6Hrlo57Y={9N7vKYJ2?wOKCVZD=~Ew5fl(m4*# zfz-|&^BU8jGsjM!Pj?)`{^u->e&G1Bijt3f{T^tXCWYkK$4UD}wPSa@9mNJ1Xm?aZ z>6FKJWJ}#0 z*pK&~VRb$+1`dQ`D5T=w*F-OrEkFKR`q%oUM7N-(gq*RIG)vGX*%Q0ZE7eFD@ z@}qd?{+OuI5BRNT5gmEG?rYJ?2SyqbqFN&t%wAuL+ct@M2n;V# ziyvX>a!4|o;EcIcvIMKq-MoJc7G@5PIoryKBg!^vsH#ORW)6Y3J56}ehepm^^vjMM zJ;MmrmX0=*XlSRiiTr3P&^B4|?v?0djefSgt_-1!!#2SZ@lylKv5FN0ht$~}T6s4|9rlOmV zsiRD?#D;;XO-5gA9y6W1`1bW-reV=sG{sRZHIpUfjwjOC?G(1(mRD+yNcIba)|pri zWB%Ue`pX+$TgQ7@D!mE)&$n|=?!!`E&D>MS)r#JVnvFKBl*|uC9EJ{eGfEu2^iuj% zS)uU3-1uX7T@^^ig3*>AlS;n+k}=Llg`|))Ka#|_l`VecG8g9WXd_he zxRul`({4N@V^_OD&`ESld7?9UXPAEVpi;Sly(Q?&$u_O>2Rt!gapYj#uwb!kSUH^8 zpw*A3`I!5d?EvSeRTA+YO>5_xTrw_l(KbJbyxx7WHC6SX^NR_%H`9x7H0#8Mbz5+? z*2I)3C6>_2yRT2}XU5|~hqLc9WHnAByfTu6#rHv@CO<4+=#FHN^o1=j8Y!#vNHp(e z0ptg;EHU-23@<;F9Sj<0-NFO1t9i~7X*XY2JO7T<%h!Y2Mzh%emnZV$2)&G$Uov8enIX(?1O8af&(IyxFU1_t^gECMVnOiU~iJbWAi zauNy(auPB!Dq2P$6{4ys8QEj@$MnybSXfyofgIc%%-oF3EX=<*f`oyAf%OQB7z>M- znTm{x`G5KKs|`T-2niKQ5(Vig0GSX8g%Igi7XXOZPc)=IUVwkTkdRRj`-|}i6AK&h zg=zu-G7<_3GAarh8Y(K{+un$F04gCG(Ua%m=)}rK7*Fj znBRZOvVSq`U+r1|;GiHO4ju|200g+p`Tyz>(f^g(VPgZIkwvT@KtOs^hlli{IOhQz zm$XXj3T(TdrZbxC^d8b-v?fnN-zrFG#0vn;gN%u<9PszFayQMx_@0dh!D;q+x_l1$ zDq0{XF(_BX>R1u!bQ4Ui$_6Ni3h@#f8L-jQjn}E6sPowon=7R`KxlyoT7mZC{k>*; zs1W{+^z_c;1->QmszoXL=}9jH#hN{zGo3T(1qAm}664{LC-dxSGXm3}eOE1?g#Def zc=dP?$9L-C(MDwqBQTgGE44d>IU~zRlH?uIe{PvKl`(c_be0(-dvEgThcm<7JCwq> zv(X4I(X}KcVS^T}ZKLl;nYTZqcUw|-P*$1-d%)yZv=B`@92irTjr2Q6oPxBi$ro3a zRBlkqk_SqAF+LKEprWz~zHl}@=;m(_bNls~@oA=yNd1kiXrZ&Lq(ScT)Np_EQ^%d2 zR-zUrVd*s+ZVM`U+SUbr44lp>L0|^5bnyqM=e73)TJK_$SpnG1|D8$wO&*NvM<%1p5`BdJRP==}WS!frqCNDnMa&qNo^d>hA)^e%qujoq<;=S!6no~1Q! z0!zYY<*ltNPv3GZW9I~+TGEN&`Qj(JC6uE`$Y&5*doGEli-%h)Mzrk!B zn}{}2n!&DJjmDYQW401HxH%el6%oYW;3e<( z;y|i(Fn0OCv@z<(XQQ~NG()2H^`4f*)9q@gfc8rS;wzr z)fa@>`bub+R#;0gQC5)=nJF75y`n&aQ<6Ko0Mn+gcekHaZ^tPXm_2GAf0JEz6U8jZ z|7;~IVI);O`Qf^i$V>P%{>yZ0brm%wgKecWFqY}zx(-zA?vs7WuXcJgxevr?QgYAL z^FFCq5}boCerl&1%018vI_%ttAhYt})_8V_WhdSl7cC zx|1T}xzdn~RdG*?2ZrE^7rWB$yd(HHOS9*!UlM6s)qFG1k>Ngj>l*{dXl-@_e`z5) zSa~#MItwS-C+?9Rei_SljF*{Gm`VewSh}N`xM6h%b;1D;ySJIUSZo7ua+u*{lcvA~ zUmc{pNiKZ5Icr`$Hc0>TIsQFUTCqpA8MA<}Ox0BEn6e}({a;e6KmCvYFDfNIxU&o7 z)lJdVsn_)sAZPC_q#MX=r0e)xnt`nEsXd99tK3wXKF+MJ@O2gW>PFW&mD=WDy|dUX z(G8;Gvt+M=2uq%_6WJuX0Qq`^fhYX;^u9~cA-1tO)~$3+ZyIXqcPv{lD!+wVs|&n{ z+}rmC*NQLAj_VktS!P?FYVFmWE$X~Vrw`%l$SVnFz8yr6?|$Y*4>)OPZXl`C_um?P z{4L6Q+oLpo$|l{9ERXIA8#iFFMML8^J@ElhC#!`p2c;G>MBeXX-Y|E8(F{KbzDMs$ za$}7_q;#6k6dmgsneTd|t^yh5ul_xP-sPniqaV42XTLx(Ho?Inv_JGL zxxbXI&4)@j$i6H-`VH!v-oV7K?1DiwB1|P-{D?X^bEyaKnw4$YOCQq@j>4)K%oLYQ z4R-`e!~))d1;W89 z`2Jn>Mk6DfMP7AHgi7v#KCWZJV#r~k?JV_Wm0`p{(?!oJnip`xjlrUbSgwVByT1J0 zchJ$}TitVvl?;Ko+7mXCU9qrRuJzfkR}o0oxZar}AEJ(QL)|r5c>Kq1XqBE;HQAkM zcD1maakP}!Zk3VQwG3dpKCyW~l#n)AN^KUh*Zu_{grOC=VQb%$75T13bJ#gkJS+`} ziat8VSIWUPghJjaFzJ;|F;oSfapcJAtQf_7LrKY(Jbm z(-ZM5F|68hab4+QCV#f*|r8gt^8@V0D^t~UcW4i;J zDISJl5~z`50zfyfpeIM|C0P=m;bNY2gEyES~Te5SLtB|_kKIJ1b`p5p?Bssix z)<(&!!H+~F$^Bv8^h)cuio6d>QRO9WJNK!D(>}46YAOunS&>3bwkT{YeUC36Pfg{l z!Gb6q@eqm3JpZ$)Em%4;`Q{mWnurriNOxZMNt8Ct=?}<@IlP}Ou9NK5;0PaX_|&w9 zCl~TwMXcYd@Y_RSND~Ahr1nUF=0X+Pa`Fy3dd3K2%pPPc4XCn|ZH@V8=4_L-+4{I3 zq7W#4i5H%uz1yH)lali)?pmXdK7@gW88~#qR9_OYR(b+z8{PDIGxIX;n(X6(wge5? z*pIIQnfe7GLI73|<`TzOr7Y01(@|w;fSK{a`&`+&b0A*`0J*R0hE83cST}x8ft{qTbe4&y!-;8=l&}yopGt4i`cM3wFE* zTWXC}vFWku{(ymxQqmZa`r!6e^fVf`{n58E+~r}^p*04Ng6$*IRAj)teEn9gQTsx% z%SSyT2MMX>y$VBJX;ZTkpz@J4it01Y3@I}%+=jGQD9>T%AlAzRg^na|MJ+}atvl97 z#Z~tVAtWIy6D!;WnOKn-Uon0Fux^t!AV>Hfb~}?WtfwI}JZk$yKU`w&GE$N6zsX*g zzJ18P%D=P=&@8mtW@t@dAH+-7WenOVklq9n&psmydtbk0tzlykAzlsb-#qY47lMA> z9&yl+8Ap_6Ym?h(zF({DnQJm~r3>9)POqFv_Sw*ahV0Om`5bsUiIz{ayvi>s$*E}a z+n7zd@DfsTDpfkf0E-RS^fk~YP#D_PrxM!{u1UawTJ*Vkp2D0IA zd5b@7L7w`sGg*zD#MU?D`f`GoCml|vA`bjsI?jc&4_c(7nW%n>oHVFa@`yI{hur~~ z0zTg0%|iQv>beIC#~`{CS}D`?$v^l15cgkRD_~;Ne-eO zmYI~^z`7)f+W!=-bc=|1Rs)^60B*%T^iWoj?na^F#D^JF*w8CD*~#vlot`JYpNM)6 zbg;8#p(T=Y*Nnn#bS0oy%?M$l|JcmdIK#Mz>eGJWd<`i|9Q=3E_FzG`c$sM*47X~S z?E3ethEwN@faY@4GeMq>Z`hlXf{z%q_*U16 zXQc}gy<&`~2JyL&4w1)x*c)fEZmM390)T*bKFX2NQTP%QRT(?O7Q!#z99j3>QtMBq z$;@2gzEpV|7fTDuShI`4YBgg!6i1{`NhoV+(aUzEveJM@VB`Yz2-x~xQm&sk|H zp<2gQCvz*YHQiFv<7cILj^#L|?eVr&rt-d$>Y-5dF54^z#2lYe)`32CM<$T{f-7~n zw+u6F+u-OlX`L?e6vnsu-5J+%)>^+W>5bu))@;g;8$pH#fs(}Ud6E{#Lz{96`>qSm zQWF)!jdI^O(q=b(WVw2jE`44a46zVZ5!KyTX=Grh5}@Vqr7QoTfl!F`*PLD@hq+s? zabYRBjfCfq;Ap%f9_){3lD^Rt1bsSYTgML0s!Ns4b&1lZXl$g3Gj@ZzT9@PX&ujVVH;z07 z0a&tY_{Co4>s%xUVnowua9?l6>~?Bh0BNLSN>Q$#SoIC4jk>tBB|rb&Hjw|<;%UkHj2@ow1c zA~zqZ@l!^SFMZWzQW$h7L+rz9V4ROTf9rhn(@Bj64R_Z}5E}Li7O#w_b339SD zq4oMosDw*uQ|~Z_?~a2?V7O;E2=FREMPH)5mJ@e7^tqU{=)-du7nHxX-i@oQlauD4hi}e?P2vH&MCg}9uNnd?JN4^!JDlA}Aeo1QNHrmku4s+t4sP5Czm5MaG zrM6~cS@U14yCc?{?KlZZkBQY{5&Vb)_Xxvr^#elj%%1fH*8XR)T)#GuAQ6lmi zH=V7>7GP{=f;g83iS}TQ5_Q+13!Ec`-k&y0elL0rrq9v53Rq?$z)2 zG#R|c4btD?SB8~{WqGr0mJ(ac($USHT!zjD$|niF<>BS1$E5ve%~O*f6aaSnG8My% zcsL!uq2!klIs_rv?e>7x%JiON@a_1#e8}(;&TeNgpbXJBzM;@Gd;ThSDmoDK3Pg2F z6fz+}MUHkJB3r6wcvaAXNG}4sEXnvAuPUiY{;8 zzp1NJUov^^{=u8A5Gr|kzPa(NnIl=VY<^Lfb@1cS;2{(6=?%yL9fGw7vp)rPd4Ph8 zi>e-(PV+9#zif95b2rGa9rT6iYGD%9O4RCu1Pg z)26sX;L;Hj&B)dQLQUTIdX zYJ)aDB@?5Xi}D!OUSWT7(!`ClvHl0r9SB(qvtW7O74oamRrKM&VtO*pYBvbijz|Ur(`lR!n$@7y;9`-h;v+X zjZJ_3Vx0X=jAN8c+f}LM*=h&ZqrFxfXQtYTCqi*4Il|Iz*^$fRm@9Jv43Vjhx(yfz zc|K%otRMTo0ERILU|)E5Nb48C*P*r8#pUkUzi_cacR$hWkSJe6t?sL&8T~gYMJZwR zk!pRx*rK;axF5Xm*Ysb~n)D>%B{?J=9iOBJs`pbzCZki*&6noFxx6UHO;1U7+8fw4 z?uwHzH?_nqnUp)9$ugYv(PgeQOD%T7Ny}3>i>p$IRxC!g5``@yWA6Mg(BoCl(gK~T zIP$FT)LVo_Cv0JriH==z4vMtMyi=-gPt)di)`LP}{2O`I4;lhhi}cvtj8(-6W*RhJ znaAsXsfuoUV7b|E(9mn&)AtDtqA%r}4K_21s~FYNZqk51_=fp|#W-MZ9#(^#0!~|^ znPAO&W~Ph#l!2R9k}xZCs#qZJC5@hOQMIUb4_xf@#IN{m!*M!|BjNWWlizcL{ z1oMQkJr3MkhM1JFzdFzlAkpB7j&9^&s6zOp|Cl=e8-=cR6}mOao3wbVoGPqE=c2yf zu2zn+8gfSRknJR`mm5?aNSA2@ul|_J0%MM6q#gChsKXEZ1t4t_-ki^>o=o)Am*QKQ ziI*cC_?j)lzzs~R)~bd2TZ6i((@;YxyQc`;e{R*yNp*iPDLpd|Qk1QlX&8~W9G=ltU5%S?m0~u1wym0FMr$R z=dN(!+}>^p(?)N^kq@1l2Zz+g+=_z821W6VLcmu{CIJzEsBp-h2!D~T^&NUzp*GFp z%B#x9$Mux$H?;T@NulydKlBZHVo7&E#4T)=aKLoY2QH_f>sB~9Bb{i=#Z`#k@;uYeL z5*-$rC%!}331!**$Lr`Z(o3HzEoi=RUP`5#q3{R~x|;}R88qeRtrev=fSRl|J11P> zhDA#< zsZOlrv$3|NRkDaE@JAQQ#h!YZ*Pdzyb2=r!KoGabZyfEZ10?FjkA>e?Mbs$88f>*l zl?6X3flEh;geVyec+J$S0T9JSSrca|agd zq5?`neSoLtfiO}3jNLf0uR=24B3{7nLHq~$Xl@FvNA&3l-W61axCgFWmMmX}aSSu>zj|nJv>s7sEuGwh0-gI^XkK-M>gCDug40eeTLI{?`Uq+iz3w#3`VWI7JU3R;Vl-^5PD1-a$e(c_*mX)U^ zTC|1BTmiPruaKj%1%(;-1&XzgNi-9^M4^N0X_PA^Y19h2R^c5B%b!F#cf;^7uh;H1 zRnJhmHCC`st7qyx?fAOL4nxMfq&DmQ!py&3rUVWsR=Zv?(L{waRpV9Nw+@dl4qE!OOj}q z{d=O0zdxgBK|nE)Y+b->{JLL&aT^1>dp2eemg-|j@8Rk_hlli6(3ad8#)JPc=u%g6 zXcfJMWC_~Y9$Fx=(JU>mYR>>R_mu_5(>$Ebip7pAFexlAstUf$DsoOEOs}YZ$Pyu0 zK<-J*3d?yg1enP_jzg)BaPclzcLovc8BjdrJKIR>H|okiF^x>n)(+gnaie&r;33_q z^x1>o_hfsjdw3+bNCqpZG1=?W)k1Udu`JV7sYv5E?=s}NV7kb;klD@#H>5tqY~Yxn z*I!3U*`|2n4ev~gx$b6KXe#=Y7kR0+w)N?tv!juSvec6pTbHm;f_e@LO7{p|$o{8@ zyJu70#3m{Lic8mmH4WLNP+0btbFGUG4plFsy10eftLZTiCQEdG~T_ ze|}NO9X82=UKHwBfT={V3#>T%%`JgRY^-rl-UNx@Rab7Dd|g3pKJCf3#9mtM7j5jS zIkFlk(Uzg)XrsGIJ4;-_ZjAuq+Z?Zlc)9~LzpCRDiFCGO__58{!YJ3tYhrD^MAM5H z70*9xyu)xzw!bP$@(UA;h9}6%9rwn2QBQI@oy^bbc;+k59Iu@JWR%9;P7ejpI0>rQ zFN)O{gXcpmoh?PekPjmG3KR8sd6v!RQI&x`!B6(!nE56A;$qBLq zV*)Y1gWqYW=2e$qUD+&t*>sIhzBg{x-L!*6L5Tm59er-#e9uuD(39p)TI^eO=3Mq1 zj2*~9&nz&2a-%6ifDnAMx&()3K|1oz1V%w7c0buz_Eer9s`-%J$G`yutr%VcvTX!? zkaM=#Bp7hK82$`;(q$lU#%}G7Ry{j^$dOH*`PP94AHyoPZ7+_g*h9JvH+StOh-B?2 zB@*y@`e3+)@PONk>ul$X7x9KA*~r5F&Jh{8N=kX12&dL5Kj(@Ea+Y&WsYi0-FF^a0 zKD~EDI_F`r9sA0}@dD+MzDpI)V^jJu|8Dov&egyhIQrSoa_1}q-3ZKm?D`Md$^9hB z1kx03!a;g#VV9*c%~KzWJ{Vk|A3x$Cbmg6pAq8CZBa~s+Pr5`kdm#kX7ME^@bhwj~ z7WHo5WqCgv8t$Ml+4l$`CBLr-;%BSr9+=f!8hFU#>kstJc2iPdtj2ZOewUH@)~XZb z%mGmk$g@38_B3;|$%jtbZ2W4GIqI27dkiPiUA!jn^to2;HPuabTG+x!_PVze8-){5 z*`j_Qruu>m^+$a66%%}`(2d^C6QE^-hynAgmn>e%okU@ei3-CPa`1Pr%ulZq_rp{| zauC3K5|2&oP~?@38~9I3 zw1TN2bCQs2kDZXJXKC?2EtaU3+pnkf3`O@Y@ zb3_N6W}=BJt25Wa#a?Go>W5e6PsfL!qFVQfXQK;LGZ&pLoTs^6*aEm+R3Ad^oH8qp z8N88j4pMvRst*mw&N!ntQl8ODOEib$Vc@ofhXbXEWE6bBBjNWf?@L&qw*@;U{`P+`IBLz8g|8v48W1IzJBeyKnde z!+scqs2*l*ef{O^C@=-FI?i4t$Is>h-wzyX!V3&0f$SKsr3Wxn)2zCozU%#7EcYBG zk&eF3SZx;o$6z{V7oe{(2x}tc)@XQD>9tv7t;u8ym7b2|>1-#PBQGXml3>uGLkcB= z-FeuZzZ1oX|A=wJ((5VlJ@#SIGj2#e*L~AbF9i>JkLX#qp_dfYoU{D2vy+Z<+}PcY zqbk&_rPknWIlFZb*qK(^e$>|6bqxioXou1Z@-HTvYDDrRZn=#!6cVPBx!mP;Ly44- zBaDfwog5=wlub>LB+-2GTSN))?<`14TIKpmGA(713%m`!Yvu+8lyX}>&i<#1?KLZ? zr(@%YIq`-sZ!g@V0n{8{1@1J}CB@9Gok*+eG|BBw;RE==vtoR@gVCNMV&b(=yvkm( zZrP`;kLnyTr^^=mW(`om6X>ebtq?hJBK8K0{k9|Dm(r*5=|yi#LGkNo{xE+3_TVBb z!o58QTLX2>7Dd?ww;mpG7@CJS$)=$6dpwq7<*~~_8*-_NNp?+};w&~)lNJ&~^VN_x zX#ARuaPJ+KrAKm98-0TLR}1@Q3S@!4UGb+43oI|r*DxNCZ-^l&zv2sII2(ZB3SF$xzpIFqy}oRaI0+Uvd)R3L8i;PhWx z9L3!o=c~@1;*n;rU#73jS20u$?$)@f>c5T>@soXpBTus#vd^67 z7_IT4kbdN9G@ypRMWpu3B|2}};;zDQz$R8s(SvC1?kj%jY~lbk;8a!dtTwoWFRA%G zd_gvnppz(Hy!zG2WvO;XzIx*HbAe~>_@ChDdoB29l3%N>ixJQ1bWRp=Lei-nNOyoI z?;F8%ZuqaxhNE;3u2W4TcLwUh4&&Ib7FJSw=@%LjS%jkP5}L&kshJ%|t?yUyvOBy> zwP!dv2)15nlb?=&zL6dXxdv7t>O1jRqyob%U3!?psgN${xqD!##j8xBY_=f|g@UlR zBt&ytVw6z)-&293xqDH=AI-lHvtO8a(jX|(A1GIR6IOTLEydX@mb3XSGyBg1)vq*A zfjb(zc@8$q$GlM*f?R|tt$A)-3FRq>ydhtOa)@w>f z5fxx1*N1F@6xcL&S=j0GtCEEfTL;(KkJ~bScOwh%5o`H5`nqbwOdm-IrM}WT@lx^` zkU1EC)aQnZt}x#c3sH59VooM=&Kv`%V!gPVixm~r(Y29X|8o`J2hYu<-8B?~rI2S8 zI?vl2mo+@?tPF0^k%~i(4fw{*yS*O)7v|%g6}kR zE19WMLQXXH2Emeyf^3U<4v0w0CnFNW^p0q% ze~ByN$Ilhg`5se#M#+Lt&t50Rp>`32{DJMGTf!#7HLk@B3te40o?ap^R_ncXhTfLc z5k*a2Wqi=uJB8gwf$dqc)cU2FY>vyJUllLwwt5=Z%;?1I462;kRZK?64R(Fnb73g2 zN}w~f7pq(=vOaL>nQXXzS}E^68l<(Ksg5is?x}XRpQ}ZJML19Uk3Bz^m$K3yr95Mk zztFgzR6p_^v->>4b|9-|wXTx8zC z&jV%-=e3AGXbRcM>;5RFJkAa&ZOeW)(@$b{jX@~abLf4ZPug(qM358W&B#E2vfhLf ze0bS}tA(WA@VyT+TbQICB(Ex4X>~qlXGatn^Uc%G#)B zDBoWQ?ZsKFd?~__GglTZiCp?bm>lek$6uV>c7-j9i=4&rHmGGnr}TiPby9Sd^m|6# zPhDXk2xcj$wZ6x7zTsW##-K9(lr5x!o22#Bxu)BooVKR-*&+BkDy59c0%Vl*0sWS9 zVRcim{le6ry!Gs8Lz$1KC*+%oo=PElV`sn(W{!dykomg~TD+`E=+AH&N!sLtHuR%Eoq1x6KA)*pxrd3U*D=*kQ9NV2`<$7bQR~fe4Ih*> zT&9?ZbLt}IsILVPtV-;D>vng$3AJGqd7i@fwWqy$+OiZ`5SAUsd*o%>CxLj{a5_JB zF-#r2`zPdiJUGfY*6_W$d$2^8C?lci=UDIWTUXkOeQJzbii!i8U%E*8Yo+(FteWQ6()Y_W zy%S5kgFSuu_j#Yl9>4YPu^2sXqjhPxmV6P&<8fuNGWa&z|B>mAUqbGfMRMVgQW^5I zc(V8c|8uuviFR3Ap!3A~9ycp>X4!b?4~eu9e}dEZu_^|bm0tudS*J1N(r>N&duhTb zGu~V#ZQX$euUbtN*$hBGCVif1^^X#&ZfB^t2n=QHA<$YuV~ig)1?XSri;iQMXqgMb z>-*}m$Ukr_VRgMHFNVq!i%pC&|04IKMcQe7|2B_j_!G6L(;-d zDP=9v6snGjW=eo3$sp5#SB8Iom>Bm3>6I#pvhmJ5iqLM!E9jU z_gqbzyZ^oZW4^mW2><+7@117;SMUATx%bCK{kQA$|FSDLioz@x?0pWM(FTM|Hq#pjs&?_~9_(%Ac)M zSUCcYLeeTs+fBN2zVA9A=+f|=_+f?>^rTyiRtHYI$eAU0&~yTKFMyAx)V|^5?7YyP zjBNqO{sO30)t6P(FPYbdCzQwaP{8REcTQluePP!slz39~ACYh8<`iDJ??yHG-Zvv(Jm#ARt0*t>Ct?u@fX*t_n_3>+u94&2n44Ad7I#xDyrOm`1K|l&4sE&r;z{Qx9BU^=|A&UD@ zP3CIrWJMkK4Q}mx&Snv=rGU#Ij2=4pA5%6N{~&Q#^IE>D3|ioJqWEbZ;}<#|3z^=l zPCxqw6pclKKMKC2KXJZU!%?rRZV7x|O8E(@_Fnx_xRazMAMxH&pVdvh;p=oqulc%fu_LeXNPK`12Gz6j7($87gcnda zeaAZWXVF`Co10&N*pb|Kvqu~iWocEiyFuGWFz|X}XVV$l;VogTFP;>EqyMqzeVB$Q z>8@&rYLI;8=2^0Mc=yZtdQG$3&DISuZ8}XZw#xebAqNGX5Vou{U7O|KRS^C-_$8K_ z#YP^{Tx>UbCV~iw;&9cBn2fBVVdm)+%7Sk$)~b_iqs{_i!+CnI$*l@gG6g%XfH`ap zlUgllRzvd7gJl`EqJ8yTgF#z-j))rDh&peQ?rzjQSsC7=q|DRp6U8$KS$MlkDKipf zgZxuO`pdskfcm8Y#)NxV?Ug?p#h!<`^zPlwk{X1XV9Xc&2*Sd8jA8fMGi{{q`FRzI zXPRb*n&8=s0{8$-_ZNVne>WrKTxkqBB-61_YjMCNZe8MQy7&iA8rK5QX|y&XLSl=! z--h(mgkwcbOD2;#zNIA}6e@t{Y?B840$}o`!Onljd73Z_M7)+b3U}9otg^v*;l-M_ zZ(D0lffrZQF&aP^!wlqN08#cEe3l6(vIgC5BSJ;5Qt0@VRqFt7(GCChE_{Fu|8Gry z-}+rOcpLwy2?O>Z^>2UKQnRb(Z5v67xIn+M@7*7pDsuAg5%;Sn0S+xZ@%%4OH;MMkBEsAdSS4N$p2x-RXIP_?{-0dF-Owf1l z_Z9m)CFDO`=qobf97tdFGpr$LyLxn-obzto>$k&qSX;L4Oe4-n`Y!A3UJe$%op2@F zb;-E8+;=~?OPp7!Xj*Os)m>~yTt_*bmhV`*Rw3#bNxH}_7-T5n>HPQq1}p-&TB^D1ps# z@Fo7mQI*eet1#@dq}sbY*C#J{yNlMJe97+9>X%y;HfAzykuBX6F}J6}O^+7W(AdF{XHMp;w^k+ZJP z=q^|D#{t`5KbtIGo@t<6WB ztrnMJr$v|bYZJlyCWzdTGqta!3GWW2B!j7`dF?^SMZ?-d!&yiD+!rX478)gquTO*YjyEl68F1{$ZPADwa{{Ze&^7?&5O4l+ohDPAq_f z=0h7@0t(*_pB9yz!tmwujUs0`?f@*?rCGa4!~DSy~gN<6r!H?C7YVs zkDsFvgJmkc#`Lc_XAhc-N*sALbCmVK3!r5fWDTea&xK5$zz}g(jmSvIY z6?%gd!^X{Nzslr)Yg}J`eQkBWbSbHdr`QG2y-slgQbo+YQqs*REXQ0jmI z8YQjOOA9kIaYucFTS&L&xs?nN*AtMrP?w&zM}wGr%9}Y+YK0?>j!Uu@3ZuQ!4sHXO zMjNc(T4|1BN_wa%7b!E?hdl)phyrpolOEC^R(s({*M`hdt& z?}yx*4DFV_&4@Sx9>YPWC=ZIi0J*EThzzF>?kS|Zvr)V+9S1&qJG56Aer5`PpF@vUPK4w?$&?(?7BSGsdapPj}st?DvHBn=QKI_bP7dRsPaeS+g)sY_#a*)s#i&@ z{Pp7c+y5-l!!!g8gMB6!pLCCTr22b&vF&6hOUO(1am?w;t+}{-a1>nqGL@wGB zB6(?MmK>amN&pE^Dm%FnTV{J-jO@kXWTHJW@t%V`h1{tg>{cxfm718L z#XJ>u!tTL_5PK_mluMG1EJinqdN^&$u@Y#=|4?O06nJ9!-Y_z+|5@wqmgLD=7f4XNIiL8@=*sI4-5iNB_OWBZ4F1Q&QQrGtj+?V48?L#_BJJ*lIcsqN}lXo2JM<>HHdCRLZ ze|kE(nb4~1X9G3ingWSzE+q_pA6Qs_f936d8p+V zd{mb1c~8-AVoy}c+33#ci%8lGBKS)x4AKl#3^&g4tpp1Fnt3`(9SlKZ`sD4}y9-Gc z952VLCYzi%K3HA3k!}yGynS$FO+Vyz%D?4mMkMi*nYtB#xn#{2)1FViNJZQzv+dO< z+y=Y`?EviD*pYKPzR**M(9eUZcImjN3o-0q>w7(~sCyQ!*$X56*1*T-PT%`+s9x&@ z!U9Fh(CkU~$jaTx#yT5a<9uI)nWK=VifQ;oIM#m7b2MgBe~7hfg;Pc$B8sgvpFf9Q z_Hd5xVp-*dQS@QRO>4xX=iNrr%{nGx*^W;P*ZN)=jrq1c019F+Nlf|`=+D^)T4$a+ zv%18?ll zxp|xT!0mNFzFP5e_Ko#jz(=8f<3W#iVh#Od^@#GaztDa}w;rDV<9?wi%fyh#1Kr=^ zP!V|!f3g1 z@Kr+33*V4IAe*>!{c;DdU^y{j>{7e>3xLzJs&sA5@^irNi_G#^YUf3%P|0X_RF#Lu z7&^l@meE|MJ55R@Bx>=&dKztT8Znms(^hiCYJLq6^bVJ$p?8MgLY5z79wZ$}m)xuf z$s#f5)RW^s-0b+@B58)lbFjGzLXCr}ds!f?c9#zda?BY`s+Zpo&+Kq_3_WN zF?ybViBaED*A(dtO*@Br;^f}VLm%b@+Qf2ee*p?Au58@5?JEBt_TDqBscroiMRAE> zL6i=HN|i_l=|oU^iFD~8A_5{!dWlF=q$46-dJob&p@-ff^xk_5kdVYPS$nU&Tvi14Ev3&Wv6ASIM~E}y zc{E1H;I(Xm+osnvB&jfNq*crHO_?Do{!}Lmx+$w&T3m}{J(C&sw>j}nY$9#A25elm zzE$v|q~f`W0s96--3w9&kule<&9yAva+%|+elFHiZx!YyF^j$nSe6L~N!}DcR1=S+ zzkjjY3s~>(EvV>htK*U;lqU;kn9?ecK>a8gT}HxHnja=6&}|yi@5GX~Rs%oS(HwPB z5TyCR_jSYjDIQqpwQVHXXLN{f@mHH^uP0C-uCe0vbry(mq|#-H{sl?iJtQd-`Z<`F zhoKxj?(^4DzPhCo9k(W9S+SQ0m9-0qOR$ z3x-sIN5*0{BMbP=Tv_PnsWT`zOZyZmYnjLe>vyB>WO6bai&)3I>u7IfXC(MP<5LhO z&`Atx)t~Y?*1aK}^+x-F1Mko9*+KRh4WQikx|iDDl!ZzR4yG0tuB~o5V(O@NxawxnT**)q;0~9f z&nE@JAFmvn7l%8hfzGqMO%^n5svI1ndo2vk1vK{*+pdPsh9m0bvvauQMVv+LG$o5Z z`g3hFm8S;Dnaey};_!)7Xt-GKiu+V!)yvr8h{lwT*>o{5(VJ0kfW=46C3R_ajTCMe zcD#~I9|EmeA|g2?!VtV#Gxtk3!KIU2YefPR1-Ur{p9me-M8KUjm?h79#2#pK4iW?d zpT{j%+yz*5ZSA{4_35y>c}4nfLTb27{BqW+9dHqT7~oRa39@ZjUOxnK{f7}Hz>K^$ zJUniu@GLzW7MS~^U0|dzN02;$HuSjvP!H4(xJ z1ukV8J2gg0S75Qmjv~94TjS$Dm7LsUZPn^cSTO8zoKGYdo z3o&i-<&zHc41AxSsGH6ENx;Mpi~z0jm`wpI6TOAV2KXWJx*;Sut3`Y7Vr}G-3-z2g zeR5}&)zKdBa)$S6v%L(|I@E5RJZ2N)?`(A2w`=H{AD6j<)EztFMywQeGomd$UrKH_(junxM8HTL-lb$peddO?dklMO{+5MAqULEknYOBzRG2c!OI^ zyUcLX?(8sZ=MV>~gV8tXwXqG``CpaJuo%fWvHD3M04(8dh_UmcmL3s2uB6A#WOqZp z@2)-ma#im1ejwIw;U@u%=_i4-Ra2o0Nr58UvfB~*kfgAOyNa1&O;5SW>(RvH<&NNs zh#V$gjIWW0VVK`5?#$9RbKjQka@&!D`vgNJg))KtVdoXG->NjAmfj%zZ#~t(vf_Kh z^T+J@*Lzm36`AER{$*{^{7ok_JOfJYb5!wEZ`o@#-yF4Z&T-D|VQuGafo=agL=Ij= zbq=DT0DL!n#ise=w{3Z!vzcwQ7t!Xk(wOS$jeBB~2{(d##gnr(2dfjQl)_X4*+}i0 zSD|YX@I;sFW|BhAm!1iE3yvE}y&>~bZ!vK0Q#vQFkMAUC-ta$Mepw}cQI!4o1i((& zUIc*xG88mp1j4eL<{y|o$ko(}#Fqi_?)%z#ZNOWrltU+GdhOxUgHVzrO?SKm7_8Vl z_)cM0v4fpgf9Yk!hvvdAyd-Wj&5%o^kap+fw!G{mi!V~4-y}Q^cN0hkVeJbP><${U zd6LdBwTI2O_Nfs&oJ@>dyU5+c{yej+$>%W6#S29rR= zKFf?$O8q_do)2NVv!;5lbT$oh0>K08=>5xOt8dFnY^UG35$$`B+O8gLmeKO%ftY-G zyDiO+3>CwSKG)zY*sUkRCU=0Xa~v;u%C!-r1Y>0=cA7}Y)C@^Gi-bQdSap`k<&m)G z*laIXeUZCl!<5u1>X9s^Qd;&(EjV-d1#Fz+-2|5p9=34m@lhUI0R<4!+)@D>N-@Hf z_9p!g!ou?s_ISYpqgPBcQ0L?suU<&ARbrkQ#jN}>YInV2tpg}ZjC8;KUX*~1MrqN( zJh#dla95Kxwzu&zg%m7@kI>{^A*5YDmIyZho51&8P(lHZt803$gz=L7KBc{p#@AcK zZ4$O=&^<7?;T#_!4L`p%e|fEA>4+yCdDT8hgIrKdD2i?!$N6^g5LSBFXcQlVW5N;m zD=3UkQcruwi|X35=kZm;$yFs|xsChdQzEUyT(opC_- zDPMzb&1SfLb3Ggml3Wxj+~U!)ShkG^IH?Cf3RCZ`=!C!N$KqG~ZNY%F@nDbln8Qme@lTbw4UY~ z^J|+=hH+BxC)NEVC@>pFM&_SHb-wp^qj@i3r)ouup;cS@@aYsU3Z&VB94EFrYq~=z zw`V6?o>iB==L=Il#JsAzQQ1e_QfxK(EdfEtgD51##BFW%AUY4#w!GlP{Yy=qg@@oq zs4_5?bCT)6p9CBMb)YBdhJ5c83~MpBF5sQKt9EIWK3lsw<4(8}jv5g79*p+b`7nrY z&A@*&Y9&Y4+sdF5GJv%ljedYUmA?7)R;Olw8*kLq1;mDmP1pU_+a33s?mk5HljNl} z9((aki1XaLaIgA<8`Gg6<43jwf%p$3JN7>=?O$Qlcy!L2F`>&5UAv4^DI{3!JAGuaj5- z1w@~UYyf!0PC@71zQamx->|TEU{Qlc{jM?Gwh2f&ba=OaI}e9}!Qdq}Dx5td=C(G) z+tX&eG=SbC$*>bY@@AT$By7txvu8NtX8?9X)K`4`THzV9axjXS!FP}CAfKcv9dhiY zI-#6>p@F5Ez?JPlP;0(VrKJnh;$=*uT4-@9!8qp*oW@wvyYi1Jid^ma#PN@EMbnCV zFnNq0L)PphHa<&Li>2#!GS%k{-}FswXC+MWA=_vfV6d>`Ik_eYB#4t}Bn$2I1~Mok zP8Z@V&fW{X&?9GQBZ2D=eOMdn(2dB-VXg7vhJ1!p94st{aVi%$DP%uwmIMgMQTF| ztT)THx2Sh|N58y7oPih7?nqu4if#2YTEzh{FJgtF2qlqWu~vPaRcrWxlvGDnhUR%2 zuhA!z@J05ZR!UyyBrpkD(miX@Y=%szJA3t<)lkL&1YpBp_mwb)}3j?JzR4b#Pd$vnBWx{AvAl=YKkUIWVvc{g&S3O8)Q`{Y}#8 zx9+46JiJVI&wnaF!G`*4Fc+%hto8s5xc?GH+v+Y(S?XN)LBjown5Gf<6$(x}=f5{n zWt)QfmTZw|9$Fld9%bE8FmlHK0l0`Uu<&036A-BAb9)<~QNFMvpkYR)%h0yolA~_A zOOn=4GXL(JQ62dYqY68yt!*+o_;liVPkK04duQ;h3@2SVO9@%AdcmVlcJ~rPtoV}m zC2y^9oumy%T-LM7Z;zHO#8i0?juOaDTDTlKzOvOH`k0r-8nHbHy$oW6rz`KDHVS0b2?(tWuhN#w5`?ZF@iyL&CPN zg3)I{p$7kq7l6J#C)=jsIIQu0p?GQ?>DK9q z|70v~64<4_^(O)CA%Gh9h1vZi(BFjim7SCTnQ7@mfO^`Q#pAh8hvus*07ZegIuA{g zFdN0H;PC0AYclpCS39nd+J{2s+p&2Zr}Bfo(S1)IF3^r`DZlm*h^m{ZBO4eo)HA&t z?|9F_Pxi6t@a+bie4f^)h4CQEJlY?Z6$n66K7EI+4r*Z%Ps5;mg+RDgOpH3ic(dIB zB1b=Cc%rfIi`KH1$@(+DHc=Bmz4ZzfPolL72(2tEZ8K7X~UB&FC1%gJ{k!3h^8@8qRj_ltgTsECM2v^cUKvo(_u z*eUd|Ij}AGnEQ8tx4f3q`eED$1C9milBzHVDQX5R(opw6svW&`nP#ErW@_}#2u>7F zWNvU0oY7iVE9QL`)9Y?x_OFrZqf{)ms?nrJ0FZ1U8z$($&VD7gHmv_N5?9DOq@63@!iz<7m|(=M9-QL_*j_Tn$e`)O(J-R%qpsI`4StsbHi(zPx<@(z zF!@VW{2ScY5Ej`4OT^2_vkyV+IRfXiP=u5k+OEotSpXlg=5zd>@B%!<9|^C=bu4@G z7Ypbv%1b(ky`b;mk&5V?;aIbztf7=JHO&rKd?cu8FQhTDQ=X2wX`J5f!ZzAhzw8i| z(xKLZ^Wbd3SzlGH&@Mxb|7$gWttRuzIxg4AG0w*=c)hXNR(G3%|Q_>ws@ROtQIvk8r`Ie5=c0=@ffVOg-`*Gy>Tg6>cv4gAGIAoJ&o zig)lxhDrysYlLuEb-X?w7s0 zB)}xi;&Yd{cVXNaq;}{w=WOb$N3d#Y1+9^_Fhaov5@EWbtX<9R0e9dT#QXP{>3#(^ zi@$rYT@qe5IplH*741k3Ld{=kbZBKvT(H-&*Se!OSYs+fu9YzV3*mnm;s4@L(A;M1 zU?7=#a}tBp$%VG_?cyup_z%`}jmO7WC! zRA=fBH}Tw#x9L9#WKPEE4S^h`2)*~WHSNNH>!XKLQz|t(ca_axs?cM-jXb(0djWUV z6{cJA-Ms4!_~;TN1`dM}T}2p4yX-nGgVhXL zT^MNnWYVRbqb-S@`@CHNvs~sQgVKVjmH8kBBz*=p2R?)n1QN7;$e?se+~|z+bpbN@ z1~abr37W$iDg~d;*G5ok#j#fm76T|BW{dFTP>XSBUj`g^#yGG2I(Ie35uB%nmpNgI z-8ax4J?>|Iw2xq_5{n?1yCJs$iY@4)>}FJdKJtmI?SfH567(zRMqNIKRb&-9)I*&g zq4`XKB{NAMf6ovZXbNbh=EMKPs#U(zb|!gWa{E0&2W#DZ_EGjo;Wjb?Er$0xlBOV; zr^mvwfr3`iHO%!ul||s>;LRHyvP5?CQND-IZlpc#H>c=E>qzuO*^td-;CS%r&OQ#5 zOh`8jH$yG}Dyd63KMDAa9gx@{@}=KT!+TD)spMhkjhqXtswM+x6D-b)-qD1r7t3SV zGg5`oJX)n~f%;=WqvH4K5bu6I8gkg*rMM@59Dxc`Yr_h)z%qdLbni~`j02#G1uBj{ zCFt4Oxv=&xM}SKPwUL6)n-c@qE&(!IARA8tp6inVAnN|@aC0qfbL0t5r@IuFH{i$yI07_hB)@*r$8tX2b=Il7KzQr>8^$mZyjImE-bRvEl1m}7 z1mqYHNwkH=f<>NR*WQ?*)lH?tvzZhlx9n~r*|}D4mcm!Ls=X$!`c$e$d~mC1g+x=L7!L z15t)aMn#E4{5JGS29N?Yg0=pL79z$pGN0q!D!h&!1ix$S1Ihs%F+-sc@NyrX=qEuj zlHX{BY$h1eo?G zkP4xtxIN+DoWXg z9Ukuv4sZXYT+x6Or#$5%KQSqm`@y$Q&l0rqAlIim9mSZhCeSA$ zHhmDAM$sJPYcQ)mBSf2-;~S%w)AZHcF?o8%s{`JwcYZ~howbt~i+wLY9;$5YO5&3U zv^9$x4xs+7{-Z4-N2H0JP|y+4>dCPxN#~c>+gm&A`Lz(JA3l}$@2*aGCUfe81p=ut zq3{f&z@|fb^a)v3W`jOB36z&wWgeP)+<&~bSAIDe;pPrMDC+)6&;-l|NHY2=(6K{p z%Jqfj$5N`Rps;y>(@N=Bsm|rl<}2Q?<)Z6KkJH>fgyxA4L`MWwax~0+;E_tts~+BT z%r#K_HlhFe?$XW6{HF^!Iwh1-8Wt;M^R!OpSH#jMAn0k^M=|8A!OR z)cyhR5^uie)qQoVRMR67%k(6!P7&T&Z~{LiTszk_*8dSscxp{@-<>}9sZ=BoUb@D( zN71fhyWl!<-NMU{~LWsU?AOrM(cQ@ug41EyDC5l@}UV%Rb0{aj257Qquby zlUa=4)^f4^uosbSQ)TO)OL|QYW#gNNYKlJm*9RHUM_5sv8xn}|@f|NY5{=ybw|1xM z$Rnc)ESJ%%|A3O9Psp-I@G1};W63@AW!|U_Xdk4l%u_4-8**PcOs+w`{Kbas-PP5e8kRZC#(u#ObEFRLY}0S z8%lW2!V+WD#XMXKQpp-=+kA^d>sN<|fkvX`Gx?jrW|z_^UIMFK`tNXezVS_~F3a2c zO^yzWmwfU03_l5sA$=R$j=K8SWC(P*Aj}Lw5;z>ZV{tW3Va4*5!vSvxYt3Gz4qKl@ z*q6SNvHs7^rnB%8FZdkZDE*z9j5}g=UWNkDIEZ(Va~R1A6Fi$PGYd9|3)Y%^xc=yt z6_paL@A8LhAwz&xl~Hl`#V;hg*5J`;=^2!Z>-oWs+(T&dLr(jFDu zh;ZnEPNJ+K=sJxH5WwfNfY`}}-&!T%Neh1LHMXT03?AoHG2#2$aY&y+VaUJGu-%4aZQ9D#w}=sy;|;u1YOTQLvt zW}q*}P3JDLVsS0*nDpZ9zHb|`eSkP?uxvAC{|ox-41xZ8gHVJxDZ&?xl%*6OQCnIq z!-ZZ<+bK9%N7GLORmVD7ZQNCrlv|naW>s{@C8vf(qJ5&ng4}{ksbd?-nOilw&)(AX z^$g>y@&pf28GS-bC~S4$$X@BX#Gnpp^E6@ge==iZ`7+v(_+`cw__(!hmT$pGI#d$e6h+xomXyis@nQ0b|>Rm2hGI$p9CH-DCy?5;pGDN za!Lrl17cY!c)7-#;>GBt@`_OE0J6(OaQJ8?{N`-@n;kf$TEi{wGS$+^LC9cuRxm8pg*K>XuP>BO01+6{tyB z0oWa-vpdE2lA#yUS6t|3nTXiRB`O*HjZ=fr;~l-Kkeo9L65bR=fs|4$An^Q`lKwvo zN$yF-A2}zN_p4*VI)Q}52tf|nF9s`HG3u?3)xGuE;sp}TlHQi~;SvGvICrRW-9Oau zg%HvY6?Garl8izN7GeX9Yw-BOt_m35H}+2%jt#j^s;8sNh(EbTwC)(k#covsLgu&& zpfw+@#1G#ew#*R#(zHpbA7ifii87o&qSent20Yg$_^M?y5NDy!f|5&M7v%?lfMDV z(%U5v$ahYSnjJnP-GkA(rB}vg#CEkKnB%;*hbv;P3v7RtATp64Dw8t&_C_@Aj*FzN zNKeMMk&|~H#=Q&s4uDxu4Wa%ujGg}ss_$Poco(lVUGo4gjF?%)Ag^0fB|BadD@TXk z7VhPHMG#$@XhEyXSkEP#g!Q zolg-Y2~r=!Bp^vOZu{ma#_=WJX&SG@e|m%UVB1vc&<}9rC{di5~BzZig@2krXZY`6_}-P$P`7B z@Z#_ahoGQN{m0P!_5M%0+Y20qdXK3|0ZvOR-jEVAw@>`Z@xvgt5-W<29(q0T)ZOmz zDpjTV1Om*y>x1z&%(Y%Hy;7PuUak}Q!d}blL1P=$NEzA%K4qmQqdmL|2nFnUZ1S_6 z6D(HNzy>-Y@y zPvXGm`BwPJU*c-^W+YlvWyogw%XskOt~~(iInMCKP>$|xpY0fntowxF;*Sb`?5*aI zyP?aVd2_kL2NgYQa7u?SfIM?`DPYDYS8u&vktI|ERIc#&N&~$USa0N4tBN3Ez+k9J z1Nhce+omO0Bg!wY2Q6jX?gaj7%lO-q0U5Tu!?-C6u09KG{`Ic_yyF)~jCELQSoR<( zDvfd43t>+6ace31_RFqHpQ;blR<*r#tTS3kSC$`3R|gQF8fjn;4X+HAd^$>y zh}TA($s?^cMk{(3H$NcnA2?ZOOxJM#dqQ~_1b+U0fV%XJi&ArGHSY%LdU?`C?VPu3 z20C)dmosCUkW)w4EmIwpc{)b8+x?#eMGSH)(5zL1!C%DKpDivX$}^$9@JgHQ(BiO;bOr64a4kk9>ASNxks?G^Ckt!Bu{@OS4Rcko`Uhx0Qio) z4H(NfjaVkWgnGttJl{|_kuwHL!1vxi09x(8cN_Xekn(ba7MD@3ef#*6#7%4+{48B`y=tWF#;vUc*^$i+P35TVM|B4r;fxk61~r zmOvCj@pX>3dzcReN_gFO7GJpkI%$D8zR6nQUYwDx{>^n@HJvDz^ zx6gw;bo#2pg*TpgD2bd$sj#jrRi~FJzd2*bq^?DE7fELFKcQfAF>k+z*Om6IoUD*+ZlO)@O$ibt`2E7npSeN8&VxN>vtyX_fYe2 z;#_W45i<{y8Y7k3ex~!5?pk(UU0+gKbM*AVJq{I?5Nbt!sj#d?(DinfO zqv5!N*+t#K=HA>|)oy3|fCd$f{OO7M&nd_O17NBllMg#*@o3xqg6pI@Rm0rM>iHZ& z{=Fk2;y#yI;8%CWzT;Y`suq2=V zVMkQ%Wi_v=bte_(xKQ-PF8nxpxicgV6n;Mc5Akm2xF;u|$4J|Zn3eybL=);DjNlk! z%!2M0WclU%);+Ka1O!Uf)C^+XI#_|@D*&c58~?pj;;6$dX+P=_7@xR8P2C|m4l}QX zI6vPCAgG$VsX(|HH}jRjNoygD|4#h89pAG8PGgxIq?)F!AobCiYuphY6*wJyJCZlS zqC#S$HKE7en!G#ZS`gi9kp>BohWsh!7@;S{)NvZwYgxN2&Nc4GtU!~p>wgK0|4BQ6 ztow(!>E$!_R~J5o?AiAdPT}u*JHfS_^c`KYAS6pAT$+Tz5$!k`YiZAD@=*FdQd9zq zqLOndO0TeGS)BV~Pj1ee7c6`x!AnPsePDkl_kzaKp{!U38Xc0yy~J~j-J?3bbK~X$ zEj)aZm)&oQg|#GirtF6_O#b$Ri5VS&VETcFM>~xeP2NfyU$EyVLY#tb5XFeZU z@B$M$*Yl=!fUiS&bvidwbnxTua5)@A~Og( z;$icebb|G%aPOcSLN(DceQE1cjym~b&!fnlqlan++b5sWo@sa9-%hZN@<9>i;6NA8 zo>kSqnUYsry+=d>CPftLZDxJQkuXm=9GhWnGQ~|8ogGZ>{v-e;n(x$^zoBMAAKduN zsG3yAd(`77np9x#ZMWJLSZd`eeu9z!i3S}#Ftr>UvFZy)tXAeb*hMXenPX0{wI6=R zcz=I**kOV4duK{#lY8w66v6bA7!2uKxMFX{^Ff^`F`nnNr+^YG2)|f(A_ErWv4tl-_(GbKu4%xbF*yjhgprVrJORf z1P_iWaC1mhHmK4@Ob;}h9FQ=Krq#|G6?SmV4!sH}%x^ZWX2C7@PWj&}L_q^7fgu!`t8FW>WpCPCk|OlEH=Tjl{MJqC7bfb$pFijRr7MV> z{r?aZsm9vgYP@8Bk3~&77}Y?Xh3p-U5l^T|E}Cc0m$;&CY|iY6=lyb3{(j@s;9H_{ z0tAZUk&o%yciBePuP5ZXZr{HM5qH`S)`on3MVj-_YU$%5L7@o*+(rJ`6n5YLi6~%+ z19IrYLMaVgi&>BLhNs^?bT3aYH+6#@rqAMGQ;&-s1}GnZ#W?4DjQ6s+S1JZMXC2K>yOH~E3xGfZ{ zy*it95T@BUmpkfv%Ww|G6XyzmlewXkV?BE8P%B>`kT*=|PgKc<+{-P;vwd2=DpB(^ z@HD!@Y=cKQSCq-}ne@v#C%4IvFdCCIu(HKW`u?4jWRJHYm*QcXb2t6Wy@-Vu4{<71 z*&6D{o+0QY&qHN{>{|5}X$eh%x6|=6$Lr`j>c!Oo(lqkzcbCYX85>EN6GzTB?E{46 z*bP+t`~#Y!;(Ui&(s^4vq=&3kXjm$I^eHk_eXPPx_2xV3JN(;IacxPoC>E+>32`Hr zt-UX~jVz+^hHEwDXWS8m+(FMo$n;9sUi6jXp9|(>ScO}0JatphG>@pp$z|u-Z_qN^ zeT(WO3nwIHP8?fL62V&ERxmdvleN+CG%~vc)P#NFm>bp*GvYSw&z}u@DPkAwQ0otn zAzDJO(rmae`Z|Y4hhkPh#eTTiIg!v~n>D3G{bD2V?LZ`HVZRg1qA7f`!+BRkgTt&- z-95?S@s2F0;H%(Qwos`rc3Oeif}KXERttPRuQxfIwZ-%cArM5+cC#vdWaf1IhUbh^ zV2jtQuN;YBOKRik!(FtEm)aECqp|Tj*-yw)qhsYuL+6UJo`caqU-1S*E7?T!m zY=#dml_cg2i;^CJma2_vX(o!?bLT-37NQx-jCwQgh_q(L#vtutTjfnR+nyyDBGJb9 zi(@1CO1otGk0&{Yr+CD}?cjh_X;Fkk6nQGXeS~3L*B0R909nf~B~e&^ zZH`=Iks#=k1}B=6*!f9hsMr>Z*$a28GLi4OK1y9Ed?4sy{PHUjg(DfAVe^@!x+(rR z{DMZM7X-4YKl8%P=oRWbmM{k9oLf%32T0hAR13;&c!R?vA4vZ613STB_60a?N3a$ zgcdd40tNGE67Za$3N||vEZf9uHrzy1=*>NC^mcMCfjk>hIhS@~#W-jS* z<>9hcy;nOA_ObdU31_5=Z%gvI;vd?7tVNnuhD_RtIb-lzvGc@~?1f9=^EW}fM}$r< zj3F$`-AJyiYqK9P*KkDZio(yU2enVsoJuB+4kk3z>vU)JIiuVsMz_j$T=Z;^lW)>0 z$4k7u4OW3|sjwU&ZDkc2l-kF5$E620rvxW!q=fKAt^C4(AsPY&4jSN(W2vLVd6`rD(UWE;}#uEJwtFET1N40myEgh*AaYT zPt9aye!=f7;)UU4som!erx}D16nT8k56>XWzS@G*f^S!JVcd~dzSwA)&oSmmK${X7 zveI=y88!E#sqYJjyzy8}hP}=r@yt1>0w?*K@d{TMsX3X+UVVkukLiFPK*KHLuvAf3 zUOu@NY*+QhcRN{c>`&b;D9AspW}lqfoU%RmVq*DQ;s1)`?zx`z8}NnCZpNnlp0Y5dD$tnKaT*?s9gs)ZoF z)4v0TaReDcU7<=gywbU`qLqW7`j{In=zOGO=?MUEoKMt-w@dfLk6GH=WoVe8$$AI~ z`G;n&l&eYdQOu;B#iio~E5mVKdeU7X<9EY*+Aa{hJ3cNzm))V&*LZ7q>ACP#GPFV; zQz$8GPJakUrnTdQFVxzYHc`)MUJ>-V#t<`WjfOS~dYa!UMq$*G%mworvcIOj>GT$`%-;wUGy)BvIVO*MRYU*8L4li!eQ@jTBDG;CYM20@Uy)iu6#NmqYT_hyqG(>(p`+C8Ij1lP_MBxy!%wbqt>vdCZ zX(;xxx$y-_EAEkZ-dSn-hEfhS1UBETxK`UmR;1;YtOImC z&iEu#!>HOu3zUr6FyKRp%R%$-3MXzf;9o^hVILH4>iKAZJh06D`P zG-4W3u)g>8@|+lZ?@h`+U^{1P(Z$v)e4GX2mGkLuOmLSSz_iQR1&clzcTnQFShdi+ zbWTPYyo&$~mA4t`$ot7LyvVZ>>y9srm!TM;mL(a`7UwvPtNi4s6%}=OuH2zM_Y|B9 zX@Ao#DoHvvy;DuObaA!`t}#(2P)OQk|A|}Z2^E-I4(vludbn$7SXZk(aAhvUOln-t z*m1);sGg5!khWyK7)F;DRHiIfL)r@XUlY^T2A;prku>k+(J#hq1BAx1&d!c$X<$!f z_b`Z@EmyT0&l`W=HYi=wY*9+eoE=5f zg!KG~l>q0N-f}P$<=&UX>tm>#LSE@(TYS69d!Yc8aw5Q*oT$)Xm9fyDT1N5y@{BO7i}PyAWPr_A!Q2gnzJ;-NVy{ z-EDRUc_f<4p4kQOgo12ieJfm)kNe78*){=n+oDbUHl9`IkT3Ja#-w}hfiQ*uRGNRC zR3@(NsK?IK{)hjB!rdju_M;wKq$-#Fm&kw)21==bJlWvYkJ<@Kllb~Qn2@1u`Kgb| zwG=7&C)~n)24^22Kx*xH94FXh4Sti*V8$olFU9=9F*L2{e(=LZl}?qTe*P&51I-7| zvgoo{dY0gs?L&)k5sO#;(I>PMc2Y#H|diQw#(?AM-{lUV=gz$ z<-o&#NCiD{n{z?I0y;-QAg6%ennJUxB(r9MqSOMp#iCICJkRx_i%9aC+oA<=Bi*yA zaZuw2K%u`N8NP^p;^cCr!PI2`NBjL8D~zUI5ZB^z zH{AI#KOzN1;d9<+a21OJ=fJ@zVtFjL#9v7Jwu|0&-cX_UbeZV& zw>xx7#GYG}5sDm8*9dH#_3g%fk*YXP?=9ADOr+G}0ZvAAsF}1jzUs@}Z7OCwv;E{~ z_49k7SG3tRnXPyTG9ENV3#s1Nj_YrJQFL1QVxQ;OKA`i&1_)TjEB5$@e0TJ3v6C=8 z^K+p;M6c8^n>$_eVmYEu=q7R(7USXGExBcW=M8pSwT zEk>=4fCRB}qza&WUHjA>JS+s2WCzTCNWKYXsbumEy^UmC)Y)Bh%g+kptXY!wwQpDr zQ|v8}FQa`n?j*WLt+fz*_!T$^5Wb#P-J98l>KQyY_|UyEll%0gWmHEE5AQ z(SR?rbk@NY=t7qdQbnYF#P^6g(1)dM(lJ#pYG!#jY~+htbL@6W4Sj& z&4&YGBY6_U{h|w@b~n60IcXHa)d~A9luxAdd2C6I;zNHDh@lR)+?Ir7L1OWC-#>LO zhnb|u0hx1s^Zcaiw---%Tz(R`0)0+Mn=%Kn5`uL{js~^L5s3}=n4>0tVDJd zwjX{Vn!dCIq+62FQzD_g-Qnpn*W4PG=1B2n7HhN`mR%rawM@t0!n@qdn^=DYDt1Y9!tLA%!>q%{LF`7;D(~8Nhk(&dY_u+;83tNjZh9kt4G4yZWI6rge zUd6c;WDN*Rg4|wJ-jWaEKdk57;tf?%hmy`r_HLWnUA+C?CHl?nS%&1Hy&R%I7@LmA zW(jkneAo)JMY+Ou!hXIq$i1MVhqd4oSP*lRn(W--V#5Pk z#+bJy458atbqSWKm&lUFPBN`0RC-e! z>6)2e2rAn+OE@^Vdx1GVY55g#sH}zNKBql$uzcpnSQ<6r2{iJctQ8{;l&`p!qU+-r ziWX<=qF@YC_LUEp{hnif17e!I-)i-%_FrK>)K%|6xcD0$DVU7LN&Ub{)o$OV8KR8{ zXV2OSv_77G#ZxG2d}h2INfsFW5;1$%$0zgxW~5FQAvZLC3vyv;Ud!;4ZI+boyA#geOXxU+rCp{1-s>vu@RSp8uSZIbRH-oD&;e6+NWXBf$m&;1V)qmI0^+{4;e(A2N_ zKsHWEwX+lN1MHtl=kK-yNHy<);FztS1Q@bHX&6(>k8fpeq5ZjYqKk0)9DthUITm|Pto?6aIoq6ET(dT%D);W#_j^I42CG%T&1#vnC~O;k z;T9F#JF6nYOuP1hr}EJc5mgZVPXebqVs%urcpZ_mJCZBtB3l|z0+l#B7Rr!loj)WX z=D}14_Y!(#!c&VPELzvImyNh9AE8DhqxK#|r?G#DvIX(x(t+77;Q=WEZo6M7>a?-I z_>eMi%=Do4GUPX73Q$)KjtX@kxWje7{9}jsXWAQE?q{SL2K5CCG%TDHp=M#sG-5xF zkMLfiKqWDCVq3qW9UdCHCh7Zq{h5vyJ-KN<3hJ})%2P@Iw!16TK>`CmKzq#tfTHE$ zFPPJxEzthNp#ZORvfsk%qk@)Tg?px9szgUHzBuFSm>nd09ya~ zSP4LgAceW|R}I=f*n9rT^7DWAoep?m^9f6-3;X34V#c9%?v7i~#CPQ5X1Xt2muTdE zd+zS5H<-QNBfr?q^O-I%k!ZwQ0(`sYbsnZIX~Jt#?vOhE+f-;8R_0luJD-N4lG%aY zk%e@6j;6Nt`R)~J;s5xZ^(ggZmgnj2v-=U&L%x_C0r3rPI$z@&BlNO+>D{H=u&yY) zYd*&d%c1F{@~g~kW`cfiYU-%axc233PBx%#+JJzc6G93lL8Q2rFD{VxwLZ%J8c$Ku zl@n%*16aT>%_ud71@)EaKc!EzVGmXHE0&RUb`UD{yyeUSbh1w1JeKkz!z2xtwaXyb z#duSC>L%jS19FaAg46`gxuQu$HYSR^e2`$Y^<*fY2UOBsMKLHb|iZ4W!|kFaBGi`s?rir|J-yqH}$IeY>EHRCK#MH)X;O(lb<1 zZk>sr9)kXEOR?Q6HP|ks=mX18ADhjV`nE za>qOIzxzuTq5k$Bw8@?L#dT=u9`q0cKD`BKxmAO@fBAm_yNk-d>@M)8Ff$Fb@f72P zD;SMq#1cbevt(XD->$+wm2geABMjK?;c7m0av`6{k?{w z!?OQ+hOuG1&I!?R5-A=k2W*IHyka?^n><-{O#SlQ4{mUt~te~JX-!llHWCo`J zd!=$83asV#ZBGlGyKLId_1?dnV0TS~$C2WrY(SHExIa$rmP)LWa!<_h6@HIbB|)Q7wD*d{MaR%-Y1{ zshM?|Pw;{SaYzmxAY$H(uQ;=cD9~7smiV5AANtV7c}vMX-Yq zxZ5jKln_1Y+=4th3x#>cgC=^F@H2poo-pSZNRs2sxTKs#EqFH!ZE@l_$p%Oc{QsW3 zXdmqnTMIdMx7ph$7zw|2fbHs>yn)|VKQpMUwvBvp$z-o6fw2Vz?wTlGORY({(x}IQ z=z77cRm8Viz{a+6zM8-P$JPA*kYW6P^>4KD#Ln`>adEF6yN9N2`nI{|ma5yUYnu<{ ziK?$=PI!$5Dp@Z$_j1i$vesiyuPeX41R40OSubm@?~syG=j=7j_>cVwW78&1Wyxd>+cQ?Tzyz@kFhD+0V+k%PBViP3-xEm4UK860kRewQQnSN?0r7 zJlzfzSZCtL61<%#D27O$1vcfoqV~svA^VxLc|$v6Kr&wP<$s%z|JRJY-1EV$j=Z}+o>%xHl=kRabPxifeemT(jL|D+Kl$4U`+LQpK0 zFP-Wx#oFUJ#&#{yqZd0-7Hy*+vech_u2#tdc8^bu1*{+cZ_?Q}r|Q(pBg7GeZ-T2= zi`rLF**TK(RX_(HSBs!RTH?vru|mqv+44T4>@ik3MfKAOd20>I%18qT|AIzR!9x63}D zuJQV7$IKzn-Snsmm{@zSdFxow-^M?EpUoCChLW;D$#P&FMY%I< zNmgnamdF&E02jxj>%gpCBO&0A1$UF=<3zfcD45yXq!0yG(@IPFDvzdT^r+hG698)o zlJzzzZH0qm;73RI${X_iWz)Of2-Cj^;VcUmJXEq?@_$7TyuScWbP&+79nN7CI86qG zag8#TuOIPRQH7CrZ=~{#OJC@Hj6d(m{>vUA92+l8RSk+o?A%yEbV?J0iZfY^GPciO zvo0J!d8+l~nC@5XOA^yV!_arg-OYnvliA$63w3+K*nOy`LvuxpQ#GIJ`a+SKW0aba z7j%vRDx)BlAJx9*L-Fm0)PR%(2qHU>K1>wPL|xE0w-|#$oFboY$davm4Garx(rVQ@ z7NFwCmmTo2!;UBAiYk;jt3~dS&{IYAW1gm{ZdSW`Qz{rYiUU{hiEmS>hO&FCwdm4*QShC<0L?lS#D5Pdx_U_lT^83$&!ockx>AGfyhWY+L~ zK%LXZhvQXwef0vA!!f$CWjJvM;kO!% zYJQ#C+8=W1M%ED{B^Hr3zpvnin5U>Ij0z}8ZKj2~;g<@eRC)7f^=pJ90f}nMvqD9> z>Zyia;rLii(hzgfG=G$Gb&U8-)g=vawgoA|@2em%FpfLEq$rO*YtB#-irr@=&sAQVEq(rzUQy?Cv0xjIl0lvt2Dd4p zxM(>1>_xJ?TrF+QQ7YE)7A#RnT%aXyv=FhldtBz|va%a37@33~Ch55Pde=Cm7jeY0 zg(%5XnG$U%#9Zt9xOcp^d{q@ZN@&vX%<-oWApxrp@ThYKsbAh^3g9} z{+h#+x^RhyFLtft!Foleo*4hfnGbM#-n}>Mq$({d25ucz;8$?6r|Ook4E`Z~qR>|A z`AjfetQ~O3>~V|^dh$BxVMOIp#Iw9mCqQ%4jCMag08HZuWI~H4Y$T7;ll2M77{6*8iR+oaYD>hWdwD3Hbxewlep8s;9*OL zF1c8RPR)2zo~R2OK3-G$7@SG6%?+VbgFoltT;5^>g-veES+;lmD50oQKOWq)yrndz z?0BNn&YLmCt7%e|&;4tA=05tb<2I_Qdh|gXJDU%}cDRn* z39ZP8V84Cyi#b}RyyL_gTRgi6;ICN=liFPVfQ53VQ%MlTdn8k+bVS;NRp}WA>Y;wNx7W0nOeOtMD9<;E`;>u@) z5?U5gdaSAz4^J&DHFvn6@$4>dd5X#S#wMrNdL3NzN2^e5Co^4-OXi zCdb>!SF%>+jIoLr^hG}5fa&lc_K;t3{;pc9rOkPx*{n5SXWf*J%2n~lB}f}2{z-Q_ zl<)U-aLKFZ(ymS^AU|n2@03PUMrdLOg}zr_(J`yXns1@#ex%$m&@q3I-;diY4*ZH z(^oWNn3SVJy#1XUq-TaA3hax0a{ilU&4Z>Zi-Z=4_Z%P36UeBc4EJ^_ z9;@!q$QZfHvacD1o-pJYyVGC%S*e5aMNw73*2~z3LI%H%33`=UW50=6i`9V3!KHS=ZH;{K%c((o13QpvnJtK2ZZb zE44JIh#S+HBRhCQHb3~e!e8YybzXiO^b2yMr6HQSM)`*{!BL9}b^UPdzoV|yIV-hA z&HPA^FRA>ETOs4cyueR&|1P3AxG6n9GRrpGrS4y6?vb-@1i55plzDmN&<>!CAJ0bG zdv{Epn)zUEI{W@F4+b^${{ruVEmheY0#X5=q(Npl_3@+Ta zlh0qE!g-J4!9%U~*WgLKS$))5*aU5tXKE91qX7*z^VdIMR1?*!SfnPD7v4)|12>LI zxKuiA6okK+hY~{Is}cr9rE1(;lnI+;=CmAl=6(2Ste|EB;-pdskKmzZ12;VuLDP&}RK577paHt}BzWU z@Uo0zf^(v^g8He9CGxD(eZTgdS^JwEzC~v|&lH7aT|scnFr~$_FD(fA4_HXUK)?pw zK6bWX()1PO-6QcEua)V)fvgtydN*Sq7gbw@PD%)E3C*rp$EmXCyytmOu;j}OI-{|v ziCrYT zF~~NwALkwX?S&rs<+j4B+1jsAEHmuNZg|wSJ`akaY*GWfxYL%uU2HbCPjZW9o$(gv zng$SH4~FjidDZ2O=p3AUp~2t##<9bKVc$ytm)g^pHntS}EJQi{ozN*D@W#uJYxdve z7D}t+Ym-}+akDST5$qB$P76r=HGAiJEW|XTvYIb?RGkPpFz(`_`MO*86|}lf>9GGa zz!)wD&Iv-XtA1dw9?Vf@^V5v5+iYYauD?@H8%7l+5l5P=2P>Y)dh+}gLQqxfY%wP( z?liIUHjJ67Ql?b@s9G66cX@rhRhlsNQ;?(@PDN<|5t!i*7T2D#{m3O_KlBz7f$L8k zt^pvtf97?7V3RPo_*~H!@k;fNfu8Yb$)2{VQh|;k0+Y~)y!Fi@J!yAkmFJ@JX&VYp z-a5N~vj}MY+w7$iCpyHPpWm0%Rg|fNCq^QR38Ek9Z+3vp)^0XK>G0NM@sBO?CjI)9 zfko8s84~~(2$&62pg#$*BhrHtZ={pt0*NK0?t}kuB zEQ#s(f*pchDs3>xGE^H?2~h}bePGC+)mB8$j&AvtCwAdF^o&bI&&}Vq-uSoOT>q1| zPKqA0t1DP}j=|APQ*R7I&<7ALZuN8sPo|S>r`rdXOTPEF)jb(@Zo+?2(LQ%J7 zxg97NglGL_la;!>FH^%KJ5EJKFmb=<0XCIT&L*cD2|UsCrCC}kFNItGfXIQGohSJ) zo_L@Ex2-7!gM_H<`zS$ab$mS!Crn&nf70rlsqmCjcIeHZ`QNa|D+koW@>PEI(b9Kq za5<)V>F(_AvJAg`?Jb>#d1<~~upR?{-j?z|V1F+tm4CqgYRCN5@zEj=i>Q;o;Ivd8 zEgzk747Bs}@JmZ8J5qCX{Vac=gBtif>BJqc&3KvRFUFqmuCCJR%_@bB{>1ZRZ7){O zu*2nxnrSFzR)tped5h2Uknbh`TqiuDL*b#a({Cp&cgvO|h2Em^{P_yIt_``1zhFkn zrIp>tmb4|SHAyjiLPCc>FZ@yt^>_$Rq=CCN3()j;DB9}h81?7gKVo`jWfh!dyQqVX zpu%4EO0@QQgnd(%bNdGKMBz&^KQCnBXXgZ))HBzbk)~$G%Sp0U>|~gS(Mo$PeTpu5QB^q2rvAtvlzQW zwaXf!+Q7*c5;}VZCdpoocd9|vj`{N%O|1i_eKDA+9;67rXd}3iHsF`@LPykP)YV))mK-9o?g%1mx9Q+{Dxa*A+)M^$3Yn<7bXAH)O4{RHHSQO6WV{6Nemq zhdD#d-nyP$N?KyS9Ni?qkGLTKOFMk+4z&YD<~*)#T79e+BFt&dRNJxaZ2zs>%JZ2m zPPSQQxwLtW*FN9|NMIuj;ULn;6NoGA`B2|zWBG}sq9=UDgA{k`%H72 zX5e=MF{=Ebj>8Y1{^1=F$4laYw`u7|`Z5O?{ zvDF!*`o1uSs2=Z?m;186>hM%8Qu^&`!aef?b4AuV3q>2$7HcJ2MzPn9{&268!-_yg-_m2bXXm^nR|3zsy2J5E@KL;O=IK4%s;IhE zEzu8-$VPl6t#7AYjgpFaST1IxCQn=*$!6*(ogD2iT{*N{8|&Hijl71dJ&A_KnMn6m zYxCsIw}(aY<$52#V3TpILnGs#dHUtZEa&_+f# zdEji-v^i||V3Tos>yb7D&dYeNoiqjz&o*@aCZ3)0s1U(t{uI{}4jVAEk7)X;Zqsg_ zoZ);cbKq^l|K_z8avzsM;Li!j%_@k+=hqb4QQrE90Kl9eh^+7$7vx*T_Qi2HY#3{Z z3jof{xGO>ZkVcKfNc!;^kTNm8e12NCO6cENZ1yX=Majcm<4n)4{jog9rtjpJR)c1R zCW&hV>rWLUK-E>?2b}}!G5Q>ht{xAhnCbbH>o(rsCE%Wu!y=iSgM6HH+%54}wa#LS zrf%iWRzLo#@zkOl+wc_^HQALYZqYal9Z}o!ee?Hu0u<5RdS-fQ>X8NTvW_mC?sm)r zMg@xMZVpXNO^@d#!e0jMY1%Ynw^?Mca2*9XhMN`q;P^*!B}t!0tGDP=xu9MHI~0M)TK^u;y_}^= zMU8Cg4s)7h$PtTC$e4@h?g?M)8a5OcGuy+}U8{cjzP1>1`X{(g?bjs88y*fKrjfWT z5i2j-ZdEOXnue0ZoZ{e#0A$-rFX4YYMFF1M24r}5NxG)3s#W`5 z$4@Q<8mrmeP?2ZeTJdD1Pl293&B>=;6v>HB=3|mEKekGf5 z>f~EtsR4+*!t0mw^9!h?Kubs5%{rk^QXCr_i?4z^3MR-@`xbltx~{U_Ci{R`zrG6}r8`zqh+xQ)v0?O=9@{R+rV( z-4TgcGL*Wpa3VDGkQZq`Vy5L^(H+qMyk{vj+-cF3)6tXqqknNxaf%mo+!(B{%@H5p; zL(03{?%;Zoj@*&<{D|`VdU&v}QssvynvEtwJt_`!W8;VUoR$>%oqIQd^HkMEJ{UP4 z#+lkFZCV82rr^V5Wf`XOrg$L^CRGb+9dRM z%w6NuDu-Jw#7lp}3CMu;rPRORcsBOX>8PGMtY92v0g#_6Ph@Lu2D&A|hBtRfHotE1 za6O=+MHqI}p_}H~p8T(la z&kR|=&a?rSXlSRa3#6Y}1F|;R%A<*q;1&cq;Otaha*wF4Y;AMqs*CKx_CYev+V}GS z%FF$JIm)TmiTy4OM9~6t<7+bnGs~>n_*5wqi)pTVO?bND0%OJJ9fD$&GF0mF-R=QA)7jcqfx*}pnVT<<-*b9ow~l7V8G2`<3u!% zD4rD-3peBhh+RwkN%<=KiKARWgQck5a;q!_(6s&Zb#&(Y^n;!Kv+ZlxXROnNocH9m zw&ANvJ-zs%k&SiC6~V9`f-Y{^(W!)VPo=%1lp#yai zlx2uWf&qf5_G^N+{+qX$*fGrITQkjbH~O2m*+w1xh@x9oQ{9%ES!K@Ct(RpBJ%|5f zKe=eX*!{4&G1w9HDe(jJSplikz8U(Go{T<>iS-93Kmud$%*l>Zv12$gLPXZ9Ov}RCL9on*Y*x=3Q9J*_w0-Q9j0VKEiMo^y;#-zsZs7m zy@?b1VT#&gJef{6hWeA}auxhPB+T2^2-XOaXvQD`bn#sDtp7tulWWbvmIoxy4?CU4 zCd1o^ewXFf4A+O{3H%CER+Vhfg$2dQ`n)W6oaw;CH-8gb{iCs`qc?NDW}W@c0L+QLP}#5KV75j_J^Vt;M{(Ysao|HKOynN< z^)x}SYvaM~*!(m}HJF*<0Ad!^S5!T!n%KJ5UnL~G^#r3Azehcmxmhsgc83^Yu~6;ag5_F=(&^}6@`?6hhDe{ z?6gS%*Mh2|XcbDKU`*Mc zaTJ^NuyM`Z@V9(XzAc$VxEkbbbivgyL9k8CkKeM+JfP1N=nDvWojSrzqrqm1_dTnUa^A-z#;Ni{x%?a2p{!i))t>Q8%fb%I{Yp1No20aoiwOpJ`>s7w6 zVtuo3ik^x29gX@IP;5EZ!tVwFu)|eT0_hYHw`1pTtj=`K146&z3F1QWxP7tqu2_$a z_AbcU2r&Cx;s@oJJV$+H+Dq%na-2t`eujq;ZU+YHx#^{8+&p;>Ne9xAD9FiJ3h0-} z?6&?)4V#mdcyJG-s7aOjoWGQ=2{Hxp(bG>AB)LSv5r=sWf4&X6F5)%*hkwc4*x#Mv%2F>FVt7vKSVXe(s9{?FXw6$Ym>fJwJ~Cyar3;z-!I4$#PL?a z|G$xJ6AN^|JKH=8$q)D`$hpN0bjblQg4ut75!y=#3_=`Erc?UWK?_qxs`M_Fofuo; z-T(iSr^YuTk5*S+Iog`h&|vh3ERZzlqiEH?b88~sH~os-8pr;ZPeSXY++iMw&SBrN z#Gi&bCs?(4OU^0a^uv}UneL&vLpFnV-g$5U{|aATO32)cw~6vh-gY z$mjVtR=5=PpmT)Mk4;_BDcFMe%#zGH`@d-@L{=6iEWiqEwCv~nBhibA>Yx!=GT zz$*1ICX{707JHZ^!1b5}4xe|MPUEkGUM~%T(7&>b4l76=`GN6s-7>@-l*cqppO$06 ztySmvy?xA5?T|+JcRo*b0Pm;gLbr!@0r4t~C=6 zNQe;d6+)l+*9Y(~6g5S)wRR&m{xs5{G-F{-&UV`3GWu?smaLvAp&_d(*4>a_6`DFC zxbO7~f%;&)6%<+XhUX%v1HVY&c04S+OyLZxKU5%1UbwQHvMVjo-aRi-#;X~&*ZHGF#+{yvq8}4=-ln@XWZHQC8{$wea=IP4$$<4@RzD3CEWzzyfhJDCk%fGitSzekeSgnF4Dnix?=r-p@fyXx zg1X2{e}CDx@IKsQm)gsNG~6I*KPqB-o04$*7C6b|NAx4XPN~J69CDPmSRy)SWp}oF zWV-wpX-`4*omkO_ZKqImGqS~aBl3ly<`0-&1eFOo>o{$cxq3E!eud-R=UR zg@L;2r)ESj&K~}y{3TYAc_X3Oh8Qwee|wH0M?V~j8dT&TmH7|+3WJ8_^W#N&^qW$T z^B}C@tNn%M^z~Z+N&~m;3}L_Rr4Hy++y|1R>4w=qO{p^I+`8ESfl~BuA=Q4sSrWGT zM?brR{5PTqHZgy&U!0JcH~e3Lm#@wg>cXL)xpoY1IaJMWYXzBhsw~v(&Tng)s+-U@ z!-8}6@&os1DnL$>`K(qsiHj-GO`NstDZne%s0kXj{_*?s^xj(Y(-IzJ&n5xQ9*wrwKs{;cUd&`yi{+BClIpq+JdisY5GD1 zVuJGo95hphXExBc_z*z}lxiUEF)`WiBdlJ#E4Zd%MDpi61i8~5;?}^-Ueb>!@>?9_ z?u~uq#L;n~NZNf%a!yfM(u?LfM^TwTVB5X{WwSu$CzjPf;sygW&%g(-1)&3jQX3 zmVPvi1*l;j9vbMy0LMTp1ny=J^UoYZ_CNs1!2yy)jq*7MALUp>+iQ2t zGdhsYoke!sbTMW<;<_caL z7#Az%6a$QkRSQYYoOIdR@7C*=2*yY!03>RI}+kMSpqy+`B4IikgooP;jf{ zCuw|S#pDR(s&0N)n1=u7#? zE3hs8faxed!%tmXN2Y72av%|^Jz|kRe-}m1BG{`@u4k|@QEI-a8QHU348D6{N@?~s z`;r(L@&XJW$B6iPe#R0t=fV=%U)7~2cN?x>e(eR0#gTcxpkqPazaU91=SN)CA}eI& z`&K0ES{mAq6{!PFJ#bgfwVclbnD00+ri8adU=V=C6O=TquP5)t7{4>_6x-d`)#D1d z!|m@3ux?4qt~iGb!fRCL%D4x$W!pT^E4pV5H2^T6k_2PO;lhny7MdD%;G+_+97@E) zJ?YX`Y1_abFtd3&s*{(}90jxOP4kaa%go|_)7cmFs<2$QLm zFuDcz8;B6((kP1F8|GF)uYBt0Ub<~T`c`_Y_U{byHhO5WV(l{6=LM?3GpC&2zyz$L zm#BZg0GJy>Q`n5;UVvs`VSQ;egjQ1VqHUT#q=b5mU=K(|QOCpcF@rDRN8x)g$6fc4 z-=AObCbq^-&WX_Y@StvC>}(Ft z&cpyuFJWR~X6_8n%*p{zFKlOR=csINU<6zuV&ZCHWFqcp-~mrBWZ~?jVB#ojXJcCfeLQky z7uWuH99q$clp++NVbAfj!HEXOOQo|=Q3}B)WkeW{Xy8l;V=E1n+9y#^3ZtPiktU`+ zK6YI`dig$P^72k=O>0?QHZJqM&ON_5UH*F2+{<3_44F=lFpd+=8)#kTzuCP?d&WPA zJbrb4S8{Np{y`Ivw~{1}l+{d0*+buNI~m>{s%gCQk@QP9$GQ4!*4ggW>+->$L3IVRmBydT=^qz+i#7fB2j zUu$GHq}}1o<}a4(mX{vrEDXK`YaF~?lALn0J4-EI$joerEn2sxUv`&jhmK?sW|)S; zIr$VHHi2J}C-ac28J9AyRUN7sxiJjoVjUi|3@i)?JGc>f;&O`NgX&~QqSi;XGs`hj zTYWeyCsuH?2+gzIzh2OZM50SC;}aqNd0NNbv1=~2by@6J7t577C_WzO=@r>6Yk5T` zLX^Sd+Hu=`ie9!#Z{6u~v^+B|=7XMO;!r1t6eB^!+q)1}S(!V`Tb2-?A$`PZ->G&x zd0Ws(LbfxuZIVOK$&lc|bR+oM`=Va$8T&wpqrLnauerDSK5SG>>K}Z~<3Rgs3xSQYgqb{IgwW?e5?Sd1K!F2klifMxS9; zhZEmb=Sis2lv+t{L3`ESLYJ`i&t$dr>Wu@e#K%tj8<@Sc>Jw$1@{mbpx+nn#c9wIi zgBu@>IBt9cMW#LnV4d5gi`n<1Z_BrXu2B}=1&4|+26|E#3VE^J=qI-S9Be3)DArEr z-2K`|*_aF;;A#&RMOo-1HmY|s+yMHOIRdS_F*0i7WS3YR${JjO-3vK*?OatMK{;Y_Q!09ai5lL~z8a9_i$k87%*= zPm}EW_c7S%{hy%@i_NNhfvdj9QEKZqD)!wLP^EW|W4#%$vyQt@4l*+ZlOr~1&$}wF zzt0R#VJe-8+!w<`CF`5N;qNJoSy(4tmwz!a#*oKdQQz)pdCd!TLHZ*uc=*Me3~l9c zpc|`u&|PPb<+1X*Tz_PQC!3>XExqZ+;ZYc7{8Gl{y?Ea+93?F;*{O55hF$O8`g*&L zP+=&$x#blFcYc0~A5)Sddg*is5_*tZ?ng*LsN zr-9Rh-#cc1Htse^1C08ZFX=sf#Y}Gpdcn+gOTnUrei+%QN!>p$?4YJSLw_yv&QG2{ zkl9l;%Zdx=Ez;E{aFc)A>xL;N){uV4|M~$h&5WrQsbO}~;$Cu3Reoe3C|kfjc^a;} zq4s(Y&nj-!AxFe?-(%>K2CmB?y~?oTgf?E#w70iF;F;p0`e`7@X>P;EzCxz7`TA8V z1V^s^G*Vrc=mm~9?<$$wsjkR;r#DmUcuJ4xhD*xGt9Sv2O{XnIaHwL6i5N;)+U?+G z_aXwx+r^}<;&38XN|tBz$%a&P%C}^nI&zs;gl&d~L&e^#`s(x8+c%HBoSSHslPicJ zJ1Qt0^)=Y1)55JhNoxB%G+kXtA)DWqm!X~?(T#e&-Fb7&x1>jg$vs0;UY4@$RdVleaO#_ed$74Y zo?%xGrfM2DDH~Q;%OZz2-RO!(d34KXf!iU0pz*Efk(yD1sF}nGLl9|`x*_{{tUEV^ zbGjuV?1!9+S6s-$`gD_8Kz!TWVU`k3;*L@*I_jHcJyo+p(ULFom}mVXz+p{~G7GLC;mZuSUzyrU#}n&m*dHY$AFS4r}s6z{%r{>r@G zE;9E4sny}cmJnQ6~u9a165j%;FjB zF65|-E#LKU1*s7@#s|w3n_&~S<~VVEwBC_&g;HLr6NzN%_<8n8z$p+z#CZ3dEmx~nOQdaLryCzhQMnbXW>V$Hn-V=yxZh75R-1i;-pLX8uehIl zNg0v8hpOGVjDmGcZ-0qfn05foRjYL$Pu`drn+$5yJ`}Eets*-H3BN;+vRu0D&p=~p zm(azb$T;7CyI#ea?+DOwil+(qG=KIJ+0FB0Vqc+3OucYRiuNd-j?fj7eD*P7B22>E z_wPY6&Ute@XQqGb>%F^rm34KSDtfPB03lSCPXvt%!RvO zJ0I5>9zGGcRaepx_X2rAIYH&(uylO^u0;!z2WkG{oo_*}) zVV*m1R7;jmdJFQ&>C(|*gP_Rw|LxsGaKjuzYTAJ^(NizfeH0$b>)?qtnN z)gp*fH!_}K=5!_rMx$(}KMfmTE?ld~MvYy6{_z?adZQ~{K~Y^gDde8rm$Nzu*QsXy*9(ibFntA))J$+`1Z- zQswPb5yXgy=`hEgpMWXJ*imNih_H{HSc}IhK{TcpCSlH?C;m>m>df6$(aj%F!1g~K zSd6{xMe&awzn+;1&Euhbf-VQ6X`o%4OJ5msO>#w;n>Y~DR^~`z@5Fx%DOZHk@&K=4 zw~)OCUV<;NR?+_LfG-uq768=}oQVr#lD$z_{q>Ut>xcCt^cXr&vVK9lCEA9yEqy{1 zo57%^f|BT6ItlTm!3tGp?oEa!NWS_vp65G4l!IJTwk02)eEewWXx>_jW94PB+t>-p zwzvHCPlbXOdHaj#HOX4FuFwd<&o$kB5_lvH5dGy zuAhsxjRZ9s8(y$c^*Lt82Hy|Ml8r}gNhQ{41Oy8oqqL5XTJ!7rixL_S7eafvm;o4*a8|&u7)K|e&RzE1g0nIfn0a0=rZYk2UZ*!d*Z+W408y5+G}~`WRDoJR zarLf={L@;1#`JYH2JKbHXaQA{q|lsG%fy zw~W5?b%B=dV!(KWnz3`NVPe2J{-ll=xG=91SjPHPSlP|fxJ3MtKA#Y#m0e=BumTz>bq?1AZJoRRlNn z#p8BKH4vW$ETPTu7S&xsZ{|hl7cDOPuj~&|CW5FmB!?&~>-6XO;HKWSL#XV-HzjBZ zP|X}VNp&g59SlJXk=6}#)UKZ?i<_ZH)3UaqovDAVY;=7YDTr`7`-t)_@0Bq7^VNMF zlDJ8z6HKA-9#kpBX3FqHiRZRG!SV*KR3$d~0a63&zNA`YL-9gBl}dnK1p5b6=hT>p zzD)?(A9$V8f2eJ>)nB*ygaj~hO^KLG;6WkQEOtZ)Srr-0>s@!Yc%eOyc0C(Pllz6E0w-z|6c7 zhFP}?ZW8-_8s$T)`ax`xLoKC^L~Rcrlf{g|?$1Ak0{-u~ zSnS|34 zy=vb#gd&cM??^ouII>B(4ArL7g-RHLj#-YNB*CCC@N#pdetv=8d^}yB?3L!es6Y3P zWhvk0hxjF`ki$RfRvY^ie|`m1h?UbZO(3BQCyp)UmF5(aPCrwIO%4Xo}Q%^4rei2tBX=Nh9i3-ahuCay3#U>g< zk>Y9{aH8cX=+g8D!`!k+WY?eyR9-vgw0&Je4D&OBKmVGipD)lH;19TL^3 z!o;<6_D)OMqa>dvQx|Y$^XdCEwD!RP>oCEan46e%0^qJNBpiq+31z{KK^;dY1{5Po zAm;L&mnnn3oj5HlN~lNck>GGb+!ej>j?JiJB&_h!6AgNPNkc;MC0p|rtDxg@q5G|s z=f(oALw_rpFnTVE0A|i~zjO$-^>X_*mrA+4EQzL>tY#u6Zx;BmF)yu4!x6k5OR}kK znC<~p6LY~Kjy{dBw~Hmo=qs3ToL$dCl_yH`+UG&pxT;qfd=>Ol4+*>6(jH~}*`{^# zKze-AwFM`pT&Kqm;9MF_g8pPj4Wdvj$`!+?XLtFyQZx${`I@x66=+B~aFlkd(}}MK ze11@}{xLJ;n&_5a(ow;uN>&#diesZ??J4EVz>ml(V~4%+e^r()n-HmatkpQCcRfnq z>x{t7V1MDbBZ{cLYrjDJWGgB5S^0<)`WdP-m>E0cgU`8z)z}1>O$TMBT(?XJh@m-1 z+W}pfUem^#3YSGhv$wCIyJl{uS5$aTM)P|g9fT47FS7gG3c=9ueqDMSSvb_TJ9tfD z_%=0i)Jsr>_T{tAglKW?QFl-vbc+VoZas@o8yAvEt1EY$<81NrsbEuCGkM7ZhV-h}3%;2je9dg{DZZ-X2Fmocc8deB|xZ*UI7?SI0sU zwZ*ej7-^!y^tdtPrgGp1mAQc?;!qYraxe)Y_#5~!f&PM5Ov*`?dllOra#D*O$1Y@j z4rbpz4EJnz9p4?~6j`$UKsV0l8f8E>O>pVWM3;|46_lutj|n4R2vcp{)`eb?s5T7O zV2*C}&0^C)Yem_geAlYS`Lo?t9evJ##AUdo508Z5yv;bFDOesIa14EHjA8MU((eA} zGfmA9H1==Ze3Y@p`c(;q&z+piFnqeOf|+UCW$BXvWaW3VA>Rdtk%Zxt2vcpZY_B76 z!WA{)zM@vMZ`a`>@=a0*vD{(IdligLn-+Xt_9&>OBCCu9cIX8PJ|$5j<~eM(_4N-?2-?=tMnuf5+~T zJX!F!G{QDhU4dfx%?lI+@fnZKRqR_(jvKmqk@0`O$V2a*4i!H^Vl!4)$P%UO&ZO6+ zWrhh9Zo?xs*`L6UI6GOaN3?a4oVFwC$Z>KZH4;S{!w4{&G={k@Nq}ap8q1aF2alo9 z*-;!NE)NxO%*{P2F`HGd4yo!Kp!=KUidfbvvF-V^St@EM-RyB1Sc}@#be)rPn*9e7 z3PpNkOy*wGkiOj_VR1Tb<`7XaefLfX!p6(elC-2^-o_U8igPq@4_L&KYvR<^jqSMw zHUJbU2qt?g>1eT=(}$M#JfB8xz1W)7rx}9eHnr@#o87RhF!DIrq2n9a$X7kAWFKUw z`ERt!sYZ;vf~?O%{3k~^BbzIzbHO)+s7})oCcaOh=6_;Gj9B8p64bXvHnxVb6Jdd8 zBF>hyf}a2bzWJ~?Y#Rz(RhP&2cyU+BpMJ|5;)fbjNz!t#&Uf{SU47z?(3fD`3^PZ) z!%&${uM4UCD5f;~u{;-;sya&{Itlyygj9{LkID**RfMNJVPrjT7g=Rm>3`+l?=yv^%}kerj79D_>6!^V;5YKfF6Nr7zo z6Cy9AjU1=m0AF(FX5u4A{+ zGMzV3Jd)d&Zv(zBn*0%IDicqXHhcbl0?m3~N?%$%st#Sbj6S%+ave4g zHu_-kVX?LLj%>fs!rKkfCTX#3Mn>OLWH4*A?HlwJSE9g`h_f?7YpDM-A#`6|hazFZ z)$|1}vh5rOIJ&nx&%mb;=hGx@W%COsxE1)k1^z(ONs3qk?<(g1o}lIx!qSH5~o zxlb{xaSDkqqOk+2z1tn=5Zz!tf$FbT8p`Hwu#6m8@M)vfLR}aUiY|hfyU)fs0m>!i zE3MR!We6S;N$<4wW)lV$y0iX5{iGeaWq~sOx4oM35iZ7q$VVdbh8-h`C23tUADB93 z+VZzG!4egPE8drbTcrX^UKm3v5cg{xEtKZ3;?|LS^?-yhf5Q;!$#A@1&L z9@Yi^g*Tx}z?PE@tfeQ^5*7-?Vg4d&XYL&ALy=D@p?A>@Ur_w+L8VGc7-Yhz zNvfnfzE&LLitgyAA5Fy)M#@Jle5gM;-8Mh*B2rpzmx4J87VS~h$^3FO;a~j5exitj z$LJqeH8IhMP#sO#cFunpDH2jV-d}l`Fbbud+v?kz$!)rVCvp^`UfaMbO8&8j%Vmv^ z#Whu%s9Yx#e&R7hfdN5h@n_#PDdf`=4=~EP(qOEGCOT=NlRhZ7m&G;0UpEWemx7i%(xf-)D23I>xoEzKlVwH8qeX4l?<6GI1v6g~& z4xxc8irIiA(UYQ2QJ3(>+ zmm4=YA6z$%4=C)i-A7 z{*gJph5$SVTXF12cDt zwnwJf8&C~3ci(h z#<*HJKu-b6S+yyyB6|lnTziD^z$1((U3=t*#`CNse0%hq7nD)Hax~jC4mfc8hKrBl zmdFwsM^`nh#vGNXQYsmFj%e;YL1}lcn8JNm1NM;jn9^cF!~w7)WP$HjzL5F3x9dju z${$YyrqxBMS6KMpKhP^Yu(G5ko|G>aqZ_^OR2>VSPm0&yOY(vCRHl!L8y?kTMp|#~v{*Qwp}1tmmnx(cs=dc@gH(AWz#%(`m?DmfkAk zm#9>h=n@uwLrJ44PZ)i7Ldj_UYqo|hNanL$3yw9oZxuIdwZ$0zz^*2VplBMo?~OhA@=$awRfW9Z&17IWzXdb+Vn%i zzR-3%Jk2xgppQ_)2|5JFoh5pyjXlm&n#$&$;JQf>@P*38_6L|BL8w_uGDvt>*nE{= zmAoN$4I-N3loVm}zHtX$Wu8TuROd3pof4OQtH|TDXefTFB92w| z=bc@O>X0Bkib{al=a^~mJ*LK@dLn6U!V=^EWA814;|Q_^T`{zn!6J*vVrFJ$mc^3A z%uE(DGc(I#X0Vu<87*dQd*;sUjg9-`?TgrdQymRieLC};%9B}{Rh{3-m-X)1{@Gr` z*&5gd8*0q?Rk4>fg|J9HH>8LD++1DigY^=rusFrhJXc+1$-JoyOcs=+>6Ch#9y=XD zf13q-hMd}@cA`#74=?1}KD;KbWQViCSp_Z>gb+=lUCCzg3uD%t|E*m~VBs?dI5W|0 zvH5H&<~EN$+C~)BAn;h9bJ5Fbp_Qwi&}Mn2duBV<2vbxLDE)NR}Y zG#7GQ!^CtQAm{j38Q6Q|i5Xh)+-Ae~z7@_ciB_a+&EN9$&SNg>Pj%(nIdXqkt_;ZL zR#U-k2g!A*obdzoNWOGNV{j*+M~tKk@f&%t6jQCA*%rrv8IXMW?c;N7@GQQ%R~K#b z0}HF_J&HScYF+4uN2tPf)$$if&g||jLUV7#*NY8dDOEB{cq9+OUkdGfT1z84I2s|$ z6@S!LM;J%Hk=w2c$4QbnaiO=K;knu@0m zPDmO_AdfEx?B#Fe4B~cx(@@1ubOIRAWvAY8g=_>`9yb~`{EYn8#3Dy7(&eft=|c4G zMs{#z8GXdJ%NyQm@oX#aEPwlF;k9~R*~&drG;s9X$dsTz)}KXpJ-&zL$qEyZ(T&9^ z%yn}QM?dfCSZon4zVE>K%$2w2<*sp(m$H#V9l~{rVj3lEXT|~R zo6|81+er>uZceJWE0UTm_<<0xv*OaTrLwh$xy{!$c+a%`qX${|h3O`I<{EQqwBkKw z7W^}*sEW$rkc&}5*47Z7MAR%VW-R>%c_rP&aJTR~Xn%fX`^YXc37_S6jkJM2kY?r) zLVR5=8t6Cm$?MC=&b=>-7l*(o3gX(4Fyu z=^;)%jVCkEa0^4!rKK~;)~h=xxz`EDWRBHzCfOQUjEA_WBqU`MI6~%&xQxZ4$wBe^ z%3xP7_$5KAm>maCg+4ii>ouO6HBA-AeRt!62@S?{bEf>1MVv@=>@b$l_EEiv*6j9ZnIQk}6N zqxwT|9E?-75O@!g|3os%GVa%`F%4)+VHuXQ{j!|NJtsjGo!gIWzL6`JZjJTha7l^| z6k0F?&6FnH0feU1m;mN9veL#;aD z2q$g_XAts}@td~7Z@9$A^6ZlH%_LY;i$0t%)0f@+0na8igr_oGAJwEI&z~R7Bo;)P5 z63BFlT5sG5_D2-w6R$?7>0~(2X?K(*V+)eV;h3TcbaM2`4>lJwKm>g_lgXkFOV4H0 za0ng~s)FZJe%cn3kPRh+j`5fwLSadD80dK>+!MTn9Zu4J)Mp49s#6PHIbQ~9UW z(;_UnLeb}(j+Olg&3K%f@Evd7Fo|8# z-)sOp_`Fr$=S-?SQ!A^!(THst0Nb0n?qfyX8Ah?1D>%6ik$mXSn=$w%2;Xj@SMQ9T zqWfNYMGIGxjs5odhfw|f>7{4D1e@mTB3$)2R*bYQ$4MDo3$ zD1T)nsw6FJXUdtJAiNn-vo#o;BpxIVU(O|gmO=KMUGdzADki!rtTvJ%ue}7cO(_YK zIImXmGF`WFnHvJ=xW*`sZ80omftSbnR&zvi8%Rw?689lwNJD_Z_lQSi zpTGp9m{%Pz@b&gW1bhkgmNJpkOCu+4MMA#?{o;?9PO_R981^G|bkv{9k8S^1&lxK2 zBXC3l_bz~t;6x1r&ex5Ug?hH)Hrx$w7Oqep9XmXzwQ4oNap<0Vu`KA0j0n~#cYR$rZo%Fy16s}ZBd|}h zSu`D-84h6sNk8~Bkb}H}ZH6jpA^(QCFePDZ$P8_F6e^4)R+HE|dppKh$<5JTS#>hf z%AaE=)DSM4CG1}p@^ru6Mns7i@~|gbCG}>2sn|8;Z zM~&=YGJ9Bt80bTJdj(AUosBw)Y}ELQCFYiL1mNhdC`Va$8~wgQJ3s?EXvu`p7&(HnCb zm_!r?PhGZruCAh(H=9l)5!5`-shGPwG82-5io3GRk0;I}tVQ;^p9wRXhN+Y?hl$qd za7SRd14325Dqta{`lU-i*`PNA8X^)S!Wk&d;WOcR$S4ai?Qk9kt3Tq3D3GFsb$mQCP&d7DT`2 z8geuQ8doYvr7M2U2y=8)@mlb~duOhiMwc=w@lhAkH*6ksND}DEiW9C$sfnxDsDsw7 z>(`rt0%IPg#hncg#G-CjSBX3mDr*cU<_5LK9Y+Svz7T!AQwS0HsrpkNVh>!7^$Dreg7J``%oHRaAaA)h z_{gUwkX6OFa+U?fXm~kW&#{iGp>JwSRH$@J5Sw?sU7vZ{8`Uu>HPC&8%?y&r8}d-DhycC zV$X}%hvmp=U%nPzgWGODg1OH$pFrrA(7<=a=a0PUw_i(_;P>xHSp~caE&R6)Pp*Cy znT{>X7PcBNd{UH#k)1qm7lFx>oi0N=RXu&I*LJ=V()XR*;7%CYPQ{KN zqD$o#-6EBQ)-bXx{)EaDrCg>)V)?ctGM08!s5XPfHWh*Wfl9kd8UJf1zY38K+P1I70Y+ zc5xvSEg8fNksRzI+s5pcIZM5CqlJ}QYjcvQth zm|d~Ol~1>An03a!Il^^q%`A(nQXoO0B~_g!9cRnPNq!ape~3wikagig zzU@e17jN371c?}fkesU#tsEEe=TgCD&b0UFJona0ynLxZ7lY<$b-q_bxSNxfv9sXJ z5`;yHRBH9JJSvb*ijHM7E>O(&P-M55xAx)fiCEE1=5UA(d42-!3>*>PENpn_=;+Az z$qiOa5G0~snZrkn&g7>WHW2a9odVHDNjuff$9B)0 zeN%JEwcN8gRD6aMJhl$+Bu_Y1m}JtpkQCENLQ_TJ`a)@Cvg4qcu_gOSON#zq%X>D|csBZ1e=hUN`kW^;*l2LeI8DeN5EMLOft(B>Xd(Pv!1$9h(>RXXq`4wg=G$uh8X(vqs9U_7t;E-zQ3$#ld#*@xvw~S6awM;Dntl{gmpf7mM*fZEIqJ)c zj1DorD&Ubb^R)t8KecvdQ@pr2tS>E}n7lD2u|O1>CoHV!w|7`hUdRa=o8lP0T>RNZ zR@O$3XeOAkh4j&{d6D9ZTAR(8YlVxuyy2d>$EoHDt`mclM;j(wsbJC@%-0?{NSpCh z&Uw557|S`!63dNy5Bz40=jv=Svqn}GOHQXIVPj{jToUh9N5Ik_d%2tD8BluZ@*B|A zh~jUAe6q~_p+oq`6OHtAA0&(|nfMPS*+dxMg&byGhk8r4^KKPn_PLBfIt9&j8`XRI zw;3ZwC#4se2#fZ-#`wZ-Yd6DTk=WKePQa5ZFREHMUQB|4H2X1%KRsjZD@i!NA`Y^7 z;Ke|*S)^FXSzI_5drQ!8DOWT}u-)vp4#OEly%UF81c6OmeO-aIH)#nO~Dn8Pg67QQ;#zF-OeYxz1;* zO;-H0$7iR)JQy8(v+9fjBuj5(={vS(Qpe8#TwN!l^mil$n}C00X`2OrkO%j;c5c_G zjq+FdRxX4k2u|#(e@Xq|&)VLBiTk-SxjkV{r`%=R{yc!Qg@*64vmW(T==9Vjqqw8Q zb?WN#x(Kv6Q&180_2YtJFV76yeSKcTcD*=NkJzOCM--qK=3Tv=&IoItD~G^r;kuf} zz4bL24X4YG!lZ0%^C_A83Kxlf%sDxjqGZt?P9Y|oJZ|E9Et)}=Y3=h0XQrM$K6S>& zXT|&{o%E+g%7W{V5t_rE+que3em@pR_vz7M!{;s9pa&%iB3X?EzttpH^{Ot-QMCI- zn%cc|Xyqmn?)LmVGt-QzT`epKB&YHkS!ZTR5uvSf{K2s4Rw*l=jOh0coA;KUa?`4B zUc%IHlOGR@F(u1GR+T+bS&vYrW_9}QgJQ)GYH;Nm-AWM&=%7*ePtG(?S7-a-Z*NK` zIo<%Dk2o1Ee$1lNmbEgTEQe(WOvw`DUl!-(k@EDl#oA}FmX#qJv;j-}%FJ;I9t~^2 zY0Fd*$Kuh-3pimTj!G8|LZ*x89Ofhc=E)#kOq01n%?~Q(q!%F+G283JHVN8oiHPD@ zL$uEMDt0Vd7DVSQC8E_CuI+1%wdSl}RNV|fikq3bh4%$LvhF2MQ|A{y>fbJnl~$I< z%^GX7o>lq}@ja5%Hp~)hksk}Q{7T--my4NNGw1bPzfT@@ZCVQL!J;CzJmQ~Lb)~$#g}ZAwK-LzUrDqMJKK3{ zx+=QM?~~(rOmmzJccx22_m^i~nB+~dOmenaDZ~)4DoL!rtW}z9MVjNsA6AQ~VKL!( zsGMkspByhTlG^9KGRI9O=$o|qLF2^ZV09L#GQLotiSWd5Xu`EtqnU^sEY8fsMQ{+i zJ&HIQ^;9Ogls9*~)3iH9?IBuay^&JpTcw+DwExhls^QhUv^CgtGJQkeA= zWAQ#B{n;|gX=bsB7vNWXq7R8>RH1&MLNTZK=T6#1O%DKm4z@Ge5 zf4i={cq1%z(D8af-lF(QW+AE!;#icVzRqT+O>MK3F}YgZY5iG$bBE}xhGG%vxT{k4 zZawv8&#SG!52LBC&RtT~jL?7+(}AMBHinfTg-(}}B|yoKfMjAf@FP)STS?s82)`To zh+p<#vVpHlFT3wg0JZWN7}vdPe&%lZ=RM|K!9?BNf?7K>50$00A@ioTB1&}n)MVe@ z^3O_ZbHZ8=Ig^Sy6?~J2c8qFI5-i)ri}fFi%G=*YAK=7zG#D#MajNVxx4&AkE*r16 zkCIOAlW&?nA68L~SD|eli|kyMIW8P4^PzSUr2kRT6z9qEpVcA~zM`Zt^Aim)qKD1Y z{YLWkDEr)AXJ&quHJK`x^z-j@~x`8|klE$tAD$GVa`;;KVL3Z?p! ziOlgufWzBIa_B;NokRRmDfKjJYN>DI6sqKmn?BmbVXj;ypTS&u;}E84ec!&sWGrrm zzt~%gEK0Q}6a`eW^1qw)oZsc#TE*$AC^&50QDtn6D5nEwup`Y`V$gy!LebG2x%qb8 znP`#YBDl%6ik2VY8o15Tm$q@i+i`_YqC*s_Vr)oQO|v_H=06wTp-{co^xun42p5%> z5$fvDtuDuw$5IxCZf>4NW?%1{D%TJzkkaZ0mCQ8+p^7?^Azz86NU6mn91h$R66&lF zXxHhFAW$Hz&)#9>0pm71Wm*^a;&c%zEG73@{K4Gfq#nA`E&~pwC)qDc_1pmm4H#9P z@%Q~N5;As^nrbHOxlRTzN4yq~Eo~3012+{FX3_#siKyz%^%G=^tw(d8f%Jg~P#Q7# zNii2h8J!m`0!TbT`f#AkSzunsjh&-=-zvB((Yo89`6NF1qB=Ylt$XQBVU~LtmQg=a zoEa{DTfDy}xz2hNXz9mpRW&qCWg2bSVSVx!`)c84#2_OCT4Op_ZXc|6bJLp~G&snv znG%lk_d3FGn2tI~roV4LY4hv9FcS#w_;M<*lP$W&!8|mlj>`Q()X-|cyXtvrBxmnr zsEr(F_c(efoKpO=(-gy`7q(m`KHFS&e+Blq&U5C6L1_NWukJFbsihYK4rFOeiB@=c z_8)OXw*ZW#4IYE;3(Q|akD9%EP#>5yy;BHO34Rk%_5CTXp&4{T_{cvaOjW!)INX>; zLxcam7;>m~)q`CTJ~4SEU$tfNEAZZj?rO~C*JR$nBwHn!U_KwuL$LGjms#!4_O6fD zsyq7!UQ4R|btM0VYBNoUk7-DZ^Lw9_D*{idOUzo>qsk+jwEOSEuV zo#8WrS8_~`MuR?djioIi0G-~*;udNi-=aDJ4@g7Zu~Nidr^YJi2051fokmjy{%BU~ z+T|Fpjlzh*k!}<5``pd5J&X66bwa2$biGgO73%mNLZLJLY2;mG;TJXqKj`zhhhc+= zcgNswHf1%T#h;<)q{-xOKVFw|nzC(aS!ppjVvA$<#xPoLEB2(c@sK&!8`nPAM6AM{ z4eMNce3~(SWruxrNlKQTDkdzAUqm~1nb(mXrMXz%pTzCpPg`&HFtiM1AM;VNs%IS! zde8Qr)f-!OEv>+-^FidUU$K{TDL{boD1jTg;8@9p`fo zbOzpRDroLmtXrZGA2c-Rkwzn-mg&*m($~;E;m{eC^~`n-h|!y9mJ_h$Im+wgzG~&p z1R*@y<;sq9J#=;=`Q0|B{(>)fgxBBJ-|yhEWW&y(*1`PP(>@@(cI0l6X+&t>k@U?F z_o!f{pNe7f#oJ+tYHrKw6thVfht?WOXBnvxQqKC>%aS6sj`RV5393a2$KJ+7kg|th zmu&{qK^P@kWJln-zSy%67z%?mf-A=(NBE%w*QEq!7Vll*-NQMRaV6&(FkYp%;7YpG zf*QRtoEK7?OysiqWhyW{jHtnYlYQm6SV&1WqJ|^ncthKdm&5~@i69=j!LMIa_MQ}QE>(3SpJukXi>C;23l=9}${iE< zfP9}cZiB63tN2sMp3nlu+j88?&hhYOwV(~(WtfKws`1Sxtf2lysE*_&>p!uc-%A?G zo$*8~DJB*1w32Q1iC?Q+N2w7wOl$aOXExLzhB9Q-T|CCmMPyfm#|&#HF~&&gjA4}) zv4|%X^tVqkk4i4UA@UxI?_je>_@7S#@2SZrTiV7;crreE8Jn|xrFPGUYRWZ(;zz-i zxmmkwb>g&|dH5rC(RCLtZW3o+0$kv>XL91`eE^~QEo|(Me>x1J5p3PH`ZU#}a>dy9 z{b}T+RoWV*wVaJ`BxYAny1=wY!?CJM(;dfxW8~qJQH`Q*90tNql~)k?30+gbj8t;r z;zc>oO<8*_3YItJzIn+oO2v9PYKjE4FJO_9ClXw5$>_6V(Tyqia=zUS@Pmc{j5)afjC(|Z+Jj&pF?2gQSr4Qx>G-o@ib4r8;$ zhrTXw8R^3dU=|RM{IqJ%y4c%=+q+EU+ifZKwGN6}onvF3%B%0OmLI865LSrGkFZVYAO=}?WxO`wQHGrtWlq$v_5zt?q$SswHK zeqvNt{?lx|6A+=IoE6~(w{y2BQ8)&0eh)TVrB@X$Dd5qi=Gezy*XqGoh zN(dHrm^>xqmwgI{_EpMd2iy3EDqI~`2qHg*3-LW#!fNF0 z*Kgvqb-WbD=hc{xn6uyfB`|KxG5m>9J6fiSeztoptAneGnd}L0ma{MjEK^Uxzx(>; zBlXXip)Zfx|9pyNGF%;^*H22+8JLUFJC!v>gz@2>_<99HQ42b@8^^(RRCMtaPa8rl z`1864GrN9=F@C`{1!bUOUV3VKL{hB!oF`|VFhkWeE7V}5@HlhW=<29$1^IkS922)& z-?R8psc8&PGZl7slRe{%uyQ`*>K0Oh21aQ7^kULW%+>e76yqhy{wy7uKw`;a`gC+Z zN=z&hL;Cu_TJu3A}ZhJJpDtFIaCZk#tBytImqo>1WetKNThPyP^TujDAF+bW^wh7Tc}!iF>QX2 z{=4u>mLu++25Fi1WapsF26Hg>0U2|w=ulmYF4;XRiJejd-`2?Kgso#=8mPs3QW;HB zu)GzXmt`)N#fjxAd_qasYm?D)sZEYhs31<8lqN*);}zdI2}p;-p4q1EfV~srQ(ik! z>q}VJGY+t?ff$Z^W8@{Y5x_>0FIy|LuCa$>E3c54wDHUz$TYU^$lX2m6}#a%_o`X> zLs*_QX#ewe33kTD**hc{GnWE{2T8W}X7 zh{@-)(b_6qRm01oc!M0CB%f`@LMg?X?+%#5aOH=aTf8yD5!P27O^dKYjIpAaz-7Gu zw=Y4WW#TtC9_x;Vq`%lAQKw1T1=l-A`=II4OvD4=M?*dxTQEY#8h^I4LykP8z?Xf%8m^hFY``Y zyZg-phy2wlObK0N@z5p;BY+Et8Py_%9PRUF+74FaW;r&10`?^5XGZpq#UScsB~E(4 z5-^bZ%AQ8e7fgUE0CPB;A#{1@_^X1=Ddz>QE1{7n>=S7Fmia<+*-@8*S09<*>JhKK zD|xW|f}@8sFas?2O&MA??OTxh^=8Jke2YYX?{|*N%|bf`-V$F|L^XEkhec{r8olD| zSGeCz=D5djb5xg`=(&jJ(``Bc^}&td7R8mOTsbAg$Y z0DB@g8lbqEla{N~APAxRx4<1-jz>7zrEC;|i`yMwZS-kyl!Rni*T)vnWWK8JT}C0s z1{5ol_OkU7s7AK4`_ljRcl6cq=-WaNSHPbCUebqX{g2&m<6jvbKVS9jUB#iV`qoMq z3g_F^<#lRv z@tse{k}ve}867X5{HNIXWHsfp*47RYavq)w^XOT)*W}xswK0Cu)24RUHCKa?a8SqB z*u9f%K>0omM%oK|u-qtjN8~R(rswec_MN#Vn#k?5xVh_n^htVORSjX{KpZ7z;^I`l zj!}=a!eV;DdlpRq39#0T_aNwc-k#GwET_+dd882&4QLw+wC5DT@9H1_Jp$#ppReFpF~?v=d;T@8y#qY&3?f2b(Q5;RH@zT9gi-KZ`Qw+wT-gh%tz)>71NB_S zj22I9(c_3*$?YqClu989aMcFOjua1>1j{3$;w#^kQ*VuuW2+E-(cqZZWR~C5*01Y< zl36NQr)yGij5oa9cRYl_YV;5tWc_sJl<=T3##@dYubnmlsAW$`p>Y!gqND4Ejy>zn z0&eB*vnt~XS-!kuPj|`=Q992oif7s0DT-@(tRto?I;5Ig=j0CwQl6aCK7?}GpJZuZ zW^|aqDC)^>W*!v2l-SVsxeMQrD>{?-eXu(KdO;NE{sUL;@${sqH30$F+Ek9VyO=Z0 z!0|3W-4()?w$gtqLKDFTiM)e{XrP|E5+;ijBbLH%Ph&SU0FeO*X z;s9;Y`Bz<9p42mex;jG(IGQw6q-#q#r0$$C3GmK=Ws#^2l{AYm5w!Zr4?WhL-o2;; zM*u-{@^ToeRo+%I!ZUR7P!rRR@WH``BxyP22B84)*{~?nYY{HuQ;#g%qy?rE7N}j+g8kWsG$@dh z-UhR{X2%=5d>maY4b^CNG1vY^&(baCT8Cz4IHzwj|>Psi@!0;ig(vp0Vx~hZBt@kEqJ8dG9h()T9_z(5?n&@*aoh>XGk* z#+Cl}8zsm?S4~`eHb=%58oSa(PkfCr6QE{lPv-Ci81Aj;+zi+CTTjU4lMAWv^3)*s zU4*JG3ChXB>-$ET1ZWX%s`SlalVI_$y?=bRpF|8clmc-8DlbZ_5hAKY;hCxN?$HwB z2UZ{jBH%>~q{!u$M=oM9<8FkI*&&c#5R#JDmC6VnIg?*evya@TPHwaJO*@k8Fx%vF z3r2aj0j;%3MA(VNefu>A8X>hy zeL90$qs;ZZWW~0d&w_+2`N+AEr=&KWy;yzIlKBrc7I3s&2g&Ar_p-m0YSi63x}EaD z&FA&&6Xntz^docC^N!1FBuY_@&+R)bha73cDkcZqhT+vpNCw{BkIIXAHFVioykVRY zvW|DM@KCAW$vfBBp89tfJn4Hs3l?@sN6Iu*+sI4d#zBLbl-42yTR~f%v^3Y1!Cf)K zIOx*JX24(TZVlW(2s-Dg=m-h)F7c*hC9!LUT5z|Ay7H8*ci9EQ^J#wHh-&Ai@mwB)&qWKm zs<+GxWSBK)WzZLN;I9)UhVCwmhtna}ev&yz_(iU%8V7;@owKJsX?$w%Xlg6|m7{^t zin=1BCIIy3MSe01p-Wq{;&65o$Q_&()Z#NqkNx94h$?Tp&7UAb@L^u4uPu$#J$UkI z3j_qvSYDjewOj9WnRm=wf6!Cmhf16JKB61s#T=#%7Gd!u-tu*&E!8puALlW4CNF#| zDUTKNF*p{mvi+vAZwW%GIpDS@bKy9?>H!!UF*X<94c$1VczM7HFc-(btA}%&J@iob z%;huG(QFY+)}d0!RY4y1?$<|CkTF zxw{$khT>ToG%sFH5<$~qpLo*Q7zc8l3PgOiIqcwJ|yyFQk$`7U1tx>ygk z4{|#r;{>K9ne~m}Db`ACQ58Fj#>qlJo2pP;xIO=Dz293*le?onvLLvr&;!zk`RZ|dlWnvoBgI}=*NDet*W+nU1?(ZYRwT40&%QNI&?T>e zjRKR0Jk$|=m`-(&`+kzrk*~IUwa77RYl>gns~koDVEXku>LtiCmUQ*`fM37hi6qCm z3Va?HZAFegQGaLt_o^&JWjo zzbJk*uX@TlQw9h(udvF?_ctpe5NALE{qp1s z9cbSk=jM##rJ(7!?1MpVAr#b`lx(fwnmgIoHH4=6TvvIFBXiC|42=+O4`v={OuG?g zxOJ2;vg-jkyD7noX~tJ<2O=WS#@N)fA6ONbex8x6x6u0soo|a2(wx4Pi^&W+2R6DK zJoNOo)B80X@@R414A2%P$Vv3!O`uSWYMqN)`l~Q4PyXX(l@lRBVdlS{n+i|U&&@eO za2CoceclvwZ%G&~mpYBe9O1e?U!8xM zy?THy^gq2DvNm{P>o$?x7Dpt0nZxPrMh4ToFE7V84i=dfi@HoZbiAZ!xV{;i|Y>|i-Nc#k3#)uNr2GP@c>Ky(dW{Vd)9A#35eb4o`_frmp{HF1ir zJXyf`*mS7}8IS*b^L0?Cn0R}-unIYDEyGpRizZ3$HW`1zUGO)r2Cc^LaWqP3MxyG@ zPBvdT0^w^lK5YckzJONE^{OLp9Qo!FPfHL-mPmtgekwa|ttAXjVot1-dvVmGTYa^D zgHN!bole9X?MV&Jn)xL6Q6@zgG)U zJhzKH9u;+O5cx)M3OrF{hY)p!Ya?*_8p3Nv$%u`1vm`AyOWkT%Xo=1+-KLoc!oj4O zP5CWmDO{*&LW~eAq8hA5aiN-@Jdz9MG}VA$(FhGasw*SNx|#RLx)2kv*NrtGf;yp_ zVM53^QhvRllw5AE8!p=!KR$NjjU~>D#tn=QJ7;A$HsZ7umTFq)2dgV?1`6dl=$dnp z-HmnK2k1!<(zc^*ucM3;%n3dZ%~#M>w0(axh33@&D;XRtW-?BFRM(kbaJ9au4yIDpvdw8z3P-%u2)Q?Y1bNQzykbY{ zu8`#@;mHqB3<%FqLp-=b2@)ADd3@@%#rq~$ zm+(z12}Aa$ztTR{Irq;%a|lu{ zrY|7(hEZbb#$wlk`?O1(5^p98{nR2Rrm6P*S0X51IS5l93R}p`5dzp~j3tC8Da@Z` zoO^l^6k-oiuR-v?zyjp&q(qkAcIM9IN}?6qrheO0`qUAl_FQt2<$BM}O%z}N+UW&W z*{>!=r7Rkyf+_$`WqF``G_TkmGgPShxwcyRA3QpUbmL!=a&q`@-?J~YbQF`YWJxbU z`_^uurlzKHxQo??+Z`*$`KA$L0VH8AQ5?qszo&Ij2Xl+BVabxAZk_{nKI~w_n^7h3 z$&AQ^9N9Q6Cs z(GQ?pLi_(T9!H#?V8-o{WB}m3_a9rn_#gEs0yS3TTyBQzI?j>?-%>3fz&aK}(d(Rs z7BxMP1y?$RG_|gXJjCXmSQeoo`cvNDVjsbL_!W-8jcfV=zFS+dv4ge^yNvz$;0u^i zF!GtVIo(8xda&(`5w*d&QrP8Fg5q%mmYe@Wt9uKVmCJR9LEaRK(ieUZx!i5F{dX&U z+{Qx8?jl;EPl;V2K}$Hxy?u}c=5lXJ=(ovIu*q$6`W-Yac+1KGEDV!Hs3tM=vw%d2 z5xy=VHh}r}H&yb~?|SY74)9vqY?P;ceD*~ceH-#w}ATsaA$(S67( z^RN+>(8qdDLbaO=YFTEJiB*Z^M|VLj+{9?a;D6n}hTV?vNH9CQ3*^`(k+^xYC|332 zbTo4BW(g2FRE`gjYuQ@sf)j{Ut4&+|Z27gVyjS@&jYdvkH~_WD7vx7t7Y4E0m@9cP z(6eZBRp89kPw*Jh5>B8X_v9in4mduA#-cq_KtY!wGG#R`K0|r-lMks+?CL;4chk_r zSzPJ_PA<+61PHaTj(}mYPL`z!Y`)sunJ%JsF z=00$8p!_rx{P`xrL4RE#E7s5N(sme~3RK}5S4CnQ2K|^JLZ6*`y)NrFhlrnqK})spnr_Rc z*qKt{MI$|n1Cd`>Ec*0K8tY4;-!H`Bkow51l5QwzgUeE?^U7o^dNvnksM7u2JC7pN ztG;cjaw+GQ_gU)N@R&TEsUQ$aA5e((+}ATc6^L@nB{EXK45|f0Ll~==x9HvP!C{q) z7yEJw?!n&DSPsRbuRS(7s%qLkRwf?Ip^A(6=UlB*ZEIuq#(L~Vg0RPrh*{Wimq;t( z(^#WEwnSvLnSo%g@rx3*?xl}4Y20nigT#MUpK5$U{eO16-p(N0Qam&Vc}Aypi{@H3 zD5O(m=zJ`4qn8zzyfzRcAX;lNdCGKmbm%!=kBdIJ1kJ(Q%I(XjLMC$nhYE2?c^Cy_ z@sKI(EP0I5*j~mPSbJNwC64obTeVx%SWPYNGlha|Tf^6_UuxCK$9?NO<#J+tO=)^I zlWFf)vZtV<_F-b0K$C zMKX9v($p8G9iveK|hkRv%_YD>Wg9Z(91)>=;qkAY5e63^R28%&lJ|Q zm+EJ)_&5*P$hAj|&=XZ#6id)00RO9Izqz{JnD$#oElwjj7*4oCCL(! z3y`@7lVaI^VZa4o<`+vh#`e1jn_Osb>w5tdjiRYXENv|VQ3j~2vo2>H~KS{nyY zuwmf<_0DGK26p@L!Q#2c@}fF)FVTk)g>rEv0dBa`aA+z;{x0aO#}OVhOz}+ZkGr!A z`&Q)SFy1yZw*YyfPDGt*&OeeP8U+%)p-lsZTeo5XSS66>uqhl7WY5B}XluTLiP-Ty zQ&|)31a;BWIAp2Rv zaFomIiDe*293=^jS@!ZU+i_$xh<554&JF^@9}f!AHGj+x!9Ue&EbL$m=60MEmV#-; zOrD@jD|u4qXo>2|{ETi#aU51QyVddEQr zPRjZ$&=MnCn&)J?p?qCVe_1M91asX(&wh7Ct>stTs~2!t?~!7-t$a#Uw5l^JOT5{h zQ9Ng5zwBxyX2E=ayNgD@sS*Y6MhUkx;sZm)5IWBUj64v0iY)xhpVqtJ!NK~CUSfH* zt+f#8hg9+9aUnq@KHvS6M8cA%Ean3cA7G@@?fVX(?e13C)Ec-FhimucX!I}`VimYo zhZ>&Kece)z`EL%oakBmOT#uyz?=_higv7B*`_&@$wA5R-5utXl^J?;!bQ-zpKGwa0 zVo%L0HG1+mL^$(!XXP(3QI6*k(^y0AkxqwbEBM);KY0+74TJ)<+0X$Iixwk%bVl)l zmm1**%(K0-&+5D?XAQBk4E64&Qz3Uh>SdNzDkFNTr(QS3TGq2};vWyvPRuR+n+FWL zBtXmWp6~{4@wMi25a$JoVdgpR+JrHUv8#di#oGjmp+y}oLKGg@TCH%g8r_Po=BG+J z)=Dhb)Y!);jg(6l??&~|x}MyOKe4jgK9k42*T)d6eN6@`-`-rcJ(>^Ea&xvrzRi$6 zR;LWnO5kU4`W%nDmh<2#mBJ0fdkdBL?JZ{=8EA-L>aL>#q-bBMGQmyO#!co*XDW5C zkoa=g^7S8G9yh$w+`2P{PNE3UI1d|63ZNg%w_choNvqwlc=_M<s^W_reY<{P_gszozB=9{|Bj{{;wUW@BRH z{5LlEFVFWcHkgTtg@Nf`dzsn)8%$Wt7Dxd8OBMe60Z3N(o6lbYFfhdmVEPvi7?@%M zFtPma@7MuMtp7*>vB2~S22Ma+FmN#t&tFO~y@tHu4-=z*=K2prF(U(jh2h`QqHa#& z%1%JA@IQ(bw6ZfdU;qF`{!#8fl8gYxzr16mf8?g%U~8mo;snqJmLnntpjR<*bNVmz zvCx0L3;)-3 z;V(v+g@F~A6A++m;{+6R1hD+mRC*;7M_XqHBNN~rwtwhHFKA<9`&WSDpGk2CTW7m} zGMa&kIvChE+Wjrd2uNKPR{j@-SxH>zua^H!(ZAXMOVR%cz5H)H^WTd5$5Ht=iMdK; z!e(9oo}i4q8%9BJaj)*^2!4U6#_)XjT&{FzO6MX1L~(wHIh@(+GUuC z?~<)f%;22-?k^Au1LtJRhLj#kN3x{+&H9?GY-2v+^rKJV6_h1D_xn-`1Qx{=$-`K9 zd<0pZd}#BXdgGln8^@I+gUd1mLDL2Z-7irPBbcrbg%nixZ@O$#aWk1zX%N&bfo-sc zGTGEDtFj~C(q@8rCa*~sKnXC`0x^GT@ayi09!l&*@~39ASGAejes}ipzK;-WCtjr& z_H6Co2@f9O!m##bY}DUr^*o&1D0@BUYjeH)U9}PRy5~dVQuq?*S+-mf?t}g54tnA0 zw#H{+EORQ$9ep*xUe6ml{#stX0I*QQuPSeXi;Egkse_&C8q-7=2{EtDGHMX>@K`$A z^EiW&NgR}U!3%pLbvdj~@_9dfzcjp^@Z@MEKs7m|=LuyK{vW!4e>H1X2KIlqfxnLV z*R`~P4*joo!TI0Z?f+znO9EZq!Or$C_Z#5k;QVj8I3pti^S|-ptgP(+6JGqUWB-qI z@qhWWh_K3k!NmXN(X9XO7XHhlKbJqZL6D`yB*j2L!9YMjfe(<+H4tGCCNC+q> zNGND%C>Q`T000XMKu1J^N5(?O#>PU&#KgrXBgFkef`^GoL`y_MPC-RYg+us_;Tt6b z86_3v-%LQEp`igV05kvqjS?3Vm-7F5`|JThfdTslArB5p3<8D%3XTH$IRHWk)Dsf) z9~;PjZJ=P_Kz*TMU;%JIfnUfVV4&dOU=ZMtkPr|+X>Z{7zyJe~s9zZcq0kf!po#6# znf&AOU`T}OdNGt{u1T2<9Rgqhm{{02xMbuMlvLC#tZeKYoLs^pqGI9_l2Xbls%q*Q znp#H2CZ=ZQ7C#)FoLyYq+&uz=fH@PC>GeEp|k z|A$>DK)b*oAiyD@|Jnr#<_dg*qd-7@WrRW%RD?FLMjpj8q`!Pnl?}e`o+^=wwz&Jy?p&#HSPm1rsg}@Nfbp60k1#@pS zV&R-5%e?;)`p+Twf9VD4XtDx6F|>I6ZF_Q#8x` zW>e2GpCD`9AM@2bUP^i7DYg^%tzP?oP-Gw9($+pf`r5AL-(f%SK0$ho3EyN1ud6%I zK0$8OvorOEDfkI8F!KolIP2xVqj+-s1c8k8 z{lhvxBf5Pk#w{kKV7|cu2dNK=+M8t8 z#O7@nm$~$MVj;#+2Idd-6~10(fjKgP^SH+!7;YhxO9CCwS;n z0>=k;8>APqnv~WRXwMCH?q9`0T3lCF#3gTt22!#b)dM^dmvr1KduuY|BqJ ziDP6Je^KRzs>~II*?x5a&>0|Pjda4|9f&`vi=4`;)IT}B`_|A89G1vsmg&A}edJtQ zZ(Vb4@b@)0oMYb@p{~9lE`$k@mpi6>l=N7WPd2T`#vr* z>Lrxv6A$m<(6PR9m)hoivjFJYlG;Kbbb^BH;s4N;)@_bwoo6Y#6SRInK}vFTW*P}J zh4+!LBDA98eqFRgQ}*;#TVC0*xbXP|;dOoYt;qh-Mpt@`lOo$`E(8nr6T4J+rXf1} z{#S{ctj&cJPWE#FZh_4IV(+b^;%v7((Mm`{f+hs_1PvMp?h-seaHo>s?k+_jI1~W_ zBxr(L;YH!D!GabPZowT2D~hS}ojJYE_w{totUI@F-?_K{czIzh)+2jA?|!!Y_TF_W zmY;jquU`yUZSt7tfSd75nGS97b@?iz)nC^EYwl1AOx=?d!Y%;X0tsz>-HE*U#Lsf= zoLqb@=6T~-c|^V3+Qh4;qLQ|ay3CScO}7#VZ*vX?H_OM-Orw0BI`MAutxI8-c!G`w@++X~0OfA1H=NRuB$X>l$JJMr2iG_15!cme%?1ZX2 zL#7bH{3(t$BEiXM6Md3?q#oi}L$_Pl)YI7598($08p%`9qx~+U zH%oe~Vo`ZQ^JF*fy(i2_#fO=cFo;)e&Wij&GtL-#K%@2$m4c`M?~AIy0$?AA#%jJj z+$Zd#Vku)+9@ifq*FUVO0_w{#HIdoys8m1iQoNM*V$5uEi&O6Zz$R^|d;sh~qGB^C zzs#@fHZS%j-vZJ=3t@SA+=gBt?3tKw9*5@Q=tY#eBEuA=4 zo~r@OrZ>QLO^4`aoJ~sO2FOLSUw{kqdyd96edO^pi>RB{a4l(rQ&d8Lnfm)elTHqh zRk|V?n66|`utdFDPEu0NxC=k?xO&AD9%9^o3(y4>qtqqq$GP|3f&EI@3+WR-B`AK= zY55dGS-;Xub&X}5rgnlJT`v~=R&D9U>iA8f1-h`4Qv2k>tIN|4WG4h-oE5djcjH(R z8hETmyjlS`+htF@_~zl{vx-{}VTtlKcz#zgoi||tvWzwmd z7qW^5Fx@&QTtbO8q%ch~|Ni)4?_wIW^V|ZiG3@{mNvmhObk!TE-dn)l;w`{dkM=$K zfIH!&MsqgcQH zZ$Hf;NdH^F*IU3%BZh{`M^{L~nG-ZdtRXQi38Cz9FK+=}DFY`8o<`^sx~#R4cbKlV zzvGHq7ihbG_FXNpJf^-a>oXE;5R<6`ZP$(+t+kd%pb$%>X=C9JlUhauJ z9zVTNS1$aXGJNvTn62`y8=MAY9M_S&obk?$Xg`sT^*npw8QvrEHP)VhfSn<6t<(vB z%?4nUQ|TFYFb(gls>;-tkXD!Y6dIq+mw;ha6^oTekQ&cPu{V`AzeZR|YuhREaRRq1 zC^(<(Kow|&yUlmd_;Fpd0(FfO5I2jP)X(ki;Cr8knJj<0)$89SaEXfg-P=`$5Idie zLGQ>lSyxkAJ z<$sk?VRU+m+Df1?O5X^2NjO!59nI%dv0&2gdDv}Pd=j~oz!Iy!#3TQ9TB5GoRU|76 zn(-bb?ZFfe^@}cHZ^Y!Uy!av`VQwXR%+veUTc};!<_Z>G2IVH)`2d$`t({=0Rb&uE zWFZ(oW8-OCD(Gm$Y%pxepj!@3u(Iop!ZHLhiY1bq8JlaW6Sf#qDHsTf3CJCBn|ZO> zTn=>h#PpwgWa-vbhYh*cap&o;eCelBbk<)YnYl=KskE9J-hIXVqtJH6PZY!}xobC| zis?#whO{?T_owyM;&UP}&UhQEHW3hJ@?cRtg{y!I*Xa#bW_Y=}FWK2GAQ6;+eFIu+ zJygp+*Q=F3*Z$N+R-`9da~sU>5aD#3;U31%Tb|3_BCrk zbz88UA*pXo@2T0+yd|b3?bIH$=n1!K7E&iB?;H!qmC@dP!6hD!YZOQ^&V-(T);0fv z;wtTBTRfe&9da%10=%|0cO)#r@ut?=x$(ILw2`Ur44@yja2?sBX^#ZrY!BtHOuAf^ zd;|zChAE?HgXV8tQNyGKh#(ch=LXMD5q@qn|5y;PcJV7nosEeh8w5l3@D@IFJo z(2{xL+!**Lrm1o{8oSTQ%V|e_XX8W!qR?$9kmhfHz%5q)rMUiyD5FKorWc^tih(L( z=j}G_t6%QdjU{#^Qw9)4GMwaNp>X=g#>JmYf+fs)O}+Vty%*JwDEbpUT_xV;6o_wMS^EY>_bknx6mf9|dfaSW@fMWRy<|w&Y)Lu31w6|u zR?v7*WFhf`DdtspJ(#%806X7qw!(WGA0*71D}?X45M%tj_A91M$%fHc5#n6>NJ7`S+u8Ty$g<%?|BBL50>u|T z*BA0yzk*-N3Du<9YwD@8n6Vg5=GF%AE~-6IaSM2r}G)b|nc1{cDJho_|@53N%}Gk-8P)KYL{Uz0>T;u&&w9Y}nN4MAgR z=N_J2%(yzN#ebjJcNB{#^Djtv!HdOSf=3&E54;3dXA(VL+_(X$XeDMs>i3Q>L0Jo> z9s-Ep8E#BXF2;1cUe@uH0=f%1F1q*b7Emv(#O=)s?!w1!ir(mIl9xTy6{R+dF=Hv* zN^NTx-KSDa-ccX7giWkAfVWxqxlr(=M6BN*y70>M4k*hq$(w`ERl@l7s=g>NXJ3c& z_Nat_ufNq_X=-mtw5F8Y0zUp0)GgiuwT`24k45&>HEYH>lULC1?{O?+RS3=b655tH zt>E)|JLVZ>MBCo^szN2-M<}BcBqR7S z3R(Lcu{5h-caNyyRRw{;*X7!cdrPEOEBVAL%Y&G6A+w>Yk;S&#;Cl;*uf~pWuZNUb z89^c)LS7~d#wLnO=mJh=!G7AF3(R9>EcKCAse-j}Lun(m$xkSK6SlE0;7kw$U{@-1 z{xChd&;f#JS{P|yL6mMauq?&+SPev*#DOI94M&zGx_+BG`KCZy3AcOA3hYP?V<04@alebhXE@ZKlAsUq?l8=`CaoCNvVo3fJlIcp88a{z04c2?dvgI zReJ@R9e)erXEM;Z%OjO%%!7?Zu_{Ixtup3;{{T6e4Rw%~tj?~s1iv;Z`;?y1B#Sv)vd-SJ(_u*(=C7xR|$Fvr}D(rKPg7S!?R@VjCjdpG!eV36T%G`g#-@ zbx~S3l6H961itm`*nJF>8YII}Q@9t^c8ClI*$IXrwrBKqo##rsL~46Hsa!^cDYh;q zZ@6ew6q{OMs={SI>KpAo)f>d?$i{zO%9x>TTl)vym1)F|Dj|7guN<7$1o~K zf@JCXhd%st24QSE$3d!lVyrgPCoDWT88J`y5Q%C8fY!g1uE@_AnT!SEg5Z?l}KK-m#%zdOJ z_Sx@5yQGY3b0wh~qbPn2j$&6{Rj3bFaNwOqz@=>}7f%`}XPS-O^FD z{V9^9eGI9dh5p0L`scS^6PmE6RL5^*31yA7=F6Jh(sdD(jVZ{D{OXbMVWG`f*4}dd zdPa@JIjK%##1%xoBkJ|&!jr|v{n>`z zBCG0SVp=|)(XfFk@59({ShSvmo;!&8%ht6tj1oPq3%nsp+N68z2(1@;7MOy_4;8OJ zK3A}%8kB4@HskPHJsk2uEgq{vK)dYR=tyOKFYkhzgYi*9qIygCIS8ohCmC`&Aa1lg zm1I*mn|mmR#n$I- z768A48glpetw16|Vle<+2#0VmiOG?lI9U`O(~#_&idL<426$kccrKJYeDFo87X@Sq0l*-l&8H3P&q2l{Z4k{9R!buYP6_&L&EA zc@{`8-HyM$oMQYLI|0FgDS&3_xVJ0WDWdEWt>IVAI{qbltyY0Y&feRp6W)M2<}6Pk zX<~2j`<7Ka;XqtUeo{l z@q-$Ar!H(xa}_lQ^1b5>RDrqhSLK`M zsiXy*;O`$T-#nK7*^n7S=%P$wCOA-i@{2|Ot?_I*i(Ag27b?>9)h(dxF=*4lIJA_| z!vnub|Afgox^Brl9WQkUMRN;yt`~C)*!e_vMWy#5A8`ZIfI=6mN0Oe;$L!5X4U3)? zh13*FN{&)$>&5b~UsZajP}I!J_=#p@x^qHn1(vhSbnJloV+>;`Re>b&h4*1DPv?9B z$YN^ekl6V)Vp`e#%QvnYYRQ;X=!LwzD zjET{f=PML@hiF7Aj$_ai+U7FH1N()-y{%ii;~kW06=f|X@Pz#%>Gw8nPeSJi_Y>PC z7Qd0Cb!n-C+Gh`@C*K$I!+vhx0z5Ye>&6CJW*zrgh3i*CcxBV%uT~1g2 z?j}p}x8yCr5#t`xtUDn*_wjG#^Rj3?;JHM!Vx1A~wqUt}>gL%FV?s;2;Fe_W^i-@i+O? z9esbqT6n~LzIqF2A-ouk1hvxL9D;g+7_Sr&x?kmwmuh~&fx&$%a z0$w3b3$rKPFP!WHY4!UZUNVu-zpiiZm8sv;y#-WZFkaa%?=g0$^DQ9Mdmda+QW!Ob zaoywXfypfb3o72)jiSV!qkCcKIUxBhz#6sSl(eyT-Aj(*G4-$|$b{Vj#>#I2d9)cg zMBd|0}p)|Kf z5O)fQG0yF8D4pjL7$}f2_6h$eT=;MU{W^dST}SxaP5}t#yLr%Eb|yT zkayCDbzLPVPruXL9C+_q!1RiLA22+m~nrinSLjS5~V@bVS^d`y_Lw zvqN5ovz?yE(WdHtKi+Km{txQP%R8+iNmGf3*PVK`L|@CEH>Z~n_R?R4m?RzS&-$Tb zmOEz`Tc&Q_ZV2202q8GnqBgqSm??TFIJChblYO@Uq3b!4uCY0F#__&m6$Vl-w}h@U zMz}|j4Kh#wnx^wBN1wmufy$5&^<_(y!VWzC#`o|IP6GL3g?qFU?|1hXyWv-R)81(% zOoylF#&gjus-N!SSPF;pCB*o57fkn-`q_`Md{^lP#_A0B&}=`lw8r^`E}<=zk*kg~ zSoZ^S;)d&@yq%T{CJ(mN*e@XNM!xQ%Kmt%d?~&JyJH}uf4Xz2K+e!`gmerp)Rq;yG zNtL$1eF5nDdViY8_ZWKu$1=7+#o^GeOE95Gr!kd|Te7Q!4G(P|*YW*uZXD<@IAw3Y z?%q^UXSDvLQrEfdA}Q%ak>6A(tM3!zJ+dEkKs<0;`)b!TnpLxKh02 zMe#P8_QI@-GBC%@qQs^uKdw;baPEP}Gc|&#HgUJ!Ra1wXA`r&k0SBI6w)VvBsoVlC z(G9nN)*&=MRN2E;t{ZwTdGfMAH&*xsz7MfzBh^AC-C%tah)q zTew=l3X)dU@sO3csy!jII8Et|Ep0Iz74LC*4khM&UZsN*ZCXq)C%(}bWAkp^0#41e z*43I9wgR(%+YyY-wEpTXTkUqO%{jaUbW(m=YaUeP%n@Fz3OU}`#NII$_iPA9C77_I zJ2XL?%*C*7Y>a!-+W(a)u=r{F;xUu=2)Yh~QTqXPYoWwU5~ut(!@Bj9$Am1Tbxrvw z>&7_*LmS%-fBstl18ovUm39Gbe#jS{KsP+kgL3cey;4~bM8#3|-grs&>1IXU0#-bh zhH#C6sebR=cd|v+ePloc=#^>-22kHoDG2U{3bpYUW6-LaLJ2?XZ-w#B2K%bg4f32F z>_Q3W^KddC=N_DXlLhLR<>!m)$CpWg6f+8vk-Es8yCZKR%Pm={j-_C$PH% zC17No&W-gpziFak>Vf$W*iiJFAiRR4k1EZMt3QnoU-O*Z0(z?mr>fAjwn};418?fT z1$X}Taa5P0Ch12~j4Z1zDCe#=m$m>8LG-cNTjR;_MojRm4K*Cnjix+uY%ZId@6S_R z+kbJ_=?&vM)OWn2-fdM2!wb6ZsT3Y#Bb&rtzBe>9=5LCy>CcKKSkdF7P0}DUrgg-n zW`+6!jMYaAUiZ8T6DQ)n1#DdHpl<5-UPsgfroN}3yv%6hFHXa(SrWB-pS z4(|LQqq#*xM%WX=GvPsXBtT|NdLu$N3)@C+>??l2wT&k}Z*ikq0&ldFHQ6A*@C9RO@zoEFae)~kXP$QhmuqEQ7=Sn`c;al zZI$GDb3_gZyc2q_X==Ei8V$JRIWFQ=tPa&WuDfAiu;uVP!>Gl!WCBOpTY%;SG96OY zx&8oYDYUv3wY*vAPBN=ng5=W=H_uIkfp$(ro7H>Gv=4t*7Z|twivD=lKpH2G?cu7k zqF6{eK^-d8wc$af*AH74p#Dpug8TXwCh9ux=O~A>(^)&7xTwg#fTyqJE|j3D_gK=} zeH+svwKOo!@o&#R>gv0pM_f?F&25JkkeUvxQs6xCbKd3Wu}0KSQO1;Oo4JLvd!oL# zfH#iK=%1|xr?Haw!0x<@5cQTiJ!^*z18VyF5!hnpQE|YgxVLZ*s%hC$Jwe_#AA86j ze2{lpO#LBe(^p^L@a?3Mt)tx3&p7k;QB17JgVW2}Cg^$Rg1 z@FPXt!o0f(4VFReI7)m4mtssy;0LwR6DgeFQl-ZlwYtifg~^9c~HSpP{NRvA!Qn1m)BKjRbR!NQnRiU)*bK#^Y>p+3cgs&VKntV zEXlkLO;5;hL_rt(Haj&~V{NNK7{(RYn4#CjO=NTtrxUCyK|x;$i#B)Z`=O@91ir(N z5a6fBE=OF{t`!yIDXp1P#3JlCJWTjx%Wx=$G?S~Q&gVOji&N%ToT$^grNe2A$UGaD z=wFHepHD!G;Ao%jyX2AHhEK7%(tM=ecZjU!ZiE@H zQ*-1 z)w&iqgOCrX5*|OLVL(fM#GJI^hu!>Zzh%-sf&3c^_U0vE74OcboVoW&Z-ZBGY~>^e z^u=mA5hFCxK9t^~UK%$YvHPngqCHcBg1*{< z&b?0bk)c1?5?nF`Dpx`wd%tMYGQ>&xE<}3~z-WF41@&>rL3V2IjhXTDV%VVGdME8_ z9SK}x^yLl)OYk>SyzfXb;yzr-+WqLW>(^f_b}Z!|t_sZnTKJg?eIV*KdCL3#jftI$HSG@&8{63CRwUaJk68 zGEF=hP^@o>dg#8U&s={qyw2ceo&?x9=DP)Opv*78q)*l^td!r@W7+ZfpxQr30>ph` zEB2|TIY)2>m3|1z_|ZK*s@(h7gR@CsXGuyipnc#|lx!uu20#3DD;uS%ZqI9#RgB-UrU?LUWB*#%9rFAGfhSrhcL*u?Jk5< z1#SAhyBZH<@E+*A%4$#ZW2cdyIWUi!zh7KyE|ceVx4AN;f8|TLjbMYd3v|_?bU3ap zkfHjppl$D!ZtL7=Csk-{;3?Sr9dUqNh9s$&&4X`b5nN52wqk+|L5z6qhiceEjfca7 zy0q046Sn{>aYmctUeT@dyDEjN?}mtyKl``2N*szIe;033>PD7c@Xpz05gl-HqP|z# zBo2D^=v}YYmU<8WCWJC_*yz1g~Q$3tYS&_sw&^O*p;dzj%QlZkb z>r8eBK1WOVykZ~y;$j^AB-+GtyaUGleWm!_p)ve4l2oOFGEDn6Ja}hTAaj)&7a`17iS7~ zc^Aptq$u9T$>oR+%jyjCi1b|#-FsGbMV*(g}(; zZ|~L@I1ZdJqjv)g$`5;22qRDiKIJo}Gh6Yd`fYF6iA0K07y(`Ns|>Yl1wk#(E;_qt zUp4+Z*yZ!49AXm0iP~OHVdF`mkDYbvmDLAU?@cyboOI)ici~+ge{{JXS$KMUb+o0> zO<{3J){QBHWF6i&!D&8+Ez8`I8|X)weI?gYax_t5$Jij*DeJX--la}B>@e%^q zoPy9a$#mhVu_s4I0vDvXx}v=clW0r{@9;9oe&j(N~n9>^ZCAZJ^q%cz{@?URRhGiElj zAf7Fvb-}akhyi0&YUL@n=ikU#Io>Yeog?$~mI6caj!+|CTS(>ymdl@5i<}6Pl6h(B ztNC%`rehqbwxA{coz@zXQ+VwaU8p_P4ZBXg=8~tB6a{h)X)Nh-R3KOx@w(M-6QXG3I;*W^?qumHXDI(7ObMugGb(AC$gcE z#f!#XF9cDWbkx+?rjaAIFhVk#91HMN*vh)sW6)y@paOT$&aQhG!9G46i;bNC6lmpjp?i zOlFO?0~t@s%%u9Mijq2#-vT*D^5p}eENylrE=Szm2AR(`e8MEt{ci!yEbC{hnJ*A0 zDh+jMHNZqsx-dE-55gzj!Pinpv>Eu|635auxw;n!=bzGy!LKr#Cb{wbWsbyqyPqtp zdJZUuN(byYmN(wPEqmlDVg_}iC2EG=0>WY^t*+nDz7Dfc5^IM>Y6KC=SWj|0oYEmQ z$~|m!r$*Z(+{1COq-%%*UiH|>&9}D{-K-{5rJ7KT+kzgWwDM3I)rXTe$qBW3dTf=7 z#lK~-gmGpTgQjV-LY@3&kIJCgJIR!EVKvf)+k)|z(Tt_9?fS{Z#UHJQ`ha3l(z)9} z8ZpTLi^5q|Gsmed&Ni3zA_Aq$IC22kSNFV|n{?aNUw*tvl(g=OHu|~zv1v!U%7c6R zi_@OetMz#_W^}sYoJ`!WhvEoPZ{QC877oj;)SIv!+_7 zm`sv*$7e4HXHY!^FTbWI)*)9jZF5ROPM8f}lrwB9zo=|bqHMA+i{ULTppScNGw~me zD*CIQ@Xvq$E1d!A&r^`0ZdeO_`^b};u8`uq$1P48`2GcJ0kgmMhYco@iLpa?2$a+1 zV-&OYPGTF@91<0YEb9&=P+N7GOlG)QtUl;ntpl;0&C{uct5rrV-0%3lGnct`J>^+a zJTF(qoMFcqT221C*s(JZl^{RSPR>Amwk=eiRrGc8OLMPz01Zb~jM+g+^^oMUsyfD8 z#2mUdN%V{Y>P68lU{j#=0+W0=%RV)$S7mfi#n(GB_jpBsl{zMrJN8H158-@}lg;85 zMaCDSp0RrG3~9OTpNf}3XU08VmDHc>+u{dzidLovECdS;Wr&K@`76#_}1=Nw6 zg$}X11q6X^s+x8DW%Gq%dily*nPiOmdI77RcMn_l+|LU!+R9^T&b=YX?89}VT3EEb zdd(8v-Dx)RlOFj1)+;oFqf@k`fHG*+ug<@L$Jb>R~^3nm<7IcUC1(?)e z#4TV6QTsef8}+=Z4FCK=NKbci{*wR&YO5OY|xEu+=f zy^)lsB4zt&U+)&Y!{+CoIbsTzqx*xXt$mXJpsLotN7b?@iPi}8-v|VnE1$fP}YjWd+ONgysNKGV)NzeXwOFHD=u%xLuM>?GD%^MH6NJKXn7&pQY1r#4# z)d>v^4}!#Al`EL1)}|ptt3F8sPS#Z;L!4%iLb@_$*?vN97U<6)A)nOb`5(z{qTw!M+v)K1ufl6m# zo?aUT_A8BStXPrZ%fOKL)pgJ~`PuvJT5LDPW{oyKPg)tuZH?$c7YHiJp2HQ6ySq5= zwQgzA^tr?j9Q|??E}M!1thzgenLZhXiU!E4j)|oWc+OL2*?g-_H~ZmAXu1MLX)T+O zb?Y8VmmA>LEq^$QjLg4C>rB;)+$9gQv-I*;@F!$}vA^J9Xiq8P3xcG?q}s_WdD>_q-!toH z1A-L`9I~AC$zh+HB}7p>VP7!H0Y(&rL0)^`X~dG4?zL5ASdRO|7a+sFC#rbtm_6Kk z{bnd8nDBnzrmCm*TWoxX!?bo?IFGS(_FgIr5ko*R#kamsDRD*Tjq8o3D-zWGjNwCARgV?vGbgw)@o0HN5O`uJ7#7YUC#W8mh`&Xw* zHRSN;1TbzOOoqpQ((^|Gqki#uR{O;-?7p*6ltcr#x4V|?6*Y&$)svd6HX;zt#)~7x zQN=2G=bx_l0UnBO-M#fk?i>C5To|m*=e~!+_jFkz`L1u&DC}3G)e?ryXIlbhmmPN> zJT%+-xpZEJ)z(VnFgC?5{`Td=yCq;nWUnrrT0nrheLMlfIcDQBmWe?HH6;MonE4lC;nS==@$73KT z3e{O=a+N`;G9n&`#5IB_Oe@TNlGlZS@bHZuj&`SxWv$pT03D=zt^>2`v&il%%5=o^uiOI z7uuSt0WEVMZrotkl%w$CP}aAAPpzFN+P%{XzvL zjL`!3*lz(?3>Z^S@}K9kIac?>MaWDw2(p$+{=5Hajdb0Wv?17>%dWTu{PPfhS#r+I zK!u;8m;5?O`2U14w8JJL2-*L&nQ6ypM(gF?W5oGC^WZNNRHwW{e%_D$$xevIAdUz? zzx*)K$u>;Xx+m_hTN6)j#I6ZijcXa{kr$R$T3S&*rJV z=+gc5_|g4od_Q4N!v7E=vX8Xznaa_Hn%B6U47Xhe6?lSP<{Uv(&3X|`p^ajKN}h|I zYZYvuC6L!yIl&Puius84ySZ6JIDp{mE;j7sV47f#l+>*-cQQf9Wx7r#Ey~OOx7|M% zIr%FXtl7BpW&y}OL@V(>%47Ral5+odNY_70%2Qo36eALN@^ck^2|U7Z-jDlo-30?y zE5CqG1h|HuFsz|-BGB@Vqx!(Z#2L^Cd))Op2y^0;c3U@+dT)+fR~6u_AYQ`470LLt zntyw=(X*d)gCW~Oach=)B%zq2EuMlpuEPM~^!|_vnFDAaW6&Zyn(uFu(qDlYE-4!2 z-h(>SF~}6LGRXssyu*CkEST7FrXJln=5~#xGyZ|n7zr2GXFxV^E#MU-a@i7&sCTJL)yiS*(en+oGR4L<%<%rHQ3XF1Z-`8i|W`F0EVAAcGT6-L{Mc^LVn*E8Hqo`4Qgt-dk!L>64o>RHvrXnHwX=Y^So$r;XUe~xV#b4?K#A1ZII{Z+aHfp0uykt?e)YedP zd%8ERVD{IFlc>#+F9!ORLc+6s2%gORQkw<-Nq#K+JxH|5d(M%B+WrFLZ(_~YVk45Y zKsxU-9corIZV&rz&l7V!2p3IG5`PJ*dGW&A1L76<7re zdz;pdKX*xMVOr4adT!i{`~WANn&`eLcDvZ;G_uqwdS3KpZov=4*&qdx9-@o52Db7$ zvg3vZmP(e*91JE2yoEY*ylTQsVd8}Ew_492AMI{@jQ2Ln1;;(|j|gB(4)U)f8RMNs zyHx9OSrN)vvM`3}$?}LPFW;1iChmgLDfyo(HY(B{w&M&UU0q}v&%5GcQC!jkSEV=#abmyB z`^F9mI(|DQBHR^_oi@k(FFAbHX%!?=@AOaL4EZhyC{i_#3zPDxf^>w7u(5}XdHBVO zv^&H(JRl@{7lY@TLMew*V9V0jrWjS6vuS#rU_wU4x zar<>LBq*cz%P~>?07Xz0wTzMl`EbQSrfnsyZ1z+eAJJFczx?_qESjOfU!xq}u7`(_u1TDG8TjN58ITiZ9;_`cTog;P*zXs7tdPKWBn$Pq{)d2j`H`; zeP*$;6uOVaIv&zHtYV8T>B%jN>z-@D8YyF|yP29=42O_54r3mOhaO52?)SKhaT``d_@4d%Y_?xxa$X;qC>D1vAwhB7NN2rve2v0;B z*umk(Q@h-JPJ3PBnX@_|Cele0(*>E(38F#SxGyn5O~}$A$?k@0YZ2Y%0D_d83=ike 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

Tutorial

- - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + + + + + + + + +
idNameDescriptionXPDateidNameDescriptionXPDate
1First StepsAdded to the discipline's repository.221/081First StepsAdded to the discipline's repository.225/09
2Exploring a Project's EnvironmentResearched the history and community of people and services around a project.321/082Exploring a Project's EnvironmentResearched the history and community of people and services around a project.325/09
3Undocumented ProjectReceived an undocumented system and got it up and running.528/083Undocumented ProjectReceived an undocumented system and got it up and running.525/09
4Professional ProjectRefactored poorly written code and created a web page for it.501/094Professional ProjectRefactored poorly written code and created a web page for it.525/09
5Tested and ApprovedCreated unit tests and interface tests for the challenge server.513/095Tested and ApprovedCreated unit tests and interface tests for the challenge server.525/09
6Python PackageCreated a Python package installable via pip.311/096Python PackageCreated a Python package installable via pip.325/09
7DockerfileCreated automated deployment for a Python web system.311/097DockerfileCreated automated deployment for a Python web system.325/09
8Basic TranslationUsed translation tools to translate and localize a small command-line program.211/098Basic TranslationUsed translation tools to translate and localize a small command-line program.225/09
10FLOSS ResearchDelivered a long presentation on a recent and relevant topic related to free and open-source software.504/1210FLOSS ResearchDelivered a long presentation on a recent and relevant topic related to free and open-source software.504/12
11Better codeAddressed linting problems in a poorly written project515/0911Better codeAddressed linting problems in a poorly written project525/09
12Release createdCreated a release and published a binary package for users525/09
@@ -724,62 +732,62 @@

Code

- - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + +
idNameDescriptionXPDateidNameDescriptionXPDate
21Code ContributionSubmitted a pull request fixing a bug.704/1221Code ContributionSubmitted a pull request fixing a bug.704/12
22Contribution Accepted!A non-trivial pull request was accepted by an external project.1304/1222Contribution Accepted!A non-trivial pull request was accepted by an external project.1304/12
23Simple Contribution Accepted!A simple pull request (with trivial changes or small code refactorings) was accepted by an external project.304/1223Simple Contribution Accepted!A simple pull request (with trivial changes or small code refactorings) was accepted by an external project.304/12
24Bug ReportReported a bug in a repository, and another user was able to reproduce it.504/1224Bug ReportReported a bug in a repository, and another user was able to reproduce it.504/12
25Feature RequestMade a request for a new feature in a software.204/1225Feature RequestMade a request for a new feature in a software.204/12
26INSPER ProjectMade additional contributions to an INSPER educational project.504/1226INSPER ProjectMade additional contributions to an INSPER educational project.504/12
@@ -788,94 +796,94 @@

Community

- - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + +
idNameDescriptionXPDateidNameDescriptionXPDate
40Indirect IssueConversations in an issue or pull request led other users to open issues reporting new bugs/improvements.304/1240Indirect IssueConversations in an issue or pull request led other users to open issues reporting new bugs/improvements.304/12
41Beta TesterWhen reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue.304/1241Beta TesterWhen reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue.304/12
42Translation Accepted!Made a translation that was accepted in an open-source software.504/1242Translation Accepted!Made a translation that was accepted in an open-source software.504/12
43New LanguagesAdded support for translations in a previously non-translatable software.1004/1243New LanguagesAdded support for translations in a previously non-translatable software.1004/12
44ReviewerReviewed minor errors in the documentation of a project, and your modifications were accepted.204/1244ReviewerReviewed minor errors in the documentation of a project, and your modifications were accepted.204/12
45Documentation ContributionClosed an issue marked as docs.704/1245Documentation ContributionClosed an issue marked as docs.704/12
46Project PitchDelivered a project pitch.004/1246Project PitchDelivered a project pitch.004/12
47Pitch Accepted!Contributed to a project presented in class.504/1247Pitch Accepted!Contributed to a project presented in class.504/12
48Accepted Suggestion!Another student contributed to the project you pitched.304/1248Accepted Suggestion!Another student contributed to the project you pitched.304/12
49PR ReplayPresented (in 15 minutes) the process of resolving a bug in class.504/1249PR ReplayPresented (in 15 minutes) the process of resolving a bug in class.504/12
@@ -890,78 +898,78 @@

Impact

- - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + +
idNameDescriptionXPDateidNameDescriptionXPDate
60SpeakerGave a talk about libraries or open-source software.2004/1260SpeakerGave a talk about libraries or open-source software.2004/12
61HelpdeskHad an accepted answer on sites like StackOverflow or email lists.404/1261HelpdeskHad an accepted answer on sites like StackOverflow or email lists.404/12
62Published ContributionOne of your contributions was included in a release.1004/1262Published ContributionOne of your contributions was included in a release.1004/12
63VIP GuestAfter making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill.504/1263VIP GuestAfter making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill.504/12
643 Submitted PRsSubmitted 3 pull requests to the same project.1004/12643 Submitted PRsSubmitted 3 pull requests to the same project.1004/12
653 Accepted PRs3 pull requests you submitted to a project were accepted.3004/12653 Accepted PRs3 pull requests you submitted to a project were accepted.3004/12
66ShoutoutSomething you did was mentioned by the project on social media or through an official channel.1004/1266ShoutoutSomething you did was mentioned by the project on social media or through an official channel.1004/12
77HacktoberfestParticipated in Hacktoberfest by submitting 3 pull requests to external projects.2004/1277HacktoberfestParticipated in Hacktoberfest by submitting 3 pull requests to external projects.2004/12
diff --git a/aulas/02-comunidades-de-software/index.html b/aulas/02-comunidades-de-software/index.html index d60fcb8b..56ab293a 100644 --- a/aulas/02-comunidades-de-software/index.html +++ b/aulas/02-comunidades-de-software/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/02-comunidades-de-software/slides/index.html b/aulas/02-comunidades-de-software/slides/index.html index e83e1e2e..e6cada57 100644 --- a/aulas/02-comunidades-de-software/slides/index.html +++ b/aulas/02-comunidades-de-software/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/04-discussao-documentacao-de-software/index.html b/aulas/04-discussao-documentacao-de-software/index.html index 1c02d80b..a85814b6 100644 --- a/aulas/04-discussao-documentacao-de-software/index.html +++ b/aulas/04-discussao-documentacao-de-software/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/04-discussao-documentacao-de-software/slides/index.html b/aulas/04-discussao-documentacao-de-software/slides/index.html index 307a7cf1..81356e53 100644 --- a/aulas/04-discussao-documentacao-de-software/slides/index.html +++ b/aulas/04-discussao-documentacao-de-software/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/05-projeto-profissional/index.html b/aulas/05-projeto-profissional/index.html index 2ddb32b2..57bb23ac 100644 --- a/aulas/05-projeto-profissional/index.html +++ b/aulas/05-projeto-profissional/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/05-projeto-profissional/slides/index.html b/aulas/05-projeto-profissional/slides/index.html index dd3057c4..0c9a4d4b 100644 --- a/aulas/05-projeto-profissional/slides/index.html +++ b/aulas/05-projeto-profissional/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/06-distribuicao-software/index.html b/aulas/06-distribuicao-software/index.html index bfd993f7..adc3eeb8 100644 --- a/aulas/06-distribuicao-software/index.html +++ b/aulas/06-distribuicao-software/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/07-localizacao/index.html b/aulas/07-localizacao/index.html index ee0fc657..8235f52e 100644 --- a/aulas/07-localizacao/index.html +++ b/aulas/07-localizacao/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/07-localizacao/slides/index.html b/aulas/07-localizacao/slides/index.html index 615199cc..564f5912 100644 --- a/aulas/07-localizacao/slides/index.html +++ b/aulas/07-localizacao/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/08-testes-automatizados/index.html b/aulas/08-testes-automatizados/index.html index 76a3e7ad..5883dbef 100644 --- a/aulas/08-testes-automatizados/index.html +++ b/aulas/08-testes-automatizados/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/08-testes-automatizados/index_2022/index.html b/aulas/08-testes-automatizados/index_2022/index.html index 3d6d09b3..af4acdf1 100644 --- a/aulas/08-testes-automatizados/index_2022/index.html +++ b/aulas/08-testes-automatizados/index_2022/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/08-testes-automatizados/slides/index.html b/aulas/08-testes-automatizados/slides/index.html index 8cc89a99..912b8f1b 100644 --- a/aulas/08-testes-automatizados/slides/index.html +++ b/aulas/08-testes-automatizados/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/09-cultura-livre/index.html b/aulas/09-cultura-livre/index.html index 78f70640..9e14ff57 100644 --- a/aulas/09-cultura-livre/index.html +++ b/aulas/09-cultura-livre/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/09-cultura-livre/slides/index.html b/aulas/09-cultura-livre/slides/index.html index 117c0d21..81e6a900 100644 --- a/aulas/09-cultura-livre/slides/index.html +++ b/aulas/09-cultura-livre/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/09-licencas/index.html b/aulas/09-licencas/index.html index 3a931fe4..554a12c3 100644 --- a/aulas/09-licencas/index.html +++ b/aulas/09-licencas/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/09-licencas/slides/index.html b/aulas/09-licencas/slides/index.html index 55235cee..5710901c 100644 --- a/aulas/09-licencas/slides/index.html +++ b/aulas/09-licencas/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/10-minha-primeira-contribuicao/index.html b/aulas/10-minha-primeira-contribuicao/index.html index 11fa7558..bf9ab852 100644 --- a/aulas/10-minha-primeira-contribuicao/index.html +++ b/aulas/10-minha-primeira-contribuicao/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/10-minha-primeira-contribuicao/slides/index.html b/aulas/10-minha-primeira-contribuicao/slides/index.html index b7b2f069..8c2b8db5 100644 --- a/aulas/10-minha-primeira-contribuicao/slides/index.html +++ b/aulas/10-minha-primeira-contribuicao/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/11-contribuicoes-externas/index.html b/aulas/11-contribuicoes-externas/index.html index dd7b47eb..b33f2970 100644 --- a/aulas/11-contribuicoes-externas/index.html +++ b/aulas/11-contribuicoes-externas/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/11-contribuicoes-externas/slides/index.html b/aulas/11-contribuicoes-externas/slides/index.html index 2aec534f..70d28e40 100644 --- a/aulas/11-contribuicoes-externas/slides/index.html +++ b/aulas/11-contribuicoes-externas/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/aulas/12-projeto/slides/index.html b/aulas/12-projeto/slides/index.html index 8d8d6457..fd1e121e 100644 --- a/aulas/12-projeto/slides/index.html +++ b/aulas/12-projeto/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/impact-2019/index.html b/impact-2019/index.html index c6d8ede8..b8b2e1a3 100644 --- a/impact-2019/index.html +++ b/impact-2019/index.html @@ -15,7 +15,7 @@ - + @@ -657,91 +657,91 @@

Alunos

- - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +
Alessandra BlücherAlessandra BlücherAlessandra BlücherAlessandra Blücher
Alexandre EdingtonAlexandre EdingtonAlexandre EdingtonAlexandre Edington
Antonio João Andraues JuniorAntonio João Andraues JuniorAntonio João Andraues JuniorAntonio João Andraues Junior
Elisa Mochetti MalzoniElisa Mochetti MalzoniElisa Mochetti MalzoniElisa Mochetti Malzoni
Gabriel Lopes MonteiroGabriel Lopes MonteiroGabriel Lopes MonteiroGabriel Lopes Monteiro
gabriel do vale riosGabriel Do Vale Riosgabriel do vale riosGabriel Do Vale Rios
Giulia Braga PassarelliGiulia Braga PassarelliGiulia Braga PassarelliGiulia Braga Passarelli
Guilherme LeiteGuilherme LeiteGuilherme LeiteGuilherme Leite
hugo ebert carlHugo Ebert Carlhugo ebert carlHugo Ebert Carl
igor montagnerIgor Montagnerigor montagnerIgor Montagner
Leonardo Pereira MedeirosLeonardo Pereira MedeirosLeonardo Pereira MedeirosLeonardo Pereira Medeiros
Lucas Scarlato AsturLucas Scarlato AsturLucas Scarlato AsturLucas Scarlato Astur
Pedro Cunial CamposPedro Cunial CamposPedro Cunial CamposPedro Cunial Campos
Samuel Vinicius Granato de BarrosSamuel Vinicius Granato De BarrosSamuel Vinicius Granato de BarrosSamuel Vinicius Granato De Barros
Vinicius Gomes de LimaVinicius Gomes De LimaVinicius Gomes de LimaVinicius Gomes De Lima
Vitor LiuVitor LiuVitor LiuVitor Liu
diff --git a/impact-2020/index.html b/impact-2020/index.html index a3f4bdd9..5e2ed1bb 100644 --- a/impact-2020/index.html +++ b/impact-2020/index.html @@ -17,7 +17,7 @@ - + @@ -629,96 +629,96 @@

Alunos

- - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +
Isabella Rocha de OliveiraIsabella Rocha De OliveiraIsabella Rocha de OliveiraIsabella Rocha De Oliveira
Bruna Mayumi KimuraBruna Mayumi KimuraBruna Mayumi KimuraBruna Mayumi Kimura
Bruno Arthur CesconettoBruno Arthur CesconettoBruno Arthur CesconettoBruno Arthur Cesconetto
Eli Jose Abi GhosnEli Jose Abi GhosnEli Jose Abi GhosnEli Jose Abi Ghosn
Eric Fernando Otofuji AbrantesEric Fernando Otofuji AbrantesEric Fernando Otofuji AbrantesEric Fernando Otofuji Abrantes
Francisco Ciol Rodrigues AveiroFrancisco Ciol Rodrigues AveiroFrancisco Ciol Rodrigues AveiroFrancisco Ciol Rodrigues Aveiro
Gabriel Fonseca MoreiraGabriel Fonseca MoreiraGabriel Fonseca MoreiraGabriel Fonseca Moreira
Gabriel Valente FrancatoGabriel Valente FrancatoGabriel Valente FrancatoGabriel Valente Francato
hugo silva pereira mendesHugo Silva Pereira Mendeshugo silva pereira mendesHugo Silva Pereira Mendes
Igor dos Santos MontagnerIgor Dos Santos MontagnerIgor dos Santos MontagnerIgor Dos Santos Montagner
Lucca Delchiaro CostabileLucca Delchiaro CostabileLucca Delchiaro CostabileLucca Delchiaro Costabile
Martim Ferreira JoseMartim Ferreira JoseMartim Ferreira JoseMartim Ferreira Jose
Pedro de la Peña Ferreira Bueno FonsecaPedro De La Peña Ferreira Bueno FonsecaPedro de la Peña Ferreira Bueno FonsecaPedro De La Peña Ferreira Bueno Fonseca
Pedro Oliveira de AzambujaPedro Oliveira De AzambujaPedro Oliveira de AzambujaPedro Oliveira De Azambuja
Raphael CostaRaphael CostaRaphael CostaRaphael Costa
sabrina sampaio simaoSabrina Sampaio Simaosabrina sampaio simaoSabrina Sampaio Simao
Victor Laperuta de MouraVictor Laperuta De MouraVictor Laperuta de MouraVictor Laperuta De Moura
diff --git a/impact-2021/index.html b/impact-2021/index.html index d6e2ae15..ba3d119c 100644 --- a/impact-2021/index.html +++ b/impact-2021/index.html @@ -17,7 +17,7 @@ - + diff --git a/impact-2022/index.html b/impact-2022/index.html index d3402d43..75b85638 100644 --- a/impact-2022/index.html +++ b/impact-2022/index.html @@ -17,7 +17,7 @@ - + @@ -578,121 +578,121 @@

2022/2

- - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +
Bruno Freitas do Nascimento RodriguesBruno Freitas Do Nascimento RodriguesBruno Freitas do Nascimento RodriguesBruno Freitas Do Nascimento Rodrigues
Caroline Chaim de Lima CarneiroCaroline Chaim De Lima CarneiroCaroline Chaim de Lima CarneiroCaroline Chaim De Lima Carneiro
Cesar Ezra AdesCesar Ezra AdesCesar Ezra AdesCesar Ezra Ades
Eiki Luis YamashiroEiki Luis YamashiroEiki Luis YamashiroEiki Luis Yamashiro
Fabricio BarthFabricio BarthFabricio BarthFabricio Barth
Felipe LemosFelipe LemosFelipe LemosFelipe Lemos
Gabriel ZanettiGabriel ZanettiGabriel ZanettiGabriel Zanetti
Guilherme Carneiro LunettaGuilherme Carneiro LunettaGuilherme Carneiro LunettaGuilherme Carneiro Lunetta
Guilherme Teixeira BatistaGuilherme Teixeira BatistaGuilherme Teixeira BatistaGuilherme Teixeira Batista
Gustavo Molina Freneda BenitesGustavo Molina Freneda BenitesGustavo Molina Freneda BenitesGustavo Molina Freneda Benites
joao pedro farias de araujoJoao Pedro Farias De Araujojoao pedro farias de araujoJoao Pedro Farias De Araujo
joao pedro montefeltro junqueira meirellesJoao Pedro Montefeltro Junqueira Meirellesjoao pedro montefeltro junqueira meirellesJoao Pedro Montefeltro Junqueira Meirelles
joão vitor menezes de magalhãesJoão Vitor Menezes De Magalhãesjoão vitor menezes de magalhãesJoão Vitor Menezes De Magalhães
Jonathan SuttonJonathan SuttonJonathan SuttonJonathan Sutton
Keiya NishioKeiya NishioKeiya NishioKeiya Nishio
Luiza Rodrigues SilveiraLuiza Rodrigues SilveiraLuiza Rodrigues SilveiraLuiza Rodrigues Silveira
Marcelo Cesario MiguelMarcelo Cesario MiguelMarcelo Cesario MiguelMarcelo Cesario Miguel
Paulo Wook KimPaulo Wook KimPaulo Wook KimPaulo Wook Kim
Rafael Alves de Mello AlmadaRafael Alves De Mello AlmadaRafael Alves de Mello AlmadaRafael Alves De Mello Almada
Rafael Evangelista MonteiroRafael Evangelista MonteiroRafael Evangelista MonteiroRafael Evangelista Monteiro
Raphael LahiryRaphael LahiryRaphael LahiryRaphael Lahiry
Rodrigo Guimarães CoelhoRodrigo Guimarães CoelhoRodrigo Guimarães CoelhoRodrigo Guimarães Coelho
diff --git a/impact/index.html b/impact/index.html index c09b233f..8a6800b1 100644 --- a/impact/index.html +++ b/impact/index.html @@ -17,7 +17,7 @@ - + diff --git a/index.html b/index.html index 2bf61815..7f7cad4c 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ - + diff --git a/lessons/01-distributed-workflow/index.html b/lessons/01-distributed-workflow/index.html index 837d1ce7..94fb2cb1 100644 --- a/lessons/01-distributed-workflow/index.html +++ b/lessons/01-distributed-workflow/index.html @@ -17,7 +17,7 @@ - + diff --git a/lessons/01-distributed-workflow/slides/index.html b/lessons/01-distributed-workflow/slides/index.html index 2c345489..f431e2a8 100644 --- a/lessons/01-distributed-workflow/slides/index.html +++ b/lessons/01-distributed-workflow/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/lessons/02-software-and-communities/index.html b/lessons/02-software-and-communities/index.html index f34b85b5..3687b15e 100644 --- a/lessons/02-software-and-communities/index.html +++ b/lessons/02-software-and-communities/index.html @@ -17,7 +17,7 @@ - + diff --git a/lessons/02-software-and-communities/slides/index.html b/lessons/02-software-and-communities/slides/index.html index abfd54a2..2284c704 100644 --- a/lessons/02-software-and-communities/slides/index.html +++ b/lessons/02-software-and-communities/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/lessons/03-software-documentation/index.html b/lessons/03-software-documentation/index.html index 7e882fb4..26a031f5 100644 --- a/lessons/03-software-documentation/index.html +++ b/lessons/03-software-documentation/index.html @@ -17,7 +17,7 @@ - + diff --git a/lessons/03-software-documentation/slides/index.html b/lessons/03-software-documentation/slides/index.html index 5dc0f6e9..0ee1ad20 100644 --- a/lessons/03-software-documentation/slides/index.html +++ b/lessons/03-software-documentation/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/lessons/04-professional-project/index.html b/lessons/04-professional-project/index.html index cb904d26..fb929860 100644 --- a/lessons/04-professional-project/index.html +++ b/lessons/04-professional-project/index.html @@ -17,7 +17,7 @@ - + diff --git a/lessons/04-professional-project/slides/index.html b/lessons/04-professional-project/slides/index.html index b374148e..4bf1e521 100644 --- a/lessons/04-professional-project/slides/index.html +++ b/lessons/04-professional-project/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/lessons/05-python-packaging/index.html b/lessons/05-python-packaging/index.html index c2886572..5fa1a4ce 100644 --- a/lessons/05-python-packaging/index.html +++ b/lessons/05-python-packaging/index.html @@ -17,7 +17,7 @@ - + diff --git a/lessons/06-localization-translation/index.html b/lessons/06-localization-translation/index.html index a82d1fc1..4bdc6de7 100644 --- a/lessons/06-localization-translation/index.html +++ b/lessons/06-localization-translation/index.html @@ -17,7 +17,7 @@ - + @@ -762,7 +762,10 @@

Traduzindo mensagens

No arquivo principal de nossa aplicação podemos "instalar" o framework de tradução e marcar todas nossas strings a serem traduzidas com a função _(). A instalação é feita pelo seguinte trecho de código.

import gettext
-gettext.install('cli', localedir='locale') 
+gettext.bindtextdomain('cli', 'locale')
+gettext.textdomain('cli')
+_ = gettext.gettext
+
 # cli é o nome do arquivo em que guardamos nossas traduções
 # localedir é o caminho onde estão armazenadas as traduções. Pode ser um caminho relativo. 
 
diff --git a/lessons/06-localization-translation/slides/index.html b/lessons/06-localization-translation/slides/index.html index a39eae5b..3e9dbbf6 100644 --- a/lessons/06-localization-translation/slides/index.html +++ b/lessons/06-localization-translation/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/lessons/07-code-quality/index.html b/lessons/07-code-quality/index.html index aa5f3f7a..d8c09cd5 100644 --- a/lessons/07-code-quality/index.html +++ b/lessons/07-code-quality/index.html @@ -17,7 +17,7 @@ - + diff --git a/lessons/08-automated-testing/index.html b/lessons/08-automated-testing/index.html index 672d1750..5bb8dd54 100644 --- a/lessons/08-automated-testing/index.html +++ b/lessons/08-automated-testing/index.html @@ -17,7 +17,7 @@ - + diff --git a/lessons/08-automated-testing/slides/index.html b/lessons/08-automated-testing/slides/index.html index 6ea84e27..5a2b24bb 100644 --- a/lessons/08-automated-testing/slides/index.html +++ b/lessons/08-automated-testing/slides/index.html @@ -13,7 +13,7 @@ - + diff --git a/lessons/09-releases/index.html b/lessons/09-releases/index.html index 6ad56b19..5959bbbe 100644 --- a/lessons/09-releases/index.html +++ b/lessons/09-releases/index.html @@ -17,7 +17,7 @@ - + diff --git a/plugins/notification/index.html b/plugins/notification/index.html index da07651d..bc4c5f64 100644 --- a/plugins/notification/index.html +++ b/plugins/notification/index.html @@ -13,7 +13,7 @@ - + diff --git a/search/search_index.json b/search/search_index.json index 3c71eedd..55492f89 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Open Development 2023/2","text":"

Welcome to the Open Development page for 2023/2. On this site, you will find all the course lessons and syllabus. The learning objectives covered are:

  1. The student is capable of understanding a software project and fixing a bug or implementing an improvement.
  2. The student is capable of making modifications that meet the technical and non-technical requirements of a software project.
  3. The student is capable of interacting with a (remote) development team.

This course is gamified and entirely done using a git repository. Each student creates a user following the instructions in Lesson 01 and submits a Pull Request to be included in the repository. Each completed activity is delivered via a PR in the course repository and serves as evidence for the learning objectives mentioned above.

The course revolves around four types of activities:

  • Tutorial: (Guided) Preparatory activities in the classroom.
  • Code: Code contributions to external projects.
  • Community: Non-technical contributions that can benefit users and developers of a project, such as documentation and translations.
  • Impact: Significant results achieved through the student's participation in open projects.

More information about all possible activities can be found on the Assessment page.

Current and past instructors

  • Igor Montagner
  • Fabr\u00edcio Barth
"},{"location":"agenda_apresentacoes/","title":"Apresenta\u00e7\u00f5es sobre cultura livre","text":"

Este documento descreve a rubrica para avalia\u00e7\u00e3o do trabalho e a agenda das apresenta\u00e7\u00f5es.

"},{"location":"agenda_apresentacoes/#rubrica","title":"Rubrica","text":"Conceito Descri\u00e7\u00e3o A Apresenta\u00e7\u00e3o realizada dentro do tempo estipulado. O tema foi organizado de forma excelente, com boa sequ\u00eancia l\u00f3gica das ideias. O trabalho foi apresentado de forma clara e concisa, usando so slides de forma coesa com a fala. Tem boa postura e seguran\u00e7a, estabelece contato visual com os participantes durante a apresenta\u00e7\u00e3o. Incorporou elementos visuais de qualidade no material: figuras, tabelas e gr\u00e1ficos s\u00e3o claros e cont\u00eam informa\u00e7\u00f5es suficientes. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros). B O tempo de apresenta\u00e7\u00e3o foi de mais ou menos 5 min do estabelecido. O tema foi parcialmente bem organizado, com sequ\u00eancia de apresenta\u00e7\u00e3o razo\u00e1vel. Exp\u00f5e o trabalho corretamente, mas n\u00e3o usa os slides de forma coesa com a fala. Postura e seguran\u00e7a razo\u00e1veis. Os elementos visuais s\u00e3o de baixa qualidade: figuras, tabelas e gr\u00e1ficos n\u00e3o s\u00e3o totalmente claros e n\u00e3o cont\u00eam informa\u00e7\u00f5es suficientes para compreens\u00e3o. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros). C Tempo de apresenta\u00e7\u00e3o foi de mais ou menos 10 min do estabelecido. A organiza\u00e7\u00e3o da apresenta\u00e7\u00e3o \u00e9 confusa, o que prejudica o acompanhamento e compreens\u00e3o das ideias. Comunica\u00e7\u00e3o deficiente, com dificuldade de expor ideias. N\u00e3o usa adequadamente os slides. N\u00e3o tem boa postura e seguran\u00e7a durante a apresenta\u00e7\u00e3o. Os recursos visuas prejudicam a apresenta\u00e7\u00e3o. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros)."},{"location":"agenda_apresentacoes/#agenda","title":"Agenda","text":"Data e hor\u00e1rio Tema 17/11 (9:45-10:45) GitHub Copilot \u00e9 \u00e9tico? [Eiki Yamashiro e Marcelo Miguel] 17/11 (10:45-11:45) A rela\u00e7\u00e3o entre Software as a Service (SaaS) e projetos de C\u00f3digo Aberto [Caroline Chaim, Felipe Lemos, Jo\u00e3o Farias Araujo] 22/11 (9:45-10:45) Telemetria \u00e9 \"\u00e9tico\"? [Guilherme Lunetta, Rafael Monteiro e Jo\u00e3o Magalh\u00e3es] 22/11 (10:45-11:45) Regulamenta\u00e7\u00f5es futuras na Europa sobre responsabilidade legal dos criadores de IAs [Luiza Silvera, Guilherme Batista e Gabriel Zanetti] 24/11 N\u00e3o teremos aula. Joga do Brasil na Copa do Mundo 29/11 (9:45-10:45) Regulamenta\u00e7\u00f5es recentes na Europa sobre durabilidade de smartphones. [Keiya Nishio e Bruno Freitas] 29/11 (10:45-11:45) Por que Open Source \u00e9 cr\u00edtico para criptomoedas? [Paulo Kim, Raphael Lahiry e Rodrigo Coelho] 01/12 (9:45-10:45) The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022? [Jo\u00e3o Pedro Meirelles, Gustavo Molina e Rafael Almada] 01/12 (10:45-11:45) Mantainer burnout [Cesar Ades e Jonathan Sutton]"},{"location":"assessment/","title":"Assessment","text":"

As you can see in Lesson 01, this course allows for a great deal of freedom, and it is organized through gamification. Each participant creates a profile in the repository and earns skills (and XP) by completing the available activities. All submissions are made via PR to the course repository.

The final grade is a combination of the total amount of XP received for completing tasks, the amount of XP obtained from group members, and some barrier criteria. The table below summarizes these conditions:

Grade Score Extra Criteria I ---- Did not complete any tutorial activities D ---- Completed all lesson activities but did not reach a C grade C 45XP
  • 1 x Code Contribution +
  • Accepted Translation! or Documentation Contribution
  • B 90XP
  • Accepted Code Contribution
  • A 150XP A+ 200XP

    Throughout the semester, the scores in the table above may be revised downward, but never upward.

    "},{"location":"assessment/#available-skills","title":"Available Skills","text":"

    Each skill translates into evidence for one of the learning objectives of the course. The collection of all the skills completed during the semester indicates the proficiency of the students in each of the objectives.

    "},{"location":"assessment/#tutorial","title":"Tutorial","text":"

    In this initial part, preparatory activities are carried out to support the development of skills in Code and Community skills.

    id Name Description XP Date 1 First Steps Added to the discipline's repository. 2 21/08 2 Exploring a Project's Environment Researched the history and community of people and services around a project. 3 21/08 3 Undocumented Project Received an undocumented system and got it up and running. 5 28/08 4 Professional Project Refactored poorly written code and created a web page for it. 5 01/09 5 Tested and Approved Created unit tests and interface tests for the challenge server. 5 13/09 6 Python Package Created a Python package installable via pip. 3 11/09 7 Dockerfile Created automated deployment for a Python web system. 3 11/09 8 Basic Translation Used translation tools to translate and localize a small command-line program. 2 11/09 10 FLOSS Research Delivered a long presentation on a recent and relevant topic related to free and open-source software. 5 04/12 11 Better code Addressed linting problems in a poorly written project 5 15/09"},{"location":"assessment/#code","title":"Code","text":"

    Any activity that results in a code contribution to open-source software projects is accepted in the course.

    id Name Description XP Date 21 Code Contribution Submitted a pull request fixing a bug. 7 04/12 22 Contribution Accepted! A non-trivial pull request was accepted by an external project. 13 04/12 23 Simple Contribution Accepted! A simple pull request (with trivial changes or small code refactorings) was accepted by an external project. 3 04/12 24 Bug Report Reported a bug in a repository, and another user was able to reproduce it. 5 04/12 25 Feature Request Made a request for a new feature in a software. 2 04/12 26 INSPER Project Made additional contributions to an INSPER educational project. 5 04/12"},{"location":"assessment/#community","title":"Community","text":"

    A software project is also defined by the interactions of all the people around it: users, developers, and translators. This category includes non-technical contributions that benefit these individuals.

    id Name Description XP Date 40 Indirect Issue Conversations in an issue or pull request led other users to open issues reporting new bugs/improvements. 3 04/12 41 Beta Tester When reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue. 3 04/12 42 Translation Accepted! Made a translation that was accepted in an open-source software. 5 04/12 43 New Languages Added support for translations in a previously non-translatable software. 10 04/12 44 Reviewer Reviewed minor errors in the documentation of a project, and your modifications were accepted. 2 04/12 45 Documentation Contribution Closed an issue marked as docs. 7 04/12 46 Project Pitch Delivered a project pitch. 0 04/12 47 Pitch Accepted! Contributed to a project presented in class. 5 04/12 48 Accepted Suggestion! Another student contributed to the project you pitched. 3 04/12 49 PR Replay Presented (in 15 minutes) the process of resolving a bug in class. 5 04/12"},{"location":"assessment/#impact","title":"Impact","text":"

    This category encompasses skills that represent the impact generated by the activities performed within the context of the course, both on a software project and the community around it. This includes:

    1. Presentations given by students
    2. A large number of accepted contributions to a single project
    3. Mentions of work done by the student on the project's social media
    4. Releases containing commits made within the course's context
    id Name Description XP Date 60 Speaker Gave a talk about libraries or open-source software. 20 04/12 61 Helpdesk Had an accepted answer on sites like StackOverflow or email lists. 4 04/12 62 Published Contribution One of your contributions was included in a release. 10 04/12 63 VIP Guest After making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill. 5 04/12 64 3 Submitted PRs Submitted 3 pull requests to the same project. 10 04/12 65 3 Accepted PRs 3 pull requests you submitted to a project were accepted. 30 04/12 66 Shoutout Something you did was mentioned by the project on social media or through an official channel. 10 04/12 77 Hacktoberfest Participated in Hacktoberfest by submitting 3 pull requests to external projects. 20 04/12"},{"location":"impact-2019/","title":"Edi\u00e7\u00e3o 2019/2","text":"

    In the 2019/2 edition, students worked on 19 different projects, contributing with 46 code modifications, of which 14 were incorporated into the original projects. In addition to these projects, students also worked on the Servidor de Desafios, a software developed by Insper professors to be used in the Software Design course. A total of 12 accepted modifications have already been used during the semester.

    We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 10 events.

    "},{"location":"impact-2019/#alunos","title":"Alunos","text":"Alessandra Bl\u00fccher Alexandre Edington Antonio Jo\u00e3o Andraues Junior Elisa Mochetti Malzoni Gabriel Lopes Monteiro Gabriel Do Vale Rios Giulia Braga Passarelli Guilherme Leite Hugo Ebert Carl Igor Montagner Leonardo Pereira Medeiros Lucas Scarlato Astur Pedro Cunial Campos Samuel Vinicius Granato De Barros Vinicius Gomes De Lima Vitor Liu"},{"location":"impact-2019/#contribuicoes-de-codigo","title":"Contribui\u00e7\u00f5es de c\u00f3digo","text":"Servidor de desafios
    • https://github.com/Insper/servidor-de-desafios/pull/28 (Elisa Mochetti Malzoni)
    • https://github.com/Insper/servidor-de-desafios/pull/20 (Pedro Cunial Campos)
    • https://github.com/Insper/servidor-de-desafios/issues/13 (Leonardo Pereira Medeiros)
    • https://github.com/Insper/servidor-de-desafios/pull/26 (Samuel Vinicius Granato De Barros)
    • https://github.com/Insper/servidor-de-desafios/pull/30 (Guilherme Leite)
    • https://github.com/Insper/servidor-de-desafios/pull/27 (Alessandra Bl\u00fccher)
    • (Lucas Scarlato Astur)
    • https://github.com/Insper/LogCompTester/issues/2 (Lucas Scarlato Astur)
    • https://github.com/Insper/servidor-de-desafios/pull/29 (Vitor Liu)
    • https://github.com/Insper/servidor-de-desafios/pull/23 (Alexandre Edington)
    • https://github.com/Insper/servidor-de-desafios/pull/32 (Giulia Braga Passarelli)
    • https://github.com/Insper/servidor-de-desafios/pull/38 (Gabriel Do Vale Rios)
    Pandas Pull Requests
    • - https://github.com/pandas-dev/pandas/pull/28183
    • - https://github.com/pandas-dev/pandas/pull/29193
    • - https://github.com/pandas-dev/pandas/pull/29191
    • - https://github.com/pandas-dev/pandas/pull/29087
    • - https://github.com/pandas-dev/pandas/pull/27934
    • - https://github.com/pandas-dev/pandas/pull/28091
    • - https://github.com/pandas-dev/pandas/pull/28032
    • - https://github.com/pandas-dev/pandas/pull/29201
    • - https://github.com/pandas-dev/pandas/pull/28659
    • - https://github.com/pandas-dev/pandas/pull/28265
    • - https://github.com/pandas-dev/pandas/pull/28632
    • - https://github.com/panddev/pandas/pull/28296
    • - https://github.com/lucassa3/pandas/pull/1
    • - https://github.com/pandas-dev/pandas/pull/29701
    • - https://github.com/pandas-dev/pandas/pull/27933
    • - https://github.com/pandas-dev/pandas/pull/29266
    • - https://github.com/pandas-dev/pandas/pull/28696
    • - https://github.com/pandas-dev/pandas/pull/28172
    Issues
    • - https://github.com/pandas-dev/pandas/issues/28218
    Multi-Deployer Issues
    • - https://github.com/HenriquePereiraRosa/multi-deployer/issues/5
    • - https://github.com/HenriquePereiraRosa/multi-deployer/issues/9
    • - https://github.com/HenriquePereiraRosa/multi-deployer/issues/10
    • - https://github.com/HenriquePereiraRosa/multi-deployer/issues/21
    Pull Requests
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/6
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/12
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/11
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/7
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/22
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/23
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/24
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/26
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/15
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/28
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/13
    Python-Ds Pull Requests
    • - https://github.com/prabhupant/python-ds/pull/250
    • - https://github.com/prabhupant/python-ds/pull/247
    Issues
    • - https://github.com/prabhupant/python-ds/issues/248
    Backtesting Pull Requests
    • - https://github.com/raulikeda/Backtesting/pull/23
    • - https://github.com/raulikeda/Backtesting/pull/22
    Loopdocs Pull Requests
    • - https://github.com/LoopKit/loopdocs/pull/111
    Osu Issues
    • - https://github.com/ppy/osu/issues/6571
    Pull Requests
    • - https://github.com/ppy/osu/issues/2510
    Lector Pull Requests
    • - https://github.com/BasioMeusPuga/Lector/pull/113
    Spacemacs Pull Requests
    • - https://github.com/syl20bnr/spacemacs/pull/12674
    Enzyme Pull Requests
    • - https://github.com/airbnb/enzyme/pull/2271
    Sherlock Pull Requests
    • - https://github.com/sherlock-project/sherlock/pull/372
    Twitter-Scraper Pull Requests
    • - https://github.com/bisguzar/twitter-scraper/pull/80
    Discord-Bot Pull Requests
    • - https://github.com/RPCS3/discord-bot/pull/435
    Scikit-Image Pull Requests
    • - https://github.com/scikit-image/scikit-image/pull/4126
    Issues
    • - https://github.com/scikit-image/scikit-image/issues/4125
    Python-Scripts Pull Requests
    • - https://github.com/ankitdobhal/Python-Scripts/pull/64
    Aos-Reminders Pull Requests
    • - https://github.com/daviseford/aos-reminders/pull/219
    Calcurse Pull Requests
    • - https://github.com/lfos/calcurse/pull/229
    Issues
    • - https://github.com/lfos/calcurse/issues/228
    Scikit-Learn Pull Requests
    • - https://github.com/scikit-learn/scikit-learn/pull/15327
    Nightguard Issues
    • - https://github.com/nightscout/nightguard/issues/61
    Dev-Aberto Issues
    • - https://github.com/Insper/dev-aberto/issues/67
    "},{"location":"impact-2019/#eventos","title":"Eventos","text":""},{"location":"impact-2020/","title":"2020/1","text":"

    In the 2020/1 edition, students worked on 15 different projects, contributing with 27 code modifications, of which 17 were incorporated into the original projects. In addition to these projects, students also worked on the Challenge Server, a software developed by Insper professors to be used in the Software Design course. A total of 7 accepted modifications have already been used during the semester.

    "},{"location":"impact-2020/#alunos","title":"Alunos","text":"Isabella Rocha De Oliveira Bruna Mayumi Kimura Bruno Arthur Cesconetto Eli Jose Abi Ghosn Eric Fernando Otofuji Abrantes Francisco Ciol Rodrigues Aveiro Gabriel Fonseca Moreira Gabriel Valente Francato Hugo Silva Pereira Mendes Igor Dos Santos Montagner Lucca Delchiaro Costabile Martim Ferreira Jose Pedro De La Pe\u00f1a Ferreira Bueno Fonseca Pedro Oliveira De Azambuja Raphael Costa Sabrina Sampaio Simao Victor Laperuta De Moura"},{"location":"impact-2020/#contribuicoes","title":"Contribui\u00e7\u00f5es Melhorias de c\u00f3digo enviadas","text":"Servidor de desafios
    • https://github.com/Insper/servidor-de-desafios/pull/75 (Pedro De La Pe\u00f1a Ferreira Bueno Fonseca)
    • https://github.com/Insper/servidor-de-desafios/pull/72 (Gabriel Valente Francato)
    • https://github.com/Insper/servidor-de-desafios/pull/73 (Gabriel Fonseca Moreira)
    • https://github.com/Insper/servidor-de-desafios/pull/83 (Francisco Ciol Rodrigues Aveiro)
    • https://github.com/Insper/servidor-de-desafios/pull/66 (Pedro Oliveira De Azambuja)
    • https://github.com/Insper/servidor-de-desafios/pull/82 (Martim Ferreira Jose)
    • https://github.com/Insper/servidor-de-desafios/pull/67 (Sabrina Sampaio Simao)
    Pygame/Pygame Pull Requests
    • - https://github.com/pygame/pygame/pull/1909
    • - https://github.com/pygame/pygame/pull/1960
    • - https://github.com/pygame/pygame/pull/1911
    • - https://github.com/pygame/pygame/pull/1923
    • - https://github.com/pygame/pygame/pull/1912
    Pandas-Dev/Pandas Pull Requests
    • - https://github.com/pandas-dev/pandas/pull/32451
    • - https://github.com/pandas-dev/pandas/pull/34267
    • - https://github.com/pandas-dev/pandas/pull/34377
    • - https://github.com/pandas-dev/pandas/pull/34450
    • - https://github.com/pandas-dev/pandas/pull/34812
    Elementary/Code Pull Requests
    • - https://github.com/elementary/code/issues/818
    • - https://github.com/elementary/code/pull/832
    • - https://github.com/elementary/code/pull/833
    Dgilland/Pydash Pull Requests
    • - https://github.com/dgilland/pydash/pull/137
    • - https://github.com/dgilland/pydash/pull/139
    • - https://github.com/dgilland/pydash/pull/138
    Insper/Projeto-Campo-Favela Pull Requests
    • - https://github.com/Insper/projeto-campo-favela/pull/27
    • - https://github.com/Insper/projeto-campo-favela/pull/24
    Hospitalrun/Hospitalrun-Frontend Pull Requests
    • - https://github.com/HospitalRun/hospitalrun-frontend/pull/1983
    • - https://github.com/HospitalRun/hospitalrun-frontend/pull/1977
    Issues
    • - https://github.com/HospitalRun/hospitalrun-frontend/issues/1940
    Bokeh/Bokeh Pull Requests
    • - https://github.com/bokeh/bokeh/pull/10173
    Elementary/Terminal Pull Requests
    • - https://github.com/elementary/terminal/pull/486
    Matplotlib/Matplotlib Pull Requests
    • - https://github.com/matplotlib/matplotlib/pull/16985
    Sorxrob/Covid3D Issues
    • - https://github.com/sorxrob/covid3d/issues/13
    Pull Requests
    • - https://github.com/sorxrob/covid3d/pull/8
    Trekhleb/Covid-19 Pull Requests
    • - https://github.com/trekhleb/covid-19/pull/38
    Elementary/Files Pull Requests
    • - https://github.com/elementary/files/pull/1242
    Antiboomz/Btroblox Pull Requests
    • - https://github.com/AntiBoomz/BTRoblox/pull/24
    Elementary/Appcenter Issues
    • - https://github.com/elementary/appcenter/issues/1321
    Darkreader/Darkreader Issues
    • - https://github.com/darkreader/darkreader/issues/2858
    "},{"location":"impact-2021/","title":"2021/2","text":"

    One of the main objectives of Open Development is to actively participate in existing software projects. In the 2021/2 edition, students worked on 30 different projects, contributing with 56 code modifications, of which 37 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.

    We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.

    Melhorias de c\u00f3digo enviadas Uutils/Coreutils Pull Requests
    • - https://github.com/uutils/coreutils/pull/2693
    • - https://github.com/uutils/coreutils/pull/2703
    • - https://github.com/uutils/coreutils/pull/2704
    • - https://github.com/uutils/coreutils/pull/2726
    • - https://github.com/uutils/coreutils/pull/2727
    • - https://github.com/uutils/coreutils/pull/2728
    • - https://github.com/uutils/coreutils/pull/2731
    • - https://github.com/uutils/coreutils/pull/2735
    • - https://github.com/uutils/coreutils/pull/2742
    • - https://github.com/uutils/coreutils/pull/2743
    • - https://github.com/uutils/coreutils/pull/2745
    • - https://github.com/uutils/coreutils/pull/2749
    Pandas-Dev/Pandas Pull Requests
    • - https://github.com/pandas-dev/pandas/pull/44806
    • - https://github.com/pandas-dev/pandas/pull/44033
    • - https://github.com/pandas-dev/pandas/pull/44927
    • - https://github.com/pandas-dev/pandas/pull/43791
    • - https://github.com/pandas-dev/pandas/pull/44200
    Robertodoering/Harpy Pull Requests
    • - https://github.com/robertodoering/harpy/pull/471
    • - https://github.com/robertodoering/harpy/pull/473
    • - https://github.com/robertodoering/harpy/pull/474
    • - https://github.com/robertodoering/harpy/pull/483
    Elementary/Code Issues
    • - https://github.com/elementary/code/issues/1096
    Pull Requests
    • - https://github.com/elementary/code/pull/1097
    • - https://github.com/elementary/code/pull/1100
    • - https://github.com/elementary/code/pull/1101
    Outros Pull Requests
    • https://github.com/readthedocs/readthedocs.org/pull/8591
    • https://github.com/plotly/plotly.py/pull/3508
    Backstage/Backstage Pull Requests
    • - https://github.com/backstage/backstage/pull/7594
    • - https://github.com/backstage/backstage/pull/8156
    Nuta/Nsh Pull Requests
    • - https://github.com/nuta/nsh/pull/32
    • - https://github.com/nuta/nsh/pull/37
    Iamashutosh99/Basic-Cpp-Course Pull Requests
    • - https://github.com/iamashutosh99/basic-cpp-course/pull/23
    • - https://github.com/iamashutosh99/basic-cpp-course/pull/22
    Alteryx/Featuretools Pull Requests
    • - https://github.com/alteryx/featuretools/pull/1725
    • - https://github.com/alteryx/featuretools/pull/1733
    Centerofci/Mathesar Pull Requests
    • - https://github.com/centerofci/mathesar/pull/799
    • - https://github.com/centerofci/mathesar/pull/812
    Domokane/Financepy Pull Requests
    • - https://github.com/domokane/FinancePy/pull/121
    • - https://github.com/domokane/FinancePy/pull/119
    Issues
    • - https://github.com/domokane/FinancePy/issues/115
    Tsvillain/Wallbay Pull Requests
    • - https://github.com/tsvillain/Wallbay/pull/8
    • - https://github.com/tsvillain/Wallbay/pull/10
    Issues
    • - https://github.com/tsvillain/Wallbay/issues/7
    • - https://github.com/tsvillain/Wallbay/issues/9
    Numpy/Numpy Pull Requests
    • - https://github.com/numpy/numpy/pull/20389
    Edbmods/Edbpreparecarefully Pull Requests
    • - https://github.com/edbmods/EdBPrepareCarefully/pull/318
    Readthedocs/Common Pull Requests
    • - https://github.com/readthedocs/common/pull/98
    Simple-Icons/Simple-Icons Pull Requests
    • - https://github.com/simple-icons/simple-icons/pull/6825
    Epicmaxco/Vuestic-Admin Pull Requests
    • - https://github.com/epicmaxco/vuestic-admin/pull/845
    Epicmaxco/Vuestic-Ui Pull Requests
    • - https://github.com/epicmaxco/vuestic-ui/pull/1232
    Zulip/Zulip Pull Requests
    • - https://github.com/zulip/zulip/pull/19969
    Pyroscope-Io/Pyroscope Pull Requests
    • - https://github.com/pyroscope-io/pyroscope/pull/492
    Matrix-Org/Matrix-React-Sdk Pull Requests
    • - https://github.com/matrix-org/matrix-react-sdk/pull/6918
    Bootandy/Dust Pull Requests
    • - https://github.com/bootandy/dust/pull/198
    Streamlit/Streamlit Pull Requests
    • - https://github.com/streamlit/streamlit/pull/4051
    Godotengine/Godot Pull Requests
    • - https://github.com/godotengine/godot/pull/55801
    Vector-Im/Element-Desktop Pull Requests
    • - https://github.com/vector-im/element-desktop/pull/274
    Objectbox/Objectbox-Dart Pull Requests
    • - https://github.com/objectbox/objectbox-dart/pull/327
    Tiangolo/Fastapi Pull Requests
    • - https://github.com/tiangolo/fastapi/pull/4042
    Serverless/Serverless Pull Requests
    • - https://github.com/serverless/serverless/pull/10119
    Workalendar/Workalendar Issues
    • - https://github.com/workalendar/workalendar/issues/689
    Twopirllc/Pandas-Ta Issues
    • - https://github.com/twopirllc/pandas-ta/issues/423
    Eventos"},{"location":"impact-2022/","title":"2022/2","text":"

    One of the main objectives of Open Development is to actively participate in existing software projects. In the 2022/2 edition, students worked on 15 different projects, contributing with 20 code modifications, of which 4 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.

    We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.

    Alunos participantes Bruno Freitas Do Nascimento Rodrigues Caroline Chaim De Lima Carneiro Cesar Ezra Ades Eiki Luis Yamashiro Fabricio Barth Felipe Lemos Gabriel Zanetti Guilherme Carneiro Lunetta Guilherme Teixeira Batista Gustavo Molina Freneda Benites Joao Pedro Farias De Araujo Joao Pedro Montefeltro Junqueira Meirelles Jo\u00e3o Vitor Menezes De Magalh\u00e3es Jonathan Sutton Keiya Nishio Luiza Rodrigues Silveira Marcelo Cesario Miguel Paulo Wook Kim Rafael Alves De Mello Almada Rafael Evangelista Monteiro Raphael Lahiry Rodrigo Guimar\u00e3es Coelho Melhorias de c\u00f3digo enviadas Geekquad/Algobook Pull Requests
    • - https://github.com/geekquad/AlgoBook/pull/563
    • - https://github.com/geekquad/AlgoBook/pull/561
    • - https://github.com/geekquad/AlgoBook/pull/562
    • - https://github.com/geekquad/AlgoBook/pull/564
    Data-8/Datascience Pull Requests
    • - https://github.com/data-8/datascience/pull/563
    • - https://github.com/data-8/datascience/pull/564
    • - https://github.com/data-8/datascience/pull/562
    Adafruit/Adafruit_Circuitpython_Requests Pull Requests
    • - https://github.com/adafruit/Adafruit_CircuitPython_Requests/pull/117
    Ros-Planning/Moveit2 Pull Requests
    • - https://github.com/ros-planning/moveit2/pull/1693
    Grafana/Oncall Pull Requests
    • - https://github.com/grafana/oncall/pull/790
    Neetcode-Gh/Leetcode Pull Requests
    • - https://github.com/neetcode-gh/leetcode/pull/1524
    Outros Pull Requests
    • https://github.com/jfilter/clean-text
    Vael1/-Awesome-Python-Scripts Pull Requests
    • - https://github.com/vael1/-Awesome-Python-Scripts/pull/27
    Civiwiki/Openciviwiki Pull Requests
    • - https://github.com/CiviWiki/OpenCiviWiki/pull/1469
    Aylton-Almeida/Rabbitmq-Pika-Flask Pull Requests
    • - https://github.com/aylton-almeida/rabbitmq-pika-flask/pull/47
    Nidhaloff/Deep-Translator Pull Requests
    • - https://github.com/nidhaloff/deep-translator/pull/166
    Kra53N/Getgit Pull Requests
    • - https://github.com/kra53n/getgit/pull/16
    Commons-App/Apps-Android-Commons Pull Requests
    • - https://github.com/commons-app/apps-android-commons/issues/5100
    Tbillington/Kondo Pull Requests
    • - https://github.com/tbillington/kondo/pull/66
    Matplotlib/Matplotlib Pull Requests
    • - https://github.com/matplotlib/matplotlib/pull/24576
    Eventos"},{"location":"impact/","title":"2023/2","text":"

    One of the main objectives of Open Development is to actively participate in existing software projects. In the 2023/2 edition, students worked on 0 different projects, contributing with 0 code modifications, of which 0 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.

    We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.

    Code contributions Events"},{"location":"students/","title":"Students","text":"

    The following students are enrolled in this semester.

    Antonio Fonseca Caio Emmanuel Soares Rocha Cicero Tiago Carneiro Valentim Henrique Sim\u00f5es Alberti Igor Montagner Joao Pedro Gianfaldoni De Andrade Jor\u00e1s Cust\u00f3dio Campos De Oliveira Nat\u00e1lia Queiroz Menezes Carreras Rafael Libertini"},{"location":"syllabus/","title":"Syllabus","text":""},{"location":"syllabus/#assessment","title":"Assessment","text":"

    This course has a gamified assessment system. At any time, you can check your grade by running:

    $ ./dev-aberto.py compute-grade your-blackboard-login

    Biweekly reports will be sent with a summary of what has been delivered and which criteria have been met, as well as the student's current grade. There is no possibility of losing points. Although the report is for informational purposes only, if the student is not failing due to absences, they should receive the grade indicated in the biweekly reports.

    Attention

    The complete list of rules is available on the Course Rules page and is the official reference for grade calculation. If there is a discrepancy between the report and the rules page, consider the report to be buggy.

    "},{"location":"syllabus/#schedule","title":"Schedule","text":"
    • MON 07:30 - 09:30
    • WED 07:30 - 09:30
    • Office Hours: on demand
    "},{"location":"syllabus/#lesson-plan","title":"Lesson Plan","text":"

    The following activities are planned. The program is subject to changes and adaptations as the course progresses.

    Date Question/Problem/Challenge Content 14/08 Introduction to the course and its challenges Workflow with distributed version control: forks, patches, pull requests, and local repositories. Technical and non-technical aspects surrounding software: infrastructure, support, marketing, funding. Reference: FOGEL Ch. 3; Additional reading: TAPSCOTT & WILLIAMS. 16/08 First code contribution Workflow with distributed version control: ammend, rebase, revert. 21/08 Project documentation and what to do when it doesn't exist Types of documentation (user, developer). Source code documentation systems: doxygen, Javadoc, pydoc, sphinx; Reference: FOGEL Ch. 3 (Wikis, Website) 23/08 Studio class for \"Professional Project\" activity Studio class for \"Professional Project\" activity 28/08 Ensuring others can work on the project: API documentation code quality 30/08 Software distribution and versioning Software distribution tools. Types of distribution. Versioning schemes. Reference: FOGEL Ch. 7 04/09 How to make software work in multiple countries? Localization and internationalization. Gettext tool for translations and .po format. 06/09 Software testing Types of software testing: unit, integration, and interface. Testing tools: pytest, selenium. 11/09 Studio class for \"Software Testing\" activity Studio class for \"Software Testing\" activity 13/09 Software licenses Copyrights in Brazil, patents, and software licenses; Reference: LAURENT Ch. 1 and 5, STALLMAN Ch. 6 18/09 Introduction to contributions in open projects - Activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 20/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 25/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 27/09 Working in software communities Assessment metrics for the second part of the course; Communication and teamwork. Reference: RAYMOND Ch. 4 02/10 Course project Studio class for project development 04/10 Course project Studio class for project development 09/10 EXAM WEEK EXAM WEEK 11/10 EXAM WEEK EXAM WEEK 16/10 Course project Studio class for project development 18/10 Course project Studio class for project development 23/10 Course project Studio class for project development 25/10 Course project Studio class for project development 30/10 Course project Studio class for project development 01/11 Course project Studio class for project development 06/11 Course project Studio class for project development 08/11 Course project Studio class for project development 13/11 Course project Studio class for project development 15/11 PUBLIC HOLIDAY PUBLIC HOLIDAY 20/11 Topics on free culture and software communities nan 22/11 Topics on free culture and software communities nan 27/11 Topics on free culture and software communities nan 29/11 Topics on free culture and software communities nan 04/12 EXAM WEEK EXAM WEEK 06/12 EXAM WEEK EXAM WEEK"},{"location":"_snippets/alunos/","title":"Alunos","text":"Antonio Fonseca Caio Emmanuel Soares Rocha Cicero Tiago Carneiro Valentim Henrique Sim\u00f5es Alberti Igor Montagner Joao Pedro Gianfaldoni De Andrade Jor\u00e1s Cust\u00f3dio Campos De Oliveira Nat\u00e1lia Queiroz Menezes Carreras Rafael Libertini"},{"location":"_snippets/plano-de-aulas/","title":"Plano de aulas","text":"Date Question/Problem/Challenge Content 14/08 Introduction to the course and its challenges Workflow with distributed version control: forks, patches, pull requests, and local repositories. Technical and non-technical aspects surrounding software: infrastructure, support, marketing, funding. Reference: FOGEL Ch. 3; Additional reading: TAPSCOTT & WILLIAMS. 16/08 First code contribution Workflow with distributed version control: ammend, rebase, revert. 21/08 Project documentation and what to do when it doesn't exist Types of documentation (user, developer). Source code documentation systems: doxygen, Javadoc, pydoc, sphinx; Reference: FOGEL Ch. 3 (Wikis, Website) 23/08 Studio class for \"Professional Project\" activity Studio class for \"Professional Project\" activity 28/08 Ensuring others can work on the project: API documentation code quality 30/08 Software distribution and versioning Software distribution tools. Types of distribution. Versioning schemes. Reference: FOGEL Ch. 7 04/09 How to make software work in multiple countries? Localization and internationalization. Gettext tool for translations and .po format. 06/09 Software testing Types of software testing: unit, integration, and interface. Testing tools: pytest, selenium. 11/09 Studio class for \"Software Testing\" activity Studio class for \"Software Testing\" activity 13/09 Software licenses Copyrights in Brazil, patents, and software licenses; Reference: LAURENT Ch. 1 and 5, STALLMAN Ch. 6 18/09 Introduction to contributions in open projects - Activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 20/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 25/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 27/09 Working in software communities Assessment metrics for the second part of the course; Communication and teamwork. Reference: RAYMOND Ch. 4 02/10 Course project Studio class for project development 04/10 Course project Studio class for project development 09/10 EXAM WEEK EXAM WEEK 11/10 EXAM WEEK EXAM WEEK 16/10 Course project Studio class for project development 18/10 Course project Studio class for project development 23/10 Course project Studio class for project development 25/10 Course project Studio class for project development 30/10 Course project Studio class for project development 01/11 Course project Studio class for project development 06/11 Course project Studio class for project development 08/11 Course project Studio class for project development 13/11 Course project Studio class for project development 15/11 PUBLIC HOLIDAY PUBLIC HOLIDAY 20/11 Topics on free culture and software communities nan 22/11 Topics on free culture and software communities nan 27/11 Topics on free culture and software communities nan 29/11 Topics on free culture and software communities nan 04/12 EXAM WEEK EXAM WEEK 06/12 EXAM WEEK EXAM WEEK"},{"location":"_snippets/skills-code/","title":"Skills code","text":"id Name Description XP Date 21 Code Contribution Submitted a pull request fixing a bug. 7 04/12 22 Contribution Accepted! A non-trivial pull request was accepted by an external project. 13 04/12 23 Simple Contribution Accepted! A simple pull request (with trivial changes or small code refactorings) was accepted by an external project. 3 04/12 24 Bug Report Reported a bug in a repository, and another user was able to reproduce it. 5 04/12 25 Feature Request Made a request for a new feature in a software. 2 04/12 26 INSPER Project Made additional contributions to an INSPER educational project. 5 04/12"},{"location":"_snippets/skills-community/","title":"Skills community","text":"id Name Description XP Date 40 Indirect Issue Conversations in an issue or pull request led other users to open issues reporting new bugs/improvements. 3 04/12 41 Beta Tester When reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue. 3 04/12 42 Translation Accepted! Made a translation that was accepted in an open-source software. 5 04/12 43 New Languages Added support for translations in a previously non-translatable software. 10 04/12 44 Reviewer Reviewed minor errors in the documentation of a project, and your modifications were accepted. 2 04/12 45 Documentation Contribution Closed an issue marked as docs. 7 04/12 46 Project Pitch Delivered a project pitch. 0 04/12 47 Pitch Accepted! Contributed to a project presented in class. 5 04/12 48 Accepted Suggestion! Another student contributed to the project you pitched. 3 04/12 49 PR Replay Presented (in 15 minutes) the process of resolving a bug in class. 5 04/12"},{"location":"_snippets/skills-impact/","title":"Skills impact","text":"id Name Description XP Date 60 Speaker Gave a talk about libraries or open-source software. 20 04/12 61 Helpdesk Had an accepted answer on sites like StackOverflow or email lists. 4 04/12 62 Published Contribution One of your contributions was included in a release. 10 04/12 63 VIP Guest After making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill. 5 04/12 64 3 Submitted PRs Submitted 3 pull requests to the same project. 10 04/12 65 3 Accepted PRs 3 pull requests you submitted to a project were accepted. 30 04/12 66 Shoutout Something you did was mentioned by the project on social media or through an official channel. 10 04/12 77 Hacktoberfest Participated in Hacktoberfest by submitting 3 pull requests to external projects. 20 04/12"},{"location":"_snippets/skills-tutorial/","title":"Skills tutorial","text":"id Name Description XP Date 1 First Steps Added to the discipline's repository. 2 21/08 2 Exploring a Project's Environment Researched the history and community of people and services around a project. 3 21/08 3 Undocumented Project Received an undocumented system and got it up and running. 5 28/08 4 Professional Project Refactored poorly written code and created a web page for it. 5 01/09 5 Tested and Approved Created unit tests and interface tests for the challenge server. 5 13/09 6 Python Package Created a Python package installable via pip. 3 11/09 7 Dockerfile Created automated deployment for a Python web system. 3 11/09 8 Basic Translation Used translation tools to translate and localize a small command-line program. 2 11/09 10 FLOSS Research Delivered a long presentation on a recent and relevant topic related to free and open-source software. 5 04/12 11 Better code Addressed linting problems in a poorly written project 5 15/09"},{"location":"aulas/02-comunidades-de-software/","title":"02 - Comunidades de Software","text":"

    A atividade desta aula envolve a cria\u00e7\u00e3o de uma apresenta\u00e7\u00e3o explicando como s\u00e3o organizadas as comunidades ao redor dos seguintes projetos de software:

    1. Docker
    2. GIMP
    3. Kubernetes
    4. flatpak
    5. Godot engine
    6. GNOME
    7. TensorFlow
    8. digiKam
    9. Shotcut

    Cada grupo de 3 alunos dever\u00e1 escolher um projeto acima e pesquisar os seguintes pontos.

    1. Para qu\u00ea serve o projeto?
    2. Onde est\u00e1 o c\u00f3digo fonte? Quais tecnologias s\u00e3o usadas?
    3. Qual a licen\u00e7a? Existem guidelines p\u00fablicos ou algum tipo de burocracia para contribui\u00e7\u00f5es?
    4. Existe documenta\u00e7\u00e3o de desenvolvedor?
      • Parece f\u00e1cil de compilar/rodar?
      • Parece f\u00e1cil de modificar?
    5. Como o projeto \u00e9 comandado?

      • Quem s\u00e3o as grandes figuras (desenvolvedores, evangelistas, etc) do projeto? Se o projeto for grande, cite duas \u00e1reas diferentes neste item.
      • Existe um roadmap p\u00fablico?
      • S\u00e3o aceitas contribui\u00e7\u00f5es externas? Por qual via?
      • As decis\u00f5es s\u00e3o tomadas por quem?
    6. Onde encontrar os membros do projeto? Onde pedir ajuda?

    7. O projeto arrecada fundos?
      • Existem empresas patrocinando desenvolvedores?
      • Quanto foi arrecadado? E gasto? Com quais fins?
      • Quem decide como gastar?

    O trabalho do grupo ser\u00e1, ent\u00e3o, criar uma apresenta\u00e7\u00e3o de 10 minutos que responda as perguntas acima.

    As apresenta\u00e7\u00f5es da vers\u00e3o do curso 2022/2 podem ser acessadas nos links abaixo:

    1. Docker
    2. GIMP
    3. Kubernetes
    4. flatpak
    5. Godot engine
    6. GNOME
    7. TensorFlow
    8. digiKam
    9. Shotcut
    "},{"location":"aulas/02-comunidades-de-software/slides/","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_1","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#fluxo-de-trabalho-distribuido-e-comunidades-de-software","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/02-comunidades-de-software/slides/#modelo-github-fork-pull-request","title":"Modelo Github fork + pull request","text":"

    Fonte: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    "},{"location":"aulas/02-comunidades-de-software/slides/#modelo-github-fork-pull-request_1","title":"Modelo Github fork + pull request","text":"

    Fonte: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    "},{"location":"aulas/02-comunidades-de-software/slides/#fluxo-de-trabalho-outros-modelos","title":"Fluxo de Trabalho: outros modelos","text":"
    1. Enviar patch via lista de e-mails (ex. Linux)
    2. Ferramentas de code review (ex. KDE - Phabricator)
    3. Patch \u00e9 anexado no Bug Tracker (ex. Haiku, KDE)
    4. N\u00e3o recebe contribui\u00e7\u00f5es externas
    "},{"location":"aulas/02-comunidades-de-software/slides/#revisao-dos-prs-da-aula-passada","title":"Revis\u00e3o dos PRs da aula passada","text":""},{"location":"aulas/02-comunidades-de-software/slides/#erros-comuns","title":"Erros comuns","text":""},{"location":"aulas/02-comunidades-de-software/slides/#erro-0-o-arquivo-login-achievements","title":"Erro 0: o arquivo login-achievements","text":"

    Como consertar: Crie um novo commit com a data certa e veja o erro 2.

    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-1-arquivos-extras-no-pr","title":"Erro 1: arquivos extras no PR","text":"

    Erro: modificar arquivos n\u00e3o relacionados a sua mudan\u00e7a proposta.

    "},{"location":"aulas/02-comunidades-de-software/slides/#_2","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Ideal:

    1. Um Pull Request dever\u00e1 conter o somente os arquivos relacionados a modifica\u00e7\u00e3o proposta.
    2. Cada modifica\u00e7\u00e3o proposta est\u00e1 em um Pull Request separado

    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-1-arquivos-extras-no-pr_1","title":"Erro 1: arquivos extras no PR","text":"

    Como consertar: git revert cria um commit que desfaz altera\u00e7\u00f5es anteriores.

    Op\u00e7\u00f5es extras:

    • --no-commit: s\u00f3 adiciona as modifica\u00e7\u00f5es, mas n\u00e3o faz o commit. Permite desfazer parcialmente um commit.

    Fonte: https://www.atlassian.com/git/tutorials/

    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-2-pr-contem-mais-de-um-commit","title":"Erro 2: PR cont\u00e9m mais de um commit","text":"

    Erro: o PR est\u00e1 espalhado em v\u00e1rios commits.

    "},{"location":"aulas/02-comunidades-de-software/slides/#_3","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Ideal:

    1. Colocar toda sua modifica\u00e7\u00e3o em um s\u00f3 commit ajuda a entender o que foi modificado no PR.
    2. Mant\u00e9m hist\u00f3rico limpo, com um commit por bug consertado ou funcionalidade adicionada.
    3. Facilita encontrar erros e desfazer a modifica\u00e7\u00e3o caso ela seja problem\u00e1tica (usando `git revert')
    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-2-pr-contem-mais-de-um-commit_1","title":"Erro 2: PR cont\u00e9m mais de um commit","text":""},{"location":"aulas/02-comunidades-de-software/slides/#erro-2-pr-contem-mais-de-um-commit_2","title":"Erro 2: PR cont\u00e9m mais de um commit","text":"

    Como consertar: git rebase -i master permite remover e juntar commits do branch atual que n\u00e3o estejam no master.

    Fonte: https://www.atlassian.com/git/tutorials/

    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-3-mensagens-de-commit-nao-descritivas","title":"Erro 3: Mensagens de commit n\u00e3o descritivas","text":"

    Como consertar: git commit --amend permite modificar o \u00faltimo commit feito.

    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-4-pull-request-com-descricao-ruim","title":"Erro 4: Pull Request com descri\u00e7\u00e3o ruim","text":"

    Como consertar: S\u00f3 editar na interface do Github.

    "},{"location":"aulas/02-comunidades-de-software/slides/#consertar-em-casa-e-pedir-review-via-github","title":"Consertar em casa e pedir review via Github","text":""},{"location":"aulas/02-comunidades-de-software/slides/#lembrete-se-nao-der-push-nao-estragou-nada","title":"Lembrete: se n\u00e3o der push n\u00e3o estragou nada","text":""},{"location":"aulas/02-comunidades-de-software/slides/#lembrete-ii-git-log-mostra-seu-historico-atual","title":"Lembrete II: git log mostra seu hist\u00f3rico atual","text":""},{"location":"aulas/02-comunidades-de-software/slides/#dica-se-modificou-commits-ja-publicados-use-git-push-f-para-sobrescrever","title":"Dica: se modificou commits j\u00e1 publicados use git push -f para sobrescrever","text":""},{"location":"aulas/02-comunidades-de-software/slides/#nem-todos-os-alunos-que-estao-matriculados-na-disciplina-fizeram-a-atividade-da-ultima-aula","title":"Nem todos os alunos que est\u00e3o matriculados na disciplina fizeram a atividade da \u00faltima aula!","text":"
    python dev-aberto.py list-users\n
    "},{"location":"aulas/02-comunidades-de-software/slides/#comunidades-de-software","title":"Comunidades de software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#discussao","title":"Discuss\u00e3o","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_4","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Pergunta 1: quais s\u00e3o os softwares que voc\u00eas mais utilizam no dia a dia?

    "},{"location":"aulas/02-comunidades-de-software/slides/#_5","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_6","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_7","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Pergunta 2: quem \u00e9 o principal desenvolvedor do projeto?

    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-kernel-linux","title":"Exemplo: Kernel Linux","text":"

    Funda\u00e7\u00e3o d\u00e1 suporte ao desenvolvimento do Kernel Linux e \u00e0 cria\u00e7\u00e3o de um ecossistema de software de c\u00f3digo aberto ao seu redor.

    Apoio:

    • Financeiro
    • Propriedade intelectual
    • Infraestrutura
    • Servi\u00e7os e treinamento
    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-kernel-linux_1","title":"Exemplo: Kernel Linux","text":"

    Empresas que patrocinam desenvolvimento:

    1. Individuais (11,95%)
    2. Intel (10,01%)
    3. Red Hat (8,90%)
    4. Desconhecido (4,09%)
    5. IBM (3,79%)
    6. SUSE (3,49%)
    7. Linaro (2,96%)
    8. Consultores (2,96%)
    9. Google (2,79%)
    10. Samsung (2,28%)

    Fonte: \"2020 Linux Kernel Development Report\"

    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-ubuntu","title":"Exemplo: Ubuntu","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_8","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_9","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_10","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_11","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Empresa privada controla o desenvolvimento do Ubuntu. Obtem recursos via

    • Doa\u00e7\u00f5es
    • Servi\u00e7os de desenvolvimento e consultoria
    • Treinamento
    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-gitlab","title":"Exemplo: Gitlab","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_12","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_13","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_14","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_15","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Empresa financiada at\u00e9 agora por VC (Venture Capital) em busca de lucro.

    • Op\u00e7\u00e3o de planos gr\u00e1tis com software de c\u00f3digo aberto
    • Op\u00e7\u00e3o de planos corporativos com mais funcionalidades e suporte
    • Instala\u00e7\u00f5es locais
    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-elementary","title":"Exemplo: Elementary","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_16","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_17","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Distribui\u00e7\u00e3o linux comandada por uma empresa \"min\u00fascula\" focada em experi\u00eancia de usu\u00e1rio. Recursos s\u00e3o obtidos via

    • Patroc\u00ednios individuais e por empresas
    • Modelo pay-what-you-want (loja de aplicativos e sistema operacional)
    • Hardware com o sistema pr\u00e9-instalado

    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-linux-mint","title":"Exemplo: Linux Mint","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_18","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Distribui\u00e7\u00e3o linux cujo objetivo \u00e9 que tudo funcione direto na instala\u00e7\u00e3o. \u00c9 considerada boa para iniciantes.

    "},{"location":"aulas/02-comunidades-de-software/slides/#outras-fontes","title":"Outras fontes","text":"

    Diversas outras maneiras de conseguir suporte e financiamento

    "},{"location":"aulas/02-comunidades-de-software/slides/#razoes-para-financiar-empresa","title":"Raz\u00f5es para financiar (empresa)","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_19","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
    • \"Adquirir\" especialistas em uma tecnologia
    • Vender suporte ou consultoria
    • Marketing
    • Licen\u00e7a de software \"obriga\"
    "},{"location":"aulas/02-comunidades-de-software/slides/#_20","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_21","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Nem sempre o que \u00e9 financiado termina em um formato \"aproveit\u00e1vel\" por terceiros (ex: Android/Linux, TiVO)

    \"Tivoization is the practice of designing hardware that incorporates software under the terms of a copyleft software license like the GNU General Public License (GNU GPL), but uses hardware restrictions or digital rights management (DRM) to prevent users from running modified versions of the software on that hardware\" [Wikipedia]

    "},{"location":"aulas/02-comunidades-de-software/slides/#razoes-para-contribuir-individuo","title":"Raz\u00f5es para contribuir (indiv\u00edduo)","text":"
    • Profissionais
      • Reputa\u00e7\u00e3o / Curr\u00edculo
      • Necessidade de neg\u00f3cio
    • Pessoais
      • Altru\u00edsmo / Ideologia
      • Sensa\u00e7\u00e3o de realiza\u00e7\u00e3o pessoal
      • Exerc\u00edcio de criatividade
      • Resolver um problema de seu interesse
    "},{"location":"aulas/02-comunidades-de-software/slides/#atividade-explorando-o-entorno-de-um-projeto","title":"Atividade: Explorando o entorno de um projeto","text":"
    • Pesquisar como as comunidades de alguns projetos est\u00e3o organizadas
    • Produzir uma apresenta\u00e7\u00e3o resumindo suas descobertas
    "},{"location":"aulas/02-comunidades-de-software/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_22","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#fluxo-de-trabalho-distribuido-e-comunidades-de-software_1","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/","title":"04 - Discuss\u00f5es: documenta\u00e7\u00e3o de projetos","text":"

    A aula de hoje \u00e9 est\u00fadio para trabalhar na atividade da aula passada mais tempo para discuss\u00f5es.

    "},{"location":"aulas/04-discussao-documentacao-de-software/slides/","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#a-ausencia-de-documentacao-de-software","title":"(A aus\u00eancia de d)ocumenta\u00e7\u00e3o de software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-o-que-faz-o-projeto","title":"Discuss\u00e3o: o que faz o projeto?","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#servidor-de-desafios","title":"Servidor de desafios","text":"

    Voc\u00eas rodaram um MVP do servidor de desafios. Veja abaixo seu estado atual:

    https://github.com/Insper/servidor-de-desafios

    "},{"location":"aulas/04-discussao-documentacao-de-software/slides/#servidor-de-desafios_1","title":"Servidor de desafios","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-como-o-projeto-esta-organizado-tecnologias","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (tecnologias)","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-como-o-projeto-esta-organizado-codigo","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (c\u00f3digo)","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-avalie-a-arquitetura-do-projeto","title":"Discuss\u00e3o: avalie a arquitetura do projeto","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-avalie-a-qualidade-de-codigo-do-projeto","title":"Discuss\u00e3o: avalie a qualidade de c\u00f3digo do projeto.","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10_1","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-avalie-a-seguranca-do-projeto","title":"Discuss\u00e3o: avalie a seguran\u00e7a do projeto.","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10_2","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-esse-projeto-e-um-projeto-profissional","title":"Discuss\u00e3o: esse projeto \u00e9 um projeto \"profissional\"?","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10_3","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-o-que-voce-incluiria-na-documentacao-do-projeto","title":"Discuss\u00e3o: o que voc\u00ea incluiria na documenta\u00e7\u00e3o do projeto?","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#proximas-aula","title":"Pr\u00f3ximas aula","text":"

    Entender o qu\u00ea \u00e9 um projeto profissional:

    • documenta\u00e7\u00e3o de usu\u00e1rio e desenvolvedor
    • boas pr\u00e1ticas de programa\u00e7\u00e3o e qualidade de c\u00f3digo
    • integra\u00e7\u00e3o de c\u00f3digo e documenta\u00e7\u00e3o em um mesmo reposit\u00f3rio
    "},{"location":"aulas/04-discussao-documentacao-de-software/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#a-ausencia-de-documentacao-de-software_1","title":"(A aus\u00eancia de d)ocumenta\u00e7\u00e3o de software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/05-projeto-profissional/","title":"05 - Projeto Profissional","text":"

    Existe um momento em que ele j\u00e1 soluciona um problema para o autor e come\u00e7a a ficar claro que ele \u00e9 de interesse de outras pessoas. Vamos considerar que o Servidor de Desafios chegou neste momento e transform\u00e1-lo em um projeto \"profissional\".

    Seu trabalho neste roteiro ser\u00e1 preparar o projeto para ser apresentado \"oficialmente\" a outros usu\u00e1rios. Ou seja, far\u00e1 mudan\u00e7as para melhorar a qualidade do c\u00f3digo e criar\u00e1 uma p\u00e1gina para o projeto apresentando-o e provendo instru\u00e7\u00f5es de instala\u00e7\u00e3o e uso.

    Para entregar esta tarefa voc\u00ea dever\u00e1 criar um reposit\u00f3rio softdes-desafios em seu usu\u00e1rio, colocar o servidor de desafios l\u00e1 e hospedar sua documenta\u00e7\u00e3o usando Github Pages. Com isto pronto envie o trabalho de voc\u00eas via PR para o reposit\u00f3rio da disciplina.

    {\"skill_id\": 4, \"metadata\": {\"date\": \"2022-09-01\", \"url\": \"http...\", \"group\": []}\n

    Os itens obrigat\u00f3rios s\u00e3o descritos nos itens abaixo.

    "},{"location":"aulas/05-projeto-profissional/#itens-basicos-de-qualidade","title":"Itens b\u00e1sicos de qualidade","text":"
    • Adicionar um README ao projeto
      • Adicione uma descri\u00e7\u00e3o do projeto
      • Screenshot
      • Links para docs de Desenvolvimento e Usu\u00e1rio
    • Organizar pastas seguindo uma estrutura em que o c\u00f3digo est\u00e1 em src e a documenta\u00e7\u00e3o oficial em docs
    • Subir c\u00f3digo no Github
    "},{"location":"aulas/05-projeto-profissional/#qualidade-de-codigo","title":"Qualidade de c\u00f3digo","text":"

    Nosso c\u00f3digo est\u00e1 mal formatado e tem v\u00e1rias pr\u00e1ticas ruins de programa\u00e7\u00e3o. O pylint detecta estes problemas e d\u00e1 uma nota para seu c\u00f3digo. Melhore a nota do Servidor de Desafios eliminando estes problemas do c\u00f3digo. Alguns dos problemas s\u00e3o de resolu\u00e7\u00e3o simples e podem ser feitos por ferramentas, mas outros requerem uma aten\u00e7\u00e3o \"humana\"

    Ele n\u00e3o precisa estar 100%, mas voc\u00ea precisa eliminar grande parte dos erros mais bizarros. Ap\u00f3s fazer as corre\u00e7\u00f5es crie um novo commit e prossiga.

    Danger

    Certifique-se que o projeto continua funcionando! Alguns erros, como usar exec ou eval s\u00e3o inerentes ao projeto e n\u00e3o podem ser \"consertados\".

    "},{"location":"aulas/05-projeto-profissional/#documentacao","title":"Documenta\u00e7\u00e3o","text":"

    O mkdocs \u00e9 uma ferramenta de documenta\u00e7\u00e3o de software para gerar uma p\u00e1gina web de documenta\u00e7\u00e3o para o projeto. Vamos us\u00e1-lo para documenta\u00e7\u00e3o de desenvolvimento e de usu\u00e1rio do nosso projeto.

    Tip

    O mkdocs possui v\u00e1rios temas. Escolha um que voc\u00ea goste.

    "},{"location":"aulas/05-projeto-profissional/#documentacao-de-usuario","title":"Documenta\u00e7\u00e3o de usu\u00e1rio","text":"

    Os seguintes itens devem estar presentes:

    • Uma p\u00e1gina inicial descrevendo o projeto e explicando seu uso esperado. Inclua links e screenshots do software rodando.
    • Uma p\u00e1gina de guia de usu\u00e1rio para alunos. Este guia dever\u00e1 mostrar passo a passo as seguintes tarefa
      • entrar no servidor de desafios
      • enviar solu\u00e7\u00e3o correta para desafio
      • enviar solu\u00e7\u00e3o errada
    • Uma p\u00e1gina de guia de usu\u00e1rio para professores. Ela dever\u00e1 descrever:
      • como adicionar usu\u00e1rios (usando os arquivos users.csv e add_user.py)
      • como adicionar novos desafios (linha de comando mesmo)
    "},{"location":"aulas/05-projeto-profissional/#documentacao-de-desenvolvimento","title":"Documenta\u00e7\u00e3o de desenvolvimento","text":"

    As seguintes informa\u00e7\u00f5es devem estar presentes:

    • como configurar ambiente de desenvolvimento
    • instala\u00e7\u00e3o do software
    • estrutura do c\u00f3digo em alto n\u00edvel
    "},{"location":"aulas/05-projeto-profissional/slides/","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"aulas/05-projeto-profissional/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api-e-linters","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"aulas/05-projeto-profissional/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/05-projeto-profissional/slides/#servidor-de-desafios","title":"Servidor de desafios","text":"
    • Arquitetura
    • Qualidade de c\u00f3digo
    • Seguran\u00e7a
    "},{"location":"aulas/05-projeto-profissional/slides/#software-tem-historia-e-depende-de-pessoas-para-evoluir","title":"Software tem hist\u00f3ria e depende de pessoas para evoluir","text":""},{"location":"aulas/05-projeto-profissional/slides/#codigo-vs-software-profissional","title":"C\u00f3digo vs software profissional","text":"

    Os seguintes pontos transformam um c\u00f3digo que fiz para mim em algo \u00fatil para outras pessoas

    1. Tradu\u00e7\u00f5es e internacionaliza\u00e7\u00e3o (datas)
    2. Documenta\u00e7\u00e3o de usu\u00e1rio e de desenvolvimento
    3. Algum processo de qualidade de software
      • testes automatizados
      • formata\u00e7\u00e3o de c\u00f3digo e estrutura de repo
    4. pacotes de instala\u00e7\u00e3o
    "},{"location":"aulas/05-projeto-profissional/slides/#hoje","title":"Hoje","text":"
    • Ferramentas de documenta\u00e7\u00e3o
    • Documenta\u00e7\u00e3o de API usando
    • Padr\u00f5es de formata\u00e7\u00e3o de c\u00f3digo
      • linters
      • PEP8
    "},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api","title":"Documenta\u00e7\u00e3o de API","text":"

    Objetivo: explicar o funcionamento das fun\u00e7\u00f5es, classes e m\u00f3dulos de um programa.

    • Focado em detalhes
    • Documenta os argumentos esperados e em quais situa\u00e7\u00f5es a fun\u00e7\u00e3o funciona
    • Tipicamente obtida direto do c\u00f3digo
    • N\u00e3o detalha como as fun\u00e7\u00f5es s\u00e3o usadas em conjunto
    "},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api_1","title":"Documenta\u00e7\u00e3o de API","text":""},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api_2","title":"Documenta\u00e7\u00e3o de API","text":"

    ref

    "},{"location":"aulas/05-projeto-profissional/slides/#ferramentas","title":"Ferramentas","text":"
    • Python:
      • pydoc, numpydoc
    • C/C++
      • Doxygen
    • Java
      • Javadoc

    Em geral podem ser plugadas em alguma ferramenta de documenta\u00e7\u00e3o de projetos.

    "},{"location":"aulas/05-projeto-profissional/slides/#padroes-de-codificacao","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"aulas/05-projeto-profissional/slides/#padroes-de-codificacao_1","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"aulas/05-projeto-profissional/slides/#padroes-de-codificacao_2","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":"
    • Cada projeto tem o seu
    • Algumas linguagens tem um estilo padr\u00e3o
      • Python - PEP8
    • Ferramentas ajudam a conferir (for\u00e7ar) um estilo espec\u00edfico
    "},{"location":"aulas/05-projeto-profissional/slides/#ferramentas_1","title":"Ferramentas","text":"
    • Python: pylint, black
    • C/C++: splint, cppchecker, gcc (op\u00e7\u00f5es -Wall, -Wextra)
    • Java: flag -Xlint
    • Javascript: ESlint, TSlint (typescript)
    "},{"location":"aulas/05-projeto-profissional/slides/#_1","title":"Documenta\u00e7\u00e3o de API e linters","text":"

    Ajudam a manter c\u00f3digo limpo e leg\u00edvel. Podem ser plugadas no seu editor favorito.

    "},{"location":"aulas/05-projeto-profissional/slides/#execucao-obrigatoria-para-muitos-projetos-grandes","title":"Execu\u00e7\u00e3o obrigat\u00f3ria para muitos projetos grandes","text":""},{"location":"aulas/05-projeto-profissional/slides/#atividade-pratica-projeto-profissional","title":"Atividade pr\u00e1tica: Projeto profissional","text":"

    Objetivo: Transformar um c\u00f3digo perdido em um projeto \"completo\"

    \"metadata\": {\"url\": \"github pages criado\", \"group\": [\"ate tr\u00eas\", \"alunos\"]}

    "},{"location":"aulas/05-projeto-profissional/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api-testes","title":"Documenta\u00e7\u00e3o de API + testes","text":""},{"location":"aulas/05-projeto-profissional/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/06-distribuicao-software/","title":"06 - Distribui\u00e7\u00e3o de Software","text":"

    Nesta aula complementaremos as \u00faltimas discuss\u00f5es criando um pequeno pacote Python instal\u00e1vel via pip. Com isto chegamos mais perto de um projeto que esteja preparado para que outras pessoas o utilizem e colaborem em seu desenvolvimento.

    "},{"location":"aulas/06-distribuicao-software/#distribuindo-software-para-desenvolvedores-pacote-python-basico","title":"Distribuindo software para desenvolvedores: pacote Python b\u00e1sico","text":"

    Nosso m\u00f3dulo se chamar\u00e1 dev_aberto e disponibilizar\u00e1 um programa execut\u00e1vel hello.py. Crie a seguinte estrutura de pastas para nosso pacote.

    Important

    Baixe os arquivos que usaremos neste link

    pacote_exemplo/\n    dev_aberto/\n        __init__.py\n        dev_aberto.py\n    scripts/\n        hello.py\n    README.md\n    LICENSE\n

    Exercise

    com a estrutura acima, qual seria o import a ser feito para usar a fun\u00e7\u00e3o hello do arquivo dev_aberto.py?

    Exercise

    Pesquise para que serve o arquivo __init__.py e use-o para permitir importar hello usando somente import dev_aberto.

    Exercise

    Crie um projeto no github para esta atividade. Fa\u00e7a um primeiro commit nele com o conte\u00fado \"zerado\" do projeto.

    • Um arquivo README contendo uma frase de descri\u00e7\u00e3o do pacote e um link para o reposit\u00f3rio da disciplina.
    • Um arquivo LICENSE com a licen\u00e7a MIT.
    "},{"location":"aulas/06-distribuicao-software/#o-arquivo-setuppy","title":"O arquivo setup.py","text":"

    A descri\u00e7\u00e3o de um pacote Python \u00e9 feita usando um arquivo setup.py Veja abaixo uma vers\u00e3o inicial deste arquivo:

    from setuptools import setup\n\nsetup(name='dev_aberto_seunome',\n      version='0.1',\n      packages=['dev_aberto']\n      )\n

    Exercise

    Crie o arquivo acima no seu projeto, substituindo seunome por .... seu nome. Instale o seu pr\u00f3prio pacote usando

    pip install .

    Exercise

    Em outra pasta, abra um console Python e tente importar seu m\u00f3dulo.

    Exercise

    Pesquise quais argumentos s\u00e3o usados para especificar o autor do pacote, as vers\u00f5es de Python e sistemas operacionais suportados. Preencha estes valores com suas informa\u00e7\u00f5es. Note que o pip leva estas informa\u00e7\u00f5es em conta e s\u00f3 instalar\u00e1 um pacote se ele estiver em um ambiente suportado.

    "},{"location":"aulas/06-distribuicao-software/#dependencias","title":"Depend\u00eancias","text":"

    Para adicionar pacotes que s\u00e3o automaticamente instalados quando instalamos nosso pacote precisamos identific\u00e1-los no nosso arquivo setup.py. Para adicionar uma depend\u00eancia de instala\u00e7\u00e3o basta adicionar o seguinte argumento:

        ...\n    install_requires=[\n        'pacote>=1.0',\n        'pacote2'\n    ],\n    ...\n

    Exercise

    Verifique as depend\u00eancias do c\u00f3digo e adicione-as no setup.py.

    "},{"location":"aulas/06-distribuicao-software/#requirementstxt","title":"requirements.txt","text":"

    Muitos softwares usam tamb\u00e9m um arquivo requirements.txt para listar todas as depend\u00eancias do software de modo a obter uma instala\u00e7\u00e3o id\u00eantica \u00e0 do desenvolvedor. Isto \u00e9 importante para uniformizar os ambientes de desenvolvimento. Ou seja, este arquivo nunca ser\u00e1 usado por usu\u00e1rios finais.

    Exercise

    Crie um requirements.txt para seu projeto com as mesmas depend\u00eancias listadas no seu setup.py.

    "},{"location":"aulas/06-distribuicao-software/#scripts-executaveis","title":"Scripts execut\u00e1veis","text":"

    Al\u00e9m de instalar o nosso m\u00f3dulo para uso via import desejamos tamb\u00e9m disponibilizar o arquivo hello.py como um execut\u00e1vel para todo o sistema. Isto pode ser feito adicionando a seguinte linha no nosso setup.py indicando que scripts/hello.py dever\u00e1 ser instalado como um execut\u00e1vel.

        ...\n    scripts=['scripts/hello.py'],\n    ...\n

    N\u00e3o se esque\u00e7a de adicionar a seguinte linha no topo de seu arquivo para que ele possa ser executado diretamente do shell:

    #!/usr/bin/env python3\n

    No Windows \u00e9 criado um execut\u00e1vel que chama nosso script, de modo que as chamdas do execut\u00e1vel continuar\u00e3o funcionando normalmente. Note que isto n\u00e3o cria menus em nenhum tipo de interface gr\u00e1fica.

    "},{"location":"aulas/06-distribuicao-software/#criando-arquivos-de-distribuicao","title":"Criando arquivos de distribui\u00e7\u00e3o","text":"

    Dois tipos de arquivos de distribui\u00e7\u00e3o podem ser usados:

    • sdist: \u00e9 um arquivo contendo os fontes do projeto, incluindo arquivos adicionais especificados usando o argumento data_files. Usado se seu projeto for Python-puro.
    • wheel: \u00e9 um formato pr\u00e9-compilado e espec\u00edfico para cada plataforma. Mais usado quando o projeto cont\u00e9m extens\u00f5es em C.

    A cria\u00e7\u00e3o de um arquivo de distribui\u00e7\u00e3o de fontes \u00e9 bem simples:

    > python setup.py sdist\n

    A instala\u00e7\u00e3o deste pacote pode ser feita via pip.

    "},{"location":"aulas/06-distribuicao-software/#envio-para-o-pypi","title":"Envio para o PyPI","text":"

    Vamos agora enviar nosso pacote para o Python Package Index para que ele possa ser instalado diretamente via pip. Para n\u00e3o poluir o reposit\u00f3rio com pacotes tempor\u00e1rios e de teste, podemos usar o TestPyPI. Toda sua infraestrutura \u00e9 igual ao oficial, mas ele \u00e9 limpo de maneira regular.

    Visite https://test.pypi.org/account/register/ e registre-se no TestPyPI.

    Ap\u00f3s o registro, usaremos o pacote twine (instal\u00e1vel via pip) para fazer o upload:

    > twine upload --repository-url https://test.pypi.org/legacy/ dist/*\n

    Voc\u00ea poder\u00e1, ent\u00e3o, instalar seu pacote a partir do test PyPI usando o seguinte comando:

    > pip install --index-url https://test.pypi.org/simple/ my_hello_nome\n
    "},{"location":"aulas/06-distribuicao-software/#entrega","title":"Entrega","text":"

    Fa\u00e7a a entrega de sua atividade adicionando a skill Pacote Python e inclua nela a url do seu reposit\u00f3rio no github.

    Objetivo: Primeira experi\u00eancia distribuindo software Python.

    \"skill_id\": 6, \"metadata\": {\"url\": \"repo-seu-pacote\"}

    "},{"location":"aulas/06-distribuicao-software/#distribuindo-software-para-usuarios-finais","title":"Distribuindo software para usu\u00e1rios finais","text":"

    Vamos agora trabalhar (em grupo) no Servidor de Desafios novamente. Seu trabalho ser\u00e1 criar um Dockerfile que roda o software de maneira \"completa\". Ou seja, o script de cria\u00e7\u00e3o do container dever\u00e1

    • instalar todas as depend\u00eancias do sistema
    • criar a base de dados, se necess\u00e1rio
    • adicionar os usu\u00e1rios presentes no arquivo users.csv, se necess\u00e1rio
    • executar o servidor e serv\u00ed-lo na porta 8080 do host
    • manter os dados adicionados ao reiniciar o container
    "},{"location":"aulas/06-distribuicao-software/#entrega_1","title":"Entrega","text":"

    Fa\u00e7a a entrega de sua atividade adicionando a skill Dockerfile segundo o modelo abaixo.

    Objetivo: Criou deploy automatizado para sistema web Python

    \"skill_id\": 7, \"metadata\": {\"url\": \"repo-servidor-de-desafios\", \"group\": [\"login1\", \"login2\"]}

    "},{"location":"aulas/06-distribuicao-software/#referencias","title":"Refer\u00eancias","text":"

    Algumas refer\u00eancias que podem ser \u00fateis:

    • https://docker-curriculum.com/
    • https://docs.docker.com/get-started/
    "},{"location":"aulas/07-localizacao/","title":"07 - Localiza\u00e7\u00e3o","text":"

    Na parte expositiva da aula tivemos uma introdu\u00e7\u00e3o aos problemas de Internacionaliza\u00e7\u00e3o (i18n) e Localiza\u00e7\u00e3o (L10N). Neste roteiro iremos praticar o uso destas t\u00e9cnicas em uma aplica\u00e7\u00e3o linha de comando de exemplo simples.

    Em ambos exemplos vamos trabalhar com o m\u00f3dulo Babel, que \u00e9 feito para facilitar a tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de aplica\u00e7\u00f5es feitas em Python. Outras linguagens de programa\u00e7\u00e3o possuem bibliotecas similares que seguem a mesma sequ\u00eancia de comandos e usam os mesmos tipos de arquivos.

    Sistemas POSIX suportam a determina\u00e7\u00e3o do locale utilizado por meio da vari\u00e1vel de ambiente LANGUAGE, que pode ser modificada para cada execu\u00e7\u00e3o de um programa. O formato padr\u00e3o usado \u00e9 <lingua>_<pais>.<codificacao>. Para portugu\u00eas do Brasil usando codifica\u00e7\u00e3o UTF8 usamos o locale pt_BR.utf8. Rodando o seguinte comando as mensagens de ajuda do ls devem aparecer em ingl\u00eas.

    LANGUAGE=en_US.utf8 ls --help

    J\u00e1 executando o comando abaixo elas devem aparecer em portugu\u00eas.

    LANGUAGE=pt_BR.utf8 ls --help

    De maneira mais geral, existe uma s\u00e9rie de vari\u00e1veis LC_* que controlam qual locale \u00e9 usado para determinado tipo de dados. Veremos a seguir como usar LC_TIME e LC_NUMERIC para controlar como datas e n\u00fameros s\u00e3o exibidos e LANGUAGE para definir a lingua de exibi\u00e7\u00e3o de um programa.

    "},{"location":"aulas/07-localizacao/#localizando-um-programa-em-python","title":"Localizando um programa em Python","text":"

    Vamos trabalhar com uma aplica\u00e7\u00e3o de linha de comando que nada mais faz que imprimir alguns dados simples como data em extenso, um n\u00famero fracion\u00e1rio grande e uma mensagem pr\u00e9-definida. O c\u00f3digo completo (arquivo cli.py) est\u00e1 abaixo.

    from datetime import date\n\nif __name__ == '__main__':\n    today = date.today()\n    print(today)\n\n    number = 240000000000.32212\n    print(number)\n\n    name = input('Input your name: ')\n    print('Hello {}'.format(name))\n
    Uma sa\u00edda poss\u00edvel seria

    2018-08-28\n240000000000.3221\nInput your name: Igor\nHello Igor\n

    Como j\u00e1 visto em aula, este programa re\u00fane tr\u00eas das principais sa\u00eddas que precisam ser formatadas: datas, n\u00fameros fracion\u00e1rios e mensagens para o usu\u00e1rio.

    "},{"location":"aulas/07-localizacao/#formatando-datas","title":"Formatando datas","text":"

    A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_TIME. O m\u00f3dulo babel.dates j\u00e1 possui diversas fun\u00e7\u00f5es que automaticamente a utilizam para fazer a localiza\u00e7\u00e3o de vari\u00e1veis do tipo Date (usando a fun\u00e7\u00e3o format_date) ou DateTime (usando format_datetime).

    Exercise

    Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar a data por extenso (ou seja, 31 de agosto de 2021).

    Exercise

    O qu\u00ea acontece quando definimos a vari\u00e1vel de ambiente LC_TIME=en_US.utf8 e rodamos o programa? E se usamos LC_TIME=pt_BR.utf8?

    "},{"location":"aulas/07-localizacao/#formatando-numeros","title":"Formatando n\u00fameros","text":"

    A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_NUMERIC. O m\u00f3dulo babel.numbers possui a fun\u00e7\u00e3o format_number que formata um n\u00famero de acordo com esta configura\u00e7\u00e3o.

    Exercise

    Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar o n\u00famero fracion\u00e1rio mostrado.

    Exercise

    Teste seu programa com LC_NUMERIC=en_US.utf8 e LC_NUMERIC=pt_BR.utf8. Os efeitos s\u00e3o os esperados?s

    "},{"location":"aulas/07-localizacao/#traduzindo-mensagens","title":"Traduzindo mensagens","text":"

    A parte final consiste em criar tradu\u00e7\u00f5es das duas strings presentes no texto. A linguagem usada \u00e9 definida pela vari\u00e1vel LANGUAGE, que pode ser definida separadamente para cada processo. Um dos pontos mais importantes \u00e9 marcar quais strings dever\u00e3o ser traduzidas para que uma equipe de tradutores n\u00e3o precise mexer no c\u00f3digo. O m\u00f3dulo gettext do Python j\u00e1 prov\u00ea suporte a esta funcionalidade, o Babel apenas fornece um conjunto de ferramentas que facilita seu uso.

    A implanta\u00e7\u00e3o do framework de tradu\u00e7\u00e3o \u00e9 feita em quatro passos:

    1. Marca\u00e7\u00e3o das strings a serem traduzidas
    2. Extra\u00e7\u00e3o destas strings do c\u00f3digo em um arquivo modelo .pot
    3. Cria\u00e7\u00e3o de tradu\u00e7\u00f5es .po a partir do modelo criado no passo anterior
    4. Compila\u00e7\u00e3o das strings traduzidas em um arquivo bin\u00e1rio .mo

    No arquivo principal de nossa aplica\u00e7\u00e3o podemos \"instalar\" o framework de tradu\u00e7\u00e3o e marcar todas nossas strings a serem traduzidas com a fun\u00e7\u00e3o _(). A instala\u00e7\u00e3o \u00e9 feita pelo seguinte trecho de c\u00f3digo.

    import gettext\ngettext.install('cli', localedir='locale') \n# cli \u00e9 o nome do arquivo em que guardamos nossas tradu\u00e7\u00f5es\n# localedir \u00e9 o caminho onde est\u00e3o armazenadas as tradu\u00e7\u00f5es. Pode ser um caminho relativo. \n

    Devemos ent\u00e3o marcar todas as strings para serem traduzidas com _(). Podemos usar _() em qualquer arquivo do projeto, mesmo que a instala\u00e7\u00e3o tenha sido feita somente no arquivo principal.

    print(_(\"Hello!\"))\n

    Os passos seguintes s\u00e3o feitos com aux\u00edlio do Babel, que efetivamente analisa nosso c\u00f3digo Python e extrai as strings para tradu\u00e7\u00e3o. A cria\u00e7\u00e3o do arquivo modelo de tradu\u00e7\u00e3o a partir dos arquivos do diret\u00f3rio atual \u00e9 feita com o seguinte comando.

    $ pybabel extract . -o cli-model.pot

    Criamos ent\u00e3o uma nova tradu\u00e7\u00e3o usando o seguinte comando. A op\u00e7\u00e3o -D indica o nome do arquivo em que as tradu\u00e7\u00f5es ser\u00e3o guardadas (usado em gettext.install). A op\u00e7\u00e3o -l indica o locale da tradu\u00e7\u00e3o. A op\u00e7\u00e3o -d indica o localedir usado em gettext.install.

    $ pybabel init -i cli-model.pot -D cli -l pt_BR -d locale

    Devemos ent\u00e3o editar o arquivo criado em locale/pt_BR/LC_MESSAGES/cli.po. Ser\u00e3o apresentados (ap\u00f3s algumas linhas de coment\u00e1rios) pares de linhas como as seguintes. O primeiro valor msgid \u00e9 a string a ser traduzida e o segundo msgstr \u00e9 a tradu\u00e7\u00e3o no locale pt_BR (pois o arquivo est\u00e1 na pasta pt_BR do localedir).

    msgid \"Input your name: \"\nmsgstr \"\"\n

    Apesar de ser poss\u00edvel fazer tudo diretamente no arquivo de texto, \u00e9 mais conveniente usar softwares como o poedit ou este editor online(https://localise.biz/free/poeditor).

    Com as strings traduzidas vamos finalmente compilar nossos resultados. Isto \u00e9 feito para que n\u00e3o seja poss\u00edvel mexer nos arquivos de tradu\u00e7\u00e3o em uma vers\u00e3o Release do programa.

    $ pybabel compile -D cli -l pt_BR -d locale

    Isto gerar\u00e1 os arquivos .mo correspondentes a ao locale pt_BR. S\u00e3o estes os arquivos carregados durante a execu\u00e7\u00e3o do programa.

    "},{"location":"aulas/07-localizacao/#teste-final","title":"Teste final","text":"

    Podemos definir a vari\u00e1vel LANGUAGE para modificar a lingua de um programa (como visto anteriormente com ls). Execute seu programa diretamente e depois setando LANGUAGE=pt_BR.utf8. Os resultados foram os esperados?

    "},{"location":"aulas/07-localizacao/#entrega","title":"Entrega","text":"

    Modifique o exerc\u00edcio da aula passada (pacote python) para suportar datas e mensagens em Ingl\u00eas e Portugu\u00eas. Fa\u00e7a a entrega de sua atividade adicionando a skill Tradu\u00e7\u00e3o b\u00e1sica segundo o modelo abaixo.

    Objetivo: Aplicou ferramentas de localiza\u00e7\u00e3o para traduzir um programa simples em linha de comando.

    \"skill_id\": 8, \"metadata\": {\"url\": \"repo-pacote-python\"}

    "},{"location":"aulas/07-localizacao/#traduzindo-no-mundo-real","title":"Traduzindo no mundo real","text":"

    Agora que voc\u00ea j\u00e1 conhece os passos necess\u00e1rios para traduzir um software \u00e9 o momento de colocar esse conhecimento em pr\u00e1tica. O trabalho de seu grupo ser\u00e1 encontrar softwares que necessitem de tradu\u00e7\u00f5es para o Portugu\u00eas brasileiro e realiz\u00e1-las. Alguns projetos tamb\u00e9m disponibilizam arquivos *.po para tradu\u00e7\u00e3o de guias de usu\u00e1rio e isto tamb\u00e9m \u00e9 v\u00e1lido neste item.

    • GNOME - sistema de tradu\u00e7\u00f5es
    • KDE - status de tradu\u00e7\u00f5es e brasileiros tradutores.
    • Inkscape
    • Openshot
    • Elementary Linux
    • Aplicativos m\u00f3veis livres no fdroid.org

    Ao ter tradu\u00e7\u00f5es aceitas por um projeto voc\u00eas receber\u00e3o a skill Tradu\u00e7\u00e3o aceita!

    "},{"location":"aulas/07-localizacao/slides/","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/07-localizacao/slides/#localizacao-e-internacionalizacao-de-software","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/07-localizacao/slides/#traducao-de-software","title":"Tradu\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#qual-a-diferenca-de-internacionalizacao-e-localizacao","title":"Qual a diferen\u00e7a de internacionaliza\u00e7\u00e3o e localiza\u00e7\u00e3o?","text":""},{"location":"aulas/07-localizacao/slides/#internacionalizacao-i18n","title":"Internacionaliza\u00e7\u00e3o (I18N)","text":"
    • Consiste em traduzir a interface de usu\u00e1rio de um software para outros idiomas.

    • Sistema Operacional guarda configura\u00e7\u00f5es de idioma e as disponibiliza para aplica\u00e7\u00f5es

    • Tipicamente \"invis\u00edvel\"

    "},{"location":"aulas/07-localizacao/slides/#localizacao-l10n","title":"Localiza\u00e7\u00e3o (L10N)","text":"

    Consiste em adaptar a maneira de mostrar

    • n\u00fameros fracion\u00e1rios
      • marcador de decimais
      • marcador de milhares
    • datas
      • nomes de meses
      • ordem de exibi\u00e7\u00e3o
    • nomes de pa\u00edses, fusos hor\u00e1rios, etc

    de acordo com as prefer\u00eancias de um usu\u00e1rio e relativos a sua cultura.

    "},{"location":"aulas/07-localizacao/slides/#i18n-e-l10n","title":"I18N e L10N","text":"

    Precisam ser

    • independentes:
      • idioma ingl\u00eas e datas no formato brasileiro
    • configur\u00e1veis
      • posso precisar trocar entre l\u00ednguas e entre formatos
    "},{"location":"aulas/07-localizacao/slides/#o-suporte-a-l10n-e-i18n-implica-modificar-codigo-fonte","title":"O suporte a L10N e I18N implica modificar c\u00f3digo fonte.","text":""},{"location":"aulas/07-localizacao/slides/#locales","title":"Locales","text":"

    Um locale \u00e9 uma tripla

    "},{"location":"aulas/07-localizacao/slides/#_1","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
    <lingua>_<pais>.<codificacao>\n
    "},{"location":"aulas/07-localizacao/slides/#_2","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    que representa configura\u00e7\u00f5es de I18N e/ou L10N para uma determinada cultura.

    "},{"location":"aulas/07-localizacao/slides/#locales_1","title":"Locales","text":"

    Exemplos:

    • Tradu\u00e7\u00e3o de File:
      • pt = Ficheiro
      • pt_BR = Arquivo
    • Formato de datas:
      • en_US: MM/DD/YY
      • en_GB: DD/MM/YY
    "},{"location":"aulas/07-localizacao/slides/#posso-usar-locales-diferentes-para-a-lingua-da-interface-de-usuario-e-para-mostrar-datas","title":"Posso usar locales diferentes para a l\u00edngua da interface de usu\u00e1rio e para mostrar datas.","text":""},{"location":"aulas/07-localizacao/slides/#configuracoes-possiveis-linux","title":"Configura\u00e7\u00f5es poss\u00edveis (Linux)","text":"
    # sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
    "},{"location":"aulas/07-localizacao/slides/#implementando-suporte-a-l10n","title":"Implementando suporte a L10N","text":"
    1. Baixar uma biblioteca de Localiza\u00e7\u00e3o
    2. Encontrar todas as exibi\u00e7\u00f5es de n\u00fameros, datas, etc
    3. Pr\u00e9-process\u00e1-las usando fun\u00e7\u00f5es da biblioteca
    "},{"location":"aulas/07-localizacao/slides/#_3","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
    # Antes \nprint('Numero:', 10.5) \n# Depois\nprint('Numero', format_number(10.5))\n
    "},{"location":"aulas/07-localizacao/slides/#_4","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    N\u00e3o \u00e9 complicado, mas \u00e9 trabalhoso

    "},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n","title":"Suporte a I18N","text":"

    Envolve 4 etapas:

    1. Marcar todas strings que devem ser traduzidas
    2. Extra\u00ed-las do c\u00f3digo fonte
    3. Criar um arquivo de tradu\u00e7\u00f5es para cada locale suportado
    4. Empacotar as tradu\u00e7\u00f5es junto com o programa
    "},{"location":"aulas/07-localizacao/slides/#_5","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    \u00c9 um pouco mais complicado, mas pode ser integrado ao processo de compila\u00e7\u00e3o de um programa.

    "},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-posix","title":"Suporte a I18N (POSIX)","text":"

    Sistemas POSIX suportam determina\u00e7\u00e3o de lingua e locale usando vari\u00e1veis de ambiente.

    • LANG para l\u00edngua
    • LC_TIME para data
    • LC_NUMERIC para n\u00fameros

    Um locale sempre \u00e9 expresso no formato

    <lingua>_<pais>.<codificacao>\n
    "},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-posix_1","title":"Suporte a I18N (POSIX)","text":"

    O comando locale mostra todas as op\u00e7\u00f5es dispon\u00edveis:

    # sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
    "},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-web","title":"Suporte a I18N (Web)","text":"

    Existem diversas maneiras de determinar um bom locale em sistemas Web:

    • Cabe\u00e7alho HTTP Accept-Language inclui as linguagens de exibi\u00e7\u00e3o suportadas pelo browser do visitante.
    • Geolocaliza\u00e7\u00e3o via IP
    • Prefer\u00eancia armazenada em banco de dados
    "},{"location":"aulas/07-localizacao/slides/#_6","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#web-e-desktop-usam-as-mesmas-tecnologias-l10n-e-i18n","title":"Web e desktop usam as mesmas tecnologias (l10n e i18n)","text":""},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-em-python","title":"Suporte a I18N (em Python)","text":"
    • M\u00f3dulo gettext da biblioteca padr\u00e3o
    • M\u00f3dulo datetime aceita o uso de locales
    • M\u00f3dulo babel faz I18N e L10N
    "},{"location":"aulas/07-localizacao/slides/#atividade-pratica-traducao-basica","title":"Atividade pr\u00e1tica: Tradu\u00e7\u00e3o b\u00e1sica","text":"

    Objetivo: usar o m\u00f3dulo Babel para traduzir uma aplica\u00e7\u00e3o do terminal.

    "},{"location":"aulas/07-localizacao/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/07-localizacao/slides/#localizacao-e-internacionalizacao-de-software_1","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr_1","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/08-testes-automatizados/","title":"08 - Testes automatizados","text":"

    O objetivo da atividade de hoje \u00e9 criar testes automatizados para o servidor de desafios. Com isso completamos nossa jornada rumo a software que possa ser desenvolvido de maneira colaborativa e que possa ser usado em situa\u00e7\u00f5es reais.

    1. Documenta\u00e7\u00e3o (usu\u00e1rios e desenvolvedor)
    2. Distribui\u00e7\u00e3o de software e versionamento
    3. Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o
    4. Testes automatizados
    "},{"location":"aulas/08-testes-automatizados/#testes-de-unidade","title":"Testes de unidade","text":"

    Uma parte do programa do servidor de desafios que pode ser testada com testes de unidade \u00e9 a fun\u00e7\u00e3o lambda_handler, que executa a fun\u00e7\u00e3o submetida pelo usu\u00e1rio. Seu trabalho ser\u00e1 criar testes usando o pytest e cobrir os seguintes casos:

    • programa submetido est\u00e1 correto
    • programa submetido n\u00e3o cont\u00e9m a fun\u00e7\u00e3o pedida
    • programa submetido retorna resultado incorreto
    "},{"location":"aulas/08-testes-automatizados/#testes-de-interface-de-usuario","title":"Testes de interface de usu\u00e1rio","text":"

    Iremos criar testes de interface de usu\u00e1rio para o Servidor de Desafios usando o Selenium. Este software permite imitar intera\u00e7\u00f5es reais de um usu\u00e1rio usando c\u00f3digo e criar testes baseado nessas intera\u00e7\u00f5es.

    Voc\u00eas devem simular os seguintes cen\u00e1rios:

    • Aluno faz login com sucesso
    • Aluno entra senha incorreta
    • Aluno envia desafio com resposta incorreta
    • Aluno envia desafio com resposta correta

    A ideia b\u00e1sica seria reproduzir os mesmos testes apresentados no manual do usu\u00e1rio.

    "},{"location":"aulas/08-testes-automatizados/#entrega","title":"Entrega","text":"

    Coloquem os scripts de teste na pasta test do reposit\u00f3rio e adicionem instru\u00e7\u00f5es de como rodar os testes no README.

    "},{"location":"aulas/08-testes-automatizados/index_2022/","title":"08 - Testes automatizados","text":"

    O objetivo da atividade de hoje \u00e9 criar testes automatizados para um projeto espec\u00edfico de software. Com isso completamos nossa jornada rumo a software que possa ser desenvolvido de maneira colaborativa e que possa ser usado em situa\u00e7\u00f5es reais.

    1. Documenta\u00e7\u00e3o (usu\u00e1rios e desenvolvedor)
    2. Distribui\u00e7\u00e3o de software e versionamento
    3. Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o
    4. Testes automatizados
    "},{"location":"aulas/08-testes-automatizados/index_2022/#biblioteca-para-implementacao-de-agentes-baseados-em-busca","title":"Biblioteca para implementa\u00e7\u00e3o de agentes baseados em busca","text":"

    O projeto AI Code implementa uma biblioteca que possui diversos algoritmos de busca pr\u00e9-prontos e alguns exemplos de utiliza\u00e7\u00e3o.

    Os exemplos de utiliza\u00e7\u00e3o j\u00e1 possuem arquivos de teste usando a biblioteca pytest, mas podem estar incompletos ou at\u00e9 mesmo errados.

    As implementa\u00e7\u00f5es dos algoritmos de busca, da biblioteca em si, n\u00e3o possuem testes. Estes algoritmos est\u00e3o implementados no arquivo SearchAlgoritms.py.

    "},{"location":"aulas/08-testes-automatizados/index_2022/#atividades","title":"Atividades","text":"
    • Fa\u00e7a um fork do projeto;
    • Leia a documenta\u00e7\u00e3o para entender os exemplos e o prop\u00f3sito da biblioteca;
    • Revise os testes;
    • Implemente ou altere 3 novos testes para um dos exemplos apresentados na documenta\u00e7\u00e3o. Justifique o motivo da sua nova implementa\u00e7\u00e3o ou altera\u00e7\u00e3o no pull request;
    • Implemente 3 novos testes para os algoritmos base da biblioteca. Fa\u00e7a isto em um pull request diferente do anterior.

    Al\u00e9m da implementa\u00e7\u00e3o dos testes, uma outra alternativa \u00e9 executar o pylint e sugerir mudan\u00e7as na formata\u00e7\u00e3o do c\u00f3digo dos arquivos search/SearchAlgorithms.py, search/Graph.py e ProblemSpecificationExample.py.

    "},{"location":"aulas/08-testes-automatizados/index_2022/#formato-de-entrega","title":"Formato de entrega","text":"

    Para a entrega do exerc\u00edcio voc\u00ea dever\u00e1:

    • implementar os dois conjuntos de testes, ou;
    • implementar um dos conjuntos de testes e as modifica\u00e7\u00f5es sugeridas pelo pylint.

    Esta atividade deve ser individual. Os PRs devem ser enviados e discutidos ao longo desta semana.

    "},{"location":"aulas/08-testes-automatizados/slides/","title":"Testes automatizados","text":""},{"location":"aulas/08-testes-automatizados/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/08-testes-automatizados/slides/#testes-automatizados","title":"Testes automatizados","text":""},{"location":"aulas/08-testes-automatizados/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/08-testes-automatizados/slides/#projeto-profissional","title":"Projeto profissional","text":"
    • Qualidade de c\u00f3digo
      • Linting - formata\u00e7\u00e3o e erros comuns
    • Documenta\u00e7\u00e3o
      • Usu\u00e1rio
      • Desenvolvedor
    "},{"location":"aulas/08-testes-automatizados/slides/#projeto-profissional_1","title":"Projeto profissional","text":"
    • Qualidade de c\u00f3digo
      • Linting - formata\u00e7\u00e3o e erros comuns
      • O c\u00f3digo funciona?
    • Documenta\u00e7\u00e3o
      • Usu\u00e1rio
      • Desenvolvedor
    "},{"location":"aulas/08-testes-automatizados/slides/#meu-programa-funciona","title":"Meu programa funciona?","text":"
    • Sob quais condi\u00e7\u00f5es?
    • Em quais plataformas?
    • Quais opera\u00e7\u00f5es s\u00e3o suportadas?
    • Consigo conferir o resultado de uma execu\u00e7\u00e3o? Se sim, existe um valor de refer\u00eancia?
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-automatizados_1","title":"Testes automatizados","text":"

    Ideia: escrever um programa que verifica se um outro programa responde como esperado

    • Definir situa\u00e7\u00f5es a serem testadas ...
    • e o resultado esperado em cada situa\u00e7\u00e3o
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-automatizados_2","title":"Testes automatizados","text":"

    N\u00e3o ajudam:

    • a revelar novos bugs
    • a garantir que um software \u00e9 livre de bugs

    Ajudam

    • a evitar que bugs descobertos voltem
    • a evitar que mudan\u00e7as n\u00e3o intencionais quebrem c\u00f3digo que estava funcionando.
    • a documentar em quais situa\u00e7\u00f5es o software funciona.
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-automatizados_3","title":"Testes automatizados","text":"
    1. Testes de unidade
    2. Testes de integra\u00e7\u00e3o
    3. Testes de interface de usu\u00e1rio
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-unitarios","title":"Testes unit\u00e1rios","text":"

    Ideia: dada uma fun\u00e7\u00e3o, verificar se ela devolve o valor esperado para um certo conjunto de par\u00e2metros.

    • Testa as fun\u00e7\u00f5es de maneira isolada
    • Cobertura: porcentagem das linhas de c\u00f3digo que \u00e9 executada durante os testes de unidade.
    • Serve como documenta\u00e7\u00e3o da fun\u00e7\u00e3o
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-unitarios-pytest","title":"Testes unit\u00e1rios - pytest","text":""},{"location":"aulas/08-testes-automatizados/slides/#testes-de-integracao","title":"Testes de integra\u00e7\u00e3o","text":"

    Ideia: dados um conjunto de classes com interdepend\u00eancias, verificar se elas funcionam bem em conjunto.

    • Testa intera\u00e7\u00e3o entre em objetos
    • Possibilidade de criar mocks, que s\u00e3o objetos falsos feitos para simular a intera\u00e7\u00e3o entre v\u00e1rios objetos.
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-de-interface-de-usuario","title":"Testes de interface de usu\u00e1rio","text":"

    Ideia: simula a\u00e7\u00f5es do usu\u00e1rio (cliques, entrada de dados, etc) e confere se a sa\u00edda esperada \u00e9 mostrada na tela

    • Menos espec\u00edfico poss\u00edvel
    • Mais fiel ao uso real de um usu\u00e1rio
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-de-interface-de-usuario_1","title":"Testes de interface de usu\u00e1rio","text":""},{"location":"aulas/08-testes-automatizados/slides/#selenium","title":"Selenium","text":"

    Permite fazer scripts que interagem com uma p\u00e1gina web, realizando entrada de dados, rolagem de tela e cliques. Cada assert pode ser feito com o conte\u00fado de um objeto da p\u00e1gina.

    "},{"location":"aulas/08-testes-automatizados/slides/#o-que-eu-preciso-testar","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"aulas/08-testes-automatizados/slides/#_1","title":"Testes automatizados","text":""},{"location":"aulas/08-testes-automatizados/slides/#o-que-eu-preciso-testar_1","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"aulas/08-testes-automatizados/slides/#ninguem-sabe","title":"Ningu\u00e9m sabe....","text":""},{"location":"aulas/08-testes-automatizados/slides/#atividade-pratica-testado-e-aprovado","title":"Atividade pr\u00e1tica: Testado e aprovado","text":"

    Objetivo: Primeira experi\u00eancia com testes automatizado de c\u00f3digo.

    \"metadata\": {\"url\": \"repo-servidor-desafios\", \"group\": [\"igual\", \"6\"]}

    "},{"location":"aulas/09-cultura-livre/","title":"09 - Trabalho sobre cultura livre","text":"

    Esta aula n\u00e3o tem atividade pr\u00e1tica. As discuss\u00f5es s\u00e3o feitas durante a aula expositiva.

    "},{"location":"aulas/09-cultura-livre/slides/","title":"Cultura de software livre","text":""},{"location":"aulas/09-cultura-livre/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-cultura-livre/slides/#cultura-de-software-livre","title":"Cultura de software livre","text":""},{"location":"aulas/09-cultura-livre/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/09-cultura-livre/slides/#atividade","title":"Atividade","text":"

    Cultura livre: fazer uma pesquisa profunda e apresentar semin\u00e1rio sobre licen\u00e7as de software e casos recentes em que licen\u00e7as tem papel de destaque

    "},{"location":"aulas/09-cultura-livre/slides/#sua-apresentacao-precisa-ter-alguma-forma-de-interacao-com-a-audiencia","title":"Sua apresenta\u00e7\u00e3o precisa ter alguma forma de intera\u00e7\u00e3o com a audi\u00eancia","text":"
    • debate
    • painel com vota\u00e7\u00f5es
    "},{"location":"aulas/09-cultura-livre/slides/#atividade-sugestoes-de-temas","title":"Atividade - sugest\u00f5es de temas","text":"
    • The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022?

    • There is no \"Linux\" platform.

    • Telemetria \u00e9 \"\u00e9tico\"? (exemplo VSCode e outros).

    • GitHub CoPilot \u00e9 \"\u00e9tico\"? Respeita licen\u00e7as de software?

    • Regulamenta\u00e7\u00f5es recentes na Europa sobre durabilidade de smartphones (bateria, right to repair, etc).

    • Maintainer burnout.

    "},{"location":"aulas/09-cultura-livre/slides/#atividade-datas-de-apresentacao","title":"Atividade - datas de apresenta\u00e7\u00e3o","text":"
    • 17/11 - 2 trabalho
    • 22/11 - 2 trabalhos
    • 24/11 - 2 trabalhos
    • 29/11 - 2 trabalhos
    "},{"location":"aulas/09-cultura-livre/slides/#45-minutos-de-apresentacaoatividade-10-minutos-para-perguntas","title":"45 minutos de apresenta\u00e7\u00e3o/atividade + 10 minutos para perguntas","text":""},{"location":"aulas/09-cultura-livre/slides/#hoje","title":"Hoje","text":"
    • Defini\u00e7\u00e3o de temas e datas de apresenta\u00e7\u00e3o
    • Pr\u00e9via de 5 minutos do seu tema na pr\u00f3xima aula
    "},{"location":"aulas/09-cultura-livre/slides/#registrar-seu-grupo-escolha-de-tema-e-dia-de-apresentacao-na-issue-665","title":"Registrar seu grupo, escolha de tema e dia de apresenta\u00e7\u00e3o na issue #665","text":""},{"location":"aulas/09-licencas/","title":"09 - Licen\u00e7as de Software","text":"

    Esta aula n\u00e3o tem atividade pr\u00e1tica. As discuss\u00f5es s\u00e3o feitas durante a aula expositiva.

    "},{"location":"aulas/09-licencas/slides/","title":"Licen\u00e7as de software","text":""},{"location":"aulas/09-licencas/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software","title":"Licen\u00e7as de Software","text":""},{"location":"aulas/09-licencas/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/09-licencas/slides/#ate-agora","title":"At\u00e9 agora","text":"
    • Ferramentas de colabora\u00e7\u00e3o
    • Modifica\u00e7\u00f5es de c\u00f3digo
    • Tradu\u00e7\u00e3o de UI e documenta\u00e7\u00e3o
    • Distribui\u00e7ao de software
    • Teste de software

    ### Conte\u00fado t\u00e9cnico: ferramentas, fluxos de trabalho, etc

    "},{"location":"aulas/09-licencas/slides/#hoje","title":"Hoje","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_1","title":"Licen\u00e7as de software","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_2","title":"Licen\u00e7as de software","text":"
    • Governam a distribui\u00e7\u00e3o de um software
    • Cess\u00e3o de direitos do autor para outras pessoas
    • Listam quais permiss\u00f5es um usu\u00e1rio (n\u00e3o) tem
    "},{"location":"aulas/09-licencas/slides/#disclaimer","title":"Disclaimer","text":""},{"location":"aulas/09-licencas/slides/#eu-nao-sou-especialista-em-direito-autoral-brasileiro-toda-informacao-disponibilizada-foi-fruto-de-pesquisa-e-nao-constitui-aconselhamento-legal","title":"Eu n\u00e3o sou especialista em direito autoral brasileiro. Toda informa\u00e7\u00e3o disponibilizada foi fruto de pesquisa e n\u00e3o constitui aconselhamento legal.","text":""},{"location":"aulas/09-licencas/slides/#distribuicao-de-software","title":"Distribui\u00e7\u00e3o de software","text":"

    Escrever software \u00e9 considerado um trabalho intelectual, estando ent\u00e3o sujeito \u00e0s leis de direitos autorais.

    • Essas leis s\u00e3o espec\u00edficas de cada pa\u00eds
    • Autoria vs explora\u00e7\u00e3o econ\u00f4mica
    • Engloba tanto c\u00f3digo fonte como bin\u00e1rios
    "},{"location":"aulas/09-licencas/slides/#direito-autoral-brasileiro","title":"Direito autoral brasileiro","text":"

    N\u00e3o \u00e9 necess\u00e1rio registro. N\u00e3o vale para ideias.

    • Direito moral:
      • assegura a autoria da obra ao autor original
      • integridade da obra
      • instransfer\u00edvel e irrevog\u00e1vel
    • Direito patrimonial:
      • explora\u00e7\u00e3o econ\u00f4mica da obra.
      • licenciado ou cedido
      • copyright em ingl\u00eas
    "},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante","title":"Por que isto \u00e9 importante?","text":"

    O dono dos direitos autorais (patrimoniais) pode controlar:

    1. Distribui\u00e7\u00e3o, parcial ou total;
    2. Cria\u00e7\u00e3o de obras derivadas
    3. Reprodu\u00e7\u00e3o (execu\u00e7\u00e3o)
    "},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_1","title":"Por que isto \u00e9 importante?","text":"

    De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?

    "},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-durante-o-expediente","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware durante o expediente.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_2","title":"Por que isto \u00e9 importante?","text":"

    De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?

    "},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-fora-do-expediente-e-decide-lancar-um-produto-nao-relacionado","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware fora do expediente e decide lan\u00e7ar um produto n\u00e3o relacionado.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_3","title":"Por que isto \u00e9 importante?","text":"

    De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?

    "},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-fora-do-expediente-e-decide-lancar-um-produto-concorrente","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware fora do expediente e decide lan\u00e7ar um produto concorrente.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_4","title":"Por que isto \u00e9 importante?","text":"

    De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?

    "},{"location":"aulas/09-licencas/slides/#um-programador-faz-um-freelance-e-entrega-um-projeto-para-uma-empresa-ele-pode-reutilzar-parte-do-codigo-em-outros-projetos-para-outras-empresas","title":"Um programador faz um freelance e entrega um projeto para uma empresa. Ele pode reutilzar parte do c\u00f3digo em outros projetos (para outras empresas)?","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_5","title":"Por que isto \u00e9 importante?","text":"

    De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?

    "},{"location":"aulas/09-licencas/slides/#um-prestador-de-servicos-contratado-como-empresa-via-cnpj-participa-de-um-projeto-terceirizado-junto-com-outros-pjs","title":"Um prestador de servi\u00e7os (contratado como empresa via CNPJ) participa de um projeto terceirizado, junto com outros PJs.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_6","title":"Por que isto \u00e9 importante?","text":"

    Nenhum dos casos acima tem respostas fixas. Tudo depende de um monte de fatores jur\u00eddicos e do qu\u00ea cada um assinou. Alguns guias interessantes:

    • Association of Software Professionals
    • Start-se
    • Legal Nature - EULA
    "},{"location":"aulas/09-licencas/slides/#contexto-1-propriedade-intelectual-e-work-for-hire","title":"Contexto 1: Propriedade intelectual e work-for-hire","text":"
    • Contexto brasilero: \"Pela nossa lei de software, a n\u00e3o ser que expressamente dito o contr\u00e1rio, aquele que contrata o desenvolvimento \u00e9 titular original do software resultante\" [1]
    • Contexto americano: work-for-hire determina que software feito sob encomenda pertence a quem contratou o servi\u00e7o [2]

    Fontes 1 2

    "},{"location":"aulas/09-licencas/slides/#contexto-2-projetos-open-source","title":"Contexto 2: projetos open source","text":"

    Contributor License Agreement \u00e9 um documento de cess\u00e3o de copyright (direitos de explora\u00e7\u00e3o comercial).

    • D\u00e1 ao projeto uma licen\u00e7a n\u00e3o exclusiva (normalmente) e irrevog\u00e1vel para o projeto explorar sua contribui\u00e7\u00e3o
    • Mant\u00e9m autoria
    • Isenta o projeto de responsabilidades sobre suas contribui\u00e7\u00f5es
    "},{"location":"aulas/09-licencas/slides/#contexto-3-comercializacao-de-software","title":"Contexto 3: comercializa\u00e7\u00e3o de software","text":"

    End User License Agreement (EULA): Termo usado para aquelas condi\u00e7\u00f5es que (n\u00e3o lemos) aceitamos ao instalar software propriet\u00e1rio ou nos registramos em um site/servi\u00e7o.

    "},{"location":"aulas/09-licencas/slides/#_1","title":"Licen\u00e7as de software","text":"

    Ignorado por aproximadamente 90% dos usu\u00e1rios (fonte)

    "},{"location":"aulas/09-licencas/slides/#end-user-license-agreement","title":"End User License Agreement","text":"

    E por algumas empresas... Fonte

    "},{"location":"aulas/09-licencas/slides/#end-user-license-agreement_1","title":"End User License Agreement","text":"

    Restri\u00e7\u00f5es t\u00edpicas encontradas em EULAs:

    • Software \u00e9 licenciado, n\u00e3o vendido;
    • \u00c9 proibido engenharia reversa
    • N\u00e3o pode modificar ou explorar limita\u00e7\u00f5es / vulnerabilidades
    • Isenta responsabilidades pelo (mau) uso do software
    "},{"location":"aulas/09-licencas/slides/#eula-servicos","title":"EULA (servi\u00e7os)","text":"

    Informa\u00e7\u00f5es t\u00edpicas encontradas em EULAs de servi\u00e7os:

    • Restri\u00e7\u00f5es de idade;
    • Uso dos dados coletados:
    • T\u00e9rmino unilateral do servi\u00e7o
    • Garantias de disponibilidade e responsabilidade

    Legal Nature - EULA

    "},{"location":"aulas/09-licencas/slides/#eula-aws","title":"EULA (AWS)","text":"

    fonte: https://aws.amazon.com/service-terms/

    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia","title":"Um pouco de hist\u00f3ria","text":""},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_1","title":"Um pouco de hist\u00f3ria","text":"

    Richard Stallman fez um interpretador Lisp (MIT ~ 1985)

    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_2","title":"Um pouco de hist\u00f3ria","text":"
    • Uma empresa chamada Symbolics licenciou o LISP do MIT para rodar em m\u00e1quinas como a acima
    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_3","title":"Um pouco de hist\u00f3ria","text":"
    • Uma empresa chamada Symbolics licenciou o LISP do MIT para rodar em m\u00e1quinas como a acima
    • Fez modifica\u00e7\u00f5es no software
    • Deu um jeito de n\u00e3o devolv\u00ea-las para o MIT....
    • E eliminou a competi\u00e7\u00e3o...
    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_4","title":"Um pouco de hist\u00f3ria","text":"
    • Stallman ficou #$@#$@#$@
    • e criou a primeira licen\u00e7a de software livre: Emacs General Public License
    "},{"location":"aulas/09-licencas/slides/#principal-caracteristica","title":"Principal caracter\u00edstica:","text":"
    1. Toda c\u00f3pia do programa dever\u00e1 estar acompanhada do c\u00f3digo fonte;
    2. Se uma modifica\u00e7\u00e3o do software for distribu\u00edda, ela dever\u00e1 estar sujeita aos mesmos termos do software original;
    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia-1985","title":"Um pouco de hist\u00f3ria - 1985","text":"
    • GNU Manifesto: descrevia um esfor\u00e7o em criar um sistema completamente livre cujo destino estivesse nas m\u00e3os dos usu\u00e1rios
    • GNU/Hurd: todas as ferramentas de linha de comando das distribui\u00e7\u00f5es modernas vieram desse projeto
    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia-1990","title":"Um pouco de hist\u00f3ria - 1990","text":"
    • Linus Torvalds tinha um kernel experimental \"pronto\".
    • Liberava uma vers\u00e3o nova toda semana;
    • Recebia contribui\u00e7\u00f5es de outros interessados.
    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_5","title":"Um pouco de hist\u00f3ria","text":"

    Leitura complementar: Free Software, Free Society: Selected Essays of Richard M. Stallman.

    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_6","title":"Um pouco de hist\u00f3ria","text":"

    Leitura complementar: Just for Fun: The Story of an Accidental Revolutionary, Linus Torvalds and David Diamond

    "},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre","title":"Licen\u00e7as de software (livre)","text":"

    Criadas pela Free Software Foundation visando garantir 4 liberdades para um usu\u00e1rio ao usar um software:

    1. Execu\u00e7\u00e3o sem restri\u00e7\u00f5es
    2. Estudo e modifica\u00e7\u00e3o do software;
    3. Redistribuir c\u00f3pias;
    4. Redistribuir c\u00f3pias das suas modifica\u00e7\u00f5es.

    Distribuir os fontes \u00e9 pr\u00e9-requisito dos itens 1 e 3!

    Chamadas tamb\u00e9m de rec\u00edprocas.

    "},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre_1","title":"Licen\u00e7as de software (livre)","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre-reciprocas","title":"Licen\u00e7as de software livre - rec\u00edprocas","text":"

    Copyleft: S\u00edmbolo \u00e9 o contr\u00e1rio do copyright, cujo objetivo seria restringir os usu\u00e1rios

    "},{"location":"aulas/09-licencas/slides/#open-source-iniciative","title":"Open Source Iniciative","text":"
    • Fundada para difundir um discurso menos anti-comercial e ideol\u00f3gico
    • Tamb\u00e9m difunde benef\u00edcios \"pragm\u00e1ticos\" do uso de software \"de c\u00f3digo aberto\"
    • Free causa confus\u00e3o em ingl\u00eas
      • Gr\u00e1tis (free as in beer)
      • Livre (free as in freedom)
    • Fundada por Eric Raymond e Bruce Perens
    "},{"location":"aulas/09-licencas/slides/#licencas-de-software-de-codigo-aberto","title":"Licen\u00e7as de software de c\u00f3digo aberto","text":"

    Mais associadas a Open Source Iniciative, s\u00e3o consideradas menos \"ideol\u00f3gicas\".

    • Muitas vezes chamadas de permissivas;
    • Normalmente n\u00e3o garatem a liberdade 3;
    • Podem fazer outras pequenas exig\u00eancias ou restri\u00e7\u00f5es

    Exemplos: MIT, BSD

    • Permitem a distribui\u00e7\u00e3o de software com partes propriet\u00e1rias
    • Permitem a venda e completo rebranding do software sem nenhuma contribui\u00e7\u00e3o para o autor original.
    "},{"location":"aulas/09-licencas/slides/#licencas-qual-usar","title":"Licen\u00e7as: qual usar?","text":"

    https://choosealicense.com/licenses/

    "},{"location":"aulas/09-licencas/slides/#desafio-de-traducao","title":"Desafio de tradu\u00e7\u00e3o","text":""},{"location":"aulas/09-licencas/slides/#skill-traducao-aceita-5xp-ao-menos-40-string-traduzidas","title":"Skill \"Tradu\u00e7\u00e3o aceita!\" (5XP): Ao menos 40 string traduzidas","text":""},{"location":"aulas/09-licencas/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_3","title":"Licen\u00e7as de Software","text":""},{"location":"aulas/09-licencas/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr_1","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/10-minha-primeira-contribuicao/","title":"10 - Minha primeira contribui\u00e7\u00e3o","text":"

    Esta aula n\u00e3o tem atividade pr\u00e1tica guidada. Faremos aula est\u00fadio com atendimento para encontrar projetos e issues interessantes.

    "},{"location":"aulas/10-minha-primeira-contribuicao/slides/","title":"Explorando seu projeto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#_1","title":"Explorando seu projeto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#contribuicao-de-codigo","title":"Contribui\u00e7\u00e3o de c\u00f3digo","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#minha-primeira-contribuicao-de-codigo","title":"Minha primeira contribui\u00e7\u00e3o de c\u00f3digo","text":"

    Bons projetos usam tags para facilitar a recep\u00e7\u00e3o de novatos

    • good-first-issue
    • newcomers
    • low effort
    • difficulty novice
    • easy
    "},{"location":"aulas/10-minha-primeira-contribuicao/slides/#agregadores-de-projetos","title":"Agregadores de projetos","text":"
    • https://github.com/MunGell/awesome-for-beginners
    • https://www.codetriage.com/
    • https://up-for-grabs.net/
    • http://github-help-wanted.com/
    "},{"location":"aulas/10-minha-primeira-contribuicao/slides/#sugestao-i-pandas","title":"Sugest\u00e3o I - Pandas","text":"

    Biblioteca de tratamento de dados usada em Ci\u00eancia dos Dados.

    • Projeto complexo, com muitos casos de uso especiais
    • Toneladas de funcionalidades de visualiza\u00e7\u00e3o textual e gr\u00e1fica de dados
    • Python \u00e9 familiar para a maioria

    Tickets de testes s\u00e3o, em geral, f\u00e1ceis para come\u00e7ar e \u00fateis para a comunidade.

    "},{"location":"aulas/10-minha-primeira-contribuicao/slides/#sugestao-ii-escolha-seu-proprio-projeto","title":"Sugest\u00e3o II: Escolha seu pr\u00f3prio projeto :)","text":"
    • https://github.com/MunGell/awesome-for-beginners
    • https://www.codetriage.com/
    • https://up-for-grabs.net/
    • http://github-help-wanted.com/
    "},{"location":"aulas/10-minha-primeira-contribuicao/slides/#hoje","title":"Hoje","text":"
    1. escolher issue e projeto
    2. montar ambiente
      • baixar c\u00f3digo
      • compilar
      • rodar sua vers\u00e3o
    3. reproduzir a issue
    "},{"location":"aulas/11-contribuicoes-externas/","title":"11 - Contribui\u00e7\u00f5es externas","text":"

    Esta aula n\u00e3o tem atividade pr\u00e1tica guidada, mas tem uma parte expositiva importante. N\u00e3o esque\u00e7a de olhar os slides de hoje para relembrar.

    "},{"location":"aulas/11-contribuicoes-externas/slides/","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#_1","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-de-debug","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#minha-primeira-contribuicao-de-codigo","title":"Minha primeira contribui\u00e7\u00e3o de c\u00f3digo","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-para-debugar-qualquer-coisa","title":"Dicas para debugar (qualquer coisa)","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#9-regras-de-debug","title":"9 regras de debug","text":"
    1. UNDERSTAND THE SYSTEM
    2. MAKE IT FAIL
    3. QUIT THINKING AND LOOK
    4. DIVIDE AND CONQUER
    5. CHANGE ONE THING AT A TIME
    6. KEEP AN AUDIT TRAIL
    7. CHECK THE PLUG
    8. GET A FRESH VIEW
    9. IF YOU DIDN'T FIX IT, IT AIN'T FIXED
    "},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#nada-acontece-se-nao-conseguirmos","title":"Nada acontece se n\u00e3o conseguirmos","text":"
    1. Baixar a vers\u00e3o de desenvolvimento
    2. Instalar todas as depend\u00eancias
    3. Compilar nossa pr\u00f3pria vers\u00e3o
    4. Rodar testes na vers\u00e3o do master
    "},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system_1","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#ferramentas-importantes","title":"Ferramentas importantes:","text":"
    1. Virtual environments: venv, virtualenv, pipenv, conda
    2. setuptools - development mode
    3. Debugging
      • pdb
      • fun\u00e7\u00e3o breakpoint() (tutorial)
    "},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system_2","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#conheca-suas-ferramentas","title":"Conhe\u00e7a suas ferramentas","text":"
    • Debugging visual linha a linha
    • Stacktrace
    • Busca em projeto inteiro
    • Ir para defini\u00e7\u00e3o de fun\u00e7\u00e3o
    "},{"location":"aulas/11-contribuicoes-externas/slides/#debugar-usando-print-e-perda-de-tempo","title":"Debugar usando print \u00e9 perda de tempo","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#2-make-it-fail","title":"2. Make it fail","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#reproduza-seu-bug","title":"Reproduza seu bug","text":"
    • Crie um exemplo m\u00ednimo que reproduza o bug desejado ou que usaria a feature que quer implementar
      • entrada de exemplo e sa\u00edda esperada vs sa\u00edda obtida
    • Possivelmente isto j\u00e1 foi descrito na issue escolhida.
    • Anote elementos que te ajudem a encontrar onde isto ocorre no c\u00f3digo (fun\u00e7\u00f5es usadas, elementos de interface gr\u00e1fica, mensagens de erro.)
    "},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#encontre-onde-esta-o-problema-e-leia-o-codigo-com-atencao","title":"Encontre onde est\u00e1 o problema e leia o c\u00f3digo com aten\u00e7\u00e3o","text":"
    1. Encontre no c\u00f3digo onde o bug pode estar
    2. Comece geral (em qual arquivo est\u00e1 a funcionalidade?) e v\u00e1 restringindo (em qual fun\u00e7\u00e3o o bug \"explode\"?)
    3. Ferramentas de debug s\u00e3o essenciais. Veja o item 1.
      • N\u00e3o atenderei ningu\u00e9m que esteja debugando s\u00f3 com print
    "},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look_1","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#buscando-por-nomes-de-arquivos","title":"Buscando por nomes de arquivos","text":"

    Comando find (man page)

    Exemplo: procurar por arquivos cujo nome \u00e9 aceito por uma certa express\u00e3o regular come\u00e7ando no diret\u00f3rio atual.

    $ find -iname \"regexp\" .

    "},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look_2","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#buscando-no-conteudo-dos-arquivos","title":"Buscando no conte\u00fado dos arquivos","text":"

    Comando grep (man page)

    $ grep [OPTIONS] PATTERN FILES

    • PATTERN: express\u00e3o regular
    • FILES: lista de diret\u00f3rios ou arquivos
    "},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look-grep","title":"3. Quit thinking and look - grep","text":"

    Exemplo 1: buscar todos arquivos nas pasta atual (.) e subpastas com o texto \"dialog\" ignorando mai\u00fasculas/min\u00fasculas.

    $ grep -r -i dialog .

    "},{"location":"aulas/11-contribuicoes-externas/slides/#_2","title":"Dicas de Debug","text":"

    Exemplo 2: Listas todos os arquivos .cpp que fazem algum include

    $ grep -r --include \"*cpp\" \"#include\" .

    "},{"location":"aulas/11-contribuicoes-externas/slides/#sua-ideeditor-devem-ter-algo-parecido-procure-e-use","title":"Sua IDE/editor devem ter algo parecido. Procure e use.","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#4-divide-and-conquer","title":"4. Divide and Conquer","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#crie-um-plano-de-acao","title":"Crie um plano de a\u00e7\u00e3o","text":"
    1. Por que o bug ocorre?
      • Est\u00e1 relacionado a qual fun\u00e7\u00e3o?
      • Qual vari\u00e1vel tem o valor errado?
    2. O que deve ser mudado para que pare de ocorrer?

    Pr\u00e9-requisito: debugar visualmente usando alguma IDE / editor

    "},{"location":"aulas/11-contribuicoes-externas/slides/#5-change-one-thing-at-a-time","title":"5. Change one thing at a time","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#um-bom-pr-muda-o-minimo-possivel","title":"Um bom PR muda o m\u00ednimo poss\u00edvel","text":"
    • use v\u00e1rias branches se quiser testar ideias diferentes
    • git commit \u00e9 gr\u00e1tis. Quando chegar na vers\u00e3o final \u00e9 s\u00f3 juntar tudo e mandar.
    • git rebase para atualizar seu branch com o master upstream caso necess\u00e1rio.
    "},{"location":"aulas/11-contribuicoes-externas/slides/#6-keep-an-audit-trail","title":"6. Keep an audit trail","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#registre-suas-descobertas","title":"Registre suas descobertas","text":"
    • Log de como voc\u00ea encontrou onde mexer
    • Log de todos arquivos de interesse e seus usos
    • Log de todas as pesquisas feitas
    • Log de todas as modifica\u00e7\u00f5es feitas
    • git commit \u00e9 \u00fatil para registrar testes tamb\u00e9m

    N\u00e3o se esque\u00e7a:git diff \u00e9 seu melhor amigo

    "},{"location":"aulas/11-contribuicoes-externas/slides/#7-check-the-plug","title":"7. Check the plug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#nunca-se-esqueca-de-testar-a-solucoes-mais-simples-primeiro","title":"Nunca se esque\u00e7a de testar a solu\u00e7\u00f5es mais simples primeiro","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#8-get-a-fresh-view","title":"8. Get a fresh view","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#empacou","title":"Empacou?","text":"

    \u00c9 por isso que voc\u00eas trabalham em grupo no primeiro bug.

    "},{"location":"aulas/11-contribuicoes-externas/slides/#empacou-mesmo","title":"Empacou mesmo?","text":"

    Para isto serve seu grupo.

    "},{"location":"aulas/11-contribuicoes-externas/slides/#empacou-mesmo_1","title":"Empacou mesmo!?!?!?!?","text":"

    Me chame!

    "},{"location":"aulas/11-contribuicoes-externas/slides/#9-if-you-didnt-fix-it-it-aint-fixed","title":"9. If you didn't fix it, it ain't fixed","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#hora-de-programar","title":"Hora de programar","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#tentem-aplicar-estas-ideias-aos-seus-problemas","title":"Tentem aplicar estas ideias aos seus problemas","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#envie-4-prs-para-projetos-participantes-e-ganhe-uma-camiseta","title":"Envie 4 PRs para projetos participantes e ganhe uma camiseta","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#atividade-extra-hacktoberfest","title":"Atividade extra: hacktoberfest","text":"

    Objetivo: Enviar 3 PRs para projetos externos no m\u00eas de outubro.

    \"metadata\": {\"date\": \"2021-10-31\"}

    "},{"location":"aulas/11-contribuicoes-externas/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#_3","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-de-debug_1","title":"Dicas de debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/12-projeto/slides/","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/12-projeto/slides/#projeto-da-disciplina","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/12-projeto/slides/#ate-agora","title":"At\u00e9 agora","text":"
    • Ferramentas de colabora\u00e7\u00e3o
    • Modifica\u00e7\u00f5es de c\u00f3digo
    • Tradu\u00e7\u00e3o de UI e documenta\u00e7\u00e3o
    • Aspectos n\u00e3o t\u00e9cnicos relacionados
      • licen\u00e7as
      • comunidades
    • Colabora\u00e7\u00e3o em um projeto do Insper
    "},{"location":"aulas/12-projeto/slides/#ate-agora_1","title":"At\u00e9 agora","text":""},{"location":"aulas/12-projeto/slides/#formacao-basica","title":"Forma\u00e7\u00e3o b\u00e1sica","text":"
    • Analisar uma base de c\u00f3digos desconhecida de m\u00e9dio/grande porte e modific\u00e1-la de modo a fazer melhorias e corrigir falhas em um software;
    "},{"location":"aulas/12-projeto/slides/#_1","title":"Projeto da disciplina","text":"
    • Interagir com uma equipe remota de desenvolvedores para entregar c\u00f3digo que atenda aos padr\u00f5es de qualidade e estilo de c\u00f3digo de um projeto;
    "},{"location":"aulas/12-projeto/slides/#projeto-aberto","title":"Projeto Aberto","text":"

    Objetivos:

    1. proporcionar uma experi\u00eancia de trabalho em um projeto real de escolha dos alunos
    2. valorizar diversos tipos de contribui\u00e7\u00f5es, n\u00e3o somente de c\u00f3digo
    3. exercitar autonomia e independ\u00eancia
    "},{"location":"aulas/12-projeto/slides/#projeto-aberto_1","title":"Projeto Aberto","text":""},{"location":"aulas/12-projeto/slides/#organizado-em-dois-blocos-de-5-aulas","title":"Organizado em dois blocos de 5 aulas","text":"
    • 11/05 - 25/05
    • 27/05 - 10/06
    "},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitches-de-projeto","title":"Projeto Aberto - Pitches de projeto","text":"

    Cada bloco se inicia com uma aula de Pitches de Projeto, que \u00e9 uma apresenta\u00e7\u00e3o de 5 minutos apresentando o projeto para o qual voc\u00ea contribuir\u00e1 na semana.

    • Trocar ideias sobre projetos interessantes
    • Ajudar alunos indecisos a escolherem um projeto
    • Se comprometer com uma escolha de projeto
    "},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitch-de-projeto","title":"Projeto Aberto: Pitch de projeto","text":"

    Objetivo: Apresentou um Pitch de projeto. Se o aluno s\u00f3 apresentar o projeto e n\u00e3o fizer contribui\u00e7\u00e3o vale 0 XP.

    \"metadata\": {\"url\": \"url_do_projeto_proposto\", \"filename\": \"pdf da apresentacaoo\"}

    Colocar pdf da apresenta\u00e7\u00e3o na pasta docs/pitches.

    "},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitch-aceito","title":"Projeto Aberto: Pitch aceito!","text":"

    Objetivo: Enviou contribui\u00e7\u00e3o para um projeto apresentado em sala.

    \"metadata\": {\"url\": \"url_do_projeto_proposto\"}

    A ser enviado al\u00e9m da skill da contribui\u00e7\u00e3o.

    "},{"location":"aulas/12-projeto/slides/#projeto-aberto-sugestao-aceita","title":"Projeto Aberto: Sugest\u00e3o aceita!","text":"

    Objetivo: Outro aluno enviou contribui\u00e7\u00e3o para o projeto que voc\u00ea fez Pitch.

    \"metadata\": {\"url\": \"url_da_contribuicao\"}

    A ser enviado pelo aluno que prop\u00f4s o Pitch, que tamb\u00e9m precisa ter contribu\u00eddo.

    "},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitches-de-projeto_1","title":"Projeto Aberto - Pitches de projeto","text":"
    1. Apresentar um pitch \u00e9 uma skill que vale XP
    2. Ajudar colegas interessados no \"seu\" projeto vale XP
    3. Aceitar sugest\u00f5es/ajudas vale XP
    4. Tudo isso \u00e9 al\u00e9m da XP j\u00e1 obtida com as contribui\u00e7\u00f5es
    "},{"location":"aulas/12-projeto/slides/#evitar-alunos-trabalhando-sozinhos","title":"Evitar alunos trabalhando sozinhos.","text":""},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#aprendizado-de-tecnologias-novas","title":"Aprendizado de tecnologias novas","text":"
    • Linguagem de programa\u00e7\u00e3o
    • Biblioteca
    • Tipo de tecnologia: web, mobile, desktop
    "},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto_1","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#aperfeicoamento-em-tecnologias-que-ja-domina","title":"Aperfei\u00e7oamento em tecnologias que j\u00e1 domina","text":"
    • Linguagem de programa\u00e7\u00e3o espec\u00edfica
    • Tipo de tecnologia: web, mobile, desktop
    "},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto_2","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#projetos-de-interesse-pessoal","title":"Projetos de interesse pessoal","text":"
    • Algum software que voc\u00ea usa
    • Melhorar alternativa livre para software propriet\u00e1rio
    • Moonshot: projetos ambiciosos com chance m\u00ednima de sucesso
    • Site AlternativeTo
    "},{"location":"aulas/12-projeto/slides/#hoje","title":"Hoje","text":"
    • Finalizar Projeto DIY
    • Escolher projetos para o primeiro bloco
    • Iniciar trabalhos da segunda parte da disciplina
    "},{"location":"aulas/12-projeto/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/12-projeto/slides/#projeto-da-disciplina_1","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/01-distributed-workflow/","title":"01 - Distributed Development Workflow","text":"

    In this guide, we will work on the standard workflow for contributing to projects hosted on GitHub (which also applies to Git projects in general). Before starting, each student should locate the corresponding issue on the course's GitHub repository for creating their user.

    Our workflow will be based on three main parts. In the first part, we will create a copy of the repository \"insper/dev-aberto\" where we will make all the necessary changes. In the second part, we will send our modifications to the original repository using a Pull Request, which is a request to accept the changes from a forked repository into the original repository. Finally, we will update our fork with modifications sent by colleagues.

    Some key points to highlight in the above workflow:

    1. Even if a user does not have access to the original repository, they can work on their own copy and only submit their modifications to the original repository when everything is ready.
    2. It is necessary for a developer from the original project to \"take responsibility\" for the accepted external modifications.
    3. The Pull requests tab allows developers to discuss proposed modifications and improve them. Every commit made after the creation of the PR is included and can be tested by anyone.
    "},{"location":"lessons/01-distributed-workflow/#creating-your-own-copy","title":"Creating your own copy","text":"

    We will start our workflow by creating a fork of the repository \"insper/dev-aberto\". All our modifications will be made in our fork, on a separate branch (it is recommended to use a different branch for each issue). This way, our modifications are completely isolated from the original code, and we can test them alongside the original code.

    First, create the fork through the GitHub interface. Then, clone your fork and create a new branch called \"issue-X,\" where \"X\" is the number of your issue in the original project.

    $ git checkout -b issue-X

    To ensure that you are in the directory of your fork, execute the following command:

    $ git remote -vv

    The displayed addresses should be those of your fork, not the original project.

    With the fork created and being on the \"issue-X\" branch (you can check using git branch and switch using git checkout issue-X), we will begin making modifications.

    "},{"location":"lessons/01-distributed-workflow/#interacting-with-the-course-repository","title":"Interacting with the course repository","text":"

    The creation of users and addition of skills is done using the command dev-aberto.py.

    Tip

    To use it, you need to install the packages listed in the requirements.txt file.

    Running it in the terminal should list the available commands.

    $ python3 dev-aberto.py

    To check if everything is working correctly, list all registered users. There should be only one registered user (igorsm1).

    "},{"location":"lessons/01-distributed-workflow/#creating-a-user","title":"Creating a user","text":"

    User creation is done with the command:

    $ python3 dev-aberto.py new-user

    This will create three files in the students folder:

    • your-login: basic user information in JSON format.
    • your-login-achievements: encrypted file containing the deliveries of each student in JSON format.
    • your-login.key: cryptographic key for the above file.

    Verify that your user was created correctly by listing the existing users again. Your user should have an asterisk (*) next to the name, indicating that the login.key file is present in the system.

    Danger

    Do not include the *.key file in your PR. It should be sent by email to the professor. Do this now before you forget!

    Also, verify that you can use the command dev-aberto.py compute-grade your-login. If everything is okay, proceed to the next item.

    "},{"location":"lessons/01-distributed-workflow/#adding-a-skill","title":"Adding a skill","text":"

    With the user created, we can add the skill \"First Steps.\" You may have noticed that the professor's key is available (file students/igorsm1.key). This was done so that you have at least one example of how each skill should be added. See below for an example of how the skill should be included:

    $ python3 dev-aberto.py edit-achievements igorsm1

    This will open a file for editing in Vi. The format is a list of objects containing two fields: \"skill_id\" and \"metadata\". See the example below for the first skill

    [\n{\"skill_id\": 1, \"metadata\": {\"date\": \"YYYY-MM-DD\"} }\n]\n

    Tip

    If you want to use another text editor, you can set the environment variable EDITOR just before calling dev-aberto.py.

    Now add the skill to your user following the same pattern seen above. Verify that your skill was correctly added using the compute-grade command.

    Tip

    If your repository is OK, help your classmates.

    "},{"location":"lessons/01-distributed-workflow/#sending-modifications-to-the-original-project","title":"Sending modifications to the original project","text":"

    Now let's create a commit and send it as a Pull Request to the course's repository. Add the created files (excluding the *.key file!) and make a commit with the following message (replace the X with the number of your issue in the repository):

    Add user your-login.\n

    Execute git push and continue.

    With your modifications already in your fork, it's time to send them to the original repository. This is done on the GitHub interface. First, access your fork in the browser, locate your issue-X branch, and click the \"Pull request\" button.

    The title of your Pull Request should be Create user login. Your PR should contain only one commit and should have the branch issue-X created above as the source. In the description of your PR, add the text:

    Closes #X\n

    where X is the number of your user's issue. This automatically closes the issue when (and if) this PR is accepted.

    Warning

    PRs made from main or with more than one commit will not be accepted.

    Use the checklist below to help verify if your work is correct:

    • Created a new user with new-user.
    • Added the \"First Steps\" skill.
    • Checked that the new user has the new skill using compute-grade.
    • Created a PR with only one commit and the correct files.
    • Sent the .key file by email to the professor.
    • Did not include the .key file in the PR.

    Once your PR is accepted, you can remove the issue-X branch.

    "},{"location":"lessons/01-distributed-workflow/#updating-your-fork","title":"Updating your fork","text":"

    After having your PR accepted, you may have noticed that your commit appears in the original project's main branch but does not appear in your fork. This is because a fork is not automatically updated when its corresponding original repository receives new commits.

    To make this happen, you need to perform a manual synchronization. For now, we will use the GitHub interface to do this.

    Visit your fork again. Now, there should be an option to sync your fork with the original repository. Use it to make your main branch receive the new commits.

    Warning

    Sync your repository whenever you work on a new PR. This will prevent many conflicts when merging your modifications into the original repository.

    "},{"location":"lessons/01-distributed-workflow/slides/","title":"Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#open-source-development","title":"Open Source Development","text":""},{"location":"lessons/01-distributed-workflow/slides/#_1","title":"Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-overview-distributed-coding-workflow","title":"Course overview + Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"Vers\u00e3o 2023/2: Igor Montagner ( igorsm1@insper.edu.br) )","text":""},{"location":"lessons/01-distributed-workflow/slides/#burocracy","title":"Burocracy","text":""},{"location":"lessons/01-distributed-workflow/slides/#meetings","title":"Meetings","text":"
    • MON 07:30 - 09:30
    • WED 07:30 - 09:30
    "},{"location":"lessons/01-distributed-workflow/slides/#office-hours","title":"Office Hours","text":"
    • On demand
    "},{"location":"lessons/01-distributed-workflow/slides/#assessment","title":"Assessment","text":"
    • Project based course with both individual and group work
    "},{"location":"lessons/01-distributed-workflow/slides/#learning-objectives","title":"Learning Objectives","text":"

    By the end of the course, the student will be able to:

    • Analyze an unfamiliar medium/large codebase and modify it to make improvements and fix software issues.
    • Interact with a remote team of developers to deliver code that meets the quality and code style standards of a project.
    • Understand the differences in open-source software licenses and how they impact the distribution and reuse of a codebase.
    "},{"location":"lessons/01-distributed-workflow/slides/#objectives-summary-version","title":"Objectives (summary version)","text":"

    By the end of the course, the student will be able to:

    • Download, understand, and modify the code of a project.
    • Successfully have their modifications accepted by the original project.
    • Understand aspects related to the distribution of software.
      • Licenses
      • Bug Tracker, Version Control, Governance, etc.
      • Documentation / Internationalization
      • User communities
    "},{"location":"lessons/01-distributed-workflow/slides/#course-syllabus","title":"Course Syllabus","text":"
    1. Software development and commercialization models.
    2. Software licenses and their impact on reuse and distribution.
    3. Tools for collaborative software development (open source or proprietary).
    4. Software and code documentation.
    5. Software translation and internationalization.
    6. Source code compilation and distribution systems.
    7. Human and community aspects in software development.
    8. Case studies of successful projects.
    "},{"location":"lessons/01-distributed-workflow/slides/#textbook","title":"Textbook","text":"

    Available online at https://producingoss.com

    "},{"location":"lessons/01-distributed-workflow/slides/#course-materials","title":"Course Materials","text":"

    GitHub: https://github.com/insper/open-dev

    Website: https://insper.github.io/open-dev/

    Blackboard will be used for announcements only. All content will be available on GitHub.

    "},{"location":"lessons/01-distributed-workflow/slides/#justification-for-the-course","title":"Justification for the Course","text":"

    In previous courses, we worked on:

    • Creating a new project.
    • Projects that typically end after the course.
    • Projects that are never used by anyone.
    "},{"location":"lessons/01-distributed-workflow/slides/#_2","title":"Distributed coding workflow","text":"

    In the industry, we usually work on existing projects:

    • Fixing issues.
    • Making improvements.
    • Projects used by multiple users.
    "},{"location":"lessons/01-distributed-workflow/slides/#why-did-i-create-the-course","title":"Why did I create the course?","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_1","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_2","title":"My motivation (Igor)","text":"
    • I've worked alone for 5 years
    • I've spent countless hours writting
      • a scientific paper about it
      • documentation for users and developers
    "},{"location":"lessons/01-distributed-workflow/slides/#_3","title":"Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#_4","title":"Distributed coding workflow","text":"
    • I learned a lot by doing this
    • I might have solved a problem no one has!
    "},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_3","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#its-not-enough-anymore-to-create-software-for-learning-purposes","title":"It's not enough (anymore) to create software for learning purposes","text":""},{"location":"lessons/01-distributed-workflow/slides/#i-would-like-to-have-some-impact","title":"I would like to have (some) impact","text":"
    • To create/contribute to software other people use
    • To write texts/tutorials that are read by someone
    • To be a part of a community that would miss me if I stop participating
    "},{"location":"lessons/01-distributed-workflow/slides/#why-are-you-here","title":"Why are you here?","text":"

    https://forms.gle/uDvnDoyxBsVoHy6S8

    "},{"location":"lessons/01-distributed-workflow/slides/#achievements-in-this-course-so-far","title":"Achievements in this Course So Far","text":""},{"location":"lessons/01-distributed-workflow/slides/#vitoria-20182","title":"Vit\u00f3ria - 2018/2","text":""},{"location":"lessons/01-distributed-workflow/slides/#spyder","title":"Spyder","text":"
    • Accepted: [1]
    "},{"location":"lessons/01-distributed-workflow/slides/#pandas","title":"Pandas","text":"
    • Accepted: [1]
    "},{"location":"lessons/01-distributed-workflow/slides/#paulo-20182","title":"Paulo - 2018/2","text":""},{"location":"lessons/01-distributed-workflow/slides/#cataclysm-dda","title":"Cataclysm: DDA","text":"
    • Accepted: [1]
    "},{"location":"lessons/01-distributed-workflow/slides/#class-20192","title":"Class - 2019/2","text":""},{"location":"lessons/01-distributed-workflow/slides/#15-students","title":"15 students","text":""},{"location":"lessons/01-distributed-workflow/slides/#19-different-projects-14-accepted-prs","title":"19 different projects, 14 accepted PRs","text":""},{"location":"lessons/01-distributed-workflow/slides/#pandas-6-accepted-contributions","title":"Pandas - 6 accepted contributions","text":""},{"location":"lessons/01-distributed-workflow/slides/#class-20201","title":"Class 2020/1","text":""},{"location":"lessons/01-distributed-workflow/slides/#16-students","title":"16 students","text":""},{"location":"lessons/01-distributed-workflow/slides/#15-different-projects-17-accepted-prs","title":"15 different projects, 17 accepted PRs","text":""},{"location":"lessons/01-distributed-workflow/slides/#pandas-matplotlib-bokeh-pygame","title":"Pandas, Matplotlib, Bokeh, Pygame","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-introduction","title":"Course Introduction","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-introduction_1","title":"Course Introduction","text":"

    Proposal: The course will be gamified.

    • Each student will create an avatar in the course.
    • Activities for submission earn XP.
    • Each activity is represented by a skill with a funny name.
    • All work submissions are done via Pull Request on the course's repository.
    • Significant freedom of choice
    "},{"location":"lessons/01-distributed-workflow/slides/#course-introduction-skills","title":"Course Introduction (Skills)","text":"
    • Tutorial: Guided preparatory activities in the classroom
    • Code: Code contributions to external projects
    • Community: Non-technical contributions that can benefit users and developers of a project, such as documentation and translations
    • Impact: Significant results achieved by the student's participation in open projects
    "},{"location":"lessons/01-distributed-workflow/slides/#full-list-of-skills","title":"Full list of skills","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-introduction-syllabus","title":"Course Introduction (syllabus)","text":"
    • August/September: Tutorial
      • 30-60 minutes of lecture/discussions
      • Activities focused on specific topics
    • October/November: Project
      • Autonomy to define which tasks will be done
      • Semi-free choice of projects
    "},{"location":"lessons/01-distributed-workflow/slides/#course-introduction-assessment","title":"Course Introduction (assessment)","text":"
    • All submissions are individual.
    • Each learning objective is measured by several skills.
      • Some skills are mandatory.
      • Repeating a skill can earn more or fewer points than the first time.
    • Grades are based on the amount of XP obtained.
      • Freedom to decide where to invest time/effort.
    "},{"location":"lessons/01-distributed-workflow/slides/#course-introduction-assessment_1","title":"Course Introduction (assessment)","text":"
    • Final grade is a combination of XP and acquired skills.
    • Bi-weekly reports sent by email.
    • Complete conditions on the rules and skills page.
    "},{"location":"lessons/01-distributed-workflow/slides/#discussion-development-workflow","title":"Discussion: Development Workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#how-does-git-work","title":"How does Git work?","text":"

    Source: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    Source: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    "},{"location":"lessons/01-distributed-workflow/slides/#activity-first-steps","title":"Activity: First Steps","text":"

    Objective: Submit your first Pull Request to the course's repository.

    "},{"location":"lessons/01-distributed-workflow/slides/#open-source-development_1","title":"Open Source Development","text":""},{"location":"lessons/01-distributed-workflow/slides/#_5","title":"Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-overview-distributed-coding-workflow_1","title":"Course overview + Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2: Igor Montagner ( igorsm1@insper.edu.br) )","text":""},{"location":"lessons/02-software-and-communities/","title":"02 - Software and Communities","text":"

    less02in

    The activity for this class involves creating a presentation explaining how the communities around the following software projects are organized:

    1. Visual Studio Code
    2. NeoVIM
    3. Django
    4. Blender
    5. Kdenlive
    6. NewPipe

    Each group of 3 students should choose one of the above projects and research the following points.

    1. What is the purpose of the project?
    2. Where is the source code located? Which technologies are used?
    3. What is the license? Are there public guidelines or any kind of bureaucracy for contributions?
    4. Is there developer documentation?
      • Does it seem easy to compile/run?
      • Does it seem easy to modify?
    5. How is the project governed?
      • Who are the key figures (developers, evangelists, etc.) in the project? If the project is large, mention two different areas in this item.
      • Is there a public roadmap?
      • Are external contributions accepted? How can one contribute?
      • Who makes the decisions?
    6. Where can project members be found? Where can one seek help?
    7. Does the project raise funds?
      • Are there companies sponsoring developers?
      • How much has been raised? And spent? For what purposes?
      • Who decides how the funds are spent?

    Each group must create a 10 minutes presentation for the next meeting that addresses these questions.

    "},{"location":"lessons/02-software-and-communities/slides/","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#open-source-development","title":"Open Source Development","text":""},{"location":"lessons/02-software-and-communities/slides/#_1","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#software-and-communities","title":"Software and Communities","text":""},{"location":"lessons/02-software-and-communities/slides/#20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"2023/2: Igor Montagner ( igorsm1@insper.edu.br) )","text":""},{"location":"lessons/02-software-and-communities/slides/#github-model-fork-pull-request","title":"Github Model: fork + pull request","text":"

    Source: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    "},{"location":"lessons/02-software-and-communities/slides/#github-model-fork-pull-request_1","title":"Github Model: fork + pull request","text":"

    Source: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    "},{"location":"lessons/02-software-and-communities/slides/#workflow-other-models","title":"Workflow: other models","text":"
    1. Send patch via email list (e.g., Linux)
    2. Code review tools (e.g., KDE - Phabricator)
    3. Patch is attached to the Bug Tracker (e.g., Haiku, KDE)
    4. Does not receive external contributions
    "},{"location":"lessons/02-software-and-communities/slides/#review-of-last-classs-prs","title":"Review of last class's PRs","text":""},{"location":"lessons/02-software-and-communities/slides/#common-errors","title":"Common Errors","text":""},{"location":"lessons/02-software-and-communities/slides/#error-0-login-achievements-file-has-errors","title":"Error 0: login-achievements file has errors","text":"

    How to fix: Create a new commit with the correct date.

    "},{"location":"lessons/02-software-and-communities/slides/#error-1-extra-files-in-the-pr","title":"Error 1: Extra files in the PR","text":"

    Error: Modifying files not related to your proposed changes.

    "},{"location":"lessons/02-software-and-communities/slides/#_2","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Ideal:

    1. A Pull Request should contain only the files related to the proposed modification.
    2. Each proposed modification is in a separate Pull Request.

    "},{"location":"lessons/02-software-and-communities/slides/#error-1-extra-files-in-the-pr_1","title":"Error 1: Extra files in the PR","text":"

    How to fix: git revert creates a commit that undoes previous changes.

    Extra options:

    • --no-commit: Only adds the modifications, but does not make the commit. Allows undoing part of a commit.

    Source: https://www.atlassian.com/git/tutorials/

    "},{"location":"lessons/02-software-and-communities/slides/#error-2-non-descriptive-commit-messages","title":"Error 2: Non-descriptive commit messages","text":"

    How to fix: git commit --amend allows modifying the last commit made.

    "},{"location":"lessons/02-software-and-communities/slides/#error-3-pull-request-with-a-poor-description","title":"Error 3: Pull Request with a poor description","text":"

    How to fix: Simply edit it in the Github interface.

    "},{"location":"lessons/02-software-and-communities/slides/#fix-at-home-and-request-review-via-github","title":"Fix at home and request review via Github","text":""},{"location":"lessons/02-software-and-communities/slides/#reminder-if-you-dont-push-nothing-is-broken","title":"Reminder: If you don't push, nothing is broken","text":""},{"location":"lessons/02-software-and-communities/slides/#reminder-ii-git-log-shows-your-current-history","title":"Reminder II: git log shows your current history","text":""},{"location":"lessons/02-software-and-communities/slides/#tip-if-you-modified-already-published-commits-use-git-push-f-to-overwrite","title":"Tip: If you modified already published commits, use git push -f to overwrite","text":""},{"location":"lessons/02-software-and-communities/slides/#not-all-students-enrolled-in-the-course-did-the-activity-from-the-last-class","title":"Not all students enrolled in the course did the activity from the last class!","text":"
    python dev-aberto.py list-users\n
    "},{"location":"lessons/02-software-and-communities/slides/#software-communities","title":"Software Communities","text":""},{"location":"lessons/02-software-and-communities/slides/#discussion","title":"Discussion","text":""},{"location":"lessons/02-software-and-communities/slides/#_3","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Question 1: What are the software you use the most in your daily life?

    "},{"location":"lessons/02-software-and-communities/slides/#_4","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_5","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_6","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Question 2: Who is the main developer of the project?

    "},{"location":"lessons/02-software-and-communities/slides/#example-linux-kernel","title":"Example: Linux Kernel","text":"

    Foundation supports the development of the Linux Kernel and the creation of an open-source software ecosystem around it.

    Support:

    • Financial
    • Intellectual property
    • Infrastructure
    • Services and training
    "},{"location":"lessons/02-software-and-communities/slides/#example-linux-kernel_1","title":"Example: Linux Kernel","text":"

    Companies that sponsor development:

    1. Individual (11.95%)
    2. Intel (10.01%)
    3. Red Hat (8.90%)
    4. Unknown (4.09%)
    5. IBM (3.79%)
    6. SUSE (3.49%)
    7. Linaro (2.96%)
    8. Consultants (2.96%)
    9. Google (2.79%)
    10. Samsung (2.28%)

    Source: \"2020 Linux Kernel Development Report\"

    "},{"location":"lessons/02-software-and-communities/slides/#example-ubuntu","title":"Example: Ubuntu","text":""},{"location":"lessons/02-software-and-communities/slides/#_7","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_8","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_9","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_10","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Private company controls the development of Ubuntu. Obtains resources via:

    • Donations
    • Development and consulting services
    • Training
    "},{"location":"lessons/02-software-and-communities/slides/#example-gitlab","title":"Example: Gitlab","text":""},{"location":"lessons/02-software-and-communities/slides/#_11","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_12","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_13","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_14","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Company funded so far by VC (Venture Capital) in search of profit.

    • Option of free plans with open-source software
    • Option of corporate plans with more features and support
    • On-premises installations
    "},{"location":"lessons/02-software-and-communities/slides/#example-elementary","title":"Example: Elementary","text":""},{"location":"lessons/02-software-and-communities/slides/#_15","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_16","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Linux distribution led by a \"tiny\" company focused on the user experience. Resources are obtained through:

    • Individual and corporate sponsorships
    • Pay-what-you-want model (app store and operating system)
    • Hardware with the pre-installed system

    "},{"location":"lessons/02-software-and-communities/slides/#example-linux-mint","title":"Example: Linux Mint","text":""},{"location":"lessons/02-software-and-communities/slides/#_17","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Linux distribution aimed at everything working right after installation. Considered good for beginners.

    "},{"location":"lessons/02-software-and-communities/slides/#other-sources","title":"Other sources","text":"

    Various other ways of getting support and funding

    "},{"location":"lessons/02-software-and-communities/slides/#reasons-for-funding-company","title":"Reasons for funding (company)","text":""},{"location":"lessons/02-software-and-communities/slides/#_18","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
    • \"Acquire\" experts in a technology
    • Sell support or consulting services
    • Marketing
    • Software license \"obliges\"
    "},{"location":"lessons/02-software-and-communities/slides/#_19","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_20","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Not everything funded ends up in a \"usable\" format for others (e.g., Android/Linux, TiVO)

    \"Tivoization is the practice of designing hardware that incorporates software under the terms of a copyleft software license like the GNU General Public License (GNU GPL), but uses hardware restrictions or digital rights management (DRM) to prevent users from running modified versions of the software on that hardware\" [Wikipedia]

    "},{"location":"lessons/02-software-and-communities/slides/#reasons-for-contributing-individual","title":"Reasons for contributing (individual)","text":"
    • Professional
      • Reputation / CV
      • Business needs
    • Personal
      • Altruism / Ideology
      • Sense of personal fulfillment
      • Exercise creativity
      • Solve a problem of personal interest
    "},{"location":"lessons/02-software-and-communities/slides/#activity-exploring-the-environment-of-a-project","title":"Activity: Exploring the environment of a project","text":"
    • Research how the communities of some projects are organized
    • Produce a presentation summarizing your findings
    "},{"location":"lessons/02-software-and-communities/slides/#open-source-development_1","title":"Open Source Development","text":""},{"location":"lessons/02-software-and-communities/slides/#_21","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#software-and-communities_1","title":"Software and Communities","text":""},{"location":"lessons/03-software-documentation/","title":"03 - Explorando um projeto desconhecido","text":"

    Este roteiro tem algumas perguntas com o objetivo de guiar a explora\u00e7\u00e3o do c\u00f3digo e documentar suas descobertas. Voc\u00ea tamb\u00e9m pode aplic\u00e1-lo para qualquer outro projeto mal documentado em que precisar trabalhar no futuro.

    Baixe o c\u00f3digo do projeto a ser analisado aqui e siga as perguntas. Elas s\u00e3o um guia de como explorar um projeto que voc\u00eas n\u00e3o conhecem.

    "},{"location":"lessons/03-software-documentation/#dependencias-e-servicos-usados","title":"Depend\u00eancias e servi\u00e7os usados","text":"

    Question

    Quais tecnologias s\u00e3o usadas no c\u00f3digo? Al\u00e9m da linguagem de programa\u00e7\u00e3o, liste tamb\u00e9m as bibliotecas/m\u00f3dulos externos usados.

    Question

    A aplica\u00e7\u00e3o utiliza um banco de dados. Qual gerenciador? Onde a aplica\u00e7\u00e3o busca a base de dados? Quais s\u00e3o as tabelas usadas? Como elas s\u00e3o criadas?

    "},{"location":"lessons/03-software-documentation/#deploy-inicial","title":"Deploy inicial","text":"

    Question

    A aplica\u00e7\u00e3o usa autentica\u00e7\u00e3o? Se sim, qual tipo? Como usu\u00e1rios s\u00e3o criados? Existe algum usu\u00e1rio administrador? Como \u00e9 feita a seguran\u00e7a das senhas? Qual a senha padr\u00e3o?

    Question

    Quais comandos voc\u00ea usou para rodar a aplica\u00e7\u00e3o? Escreva todos desde a cria\u00e7\u00e3o do banco de dados e dos usu\u00e1rios at\u00e9 o funcionamento completo do projeto.

    Question

    Agora que voc\u00ea consegue rodar a aplica\u00e7\u00e3o, explore-a um pouco e descreva em poucas frases para qu\u00ea ela serve.

    "},{"location":"lessons/03-software-documentation/#documentacao-do-projeto","title":"Documenta\u00e7\u00e3o do projeto","text":"

    Question

    Se voc\u00ea fosse criar um guia de usu\u00e1rio (aluno) para esta aplica\u00e7\u00e3o, quais tarefas descreveria?

    Question

    Se voc\u00ea fosse criar um guia de usu\u00e1rio (professor) para esta aplica\u00e7\u00e3o, quais tarefas descreveria?

    Question

    O qu\u00ea voc\u00ea descreveria em um guia de desenvolvedor para esta aplica\u00e7\u00e3o?

    "},{"location":"lessons/03-software-documentation/slides/","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#_1","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#fluxo-de-trabalho-distribuido-e-comunidades-de-software","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#ordem-das-apresentacoes","title":"Ordem das apresenta\u00e7\u00f5es","text":"
    1. VSCode
    2. Blender
    3. KDENlive
    4. NeoVim
    "},{"location":"lessons/03-software-documentation/slides/#10-minutos-cada-uma","title":"10 minutos cada uma","text":""},{"location":"lessons/03-software-documentation/slides/#atividade-explorando-o-entorno-de-um-projeto","title":"Atividade: Explorando o entorno de um projeto","text":"
    \"metadata\": {\n    \"filename\": \"nome do arquivo\",\n    \"group\": [\"login1\", \"login2\"]\n}\n
    • No group incluir os outros membros do grupo somente

    • Um membro da equipe deve fazer um PR para o projeto incluindo o arquivo da apresenta\u00e7\u00e3o. O mesmo deve ser colocado na pasta apresentacoes/2023

    "},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software","title":"Documenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_2","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#a-ausencia-de-documentacao-de-software","title":"(A aus\u00eancia de d)ocumenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_2","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_1","title":"Documenta\u00e7\u00e3o de software","text":"

    Documenta\u00e7\u00e3o de usu\u00e1rio:

    "},{"location":"lessons/03-software-documentation/slides/#_2","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_3","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_4","title":"Documenta\u00e7\u00e3o de Software","text":"

    Documenta\u00e7\u00e3o de desenvolvimento:

    "},{"location":"lessons/03-software-documentation/slides/#_5","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_6","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_7","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_2","title":"Documenta\u00e7\u00e3o de software","text":"

    Documenta\u00e7\u00e3o de usu\u00e1rio:

    • Instala\u00e7\u00e3o
    • Funcionalidades
    • Onde obter ajuda
    "},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_3","title":"Documenta\u00e7\u00e3o de software","text":"

    Documenta\u00e7\u00e3o de desenvolvimento:

    • Como compilar (depend\u00eancias, ferramentas usadas, etc)
    • Como testar (depend\u00eancias, ferramentas usadas, etc)
    • Estilo de c\u00f3digo e outras orienta\u00e7\u00f5es relacionadas
    • Organiza\u00e7\u00e3o do c\u00f3digo e arquitetura da aplica\u00e7\u00e3o
    "},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_4","title":"Documenta\u00e7\u00e3o de software","text":"

    \u00c0s vezes as coisas se confundem! O que voc\u00eas colocariam na documenta\u00e7\u00e3o de usu\u00e1rio do Python?

    E na de desenvolvedor?

    "},{"location":"lessons/03-software-documentation/slides/#exemplo-spyder","title":"Exemplo: Spyder","text":"

    https://www.spyder-ide.org/

    "},{"location":"lessons/03-software-documentation/slides/#exemplo-spyder_1","title":"Exemplo: Spyder","text":"

    https://github.com/spyder-ide/spyder/wiki

    "},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao","title":"Sistemas de documenta\u00e7\u00e3o","text":"

    Sphinx

    "},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao_1","title":"Sistemas de documenta\u00e7\u00e3o","text":"

    Mkdocs

    "},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao-hospedagem","title":"Sistemas de documenta\u00e7\u00e3o (hospedagem)","text":"

    https://readthedocs.org/

    "},{"location":"lessons/03-software-documentation/slides/#atividade","title":"Atividade","text":"

    Voc\u00eas receber\u00e3o um zip com o c\u00f3digo de um software e zero instru\u00e7\u00f5es. Voc\u00eas dever\u00e3o:

    1. Aprender como rodar o software
    2. Documentar os passos que voc\u00eas seguiram para faz\u00ea-lo
    3. Fazer uma an\u00e1lise cr\u00edtica do projeto com rela\u00e7\u00e3o a
      • Arquitetura
      • Qualidade do c\u00f3digo
      • Seguran\u00e7a da solu\u00e7\u00e3o
    "},{"location":"lessons/03-software-documentation/slides/#objetivos-desta-atividade","title":"Objetivos desta atividade","text":"
    1. Entender na pr\u00e1tica a necessidade de documenta\u00e7\u00e3o;
    2. Identificar quais s\u00e3o as depend\u00eancias de um software. Isto inclui bibliotecas/frameworks usados e servi\u00e7os aos quais esse software se conecta.
    3. Rodar sua pr\u00f3pria vers\u00e3o de um software de terceiros
    "},{"location":"lessons/03-software-documentation/slides/#nao-sao-objetivos-desta-atividade","title":"N\u00e3o s\u00e3o objetivos desta atividade","text":"
    1. Mostrar nenhum tipo de boa pr\u00e1tica de programa\u00e7\u00e3o
    2. Modificar o software analisado
    3. Criticar o desenvolvedor que trabalhou antes no projeto
    "},{"location":"lessons/03-software-documentation/slides/#atividade-pratica-projeto-nao-documentado","title":"Atividade pr\u00e1tica: Projeto n\u00e3o documentado","text":"

    Objetivo: entender como rodar um c\u00f3digo sem instru\u00e7\u00f5es.

    Valida\u00e7\u00e3o: apresenta\u00e7\u00e3o do sistema funcionando.

    Grupos de at\u00e9 3 pessoas

    "},{"location":"lessons/03-software-documentation/slides/#tempo-restante-de-hoje-hora-inicial-da-proxima-aula-usem-handout-como-guia","title":"Tempo restante de hoje + hora inicial da pr\u00f3xima aula. Usem handout como guia","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_3","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_5","title":"Documenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_3","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/04-professional-project/","title":"04 - Professional Project","text":"

    There is a moment in a project's history where it is already useful for the author and other people are starting to get interested in it. Software documentation, clear install instructions and being free of errors are important to these people but are not necessarily essential to the authors, who are used to fix problem when they appear and are familiar with every aspect of the code. We will transform a project like this into a project that is ready to be used by other people and that can receive contributions from other developers.

    {\"skill_id\": 4, \"metadata\": {\"date\": \"2022-09-01\", \"url\": \"http...\", \"group\": []}\n

    Done

    Form a pair and select a project that one of you worked on during your degree. We will transform it into a complete project that other people can use and contribute to.

    "},{"location":"lessons/04-professional-project/#deliverables","title":"Deliverables","text":"

    This is a project for more than one meeting and can be done in pairs.

    "},{"location":"lessons/04-professional-project/#software-documentation","title":"Software documentation","text":"
    • Create a website for the project, including screenshots and animations about its usage
    • Create a wiki with instructions for developers
      • build instructions
      • code organization
      • technologies used

    Tip

    Use mkdocs or other static site generator tools to create the website. Jekyll is also a popular choice.

    "},{"location":"lessons/04-professional-project/#project-quality","title":"Project quality","text":"
    • Create README with project description, screenshot and links to documentation
    • Organize repo with source code in a src folder and documentation in docs
    • Execute a linter in your project and export its output to one or more issues with names related to code quality improvements
    "},{"location":"lessons/04-professional-project/slides/","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"lessons/04-professional-project/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api-e-linters","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"lessons/04-professional-project/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/04-professional-project/slides/#discussao-o-que-faz-o-projeto","title":"Discuss\u00e3o: o que faz o projeto?","text":""},{"location":"lessons/04-professional-project/slides/#servidor-de-desafios","title":"Servidor de desafios","text":"

    Voc\u00eas rodaram um MVP do servidor de desafios. Veja abaixo seu estado atual:

    https://github.com/Insper/servidor-de-desafios

    "},{"location":"lessons/04-professional-project/slides/#servidor-de-desafios_1","title":"Servidor de desafios","text":""},{"location":"lessons/04-professional-project/slides/#discussao-como-o-projeto-esta-organizado-tecnologias","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (tecnologias)","text":""},{"location":"lessons/04-professional-project/slides/#discussao-como-o-projeto-esta-organizado-codigo","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (c\u00f3digo)","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-arquitetura-do-projeto","title":"Discuss\u00e3o: avalie a arquitetura do projeto","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-qualidade-de-codigo-do-projeto","title":"Discuss\u00e3o: avalie a qualidade de c\u00f3digo do projeto.","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_1","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-seguranca-do-projeto","title":"Discuss\u00e3o: avalie a seguran\u00e7a do projeto.","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_2","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-esse-projeto-e-um-projeto-profissional","title":"Discuss\u00e3o: esse projeto \u00e9 um projeto \"profissional\"?","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_3","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-o-que-voce-incluiria-na-documentacao-do-projeto","title":"Discuss\u00e3o: o que voc\u00ea incluiria na documenta\u00e7\u00e3o do projeto?","text":""},{"location":"lessons/04-professional-project/slides/#software-tem-historia-e-depende-de-pessoas-para-evoluir","title":"Software tem hist\u00f3ria e depende de pessoas para evoluir","text":""},{"location":"lessons/04-professional-project/slides/#codigo-vs-software-profissional","title":"C\u00f3digo vs software profissional","text":"

    Os seguintes pontos transformam um c\u00f3digo que fiz para mim em algo \u00fatil para outras pessoas

    1. Tradu\u00e7\u00f5es e internacionaliza\u00e7\u00e3o (datas)
    2. Documenta\u00e7\u00e3o de usu\u00e1rio e de desenvolvimento
    3. Algum processo de qualidade de software
      • testes automatizados
      • formata\u00e7\u00e3o de c\u00f3digo e estrutura de repo
    4. pacotes de instala\u00e7\u00e3o
    "},{"location":"lessons/04-professional-project/slides/#hoje","title":"Hoje","text":"
    • Ferramentas de documenta\u00e7\u00e3o
    • Documenta\u00e7\u00e3o de API usando
    • Padr\u00f5es de formata\u00e7\u00e3o de c\u00f3digo
      • linters
      • PEP8
    "},{"location":"lessons/04-professional-project/slides/#documentacao-de-api","title":"Documenta\u00e7\u00e3o de API","text":"

    Objetivo: explicar o funcionamento das fun\u00e7\u00f5es, classes e m\u00f3dulos de um programa.

    • Focado em detalhes
    • Documenta os argumentos esperados e em quais situa\u00e7\u00f5es a fun\u00e7\u00e3o funciona
    • Tipicamente obtida direto do c\u00f3digo
    • N\u00e3o detalha como as fun\u00e7\u00f5es s\u00e3o usadas em conjunto
    "},{"location":"lessons/04-professional-project/slides/#documentacao-de-api_1","title":"Documenta\u00e7\u00e3o de API","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api_2","title":"Documenta\u00e7\u00e3o de API","text":"

    ref

    "},{"location":"lessons/04-professional-project/slides/#ferramentas","title":"Ferramentas","text":"
    • Python:
      • pydoc, numpydoc
    • C/C++
      • Doxygen
    • Java
      • Javadoc

    Em geral podem ser plugadas em alguma ferramenta de documenta\u00e7\u00e3o de projetos.

    "},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao_1","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao_2","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":"
    • Cada projeto tem o seu
    • Algumas linguagens tem um estilo padr\u00e3o
      • Python - PEP8
    • Ferramentas ajudam a conferir (for\u00e7ar) um estilo espec\u00edfico
    "},{"location":"lessons/04-professional-project/slides/#ferramentas_1","title":"Ferramentas","text":"
    • Python: pylint, black
    • C/C++: splint, cppchecker, gcc (op\u00e7\u00f5es -Wall, -Wextra), clang-format/-tidy
    • Java: flag -Xlint
    • Javascript: ESlint, TSlint (typescript)
    "},{"location":"lessons/04-professional-project/slides/#_1","title":"Documenta\u00e7\u00e3o de API e linters","text":"

    Ajudam a manter c\u00f3digo limpo e leg\u00edvel. Podem ser plugadas no seu editor favorito.

    "},{"location":"lessons/04-professional-project/slides/#execucao-obrigatoria-para-muitos-projetos-grandes","title":"Execu\u00e7\u00e3o obrigat\u00f3ria para muitos projetos grandes","text":""},{"location":"lessons/04-professional-project/slides/#atividade-pratica-projeto-profissional","title":"Atividade pr\u00e1tica: Projeto profissional","text":"

    Objetivo: Transformar um c\u00f3digo perdido em um projeto

    \"metadata\": {\"url\": \"github pages criado\", \"group\": [\"ate tr\u00eas\", \"alunos\"]}

    "},{"location":"lessons/04-professional-project/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api-testes","title":"Documenta\u00e7\u00e3o de API + testes","text":""},{"location":"lessons/04-professional-project/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/05-python-packaging/","title":"05 - Distribui\u00e7\u00e3o de Software","text":"

    Nesta aula complementaremos as \u00faltimas discuss\u00f5es criando um pequeno pacote Python instal\u00e1vel via pip. Com isto chegamos mais perto de um projeto que esteja preparado para que outras pessoas o utilizem e colaborem em seu desenvolvimento.

    "},{"location":"lessons/05-python-packaging/#distribuindo-software-para-desenvolvedores-pacote-python-basico","title":"Distribuindo software para desenvolvedores: pacote Python b\u00e1sico","text":"

    Nosso m\u00f3dulo se chamar\u00e1 dev_aberto e disponibilizar\u00e1 um programa execut\u00e1vel hello.py. Crie a seguinte estrutura de pastas para nosso pacote.

    Important

    Baixe os arquivos que usaremos neste link

    pacote_exemplo/\n    dev_aberto/\n        __init__.py\n        dev_aberto.py\n    scripts/\n        hello.py\n    README.md\n    LICENSE\n

    Exercise

    com a estrutura acima, qual seria o import a ser feito para usar a fun\u00e7\u00e3o hello do arquivo dev_aberto.py?

    Exercise

    Pesquise para que serve o arquivo __init__.py e use-o para permitir importar hello usando somente import dev_aberto.

    Exercise

    Crie um projeto no github para esta atividade. Fa\u00e7a um primeiro commit nele com o conte\u00fado \"zerado\" do projeto.

    • Um arquivo README contendo uma frase de descri\u00e7\u00e3o do pacote e um link para o reposit\u00f3rio da disciplina.
    • Um arquivo LICENSE com a licen\u00e7a MIT.
    "},{"location":"lessons/05-python-packaging/#o-arquivo-setuppy","title":"O arquivo setup.py","text":"

    A descri\u00e7\u00e3o de um pacote Python \u00e9 feita usando um arquivo setup.py Veja abaixo uma vers\u00e3o inicial deste arquivo:

    from setuptools import setup\n\nsetup(name='dev_aberto_seunome',\n      version='0.1',\n      packages=['dev_aberto']\n      )\n

    Exercise

    Crie o arquivo acima no seu projeto, substituindo seunome por .... seu nome. Instale o seu pr\u00f3prio pacote usando

    pip install .

    Exercise

    Em outra pasta, abra um console Python e tente importar seu m\u00f3dulo.

    Exercise

    Pesquise quais argumentos s\u00e3o usados para especificar o autor do pacote, as vers\u00f5es de Python e sistemas operacionais suportados. Preencha estes valores com suas informa\u00e7\u00f5es. Note que o pip leva estas informa\u00e7\u00f5es em conta e s\u00f3 instalar\u00e1 um pacote se ele estiver em um ambiente suportado.

    "},{"location":"lessons/05-python-packaging/#dependencias","title":"Depend\u00eancias","text":"

    Para adicionar pacotes que s\u00e3o automaticamente instalados quando instalamos nosso pacote precisamos identific\u00e1-los no nosso arquivo setup.py. Para adicionar uma depend\u00eancia de instala\u00e7\u00e3o basta adicionar o seguinte argumento:

        ...\n    install_requires=[\n        'pacote>=1.0',\n        'pacote2'\n    ],\n    ...\n

    Exercise

    Verifique as depend\u00eancias do c\u00f3digo e adicione-as no setup.py.

    "},{"location":"lessons/05-python-packaging/#requirementstxt","title":"requirements.txt","text":"

    Muitos softwares usam tamb\u00e9m um arquivo requirements.txt para listar todas as depend\u00eancias do software de modo a obter uma instala\u00e7\u00e3o id\u00eantica \u00e0 do desenvolvedor. Isto \u00e9 importante para uniformizar os ambientes de desenvolvimento. Ou seja, este arquivo nunca ser\u00e1 usado por usu\u00e1rios finais.

    Exercise

    Crie um requirements.txt para seu projeto com as mesmas depend\u00eancias listadas no seu setup.py.

    "},{"location":"lessons/05-python-packaging/#scripts-executaveis","title":"Scripts execut\u00e1veis","text":"

    Al\u00e9m de instalar o nosso m\u00f3dulo para uso via import desejamos tamb\u00e9m disponibilizar o arquivo hello.py como um execut\u00e1vel para todo o sistema. Isto pode ser feito adicionando a seguinte linha no nosso setup.py indicando que scripts/hello.py dever\u00e1 ser instalado como um execut\u00e1vel.

        ...\n    scripts=['scripts/hello.py'],\n    ...\n

    N\u00e3o se esque\u00e7a de adicionar a seguinte linha no topo de seu arquivo para que ele possa ser executado diretamente do shell:

    #!/usr/bin/env python3\n

    No Windows \u00e9 criado um execut\u00e1vel que chama nosso script, de modo que as chamadas do execut\u00e1vel continuar\u00e3o funcionando normalmente. Note que isto n\u00e3o cria menus em nenhum tipo de interface gr\u00e1fica.

    "},{"location":"lessons/05-python-packaging/#criando-arquivos-de-distribuicao","title":"Criando arquivos de distribui\u00e7\u00e3o","text":"

    Dois tipos de arquivos de distribui\u00e7\u00e3o podem ser usados:

    • sdist: \u00e9 um arquivo contendo os fontes do projeto, incluindo arquivos adicionais especificados usando o argumento data_files. Usado se seu projeto for Python-puro.
    • wheel: \u00e9 um formato pr\u00e9-compilado e espec\u00edfico para cada plataforma. Mais usado quando o projeto cont\u00e9m extens\u00f5es em C.

    A cria\u00e7\u00e3o de um arquivo de distribui\u00e7\u00e3o de fontes \u00e9 bem simples:

    $ python setup.py sdist

    A instala\u00e7\u00e3o deste pacote pode ser feita via pip.

    "},{"location":"lessons/05-python-packaging/#envio-para-o-pypi","title":"Envio para o PyPI","text":"

    Vamos agora enviar nosso pacote para o Python Package Index para que ele possa ser instalado diretamente via pip. Para n\u00e3o poluir o reposit\u00f3rio com pacotes tempor\u00e1rios e de teste, podemos usar o TestPyPI. Toda sua infraestrutura \u00e9 igual ao oficial, mas ele \u00e9 limpo de maneira regular.

    Visite https://test.pypi.org/account/register/ e registre-se no TestPyPI.

    Ap\u00f3s o registro, usaremos o pacote twine (instal\u00e1vel via pip) para fazer o upload:

    $ twine upload --repository-url https://test.pypi.org/legacy/ dist/*

    Voc\u00ea poder\u00e1, ent\u00e3o, instalar seu pacote a partir do test PyPI usando o seguinte comando:

    $ pip install --index-url https://test.pypi.org/simple/ my_hello_nome

    "},{"location":"lessons/05-python-packaging/#entrega","title":"Entrega","text":"

    Fa\u00e7a a entrega de sua atividade adicionando a skill Pacote Python e inclua nela a url do seu reposit\u00f3rio no github.

    Objetivo: Primeira experi\u00eancia distribuindo software Python.

    \"skill_id\": 6, \"metadata\": {\"url\": \"repo-seu-pacote\"}

    "},{"location":"lessons/05-python-packaging/#distribuindo-software-para-usuarios-finais","title":"Distribuindo software para usu\u00e1rios finais","text":"

    Vamos agora trabalhar (em duplas) no Servidor de Desafios novamente. Seu trabalho ser\u00e1 criar um Dockerfile que roda o software de maneira \"completa\". Ou seja, o script de cria\u00e7\u00e3o do container dever\u00e1

    • instalar todas as depend\u00eancias do sistema
    • criar a base de dados, se necess\u00e1rio
    • adicionar os usu\u00e1rios presentes no arquivo users.csv, se necess\u00e1rio
    • executar o servidor e serv\u00ed-lo na porta 8080 do host
    • manter os dados adicionados ao reiniciar o container
    "},{"location":"lessons/05-python-packaging/#entrega_1","title":"Entrega","text":"

    Fa\u00e7a a entrega de sua atividade adicionando a skill Dockerfile segundo o modelo abaixo.

    Objetivo: Criou deploy automatizado para sistema web Python

    \"skill_id\": 7, \"metadata\": {\"url\": \"repo-servidor-de-desafios\", \"group\": [\"login1\", \"login2\"]}

    "},{"location":"lessons/05-python-packaging/#referencias","title":"Refer\u00eancias","text":"

    Algumas refer\u00eancias que podem ser \u00fateis:

    • https://docker-curriculum.com/
    • https://docs.docker.com/get-started/
    "},{"location":"lessons/06-localization-translation/","title":"06 - Localiza\u00e7\u00e3o e Tradu\u00e7\u00e3o","text":"

    Na parte expositiva da aula tivemos uma introdu\u00e7\u00e3o aos problemas de Internacionaliza\u00e7\u00e3o (i18n) e Localiza\u00e7\u00e3o (L10N). Neste roteiro iremos praticar o uso destas t\u00e9cnicas em uma aplica\u00e7\u00e3o linha de comando de exemplo simples.

    Em ambos exemplos vamos trabalhar com o m\u00f3dulo Babel, que \u00e9 feito para facilitar a tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de aplica\u00e7\u00f5es feitas em Python. Outras linguagens de programa\u00e7\u00e3o possuem bibliotecas similares que seguem a mesma sequ\u00eancia de comandos e usam os mesmos tipos de arquivos.

    $ pip install Babel

    Sistemas POSIX suportam a determina\u00e7\u00e3o do locale utilizado por meio da vari\u00e1vel de ambiente LANGUAGE, que pode ser modificada para cada execu\u00e7\u00e3o de um programa. O formato padr\u00e3o usado \u00e9 <lingua>_<pais>.<codificacao>. Para portugu\u00eas do Brasil usando codifica\u00e7\u00e3o UTF8 usamos o locale pt_BR.utf8. Rodando o seguinte comando as mensagens de ajuda do ls devem aparecer em ingl\u00eas.

    $ LANGUAGE=en_US.utf8 ls --help

    J\u00e1 executando o comando abaixo elas devem aparecer em portugu\u00eas.

    $ LANGUAGE=pt_BR.utf8 ls --help

    De maneira mais geral, existe uma s\u00e9rie de vari\u00e1veis LC_* que controlam qual locale \u00e9 usado para determinado tipo de dados. Veremos a seguir como usar LC_TIME e LC_NUMERIC para controlar como datas e n\u00fameros s\u00e3o exibidos e LANGUAGE para definir a lingua de exibi\u00e7\u00e3o de um programa.

    "},{"location":"lessons/06-localization-translation/#localizando-um-programa-em-python","title":"Localizando um programa em Python","text":"

    Vamos trabalhar com uma aplica\u00e7\u00e3o de linha de comando que nada mais faz que imprimir alguns dados simples como data em extenso, um n\u00famero fracion\u00e1rio grande e uma mensagem pr\u00e9-definida. O c\u00f3digo completo (arquivo cli.py) est\u00e1 abaixo.

    from datetime import date\n\nif __name__ == '__main__':\n    today = date.today()\n    print(today)\n\n    number = 240000000000.32212\n    print(number)\n\n    name = input('Input your name: ')\n    print('Hello {}'.format(name))\n
    Uma sa\u00edda poss\u00edvel seria

    2018-08-28\n240000000000.3221\nInput your name: Igor\nHello Igor\n

    Como j\u00e1 visto em aula, este programa re\u00fane tr\u00eas das principais sa\u00eddas que precisam ser formatadas: datas, n\u00fameros fracion\u00e1rios e mensagens para o usu\u00e1rio.

    "},{"location":"lessons/06-localization-translation/#formatando-datas","title":"Formatando datas","text":"

    A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_TIME. O m\u00f3dulo babel.dates j\u00e1 possui diversas fun\u00e7\u00f5es que automaticamente a utilizam para fazer a localiza\u00e7\u00e3o de vari\u00e1veis do tipo Date (usando a fun\u00e7\u00e3o format_date) ou DateTime (usando format_datetime).

    Exercise

    Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar a data por extenso (ou seja, 31 de agosto de 2021).

    Exercise

    O qu\u00ea acontece quando definimos a vari\u00e1vel de ambiente LC_TIME=en_US.utf8 e rodamos o programa? E se usamos LC_TIME=pt_BR.utf8?

    "},{"location":"lessons/06-localization-translation/#formatando-numeros","title":"Formatando n\u00fameros","text":"

    A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_NUMERIC. O m\u00f3dulo babel.numbers possui a fun\u00e7\u00e3o format_number que formata um n\u00famero de acordo com esta configura\u00e7\u00e3o.

    Exercise

    Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar o n\u00famero fracion\u00e1rio mostrado.

    Exercise

    Teste seu programa com LC_NUMERIC=en_US.utf8 e LC_NUMERIC=pt_BR.utf8. Os efeitos s\u00e3o os esperados?s

    "},{"location":"lessons/06-localization-translation/#traduzindo-mensagens","title":"Traduzindo mensagens","text":"

    A parte final consiste em criar tradu\u00e7\u00f5es das duas strings presentes no texto. A linguagem usada \u00e9 definida pela vari\u00e1vel LANGUAGE, que pode ser definida separadamente para cada processo. Um dos pontos mais importantes \u00e9 marcar quais strings dever\u00e3o ser traduzidas para que uma equipe de tradutores n\u00e3o precise mexer no c\u00f3digo. O m\u00f3dulo gettext do Python j\u00e1 prov\u00ea suporte a esta funcionalidade, o Babel apenas fornece um conjunto de ferramentas que facilita seu uso.

    A implanta\u00e7\u00e3o do framework de tradu\u00e7\u00e3o \u00e9 feita em quatro passos:

    1. Marca\u00e7\u00e3o das strings a serem traduzidas
    2. Extra\u00e7\u00e3o destas strings do c\u00f3digo em um arquivo modelo .pot
    3. Cria\u00e7\u00e3o de tradu\u00e7\u00f5es .po a partir do modelo criado no passo anterior
    4. Compila\u00e7\u00e3o das strings traduzidas em um arquivo bin\u00e1rio .mo

    No arquivo principal de nossa aplica\u00e7\u00e3o podemos \"instalar\" o framework de tradu\u00e7\u00e3o e marcar todas nossas strings a serem traduzidas com a fun\u00e7\u00e3o _(). A instala\u00e7\u00e3o \u00e9 feita pelo seguinte trecho de c\u00f3digo.

    import gettext\ngettext.install('cli', localedir='locale') \n# cli \u00e9 o nome do arquivo em que guardamos nossas tradu\u00e7\u00f5es\n# localedir \u00e9 o caminho onde est\u00e3o armazenadas as tradu\u00e7\u00f5es. Pode ser um caminho relativo. \n

    Devemos ent\u00e3o marcar todas as strings para serem traduzidas com _(). Podemos usar _() em qualquer arquivo do projeto, mesmo que a instala\u00e7\u00e3o tenha sido feita somente no arquivo principal.

    print(_(\"Hello!\"))\n

    Os passos seguintes s\u00e3o feitos com aux\u00edlio do Babel, que efetivamente analisa nosso c\u00f3digo Python e extrai as strings para tradu\u00e7\u00e3o. A cria\u00e7\u00e3o do arquivo modelo de tradu\u00e7\u00e3o a partir dos arquivos do diret\u00f3rio atual \u00e9 feita com o seguinte comando.

    $ pybabel extract . -o cli-model.pot

    Criamos ent\u00e3o uma nova tradu\u00e7\u00e3o usando o seguinte comando. A op\u00e7\u00e3o -D indica o nome do arquivo em que as tradu\u00e7\u00f5es ser\u00e3o guardadas (usado em gettext.install). A op\u00e7\u00e3o -l indica o locale da tradu\u00e7\u00e3o. A op\u00e7\u00e3o -d indica o localedir usado em gettext.install.

    $ pybabel init -i cli-model.pot -D cli -l pt_BR -d locale

    Devemos ent\u00e3o editar o arquivo criado em locale/pt_BR/LC_MESSAGES/cli.po. Ser\u00e3o apresentados (ap\u00f3s algumas linhas de coment\u00e1rios) pares de linhas como as seguintes. O primeiro valor msgid \u00e9 a string a ser traduzida e o segundo msgstr \u00e9 a tradu\u00e7\u00e3o no locale pt_BR (pois o arquivo est\u00e1 na pasta pt_BR do localedir).

    msgid \"Input your name: \"\nmsgstr \"\"\n

    Apesar de ser poss\u00edvel fazer tudo diretamente no arquivo de texto, \u00e9 mais conveniente usar softwares como o poedit ou este editor online(https://localise.biz/free/poeditor).

    Com as strings traduzidas vamos finalmente compilar nossos resultados. Isto \u00e9 feito para que n\u00e3o seja poss\u00edvel mexer nos arquivos de tradu\u00e7\u00e3o em uma vers\u00e3o Release do programa.

    $ pybabel compile -D cli -l pt_BR -d locale

    Isto gerar\u00e1 os arquivos .mo correspondentes a ao locale pt_BR. S\u00e3o estes os arquivos carregados durante a execu\u00e7\u00e3o do programa.

    "},{"location":"lessons/06-localization-translation/#teste-final","title":"Teste final","text":"

    Podemos definir a vari\u00e1vel LANGUAGE para modificar a lingua de um programa (como visto anteriormente com ls). Execute seu programa diretamente e depois setando LANGUAGE=pt_BR.utf8. Os resultados foram os esperados?

    "},{"location":"lessons/06-localization-translation/#entrega","title":"Entrega","text":"

    Modifique o exerc\u00edcio da aula passada (pacote python) para suportar datas e mensagens em Ingl\u00eas e Portugu\u00eas. Fa\u00e7a a entrega de sua atividade adicionando a skill Tradu\u00e7\u00e3o b\u00e1sica segundo o modelo abaixo.

    Objetivo: Aplicou ferramentas de localiza\u00e7\u00e3o para traduzir um programa simples em linha de comando.

    \"skill_id\": 8, \"metadata\": {\"url\": \"repo-pacote-python\"}

    "},{"location":"lessons/06-localization-translation/slides/","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/06-localization-translation/slides/#localizacao-e-internacionalizacao-de-software","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"Vers\u00e3o 2023/2: Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/06-localization-translation/slides/#traducao-de-software","title":"Tradu\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#qual-a-diferenca-de-internacionalizacao-e-localizacao","title":"Qual a diferen\u00e7a de internacionaliza\u00e7\u00e3o e localiza\u00e7\u00e3o?","text":""},{"location":"lessons/06-localization-translation/slides/#internacionalizacao-i18n","title":"Internacionaliza\u00e7\u00e3o (I18N)","text":"
    • Consiste em traduzir a interface de usu\u00e1rio de um software para outros idiomas.

    • Sistema Operacional guarda configura\u00e7\u00f5es de idioma e as disponibiliza para aplica\u00e7\u00f5es

    • Tipicamente \"invis\u00edvel\"

    "},{"location":"lessons/06-localization-translation/slides/#localizacao-l10n","title":"Localiza\u00e7\u00e3o (L10N)","text":"

    Consiste em adaptar a maneira de mostrar

    • n\u00fameros fracion\u00e1rios
      • marcador de decimais
      • marcador de milhares
    • datas
      • nomes de meses
      • ordem de exibi\u00e7\u00e3o
    • nomes de pa\u00edses, fusos hor\u00e1rios, etc

    de acordo com as prefer\u00eancias de um usu\u00e1rio e relativos a sua cultura.

    "},{"location":"lessons/06-localization-translation/slides/#i18n-e-l10n","title":"I18N e L10N","text":"

    Precisam ser

    • independentes:
      • idioma ingl\u00eas e datas no formato brasileiro
    • configur\u00e1veis
      • posso precisar trocar entre l\u00ednguas e entre formatos
    "},{"location":"lessons/06-localization-translation/slides/#o-suporte-a-l10n-e-i18n-implica-modificar-codigo-fonte","title":"O suporte a L10N e I18N implica modificar c\u00f3digo fonte.","text":""},{"location":"lessons/06-localization-translation/slides/#locales","title":"Locales","text":"

    Um locale \u00e9 uma tripla

    "},{"location":"lessons/06-localization-translation/slides/#_1","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
    <lingua>_<pais>.<codificacao>\n
    "},{"location":"lessons/06-localization-translation/slides/#_2","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    que representa configura\u00e7\u00f5es de I18N e/ou L10N para uma determinada cultura.

    "},{"location":"lessons/06-localization-translation/slides/#locales_1","title":"Locales","text":"

    Exemplos:

    • Tradu\u00e7\u00e3o de File:
      • pt = Ficheiro
      • pt_BR = Arquivo
    • Formato de datas:
      • en_US: MM/DD/YY
      • en_GB: DD/MM/YY
    "},{"location":"lessons/06-localization-translation/slides/#posso-usar-locales-diferentes-para-a-lingua-da-interface-de-usuario-e-para-mostrar-datas","title":"Posso usar locales diferentes para a l\u00edngua da interface de usu\u00e1rio e para mostrar datas.","text":""},{"location":"lessons/06-localization-translation/slides/#configuracoes-possiveis-linux","title":"Configura\u00e7\u00f5es poss\u00edveis (Linux)","text":"
    # sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
    "},{"location":"lessons/06-localization-translation/slides/#implementando-suporte-a-l10n","title":"Implementando suporte a L10N","text":"
    1. Baixar uma biblioteca de Localiza\u00e7\u00e3o
    2. Encontrar todas as exibi\u00e7\u00f5es de n\u00fameros, datas, etc
    3. Pr\u00e9-process\u00e1-las usando fun\u00e7\u00f5es da biblioteca
    "},{"location":"lessons/06-localization-translation/slides/#_3","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
    # Antes \nprint('Numero:', 10.5) \n# Depois\nprint('Numero', format_number(10.5))\n
    "},{"location":"lessons/06-localization-translation/slides/#_4","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    N\u00e3o \u00e9 complicado, mas \u00e9 trabalhoso

    "},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n","title":"Suporte a I18N","text":"

    Envolve 4 etapas:

    1. Marcar todas strings que devem ser traduzidas
    2. Extra\u00ed-las do c\u00f3digo fonte
    3. Criar um arquivo de tradu\u00e7\u00f5es para cada locale suportado
    4. Empacotar as tradu\u00e7\u00f5es junto com o programa
    "},{"location":"lessons/06-localization-translation/slides/#_5","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    \u00c9 um pouco mais complicado, mas pode ser integrado ao processo de compila\u00e7\u00e3o de um programa.

    "},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-posix","title":"Suporte a I18N (POSIX)","text":"

    Sistemas POSIX suportam determina\u00e7\u00e3o de lingua e locale usando vari\u00e1veis de ambiente.

    • LANG para l\u00edngua
    • LC_TIME para data
    • LC_NUMERIC para n\u00fameros

    Um locale sempre \u00e9 expresso no formato

    <lingua>_<pais>.<codificacao>\n
    "},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-posix_1","title":"Suporte a I18N (POSIX)","text":"

    O comando locale mostra todas as op\u00e7\u00f5es dispon\u00edveis:

    # sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
    "},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-web","title":"Suporte a I18N (Web)","text":"

    Existem diversas maneiras de determinar um bom locale em sistemas Web:

    • Cabe\u00e7alho HTTP Accept-Language inclui as linguagens de exibi\u00e7\u00e3o suportadas pelo browser do visitante.
    • Geolocaliza\u00e7\u00e3o via IP
    • Prefer\u00eancia armazenada em banco de dados
    "},{"location":"lessons/06-localization-translation/slides/#_6","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#web-e-desktop-usam-as-mesmas-tecnologias-l10n-e-i18n","title":"Web e desktop usam as mesmas tecnologias (l10n e i18n)","text":""},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-em-python","title":"Suporte a I18N (em Python)","text":"
    • M\u00f3dulo gettext da biblioteca padr\u00e3o
    • M\u00f3dulo datetime aceita o uso de locales
    • M\u00f3dulo babel faz I18N e L10N
    "},{"location":"lessons/06-localization-translation/slides/#atividade-pratica-traducao-basica","title":"Atividade pr\u00e1tica: Tradu\u00e7\u00e3o b\u00e1sica","text":"

    Objetivo: usar o m\u00f3dulo Babel para traduzir uma aplica\u00e7\u00e3o do terminal.

    "},{"location":"lessons/06-localization-translation/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/06-localization-translation/slides/#localizacao-e-internacionalizacao-de-software_1","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2: Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/07-code-quality/","title":"07 - Code quality","text":"

    In Lesson 04 - Professional Project we created a repo and website for an old project developed during the course. Now we are going to improve its quality by fixing the issues each group found using a linter tool.

    Warning

    We won't work on our own projects this time! Select a project from the discussion page and comment on the issue you'd like to do. Every project must have at least one issue with external participation.

    "},{"location":"lessons/07-code-quality/#deliverable","title":"Deliverable","text":"
    • create a Pull/Merge request addressing a code quality issue found in another team's project.
    • work with other team to get a Pull/Merge request accepted in your repository

    Learning objective: modify a project you are not familiar with and improve its code quality

    \"skill_id\": 11, \"metadata\": {\"url\": \"pull request url\", \"group\": [\"student2\"]}

    Add to the pull request description a link to the accepted contribution.

    "},{"location":"lessons/08-automated-testing/","title":"08 - Automated testing","text":"

    We will now add (some) automated testing to one of the projects from the discussion page. Again, our objective in this activity is to get used to build and modify different projects.

    Warning

    You'll need to select a different project from the last Lesson 07 - Code Quality

    "},{"location":"lessons/08-automated-testing/#deliverable","title":"Deliverable","text":"
    • create two issues with suggestions for testing in the selected project
    • send a Pull/Merge request addressing one of the issues you created and get it accepted

    Learning objective: modify a project you are not familiar with and improve its code quality

    \"skill_id\": 5, \"metadata\": {\"url\": \"pull request url\", \"group\": [\"student2\"]}

    Add to the pull request description a link to the accepted contribution.

    "},{"location":"lessons/08-automated-testing/slides/","title":"Testes automatizados","text":""},{"location":"lessons/08-automated-testing/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/08-automated-testing/slides/#testes-automatizados","title":"Testes automatizados","text":""},{"location":"lessons/08-automated-testing/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/08-automated-testing/slides/#projeto-profissional","title":"Projeto profissional","text":"
    • Qualidade de c\u00f3digo
      • Linting - formata\u00e7\u00e3o e erros comuns
    • Documenta\u00e7\u00e3o
      • Usu\u00e1rio
      • Desenvolvedor
    "},{"location":"lessons/08-automated-testing/slides/#projeto-profissional_1","title":"Projeto profissional","text":"
    • Qualidade de c\u00f3digo
      • Linting - formata\u00e7\u00e3o e erros comuns
      • O c\u00f3digo funciona?
    • Documenta\u00e7\u00e3o
      • Usu\u00e1rio
      • Desenvolvedor
    "},{"location":"lessons/08-automated-testing/slides/#meu-programa-funciona","title":"Meu programa funciona?","text":"
    • Sob quais condi\u00e7\u00f5es?
    • Em quais plataformas?
    • Quais opera\u00e7\u00f5es s\u00e3o suportadas?
    • Consigo conferir o resultado de uma execu\u00e7\u00e3o? Se sim, existe um valor de refer\u00eancia?
    "},{"location":"lessons/08-automated-testing/slides/#testes-automatizados_1","title":"Testes automatizados","text":"

    Ideia: escrever um programa que verifica se um outro programa responde como esperado

    • Definir situa\u00e7\u00f5es a serem testadas ...
    • e o resultado esperado em cada situa\u00e7\u00e3o
    "},{"location":"lessons/08-automated-testing/slides/#testes-automatizados_2","title":"Testes automatizados","text":"

    N\u00e3o ajudam:

    • a revelar novos bugs
    • a garantir que um software \u00e9 livre de bugs

    Ajudam

    • a evitar que bugs descobertos voltem
    • a evitar que mudan\u00e7as n\u00e3o intencionais quebrem c\u00f3digo que estava funcionando.
    • a documentar em quais situa\u00e7\u00f5es o software funciona.
    "},{"location":"lessons/08-automated-testing/slides/#testes-automatizados_3","title":"Testes automatizados","text":"
    1. Testes de unidade
    2. Testes de integra\u00e7\u00e3o
    3. Testes de interface de usu\u00e1rio
    "},{"location":"lessons/08-automated-testing/slides/#testes-unitarios","title":"Testes unit\u00e1rios","text":"

    Ideia: dada uma fun\u00e7\u00e3o, verificar se ela devolve o valor esperado para um certo conjunto de par\u00e2metros.

    • Testa as fun\u00e7\u00f5es de maneira isolada
    • Cobertura: porcentagem das linhas de c\u00f3digo que \u00e9 executada durante os testes de unidade.
    • Serve como documenta\u00e7\u00e3o da fun\u00e7\u00e3o
    "},{"location":"lessons/08-automated-testing/slides/#testes-unitarios-pytest","title":"Testes unit\u00e1rios - pytest","text":""},{"location":"lessons/08-automated-testing/slides/#testes-de-integracao","title":"Testes de integra\u00e7\u00e3o","text":"

    Ideia: dados um conjunto de classes com interdepend\u00eancias, verificar se elas funcionam bem em conjunto.

    • Testa intera\u00e7\u00e3o entre em objetos
    • Possibilidade de criar mocks, que s\u00e3o objetos falsos feitos para simular a intera\u00e7\u00e3o entre v\u00e1rios objetos.
    "},{"location":"lessons/08-automated-testing/slides/#testes-de-interface-de-usuario","title":"Testes de interface de usu\u00e1rio","text":"

    Ideia: simula a\u00e7\u00f5es do usu\u00e1rio (cliques, entrada de dados, etc) e confere se a sa\u00edda esperada \u00e9 mostrada na tela

    • Menos espec\u00edfico poss\u00edvel
    • Mais fiel ao uso real de um usu\u00e1rio
    "},{"location":"lessons/08-automated-testing/slides/#testes-de-interface-de-usuario_1","title":"Testes de interface de usu\u00e1rio","text":""},{"location":"lessons/08-automated-testing/slides/#selenium","title":"Selenium","text":"

    Permite fazer scripts que interagem com uma p\u00e1gina web, realizando entrada de dados, rolagem de tela e cliques. Cada assert pode ser feito com o conte\u00fado de um objeto da p\u00e1gina.

    "},{"location":"lessons/08-automated-testing/slides/#o-que-eu-preciso-testar","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"lessons/08-automated-testing/slides/#_1","title":"Testes automatizados","text":""},{"location":"lessons/08-automated-testing/slides/#o-que-eu-preciso-testar_1","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"lessons/08-automated-testing/slides/#ninguem-sabe","title":"Ningu\u00e9m sabe....","text":""},{"location":"lessons/08-automated-testing/slides/#atividade-pratica-testado-e-aprovado","title":"Atividade pr\u00e1tica: Testado e aprovado","text":"

    Objetivo: Primeira experi\u00eancia com testes automatizado de c\u00f3digo.

    \"metadata\": {\"url\": \"acceppted PR\", \"group\": [\"igual\", \"6\"]}

    "},{"location":"lessons/09-releases/","title":"09 - Releases","text":"

    Creating a release is the final step to distribute software to users. It involves \"freezing\" the repository in a specific commit and attaching binaries and other ready to use assets. Users should be able to grab one of the releases and use it direclty without having to setup a dev environment.

    The skill New Release involves the creation of a release for your own project used in the last lessons.

    \"skill_id\": 12, \"metadata\": {\"url\": \"release url\", \"group\": [\"student2\"]}

    "},{"location":"lessons/09-releases/#instructions","title":"Instructions","text":"

    The following guids might be useful.

    • Creating releases in Github
    • PyInstaller for creating installers/binaries using Python

    The following checks will be used to verify if this skill is completed:

    • there is a release in the repo's Releases tab containing the description of the release and the source code
    • the release includes either an installer or a direccly executable file in one of the following formats:
      • Linux: .deb, .rpm for installers,AppImage for executables
      • Windows: .msi installer or single .exe (plus asses, if necessary)
      • Other: if the project is an extension, plugin or any other type of stoftware, the release must include a redistributable package in the official format
    "},{"location":"plugins/notification/","title":"Toast Notifications","text":"

    This page illustrates how to create toast (or snackbar) notifications. This is intended for plugin development and probably shouldn't be called directly from the markdown content.

    In your plugin, whenever you want to show a toast notification, just call notification.toast():

    notification.toast(\"Go crazy!\", { bgColor: \"#FFFF00\", color: \"#ff4498\" });\nnotification.toast('bgColor \"danger\"', { bgColor: \"danger\" });\nnotification.toast(\"Notification with click event (reload page)\", {\nonClick: () => window.location.reload(),\n});\nnotification.toast(\"Toasts have an optional timeout argument\", {\ntimeout: 3000,\n});\n

    The following values are accepted for bgColor:

    • primary (your theme's primary color)
    • note
    • abstract
    • summary
    • tldr
    • info
    • todo
    • tip
    • hint
    • important
    • success
    • check
    • done
    • question
    • help
    • faq
    • warning
    • caution
    • attention
    • failure
    • fail
    • missing
    • danger
    • error
    • bug
    • example
    • quote
    • cite
    • a color in hex notation (e.g. \"#FF00FF\")
    "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Open Development 2023/2","text":"

    Welcome to the Open Development page for 2023/2. On this site, you will find all the course lessons and syllabus. The learning objectives covered are:

    1. The student is capable of understanding a software project and fixing a bug or implementing an improvement.
    2. The student is capable of making modifications that meet the technical and non-technical requirements of a software project.
    3. The student is capable of interacting with a (remote) development team.

    This course is gamified and entirely done using a git repository. Each student creates a user following the instructions in Lesson 01 and submits a Pull Request to be included in the repository. Each completed activity is delivered via a PR in the course repository and serves as evidence for the learning objectives mentioned above.

    The course revolves around four types of activities:

    • Tutorial: (Guided) Preparatory activities in the classroom.
    • Code: Code contributions to external projects.
    • Community: Non-technical contributions that can benefit users and developers of a project, such as documentation and translations.
    • Impact: Significant results achieved through the student's participation in open projects.

    More information about all possible activities can be found on the Assessment page.

    Current and past instructors

    • Igor Montagner
    • Fabr\u00edcio Barth
    "},{"location":"agenda_apresentacoes/","title":"Apresenta\u00e7\u00f5es sobre cultura livre","text":"

    Este documento descreve a rubrica para avalia\u00e7\u00e3o do trabalho e a agenda das apresenta\u00e7\u00f5es.

    "},{"location":"agenda_apresentacoes/#rubrica","title":"Rubrica","text":"Conceito Descri\u00e7\u00e3o A Apresenta\u00e7\u00e3o realizada dentro do tempo estipulado. O tema foi organizado de forma excelente, com boa sequ\u00eancia l\u00f3gica das ideias. O trabalho foi apresentado de forma clara e concisa, usando so slides de forma coesa com a fala. Tem boa postura e seguran\u00e7a, estabelece contato visual com os participantes durante a apresenta\u00e7\u00e3o. Incorporou elementos visuais de qualidade no material: figuras, tabelas e gr\u00e1ficos s\u00e3o claros e cont\u00eam informa\u00e7\u00f5es suficientes. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros). B O tempo de apresenta\u00e7\u00e3o foi de mais ou menos 5 min do estabelecido. O tema foi parcialmente bem organizado, com sequ\u00eancia de apresenta\u00e7\u00e3o razo\u00e1vel. Exp\u00f5e o trabalho corretamente, mas n\u00e3o usa os slides de forma coesa com a fala. Postura e seguran\u00e7a razo\u00e1veis. Os elementos visuais s\u00e3o de baixa qualidade: figuras, tabelas e gr\u00e1ficos n\u00e3o s\u00e3o totalmente claros e n\u00e3o cont\u00eam informa\u00e7\u00f5es suficientes para compreens\u00e3o. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros). C Tempo de apresenta\u00e7\u00e3o foi de mais ou menos 10 min do estabelecido. A organiza\u00e7\u00e3o da apresenta\u00e7\u00e3o \u00e9 confusa, o que prejudica o acompanhamento e compreens\u00e3o das ideias. Comunica\u00e7\u00e3o deficiente, com dificuldade de expor ideias. N\u00e3o usa adequadamente os slides. N\u00e3o tem boa postura e seguran\u00e7a durante a apresenta\u00e7\u00e3o. Os recursos visuas prejudicam a apresenta\u00e7\u00e3o. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros)."},{"location":"agenda_apresentacoes/#agenda","title":"Agenda","text":"Data e hor\u00e1rio Tema 17/11 (9:45-10:45) GitHub Copilot \u00e9 \u00e9tico? [Eiki Yamashiro e Marcelo Miguel] 17/11 (10:45-11:45) A rela\u00e7\u00e3o entre Software as a Service (SaaS) e projetos de C\u00f3digo Aberto [Caroline Chaim, Felipe Lemos, Jo\u00e3o Farias Araujo] 22/11 (9:45-10:45) Telemetria \u00e9 \"\u00e9tico\"? [Guilherme Lunetta, Rafael Monteiro e Jo\u00e3o Magalh\u00e3es] 22/11 (10:45-11:45) Regulamenta\u00e7\u00f5es futuras na Europa sobre responsabilidade legal dos criadores de IAs [Luiza Silvera, Guilherme Batista e Gabriel Zanetti] 24/11 N\u00e3o teremos aula. Joga do Brasil na Copa do Mundo 29/11 (9:45-10:45) Regulamenta\u00e7\u00f5es recentes na Europa sobre durabilidade de smartphones. [Keiya Nishio e Bruno Freitas] 29/11 (10:45-11:45) Por que Open Source \u00e9 cr\u00edtico para criptomoedas? [Paulo Kim, Raphael Lahiry e Rodrigo Coelho] 01/12 (9:45-10:45) The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022? [Jo\u00e3o Pedro Meirelles, Gustavo Molina e Rafael Almada] 01/12 (10:45-11:45) Mantainer burnout [Cesar Ades e Jonathan Sutton]"},{"location":"assessment/","title":"Assessment","text":"

    As you can see in Lesson 01, this course allows for a great deal of freedom, and it is organized through gamification. Each participant creates a profile in the repository and earns skills (and XP) by completing the available activities. All submissions are made via PR to the course repository.

    The final grade is a combination of the total amount of XP received for completing tasks, the amount of XP obtained from group members, and some barrier criteria. The table below summarizes these conditions:

    Grade Score Extra Criteria I ---- Did not complete any tutorial activities D ---- Completed all lesson activities but did not reach a C grade C 45XP
  • 1 x Code Contribution +
  • Accepted Translation! or Documentation Contribution
  • B 90XP
  • Accepted Code Contribution
  • A 150XP A+ 200XP

    Throughout the semester, the scores in the table above may be revised downward, but never upward.

    "},{"location":"assessment/#available-skills","title":"Available Skills","text":"

    Each skill translates into evidence for one of the learning objectives of the course. The collection of all the skills completed during the semester indicates the proficiency of the students in each of the objectives.

    "},{"location":"assessment/#tutorial","title":"Tutorial","text":"

    In this initial part, preparatory activities are carried out to support the development of skills in Code and Community skills.

    id Name Description XP Date 1 First Steps Added to the discipline's repository. 2 25/09 2 Exploring a Project's Environment Researched the history and community of people and services around a project. 3 25/09 3 Undocumented Project Received an undocumented system and got it up and running. 5 25/09 4 Professional Project Refactored poorly written code and created a web page for it. 5 25/09 5 Tested and Approved Created unit tests and interface tests for the challenge server. 5 25/09 6 Python Package Created a Python package installable via pip. 3 25/09 7 Dockerfile Created automated deployment for a Python web system. 3 25/09 8 Basic Translation Used translation tools to translate and localize a small command-line program. 2 25/09 10 FLOSS Research Delivered a long presentation on a recent and relevant topic related to free and open-source software. 5 04/12 11 Better code Addressed linting problems in a poorly written project 5 25/09 12 Release created Created a release and published a binary package for users 5 25/09"},{"location":"assessment/#code","title":"Code","text":"

    Any activity that results in a code contribution to open-source software projects is accepted in the course.

    id Name Description XP Date 21 Code Contribution Submitted a pull request fixing a bug. 7 04/12 22 Contribution Accepted! A non-trivial pull request was accepted by an external project. 13 04/12 23 Simple Contribution Accepted! A simple pull request (with trivial changes or small code refactorings) was accepted by an external project. 3 04/12 24 Bug Report Reported a bug in a repository, and another user was able to reproduce it. 5 04/12 25 Feature Request Made a request for a new feature in a software. 2 04/12 26 INSPER Project Made additional contributions to an INSPER educational project. 5 04/12"},{"location":"assessment/#community","title":"Community","text":"

    A software project is also defined by the interactions of all the people around it: users, developers, and translators. This category includes non-technical contributions that benefit these individuals.

    id Name Description XP Date 40 Indirect Issue Conversations in an issue or pull request led other users to open issues reporting new bugs/improvements. 3 04/12 41 Beta Tester When reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue. 3 04/12 42 Translation Accepted! Made a translation that was accepted in an open-source software. 5 04/12 43 New Languages Added support for translations in a previously non-translatable software. 10 04/12 44 Reviewer Reviewed minor errors in the documentation of a project, and your modifications were accepted. 2 04/12 45 Documentation Contribution Closed an issue marked as docs. 7 04/12 46 Project Pitch Delivered a project pitch. 0 04/12 47 Pitch Accepted! Contributed to a project presented in class. 5 04/12 48 Accepted Suggestion! Another student contributed to the project you pitched. 3 04/12 49 PR Replay Presented (in 15 minutes) the process of resolving a bug in class. 5 04/12"},{"location":"assessment/#impact","title":"Impact","text":"

    This category encompasses skills that represent the impact generated by the activities performed within the context of the course, both on a software project and the community around it. This includes:

    1. Presentations given by students
    2. A large number of accepted contributions to a single project
    3. Mentions of work done by the student on the project's social media
    4. Releases containing commits made within the course's context
    id Name Description XP Date 60 Speaker Gave a talk about libraries or open-source software. 20 04/12 61 Helpdesk Had an accepted answer on sites like StackOverflow or email lists. 4 04/12 62 Published Contribution One of your contributions was included in a release. 10 04/12 63 VIP Guest After making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill. 5 04/12 64 3 Submitted PRs Submitted 3 pull requests to the same project. 10 04/12 65 3 Accepted PRs 3 pull requests you submitted to a project were accepted. 30 04/12 66 Shoutout Something you did was mentioned by the project on social media or through an official channel. 10 04/12 77 Hacktoberfest Participated in Hacktoberfest by submitting 3 pull requests to external projects. 20 04/12"},{"location":"impact-2019/","title":"Edi\u00e7\u00e3o 2019/2","text":"

    In the 2019/2 edition, students worked on 19 different projects, contributing with 46 code modifications, of which 14 were incorporated into the original projects. In addition to these projects, students also worked on the Servidor de Desafios, a software developed by Insper professors to be used in the Software Design course. A total of 12 accepted modifications have already been used during the semester.

    We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 10 events.

    "},{"location":"impact-2019/#alunos","title":"Alunos","text":"Alessandra Bl\u00fccher Alexandre Edington Antonio Jo\u00e3o Andraues Junior Elisa Mochetti Malzoni Gabriel Lopes Monteiro Gabriel Do Vale Rios Giulia Braga Passarelli Guilherme Leite Hugo Ebert Carl Igor Montagner Leonardo Pereira Medeiros Lucas Scarlato Astur Pedro Cunial Campos Samuel Vinicius Granato De Barros Vinicius Gomes De Lima Vitor Liu"},{"location":"impact-2019/#contribuicoes-de-codigo","title":"Contribui\u00e7\u00f5es de c\u00f3digo","text":"Servidor de desafios
    • https://github.com/Insper/servidor-de-desafios/pull/28 (Elisa Mochetti Malzoni)
    • https://github.com/Insper/servidor-de-desafios/pull/20 (Pedro Cunial Campos)
    • https://github.com/Insper/servidor-de-desafios/issues/13 (Leonardo Pereira Medeiros)
    • https://github.com/Insper/servidor-de-desafios/pull/26 (Samuel Vinicius Granato De Barros)
    • https://github.com/Insper/servidor-de-desafios/pull/30 (Guilherme Leite)
    • https://github.com/Insper/servidor-de-desafios/pull/27 (Alessandra Bl\u00fccher)
    • (Lucas Scarlato Astur)
    • https://github.com/Insper/LogCompTester/issues/2 (Lucas Scarlato Astur)
    • https://github.com/Insper/servidor-de-desafios/pull/29 (Vitor Liu)
    • https://github.com/Insper/servidor-de-desafios/pull/23 (Alexandre Edington)
    • https://github.com/Insper/servidor-de-desafios/pull/32 (Giulia Braga Passarelli)
    • https://github.com/Insper/servidor-de-desafios/pull/38 (Gabriel Do Vale Rios)
    Pandas Pull Requests
    • - https://github.com/pandas-dev/pandas/pull/28183
    • - https://github.com/pandas-dev/pandas/pull/29193
    • - https://github.com/pandas-dev/pandas/pull/29191
    • - https://github.com/pandas-dev/pandas/pull/29087
    • - https://github.com/pandas-dev/pandas/pull/27934
    • - https://github.com/pandas-dev/pandas/pull/28091
    • - https://github.com/pandas-dev/pandas/pull/28032
    • - https://github.com/pandas-dev/pandas/pull/29201
    • - https://github.com/pandas-dev/pandas/pull/28659
    • - https://github.com/pandas-dev/pandas/pull/28265
    • - https://github.com/pandas-dev/pandas/pull/28632
    • - https://github.com/panddev/pandas/pull/28296
    • - https://github.com/lucassa3/pandas/pull/1
    • - https://github.com/pandas-dev/pandas/pull/29701
    • - https://github.com/pandas-dev/pandas/pull/27933
    • - https://github.com/pandas-dev/pandas/pull/29266
    • - https://github.com/pandas-dev/pandas/pull/28696
    • - https://github.com/pandas-dev/pandas/pull/28172
    Issues
    • - https://github.com/pandas-dev/pandas/issues/28218
    Multi-Deployer Issues
    • - https://github.com/HenriquePereiraRosa/multi-deployer/issues/5
    • - https://github.com/HenriquePereiraRosa/multi-deployer/issues/9
    • - https://github.com/HenriquePereiraRosa/multi-deployer/issues/10
    • - https://github.com/HenriquePereiraRosa/multi-deployer/issues/21
    Pull Requests
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/6
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/12
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/11
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/7
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/22
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/23
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/24
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/26
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/15
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/28
    • - https://github.com/HenriquePereiraRosa/multi-deployer/pull/13
    Python-Ds Pull Requests
    • - https://github.com/prabhupant/python-ds/pull/250
    • - https://github.com/prabhupant/python-ds/pull/247
    Issues
    • - https://github.com/prabhupant/python-ds/issues/248
    Backtesting Pull Requests
    • - https://github.com/raulikeda/Backtesting/pull/23
    • - https://github.com/raulikeda/Backtesting/pull/22
    Loopdocs Pull Requests
    • - https://github.com/LoopKit/loopdocs/pull/111
    Osu Issues
    • - https://github.com/ppy/osu/issues/6571
    Pull Requests
    • - https://github.com/ppy/osu/issues/2510
    Lector Pull Requests
    • - https://github.com/BasioMeusPuga/Lector/pull/113
    Spacemacs Pull Requests
    • - https://github.com/syl20bnr/spacemacs/pull/12674
    Enzyme Pull Requests
    • - https://github.com/airbnb/enzyme/pull/2271
    Sherlock Pull Requests
    • - https://github.com/sherlock-project/sherlock/pull/372
    Twitter-Scraper Pull Requests
    • - https://github.com/bisguzar/twitter-scraper/pull/80
    Discord-Bot Pull Requests
    • - https://github.com/RPCS3/discord-bot/pull/435
    Scikit-Image Pull Requests
    • - https://github.com/scikit-image/scikit-image/pull/4126
    Issues
    • - https://github.com/scikit-image/scikit-image/issues/4125
    Python-Scripts Pull Requests
    • - https://github.com/ankitdobhal/Python-Scripts/pull/64
    Aos-Reminders Pull Requests
    • - https://github.com/daviseford/aos-reminders/pull/219
    Calcurse Pull Requests
    • - https://github.com/lfos/calcurse/pull/229
    Issues
    • - https://github.com/lfos/calcurse/issues/228
    Scikit-Learn Pull Requests
    • - https://github.com/scikit-learn/scikit-learn/pull/15327
    Nightguard Issues
    • - https://github.com/nightscout/nightguard/issues/61
    Dev-Aberto Issues
    • - https://github.com/Insper/dev-aberto/issues/67
    "},{"location":"impact-2019/#eventos","title":"Eventos","text":""},{"location":"impact-2020/","title":"2020/1","text":"

    In the 2020/1 edition, students worked on 15 different projects, contributing with 27 code modifications, of which 17 were incorporated into the original projects. In addition to these projects, students also worked on the Challenge Server, a software developed by Insper professors to be used in the Software Design course. A total of 7 accepted modifications have already been used during the semester.

    "},{"location":"impact-2020/#alunos","title":"Alunos","text":"Isabella Rocha De Oliveira Bruna Mayumi Kimura Bruno Arthur Cesconetto Eli Jose Abi Ghosn Eric Fernando Otofuji Abrantes Francisco Ciol Rodrigues Aveiro Gabriel Fonseca Moreira Gabriel Valente Francato Hugo Silva Pereira Mendes Igor Dos Santos Montagner Lucca Delchiaro Costabile Martim Ferreira Jose Pedro De La Pe\u00f1a Ferreira Bueno Fonseca Pedro Oliveira De Azambuja Raphael Costa Sabrina Sampaio Simao Victor Laperuta De Moura"},{"location":"impact-2020/#contribuicoes","title":"Contribui\u00e7\u00f5es Melhorias de c\u00f3digo enviadas","text":"Servidor de desafios
    • https://github.com/Insper/servidor-de-desafios/pull/75 (Pedro De La Pe\u00f1a Ferreira Bueno Fonseca)
    • https://github.com/Insper/servidor-de-desafios/pull/72 (Gabriel Valente Francato)
    • https://github.com/Insper/servidor-de-desafios/pull/73 (Gabriel Fonseca Moreira)
    • https://github.com/Insper/servidor-de-desafios/pull/83 (Francisco Ciol Rodrigues Aveiro)
    • https://github.com/Insper/servidor-de-desafios/pull/66 (Pedro Oliveira De Azambuja)
    • https://github.com/Insper/servidor-de-desafios/pull/82 (Martim Ferreira Jose)
    • https://github.com/Insper/servidor-de-desafios/pull/67 (Sabrina Sampaio Simao)
    Pygame/Pygame Pull Requests
    • - https://github.com/pygame/pygame/pull/1909
    • - https://github.com/pygame/pygame/pull/1960
    • - https://github.com/pygame/pygame/pull/1911
    • - https://github.com/pygame/pygame/pull/1923
    • - https://github.com/pygame/pygame/pull/1912
    Pandas-Dev/Pandas Pull Requests
    • - https://github.com/pandas-dev/pandas/pull/32451
    • - https://github.com/pandas-dev/pandas/pull/34267
    • - https://github.com/pandas-dev/pandas/pull/34377
    • - https://github.com/pandas-dev/pandas/pull/34450
    • - https://github.com/pandas-dev/pandas/pull/34812
    Elementary/Code Pull Requests
    • - https://github.com/elementary/code/issues/818
    • - https://github.com/elementary/code/pull/832
    • - https://github.com/elementary/code/pull/833
    Dgilland/Pydash Pull Requests
    • - https://github.com/dgilland/pydash/pull/137
    • - https://github.com/dgilland/pydash/pull/139
    • - https://github.com/dgilland/pydash/pull/138
    Insper/Projeto-Campo-Favela Pull Requests
    • - https://github.com/Insper/projeto-campo-favela/pull/27
    • - https://github.com/Insper/projeto-campo-favela/pull/24
    Hospitalrun/Hospitalrun-Frontend Pull Requests
    • - https://github.com/HospitalRun/hospitalrun-frontend/pull/1983
    • - https://github.com/HospitalRun/hospitalrun-frontend/pull/1977
    Issues
    • - https://github.com/HospitalRun/hospitalrun-frontend/issues/1940
    Bokeh/Bokeh Pull Requests
    • - https://github.com/bokeh/bokeh/pull/10173
    Elementary/Terminal Pull Requests
    • - https://github.com/elementary/terminal/pull/486
    Matplotlib/Matplotlib Pull Requests
    • - https://github.com/matplotlib/matplotlib/pull/16985
    Sorxrob/Covid3D Issues
    • - https://github.com/sorxrob/covid3d/issues/13
    Pull Requests
    • - https://github.com/sorxrob/covid3d/pull/8
    Trekhleb/Covid-19 Pull Requests
    • - https://github.com/trekhleb/covid-19/pull/38
    Elementary/Files Pull Requests
    • - https://github.com/elementary/files/pull/1242
    Antiboomz/Btroblox Pull Requests
    • - https://github.com/AntiBoomz/BTRoblox/pull/24
    Elementary/Appcenter Issues
    • - https://github.com/elementary/appcenter/issues/1321
    Darkreader/Darkreader Issues
    • - https://github.com/darkreader/darkreader/issues/2858
    "},{"location":"impact-2021/","title":"2021/2","text":"

    One of the main objectives of Open Development is to actively participate in existing software projects. In the 2021/2 edition, students worked on 30 different projects, contributing with 56 code modifications, of which 37 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.

    We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.

    Melhorias de c\u00f3digo enviadas Uutils/Coreutils Pull Requests
    • - https://github.com/uutils/coreutils/pull/2693
    • - https://github.com/uutils/coreutils/pull/2703
    • - https://github.com/uutils/coreutils/pull/2704
    • - https://github.com/uutils/coreutils/pull/2726
    • - https://github.com/uutils/coreutils/pull/2727
    • - https://github.com/uutils/coreutils/pull/2728
    • - https://github.com/uutils/coreutils/pull/2731
    • - https://github.com/uutils/coreutils/pull/2735
    • - https://github.com/uutils/coreutils/pull/2742
    • - https://github.com/uutils/coreutils/pull/2743
    • - https://github.com/uutils/coreutils/pull/2745
    • - https://github.com/uutils/coreutils/pull/2749
    Pandas-Dev/Pandas Pull Requests
    • - https://github.com/pandas-dev/pandas/pull/44806
    • - https://github.com/pandas-dev/pandas/pull/44033
    • - https://github.com/pandas-dev/pandas/pull/44927
    • - https://github.com/pandas-dev/pandas/pull/43791
    • - https://github.com/pandas-dev/pandas/pull/44200
    Robertodoering/Harpy Pull Requests
    • - https://github.com/robertodoering/harpy/pull/471
    • - https://github.com/robertodoering/harpy/pull/473
    • - https://github.com/robertodoering/harpy/pull/474
    • - https://github.com/robertodoering/harpy/pull/483
    Elementary/Code Issues
    • - https://github.com/elementary/code/issues/1096
    Pull Requests
    • - https://github.com/elementary/code/pull/1097
    • - https://github.com/elementary/code/pull/1100
    • - https://github.com/elementary/code/pull/1101
    Outros Pull Requests
    • https://github.com/readthedocs/readthedocs.org/pull/8591
    • https://github.com/plotly/plotly.py/pull/3508
    Backstage/Backstage Pull Requests
    • - https://github.com/backstage/backstage/pull/7594
    • - https://github.com/backstage/backstage/pull/8156
    Nuta/Nsh Pull Requests
    • - https://github.com/nuta/nsh/pull/32
    • - https://github.com/nuta/nsh/pull/37
    Iamashutosh99/Basic-Cpp-Course Pull Requests
    • - https://github.com/iamashutosh99/basic-cpp-course/pull/23
    • - https://github.com/iamashutosh99/basic-cpp-course/pull/22
    Alteryx/Featuretools Pull Requests
    • - https://github.com/alteryx/featuretools/pull/1725
    • - https://github.com/alteryx/featuretools/pull/1733
    Centerofci/Mathesar Pull Requests
    • - https://github.com/centerofci/mathesar/pull/799
    • - https://github.com/centerofci/mathesar/pull/812
    Domokane/Financepy Pull Requests
    • - https://github.com/domokane/FinancePy/pull/121
    • - https://github.com/domokane/FinancePy/pull/119
    Issues
    • - https://github.com/domokane/FinancePy/issues/115
    Tsvillain/Wallbay Pull Requests
    • - https://github.com/tsvillain/Wallbay/pull/8
    • - https://github.com/tsvillain/Wallbay/pull/10
    Issues
    • - https://github.com/tsvillain/Wallbay/issues/7
    • - https://github.com/tsvillain/Wallbay/issues/9
    Numpy/Numpy Pull Requests
    • - https://github.com/numpy/numpy/pull/20389
    Edbmods/Edbpreparecarefully Pull Requests
    • - https://github.com/edbmods/EdBPrepareCarefully/pull/318
    Readthedocs/Common Pull Requests
    • - https://github.com/readthedocs/common/pull/98
    Simple-Icons/Simple-Icons Pull Requests
    • - https://github.com/simple-icons/simple-icons/pull/6825
    Epicmaxco/Vuestic-Admin Pull Requests
    • - https://github.com/epicmaxco/vuestic-admin/pull/845
    Epicmaxco/Vuestic-Ui Pull Requests
    • - https://github.com/epicmaxco/vuestic-ui/pull/1232
    Zulip/Zulip Pull Requests
    • - https://github.com/zulip/zulip/pull/19969
    Pyroscope-Io/Pyroscope Pull Requests
    • - https://github.com/pyroscope-io/pyroscope/pull/492
    Matrix-Org/Matrix-React-Sdk Pull Requests
    • - https://github.com/matrix-org/matrix-react-sdk/pull/6918
    Bootandy/Dust Pull Requests
    • - https://github.com/bootandy/dust/pull/198
    Streamlit/Streamlit Pull Requests
    • - https://github.com/streamlit/streamlit/pull/4051
    Godotengine/Godot Pull Requests
    • - https://github.com/godotengine/godot/pull/55801
    Vector-Im/Element-Desktop Pull Requests
    • - https://github.com/vector-im/element-desktop/pull/274
    Objectbox/Objectbox-Dart Pull Requests
    • - https://github.com/objectbox/objectbox-dart/pull/327
    Tiangolo/Fastapi Pull Requests
    • - https://github.com/tiangolo/fastapi/pull/4042
    Serverless/Serverless Pull Requests
    • - https://github.com/serverless/serverless/pull/10119
    Workalendar/Workalendar Issues
    • - https://github.com/workalendar/workalendar/issues/689
    Twopirllc/Pandas-Ta Issues
    • - https://github.com/twopirllc/pandas-ta/issues/423
    Eventos"},{"location":"impact-2022/","title":"2022/2","text":"

    One of the main objectives of Open Development is to actively participate in existing software projects. In the 2022/2 edition, students worked on 15 different projects, contributing with 20 code modifications, of which 4 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.

    We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.

    Alunos participantes Bruno Freitas Do Nascimento Rodrigues Caroline Chaim De Lima Carneiro Cesar Ezra Ades Eiki Luis Yamashiro Fabricio Barth Felipe Lemos Gabriel Zanetti Guilherme Carneiro Lunetta Guilherme Teixeira Batista Gustavo Molina Freneda Benites Joao Pedro Farias De Araujo Joao Pedro Montefeltro Junqueira Meirelles Jo\u00e3o Vitor Menezes De Magalh\u00e3es Jonathan Sutton Keiya Nishio Luiza Rodrigues Silveira Marcelo Cesario Miguel Paulo Wook Kim Rafael Alves De Mello Almada Rafael Evangelista Monteiro Raphael Lahiry Rodrigo Guimar\u00e3es Coelho Melhorias de c\u00f3digo enviadas Geekquad/Algobook Pull Requests
    • - https://github.com/geekquad/AlgoBook/pull/563
    • - https://github.com/geekquad/AlgoBook/pull/561
    • - https://github.com/geekquad/AlgoBook/pull/562
    • - https://github.com/geekquad/AlgoBook/pull/564
    Data-8/Datascience Pull Requests
    • - https://github.com/data-8/datascience/pull/563
    • - https://github.com/data-8/datascience/pull/564
    • - https://github.com/data-8/datascience/pull/562
    Adafruit/Adafruit_Circuitpython_Requests Pull Requests
    • - https://github.com/adafruit/Adafruit_CircuitPython_Requests/pull/117
    Ros-Planning/Moveit2 Pull Requests
    • - https://github.com/ros-planning/moveit2/pull/1693
    Grafana/Oncall Pull Requests
    • - https://github.com/grafana/oncall/pull/790
    Neetcode-Gh/Leetcode Pull Requests
    • - https://github.com/neetcode-gh/leetcode/pull/1524
    Outros Pull Requests
    • https://github.com/jfilter/clean-text
    Vael1/-Awesome-Python-Scripts Pull Requests
    • - https://github.com/vael1/-Awesome-Python-Scripts/pull/27
    Civiwiki/Openciviwiki Pull Requests
    • - https://github.com/CiviWiki/OpenCiviWiki/pull/1469
    Aylton-Almeida/Rabbitmq-Pika-Flask Pull Requests
    • - https://github.com/aylton-almeida/rabbitmq-pika-flask/pull/47
    Nidhaloff/Deep-Translator Pull Requests
    • - https://github.com/nidhaloff/deep-translator/pull/166
    Kra53N/Getgit Pull Requests
    • - https://github.com/kra53n/getgit/pull/16
    Commons-App/Apps-Android-Commons Pull Requests
    • - https://github.com/commons-app/apps-android-commons/issues/5100
    Tbillington/Kondo Pull Requests
    • - https://github.com/tbillington/kondo/pull/66
    Matplotlib/Matplotlib Pull Requests
    • - https://github.com/matplotlib/matplotlib/pull/24576
    Eventos"},{"location":"impact/","title":"2023/2","text":"

    One of the main objectives of Open Development is to actively participate in existing software projects. In the 2023/2 edition, students worked on 0 different projects, contributing with 0 code modifications, of which 0 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.

    We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.

    Code contributions Events"},{"location":"students/","title":"Students","text":"

    The following students are enrolled in this semester.

    Abel Cavalcante De Andrade Antonio Fonseca Caio Emmanuel Soares Rocha Cicero Tiago Carneiro Valentim Henrique Sim\u00f5es Alberti Igor Montagner Joao Pedro Gianfaldoni De Andrade Jor\u00e1s Cust\u00f3dio Campos De Oliveira Nat\u00e1lia Queiroz Menezes Carreras Rafael Libertini"},{"location":"syllabus/","title":"Syllabus","text":""},{"location":"syllabus/#assessment","title":"Assessment","text":"

    This course has a gamified assessment system. At any time, you can check your grade by running:

    $ ./dev-aberto.py compute-grade your-blackboard-login

    Biweekly reports will be sent with a summary of what has been delivered and which criteria have been met, as well as the student's current grade. There is no possibility of losing points. Although the report is for informational purposes only, if the student is not failing due to absences, they should receive the grade indicated in the biweekly reports.

    Attention

    The complete list of rules is available on the Course Rules page and is the official reference for grade calculation. If there is a discrepancy between the report and the rules page, consider the report to be buggy.

    "},{"location":"syllabus/#schedule","title":"Schedule","text":"
    • MON 07:30 - 09:30
    • WED 07:30 - 09:30
    • Office Hours: on demand
    "},{"location":"syllabus/#lesson-plan","title":"Lesson Plan","text":"

    The following activities are planned. The program is subject to changes and adaptations as the course progresses.

    Date Question/Problem/Challenge Content 14/08 Introduction to the course and its challenges Workflow with distributed version control: forks, patches, pull requests, and local repositories. Technical and non-technical aspects surrounding software: infrastructure, support, marketing, funding. Reference: FOGEL Ch. 3; Additional reading: TAPSCOTT & WILLIAMS. 16/08 First code contribution Workflow with distributed version control: ammend, rebase, revert. 21/08 Project documentation and what to do when it doesn't exist Types of documentation (user, developer). Source code documentation systems: doxygen, Javadoc, pydoc, sphinx; Reference: FOGEL Ch. 3 (Wikis, Website) 23/08 Studio class for \"Professional Project\" activity Studio class for \"Professional Project\" activity 28/08 Ensuring others can work on the project: API documentation code quality 30/08 Software distribution and versioning Software distribution tools. Types of distribution. Versioning schemes. Reference: FOGEL Ch. 7 04/09 How to make software work in multiple countries? Localization and internationalization. Gettext tool for translations and .po format. 06/09 Software testing Types of software testing: unit, integration, and interface. Testing tools: pytest, selenium. 11/09 Studio class for \"Software Testing\" activity Studio class for \"Software Testing\" activity 13/09 Software licenses Copyrights in Brazil, patents, and software licenses; Reference: LAURENT Ch. 1 and 5, STALLMAN Ch. 6 18/09 Introduction to contributions in open projects - Activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 20/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 25/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 27/09 Working in software communities Assessment metrics for the second part of the course; Communication and teamwork. Reference: RAYMOND Ch. 4 02/10 Course project Studio class for project development 04/10 Course project Studio class for project development 09/10 EXAM WEEK EXAM WEEK 11/10 EXAM WEEK EXAM WEEK 16/10 Course project Studio class for project development 18/10 Course project Studio class for project development 23/10 Course project Studio class for project development 25/10 Course project Studio class for project development 30/10 Course project Studio class for project development 01/11 Course project Studio class for project development 06/11 Course project Studio class for project development 08/11 Course project Studio class for project development 13/11 Course project Studio class for project development 15/11 PUBLIC HOLIDAY PUBLIC HOLIDAY 20/11 Topics on free culture and software communities nan 22/11 Topics on free culture and software communities nan 27/11 Topics on free culture and software communities nan 29/11 Topics on free culture and software communities nan 04/12 EXAM WEEK EXAM WEEK 06/12 EXAM WEEK EXAM WEEK"},{"location":"_snippets/alunos/","title":"Alunos","text":"Abel Cavalcante De Andrade Antonio Fonseca Caio Emmanuel Soares Rocha Cicero Tiago Carneiro Valentim Henrique Sim\u00f5es Alberti Igor Montagner Joao Pedro Gianfaldoni De Andrade Jor\u00e1s Cust\u00f3dio Campos De Oliveira Nat\u00e1lia Queiroz Menezes Carreras Rafael Libertini"},{"location":"_snippets/plano-de-aulas/","title":"Plano de aulas","text":"Date Question/Problem/Challenge Content 14/08 Introduction to the course and its challenges Workflow with distributed version control: forks, patches, pull requests, and local repositories. Technical and non-technical aspects surrounding software: infrastructure, support, marketing, funding. Reference: FOGEL Ch. 3; Additional reading: TAPSCOTT & WILLIAMS. 16/08 First code contribution Workflow with distributed version control: ammend, rebase, revert. 21/08 Project documentation and what to do when it doesn't exist Types of documentation (user, developer). Source code documentation systems: doxygen, Javadoc, pydoc, sphinx; Reference: FOGEL Ch. 3 (Wikis, Website) 23/08 Studio class for \"Professional Project\" activity Studio class for \"Professional Project\" activity 28/08 Ensuring others can work on the project: API documentation code quality 30/08 Software distribution and versioning Software distribution tools. Types of distribution. Versioning schemes. Reference: FOGEL Ch. 7 04/09 How to make software work in multiple countries? Localization and internationalization. Gettext tool for translations and .po format. 06/09 Software testing Types of software testing: unit, integration, and interface. Testing tools: pytest, selenium. 11/09 Studio class for \"Software Testing\" activity Studio class for \"Software Testing\" activity 13/09 Software licenses Copyrights in Brazil, patents, and software licenses; Reference: LAURENT Ch. 1 and 5, STALLMAN Ch. 6 18/09 Introduction to contributions in open projects - Activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 20/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 25/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 27/09 Working in software communities Assessment metrics for the second part of the course; Communication and teamwork. Reference: RAYMOND Ch. 4 02/10 Course project Studio class for project development 04/10 Course project Studio class for project development 09/10 EXAM WEEK EXAM WEEK 11/10 EXAM WEEK EXAM WEEK 16/10 Course project Studio class for project development 18/10 Course project Studio class for project development 23/10 Course project Studio class for project development 25/10 Course project Studio class for project development 30/10 Course project Studio class for project development 01/11 Course project Studio class for project development 06/11 Course project Studio class for project development 08/11 Course project Studio class for project development 13/11 Course project Studio class for project development 15/11 PUBLIC HOLIDAY PUBLIC HOLIDAY 20/11 Topics on free culture and software communities nan 22/11 Topics on free culture and software communities nan 27/11 Topics on free culture and software communities nan 29/11 Topics on free culture and software communities nan 04/12 EXAM WEEK EXAM WEEK 06/12 EXAM WEEK EXAM WEEK"},{"location":"_snippets/skills-code/","title":"Skills code","text":"id Name Description XP Date 21 Code Contribution Submitted a pull request fixing a bug. 7 04/12 22 Contribution Accepted! A non-trivial pull request was accepted by an external project. 13 04/12 23 Simple Contribution Accepted! A simple pull request (with trivial changes or small code refactorings) was accepted by an external project. 3 04/12 24 Bug Report Reported a bug in a repository, and another user was able to reproduce it. 5 04/12 25 Feature Request Made a request for a new feature in a software. 2 04/12 26 INSPER Project Made additional contributions to an INSPER educational project. 5 04/12"},{"location":"_snippets/skills-community/","title":"Skills community","text":"id Name Description XP Date 40 Indirect Issue Conversations in an issue or pull request led other users to open issues reporting new bugs/improvements. 3 04/12 41 Beta Tester When reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue. 3 04/12 42 Translation Accepted! Made a translation that was accepted in an open-source software. 5 04/12 43 New Languages Added support for translations in a previously non-translatable software. 10 04/12 44 Reviewer Reviewed minor errors in the documentation of a project, and your modifications were accepted. 2 04/12 45 Documentation Contribution Closed an issue marked as docs. 7 04/12 46 Project Pitch Delivered a project pitch. 0 04/12 47 Pitch Accepted! Contributed to a project presented in class. 5 04/12 48 Accepted Suggestion! Another student contributed to the project you pitched. 3 04/12 49 PR Replay Presented (in 15 minutes) the process of resolving a bug in class. 5 04/12"},{"location":"_snippets/skills-impact/","title":"Skills impact","text":"id Name Description XP Date 60 Speaker Gave a talk about libraries or open-source software. 20 04/12 61 Helpdesk Had an accepted answer on sites like StackOverflow or email lists. 4 04/12 62 Published Contribution One of your contributions was included in a release. 10 04/12 63 VIP Guest After making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill. 5 04/12 64 3 Submitted PRs Submitted 3 pull requests to the same project. 10 04/12 65 3 Accepted PRs 3 pull requests you submitted to a project were accepted. 30 04/12 66 Shoutout Something you did was mentioned by the project on social media or through an official channel. 10 04/12 77 Hacktoberfest Participated in Hacktoberfest by submitting 3 pull requests to external projects. 20 04/12"},{"location":"_snippets/skills-tutorial/","title":"Skills tutorial","text":"id Name Description XP Date 1 First Steps Added to the discipline's repository. 2 25/09 2 Exploring a Project's Environment Researched the history and community of people and services around a project. 3 25/09 3 Undocumented Project Received an undocumented system and got it up and running. 5 25/09 4 Professional Project Refactored poorly written code and created a web page for it. 5 25/09 5 Tested and Approved Created unit tests and interface tests for the challenge server. 5 25/09 6 Python Package Created a Python package installable via pip. 3 25/09 7 Dockerfile Created automated deployment for a Python web system. 3 25/09 8 Basic Translation Used translation tools to translate and localize a small command-line program. 2 25/09 10 FLOSS Research Delivered a long presentation on a recent and relevant topic related to free and open-source software. 5 04/12 11 Better code Addressed linting problems in a poorly written project 5 25/09 12 Release created Created a release and published a binary package for users 5 25/09"},{"location":"aulas/02-comunidades-de-software/","title":"02 - Comunidades de Software","text":"

    A atividade desta aula envolve a cria\u00e7\u00e3o de uma apresenta\u00e7\u00e3o explicando como s\u00e3o organizadas as comunidades ao redor dos seguintes projetos de software:

    1. Docker
    2. GIMP
    3. Kubernetes
    4. flatpak
    5. Godot engine
    6. GNOME
    7. TensorFlow
    8. digiKam
    9. Shotcut

    Cada grupo de 3 alunos dever\u00e1 escolher um projeto acima e pesquisar os seguintes pontos.

    1. Para qu\u00ea serve o projeto?
    2. Onde est\u00e1 o c\u00f3digo fonte? Quais tecnologias s\u00e3o usadas?
    3. Qual a licen\u00e7a? Existem guidelines p\u00fablicos ou algum tipo de burocracia para contribui\u00e7\u00f5es?
    4. Existe documenta\u00e7\u00e3o de desenvolvedor?
      • Parece f\u00e1cil de compilar/rodar?
      • Parece f\u00e1cil de modificar?
    5. Como o projeto \u00e9 comandado?

      • Quem s\u00e3o as grandes figuras (desenvolvedores, evangelistas, etc) do projeto? Se o projeto for grande, cite duas \u00e1reas diferentes neste item.
      • Existe um roadmap p\u00fablico?
      • S\u00e3o aceitas contribui\u00e7\u00f5es externas? Por qual via?
      • As decis\u00f5es s\u00e3o tomadas por quem?
    6. Onde encontrar os membros do projeto? Onde pedir ajuda?

    7. O projeto arrecada fundos?
      • Existem empresas patrocinando desenvolvedores?
      • Quanto foi arrecadado? E gasto? Com quais fins?
      • Quem decide como gastar?

    O trabalho do grupo ser\u00e1, ent\u00e3o, criar uma apresenta\u00e7\u00e3o de 10 minutos que responda as perguntas acima.

    As apresenta\u00e7\u00f5es da vers\u00e3o do curso 2022/2 podem ser acessadas nos links abaixo:

    1. Docker
    2. GIMP
    3. Kubernetes
    4. flatpak
    5. Godot engine
    6. GNOME
    7. TensorFlow
    8. digiKam
    9. Shotcut
    "},{"location":"aulas/02-comunidades-de-software/slides/","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_1","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#fluxo-de-trabalho-distribuido-e-comunidades-de-software","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/02-comunidades-de-software/slides/#modelo-github-fork-pull-request","title":"Modelo Github fork + pull request","text":"

    Fonte: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    "},{"location":"aulas/02-comunidades-de-software/slides/#modelo-github-fork-pull-request_1","title":"Modelo Github fork + pull request","text":"

    Fonte: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    "},{"location":"aulas/02-comunidades-de-software/slides/#fluxo-de-trabalho-outros-modelos","title":"Fluxo de Trabalho: outros modelos","text":"
    1. Enviar patch via lista de e-mails (ex. Linux)
    2. Ferramentas de code review (ex. KDE - Phabricator)
    3. Patch \u00e9 anexado no Bug Tracker (ex. Haiku, KDE)
    4. N\u00e3o recebe contribui\u00e7\u00f5es externas
    "},{"location":"aulas/02-comunidades-de-software/slides/#revisao-dos-prs-da-aula-passada","title":"Revis\u00e3o dos PRs da aula passada","text":""},{"location":"aulas/02-comunidades-de-software/slides/#erros-comuns","title":"Erros comuns","text":""},{"location":"aulas/02-comunidades-de-software/slides/#erro-0-o-arquivo-login-achievements","title":"Erro 0: o arquivo login-achievements","text":"

    Como consertar: Crie um novo commit com a data certa e veja o erro 2.

    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-1-arquivos-extras-no-pr","title":"Erro 1: arquivos extras no PR","text":"

    Erro: modificar arquivos n\u00e3o relacionados a sua mudan\u00e7a proposta.

    "},{"location":"aulas/02-comunidades-de-software/slides/#_2","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Ideal:

    1. Um Pull Request dever\u00e1 conter o somente os arquivos relacionados a modifica\u00e7\u00e3o proposta.
    2. Cada modifica\u00e7\u00e3o proposta est\u00e1 em um Pull Request separado

    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-1-arquivos-extras-no-pr_1","title":"Erro 1: arquivos extras no PR","text":"

    Como consertar: git revert cria um commit que desfaz altera\u00e7\u00f5es anteriores.

    Op\u00e7\u00f5es extras:

    • --no-commit: s\u00f3 adiciona as modifica\u00e7\u00f5es, mas n\u00e3o faz o commit. Permite desfazer parcialmente um commit.

    Fonte: https://www.atlassian.com/git/tutorials/

    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-2-pr-contem-mais-de-um-commit","title":"Erro 2: PR cont\u00e9m mais de um commit","text":"

    Erro: o PR est\u00e1 espalhado em v\u00e1rios commits.

    "},{"location":"aulas/02-comunidades-de-software/slides/#_3","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Ideal:

    1. Colocar toda sua modifica\u00e7\u00e3o em um s\u00f3 commit ajuda a entender o que foi modificado no PR.
    2. Mant\u00e9m hist\u00f3rico limpo, com um commit por bug consertado ou funcionalidade adicionada.
    3. Facilita encontrar erros e desfazer a modifica\u00e7\u00e3o caso ela seja problem\u00e1tica (usando `git revert')
    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-2-pr-contem-mais-de-um-commit_1","title":"Erro 2: PR cont\u00e9m mais de um commit","text":""},{"location":"aulas/02-comunidades-de-software/slides/#erro-2-pr-contem-mais-de-um-commit_2","title":"Erro 2: PR cont\u00e9m mais de um commit","text":"

    Como consertar: git rebase -i master permite remover e juntar commits do branch atual que n\u00e3o estejam no master.

    Fonte: https://www.atlassian.com/git/tutorials/

    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-3-mensagens-de-commit-nao-descritivas","title":"Erro 3: Mensagens de commit n\u00e3o descritivas","text":"

    Como consertar: git commit --amend permite modificar o \u00faltimo commit feito.

    "},{"location":"aulas/02-comunidades-de-software/slides/#erro-4-pull-request-com-descricao-ruim","title":"Erro 4: Pull Request com descri\u00e7\u00e3o ruim","text":"

    Como consertar: S\u00f3 editar na interface do Github.

    "},{"location":"aulas/02-comunidades-de-software/slides/#consertar-em-casa-e-pedir-review-via-github","title":"Consertar em casa e pedir review via Github","text":""},{"location":"aulas/02-comunidades-de-software/slides/#lembrete-se-nao-der-push-nao-estragou-nada","title":"Lembrete: se n\u00e3o der push n\u00e3o estragou nada","text":""},{"location":"aulas/02-comunidades-de-software/slides/#lembrete-ii-git-log-mostra-seu-historico-atual","title":"Lembrete II: git log mostra seu hist\u00f3rico atual","text":""},{"location":"aulas/02-comunidades-de-software/slides/#dica-se-modificou-commits-ja-publicados-use-git-push-f-para-sobrescrever","title":"Dica: se modificou commits j\u00e1 publicados use git push -f para sobrescrever","text":""},{"location":"aulas/02-comunidades-de-software/slides/#nem-todos-os-alunos-que-estao-matriculados-na-disciplina-fizeram-a-atividade-da-ultima-aula","title":"Nem todos os alunos que est\u00e3o matriculados na disciplina fizeram a atividade da \u00faltima aula!","text":"
    python dev-aberto.py list-users\n
    "},{"location":"aulas/02-comunidades-de-software/slides/#comunidades-de-software","title":"Comunidades de software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#discussao","title":"Discuss\u00e3o","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_4","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Pergunta 1: quais s\u00e3o os softwares que voc\u00eas mais utilizam no dia a dia?

    "},{"location":"aulas/02-comunidades-de-software/slides/#_5","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_6","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_7","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Pergunta 2: quem \u00e9 o principal desenvolvedor do projeto?

    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-kernel-linux","title":"Exemplo: Kernel Linux","text":"

    Funda\u00e7\u00e3o d\u00e1 suporte ao desenvolvimento do Kernel Linux e \u00e0 cria\u00e7\u00e3o de um ecossistema de software de c\u00f3digo aberto ao seu redor.

    Apoio:

    • Financeiro
    • Propriedade intelectual
    • Infraestrutura
    • Servi\u00e7os e treinamento
    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-kernel-linux_1","title":"Exemplo: Kernel Linux","text":"

    Empresas que patrocinam desenvolvimento:

    1. Individuais (11,95%)
    2. Intel (10,01%)
    3. Red Hat (8,90%)
    4. Desconhecido (4,09%)
    5. IBM (3,79%)
    6. SUSE (3,49%)
    7. Linaro (2,96%)
    8. Consultores (2,96%)
    9. Google (2,79%)
    10. Samsung (2,28%)

    Fonte: \"2020 Linux Kernel Development Report\"

    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-ubuntu","title":"Exemplo: Ubuntu","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_8","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_9","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_10","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_11","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Empresa privada controla o desenvolvimento do Ubuntu. Obtem recursos via

    • Doa\u00e7\u00f5es
    • Servi\u00e7os de desenvolvimento e consultoria
    • Treinamento
    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-gitlab","title":"Exemplo: Gitlab","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_12","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_13","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_14","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_15","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Empresa financiada at\u00e9 agora por VC (Venture Capital) em busca de lucro.

    • Op\u00e7\u00e3o de planos gr\u00e1tis com software de c\u00f3digo aberto
    • Op\u00e7\u00e3o de planos corporativos com mais funcionalidades e suporte
    • Instala\u00e7\u00f5es locais
    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-elementary","title":"Exemplo: Elementary","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_16","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_17","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Distribui\u00e7\u00e3o linux comandada por uma empresa \"min\u00fascula\" focada em experi\u00eancia de usu\u00e1rio. Recursos s\u00e3o obtidos via

    • Patroc\u00ednios individuais e por empresas
    • Modelo pay-what-you-want (loja de aplicativos e sistema operacional)
    • Hardware com o sistema pr\u00e9-instalado

    "},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-linux-mint","title":"Exemplo: Linux Mint","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_18","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Distribui\u00e7\u00e3o linux cujo objetivo \u00e9 que tudo funcione direto na instala\u00e7\u00e3o. \u00c9 considerada boa para iniciantes.

    "},{"location":"aulas/02-comunidades-de-software/slides/#outras-fontes","title":"Outras fontes","text":"

    Diversas outras maneiras de conseguir suporte e financiamento

    "},{"location":"aulas/02-comunidades-de-software/slides/#razoes-para-financiar-empresa","title":"Raz\u00f5es para financiar (empresa)","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_19","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
    • \"Adquirir\" especialistas em uma tecnologia
    • Vender suporte ou consultoria
    • Marketing
    • Licen\u00e7a de software \"obriga\"
    "},{"location":"aulas/02-comunidades-de-software/slides/#_20","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_21","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Nem sempre o que \u00e9 financiado termina em um formato \"aproveit\u00e1vel\" por terceiros (ex: Android/Linux, TiVO)

    \"Tivoization is the practice of designing hardware that incorporates software under the terms of a copyleft software license like the GNU General Public License (GNU GPL), but uses hardware restrictions or digital rights management (DRM) to prevent users from running modified versions of the software on that hardware\" [Wikipedia]

    "},{"location":"aulas/02-comunidades-de-software/slides/#razoes-para-contribuir-individuo","title":"Raz\u00f5es para contribuir (indiv\u00edduo)","text":"
    • Profissionais
      • Reputa\u00e7\u00e3o / Curr\u00edculo
      • Necessidade de neg\u00f3cio
    • Pessoais
      • Altru\u00edsmo / Ideologia
      • Sensa\u00e7\u00e3o de realiza\u00e7\u00e3o pessoal
      • Exerc\u00edcio de criatividade
      • Resolver um problema de seu interesse
    "},{"location":"aulas/02-comunidades-de-software/slides/#atividade-explorando-o-entorno-de-um-projeto","title":"Atividade: Explorando o entorno de um projeto","text":"
    • Pesquisar como as comunidades de alguns projetos est\u00e3o organizadas
    • Produzir uma apresenta\u00e7\u00e3o resumindo suas descobertas
    "},{"location":"aulas/02-comunidades-de-software/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_22","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#fluxo-de-trabalho-distribuido-e-comunidades-de-software_1","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/","title":"04 - Discuss\u00f5es: documenta\u00e7\u00e3o de projetos","text":"

    A aula de hoje \u00e9 est\u00fadio para trabalhar na atividade da aula passada mais tempo para discuss\u00f5es.

    "},{"location":"aulas/04-discussao-documentacao-de-software/slides/","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#a-ausencia-de-documentacao-de-software","title":"(A aus\u00eancia de d)ocumenta\u00e7\u00e3o de software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-o-que-faz-o-projeto","title":"Discuss\u00e3o: o que faz o projeto?","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#servidor-de-desafios","title":"Servidor de desafios","text":"

    Voc\u00eas rodaram um MVP do servidor de desafios. Veja abaixo seu estado atual:

    https://github.com/Insper/servidor-de-desafios

    "},{"location":"aulas/04-discussao-documentacao-de-software/slides/#servidor-de-desafios_1","title":"Servidor de desafios","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-como-o-projeto-esta-organizado-tecnologias","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (tecnologias)","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-como-o-projeto-esta-organizado-codigo","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (c\u00f3digo)","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-avalie-a-arquitetura-do-projeto","title":"Discuss\u00e3o: avalie a arquitetura do projeto","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-avalie-a-qualidade-de-codigo-do-projeto","title":"Discuss\u00e3o: avalie a qualidade de c\u00f3digo do projeto.","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10_1","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-avalie-a-seguranca-do-projeto","title":"Discuss\u00e3o: avalie a seguran\u00e7a do projeto.","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10_2","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-esse-projeto-e-um-projeto-profissional","title":"Discuss\u00e3o: esse projeto \u00e9 um projeto \"profissional\"?","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10_3","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-o-que-voce-incluiria-na-documentacao-do-projeto","title":"Discuss\u00e3o: o que voc\u00ea incluiria na documenta\u00e7\u00e3o do projeto?","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#proximas-aula","title":"Pr\u00f3ximas aula","text":"

    Entender o qu\u00ea \u00e9 um projeto profissional:

    • documenta\u00e7\u00e3o de usu\u00e1rio e desenvolvedor
    • boas pr\u00e1ticas de programa\u00e7\u00e3o e qualidade de c\u00f3digo
    • integra\u00e7\u00e3o de c\u00f3digo e documenta\u00e7\u00e3o em um mesmo reposit\u00f3rio
    "},{"location":"aulas/04-discussao-documentacao-de-software/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#a-ausencia-de-documentacao-de-software_1","title":"(A aus\u00eancia de d)ocumenta\u00e7\u00e3o de software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/05-projeto-profissional/","title":"05 - Projeto Profissional","text":"

    Existe um momento em que ele j\u00e1 soluciona um problema para o autor e come\u00e7a a ficar claro que ele \u00e9 de interesse de outras pessoas. Vamos considerar que o Servidor de Desafios chegou neste momento e transform\u00e1-lo em um projeto \"profissional\".

    Seu trabalho neste roteiro ser\u00e1 preparar o projeto para ser apresentado \"oficialmente\" a outros usu\u00e1rios. Ou seja, far\u00e1 mudan\u00e7as para melhorar a qualidade do c\u00f3digo e criar\u00e1 uma p\u00e1gina para o projeto apresentando-o e provendo instru\u00e7\u00f5es de instala\u00e7\u00e3o e uso.

    Para entregar esta tarefa voc\u00ea dever\u00e1 criar um reposit\u00f3rio softdes-desafios em seu usu\u00e1rio, colocar o servidor de desafios l\u00e1 e hospedar sua documenta\u00e7\u00e3o usando Github Pages. Com isto pronto envie o trabalho de voc\u00eas via PR para o reposit\u00f3rio da disciplina.

    {\"skill_id\": 4, \"metadata\": {\"date\": \"2022-09-01\", \"url\": \"http...\", \"group\": []}\n

    Os itens obrigat\u00f3rios s\u00e3o descritos nos itens abaixo.

    "},{"location":"aulas/05-projeto-profissional/#itens-basicos-de-qualidade","title":"Itens b\u00e1sicos de qualidade","text":"
    • Adicionar um README ao projeto
      • Adicione uma descri\u00e7\u00e3o do projeto
      • Screenshot
      • Links para docs de Desenvolvimento e Usu\u00e1rio
    • Organizar pastas seguindo uma estrutura em que o c\u00f3digo est\u00e1 em src e a documenta\u00e7\u00e3o oficial em docs
    • Subir c\u00f3digo no Github
    "},{"location":"aulas/05-projeto-profissional/#qualidade-de-codigo","title":"Qualidade de c\u00f3digo","text":"

    Nosso c\u00f3digo est\u00e1 mal formatado e tem v\u00e1rias pr\u00e1ticas ruins de programa\u00e7\u00e3o. O pylint detecta estes problemas e d\u00e1 uma nota para seu c\u00f3digo. Melhore a nota do Servidor de Desafios eliminando estes problemas do c\u00f3digo. Alguns dos problemas s\u00e3o de resolu\u00e7\u00e3o simples e podem ser feitos por ferramentas, mas outros requerem uma aten\u00e7\u00e3o \"humana\"

    Ele n\u00e3o precisa estar 100%, mas voc\u00ea precisa eliminar grande parte dos erros mais bizarros. Ap\u00f3s fazer as corre\u00e7\u00f5es crie um novo commit e prossiga.

    Danger

    Certifique-se que o projeto continua funcionando! Alguns erros, como usar exec ou eval s\u00e3o inerentes ao projeto e n\u00e3o podem ser \"consertados\".

    "},{"location":"aulas/05-projeto-profissional/#documentacao","title":"Documenta\u00e7\u00e3o","text":"

    O mkdocs \u00e9 uma ferramenta de documenta\u00e7\u00e3o de software para gerar uma p\u00e1gina web de documenta\u00e7\u00e3o para o projeto. Vamos us\u00e1-lo para documenta\u00e7\u00e3o de desenvolvimento e de usu\u00e1rio do nosso projeto.

    Tip

    O mkdocs possui v\u00e1rios temas. Escolha um que voc\u00ea goste.

    "},{"location":"aulas/05-projeto-profissional/#documentacao-de-usuario","title":"Documenta\u00e7\u00e3o de usu\u00e1rio","text":"

    Os seguintes itens devem estar presentes:

    • Uma p\u00e1gina inicial descrevendo o projeto e explicando seu uso esperado. Inclua links e screenshots do software rodando.
    • Uma p\u00e1gina de guia de usu\u00e1rio para alunos. Este guia dever\u00e1 mostrar passo a passo as seguintes tarefa
      • entrar no servidor de desafios
      • enviar solu\u00e7\u00e3o correta para desafio
      • enviar solu\u00e7\u00e3o errada
    • Uma p\u00e1gina de guia de usu\u00e1rio para professores. Ela dever\u00e1 descrever:
      • como adicionar usu\u00e1rios (usando os arquivos users.csv e add_user.py)
      • como adicionar novos desafios (linha de comando mesmo)
    "},{"location":"aulas/05-projeto-profissional/#documentacao-de-desenvolvimento","title":"Documenta\u00e7\u00e3o de desenvolvimento","text":"

    As seguintes informa\u00e7\u00f5es devem estar presentes:

    • como configurar ambiente de desenvolvimento
    • instala\u00e7\u00e3o do software
    • estrutura do c\u00f3digo em alto n\u00edvel
    "},{"location":"aulas/05-projeto-profissional/slides/","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"aulas/05-projeto-profissional/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api-e-linters","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"aulas/05-projeto-profissional/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/05-projeto-profissional/slides/#servidor-de-desafios","title":"Servidor de desafios","text":"
    • Arquitetura
    • Qualidade de c\u00f3digo
    • Seguran\u00e7a
    "},{"location":"aulas/05-projeto-profissional/slides/#software-tem-historia-e-depende-de-pessoas-para-evoluir","title":"Software tem hist\u00f3ria e depende de pessoas para evoluir","text":""},{"location":"aulas/05-projeto-profissional/slides/#codigo-vs-software-profissional","title":"C\u00f3digo vs software profissional","text":"

    Os seguintes pontos transformam um c\u00f3digo que fiz para mim em algo \u00fatil para outras pessoas

    1. Tradu\u00e7\u00f5es e internacionaliza\u00e7\u00e3o (datas)
    2. Documenta\u00e7\u00e3o de usu\u00e1rio e de desenvolvimento
    3. Algum processo de qualidade de software
      • testes automatizados
      • formata\u00e7\u00e3o de c\u00f3digo e estrutura de repo
    4. pacotes de instala\u00e7\u00e3o
    "},{"location":"aulas/05-projeto-profissional/slides/#hoje","title":"Hoje","text":"
    • Ferramentas de documenta\u00e7\u00e3o
    • Documenta\u00e7\u00e3o de API usando
    • Padr\u00f5es de formata\u00e7\u00e3o de c\u00f3digo
      • linters
      • PEP8
    "},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api","title":"Documenta\u00e7\u00e3o de API","text":"

    Objetivo: explicar o funcionamento das fun\u00e7\u00f5es, classes e m\u00f3dulos de um programa.

    • Focado em detalhes
    • Documenta os argumentos esperados e em quais situa\u00e7\u00f5es a fun\u00e7\u00e3o funciona
    • Tipicamente obtida direto do c\u00f3digo
    • N\u00e3o detalha como as fun\u00e7\u00f5es s\u00e3o usadas em conjunto
    "},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api_1","title":"Documenta\u00e7\u00e3o de API","text":""},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api_2","title":"Documenta\u00e7\u00e3o de API","text":"

    ref

    "},{"location":"aulas/05-projeto-profissional/slides/#ferramentas","title":"Ferramentas","text":"
    • Python:
      • pydoc, numpydoc
    • C/C++
      • Doxygen
    • Java
      • Javadoc

    Em geral podem ser plugadas em alguma ferramenta de documenta\u00e7\u00e3o de projetos.

    "},{"location":"aulas/05-projeto-profissional/slides/#padroes-de-codificacao","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"aulas/05-projeto-profissional/slides/#padroes-de-codificacao_1","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"aulas/05-projeto-profissional/slides/#padroes-de-codificacao_2","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":"
    • Cada projeto tem o seu
    • Algumas linguagens tem um estilo padr\u00e3o
      • Python - PEP8
    • Ferramentas ajudam a conferir (for\u00e7ar) um estilo espec\u00edfico
    "},{"location":"aulas/05-projeto-profissional/slides/#ferramentas_1","title":"Ferramentas","text":"
    • Python: pylint, black
    • C/C++: splint, cppchecker, gcc (op\u00e7\u00f5es -Wall, -Wextra)
    • Java: flag -Xlint
    • Javascript: ESlint, TSlint (typescript)
    "},{"location":"aulas/05-projeto-profissional/slides/#_1","title":"Documenta\u00e7\u00e3o de API e linters","text":"

    Ajudam a manter c\u00f3digo limpo e leg\u00edvel. Podem ser plugadas no seu editor favorito.

    "},{"location":"aulas/05-projeto-profissional/slides/#execucao-obrigatoria-para-muitos-projetos-grandes","title":"Execu\u00e7\u00e3o obrigat\u00f3ria para muitos projetos grandes","text":""},{"location":"aulas/05-projeto-profissional/slides/#atividade-pratica-projeto-profissional","title":"Atividade pr\u00e1tica: Projeto profissional","text":"

    Objetivo: Transformar um c\u00f3digo perdido em um projeto \"completo\"

    \"metadata\": {\"url\": \"github pages criado\", \"group\": [\"ate tr\u00eas\", \"alunos\"]}

    "},{"location":"aulas/05-projeto-profissional/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api-testes","title":"Documenta\u00e7\u00e3o de API + testes","text":""},{"location":"aulas/05-projeto-profissional/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/06-distribuicao-software/","title":"06 - Distribui\u00e7\u00e3o de Software","text":"

    Nesta aula complementaremos as \u00faltimas discuss\u00f5es criando um pequeno pacote Python instal\u00e1vel via pip. Com isto chegamos mais perto de um projeto que esteja preparado para que outras pessoas o utilizem e colaborem em seu desenvolvimento.

    "},{"location":"aulas/06-distribuicao-software/#distribuindo-software-para-desenvolvedores-pacote-python-basico","title":"Distribuindo software para desenvolvedores: pacote Python b\u00e1sico","text":"

    Nosso m\u00f3dulo se chamar\u00e1 dev_aberto e disponibilizar\u00e1 um programa execut\u00e1vel hello.py. Crie a seguinte estrutura de pastas para nosso pacote.

    Important

    Baixe os arquivos que usaremos neste link

    pacote_exemplo/\n    dev_aberto/\n        __init__.py\n        dev_aberto.py\n    scripts/\n        hello.py\n    README.md\n    LICENSE\n

    Exercise

    com a estrutura acima, qual seria o import a ser feito para usar a fun\u00e7\u00e3o hello do arquivo dev_aberto.py?

    Exercise

    Pesquise para que serve o arquivo __init__.py e use-o para permitir importar hello usando somente import dev_aberto.

    Exercise

    Crie um projeto no github para esta atividade. Fa\u00e7a um primeiro commit nele com o conte\u00fado \"zerado\" do projeto.

    • Um arquivo README contendo uma frase de descri\u00e7\u00e3o do pacote e um link para o reposit\u00f3rio da disciplina.
    • Um arquivo LICENSE com a licen\u00e7a MIT.
    "},{"location":"aulas/06-distribuicao-software/#o-arquivo-setuppy","title":"O arquivo setup.py","text":"

    A descri\u00e7\u00e3o de um pacote Python \u00e9 feita usando um arquivo setup.py Veja abaixo uma vers\u00e3o inicial deste arquivo:

    from setuptools import setup\n\nsetup(name='dev_aberto_seunome',\n      version='0.1',\n      packages=['dev_aberto']\n      )\n

    Exercise

    Crie o arquivo acima no seu projeto, substituindo seunome por .... seu nome. Instale o seu pr\u00f3prio pacote usando

    pip install .

    Exercise

    Em outra pasta, abra um console Python e tente importar seu m\u00f3dulo.

    Exercise

    Pesquise quais argumentos s\u00e3o usados para especificar o autor do pacote, as vers\u00f5es de Python e sistemas operacionais suportados. Preencha estes valores com suas informa\u00e7\u00f5es. Note que o pip leva estas informa\u00e7\u00f5es em conta e s\u00f3 instalar\u00e1 um pacote se ele estiver em um ambiente suportado.

    "},{"location":"aulas/06-distribuicao-software/#dependencias","title":"Depend\u00eancias","text":"

    Para adicionar pacotes que s\u00e3o automaticamente instalados quando instalamos nosso pacote precisamos identific\u00e1-los no nosso arquivo setup.py. Para adicionar uma depend\u00eancia de instala\u00e7\u00e3o basta adicionar o seguinte argumento:

        ...\n    install_requires=[\n        'pacote>=1.0',\n        'pacote2'\n    ],\n    ...\n

    Exercise

    Verifique as depend\u00eancias do c\u00f3digo e adicione-as no setup.py.

    "},{"location":"aulas/06-distribuicao-software/#requirementstxt","title":"requirements.txt","text":"

    Muitos softwares usam tamb\u00e9m um arquivo requirements.txt para listar todas as depend\u00eancias do software de modo a obter uma instala\u00e7\u00e3o id\u00eantica \u00e0 do desenvolvedor. Isto \u00e9 importante para uniformizar os ambientes de desenvolvimento. Ou seja, este arquivo nunca ser\u00e1 usado por usu\u00e1rios finais.

    Exercise

    Crie um requirements.txt para seu projeto com as mesmas depend\u00eancias listadas no seu setup.py.

    "},{"location":"aulas/06-distribuicao-software/#scripts-executaveis","title":"Scripts execut\u00e1veis","text":"

    Al\u00e9m de instalar o nosso m\u00f3dulo para uso via import desejamos tamb\u00e9m disponibilizar o arquivo hello.py como um execut\u00e1vel para todo o sistema. Isto pode ser feito adicionando a seguinte linha no nosso setup.py indicando que scripts/hello.py dever\u00e1 ser instalado como um execut\u00e1vel.

        ...\n    scripts=['scripts/hello.py'],\n    ...\n

    N\u00e3o se esque\u00e7a de adicionar a seguinte linha no topo de seu arquivo para que ele possa ser executado diretamente do shell:

    #!/usr/bin/env python3\n

    No Windows \u00e9 criado um execut\u00e1vel que chama nosso script, de modo que as chamdas do execut\u00e1vel continuar\u00e3o funcionando normalmente. Note que isto n\u00e3o cria menus em nenhum tipo de interface gr\u00e1fica.

    "},{"location":"aulas/06-distribuicao-software/#criando-arquivos-de-distribuicao","title":"Criando arquivos de distribui\u00e7\u00e3o","text":"

    Dois tipos de arquivos de distribui\u00e7\u00e3o podem ser usados:

    • sdist: \u00e9 um arquivo contendo os fontes do projeto, incluindo arquivos adicionais especificados usando o argumento data_files. Usado se seu projeto for Python-puro.
    • wheel: \u00e9 um formato pr\u00e9-compilado e espec\u00edfico para cada plataforma. Mais usado quando o projeto cont\u00e9m extens\u00f5es em C.

    A cria\u00e7\u00e3o de um arquivo de distribui\u00e7\u00e3o de fontes \u00e9 bem simples:

    > python setup.py sdist\n

    A instala\u00e7\u00e3o deste pacote pode ser feita via pip.

    "},{"location":"aulas/06-distribuicao-software/#envio-para-o-pypi","title":"Envio para o PyPI","text":"

    Vamos agora enviar nosso pacote para o Python Package Index para que ele possa ser instalado diretamente via pip. Para n\u00e3o poluir o reposit\u00f3rio com pacotes tempor\u00e1rios e de teste, podemos usar o TestPyPI. Toda sua infraestrutura \u00e9 igual ao oficial, mas ele \u00e9 limpo de maneira regular.

    Visite https://test.pypi.org/account/register/ e registre-se no TestPyPI.

    Ap\u00f3s o registro, usaremos o pacote twine (instal\u00e1vel via pip) para fazer o upload:

    > twine upload --repository-url https://test.pypi.org/legacy/ dist/*\n

    Voc\u00ea poder\u00e1, ent\u00e3o, instalar seu pacote a partir do test PyPI usando o seguinte comando:

    > pip install --index-url https://test.pypi.org/simple/ my_hello_nome\n
    "},{"location":"aulas/06-distribuicao-software/#entrega","title":"Entrega","text":"

    Fa\u00e7a a entrega de sua atividade adicionando a skill Pacote Python e inclua nela a url do seu reposit\u00f3rio no github.

    Objetivo: Primeira experi\u00eancia distribuindo software Python.

    \"skill_id\": 6, \"metadata\": {\"url\": \"repo-seu-pacote\"}

    "},{"location":"aulas/06-distribuicao-software/#distribuindo-software-para-usuarios-finais","title":"Distribuindo software para usu\u00e1rios finais","text":"

    Vamos agora trabalhar (em grupo) no Servidor de Desafios novamente. Seu trabalho ser\u00e1 criar um Dockerfile que roda o software de maneira \"completa\". Ou seja, o script de cria\u00e7\u00e3o do container dever\u00e1

    • instalar todas as depend\u00eancias do sistema
    • criar a base de dados, se necess\u00e1rio
    • adicionar os usu\u00e1rios presentes no arquivo users.csv, se necess\u00e1rio
    • executar o servidor e serv\u00ed-lo na porta 8080 do host
    • manter os dados adicionados ao reiniciar o container
    "},{"location":"aulas/06-distribuicao-software/#entrega_1","title":"Entrega","text":"

    Fa\u00e7a a entrega de sua atividade adicionando a skill Dockerfile segundo o modelo abaixo.

    Objetivo: Criou deploy automatizado para sistema web Python

    \"skill_id\": 7, \"metadata\": {\"url\": \"repo-servidor-de-desafios\", \"group\": [\"login1\", \"login2\"]}

    "},{"location":"aulas/06-distribuicao-software/#referencias","title":"Refer\u00eancias","text":"

    Algumas refer\u00eancias que podem ser \u00fateis:

    • https://docker-curriculum.com/
    • https://docs.docker.com/get-started/
    "},{"location":"aulas/07-localizacao/","title":"07 - Localiza\u00e7\u00e3o","text":"

    Na parte expositiva da aula tivemos uma introdu\u00e7\u00e3o aos problemas de Internacionaliza\u00e7\u00e3o (i18n) e Localiza\u00e7\u00e3o (L10N). Neste roteiro iremos praticar o uso destas t\u00e9cnicas em uma aplica\u00e7\u00e3o linha de comando de exemplo simples.

    Em ambos exemplos vamos trabalhar com o m\u00f3dulo Babel, que \u00e9 feito para facilitar a tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de aplica\u00e7\u00f5es feitas em Python. Outras linguagens de programa\u00e7\u00e3o possuem bibliotecas similares que seguem a mesma sequ\u00eancia de comandos e usam os mesmos tipos de arquivos.

    Sistemas POSIX suportam a determina\u00e7\u00e3o do locale utilizado por meio da vari\u00e1vel de ambiente LANGUAGE, que pode ser modificada para cada execu\u00e7\u00e3o de um programa. O formato padr\u00e3o usado \u00e9 <lingua>_<pais>.<codificacao>. Para portugu\u00eas do Brasil usando codifica\u00e7\u00e3o UTF8 usamos o locale pt_BR.utf8. Rodando o seguinte comando as mensagens de ajuda do ls devem aparecer em ingl\u00eas.

    LANGUAGE=en_US.utf8 ls --help

    J\u00e1 executando o comando abaixo elas devem aparecer em portugu\u00eas.

    LANGUAGE=pt_BR.utf8 ls --help

    De maneira mais geral, existe uma s\u00e9rie de vari\u00e1veis LC_* que controlam qual locale \u00e9 usado para determinado tipo de dados. Veremos a seguir como usar LC_TIME e LC_NUMERIC para controlar como datas e n\u00fameros s\u00e3o exibidos e LANGUAGE para definir a lingua de exibi\u00e7\u00e3o de um programa.

    "},{"location":"aulas/07-localizacao/#localizando-um-programa-em-python","title":"Localizando um programa em Python","text":"

    Vamos trabalhar com uma aplica\u00e7\u00e3o de linha de comando que nada mais faz que imprimir alguns dados simples como data em extenso, um n\u00famero fracion\u00e1rio grande e uma mensagem pr\u00e9-definida. O c\u00f3digo completo (arquivo cli.py) est\u00e1 abaixo.

    from datetime import date\n\nif __name__ == '__main__':\n    today = date.today()\n    print(today)\n\n    number = 240000000000.32212\n    print(number)\n\n    name = input('Input your name: ')\n    print('Hello {}'.format(name))\n
    Uma sa\u00edda poss\u00edvel seria

    2018-08-28\n240000000000.3221\nInput your name: Igor\nHello Igor\n

    Como j\u00e1 visto em aula, este programa re\u00fane tr\u00eas das principais sa\u00eddas que precisam ser formatadas: datas, n\u00fameros fracion\u00e1rios e mensagens para o usu\u00e1rio.

    "},{"location":"aulas/07-localizacao/#formatando-datas","title":"Formatando datas","text":"

    A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_TIME. O m\u00f3dulo babel.dates j\u00e1 possui diversas fun\u00e7\u00f5es que automaticamente a utilizam para fazer a localiza\u00e7\u00e3o de vari\u00e1veis do tipo Date (usando a fun\u00e7\u00e3o format_date) ou DateTime (usando format_datetime).

    Exercise

    Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar a data por extenso (ou seja, 31 de agosto de 2021).

    Exercise

    O qu\u00ea acontece quando definimos a vari\u00e1vel de ambiente LC_TIME=en_US.utf8 e rodamos o programa? E se usamos LC_TIME=pt_BR.utf8?

    "},{"location":"aulas/07-localizacao/#formatando-numeros","title":"Formatando n\u00fameros","text":"

    A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_NUMERIC. O m\u00f3dulo babel.numbers possui a fun\u00e7\u00e3o format_number que formata um n\u00famero de acordo com esta configura\u00e7\u00e3o.

    Exercise

    Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar o n\u00famero fracion\u00e1rio mostrado.

    Exercise

    Teste seu programa com LC_NUMERIC=en_US.utf8 e LC_NUMERIC=pt_BR.utf8. Os efeitos s\u00e3o os esperados?s

    "},{"location":"aulas/07-localizacao/#traduzindo-mensagens","title":"Traduzindo mensagens","text":"

    A parte final consiste em criar tradu\u00e7\u00f5es das duas strings presentes no texto. A linguagem usada \u00e9 definida pela vari\u00e1vel LANGUAGE, que pode ser definida separadamente para cada processo. Um dos pontos mais importantes \u00e9 marcar quais strings dever\u00e3o ser traduzidas para que uma equipe de tradutores n\u00e3o precise mexer no c\u00f3digo. O m\u00f3dulo gettext do Python j\u00e1 prov\u00ea suporte a esta funcionalidade, o Babel apenas fornece um conjunto de ferramentas que facilita seu uso.

    A implanta\u00e7\u00e3o do framework de tradu\u00e7\u00e3o \u00e9 feita em quatro passos:

    1. Marca\u00e7\u00e3o das strings a serem traduzidas
    2. Extra\u00e7\u00e3o destas strings do c\u00f3digo em um arquivo modelo .pot
    3. Cria\u00e7\u00e3o de tradu\u00e7\u00f5es .po a partir do modelo criado no passo anterior
    4. Compila\u00e7\u00e3o das strings traduzidas em um arquivo bin\u00e1rio .mo

    No arquivo principal de nossa aplica\u00e7\u00e3o podemos \"instalar\" o framework de tradu\u00e7\u00e3o e marcar todas nossas strings a serem traduzidas com a fun\u00e7\u00e3o _(). A instala\u00e7\u00e3o \u00e9 feita pelo seguinte trecho de c\u00f3digo.

    import gettext\ngettext.install('cli', localedir='locale') \n# cli \u00e9 o nome do arquivo em que guardamos nossas tradu\u00e7\u00f5es\n# localedir \u00e9 o caminho onde est\u00e3o armazenadas as tradu\u00e7\u00f5es. Pode ser um caminho relativo. \n

    Devemos ent\u00e3o marcar todas as strings para serem traduzidas com _(). Podemos usar _() em qualquer arquivo do projeto, mesmo que a instala\u00e7\u00e3o tenha sido feita somente no arquivo principal.

    print(_(\"Hello!\"))\n

    Os passos seguintes s\u00e3o feitos com aux\u00edlio do Babel, que efetivamente analisa nosso c\u00f3digo Python e extrai as strings para tradu\u00e7\u00e3o. A cria\u00e7\u00e3o do arquivo modelo de tradu\u00e7\u00e3o a partir dos arquivos do diret\u00f3rio atual \u00e9 feita com o seguinte comando.

    $ pybabel extract . -o cli-model.pot

    Criamos ent\u00e3o uma nova tradu\u00e7\u00e3o usando o seguinte comando. A op\u00e7\u00e3o -D indica o nome do arquivo em que as tradu\u00e7\u00f5es ser\u00e3o guardadas (usado em gettext.install). A op\u00e7\u00e3o -l indica o locale da tradu\u00e7\u00e3o. A op\u00e7\u00e3o -d indica o localedir usado em gettext.install.

    $ pybabel init -i cli-model.pot -D cli -l pt_BR -d locale

    Devemos ent\u00e3o editar o arquivo criado em locale/pt_BR/LC_MESSAGES/cli.po. Ser\u00e3o apresentados (ap\u00f3s algumas linhas de coment\u00e1rios) pares de linhas como as seguintes. O primeiro valor msgid \u00e9 a string a ser traduzida e o segundo msgstr \u00e9 a tradu\u00e7\u00e3o no locale pt_BR (pois o arquivo est\u00e1 na pasta pt_BR do localedir).

    msgid \"Input your name: \"\nmsgstr \"\"\n

    Apesar de ser poss\u00edvel fazer tudo diretamente no arquivo de texto, \u00e9 mais conveniente usar softwares como o poedit ou este editor online(https://localise.biz/free/poeditor).

    Com as strings traduzidas vamos finalmente compilar nossos resultados. Isto \u00e9 feito para que n\u00e3o seja poss\u00edvel mexer nos arquivos de tradu\u00e7\u00e3o em uma vers\u00e3o Release do programa.

    $ pybabel compile -D cli -l pt_BR -d locale

    Isto gerar\u00e1 os arquivos .mo correspondentes a ao locale pt_BR. S\u00e3o estes os arquivos carregados durante a execu\u00e7\u00e3o do programa.

    "},{"location":"aulas/07-localizacao/#teste-final","title":"Teste final","text":"

    Podemos definir a vari\u00e1vel LANGUAGE para modificar a lingua de um programa (como visto anteriormente com ls). Execute seu programa diretamente e depois setando LANGUAGE=pt_BR.utf8. Os resultados foram os esperados?

    "},{"location":"aulas/07-localizacao/#entrega","title":"Entrega","text":"

    Modifique o exerc\u00edcio da aula passada (pacote python) para suportar datas e mensagens em Ingl\u00eas e Portugu\u00eas. Fa\u00e7a a entrega de sua atividade adicionando a skill Tradu\u00e7\u00e3o b\u00e1sica segundo o modelo abaixo.

    Objetivo: Aplicou ferramentas de localiza\u00e7\u00e3o para traduzir um programa simples em linha de comando.

    \"skill_id\": 8, \"metadata\": {\"url\": \"repo-pacote-python\"}

    "},{"location":"aulas/07-localizacao/#traduzindo-no-mundo-real","title":"Traduzindo no mundo real","text":"

    Agora que voc\u00ea j\u00e1 conhece os passos necess\u00e1rios para traduzir um software \u00e9 o momento de colocar esse conhecimento em pr\u00e1tica. O trabalho de seu grupo ser\u00e1 encontrar softwares que necessitem de tradu\u00e7\u00f5es para o Portugu\u00eas brasileiro e realiz\u00e1-las. Alguns projetos tamb\u00e9m disponibilizam arquivos *.po para tradu\u00e7\u00e3o de guias de usu\u00e1rio e isto tamb\u00e9m \u00e9 v\u00e1lido neste item.

    • GNOME - sistema de tradu\u00e7\u00f5es
    • KDE - status de tradu\u00e7\u00f5es e brasileiros tradutores.
    • Inkscape
    • Openshot
    • Elementary Linux
    • Aplicativos m\u00f3veis livres no fdroid.org

    Ao ter tradu\u00e7\u00f5es aceitas por um projeto voc\u00eas receber\u00e3o a skill Tradu\u00e7\u00e3o aceita!

    "},{"location":"aulas/07-localizacao/slides/","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/07-localizacao/slides/#localizacao-e-internacionalizacao-de-software","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/07-localizacao/slides/#traducao-de-software","title":"Tradu\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#qual-a-diferenca-de-internacionalizacao-e-localizacao","title":"Qual a diferen\u00e7a de internacionaliza\u00e7\u00e3o e localiza\u00e7\u00e3o?","text":""},{"location":"aulas/07-localizacao/slides/#internacionalizacao-i18n","title":"Internacionaliza\u00e7\u00e3o (I18N)","text":"
    • Consiste em traduzir a interface de usu\u00e1rio de um software para outros idiomas.

    • Sistema Operacional guarda configura\u00e7\u00f5es de idioma e as disponibiliza para aplica\u00e7\u00f5es

    • Tipicamente \"invis\u00edvel\"

    "},{"location":"aulas/07-localizacao/slides/#localizacao-l10n","title":"Localiza\u00e7\u00e3o (L10N)","text":"

    Consiste em adaptar a maneira de mostrar

    • n\u00fameros fracion\u00e1rios
      • marcador de decimais
      • marcador de milhares
    • datas
      • nomes de meses
      • ordem de exibi\u00e7\u00e3o
    • nomes de pa\u00edses, fusos hor\u00e1rios, etc

    de acordo com as prefer\u00eancias de um usu\u00e1rio e relativos a sua cultura.

    "},{"location":"aulas/07-localizacao/slides/#i18n-e-l10n","title":"I18N e L10N","text":"

    Precisam ser

    • independentes:
      • idioma ingl\u00eas e datas no formato brasileiro
    • configur\u00e1veis
      • posso precisar trocar entre l\u00ednguas e entre formatos
    "},{"location":"aulas/07-localizacao/slides/#o-suporte-a-l10n-e-i18n-implica-modificar-codigo-fonte","title":"O suporte a L10N e I18N implica modificar c\u00f3digo fonte.","text":""},{"location":"aulas/07-localizacao/slides/#locales","title":"Locales","text":"

    Um locale \u00e9 uma tripla

    "},{"location":"aulas/07-localizacao/slides/#_1","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
    <lingua>_<pais>.<codificacao>\n
    "},{"location":"aulas/07-localizacao/slides/#_2","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    que representa configura\u00e7\u00f5es de I18N e/ou L10N para uma determinada cultura.

    "},{"location":"aulas/07-localizacao/slides/#locales_1","title":"Locales","text":"

    Exemplos:

    • Tradu\u00e7\u00e3o de File:
      • pt = Ficheiro
      • pt_BR = Arquivo
    • Formato de datas:
      • en_US: MM/DD/YY
      • en_GB: DD/MM/YY
    "},{"location":"aulas/07-localizacao/slides/#posso-usar-locales-diferentes-para-a-lingua-da-interface-de-usuario-e-para-mostrar-datas","title":"Posso usar locales diferentes para a l\u00edngua da interface de usu\u00e1rio e para mostrar datas.","text":""},{"location":"aulas/07-localizacao/slides/#configuracoes-possiveis-linux","title":"Configura\u00e7\u00f5es poss\u00edveis (Linux)","text":"
    # sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
    "},{"location":"aulas/07-localizacao/slides/#implementando-suporte-a-l10n","title":"Implementando suporte a L10N","text":"
    1. Baixar uma biblioteca de Localiza\u00e7\u00e3o
    2. Encontrar todas as exibi\u00e7\u00f5es de n\u00fameros, datas, etc
    3. Pr\u00e9-process\u00e1-las usando fun\u00e7\u00f5es da biblioteca
    "},{"location":"aulas/07-localizacao/slides/#_3","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
    # Antes \nprint('Numero:', 10.5) \n# Depois\nprint('Numero', format_number(10.5))\n
    "},{"location":"aulas/07-localizacao/slides/#_4","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    N\u00e3o \u00e9 complicado, mas \u00e9 trabalhoso

    "},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n","title":"Suporte a I18N","text":"

    Envolve 4 etapas:

    1. Marcar todas strings que devem ser traduzidas
    2. Extra\u00ed-las do c\u00f3digo fonte
    3. Criar um arquivo de tradu\u00e7\u00f5es para cada locale suportado
    4. Empacotar as tradu\u00e7\u00f5es junto com o programa
    "},{"location":"aulas/07-localizacao/slides/#_5","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    \u00c9 um pouco mais complicado, mas pode ser integrado ao processo de compila\u00e7\u00e3o de um programa.

    "},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-posix","title":"Suporte a I18N (POSIX)","text":"

    Sistemas POSIX suportam determina\u00e7\u00e3o de lingua e locale usando vari\u00e1veis de ambiente.

    • LANG para l\u00edngua
    • LC_TIME para data
    • LC_NUMERIC para n\u00fameros

    Um locale sempre \u00e9 expresso no formato

    <lingua>_<pais>.<codificacao>\n
    "},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-posix_1","title":"Suporte a I18N (POSIX)","text":"

    O comando locale mostra todas as op\u00e7\u00f5es dispon\u00edveis:

    # sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
    "},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-web","title":"Suporte a I18N (Web)","text":"

    Existem diversas maneiras de determinar um bom locale em sistemas Web:

    • Cabe\u00e7alho HTTP Accept-Language inclui as linguagens de exibi\u00e7\u00e3o suportadas pelo browser do visitante.
    • Geolocaliza\u00e7\u00e3o via IP
    • Prefer\u00eancia armazenada em banco de dados
    "},{"location":"aulas/07-localizacao/slides/#_6","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#web-e-desktop-usam-as-mesmas-tecnologias-l10n-e-i18n","title":"Web e desktop usam as mesmas tecnologias (l10n e i18n)","text":""},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-em-python","title":"Suporte a I18N (em Python)","text":"
    • M\u00f3dulo gettext da biblioteca padr\u00e3o
    • M\u00f3dulo datetime aceita o uso de locales
    • M\u00f3dulo babel faz I18N e L10N
    "},{"location":"aulas/07-localizacao/slides/#atividade-pratica-traducao-basica","title":"Atividade pr\u00e1tica: Tradu\u00e7\u00e3o b\u00e1sica","text":"

    Objetivo: usar o m\u00f3dulo Babel para traduzir uma aplica\u00e7\u00e3o do terminal.

    "},{"location":"aulas/07-localizacao/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/07-localizacao/slides/#localizacao-e-internacionalizacao-de-software_1","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr_1","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/08-testes-automatizados/","title":"08 - Testes automatizados","text":"

    O objetivo da atividade de hoje \u00e9 criar testes automatizados para o servidor de desafios. Com isso completamos nossa jornada rumo a software que possa ser desenvolvido de maneira colaborativa e que possa ser usado em situa\u00e7\u00f5es reais.

    1. Documenta\u00e7\u00e3o (usu\u00e1rios e desenvolvedor)
    2. Distribui\u00e7\u00e3o de software e versionamento
    3. Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o
    4. Testes automatizados
    "},{"location":"aulas/08-testes-automatizados/#testes-de-unidade","title":"Testes de unidade","text":"

    Uma parte do programa do servidor de desafios que pode ser testada com testes de unidade \u00e9 a fun\u00e7\u00e3o lambda_handler, que executa a fun\u00e7\u00e3o submetida pelo usu\u00e1rio. Seu trabalho ser\u00e1 criar testes usando o pytest e cobrir os seguintes casos:

    • programa submetido est\u00e1 correto
    • programa submetido n\u00e3o cont\u00e9m a fun\u00e7\u00e3o pedida
    • programa submetido retorna resultado incorreto
    "},{"location":"aulas/08-testes-automatizados/#testes-de-interface-de-usuario","title":"Testes de interface de usu\u00e1rio","text":"

    Iremos criar testes de interface de usu\u00e1rio para o Servidor de Desafios usando o Selenium. Este software permite imitar intera\u00e7\u00f5es reais de um usu\u00e1rio usando c\u00f3digo e criar testes baseado nessas intera\u00e7\u00f5es.

    Voc\u00eas devem simular os seguintes cen\u00e1rios:

    • Aluno faz login com sucesso
    • Aluno entra senha incorreta
    • Aluno envia desafio com resposta incorreta
    • Aluno envia desafio com resposta correta

    A ideia b\u00e1sica seria reproduzir os mesmos testes apresentados no manual do usu\u00e1rio.

    "},{"location":"aulas/08-testes-automatizados/#entrega","title":"Entrega","text":"

    Coloquem os scripts de teste na pasta test do reposit\u00f3rio e adicionem instru\u00e7\u00f5es de como rodar os testes no README.

    "},{"location":"aulas/08-testes-automatizados/index_2022/","title":"08 - Testes automatizados","text":"

    O objetivo da atividade de hoje \u00e9 criar testes automatizados para um projeto espec\u00edfico de software. Com isso completamos nossa jornada rumo a software que possa ser desenvolvido de maneira colaborativa e que possa ser usado em situa\u00e7\u00f5es reais.

    1. Documenta\u00e7\u00e3o (usu\u00e1rios e desenvolvedor)
    2. Distribui\u00e7\u00e3o de software e versionamento
    3. Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o
    4. Testes automatizados
    "},{"location":"aulas/08-testes-automatizados/index_2022/#biblioteca-para-implementacao-de-agentes-baseados-em-busca","title":"Biblioteca para implementa\u00e7\u00e3o de agentes baseados em busca","text":"

    O projeto AI Code implementa uma biblioteca que possui diversos algoritmos de busca pr\u00e9-prontos e alguns exemplos de utiliza\u00e7\u00e3o.

    Os exemplos de utiliza\u00e7\u00e3o j\u00e1 possuem arquivos de teste usando a biblioteca pytest, mas podem estar incompletos ou at\u00e9 mesmo errados.

    As implementa\u00e7\u00f5es dos algoritmos de busca, da biblioteca em si, n\u00e3o possuem testes. Estes algoritmos est\u00e3o implementados no arquivo SearchAlgoritms.py.

    "},{"location":"aulas/08-testes-automatizados/index_2022/#atividades","title":"Atividades","text":"
    • Fa\u00e7a um fork do projeto;
    • Leia a documenta\u00e7\u00e3o para entender os exemplos e o prop\u00f3sito da biblioteca;
    • Revise os testes;
    • Implemente ou altere 3 novos testes para um dos exemplos apresentados na documenta\u00e7\u00e3o. Justifique o motivo da sua nova implementa\u00e7\u00e3o ou altera\u00e7\u00e3o no pull request;
    • Implemente 3 novos testes para os algoritmos base da biblioteca. Fa\u00e7a isto em um pull request diferente do anterior.

    Al\u00e9m da implementa\u00e7\u00e3o dos testes, uma outra alternativa \u00e9 executar o pylint e sugerir mudan\u00e7as na formata\u00e7\u00e3o do c\u00f3digo dos arquivos search/SearchAlgorithms.py, search/Graph.py e ProblemSpecificationExample.py.

    "},{"location":"aulas/08-testes-automatizados/index_2022/#formato-de-entrega","title":"Formato de entrega","text":"

    Para a entrega do exerc\u00edcio voc\u00ea dever\u00e1:

    • implementar os dois conjuntos de testes, ou;
    • implementar um dos conjuntos de testes e as modifica\u00e7\u00f5es sugeridas pelo pylint.

    Esta atividade deve ser individual. Os PRs devem ser enviados e discutidos ao longo desta semana.

    "},{"location":"aulas/08-testes-automatizados/slides/","title":"Testes automatizados","text":""},{"location":"aulas/08-testes-automatizados/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/08-testes-automatizados/slides/#testes-automatizados","title":"Testes automatizados","text":""},{"location":"aulas/08-testes-automatizados/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/08-testes-automatizados/slides/#projeto-profissional","title":"Projeto profissional","text":"
    • Qualidade de c\u00f3digo
      • Linting - formata\u00e7\u00e3o e erros comuns
    • Documenta\u00e7\u00e3o
      • Usu\u00e1rio
      • Desenvolvedor
    "},{"location":"aulas/08-testes-automatizados/slides/#projeto-profissional_1","title":"Projeto profissional","text":"
    • Qualidade de c\u00f3digo
      • Linting - formata\u00e7\u00e3o e erros comuns
      • O c\u00f3digo funciona?
    • Documenta\u00e7\u00e3o
      • Usu\u00e1rio
      • Desenvolvedor
    "},{"location":"aulas/08-testes-automatizados/slides/#meu-programa-funciona","title":"Meu programa funciona?","text":"
    • Sob quais condi\u00e7\u00f5es?
    • Em quais plataformas?
    • Quais opera\u00e7\u00f5es s\u00e3o suportadas?
    • Consigo conferir o resultado de uma execu\u00e7\u00e3o? Se sim, existe um valor de refer\u00eancia?
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-automatizados_1","title":"Testes automatizados","text":"

    Ideia: escrever um programa que verifica se um outro programa responde como esperado

    • Definir situa\u00e7\u00f5es a serem testadas ...
    • e o resultado esperado em cada situa\u00e7\u00e3o
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-automatizados_2","title":"Testes automatizados","text":"

    N\u00e3o ajudam:

    • a revelar novos bugs
    • a garantir que um software \u00e9 livre de bugs

    Ajudam

    • a evitar que bugs descobertos voltem
    • a evitar que mudan\u00e7as n\u00e3o intencionais quebrem c\u00f3digo que estava funcionando.
    • a documentar em quais situa\u00e7\u00f5es o software funciona.
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-automatizados_3","title":"Testes automatizados","text":"
    1. Testes de unidade
    2. Testes de integra\u00e7\u00e3o
    3. Testes de interface de usu\u00e1rio
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-unitarios","title":"Testes unit\u00e1rios","text":"

    Ideia: dada uma fun\u00e7\u00e3o, verificar se ela devolve o valor esperado para um certo conjunto de par\u00e2metros.

    • Testa as fun\u00e7\u00f5es de maneira isolada
    • Cobertura: porcentagem das linhas de c\u00f3digo que \u00e9 executada durante os testes de unidade.
    • Serve como documenta\u00e7\u00e3o da fun\u00e7\u00e3o
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-unitarios-pytest","title":"Testes unit\u00e1rios - pytest","text":""},{"location":"aulas/08-testes-automatizados/slides/#testes-de-integracao","title":"Testes de integra\u00e7\u00e3o","text":"

    Ideia: dados um conjunto de classes com interdepend\u00eancias, verificar se elas funcionam bem em conjunto.

    • Testa intera\u00e7\u00e3o entre em objetos
    • Possibilidade de criar mocks, que s\u00e3o objetos falsos feitos para simular a intera\u00e7\u00e3o entre v\u00e1rios objetos.
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-de-interface-de-usuario","title":"Testes de interface de usu\u00e1rio","text":"

    Ideia: simula a\u00e7\u00f5es do usu\u00e1rio (cliques, entrada de dados, etc) e confere se a sa\u00edda esperada \u00e9 mostrada na tela

    • Menos espec\u00edfico poss\u00edvel
    • Mais fiel ao uso real de um usu\u00e1rio
    "},{"location":"aulas/08-testes-automatizados/slides/#testes-de-interface-de-usuario_1","title":"Testes de interface de usu\u00e1rio","text":""},{"location":"aulas/08-testes-automatizados/slides/#selenium","title":"Selenium","text":"

    Permite fazer scripts que interagem com uma p\u00e1gina web, realizando entrada de dados, rolagem de tela e cliques. Cada assert pode ser feito com o conte\u00fado de um objeto da p\u00e1gina.

    "},{"location":"aulas/08-testes-automatizados/slides/#o-que-eu-preciso-testar","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"aulas/08-testes-automatizados/slides/#_1","title":"Testes automatizados","text":""},{"location":"aulas/08-testes-automatizados/slides/#o-que-eu-preciso-testar_1","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"aulas/08-testes-automatizados/slides/#ninguem-sabe","title":"Ningu\u00e9m sabe....","text":""},{"location":"aulas/08-testes-automatizados/slides/#atividade-pratica-testado-e-aprovado","title":"Atividade pr\u00e1tica: Testado e aprovado","text":"

    Objetivo: Primeira experi\u00eancia com testes automatizado de c\u00f3digo.

    \"metadata\": {\"url\": \"repo-servidor-desafios\", \"group\": [\"igual\", \"6\"]}

    "},{"location":"aulas/09-cultura-livre/","title":"09 - Trabalho sobre cultura livre","text":"

    Esta aula n\u00e3o tem atividade pr\u00e1tica. As discuss\u00f5es s\u00e3o feitas durante a aula expositiva.

    "},{"location":"aulas/09-cultura-livre/slides/","title":"Cultura de software livre","text":""},{"location":"aulas/09-cultura-livre/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-cultura-livre/slides/#cultura-de-software-livre","title":"Cultura de software livre","text":""},{"location":"aulas/09-cultura-livre/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/09-cultura-livre/slides/#atividade","title":"Atividade","text":"

    Cultura livre: fazer uma pesquisa profunda e apresentar semin\u00e1rio sobre licen\u00e7as de software e casos recentes em que licen\u00e7as tem papel de destaque

    "},{"location":"aulas/09-cultura-livre/slides/#sua-apresentacao-precisa-ter-alguma-forma-de-interacao-com-a-audiencia","title":"Sua apresenta\u00e7\u00e3o precisa ter alguma forma de intera\u00e7\u00e3o com a audi\u00eancia","text":"
    • debate
    • painel com vota\u00e7\u00f5es
    "},{"location":"aulas/09-cultura-livre/slides/#atividade-sugestoes-de-temas","title":"Atividade - sugest\u00f5es de temas","text":"
    • The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022?

    • There is no \"Linux\" platform.

    • Telemetria \u00e9 \"\u00e9tico\"? (exemplo VSCode e outros).

    • GitHub CoPilot \u00e9 \"\u00e9tico\"? Respeita licen\u00e7as de software?

    • Regulamenta\u00e7\u00f5es recentes na Europa sobre durabilidade de smartphones (bateria, right to repair, etc).

    • Maintainer burnout.

    "},{"location":"aulas/09-cultura-livre/slides/#atividade-datas-de-apresentacao","title":"Atividade - datas de apresenta\u00e7\u00e3o","text":"
    • 17/11 - 2 trabalho
    • 22/11 - 2 trabalhos
    • 24/11 - 2 trabalhos
    • 29/11 - 2 trabalhos
    "},{"location":"aulas/09-cultura-livre/slides/#45-minutos-de-apresentacaoatividade-10-minutos-para-perguntas","title":"45 minutos de apresenta\u00e7\u00e3o/atividade + 10 minutos para perguntas","text":""},{"location":"aulas/09-cultura-livre/slides/#hoje","title":"Hoje","text":"
    • Defini\u00e7\u00e3o de temas e datas de apresenta\u00e7\u00e3o
    • Pr\u00e9via de 5 minutos do seu tema na pr\u00f3xima aula
    "},{"location":"aulas/09-cultura-livre/slides/#registrar-seu-grupo-escolha-de-tema-e-dia-de-apresentacao-na-issue-665","title":"Registrar seu grupo, escolha de tema e dia de apresenta\u00e7\u00e3o na issue #665","text":""},{"location":"aulas/09-licencas/","title":"09 - Licen\u00e7as de Software","text":"

    Esta aula n\u00e3o tem atividade pr\u00e1tica. As discuss\u00f5es s\u00e3o feitas durante a aula expositiva.

    "},{"location":"aulas/09-licencas/slides/","title":"Licen\u00e7as de software","text":""},{"location":"aulas/09-licencas/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software","title":"Licen\u00e7as de Software","text":""},{"location":"aulas/09-licencas/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/09-licencas/slides/#ate-agora","title":"At\u00e9 agora","text":"
    • Ferramentas de colabora\u00e7\u00e3o
    • Modifica\u00e7\u00f5es de c\u00f3digo
    • Tradu\u00e7\u00e3o de UI e documenta\u00e7\u00e3o
    • Distribui\u00e7ao de software
    • Teste de software

    ### Conte\u00fado t\u00e9cnico: ferramentas, fluxos de trabalho, etc

    "},{"location":"aulas/09-licencas/slides/#hoje","title":"Hoje","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_1","title":"Licen\u00e7as de software","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_2","title":"Licen\u00e7as de software","text":"
    • Governam a distribui\u00e7\u00e3o de um software
    • Cess\u00e3o de direitos do autor para outras pessoas
    • Listam quais permiss\u00f5es um usu\u00e1rio (n\u00e3o) tem
    "},{"location":"aulas/09-licencas/slides/#disclaimer","title":"Disclaimer","text":""},{"location":"aulas/09-licencas/slides/#eu-nao-sou-especialista-em-direito-autoral-brasileiro-toda-informacao-disponibilizada-foi-fruto-de-pesquisa-e-nao-constitui-aconselhamento-legal","title":"Eu n\u00e3o sou especialista em direito autoral brasileiro. Toda informa\u00e7\u00e3o disponibilizada foi fruto de pesquisa e n\u00e3o constitui aconselhamento legal.","text":""},{"location":"aulas/09-licencas/slides/#distribuicao-de-software","title":"Distribui\u00e7\u00e3o de software","text":"

    Escrever software \u00e9 considerado um trabalho intelectual, estando ent\u00e3o sujeito \u00e0s leis de direitos autorais.

    • Essas leis s\u00e3o espec\u00edficas de cada pa\u00eds
    • Autoria vs explora\u00e7\u00e3o econ\u00f4mica
    • Engloba tanto c\u00f3digo fonte como bin\u00e1rios
    "},{"location":"aulas/09-licencas/slides/#direito-autoral-brasileiro","title":"Direito autoral brasileiro","text":"

    N\u00e3o \u00e9 necess\u00e1rio registro. N\u00e3o vale para ideias.

    • Direito moral:
      • assegura a autoria da obra ao autor original
      • integridade da obra
      • instransfer\u00edvel e irrevog\u00e1vel
    • Direito patrimonial:
      • explora\u00e7\u00e3o econ\u00f4mica da obra.
      • licenciado ou cedido
      • copyright em ingl\u00eas
    "},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante","title":"Por que isto \u00e9 importante?","text":"

    O dono dos direitos autorais (patrimoniais) pode controlar:

    1. Distribui\u00e7\u00e3o, parcial ou total;
    2. Cria\u00e7\u00e3o de obras derivadas
    3. Reprodu\u00e7\u00e3o (execu\u00e7\u00e3o)
    "},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_1","title":"Por que isto \u00e9 importante?","text":"

    De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?

    "},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-durante-o-expediente","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware durante o expediente.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_2","title":"Por que isto \u00e9 importante?","text":"

    De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?

    "},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-fora-do-expediente-e-decide-lancar-um-produto-nao-relacionado","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware fora do expediente e decide lan\u00e7ar um produto n\u00e3o relacionado.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_3","title":"Por que isto \u00e9 importante?","text":"

    De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?

    "},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-fora-do-expediente-e-decide-lancar-um-produto-concorrente","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware fora do expediente e decide lan\u00e7ar um produto concorrente.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_4","title":"Por que isto \u00e9 importante?","text":"

    De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?

    "},{"location":"aulas/09-licencas/slides/#um-programador-faz-um-freelance-e-entrega-um-projeto-para-uma-empresa-ele-pode-reutilzar-parte-do-codigo-em-outros-projetos-para-outras-empresas","title":"Um programador faz um freelance e entrega um projeto para uma empresa. Ele pode reutilzar parte do c\u00f3digo em outros projetos (para outras empresas)?","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_5","title":"Por que isto \u00e9 importante?","text":"

    De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?

    "},{"location":"aulas/09-licencas/slides/#um-prestador-de-servicos-contratado-como-empresa-via-cnpj-participa-de-um-projeto-terceirizado-junto-com-outros-pjs","title":"Um prestador de servi\u00e7os (contratado como empresa via CNPJ) participa de um projeto terceirizado, junto com outros PJs.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_6","title":"Por que isto \u00e9 importante?","text":"

    Nenhum dos casos acima tem respostas fixas. Tudo depende de um monte de fatores jur\u00eddicos e do qu\u00ea cada um assinou. Alguns guias interessantes:

    • Association of Software Professionals
    • Start-se
    • Legal Nature - EULA
    "},{"location":"aulas/09-licencas/slides/#contexto-1-propriedade-intelectual-e-work-for-hire","title":"Contexto 1: Propriedade intelectual e work-for-hire","text":"
    • Contexto brasilero: \"Pela nossa lei de software, a n\u00e3o ser que expressamente dito o contr\u00e1rio, aquele que contrata o desenvolvimento \u00e9 titular original do software resultante\" [1]
    • Contexto americano: work-for-hire determina que software feito sob encomenda pertence a quem contratou o servi\u00e7o [2]

    Fontes 1 2

    "},{"location":"aulas/09-licencas/slides/#contexto-2-projetos-open-source","title":"Contexto 2: projetos open source","text":"

    Contributor License Agreement \u00e9 um documento de cess\u00e3o de copyright (direitos de explora\u00e7\u00e3o comercial).

    • D\u00e1 ao projeto uma licen\u00e7a n\u00e3o exclusiva (normalmente) e irrevog\u00e1vel para o projeto explorar sua contribui\u00e7\u00e3o
    • Mant\u00e9m autoria
    • Isenta o projeto de responsabilidades sobre suas contribui\u00e7\u00f5es
    "},{"location":"aulas/09-licencas/slides/#contexto-3-comercializacao-de-software","title":"Contexto 3: comercializa\u00e7\u00e3o de software","text":"

    End User License Agreement (EULA): Termo usado para aquelas condi\u00e7\u00f5es que (n\u00e3o lemos) aceitamos ao instalar software propriet\u00e1rio ou nos registramos em um site/servi\u00e7o.

    "},{"location":"aulas/09-licencas/slides/#_1","title":"Licen\u00e7as de software","text":"

    Ignorado por aproximadamente 90% dos usu\u00e1rios (fonte)

    "},{"location":"aulas/09-licencas/slides/#end-user-license-agreement","title":"End User License Agreement","text":"

    E por algumas empresas... Fonte

    "},{"location":"aulas/09-licencas/slides/#end-user-license-agreement_1","title":"End User License Agreement","text":"

    Restri\u00e7\u00f5es t\u00edpicas encontradas em EULAs:

    • Software \u00e9 licenciado, n\u00e3o vendido;
    • \u00c9 proibido engenharia reversa
    • N\u00e3o pode modificar ou explorar limita\u00e7\u00f5es / vulnerabilidades
    • Isenta responsabilidades pelo (mau) uso do software
    "},{"location":"aulas/09-licencas/slides/#eula-servicos","title":"EULA (servi\u00e7os)","text":"

    Informa\u00e7\u00f5es t\u00edpicas encontradas em EULAs de servi\u00e7os:

    • Restri\u00e7\u00f5es de idade;
    • Uso dos dados coletados:
    • T\u00e9rmino unilateral do servi\u00e7o
    • Garantias de disponibilidade e responsabilidade

    Legal Nature - EULA

    "},{"location":"aulas/09-licencas/slides/#eula-aws","title":"EULA (AWS)","text":"

    fonte: https://aws.amazon.com/service-terms/

    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia","title":"Um pouco de hist\u00f3ria","text":""},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_1","title":"Um pouco de hist\u00f3ria","text":"

    Richard Stallman fez um interpretador Lisp (MIT ~ 1985)

    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_2","title":"Um pouco de hist\u00f3ria","text":"
    • Uma empresa chamada Symbolics licenciou o LISP do MIT para rodar em m\u00e1quinas como a acima
    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_3","title":"Um pouco de hist\u00f3ria","text":"
    • Uma empresa chamada Symbolics licenciou o LISP do MIT para rodar em m\u00e1quinas como a acima
    • Fez modifica\u00e7\u00f5es no software
    • Deu um jeito de n\u00e3o devolv\u00ea-las para o MIT....
    • E eliminou a competi\u00e7\u00e3o...
    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_4","title":"Um pouco de hist\u00f3ria","text":"
    • Stallman ficou #$@#$@#$@
    • e criou a primeira licen\u00e7a de software livre: Emacs General Public License
    "},{"location":"aulas/09-licencas/slides/#principal-caracteristica","title":"Principal caracter\u00edstica:","text":"
    1. Toda c\u00f3pia do programa dever\u00e1 estar acompanhada do c\u00f3digo fonte;
    2. Se uma modifica\u00e7\u00e3o do software for distribu\u00edda, ela dever\u00e1 estar sujeita aos mesmos termos do software original;
    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia-1985","title":"Um pouco de hist\u00f3ria - 1985","text":"
    • GNU Manifesto: descrevia um esfor\u00e7o em criar um sistema completamente livre cujo destino estivesse nas m\u00e3os dos usu\u00e1rios
    • GNU/Hurd: todas as ferramentas de linha de comando das distribui\u00e7\u00f5es modernas vieram desse projeto
    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia-1990","title":"Um pouco de hist\u00f3ria - 1990","text":"
    • Linus Torvalds tinha um kernel experimental \"pronto\".
    • Liberava uma vers\u00e3o nova toda semana;
    • Recebia contribui\u00e7\u00f5es de outros interessados.
    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_5","title":"Um pouco de hist\u00f3ria","text":"

    Leitura complementar: Free Software, Free Society: Selected Essays of Richard M. Stallman.

    "},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_6","title":"Um pouco de hist\u00f3ria","text":"

    Leitura complementar: Just for Fun: The Story of an Accidental Revolutionary, Linus Torvalds and David Diamond

    "},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre","title":"Licen\u00e7as de software (livre)","text":"

    Criadas pela Free Software Foundation visando garantir 4 liberdades para um usu\u00e1rio ao usar um software:

    1. Execu\u00e7\u00e3o sem restri\u00e7\u00f5es
    2. Estudo e modifica\u00e7\u00e3o do software;
    3. Redistribuir c\u00f3pias;
    4. Redistribuir c\u00f3pias das suas modifica\u00e7\u00f5es.

    Distribuir os fontes \u00e9 pr\u00e9-requisito dos itens 1 e 3!

    Chamadas tamb\u00e9m de rec\u00edprocas.

    "},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre_1","title":"Licen\u00e7as de software (livre)","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre-reciprocas","title":"Licen\u00e7as de software livre - rec\u00edprocas","text":"

    Copyleft: S\u00edmbolo \u00e9 o contr\u00e1rio do copyright, cujo objetivo seria restringir os usu\u00e1rios

    "},{"location":"aulas/09-licencas/slides/#open-source-iniciative","title":"Open Source Iniciative","text":"
    • Fundada para difundir um discurso menos anti-comercial e ideol\u00f3gico
    • Tamb\u00e9m difunde benef\u00edcios \"pragm\u00e1ticos\" do uso de software \"de c\u00f3digo aberto\"
    • Free causa confus\u00e3o em ingl\u00eas
      • Gr\u00e1tis (free as in beer)
      • Livre (free as in freedom)
    • Fundada por Eric Raymond e Bruce Perens
    "},{"location":"aulas/09-licencas/slides/#licencas-de-software-de-codigo-aberto","title":"Licen\u00e7as de software de c\u00f3digo aberto","text":"

    Mais associadas a Open Source Iniciative, s\u00e3o consideradas menos \"ideol\u00f3gicas\".

    • Muitas vezes chamadas de permissivas;
    • Normalmente n\u00e3o garatem a liberdade 3;
    • Podem fazer outras pequenas exig\u00eancias ou restri\u00e7\u00f5es

    Exemplos: MIT, BSD

    • Permitem a distribui\u00e7\u00e3o de software com partes propriet\u00e1rias
    • Permitem a venda e completo rebranding do software sem nenhuma contribui\u00e7\u00e3o para o autor original.
    "},{"location":"aulas/09-licencas/slides/#licencas-qual-usar","title":"Licen\u00e7as: qual usar?","text":"

    https://choosealicense.com/licenses/

    "},{"location":"aulas/09-licencas/slides/#desafio-de-traducao","title":"Desafio de tradu\u00e7\u00e3o","text":""},{"location":"aulas/09-licencas/slides/#skill-traducao-aceita-5xp-ao-menos-40-string-traduzidas","title":"Skill \"Tradu\u00e7\u00e3o aceita!\" (5XP): Ao menos 40 string traduzidas","text":""},{"location":"aulas/09-licencas/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_3","title":"Licen\u00e7as de Software","text":""},{"location":"aulas/09-licencas/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr_1","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/10-minha-primeira-contribuicao/","title":"10 - Minha primeira contribui\u00e7\u00e3o","text":"

    Esta aula n\u00e3o tem atividade pr\u00e1tica guidada. Faremos aula est\u00fadio com atendimento para encontrar projetos e issues interessantes.

    "},{"location":"aulas/10-minha-primeira-contribuicao/slides/","title":"Explorando seu projeto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#_1","title":"Explorando seu projeto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#contribuicao-de-codigo","title":"Contribui\u00e7\u00e3o de c\u00f3digo","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#minha-primeira-contribuicao-de-codigo","title":"Minha primeira contribui\u00e7\u00e3o de c\u00f3digo","text":"

    Bons projetos usam tags para facilitar a recep\u00e7\u00e3o de novatos

    • good-first-issue
    • newcomers
    • low effort
    • difficulty novice
    • easy
    "},{"location":"aulas/10-minha-primeira-contribuicao/slides/#agregadores-de-projetos","title":"Agregadores de projetos","text":"
    • https://github.com/MunGell/awesome-for-beginners
    • https://www.codetriage.com/
    • https://up-for-grabs.net/
    • http://github-help-wanted.com/
    "},{"location":"aulas/10-minha-primeira-contribuicao/slides/#sugestao-i-pandas","title":"Sugest\u00e3o I - Pandas","text":"

    Biblioteca de tratamento de dados usada em Ci\u00eancia dos Dados.

    • Projeto complexo, com muitos casos de uso especiais
    • Toneladas de funcionalidades de visualiza\u00e7\u00e3o textual e gr\u00e1fica de dados
    • Python \u00e9 familiar para a maioria

    Tickets de testes s\u00e3o, em geral, f\u00e1ceis para come\u00e7ar e \u00fateis para a comunidade.

    "},{"location":"aulas/10-minha-primeira-contribuicao/slides/#sugestao-ii-escolha-seu-proprio-projeto","title":"Sugest\u00e3o II: Escolha seu pr\u00f3prio projeto :)","text":"
    • https://github.com/MunGell/awesome-for-beginners
    • https://www.codetriage.com/
    • https://up-for-grabs.net/
    • http://github-help-wanted.com/
    "},{"location":"aulas/10-minha-primeira-contribuicao/slides/#hoje","title":"Hoje","text":"
    1. escolher issue e projeto
    2. montar ambiente
      • baixar c\u00f3digo
      • compilar
      • rodar sua vers\u00e3o
    3. reproduzir a issue
    "},{"location":"aulas/11-contribuicoes-externas/","title":"11 - Contribui\u00e7\u00f5es externas","text":"

    Esta aula n\u00e3o tem atividade pr\u00e1tica guidada, mas tem uma parte expositiva importante. N\u00e3o esque\u00e7a de olhar os slides de hoje para relembrar.

    "},{"location":"aulas/11-contribuicoes-externas/slides/","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#_1","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-de-debug","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#minha-primeira-contribuicao-de-codigo","title":"Minha primeira contribui\u00e7\u00e3o de c\u00f3digo","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-para-debugar-qualquer-coisa","title":"Dicas para debugar (qualquer coisa)","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#9-regras-de-debug","title":"9 regras de debug","text":"
    1. UNDERSTAND THE SYSTEM
    2. MAKE IT FAIL
    3. QUIT THINKING AND LOOK
    4. DIVIDE AND CONQUER
    5. CHANGE ONE THING AT A TIME
    6. KEEP AN AUDIT TRAIL
    7. CHECK THE PLUG
    8. GET A FRESH VIEW
    9. IF YOU DIDN'T FIX IT, IT AIN'T FIXED
    "},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#nada-acontece-se-nao-conseguirmos","title":"Nada acontece se n\u00e3o conseguirmos","text":"
    1. Baixar a vers\u00e3o de desenvolvimento
    2. Instalar todas as depend\u00eancias
    3. Compilar nossa pr\u00f3pria vers\u00e3o
    4. Rodar testes na vers\u00e3o do master
    "},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system_1","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#ferramentas-importantes","title":"Ferramentas importantes:","text":"
    1. Virtual environments: venv, virtualenv, pipenv, conda
    2. setuptools - development mode
    3. Debugging
      • pdb
      • fun\u00e7\u00e3o breakpoint() (tutorial)
    "},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system_2","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#conheca-suas-ferramentas","title":"Conhe\u00e7a suas ferramentas","text":"
    • Debugging visual linha a linha
    • Stacktrace
    • Busca em projeto inteiro
    • Ir para defini\u00e7\u00e3o de fun\u00e7\u00e3o
    "},{"location":"aulas/11-contribuicoes-externas/slides/#debugar-usando-print-e-perda-de-tempo","title":"Debugar usando print \u00e9 perda de tempo","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#2-make-it-fail","title":"2. Make it fail","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#reproduza-seu-bug","title":"Reproduza seu bug","text":"
    • Crie um exemplo m\u00ednimo que reproduza o bug desejado ou que usaria a feature que quer implementar
      • entrada de exemplo e sa\u00edda esperada vs sa\u00edda obtida
    • Possivelmente isto j\u00e1 foi descrito na issue escolhida.
    • Anote elementos que te ajudem a encontrar onde isto ocorre no c\u00f3digo (fun\u00e7\u00f5es usadas, elementos de interface gr\u00e1fica, mensagens de erro.)
    "},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#encontre-onde-esta-o-problema-e-leia-o-codigo-com-atencao","title":"Encontre onde est\u00e1 o problema e leia o c\u00f3digo com aten\u00e7\u00e3o","text":"
    1. Encontre no c\u00f3digo onde o bug pode estar
    2. Comece geral (em qual arquivo est\u00e1 a funcionalidade?) e v\u00e1 restringindo (em qual fun\u00e7\u00e3o o bug \"explode\"?)
    3. Ferramentas de debug s\u00e3o essenciais. Veja o item 1.
      • N\u00e3o atenderei ningu\u00e9m que esteja debugando s\u00f3 com print
    "},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look_1","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#buscando-por-nomes-de-arquivos","title":"Buscando por nomes de arquivos","text":"

    Comando find (man page)

    Exemplo: procurar por arquivos cujo nome \u00e9 aceito por uma certa express\u00e3o regular come\u00e7ando no diret\u00f3rio atual.

    $ find -iname \"regexp\" .

    "},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look_2","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#buscando-no-conteudo-dos-arquivos","title":"Buscando no conte\u00fado dos arquivos","text":"

    Comando grep (man page)

    $ grep [OPTIONS] PATTERN FILES

    • PATTERN: express\u00e3o regular
    • FILES: lista de diret\u00f3rios ou arquivos
    "},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look-grep","title":"3. Quit thinking and look - grep","text":"

    Exemplo 1: buscar todos arquivos nas pasta atual (.) e subpastas com o texto \"dialog\" ignorando mai\u00fasculas/min\u00fasculas.

    $ grep -r -i dialog .

    "},{"location":"aulas/11-contribuicoes-externas/slides/#_2","title":"Dicas de Debug","text":"

    Exemplo 2: Listas todos os arquivos .cpp que fazem algum include

    $ grep -r --include \"*cpp\" \"#include\" .

    "},{"location":"aulas/11-contribuicoes-externas/slides/#sua-ideeditor-devem-ter-algo-parecido-procure-e-use","title":"Sua IDE/editor devem ter algo parecido. Procure e use.","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#4-divide-and-conquer","title":"4. Divide and Conquer","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#crie-um-plano-de-acao","title":"Crie um plano de a\u00e7\u00e3o","text":"
    1. Por que o bug ocorre?
      • Est\u00e1 relacionado a qual fun\u00e7\u00e3o?
      • Qual vari\u00e1vel tem o valor errado?
    2. O que deve ser mudado para que pare de ocorrer?

    Pr\u00e9-requisito: debugar visualmente usando alguma IDE / editor

    "},{"location":"aulas/11-contribuicoes-externas/slides/#5-change-one-thing-at-a-time","title":"5. Change one thing at a time","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#um-bom-pr-muda-o-minimo-possivel","title":"Um bom PR muda o m\u00ednimo poss\u00edvel","text":"
    • use v\u00e1rias branches se quiser testar ideias diferentes
    • git commit \u00e9 gr\u00e1tis. Quando chegar na vers\u00e3o final \u00e9 s\u00f3 juntar tudo e mandar.
    • git rebase para atualizar seu branch com o master upstream caso necess\u00e1rio.
    "},{"location":"aulas/11-contribuicoes-externas/slides/#6-keep-an-audit-trail","title":"6. Keep an audit trail","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#registre-suas-descobertas","title":"Registre suas descobertas","text":"
    • Log de como voc\u00ea encontrou onde mexer
    • Log de todos arquivos de interesse e seus usos
    • Log de todas as pesquisas feitas
    • Log de todas as modifica\u00e7\u00f5es feitas
    • git commit \u00e9 \u00fatil para registrar testes tamb\u00e9m

    N\u00e3o se esque\u00e7a:git diff \u00e9 seu melhor amigo

    "},{"location":"aulas/11-contribuicoes-externas/slides/#7-check-the-plug","title":"7. Check the plug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#nunca-se-esqueca-de-testar-a-solucoes-mais-simples-primeiro","title":"Nunca se esque\u00e7a de testar a solu\u00e7\u00f5es mais simples primeiro","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#8-get-a-fresh-view","title":"8. Get a fresh view","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#empacou","title":"Empacou?","text":"

    \u00c9 por isso que voc\u00eas trabalham em grupo no primeiro bug.

    "},{"location":"aulas/11-contribuicoes-externas/slides/#empacou-mesmo","title":"Empacou mesmo?","text":"

    Para isto serve seu grupo.

    "},{"location":"aulas/11-contribuicoes-externas/slides/#empacou-mesmo_1","title":"Empacou mesmo!?!?!?!?","text":"

    Me chame!

    "},{"location":"aulas/11-contribuicoes-externas/slides/#9-if-you-didnt-fix-it-it-aint-fixed","title":"9. If you didn't fix it, it ain't fixed","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#hora-de-programar","title":"Hora de programar","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#tentem-aplicar-estas-ideias-aos-seus-problemas","title":"Tentem aplicar estas ideias aos seus problemas","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#envie-4-prs-para-projetos-participantes-e-ganhe-uma-camiseta","title":"Envie 4 PRs para projetos participantes e ganhe uma camiseta","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#atividade-extra-hacktoberfest","title":"Atividade extra: hacktoberfest","text":"

    Objetivo: Enviar 3 PRs para projetos externos no m\u00eas de outubro.

    \"metadata\": {\"date\": \"2021-10-31\"}

    "},{"location":"aulas/11-contribuicoes-externas/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#_3","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-de-debug_1","title":"Dicas de debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/12-projeto/slides/","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/12-projeto/slides/#projeto-da-disciplina","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/12-projeto/slides/#ate-agora","title":"At\u00e9 agora","text":"
    • Ferramentas de colabora\u00e7\u00e3o
    • Modifica\u00e7\u00f5es de c\u00f3digo
    • Tradu\u00e7\u00e3o de UI e documenta\u00e7\u00e3o
    • Aspectos n\u00e3o t\u00e9cnicos relacionados
      • licen\u00e7as
      • comunidades
    • Colabora\u00e7\u00e3o em um projeto do Insper
    "},{"location":"aulas/12-projeto/slides/#ate-agora_1","title":"At\u00e9 agora","text":""},{"location":"aulas/12-projeto/slides/#formacao-basica","title":"Forma\u00e7\u00e3o b\u00e1sica","text":"
    • Analisar uma base de c\u00f3digos desconhecida de m\u00e9dio/grande porte e modific\u00e1-la de modo a fazer melhorias e corrigir falhas em um software;
    "},{"location":"aulas/12-projeto/slides/#_1","title":"Projeto da disciplina","text":"
    • Interagir com uma equipe remota de desenvolvedores para entregar c\u00f3digo que atenda aos padr\u00f5es de qualidade e estilo de c\u00f3digo de um projeto;
    "},{"location":"aulas/12-projeto/slides/#projeto-aberto","title":"Projeto Aberto","text":"

    Objetivos:

    1. proporcionar uma experi\u00eancia de trabalho em um projeto real de escolha dos alunos
    2. valorizar diversos tipos de contribui\u00e7\u00f5es, n\u00e3o somente de c\u00f3digo
    3. exercitar autonomia e independ\u00eancia
    "},{"location":"aulas/12-projeto/slides/#projeto-aberto_1","title":"Projeto Aberto","text":""},{"location":"aulas/12-projeto/slides/#organizado-em-dois-blocos-de-5-aulas","title":"Organizado em dois blocos de 5 aulas","text":"
    • 11/05 - 25/05
    • 27/05 - 10/06
    "},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitches-de-projeto","title":"Projeto Aberto - Pitches de projeto","text":"

    Cada bloco se inicia com uma aula de Pitches de Projeto, que \u00e9 uma apresenta\u00e7\u00e3o de 5 minutos apresentando o projeto para o qual voc\u00ea contribuir\u00e1 na semana.

    • Trocar ideias sobre projetos interessantes
    • Ajudar alunos indecisos a escolherem um projeto
    • Se comprometer com uma escolha de projeto
    "},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitch-de-projeto","title":"Projeto Aberto: Pitch de projeto","text":"

    Objetivo: Apresentou um Pitch de projeto. Se o aluno s\u00f3 apresentar o projeto e n\u00e3o fizer contribui\u00e7\u00e3o vale 0 XP.

    \"metadata\": {\"url\": \"url_do_projeto_proposto\", \"filename\": \"pdf da apresentacaoo\"}

    Colocar pdf da apresenta\u00e7\u00e3o na pasta docs/pitches.

    "},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitch-aceito","title":"Projeto Aberto: Pitch aceito!","text":"

    Objetivo: Enviou contribui\u00e7\u00e3o para um projeto apresentado em sala.

    \"metadata\": {\"url\": \"url_do_projeto_proposto\"}

    A ser enviado al\u00e9m da skill da contribui\u00e7\u00e3o.

    "},{"location":"aulas/12-projeto/slides/#projeto-aberto-sugestao-aceita","title":"Projeto Aberto: Sugest\u00e3o aceita!","text":"

    Objetivo: Outro aluno enviou contribui\u00e7\u00e3o para o projeto que voc\u00ea fez Pitch.

    \"metadata\": {\"url\": \"url_da_contribuicao\"}

    A ser enviado pelo aluno que prop\u00f4s o Pitch, que tamb\u00e9m precisa ter contribu\u00eddo.

    "},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitches-de-projeto_1","title":"Projeto Aberto - Pitches de projeto","text":"
    1. Apresentar um pitch \u00e9 uma skill que vale XP
    2. Ajudar colegas interessados no \"seu\" projeto vale XP
    3. Aceitar sugest\u00f5es/ajudas vale XP
    4. Tudo isso \u00e9 al\u00e9m da XP j\u00e1 obtida com as contribui\u00e7\u00f5es
    "},{"location":"aulas/12-projeto/slides/#evitar-alunos-trabalhando-sozinhos","title":"Evitar alunos trabalhando sozinhos.","text":""},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#aprendizado-de-tecnologias-novas","title":"Aprendizado de tecnologias novas","text":"
    • Linguagem de programa\u00e7\u00e3o
    • Biblioteca
    • Tipo de tecnologia: web, mobile, desktop
    "},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto_1","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#aperfeicoamento-em-tecnologias-que-ja-domina","title":"Aperfei\u00e7oamento em tecnologias que j\u00e1 domina","text":"
    • Linguagem de programa\u00e7\u00e3o espec\u00edfica
    • Tipo de tecnologia: web, mobile, desktop
    "},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto_2","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#projetos-de-interesse-pessoal","title":"Projetos de interesse pessoal","text":"
    • Algum software que voc\u00ea usa
    • Melhorar alternativa livre para software propriet\u00e1rio
    • Moonshot: projetos ambiciosos com chance m\u00ednima de sucesso
    • Site AlternativeTo
    "},{"location":"aulas/12-projeto/slides/#hoje","title":"Hoje","text":"
    • Finalizar Projeto DIY
    • Escolher projetos para o primeiro bloco
    • Iniciar trabalhos da segunda parte da disciplina
    "},{"location":"aulas/12-projeto/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/12-projeto/slides/#projeto-da-disciplina_1","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/01-distributed-workflow/","title":"01 - Distributed Development Workflow","text":"

    In this guide, we will work on the standard workflow for contributing to projects hosted on GitHub (which also applies to Git projects in general). Before starting, each student should locate the corresponding issue on the course's GitHub repository for creating their user.

    Our workflow will be based on three main parts. In the first part, we will create a copy of the repository \"insper/dev-aberto\" where we will make all the necessary changes. In the second part, we will send our modifications to the original repository using a Pull Request, which is a request to accept the changes from a forked repository into the original repository. Finally, we will update our fork with modifications sent by colleagues.

    Some key points to highlight in the above workflow:

    1. Even if a user does not have access to the original repository, they can work on their own copy and only submit their modifications to the original repository when everything is ready.
    2. It is necessary for a developer from the original project to \"take responsibility\" for the accepted external modifications.
    3. The Pull requests tab allows developers to discuss proposed modifications and improve them. Every commit made after the creation of the PR is included and can be tested by anyone.
    "},{"location":"lessons/01-distributed-workflow/#creating-your-own-copy","title":"Creating your own copy","text":"

    We will start our workflow by creating a fork of the repository \"insper/dev-aberto\". All our modifications will be made in our fork, on a separate branch (it is recommended to use a different branch for each issue). This way, our modifications are completely isolated from the original code, and we can test them alongside the original code.

    First, create the fork through the GitHub interface. Then, clone your fork and create a new branch called \"issue-X,\" where \"X\" is the number of your issue in the original project.

    $ git checkout -b issue-X

    To ensure that you are in the directory of your fork, execute the following command:

    $ git remote -vv

    The displayed addresses should be those of your fork, not the original project.

    With the fork created and being on the \"issue-X\" branch (you can check using git branch and switch using git checkout issue-X), we will begin making modifications.

    "},{"location":"lessons/01-distributed-workflow/#interacting-with-the-course-repository","title":"Interacting with the course repository","text":"

    The creation of users and addition of skills is done using the command dev-aberto.py.

    Tip

    To use it, you need to install the packages listed in the requirements.txt file.

    Running it in the terminal should list the available commands.

    $ python3 dev-aberto.py

    To check if everything is working correctly, list all registered users. There should be only one registered user (igorsm1).

    "},{"location":"lessons/01-distributed-workflow/#creating-a-user","title":"Creating a user","text":"

    User creation is done with the command:

    $ python3 dev-aberto.py new-user

    This will create three files in the students folder:

    • your-login: basic user information in JSON format.
    • your-login-achievements: encrypted file containing the deliveries of each student in JSON format.
    • your-login.key: cryptographic key for the above file.

    Verify that your user was created correctly by listing the existing users again. Your user should have an asterisk (*) next to the name, indicating that the login.key file is present in the system.

    Danger

    Do not include the *.key file in your PR. It should be sent by email to the professor. Do this now before you forget!

    Also, verify that you can use the command dev-aberto.py compute-grade your-login. If everything is okay, proceed to the next item.

    "},{"location":"lessons/01-distributed-workflow/#adding-a-skill","title":"Adding a skill","text":"

    With the user created, we can add the skill \"First Steps.\" You may have noticed that the professor's key is available (file students/igorsm1.key). This was done so that you have at least one example of how each skill should be added. See below for an example of how the skill should be included:

    $ python3 dev-aberto.py edit-achievements igorsm1

    This will open a file for editing in Vi. The format is a list of objects containing two fields: \"skill_id\" and \"metadata\". See the example below for the first skill

    [\n{\"skill_id\": 1, \"metadata\": {\"date\": \"YYYY-MM-DD\"} }\n]\n

    Tip

    If you want to use another text editor, you can set the environment variable EDITOR just before calling dev-aberto.py.

    Now add the skill to your user following the same pattern seen above. Verify that your skill was correctly added using the compute-grade command.

    Tip

    If your repository is OK, help your classmates.

    "},{"location":"lessons/01-distributed-workflow/#sending-modifications-to-the-original-project","title":"Sending modifications to the original project","text":"

    Now let's create a commit and send it as a Pull Request to the course's repository. Add the created files (excluding the *.key file!) and make a commit with the following message (replace the X with the number of your issue in the repository):

    Add user your-login.\n

    Execute git push and continue.

    With your modifications already in your fork, it's time to send them to the original repository. This is done on the GitHub interface. First, access your fork in the browser, locate your issue-X branch, and click the \"Pull request\" button.

    The title of your Pull Request should be Create user login. Your PR should contain only one commit and should have the branch issue-X created above as the source. In the description of your PR, add the text:

    Closes #X\n

    where X is the number of your user's issue. This automatically closes the issue when (and if) this PR is accepted.

    Warning

    PRs made from main or with more than one commit will not be accepted.

    Use the checklist below to help verify if your work is correct:

    • Created a new user with new-user.
    • Added the \"First Steps\" skill.
    • Checked that the new user has the new skill using compute-grade.
    • Created a PR with only one commit and the correct files.
    • Sent the .key file by email to the professor.
    • Did not include the .key file in the PR.

    Once your PR is accepted, you can remove the issue-X branch.

    "},{"location":"lessons/01-distributed-workflow/#updating-your-fork","title":"Updating your fork","text":"

    After having your PR accepted, you may have noticed that your commit appears in the original project's main branch but does not appear in your fork. This is because a fork is not automatically updated when its corresponding original repository receives new commits.

    To make this happen, you need to perform a manual synchronization. For now, we will use the GitHub interface to do this.

    Visit your fork again. Now, there should be an option to sync your fork with the original repository. Use it to make your main branch receive the new commits.

    Warning

    Sync your repository whenever you work on a new PR. This will prevent many conflicts when merging your modifications into the original repository.

    "},{"location":"lessons/01-distributed-workflow/slides/","title":"Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#open-source-development","title":"Open Source Development","text":""},{"location":"lessons/01-distributed-workflow/slides/#_1","title":"Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-overview-distributed-coding-workflow","title":"Course overview + Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"Vers\u00e3o 2023/2: Igor Montagner ( igorsm1@insper.edu.br) )","text":""},{"location":"lessons/01-distributed-workflow/slides/#burocracy","title":"Burocracy","text":""},{"location":"lessons/01-distributed-workflow/slides/#meetings","title":"Meetings","text":"
    • MON 07:30 - 09:30
    • WED 07:30 - 09:30
    "},{"location":"lessons/01-distributed-workflow/slides/#office-hours","title":"Office Hours","text":"
    • On demand
    "},{"location":"lessons/01-distributed-workflow/slides/#assessment","title":"Assessment","text":"
    • Project based course with both individual and group work
    "},{"location":"lessons/01-distributed-workflow/slides/#learning-objectives","title":"Learning Objectives","text":"

    By the end of the course, the student will be able to:

    • Analyze an unfamiliar medium/large codebase and modify it to make improvements and fix software issues.
    • Interact with a remote team of developers to deliver code that meets the quality and code style standards of a project.
    • Understand the differences in open-source software licenses and how they impact the distribution and reuse of a codebase.
    "},{"location":"lessons/01-distributed-workflow/slides/#objectives-summary-version","title":"Objectives (summary version)","text":"

    By the end of the course, the student will be able to:

    • Download, understand, and modify the code of a project.
    • Successfully have their modifications accepted by the original project.
    • Understand aspects related to the distribution of software.
      • Licenses
      • Bug Tracker, Version Control, Governance, etc.
      • Documentation / Internationalization
      • User communities
    "},{"location":"lessons/01-distributed-workflow/slides/#course-syllabus","title":"Course Syllabus","text":"
    1. Software development and commercialization models.
    2. Software licenses and their impact on reuse and distribution.
    3. Tools for collaborative software development (open source or proprietary).
    4. Software and code documentation.
    5. Software translation and internationalization.
    6. Source code compilation and distribution systems.
    7. Human and community aspects in software development.
    8. Case studies of successful projects.
    "},{"location":"lessons/01-distributed-workflow/slides/#textbook","title":"Textbook","text":"

    Available online at https://producingoss.com

    "},{"location":"lessons/01-distributed-workflow/slides/#course-materials","title":"Course Materials","text":"

    GitHub: https://github.com/insper/open-dev

    Website: https://insper.github.io/open-dev/

    Blackboard will be used for announcements only. All content will be available on GitHub.

    "},{"location":"lessons/01-distributed-workflow/slides/#justification-for-the-course","title":"Justification for the Course","text":"

    In previous courses, we worked on:

    • Creating a new project.
    • Projects that typically end after the course.
    • Projects that are never used by anyone.
    "},{"location":"lessons/01-distributed-workflow/slides/#_2","title":"Distributed coding workflow","text":"

    In the industry, we usually work on existing projects:

    • Fixing issues.
    • Making improvements.
    • Projects used by multiple users.
    "},{"location":"lessons/01-distributed-workflow/slides/#why-did-i-create-the-course","title":"Why did I create the course?","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_1","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_2","title":"My motivation (Igor)","text":"
    • I've worked alone for 5 years
    • I've spent countless hours writting
      • a scientific paper about it
      • documentation for users and developers
    "},{"location":"lessons/01-distributed-workflow/slides/#_3","title":"Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#_4","title":"Distributed coding workflow","text":"
    • I learned a lot by doing this
    • I might have solved a problem no one has!
    "},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_3","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#its-not-enough-anymore-to-create-software-for-learning-purposes","title":"It's not enough (anymore) to create software for learning purposes","text":""},{"location":"lessons/01-distributed-workflow/slides/#i-would-like-to-have-some-impact","title":"I would like to have (some) impact","text":"
    • To create/contribute to software other people use
    • To write texts/tutorials that are read by someone
    • To be a part of a community that would miss me if I stop participating
    "},{"location":"lessons/01-distributed-workflow/slides/#why-are-you-here","title":"Why are you here?","text":"

    https://forms.gle/uDvnDoyxBsVoHy6S8

    "},{"location":"lessons/01-distributed-workflow/slides/#achievements-in-this-course-so-far","title":"Achievements in this Course So Far","text":""},{"location":"lessons/01-distributed-workflow/slides/#vitoria-20182","title":"Vit\u00f3ria - 2018/2","text":""},{"location":"lessons/01-distributed-workflow/slides/#spyder","title":"Spyder","text":"
    • Accepted: [1]
    "},{"location":"lessons/01-distributed-workflow/slides/#pandas","title":"Pandas","text":"
    • Accepted: [1]
    "},{"location":"lessons/01-distributed-workflow/slides/#paulo-20182","title":"Paulo - 2018/2","text":""},{"location":"lessons/01-distributed-workflow/slides/#cataclysm-dda","title":"Cataclysm: DDA","text":"
    • Accepted: [1]
    "},{"location":"lessons/01-distributed-workflow/slides/#class-20192","title":"Class - 2019/2","text":""},{"location":"lessons/01-distributed-workflow/slides/#15-students","title":"15 students","text":""},{"location":"lessons/01-distributed-workflow/slides/#19-different-projects-14-accepted-prs","title":"19 different projects, 14 accepted PRs","text":""},{"location":"lessons/01-distributed-workflow/slides/#pandas-6-accepted-contributions","title":"Pandas - 6 accepted contributions","text":""},{"location":"lessons/01-distributed-workflow/slides/#class-20201","title":"Class 2020/1","text":""},{"location":"lessons/01-distributed-workflow/slides/#16-students","title":"16 students","text":""},{"location":"lessons/01-distributed-workflow/slides/#15-different-projects-17-accepted-prs","title":"15 different projects, 17 accepted PRs","text":""},{"location":"lessons/01-distributed-workflow/slides/#pandas-matplotlib-bokeh-pygame","title":"Pandas, Matplotlib, Bokeh, Pygame","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-introduction","title":"Course Introduction","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-introduction_1","title":"Course Introduction","text":"

    Proposal: The course will be gamified.

    • Each student will create an avatar in the course.
    • Activities for submission earn XP.
    • Each activity is represented by a skill with a funny name.
    • All work submissions are done via Pull Request on the course's repository.
    • Significant freedom of choice
    "},{"location":"lessons/01-distributed-workflow/slides/#course-introduction-skills","title":"Course Introduction (Skills)","text":"
    • Tutorial: Guided preparatory activities in the classroom
    • Code: Code contributions to external projects
    • Community: Non-technical contributions that can benefit users and developers of a project, such as documentation and translations
    • Impact: Significant results achieved by the student's participation in open projects
    "},{"location":"lessons/01-distributed-workflow/slides/#full-list-of-skills","title":"Full list of skills","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-introduction-syllabus","title":"Course Introduction (syllabus)","text":"
    • August/September: Tutorial
      • 30-60 minutes of lecture/discussions
      • Activities focused on specific topics
    • October/November: Project
      • Autonomy to define which tasks will be done
      • Semi-free choice of projects
    "},{"location":"lessons/01-distributed-workflow/slides/#course-introduction-assessment","title":"Course Introduction (assessment)","text":"
    • All submissions are individual.
    • Each learning objective is measured by several skills.
      • Some skills are mandatory.
      • Repeating a skill can earn more or fewer points than the first time.
    • Grades are based on the amount of XP obtained.
      • Freedom to decide where to invest time/effort.
    "},{"location":"lessons/01-distributed-workflow/slides/#course-introduction-assessment_1","title":"Course Introduction (assessment)","text":"
    • Final grade is a combination of XP and acquired skills.
    • Bi-weekly reports sent by email.
    • Complete conditions on the rules and skills page.
    "},{"location":"lessons/01-distributed-workflow/slides/#discussion-development-workflow","title":"Discussion: Development Workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#how-does-git-work","title":"How does Git work?","text":"

    Source: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    Source: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    "},{"location":"lessons/01-distributed-workflow/slides/#activity-first-steps","title":"Activity: First Steps","text":"

    Objective: Submit your first Pull Request to the course's repository.

    "},{"location":"lessons/01-distributed-workflow/slides/#open-source-development_1","title":"Open Source Development","text":""},{"location":"lessons/01-distributed-workflow/slides/#_5","title":"Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-overview-distributed-coding-workflow_1","title":"Course overview + Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2: Igor Montagner ( igorsm1@insper.edu.br) )","text":""},{"location":"lessons/02-software-and-communities/","title":"02 - Software and Communities","text":"

    less02in

    The activity for this class involves creating a presentation explaining how the communities around the following software projects are organized:

    1. Visual Studio Code
    2. NeoVIM
    3. Django
    4. Blender
    5. Kdenlive
    6. NewPipe

    Each group of 3 students should choose one of the above projects and research the following points.

    1. What is the purpose of the project?
    2. Where is the source code located? Which technologies are used?
    3. What is the license? Are there public guidelines or any kind of bureaucracy for contributions?
    4. Is there developer documentation?
      • Does it seem easy to compile/run?
      • Does it seem easy to modify?
    5. How is the project governed?
      • Who are the key figures (developers, evangelists, etc.) in the project? If the project is large, mention two different areas in this item.
      • Is there a public roadmap?
      • Are external contributions accepted? How can one contribute?
      • Who makes the decisions?
    6. Where can project members be found? Where can one seek help?
    7. Does the project raise funds?
      • Are there companies sponsoring developers?
      • How much has been raised? And spent? For what purposes?
      • Who decides how the funds are spent?

    Each group must create a 10 minutes presentation for the next meeting that addresses these questions.

    "},{"location":"lessons/02-software-and-communities/slides/","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#open-source-development","title":"Open Source Development","text":""},{"location":"lessons/02-software-and-communities/slides/#_1","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#software-and-communities","title":"Software and Communities","text":""},{"location":"lessons/02-software-and-communities/slides/#20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"2023/2: Igor Montagner ( igorsm1@insper.edu.br) )","text":""},{"location":"lessons/02-software-and-communities/slides/#github-model-fork-pull-request","title":"Github Model: fork + pull request","text":"

    Source: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    "},{"location":"lessons/02-software-and-communities/slides/#github-model-fork-pull-request_1","title":"Github Model: fork + pull request","text":"

    Source: https://www.slideshare.net/abderrahmanebenbachir/continuous-integration-in-github

    "},{"location":"lessons/02-software-and-communities/slides/#workflow-other-models","title":"Workflow: other models","text":"
    1. Send patch via email list (e.g., Linux)
    2. Code review tools (e.g., KDE - Phabricator)
    3. Patch is attached to the Bug Tracker (e.g., Haiku, KDE)
    4. Does not receive external contributions
    "},{"location":"lessons/02-software-and-communities/slides/#review-of-last-classs-prs","title":"Review of last class's PRs","text":""},{"location":"lessons/02-software-and-communities/slides/#common-errors","title":"Common Errors","text":""},{"location":"lessons/02-software-and-communities/slides/#error-0-login-achievements-file-has-errors","title":"Error 0: login-achievements file has errors","text":"

    How to fix: Create a new commit with the correct date.

    "},{"location":"lessons/02-software-and-communities/slides/#error-1-extra-files-in-the-pr","title":"Error 1: Extra files in the PR","text":"

    Error: Modifying files not related to your proposed changes.

    "},{"location":"lessons/02-software-and-communities/slides/#_2","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Ideal:

    1. A Pull Request should contain only the files related to the proposed modification.
    2. Each proposed modification is in a separate Pull Request.

    "},{"location":"lessons/02-software-and-communities/slides/#error-1-extra-files-in-the-pr_1","title":"Error 1: Extra files in the PR","text":"

    How to fix: git revert creates a commit that undoes previous changes.

    Extra options:

    • --no-commit: Only adds the modifications, but does not make the commit. Allows undoing part of a commit.

    Source: https://www.atlassian.com/git/tutorials/

    "},{"location":"lessons/02-software-and-communities/slides/#error-2-non-descriptive-commit-messages","title":"Error 2: Non-descriptive commit messages","text":"

    How to fix: git commit --amend allows modifying the last commit made.

    "},{"location":"lessons/02-software-and-communities/slides/#error-3-pull-request-with-a-poor-description","title":"Error 3: Pull Request with a poor description","text":"

    How to fix: Simply edit it in the Github interface.

    "},{"location":"lessons/02-software-and-communities/slides/#fix-at-home-and-request-review-via-github","title":"Fix at home and request review via Github","text":""},{"location":"lessons/02-software-and-communities/slides/#reminder-if-you-dont-push-nothing-is-broken","title":"Reminder: If you don't push, nothing is broken","text":""},{"location":"lessons/02-software-and-communities/slides/#reminder-ii-git-log-shows-your-current-history","title":"Reminder II: git log shows your current history","text":""},{"location":"lessons/02-software-and-communities/slides/#tip-if-you-modified-already-published-commits-use-git-push-f-to-overwrite","title":"Tip: If you modified already published commits, use git push -f to overwrite","text":""},{"location":"lessons/02-software-and-communities/slides/#not-all-students-enrolled-in-the-course-did-the-activity-from-the-last-class","title":"Not all students enrolled in the course did the activity from the last class!","text":"
    python dev-aberto.py list-users\n
    "},{"location":"lessons/02-software-and-communities/slides/#software-communities","title":"Software Communities","text":""},{"location":"lessons/02-software-and-communities/slides/#discussion","title":"Discussion","text":""},{"location":"lessons/02-software-and-communities/slides/#_3","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Question 1: What are the software you use the most in your daily life?

    "},{"location":"lessons/02-software-and-communities/slides/#_4","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_5","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_6","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Question 2: Who is the main developer of the project?

    "},{"location":"lessons/02-software-and-communities/slides/#example-linux-kernel","title":"Example: Linux Kernel","text":"

    Foundation supports the development of the Linux Kernel and the creation of an open-source software ecosystem around it.

    Support:

    • Financial
    • Intellectual property
    • Infrastructure
    • Services and training
    "},{"location":"lessons/02-software-and-communities/slides/#example-linux-kernel_1","title":"Example: Linux Kernel","text":"

    Companies that sponsor development:

    1. Individual (11.95%)
    2. Intel (10.01%)
    3. Red Hat (8.90%)
    4. Unknown (4.09%)
    5. IBM (3.79%)
    6. SUSE (3.49%)
    7. Linaro (2.96%)
    8. Consultants (2.96%)
    9. Google (2.79%)
    10. Samsung (2.28%)

    Source: \"2020 Linux Kernel Development Report\"

    "},{"location":"lessons/02-software-and-communities/slides/#example-ubuntu","title":"Example: Ubuntu","text":""},{"location":"lessons/02-software-and-communities/slides/#_7","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_8","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_9","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_10","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Private company controls the development of Ubuntu. Obtains resources via:

    • Donations
    • Development and consulting services
    • Training
    "},{"location":"lessons/02-software-and-communities/slides/#example-gitlab","title":"Example: Gitlab","text":""},{"location":"lessons/02-software-and-communities/slides/#_11","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_12","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_13","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_14","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Company funded so far by VC (Venture Capital) in search of profit.

    • Option of free plans with open-source software
    • Option of corporate plans with more features and support
    • On-premises installations
    "},{"location":"lessons/02-software-and-communities/slides/#example-elementary","title":"Example: Elementary","text":""},{"location":"lessons/02-software-and-communities/slides/#_15","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_16","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Linux distribution led by a \"tiny\" company focused on the user experience. Resources are obtained through:

    • Individual and corporate sponsorships
    • Pay-what-you-want model (app store and operating system)
    • Hardware with the pre-installed system

    "},{"location":"lessons/02-software-and-communities/slides/#example-linux-mint","title":"Example: Linux Mint","text":""},{"location":"lessons/02-software-and-communities/slides/#_17","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Linux distribution aimed at everything working right after installation. Considered good for beginners.

    "},{"location":"lessons/02-software-and-communities/slides/#other-sources","title":"Other sources","text":"

    Various other ways of getting support and funding

    "},{"location":"lessons/02-software-and-communities/slides/#reasons-for-funding-company","title":"Reasons for funding (company)","text":""},{"location":"lessons/02-software-and-communities/slides/#_18","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
    • \"Acquire\" experts in a technology
    • Sell support or consulting services
    • Marketing
    • Software license \"obliges\"
    "},{"location":"lessons/02-software-and-communities/slides/#_19","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_20","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"

    Not everything funded ends up in a \"usable\" format for others (e.g., Android/Linux, TiVO)

    \"Tivoization is the practice of designing hardware that incorporates software under the terms of a copyleft software license like the GNU General Public License (GNU GPL), but uses hardware restrictions or digital rights management (DRM) to prevent users from running modified versions of the software on that hardware\" [Wikipedia]

    "},{"location":"lessons/02-software-and-communities/slides/#reasons-for-contributing-individual","title":"Reasons for contributing (individual)","text":"
    • Professional
      • Reputation / CV
      • Business needs
    • Personal
      • Altruism / Ideology
      • Sense of personal fulfillment
      • Exercise creativity
      • Solve a problem of personal interest
    "},{"location":"lessons/02-software-and-communities/slides/#activity-exploring-the-environment-of-a-project","title":"Activity: Exploring the environment of a project","text":"
    • Research how the communities of some projects are organized
    • Produce a presentation summarizing your findings
    "},{"location":"lessons/02-software-and-communities/slides/#open-source-development_1","title":"Open Source Development","text":""},{"location":"lessons/02-software-and-communities/slides/#_21","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#software-and-communities_1","title":"Software and Communities","text":""},{"location":"lessons/03-software-documentation/","title":"03 - Explorando um projeto desconhecido","text":"

    Este roteiro tem algumas perguntas com o objetivo de guiar a explora\u00e7\u00e3o do c\u00f3digo e documentar suas descobertas. Voc\u00ea tamb\u00e9m pode aplic\u00e1-lo para qualquer outro projeto mal documentado em que precisar trabalhar no futuro.

    Baixe o c\u00f3digo do projeto a ser analisado aqui e siga as perguntas. Elas s\u00e3o um guia de como explorar um projeto que voc\u00eas n\u00e3o conhecem.

    "},{"location":"lessons/03-software-documentation/#dependencias-e-servicos-usados","title":"Depend\u00eancias e servi\u00e7os usados","text":"

    Question

    Quais tecnologias s\u00e3o usadas no c\u00f3digo? Al\u00e9m da linguagem de programa\u00e7\u00e3o, liste tamb\u00e9m as bibliotecas/m\u00f3dulos externos usados.

    Question

    A aplica\u00e7\u00e3o utiliza um banco de dados. Qual gerenciador? Onde a aplica\u00e7\u00e3o busca a base de dados? Quais s\u00e3o as tabelas usadas? Como elas s\u00e3o criadas?

    "},{"location":"lessons/03-software-documentation/#deploy-inicial","title":"Deploy inicial","text":"

    Question

    A aplica\u00e7\u00e3o usa autentica\u00e7\u00e3o? Se sim, qual tipo? Como usu\u00e1rios s\u00e3o criados? Existe algum usu\u00e1rio administrador? Como \u00e9 feita a seguran\u00e7a das senhas? Qual a senha padr\u00e3o?

    Question

    Quais comandos voc\u00ea usou para rodar a aplica\u00e7\u00e3o? Escreva todos desde a cria\u00e7\u00e3o do banco de dados e dos usu\u00e1rios at\u00e9 o funcionamento completo do projeto.

    Question

    Agora que voc\u00ea consegue rodar a aplica\u00e7\u00e3o, explore-a um pouco e descreva em poucas frases para qu\u00ea ela serve.

    "},{"location":"lessons/03-software-documentation/#documentacao-do-projeto","title":"Documenta\u00e7\u00e3o do projeto","text":"

    Question

    Se voc\u00ea fosse criar um guia de usu\u00e1rio (aluno) para esta aplica\u00e7\u00e3o, quais tarefas descreveria?

    Question

    Se voc\u00ea fosse criar um guia de usu\u00e1rio (professor) para esta aplica\u00e7\u00e3o, quais tarefas descreveria?

    Question

    O qu\u00ea voc\u00ea descreveria em um guia de desenvolvedor para esta aplica\u00e7\u00e3o?

    "},{"location":"lessons/03-software-documentation/slides/","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#_1","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#fluxo-de-trabalho-distribuido-e-comunidades-de-software","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#ordem-das-apresentacoes","title":"Ordem das apresenta\u00e7\u00f5es","text":"
    1. VSCode
    2. Blender
    3. KDENlive
    4. NeoVim
    "},{"location":"lessons/03-software-documentation/slides/#10-minutos-cada-uma","title":"10 minutos cada uma","text":""},{"location":"lessons/03-software-documentation/slides/#atividade-explorando-o-entorno-de-um-projeto","title":"Atividade: Explorando o entorno de um projeto","text":"
    \"metadata\": {\n    \"filename\": \"nome do arquivo\",\n    \"group\": [\"login1\", \"login2\"]\n}\n
    • No group incluir os outros membros do grupo somente

    • Um membro da equipe deve fazer um PR para o projeto incluindo o arquivo da apresenta\u00e7\u00e3o. O mesmo deve ser colocado na pasta apresentacoes/2023

    "},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software","title":"Documenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_2","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#a-ausencia-de-documentacao-de-software","title":"(A aus\u00eancia de d)ocumenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_2","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_1","title":"Documenta\u00e7\u00e3o de software","text":"

    Documenta\u00e7\u00e3o de usu\u00e1rio:

    "},{"location":"lessons/03-software-documentation/slides/#_2","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_3","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_4","title":"Documenta\u00e7\u00e3o de Software","text":"

    Documenta\u00e7\u00e3o de desenvolvimento:

    "},{"location":"lessons/03-software-documentation/slides/#_5","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_6","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_7","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_2","title":"Documenta\u00e7\u00e3o de software","text":"

    Documenta\u00e7\u00e3o de usu\u00e1rio:

    • Instala\u00e7\u00e3o
    • Funcionalidades
    • Onde obter ajuda
    "},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_3","title":"Documenta\u00e7\u00e3o de software","text":"

    Documenta\u00e7\u00e3o de desenvolvimento:

    • Como compilar (depend\u00eancias, ferramentas usadas, etc)
    • Como testar (depend\u00eancias, ferramentas usadas, etc)
    • Estilo de c\u00f3digo e outras orienta\u00e7\u00f5es relacionadas
    • Organiza\u00e7\u00e3o do c\u00f3digo e arquitetura da aplica\u00e7\u00e3o
    "},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_4","title":"Documenta\u00e7\u00e3o de software","text":"

    \u00c0s vezes as coisas se confundem! O que voc\u00eas colocariam na documenta\u00e7\u00e3o de usu\u00e1rio do Python?

    E na de desenvolvedor?

    "},{"location":"lessons/03-software-documentation/slides/#exemplo-spyder","title":"Exemplo: Spyder","text":"

    https://www.spyder-ide.org/

    "},{"location":"lessons/03-software-documentation/slides/#exemplo-spyder_1","title":"Exemplo: Spyder","text":"

    https://github.com/spyder-ide/spyder/wiki

    "},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao","title":"Sistemas de documenta\u00e7\u00e3o","text":"

    Sphinx

    "},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao_1","title":"Sistemas de documenta\u00e7\u00e3o","text":"

    Mkdocs

    "},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao-hospedagem","title":"Sistemas de documenta\u00e7\u00e3o (hospedagem)","text":"

    https://readthedocs.org/

    "},{"location":"lessons/03-software-documentation/slides/#atividade","title":"Atividade","text":"

    Voc\u00eas receber\u00e3o um zip com o c\u00f3digo de um software e zero instru\u00e7\u00f5es. Voc\u00eas dever\u00e3o:

    1. Aprender como rodar o software
    2. Documentar os passos que voc\u00eas seguiram para faz\u00ea-lo
    3. Fazer uma an\u00e1lise cr\u00edtica do projeto com rela\u00e7\u00e3o a
      • Arquitetura
      • Qualidade do c\u00f3digo
      • Seguran\u00e7a da solu\u00e7\u00e3o
    "},{"location":"lessons/03-software-documentation/slides/#objetivos-desta-atividade","title":"Objetivos desta atividade","text":"
    1. Entender na pr\u00e1tica a necessidade de documenta\u00e7\u00e3o;
    2. Identificar quais s\u00e3o as depend\u00eancias de um software. Isto inclui bibliotecas/frameworks usados e servi\u00e7os aos quais esse software se conecta.
    3. Rodar sua pr\u00f3pria vers\u00e3o de um software de terceiros
    "},{"location":"lessons/03-software-documentation/slides/#nao-sao-objetivos-desta-atividade","title":"N\u00e3o s\u00e3o objetivos desta atividade","text":"
    1. Mostrar nenhum tipo de boa pr\u00e1tica de programa\u00e7\u00e3o
    2. Modificar o software analisado
    3. Criticar o desenvolvedor que trabalhou antes no projeto
    "},{"location":"lessons/03-software-documentation/slides/#atividade-pratica-projeto-nao-documentado","title":"Atividade pr\u00e1tica: Projeto n\u00e3o documentado","text":"

    Objetivo: entender como rodar um c\u00f3digo sem instru\u00e7\u00f5es.

    Valida\u00e7\u00e3o: apresenta\u00e7\u00e3o do sistema funcionando.

    Grupos de at\u00e9 3 pessoas

    "},{"location":"lessons/03-software-documentation/slides/#tempo-restante-de-hoje-hora-inicial-da-proxima-aula-usem-handout-como-guia","title":"Tempo restante de hoje + hora inicial da pr\u00f3xima aula. Usem handout como guia","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_3","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_5","title":"Documenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_3","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/04-professional-project/","title":"04 - Professional Project","text":"

    There is a moment in a project's history where it is already useful for the author and other people are starting to get interested in it. Software documentation, clear install instructions and being free of errors are important to these people but are not necessarily essential to the authors, who are used to fix problem when they appear and are familiar with every aspect of the code. We will transform a project like this into a project that is ready to be used by other people and that can receive contributions from other developers.

    {\"skill_id\": 4, \"metadata\": {\"date\": \"2022-09-01\", \"url\": \"http...\", \"group\": []}\n

    Done

    Form a pair and select a project that one of you worked on during your degree. We will transform it into a complete project that other people can use and contribute to.

    "},{"location":"lessons/04-professional-project/#deliverables","title":"Deliverables","text":"

    This is a project for more than one meeting and can be done in pairs.

    "},{"location":"lessons/04-professional-project/#software-documentation","title":"Software documentation","text":"
    • Create a website for the project, including screenshots and animations about its usage
    • Create a wiki with instructions for developers
      • build instructions
      • code organization
      • technologies used

    Tip

    Use mkdocs or other static site generator tools to create the website. Jekyll is also a popular choice.

    "},{"location":"lessons/04-professional-project/#project-quality","title":"Project quality","text":"
    • Create README with project description, screenshot and links to documentation
    • Organize repo with source code in a src folder and documentation in docs
    • Execute a linter in your project and export its output to one or more issues with names related to code quality improvements
    "},{"location":"lessons/04-professional-project/slides/","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"lessons/04-professional-project/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api-e-linters","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"lessons/04-professional-project/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/04-professional-project/slides/#discussao-o-que-faz-o-projeto","title":"Discuss\u00e3o: o que faz o projeto?","text":""},{"location":"lessons/04-professional-project/slides/#servidor-de-desafios","title":"Servidor de desafios","text":"

    Voc\u00eas rodaram um MVP do servidor de desafios. Veja abaixo seu estado atual:

    https://github.com/Insper/servidor-de-desafios

    "},{"location":"lessons/04-professional-project/slides/#servidor-de-desafios_1","title":"Servidor de desafios","text":""},{"location":"lessons/04-professional-project/slides/#discussao-como-o-projeto-esta-organizado-tecnologias","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (tecnologias)","text":""},{"location":"lessons/04-professional-project/slides/#discussao-como-o-projeto-esta-organizado-codigo","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (c\u00f3digo)","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-arquitetura-do-projeto","title":"Discuss\u00e3o: avalie a arquitetura do projeto","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-qualidade-de-codigo-do-projeto","title":"Discuss\u00e3o: avalie a qualidade de c\u00f3digo do projeto.","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_1","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-seguranca-do-projeto","title":"Discuss\u00e3o: avalie a seguran\u00e7a do projeto.","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_2","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-esse-projeto-e-um-projeto-profissional","title":"Discuss\u00e3o: esse projeto \u00e9 um projeto \"profissional\"?","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_3","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-o-que-voce-incluiria-na-documentacao-do-projeto","title":"Discuss\u00e3o: o que voc\u00ea incluiria na documenta\u00e7\u00e3o do projeto?","text":""},{"location":"lessons/04-professional-project/slides/#software-tem-historia-e-depende-de-pessoas-para-evoluir","title":"Software tem hist\u00f3ria e depende de pessoas para evoluir","text":""},{"location":"lessons/04-professional-project/slides/#codigo-vs-software-profissional","title":"C\u00f3digo vs software profissional","text":"

    Os seguintes pontos transformam um c\u00f3digo que fiz para mim em algo \u00fatil para outras pessoas

    1. Tradu\u00e7\u00f5es e internacionaliza\u00e7\u00e3o (datas)
    2. Documenta\u00e7\u00e3o de usu\u00e1rio e de desenvolvimento
    3. Algum processo de qualidade de software
      • testes automatizados
      • formata\u00e7\u00e3o de c\u00f3digo e estrutura de repo
    4. pacotes de instala\u00e7\u00e3o
    "},{"location":"lessons/04-professional-project/slides/#hoje","title":"Hoje","text":"
    • Ferramentas de documenta\u00e7\u00e3o
    • Documenta\u00e7\u00e3o de API usando
    • Padr\u00f5es de formata\u00e7\u00e3o de c\u00f3digo
      • linters
      • PEP8
    "},{"location":"lessons/04-professional-project/slides/#documentacao-de-api","title":"Documenta\u00e7\u00e3o de API","text":"

    Objetivo: explicar o funcionamento das fun\u00e7\u00f5es, classes e m\u00f3dulos de um programa.

    • Focado em detalhes
    • Documenta os argumentos esperados e em quais situa\u00e7\u00f5es a fun\u00e7\u00e3o funciona
    • Tipicamente obtida direto do c\u00f3digo
    • N\u00e3o detalha como as fun\u00e7\u00f5es s\u00e3o usadas em conjunto
    "},{"location":"lessons/04-professional-project/slides/#documentacao-de-api_1","title":"Documenta\u00e7\u00e3o de API","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api_2","title":"Documenta\u00e7\u00e3o de API","text":"

    ref

    "},{"location":"lessons/04-professional-project/slides/#ferramentas","title":"Ferramentas","text":"
    • Python:
      • pydoc, numpydoc
    • C/C++
      • Doxygen
    • Java
      • Javadoc

    Em geral podem ser plugadas em alguma ferramenta de documenta\u00e7\u00e3o de projetos.

    "},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao_1","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao_2","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":"
    • Cada projeto tem o seu
    • Algumas linguagens tem um estilo padr\u00e3o
      • Python - PEP8
    • Ferramentas ajudam a conferir (for\u00e7ar) um estilo espec\u00edfico
    "},{"location":"lessons/04-professional-project/slides/#ferramentas_1","title":"Ferramentas","text":"
    • Python: pylint, black
    • C/C++: splint, cppchecker, gcc (op\u00e7\u00f5es -Wall, -Wextra), clang-format/-tidy
    • Java: flag -Xlint
    • Javascript: ESlint, TSlint (typescript)
    "},{"location":"lessons/04-professional-project/slides/#_1","title":"Documenta\u00e7\u00e3o de API e linters","text":"

    Ajudam a manter c\u00f3digo limpo e leg\u00edvel. Podem ser plugadas no seu editor favorito.

    "},{"location":"lessons/04-professional-project/slides/#execucao-obrigatoria-para-muitos-projetos-grandes","title":"Execu\u00e7\u00e3o obrigat\u00f3ria para muitos projetos grandes","text":""},{"location":"lessons/04-professional-project/slides/#atividade-pratica-projeto-profissional","title":"Atividade pr\u00e1tica: Projeto profissional","text":"

    Objetivo: Transformar um c\u00f3digo perdido em um projeto

    \"metadata\": {\"url\": \"github pages criado\", \"group\": [\"ate tr\u00eas\", \"alunos\"]}

    "},{"location":"lessons/04-professional-project/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api-testes","title":"Documenta\u00e7\u00e3o de API + testes","text":""},{"location":"lessons/04-professional-project/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/05-python-packaging/","title":"05 - Distribui\u00e7\u00e3o de Software","text":"

    Nesta aula complementaremos as \u00faltimas discuss\u00f5es criando um pequeno pacote Python instal\u00e1vel via pip. Com isto chegamos mais perto de um projeto que esteja preparado para que outras pessoas o utilizem e colaborem em seu desenvolvimento.

    "},{"location":"lessons/05-python-packaging/#distribuindo-software-para-desenvolvedores-pacote-python-basico","title":"Distribuindo software para desenvolvedores: pacote Python b\u00e1sico","text":"

    Nosso m\u00f3dulo se chamar\u00e1 dev_aberto e disponibilizar\u00e1 um programa execut\u00e1vel hello.py. Crie a seguinte estrutura de pastas para nosso pacote.

    Important

    Baixe os arquivos que usaremos neste link

    pacote_exemplo/\n    dev_aberto/\n        __init__.py\n        dev_aberto.py\n    scripts/\n        hello.py\n    README.md\n    LICENSE\n

    Exercise

    com a estrutura acima, qual seria o import a ser feito para usar a fun\u00e7\u00e3o hello do arquivo dev_aberto.py?

    Exercise

    Pesquise para que serve o arquivo __init__.py e use-o para permitir importar hello usando somente import dev_aberto.

    Exercise

    Crie um projeto no github para esta atividade. Fa\u00e7a um primeiro commit nele com o conte\u00fado \"zerado\" do projeto.

    • Um arquivo README contendo uma frase de descri\u00e7\u00e3o do pacote e um link para o reposit\u00f3rio da disciplina.
    • Um arquivo LICENSE com a licen\u00e7a MIT.
    "},{"location":"lessons/05-python-packaging/#o-arquivo-setuppy","title":"O arquivo setup.py","text":"

    A descri\u00e7\u00e3o de um pacote Python \u00e9 feita usando um arquivo setup.py Veja abaixo uma vers\u00e3o inicial deste arquivo:

    from setuptools import setup\n\nsetup(name='dev_aberto_seunome',\n      version='0.1',\n      packages=['dev_aberto']\n      )\n

    Exercise

    Crie o arquivo acima no seu projeto, substituindo seunome por .... seu nome. Instale o seu pr\u00f3prio pacote usando

    pip install .

    Exercise

    Em outra pasta, abra um console Python e tente importar seu m\u00f3dulo.

    Exercise

    Pesquise quais argumentos s\u00e3o usados para especificar o autor do pacote, as vers\u00f5es de Python e sistemas operacionais suportados. Preencha estes valores com suas informa\u00e7\u00f5es. Note que o pip leva estas informa\u00e7\u00f5es em conta e s\u00f3 instalar\u00e1 um pacote se ele estiver em um ambiente suportado.

    "},{"location":"lessons/05-python-packaging/#dependencias","title":"Depend\u00eancias","text":"

    Para adicionar pacotes que s\u00e3o automaticamente instalados quando instalamos nosso pacote precisamos identific\u00e1-los no nosso arquivo setup.py. Para adicionar uma depend\u00eancia de instala\u00e7\u00e3o basta adicionar o seguinte argumento:

        ...\n    install_requires=[\n        'pacote>=1.0',\n        'pacote2'\n    ],\n    ...\n

    Exercise

    Verifique as depend\u00eancias do c\u00f3digo e adicione-as no setup.py.

    "},{"location":"lessons/05-python-packaging/#requirementstxt","title":"requirements.txt","text":"

    Muitos softwares usam tamb\u00e9m um arquivo requirements.txt para listar todas as depend\u00eancias do software de modo a obter uma instala\u00e7\u00e3o id\u00eantica \u00e0 do desenvolvedor. Isto \u00e9 importante para uniformizar os ambientes de desenvolvimento. Ou seja, este arquivo nunca ser\u00e1 usado por usu\u00e1rios finais.

    Exercise

    Crie um requirements.txt para seu projeto com as mesmas depend\u00eancias listadas no seu setup.py.

    "},{"location":"lessons/05-python-packaging/#scripts-executaveis","title":"Scripts execut\u00e1veis","text":"

    Al\u00e9m de instalar o nosso m\u00f3dulo para uso via import desejamos tamb\u00e9m disponibilizar o arquivo hello.py como um execut\u00e1vel para todo o sistema. Isto pode ser feito adicionando a seguinte linha no nosso setup.py indicando que scripts/hello.py dever\u00e1 ser instalado como um execut\u00e1vel.

        ...\n    scripts=['scripts/hello.py'],\n    ...\n

    N\u00e3o se esque\u00e7a de adicionar a seguinte linha no topo de seu arquivo para que ele possa ser executado diretamente do shell:

    #!/usr/bin/env python3\n

    No Windows \u00e9 criado um execut\u00e1vel que chama nosso script, de modo que as chamadas do execut\u00e1vel continuar\u00e3o funcionando normalmente. Note que isto n\u00e3o cria menus em nenhum tipo de interface gr\u00e1fica.

    "},{"location":"lessons/05-python-packaging/#criando-arquivos-de-distribuicao","title":"Criando arquivos de distribui\u00e7\u00e3o","text":"

    Dois tipos de arquivos de distribui\u00e7\u00e3o podem ser usados:

    • sdist: \u00e9 um arquivo contendo os fontes do projeto, incluindo arquivos adicionais especificados usando o argumento data_files. Usado se seu projeto for Python-puro.
    • wheel: \u00e9 um formato pr\u00e9-compilado e espec\u00edfico para cada plataforma. Mais usado quando o projeto cont\u00e9m extens\u00f5es em C.

    A cria\u00e7\u00e3o de um arquivo de distribui\u00e7\u00e3o de fontes \u00e9 bem simples:

    $ python setup.py sdist

    A instala\u00e7\u00e3o deste pacote pode ser feita via pip.

    "},{"location":"lessons/05-python-packaging/#envio-para-o-pypi","title":"Envio para o PyPI","text":"

    Vamos agora enviar nosso pacote para o Python Package Index para que ele possa ser instalado diretamente via pip. Para n\u00e3o poluir o reposit\u00f3rio com pacotes tempor\u00e1rios e de teste, podemos usar o TestPyPI. Toda sua infraestrutura \u00e9 igual ao oficial, mas ele \u00e9 limpo de maneira regular.

    Visite https://test.pypi.org/account/register/ e registre-se no TestPyPI.

    Ap\u00f3s o registro, usaremos o pacote twine (instal\u00e1vel via pip) para fazer o upload:

    $ twine upload --repository-url https://test.pypi.org/legacy/ dist/*

    Voc\u00ea poder\u00e1, ent\u00e3o, instalar seu pacote a partir do test PyPI usando o seguinte comando:

    $ pip install --index-url https://test.pypi.org/simple/ my_hello_nome

    "},{"location":"lessons/05-python-packaging/#entrega","title":"Entrega","text":"

    Fa\u00e7a a entrega de sua atividade adicionando a skill Pacote Python e inclua nela a url do seu reposit\u00f3rio no github.

    Objetivo: Primeira experi\u00eancia distribuindo software Python.

    \"skill_id\": 6, \"metadata\": {\"url\": \"repo-seu-pacote\"}

    "},{"location":"lessons/05-python-packaging/#distribuindo-software-para-usuarios-finais","title":"Distribuindo software para usu\u00e1rios finais","text":"

    Vamos agora trabalhar (em duplas) no Servidor de Desafios novamente. Seu trabalho ser\u00e1 criar um Dockerfile que roda o software de maneira \"completa\". Ou seja, o script de cria\u00e7\u00e3o do container dever\u00e1

    • instalar todas as depend\u00eancias do sistema
    • criar a base de dados, se necess\u00e1rio
    • adicionar os usu\u00e1rios presentes no arquivo users.csv, se necess\u00e1rio
    • executar o servidor e serv\u00ed-lo na porta 8080 do host
    • manter os dados adicionados ao reiniciar o container
    "},{"location":"lessons/05-python-packaging/#entrega_1","title":"Entrega","text":"

    Fa\u00e7a a entrega de sua atividade adicionando a skill Dockerfile segundo o modelo abaixo.

    Objetivo: Criou deploy automatizado para sistema web Python

    \"skill_id\": 7, \"metadata\": {\"url\": \"repo-servidor-de-desafios\", \"group\": [\"login1\", \"login2\"]}

    "},{"location":"lessons/05-python-packaging/#referencias","title":"Refer\u00eancias","text":"

    Algumas refer\u00eancias que podem ser \u00fateis:

    • https://docker-curriculum.com/
    • https://docs.docker.com/get-started/
    "},{"location":"lessons/06-localization-translation/","title":"06 - Localiza\u00e7\u00e3o e Tradu\u00e7\u00e3o","text":"

    Na parte expositiva da aula tivemos uma introdu\u00e7\u00e3o aos problemas de Internacionaliza\u00e7\u00e3o (i18n) e Localiza\u00e7\u00e3o (L10N). Neste roteiro iremos praticar o uso destas t\u00e9cnicas em uma aplica\u00e7\u00e3o linha de comando de exemplo simples.

    Em ambos exemplos vamos trabalhar com o m\u00f3dulo Babel, que \u00e9 feito para facilitar a tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de aplica\u00e7\u00f5es feitas em Python. Outras linguagens de programa\u00e7\u00e3o possuem bibliotecas similares que seguem a mesma sequ\u00eancia de comandos e usam os mesmos tipos de arquivos.

    $ pip install Babel

    Sistemas POSIX suportam a determina\u00e7\u00e3o do locale utilizado por meio da vari\u00e1vel de ambiente LANGUAGE, que pode ser modificada para cada execu\u00e7\u00e3o de um programa. O formato padr\u00e3o usado \u00e9 <lingua>_<pais>.<codificacao>. Para portugu\u00eas do Brasil usando codifica\u00e7\u00e3o UTF8 usamos o locale pt_BR.utf8. Rodando o seguinte comando as mensagens de ajuda do ls devem aparecer em ingl\u00eas.

    $ LANGUAGE=en_US.utf8 ls --help

    J\u00e1 executando o comando abaixo elas devem aparecer em portugu\u00eas.

    $ LANGUAGE=pt_BR.utf8 ls --help

    De maneira mais geral, existe uma s\u00e9rie de vari\u00e1veis LC_* que controlam qual locale \u00e9 usado para determinado tipo de dados. Veremos a seguir como usar LC_TIME e LC_NUMERIC para controlar como datas e n\u00fameros s\u00e3o exibidos e LANGUAGE para definir a lingua de exibi\u00e7\u00e3o de um programa.

    "},{"location":"lessons/06-localization-translation/#localizando-um-programa-em-python","title":"Localizando um programa em Python","text":"

    Vamos trabalhar com uma aplica\u00e7\u00e3o de linha de comando que nada mais faz que imprimir alguns dados simples como data em extenso, um n\u00famero fracion\u00e1rio grande e uma mensagem pr\u00e9-definida. O c\u00f3digo completo (arquivo cli.py) est\u00e1 abaixo.

    from datetime import date\n\nif __name__ == '__main__':\n    today = date.today()\n    print(today)\n\n    number = 240000000000.32212\n    print(number)\n\n    name = input('Input your name: ')\n    print('Hello {}'.format(name))\n
    Uma sa\u00edda poss\u00edvel seria

    2018-08-28\n240000000000.3221\nInput your name: Igor\nHello Igor\n

    Como j\u00e1 visto em aula, este programa re\u00fane tr\u00eas das principais sa\u00eddas que precisam ser formatadas: datas, n\u00fameros fracion\u00e1rios e mensagens para o usu\u00e1rio.

    "},{"location":"lessons/06-localization-translation/#formatando-datas","title":"Formatando datas","text":"

    A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_TIME. O m\u00f3dulo babel.dates j\u00e1 possui diversas fun\u00e7\u00f5es que automaticamente a utilizam para fazer a localiza\u00e7\u00e3o de vari\u00e1veis do tipo Date (usando a fun\u00e7\u00e3o format_date) ou DateTime (usando format_datetime).

    Exercise

    Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar a data por extenso (ou seja, 31 de agosto de 2021).

    Exercise

    O qu\u00ea acontece quando definimos a vari\u00e1vel de ambiente LC_TIME=en_US.utf8 e rodamos o programa? E se usamos LC_TIME=pt_BR.utf8?

    "},{"location":"lessons/06-localization-translation/#formatando-numeros","title":"Formatando n\u00fameros","text":"

    A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_NUMERIC. O m\u00f3dulo babel.numbers possui a fun\u00e7\u00e3o format_number que formata um n\u00famero de acordo com esta configura\u00e7\u00e3o.

    Exercise

    Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar o n\u00famero fracion\u00e1rio mostrado.

    Exercise

    Teste seu programa com LC_NUMERIC=en_US.utf8 e LC_NUMERIC=pt_BR.utf8. Os efeitos s\u00e3o os esperados?s

    "},{"location":"lessons/06-localization-translation/#traduzindo-mensagens","title":"Traduzindo mensagens","text":"

    A parte final consiste em criar tradu\u00e7\u00f5es das duas strings presentes no texto. A linguagem usada \u00e9 definida pela vari\u00e1vel LANGUAGE, que pode ser definida separadamente para cada processo. Um dos pontos mais importantes \u00e9 marcar quais strings dever\u00e3o ser traduzidas para que uma equipe de tradutores n\u00e3o precise mexer no c\u00f3digo. O m\u00f3dulo gettext do Python j\u00e1 prov\u00ea suporte a esta funcionalidade, o Babel apenas fornece um conjunto de ferramentas que facilita seu uso.

    A implanta\u00e7\u00e3o do framework de tradu\u00e7\u00e3o \u00e9 feita em quatro passos:

    1. Marca\u00e7\u00e3o das strings a serem traduzidas
    2. Extra\u00e7\u00e3o destas strings do c\u00f3digo em um arquivo modelo .pot
    3. Cria\u00e7\u00e3o de tradu\u00e7\u00f5es .po a partir do modelo criado no passo anterior
    4. Compila\u00e7\u00e3o das strings traduzidas em um arquivo bin\u00e1rio .mo

    No arquivo principal de nossa aplica\u00e7\u00e3o podemos \"instalar\" o framework de tradu\u00e7\u00e3o e marcar todas nossas strings a serem traduzidas com a fun\u00e7\u00e3o _(). A instala\u00e7\u00e3o \u00e9 feita pelo seguinte trecho de c\u00f3digo.

    import gettext\ngettext.bindtextdomain('cli', 'locale')\ngettext.textdomain('cli')\n_ = gettext.gettext\n\n# cli \u00e9 o nome do arquivo em que guardamos nossas tradu\u00e7\u00f5es\n# localedir \u00e9 o caminho onde est\u00e3o armazenadas as tradu\u00e7\u00f5es. Pode ser um caminho relativo. \n

    Devemos ent\u00e3o marcar todas as strings para serem traduzidas com _(). Podemos usar _() em qualquer arquivo do projeto, mesmo que a instala\u00e7\u00e3o tenha sido feita somente no arquivo principal.

    print(_(\"Hello!\"))\n

    Os passos seguintes s\u00e3o feitos com aux\u00edlio do Babel, que efetivamente analisa nosso c\u00f3digo Python e extrai as strings para tradu\u00e7\u00e3o. A cria\u00e7\u00e3o do arquivo modelo de tradu\u00e7\u00e3o a partir dos arquivos do diret\u00f3rio atual \u00e9 feita com o seguinte comando.

    $ pybabel extract . -o cli-model.pot

    Criamos ent\u00e3o uma nova tradu\u00e7\u00e3o usando o seguinte comando. A op\u00e7\u00e3o -D indica o nome do arquivo em que as tradu\u00e7\u00f5es ser\u00e3o guardadas (usado em gettext.install). A op\u00e7\u00e3o -l indica o locale da tradu\u00e7\u00e3o. A op\u00e7\u00e3o -d indica o localedir usado em gettext.install.

    $ pybabel init -i cli-model.pot -D cli -l pt_BR -d locale

    Devemos ent\u00e3o editar o arquivo criado em locale/pt_BR/LC_MESSAGES/cli.po. Ser\u00e3o apresentados (ap\u00f3s algumas linhas de coment\u00e1rios) pares de linhas como as seguintes. O primeiro valor msgid \u00e9 a string a ser traduzida e o segundo msgstr \u00e9 a tradu\u00e7\u00e3o no locale pt_BR (pois o arquivo est\u00e1 na pasta pt_BR do localedir).

    msgid \"Input your name: \"\nmsgstr \"\"\n

    Apesar de ser poss\u00edvel fazer tudo diretamente no arquivo de texto, \u00e9 mais conveniente usar softwares como o poedit ou este editor online(https://localise.biz/free/poeditor).

    Com as strings traduzidas vamos finalmente compilar nossos resultados. Isto \u00e9 feito para que n\u00e3o seja poss\u00edvel mexer nos arquivos de tradu\u00e7\u00e3o em uma vers\u00e3o Release do programa.

    $ pybabel compile -D cli -l pt_BR -d locale

    Isto gerar\u00e1 os arquivos .mo correspondentes a ao locale pt_BR. S\u00e3o estes os arquivos carregados durante a execu\u00e7\u00e3o do programa.

    "},{"location":"lessons/06-localization-translation/#teste-final","title":"Teste final","text":"

    Podemos definir a vari\u00e1vel LANGUAGE para modificar a lingua de um programa (como visto anteriormente com ls). Execute seu programa diretamente e depois setando LANGUAGE=pt_BR.utf8. Os resultados foram os esperados?

    "},{"location":"lessons/06-localization-translation/#entrega","title":"Entrega","text":"

    Modifique o exerc\u00edcio da aula passada (pacote python) para suportar datas e mensagens em Ingl\u00eas e Portugu\u00eas. Fa\u00e7a a entrega de sua atividade adicionando a skill Tradu\u00e7\u00e3o b\u00e1sica segundo o modelo abaixo.

    Objetivo: Aplicou ferramentas de localiza\u00e7\u00e3o para traduzir um programa simples em linha de comando.

    \"skill_id\": 8, \"metadata\": {\"url\": \"repo-pacote-python\"}

    "},{"location":"lessons/06-localization-translation/slides/","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/06-localization-translation/slides/#localizacao-e-internacionalizacao-de-software","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"Vers\u00e3o 2023/2: Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/06-localization-translation/slides/#traducao-de-software","title":"Tradu\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#qual-a-diferenca-de-internacionalizacao-e-localizacao","title":"Qual a diferen\u00e7a de internacionaliza\u00e7\u00e3o e localiza\u00e7\u00e3o?","text":""},{"location":"lessons/06-localization-translation/slides/#internacionalizacao-i18n","title":"Internacionaliza\u00e7\u00e3o (I18N)","text":"
    • Consiste em traduzir a interface de usu\u00e1rio de um software para outros idiomas.

    • Sistema Operacional guarda configura\u00e7\u00f5es de idioma e as disponibiliza para aplica\u00e7\u00f5es

    • Tipicamente \"invis\u00edvel\"

    "},{"location":"lessons/06-localization-translation/slides/#localizacao-l10n","title":"Localiza\u00e7\u00e3o (L10N)","text":"

    Consiste em adaptar a maneira de mostrar

    • n\u00fameros fracion\u00e1rios
      • marcador de decimais
      • marcador de milhares
    • datas
      • nomes de meses
      • ordem de exibi\u00e7\u00e3o
    • nomes de pa\u00edses, fusos hor\u00e1rios, etc

    de acordo com as prefer\u00eancias de um usu\u00e1rio e relativos a sua cultura.

    "},{"location":"lessons/06-localization-translation/slides/#i18n-e-l10n","title":"I18N e L10N","text":"

    Precisam ser

    • independentes:
      • idioma ingl\u00eas e datas no formato brasileiro
    • configur\u00e1veis
      • posso precisar trocar entre l\u00ednguas e entre formatos
    "},{"location":"lessons/06-localization-translation/slides/#o-suporte-a-l10n-e-i18n-implica-modificar-codigo-fonte","title":"O suporte a L10N e I18N implica modificar c\u00f3digo fonte.","text":""},{"location":"lessons/06-localization-translation/slides/#locales","title":"Locales","text":"

    Um locale \u00e9 uma tripla

    "},{"location":"lessons/06-localization-translation/slides/#_1","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
    <lingua>_<pais>.<codificacao>\n
    "},{"location":"lessons/06-localization-translation/slides/#_2","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    que representa configura\u00e7\u00f5es de I18N e/ou L10N para uma determinada cultura.

    "},{"location":"lessons/06-localization-translation/slides/#locales_1","title":"Locales","text":"

    Exemplos:

    • Tradu\u00e7\u00e3o de File:
      • pt = Ficheiro
      • pt_BR = Arquivo
    • Formato de datas:
      • en_US: MM/DD/YY
      • en_GB: DD/MM/YY
    "},{"location":"lessons/06-localization-translation/slides/#posso-usar-locales-diferentes-para-a-lingua-da-interface-de-usuario-e-para-mostrar-datas","title":"Posso usar locales diferentes para a l\u00edngua da interface de usu\u00e1rio e para mostrar datas.","text":""},{"location":"lessons/06-localization-translation/slides/#configuracoes-possiveis-linux","title":"Configura\u00e7\u00f5es poss\u00edveis (Linux)","text":"
    # sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
    "},{"location":"lessons/06-localization-translation/slides/#implementando-suporte-a-l10n","title":"Implementando suporte a L10N","text":"
    1. Baixar uma biblioteca de Localiza\u00e7\u00e3o
    2. Encontrar todas as exibi\u00e7\u00f5es de n\u00fameros, datas, etc
    3. Pr\u00e9-process\u00e1-las usando fun\u00e7\u00f5es da biblioteca
    "},{"location":"lessons/06-localization-translation/slides/#_3","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
    # Antes \nprint('Numero:', 10.5) \n# Depois\nprint('Numero', format_number(10.5))\n
    "},{"location":"lessons/06-localization-translation/slides/#_4","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    N\u00e3o \u00e9 complicado, mas \u00e9 trabalhoso

    "},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n","title":"Suporte a I18N","text":"

    Envolve 4 etapas:

    1. Marcar todas strings que devem ser traduzidas
    2. Extra\u00ed-las do c\u00f3digo fonte
    3. Criar um arquivo de tradu\u00e7\u00f5es para cada locale suportado
    4. Empacotar as tradu\u00e7\u00f5es junto com o programa
    "},{"location":"lessons/06-localization-translation/slides/#_5","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"

    \u00c9 um pouco mais complicado, mas pode ser integrado ao processo de compila\u00e7\u00e3o de um programa.

    "},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-posix","title":"Suporte a I18N (POSIX)","text":"

    Sistemas POSIX suportam determina\u00e7\u00e3o de lingua e locale usando vari\u00e1veis de ambiente.

    • LANG para l\u00edngua
    • LC_TIME para data
    • LC_NUMERIC para n\u00fameros

    Um locale sempre \u00e9 expresso no formato

    <lingua>_<pais>.<codificacao>\n
    "},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-posix_1","title":"Suporte a I18N (POSIX)","text":"

    O comando locale mostra todas as op\u00e7\u00f5es dispon\u00edveis:

    # sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
    "},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-web","title":"Suporte a I18N (Web)","text":"

    Existem diversas maneiras de determinar um bom locale em sistemas Web:

    • Cabe\u00e7alho HTTP Accept-Language inclui as linguagens de exibi\u00e7\u00e3o suportadas pelo browser do visitante.
    • Geolocaliza\u00e7\u00e3o via IP
    • Prefer\u00eancia armazenada em banco de dados
    "},{"location":"lessons/06-localization-translation/slides/#_6","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#web-e-desktop-usam-as-mesmas-tecnologias-l10n-e-i18n","title":"Web e desktop usam as mesmas tecnologias (l10n e i18n)","text":""},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-em-python","title":"Suporte a I18N (em Python)","text":"
    • M\u00f3dulo gettext da biblioteca padr\u00e3o
    • M\u00f3dulo datetime aceita o uso de locales
    • M\u00f3dulo babel faz I18N e L10N
    "},{"location":"lessons/06-localization-translation/slides/#atividade-pratica-traducao-basica","title":"Atividade pr\u00e1tica: Tradu\u00e7\u00e3o b\u00e1sica","text":"

    Objetivo: usar o m\u00f3dulo Babel para traduzir uma aplica\u00e7\u00e3o do terminal.

    "},{"location":"lessons/06-localization-translation/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/06-localization-translation/slides/#localizacao-e-internacionalizacao-de-software_1","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2: Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/07-code-quality/","title":"07 - Code quality","text":"

    In Lesson 04 - Professional Project we created a repo and website for an old project developed during the course. Now we are going to improve its quality by fixing the issues each group found using a linter tool.

    Warning

    We won't work on our own projects this time! Select a project from the discussion page and comment on the issue you'd like to do. Every project must have at least one issue with external participation.

    "},{"location":"lessons/07-code-quality/#deliverable","title":"Deliverable","text":"
    • create a Pull/Merge request addressing a code quality issue found in another team's project.
    • work with other team to get a Pull/Merge request accepted in your repository

    Learning objective: modify a project you are not familiar with and improve its code quality

    \"skill_id\": 11, \"metadata\": {\"url\": \"pull request url\", \"group\": [\"student2\"]}

    Add to the pull request description a link to the accepted contribution.

    "},{"location":"lessons/08-automated-testing/","title":"08 - Automated testing","text":"

    We will now add (some) automated testing to one of the projects from the discussion page. Again, our objective in this activity is to get used to build and modify different projects.

    Warning

    You'll need to select a different project from the last Lesson 07 - Code Quality

    "},{"location":"lessons/08-automated-testing/#deliverable","title":"Deliverable","text":"
    • create two issues with suggestions for testing in the selected project
    • send a Pull/Merge request addressing one of the issues you created and get it accepted

    Learning objective: modify a project you are not familiar with and improve its code quality

    \"skill_id\": 5, \"metadata\": {\"url\": \"pull request url\", \"group\": [\"student2\"]}

    Add to the pull request description a link to the accepted contribution.

    "},{"location":"lessons/08-automated-testing/slides/","title":"Testes automatizados","text":""},{"location":"lessons/08-automated-testing/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/08-automated-testing/slides/#testes-automatizados","title":"Testes automatizados","text":""},{"location":"lessons/08-automated-testing/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/08-automated-testing/slides/#projeto-profissional","title":"Projeto profissional","text":"
    • Qualidade de c\u00f3digo
      • Linting - formata\u00e7\u00e3o e erros comuns
    • Documenta\u00e7\u00e3o
      • Usu\u00e1rio
      • Desenvolvedor
    "},{"location":"lessons/08-automated-testing/slides/#projeto-profissional_1","title":"Projeto profissional","text":"
    • Qualidade de c\u00f3digo
      • Linting - formata\u00e7\u00e3o e erros comuns
      • O c\u00f3digo funciona?
    • Documenta\u00e7\u00e3o
      • Usu\u00e1rio
      • Desenvolvedor
    "},{"location":"lessons/08-automated-testing/slides/#meu-programa-funciona","title":"Meu programa funciona?","text":"
    • Sob quais condi\u00e7\u00f5es?
    • Em quais plataformas?
    • Quais opera\u00e7\u00f5es s\u00e3o suportadas?
    • Consigo conferir o resultado de uma execu\u00e7\u00e3o? Se sim, existe um valor de refer\u00eancia?
    "},{"location":"lessons/08-automated-testing/slides/#testes-automatizados_1","title":"Testes automatizados","text":"

    Ideia: escrever um programa que verifica se um outro programa responde como esperado

    • Definir situa\u00e7\u00f5es a serem testadas ...
    • e o resultado esperado em cada situa\u00e7\u00e3o
    "},{"location":"lessons/08-automated-testing/slides/#testes-automatizados_2","title":"Testes automatizados","text":"

    N\u00e3o ajudam:

    • a revelar novos bugs
    • a garantir que um software \u00e9 livre de bugs

    Ajudam

    • a evitar que bugs descobertos voltem
    • a evitar que mudan\u00e7as n\u00e3o intencionais quebrem c\u00f3digo que estava funcionando.
    • a documentar em quais situa\u00e7\u00f5es o software funciona.
    "},{"location":"lessons/08-automated-testing/slides/#testes-automatizados_3","title":"Testes automatizados","text":"
    1. Testes de unidade
    2. Testes de integra\u00e7\u00e3o
    3. Testes de interface de usu\u00e1rio
    "},{"location":"lessons/08-automated-testing/slides/#testes-unitarios","title":"Testes unit\u00e1rios","text":"

    Ideia: dada uma fun\u00e7\u00e3o, verificar se ela devolve o valor esperado para um certo conjunto de par\u00e2metros.

    • Testa as fun\u00e7\u00f5es de maneira isolada
    • Cobertura: porcentagem das linhas de c\u00f3digo que \u00e9 executada durante os testes de unidade.
    • Serve como documenta\u00e7\u00e3o da fun\u00e7\u00e3o
    "},{"location":"lessons/08-automated-testing/slides/#testes-unitarios-pytest","title":"Testes unit\u00e1rios - pytest","text":""},{"location":"lessons/08-automated-testing/slides/#testes-de-integracao","title":"Testes de integra\u00e7\u00e3o","text":"

    Ideia: dados um conjunto de classes com interdepend\u00eancias, verificar se elas funcionam bem em conjunto.

    • Testa intera\u00e7\u00e3o entre em objetos
    • Possibilidade de criar mocks, que s\u00e3o objetos falsos feitos para simular a intera\u00e7\u00e3o entre v\u00e1rios objetos.
    "},{"location":"lessons/08-automated-testing/slides/#testes-de-interface-de-usuario","title":"Testes de interface de usu\u00e1rio","text":"

    Ideia: simula a\u00e7\u00f5es do usu\u00e1rio (cliques, entrada de dados, etc) e confere se a sa\u00edda esperada \u00e9 mostrada na tela

    • Menos espec\u00edfico poss\u00edvel
    • Mais fiel ao uso real de um usu\u00e1rio
    "},{"location":"lessons/08-automated-testing/slides/#testes-de-interface-de-usuario_1","title":"Testes de interface de usu\u00e1rio","text":""},{"location":"lessons/08-automated-testing/slides/#selenium","title":"Selenium","text":"

    Permite fazer scripts que interagem com uma p\u00e1gina web, realizando entrada de dados, rolagem de tela e cliques. Cada assert pode ser feito com o conte\u00fado de um objeto da p\u00e1gina.

    "},{"location":"lessons/08-automated-testing/slides/#o-que-eu-preciso-testar","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"lessons/08-automated-testing/slides/#_1","title":"Testes automatizados","text":""},{"location":"lessons/08-automated-testing/slides/#o-que-eu-preciso-testar_1","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"lessons/08-automated-testing/slides/#ninguem-sabe","title":"Ningu\u00e9m sabe....","text":""},{"location":"lessons/08-automated-testing/slides/#atividade-pratica-testado-e-aprovado","title":"Atividade pr\u00e1tica: Testado e aprovado","text":"

    Objetivo: Primeira experi\u00eancia com testes automatizado de c\u00f3digo.

    \"metadata\": {\"url\": \"acceppted PR\", \"group\": [\"igual\", \"6\"]}

    "},{"location":"lessons/09-releases/","title":"09 - Releases","text":"

    Creating a release is the final step to distribute software to users. It involves \"freezing\" the repository in a specific commit and attaching binaries and other ready to use assets. Users should be able to grab one of the releases and use it direclty without having to setup a dev environment.

    The skill New Release involves the creation of a release for your own project used in the last lessons.

    \"skill_id\": 12, \"metadata\": {\"url\": \"release url\", \"group\": [\"student2\"]}

    "},{"location":"lessons/09-releases/#instructions","title":"Instructions","text":"

    The following guids might be useful.

    • Creating releases in Github
    • PyInstaller for creating installers/binaries using Python

    The following checks will be used to verify if this skill is completed:

    • there is a release in the repo's Releases tab containing the description of the release and the source code
    • the release includes either an installer or a direccly executable file in one of the following formats:
      • Linux: .deb, .rpm for installers,AppImage for executables
      • Windows: .msi installer or single .exe (plus asses, if necessary)
      • Other: if the project is an extension, plugin or any other type of stoftware, the release must include a redistributable package in the official format
    "},{"location":"plugins/notification/","title":"Toast Notifications","text":"

    This page illustrates how to create toast (or snackbar) notifications. This is intended for plugin development and probably shouldn't be called directly from the markdown content.

    In your plugin, whenever you want to show a toast notification, just call notification.toast():

    notification.toast(\"Go crazy!\", { bgColor: \"#FFFF00\", color: \"#ff4498\" });\nnotification.toast('bgColor \"danger\"', { bgColor: \"danger\" });\nnotification.toast(\"Notification with click event (reload page)\", {\nonClick: () => window.location.reload(),\n});\nnotification.toast(\"Toasts have an optional timeout argument\", {\ntimeout: 3000,\n});\n

    The following values are accepted for bgColor:

    • primary (your theme's primary color)
    • note
    • abstract
    • summary
    • tldr
    • info
    • todo
    • tip
    • hint
    • important
    • success
    • check
    • done
    • question
    • help
    • faq
    • warning
    • caution
    • attention
    • failure
    • fail
    • missing
    • danger
    • error
    • bug
    • example
    • quote
    • cite
    • a color in hex notation (e.g. \"#FF00FF\")
    "}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 8f9fbabf..f75b84eb 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,267 +2,267 @@ https://insper.github.io/open-dev/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/agenda_apresentacoes/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/assessment/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/impact-2019/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/impact-2020/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/impact-2021/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/impact-2022/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/impact/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/students/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/syllabus/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/_snippets/alunos/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/_snippets/plano-de-aulas/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/_snippets/skills-code/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/_snippets/skills-community/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/_snippets/skills-impact/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/_snippets/skills-tutorial/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/02-comunidades-de-software/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/02-comunidades-de-software/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/04-discussao-documentacao-de-software/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/04-discussao-documentacao-de-software/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/05-projeto-profissional/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/05-projeto-profissional/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/06-distribuicao-software/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/07-localizacao/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/07-localizacao/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/08-testes-automatizados/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/08-testes-automatizados/index_2022/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/08-testes-automatizados/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/09-cultura-livre/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/09-cultura-livre/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/09-licencas/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/09-licencas/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/10-minha-primeira-contribuicao/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/10-minha-primeira-contribuicao/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/11-contribuicoes-externas/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/11-contribuicoes-externas/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/aulas/12-projeto/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/01-distributed-workflow/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/01-distributed-workflow/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/02-software-and-communities/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/02-software-and-communities/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/03-software-documentation/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/03-software-documentation/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/04-professional-project/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/04-professional-project/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/05-python-packaging/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/06-localization-translation/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/06-localization-translation/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/07-code-quality/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/08-automated-testing/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/08-automated-testing/slides/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/lessons/09-releases/ - 2023-09-10 + 2023-09-13 daily https://insper.github.io/open-dev/plugins/notification/ - 2023-09-10 + 2023-09-13 daily \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 83362bff9fbe373afa212a7f3a09ff6011a0d582..0be1f6b3b426bb7e1baf68b406eb0da034b5a93d 100644 GIT binary patch delta 659 zcmV;E0&M-U1+fJPABzYG(2)UUkq9h*swg$ho_=!Ddch9eu#3So0yq&A;Uo2vrs&n( zOK)e-7@54goi~emK0~LyA=ll`KY#kDZsvFEvsI3kG0ns$h)-(+WcRD;WaP+GjX?i~1|2#B_Yfj7 zx&+!IPnwq*nfrn|WlHJ;=%m`ZS&G1HYZ;i049s@=m{TU?luZfnN#`NnTMG|)(v0`) zCgi{&pO8~dJ`&hTmsW>( ztJ^^pMHB`M@(_pYH)#hEMYFRdGx5syXu^du#5yxWNrGPI{!o>J7q%0BWrmndxl|$g zFPQvr-w+R{OcBBS8*nj>zZzteB0Xdp#3LvGu2q>1mc9M0jXru`CUM80`z7L(hKDP^f5S_GapZm_u|K(3rmv?&L_|C3G*H^#L71~&fDT}CDX002pxI|Bd! delta 659 zcmV;E0&M-U1+fJPABzYGTC)9Qkq9h*t|&Flo_=!Ddch9eu!})70yq&A;Uo2vrs&n( zOK)e-7?`}foi~emK0~LyA=ll`KY#kDZsvFEvsDU~G0yU2$G7usjKhbj+U<4=rieWZ zyzrr`Sa0(Wu3iVLda<0Z&t~}=7dU=9Tr2DKdR&F`GURx`u;?gm)5C&%XSze*=!aH|w@;&sDutO`WH_j-5=?TW}q20zRz`klnAUlaV7&H39t_8g%Fk+`|x% z(M8Z6xoBQyWbQL+$&}O&prdN*W+?)*tz}>~GBDfnF-s=om`o1vqVo{%t%ZkFG~+!x z8V1ac1e=@}!a7)RK94C#8AS$vGe45Gta819!hrieIf{Ex)a7TepO9mUJ`mWVORGb? z)$OQ?ED8e#d5lB$o4A93qS@J!DZH{hnsA{Eu};j8lc3kBKUC%5h3&*&nIUFVF4YkH z7mR+qZ-~cJriftv4Y(M`UyU+~fgTc#;t>=8*D6m3OJ7ITi{lj|kQ)_$k@F{4i_!NG zGr#eI!O0nXxi9?;`MwQe#Isa7*_Z+-OV1**%8$f?Ty06C(;y61ii4Y4_2jmYpYzls zWr1k#rU$2Zelgq7oN)V`8Sy1za3C68jPu*KYF7ZVMP~1EvT3FgH=?_LKo!xOEv7{ z);l$TeuR!(Cj$Fw>KBY^S22KND<^E%%K2^^~$DWxvFkkZ<0a1-W7vy9ZMA t{wr=lN?EFa7J