From 24d91a5ae9ad37e26226e083800765398a53ed1c Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 12:32:06 -0300 Subject: [PATCH 01/41] day one --- LANGS.md | 2 + 404.md => en/404.md | 0 en/README.md | 13 ++ SUMMARY.md => en/SUMMARY.md | 0 add-some-data.md => en/add-some-data.md | 0 book.json => en/book.json | 0 bower-grunt-sass.md => en/bower-grunt-sass.md | 0 bower.md => en/bower.md | 0 cover.jpg => en/cover.jpg | Bin {demo => en/demo}/README.md | 0 {demo => en/demo}/bower.md | 0 {demo => en/demo}/buttons.md | 0 {demo => en/demo}/config.md | 0 {demo => en/demo}/forms.md | 0 {demo => en/demo}/global-sass.md | 0 {demo => en/demo}/jquery.md | 0 {demo => en/demo}/layout.md | 0 {demo => en/demo}/module.md | 0 {demo => en/demo}/reset.md | 0 {demo => en/demo}/set-up.md | 0 {demo => en/demo}/typo.md | 0 {demo => en/demo}/vc.md | 0 {demo => en/demo}/view.md | 0 deploy-app.md => en/deploy-app.md | 0 express.md => en/express.md | 0 grunt-watch.md => en/grunt-watch.md | 0 grunt.md => en/grunt.md | 0 gulp.md => en/gulp.md | 0 heroku.md => en/heroku.md | 0 new-app.md => en/new-app.md | 0 node-npm.md => en/node-npm.md | 0 routes.md => en/routes.md | 0 sass.md => en/sass.md | 0 pt-br/404.md | 25 +++ pt-br/README.md | 12 ++ pt-br/SUMMARY.md | 29 +++ pt-br/add-some-data.md | 17 ++ pt-br/book.json | 11 + pt-br/bower-grunt-sass.md | 81 ++++++++ pt-br/bower.md | 182 ++++++++++++++++ pt-br/cover.jpg | Bin 0 -> 101294 bytes pt-br/demo/README.md | 9 + pt-br/demo/bower.md | 11 + pt-br/demo/buttons.md | 26 +++ pt-br/demo/config.md | 112 ++++++++++ pt-br/demo/forms.md | 108 ++++++++++ pt-br/demo/global-sass.md | 22 ++ pt-br/demo/jquery.md | 45 ++++ pt-br/demo/layout.md | 15 ++ pt-br/demo/module.md | 71 +++++++ pt-br/demo/reset.md | 194 ++++++++++++++++++ pt-br/demo/set-up.md | 119 +++++++++++ pt-br/demo/typo.md | 38 ++++ pt-br/demo/vc.md | 32 +++ pt-br/demo/view.md | 36 ++++ pt-br/deploy-app.md | 161 +++++++++++++++ pt-br/express.md | 38 ++++ pt-br/grunt-watch.md | 67 ++++++ pt-br/grunt.md | 31 +++ pt-br/gulp.md | 22 ++ pt-br/heroku.md | 42 ++++ pt-br/new-app.md | 108 ++++++++++ pt-br/node-npm.md | 175 ++++++++++++++++ pt-br/routes.md | 114 ++++++++++ pt-br/sass.md | 66 ++++++ 65 files changed, 2034 insertions(+) create mode 100644 LANGS.md rename 404.md => en/404.md (100%) create mode 100644 en/README.md rename SUMMARY.md => en/SUMMARY.md (100%) rename add-some-data.md => en/add-some-data.md (100%) rename book.json => en/book.json (100%) rename bower-grunt-sass.md => en/bower-grunt-sass.md (100%) rename bower.md => en/bower.md (100%) rename cover.jpg => en/cover.jpg (100%) rename {demo => en/demo}/README.md (100%) rename {demo => en/demo}/bower.md (100%) rename {demo => en/demo}/buttons.md (100%) rename {demo => en/demo}/config.md (100%) rename {demo => en/demo}/forms.md (100%) rename {demo => en/demo}/global-sass.md (100%) rename {demo => en/demo}/jquery.md (100%) rename {demo => en/demo}/layout.md (100%) rename {demo => en/demo}/module.md (100%) rename {demo => en/demo}/reset.md (100%) rename {demo => en/demo}/set-up.md (100%) rename {demo => en/demo}/typo.md (100%) rename {demo => en/demo}/vc.md (100%) rename {demo => en/demo}/view.md (100%) rename deploy-app.md => en/deploy-app.md (100%) rename express.md => en/express.md (100%) rename grunt-watch.md => en/grunt-watch.md (100%) rename grunt.md => en/grunt.md (100%) rename gulp.md => en/gulp.md (100%) rename heroku.md => en/heroku.md (100%) rename new-app.md => en/new-app.md (100%) rename node-npm.md => en/node-npm.md (100%) rename routes.md => en/routes.md (100%) rename sass.md => en/sass.md (100%) create mode 100644 pt-br/404.md create mode 100644 pt-br/README.md create mode 100644 pt-br/SUMMARY.md create mode 100644 pt-br/add-some-data.md create mode 100644 pt-br/book.json create mode 100644 pt-br/bower-grunt-sass.md create mode 100644 pt-br/bower.md create mode 100644 pt-br/cover.jpg create mode 100644 pt-br/demo/README.md create mode 100644 pt-br/demo/bower.md create mode 100644 pt-br/demo/buttons.md create mode 100644 pt-br/demo/config.md create mode 100644 pt-br/demo/forms.md create mode 100644 pt-br/demo/global-sass.md create mode 100644 pt-br/demo/jquery.md create mode 100644 pt-br/demo/layout.md create mode 100644 pt-br/demo/module.md create mode 100644 pt-br/demo/reset.md create mode 100644 pt-br/demo/set-up.md create mode 100644 pt-br/demo/typo.md create mode 100644 pt-br/demo/vc.md create mode 100644 pt-br/demo/view.md create mode 100644 pt-br/deploy-app.md create mode 100644 pt-br/express.md create mode 100644 pt-br/grunt-watch.md create mode 100644 pt-br/grunt.md create mode 100644 pt-br/gulp.md create mode 100644 pt-br/heroku.md create mode 100644 pt-br/new-app.md create mode 100644 pt-br/node-npm.md create mode 100644 pt-br/routes.md create mode 100644 pt-br/sass.md diff --git a/LANGS.md b/LANGS.md new file mode 100644 index 0000000..820ff80 --- /dev/null +++ b/LANGS.md @@ -0,0 +1,2 @@ +* [English](en/) +* [Português Brasil](pt-br/) \ No newline at end of file diff --git a/404.md b/en/404.md similarity index 100% rename from 404.md rename to en/404.md diff --git a/en/README.md b/en/README.md new file mode 100644 index 0000000..cb0ad04 --- /dev/null +++ b/en/README.md @@ -0,0 +1,13 @@ +# Build a Node.js Project from Scratch + +[![Build Status](https://www.gitbook.io/button/status/book/anotheruiguy/nodeexpreslibsass_from-scratch)](https://www.gitbook.io/book/anotheruiguy/nodeexpreslibsass_from-scratch/activity) + +Node.js What's all the buzz about? Why are so many people talking about it? How can I get some of this awesome? Follow along in this workshop/tutorial to get your head wrapped around what it takes to make a Node project from scratch. + +But it doesn't stop at Node. In the 'full stack JavaScript' world, there is a whole eco system of tools that you need to need to know about. Besides Node, there is Express, npm, Bower, Grunt, Gulp, etc .... This books's goal is not to deep dive into any one specific subject, but to provide the overview learning needed to build a good foundation. + +#### Fun deck + +I didn't make this deck, but it's an interesting and fun one to go through to talk about the interesting points of Node.js + + diff --git a/SUMMARY.md b/en/SUMMARY.md similarity index 100% rename from SUMMARY.md rename to en/SUMMARY.md diff --git a/add-some-data.md b/en/add-some-data.md similarity index 100% rename from add-some-data.md rename to en/add-some-data.md diff --git a/book.json b/en/book.json similarity index 100% rename from book.json rename to en/book.json diff --git a/bower-grunt-sass.md b/en/bower-grunt-sass.md similarity index 100% rename from bower-grunt-sass.md rename to en/bower-grunt-sass.md diff --git a/bower.md b/en/bower.md similarity index 100% rename from bower.md rename to en/bower.md diff --git a/cover.jpg b/en/cover.jpg similarity index 100% rename from cover.jpg rename to en/cover.jpg diff --git a/demo/README.md b/en/demo/README.md similarity index 100% rename from demo/README.md rename to en/demo/README.md diff --git a/demo/bower.md b/en/demo/bower.md similarity index 100% rename from demo/bower.md rename to en/demo/bower.md diff --git a/demo/buttons.md b/en/demo/buttons.md similarity index 100% rename from demo/buttons.md rename to en/demo/buttons.md diff --git a/demo/config.md b/en/demo/config.md similarity index 100% rename from demo/config.md rename to en/demo/config.md diff --git a/demo/forms.md b/en/demo/forms.md similarity index 100% rename from demo/forms.md rename to en/demo/forms.md diff --git a/demo/global-sass.md b/en/demo/global-sass.md similarity index 100% rename from demo/global-sass.md rename to en/demo/global-sass.md diff --git a/demo/jquery.md b/en/demo/jquery.md similarity index 100% rename from demo/jquery.md rename to en/demo/jquery.md diff --git a/demo/layout.md b/en/demo/layout.md similarity index 100% rename from demo/layout.md rename to en/demo/layout.md diff --git a/demo/module.md b/en/demo/module.md similarity index 100% rename from demo/module.md rename to en/demo/module.md diff --git a/demo/reset.md b/en/demo/reset.md similarity index 100% rename from demo/reset.md rename to en/demo/reset.md diff --git a/demo/set-up.md b/en/demo/set-up.md similarity index 100% rename from demo/set-up.md rename to en/demo/set-up.md diff --git a/demo/typo.md b/en/demo/typo.md similarity index 100% rename from demo/typo.md rename to en/demo/typo.md diff --git a/demo/vc.md b/en/demo/vc.md similarity index 100% rename from demo/vc.md rename to en/demo/vc.md diff --git a/demo/view.md b/en/demo/view.md similarity index 100% rename from demo/view.md rename to en/demo/view.md diff --git a/deploy-app.md b/en/deploy-app.md similarity index 100% rename from deploy-app.md rename to en/deploy-app.md diff --git a/express.md b/en/express.md similarity index 100% rename from express.md rename to en/express.md diff --git a/grunt-watch.md b/en/grunt-watch.md similarity index 100% rename from grunt-watch.md rename to en/grunt-watch.md diff --git a/grunt.md b/en/grunt.md similarity index 100% rename from grunt.md rename to en/grunt.md diff --git a/gulp.md b/en/gulp.md similarity index 100% rename from gulp.md rename to en/gulp.md diff --git a/heroku.md b/en/heroku.md similarity index 100% rename from heroku.md rename to en/heroku.md diff --git a/new-app.md b/en/new-app.md similarity index 100% rename from new-app.md rename to en/new-app.md diff --git a/node-npm.md b/en/node-npm.md similarity index 100% rename from node-npm.md rename to en/node-npm.md diff --git a/routes.md b/en/routes.md similarity index 100% rename from routes.md rename to en/routes.md diff --git a/sass.md b/en/sass.md similarity index 100% rename from sass.md rename to en/sass.md diff --git a/pt-br/404.md b/pt-br/404.md new file mode 100644 index 0000000..7ab14e1 --- /dev/null +++ b/pt-br/404.md @@ -0,0 +1,25 @@ +# 404 errors? + +Errors are already addressed in Express for you. In the `app.js` file, there is the following: + +```javascript +/// catch 404 and forwarding to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); +``` + +Then in the `views/` dir, there is `errors.jade`. + +```jade +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} +``` + +Simple. If you want to customize your 404 page, simply edit this view. diff --git a/pt-br/README.md b/pt-br/README.md new file mode 100644 index 0000000..d6e1d3e --- /dev/null +++ b/pt-br/README.md @@ -0,0 +1,12 @@ +# Criando um projeto Node.js do zero + +[![Build Status](https://www.gitbook.io/button/status/book/anotheruiguy/nodeexpreslibsass_from-scratch)](https://www.gitbook.io/book/anotheruiguy/nodeexpreslibsass_from-scratch/activity) + +Node.js do que se trata todo esse zumbido? Por que tantas pessoas estão falando sobre isso? Como eu posso conhecer um pouco dessa incrível plataforma? Acompanhando este workshop/tutorial onde vamos estar envolvidos em torno do que é preciso para fazer um projeto Node do zero. + +Mas isso não para em Node. No mundo *'ful stack JavaScript'*, existe um eco sistema completo de ferramentas que você precisa conhecer. Além de Node, há o Express, npm, Bower, Grump, Gulp, etc .... Este livro não tem como objetivo mergulhar profundamente em um assunto especifico, mas proporcionar uma visão geral que você precisa aprender para criar uma boa base. + +#### Apresentação divertida +Eu não criei essa [apresentação](https://speakerdeck.com/nctunba/node), mas é uma interessante e divertira forma de falar sobre os pontos importante do Node.js. + + diff --git a/pt-br/SUMMARY.md b/pt-br/SUMMARY.md new file mode 100644 index 0000000..7c10f9e --- /dev/null +++ b/pt-br/SUMMARY.md @@ -0,0 +1,29 @@ +# Sumário + +* [Node e npm](node-npm.md) +* [Express](express.md) + * [Criando um novo app](new-app.md) + * [Rotas](routes.md) + * [Erro 404](404.md) +* [Grunt](grunt.md) +* [Gulp](gulp.md) +* [Sass](sass.md) +* [Grunt watch](grunt-watch.md) +* [Bower](bower.md) + * [Bower + Grunt + Sass](bower-grunt-sass.md) +* [Adicionando dados](add-some-data.md) +* [Heroku](heroku.md) + * [Deploy do código](deploy-app.md) +* [Criando um formulário demo](demo/README.md) + * [A configuração](demo/set-up.md) + * [Controle de versão](demo/vc.md) + * [O layout](demo/layout.md) + * [A view](demo/view.md) + * [Configuração UI](demo/config.md) + * [Um reset](demo/reset.md) + * [Layout global Sass](demo/global-sass.md) + * [O módulo](demo/module.md) + * [Tipografia](demo/typo.md) + * [Formulários](demo/forms.md) + * [Botões](demo/buttons.md) + * [jQuery](demo/jquery.md) diff --git a/pt-br/add-some-data.md b/pt-br/add-some-data.md new file mode 100644 index 0000000..3102187 --- /dev/null +++ b/pt-br/add-some-data.md @@ -0,0 +1,17 @@ +# Add some data + +Great [demo](http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/) that adds the next layer of awesome to this workshop. Adding a Mongo DB to the project to make a simple i/o UX. + +> My favorite thing about MongoDB is that it uses JSON for its structure, which means it was instantly familiar for me. If you're not familiar with JSON, you'll need to do some reading, as I'm afraid that's outside the scope of this tutorial. + +> Let's add a record to our collection. For the purposes of this tutorial, we're just going to have a simple database of usernames and email addresses. Our data format will thus look like this: + +```javascript +{ + "_id" : 1234, + "username" : "cwbuecheler", + "email" : "cwbuecheler@nospam.com" +} +``` + +Anyone out there willing to help put the rest of this together, I would love a Pull Request! diff --git a/pt-br/book.json b/pt-br/book.json new file mode 100644 index 0000000..2c0abe6 --- /dev/null +++ b/pt-br/book.json @@ -0,0 +1,11 @@ +{ + "name": "Build a Node.js Project from Scratch", + "version": "0.1.2", + "description": "Build a Node.js project from scratch, learn how to install the Express framework, learn about Yeomen Generators, create Grunt Tasks and build and install your own Bower Packages.", + "repository": { + "type": "git", + "url": "https://github.com/anotheruiguy/node-workshop" + }, + "author": "Dale Sande ", + "license": "MIT", +} diff --git a/pt-br/bower-grunt-sass.md b/pt-br/bower-grunt-sass.md new file mode 100644 index 0000000..2c3f6df --- /dev/null +++ b/pt-br/bower-grunt-sass.md @@ -0,0 +1,81 @@ +# Bower - Grunt - Sass + +Now that we know the powers of Bower to easily manage our front-end development dependencies, what do we need to do to add a Bower package of Sass code to our project? + +## Bower install + +First off, let's install a simple Bower package for illustration: + +``` +$ bower install css-calc-mixin --save +``` + +There, we now have the library of code in our project. + +## Update Gruntfile.js + +Next we want to update the `Gruntfile.js` so that we can easily include the library into our Sass files. Without this step, we would need to write fill paths in our Sass file to this and that's simply lame. + +In the Grunt-Sass API we have options and the one we need to use is `includePaths`. Here we can pass in a string that is the full path from root to the Bower package into an array. + +```javascript +module.exports = function(grunt) { + grunt.initConfig({ + sass: { + dist: { + files: { + 'public/stylesheets/style.css': 'sass/style.scss' + } + }, + options: { + includePaths: [ + './bower_components/css-calc-mixin' + ] + } + }, + watch: { + source: { + files: ['sass/**/*.scss', 'views/**/*.jade'], + tasks: ['sass'], + options: { + livereload: true, // needed to run LiveReload + } + } + } + }); + + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-sass'); + grunt.registerTask('default', ['sass']); +}; +``` + +## Update style.scss + +To make use of this new Bower package library, we simply need to use a Sass convention to import the code. + +```sass +@import "css-calc-mixin"; +``` + +To test that this is working, let's add a little bit of code that references the Bower library. + +```sass +.block { + @include calc(width, 220px); +} + +.block { + @include calc(margin, 220px, 0); +} + +.block { + @include calc(width, 220px, true, 0); +} + +.block { + @include calc(width, 220px, true, 0, 50%, '+'); +} +``` + +Back in the CLI, run `grunt` and we should see green lights all day long! diff --git a/pt-br/bower.md b/pt-br/bower.md new file mode 100644 index 0000000..217359e --- /dev/null +++ b/pt-br/bower.md @@ -0,0 +1,182 @@ +# Bower all the things + +Unless you live in a hole, you are well aware that the JavaScript revolution is all around us. Many of the amazing concepts I discovered in the Rails ecosystem are now bursting out into the JavaScript space allowing for a greater distribution of awesome. The three pillars are; Yeoman, Bower and Grunt. + +The problem I need to solve is; what is the best way to get some library code up on Github and make it easily accessible to users without having to clone the project? Because, that's pretty lame, right? + +## Yeoman generators + +Initially I came across [generator-sass-boilerplate](https://github.com/srsgores/generator-sass-boilerplate), a 'Yeoman generator for quickly scaffolding out Sass styles'. This is a very interesting approach for creating a complex library and allowing the user to customize the install. But for a simpler library of code, maybe just some functions and mixins, this is way to much overhead. + +## Bower is the answer + +Fast forward to now. I recently came across new posts that really break down what Bower is and what it is best at. And it hit me, this IS the answer! + +For those not in the know, Bower is an extremely simple solution for front-end package management. + +> It offers a generic, unopinionated solution to the problem of front-end package management, while exposing the package dependency model via an API that can be consumed by a more opinionated build stack. + +The beauty of Bower is held within it's simplicity. Bower has a registry, but it's not 100% necessary. The common command is `bower install ` where `` can refer to a [large number of options](http://bower.io/#using-a-different-name-and-a-specific-version-of-a-package), thus making it dirt simple to just share some code. NICE! + +Sticking with the 'dirt simple' theme, you can use Bower to easily pull a repo into your project without having to clone it. Even if it doesn't have a `bower.json` file. + +For example Stipe, a Compass Extension library I wrote, is not Bower aware at all. + +``` +$ bower install git://github.com/Toadstool-Stipe/stipe.git +``` + +Run that command in any folder and you will pull in the entire repo with no Github history. This alone is pretty interesting. + +## Getting started with Bower + +To get started, it's simple really. Assuming that Node and npm is installed on your local box, run: + +``` +$ npm install -g bower +``` + +### Install Bower package + +I won't go into exhaustive detail here, but 99% of the time you simply need to run: + +``` +$ bower install +``` + +As stated above, there are alternate install options, but the primary solution is to have a `bower.json` file in the repo and have it registered with Bower. + +If you have a `bower.json` file in your project, explained in the next section, you can add the `--save` flag with the install and this will add the library as a dependency in your project. Sweet. + +When you distribute the project, a user who clones it only has to run `$ bower install` and it will pull in all the external resources. Nice! + +## Commit or not to commit!? + +This new system of creating and distributing resources raises an interesting question; do you commit all your bower packages or not? In the Ruby world, Gems are not actually part of the project, but dependencies of the project, and never committed to the project's version control. In this new JavaScript world, Node and Bower package dependencies are referenced via a manifest, much like the Gemfile in Ruby, but are actually installed into the root of the project directory. + +There is a [whole discussion](http://addyosmani.com/blog/checking-in-front-end-dependencies/) on this topic. I look at it this way, when you install a Bower library, are you leaving this as a dependency or are you making modifications? + +The choice is up to you, the arguments are strong on either side. In a situation where you are actually forking the code you installed, then the answer is pretty clear, it should be committed to the project or you need to fork the dependency. + +## Generate new Bower package + +Creating a new Bower package is again, really simple. + +``` +$ bower init +``` + +In the CLI, this will initiate a series of questions, the answers of which will be plugged into the new `bower.json` file it creates. Put as much in as you want, but all you really need is: + +``` +{ + "name": "your-project", + "version": "0.1.0" +} +``` + +And that's it really. You have just created your first Bower resource library. Now go forth and build! Build out your resources, documentation, etc ... your package is ready to go at any time. + +For easy testing, remember the `$ bower install git://github.com/ ...` trick? Run this against a new repo and see how it installs. + +Be mindful of this step and what the package contains. In my opinion, I see Bower as a great way to distribute smaller, specific libraries of code. When I pull in your Bower package, do I really want all your documentation, tests, demonstration resources, etc ... As an example, I am going to pick on the Bourbon kids here, run: + +``` +$ bower install bourbon +``` + +Running this installer, you will get the whole repo. I don't want the whole repo, all I really want is what is in the `dist/` dir. To solve this, another developer forked Bourbon and created a new repo called [bower-bourbon](https://github.com/hmps/bourbon): + +``` +$ bower install bower-bourbon +``` + +Running this install you actually only get what is in the `dist/` dir. But are these forks reliable? Ohh open source, you are a wild one. + +**UPDATE:** It's been brought to my attention that using the Bower install of Bourbon pulls in it's 3.2 Beta and appears not to be fully functional. This section was not intended to say "bad Bourbon" but to simply illustrate that in some cases, using Bower, you will get more of the library then you really want. + +## Bower registration + +Once you are ready for release, [register it with Bower](http://bower.io/#registering-packages). The criteria is pretty simple: + +1. Make sure your repo has the `bower.json` file +1. You must use [semantic versioning](http://semver.org/) +1. Your package must be available at a Git endpoint, e.g. Github + +Once you have all of that, run this command with your new package name and the Git endpoint: + +``` +$ bower register +``` + +Registration is painless. Once you get the green light on everything, give it a test and do a `$ bower install ` + + +## Bower and Sass + +Bower and Sass libraries are an amazing pairing. There are small repos all over Github where the complexity of making them a Ruby Gem/Compass Extension was just to much overhead. You are required to either fork, clone, or god forbid, copy and paste code into your project. What? Are we not civilized? + +In the Ruby world, developers are used to having Gems and Compass Extensions installed in a safe, *untouchable location. The new Gem is added to the Gemfile and we simply reference the library in the project. + +##### *Untouchable is a frustration with many developers. Importing Sass libraries that they did not have control over, or were unable to modify, that actually output CSS can be very frustrating. + +In the new JavaScipt world, the library is added to the `bower.json` manifest or simply installed, but instead of it being in a obscured location, it is installed into the root of the project. This keeps things simple from an install perspective, but this means our Sass imports are in relative directories. Not a big deal, but different from what we are used to. + +So, what does a Sass Bower package look like? Let's take a simple project I created called, [sass-icon-fonts](https://github.com/anotheruiguy/sass-icon-fonts). This package is simply a couple of mixins, one that allows the developer to easily create a `@font-face` set of rules and another is the ability to quickly generate a series of icon-font rules. The mini library comes with instructions and a very simple API. + +Now, let's imagine you are building a Node project and you want to use this package as a resource, run: + +``` +$ bower install sass-icon-fonts --save +``` + +This installs the package and adds the dependency to your `bower.json` file. Located at the root level of the project is your `sass/` directory, within that is your `application.scss` file. At your root is the `bower_components` directory. For your `application.scss` file to access the new library, you will need to import a relative path to the library, as illustrated in the following: + +``` +@import "../bower_components/sass-icon-fonts/_ico-font.scss"; +``` + +While the previous example works, while I found this acceptable, I didn't really find it awesome. Digging more into the Grint-Sass API I discovered the [includePaths](https://github.com/sindresorhus/grunt-sass#includepaths) function. This allows you to set an import path to include. + +``` +options: { + includePaths: [ + './bower_components/bower-bourbon' + ] +} +``` + +Now that you have this in your Grunt file, you can simply reference the library's main manifest file with a simply Sass import, like so: + +``` +@import "bourbon"; +``` + +## Bower in your npm +One of the things that I find slightly annoying about using Bower is that I have to run separate commands when initialing a new project. I already have to use npm, can't I just bind these things together? + +Yes, yes you can. In your `package.json` file, simply extend the `scripts` object and pass in the the `bower install` command. This is why I really LOVE this stuff! + +``` +"scripts": { + "install": "bower install" +} +``` + +Now, when you run `npm install` this will not only install all your Node packages, but install your Bower packages as well. NICE! + + +## Bower behind the firewall +If you find yourself behind a firewall that does not allow for the `git://[repo]` protocol, there is a fix for this. First, I suggest maually doing a clone using the `https://[repo]` protocol to make sure that this is really the issue. If the `https://[repo]` protocol works, then you may want to make the following update: + +``` +git config --global url."https://" +``` + +Thank you [Stack Overflow](http://stackoverflow.com/questions/15669091/bower-install-using-only-https)! + +## Summary + +When I say I want to Bower all the things, I mean just that. Now understanding Bower, I am looking at simple package management in a whole new light and I hope that you do to. + +No more forking, cloning, deleting `.git/` directories just to include a library into a project. I am looking at creating Sass modules in a whole new light as well. Not that Compass extensions were difficult, but Bower frees me of multiple dependencies. Something that has been a real issue on many projects. diff --git a/pt-br/cover.jpg b/pt-br/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b183f0a01757298053a890fd6c5d1abea13eec0 GIT binary patch literal 101294 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

?_W5)dt3L0uX&^89dLbjM0SiRN45c| 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 + +Install libsass with Grunt Sass and add Bourbon. Node-Sass is installed as a dependency of Grunt-Sass + +``` +$ npm install grunt-sass --save +$ npm install node-bourbon --save +``` + +## Add bower.json file + +``` +{ + "name": "class-demo", +} +``` + +Add some Bower packages + +``` +$ bower install color-scale --save +$ bower install type-rhythm-scale --save +$ bower install rwd-toolkit --save +``` + +## Install Grunt + +``` +npm install grunt --save +``` + +## Install Grunt Watch + +``` +npm install grunt-contrib-watch --save-dev +``` + +Add `gruntfile.js` + +``` +module.exports = function(grunt) { + grunt.initConfig({ + sass: { + dist: { + files: { + 'public/stylesheets/application.css': 'sass/application.scss' + }, + options: { + sourceMap: true, + includePaths: [ + require('node-bourbon').includePaths, + './bower_components/color-scale', + './bower_components/type-rhythm-scale', + './bower_components/rwd-toolkit' + ] + } + } + }, + watch: { + source: { + files: ['sass/**/*.scss', 'views/**/*.jade'], + tasks: ['sass'], + options: { + livereload: true, // needed to run LiveReload + } + } + } + }); + + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-sass'); + grunt.registerTask('default', ['sass']); +}; +``` + +## Create new Sass file + +Create the following directory and file, then add some sass to the file. + +``` +$ mkdir sass +$ touch sass/application.scss +``` + +## Install library dependencies + +Add these to the `application.scss` manifest to make Sass aware of these dependencies. + +``` +@import "bourbon"; +@import "type-rhythm-scale"; +@import "rwd-toolkit"; +``` + + +## Get grunt started + +``` +$ grunt +$ grunt watch +``` diff --git a/pt-br/demo/typo.md b/pt-br/demo/typo.md new file mode 100644 index 0000000..91fe4c6 --- /dev/null +++ b/pt-br/demo/typo.md @@ -0,0 +1,38 @@ + +# Typography + +Create new sass file + +``` +$ touch _typography.scss +``` + +Add the following code: + +``` +html { + font: em($font-size, 16) $primary-font-family; + line-height: baseline($font-size); + color: $primary-text +} + +h1, h2, h3, h4, h5, h6, [role=heading] { + @include heading(); +} + +.title { + margin-bottom: em(5); + padding: 0.25em 0; + text-align: center; + background-color: $delta-scale-bravo; + color: $white; + border-radius: em(5) em(5) 0 0; +} +``` + +## Add below the reset in application.scss + +``` +/////// Base +@import "typography"; +``` diff --git a/pt-br/demo/vc.md b/pt-br/demo/vc.md new file mode 100644 index 0000000..8a5b4aa --- /dev/null +++ b/pt-br/demo/vc.md @@ -0,0 +1,32 @@ +# Version control + +Add `.gitignore` file and add the following: + +``` +# OS generated files +#################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Generated CSS output +####################### +public/stylesheets/*.css +public/stylesheets/*.css.map + +# Package dependencies +###################### +node_modules/ +bower_components +``` + +## Add in version control + +``` +$ git add --all +$ git commit -m "add all the things" +``` diff --git a/pt-br/demo/view.md b/pt-br/demo/view.md new file mode 100644 index 0000000..5024fe3 --- /dev/null +++ b/pt-br/demo/view.md @@ -0,0 +1,36 @@ +# Build the view + +Starting with the layout, get more stuff in there to make this work correctly + +``` +meta(charset='utf-8') +meta(http-equiv='X-UA-Compatible', content='IE=edge') +meta(name='description', content='#{description}') +meta(name='viewport', content='width=device-width, initial-scale=1.0, minimum-scale=0.5 maximum-scale=1.0 minimal-ui') +``` + +Update the `index.js` file in `./routes` + +``` +res.render('index', { title: 'Contact me', description: 'This is a new demo' }); +``` + +Open `./views/index.jade` and add the following: + +``` +section.message-container + h1.title= title + form#form.form(action='#', method='get') + ul + li + label(for='name') Your Name: + input#name(type='text', placeholder='Your Name', name='name', tabindex='1') + li + label(for='email') Your Email: + input#email(type='email', placeholder='Your Email', name='email', tabindex='2') + li + label(for='message') Message: + textarea#message(placeholder='Message…', name='message', tabindex='3') + + button#submit Send Message +``` diff --git a/pt-br/deploy-app.md b/pt-br/deploy-app.md new file mode 100644 index 0000000..856e67f --- /dev/null +++ b/pt-br/deploy-app.md @@ -0,0 +1,161 @@ +# Deploy your first app + +At this point, you should have an app that works locally on your computer. The following steps outline updates you need to make in order to deploy the codes. + + +## Update package.json + +In this step, we need to add some code to the `package.json` file so that we can run the app from a remote server. + +Right now, there is a good chance that the file will look like this: + +``` +{ + "name": "application-name", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "express": "~4.0.0", + "static-favicon": "~1.0.0", + "morgan": "~1.0.0", + "cookie-parser": "~1.0.1", + "body-parser": "~1.0.0", + "debug": "~0.7.4", + "jade": "~1.3.0" + } +} +``` + +At the end of the `dependencies": { ... }` object, you need to add a comma `,` so that we can add more code. First let's add the `main` keyword: + +``` +"main": "app.js", +``` + +Notice the trailing comma? This is because we are going to add more stuff. After that, add in the `engines` object and the specific engines we need to run this app: + +``` +"engines": { + "node": "0.10.26", + "npm": "1.4.3" +} +``` + +You should have something that looks like the following: + +``` +{ + "name": "application-name", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "express": "~4.0.0", + "static-favicon": "~1.0.0", + "morgan": "~1.0.0", + "cookie-parser": "~1.0.1", + "body-parser": "~1.0.0", + "debug": "~0.7.4", + "jade": "~1.3.0" + }, + "main": "app.js", + "engines": { + "node": "0.10.26", + "npm": "1.4.3" + } +} +``` + +### Don't forget the Grunt + Bower + +If at this time you do not have any of the Grunt packages or Bower in the `dependenciess` object, we need to get that in there. + +You can either add them manually to the `package.json` file or dun: + +``` +$ npm install --save grunt +$ npm install --save grunt-sass +$ npm install --save bower +``` + +Something that you probably don't have is the ability for the deployed server to run the Grunt tasks. For this we need Grunt-CLI. + +``` +$ npm install --save grunt-cli +``` + +Right about now, you should be looking pretty good. + +### Postinstall instructions + +When we deploy the codes to Heroku, we have to tell it to run some commands, basically install the Bower packages and run the Grunt tasks. To do this, we need to add the instructions within the `scripts` object of the `package.json` file. + +Directly under the `"start": "node ./bin/www"`, add: + +``` +"postinstall": "./node_modules/.bin/bower install && ./node_modules/.bin/grunt" +``` + +There, now we have everything that Heroku needs to install the packages and run the scripts. + +## Add the Procfile + +This is a file that Heroku needs in order to start the app. + +``` +$ touch Procfile +``` + +Add the following code: + +``` +web: npm start +``` + +Heroku will use this to kick start the app. + + +## Make this a Git repo + +It is important to make this a git repo BEFORE you create the Heroku server. **WAIT!** Before you go all crazy on the Git, there are some things we need to do. + +You should have a `.gitignore` file in your repo at this point. open that up and make sure you are ignoring all the `node_modules`, all the `bower_components` and anything in the `/stylesheets/*.css` spectrum. + +``` +node_modules +public/stylesheets/*.css +bower_components +``` + +Great. Now you can `git init` your repo. + +``` +$ git add . +$ git commit -m "initial commit" +``` + +It is not required at this time to make this a Github repo, but you may want to do this if you make this a real app. + +## Deploy the codes + +This is pretty hard here. Make sure to follow the commands specifically: + +``` +$ heroku create +$ git push heroku master +``` + +## Rejoice + +If all is well, you should see a return like this: + +``` +http://.herokuapp.com/ deployed to Heroku +``` + +Go to that URL and REJOICE!!!!! diff --git a/pt-br/express.md b/pt-br/express.md new file mode 100644 index 0000000..e307cbb --- /dev/null +++ b/pt-br/express.md @@ -0,0 +1,38 @@ +# Express, the Node framework + +[Expressjs](http://expressjs.com/) is the web application framework for Node.js apps. + +> Express is a minimal and flexible node.js web application framework, providing a robust set of features for building single and multi-page, and hybrid web applications. + +It has a wealth of [APIs](http://expressjs.com/4x/api.html) and is FAST AS HELL!! + +Express is well known for NOT following after Rails as far as frameworks go, but more so it takes after another Ruby framework called [Sinatra](http://www.sinatrarb.com/). The concept is simple, the framework gives you enough to get things up and running as fast as possible and all without getting in your way. + +For the most part, Express continues to live up to this statement. + +For this workshop, we will be using Express as the core tool for getting a web app up and running with a server, route support, error pages, loggers, etc ... + + +## Install Express + +Installing Express with npm is really easy. Keep in mind that there are two parts to Express, the library that runs it and an awesome generator. + +To install Express: + +``` +$ npm install express -g +``` + +To install the generator: + +``` +$ npm install express-generator -g +``` + +## Generator version + +Express 4.0 was recently released and there are some who are not jiggy with that. So, npm has a way of specifying the version of generator you install. + +``` +$ npm install -g express-generator@3 +``` diff --git a/pt-br/grunt-watch.md b/pt-br/grunt-watch.md new file mode 100644 index 0000000..2dc7882 --- /dev/null +++ b/pt-br/grunt-watch.md @@ -0,0 +1,67 @@ +# Grunt-watch w/Livereload + +Now that we have Grunt set up with Sass, when we run the `grunt` task in the CLI, this will process the edits we have. While in rapid development, going back the the CLI, typing in `grunt` and then refreshing the browser will get old fast. + +Thankfully, we have options. `grunt-contrib-watch` is a npm package that will watch our Sass files and when one is touched, it will run the Grunt tasks to process it. To install: + +``` +npm install --save-dev grunt-contrib-watch +``` + +As an added bonus, not only can we run a watcher that will process our Sass, but we can also watch `.jade` files for changes as well. + + +In the `Gruntfile.js` we need to add some Grunt tasks: + +```javascript +module.exports = function(grunt) { + grunt.initConfig({ + sass: { + dist: { + files: { + 'public/stylesheets/style.css': 'sass/style.scss' + } + } + }, + watch: { + source: { + files: ['sass/**/*.scss', 'views/**/*.jade'], + tasks: ['sass'], + options: { + livereload: true + } + } + } + }); + + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-sass'); + grunt.registerTask('default', ['sass']); +}; +``` + +And there we have it. Grunt is installed, we have a functional `Gruntfile.js` and we can start writing some Sass too. + +## Add Livereload to layout.jade + +In order to get Live reload to fire in the project we need to add a reference to a non-existent JavaScript file in the `layout.jade` file as the last thing in the `` tag. + +```jade +script(src='http://localhost:35729/livereload.js') +``` + +In a new Express project, it would look like this: + +```jade +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content + + script(src='http://localhost:35729/livereload.js') +``` + +After this is added, go back and REFRESH the browser and then any edit in either Sass or Jade should fire the Livereload. diff --git a/pt-br/grunt.md b/pt-br/grunt.md new file mode 100644 index 0000000..6745e5f --- /dev/null +++ b/pt-br/grunt.md @@ -0,0 +1,31 @@ +# Install and set up Grunt + +Grunt is the workhorse of the Node world. You need tasks run, then you put Grunt to work. If you are from the Rails world, Grunt is much like make or Rake. There is a TOM of documentation out there on this task runner, but in this workshop, I will focus on the basics that will get you up and running with an application. + +Grunt is pretty simple to set up, create a new `Gruntfile.js` file in the root of your project and add the following shell syntax: + +```javascript +module.exports = function(grunt) { + grunt.initConfig({ + + ... + + }); + + grunt.loadNpmTasks(''); +}; +``` + +To run Grunt, it is typical to install Grunt globally: + +``` +npm install grunt -g +``` + +BUT WAIT!! What about deployment? If we create tasks that require Grunt to run on the server, we need this to be a dependency on the app. So, let's install this as a local dependency: + +``` +npm install --save grunt +``` + +Using this base structure and Grunt installed, we can now begin to add new features to our app. diff --git a/pt-br/gulp.md b/pt-br/gulp.md new file mode 100644 index 0000000..9143008 --- /dev/null +++ b/pt-br/gulp.md @@ -0,0 +1,22 @@ +# Need to learn more about Gulp + +The following are some interesting articles that need to be worked into this workshop Gitbook. + +### Getting Started With Gulp + +> This article will make the assumption that you have never used a task runner or command-line interface before and will walk through every step required to get up and running with gulp. + +[source](http://travismaynard.com/writing/getting-started-with-gulp) + +### Roll Your Own Asset Pipeline with Gulp + +> I’ve found myself using Gulp for just about everything involving HTML/CSS/JS these days. It’s super fast, quick to write scripts for and flexible. I’m at a point now where I have a ton of projects I can just cd into, run gulp and be up and running. It’s the best solution I’ve found for delivering static assets whether for local development or production. + +[source](http://blog.carbonfive.com/2014/05/05/roll-your-own-asset-pipeline-with-gulp/) + +### Advanced Gulp File + +> With gulp starting to find itself into my everyday workflow - I've started to understand its quirks and twists, and how to get along with it. My baseline gulfile.js has become a lot neater and advanced in its functionality that the one I originally developed back in March. + +[source](http://www.mikestreety.co.uk/blog/an-advanced-gulpjs-file) + diff --git a/pt-br/heroku.md b/pt-br/heroku.md new file mode 100644 index 0000000..118662e --- /dev/null +++ b/pt-br/heroku.md @@ -0,0 +1,42 @@ +# Heroku + +The following are basic steps needed to quickly set up a Node.js app with Express and deploy to Heroku. + +### Step 1 - Heroku account + +Make sure you have a Heroku account set up + +### Step 2 - Install Heroku Toolbelt + +Download and install the tool belt package specific for your OS + +##### OSX + +[https://toolbelt.heroku.com/osx](https://toolbelt.heroku.com/osx) + +#### Windows + +[https://toolbelt.heroku.com/windows](https://toolbelt.heroku.com/windows) + +#### Linux + +``` +$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh +``` + +### Step 3 - Log into you account + +Once toolbelt is installed, you should be able to access your account + +``` +$ heroku login +Enter your Heroku credentials. +Email: adam@example.com +Password: +Could not find an existing public key. +Would you like to generate one? [Yn] +Generating new SSH public key. +Uploading ssh public key /Users/adam/.ssh/id_rsa.pub +``` + +That's pretty much about it. Pass these steps and you are ready to DEPLOY THE CODES! diff --git a/pt-br/new-app.md b/pt-br/new-app.md new file mode 100644 index 0000000..f1fa3b9 --- /dev/null +++ b/pt-br/new-app.md @@ -0,0 +1,108 @@ +# Crate a new Express app + +At this point, you should be able to go forth and create an app. In this example, we will create a Node.js app with Express framework. + +``` +$ express +``` + +Running this command (using `demo-app` as the example), you should see the following: + +``` + create : demo-app + create : demo-app/package.json + create : demo-app/app.js + create : demo-app/public + create : demo-app/public/javascripts + create : demo-app/public/images + create : demo-app/public/stylesheets + create : demo-app/public/stylesheets/style.css + create : demo-app/routes + create : demo-app/routes/index.js + create : demo-app/routes/users.js + create : demo-app/views + create : demo-app/views/index.jade + create : demo-app/views/layout.jade + create : demo-app/views/error.jade + create : demo-app/bin + create : demo-app/bin/www + + install dependencies: + $ cd demo-app && npm install + + run the app: + $ DEBUG=my-application ./bin/www +``` + +BOOM! Express takes care of most of the labor. Now, we do what the computer says, change directory into the app dir and run `npm install`. + +## What's in the app? + +At this point, you should be able to do a `ls` and see the new structure that was created for you. + +``` +app.js node_modules/ public/ views/ +bin/ package.json routes/ +``` + +#### app.js + +This is the logical starting point for your app. Some of the things in there, lets talk about: + +The following lines, for this type of app, we don't need them: + +``` +var user = require('./routes/user'); + +app.get('/users', user.list); +``` + +Sets the path to the dir where the view files are located: + +``` +app.set('views', path.join(__dirname, 'views')); +``` + +Sets the path to the dir with static assets: + +``` +app.use(express.static(path.join(__dirname, 'public'))); +``` + +Sets the root route for the app: + +``` +app.use('/', routes); +``` + +#### node_modules/ + +This is the dir where all your npm packages will reside. + +#### public/ + +Directory for all static assets like images, JavaScript, CSS, fonts, etc ... + +#### views/ + +Where all your layout and view Jade files will live. + +#### bin/ + +There is a single file here, `www` and this is what activate the Node server. + +#### package.json + +Project description, scripts manager and the app manifest. Notice the following object: + +``` +"scripts": { + "start": "node ./bin/www" +}, +``` + +This is the code that allows you to run `npm start` for the app. + +#### routes/ + +This is the directory where you will build out the RESTful routes for your app. With a base install there should be two files in there, `index.js` and `users.js`. diff --git a/pt-br/node-npm.md b/pt-br/node-npm.md new file mode 100644 index 0000000..be12110 --- /dev/null +++ b/pt-br/node-npm.md @@ -0,0 +1,175 @@ +# Introdução ao Node + +Há muita documentação que apoia a questão, "Por que Node?". Algo que realmente soa verdadeiro para mim não é o lugar onde Node está hoje, mas onde Node está indo. Sem dúvida, a comunidade Rails trouxe muitas ideias para a mesa, mas o que faz todas essas ideias incríveis difíceis de serem entendidas foi o fato de que elas estão trancadas dentro de Ruby. Ruby é incrível, mas nem todo mundo quer ser um desenvolvedor Ruby. + +Eu particularmente gosto desta questao _Why The Hell Would I Use Node.js? A Case-by-Case Introduction_ [[reference](http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js)] por [Tomislav Capan](http://www.toptal.com/resume/tomislav-capan). + + +> ... vale a pena notar que Ryan Dahl, o criador do Node.js, teve o objetivo de criar *real-time websites* com muitas possibilidades, "inspirada em aplicações com o Gmail". Em Node.js, ele criou para os desenvolvedores uma ferramenta para trabalhar com *non-blocking*, *event-driven* e *I/O paradigm*. + +## Instalando o Node + +Antes de você executar qualquer instalador, certifique-se que você sabe se o Node está instalado em seu computador. Veja a versão, simplesmente execute: + +``` +$ node --version +``` + +Claro que para criar e executar um app Node, você precisar instalar o Node. Para instalar o Node, você pode executar o [instaldor desse site](http://nodejs.org/). + +[Instalando Node e npm](http://www.joyent.com/blog/installing-node-and-npm/) é um bom artigo onde tem todas as maneiras de fazer a instalação. Preste a atenção no passo 4 onde existe opiniões solidas de como definir isso. + +Um [gist](https://gist.github.com/579814) disponibilizado ilustra uma serie de maneiras para instalar o Node. + +O artigo representa uma opinião pessoal contra o uso do Homebrew. Brew tem trabalhado muito bem para mim, mas está é uma opinião que você pode precisar formular com suas próprias experiências.as. + +## Node Package Manager (npm) + +> npm é um NodeJs package manager. Com o proprio nome implica, voce pode usar ele para isntalar programa Node, tambem, se voce usar em desenvolvimento, ele uma forma facil de especificar suas dependencias. + +[Leia mais](http://howtonode.org/introduction-to-npm) sobre o npm + +Dependendo do seu processo de instalaçao voce pode ou~não ter o NOM instalado. Para verificar, simplismente execute: + +``` +$ npm --version +``` + +#### Se você não tem npm instalado, execute o seguinte comandos: + +Nota: npm é um gerenciado de pacotes para o Node, dessa forma voce nãopode usar o gerenciado de pacotes para instalar o gerenciado de pacotes. + +``` +$ curl http://npmjs.org/install.sh | sh +``` + +## Usando npm + +Agora que voce tem o npm instlado, todos os pacotes são registrados com um simples comando. Para um pacote basico, execute: + +``` +$ npm install +``` + +Esse métodos de instalacao vai instalar o pacoes no diretorio (`node_modules/`) relativo ao seu projeto. Depois de um tempo voce pode precisar isntalar bibliotecas globalmente, assim seu acesso pode ser feito de qualquer aplicação se necessariamente o requerer como uma dependencia. + +Para fazer isso, voce precisa adicionar a flag `-g` no comando de instalação. + +``` +$ npm install -g +``` + +**Note:** Dependendo de como o Node está instalado em seu sistema, voce pode nao ter aesso a instalacao global de pacotes. Para contornar ess situação, simplismente adicione `sudo` no antes do `npm` no comando de instalação. + +``` +$ sudo npm install -g +``` + +### Usando npm com um projeto + +O mais comum caso de uso do `npm` esta em manter um manifesto de dependencias para seu proejto. Isso é mantido com um arquivo chamado [package.json](https://www.npmjs.org/doc/json.html) + +Voce mesmo pode criar esse arquivo, existem uma maneira de gerar esse arquivo tambem. Em algum diretorio execute `npm init` e o CLI vai orietalo em uma serie de pergutnas e criar algo parecido com isso? + +``` +{ + "name": "toss-this", + "version": "0.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} +``` + +Once you have this in your project adding to it using `npm install` is very easy. Simply add the `--save` flag to the command like the following: +Uma vez que voce tem isso em seu projeto, adicinar dependencias a ele é muito facil basta usar isso `npm install`. Adicione a flag --save` ao comando como a seguir: + +``` +$ npm install --save +``` + +Para adicionar o Grunt ao seu projeto, voce deve atualiar o `package.json` adicionando uma `dependencies` no arquivo `json`. + +``` +{ + "name": "toss-this", + "version": "0.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "grunt": "^0.4.5" + } +} +``` + +Somando-se a isso, se voce queiser acicionar uma dependencia que é somente em ambiente de dsenvolvimento, voce deve passar a flag `-dev`: + +``` +$ npm install --save-dev +``` + +Para adicionar o Gulp como uma dependenceia de desenvolvimento nos atualziado o arquivo `package.json` adiconando no objeto `devDependencies` + +``` +{ + "name": "toss-this", + "version": "0.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "grunt": "^0.4.5" + }, + "devDependencies": { + "gulp": "^3.6.2" + } +} +``` + +### Aprendendo mais sobre o npm + +npm é um incrivelmente comlexo e util quando vamos gerenciad pacotes, Veja isso [npm cheatsheet](http://blog.nodejitsu.com/npm-cheatsheet/) para informacoe mais detalhadas. + +### Aprendendo mais sobre package.json + +The `package.json` has many features. To learn more about how this all works [package.json An interactive guide](http://package.json.nodejitsu.com/#) is an amazing tool to learn from. + +O `package.json` tem uitas funcionalidade. Para aprender mais sobe como tudo isso trabalha [package.json An interactive guide](http://package.json.nodejitsu.com/#) e uma incrivél ferramenta para aprender. + +## Mantendo dependencias + +Ao contrário de outros gerenciadores de pacotes, npm instala seuas dependencias dentro da pasta root de seu projeto. Sem passos extras, essas biblitoecs podem facilment ser comitadas no seu controle de versão. + +Voce provalemtente não vai querer fazer isso, Versionado e mantedo via arquiovo `package.json` voce nunca deve editar os pacotes dessa forma. + + +### Usando o .gitignore + +Para manter bibliotecas npm fora no seu controle de versão , adicionao a seguite linha no arquivo .gitignore + +``` +node_modules +``` + +### Obtendo as dependencias + +O arquivo `package.json` está mantendo suas dependencias e voce náo deve commitar suas dependencias para seu repositorio Git, quem clonar o seu repositorio precisa instlar as dependencias, Instar as dependencias é muito simples. + +``` +$ npm install +``` + +Depois de executar esse comando voce deve ver seu CLI fazer download da internet! diff --git a/pt-br/routes.md b/pt-br/routes.md new file mode 100644 index 0000000..7a4bb45 --- /dev/null +++ b/pt-br/routes.md @@ -0,0 +1,114 @@ +# Fun with Routes + +The `app.VERB()` methods provide the routing functionality in Express, where **VERB** is one of the HTTP verbs, such as `app.post()`. Multiple callbacks may be given, all are treated equally, and behave just like middleware, with the one exception that these callbacks may invoke `next('route')` to bypass the remaining route callback(s). This mechanism can be used to perform pre-conditions on a route then pass control to subsequent routes when there is no reason to proceed with the route matched. + +The following snippet illustrates the most simple route definition possible. Express translates the path strings to regular expressions, used internally to match incoming requests. Query strings are **not** considered when peforming these matches, for example `GET /` would match the following route, as would `GET /?name=tobi`. + +[source](http://expressjs.com/4x/api.html#app.VERB) + + +```javascript +app.VERB(path, [callback...], callback) +``` + +Lets get into setting up some routes. In the `app.js` file the following line is how this comes together: + +```javascript +var routes = require('./routes/index'); +``` + +What's happening here? Basically, Express is setting the `var` of `routes` to require the path and file of `./routes.index`. + +This var is then used to set the root path of the app + +```javascript +app.use('/', routes); +``` + +Another thing we can do is `res.send()` and what ever we put in there will get sent directly to the browser. For example: + +```javascript +router.get('/foo', function(req, res){ + res.send('hello world'); +}); +``` + +Using the `res.send()` we can do fun things like even send in JSON objects. + +```javascript +router.get('/foo', function(req, res){ + res.send({'name':'Bob Goldcat', 'age': '41'}) +}); +``` + +This method allows us to then keep all our routes in the `index.js` file if needed. There are better ways to address a more complicated routing solution, but for the scope of this workshop, this is great. + +## What's in the index.js file? + +Looking at our `index.js` file you should see the following: + +```javascript +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res) { + res.render('index', { title: 'Express' }); +}); + +module.exports = router; +``` + +##### router.get + +This is the function that will 'get' the URL path of `/`. Then we need to create a function that will make a `req` (request) and `res` (response). The is another concept of `next` for chaining events would go here as well, but not shown in this example. + +##### What is module.exports? + +This is the object that's actually returned as the result of a require call. This is a Node feature, more on this at [nodejs.org/api](http://nodejs.org/api/modules.html#modules_module_exports). + +## Build a new route + +Looking at the syntax pattern, if we wanted to add a new route to the app, we can simply do something like the following: + +```javascript +router.get('/app', function(req, res) { + res.render('app', { title: 'Express' }); +}); +``` + +Keep in mind that the value of the URL, `/app`, does not need to be the same value of the file itself. If the name of the view was `foo.jade` we could do the following: + +```javascript +router.get('/app', function(req, res) { + res.render('foo', { title: 'Express' }); +}); +``` + +## It's a route? It's a controller? + +What's interesting about this is that the route function is containing logic. Inside the route is a `res.render` function: + +```javascript +res.render('foo', { title: 'Express' }); +``` + +In the view template we see this: + +```jade +h1= title +p Welcome to #{title} +``` + +These are two examples of how we can pull data from the 'controller/route' and display in the view. In this example we get the HTML output of: + +```html +

Express

+

Welcome to Express

+``` + +All of this seems to be a bleed of concerns as the route may also contain controller info? This is true and there is a movement in the community to change the name of the dir from `routes` to `controllers`. + +A great example of this can be seen at [Holowaychuk](https://github.com/visionmedia/express/tree/master/examples/mvc)'s Express MVC example repo. + +But for the sake of this workshop and consistency, we will keep the current convention. diff --git a/pt-br/sass.md b/pt-br/sass.md new file mode 100644 index 0000000..0005cd8 --- /dev/null +++ b/pt-br/sass.md @@ -0,0 +1,66 @@ +# Add libsass + +Sass, and it's port libsass, is the leading CSS pre-processor and by far the most feature rich. But one thing that separates libsass from others in the JavaScript community is that it's not written in JavaScript. It's actually written in C/C++. So, the same library is portable to just about any language that a wrapper can be written for. And by far the most popular wrapper is `node-sass`. + +All of this doesn't really matter. The only thing this means is that we need to go through some additional, although extremely simple, setup steps. + +## First, let's install Node-Sass: + +``` +$ npm install --save node-sass +``` + +This will install the Node wrapper for Sass and the C/C++ libsass library. Next, in order for Grunt to make use of the library, we need to add the Grunt-Sass package. + +``` +$ npm install grunt-sass --save +``` + +To get all of this integrated into the project, we simply need to update the `Gruntfile.js`. + +```javascript +module.exports = function(grunt) { + grunt.initConfig({ + sass: { + dist: { + files: { + 'public/stylesheets/style.css': 'sass/style.scss' + } + } + } + }); + + grunt.loadNpmTasks('grunt-sass'); + grunt.registerTask('default', ['sass']); +}; +``` + +In the `files:` object you will list the path to the output CSS and then the path to the input SCSS file. + +## Add the Sass + +To get this running, we need to add the `sass` directory and put the `style.scss` file in there. In the root of the project: + +``` +$ mkdir sass +``` + +In the `sass` directory: + +``` +$ touch style.scss +``` + +And add the following Sass so that we know this is working: + +```scss +$color: orange; + +body { + background-color: $color; +} +``` + +## Run Grunt + +At this point we are ready to run a `grunt` command and process some Sass. From 75b6cd13e7f6efad9173581ff6f8ce15068b6874 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 14:06:36 -0300 Subject: [PATCH 02/41] =?UTF-8?q?Revis=C3=A3o=20portugu=C3=AAs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pt-br/node-npm.md | 52 ++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/pt-br/node-npm.md b/pt-br/node-npm.md index be12110..f043fba 100644 --- a/pt-br/node-npm.md +++ b/pt-br/node-npm.md @@ -25,19 +25,19 @@ O artigo representa uma opinião pessoal contra o uso do Homebrew. Brew tem trab ## Node Package Manager (npm) -> npm é um NodeJs package manager. Com o proprio nome implica, voce pode usar ele para isntalar programa Node, tambem, se voce usar em desenvolvimento, ele uma forma facil de especificar suas dependencias. +> npm é um gerenciador de pacotes NodeJS. Como o próprio nome indica, você pode usar ele para instalar programas Node, também, se você usar em ambiente de desenvolvimento, ele é uma forma fácil de especificar as dependências de seu projeto. -[Leia mais](http://howtonode.org/introduction-to-npm) sobre o npm +[Leia mais](http://howtonode.org/introduction-to-npm) sobre o npm. -Dependendo do seu processo de instalaçao voce pode ou~não ter o NOM instalado. Para verificar, simplismente execute: +Dependendo do seu processo de instalação você pode ou não ter o NPM instalado. Para verificar, execute: ``` $ npm --version ``` -#### Se você não tem npm instalado, execute o seguinte comandos: +#### Se você não tem npm instalado, execute o seguinte comando: -Nota: npm é um gerenciado de pacotes para o Node, dessa forma voce nãopode usar o gerenciado de pacotes para instalar o gerenciado de pacotes. +Nota: npm é um gerenciado de pacotes para o Node, dessa forma você não pode usar o gerenciado de pacotes para instalar o gerenciado de pacotes o_O. ``` $ curl http://npmjs.org/install.sh | sh @@ -45,21 +45,21 @@ $ curl http://npmjs.org/install.sh | sh ## Usando npm -Agora que voce tem o npm instlado, todos os pacotes são registrados com um simples comando. Para um pacote basico, execute: +Agora que você tem o npm instalado, todos os pacotes são registrados com um simples comando. Para instalar um pacote básico, execute: ``` $ npm install ``` -Esse métodos de instalacao vai instalar o pacoes no diretorio (`node_modules/`) relativo ao seu projeto. Depois de um tempo voce pode precisar isntalar bibliotecas globalmente, assim seu acesso pode ser feito de qualquer aplicação se necessariamente o requerer como uma dependencia. +Esse método de instalação vai instalar os pacotes no diretório (`node_modules/`) relativo ao seu projeto. Às vezes você vai precisar instalar bibliotecas globalmente, assim seu acesso pode ser feito de qualquer aplicação sem necessariamente exigir a instalação do pacote como uma dependência. -Para fazer isso, voce precisa adicionar a flag `-g` no comando de instalação. +Para fazer isso, você precisa adicionar a *flag* `-g` no comando de instalação. ``` $ npm install -g ``` -**Note:** Dependendo de como o Node está instalado em seu sistema, voce pode nao ter aesso a instalacao global de pacotes. Para contornar ess situação, simplismente adicione `sudo` no antes do `npm` no comando de instalação. +**Nota:** Dependendo de como o Node está instalado em seu sistema, você pode não ter acesso para instalar pacotes globalmente. Para contornar essa situação, adicione `sudo` antes do `npm` no comando de instalação. ``` $ sudo npm install -g @@ -67,9 +67,9 @@ $ sudo npm install -g ### Usando npm com um projeto -O mais comum caso de uso do `npm` esta em manter um manifesto de dependencias para seu proejto. Isso é mantido com um arquivo chamado [package.json](https://www.npmjs.org/doc/json.html) +O caso mais comum de uso do `npm` está em manter um manifesto de dependências para seu projeto. Ele é mantido com um arquivo chamado [package.json](https://www.npmjs.org/doc/json.html). -Voce mesmo pode criar esse arquivo, existem uma maneira de gerar esse arquivo tambem. Em algum diretorio execute `npm init` e o CLI vai orietalo em uma serie de pergutnas e criar algo parecido com isso? +Você mesmo pode criar esse arquivo, existem também uma maneira de gerar esse arquivo. Em algum diretório execute `npm init`, o CLI vai orientá-lo em uma serie de perguntas e criar algo parecido com isso: ``` { @@ -85,14 +85,13 @@ Voce mesmo pode criar esse arquivo, existem uma maneira de gerar esse arquivo ta } ``` -Once you have this in your project adding to it using `npm install` is very easy. Simply add the `--save` flag to the command like the following: -Uma vez que voce tem isso em seu projeto, adicinar dependencias a ele é muito facil basta usar isso `npm install`. Adicione a flag --save` ao comando como a seguir: +Uma vez que você tem isso adiciona o em seu projeto o comando `npm install` instalas as dependências. Adicione a *flag* --save` ao comando, veja: ``` $ npm install --save ``` -Para adicionar o Grunt ao seu projeto, voce deve atualiar o `package.json` adicionando uma `dependencies` no arquivo `json`. +Para adicionar o Grunt ao seu projeto, você deve atualizar o `package.json` adicionando ao objeto `dependencies` no arquivo `json`, veja: ``` { @@ -111,13 +110,13 @@ Para adicionar o Grunt ao seu projeto, voce deve atualiar o `package.json` adic } ``` -Somando-se a isso, se voce queiser acicionar uma dependencia que é somente em ambiente de dsenvolvimento, voce deve passar a flag `-dev`: +Somando-se a isso, se você quiser adicionar uma dependência utilizada somente em ambiente de desenvolvimento, você deve passar a flag `-dev`: ``` $ npm install --save-dev ``` -Para adicionar o Gulp como uma dependenceia de desenvolvimento nos atualziado o arquivo `package.json` adiconando no objeto `devDependencies` +Para adicionar o Gulp como uma dependência utilizada apenas em ambiente de desenvolvimento, no arquivo `package.json` adicionamos ele ao objeto `devDependencies`, veja: ``` { @@ -141,35 +140,32 @@ Para adicionar o Gulp como uma dependenceia de desenvolvimento nos atualziado o ### Aprendendo mais sobre o npm -npm é um incrivelmente comlexo e util quando vamos gerenciad pacotes, Veja isso [npm cheatsheet](http://blog.nodejitsu.com/npm-cheatsheet/) para informacoe mais detalhadas. +npm é um utilitário incrível e complexo quando se trata de gerenciamento de dependências, Veja o [npm cheatsheet](http://blog.nodejitsu.com/npm-cheatsheet/) para informações mais detalhadas. ### Aprendendo mais sobre package.json -The `package.json` has many features. To learn more about how this all works [package.json An interactive guide](http://package.json.nodejitsu.com/#) is an amazing tool to learn from. +O `package.json` tem muitas funcionalidades. Para saber mais sobre como tudo isso trabalha [package.json An interactive guide](http://package.json.nodejitsu.com/#) é uma incrível ferramenta de aprendizado. -O `package.json` tem uitas funcionalidade. Para aprender mais sobe como tudo isso trabalha [package.json An interactive guide](http://package.json.nodejitsu.com/#) e uma incrivél ferramenta para aprender. +## Mantendo dependências -## Mantendo dependencias - -Ao contrário de outros gerenciadores de pacotes, npm instala seuas dependencias dentro da pasta root de seu projeto. Sem passos extras, essas biblitoecs podem facilment ser comitadas no seu controle de versão. - -Voce provalemtente não vai querer fazer isso, Versionado e mantedo via arquiovo `package.json` voce nunca deve editar os pacotes dessa forma. +Ao contrário de outros gerenciadores de pacotes, npm instala suas dependências dentro da pasta raiz de seu projeto. Sem passos extras, essas bibliotecas podem facilmente ser visionadas no seu controle de versão. +Você provavelmente não vai querer fazer isso, O versionamento dessas dependências é mantido pelo arquivo `package.json` e você deve evitar versionar esses pacotes. ### Usando o .gitignore -Para manter bibliotecas npm fora no seu controle de versão , adicionao a seguite linha no arquivo .gitignore +Para manter bibliotecas npm fora no seu controle de versão, adicionando a seguinte linha no arquivo .gitignore. ``` node_modules ``` -### Obtendo as dependencias +### Obtendo as dependências -O arquivo `package.json` está mantendo suas dependencias e voce náo deve commitar suas dependencias para seu repositorio Git, quem clonar o seu repositorio precisa instlar as dependencias, Instar as dependencias é muito simples. +O arquivo `package.json` está mantendo suas dependências e você não deve versionar essas dependências no seu repositório Git, quem clonar o seu repositório precisa instalar as dependências, isso é muito simples, veja: ``` $ npm install ``` -Depois de executar esse comando voce deve ver seu CLI fazer download da internet! +Depois de executar esse comando você deve ver seu CLI fazer download das dependências From 60b8df2e150e498aa18973237f14464d33040ab4 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 14:41:17 -0300 Subject: [PATCH 03/41] =?UTF-8?q?Tradu=C3=A7=C3=A3o=20sem=20revis=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pt-br/express.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pt-br/express.md b/pt-br/express.md index e307cbb..a6b083a 100644 --- a/pt-br/express.md +++ b/pt-br/express.md @@ -1,37 +1,37 @@ -# Express, the Node framework +# Express, o framework Node -[Expressjs](http://expressjs.com/) is the web application framework for Node.js apps. +[Expressjs](http://expressjs.com/) é um framework web para aplicações Node.js. -> Express is a minimal and flexible node.js web application framework, providing a robust set of features for building single and multi-page, and hybrid web applications. +> Express is a pequeno e flexivel framework node.js para aplicações web, ele prove um robusto conjunto de funcionalidade para criar *single* e *multi-page*, e aplicações web hibridas. -It has a wealth of [APIs](http://expressjs.com/4x/api.html) and is FAST AS HELL!! +Tem uma valiosa [API](http://expressjs.com/4x/api.html) e é RÁPIDO COMO O INFERNO!! -Express is well known for NOT following after Rails as far as frameworks go, but more so it takes after another Ruby framework called [Sinatra](http://www.sinatrarb.com/). The concept is simple, the framework gives you enough to get things up and running as fast as possible and all without getting in your way. +Express é bem conhecido por não seguir Rails, tanto quanto frameworks go, mas mais ainda é preciso levar em conta outro framework Ruby chamado [Sinatra](http://www.sinatrarb.com/). O conceito é simples. o framework da para voce o suficiente para fazer as coisas e executar o mais rapidez, tudo isso sem ficar no seu caminho. -For the most part, Express continues to live up to this statement. +Para a maior parte, Express continua continar a viver com essa afirmação -For this workshop, we will be using Express as the core tool for getting a web app up and running with a server, route support, error pages, loggers, etc ... +Para este workshop, nos vamos usar express como ferramentcentral para criar uma web app e executar com um servidor, suporte a rotas, paginas de erro, logs, etc ... -## Install Express +## Intalando o Express -Installing Express with npm is really easy. Keep in mind that there are two parts to Express, the library that runs it and an awesome generator. +Instalar o Express com o npm é muito fácil. Mantenha em sua mente que há duas partes no Express, a biblioteca que executa um incrivel gerador. -To install Express: +Para instalar o Express: ``` $ npm install express -g ``` -To install the generator: +Para instlar o gerador: ``` $ npm install express-generator -g ``` -## Generator version +## Versão do gerador -Express 4.0 was recently released and there are some who are not jiggy with that. So, npm has a way of specifying the version of generator you install. +Express 4.0 foi recentemente libeado, assim, npm tem um poder de especificar a versão do gerador que voce quer instalar. ``` $ npm install -g express-generator@3 From a8b5d8db9c35422df1de12d64054e693217729f4 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 14:52:40 -0300 Subject: [PATCH 04/41] =?UTF-8?q?revis=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pt-br/express.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/pt-br/express.md b/pt-br/express.md index a6b083a..b146474 100644 --- a/pt-br/express.md +++ b/pt-br/express.md @@ -1,21 +1,20 @@ # Express, o framework Node -[Expressjs](http://expressjs.com/) é um framework web para aplicações Node.js. +[Expressjs](http://expressjs.com/) é um framework para aplicações web em Node.js. -> Express is a pequeno e flexivel framework node.js para aplicações web, ele prove um robusto conjunto de funcionalidade para criar *single* e *multi-page*, e aplicações web hibridas. +> Express é um pequeno e flexível framework node.js para aplicações web, ele prove um conjunto robusto de funcionalidades para criar *single* e *multi-page*, além de aplicações web hibridas. -Tem uma valiosa [API](http://expressjs.com/4x/api.html) e é RÁPIDO COMO O INFERNO!! +Tem uma valiosa [API](http://expressjs.com/4x/api.html) que é RÁPIDA COMO O INFERNO!! -Express é bem conhecido por não seguir Rails, tanto quanto frameworks go, mas mais ainda é preciso levar em conta outro framework Ruby chamado [Sinatra](http://www.sinatrarb.com/). O conceito é simples. o framework da para voce o suficiente para fazer as coisas e executar o mais rapidez, tudo isso sem ficar no seu caminho. +Express é bem conhecido por não seguir Rails, tanto quanto frameworks go, para isso preciso levar em conta outro framework Ruby chamado [Sinatra](http://www.sinatrarb.com/). O conceito é simples, o framework dá para você o suficiente para fazer as coisas e executar o mais rápido possível, tudo isso sem ficar no seu caminho. -Para a maior parte, Express continua continar a viver com essa afirmação +Para a maior parte, Express continua de acordo com essa afirmação. -Para este workshop, nos vamos usar express como ferramentcentral para criar uma web app e executar com um servidor, suporte a rotas, paginas de erro, logs, etc ... +Para este workshop, nós vamos usar Express como ferramenta central para criar uma *web app* e executar em um servidor, com suporte a rotas, páginas de erro, logs, etc ... +## Instalando o Express -## Intalando o Express - -Instalar o Express com o npm é muito fácil. Mantenha em sua mente que há duas partes no Express, a biblioteca que executa um incrivel gerador. +Instalar o Express com o npm é muito fácil. Tenha em sua mente que há duas partes no Express, a biblioteca que executa um incrível gerador. Para instalar o Express: @@ -23,7 +22,7 @@ Para instalar o Express: $ npm install express -g ``` -Para instlar o gerador: +Para instalar o gerador: ``` $ npm install express-generator -g @@ -31,7 +30,7 @@ $ npm install express-generator -g ## Versão do gerador -Express 4.0 foi recentemente libeado, assim, npm tem um poder de especificar a versão do gerador que voce quer instalar. +Express 4.0 foi liberado recentemente, nós vamos utilizar a versão 3 do gerador, o npm tem um poder de especificar qual a versão do gerador que você quer instalar. ``` $ npm install -g express-generator@3 From d3116e42c0eca232a9fd9ef173badd78b12fcb9b Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 15:13:06 -0300 Subject: [PATCH 05/41] Update new-app.md --- pt-br/new-app.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/pt-br/new-app.md b/pt-br/new-app.md index f1fa3b9..a8942d3 100644 --- a/pt-br/new-app.md +++ b/pt-br/new-app.md @@ -1,12 +1,12 @@ -# Crate a new Express app +# Crate uma nov app Express -At this point, you should be able to go forth and create an app. In this example, we will create a Node.js app with Express framework. +Nesse ponto, você deve ser capaz de ir em frente e criar um app. Neste exemplo, vamos criar um Node.js app com o framework Express. ``` $ express ``` -Running this command (using `demo-app` as the example), you should see the following: +Execute esse comando (usando `demo-app` como exemplo), voce deve ver o seguinte: ``` create : demo-app @@ -34,11 +34,11 @@ Running this command (using `demo-app` as the example), you should see the follo $ DEBUG=my-application ./bin/www ``` -BOOM! Express takes care of most of the labor. Now, we do what the computer says, change directory into the app dir and run `npm install`. +BOOM! Express cuida da maior parte do trabalho. Agora fazemos o que o computador diz, mude o diretório, e dentro do diretório da aplicação execute `npm install`. -## What's in the app? +## O que há no app? -At this point, you should be able to do a `ls` and see the new structure that was created for you. +Nese momento, voce deve executar o comando `ls` e ver a eestrutra que foi criar para você. ``` app.js node_modules/ public/ views/ @@ -47,9 +47,9 @@ bin/ package.json routes/ #### app.js -This is the logical starting point for your app. Some of the things in there, lets talk about: +Ele é o ponto de inicio para seu app. Vamos falar sobre alguns códigos dessa estrutura. -The following lines, for this type of app, we don't need them: +Na seguinte linha, para esse tipo de app, não previsamos delas. ``` var user = require('./routes/user'); @@ -57,19 +57,17 @@ var user = require('./routes/user'); app.get('/users', user.list); ``` -Sets the path to the dir where the view files are located: - +Define o cominho do diretório onde os arquivos das views estão localizadas: ``` app.set('views', path.join(__dirname, 'views')); ``` -Sets the path to the dir with static assets: - +Define o cominho do diretório onde estão os assest: ``` app.use(express.static(path.join(__dirname, 'public'))); ``` -Sets the root route for the app: +DEfine a raiz de seu app: ``` app.use('/', routes); @@ -77,23 +75,24 @@ app.use('/', routes); #### node_modules/ -This is the dir where all your npm packages will reside. +Esse é o diretório onde todoas as suas dependencias vão estar. #### public/ -Directory for all static assets like images, JavaScript, CSS, fonts, etc ... +Diretório para todoa o assets, como por exemplo imagens, JavaScript, CSS, fonts, etc ... #### views/ -Where all your layout and view Jade files will live. +Onde todoas os seus arquivos de layouts e vies Jade deve estar #### bin/ -There is a single file here, `www` and this is what activate the Node server. +Ha um unico arquivo aqui, `www` e estre é o que ativa o servidor Node. #### package.json Project description, scripts manager and the app manifest. Notice the following object: +Descrições do projeto, sript de gerenciamento do projeto e o manifeto do app. Observe o seguite objeto. ``` "scripts": { @@ -101,8 +100,9 @@ Project description, scripts manager and the app manifest. Notice the following }, ``` -This is the code that allows you to run `npm start` for the app. +Isso é o código que permite voce executar o `npm start` par seu app. + #### routes/ -This is the directory where you will build out the RESTful routes for your app. With a base install there should be two files in there, `index.js` and `users.js`. +Esse é o diretorio inde voce deve crair a saida das rotas RESTful para seu app. Com base na instlação deve existir dois arquivo ali, `index.js` e `users.js`. From bc15fc22a143b9cd11c3af5d048df1b49b90a683 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 15:15:12 -0300 Subject: [PATCH 06/41] fixed word --- en/new-app.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/new-app.md b/en/new-app.md index f1fa3b9..f4276fa 100644 --- a/en/new-app.md +++ b/en/new-app.md @@ -1,4 +1,4 @@ -# Crate a new Express app +# Create a new Express app At this point, you should be able to go forth and create an app. In this example, we will create a Node.js app with Express framework. From 4b66c2a8575216c990481295f0569fa3a8f4f0d3 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 15:26:04 -0300 Subject: [PATCH 07/41] Revisado --- pt-br/new-app.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/pt-br/new-app.md b/pt-br/new-app.md index a8942d3..321f9f9 100644 --- a/pt-br/new-app.md +++ b/pt-br/new-app.md @@ -1,12 +1,12 @@ -# Crate uma nov app Express +# Criando um novo app Express -Nesse ponto, você deve ser capaz de ir em frente e criar um app. Neste exemplo, vamos criar um Node.js app com o framework Express. +Nesse ponto, você deve ser capaz de criar um app. Neste exemplo, vamos criar um Node.js app com o framework Express. ``` $ express ``` -Execute esse comando (usando `demo-app` como exemplo), voce deve ver o seguinte: +Execute esse comando (usando `demo-app` como exemplo), você deve ver a seguinte saída: ``` create : demo-app @@ -34,11 +34,11 @@ Execute esse comando (usando `demo-app` como exemplo), voce deve ver o seguinte: $ DEBUG=my-application ./bin/www ``` -BOOM! Express cuida da maior parte do trabalho. Agora fazemos o que o computador diz, mude o diretório, e dentro do diretório da aplicação execute `npm install`. +BOOM! Express cuida da maior parte do trabalho. Agora vamos fazemos o que o computador está dizendo, mude de diretório, e dentro do diretório da aplicação execute `npm install`. -## O que há no app? +## O que está no app? -Nese momento, voce deve executar o comando `ls` e ver a eestrutra que foi criar para você. +Agora, execute o comando `ls` e veja a estrutura que foi criar para você. ``` app.js node_modules/ public/ views/ @@ -47,9 +47,9 @@ bin/ package.json routes/ #### app.js -Ele é o ponto de inicio para seu app. Vamos falar sobre alguns códigos dessa estrutura. +Ele é o ponto partida para seu app. Vamos falar sobre alguns códigos dessa estrutura. -Na seguinte linha, para esse tipo de app, não previsamos delas. +A seguinte linha não e necessária para esse tipo de app. ``` var user = require('./routes/user'); @@ -57,17 +57,19 @@ var user = require('./routes/user'); app.get('/users', user.list); ``` -Define o cominho do diretório onde os arquivos das views estão localizadas: +Define o caminho do diretório onde os arquivos das views estão localizadas: + ``` app.set('views', path.join(__dirname, 'views')); ``` -Define o cominho do diretório onde estão os assest: +Define o caminho do diretório onde estão os assets: + ``` app.use(express.static(path.join(__dirname, 'public'))); ``` -DEfine a raiz de seu app: +Define o caminho raiz do app: ``` app.use('/', routes); @@ -75,24 +77,23 @@ app.use('/', routes); #### node_modules/ -Esse é o diretório onde todoas as suas dependencias vão estar. +Esse é o diretório onde todas as suas dependências vão estar. #### public/ -Diretório para todoa o assets, como por exemplo imagens, JavaScript, CSS, fonts, etc ... +Diretório dos assets, como por exemplo imagens, JavaScript, CSS, fonts, etc ... #### views/ -Onde todoas os seus arquivos de layouts e vies Jade deve estar +Onde todos os seus arquivos de layouts e views Jade deve estar. #### bin/ -Ha um unico arquivo aqui, `www` e estre é o que ativa o servidor Node. +Ha um único arquivo aqui, `www` e este é o que ativa o servidor Node. #### package.json -Project description, scripts manager and the app manifest. Notice the following object: -Descrições do projeto, sript de gerenciamento do projeto e o manifeto do app. Observe o seguite objeto. +Descrições do projeto, script de gerenciamento do projeto e o manifesto do app. Observe o seguinte objeto. ``` "scripts": { @@ -100,9 +101,8 @@ Descrições do projeto, sript de gerenciamento do projeto e o manifeto do app. }, ``` -Isso é o código que permite voce executar o `npm start` par seu app. - +Esse é o código que permite você execute o `npm start` para seu app. #### routes/ -Esse é o diretorio inde voce deve crair a saida das rotas RESTful para seu app. Com base na instlação deve existir dois arquivo ali, `index.js` e `users.js`. +Esse é o diretório onde você deve criar as rotas RESTful para seu app. Com base na instalação deve existir dois arquivos lá dentro, `index.js` e `users.js`. From 7c2315ea7dab5707ae6a801e70cdb2f223405b38 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 16:55:29 -0300 Subject: [PATCH 08/41] Revisado --- pt-br/routes.md | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/pt-br/routes.md b/pt-br/routes.md index 7a4bb45..0062133 100644 --- a/pt-br/routes.md +++ b/pt-br/routes.md @@ -1,8 +1,8 @@ -# Fun with Routes +# Diversão com rotas -The `app.VERB()` methods provide the routing functionality in Express, where **VERB** is one of the HTTP verbs, such as `app.post()`. Multiple callbacks may be given, all are treated equally, and behave just like middleware, with the one exception that these callbacks may invoke `next('route')` to bypass the remaining route callback(s). This mechanism can be used to perform pre-conditions on a route then pass control to subsequent routes when there is no reason to proceed with the route matched. +O método `app.VERB()` fornece a funcionalidade de roteamento no Express, onde **VERB** é um verbo HTTP, como `app.post()`. Várias chamadas de retorno podem existir, todos tem tratamento igual, e se comportam como um *middleware*, com uma única exceção onde as camadas podem invocar `next('route')` que ignoram as chamadas de rotas remanescentes. Este mecanismo pode ser usado para executar pré-condições em uma rota e passar o controle para a rota seguinte quando não há mais necessidade de prosseguir com a rota atual. -The following snippet illustrates the most simple route definition possible. Express translates the path strings to regular expressions, used internally to match incoming requests. Query strings are **not** considered when peforming these matches, for example `GET /` would match the following route, as would `GET /?name=tobi`. +O trecho a seguir mostra uma simples definição de rota. Express traduz a sequência do caminho para uma expressão regular usada internamente para combinar com as requisições de entrada. Sequencias de consulta como **not** quando consideradas representam estas combinações, por exemplo `GET /` poderia combinar com a seguinte rota, com faria `GET /?name=tobi`. [source](http://expressjs.com/4x/api.html#app.VERB) @@ -11,21 +11,21 @@ The following snippet illustrates the most simple route definition possible. Exp app.VERB(path, [callback...], callback) ``` -Lets get into setting up some routes. In the `app.js` file the following line is how this comes together: +No arquivo `app.js` veja como as rotas são definidas. ```javascript var routes = require('./routes/index'); ``` -What's happening here? Basically, Express is setting the `var` of `routes` to require the path and file of `./routes.index`. +O que está acontecendo aqui? Basicamente, Express está definindo uma variável chamada `routes`, para requere o caminho do arquivo `./routes.index`. -This var is then used to set the root path of the app +Esta variável está usada para definir o cominho raiz do app. ```javascript app.use('/', routes); ``` -Another thing we can do is `res.send()` and what ever we put in there will get sent directly to the browser. For example: +Outra coisa, nós podemos usar o `res.send()` e o que nos passamos no parâmetro será enviado diretamente para o browser. Por exemplo: ```javascript router.get('/foo', function(req, res){ @@ -33,7 +33,7 @@ router.get('/foo', function(req, res){ }); ``` -Using the `res.send()` we can do fun things like even send in JSON objects. +Usando o `res.send()` podemos fazer coisas divertidas como sempre enviar objetos JSON. ```javascript router.get('/foo', function(req, res){ @@ -41,11 +41,11 @@ router.get('/foo', function(req, res){ }); ``` -This method allows us to then keep all our routes in the `index.js` file if needed. There are better ways to address a more complicated routing solution, but for the scope of this workshop, this is great. +Esse método permite manter todas as rotas que precisamos no arquivo `index.js`. Há melhores maneiras de tratar soluções de roteamento mais complexas, mas para o escopo desse workshop, isso já é o suficiente. -## What's in the index.js file? +## O que é o arquivo index.js -Looking at our `index.js` file you should see the following: +Olhando para o arquivo`index.js` você deve ver o seguinte: ```javascript var express = require('express'); @@ -61,15 +61,15 @@ module.exports = router; ##### router.get -This is the function that will 'get' the URL path of `/`. Then we need to create a function that will make a `req` (request) and `res` (response). The is another concept of `next` for chaining events would go here as well, but not shown in this example. +Esta é a função que decide o caminho da URL para `/`. Em seguida precisamos criar uma função que define uma `req` (requisição) e uma `res` (resposta). Outro conceito é o `next` que irá aqui para encadear eventos, mas não são mostrados nesse exemplo. -##### What is module.exports? +##### O que é o módulo exports -This is the object that's actually returned as the result of a require call. This is a Node feature, more on this at [nodejs.org/api](http://nodejs.org/api/modules.html#modules_module_exports). +É um objeto que é devolvido como resultado de uma chamada a um módulo. É uma funcionalidade do Node, mais sobre isso em [nodejs.org/api](http://nodejs.org/api/modules.html#modules_module_exports). -## Build a new route +## Criando uma nova rota -Looking at the syntax pattern, if we wanted to add a new route to the app, we can simply do something like the following: +Olhando para o padrão da sintaxe, se nós quisermos adicionar uma nova rota no app, podemos simplesmente fazer algo parecido com isso: ```javascript router.get('/app', function(req, res) { @@ -77,7 +77,7 @@ router.get('/app', function(req, res) { }); ``` -Keep in mind that the value of the URL, `/app`, does not need to be the same value of the file itself. If the name of the view was `foo.jade` we could do the following: +Tenha em mente que o valor da URL, `/app`, não precisar ser o mesmo que o próprio arquivo. Se o nome da view for `foo.jade` nos poderíamos fazer o seguinte: ```javascript router.get('/app', function(req, res) { @@ -85,30 +85,31 @@ router.get('/app', function(req, res) { }); ``` -## It's a route? It's a controller? +## É uma rota? É um controlador? -What's interesting about this is that the route function is containing logic. Inside the route is a `res.render` function: +O que é interessante sobre isso é que a função da rota esta contendo lógica. Dentro da rota tem uma função `res.render`. ```javascript res.render('foo', { title: 'Express' }); ``` -In the view template we see this: +No template da view temos isso: ```jade h1= title p Welcome to #{title} ``` -These are two examples of how we can pull data from the 'controller/route' and display in the view. In this example we get the HTML output of: +Aqui está dois exemplos de como nós podemos extrair dados do 'controller/route' e mostrar na view. Nesse exemplo nós pegamos o HTML obtemos a saída de: ```html

Express

Welcome to Express

``` -All of this seems to be a bleed of concerns as the route may also contain controller info? This is true and there is a movement in the community to change the name of the dir from `routes` to `controllers`. +Tudo isso parece ser um punhado de preocupações, como a rota pode também conter informações do controlador? Isso é verdade, a um movimento na comunidade para mudar o nome do diretório de `routes` para `controllers`. -A great example of this can be seen at [Holowaychuk](https://github.com/visionmedia/express/tree/master/examples/mvc)'s Express MVC example repo. +Um bom exemplo disso pode ser visto em [Holowaychuk's](https://github.com/visionmedia/express/tree/master/examples/mvc), um exemplo de MVC em Express. + +Mas para o fim desse workshop, vamos adotar a convecção atual. -But for the sake of this workshop and consistency, we will keep the current convention. From ad1494469dfec4a148fa95986499e9b9b9671340 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 17:02:03 -0300 Subject: [PATCH 09/41] Revisado --- pt-br/404.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pt-br/404.md b/pt-br/404.md index 7ab14e1..4254036 100644 --- a/pt-br/404.md +++ b/pt-br/404.md @@ -1,6 +1,6 @@ -# 404 errors? +# Erro 404? -Errors are already addressed in Express for you. In the `app.js` file, there is the following: +Erros já são endereços no Express. No arquivo `app.js` há o seguinte: ```javascript /// catch 404 and forwarding to error handler @@ -11,7 +11,7 @@ app.use(function(req, res, next) { }); ``` -Then in the `views/` dir, there is `errors.jade`. +No diretório `views/` tem o arquivo `errors.jade`. ```jade extends layout @@ -22,4 +22,4 @@ block content pre #{error.stack} ``` -Simple. If you want to customize your 404 page, simply edit this view. +Simples. Se você quer customizar a página 404, edite essa view. From 24d5b4d4046b7e5cb338a17c3af0cc5becd69642 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 17:43:43 -0300 Subject: [PATCH 10/41] Revisado --- pt-br/grunt.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pt-br/grunt.md b/pt-br/grunt.md index 6745e5f..e12ab25 100644 --- a/pt-br/grunt.md +++ b/pt-br/grunt.md @@ -1,8 +1,8 @@ -# Install and set up Grunt +# Instalando de configurando o Grunt -Grunt is the workhorse of the Node world. You need tasks run, then you put Grunt to work. If you are from the Rails world, Grunt is much like make or Rake. There is a TOM of documentation out there on this task runner, but in this workshop, I will focus on the basics that will get you up and running with an application. +Grunt é o carro-chefe do mundo Node. Você precisa executar tarefas, então coloque o Grunt para trabalhar. Se você é do mundo Rails, Grunt é muito parecido com make ou Rake. A muita documentação sobre este *task runner*, mas nesse workshop, eu vou focar no básico para executar em uma aplicação. -Grunt is pretty simple to set up, create a new `Gruntfile.js` file in the root of your project and add the following shell syntax: +Grunt é bastante e simples de configurar, crie um arquivo chamado `Gruntfile.js` na raiz do seu projeto e adicione a seguinte sintaxe. ```javascript module.exports = function(grunt) { @@ -16,16 +16,16 @@ module.exports = function(grunt) { }; ``` -To run Grunt, it is typical to install Grunt globally: +Para executar o Grunt, é comum instalar ele globalmente: ``` npm install grunt -g ``` -BUT WAIT!! What about deployment? If we create tasks that require Grunt to run on the server, we need this to be a dependency on the app. So, let's install this as a local dependency: +MAS ESPERE!! E sobre o desenvolvimento? Nos criarmos uma tarefa que requer o Grunt para executar no servidor, nós precisamos que essa dependência seja no app. Então, vamos instalar como uma dependência local: ``` npm install --save grunt ``` -Using this base structure and Grunt installed, we can now begin to add new features to our app. +Usando essa estrutura base e o Grunt instalado, nós podemos começar a adicionar novos recursos ao nosso app. From 0bdb65e68d136ea3f10e410db6ec3ed9f3a56537 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 18:07:25 -0300 Subject: [PATCH 11/41] Revisado --- pt-br/gulp.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/pt-br/gulp.md b/pt-br/gulp.md index 9143008..3025011 100644 --- a/pt-br/gulp.md +++ b/pt-br/gulp.md @@ -1,22 +1,23 @@ -# Need to learn more about Gulp +# Precisa saber mais sobre o Gulp -The following are some interesting articles that need to be worked into this workshop Gitbook. +A seguir estão alguns artigos interessantes que serão ser trabalhados nesse workshop GitBook. -### Getting Started With Gulp +### Começando com o Gulp -> This article will make the assumption that you have never used a task runner or command-line interface before and will walk through every step required to get up and running with gulp. +> Este artigo vai dar entendimento caso você nunca tenha usado um *task runner* ou uma interface de linha de comando antes de mostrar os passos requeridos para configurar e executar o Gulp. -[source](http://travismaynard.com/writing/getting-started-with-gulp) +> [Fonte](http://travismaynard.com/writing/getting-started-with-gulp) -### Roll Your Own Asset Pipeline with Gulp +### Rodando seu próprio Asset Pipeline com o Gulp -> I’ve found myself using Gulp for just about everything involving HTML/CSS/JS these days. It’s super fast, quick to write scripts for and flexible. I’m at a point now where I have a ton of projects I can just cd into, run gulp and be up and running. It’s the best solution I’ve found for delivering static assets whether for local development or production. +> Esses dias eu encontrei no Gulp quase tudo envolvendo HTML/CSS/JS. Ele é super rápido, fácil para escrever scripts e flexível. Eu estou em um ponto agora onde eu tenho um tonelada de projetos e eu posso apenas executar cd, run gulp, instalar e ver funcionando. Ele é a melhor solução que eu encontrei para entregar *assets* para desenvolvimento local e em produção. -[source](http://blog.carbonfive.com/2014/05/05/roll-your-own-asset-pipeline-with-gulp/) +> [Fonte](http://blog.carbonfive.com/2014/05/05/roll-your-own-asset-pipeline-with-gulp/) -### Advanced Gulp File +### Arquivo avançado Gulp -> With gulp starting to find itself into my everyday workflow - I've started to understand its quirks and twists, and how to get along with it. My baseline gulfile.js has become a lot neater and advanced in its functionality that the one I originally developed back in March. +> Como o Gulp começando a ser utilizado em meu fluxo de trabalho todos os dias- Eu comecei a entender sua peculiaridade, e como se dar bem com ele. Meus gulfile.js tem se tornado muito mais puro e avançou em funcionalidade comparado com o original desenvolvido em Março. + +> [source](http://www.mikestreety.co.uk/blog/an-advanced-gulpjs-file) -[source](http://www.mikestreety.co.uk/blog/an-advanced-gulpjs-file) From fc8dff1f50136eb7f9e7dde463898d22e02e9496 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 18:30:22 -0300 Subject: [PATCH 12/41] Revisado --- pt-br/sass.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pt-br/sass.md b/pt-br/sass.md index 0005cd8..e0317a7 100644 --- a/pt-br/sass.md +++ b/pt-br/sass.md @@ -1,22 +1,22 @@ -# Add libsass +# Adicionando libsass -Sass, and it's port libsass, is the leading CSS pre-processor and by far the most feature rich. But one thing that separates libsass from others in the JavaScript community is that it's not written in JavaScript. It's actually written in C/C++. So, the same library is portable to just about any language that a wrapper can be written for. And by far the most popular wrapper is `node-sass`. +Sass, é a base da libsass, é o principal pré-processador CSS e de longe o mais rico em funcionalidades. Mas uma coisa que separa a libsass de outros na comunidade JavaScript é que ele não é escrito em JavaScript, ele na verdade é escrito em C/C++. Então, a mesma biblioteca é portável para qualquer linguagem. E de longe o `node-sass` é o mais popular warpper. -All of this doesn't really matter. The only thing this means is that we need to go through some additional, although extremely simple, setup steps. +Tudo isso realmente não importa. A única uma coisa que isso significa é que precisamos passar por uns passos adicionais, embora é extremamente simples a suas configuração. -## First, let's install Node-Sass: +## Primeiro, vamos instalar Node-Sass: ``` $ npm install --save node-sass ``` -This will install the Node wrapper for Sass and the C/C++ libsass library. Next, in order for Grunt to make use of the library, we need to add the Grunt-Sass package. +Isso vai instalar o *wrapper* Node para o Sass e a biblioteca C/C++ libsass. Depois, para o Grunt usar a biblioteca, precisamos adicionar o pacote Grunt-Sass ``` $ npm install grunt-sass --save ``` -To get all of this integrated into the project, we simply need to update the `Gruntfile.js`. +Para conseguir tudo isso integrado no projeto, precisamos atualizar o `Gruntfile.js`. ```javascript module.exports = function(grunt) { @@ -35,23 +35,23 @@ module.exports = function(grunt) { }; ``` -In the `files:` object you will list the path to the output CSS and then the path to the input SCSS file. +No objeto `files:` você precisa listar o caminho de saída do CSS e o cominho de entrada do arquivo SCSS. -## Add the Sass +## Adicionado o Sass -To get this running, we need to add the `sass` directory and put the `style.scss` file in there. In the root of the project: +Para fazer isso funcionar, precisamos adicionar o diretório `sass` e colocar o arquivo `style.scss` lá. Na raiz do projeto execute: ``` $ mkdir sass ``` -In the `sass` directory: +No diretório `sass`: ``` $ touch style.scss ``` -And add the following Sass so that we know this is working: +E adicionamos o seguinte Sass, assim nos sabemos se ele está funcionando: ```scss $color: orange; @@ -61,6 +61,6 @@ body { } ``` -## Run Grunt +## Execute o Grunt -At this point we are ready to run a `grunt` command and process some Sass. +Nesse momento nós estamos prontos para executar um comando `grunt` e processar o Sass. From 8a2255c7ca3049f4d3b3e9824d5fd4ee78c622ef Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 18:40:56 -0300 Subject: [PATCH 13/41] Revisado --- pt-br/heroku.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/pt-br/heroku.md b/pt-br/heroku.md index 118662e..aa2dfc0 100644 --- a/pt-br/heroku.md +++ b/pt-br/heroku.md @@ -1,14 +1,14 @@ # Heroku -The following are basic steps needed to quickly set up a Node.js app with Express and deploy to Heroku. +A seguir estão os passos básicos que você precisa para configurar um app Node.js com Express para *deploy* no Heroku. -### Step 1 - Heroku account +### Passo 1 - Conta no Heroku -Make sure you have a Heroku account set up +Certifique-se que você tem uma conta configurada -### Step 2 - Install Heroku Toolbelt +### Passo 2 - Instalar o Heroku Toolbelt -Download and install the tool belt package specific for your OS +Baixe e instale a ferramenta especifica para seu SO. ##### OSX @@ -24,10 +24,9 @@ Download and install the tool belt package specific for your OS $ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh ``` -### Step 3 - Log into you account - -Once toolbelt is installed, you should be able to access your account +### Passo 3 - Login em sua conta no Heroku +Com o toolbelt instalado, você deve ser capaz acessar sua conta ``` $ heroku login Enter your Heroku credentials. @@ -39,4 +38,4 @@ Generating new SSH public key. Uploading ssh public key /Users/adam/.ssh/id_rsa.pub ``` -That's pretty much about it. Pass these steps and you are ready to DEPLOY THE CODES! +Isso é muito bom. Passando esses passos você está pronto para o DEPLOY DO CÓDIGO. From e9214bd7a89c7f3f76e37dd20c164e13e6c3b83c Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 18:52:23 -0300 Subject: [PATCH 14/41] Revisado --- pt-br/add-some-data.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pt-br/add-some-data.md b/pt-br/add-some-data.md index 3102187..53604a5 100644 --- a/pt-br/add-some-data.md +++ b/pt-br/add-some-data.md @@ -1,10 +1,10 @@ -# Add some data +# Adicionado alguns dados -Great [demo](http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/) that adds the next layer of awesome to this workshop. Adding a Mongo DB to the project to make a simple i/o UX. +Um bom [demo](http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/) que adicionada uma próxima camada desse workshop. Adicionado o Mongo DB no projeto dá para fazer um simples UX I/O. -> My favorite thing about MongoDB is that it uses JSON for its structure, which means it was instantly familiar for me. If you're not familiar with JSON, you'll need to do some reading, as I'm afraid that's outside the scope of this tutorial. +> Minha coisa favorita sobre MongoDB é que ele usa JSON em sua estrutura, o que significa que ele é familiar para mim. Se você não está familiarizado com JSON, você vai precisar de algumas leituras, isso está fora do escopo desse e-book. -> Let's add a record to our collection. For the purposes of this tutorial, we're just going to have a simple database of usernames and email addresses. Our data format will thus look like this: +> Vamos adicionar um registro em nossa coleção, Para o proposito desse tutorial apenas vamos ter um simples banco de dados com o nome de usuário e endereços de e-mail. Nossos dados estão no seguinte formato: ```javascript { @@ -14,4 +14,4 @@ Great [demo](http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/) that } ``` -Anyone out there willing to help put the rest of this together, I would love a Pull Request! +Alguém está disposto a ajudar e colocar outros dados. Eu adoraria um Pull Request. From daa36730de1076b57a3bb1004884f600a66f4a14 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 18:55:49 -0300 Subject: [PATCH 15/41] Revisado --- pt-br/demo/jquery.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pt-br/demo/jquery.md b/pt-br/demo/jquery.md index 5ab7701..966089a 100644 --- a/pt-br/demo/jquery.md +++ b/pt-br/demo/jquery.md @@ -1,19 +1,19 @@ -# Add some jQuery magic +# Adicionando um pouco de magia com o jQuery -Open `layout.jade` and add in the foot of the doc: +Abra o arquivo `layout.jade` e adicione no rodapé do documento: ``` script(src='//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js') script(src="/javascripts/app.js") ``` -Create the following file: +Crie o seguinte arquivo: ``` $ touch public/javascripts/app.js ``` -Open `app.js` and add the following: +Abra o arquivo`app.js` e adicione o seguinte: ``` // Test for placeholder support From 03bb3204171c192161c0e80629ce217d67ccc124 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 18:57:32 -0300 Subject: [PATCH 16/41] Revisado --- pt-br/demo/buttons.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pt-br/demo/buttons.md b/pt-br/demo/buttons.md index 052f4b3..a8b47a4 100644 --- a/pt-br/demo/buttons.md +++ b/pt-br/demo/buttons.md @@ -1,18 +1,18 @@ -# Buttons +# Botões -Add the following file: +Adicione o seguinte arquivo: ``` $ touch _buttons.scss ``` -Add to `application.scss` under the forms import +Adicione em `application.scss` a importação: ``` @import "buttons"; ``` -Open and add the following code: +Abra o arquivo e adicione o seguinte código: ``` button { From 8f2b6033907518f56ad3a806a42e9597c2462ead Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 19:30:28 -0300 Subject: [PATCH 17/41] Revisado --- pt-br/grunt-watch.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/pt-br/grunt-watch.md b/pt-br/grunt-watch.md index 2dc7882..b8e1d40 100644 --- a/pt-br/grunt-watch.md +++ b/pt-br/grunt-watch.md @@ -1,17 +1,16 @@ # Grunt-watch w/Livereload -Now that we have Grunt set up with Sass, when we run the `grunt` task in the CLI, this will process the edits we have. While in rapid development, going back the the CLI, typing in `grunt` and then refreshing the browser will get old fast. +Agora que nós temos o Grunt configurado com o Sass, quando executarmos uma tarefa no CLI `grunt`, ela vai processar as edições que temos. Enquanto em desenvolvimento rápido, temos que voltar ao CLI, e digitar `grunt`, e atualizar o navegador. -Thankfully, we have options. `grunt-contrib-watch` is a npm package that will watch our Sass files and when one is touched, it will run the Grunt tasks to process it. To install: +Felizmente, nós temos uma opção. `grunt-contrib-watch` é um pacote npm que monitora os arquivos Sass e quando algo é modificado, ele executa as tarefas Grunt. Para instalar: ``` npm install --save-dev grunt-contrib-watch ``` -As an added bonus, not only can we run a watcher that will process our Sass, but we can also watch `.jade` files for changes as well. +Com um bônus adicional, não só podemos executar um observador que vai processar nossos arquivos Sass, mas também podemos monitorar arquivos `.jade` quando modificados. - -In the `Gruntfile.js` we need to add some Grunt tasks: +No arquivo `Gruntfile.js` precisamos adicionar algumas tarefas Grunt: ```javascript module.exports = function(grunt) { @@ -40,17 +39,17 @@ module.exports = function(grunt) { }; ``` -And there we have it. Grunt is installed, we have a functional `Gruntfile.js` and we can start writing some Sass too. +E ai temos isso. Grunt está instalado, nós temos um arquivo funcional `Gruntfile.js` e podemos começar a escrever alguns Sass também. -## Add Livereload to layout.jade +## Adicionado Livereload ao layout.jade -In order to get Live reload to fire in the project we need to add a reference to a non-existent JavaScript file in the `layout.jade` file as the last thing in the `` tag. +A fim de obter Livereload para disparar no projeto, precisamos adicionar uma referência a um arquivo JavaScript não existente no arquivo `layout.jade` como um última coisa na tag ``. ```jade script(src='http://localhost:35729/livereload.js') ``` -In a new Express project, it would look like this: +Em um novo projeto Express, é algo parecido com isso: ```jade doctype html @@ -64,4 +63,4 @@ html script(src='http://localhost:35729/livereload.js') ``` -After this is added, go back and REFRESH the browser and then any edit in either Sass or Jade should fire the Livereload. +Depois disso incluído, voltamos e ATUALZIAMOS o browser, em seguida edite qualquer arquivo Sass e Jade para acionar o Livereload. From ad909f56772305c02ad4456f029dfff72350b371 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 19:44:45 -0300 Subject: [PATCH 18/41] Update bower.md --- pt-br/bower.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pt-br/bower.md b/pt-br/bower.md index 217359e..c1b8cc5 100644 --- a/pt-br/bower.md +++ b/pt-br/bower.md @@ -1,17 +1,20 @@ -# Bower all the things +# Bower e todas as coisas -Unless you live in a hole, you are well aware that the JavaScript revolution is all around us. Many of the amazing concepts I discovered in the Rails ecosystem are now bursting out into the JavaScript space allowing for a greater distribution of awesome. The three pillars are; Yeoman, Bower and Grunt. +A menos que voce vide em um burraco, você está ciente da revolução JavaSrcipt que esta ao nosso redor. Muito de nossos incriveis conceitos eu descobri no ecosistema do Rails e agora estão em explosão no espaço JavaScript, permitndo distribuições impressionantes. Os tres pilares são: Yeoman, Bower and Grunt. -The problem I need to solve is; what is the best way to get some library code up on Github and make it easily accessible to users without having to clone the project? Because, that's pretty lame, right? +O problema que precisamos resolver é: qual a melhor maneira de obter codigos de bibliotecas no GitHub e torna-lo acessivel para usuarios sem ter que clonar um projeto? Porque, isso é muito ruim, certo? ## Yeoman generators Initially I came across [generator-sass-boilerplate](https://github.com/srsgores/generator-sass-boilerplate), a 'Yeoman generator for quickly scaffolding out Sass styles'. This is a very interesting approach for creating a complex library and allowing the user to customize the install. But for a simpler library of code, maybe just some functions and mixins, this is way to much overhead. -## Bower is the answer +Inicialmente eu venho sobre [generator-sass-boilerplate](https://github.com/srsgores/generator-sass-boilerplate), um 'Yeoman gerador rapido de scaffolding de etilos Sass'. Isso é uma abordagem muito interssante para criar bibliotecs complexas e permitir a usuario customizar a instalação. Mas para uma simples biblioteca de código, pode ser apenas mais uma função e mixins, isso é um *overhead*. + +## Bower é a resposta Fast forward to now. I recently came across new posts that really break down what Bower is and what it is best at. And it hit me, this IS the answer! + For those not in the know, Bower is an extremely simple solution for front-end package management. > It offers a generic, unopinionated solution to the problem of front-end package management, while exposing the package dependency model via an API that can be consumed by a more opinionated build stack. From a5d2502359024933479cc8dce031111161e0ed9b Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 20:09:10 -0300 Subject: [PATCH 19/41] Update bower.md --- pt-br/bower.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/pt-br/bower.md b/pt-br/bower.md index c1b8cc5..5512c68 100644 --- a/pt-br/bower.md +++ b/pt-br/bower.md @@ -12,42 +12,43 @@ Inicialmente eu venho sobre [generator-sass-boilerplate](https://github.com/srsg ## Bower é a resposta -Fast forward to now. I recently came across new posts that really break down what Bower is and what it is best at. And it hit me, this IS the answer! +Avançando agora. E recentemente me deparei com novas mensagens que quebrar e é o que o Bower faz de melhor. E essa é a a resposta" +Para aqueles que não conhecen, Bower e uma solução extremante simpesl para gerenciamente de pacotes front end. -For those not in the know, Bower is an extremely simple solution for front-end package management. - -> It offers a generic, unopinionated solution to the problem of front-end package management, while exposing the package dependency model via an API that can be consumed by a more opinionated build stack. +> Ele fornece uma solução generica para o problema de gerenciamento de pacoe front-end, enquanto expooes o model de depedncia atrave de uma API que podem ser consumida atraves de muitas opções de build. The beauty of Bower is held within it's simplicity. Bower has a registry, but it's not 100% necessary. The common command is `bower install ` where `` can refer to a [large number of options](http://bower.io/#using-a-different-name-and-a-specific-version-of-a-package), thus making it dirt simple to just share some code. NICE! -Sticking with the 'dirt simple' theme, you can use Bower to easily pull a repo into your project without having to clone it. Even if it doesn't have a `bower.json` file. +A beleza do Bower e mantido dentro de sua simplisidade . Bower tem uma registro , mas não e 100% necessário. O comando comum é `bower install ` onde `` pode ser refereir a um [grande numero de opções](http://bower.io/#using-a-different-name-and-a-specific-version-of-a-package), tornando assim uma poeira simples para compartilhar código. LEGAL. + +Cumprindo com o tema `poeira simples`, voce pode usar Bower para puxar um repositório dentro de seu projeto sem fazer um clone dele. Mesmo se ele nao tem um arquivo `bower.json`. -For example Stipe, a Compass Extension library I wrote, is not Bower aware at all. +Por exemplo Stipe, uma biblioteca Compass Extension que eu escrevi, é não e um cliente Bower. ``` $ bower install git://github.com/Toadstool-Stipe/stipe.git ``` -Run that command in any folder and you will pull in the entire repo with no Github history. This alone is pretty interesting. +Execute esse comando em qualauer pasta e voce vai puxar todo o respositorio sem o historico do GitHub. Isso por si só é interssante. -## Getting started with Bower +## Iniciando com o Bower -To get started, it's simple really. Assuming that Node and npm is installed on your local box, run: +Para começar, é realmente simples. Assumindo que Node e npm estão instalados, execute: ``` $ npm install -g bower ``` -### Install Bower package +### Instalando pacotes Bower -I won't go into exhaustive detail here, but 99% of the time you simply need to run: +I não vou ir com detalhes complexos aqui, mas 99% do tempo voce simplismente vai executar: ``` $ bower install ``` -As stated above, there are alternate install options, but the primary solution is to have a `bower.json` file in the repo and have it registered with Bower. +Como dito acima, há alternaticas de instalação, mas solução principal eé ter um arquivo `bower.json` em seu repositório e registra ele sem seu Bower. If you have a `bower.json` file in your project, explained in the next section, you can add the `--save` flag with the install and this will add the library as a dependency in your project. Sweet. From bcd49ea065bcce2bac5c4ea9352e4464c0a89933 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 20:13:46 -0300 Subject: [PATCH 20/41] Update bower.md --- pt-br/bower.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pt-br/bower.md b/pt-br/bower.md index 5512c68..a4d0843 100644 --- a/pt-br/bower.md +++ b/pt-br/bower.md @@ -42,7 +42,7 @@ $ npm install -g bower ### Instalando pacotes Bower -I não vou ir com detalhes complexos aqui, mas 99% do tempo voce simplismente vai executar: +Eu não vou entrar em detalhes complexos aqui, mas 99% do tempo voce simplismente vai executar: ``` $ bower install @@ -50,11 +50,11 @@ $ bower install Como dito acima, há alternaticas de instalação, mas solução principal eé ter um arquivo `bower.json` em seu repositório e registra ele sem seu Bower. -If you have a `bower.json` file in your project, explained in the next section, you can add the `--save` flag with the install and this will add the library as a dependency in your project. Sweet. +Se voce tem um arquivo `bower.json` em seu projeto, explicado na proxima seção, voce pode adicionar a *flag* `--save` com a instalação e isso vai adicionar o biblioteca com a dependenca em seu projeto. -When you distribute the project, a user who clones it only has to run `$ bower install` and it will pull in all the external resources. Nice! +Quando você distribuir o projeto, um usuário que clona somente tem que executar `$ bower install` e isso vai puxar todas os recursos extenos. -## Commit or not to commit!? +## Commitar ou não commitar? This new system of creating and distributing resources raises an interesting question; do you commit all your bower packages or not? In the Ruby world, Gems are not actually part of the project, but dependencies of the project, and never committed to the project's version control. In this new JavaScript world, Node and Bower package dependencies are referenced via a manifest, much like the Gemfile in Ruby, but are actually installed into the root of the project directory. From 83a2f678fbf42db21bf32283f0985410c7f36572 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 20:44:14 -0300 Subject: [PATCH 21/41] Update bower.md --- pt-br/bower.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pt-br/bower.md b/pt-br/bower.md index a4d0843..f251573 100644 --- a/pt-br/bower.md +++ b/pt-br/bower.md @@ -56,21 +56,21 @@ Quando você distribuir o projeto, um usuário que clona somente tem que executa ## Commitar ou não commitar? -This new system of creating and distributing resources raises an interesting question; do you commit all your bower packages or not? In the Ruby world, Gems are not actually part of the project, but dependencies of the project, and never committed to the project's version control. In this new JavaScript world, Node and Bower package dependencies are referenced via a manifest, much like the Gemfile in Ruby, but are actually installed into the root of the project directory. +Nesse novo sustema de criação e distribuição de recursos levantamos uma interssante questão, voce liberar os seu pacotes gerenciado pelo Bower ou não? No mundo Ruby, Gens na verdade não são parte do projeto, mas depdendencias do projetos nunca são liberads para o sistemaa de controle de versão. Isso é novo no mundo JavaScripot, depdendencia de pacotes Node e Bower são refenreciadas atraves de um manifesto, muito parecido com GemFile no Ruby, mas são, isntalar na verade, detro do diretório raiz do projeto. -There is a [whole discussion](http://addyosmani.com/blog/checking-in-front-end-dependencies/) on this topic. I look at it this way, when you install a Bower library, are you leaving this as a dependency or are you making modifications? +Há [toda uma discussão](http://addyosmani.com/blog/checking-in-front-end-dependencies/) desse tópico. Eu vejo dessa maneira, quando voce isntala uma biblitoeca Bower, voce esta partindo com uma depdencia ou voce esta fazendo modificações? -The choice is up to you, the arguments are strong on either side. In a situation where you are actually forking the code you installed, then the answer is pretty clear, it should be committed to the project or you need to fork the dependency. +O escolha é sua, os argumentos são fortes para ambos os lados. Em uma situação em que voce esta relamente em uma fork de código inslando, então a resposta é muito clara, isso deve ser liberado com o porjeto ou voce precisar fazer um fork da dependencia. -## Generate new Bower package +## Gerando um novo pacote Bower -Creating a new Bower package is again, really simple. +Criando um novo pacote Bower é novamente , muito simples ``` $ bower init ``` -In the CLI, this will initiate a series of questions, the answers of which will be plugged into the new `bower.json` file it creates. Put as much in as you want, but all you really need is: +O CLI, vai solicitar uma serie de perguntas, a respostas de que deve ser gravadas dentro do arquivo `bower.json` que vai ser criado. Coloque o que voce quer, mas tudo o que voce realemten precisa é: ``` { @@ -79,17 +79,17 @@ In the CLI, this will initiate a series of questions, the answers of which will } ``` -And that's it really. You have just created your first Bower resource library. Now go forth and build! Build out your resources, documentation, etc ... your package is ready to go at any time. +E o que isso e de fato. Voceacabou de criar seu primeira biblioteca de recursos. Agora vamos fazer o build! O Build dos seu recursos, documentaçaoi , etc ... Seu pacote vai estar pronto em pouco tempo. -For easy testing, remember the `$ bower install git://github.com/ ...` trick? Run this against a new repo and see how it installs. +Para testar é fácil, lembra do truque `$ bower install git://github.com/ ...`? Execute isso em um novo respositprio e veja como ele se instala. -Be mindful of this step and what the package contains. In my opinion, I see Bower as a great way to distribute smaller, specific libraries of code. When I pull in your Bower package, do I really want all your documentation, tests, demonstration resources, etc ... As an example, I am going to pick on the Bourbon kids here, run: +Seja cuidados nessa etapa e com o que o pacote contem. Em minha opinião, eu vejo o Bower como uma boa maneira de para distribuir pequenas e especificas bibliotecas de código. Quando eu puxo o seu pacote Bower, eu de fato quero toda a documetnação, teste, demontração, recustros, etc ... Com um exmeplo, eu vou pegar o Bourbon aqui, execute: ``` $ bower install bourbon ``` -Running this installer, you will get the whole repo. I don't want the whole repo, all I really want is what is in the `dist/` dir. To solve this, another developer forked Bourbon and created a new repo called [bower-bourbon](https://github.com/hmps/bourbon): +Executando o instalador, voce vai ter todo o respositório. Eu nao quero todo o repositorio, tudo o que eu quero de fato esta no diretorio `dist/`. Para resolver isso, outro dedenvovlero fez um fork do Bourbon e criou um repositorio chamado [bower-bourbon](https://github.com/hmps/bourbon): ``` $ bower install bower-bourbon From 2192500790d9f70686b43282ee2aed57730e892e Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 20:46:52 -0300 Subject: [PATCH 22/41] Update bower.md --- pt-br/bower.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pt-br/bower.md b/pt-br/bower.md index f251573..14c3e82 100644 --- a/pt-br/bower.md +++ b/pt-br/bower.md @@ -95,10 +95,12 @@ Executando o instalador, voce vai ter todo o respositório. Eu nao quero todo o $ bower install bower-bourbon ``` -Running this install you actually only get what is in the `dist/` dir. But are these forks reliable? Ohh open source, you are a wild one. +Executando essa instalcao voce na realizade somente vai pegar o que esta no diretório `dist/`. Mas são esse forks confiaveis. Ohhh open source, voce e um selvagem. **UPDATE:** It's been brought to my attention that using the Bower install of Bourbon pulls in it's 3.2 Beta and appears not to be fully functional. This section was not intended to say "bad Bourbon" but to simply illustrate that in some cases, using Bower, you will get more of the library then you really want. +**ATUALIZAÇÃO** + ## Bower registration Once you are ready for release, [register it with Bower](http://bower.io/#registering-packages). The criteria is pretty simple: From 7555da34594fcaa92384eb80c9ee6ae35ffe1b55 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 22:24:27 -0300 Subject: [PATCH 23/41] Revisado --- pt-br/bower-grunt-sass.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pt-br/bower-grunt-sass.md b/pt-br/bower-grunt-sass.md index 2c3f6df..10f946d 100644 --- a/pt-br/bower-grunt-sass.md +++ b/pt-br/bower-grunt-sass.md @@ -1,22 +1,22 @@ # Bower - Grunt - Sass -Now that we know the powers of Bower to easily manage our front-end development dependencies, what do we need to do to add a Bower package of Sass code to our project? +Agora que nos conhecemos o poder do Bower para gerenciar as dependências de desenvolvimento do nosso front-end, o que nós precisamos fazer para adicionar um pacote Bower de código Sass em nosso projeto? -## Bower install +## Bower install -First off, let's install a simple Bower package for illustration: +Em primeiro lugar, vamos instalar um pacote simples no Bower para demostrar: ``` $ bower install css-calc-mixin --save ``` -There, we now have the library of code in our project. +Aqui, nos agora temos uma biblioteca de código em nosso projeto. -## Update Gruntfile.js +## Atualizando Gruntfile.js -Next we want to update the `Gruntfile.js` so that we can easily include the library into our Sass files. Without this step, we would need to write fill paths in our Sass file to this and that's simply lame. +Em seguida, vamos atualizar o `Gruntfile.js` para que possamos facilmente incluir a bibliotecas em nossos arquivos Sass. Sem esse passo, seria preciso escrever preenchendo o caminho completo em nossos arquivo Sass. -In the Grunt-Sass API we have options and the one we need to use is `includePaths`. Here we can pass in a string that is the full path from root to the Bower package into an array. +Na API Grunt-Sass temos várias opções, e uma que precisamos usar é `includePaths`. Aqui podemos passar uma string que é cominho completo desde a raiz até o pacote Bower em um array. ```javascript module.exports = function(grunt) { @@ -50,15 +50,15 @@ module.exports = function(grunt) { }; ``` -## Update style.scss +## Atualizando o arquivo style.scss -To make use of this new Bower package library, we simply need to use a Sass convention to import the code. +Para fazer uso da nova biblioteca do pacote Bower, nós precisamos usar uma convenção Sass para importar o código. ```sass @import "css-calc-mixin"; ``` -To test that this is working, let's add a little bit of code that references the Bower library. +Para testar se isso está funcionando, vamos adicionar uma pouco de código que faz referência ao uma biblioteca Bower. ```sass .block { @@ -78,4 +78,4 @@ To test that this is working, let's add a little bit of code that references the } ``` -Back in the CLI, run `grunt` and we should see green lights all day long! +Volte ao CLI, execute `grunt` devemos ver luzes verdes todo o dia! From fa34ff677d3ebe8a3708eb0bc2fff1922c7d222c Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 23:10:13 -0300 Subject: [PATCH 24/41] Revisado --- pt-br/deploy-app.md | 64 +++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/pt-br/deploy-app.md b/pt-br/deploy-app.md index 856e67f..b84dae5 100644 --- a/pt-br/deploy-app.md +++ b/pt-br/deploy-app.md @@ -1,13 +1,12 @@ -# Deploy your first app +# Deploy do seu primeiro aplicativo -At this point, you should have an app that works locally on your computer. The following steps outline updates you need to make in order to deploy the codes. +Nesse momento, nós devemos ter um aplicativo que está funcionando localmente em seu computador. A seguintes etapas descreve o que você precisa fazer para fazer um *deploy* de código; +## Atualizando o package.json -## Update package.json +Nessa etapa, precisarmos adicionar alguns códigos no arquivo `package.json` de modo que podemos executar o aplicativo a partir de um servidor remoto. -In this step, we need to add some code to the `package.json` file so that we can run the app from a remote server. - -Right now, there is a good chance that the file will look like this: +Agora mesmo, há uma boa chance do arquivo estar assim: ``` { @@ -29,13 +28,13 @@ Right now, there is a good chance that the file will look like this: } ``` -At the end of the `dependencies": { ... }` object, you need to add a comma `,` so that we can add more code. First let's add the `main` keyword: +No final do objeto `dependencies": { ... }`, você precisa adicionar um virgula `,` para que possamos acionar mais código. Primeiro vamos adicionar a palavra-chave `main`. ``` "main": "app.js", ``` -Notice the trailing comma? This is because we are going to add more stuff. After that, add in the `engines` object and the specific engines we need to run this app: +Observe a virgula no final? Isso é porque vamos adicionar mais coisas. Depois disso, adicionamos o objeto `engines` que especificamos o que precisamos para executar o aplicativo. ``` "engines": { @@ -44,7 +43,7 @@ Notice the trailing comma? This is because we are going to add more stuff. After } ``` -You should have something that looks like the following: +Você deve ter algo parecido com isso: ``` { @@ -71,11 +70,11 @@ You should have something that looks like the following: } ``` -### Don't forget the Grunt + Bower +### Não se esqueça do Grunt + Bower -If at this time you do not have any of the Grunt packages or Bower in the `dependenciess` object, we need to get that in there. +Se nesse momento você não tem qualquer pacote Grunt ou Bower no objeto `dependenciess` precisamos pegar o que está lá. -You can either add them manually to the `package.json` file or dun: +Você pode adicionar cada um manualmente no arquivo `package.json` ou executar: ``` $ npm install --save grunt @@ -83,48 +82,45 @@ $ npm install --save grunt-sass $ npm install --save bower ``` -Something that you probably don't have is the ability for the deployed server to run the Grunt tasks. For this we need Grunt-CLI. +Algo que você provavelmente não tem é a permissão para o servidor executar tarefas Grunt. Para isso no precisamos do Grunt-CLI. ``` $ npm install --save grunt-cli ``` -Right about now, you should be looking pretty good. - -### Postinstall instructions +### Publicar instruções de instalação -When we deploy the codes to Heroku, we have to tell it to run some commands, basically install the Bower packages and run the Grunt tasks. To do this, we need to add the instructions within the `scripts` object of the `package.json` file. +Quando nos publicamos código no Heroku, temos que informar a ele para executar alguns comandos, basicamente instalar os pacotes Bower e executar tarefas Grunt. Para fazer isso, precisamos adicionar instruções dentro do objeto `scripts` e no arquivo `package.json`. -Directly under the `"start": "node ./bin/www"`, add: +Diretamente sob o `"start": "node ./bin/www"`, adicione: ``` "postinstall": "./node_modules/.bin/bower install && ./node_modules/.bin/grunt" ``` -There, now we have everything that Heroku needs to install the packages and run the scripts. +Agora temos tudo o que o Heroku precisa para instalar os pacotes e executar os scripts. -## Add the Procfile +## Adicionando o Procfile -This is a file that Heroku needs in order to start the app. +Esse é o arquivo que o Heroku precisar para iniciar a aplicação. ``` $ touch Procfile ``` -Add the following code: +Adicione o seguinte código: ``` web: npm start ``` -Heroku will use this to kick start the app. - +Heroku vai usar isso para iniciar a aplicação. -## Make this a Git repo +## Crie um repositório Git -It is important to make this a git repo BEFORE you create the Heroku server. **WAIT!** Before you go all crazy on the Git, there are some things we need to do. +É importante fazer um repositório Git ANTES de criar um servidor Heroku. **ESPERE!** Antes de todos ficarem loucos no Git, existem coisas que precisamos fazer. -You should have a `.gitignore` file in your repo at this point. open that up and make sure you are ignoring all the `node_modules`, all the `bower_components` and anything in the `/stylesheets/*.css` spectrum. +Você deve ter um arquivo `.gitignore` em seu repositório, abra e certifique-se que você está ignorando todo o `node_modules`, e todo o `bower_components` e algo no espectro `/stylesheets/*.css`. ``` node_modules @@ -132,30 +128,30 @@ public/stylesheets/*.css bower_components ``` -Great. Now you can `git init` your repo. +Bom. Agora você podem executar `git init` no seu repositório ``` $ git add . $ git commit -m "initial commit" ``` -It is not required at this time to make this a Github repo, but you may want to do this if you make this a real app. +Não é preciso criar nesse momento um repositório no GitHub, mas você podem querer fazer isso em uma aplicação real. -## Deploy the codes +## Deploy do código -This is pretty hard here. Make sure to follow the commands specifically: +Isso é bem difícil aqui. Certifique-se de seguir os seguintes comandos: ``` $ heroku create $ git push heroku master ``` -## Rejoice +## Alegre-se -If all is well, you should see a return like this: +Se tudo estiver correto, você deve ver um retorno como este: ``` http://.herokuapp.com/ deployed to Heroku ``` -Go to that URL and REJOICE!!!!! +Acesse a URL e veja. From d7706c3ef2d7ac1d41e872e515cc2babf38f408c Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 23:19:36 -0300 Subject: [PATCH 25/41] Revisado --- pt-br/demo/forms.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pt-br/demo/forms.md b/pt-br/demo/forms.md index 28b7be1..2ca67e3 100644 --- a/pt-br/demo/forms.md +++ b/pt-br/demo/forms.md @@ -1,19 +1,19 @@ # Forms -Create a new sass file +Cire um nova arquivo Sass ``` $ touch _forms.scss ``` -Create a new forms directory +Cire um novo diretório forms ``` $ mkdir forms $ midir forms/extends ``` -Add the following files: +Adicione os seguintes arquivos: ``` $ touch forms/_manifest.scss @@ -22,14 +22,14 @@ $ touch forms/extends/_display-block.scss $ touch forms/extends/_manifest.scss ``` -Add the following to `forms/extends/_manifest.scss`: +Adicione o seguinte no `forms/extends/_manifest.scss`: ``` @import "default-inputs"; @import "display-block"; ``` -Add the following to `forms/extends/_default-inputs.scss`: +Adicione o seguinte no `forms/extends/_default-inputs.scss`: ``` %default-inputs { @@ -41,7 +41,7 @@ Add the following to `forms/extends/_default-inputs.scss`: } ``` -Add the following to `forms/extends/_display-block.scss`: +Adicione o seguinte no `forms/extends/_display-block.scss`: ``` %display-block { @@ -50,13 +50,13 @@ Add the following to `forms/extends/_display-block.scss`: } ``` -Add the following to `forms/_manifest.scss`: +Adicione o seguinte no `forms/_manifest.scss`: ``` @import "extends/manifest"; ``` -Add the following to `_forms.scss`: +Adicione o seguinte no `_forms.scss`: ``` @import "forms/manifest"; From e3799fbc8acc4f6b57337ffed418edb13cafbb83 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 23:21:18 -0300 Subject: [PATCH 26/41] Revisado --- pt-br/demo/typo.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pt-br/demo/typo.md b/pt-br/demo/typo.md index 91fe4c6..c5abda8 100644 --- a/pt-br/demo/typo.md +++ b/pt-br/demo/typo.md @@ -1,13 +1,13 @@ -# Typography +# Tipografia -Create new sass file +Crie um novo arquivo sass ``` $ touch _typography.scss ``` -Add the following code: +Adicione no seguinte código: ``` html { @@ -30,7 +30,7 @@ h1, h2, h3, h4, h5, h6, [role=heading] { } ``` -## Add below the reset in application.scss +## Adicione o reset abaixo no application.scss ``` /////// Base From 96e96b542d57782f6a1ac47436deedf0253f59e1 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 23:22:03 -0300 Subject: [PATCH 27/41] Revisado --- pt-br/demo/forms.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pt-br/demo/forms.md b/pt-br/demo/forms.md index 2ca67e3..09c278a 100644 --- a/pt-br/demo/forms.md +++ b/pt-br/demo/forms.md @@ -1,6 +1,6 @@ -# Forms +# Formulário -Cire um nova arquivo Sass +Cire um novo arquivo Sass ``` $ touch _forms.scss From eedf7e3a7057abc702eca9ace4a9cd1c679ba539 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Mon, 23 Mar 2015 23:33:37 -0300 Subject: [PATCH 28/41] Revisado --- pt-br/demo/module.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pt-br/demo/module.md b/pt-br/demo/module.md index f4286c0..1115d4d 100644 --- a/pt-br/demo/module.md +++ b/pt-br/demo/module.md @@ -1,6 +1,6 @@ -# Create a module +# Criando um módulo -In the Sass directory, lets create a module directory with the necessary files inside: +No diretório Sass, vamos criar um diretório de módulos com os seguintes arquivos: ``` $ mkdir modules @@ -10,7 +10,7 @@ $ touch modules/message-container/_manifest.scss ``` -Add the following to the `_module-message-container.scss` file: +Adicione o seguinte no arquivo `_module-message-container.scss`: ``` .message-container { @@ -26,40 +26,40 @@ Add the following to the `_module-message-container.scss` file: } ``` -## Add to _manifest.scss +## Adicione em _manifest.scss ``` @import "module-message-container"; ``` -## Add to application.scss +## Adicione em application.scss ``` /////// Modules @import "modules/message-container/manifest"; ``` -## Central module manifest +## Manifesto do módulo central -In the `application.scss` we could enter each module on-by-one as described above, but we could also add a manifest at the root of `modules` that will import all the manifests contained within. +No arquivo `application.scss` poderíamos entrar em cada módulo um por um como descrito acima, mas poderíamos também adicionar o manifesto no diretório raiz dos módulos que ira importar outros manifestos. -So in the `application.scss` we do the following: +Então no arquivo `application.scss` vamos fazer o seguinte: ``` /////// Modules @import "modules/manifest"; ``` -Then in `modules/manifest.scss` we do this: +Então no `modules/manifest.scss` vamos fazer isso: ``` /////// Sub-Modules @import "message-container/manifest"; ``` -This helps keep things easier to manage as the we never need to update the `application.scss` file and at the root of the modules directory, where we are working, we just need to add a new listing there. Everything is imported and everything just works. +Isso ajuda a manter as coisas mais fáceis para gerenciar, já que nunca é necessário atualizar o arquivo `application.scss` e na raiz do diretório de módulos, onde vamos trabalhar, apenas precisamos adicionar uma nova lista lá. Tudo é importado e tudo funciona. -Our folder structure would look like the following: +Nossa estrutura de pastas seria parecida com seguinte: ``` |- application.scss From a66d9f998082186cdeae6087a951a763a9aff147 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 08:39:34 -0300 Subject: [PATCH 29/41] Revisado --- pt-br/demo/README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pt-br/demo/README.md b/pt-br/demo/README.md index a3c255b..03245d1 100644 --- a/pt-br/demo/README.md +++ b/pt-br/demo/README.md @@ -1,9 +1,8 @@ -# Build a message form: +# Criando um formulário de mensagens: -### step-by-step directions +### Passo a passo -From 0 - 60, build a contact widget From 0 - 60, build a contact widget. - -The following demo is a re-do of a popular UI/UX pattern of revealing the form label as the user enters data into the form. +O seguinte demo é um popular padrão UI/UX de com entrada de dados no formulário. ![image](http://i.imgur.com/EQzJpuh.png) + From c12dae665ab2e8ac8364d1ebdf70bbf05426e278 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 08:40:47 -0300 Subject: [PATCH 30/41] Revisado --- pt-br/demo/vc.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pt-br/demo/vc.md b/pt-br/demo/vc.md index 8a5b4aa..38d4fdb 100644 --- a/pt-br/demo/vc.md +++ b/pt-br/demo/vc.md @@ -1,6 +1,6 @@ -# Version control +# Controle de versão -Add `.gitignore` file and add the following: +Adicione no arquivo `.gitignore` o seguinte: ``` # OS generated files @@ -24,7 +24,7 @@ node_modules/ bower_components ``` -## Add in version control +## Adiconado as alterações ``` $ git add --all From 89e0ff507e59e18c16ad40bd175bc6bc56c4b27e Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 08:43:20 -0300 Subject: [PATCH 31/41] Revisado --- pt-br/demo/layout.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pt-br/demo/layout.md b/pt-br/demo/layout.md index 1618d10..ee064e4 100644 --- a/pt-br/demo/layout.md +++ b/pt-br/demo/layout.md @@ -1,15 +1,16 @@ -# Update the layout +# Atualizando o layout -Update `layout.jade` to use `application.css` +Atualize o arquivo `layout.jade` para usar o `application.css` ``` link(rel='stylesheet', href='/stylesheets/application.css') ``` -## Add in Live Reload +## Adicionando o LiveReload ``` script(src="//localhost:35729/livereload.js") ``` -Refresh the browser and then begin making small edited in the Sass and Jade files to make sure that Live Reload is working. +Atualize o browser e em seguida, faça pequenas modificações nos arquivos Sass e Jade para certificar-se que o Livereload está funcionando. + From 0644db348ab7f7141d544a17449318b99d96a1f7 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 08:47:39 -0300 Subject: [PATCH 32/41] Revisado --- pt-br/demo/view.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pt-br/demo/view.md b/pt-br/demo/view.md index 5024fe3..a3f01b1 100644 --- a/pt-br/demo/view.md +++ b/pt-br/demo/view.md @@ -1,6 +1,6 @@ -# Build the view +# Criando a view -Starting with the layout, get more stuff in there to make this work correctly +Começe com o layout, coloque o código a seguir na view. ``` meta(charset='utf-8') @@ -9,13 +9,13 @@ meta(name='description', content='#{description}') meta(name='viewport', content='width=device-width, initial-scale=1.0, minimum-scale=0.5 maximum-scale=1.0 minimal-ui') ``` -Update the `index.js` file in `./routes` +Atualize o arquivo `index.js` em `./routes` ``` res.render('index', { title: 'Contact me', description: 'This is a new demo' }); ``` -Open `./views/index.jade` and add the following: +Abra o arquivo `./views/index.jade` e adicione o seguinte: ``` section.message-container From 094d1b4040994382a2a30c59db75f228a29cb9b2 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 08:49:24 -0300 Subject: [PATCH 33/41] Revisado --- pt-br/demo/config.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pt-br/demo/config.md b/pt-br/demo/config.md index 30749b1..946df7d 100644 --- a/pt-br/demo/config.md +++ b/pt-br/demo/config.md @@ -1,12 +1,12 @@ -# Build the UI config file +# Crie o arquivo de configuração da UI -Create the file +Crie o seguinte arquivo: ``` $ touch _config.scss ``` -Add the following code: +Adicione o código a seguir: ``` /////// Typography configuration @@ -101,9 +101,7 @@ $selection-text-color: $primary-text; $trans: .333s ease; ``` - - -Add to the `application.scss` file +Adicione o seguint trecho no arquivo `application.scss`: ``` /////// App Config - this is where most of your magic will happen From f98a2f915577f178cf78460a824b11e4a2814cf9 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 08:51:02 -0300 Subject: [PATCH 34/41] Revisado --- pt-br/demo/reset.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pt-br/demo/reset.md b/pt-br/demo/reset.md index 53529ed..57335f3 100644 --- a/pt-br/demo/reset.md +++ b/pt-br/demo/reset.md @@ -1,12 +1,12 @@ -# Add Reset +# Incluindo o Reset -Add the file +Crie o seguinte arquivo: ``` $ touch _reset.scss ``` -Add to the `application.scss` +Adicione referência a ale no `application.scss` ``` /////// Standard CSS reset stuff here @@ -14,7 +14,7 @@ Add to the `application.scss` @import "reset"; ``` -Add the following code: +Inclua o seguinte código: ``` // * Let's default this puppy out From bf0cfd88d820fee9dd4907a74e1732eb839bebf5 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 08:52:00 -0300 Subject: [PATCH 35/41] Revisado --- pt-br/demo/global-sass.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pt-br/demo/global-sass.md b/pt-br/demo/global-sass.md index f42f258..582f225 100644 --- a/pt-br/demo/global-sass.md +++ b/pt-br/demo/global-sass.md @@ -1,4 +1,4 @@ -# Start with the global layout +# Começe com um layout global ``` $ mkdir layouts @@ -6,7 +6,7 @@ $ touch layouts/_global.scss $ touch layouts/_manifest ``` -## Add to _global.scss +## Adicione o seguinte no _global.scss ``` body { @@ -14,7 +14,7 @@ body { } ``` -## Add to application.scss +## Inclua a referência no application.scss ``` /////// Layouts From ff73e8d8d2603b9c823ed57f831a26672abc551f Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 09:53:07 -0300 Subject: [PATCH 36/41] Update bower.md --- pt-br/bower.md | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/pt-br/bower.md b/pt-br/bower.md index 14c3e82..74b5b6e 100644 --- a/pt-br/bower.md +++ b/pt-br/bower.md @@ -97,52 +97,52 @@ $ bower install bower-bourbon Executando essa instalcao voce na realizade somente vai pegar o que esta no diretório `dist/`. Mas são esse forks confiaveis. Ohhh open source, voce e um selvagem. -**UPDATE:** It's been brought to my attention that using the Bower install of Bourbon pulls in it's 3.2 Beta and appears not to be fully functional. This section was not intended to say "bad Bourbon" but to simply illustrate that in some cases, using Bower, you will get more of the library then you really want. +**ATUALIZAÇÃO** Isso tem tido minha atenção que a utilização do Bower para instalar o Bourbon beta 3.2 parece não ser totalmente funcional. Nsse seçãonão vamos dizer "bad Bourbon", mas para demonstrar que em alguns casos, no uso do Bower, vai ter muitas outras bibliotecas. -**ATUALIZAÇÃO** +## Registrso no Bower -## Bower registration +Quando tudo esctiver pronto para liberação [registrando com o Bower](http://bower.io/#registering-packages). Esse critério é bastante simples: -Once you are ready for release, [register it with Bower](http://bower.io/#registering-packages). The criteria is pretty simple: -1. Make sure your repo has the `bower.json` file -1. You must use [semantic versioning](http://semver.org/) -1. Your package must be available at a Git endpoint, e.g. Github +1. Certifiquye-se que seu repositório tem o arquivo `bower.json`. +2. Você deve usar [vesionamento semantico](http://semver.org/) +3. Seu pacote tem que estar disponivel em um Git *endpoint*, ex: GitHub -Once you have all of that, run this command with your new package name and the Git endpoint: +Depois disso tudo, execute o comando com seu novo pacote no *endpoint* Git: ``` $ bower register ``` -Registration is painless. Once you get the green light on everything, give it a test and do a `$ bower install ` +Registrar é facil. Depois de conseguire a linha verde em tudo, para testar execute`$ bower install `. +## Bower e Sass -## Bower and Sass +As bibliotecas Bower e Sass são incriveis juntas. Há pequenos repositorios no Github. Onde no Ruby Gem/Compass Extension a complexidade de muito *overhead*. Voce precisar fazer um fork, clone ou deus me livre, copiar e colar código no seu projeto. O que? Nos nao somos civilizados? -Bower and Sass libraries are an amazing pairing. There are small repos all over Github where the complexity of making them a Ruby Gem/Compass Extension was just to much overhead. You are required to either fork, clone, or god forbid, copy and paste code into your project. What? Are we not civilized? +No mundo Ruby, desenovledores estão acostumados a ter Gems e Compass Extensions instaladas em locais seguros=, *localização não conhecida*. Uma nova Gem esta adiconado no GemFile e simplismente referencia a bibliteca no projeto. -In the Ruby world, developers are used to having Gems and Compass Extensions installed in a safe, *untouchable location. The new Gem is added to the Gemfile and we simply reference the library in the project. +##### Localização não conhecida e frustrante para muitos dedensevovledores. Bibliotecas Sass importantes que eles nao tem controle sobre ela, ou são incapas de comidifa-las. -##### *Untouchable is a frustration with many developers. Importing Sass libraries that they did not have control over, or were unable to modify, that actually output CSS can be very frustrating. +No novo mundo JavaScript, as biblitoecas estão inclidas no arquivo de manifesto `bower.json` ou simplismente instaldas, mas em vez de ser um local ddesconhecido, está localizada do diret´prio raiz do projeto. Isso mantes as coisas simples na perpectiva de instlacao , mas significa que nosso importacao Sass esta em diretórios relativos. Não é grande coisas, mas diferente do que estamos acostumados. -In the new JavaScipt world, the library is added to the `bower.json` manifest or simply installed, but instead of it being in a obscured location, it is installed into the root of the project. This keeps things simple from an install perspective, but this means our Sass imports are in relative directories. Not a big deal, but different from what we are used to. + -So, what does a Sass Bower package look like? Let's take a simple project I created called, [sass-icon-fonts](https://github.com/anotheruiguy/sass-icon-fonts). This package is simply a couple of mixins, one that allows the developer to easily create a `@font-face` set of rules and another is the ability to quickly generate a series of icon-font rules. The mini library comes with instructions and a very simple API. +Então, como o pacote Bower se parece? Vamos ver um simples que eu criei chamando [sass-icon-fonts](https://github.com/anotheruiguy/sass-icon-fonts). Esse pacote é uma simples par de *mixins*, que permite a deveolvedores criar um `@font-face` e definir regras de anotações, outra capacidadoe de gerar uma serie de regras para icones e fontes. Esse mini biblioteca tem instruções e um API muito simples. -Now, let's imagine you are building a Node project and you want to use this package as a resource, run: +Agora, vamos imagnar que voce estar criando um porjeto Node e quer usar esse pacote com recurso , execute: ``` $ bower install sass-icon-fonts --save ``` -This installs the package and adds the dependency to your `bower.json` file. Located at the root level of the project is your `sass/` directory, within that is your `application.scss` file. At your root is the `bower_components` directory. For your `application.scss` file to access the new library, you will need to import a relative path to the library, as illustrated in the following: +Instale o pacote e adicione a dependencia em seu arquivo `bower.json`. Localize no diretório raiz do seu projeto o diretorio `sass/`, dentro dele tem o arquivo `application.scss`, na raiz tem diretorio `bower_components`. No seu arquivo `application.scss` para acessar a nova bilbioteca, nos vamos precisar improtar o comanho da biblitoeca , como mostrado a seguir: ``` @import "../bower_components/sass-icon-fonts/_ico-font.scss"; ``` -While the previous example works, while I found this acceptable, I didn't really find it awesome. Digging more into the Grint-Sass API I discovered the [includePaths](https://github.com/sindresorhus/grunt-sass#includepaths) function. This allows you to set an import path to include. +Embora o exemplo anterior funcione, eu achei isso aceitavel, eu nao nao acho incrivel. Procurar mais na API Grint-Sass eu decobri a função [includePaths](https://github.com/sindresorhus/grunt-sass#includepaths). Ela permite a voce definir um caminha de importação. ``` options: { @@ -152,16 +152,17 @@ options: { } ``` -Now that you have this in your Grunt file, you can simply reference the library's main manifest file with a simply Sass import, like so: +Agora que temos isso em nosso arquivo Grunt, vamos poder referenciar as biblitoecas no aquivo de manifesto principla simplismente importanoo o Sass, assim: ``` @import "bourbon"; ``` -## Bower in your npm -One of the things that I find slightly annoying about using Bower is that I have to run separate commands when initialing a new project. I already have to use npm, can't I just bind these things together? +## Bower em seu npm -Yes, yes you can. In your `package.json` file, simply extend the `scripts` object and pass in the the `bower install` command. This is why I really LOVE this stuff! +Uma das coisas que eu acho iritante sobre o uso do Bower é que eu tenho que executar comandos seperados quando inicio um novo projeto. Eu já tem usado o npm nao posso simplismente ligar essas coisas junto? + +Sim, voce pode. Em seu proejto no aquivo `package.json`, extenda o objeto `scripts` e passe o comando `bower install`. Isso é por isso qu eu relamnte AMO estas cpoisas! ``` "scripts": { @@ -169,10 +170,10 @@ Yes, yes you can. In your `package.json` file, simply extend the `scripts` objec } ``` -Now, when you run `npm install` this will not only install all your Node packages, but install your Bower packages as well. NICE! - +Agora quando voce executar `npm install` isso vai nao somente instalar os pacotes Node, mas tambem intalar o pacotes Bower . LEGAL. ## Bower behind the firewall + If you find yourself behind a firewall that does not allow for the `git://[repo]` protocol, there is a fix for this. First, I suggest maually doing a clone using the `https://[repo]` protocol to make sure that this is really the issue. If the `https://[repo]` protocol works, then you may want to make the following update: ``` From 2bd0b809e40dd3ac34a770a09ae097b504331b1b Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 10:18:53 -0300 Subject: [PATCH 37/41] Revisado --- pt-br/bower.md | 106 ++++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 55 deletions(-) diff --git a/pt-br/bower.md b/pt-br/bower.md index 74b5b6e..a633fe6 100644 --- a/pt-br/bower.md +++ b/pt-br/bower.md @@ -1,28 +1,23 @@ # Bower e todas as coisas -A menos que voce vide em um burraco, você está ciente da revolução JavaSrcipt que esta ao nosso redor. Muito de nossos incriveis conceitos eu descobri no ecosistema do Rails e agora estão em explosão no espaço JavaScript, permitndo distribuições impressionantes. Os tres pilares são: Yeoman, Bower and Grunt. +A menos que você vive em um buraco, você está ciente da revolução JavaSrcipt que está ao nosso redor. Muito desses incríveis conceitos eu descobri no ecossistema do Rails e agora estão em explosão no espaço JavaScript, permitindo distribuições impressionantes. Os três pilares são: Yeoman, Bower and Grunt. -O problema que precisamos resolver é: qual a melhor maneira de obter codigos de bibliotecas no GitHub e torna-lo acessivel para usuarios sem ter que clonar um projeto? Porque, isso é muito ruim, certo? +O problema que precisamos resolver é: qual a melhor maneira de obter códigos de bibliotecas no GitHub e torna-lo acessível para usuários sem ter que clonar um projeto? Porque, isso é muito ruim, certo? ## Yeoman generators - -Initially I came across [generator-sass-boilerplate](https://github.com/srsgores/generator-sass-boilerplate), a 'Yeoman generator for quickly scaffolding out Sass styles'. This is a very interesting approach for creating a complex library and allowing the user to customize the install. But for a simpler library of code, maybe just some functions and mixins, this is way to much overhead. - -Inicialmente eu venho sobre [generator-sass-boilerplate](https://github.com/srsgores/generator-sass-boilerplate), um 'Yeoman gerador rapido de scaffolding de etilos Sass'. Isso é uma abordagem muito interssante para criar bibliotecs complexas e permitir a usuario customizar a instalação. Mas para uma simples biblioteca de código, pode ser apenas mais uma função e mixins, isso é um *overhead*. +Inicialmente eu venho sobre [generator-sass-boilerplate](https://github.com/srsgores/generator-sass-boilerplate), o 'Yeoman generators e um scaffolding de etilos Sass'. Isso é uma abordagem muito interessante para criar bibliotecas complexas e permitir a usuário customizar a instalação. Mas para uma simples biblioteca de código, pode ser apenas mais uma função ou mixins, e isso é um *overhead*. ## Bower é a resposta -Avançando agora. E recentemente me deparei com novas mensagens que quebrar e é o que o Bower faz de melhor. E essa é a a resposta" - -Para aqueles que não conhecen, Bower e uma solução extremante simpesl para gerenciamente de pacotes front end. +Avançando agora. E recentemente me deparei com novas mensagens que quebrar e é o que o Bower faz de melhor. E essa é a resposta" -> Ele fornece uma solução generica para o problema de gerenciamento de pacoe front-end, enquanto expooes o model de depedncia atrave de uma API que podem ser consumida atraves de muitas opções de build. +Para aqueles que não conhecem, o Bower é uma solução extremante simples para gerenciamento de pacotes front end. -The beauty of Bower is held within it's simplicity. Bower has a registry, but it's not 100% necessary. The common command is `bower install ` where `` can refer to a [large number of options](http://bower.io/#using-a-different-name-and-a-specific-version-of-a-package), thus making it dirt simple to just share some code. NICE! +> Ele fornece uma solução genérica para o problema de gerenciamento de pacotes front-end, enquanto expões o modelo de dependência através de uma API que podem ser consumida através de muitas opções de build. -A beleza do Bower e mantido dentro de sua simplisidade . Bower tem uma registro , mas não e 100% necessário. O comando comum é `bower install ` onde `` pode ser refereir a um [grande numero de opções](http://bower.io/#using-a-different-name-and-a-specific-version-of-a-package), tornando assim uma poeira simples para compartilhar código. LEGAL. +A beleza do Bower e mantido dentro de sua simplicidade. Bower tem um registro, mas não e 100% necessário. O comando comum é `bower install ` onde `` pode ser referir a um [grande número de opções](http://bower.io/#using-a-different-name-and-a-specific-version-of-a-package), tornando assim uma poeira simples para compartilhar código. LEGAL. -Cumprindo com o tema `poeira simples`, voce pode usar Bower para puxar um repositório dentro de seu projeto sem fazer um clone dele. Mesmo se ele nao tem um arquivo `bower.json`. +Cumprindo com o tema `poeira simples`, você pode usar Bower para puxar um repositório dentro de seu projeto sem fazer um clone dele. Mesmo se ele não tem um arquivo `bower.json`. Por exemplo Stipe, uma biblioteca Compass Extension que eu escrevi, é não e um cliente Bower. @@ -30,7 +25,7 @@ Por exemplo Stipe, uma biblioteca Compass Extension que eu escrevi, é não e um $ bower install git://github.com/Toadstool-Stipe/stipe.git ``` -Execute esse comando em qualauer pasta e voce vai puxar todo o respositorio sem o historico do GitHub. Isso por si só é interssante. +Execute esse comando em qualquer pasta e você vai puxar todo o repositório sem o histórico do GitHub. Isso por si só é interessante. ## Iniciando com o Bower @@ -42,35 +37,35 @@ $ npm install -g bower ### Instalando pacotes Bower -Eu não vou entrar em detalhes complexos aqui, mas 99% do tempo voce simplismente vai executar: +Eu não vou entrar em detalhes complexos aqui, mas 99% do tempo você simplesmente vai executar: ``` $ bower install ``` -Como dito acima, há alternaticas de instalação, mas solução principal eé ter um arquivo `bower.json` em seu repositório e registra ele sem seu Bower. +Como dito acima, há alternativas de instalação, mas solução principal é ter um arquivo `bower.json` em seu repositório e registra ele sem seu Bower. -Se voce tem um arquivo `bower.json` em seu projeto, explicado na proxima seção, voce pode adicionar a *flag* `--save` com a instalação e isso vai adicionar o biblioteca com a dependenca em seu projeto. +Se você tem um arquivo `bower.json` em seu projeto, explicado na próxima seção, você pode adicionar a *flag* `--save` com a instalação e isso vai adicionar o biblioteca com a dependência em seu projeto. -Quando você distribuir o projeto, um usuário que clona somente tem que executar `$ bower install` e isso vai puxar todas os recursos extenos. +Quando você distribuir o projeto, um usuário que clona somente tem que executar `$ bower install` e isso vai puxar todas os recursos extenso. ## Commitar ou não commitar? -Nesse novo sustema de criação e distribuição de recursos levantamos uma interssante questão, voce liberar os seu pacotes gerenciado pelo Bower ou não? No mundo Ruby, Gens na verdade não são parte do projeto, mas depdendencias do projetos nunca são liberads para o sistemaa de controle de versão. Isso é novo no mundo JavaScripot, depdendencia de pacotes Node e Bower são refenreciadas atraves de um manifesto, muito parecido com GemFile no Ruby, mas são, isntalar na verade, detro do diretório raiz do projeto. +Nesse novo sistema de criação e distribuição de recursos levantamos uma interessante questão, você liberar os seu pacotes gerenciados pelo Bower ou não? No mundo Ruby, Gens na verdade não são parte do projeto, mas dependências do projeto nunca são liberados para o sistema de controle de versão. Isso é novo no mundo JavaScripot, dependência de pacotes Node e Bower são referenciadas através de um manifesto, muito parecido com GemFile no Ruby, mas são, instalar na verdade, dentro do diretório raiz do projeto. -Há [toda uma discussão](http://addyosmani.com/blog/checking-in-front-end-dependencies/) desse tópico. Eu vejo dessa maneira, quando voce isntala uma biblitoeca Bower, voce esta partindo com uma depdencia ou voce esta fazendo modificações? +Há [toda uma discussão](http://addyosmani.com/blog/checking-in-front-end-dependencies/) desse tópico. Eu vejo dessa maneira, quando você instala uma biblioteca Bower, você está partindo com uma depenica ou você está fazendo modificações? -O escolha é sua, os argumentos são fortes para ambos os lados. Em uma situação em que voce esta relamente em uma fork de código inslando, então a resposta é muito clara, isso deve ser liberado com o porjeto ou voce precisar fazer um fork da dependencia. +A escolha é sua, os argumentos são fortes para ambos os lados. Em uma situação em que você está realmente em uma fork de código insolando, então a resposta é muito clara, isso deve ser liberado com o projeto ou você precisar fazer um fork da dependência. ## Gerando um novo pacote Bower -Criando um novo pacote Bower é novamente , muito simples +Criando um novo pacote Bower é novamente, muito simples ``` $ bower init ``` -O CLI, vai solicitar uma serie de perguntas, a respostas de que deve ser gravadas dentro do arquivo `bower.json` que vai ser criado. Coloque o que voce quer, mas tudo o que voce realemten precisa é: +O CLI, vai solicitar uma série de perguntas, a respostas de que deve ser gravada dentro do arquivo `bower.json` que vai ser criado. Coloque o que você quer, mas tudo o que você realmente precisa é: ``` { @@ -79,70 +74,70 @@ O CLI, vai solicitar uma serie de perguntas, a respostas de que deve ser gravada } ``` -E o que isso e de fato. Voceacabou de criar seu primeira biblioteca de recursos. Agora vamos fazer o build! O Build dos seu recursos, documentaçaoi , etc ... Seu pacote vai estar pronto em pouco tempo. +E o que isso e de fato. Você acabou de criar sua primeira biblioteca de recursos. Agora vamos fazer o build! O Build dos seu recursos, documentação , etc ... Seu pacote vai estar pronto em pouco tempo. -Para testar é fácil, lembra do truque `$ bower install git://github.com/ ...`? Execute isso em um novo respositprio e veja como ele se instala. +Para testar é fácil, lembra do truque `$ bower install git://github.com/ ...`? Execute isso em um novo repositório e veja como ele se instala. -Seja cuidados nessa etapa e com o que o pacote contem. Em minha opinião, eu vejo o Bower como uma boa maneira de para distribuir pequenas e especificas bibliotecas de código. Quando eu puxo o seu pacote Bower, eu de fato quero toda a documetnação, teste, demontração, recustros, etc ... Com um exmeplo, eu vou pegar o Bourbon aqui, execute: +Seja cuidado nessa etapa e com o que os pacotes contem. Em minha opinião, eu vejo o Bower como uma boa maneira de para distribuir pequenas e especificas bibliotecas de código. Quando eu puxo o seu pacote Bower, eu de fato quero toda a documentação, teste, demonstração, recostos, etc ... Com um exemplo, eu vou pegar o Bourbon aqui, execute: ``` $ bower install bourbon ``` -Executando o instalador, voce vai ter todo o respositório. Eu nao quero todo o repositorio, tudo o que eu quero de fato esta no diretorio `dist/`. Para resolver isso, outro dedenvovlero fez um fork do Bourbon e criou um repositorio chamado [bower-bourbon](https://github.com/hmps/bourbon): +Executando o instalador, você vai ter todo o repositório. Eu não quero todo o repositório, tudo o que eu quero de fato está no diretório `dist/`. Para resolver isso, outro desenvolver fez um fork do Bourbon e criou um repositório chamado [bower-bourbon](https://github.com/hmps/bourbon): ``` $ bower install bower-bourbon ``` -Executando essa instalcao voce na realizade somente vai pegar o que esta no diretório `dist/`. Mas são esse forks confiaveis. Ohhh open source, voce e um selvagem. +Executando essa instalação você na realidade somente vai pegar o que está no diretório `dist/`. Mas são esse forks confiáveis. Ohhh open Soure, você e um selvagem. -**ATUALIZAÇÃO** Isso tem tido minha atenção que a utilização do Bower para instalar o Bourbon beta 3.2 parece não ser totalmente funcional. Nsse seçãonão vamos dizer "bad Bourbon", mas para demonstrar que em alguns casos, no uso do Bower, vai ter muitas outras bibliotecas. +**ATUALIZAÇÃO** Isso tem tido minha atenção que a utilização do Bower para instalar o Bourbon beta 3.2 parece não ser totalmente funcional. Nesse seção não vamos dizer "bad Bourbon", mas para demonstrar que em alguns casos, no uso do Bower, vai ter muitas outras bibliotecas. -## Registrso no Bower +## Registros no Bower -Quando tudo esctiver pronto para liberação [registrando com o Bower](http://bower.io/#registering-packages). Esse critério é bastante simples: +Quando tudo estiver pronto para liberação [registrando com o Bower](http://bower.io/#registering-packages). Esse critério é bastante simples: -1. Certifiquye-se que seu repositório tem o arquivo `bower.json`. -2. Você deve usar [vesionamento semantico](http://semver.org/) -3. Seu pacote tem que estar disponivel em um Git *endpoint*, ex: GitHub +1. Certifique-se que seu repositório tem o arquivo `bower.json`. +2. Você deve usar [visionamento semântico](http://semver.org/) +3. Seu pacote tem que estar disponível em um Git *endpoint*, ex: GitHub -Depois disso tudo, execute o comando com seu novo pacote no *endpoint* Git: +Depois disso tudo, execute o comando com seu novo pacote no *endpoint* Git: ``` $ bower register ``` -Registrar é facil. Depois de conseguire a linha verde em tudo, para testar execute`$ bower install `. +Registrar é fácil. Depois de conseguir a linha verde em tudo, para testar execute`$ bower install `. ## Bower e Sass -As bibliotecas Bower e Sass são incriveis juntas. Há pequenos repositorios no Github. Onde no Ruby Gem/Compass Extension a complexidade de muito *overhead*. Voce precisar fazer um fork, clone ou deus me livre, copiar e colar código no seu projeto. O que? Nos nao somos civilizados? +As bibliotecas Bower e Sass são incríveis juntas. Há pequenos repositórios no Github. Onde no Ruby Gem/Compass Extension é complexo e com muito *overhead*. Você precisar fazer um fork, clone ou deus me livre, copiar e colar código no seu projeto. O que? Nos não somos civilizados? -No mundo Ruby, desenovledores estão acostumados a ter Gems e Compass Extensions instaladas em locais seguros=, *localização não conhecida*. Uma nova Gem esta adiconado no GemFile e simplismente referencia a bibliteca no projeto. +No mundo Ruby, desenvolvedores estão acostumados a ter Gems e Compass Extensions instaladas em locais seguros, localização não conhecida. Uma nova Gem esta adicionado no GemFile e simplesmente referência a biblioteca no projeto. -##### Localização não conhecida e frustrante para muitos dedensevovledores. Bibliotecas Sass importantes que eles nao tem controle sobre ela, ou são incapas de comidifa-las. +##### Localização não conhecida e frustrante para muitos desenvolvedores. Bibliotecas Sass importantes que eles não têm controle sobre ela, ou são incapaz de modificá-las. -No novo mundo JavaScript, as biblitoecas estão inclidas no arquivo de manifesto `bower.json` ou simplismente instaldas, mas em vez de ser um local ddesconhecido, está localizada do diret´prio raiz do projeto. Isso mantes as coisas simples na perpectiva de instlacao , mas significa que nosso importacao Sass esta em diretórios relativos. Não é grande coisas, mas diferente do que estamos acostumados. +No novo mundo JavaScript, as bibliotecas estão incluídas no arquivo de manifesto `bower.json` ou simplesmente instaladas, mas em vez de ser um local desconhecido, está localizada do diretório raiz do projeto. Isso mantes as coisas simples na perspectiva de instalação , mas significa que nosso importação Sass está em diretórios relativos. Não é grande coisas, mas diferente do que estamos acostumados. -Então, como o pacote Bower se parece? Vamos ver um simples que eu criei chamando [sass-icon-fonts](https://github.com/anotheruiguy/sass-icon-fonts). Esse pacote é uma simples par de *mixins*, que permite a deveolvedores criar um `@font-face` e definir regras de anotações, outra capacidadoe de gerar uma serie de regras para icones e fontes. Esse mini biblioteca tem instruções e um API muito simples. +Então, como o pacote Bower se parece? Vamos ver um simples que eu criei chamando [sass-icon-fonts](https://github.com/anotheruiguy/sass-icon-fonts). Esse pacote é um simples par de *mixins*, que permite a revolvedores criar um `@font-face` e definir regras de anotações, outra capacidade de gerar uma série de regras para ícones e fontes. Esse mini biblioteca tem instruções e um API muito simples. -Agora, vamos imagnar que voce estar criando um porjeto Node e quer usar esse pacote com recurso , execute: +Agora, vamos imaginar que você estar criando um projeto Node e quer usar esse pacote com recurso, execute: ``` $ bower install sass-icon-fonts --save ``` -Instale o pacote e adicione a dependencia em seu arquivo `bower.json`. Localize no diretório raiz do seu projeto o diretorio `sass/`, dentro dele tem o arquivo `application.scss`, na raiz tem diretorio `bower_components`. No seu arquivo `application.scss` para acessar a nova bilbioteca, nos vamos precisar improtar o comanho da biblitoeca , como mostrado a seguir: +Instale o pacote e adicione a dependência em seu arquivo `bower.json`. Localize no diretório raiz do seu projeto o diretório `sass/`, dentro dele tem o arquivo `application.scss`, na raiz tem diretório `bower_components`. No seu arquivo `application.scss` para acessar a nova biblioteca, nós vamos precisar importar o caminho da biblioteca, como mostrado a seguir: ``` @import "../bower_components/sass-icon-fonts/_ico-font.scss"; ``` -Embora o exemplo anterior funcione, eu achei isso aceitavel, eu nao nao acho incrivel. Procurar mais na API Grint-Sass eu decobri a função [includePaths](https://github.com/sindresorhus/grunt-sass#includepaths). Ela permite a voce definir um caminha de importação. +Embora o exemplo anterior funcione, eu achei isso aceitável, eu não acho incrível. Procurar mais na API Grint-Sass eu descobri a função [includePaths](https://github.com/sindresorhus/grunt-sass#includepaths). Ela permite a você definir um caminho de importação. ``` options: { @@ -152,7 +147,7 @@ options: { } ``` -Agora que temos isso em nosso arquivo Grunt, vamos poder referenciar as biblitoecas no aquivo de manifesto principla simplismente importanoo o Sass, assim: +Agora que temos isso em nosso arquivo Grunt, vamos poder referenciar as bibliotecas no arquivo de manifesto principal simplesmente importando o Sass, assim: ``` @import "bourbon"; @@ -160,9 +155,9 @@ Agora que temos isso em nosso arquivo Grunt, vamos poder referenciar as biblitoe ## Bower em seu npm -Uma das coisas que eu acho iritante sobre o uso do Bower é que eu tenho que executar comandos seperados quando inicio um novo projeto. Eu já tem usado o npm nao posso simplismente ligar essas coisas junto? +Uma das coisas que eu acho irritante sobre o uso do Bower é que eu tenho que executar comandos esperados quando inicio um novo projeto. Eu já tenho usado o npm não posso simplesmente ligar essas coisas junto? -Sim, voce pode. Em seu proejto no aquivo `package.json`, extenda o objeto `scripts` e passe o comando `bower install`. Isso é por isso qu eu relamnte AMO estas cpoisas! +Sim, você pode. Em seu projeto no arquivo `package.json`, extensa o objeto `scripts` e passe o comando `bower install`. Isso é por isso que eu realmente AMO estas coisas! ``` "scripts": { @@ -170,20 +165,21 @@ Sim, voce pode. Em seu proejto no aquivo `package.json`, extenda o objeto `scrip } ``` -Agora quando voce executar `npm install` isso vai nao somente instalar os pacotes Node, mas tambem intalar o pacotes Bower . LEGAL. +Agora quando você executar `npm install` isso não vai somente instalar os pacotes Node, mas também instalar o pacotes Bower . LEGAL. -## Bower behind the firewall +## Bower por traz dofirewall -If you find yourself behind a firewall that does not allow for the `git://[repo]` protocol, there is a fix for this. First, I suggest maually doing a clone using the `https://[repo]` protocol to make sure that this is really the issue. If the `https://[repo]` protocol works, then you may want to make the following update: + + +Se você está atrás de um firewall que não permite acessar o protocolo `git://[repo]`, existe uma solução para isso. Primeiro eu recomento faze o clone usando o protocolo `https://[repo]`, certifique-se que esse é realmente o problema. Se o protocolo `https://[repo]` funciona, então você pode querer fazer a seguinte atualização: ``` git config --global url."https://" ``` -Thank you [Stack Overflow](http://stackoverflow.com/questions/15669091/bower-install-using-only-https)! - -## Summary +Obrigado [Stack Overflow](http://stackoverflow.com/questions/15669091/bower-install-using-only-https)! -When I say I want to Bower all the things, I mean just that. Now understanding Bower, I am looking at simple package management in a whole new light and I hope that you do to. +## Sumário -No more forking, cloning, deleting `.git/` directories just to include a library into a project. I am looking at creating Sass modules in a whole new light as well. Not that Compass extensions were difficult, but Bower frees me of multiple dependencies. Something that has been a real issue on many projects. +Quando digo eu quero o Bower para todas as coisas, eu quero dizer exatamente isso. Agora entender o Bower, eu estou olhando para um simples gerenciado de pacotes, em todo novo exemplo que você fazer eu espero que você possa usá-lo. +Não faça mais fork, clone ou excluir diretório `.git/` apenas inclua a biblioteca no seu projeto, Eu estou olhando e criar módulos Sass em todos o novo exemplo que eu tenho feito. Não que Compass extensions sejam difícil, mas o Bower liberta de várias dependências, Algumas que tem uma real questão em muitos projetos. From 7ed78181471e259b89e45af234b0285f34fc8667 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 10:50:04 -0300 Subject: [PATCH 38/41] Update node-npm.md --- pt-br/node-npm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pt-br/node-npm.md b/pt-br/node-npm.md index f043fba..bf15c55 100644 --- a/pt-br/node-npm.md +++ b/pt-br/node-npm.md @@ -2,7 +2,7 @@ Há muita documentação que apoia a questão, "Por que Node?". Algo que realmente soa verdadeiro para mim não é o lugar onde Node está hoje, mas onde Node está indo. Sem dúvida, a comunidade Rails trouxe muitas ideias para a mesa, mas o que faz todas essas ideias incríveis difíceis de serem entendidas foi o fato de que elas estão trancadas dentro de Ruby. Ruby é incrível, mas nem todo mundo quer ser um desenvolvedor Ruby. -Eu particularmente gosto desta questao _Why The Hell Would I Use Node.js? A Case-by-Case Introduction_ [[reference](http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js)] por [Tomislav Capan](http://www.toptal.com/resume/tomislav-capan). +Eu particularmente gosto desta questão _Why The Hell Would I Use Node.js? A Case-by-Case Introduction_ [referência](http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js)] por [Tomislav Capan](http://www.toptal.com/resume/tomislav-capan). > ... vale a pena notar que Ryan Dahl, o criador do Node.js, teve o objetivo de criar *real-time websites* com muitas possibilidades, "inspirada em aplicações com o Gmail". Em Node.js, ele criou para os desenvolvedores uma ferramenta para trabalhar com *non-blocking*, *event-driven* e *I/O paradigm*. From bf4ca295df074b9afd80e2ba5a88380bc7a12827 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 10:53:31 -0300 Subject: [PATCH 39/41] Update node-npm.md --- pt-br/node-npm.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pt-br/node-npm.md b/pt-br/node-npm.md index bf15c55..c447a04 100644 --- a/pt-br/node-npm.md +++ b/pt-br/node-npm.md @@ -9,15 +9,15 @@ Eu particularmente gosto desta questão _Why The Hell Would I Use Node.js? A Cas ## Instalando o Node -Antes de você executar qualquer instalador, certifique-se que você sabe se o Node está instalado em seu computador. Veja a versão, simplesmente execute: +Antes de você executar qualquer instalador, certifique-se que você sabe se o Node está instalado em seu computador. Veja a versão executando: ``` $ node --version ``` -Claro que para criar e executar um app Node, você precisar instalar o Node. Para instalar o Node, você pode executar o [instaldor desse site](http://nodejs.org/). +Claro que para criar e executar uma aplicação Node, você precisar instalar o Node. Para instalar o Node, você pode executar o [instaldor desse site](http://nodejs.org/). -[Instalando Node e npm](http://www.joyent.com/blog/installing-node-and-npm/) é um bom artigo onde tem todas as maneiras de fazer a instalação. Preste a atenção no passo 4 onde existe opiniões solidas de como definir isso. +[Instalando Node e npm](http://www.joyent.com/blog/installing-node-and-npm/) é um bom artigo onde há todas maneiras de fazer a instalação. Preste a atenção no passo 4 onde existe opiniões sólidas de como definir isso. Um [gist](https://gist.github.com/579814) disponibilizado ilustra uma serie de maneiras para instalar o Node. From 6d9605716ce54252b04a3549668ce26915efc0a1 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 13:13:54 -0300 Subject: [PATCH 40/41] =?UTF-8?q?revis=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pt-br/404.md | 2 +- pt-br/express.md | 14 +++++++------- pt-br/new-app.md | 22 +++++++++++----------- pt-br/node-npm.md | 38 +++++++++++++++++++------------------- pt-br/routes.md | 27 ++++++++++++++------------- 5 files changed, 52 insertions(+), 51 deletions(-) diff --git a/pt-br/404.md b/pt-br/404.md index 4254036..8944082 100644 --- a/pt-br/404.md +++ b/pt-br/404.md @@ -22,4 +22,4 @@ block content pre #{error.stack} ``` -Simples. Se você quer customizar a página 404, edite essa view. +Simples. Se você quer customizar a página 404, edite essa *view*. diff --git a/pt-br/express.md b/pt-br/express.md index b146474..b2e6880 100644 --- a/pt-br/express.md +++ b/pt-br/express.md @@ -1,20 +1,20 @@ -# Express, o framework Node +# Express o framework Node -[Expressjs](http://expressjs.com/) é um framework para aplicações web em Node.js. +[Expressjs](http://expressjs.com/) é um framework Node.js para aplicações web. > Express é um pequeno e flexível framework node.js para aplicações web, ele prove um conjunto robusto de funcionalidades para criar *single* e *multi-page*, além de aplicações web hibridas. -Tem uma valiosa [API](http://expressjs.com/4x/api.html) que é RÁPIDA COMO O INFERNO!! +Tem uma rica [API](http://expressjs.com/4x/api.html) que é RÁPIDA COMO O INFERNO!! -Express é bem conhecido por não seguir Rails, tanto quanto frameworks go, para isso preciso levar em conta outro framework Ruby chamado [Sinatra](http://www.sinatrarb.com/). O conceito é simples, o framework dá para você o suficiente para fazer as coisas e executar o mais rápido possível, tudo isso sem ficar no seu caminho. +Express é bem conhecido por não seguir Rails, tanto quanto frameworks go, para isso é preciso levar em conta outro framework Ruby chamado [Sinatra](http://www.sinatrarb.com/). O conceito é simples, o framework dá para você o suficiente para fazer as coisas e executar o mais rápido possível, tudo isso sem ficar no seu caminho. -Para a maior parte, Express continua de acordo com essa afirmação. +Nas maiores partes, Express continua de acordo com essa afirmação. -Para este workshop, nós vamos usar Express como ferramenta central para criar uma *web app* e executar em um servidor, com suporte a rotas, páginas de erro, logs, etc ... +Para este workshop, nós vamos usar o Express como ferramenta central para criar uma aplicação *web* e executar em um servidor, com suporte a rotas, páginas de erro, logs, etc ... ## Instalando o Express -Instalar o Express com o npm é muito fácil. Tenha em sua mente que há duas partes no Express, a biblioteca que executa um incrível gerador. +Instalar o Express com o npm é muito fácil. Tenha em sua mente que uma parte muito importante no Express, a biblioteca que executa um incrível gerador. Para instalar o Express: diff --git a/pt-br/new-app.md b/pt-br/new-app.md index 321f9f9..c4e3873 100644 --- a/pt-br/new-app.md +++ b/pt-br/new-app.md @@ -1,6 +1,6 @@ -# Criando um novo app Express +# Criando uma aplicação Express -Nesse ponto, você deve ser capaz de criar um app. Neste exemplo, vamos criar um Node.js app com o framework Express. +Nesse ponto, você deve ser capaz de criar uma aplicação. Neste exemplo, vamos criar um Node.js app com o framework Express. ``` $ express @@ -34,7 +34,7 @@ Execute esse comando (usando `demo-app` como exemplo), você deve ver a seguinte $ DEBUG=my-application ./bin/www ``` -BOOM! Express cuida da maior parte do trabalho. Agora vamos fazemos o que o computador está dizendo, mude de diretório, e dentro do diretório da aplicação execute `npm install`. +BOOM! Express cuida da maior parte do trabalho. Agora vamos fazer o que o computador está dizendo, mude de diretório, e dentro do diretório da aplicação execute `npm install`. ## O que está no app? @@ -47,9 +47,9 @@ bin/ package.json routes/ #### app.js -Ele é o ponto partida para seu app. Vamos falar sobre alguns códigos dessa estrutura. +Ele é o ponto partida para sua aplicação. Vamos falar sobre alguns códigos dessa estrutura. -A seguinte linha não e necessária para esse tipo de app. +A seguinte linha não e necessária para esse tipo de aplicação. ``` var user = require('./routes/user'); @@ -63,13 +63,13 @@ Define o caminho do diretório onde os arquivos das views estão localizadas: app.set('views', path.join(__dirname, 'views')); ``` -Define o caminho do diretório onde estão os assets: +Define o caminho do diretório onde estão os *assets*: ``` app.use(express.static(path.join(__dirname, 'public'))); ``` -Define o caminho raiz do app: +Define o diretório raiz do aplicação: ``` app.use('/', routes); @@ -81,11 +81,11 @@ Esse é o diretório onde todas as suas dependências vão estar. #### public/ -Diretório dos assets, como por exemplo imagens, JavaScript, CSS, fonts, etc ... +Diretório dos *assets*, como por exemplo imagens, JavaScript, CSS, fonts, etc ... #### views/ -Onde todos os seus arquivos de layouts e views Jade deve estar. +Onde todos os arquivos de layouts e views Jade deve estar. #### bin/ @@ -93,7 +93,7 @@ Ha um único arquivo aqui, `www` e este é o que ativa o servidor Node. #### package.json -Descrições do projeto, script de gerenciamento do projeto e o manifesto do app. Observe o seguinte objeto. +Descrições do projeto, script de gerenciamento do projeto e o arquivo de manifesto da aplicação. Observe o seguinte objeto. ``` "scripts": { @@ -105,4 +105,4 @@ Esse é o código que permite você execute o `npm start` para seu app. #### routes/ -Esse é o diretório onde você deve criar as rotas RESTful para seu app. Com base na instalação deve existir dois arquivos lá dentro, `index.js` e `users.js`. +Esse é o diretório onde você deve criar as rotas RESTful para sua aplicação. Com base na instalação deve existir dois arquivos lá dentro, `index.js` e `users.js`. diff --git a/pt-br/node-npm.md b/pt-br/node-npm.md index c447a04..8409516 100644 --- a/pt-br/node-npm.md +++ b/pt-br/node-npm.md @@ -1,8 +1,8 @@ # Introdução ao Node -Há muita documentação que apoia a questão, "Por que Node?". Algo que realmente soa verdadeiro para mim não é o lugar onde Node está hoje, mas onde Node está indo. Sem dúvida, a comunidade Rails trouxe muitas ideias para a mesa, mas o que faz todas essas ideias incríveis difíceis de serem entendidas foi o fato de que elas estão trancadas dentro de Ruby. Ruby é incrível, mas nem todo mundo quer ser um desenvolvedor Ruby. +Há muita documentação que apoia a questão, "Por que Node?". Algo que realmente soa verdadeiro para mim não é o lugar onde Node está hoje, mas onde Node está indo. Sem dúvida, a comunidade Rails trouxe muitas ideias para a mesa, mas o que faz todas essas ideias incríveis difíceis de serem entendidas foi o fato de que elas estão disponíveis somente dentro do mundo Ruby. Ruby é incrível, mas nem todo mundo quer ser um desenvolvedor Ruby. -Eu particularmente gosto desta questão _Why The Hell Would I Use Node.js? A Case-by-Case Introduction_ [referência](http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js)] por [Tomislav Capan](http://www.toptal.com/resume/tomislav-capan). +Eu particularmente gosto desta questão, [_Why The Hell Would I Use Node.js? A Case-by-Case Introduction_](http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js) por [Tomislav Capan](http://www.toptal.com/resume/tomislav-capan). > ... vale a pena notar que Ryan Dahl, o criador do Node.js, teve o objetivo de criar *real-time websites* com muitas possibilidades, "inspirada em aplicações com o Gmail". Em Node.js, ele criou para os desenvolvedores uma ferramenta para trabalhar com *non-blocking*, *event-driven* e *I/O paradigm*. @@ -17,27 +17,27 @@ $ node --version Claro que para criar e executar uma aplicação Node, você precisar instalar o Node. Para instalar o Node, você pode executar o [instaldor desse site](http://nodejs.org/). -[Instalando Node e npm](http://www.joyent.com/blog/installing-node-and-npm/) é um bom artigo onde há todas maneiras de fazer a instalação. Preste a atenção no passo 4 onde existe opiniões sólidas de como definir isso. +[Instalando Node e npm](http://www.joyent.com/blog/installing-node-and-npm/) é um bom artigo onde há todas maneiras de fazer a instalação. Preste a atenção no passo 4 onde existe opiniões sólidas de como fazer isso. -Um [gist](https://gist.github.com/579814) disponibilizado ilustra uma serie de maneiras para instalar o Node. +Um [gist](https://gist.github.com/579814) disponibilizado ilustra uma série de maneiras para instalar o Node. -O artigo representa uma opinião pessoal contra o uso do Homebrew. Brew tem trabalhado muito bem para mim, mas está é uma opinião que você pode precisar formular com suas próprias experiências.as. +O artigo representa uma opinião pessoal contra o uso do Homebrew. Brew tem trabalhado muito bem para mim, mas essa é uma opinião que você precisa formular com suas próprias experiências. ## Node Package Manager (npm) -> npm é um gerenciador de pacotes NodeJS. Como o próprio nome indica, você pode usar ele para instalar programas Node, também, se você usar em ambiente de desenvolvimento, ele é uma forma fácil de especificar as dependências de seu projeto. +> npm é um gerenciador de pacotes NodeJS. Como o próprio nome indica, você pode usar ele para instalar programas Node, também pode usar ele no ambiente de desenvolvimento como uma forma fácil de especificar as dependências de seu projeto. [Leia mais](http://howtonode.org/introduction-to-npm) sobre o npm. -Dependendo do seu processo de instalação você pode ou não ter o NPM instalado. Para verificar, execute: +Dependendo do seu processo de instalação você pode ou não ter o npm instalado. Para verificar, execute: ``` $ npm --version ``` -#### Se você não tem npm instalado, execute o seguinte comando: +#### Se você não tem o npm instalado, execute o seguinte comando: -Nota: npm é um gerenciado de pacotes para o Node, dessa forma você não pode usar o gerenciado de pacotes para instalar o gerenciado de pacotes o_O. +Nota: npm é um gerenciador de pacotes para o Node, dessa forma você não pode usar o gerenciador de pacotes para instalar o próprio gerenciador de pacotes. ``` $ curl http://npmjs.org/install.sh | sh @@ -45,7 +45,7 @@ $ curl http://npmjs.org/install.sh | sh ## Usando npm -Agora que você tem o npm instalado, todos os pacotes são registrados com um simples comando. Para instalar um pacote básico, execute: +Agora que você tem o npm instalado, todos os pacotes são registrados com um simples comando. Para instalar um pacote básico execute: ``` $ npm install @@ -67,9 +67,9 @@ $ sudo npm install -g ### Usando npm com um projeto -O caso mais comum de uso do `npm` está em manter um manifesto de dependências para seu projeto. Ele é mantido com um arquivo chamado [package.json](https://www.npmjs.org/doc/json.html). +O caso mais comum de uso do `npm` está em manter um arquivo de manifesto de dependências para seu projeto. Ele é mantido em um arquivo chamado [package.json](https://www.npmjs.org/doc/json.html). -Você mesmo pode criar esse arquivo, existem também uma maneira de gerar esse arquivo. Em algum diretório execute `npm init`, o CLI vai orientá-lo em uma serie de perguntas e criar algo parecido com isso: +Você mesmo pode criar esse arquivo, existe também uma maneira de gerar esse arquivo. Em algum diretório execute `npm init`, o CLI vai orientá-lo em uma série de perguntas e criar algo parecido com isso: ``` { @@ -85,13 +85,13 @@ Você mesmo pode criar esse arquivo, existem também uma maneira de gerar esse a } ``` -Uma vez que você tem isso adiciona o em seu projeto o comando `npm install` instalas as dependências. Adicione a *flag* --save` ao comando, veja: +Uma vez que você tem isso adicionado em seu projeto o comando `npm install` instala todas as dependências. Adicione a *flag* --save` ao comando, veja: ``` $ npm install --save ``` -Para adicionar o Grunt ao seu projeto, você deve atualizar o `package.json` adicionando ao objeto `dependencies` no arquivo `json`, veja: +Para adicionar o Grunt ao seu projeto, você deve atualizar o `package.json` adicionando ao objeto `dependencies` do arquivo, veja: ``` { @@ -116,7 +116,7 @@ Somando-se a isso, se você quiser adicionar uma dependência utilizada somente $ npm install --save-dev ``` -Para adicionar o Gulp como uma dependência utilizada apenas em ambiente de desenvolvimento, no arquivo `package.json` adicionamos ele ao objeto `devDependencies`, veja: +Para adicionar o Gulp como uma dependência utilizada apenas em ambiente de desenvolvimento, no arquivo `package.json` adicionamos ele ao objeto `devDependencies`, veja: ``` { @@ -148,13 +148,13 @@ O `package.json` tem muitas funcionalidades. Para saber mais sobre como tudo iss ## Mantendo dependências -Ao contrário de outros gerenciadores de pacotes, npm instala suas dependências dentro da pasta raiz de seu projeto. Sem passos extras, essas bibliotecas podem facilmente ser visionadas no seu controle de versão. +Ao contrário de outros gerenciadores de pacotes, npm instala suas dependências dentro da pasta raiz de seu projeto. Sem passos extras, essas bibliotecas podem ser facilmente versionadas no seu controle de versão. -Você provavelmente não vai querer fazer isso, O versionamento dessas dependências é mantido pelo arquivo `package.json` e você deve evitar versionar esses pacotes. +Você provavelmente não vai querer fazer isso, O versionamento dessas dependências é mantido pelo arquivo `package.json` e você deve evitar versionar esses pacotes no controle de versão. ### Usando o .gitignore -Para manter bibliotecas npm fora no seu controle de versão, adicionando a seguinte linha no arquivo .gitignore. +Para manter bibliotecas npm fora do seu controle de versão, adicione a seguinte linha no arquivo `.gitignore`. Caso o arquivo `.gitignore` não exista crie ele. ``` node_modules @@ -168,4 +168,4 @@ O arquivo `package.json` está mantendo suas dependências e você não deve ver $ npm install ``` -Depois de executar esse comando você deve ver seu CLI fazer download das dependências +Depois de executar esse comando você deve ver seu CLI fazer download das dependências. diff --git a/pt-br/routes.md b/pt-br/routes.md index 0062133..0b21104 100644 --- a/pt-br/routes.md +++ b/pt-br/routes.md @@ -2,9 +2,9 @@ O método `app.VERB()` fornece a funcionalidade de roteamento no Express, onde **VERB** é um verbo HTTP, como `app.post()`. Várias chamadas de retorno podem existir, todos tem tratamento igual, e se comportam como um *middleware*, com uma única exceção onde as camadas podem invocar `next('route')` que ignoram as chamadas de rotas remanescentes. Este mecanismo pode ser usado para executar pré-condições em uma rota e passar o controle para a rota seguinte quando não há mais necessidade de prosseguir com a rota atual. -O trecho a seguir mostra uma simples definição de rota. Express traduz a sequência do caminho para uma expressão regular usada internamente para combinar com as requisições de entrada. Sequencias de consulta como **not** quando consideradas representam estas combinações, por exemplo `GET /` poderia combinar com a seguinte rota, com faria `GET /?name=tobi`. +O trecho a seguir mostra uma simples definição de rota. Express traduz a sequência do caminho para uma expressão regular usada internamente para combinar com as requisições de entrada. Sequências de consulta como **not** quando consideradas representam estas combinações, por exemplo `GET /` poderia combinar com a seguinte rota, com faria `GET /?name=tobi`. -[source](http://expressjs.com/4x/api.html#app.VERB) +Mais sobre [app.VERB](http://expressjs.com/4x/api.html#app.VERB). ```javascript @@ -17,9 +17,9 @@ No arquivo `app.js` veja como as rotas são definidas. var routes = require('./routes/index'); ``` -O que está acontecendo aqui? Basicamente, Express está definindo uma variável chamada `routes`, para requere o caminho do arquivo `./routes.index`. +O que está acontecendo aqui? Basicamente, o Express está definindo uma variável chamada `routes`, para referenciar com o caminho do arquivo `./routes.index`. -Esta variável está usada para definir o cominho raiz do app. +Esta variável está usada para definir o caminho raiz do app. ```javascript app.use('/', routes); @@ -33,7 +33,7 @@ router.get('/foo', function(req, res){ }); ``` -Usando o `res.send()` podemos fazer coisas divertidas como sempre enviar objetos JSON. +Usando o `res.send()` podemos fazer coisas divertidas como enviar objetos JSON. ```javascript router.get('/foo', function(req, res){ @@ -49,8 +49,9 @@ Olhando para o arquivo`index.js` você deve ver o seguinte: ```javascript var express = require('express'); +... var router = express.Router(); - +... /* GET home page. */ router.get('/', function(req, res) { res.render('index', { title: 'Express' }); @@ -61,7 +62,7 @@ module.exports = router; ##### router.get -Esta é a função que decide o caminho da URL para `/`. Em seguida precisamos criar uma função que define uma `req` (requisição) e uma `res` (resposta). Outro conceito é o `next` que irá aqui para encadear eventos, mas não são mostrados nesse exemplo. +Esta é a função que decide o caminho da URL para `/`. Em seguida precisamos criar uma função que define uma `req` (requisição) e uma `res` (resposta). Outro conceito é o `next` que irá aqui para encadear eventos, mas não será mostrado nesse exemplo. ##### O que é o módulo exports @@ -69,7 +70,7 @@ Esta é a função que decide o caminho da URL para `/`. Em seguida precisamos c ## Criando uma nova rota -Olhando para o padrão da sintaxe, se nós quisermos adicionar uma nova rota no app, podemos simplesmente fazer algo parecido com isso: +Olhando para o padrão da sintaxe, se nós quisermos adicionar uma nova rota na aplicação, podemos simplesmente fazer algo parecido com isso: ```javascript router.get('/app', function(req, res) { @@ -77,7 +78,7 @@ router.get('/app', function(req, res) { }); ``` -Tenha em mente que o valor da URL, `/app`, não precisar ser o mesmo que o próprio arquivo. Se o nome da view for `foo.jade` nos poderíamos fazer o seguinte: +Tenha em mente que o valor da URL, `/app`, não precisar ser o mesmo que o próprio arquivo da *view*. Se o nome da *view* for `foo.jade` nos poderíamos fazer o seguinte: ```javascript router.get('/app', function(req, res) { @@ -93,14 +94,14 @@ O que é interessante sobre isso é que a função da rota esta contendo lógica res.render('foo', { title: 'Express' }); ``` -No template da view temos isso: +No *template* da *view* temos isso: ```jade h1= title p Welcome to #{title} ``` -Aqui está dois exemplos de como nós podemos extrair dados do 'controller/route' e mostrar na view. Nesse exemplo nós pegamos o HTML obtemos a saída de: +Aqui está dois exemplos de como nós podemos extrair dados do 'controller/route' e mostrar na *view*. Nesse exemplo nós pegamos o HTML obtemos a saída de: ```html

Express

@@ -109,7 +110,7 @@ Aqui está dois exemplos de como nós podemos extrair dados do 'controller/route Tudo isso parece ser um punhado de preocupações, como a rota pode também conter informações do controlador? Isso é verdade, a um movimento na comunidade para mudar o nome do diretório de `routes` para `controllers`. -Um bom exemplo disso pode ser visto em [Holowaychuk's](https://github.com/visionmedia/express/tree/master/examples/mvc), um exemplo de MVC em Express. +Um bom exemplo disso pode ser visto em [Holowaychuk's](https://github.com/visionmedia/express/tree/master/examples/mvc), um exemplo MVC com Express. -Mas para o fim desse workshop, vamos adotar a convecção atual. +Mas para o objetivo desse workshop, vamos adotar a conveção atual. From 1baa759cd238500306ecc06ec16c7f0432560712 Mon Sep 17 00:00:00 2001 From: Johni Douglas Marangon Date: Tue, 24 Mar 2015 15:11:47 -0300 Subject: [PATCH 41/41] modificado a capa --- pt-br/cover.jpg | Bin 101294 -> 223131 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pt-br/cover.jpg b/pt-br/cover.jpg index 9b183f0a01757298053a890fd6c5d1abea13eec0..b8e5a7af4b9777f8b6197567dbfce09cc199f74c 100644 GIT binary patch literal 223131 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

%m~n@@mf z-R=)irIXGqdxk(WgKn!ZQ{c7zv%)>SR`l4x%axBjgUV&m3pPz2$(q1wUd)(;R*bG- z@soihsZ!y9@;z3D8Lo3j&O}@X{BOVE?pCz>`~$oxcYs)(GLu%{Y_g)egnC4(4x4rt zwWF*3{KzwM3l_k+`J$oqeFu6hwW#*pbts?g7U}Y!nm$4S(~;~cRLWyrh?*eK`-HT- zRu@W6%AD&iur~2>TTWo1H<3M8-fOg(jPZ79`$AZBqF6FU)O?^_>}d zJ6!kF$rptDN@tzDY83e~rdSKQ@UgEXOYkx?UN~{m9l^@zY#qa8NcsTU01P@aX)EKp z)CZI`9Vz-%Ee%}s9CbyFOz6A5VJmLx*r(wdX!g?y`NEuBuy&Jlb2Y;GWNn4-$47La z*gkzwYN{x*JTx3b)v+egT$$l-qu9+fnDaxMV!~UQOWDHI>s?fEx zTcDZ)17ty%d=y(pkI?pkUEVYj>lez3wYelQR^ShDK>t1cO05V>MXbhL5mZ z)G}^!4%;fGCtf=YBMX9nw5Db_Pmea*^P-tRBcx@tS8S6`b6CfdW&qTs@9c|Ff+0&=r9luMv_d&A4!;}W9`@|B$UA(*&1W)RQ$(~EueTrz&$2YB^QkpWX#-M~vSuq!RANy8 z!$+%#`hi)?3ophE>jGJr^fpEu!U;$C$6-X5y|3nGK~d4fL{F_;ACG;Q-KtvMq6Ffg zJ8@8*Hh6@bK_7-3EgOcvp^hVumm>VeFz#*T@jZ|CCfAg8NxSmJ$=XXil0L2NKuLM+ z>2}RTUfXAdk&h?`u#5AbVHcW{2;8I#rN@rla3bY(BGuHLY7!-GnN%&0KRLI~8HEDp zq%3n!|5FdMo}{H8FxpscfVeyH2_1K8e$n2YEpobgfAO5)?o);r4b5Psyojy%mh zd_Rd5T$5R!6@F%PoLlJtL#0dePl%>>rV)}!on@^O(KL8L0k}T(rFWz~)3BPBU#8U2 z;K>}THEC7dRdoRuU$JN@ zaRs#rT}(45mw?S*88){y<$gvW+|kKXPi@urN@n8lB}IRSgfIbYmfl6!moyGfSim!j@3FC?&OtcP(9 zdPNs=;{_=j>+plHkfA7lr%xF+kJUYUk#vLX5lcDCG?$&f=bW8nX^<4cg9eRtMTbn# zEjH?c5um%W*=SRtz?eADjInH=s_~=`FEBe-$`L<`)&L9^uLLfvK#)qbFJ%M?z z1C_}Cc=O(Kg+UwP zM|!k|A1M>fK~YXTLt;bOPd=V82 z?Hg3>BGbwIQ(Dp(MR4yaL0ci%h+wTl&QQ|_2f!dLLtih^bCFDQ>yeF4C@x{WUwC^O zGH{NP2R0yp7%4g@##{y+uSrbbBWlw9a7)%R2f9ZK`Axkw+M-bL9xs9}|<94)EZ4%>t70;IW5KZzcA%zz*sdiW$EFtqMB7{If#r1atB|t8jLIjQ1rWOSJV@6N=dhB)IZg!OHOIS@3xI z&w|P0&1n}F8NV9bPgsRt7Ny@Pgf~ESF&`Pm(PrYF|%5;x}P|qUg!Po_bjuW<+Q$PwN99ceXb|ouq5r*%v$posZg3Bg>}Bl^K`+B zV_7)8OZ-b%54*RCUxx2Y;j$!)AtV)}jPT}pJ!WhvZNrFaJXUFwgM!+yTy`5Gof?jh z)dOFcW0a+akLHuFB~td+E~31MCg|qvxt;t;iJ|rS;zKQ?C38e6dkfYtNIjz+1zSEs z0jx)obRPWcj(L#^BF;s`1?!C{parF6H2EMie}*@yeW{Hvge<6mh>y*Ytf#&+=#gsT z>ecCV#dd>VekeBOyCTP`mlmlKyV}a0z?(2k2$Wqw4_Jht{Jj=5gZrtn*d)|0bc4n` z!SzQ-+1tfP2hCA7AoE8#S6ND6|LIg9oduK33>d+Ox7c8`U3pDE|IG7Vd(ZW}pGpgw zepGkxM{hE(&iy?-1bJL0Rri%_pjNCbN%DN=Mi0z%=D$O^vp38g6k9%+Bb(P7>dWQ_ z;mX@EJ#Hjy<^e85K!NQl-iIxCx`?U|Q7GEFZRwdJwDpT4 zfWDn|H6ztoR=IfbG*ac!{oCd;%sO|inbEY*_mw>;IDi0ymsvMSVu@*qbg<>|o=wdo zlQhEbcDzv7SZuR(UBhtg>J&}bJ)5vAn|M<*HB&Kv`5Ch2ZtnKUH;AI&Y0vcT$;^80 z{J_6jF6Ba9hvuwfaoRUKuX5CwDU0fVDV!9eR3LsJYxH$aqT!$oEi`3n$iQ`S?y;t^ zIFE=LE6SAH#mCd!h}|=;nK-FaphD#E6-ZpTo6>0&0HvO z455vCSQ>iB>*dq#lb#)PZ9G%RxbZL~-U*T?q#K#j0k!6&bd_)9|sAu!AB8e5Q zO}MZ@3)eCzQ=1nF=^u>U&K)DUC_-Ujw@S?(qOm~OyB*UJgi|Pbak58riPtl^<&v0l zX=Cd=waij0)1E6M7F9gb)F;>T93Lq3Pt!4nYXzn}q4BnQ3C;Ev6#;z(b$` z(KJ$5x<$2FKN#g{HcuwvVTrq|(frlK$8oYzmKpdIRl3xh+53*kid6^e#Q+-XXqW<3 z?t5zDJLw03om5>}vJAU{-YpVL&eOzi8Ja?1w`r>5U|tI7};bSArs#CM>alqp?J;Tr~PfYj_JmS$Wl|7NRm4gl{MK z9@l}l*n~H*Yr*zdxL~Wh3W?)eswnz`E_0XZ?TeNen%|w_WN_TT_dXl9F^*Acw3NNg zer&#eYQ|G_|5HWY(rQ@WF!&9yR^w5JJHE|~0PXuyeL+h|B&v(g$-FpuU{kVrM(wZ= zg79co{SnVwYnaNn5v#qS+H|UP3@8=Nl9*8pQv`Nrq$aUgWS-dXwM{+q1Im{=r5}04 z_!!CY=$<8L!ACul?Cji=0Pb;S)}!e#{VIXpPn<+Jg!E1k$_O}Qq8aQnAj?8mTtso= zB(yi29A2{`?!fW>%~!^6FJh1n5voZs*IF-5cy>f^t1eOJiLu{Zzf&gOMf1O)D#M%o zX8n}Ih>~kjVDkrn6{khYORqI_eZXi)9~Y`+me$(0LsJqXhQOl@9WvHCER^A$uYkQC zG&J!}>9ko?vw5GVi^hsTQ z^&(Sne{QkOZC39T6;5k?YK$b9I31Fxraj&+-6>!Jh1h_^u1hhGIkAS2M;_g|!8t07 z%XC+^=mIB5Bo4H^N+3UGN!71OHsFSL|g@4uVLCj5AJ&epJbu-Gpi$NPEC!C09!pl*sEIaJJ`xhwSDsJgx9VVwHAGY zxgp!}(SytR{8O(!6sNu#3w*D~%E_Yk_`87N>f>eE{WFdB3hi#)Opgw2} zx0F?UR;U=^)IaSS-nSk8k{-&!&V5#(+v&5H5+3qV>4wXag=o2d0?J+IB}beI1#tY1 z74fp0x8oOMJ&W@YA(ycn?N}SZ+K{2k=zs(%iS_sdy|0_l<$0;Cg;l7Ft$3d29i}V& zkv>(}FkBNkDwuhNtc9;#Lab!Yl-&pGa)zEp=S4NWy&eTA&$*@zRi;!nM<6PMfXPMJ z);UX0wj!`(aZQO=-6dk4(VjEH*Rp-ma*#LXlU-=^l)xkzV350+b384~r{OOJvpy?q zB?`Mw;aRxx3C25@I+(lT%+CODiIWO_`a5|BqDWddjbL+&+!4p*UjAic^Y)zN4fvS3 z5X3rSB-qb!a9#k>k$ktBQ~g$C~&`pk6-7O!T12 zSr{5llvsQArGp!lvg)85%xb>;v zM!`BqH|`0>1Rl)|emlIpoP3)RvTJ%e7CFc`-Xd7KPX(uZ)-c}_%?(ff+WW5Jw~r4rG9J7WP|6Cw4)TU;?#1b7i<- za`Oea@_e>Jy#qk%ao8_*L{X2kII8}$f)zOnRb<&UDdD9E0ba-$PtCly|Bt&j4{9o3 z*M(73RD_6#2ncCgTU10G7!;7@(29zPIDm~x#0i;<2nb5ZQczH)H~}pPQE5R%jL0ZM zB4boUWDIi%G%`yf5EjYG@_S?NeNOLl_E&YQ?yb6Y?jPM)3Sq6^@Q%;(yp+%^70VMA z2F4}&7&ASF?@E@5!$frTnpF-O#O1YCuQKv6;bDrg@wIF_jdDUmJ{=^#6 z2X_hcEl23iACd~P4ATPccG=x9QW9m$(sTP>p-wW(4gZK)L*+5+SDGdjKChkr!5;m1 z8xpEc@gRf^$;9F}vU{Aqoeiik5Uy;wV@IGoP`w}_VmN-NTmI&ws4nd zN$CW?&k%6SqV&6ZOVfYEwwn7s zj}I=sHYhzKMsQ zp6O19EFt(dXK0gj6?P*uuqMa9E3g6r#j*R8HXAeokr5UC zs!UPom$+6`N1EGMJ$ZUUTH2vgxX5jDuWV&^rWyWCH%$Ne4Z;hep&+#L_dE0^$|7=C zSd{O0Ax7;?zzs7aSVd}ReQ z{K(HO*3gXWtbO{GXc;rA;2dNlj2K1Yux+q)*CvA+4wcmuR*L544mCs9Dqm8nJzyhF zTsNZSW!k5h(-|}iNk=W2uUNyHFkWS;5R zp63AwV!y_h$KD%J*APwkuI zyNM(-t_mt$Y88V&>x<`=15alJpT9g!F$K#kHp7Z^R~1@6LDy1|FUVjzYJ9rt~FrQWgdAGdhl z-sMxx7Wq)_afIhbaE%y_E5y6DLTka-r@h>c<*(bj3{`(JEP&%|cv_IY^j4Kg&BFKnH%Od>d~BKBkRfE= z2L8j>pLysR)@Mf@*h183b0R^-OP>fr2D{F&->N&SdPP!Y(P0&r4_mHIY9F(LvlZgQ z>AdUO#fmf@VNm88H$X%}DK)!}Yo6g>B>H>{Hi;nke+NNqwYIF={>GqUFYQeF zpM7-}j>$+i*^qU_R$h-%+Kh19cw2CC6nwlDwlDosWEY$*@Hn>pc9c#!)@&qD27S){o?ajl`}%XfvZF?%D)(h@7kSwgnX zup3tStK>BfC1%-UnvwJu+ANV~8EHYsw$wf=oy_$+xmrtA7c17^Qu?m&oU_Q~QyfIj!X&ta*X96^d zS#`oN>5@_*H!UE|em1dKr1R7)J|WsWDQ)JG8)1r@sxBe&@nEx}Qi)p6|kPi)YgEhG2m}hoPPo= zj@%9@0JU+x!sm4{lQ!^r5IqDNHWM`+YW3{3v~_hzS7-mp;meclV;d@oSuc>&6sVzRSuROQVRj-ne@!Po#h-g=eicGO z4iD|zPLD#1*{IN-jCqbU+tUoX3~l|$WEzBqTZ&H5y>@(rAfV_ozFrfbQMiYtvFb-1 zd7GxjFT=Mbi+)I!2W|Nx_lj!oCk7|aW2c}#IK2r(>*8#vGK4oy2Jyrmj(~}$Qc6+r zF~jc)uv-+vvcMYf4of~4k0TH5uocK~`X6YqB?vx%nWb&c-(JXOEV#TWc)Z?3D>DOS zb#6xyMfscFfA2`~Jl%P5NTC zL+}3j!zxuo(29!5XnpCu$~sag$A^cw@|#CXkW5mEmsv4=X6;F+p@wB;-0)JzwhS^^ zx(0=Vn>RjYKXQ9)`L=vvxg0z%_dxbL&bDt}#40C;Ya_+fFl|4(ju!PKJIx2fLHmqOTawbC-B1@Lt7LZi+%obg+lUdp^-YS?o z@|Z#&20s6M0JA(zYKd7N+)?M-Af-lXq2YgydU-&ohVlq&;;yqeK+=sljqztF@i0n;PWg>nZmtB zVP0wOy|yBya)z3hd1KarsUM+tma}2$^6I6>-(9kFY@0^AH+8ysQK6p7zNp*19~_|y zSg>o3JtPQ!U4)0A)1yEGgE@U8T!51SM#OAep-Wbgy`zojOssN1VA<|BK_(LM;HXlEzb*Xyj| zIH}2d5ve4f<|SG$NK9*645j$8y4_l4ru0AORFU&szAG4d6j!~vD3g&Q2THo~*MFrp zS9bS?A?~D*Bwg&P05)KlL<&fHPhIr@oyQy?X>=%l<8>mq&MtWJnbZ)EHKe{%+ajV0rd-edlSPm-2&LsHZrC5!h z)B?Ef8igm%9CW{ognjL(tZ$3?nS=+V?@5e-9Dfs}vJTZPxrbqeqQSNNnr(+!14Z5? z1;)yUV&)(H5gEIS6Nq-+C%@7U19ln+I($tO==^lYBe&BzAi{xb9@D$Ec}%NBwe%Yl zH!-vIol&_JD7KlC3D{Zm;G z#-p9wu&8*o=?4pjH)Wr}sagxa7d;w>e!Iu=nfz523==;X^U&h8P$|(hb1ov9Y5@?Y zU5{iGo=m=-nA3jF@Xc3M2(3~|IM1W>owG%zw_Put;d{Jh?>of(iGhCLF!|WVUh#o! zY`yeYKcbdZv~~wmwB8PJUwJ`if9}a%W;y*G{SB*b1pCR1`vn8*GObi-aCGz;W>hUK z?_Bb@)l7mAHYVA$j{UOGl_@Gop=+J3nxyU^#sAdu^TScOPA4rJUhkAFlPA`e-Jp4Q zTbM>=cQ34^S-x2`;HWhdY}=kI>wRRk20{ig6TWxa7!_MSGJJ(Ej6uul-map%i`uIw6m;+PPr9D^%*(wDSLpiZEUZPH@L}7+rLLM=z zkiD`cc(jXhV>NYRt+Y|xJM;*(@CdQYbCC zgceH7D(I?yt=rPeFvWIrqd8~ay}{FCyEvxujcWEF7BGiTciG*{&w0Q+fl*VkpClcg znx81_$>1-5&L>&8m|~QGW}SG}S<~;Lkvx1K%7|L@kJ{uR3J4>(3OcU#BqF63XTLu7 z;2b+|$;5=x02hfi;5~(Dx~bu>Ut2bgJcR(}?Y{zmU_Q9ET_xoPU+703+L?cmC15g~ zOp|nmI|E$H-ujV82QQ*y)-sIMdf_}XN-lJ5AwC9jvtmePgcE04`D*>!J)sf9e7f^Z z4*pWj<3rUe&f!vt?!w=GW9p;D*_@nxGAKQq*w$I(M3_RO%3@^bsM@I2eX}ap>f9=l ztiZ7!aVI=s4cn?)bcp$m`26IZwX0v{pz~Ipv$XIn_sL?6CD1OPp+!p6DYYjUcV4|0 z(fKMTG9o61?u1XN()haQ(T?>$?z=kNcknF1hnomKGjr4c&l<_}H#M*|9IiQCCjUZ(T88$mLhi*}fbohOPT?Ge>OJ^&jf-B#O_C}nRT4CQ6_8UBN z>n2txSH4hbY@3n-Zo!w-e)($j`RVk^Q$sAOQlz9p*I}c#TF*tf{Q0Y1*t(-e!^)!3 zQZ&=7ggiH3usm)swNFp$wOQ_Ka;H79$sp&%tJ0(^+JraSSpd}<1fwF6w!(>G^LP;L z%oXl^IQ@}5_lDov2S-UR%r@DsZj+ubO`NpPqvo#y9FHX-B7PUI9F)ab`23$Yj3rv_ zGQzjeR?$rUc-NdI6yH%h|)T6*N{ft=%FiyP}E-YF8lec^1q zKl$=#@(ljSAnp=g?)z)K{q{hv+zZ1jfw|umrpi1=(Pq9W&Aaa-y0Dn`Cn75=Z*vK(Z1cWPGAviy6cF5y*9#(!_<>_1~+A`>B|Z z^q0e~^d}qYhts*T@l2rxq%bqY^fIovMwW{REJP=Ao;}1(T+%v%UbsrP9nzOAB*=q< z0-17`7&@RK>}A4DsrVI|?Nhh>su5XUQ0fq0a)44x#^-JmA4Fhat-4RKasYG%bQHU6 zf6Gk#(upQ__n$MoPWyC#W&;7$-s%Gj*{nc6s}|?!@<}1>dJEO4S6uC_=i1aRn9btFkV0aB&1I#Jn*+w(GpPVbgbo?fK*| z$%yn4E3W$4x7Gy=8zlqcPvW-qZi6ofwv;ox{=0&TD>zOWcDk!IDtSM{R(nT!q_^Lx ziuO$Ah}URPCS~s#cKo{hH(!S4%hS_CQx?#ji2bx(BGbxFF2KGVMC=Se0K(_sC(X+z zWUqMaI!Z&XkoQejN`-M#f6`#5GAbbitbIP|ytIQk-ZZ{0@yMHrTwEtxYSB(Kk%jvJ zVomcF`JiXbf*IocUN(z9OQw*IT+@)^R>L%9*vfu-wT+NW%mNkZ{ex67v+T$qbDpz0 z@4=C`h)}O(J;vkzgfpWqH}B9Kzmd|n5H50FfsaSp@ zgTseT3p*Y-*DO>NS3XwAwe$S=_T->*Bi96j7g9P-)Jw@g*e=*s&s^xC_(~zcgVO6K zab(7yAXs4+zWTbvv@^ossKzi~?_j|`$*WYMZaKv2_UCScPmf}i6^=<9g80HoZM872 zb6Fr%(AaTlm=ezydZI&rSSb@_En#Ig?UvhEG^hIO-*S8k_JkR@uN`vgB!1@X;kLcB zB9}-PA?pVgruv_fzs&i+f#v_=SAcfJ*@r;ehoZpr>#}>}But-#&u8o_6uvYr(mcR{ z$U!b)=CV-RZG<5a_)tD`hSa5d`sL8sp_`p{H?=Q=X)m!(T@|-k<*@~`;QT|BciIJW zgbs?Y>(D#EJ)JN#>e5ZcuhF#z5HOOdNAM$Pzjd?6N3^q^(Xyg&yO7sqU6K&0tbcu6 z8CCmj(W%?MYcD9_GZ#ZQFMN`wFEu?mggzL1;<-b61cbylfC4&H1go_7?*Gy7z+|a} z?qX5c5CyDsb?n^A<;Ao zpX3!2FVtoyIg^#MKqJTyPPnnS`wKMI&)R22~{mtDoz zcFk|$C25K7>D&)c_A<%-aQnMLkTUuqkBS*5a}CmHN?4KL09R~x!*}>7+FJFLEcKwc zpv7*S)2If$nf!`!vrxS=VZ&G4{t}wn?xb`)?f2C&nRol9;8nCqx!Hoyej|M~T8#Kn zBW{YemF7Exg-g%kzgpfcXb@W_KSOy{l-1WPmRIA_CAo4?ok91 zn2SgYEJ`j;Vqnm4x=u5bp;=#1NrU7*Tz3a4f}2-%a+=Wwu=tTEf1-+h8GdUsU*#mK z1;e;bq2FYupY?GEXF|@D>DWjXdZ87qD3n))dko229PBT32HEZV+>Ul`?L{U{C`KUw zGD|#A8z+5@Yb8?6ClZ-KMLD7=^pSfX%L)Yu$W3m$x9*G~wzV2POaY94T z+vMmJ8n#!{XWUwR918^yjw_75Sw$XQ8xUyQP|abU1uv56_?Q<(lrTw_TZDJT@?ZLT zR5v6R@w%C~CX>r!YJk;y&R4gp-~gP6lU?I^4<+4p^WYNG9LKIo5t=C_7@bn6DbS%O zX@l~UH`G83OGphKJ+GPK$cl8I+H$whonvr5*nf;}{dcsuThS}d>Q9ZcnS!&3Hpwr& zLvUHAhlq;A_YzRSY!N2f9weo1eC#&-)SxF-olBn|jCwD@xe zyvsEUV)niku53=y+`5<5xn>T0xQf|)p{<=RtE?K+XBErNUKKwpB&QgV9KxIDqs+^b zk<5vO&-36R2gCMA=E;YT43LcFLAQZ^xgI$~bmn?s%7BB%)58PG;=qK9S`Pa+R_`@; z$e!;s@D^Q%2pt)iKII0dGnSc6XLcDW?Miba6xsEhY<%$x14UWfCEk#02MMswSxlid zf~`no;PYL@=WWu;8MfF>K~xTXNu4xJHSVXAU#lXei+EW?GxN3nHPnmKJX%H}(Hymb zspWoSXWk*b)7RfldolQKG8APtavm5dVWnLxd~O{KcTIS#b5z*0z(4l5yiRj>_b@{O zvGA=ktT>)g*>{CHxz1*Qv+MZANW+C6924nPNEQ+bGRx#^db+??Xy4*zq>6=qwoxaI z)-PgIuu*Vsg=q0!V+y9PG}OV1J+aA#OJBCEvNTpXIyJqHG$~Nsf`mDVJ62jI@gDVl zD`=WDAXHbwk7cq-s;4>Qv#`LYx%g72c-IQe9DblpCi1N>NZUIS9%hw9N^ zmfq=ZXqFjctTtaSep`TP?U17Ek?%sZ?6VMU@Qoniziyo7SV$+z=Y;!UhzklV1f2vq>(X-ET7fCV#i6AQP}ykfe8yA z*O9}wd?Ae(AT9sboKQ}qhP?1+@2iv;rqGY|b_Cl4p)`LQHc(A$)l(A9&Gba8vn8k zeRMOj8oe4+ZP?_a!-s_28;0WvK5gmWa*!kLGCy#toTL%V#FY!oM0y9YOo;9C#J6|0 z#_o}T9xZ7AH7Bm2A)=S7b~#=`VtFwhzV$d+$1Xy3S#6UwT?x0b8>H0bmKkXu#y4V@(mZ(EWJ;xtW}49?m#KGUDkz}$ zgx1vxe0mKeX-3zOmOF-HQC%c#*XrNLR8GP|EtYh#Pu?)`eVSZbJnlNyF0>IiBnoXh zVdfT1=Z{xJmGDy{^@&qR|I}^}_<#999wr^`dvWQ}_J2Q~ZOWf$4x^Zaodw-ypDz8Y z!h%BkhsTVSTa4uG1glIGh5On!tCMIwg{`3cplchx4zH>A~TA_-h)z`e8FJy zv@o1ClnmdIT(^qxkv$9JikFPI$(}(DEX{jN%l$ZqW&yWO}7wo8=O4fS!RIJN$3R(3<7Cg5#O)csb&x^&DY z&kPwAQ9r{)q^EU{SBfZOAVk=qd0*!G=b0o`k5PZ|A~?;_?Ai1h^S#Uz+Ln490TQ8g z{(ai}+@1QVmA-qGWI3(X8(E)Os#utvC?!NM`3YrvkSlGyZdK;gnPQW%!^x;aFk}s-O6w?yN z{gNK_+Tss`O;)L2JMKSs3P`Yt9%wu~vT8(=rp{WqC4KXD)PyXwL9x}j45X8}A|(J+ zpGC)LYb|wFL0K5{MeA~NWw75hCQ?-T6I#5Vm`1d`dW=CY-!ti_mFpi5yjV4U?WdE( zrr(2opicYRpsoZs$u5|~2^-y&=bvd+Te(=44NiHX|{cXMexo-cXzrwsJ zl?gYS<47z?x8Fk)MkxC|JKTn6U=iKSrp;sOgCK*NcFOS^NwnF++<*8suz7z)a}WVI z&TAifr8-g_0--mES!2{p$81Q|s$>O9_(x8*KcVC?F1+vTHXfMrGVu40IkPKmVdV>#76VeS$n5z?t-|Au^E3vC;usKkKpHFY%Ujl#i~s z=Qe_+3G$Kg$iIGD`M6m-xsDlscGMPK%M@jhB!v__AM8}r4YZ-_yFyQ$wFF|2-a67V zb|3KouaiGDT>k(3=f8dQk7xZo$adm?;TM+rWjsMThgCMJizBfkeq@|ZQayTIo;ZTh>AVsz!6JxRD}GVOi!$?RG`54+dSzj6=cyS(w?P9vYU&R&%|F?oIWm)}_vrx>rF z{)LwLL4SpeN$EWWg4kj&An`gN(4`o{C0{~ZXXE>YmS>KsMNHQYCf(2Ky6p3y;_@u- z0gn;SMu*%k9kOcQL~d?$PR_-ZPX0@-tmTbslt&gn7u7$_LCsL%4i;u$(u=EWc0nGh z-~FV4BY<9mo7CafKAmBsLm_qFzWoC2H!AP`S&{XlEUMMD+8)oEm)lEyd1Y;}^Hk#s_OE)*Vz0U5UL|mFO09U`Vea zOWZrGG=xaCFl+H5*#loRjF`vpijGfsNu4bi`MPuZOP!=YqB~-S##HZ}V}1Vlj)Qer z9bslExLDQ*3Llp%Zr94Om8>;)UXqNWrf zbw<`IPG>rQj%RDiqmwUMQNH=0+j!?+Ac3`C03eVyNyVV}x1veN2Ydi3#|JFd=l=sAaPr^c1N@L@TYiKB z14}Y`|ASc@QX5X%tuQH{+vl2|1KxJp7}kD?+GwQU5s3&@xIpmWV*Ht#>FAF(_$_*yccUqRl z5n51QGR9$Dt5aP6ZuyQPf-^)rb8H>az{hl1HLxXS;vpzH$BAD8&Ul#qj~^o2$N5MY zqqcf(te#S00d=?;U@k_($AFyNA|nek(R0-jE!2GkSLO8q^O=cDT>dBg8W$5h?_XCb z`M1UBc^-!(pvnj{RcVCv@Z;%lSvhrzHpZpIrbZI=xGHY}B_<_=ey@ zhv{7BCGrCk(GL)D)J+f0_3sLr8U3zZ9wgZta0=Zfm4KK&3@}`#Y1Ze0pv$@zimgsrH}Da%XCsZX>}!jDk|d5tAkQt+ z$wozV6`BI9Mml{-z!~b2F8@-hG8SJwef!ra?`4dOR?qhgplTXH?}bYURWn&UeVw&9 z$gxbDS6VQ>=aTc1*DX3tcC%v8bq4h%y$d~e#BJuek2yDJq`I>*$9Os<56>YvBMwT!Ux#D>PDB*MJ zvng}WuB{YyS2(7H1U`OxWQCo~EJuIgcZHYB)JG_Hz)d;gI-}BE^pEFw4$fK-M%{n3 z;>$?s<_=a{9VSBlXdv;rMb4tlNyI_;I0&6j(ie;8Ap%uBf&) zm>Y^DB>pxi_ImUnH^@ReQcHnYvyqd{5lqKo1k9o8$wRZ<$#WL&UI`U$>vAC_0Jmfz0cNDq;Kh8(5JLtcv1=Pls2? zw6uT#HJP>tb4hc1G3C30jSxy9t!8@sz6rg($VmUo2gqEPr0Bk0Ng_RLD717(DaDZf zi77l>-CQbuq~amq-)vbO_f!q?VW%4N?eH2`+PqlLuH9#yc8qBH(sT0ZE@ww$53Pe$wR9=EgBN!ybE5Eg^}7mN*Z01I>F4;xf2{7ydi?M%3FA0%yml~*3tfL@uJkp}h*dTKhb^-k=LmeipU;mCn=2{hLi zPNv@9751^X1T+KqENHz$oK+0H?&pmhq20(;rBeF*`ebB&q5F&Y%>qt_SGCGT{@!1Y zk0X20b!cZOlnh&|Te;mF9MaMo6wx}2Dk%7Nj%cmMmzqDU@DjDnVVLo*0;tZk9B}DR zHjlmX?s0Br{szAVbeebO(NqKr*_&v)YW)L3$`@=DhTf&E%eTGPWav+fzullnTw3() z7ZVW+aIM6w(?Jl~bYlZa7Q)T;!s>F(w|!W@ppr8=MwZ&Z+#=rCy{#qehF&0V3{41F zEnGNnax8Y`-eWeU?4PsN?heDpm1g8;Y}~8sQWW0SE2;CGBoi|sKc4OY*UbRw6l0W?X)1X$h7yQC#V5mo2`W(g75wX-eIf#Q1+6P!6aR_ zX3OeVmBjTf+ojR)Yxy^~qucqfG>5AMD7IW_sP_pbEveF;3>nH#j1#%>cF!2}VeVmk zw7=KAiS^Zh<`Q1gdNA;F|8|8x?VUv*{tpDtf69Yr>d{dXYIH0;)@c@bqA`_{1CNaH zI$d#XDr8dpR-G=_Fizi+PSIs#_KV}prH}z`%M@n z>-|!~1Am+*v9Oosi!gs#>zB*F&)JQCYqKsQQ@(AQqj^Ab??w9pODc5$Y{YP2yl(Gs|U(+>%^$I0eM&ZM6Fu5gFx28-@Ad9;<-aq#8k-|Z&O zpf(#|N(ROL)Fl@=Xm;}d_qHd;{GfC!da8JKEP4K!$l4xx(gj10euxYHXW?r~_!pWN zxPtB2&Br-$UAktwcv)Yhjl7(nhtVa>YK=O3o0v6LOR*k!PbFC#u`$+-t&LW( zblR_;I7nYZyhE~qi&t8qU#1!F8fm2+c^r$|!2vWig!T!jOpW46FX0P)^>5PVBM0vF;jLVv|gZiwqim`|X@n@&^zC>mD%oW8O5rnEU2XQD)J?pT4~?=k=uG^9Ko) zA`st;GTJAi6sxdjiad<)h~y~E{h%XW$?2rAT%1q6ez8~QsE#?2m7(p3>|`qtpPfmv z6!xN~fXuh-pKEbjfo#hKIdh7FBidhQwo^XD4S7jV(;VQAZzmcqKW^#IZ;Uk_-ZtdC zOnB~K~h=^Aw72f9aJfF8pIjxD%vt-;gK(Z1|UOTFft6ZNLHr zWOY+Mh85KvY$r*n@Nc0W-Dnh9=*b)!5$O^Q0{d=qX#UlGn_qFHUQfqAv`wadi{)4s zesU{u_F!mSDeclM3_l#p=;g=>gCP{UDNTQdRPZVN5x%F+8qYtcz4|pO4kLE360Bwt z?PyjiK9AeAKHwbhpeQcX(G~)pmNORrgO-H1^z5>Ucnk@u{YIfzQ<+9Vp4=tf;(NUepa@ScjGI>Z}Su*m2H?3 z|Namrv3_Z(-uUQ{OpO0-|lyJS#9M$>8WZ*Z%2X+xB0ATkzl47K*h8ii(bzFUZUL zNntJ5-M0UH8#d8BfoqasV&Ly=gMg5?#A;FOlP6e2>7Jk1k$pV>t)^oio>c|?9?FR! z&m2$`i{VMq`~8`ts#uK3W|(8MYut{oW({P}J6Y;0DuPZ-m}eZOxIFr0zP+;m{Ok_z z%_?tOot331z13Mwc9nCc$fipvJaK2n9=G`8Ua#F9kDSjLY}J=IKEq&;#Ok|3MzK@e z4a;rx_;Vow>3Y9QmoA)Fv-X*!pK=_v1?#RY%c1$fSB5Mnt6jgu+&TRz=yGk7E-5B- zHfU`cnKjPTwUfku^VxIaVLBP$_b$gSp2DYMTSNy4WjNW>r`3NQx7`xed&7v{+_lMJ zZ33d&|I_)0K}xq(P#dNKeHs=hzJP5L@D;JW<k!aaVIhIfuphX@y@u}%*pOPo9u6%UIp^$?bJ)%$pji8$u za+=O~^npJqn1MB}esULl(p~x|rQILRU860{ous9g^GbgIy7^1{&B1AHikKeg^gu*m zhMc2np~XL;p1S)h%bd==j$a5+cAO%3yFQ};Vt>22^oO@QI8Re8f3VBEjqrKioU`8* zrr3x|1z+!j_$5E|#a1l*oe>`CbXaK2Np(H_VjvR^4#Ad3JfZJZVd#6V8n6W9_~+$qvMc1fy*m)gu!&(_b`2t z;(j}9OW`j1N#Ss-sIdI$-> zKb4b`y&;+tjb5QFG_q2_PYXHGp3oFtEMU%U^*|=NI4s7@fE=*kA!D4mZmV)*&12%* zTg)aJ_bqfxC~abi=?)jqRCatZ-wn-MR?5E$SUm>b)nj>K&{aq`nQVvnf4y9k={nrp zX>S{hW0nkqc*=}~#|oSLb?$-!W47dHdJmn17B^C|f-z<{|0-LnDTaz|85>ROn7fvU zq3u-?P(7_>g}j)AuA)$K{Xnrnms&Gg{Di603j|OU0HcT|M)rd%q|*u`8l(VD%9h`Mbg|4jpU(G^~^Cu1nb3#gQ?C8Qo9d zaz6TC{cmfb_1FGwm`BT1`@3|Gd^w&*bCVz-`j4W-`jM=jdgCv-d4I0y)xcTwvN#?y z1C;YT-Zq+r5x=50C{4K>OhbGmo_PM}Fy$i|*R<)pOM^r>I2GS%IxJ(lb_KTDskf|I zv^H-M6Q2cAsT?&!H-}@@Hq#6C5D&w48+-)L7AYzg&7ur7cTyI$$oTWmI`ESF9GN_m z{+O{Ef9v?aVzmFliB@_7wel$u>4OgJg~IVKPcC0{&pXbDKDp^|*aC?b_&jYFwm|NiDEe31ik<3bw4bf~5BN*&DCvfczef zD>69CiEBZ2%QYrLji(K&By`nfy%uVJ(q|t69h%@KVduVk21&OW(L6=vdvj`T0C&4`#!f{_Ow@ z7+h5Rcc1WsuOS~Asq`fb*Bl{c9ZDe@zAGq<+l6PjU`L=>6UE<*PpY3u?rrx+`y)U3a<9bEwe zoFUai%CHt&MJB0X)?yGu>?RMVFZ3&CwXo~FC`R$Dv=a_%^-|_x*N1+S9RvKWh2btg z-4#I4Y1>eB)RI@1Zr^jO{FBE!j)z^Vji7pHyYMTwoUCrShpqjYIud7NQ+m?-qDraj z>|bY>1=Y1?U&gnoP~s7xZ^sQV)}0T`kAXTBEhwb}l15YBHVJRFna23#MddEpZ7{FT zQI>0^L$r3N)@Q@bW&cc7ce{M3x9RI23p7nnQ$8zSzcDrvF1`ZP0y+ZbE=9ZO53qdn zHD~$XCS6!=6RVJptU(DqTOwuNi6v=`N1DIzx)GIl+i<@9v9JyQ#73WpzGuIA#&XLV zz=mr%MJIZ^==buv@c3KfXfSEzTiz&?2&Q+zAv^_fRya$l5#d)CfppS(nWTNQ)TGg3#y-a-g-VU= zQ8~V4D$-eRbdxWPqBk+;(N@4grvEIwktyP$=UF?MclAWqhGc zHMTtVnVW!*#iFNyd3Og}H%cTTJ*@9usm1W-_>7`_cG9~1d`n&m#DM<+0r~+20=Q(j zLS$rWH{~ZdGaiUrkL(`WnZTK6;&ExoF^{r~UV_A5Hj@kU3#Y4YY9w2oL*G!2t9|2* zmV$3vL2tjv$)XPbmP#}F?6({)zXrCWjPKdk!ml&ecsFBph!eXF@pJ&GA64qrXmmaFln=HuIYjIVV|7h;@F0 zF=q%G0Qhc1cze)&<_A||Q@V)10K=<-I!N!an!5rkR@j#Cm>>A}gT2}_9BxMo>{uVE z7*w-ne`LNUm2$8{R@3W~sW+2MUiLHSmSh zIEb&n4^@ZV#t&mxQ=l(Yt$z4=t>@NrR*Pz@xAd*n9|-Ke`aYHoF;GYV(s{Q^x*fNr zL~-V3aj-|UjkF^>vI?}!iDz{eEn45&?fnK}sqGfx%Bf?8jyGcjr*E*vKXBq2OF?|A@3fNdYObOG(3at7|jQ|9P!n5Ve#jzbOOK-n^#3WY@t~^*Nb9I zPB6zT(Q0k!dO`&fwBQW0VOOEZN)_Kye~-3DSQIK-CZ+SSomsEekRIh-IUn?9;1_vw zFq}Nwm>k7a@uSSblI?75wu&?!Wff(j`F)q8k!lURlHl_*`~fp_3(5JE;3tsTIC`xs z!3XtJMN3FAVOuv2dXw<%aaLS;#o;-2jeV^1V|OJb;#I^S4VNCpEn~xF3H}XE-%ewI zhUyRTQm{J>JL0;k)}%9U`d&c))b;;#Iq7)9w2DB+QOAZkZM>Qt_GvoF)eURw<@5}P zvRnTf+?ulL=4$a-3iO8T&=#F?)BMZOqsGlR!lazEw&p6?6Axc>&P@OZG&v44aGfaW zQETaTxk>hA&E~IxV-zAVAkAqHg?8a_q{h4dx{4~&-^6=|2tABS)0cp>3(|73BpD!7kUp}9SZ_}O}6su$W7w~Cw!7V+Pq+YW;Tu%GBB@AEUysVoz2KW9D zsLXy>7_VScX0Ta9X-O&TD2KhswLuztKZyL6UoU^tMp`tHcE3ERXY7sO`uzVA;(+kJ z>-;HI0j=fn)KVyxm=o!j^Djm{`YpSsr|!bMnfEeXg-TD*)sFt`rLYN*#T45$>=?zi7aypUZ=w@?Tm$)g|5 z(l1Tm+C1s(*Jd}ZtO7#z9y&+cD7dx5AKDmXN6OO>0tx|@U+zdgtvFsY;G)?e>}ZqS z6jDQ8SSoi`A=_#_>+I@$2iJOdxSRhBjCx6<><4(U=J2n8wLSN?;iJs03pgK-W zOGuzr$_z#|q#N~DI2%a)h{_fe$cxLdLBY#EJ}`xM+&;#h+eto|ub|_PFWZNjkB;s! z$}PNWBy6%MPz0OtU=jnxxJ z%wkCo4w8j?Kz5aWKP@1F_$8j608AQ>3I}@ZL&y*yL8v~GLA{vHl|Le#sU={liW}=D+A#ARB*o|xtY)nSB$u#qK z^qSbOFzeIVqHM))z!1)mJ#pNL1qykc?GcOf8?ph%Iqr8z8vFU~G${LI*}ez&<35aZ zHjFgC4KNcQ6miNbM=+VF_l8R1BLFDckN}G@kB7w256Gj&g|uA|!BF8;-EsF%BG+y0 z2&kjv)X+@Mau;SQ$`&$ZWJA;z&D4AwMHW*qWdSp+W%h6#Zs?+NkKU=uVVHbtvJ*#E zwkD+*$e1caBx^bB*KSo*#dLHfnl;gioP=t-LF&zswQp!7k&V>7vJG_)dJco2bEMh$ zFud(2a^_vy3Rw{&+OQ;@Q5H2-xsWtDnTwps!+Ar%l)2xv5O@;LJ6s^aENu&2~7yN!aB735blJDwMKzqT=aYW3#ITY5U> z^v3tBlS&6#x9k)Qn9ITQdAI()3vv@(du0jPJ8d!yjDIlNvj!9-`CwSbxGB6bA?a%i zCx+F^bf&g~2zhJw_1b2?ZQaxxily4ye3i%|!yI^0!}I-@l41{t%>G38LM};fhW@u} zG2+Q>MKU}I9)ptk5)};$Jx`2{&p&t1a5%38LS@z;j1tDiuWLh9XkfCG6!3M_8{k=O z$Tut9HK>*w#VY64aK=go*1@Oc{E{}@&|`a^pQTh>i7*f)OZ(2&q1DVTFV(?acboQJ zN1u3iFCKn1Ogckf1}l@wS)jgE_6L1gfEEaloD#}%UUQD<+~G(sdQ3cCTZOKKUY1eR zg#7>53cFAfsv3Ey8rx9_{%>aW&7gF&yQP=F9mfxcO)c!uE7K3nw8&_&xbtHYyF7*b zmw6^;8+OC-#a0;M$)(-7vb%gWwEy)$(Oc#n_9i%CT{I7}B3RHk{(K{igOq?|J1ebB zgEpYkGVv=;c_M}^F-Eug9Vk_s4I{$Qo^SLK{AV*rqP{Bxp63pR6VaRy5$i1jGa(7Q z9&aBn9lIuI#!??t*c-h1c=9KPtg^Okt=%RohIn>C%=1_mnr~aq? zIUI*Y4wj(BCV$G_Ag4Ll?n0wfs0b^s7rgPPvOKA@KMRnB5qm?HUfDyRRFt`~K7T%+ zb?vz0g7vdA)Wmz97ObDlgilZbXe>t%Ojx2N=Nkil(EX<4?Vt46z7AB z{fJg`{`|RObFoGU+yaOhgGXQ_?b`l$N(ma-lIiX|wdH`dNNwYr&r^mVE0$1U-a z>(4)rPW?}wPL;y^T212_C62(nJVeD-BUcfZO*;F9tZPqdX+EMucgaoCQP+om2FbSE z3+9ZM(Z?jJD&8kVw;#UzVE+cBkD&lGeSaMg&y22o!~D0_FHY#P!V4O z6@_DI!JyT5iWEr}I*qi99%#t6-FCSCB%3Xz+`x~W=kz(9RlIILMt+kkAAT((6CXIQ zM_}zvR$pzgyMk*x;imLm-hGSX7e91sy(Ra}hTeYXWg3=r{Z{147}DNwd!WnH z;PZD)EV|RJgsHy1;!_3WkT1J%;z4YrWdV7ak;I%k4tt;P=ef zCtbrwh-FUVKWyW|vW_ya`^P%xs;d5~7_xXw5{|=V3P$PW9p>=0f@pOLebQBAbBJBH z6A^oq&`HHUqgKZKgwWFcfZCK1KS)p&Gt$`ilCDNFz!Oi~I2mp-> zbK=EB##3QBZvbu(8SZ=P z*)g=8cYlDXOz8B1fuig7Cus=3Jjka*y?L>#>sj-aQ{F-yKD+*;u{~v9OqTTz(&0bN zl*Z@?KHndH86RMyV( zvFhReXR^#a+Cd|sisdIcwYEdplv#N_ZBy6x)6723w7Ma{C z$hd`SGbyRNF;J+6L}^+ar8Tv)SyX*B3m#qIg{`h)mpn!OJf1z^Se#80*rgO1B zuHif(o{g3Mf9$;nR8wiYHjJWTgQ$QgEh?j^2vHEJCYC`|L_~xj3K39HIwBGvBq{?) zjb#)CAtE9wB_d5)BHaNYC?)g|kPebiLP*(uPjGacIrE-%{&Uvan;XA=ElW@QB4+P=#1i4425nMfhcZ>ICH!?5d zJXs!(GJ0u?h6m^s_ajiBwxvkl>Ga)s_fBAynP9Tge?lO?8p{68dB0aHT!oXVm?}9w z*=&?xUF~M!3{VjYpw_wgN*?=O=tDkIaG*J!?`mdCS<~#f)ckpeceH^jP$ad;00-pD z1;UsM@5qCZ&AT7H<}!wRkb8@khlgm5$#8!#jPLxM~XqOw_hc2o|h=oY|VvPkdD>$PpvOpS8sW%zA_pY^iGthCQ zaY1`~^auX)H-g`$c}Q3QhdGk z>Ym6CtFFLlQz97@{%2OWJE?pMjKsd*}6-2DkRgn*Bc$;4+{?V~o=v%E9SAu~gfym#;0Il8n*-$ra~G63Lij^wfUX;4T%HBwF3|GZxSrZloO?w+~G76Q^0m= zM{u{O(}Jg+g^!DUQ(rPhA~`6DwpVkeq#z5@9B=`42qm8FC$}9~cC@z9P2JGoX+}w5 zMnXbd&w{e&8Rs-f(SdIa;mt$aRkv(H`-%92PuH)j!-2c8m@SO(K)IQ<>YOb8c!f3& zTaPoi%2tjk=%nRCNcE|qQ{uoKTpaXCYVGaN#omrP(^kXI*Th6YZd5?k%rcKhwfb;g zin2+Sad(C(;@n@2QU;i}Q*D8cDWT^b`Z<+By&D1DIc7k_v``a0xd>3|-!saw;u4?Z z&a(F0uVpn>%9T!>Y_c!b_U(l8{2s93NkY1SO$L7cjU9wiTspL7IKZ=v5MB7lHL3OX z1tvp!6{PmgdgwOE- z`5gTl1KlH?p;pQT0!cu~scii%5e-13kC(jcX+RGoor#+Rc`s?ODnE0<9a#ieB@l+E zUl1-~lTXn&I-z6lblPLhZ|%ChRAq_7F780qugOPj@1;2}0Pi4!tBq{Km!h%;p7Ly` z!PK&K%KqeAGesc0*uclLV$>#ykmMU-ln3=9yaS7EpF4;(W~vH~FICwv5({U8 zpskt;5-l`Hjcry1I^t5t3qs6$QERae;!O-T0z@NHF;^9sE_(4#cT5S!1lI8hz-J0# z3|d>GDN8xH5bBp`_q8>Tm3-c%=;0&WOUa#VwXWS&8R*Q~H%%Vf*Tdl;aN#o z2<4}0WzS-r9ntiHJXPW4sPlb749=01ABoGI#u}b?O-rs5iNM7h-~8L)cgee@ukTxR z(<=bV6$lBXHE@=Bky*P|A0?J`w=C`k18c#|fP7OdCP(DSV9J0Zfx+X+fdLud#?O7k zt!LH(hzw?-;l9{Jm8R;}8RA;&SN6#uuqDmS%{=gi?dO+1pdi5xks*|B(ExBVOjH{1 zABRV%%LHV}*c(9fO5d2IkJ!XkVA`Ov-S+X|c1R4ac>9~a z=PY*c-Ck7x?cvqJM6=07Cx4T+$4OOyJY5r+$mtJHv^a3I@SRX`b4HndkG2`A*qiFr<%1T zQO95JuWPPdY|dq4RPar3mL0i`%(;Zg%8!w&mS+gK+#^Uv5d-*Xx`GRJ_^m^rz2B@u zf%Cd0x+SXz6K<2dfRxLv0sU{zlTB(P09wg_B+c0aMVd7B!CtFaX3?ILMv39l7+X@B zgDgD!K5-mpwGrQYn_yY4-u8)_ZzfR0u!A|7?gxR#FEzy?mig7@+B5)G%Fz?b^t}?# z&JAP`fMe6sH4zTaJx+dxE$SWQRF`8Gkf!Tm&l5aGg6bvC;Ps}S4MGpmql050*j^OK zh4WYR^2_kjVJF#kJG)g{6vhifgUpGm2py|(XO4fq#MFG~0MD=T*ybp6<%t&|n?5$! z!)U`WpC$Cr7I6KJuoz(A)Z}TKl?x_D2=deNi)E*O+ngn$Z#}m3xAte$M<7-~$O&Yv zp-$2|6w?~Fw|PB9p6eu7+3w3;`&=uM%$r>={P39&IE=|>-|L1i1O~Td>5J)w!U8LZuPU{cpb1gz&MHgZWtJ*b4dx&t9ny}8d|Z5 zU+$uCC^txAOfA)x01#L>(*x1E{b%7qf4Awz7ce5r`3SZ*LCPe0Z0>M*O zpUKaztV4&cyEeO(&UEGcHnI;sSwlT|b8hR&#rj1otoDIDha|!GvVHQ0&-InUNX7oa zD2ob7?F1KO@>@@|=PAI5DE=(%Vqqet%F6M2YUdzyAQ>wBw2as=OYVY${yOOjq++AM z=P~0_KuW}jJpM7V&e!!a5^X04Kr3sln2C^5wUU!zO%|d+8Ly|4%2nGw+HRKs;-7;} zc_VAZJ%1r*wjz|4JTT*gMl3e*Y z(g~-|>7c?$Mul=8r013k(Ok3jbD`^h7md*E>b@X_8z1m)A zdbuBU+N2FVw8O--O9}lCc+K!P2!BU}X6Yp2bT$eW@khKzu`Z&!g-OVHa%TJos#z6P z4%O2@E)j)|Iv{KmKEWF~-y#$~$s$!dIh8Pr;4(uxBBTxjP?Y5Lw)ZTtQhp#98{hT`pgh)JJTaI4*xbw8n0>v?g^Nq(%&KCg#Ra!@=+h`e!rc>0h?Vwndbls2Kif z-PyCRJ`X|X0h1KyCkU$o#3@#-g-{z|<=>+3^XuOxg zs~{EA!-TgnI7GN(i{S~pJooywu1mdIuW7pDzEHB#+%EcSs12n1VK-3uzVSLlLum!q z{ktS??w(m2kaJFImsj%MCA&0?bMfc!AK@$)vnazI@>5LXifB}Y)pkucoawS$ia-Os z0aCWax~_Q8g9@HVeg@Pd51y9@V<+D3Gu_})csvP^wVagFaDSjls*Y=CjALpCN`UmH z2(zf?g=g)CAkepx!pKLtu|Qg?1J<9~xLF9idv{uJFti2WJ=v*%XwKV%2>ogfWgWR> zbBpq<`vs}#(1?x$Xrtod(Br@Y(& z=P!{|=VYP7r0NJF4fPZjgULmdW7^UV@|`PS@>u7xJc(#t?qoHoG=^|gPy)IZdxjV= zY=FB7P+1Fb$nGsA<{@n5jLB9~U?8EG!Raj9o7PME1;z3l9Jk~jb|w0zaousd>E(zt zZuN=Utvr~1FZCcuZh_8Q7!y;rxN*iaQh8GgQgsAOwbbylhcFHF7fYbmO*iZ?q*`i@cnSGfUZnvnh zswKCm7kV3TrppgL!)T#C-P@+k_8b>2GmR^A`h!~ z4O&A=3Gz$E-ltXQ`?ZgeRVaC$g)GJ3Idl(s90VAmv8pVSTzWZG25V5gcDq&{i{OYM zy~Pg#s&I6@9EoKHsQx)8n#(VCFX2`)bN32%dXTe$BIm93jwm0tyA_093Hk${PiXD- zB=<9^?t~6M=0V~8*(wmdxH6R+{ku@_(D`i~;VL@Tl+w zFctk1*9hWwc(k{q4)|K_R{G89K8}(hJTU$`2#MS_#tvh^b8fysR+-1ZdsP}5A5e{mYC$LGsTp=iN?Pd?P z0IH;uA3Pg6x@|hipFc@t3HKs%xv?P5(FJ1WHbWL4DI~=ZoTs7ghI@W+2{@P6_)2e2 zHFSnZo+u<_lDm+5hu3MS5oK>A-Q?bG4yiPOWeGB%DiZ6IXq2oeY8_CP22V!_?2V0{ zHQiW)iqy3(u(Qf}U4`h8!7-p%B@W?~xEU$xu@!X)E3R|8&Kf%nUw4&}_1@lGe=u@B zn|}g&i;*C>buDwlZ^B9&u@?;uZdZnn)2M6u*LYqBRqQ84vh;T5R3vEC?#)p3b%2!`95IiZL&vmF$~P1Puy}> zvE#IBgh%N#9{|wrjRmI7m2l(1-DrjyflJwV_4YHaK~*`FBtL8>+%~CJA2zm{?;#L3 z%f1LL<(5AqlS6Gr;d6)s^}9gL`7kdoP>UBfB?+3z|3p-QwgniS6}|g8XUJSPck1+< zkor4U#+p*f5ENT%+P7D=w9u?0*Y+S7V@J=ZYz)D?@1>mM^1)rn6Fwj~>stC^!rRf| zh^u{Li3*PC*)YD}d(6WnRM-^^SH*ZdoXxOyt!0GbH64<-OjN{;=O*JVXmPw1J+T7$ zhwR8IccK!uuS{7Y3+UCY9X7?#i7#S9BdFXgZ1mQXY9nth6z!q9leqdORistZB^D;! zjZ7-{fSWgQJmG@Tz-#3F&QeeA!?aJNHgPb!jtxpTwQMa5wrnb=>V^GF7dTr_G&{8K zJusGL!dK)rL>mf{d?!pKIETxj=~ueUdavfxCP16r+Qi3QmcWGhn)GfPsSroz-n9mM z0in5q0dh@y+dfRqOFb*qH4{Mj3(srU^Q62Hnvi0n2XjyJ= zX?o`+=ZeJDjr;Z_?)*^IV)lI0jX;aHYvaQ}So$6%ix;~j?{SxHV0yQ=`$mn7T_|7q z^<(FCk3IpONPC)KhCFmpvp$y%8+QZ>f2r^h%B3#|xaCWqvyKf$+b2dvrz#__CT{HA+9#8fZou&eGI@jG1SdYK>$}f7^t4j}CEXq`M&(Qe1GRD6b<`}3 zx=w&#qmB545W)UrY(yQQKl33jHgfKTHkZgIL6ZBq*PYko1H%!HTumR}^**30q&}t` zn$x1!BSjASQizUOHbc&B6YPRMg6&bKfXM}LaUwFAkKUCe2sp^gTt7w|F0b3|{|kL; zA>cUeCasW(+>7F*HJ0{7%Zyfo&~t?G2fYh(ql)^@r2LNptF@#(XmbeI> z>s+x3+0_#yT{Z_&sa>w33+y212cYtHnQ>)|XMWCi9zl<51I@A(qLCKeOBbl^$zUHm zd!edpBeL2dmEw{5)*cKrT9i9y!1p1PdLaSWXWtaF8PP*pHu6h5Op@zco0t6P{8{O{ zUb>1>KoeSG&I`oA;+uFptfW_fziQ$9$bw}zr}xvFmq z-2ysP^}D7WrmWqf9(C?HJY8WexM+R0b`AKJpXKU8lU|~J0`}-3*n{qjC`fNa-!BRY z{wG(gLYa#e*bj{fg;hzPt0CJkFm1Gp97d4bjrm1cs!?FT4AL=WLBY=uZR0z}rI)Rn z7XKpF;+kS*-ku0oN^2_X@!|&MgArOU9F&s*NM=Ur#6NQm=-`$={)1s)Z{|eIqnLloJlgS{dGxQDBhY^X zDsjOFD6`|sz77cEL|1{#(HF7#)Y19m`RMo6|EQsgf7Mz4gy)YyqpHI5`io*uqMJOv zw`(t)&rE1V==|F@)`&@J`(2JHOLd&U>VQ^F+_Y0NTZ0YC4EX@2O6+m5c3zaTNVwoP{EBK>$BYdyo=!B-?t7r=8qZ{h!o_0-N%ot?2>wG_v+&6=1$cd@hIbTHdrmFF7DNuKgK) zedB{S(F@;IjOi;aP|I&d1qZiBERL6>V;ky8L=MmuSWg831AWuA?Kn zVZ_-)Me^$!oLgD#F{3?1lVz2^35;8>^?29q&evulrGzg)*a0Can3RC9F#Kj~ZU`X* zfA3fC`<5WWSomUkonfEk&9($fnTWSB+k7ym3r2x95lQFYw37epXa5cBGOr~?ocGwr z%SSBy0&Xvb#?OyXHfOUY@xn5a4M@L2AFK+G0!pd8k-5&k@YkIMnAIwGWn;>j&7Wu| ziksA@Kh?U!kM>eXgiGj8{`4p{w*`}}^;?F+ z_TH^Rqf$ZiQkUI8IRVySrsdfxeEMP>+pQueD^a(c6U`Ln_%Fn{f}UydSX8BY|ya!It1WT)Qma zq+IA)iL+-Pn5ts1=R}(ubDgadweHcuE1FY%yE;t?JxZuZNYxHYgpi{TzHjl#9UdsT z2vEUvt||5j4Etd_+nHCvb#lKSS1#wjLV#@xL?g`)QD-QxZI;H{?{1t?((<|x*LW1roK7H)MaGF4&PMLvz$@xiQ7n|H{p z2fBbcYmzn5!*!N!nnRm$QRyxR3L{}{)YDC_!=vg8>BsrWQ)weFQK8g*rCfvigxaZ= zvsxh|xGsDCHe0gAnfs{Mg{lFwo>L#AyT|P~u<~P(k`1G0wL=Us(0Y75k$Zu!&jBP2 zfWPcAVs7#Z!GRg5EFH+-p*EWd3b>q8&GE^wddj0xc;)^>WYzUdJLB+S#{^dQD(-9r zDjUjvMpqDVbL^oE?YV`4J+!3U3nt^XeZ(C=VX60UcHTX4E?jx4e_x;OenM?#p2f8dGJ@%HlM4 z-Lk8-IP{r67G4l0J4jfA+-rk%7OrJ178aoaafUE?!tlT@=LU4_hHF zy_Jv_QLlTarq$;;n@}lqtZ;ZU@y*UqmsC5lv8lL&NKNa(@XqfB2fUa(zVDlyzpN)Q zN4pNwPdRQgP|4ih?-}2oKFkXmNU=-kLA1q8REYZyza_h}$fX&mvg9K8e#}#^!4UsM zhk{goPGIYCg^FJ7K;^|u*fqJtO|oOktAueoaz52n*V!f6+jI7}r^^c)H?tbmYV++r zkSv3l#TxMU<&8K==hSJ7GaXk`#o{p)N2>-QAE$H@{`2vChU;_o3MxS)N&Z!>ez2V0iD_e@WbbMB<{phC@a&PS^gisjd4r3;uhLSNB#|k76W^IVJ=uLw1T9h1_6=y$hk#5GR@t+JOG}CD+=%rg3UjC9j68In>BHjPCi>RgdRl{F(lB?2_xWh`OiB^kDS-x@}=18qGOIZ?Xquf8|i3|9>-`9%B{OUfPs;Yff!IEt2pj^08!0}#~Y;%V}6K%5mYS~WbiAiulBExsZuTeCuVMyhV7e~ZGJF`~_rYnQi@ z8(?1FFGp48MD>b&E8i)-Sb6P>*ebzjHM9rkUdYlEB#XBfPeAg8Qy-~1^@c}kCOgs1 zqlrtjZnEA4t)JP#Ne)EUl2|P|APHgJO@|2%t&Ds_Z8^4WX5EJA-93KGr!c{oRkWxp z_dL4PJ}#KsPj1kR>VQ48zrQ8){miR3DRzeM?ugc=MgQNGm*6^}pf;4&IboA4Tkz{X zw)YNGET7{p_3|+imzInS=UvC_z}a$({QH#7ZjahJq&5X<_Py6I31!SC5LNcnCI4dQ zM5-i5qwO@B7h1E@8qg1fl-PN#LH;BdHLM)Kl09#tG^!mFH~;8!W01dxmq${EXFz6U zC31ls7DNNj2-P7$OHA%KOc|QJDo=Q@V@1UyzhD8}zt@aAMaFXN`MRfvNyD-ChLjg` zFQjsHj$4l#m-sHguE2aWRAO4m0VvkRYG^WPwg4ryLtn^Aao74ew^4$pAHq{??ld>T z7p;4mPE6}KmkccOb5C6{kC;Nlw^JjFkJclzo~ixv4>{-oFmV{ z=o76s-zE8X_w67C1?DnbrCf8Y!vW$4bWl5JAFUwGt!hRR!cko?67)kV1VW(HM7fb! zLL0JJ1>AW*;oZ?`q9ox{&|#jG{1>qRWW;=hmHHaiyzrYj`+ax?fQJLN{%WS3!BikR z3*XF`TqjVg#(TOz>U|S)a7&b0J)yh&n|%g`ntUT>@LG@ofBVWI-?7tk1bH^2%>vrz zJB9)j#~hm27qNE{;XIBBG$P^$=2XA@YpL~*^ZmOQi1oCfA`R`GnHd|pY`tVGsjFPQ zhvY5J9y>6uNCzzp@)UJjY>_2@dGt#IbOk$h9rN{BEq7=t>624ij#t){CZvHoTg;Bh zlszPKHB;f+b&~svNA)Y6fKoUsC{l{S-iQAXdHbub1G3_5284wZEAVe7!??()ia1*9 z*yym?FK{q!X3ye&x=!~K3P1Rbj%k!%7I&UbK}=O*frak15W>>yAmmS7yi@TVf<5wUzwD;QQi#y9xj3 z`RmOIRVhSOy&*&^>nX4OxGrLJ!gq0FPD^~0qxK}dnjCJ@CwXeSu(@ZsfKPmL`$BwpLX9Ikhd|$y;&L?}R`{=g7)a`N z07=?!HUDU#{s6ui`iPp;r6+*RHAKxJ3SzVeF~H%K@+JwQ)8MxTF%$Mvf#%;1bgl6f zfAdaWALj~yDVc&s2<;J98p_#hPKM4VAGCW$Ex>9)M!SPxZJMOni+6!yo>9gA(Xl7; z=>ahKkSl89(^ERM9}E_p z7la^lU<<1qjRjgt(F8-FT9n??K+?*}+qmY7m`-jWbu7s?82`Ryflo^zVF6C-HS1@> zP%_ztmnq5W(5m%8rPEtyF5^hjp%qPi-#2VT_!)ljyKIX{nNCQ&hv)hULQ%`v zjQKF~2TjBFgcIIDFXo(lAkL4niIed|VtIa?Q$Q&x1;PM>W*_4<7*Iai3g#w~#}fhK z^R}$?j38Fn3cRh{3?fp7NU^Xki{YKq&m2S^GORYIBUQ!PmLlk@s2xO!Q! zX;92ryKN_kTDpjKMDIigee5cZPydC{OkU*zZ?~a!YzMg{OqHTp#hXX8wWD;DTD2o3 zJK|4C=sAnuVDara0(cLfw#F6ZnEjFh7ipFI*&G9X9;t^^hTtBW4k;{NPw~i|?Nlgz zlRhfzC(s(wbc-L=&%#R!RD(-7+q}K5b*+x|v3rn~yH93&h~jcD+b2}ACXOU|pLriH zm4iB3X0LLiwvF9;w>6{dyCVl3)$G*u*a8sygb)T10b9|_d-sz&FF-7 z;MAVAuW^XS<&5#UKkxYe zSS0&D?LC%((2aD_!?QCxktV{YgiqdNec)<*Abj^sAjLk^oPrfI(#C6VzI5s zyPdw`s{Ulh{$q|rGit}*I1)7Yaj1qgDNeQ*(dq>LAojxSx2VZYPw-UWeibH7n;QjX zjfDIi;!7fK>*JMmt|#R^5zrR#qV;hq2SrUoe)r>KEz8>|n^rZ~LHv~KYP6xf#@mls|Y z-&==8gPx8ZjNnU8^9J^ge&WVQvL32S1x#4fRXMU+FZe4NS22icO!D-Z6FPp{Qy`_c zA54+mlEta5(Uv^OKbi&%l_04~(J`VvYfoC%T&7Qgp$X7u#Q6g>Zj{f)0ZpbqcewJm z$%?*+0@qRqUd-MyuiVO+66F_Ic7OvBSFLW1T7+LgDARtXUe{X3UcaTpVb|>(FEw6# zIeuY`4TX9WQ|!#}>NcCXFy6M|69D6pTVXH%LqXB+BLV+M|1Fu&U>N}(PSrX|{6_fh zI0PWZRY1o{v_Bo#q4G!0;I&KjCp|j9^;_{2R8gBJKXfUd@ z(9U;`tgrdyd?NJ|;gld-4{&pR-;ZEdQkEN#3`L;_;hj`T7#Ahap7@*41N!$vk3~I} zXFjjO`|6?8eHd#1L_E7#OD%B0S=}+`=2!JaLu=Xx-&2(Zr-dcGT}RMQt}XT-tQ)t% z?*z=axpD7-(&Yw*XHjjctSaDl4@6s+O_qx~g0U zNg)s%`pCW)6wGwraVhR(xv*V0RXUb{t`G*1+{<-03w)eK6Nh*w`16dOzpLK`5d|_) zH6=q%9jnP}xe4q;v!!-B;ZsaIW$#D!lbxvi%*(xOmm5WU(_#0C#d}8+S%{eNV&~+H zCN~+sC53AajeIWc+ZYj+_hefC?nsyvP~f0MFt0>KT4gyn7ZVMl6>B=*SAwQCt*y~# z;!d-v$5;$T{G{xsKCSdE3f#%8+K8$HH;Ny29eJ_Cyq{t|lL@Pa!*`Qbq`vPcsl?6_ zQ5QRCt2B1-&<|XcHxxHf`zEQfy~K5!NLe-cpK*CQ;e{s*5I5n92odr1IUe&5bt|Wo zAWFgHSHNYXs(w&Dg_s2bts-^|xuDSe`rBT%XRH0KL+V3O3>X*xEmT9@AS^~P0sQ@F zVSmx`My@H#uKI0&?z-PRnuiY8WC=SF_Lz@~;>?$|<1qk$zl#4pHf$|?wmE;ZrP#?n zQODc3amzm;Fzz1$pa09>1x+2=UMYIGkS+d+`aRQ8BFDK6bVyb4C~yIp^#F)}JJ)ei zaa1_={YHWpa~D4ow;Pbo{@_~p5B}(M%p#T$-aR8G@wZq&<7-^DKA}9F_^uLu*Ym4p z$YR2@T!lJ4!Ur`5%?30xa5DM1EaXo|(j(H0X>5f&xq}r{=FS%C&^8_jVwQ!1Mu+`o zAG5z+3Zw@$RL-Jw2b@TPE%J2XV${)D&o+yb#nkBN!4%v$$Z<5lU;7EJyMp|PH#a}A zExVCffXZ+QS||l#^k304Oy1*f-s6b?b3nBK-}ysQgoF4)XJIOfgMd!vrS?Ch{aGio z%sc1$hJQ$l5b@ug9BLj`0{Z!s8GRBndkP6GVcy=qYeiV7gWBxR7?*ucaOUbo2dD^Z zrl{=*=w}X(UdIj-M7-oFVi~hnair&9*c~W7yg&@&LC!|${+QtQpET0tN5-j89S7cy z)Fh`R>n@~R5RF^>q=h-=JV+iTF7*;TG^I6TU4>0?qCDQ88cuc)!z1C;x%0P(>6(+JEvi3BmKPJmFu;#b9 z=80lWJz2I{7_`$>G;ZcWO2C#dzGc_x%of}72Kvw(DoW2zO*lB~T=Gk=+wOei-L4~r z#e1qblq~zYON4SuYd*aZ#I%Rr5eA1r;?3PYFtJc8&Z{eeZ9;4Bt9WJLDu%;^ZBqa+RjEXe z#P4x|Ho!HWrcKLMkNmDDfeR)w;&WGZ467V+Gil=Mf6P@~8irsZby{Dbavhs-V_QiS zO;lzEPMGM2B?sTavqJ`NR`V_dqOVhy4?#=J?)mAY;BS{BWd&D1q;j z`c*XLwoPIr>0A8s73z;G{lWQbrMgVat;EarQ9OIe+7El`s~#CJ27nu@+FbuRD@XzP_j!*_{%{W`WWalH+P93bH0dqwh;6A_*~AT zcQcvRPtt_cj+x|fh>@ZAPUGL60^te7=Q{3gy4$J&yyf{}ChPFyK5*$P2<{QX?Z1sl z`u=<#c#db!7k4R&6#(q)7=*+!_kygD0{hHF-JooaLjK z){lQHM1*=DVWwXK86p1unT_98RP@{uG3btnTfW({aWnL&r7?1IFk>5;tOx28F z&M>ao9DmX5jR_k>O3l25Bchn3ITkK_D)3|wg%Z_-I?qSUT}f9u$T?R`zE*{GCD{`} zjnj(l9R5|q0eghTv{}`!j?e9~3u8`%@=&41JpCTN{BVJb*@j)@#>qrj&Fg-C#9SOk;Y!Hlv-?63Y>L|8d|I0_Xp1nCefTOgCXf7w#Kr1N9Vugf&D}S}IcQ z%4ZGY&JvGKG1;@mGnvHw?3vh`=sn|aEbX<@mDP^QS}cw!&p%%u8nNKrlM=`0AW(Wd z{aDJP*E5`69;b2qa`U9lO`N^|3s=;n4Ed@s4QC`IB}IbBtj=#nklnWg+y78_1a*xo z^;4C0c)t;OT%iWoBg}kAPlXS-%>|hmap9aglPb%Zkch$Km=v(K{B2xgrQ`3IFi5HM4&3-9vKG=@%YkT_p;n*7mF6)0}@1dGo9FfBGuSuMPU|D!PXpH9{< zo2r`l1*zJN-AYKJ18-bXB^?dQA0n4#dL430-OidOHRadU4)?2{03w3JqcQ~WAS^0Kvx7PY+R9AN4EYq6d+hGzJH+Kb}DAf!Zq*fg=Mx_fMbR^v7F)i^K(J z4wnFWo7ymKIfig?_$VU;XVwFoQ@m2cH!f2gn&HO=&($N=z7(G0)yr2EA1N{t8;B4# z@aH+tWV#&ChwPKct1(3f87ouz`CW z6cUeTW1g~LYXBXF6Alm`@K(mIpK-G!X1DyBr>0tFw?TR1$CIDDi*hgN4Nzb0oVj<= zCxh6$_NmB>p1JmSZjkSM7wd=NLm!4gcdEO1?z$%;fY|z{8p+(S!F?+twu!&^jM6{* zvGMVeT|bOLShxqS?gfgig0qI&No?B|{8_MlfYHa?M4G+kO<|;~AC}j?j?1N~>QxFc zD?ecqlX_Rw9k#-Bh@uVN&6*O7m z%3+0~T(7>YNXby&{)V5%GHGJM=Z5=*De1zP;`jkh25KEPm~V2rSxrk6oOW-iN9APO zG}GRBx6;xbK&kWTE6{%MvK}n=Msihgu~dfQhfZEO=jw+g_n5L6o9TVnObe!Nb+8-l zCEB8BsT!Xc!b*eP`#`+S8-N|t6y?K*j=%bAKKy_B`HuhyTrB@EDC+mw`GQ;dLY=IDCD?ksr?h#Y_BlkaiSFsQvhZ znA2CKtbo${eki^kQ%rAUNeE)}F9anqQF9CFl@I_=+^#-G&N1BlMQno&6v{F}b$9Y1 znAIWHSFOD&=rKsx0VaBoxZMrApH+-zx?-e<-CeH~CGS=9h^ussTpt{>$?&yg^Fwx6 zs3HeKZ`bO*@2SZBC7v#_bfO^%KJxD?JSr(mq`w_fwEPa%-&yY`7?}-uB$h>{)2_ z2aXA4N1(irR!&&6H`rRyuk-`S{mvj}vbSIcSRV66-$>h&u$+CRul2M8wS}A4Z&OR2 zxNCOqNz}kUf=Sh1q{%E$W;Mr>xuJ~*OzA5Z(h+P#pAqT0W4qbjIvj&7-YXo8PMfmZ z$yQl*7teG(!P0UYg@xLD4s?#8UaH-@ZI>%8!@q8JTr15*B4lAP2v|fh%iAg9n(SkT zn%!`ATKbi}d-fvBIk#G_jLf1!!KA75VrOM3Bt2?1Mp@9^+$h)y(k?0i^!8D5Fz#sG zR);2URJpUAX@UdUDJVzENcJAn)R=E}_zZEvDc2_sDu^n0@)Un7cfXO0B}lUR7>SuT zA>@v~+7ZwvJBg}>ts|5jNvBhB0ql3I%oy)(iW#*D)$4<)@7~GY^hM0exRSkR7h!=c zQO^ne6aKQoRY6(H?z*h?Xr7{v@9moyU%)Z2uq$VyDqVYo3o>DS7$t6b1)O!q z73D^*#9?~TA!R`aVrF!Z=R@Lg)4S&!XPCALJh_ zt!eI31yoDLF?I~~CxY9&&&xnse#>D|xqB>OztQ^tAb|PrOyWP|&;IG6|K6#;js8{2 z2>*XX|8FyBiN;wFa8Oo^3EY!|UQd=dLo#cL!#w(4{*K?W5Af(&vH+ztdR^C9t>VJ& z)a|Mx5BEq&&YT(pv#GYK!}-(q@|BS9vTty2@+ z6E>(>f(?qf{~{PFD|BtRnxSAtoIz~^6G*lqQ$qjlqpYISjCrJAK{f1GxOw?i!_SCo zg~-H#;n+*cGvR&k=oXCB;hbqQ+By#m@pI-p2HL)gf{3{QWnLgy*W7zJ;H+-%MK4d7 z5NJo=gR@%pSWc1VjT|Nlq%*B(L;%q_?QQ%40Cv|NDnYzWL|_yyt?-^TbK#2gS=tvd zXWd!s{xkgCSxA9B;2h^fKv#?bPoAdJVxTR8O~ovyj5k-b%YYJ`)rr8VUFuEPmf;cG zuRUd4`9Ej$h2eAj+}|Nnlr^|fxmNPmG{mJ-k6DTFD=@@zJ>cS5i+z_<;J zJnGezost7ZbN^mb=keHk-2CvfLBdCr;xlMzx}7>3KNcTEG3{*r(!gIdsX1% z_KNHCwvI)xs%(Qh;C?D%Fl9ZDj!sR|H?nRoCjMe+=HZ&TLySD87=dBM9}?c?-CqpU z>n0c2rsyVT?XiUOF8%@+h1oK^>=rNASZ;2wH_{L|YOSygG#_69Ow|rCI%IxP ztQbU*OS9A?Q{9+tr3&iVsOVBdEskvcp^Ri5JmBDe=R~Pza}DO z2U?8#AG~+0bQlYi8>{SDlg6n{y4#)sHFqn^$3#}kj@ZdHpv&X7mr?FTvt5nkslly& zHc%99(<^}nOUd15Liq$WdvBOUpMogelFkh_1B7CAqQ;OpWxKI-yk|D@SK$Mky)fm8 zFs3Bqken==_!bOFBb4d%ZRbn;+(gK^()!t8CwUaU9DCbI&-vBpF`-H*n`&JaJ7gH4 zb8@Zt8*;PRV-+=8z%hBU@AJ}g1@6hi*61%{(pO4!(t{^64V~;m%hOt%2-Xpu!?h7Q z8D4Q=)d{L*eA*nCSah)j&aa*%!-ZZogu%(3JPy2IC_YvYrvsY=z(Z#8Zi0o?l`mpM z8)WjVP0klF8_oPLVu)K%N!VwW@BCkfXITCUjZ^MTQpfj$C_Rq%8Z)Dg*#tSX zQ;p-EcjcC+#tdYh2sl-<{pfq0&bis%iLw47o%@gESqTRL_{md%M|X`XpGd>i5RUfX zH{(`iv(s^OX0bEVrUL&(OpTE>>7Ot4Lc>jO5;1S6ZNrH8^&&=rcf)51;BsiXV^WBv z!qCldi5=4A9v)m&m0Y3%kTHFpDiZ;^<<_LOc_0DHD!mpZ>h7LdQKthLj*egrqOwkF zsA8Cj&sOMG+7pZ9+(*1;UMNd;jSiA-fNu7Ex#rIP9k=b~Qe3TgPYFdARNJX9xULa9 z3tAN7f>HZQ9a-FaS7vqtlP_^p2i>d;;zpnSh9|_0-*3x2C6#N(;g6a3hxn6-NR&0# zksDWx>(DQ|ki}^Yz3h;6>oHm7gRi;+!vxd)25vJ+3y0@aCf<%eV^Kh~utTxM`+^3; z7kdSS0*pE42HQ9a=pg4BVpR42VedV_no8HT;UJ@^l&FZH2pI%?s z&V2j7_WzwdXI~c@5>i&ydf%ts_x+qS^r%w>Q+W$UN*6GiGwDMf%wN%T{Euf$>{H&2 zncKb|CvSXDEY=1fxfnRkxf32|AU;e@%&&8FIyB}I{O1or~VrsLvz%1lyleZTNTe)Hv{ zqefjs`SoCYGPG7GKlsFbIrGw{xrvz}j{&^5l-D_+;iY-6*9oQVLNkMv?oFVM2ACI5 zJw&pVU1Qo8z;~X-kt|C;h?7+FBdjhi8=q#qYrI>OE*NTgf3W#9p^01NFHzjl4&y7J zSzkbTIZyCi=BrN{)UT#C@el&o%{NQ4+RD6~LAh`Ucx(N$c4L-@o*~NxI3*ZD=2*G) z`-zm8P6{L=&XUOYN9c+rNejf)M}=eABU0lqak+lNAzcHBU4XyWlYBy$Mkf^%gPkQm zz`+uWEr)1>QRDKY9b0ys+V>(wMp9e+3Y7blbR5EkgI`?oOg{hI!J!!p|CMt&^+I}e?Z*e+*3t=DMnsZZ* z{JDhc^XwbI?LMSD^+M2*EWUpj;9=xtE8$c+K%joiHDdXV7e|a#jp7Aqxw>&Oon@`| z5^g8Zq12rPl$^W|X37sAWTWnkNbdevZ_P*8u0k=gMxeL^sjgZ@#wQ*|Xi$T39@w%)ho9y2f)k56r=kTVB*&CPYwINFQI#vZylvFKe} z-e)op76F?PJg>;xMliMOA(#_$9dc{)uoWK6kGl2fNJfO2DSmcm_JSYU>daSrn#e_k z3~U79gAeV}%`rT1zl3+d8pfo1;6_wvvEbmtG#I(2EYZ6yAdCi?$DMj&K06s=8hdJZ zBJ)ec1&lgrI})-c#Cl#J)Y8Wm$%cy0fZd1kI|qHz0`CnI(|Z{s%CwcAn##2ir!_L` zc}IKOXBj1~gI@11)KTINW*;^`u>+HuxygnfA{Pl-T~H~Rs%6SEE*ZnH*95rqdMhEd z4MCSdSTDvu?jbD7Y2dbceZ-fvduLX>#A(t@&C(C|1?mdLELE662v2pL*}AbuZb z?wzVZICQiKV?>Hq_wiESNE!O@nR|+4zQiNXT)l3c1o(8^B%9;_5PDZ|2Rhejj$R^K zBFUMLj4&a=II;4M)yoYzz){vrdLA*m&r^D&-(PD z&0s}YFll4g;gd8K)(a`Nv(S33yXR?-_Ck-k)zd_@E68lAV{6Wa*e=ie2JaIry$ zYs~9vNQ_;`BMx=e>RS)ot6H@nV+w);Y+BIzyVJKIeA4*E;gPMj zt*~-OQg-Lmj}=oGbHrWVNkfvatbTC!WNW1M{%J^bCEW|={3lLbjlQgeOaUh0O04cd|=HE3cTHPjSAG( zRg7I|8)9B|JpP2k$}r-`gR2w{ufB4(07E;>e{w$1rol1O%rgRR%8bR9s8Y%cZyaCc z+3np-Eo(7ak|UxiQ4GUDIpb*koxlczKG>BtcakRn3YTBFT6n?n#MY*9%|jrRK14^? z0)w9yRRT5)_{|mQ_JFPJY1Hpij^=I5SfG@4wj{)5ZpcQC6;6WNX)E=#(Me07xs9pX zvW06>dRLz8!Ai~^QVwVQL@r3b!iDm@DbIQsE_t8EXo=tp_aX)`1DRu>)psO|gagjS z9ngwsTx3l(?%Bv8%#Cg>R(fZD5WAn#ff-PB8HgLLSyhkekLp0afp-LWmRxx(X8W=v zMH2RCJn9pp>BSKzR`HuG2+v&X8j!yisi{f8>?1B9Z3b}+C}*=8c>}#_HYbT@NG%;z zooS%7Yus9EgEuc=8-+OBKMcpuOww-gGu4yVbLH(!`9%Rn0&%W4Ls#ASoM=%hSIQ&X z($KwthUNg?Pu_=v06k*%am?|8`CcV-O2k@{U0}?Q2m1gSNF!&d zu_`h>%f|`*n)kuW$ihtNsn+Jw&NBEKYyEWc~uae#f6F33R?Szjce=|nlB1|J+4^+T)q)S z4XQ{4QMeqdbB5^7OVtNSdl41Poaed$BU9+;%FybhDAmyQmYWl`nNG(rCNNa`O9Eoi z;a|Q?>he&Q)N{fs5rEXS0=AAY6Dpck_0htlTLL-7fb})bRuU{Vh!BvjnJ!dYZ|`VJ zDR6Nr`tWV9V|)piW+^9(efOB`+r069Vf3$Q zZXFD6Xhgck&k1Gw22r%oq>wLgi~BVXZI zfQ8R(=P<^SdlYJ-6gp$rlMWv60w(k2f6yYWK=i**H~t2L4*WYXXbJTzf)`GpM{`!f z{)Q_4D_?^>iG-f~p0g^EhiRX2&0&azk#O6Pm{Co~%fLWmL*iw)6lk@s7$+>9K>1~N z{n}3jzd%c=3G#BsuQdSu-}!yo7i@ai+g5P>_~UfSEciZ~$-5od;;7Zb!EzGHNV;z3%Rv(?p1hibF5+9u!g$rd zI*tKAHdXt$)G}Fnw_O(7so`UEa1kjcHL!k%Hg0}jmFF45DDkxt-Kp99aQaHNb|Jp6NQqNWjc+)KVVb8c zeS$>n zPyCFlhuiBLDq1)`8;-B@HFtz1v=BzQmJT)?tPJbUX&|vrZ*T)Av*K2RA#cOmde+;M z&7J470CW5(ZaQ#$J)kF#2uZxV&}&ZtE!%u{54DLf#}*NiV><@-W^bf65CLyIEW!sG zuyp?-rS=%NV~y0}iL$EEBT*G8SYS~uZ#No^S^{YcAs>nUG=U=F-;4>RE!=s2B?)Cb(tlt{$-SrEJWnTE*t)k?GkTcTJuN@J6B-yk^&AudP= z)t0#dC%TtlBYM<`nvNxV3W#Q2d-9qqjuKQc5!y zAM`p{*>F$jXn9FY*Xj^r;9L0nq$zw&>0*>n!)oP%b-7 zHWtj)#ne1_eofo*Vc8n1v6q5qM8Il8VF9b-IkSQIAPgYY(7BtKs zd+w=4&vWTfczJg;dEI$wp3IeeeSdM?yjDZ$cl1C2q!KVBJ7ia@3xG2>=k|Mg0u}i)Xl;4R4;aiC@ zXk5@g-`F>H(EocH73V$_L2N4RYY4IQkQ$VEp)cv9Whs%ZUL@-5qsw>mX0HXyAE&FT zXeUutQw=fF9)J8CUuur7!{zuTuA;x?hmW=R`g!p9kcqf_b_du7*a$&9;ni)6$?R!B zzy2==q?`mw&NZ_Q9gpNjmdM{ju^Rtu}I)~IF6;Kkq8nkp-D$DiI~P4jE@?hX;Xb3w>RHu@AJ~?K$Lqk zI2k%8GK2BQ^X*dGc?z^uvSgA)U`LgvA2mpTg9#>8K{u;SN_<)l9_sO}G(LDrTxiae zgfPb9hm!{Y0=$g~T5ED|m;M3tjw=q*3=q9Dpq6DGCi5wwI?L$olFIRYA_+8P@R_I! zl?WP+{qpSDg)2bgcMI~|**Xhp_m+K@rha*28U@D*;H~@l$roC0K&*RErq+S}xpf1d zaDg7o7?7bV115_JHHKb6wCOdRKbjSiHmWw8yJEfnJbriD^{&c!nX$8LZNhy*eOG<0lcrd$`Kr+4$x!3 zH8!-5yxS+EoR~nFmXSeGXqL4y;96J%_|%U+Ddj}@X%@9Nv6%5ms$26Dc@4D|&!Sh@ zy&y*K$Dofv$Mduu3Vg^q&Kphw+g{e*)aQQw4gIlXB>TTOg_+)P?9D?hP3lO#Glf2t3b&DqS|hxrx-`BvmSjSTvCu{$GV9<2e+nTRC}n$^LRuY_&h;_XI=S8vikXfIC|vnsvAy7 zHR~T*SDQ1;(P-9DdCaHr0Vo)s!AC640a}>^1Tb=^W$E zhG@#^J-pV7f(`Gu8W$TuXEj%f>)^G|f$lZ21NqF3sel31f^8@1@o!u6Pn{gWXE4nd za1D(I1h~RSz8&ys^$QJ_?-IcD8EuwYOe;|&E(!B# zT8bT0TJLvOoEdqPzX^b$Vgd8w<)gnoUfq4#pCgMD#mD3pNDNDE9AR#^G0zhWy&9SXG-G#< z`=%msve_M%<}^B_OIFRo?_m@w+tLEI98e!-8w(6eiG0ej!eY-cl{0Ic<&5T#^jy4o zh%Cj_-gHaaRGqnp@z+6MoYDz204xv6X)27!fZH1aZ+P0h7+2dgUl?Qa1++2wfBi`J zRWB)Svg(l_F=WoeG&S#{afvIDDi8_9$E5X*AmNX=lKYGlQ=M1o>*r)HqCWI#nAhm# zavm0Te&%dW<4ftbMCQR`*{Fo0Q{-xwa)Mx88h7>zS7F8m>9VQo{z(R;(= z@^~{%C;k;W62w0sJ``4kr-(vAK}Uz3NUm;E)Ybg3QOr(>nO#K&!xdH2bFf{Ijz#}- zZ$%+#wV)=fCZ=Z7fP)PCQ;5P|WZ?KBQ1d*Ge+Oa622jbiG}$HgZQZT{sM&z)c7y7Y zN1H+GYS-8x=){QjDxU5LxV91S{eq@?Pomw5BRS|-Yf{~(^o=lfamdTu0h@?!2nr13 z12LR*J8fm5bjt|*PMzr-Qn--<_&zw14+99FV&8$QIfy99R~9V{BVGO>3+Ops<0Yht^KV#F%9`05>+!jdv2&?F-^ETu(n=ZK* ztF+x-Gb_1Ne6=^oV)sXt`pUHWtQdT_lmxT0ZXYt=IYg{mxbu$lsXf^#&95cWGpjZn z{~iS4>O#4IhLD;k--IA_v`xf;iX4r*$7>CDO@bc|c)}nzKgq^`Jpo~5pKsq6($X_* z94vF$3Vc1z{Q$$ABZtyd*!K&M8V(WJy4rkR<=WCGgRGjTj_CTV2X!`T$7t^F9 z{{1ow3+M&fg9SH_?g?V)UhC!xWOLpK5u|Xh&9TsHSlV(C*B16$nnI=Zb@VTQWw4e) ze|N_O0+BgTvubMAm!1O{87(Ph60TPL0WICF-b<_{%zz5&aa%gt$BujkScO82>*QE5 z`O(bI|Cp)Ag``pXy-qJMD^Fsy0poZdZr3=n47`V}w*^HT>1SO6Da9v401Mksli86`3qqpbccn&?g(HguWM?2_B}|7}+*Wiv2VMEZsHIPv8*ljWg7tVx`{# z$S+fuf)c{7Kd4`S1HYi$VMWAJXD$6bp9-kspvQ=UUUMJen{@$q506L6Zd7k)(FI^jXc>luq=lFOs{U3M;R)cXOyEhiF=>x;lJm{2aSHwCPP&mZ`X&M)Gfi3iEm#)UK&j^yV|>9vk|8o0ROn07 zm!-%rXGRcn<}k=h*Rr7Sh0qzsJ-E{GQT{#Atuo|EKM9mifT{ZOgXe$Bcl)%WpF9hC z-TRQ;xZq%Q{AAJyfh-cP+)c|d{XS4MFn`BD8MGrnFPc8@36Q4=8#{P6yKAXZLy@K^ zO)wO{psDH3IT)>p4=)nHtfcDxcso(h^d3{i*x zVa{1llhDQ`57}S;GA5Vqs0I#faW}xNH&I8C`v6p2Sl5Q z3q-S9$r2vmat^uJ>K^6G}cZ%oo_u|Z@u~{hq z-C942c}0s7JFyhY4rQ77#PWWs09={&UupMRG`P+G_@NNyzSlRv}L4nGCQON<*d|*uwcSRnM=@#e*(H5ep9rnnV!@tF#aXxd?hDwwWHH; zMS?Jn=SW}3Z>h{;9HdEiMH;Jh&}k9uR6!YV7!P&fUz*5&y;~s67(fB)fftEJvU9`q z9=550XQw@*M*Yl&^rNul1D7sGJm-!xCkbov4k>y<{rbB1_ z8sA3FcxkG4;mvAkUR%nCPve&LvzLGi_du8b%LV)JT8a&W0dM8{)xxqKk62lJvv>lf z5xB8jiD!?GblQ9T$3wAK`1E_ufeC3M<+l9lmi}FJ1V2aRk zR@>ya${Z0vwKQ-@y<7N^mPn7ZulypvtztWI)cZ#99_lOUUQNy2v-zYuhNwRz{qBdB9n6z=*LZxQFD32C zTNkmSlwFx*2H*DQ>JU%79}ij1ph%%Wu9J&wRTk)AAeLOZX=xXnw8MQT=BC@h+R|gc z#*H*Q{5^lS1hSQ!=xFW7em=D)UgK6LLW?xLqc*kkX8SpY!eHJ<0)bjwL%+&rN30}m zN;#gtc~f08I%1#*cR1@%X8pc0r)pKm$;W>h=al2xo#c@;+`hM`E^u7BfY?axKH~8p z&X!O65)3ylB$l;WfE;+`DD9FEGp@q^K+JQCj=23m`)9s8jjQGZS`GDVX(4WX=W#cQ z4Fka3_DNQw;p7IoT^219Q2;TqE4&R-w+wr34Ig+8yE*RbInT$&z*Q+S#;bT9Qg+5- zaOOL~RBFp;gKiV8cSZLMVY-fku4VfXcA*PrXqG(d%L9$$Oe$9?68K}%(JxrSz&7Q+ z=lPqZkvfHdl@%%S$|3HR&V!3RpY%YzEAxtZpQ*n=k`=e1xhi{iUlg^frN?g&XAe+w ziDm8iw8s8%+DstegUf|-Q)@>7>v55zbmyHTIq!(i(zQMUJbK4$QPboL?d+NL{Uwrg6Z`DS36ziX-Dr-w=MB$uq2xTd0&wk>0EvxWAi==$Mjq-(## zMIbuDkF3ZyS9~I5?9Vz(={aYeL67Kp|?Bb|B_?>`yN|ONH1CE#Z9}^H-KU zf~Ek+^#h?XMI0#~E>tqIAGFZk0tg4bQGnJxlB2S`lHXqVDCp+9Zk}>q56I4~v+N#G zJ0w+dp@@E>3eI)4_5eQ7Dqy35a@UI+%j@MChoc>fB<@~tJ1o#bdo>j2Tp-Nd0+ z?0>Cd&w+JBwdS5HC(drIe+MWLk<<8O%o66}_#u;=QBuls`yJyHy=B`1^UGN0c>={f zYx2q4f)1_Pwk|X%O03eN&vdni(mLlwx*E(_z`J4j8u=Cg1J*Uyyl1#>Din+?#Mch| z^t^lg$L#XEK>E8W02deHa;rZ88{t!I{XO5if543+Y&{tfu4e<2hD>S$__p#hAt=8CddxBfGbfYVk; zJx^3%Gp$5vkF+TsqpIkV^+7YqpUp$x8fnm&h{mbha*-Ib05RHx|++_E%^GY z-<{ugcJKWt**9Y#dHZWJ27dltij#@)q=f34?EnSwWi<8tuj>z!-2KTR-oHy6f0^U+ z>kI$(Zj^ediP8YLjuc9VzAPvpYP%v)WXB)jJcls*OYyOicwznbjJicBQxoFssU;TY-G zk6?fk=L`)P%*V6m&4XN)*fB`_-OD~Rf2=T1Y4V9st89sn+@Ql=fOvb7^Oqg4PtWF=i~N!ej;Ab1wH;YpoWUr3l2pPv^9i6sYzs4(av)sEvi?H z!EXvF3{7)9m~jYX9?*P9x;SZVCXxB`(TU?bFie13%cbQyoq}04jGY~7^8+urL*r+_ zIEu3Ypm%KX!B>#teo<*`J65TaPLXABF5)H6GgDRXr?uNF*T16iV$Mv(mzWw~5g(uc z|AhP1Khe&>t^An-Lg?AS1du4hwqllS3J+$RbQHM~qkZ?|u;m>m?MZf#0EZ?Vwd^0_ z?*u7Glh4|Uhj@64#ANyNf}%dp*7WpvYl`AS@;weC;$w!3phsL3zm(m=UU`4O#_X~6 z6o8yqp#tUjR2a|e38>KdYfJ8gNO&29gG_UqCnA20L+m#Yyh9zjgYBWBsHzA`>ihK z3ocrjww)i@pPUOl!WS$#r#Rd})-dd%)Aac%Sg&s$&7!M8Rr<{$FX)1*>o#Rrm7>l+YqqIOG@(<+{0%aoY ztp&1u=%`Q7Yas7-T|z`GGer&8iyp(egl;gk*j_qqYPv)fo{@!VC%`+H~@ci73 z=IUW2Cp!6*4{pe2w9~osYLiHD3UI3XnEU+Dv~s8kPx`sd%(4t*9w!cz&``YOanJ z##p>hh_xXIM%zohbsb>rHdj|^+9&9O?&`_H{@Xkd?_t^k>Y#^xe(yj)B2BI+3Y6tU ziRl>Ft$SnnNnzrwUs}EODIA$OT~YC@7=Yk=_}^vrhbTzaz_X8hXc%BbKMX#SuffNG zWAbEZ1sKmGW9s7f)>dRvJsrU}7-$tZZCAR;nDiG{coOf3wNU@Z%-CvOG7B5RtMzg*>kuZ4!gMreXHvOoXCsz3M18slky2sd!Q4>UGo9{z~$qJ151{2|alk>mCe6Bu8G8_8b<8VY~< zr2Oa5{uZA7=dArcsQu4c`)w-lpB?(U1WImE|6@GV7G|G z@4g^()r@bxyyD#k?!Y&0e8thbXuGegk$>hs?F|(SiP$}K36vF`>lmX?7zfja-9%SF zOe^6sBwBt3vgLQx)_+x?{JLQIuez_wn<=CwPlWhb_qBx)yB&TA7c^6#MS`%b_MH!gE zVz(IdE57_#;jC#_V-B4;bSG^;U|xW(iY=&20{-K9@9h#DkASe!dF1II(#oaIo#=r@ z#G0hJd^9M*aPYbzDXO2^hmjZYovK@31dH=hJv2Z|i`I(HT@Jdr3f@2|RT5%*Khy~H zp{kD|A0|*6(+ieOVNWW&KK^$vef`(RuOU7vnF75@3&8jKO`sn7YmDC}J|br6OB3?L z$?-%n{^Vxes=rs1|L-0nUc-TLPVwzJ01nK24E5TQbMT*7a_OKYV-=8Sbste|yLsV> z|Dp&v^%9OJR?<{WIf}G=`K!uyz8Ax*biN4ct@St8P)z9>>SyS#Q!C&1X9p-sNdf4Qkd*U z0&I64j)Or!_DFdv%-XohP(u>4u_^3j(N4TI$bfTG*+L2Ko1S*ztaOGJ$tI^34aT!p zO1FS@4JOIcdb||)DShn&K&kJkm$sN8s08Ytk$_<*7Hb{6-kz6d*7FoCKmjFMK-Y7H9I5vxNbjNLRD_W513>z^_5 zUq9!6w$WFHCS{anR;GbpP-o0Bz^ZzSj|Q>BkZ%vd*S1TRd?ra!`ZOM=z~_qY@RpRg z1`wSuY!KYkxM+S3m{GtDg)L>gH=t$!YX?xXx?LWHof91#jcP?vrj3i&$`YnAKa}^%Tl9AJP^mcnA z;I{9o;_^R;#9%TVh#XRFiR z?Ha_6tY_?D9JU@e@}4PM#Td=(3^hymXTnp)Qu*Xn1Nx>3RCXl5n$$dzx&Fa0hHhy7 zEAPaAr|ppHPhiCq+ADd z6?Ua6#(o`3{pbGw8w%D}kudFD^VbFfCGz-Z?AzDZJWZJJM^}O39{VSj*#A~1{;&Mr z{|ONOnMM9re9hPU|9?le{BP;R|CxCG&%Wk=Zh#=dHAZqGC;~Tbx5)BBE^7db?&l@t zDsZpkd*h|6^-CCH4Lkr&XhPB;3Vhf)92#9tLsV7)9HVy zY$zLIZ<1W0RHb!bq9N5)bXDp0I$za&aYO6)^X(T#C>5hlulp_X5noFMuMQ>8hJ~6J zDN(t(^=da8?y~|rR6cgmZ-9{x-@xGGw?3Ibb(8=+48=yN>x70_Rgf(D9>(95E)=ZK zcH`I@H+zKz`W=IEy@sDZGbKhHpgI?A`KXy3R_qeyxl>p{{ZU7)wLS{UkKlhfg_p%fd2`DUK54HjNIh z)42$wn##{3>(HWn z9(ky4Pqq6+cA>x2!_5I{?c6RvFBEjwT1}u@o=Co<8~@><&<#+tKC;77-tlv)gGO(q z4U-x6xMS4uMY{4@i2puN3jvi7@&9$rsn2{m^yVi%OBS=fU2IFt)ELL`Es)*%5m3ML zv&jOB5BR$BBg%uG@G-TZ=+ffw^D+MB5fn`Sv$p>4JP*zGj>HUG72zgO1aKHL+1nh4 zn3VCQZI}rZP1{>G)$=}Js(?xCIBuwnN?x!V0GM6r$)7JXTrJLdb~E5$a9Hmn7%-6Z z9}GfCzKep}5na$3T|`6B3`r8@|NaRKUAcb!qKpGbiIK2dYW5iFu^>t@(3lzNbgG=6 z%xYOSCF5V%CHhx(p#JdQr_T|W%tJS&zL|h&EOCpvXQutHcB~v z(oOu%t^A?uMoh0CH ziw^^EsDwQVbY(#twbWonulU)`mVUpfZ7B=6RDQ-=7>~@zlWfb66#DVapS-=X;G)uw z#cswr6rIKF}w-W(C;mouPJn6dEAH_sKnWq%eiI1-jB&*ae+(0`ay zWwD#qxC>?>Gc6?>Pizq=?{s>;&pln`@G`SikQy}(MRNQ3>nb&4_&bS0f~nY@A@L*r zgf9n?!fzk2Q9?_80H z@i4QCTx8cct%j0al1$Hj>vIr)kCVQYav&E>eRF_iyiJDBsvs2`r810ho)-YqDoT%b zTEnCKikLi{#HWB(N1aN-@`so=f%xE-yY4~9OriUCiM>u{DDobFV>Aw!Kq2R?wLr{q zt}lzUg`?`mgod?hgo%a-!&5ZpiBoT7s%3P{37v2hc_ZM=V&+Vsj^HA3^WsnU;+l*b zyM`LG>HlFmcCea-|sj8@s{R; zjTv8j*w3X0JBSNw&!(IuE2nyzt?@obWuOxeD-DCwjW4IS4l{m&d2~QiYO(ev;WCDTn$*<;`72MS0|V zFQftjT9AUw7~o(obhPy-gXLD8JNJaAH7wL`Jt<`@N5RBD#5~073o4kD*<=<`)Ay!d ztJw;#ej{`~HrdNg_imJo_;?6FB=2GeJ-BSt(S(5hv9tj4Y93 z9iWRvAl~|xq5>rEWP$eh-bf~~DflHcV^AX(QtMsQzN~BLn6VYi#bpH9{+$c?RJsM6 zw9+=P?Jv{gGu*+sa3<1zv{B-kX^77X3`Lt@NZ@>nW{T5^?Uu?K(NB$$O$ZpKG_X>l z21j?eNv+bsdU^0+?iBXQv1{h{Lrwn-1m(}zesmI8Y7a5P#~tEj=TD@KWHPqles}*@ zclyPx((Xftt($$M%LG?pf4d_E=!v1KSYrRwvpfM+l+}B#kW%V`&dmZM4dPt zt?f=6o>lWw;*1DsLGa$6-;eg*8`fv__W(r?@*8F=dP|FOt6#?FH0v9S7VSuv*TT-pv@*eZ(A% z;UTF8<`plMG_OVoqKTV?UPn4 z;O{3;-@ttDk`4nS><_>Ewu%Wkk0ACy_+fT`SpZbV zYP5Js)zHJa)j}NIx=n<}%vx!W;s_yX6lmAwP%q-#%!vI3Y13*c(m+BO!T)D71QbyD zR@UPiR~jR)*y|KVgc_1Hgf$X>I3OTQLZptpXs*J@nZy*xT`oFjeUz_Uk?JP*=|g*o zm0mwtr)IR(C`3;O%J2grw;{y0C?^0;A%&q5Pzg?ZzVZ{Ur$~>`fZzJTd)0;U`$P1F&OaRxIPw?1#Lc zH zu_D$1o6mpFL~Mm3C3j8>1%;wo?1`N0XvC8{+1t+!(oi8xCd3= znm`fr;)ze&SC$0hZv_mAw!xHRx#jQ-GWg!O8t5vw1NCu+z3KZyk zUJ0-4e86oRy$z-Z5vOB{95cD-4!H0peJjkT2UPCE^nmqpHpgsuo|+oJ#CHbRDdhuQy4hK#3{$9^S}SM61DuJ($ zMEFjC_l~;aR;Z*%yVGAfr<+M$blQ(&g}3FmJ&ZZ)OKv&_b?8gML3v!8>E4V+& z+-Ru-nKKf}?l99DsS@0H45*I#7K~aqX>z-z%ZM>JkHVMl{cxjZhp*hhIG|*k(~G^C zH|Wbgc(0RumN>`4gv@>-7;ZFE-^i z%zug-?IrjVA7Y-3_4hF_G! z+6XRPbn{2WYvo#c^i8rfsN;UxU5|v62To z#_C6#nxq$~j+YJG(weu>4{*YD$R(cSg?WPQ(Sa%L2F?Any0m+vqcZF;o67=HX=ibo zc{jF5LGzYBCG3qX`L$ zVh^Ik^XIhSZx3w7Xny$Ou+aVc_?n0&qpa&$k#??*foyHR+mLQas2NK%O?GL;sLXJ; zAU`U%9(hmjO*`;$YH)}OJg(&EM|+FG1WX&@uwsmGYOS-pb6YL?U37XBr~RFJ!*A>F z|6KgJ2j_*3Xl9gIpIw>UvmTq;H%;7n?%I3BH?nP{V4&3j%D=$bZ)G9YAY&1TQGx~7 z76u0tJ^^$4AV}!|rxIr=1*IE6-B!kp<2=De>`^Q|M)Lxp1|+oy6;)vM^amhVhT(&{ zE?{o20N806D12bpC`evktz}C#ilsUUC$vcIhxKjcEe9kxKi)+Q^;X6C5R5PunEB zPoLQ&4Thal1IRoNrxUGiz5&C7YrwnVYJlbK$*`UkKpuJJQ2qFU2RI)q>eju@>p(}2 zQD;k!J__&$;R!{yH`FXzG)Hy^;`otvA&vDBzGzTH{=B`9u^oE_Udg{v(UHPDVa!Z$ zHH|g%nK9^@36dyK_c|9#uC;j8ycNdoY-Ts#RI+;mOy)pa9XjxJ{rD1%IdnP4R3`i49!7kSWhP@~)V zHVj?T_WCnD;>-N%+r2;GL|vh{9jUa6VvF(xIXU?ZkT@7%aOfjZ1f7#Gveg4cLJZ{D~wL~1YYqCW(6A5YyKhzDNG-nk7$0#)*F5Lq0n)an4D?mf%BjSzigW~0NvYx)M<8Zo{t zFP@V)lT{)<(wlH1q0zo6Hv3780mqS5j-e!J!x|6Fx-S@MMC*MHJ)C`4tuG2T?u4Wo znxzRhiSQ4jt@?YPmMar5&(z0{Jcqs_aM~!fVRDmlKpH>xlDdEZv2@fxhWBYbrh&1{ zv$4oo;s=kEx6Q7T;?g`ER;9Q+R(*l61_+x#euEE`Y$Pozg2x5XR(y~pTn>t9n?QlI zG8o^#Qlbr&l(M2t4?aqLFSw00tdRy$JtS|RjzVY$*mHYMPR>5JqeoUhe(%zjw+xl( zU7m#dK*sb=;gv3U6#tMmHh5Ekut{iSc!v}-qP=Zq2O+tK+$;_d|WwBRcc8=z+5xLwjHZ#NH<&+t;N`QFm0CI%i<6;u1kx&ik%#NDDTxcBCTR=X6eoWK3J0&9kVvZ#(ZtyMK zgd3mkVQW{MgUsM@)H@BD)2t-;wwki~4zcJi`Z>eR0GQI9vO9>*s%x&5qKp@Xg@awi z%Rx|=ZWdgTU>y!p_KS~F9`v@cjiad5^wqLr$b&U!r(gj{zW^6pdv{JP-k9n-KUg{v z!>(ii=ruVDEK4oYB9N+8&@QeEG>>OWJ=1CBL2Z1f46ROD4;JnA$MQ3f2%(UjRrW;82;V~X80EucnP-nO>hD3}Gldl03?bJgF~d+syE@u70U z`VaJ`2LUbz>wo~8_*B+iH9}OM=@$84W`Mt>!7c}D*MYx;WMvY*s_}qm?ze!5|DiyF z-&;f)6-09Wv+qdZOW`_PN8dq(wGq5Hwh<@hevecTPcf0pVbjW$` zH|&B4*PlJ>SebF*rS8oxh6yMK-VslMqeV|@y|o8>n?tJDT_Wbw6x^Et{~!lH`MIxTV4N7>0c%QcQmX`; zZIy3O$(hkC(QjxaXZR~t-$C~e5c`IiwJvQ)rej!C5h(gaK=gKUj$04fK#LAV=;}Id zkNs#&m-{8YMOGGG+Z>?l@H1m8D_MV79e>ozlwDA)zr0^^kReXlBeF-5xo03BGE@cN zd)Z+$&Fv~vBokjohHbOkc$(j?togO(p-8r&Y%=P@*;X;YS88=)0PEmuwV(Y?CkTQ4 zF|q{93up#cpAbgROyRds*mr8rM%ghsK(0R6 z%}AIXR`>+3<_ee)xunXNL^zItJN9)T&(YcVu%KFSglla2Iku!Zmqs2|24r)Ogj#pK z=6)U6$(@8-$_-BZ;;oul@EC!R??g&=4qNe3Hc2F()?|O<8g`IjFr+;8Qq$)fjU|T2 zaV-kh7Yl=Vdef@|R+p&FOn__d0}>(?P%=8k$N3phcppIXMI;D)fSZq0h;VMG?TQFR zF9s<(Xe>=a`?xi5T3-B#A;*=^DWV{dqF#X1+{=(mdS6qGWsEy!usz#O1= z%teN$iX3~g(4F-9z2Yn7T2FBmY_AwhkAuinPF0odFe)0+u5GC4n888e*fCR|pKS6I z47cBUN$;4Y*%I_;+x1U=M?8d6&?lAv$PwJcWE%$dlIzY8JYb&fU^SR_ZFpcL#+F4B0pZZm=}VuS)B87yOw zRDV$s58K7pfMYP!B*IM_&@+^S6PeU^6x|6;h|&}{05U`aTYiHyGJA*)*kN>#O3swD zI+!AGGf=MnSvwA`&1VDFQDZR-nBQ(RZ-sCc#xAC5EGls_D~Ptg7D5Q;&*?2@-D?ao z!eTyH>mf$1pW-qbu1jxCI+M=Jmk)y)a;Q<}&qEK_?@SEfNyk`NMxni* zqu+B~hJ#t#(7f3k7QmKt{lJ5&BzCZJt#=Huc{4FEboTAjTAFvENYivnq<68sh-)H? zLCSaUJ{wzHbC;k9&i{j*EJznMU1W_Z;$O!i3y&R1xt_l|qiksH5p*-NFhjXlrH38j zSg7dOc12~Y%I6&=vlyukwL6kF=-!Qt-6ak9;gv^n#Os&`dkc3lHC4-@8YE{t6zFvZ zP1)A(TsgvJQn{|+#C|{XlFb%zeQjfH_L2I-WuMw5mAHuqUlv_&dCed$j(XL3UPwQYn8`F59P-`EHht7Qlu z-%_@2YWG9sxr*lt6{|&;Q0rl@7Un~i0dDLBpvdt-e>=2&c+Kuzn!Mi}Fh$L^xdP5z z!Ipj%??xLw=~FXP$W7rl8}J|i;j9#MmiSuDyL@X)*sD-v^R7FrG1$|xBBk!xq_}T# z#Df|a_SObfS5Y{|V5AI)s}{+cEsnU^q}%lukKHoKs-yK$hfJ&bO1Z_pMuEb0r5w5Z z0Xe!9LXHzlQU*Q`WUpO!E)Cg^$c!jBc0E@;aH7Ynwf7he#?_*}8_}}1DBnJ}e?hT% zK(AB1r^h{MJ~OqST%wG*;qO3mC!dM#IUXl9IE&dv_>u-9k(b#5p84^7#W(LLF~mLd zU*to$zN&QFyIWeaIod?)t{Fb;K%=~HmyELo%l=tSLD_`*O#rkmT=(l8qknOy zkobSxzVUC<;Ptoc6!kId1dOi1)%Dmh(RsK}z z71W@wWD0Fkiz%^?A^3RUn;a}+Ob8AHb7aBdtkqyeqgic34XCeZ{4G+?7wKCsT5aA> zR}iTxZK-?9PFkS?GSZ)c{ks1*j;g*A7IEZ|hlK(iQqBrwSq=?#MuI|H6K*}*2 z0wViZxa*Cz{@9ZiHcEw0ote}NAP+g30Zsgo1$>1D4d`lz{wvq)4oVLSDx*?MIUp!D zB2J1SHc#7MV#9t*LB227QUZ5Or;1E^h&rtXfjPe(HJR*BFYMB6QNjhz_4!R(mN+XY zrcu$y-oX3mf+LgDtvEu&rt|A0k1krrCwe7zO^QC&0deRuk5a?MulvOjlmR#MHz*dw z3`INiTj}@+Alj(|)`}cW&}S7GqD}f)?{VJvS%OOt&2@T0pcczKEt2Upe27}9t7KGS zM9z+Plu%a*1h@9TyvOUp;{vtG!=6x_eQ3^B1I%{j50L>KsNHI~qkuvyw+X+8WfiC+ z%Q7{R2@%-GpDGwfWFUT`vE&QS&nkKb8WCn{q*LXOZc@v3_!2MQ`hRGlAr4@Bfu7U= z`4Q|^xa{QpF3)kWbwB$zLn1GSTP=6ZhI7(O>Hv5kA$KY)F)5 zFuciWy1g+>laWt~1cILK*P?Z#Htv~*y^z(cmg~pZ=B^Ahy)c}sT8vM~!TROXoMeOm z53Ag%kR41Hhy`OX%d$Kp-Ln_szDN@f$d4^~xpq{Q8m;nDZQum*nym6lSG&3Da`JmJ zmrb$A>oD&FQjF;rYGuFMo}Oqy+1kqP!K4;;{%YDO)6tdbx|<4%<*Cpbc5%&kf8IAIh8Rx*ZrJjorujvM~=8qQ>$&kZR4iC^G9F6g0Kt z=h$P=S{;aRzMV@6NME-ZEn=O_M)O4B*}M}OJ1TY0MnAaXmcp8-QM-<{@YC%HI&v49 zXiBX>NRuhaB8;GfELhHgxBKWw@IF3X8Uuy;{m4fr0{QrCm1~Rj`z83q8>G`IsBqjp zlL2S!lOtkIB#ZXYM&bLgZ%NvV0m4TRLoofjW@#D@@E2+HT~&YGA;(nH(7dJo>BO|v zvY~>nblOijZ5g5s$U6>ovrJz&&{ExYCU~Pa=N3LNce^`%-0VTF3qFB}$G6H1_cjx& z$r&(5ye$}r8%ts4niWJei)3Y|*X_>Pl#q3tt(@eQT~5vnwZC~g`*;lf{Ju@Ebmhm- zwR)IK-Ry6~ce$F~aQmqQ@7@z?tKCwDPv~zRD!8a}iRXipZ&SPszqc%l#6u)cg?8Am z$_NuR*;rInM`y<$5e2<1xlJtR#yWG|j{^Qv6m8yB*1%IN&cXuSi(VNp=*xMh8Ws%g zM(bJZJym^IKlm68)tB75EWQTPvMwnyG0?FReP$_CV8QYUj#$F=l;qg1)wecg8G2q4 zJdSRZ85H!6=X_Q5Jh@r=oln-Y`AbZ|ujamB8RFAnliy%Fd$*pMzX$0XzS$PlR~oWd z*51lK&Yj~!^Og0U*q`fyRcOv%KVmL2(l` zhKJ<65Z$#f!bP1i#$_k(Xs>lt?h;&uNgKo&!DZ2Ic5P8vt7Uki-z!rwncp%d_ont;m*9@kQ-D2}DA3 zmC>=5!%3a5a8rJJ2KPWs1?_H)^arkfSL-A07xlJuG}6#+k+>t|Ob}1H1U%<3>qLwt zYh2*;4&`d!TC%3`;kJF`&vqS}t#m5JRnK**g-?T;t8ai(ugS!+SV1E$kac&^;yyur zZ-{A|h;S+E@YGNn-H|HUzOJCcA;s~`l6*@ed4Hw5z-@T7;tY`xz^h+ag!pCy2<6F- zM~koWlPQNl*#hYQqe*7Ox4TdVY#_$-J+O>*xQq=S1zKs^Se|qx1 z{Y9gZe2yBk?ML9>sZ)!E2|%s_#`!8@m8|{b+#HW<8@pWnh0lkr5~tm2$Iazk!UEWz zySXp0WwIex|NEo*9Tz{;lb3Od>fnT0uC81ll?D~_YbTSD9jpc-#V_qA|Z{y!OBp6#g5cM($pb;~DalW9M`bj6idu+w7fgJrLMG!9Xahg{ud>fbW(v9nApLj_;8>80ilWftj(9g^GoC zK0)^eD${Z9W+ot5z3}oxY#9u1Hg2k`N`@N3uE1Ty-KN2;_Je(~)aUAW=sg-wY#@HI zU1a;EjFy)j_>OYX`o}QrbWJ<2Cr`%hZ)FwPE&L9sjwmiv7tOedfM|NDHe=^F3shEt zEv-4xe&DJkeRClL^d0CLW{^6k4(zT4{rGkO_B^f(N;1$j&awL&$#BSaHytQ+@Ak3`PMkcTLQp(%=_C(9sg$fUCsgb zymyoZbFFAm&@9DT0Ep8{?pUfJXX-t=J=Ouf*MRk;{I4_s2Z@D1wXGav>DK8 zr<@&eowR`omHu~<2D?Oy(Wa}k(cuL&9<9M}L~;IhkCfolCT2$!Ma>h^Pa>G1WONi+ zU-OM!0=NKme@GnKQXHZ>*TFJ-BDlJX>-)bqcpsxg(~W z&9SzBG~9dkyhiVZCRDbLr$g1_mIfVd94Ju*zW^G{7pU9N(*k*Tm_Ns_*~HN?`%Urs zG|M}7C#ER@>N#>9CfTd$5ss%V=wrJIjHQdV>%F>r>z@T#|LQf(!G`8yJd#a?FYini zc_iZn(?-@xuFMLD0VqWfnJ#hbxTOi*7+*Q!mnX$Ra%Jp`cMD!H{`$g)aOTgfjAS2W z$eSB548Dw9s_!byhco8SeRhOIu#M4=-oE_o#o;Mdge~Dj0gh(4%4QSHxF5@Xd;s0! z8whNr#V_%iyRec!@+XpJKFBDJ-Yx7DlRYoriMGJR7v2ls;VmEYD2SUJZ>cg_axk&@ z8#v2NWex3$E9?l#ct-gC__?vz?soE#foE8!yGXW%SHBBGHnB!@J)4xj9+8{1F8=i` zVnk6r6{18ovU8KY1;^IId8I4hmxBBxVaZ|gm%w30H_HKHB_I|<%idbF?mTWQKNZ-z z(j$A)byU1qTV>y#N^=`N`{AUhqR7#3pr$tzNECYH1zFW6p&>>292SZCgnve+h9M>ww=-DYd^ah&CXPy zahw2F0xOjVn;vtfjo9B{BN+aS#mn@hDR}QF?!)EUf_2MxV7$#4vZC6fb`XAy+y_;Uk z!+W}0SF>9D?cO?8(;xuaAy@k^j(M?^nV&ObhIz<%9Z6bX@wwh#Rze#j@API+iKy2EnVzH9a}r zH|HhBN#cwbOOZqR7^ zBQ^J1Q%PT>)>cP>a5Ee9iw5|42sW$uw7u!Qdh8t9Y?kWD?^m(BaZ{|hxr}Ez!ANj? zaPr`+y_I{zSdkeWk~C_8s_ZD#lktTCus}E{w58Nm2Se6pKpfL1pT|rzosFHm z<>PkjP4t7XR|4fEzVsc%scemKFtHhS`B!E~>EtZSBXhQk2kh<}rCClZE7uvOwf0Jl z?{Htl%vZVIS&%T8248q=08pkvE~&WO$3xZw**sp34PfY_^2q8`v);p<1A^1tUA<65 ztTokfr|Mw0Ny`_TK1<8l3ioUG!%d}YlvJRac!;$}&JUa8HUE5L$hI7I@p>%^2X%{~ z$%yuo7FX%tLHf@l7=+Hf?hZa?=J-gnm3>y4)VR;9Su~Ie^%L(1NQyr&_l!ho~%InSe%0}Vr(oJ{kRPpMIQ)?YF7PUfBw=M zV9`Gqq6w#<5-M~*i_spFeGatiYM01eiaS8m6Q$-~ZLZd3bN>A7eY&CVmrs779t#xL zr9k_}iPf81nW(bj>`KFiWZ^JmEhT?{*Q8F$!_}elmj}(@?&21*(!a)aG2x^kw!+}# zXBpYs7N&+TW5s&dY`=?4xET-xN;X;!!{8O+kO2U}-G%IM6yUvzW95 zUnTEEjvnkk^O>|ht+GDBg+VIyRUmtl%H&NHaS3ImR-J0$X?Kt_)>=5(I6)jGxT&q~ z{P@Y@73WLhitP@0(nb|Me7^*XdPgbi#qZa2LLwgg$OwSN<+4{iT15eREa1FG8Dqel= zG(=piC>JT3Y9+PgYT_&Wpt#o&1VG>F-QGSu&|90C_^NJRf?n2rrEmBH_80m^c$lBU`tD$_MyLI3 z9yv35=Y?CUmvu?%GCdw9U|=&;v#^rZ6)Em3E1q9UILy!V{Jf5IQ98!q3!ngBBb^j9 z>fE-*r?t1H_34Y(YRBLjnEnl18#`zk7MIet**NKXj>M9xCh+Ox47Cmw&ozUQQdgH1 z7~NgrGSc1c$U@G`9}w$KoYrd2GQu3!RL?z>T6w3i;>v+9XkEKB_Xr_{|64t@xh0CR zSeHE&_fVOY{Ch7K(DoKD^ECcYADzX0B+7K+pILMj$+Mqbc_C-{mJ#)hk%tpC z_%+c=VW=&l$R&QdBicnw^xSkV9uqjxI;>t@7$)R4&D4|j6Mb813f$O=UA9MTYP!$t z#KM-Q$;Vz&xR*>9rf+>}H8m75-6g184M4J_IVO=_KQBk`daucf`fze`STlq8Oi3r? z4zyn^Y6B-U2~OL8Ra6!m$YxgR2VML|Q!WtGba73Y)e)E>Z*TAdyi&kD{f2Vwd}J(C zAe8C#3m(XK-pNLZ#kKvcnKeDG;6%PSRW^ji3W`6JRyu{_1A!O8aa8jnq#n!GW~Q5! zGaFbkI9(6`F^gE3F#wB2=It!ZEa7Mki%8o4pr|vxbI1Ta`HjAExdTm&8zpnVxGZ4- znChPe9!#JGu;zBYF1O6cDtynt)zz+}hM&?hguTm%AZEt}E|{;pl{rDLzQ%g8?XvJg znD?3zugX54H2t$u{og3h+p-i*n12$!0UKX$AGR&~Y%Dvu_A5JzEx(dkEc%$!E2y|V zOB3QEfbahU5`$sa7L-Wqu8X{2&Nhq%H>yH< zra2hyU*{IBE(EW<(;2j!kAFX?yFS!LROi^F+b%Vho2vkmd93+8@W#r16^KI+Mw;x^ z+05#vnU)8pQK;G4Zq4XUR_FmVO^|P{`{mLnoJ2AzfaoVp%*C@Pf~zQ-Rlk57gIgP| zx!90VHcl7LJG4?QEgt3uNNIZZUvA>eksXK=_?BiCGdzk-_OdR(MUyicIoq)_x4M>84E4Kqo6H1L}d9?4DQ1E;L+gcg>z(KtxS)8;X!1zt0{d?`Q!BXk z9J@+eo1}RiH>dF5M&mtLqv{K+q-mz$a`HkIg8^|%=`V%ci z=JR_c_yXu@!pdCJrS|>n)dO?Do!BiExmhrd+Z)P95ZC)1D(II}{q(1k+fo8qc}nE? z`7`u2;@xO>6@_$ItNoatTGpd|D84J39g(wl>+2^8iIa>R4YjMAOh=nuP$a7nUa)3) zE9~j$qii)c`56(*%EB%aR87o(cvP;qC}u$_7ToM7b$88iH?c1~xF~$`I#^lJE(s8< zOv&lKo>L#RGp20X#2+4r9Xno~4gNRf4&Q<+0>I+YF)Tmcx0qZ42dwRo)X(!E7}G+Z z=&L|y&6?B$bk?67lB#5Y%jl_gxM2s$Sv-B;lZpjJyrBGEdR$1JgQ<(kiF_9AC^cz@ zwhnKGNc?mT{p8G29Act%*UunV_4&Su3h-m;30fL(S+yigPE%n3;f@XYI-S$ zn)Q?p=&jb{K4Ix{R@jU8Hs$K^6Q?dzmq}XEM9n9K6T!fpj3f8Gqnx2|y{d=8$jO0G zEr`-Ae1EAo;L!qW!W#O3=;5RZt%Ez}#dYOI!JvMFk1{aTxs(E=O&&Qqs)aG0-eBvJ zNTY5%cWx&lW+Rh23BPv!2~$WqjOEvU+nJK4nX>P6=CaXzS5PTE;TX?WxA zaeiTPT2HvFySrmEn zG1}(`eHp+}2?7F@M6tbEIGeLv9B?YxT!lP}_81nr-)Z_)GcF|KI`;{GEN7~y!*t9G zuOWyd&p@m9#C4l_MbuM4NFIM=m+6;Pmv>wLxbJLys6DvJf5wOuZcXl`;SM<%uXQe? zz%2_$y8^=g0)|hzV?Lls>MZ66jfo4<)s@tHA;Risgbh&r1_dw5PAVOUyU+`_lMj@` zpN_{RBo9VqR4&#W9JyAz-9+DyT#^B1QkkYOBQltI+6);hLU6->$~AX$adB%PEI+_MP9%mh6N zxNfo(4=~T}Ms}KLdSZ)Z1`OIbi{(CZ)-JSoj+BQsjgYh_11t&UohHEveAj-7e!Z0< zCMgk`J9{y zh}$U6=K6&2!5QM-ja$#3K4PaEk^!1BIt!cmhAlOPhdB#xX`GJPUDnFt53JShvE-%H z1%|Iy?YR2-VCHW7zNRoY7vMDmDaWYn2r6E5#@S7bbU%IYfYxxZB_p&@a59X#OaXnL z$aT@zP#teV^nun07EL`4(=jEu5Xo>XKqon7qQ+e>1VbCPtks5NTY#R8p<>RHILlk? z%vYBAP?2ikV&b}}>4tS#fn7c0=%yU2ZH;W$u;1g_zQYedfB*cS^H+^t$-M+=SrSKk zYn-2^YV{+p8)LKmLmFjSP?{pY?xgLOy^S-yHg2G)=Ji!KamJWZt4*pMe0;Tq4uv>- zT{PF$PPLumER#TJDFNURw4)`&tYqj-p%$Wl4E;RUp*c{IT9y53P!>`Eg=tQC=&1q zQN;;GthDS-QQvU$<)T!MB5x$>hWDzsf_W>7nKP9F4Z?y>WC%`m`~k_TwXQ>~R5rlo zv=C@}t&~5=IssGDbG3VIzS&%eS{`_u92fGjcEGPm8{}3LEGyj-LI&2D~)jqlVySPiM?zFsU zMtz3=GIdar`(vJCmtVh`Cy^wa5qNTMKx^`r5TqPDhV}_M1g#e%TLil3P2B^jpHM`5O8D?Sqw*wOjJgci+6m1-UjYc-g zwsTF1%j@Ml`)QSX*rIjXHwKy!%%t$xehpxg#eMpRduao@t_-Pu! zUHFf~rdqK4uTNP#?iXNCs}liQH!6YCs{+lM7peuP=6-=YRGqg_#E-5xY&iKHg?}Z8 zFBe2WvQQUc4n6A>C6Fr&RV&a(h4RaRt5>!!m4R7x0>2uSk}nfPcl>4vl>4yQ;Gd=KWVEo^8F4`@Qy^rK#8!fqMfp2daoiPH~_4CHP8Ychf_XwxWlVXAiKH zL4tF;)ED)4knLXuCzb25u;zplbI|s_M{TIQ!aOb>&l)WS`870+E)BTDeO@oBEyKT0 zrws?En`}@TJ3nQn3eH7S@o@-w$z-6itQ{8h~poykI(rtckvIMFu(S$Ki13c!KY~V zM}yaeCkV)sP(9peM@7JC?D7)UGV*c)Z&^3X2DU>YO9%Do9f5DvE4&eS#4@+Tf8GyK zei(Y(Pn;x=c|aYFbL8z|k$a+AJiHjLUAp9wSZZ~IdH=k81&Ij~sKbV$4-+E0YCay` z2eX3H0?r&L$**TM(CO3erL7yfOwqxMs!>1Q31z)Mzet(x*KtEXKQOGw2(mV@MTqkz z0PMOIp~w>9T*v_&gr>NqQ)X0m%j(hxOE>bPXoHeiSjEXO$z%fC&^KB{j2xt8R(rfh z0s(@CJ~>y6-89`glLs?J{Oe<`6?T7qT2=GXl!9Go=AXE0Q5-(#Pv7wUkBU3G+!Zc@ z;Zfz||En%tB484dHB{)Q(I5DWRShE}mMV7pWZt8GS+^+D zyMR9qW=~G(9s~Vn(|Q(ZC|ND+@pXYV-&?t*T#N5im{+BoeSsHpq;hBucW;(x7b_TA zQu)l-hiKeaK-^*!=W>u1>NwB9$W5x90_X#efk2m$5#?YMGf#dXRZc6ij!91PMb$X= zlmkEuh#ir;P~nbM`N+&$O3&ur?u3D=spoXU?-@3nJ5B1p*}qo13%aiAgF#{Ct^R&g z&&QcH|4sRQgVlqEWu2aXo107q@(>arn7H4&zC%6nHh4|sRX#Q@5O+97A#-B-G zvXvYEqd|-6xy~Q(yRd^Qf6j&nn>PnGuSM_8)%rm=AG_AVHbx(_3Y66l8?&+oG(akn zufSzykNm3-)E@~vwV5ZOkNy9&rn}rY3dm2|yY20XI6PuU>6)}p<@?!A@xXSx`y(YY~Q0K$iBh4hcDXuSUhKLEAmrm zKvgRulb|{f-}%A>-$uyYqgzNwTk@82M)7q6oSTvHDc1xUhyCVfT763^hi)e{v!+li zcW)KO1^71H*`KN~Uv@U3I_JPYZ9@FdufX5!@9_TbUB>_Xh5xhb`S+D$&-H3D>p2D1 z$9#FEV9`~^cVaZ{>O^ilMcZxq`BJD9#E5nFjQvW4N@%-;fHSuRFOwwbb3y9*0I=+G)c`8IkuY=@#9;#u%tE(vl ztkq4Ruulj{?0nNte6CmC68eqXM!R3M~cD7;5TGA}+PIxnv1DM3j7?HJ(7xp~ z*?Gu)u!`wdu2mhA8gTD1&{6FG(Qi3i1%mV$pzkk98a8ZI7 z)<@GADSOlZ1?fP4h>njB2TB<*Hm4Eh&A0z*jm~Qfs=3v`vHI=rgNJ%bRr|VW8Ux2< zWO97giS!wE8=5-v%T>%==%)|@;9YKBM7scR@O0)wK$|kSkiBFIQ&r1~37&U+CO>v4 zgPkLB_B8)MRnX`JJ<&h5w#%^JUpBsj76-x?tu+90563}$G}j*xbEeBs;XiwMg9hw| z|A1KgfB)?-nDQr@#2>HEM;r9tMx*$zc3WulQHbb3+oUe2fJEpAf{u2bL<4DxA;(}z z(93B*HMfehIjjEcmC-Yj)q3=M2J6sIYS)egPxQKh1EI~9X2P!$6a_&Hg{9Dzp?SQ} zdf4?>oeSetPO1gY`xVK>^-O^h5w%4On?mlv7QxUp{gAonK*}r8!d>q%FtNysHoO?o z1i1;(`lP-Z1(Zl5BW0j%WIi}MR0o%WZ;EF56E~?u=vD-i3tr3~Hf!PclpIohOV$}3 ztCCx@kK#67yR*E=BaV^0$F!%QqJVv+vc~dTiv$nymA)xgLHY^!im^47rWAO)O&HsW zCSMmAwW*4p{pJ}FA-p83IerH>zPYi}+67eFs;BAP2)z;A5KGm~fd3zif5jtru*=p0 zJ-}#nFJ@N!=<4!7nWz@9hYQ4G(%-WkG=#k5baFJ)mnHSomrwYri2Ec7??P$v5khw? zN)}mwjv92S7$g?&R}~w&I{%bkFWQ`R0lO-DupCQmUhx87o}jy`@KaAyH>k|r44yabj*Bt8j)1s1jW))UIH$x$;RBt z(I=Zc=Atb-Lhkq$6A2B3Zpgyrl)#XLp3$=8pgEfLO4#lgEeeYnVtjv zQ#JIl#>MrKXoFB|m(Z|+oZ@rPbAot(qt%kiWUY!5MGMbK>O<|#WoGyUzhds!&WDm9 z<-^z}Dd$u1W5H%&Xw$_QW3kw}_@qVdvU>3(R*A*nj)@x07ZDkQcg*_7{$?~2t#MaH z;?XHUXW*$_qnE zp~`EAiSm?X`61q_Y0L`fsIt&0fp~|)&L$m_`KQWmtx+ z#uZyEH&|O9V9Cr8SAKnW@#oZ~votS#$f7`sQVfN7(Ef4spI0jtZ`i3EP{fY)hEo}8 z!9SraQvj#9OlqT4u5RYz<7?b17anXW8=o1Cwm&T)=2Hu5YFM8M#|8#BiH=3BlD&H8fheF^q9@&bOb2VG6-_?r z@-5oiR|$1g(k5DU8))&dSftFjP@+BIKyGucJHwN|$N92RbJCy})V03Lev4qHmV(S3uu4I1_J z)~ZOStcMcCSXy=Nicni`g$lNltDIR;163Vq_xmxW{{@dZ3tF4mh2}^YOLvg2=eciE z%q853vhN*b3gQD45$y_ha=fmyLE(x98%A`eFw|&RR78`xJOB{Wrg;Z|m5blRh}C;1&^gxPRSd&oo$s2y>hz**`iuD`XP6}Xf!rrX%rQ`U# z;{6(LXc??LbJkhVcFEAC`5F(>d@EjNTD}Zj#Rn?uFSI^g=xD}Y5JG!Ht9(&CvflE( z%HU+UBHt_CQF}0!s;|yayV%%_vV0p4w8b>J#a)owyjNjESFu@#n4k>0iak72t=)Pz zY5;6JMZb?J1%{i}oHW^*q}#j531E)XGfb?KrIJakt0Bx==wl1v1+^ysd(LasoL&SP z?aH+?yJ)g?l8E{!ykNk?ihMcy`DJ*Q+1RbT^ma`Bjm2BexY2wJ8+eOR* z&&g%Pk86O95^0l1B_?&oj0Qs% zMH}eOm(~lHC%GNJM#Qw^WGP(|vSUQ$HTmz^=9B&G zM^|&}-fNtO6N>@c*Des%Tjfc#*4?PVmrOjkaoGPGzj#~=Dh%4B&doc&$oR)EQ@o@> zsk1~0SWU5{Z~X0aje${+RH$$3_Gz~+w|Q5PdU5~Ct?-f|mYBdB9=$6&O3Ww>)S9R< z)Z0@Euj^EB=lJc#P!=e(8`jX%6w8bJr?-ZVM#yaC9?=war{gjriaUcJAsS)3_>QNQ za{on2GB*S&hhZcl1BT5{QUZC*C7bGlr1?)iifiLKpx0m zWr*acw?#Q5PTzPzNLQ}i)}{{5xhG*4E+!|tW7C?xb-ULpjhTt~qn)g)7nGM(Q>8%K z*)3y4^5`lH^inK!^&Qs4z^CfgYemxS`|8%~i~C-JT1Q}lw63`udUr}*O+O+gwrt#k zQu6Uxnh%9D)q;Gdq~1L-dgA?8t&2&NeOb9bWddnxA$KQ_L^GhPop}t>!Ebl5WX|Zx zNt(n$6%7vkfyaVA!Dg8@u5aa78D;vV?0G6IYz<%O&#{7dAeHkC)(H_@#0&3y;k1g3 z-3Lzh6XyLjif333cM*Q5G9`IUx5=E4h-b>0UpkfH3O0VI>H{}bc^TTRWzTC^Sa?$4 z#qQp~%^_z?$cCC%E`8wWFOw_zCy|~R5XNnSRPln!5zSjY2cK}eD;haEAd=2?bm|U1 zSQypLa_NG@#g2o}Bn+eijX}o>CTe}=ldd7n4#y`RY{`V{U0`S61g1epEz+E~N;utT znStBIQ@41E{W!A>QrTKQG zfe{;Nzo)vlxQ|T%M?AJqwJLCD$3T?@HI=3c6jVmwd&Ps)o<{H0z@CWR!7T4!nTspHt?Mj%PXivLp#V%30cNn+M zJA+~qr)mrRbw96sI3jd$ zgn1X-HH=HhIP-l-T7l^_@uEJPO=k7)Cmi-Gxs zh5Q~TS$qLUs8tcw;f+*h^Z*}{ar~m@YuSqML6t6ryOG%eR3R3K9e}C1d!{sK2Cqjh zBOmTlq&qou~09K+n2o9WOyD+et9#i`TubXvsuv2m`OKNaPWsR@! zci!h~#J#=X(5{4$!4VW<)%9OR;qNHp7V%G-j!&&hzuZ>2h;ZQWh_23Any*>)=H%!H zTU+KXh3zQ&{#<9xvrxFh)1TF<_OYg6L(Ngp?a=k8rod=VY65Hi<1b$8u~J;3QUZT0 zE~sbL4w}#EO{Ttb|7kMlJq2GEIoK~i^DJ$RTfeS}fhZ-ymssK8=}&EDndAP%8QVj$ z&6kss7x`W^ukL%?XP>U|`gasE!~-I&Y%H{%b(-VYtP%{LsGBSOWpLbHVjsqA1Tq^G zHjCb?bjEcl9r2@!o)UE83M^Ksf#S4`-7rUy+>$a+O5LzXqcflhO>ggUx{ik+^%sNp zi^kF2Gm4eFin)FgsJT3qoTjB|pBCys4Ig&lNfamR(Bcb+O1aON$MMa?(Ht$ghgP{5 zXmKW$qV}Pc!y8FHC~#Zu5?mL~Q@d+hFIms!WZJ=#cbJ0OB6?Cg;kbq@1&%{btj@ne zWhed%wDy16>-ryc!RZfQ{-{&V!L;=E9=iX`<0l9=H|>+jXAV>RKSnfvfBs49??06s zhYJE#nBV?}b_=Hd4dIvBP=lEQ1D(zsI@l8eayku7Y?U^(+w%s@+*H8}Pm%(YI{g5p zJ}~(HX0s%CbXJ7$qDaYPvo5`_cK%l(Z*vGh*S(m;I3YC5W(}X%c#r#Sx%SgVzwH%$ zl|CRDkEfOqk`BK{>0W7pg|96!8g9(Fzo91nN zY_4L@dFh%$yzZgp8r`+hQ^*6x!`+XTAJJ2lh1>Sd)iy%ez&jI?**ER z`3uhg)@?|8sCmIO9!oc4?uh<9llNq7+nd=mVhOaW#Ea%+=vwzX0oDkCIOrRN&VI3+ z%|T=#?FFczPqb44@Uh)^wH=zZh!s=rluH#;*WIRRrZzM%wEmWB{b60J^zx<5d? z=&Ic!)x?g(p?!{_wi9;9+8?=b!{bsK<}S9)&`za?eMM@)Lx|x#cB^zp)$&)jd zd$=#Dj9Qzz=j+^staBF11z<^`%_hhENCQ$0P6#>VML#=|GDd_-)%AV0~tf zU{Ot`0)=2~7Y8kif)2=f(MYuEhA9<0I!VkbK0c^5*`{9s-}MMV86>cZsU^-CRg3oS z^(_hU%|EiZtldq2m@cbnWu77@6+8im$W{E}{_OlONd1A{M>K5qH`+ZhmSRg(+!ob{ z9HWFpE#HTZ70%j4o3x)Ub<$kVTc65qS@sY&2dUDl$gZ;5Y55|<9sbTscE}X>bKb5a zPlZU{Xb$t93dhM09u44yd(N*+zv}KpmI}o|G&dqha0xCKp(JzsL0(~e$%Zj0fjgGG zq~Z^@zXm8zeZuq;A%A(Fb)p#qXPi|F*Q%vxr1Zn6%-QCEONLy^JO6aPh2Qc<;}A!T zSs620{`QQV`kjgup5e4`1Netr-#Y!_32re|m;%$3>@AH}i-Jc%Kmk+D?w$vk#?R2E zc;PfzjnXV)Aiu?&wxOlJufwmKeuS1j6vnk#Dyp@PCNh@5qzB8!S<0QEcJp$|T6sOi zaA9ZbH}D&b*vg$61{Y)J){_>U=htetc^6CS$~F>LaL>5`&JWfg^0pxJ=ShPs#bJ!@ zCGT#|jEnX3&)2QKv&QlzfZyb z1HHAyjq;xA6?(H2V5A4oSyW9by$UjJbp5zkzA0(55#R1nyZNWqWH+vEXVb zn$XT#?@Hs@8tee!54YpI+mvdnlGI;8cp1b=d+ia9Mzy^LR;)5p6Yo$OE+)s|R?w!~J} z1au!Tt$GVgh(c86!Zv_*gOW!=6SD86CwV~;$93n{h$e`dcXNW}mdU%&^8IB4=C)%M z0~&AMhfvG_S+QcDJiHLq_I1k&Pp_&JrJWtcaF%Z7UVA@U6!FSY7cS@>A12QJwY?x| zIVFTpX^}NieB-I6CUTv`n)C->6b*oi=du{apdda8RBuK{Hg%Uex8Crr1BF5HK;wuXZNAMU%5{;G0=t_ zC#VxVsy;aRWwrT%keuGjIN{eyubZH7d4Tn|F3--HM(Wuir2X6e5>y<=y}-%rlsb$} z`B*gR?I)>9C}Q@38eOOoQ;dkY#3inEF%*Cn7>Obk#vKhkHLJ86w|25FW(+0Z<0X%VqFH&;)f=+6 zD(u$dxxXlAWU2#gJ=3bS(S+k9>vz2i1(v9WF~`^idkOQKcMua_^VmSdS#$-@Jh1Rr z`-Xjl7KOXyJzvJ7CZASURz%asO%i=Us*JgweEyB09V26}G8{@SR-l{HzZzs_Kg93) zpQwHe4fPnPJUuzPPXrz;n4RER(GzA24q(C9Ly%xc163QF$p{lzFwUMy@+LGH;sdZ-k!tu%8S*3$dWXx!;P`MiGdNaohFOF4(aYYSYUJv zq-@Tt?|a`A86=Xrs9augUj&Kj<}QfG7*54?{y%8!JH5Sz2O|!FK8yY#Ip?|J@~x1& z5qXdhZB3_-tH;7u+{?+xcVo?4+nR+mySV^70w!v^J7#Nk7{+LnCPRCYSt^tiAo z_H)E2kiH5#)$CVl=9=cQ%&F2~{EDFYf=J;PXrB263q7-AwoZMmh*wqGRB|${LRbo} z2SSAK4T1UOaes4?$ikQjIPiOqcwyf8M_>9Wg~=@|ZMKI*(n2i;O(tqYHJ6Srd8BlM zNr8S_clbP-dU~FnsOUD|p!1;p0{G?2id#f#IxEzAamGEi zlrizH@f^qHt)%<8a^_Q7YH`tn2BiLmQ&oWfT3={{9ZQdY6~;-X8ZtY-$xqF zdpCb1#qqulieO?^2y5bQM>|v-GhfBgYEscj?KAd z>mN)b?M>{ra5GwjU&9T%fui~M9pvU1e;*RR8){=Lz)m3lqMibZ?VxtKvasfsG#(!bVwAW zHvs{qMd?KdJ@n9vh)9BkU(t>;VvPe2TVSH>{#R3^H!qyo?5s?Y2n>EL#e@?*y{a#DmIj3}#4k-$&{5kj@^ z^8+VAhP;tea<+&o{k!b;YwQFx23&q1a(0Lgmhnq`3oK#Sou31I1pV=jPoq?=MY-&R zXtDJI;Ugc&mW1*<~uE=;;QW8w4^G6Hm!|+P;r47zPTHGLy^Shl% z|HM%Ur+kNw*Y4k%qyLE|_Rlr_y_Q*@&L+L_wKi0FaYX);6~&ja`AD0z)(r=veWQ3V zfO>#z9rOc}wwu^v0FFBfhy;TAfE}g-Vv-M2c>yDc6HbkVOZNW@*^!?{=%JrDHOC&r ze{#?dW}QvGv94&hF%^+IM+YdS+JE?B{x#w&(mpYyBPMtp#Ps<~HW$6fmzWxPz9fjm z9S{osi6qXt70eH-C+p1d-DopJ5&weZjQ)iG2OQ-?o8UMy^Mzj-@Zk8gTlbO;BXY)8 zwafic)15hfe|tN&%-N)N+-X0~;oi|dx~*X+MioYM)}LwHQG?<2B>qc;9=qcsfT|b; zsy5LYJgiMd%+YUIT%)Sx{{@){M|*e*)xqUzx|973z#v!p!az8MGq+bm z6guQJO{_K2Yd>WJgL*%=gHEH~!ZY`s2D7>0UA+yJ+hxoDDowV45|1tg@1m-ntb!;} z0J9s_dNI>ah!CO8A?ujr=m@+zeRpge_i?fQSU7|t2S9;69ogIDDhOUar`VfA3>C-5bqIP6O}23!HsCC=$`IS?R0{Np}3GXB#sb`Hk5z>U<>}+#e zRpxVw31O98rs-KvLA~(VpZ+KAlbCN4^bA#-FlP)#O71GwI$wFfH><}87EP}nIXm1@ zlmiOS9(36leQy9ZQ(z)UoO?oOEPOg$wf79GD~1P8-}-ZTuvXv-&p^h|$zT{TA07zo zy+JzwOzf{wi;(-58jpj`e+2C1GX=nok9v>F{#D6mYWgV09QG`1<}>zGy*(_}I!|LZ z<-VnVG8LERWq$UM{evM%89wWcB-HlFfA%&$2Pl!ueXPLlxO^B^4tz-5(60%c)U%K9 zut4@PXBj@uwkX(e4Ay9 zka)CNg#|xt2CxZy21)=ll)hzp%|Dy)+;0!I@SF?&SZeaQr`C z*WWMY?7uV4`^RhlL&t;vt=#SJbOiceWr6(TdH+(Z5C3=8;vb6Xf98Yy-~IRRSDySo zzbOB6asGSw`;P|UAI-%7>nnVn_7(<^L$MujRvD-Z{~L1n>kL2+Td>+_ni$AWd-<`8eR2z%v0LwPRz_&(R@odG|xK(0l?T{Py5Ci3T{{{@IM=WG#I zWi`cPgB_i|MB~So3@XEov&?%gNq;*LJ9*MIyufuaF2>DT!nnpmVO(qlNfya{BP|J` zY7*uZ&qZV}mrUAz-R`usOI#6PGCphoVVH~DMJJ2NYkz`|5;BJPgLa|4Rb?l8f_xh74WYJiPf|LH zEnfVa+ENdj;OVw6<-8)x-=$JtSwP|1$mXlC`B`^8$|0S-`&wMR_Yz z2pb|YCY_^{0PDbV*c@10!RZaUE6h}d)*vNh+&Da?1ZQ01wDx4WMv;`qV3yqlas^xE zUo73uJYh^;oAV5M?f>wMYwoH^s_dTBajV~_J|316VX*RK z;Mu}DBLnGtWD#Qe=siO3+riiS71hNiP*p9gmsPCRl)w$Qv#zPGW=ZP+2@w*RK~h)% z#eMmC1Bg6I0FSVPFY(uDD2-Q!<8_cM_7jNfyQud>mzK2XH~Qx$R6<(!F;YFMiPqH1 zCi=si+NSVw_DY@OiSXV@q{mw7xP?sYLPzhuu5LzTgHx?**$!wG1P!vEBn^7iKOkV zJv+zHJ-ZcZ2YV}O%()3$9`g1x5!qpzXi6!u8mxe{r-%hZGTy&hxCYk^&$4 zt?DKE4}g_*fK^~D19^?Ddr995?H5;ERtC(vyP40AeAjeRUAxAj36ZFFwRZB2VOX$;JB~wMwZRSF69!U?s_y@;Q$UdD4(w2T-7))y1B=MY${aZpS+r&OWIw8E=&4CN8ecaq0e3 z>88k|X3jIzOb^_h2BOjW8bx$kF2w4mX(!KDcpbJ*_JN(c0%xi1r{{+Ip_fi|Ov-&1 ztEJT;6xY%jX~{dLy{BhZ_V`7;KBvFN+dTK;QD;O3MN3t?9g=TuhNf3Cb<1h*o1;9y z{vhU4vS*c`w`in|p>m=#RF{b8^+CWCswL~YDtsbrUD>IYjdTcX;PxwI~oyhJe2)YVr zbpmSr)(j4eRwwu+$oYQKD3;DVJ+_o=>CK|6rjvKAtW@o#^s66ro$*GUeJ4#bVCvLr5)%y%N zQ6yo+WTm3TiDOld{@HQp7ff{mqGGjET8 z^yER1czn9pds-=QFV=xJ(OKYpUWc8PS{-7$U2V!!-UZ7wJ;A?^Gr5t_B^XX5Wf*kmU4}CXQgf*rC|g1qOPD3;7<7D9KhB3+~?*iA1bl<1MrN z7XL$Qu|COcR8m>z>y#Z&P}^wIXj#Qzub7j!d9;?$^+^y9cw@SUjL&i@I`on;$2cHz=W8$fkJ7^$CiGg~sQ;SyM@t zDeY_L(%s+rn3^dVa-A`iorcv3K)yeQbaKqXt2o!ay(!YG1PkLyy?igY{`*eHSHk@6 z^&f@4B|#3i9lirO@{}NDA(Tw%YpxwaRRT%}+92lf%lhHh5eoS0Sc%^zZ?Ed0w$3s# zsc0$uuvd(&;4|LhgD0>3raAtsb*mp%aM-cX1D~)jP;6C4o8&}r#8S_Uz|QBywYG~N zzUPb>l@pu}joIAWN4m^yQg#;`P0<+lnEku!u-z3-da9a%j<77I9{JFA&Ek}={eC81 zbPxG!k0g^s3iM5TWmcP_MF>v4*R6Q6Y^s`DH0Z5?!TIv{u1%2C1VRvR3V-DudgIm% z@|2$(EynN04E*Twcsn&oo3AR9mSiv9%GJX85tEqpRxmep=A`j!`2y#-lzd00xLtq5 zUFxF;yUzW{PknYsKIBVO;HY@UN+Sz~D1EJ*vo7Rb#DfQvP_ZR*dC&7!99KUI951pM z@M9uyl156aD+$8|Akg6U#2vvd3QAoM7^=KAIHi2NVS?3q)r6I~X@W zgyNQfM|2S~1QdxzAwL+gF}~;*S)k+Rl&z=!q<}=!>l>ACFHqAMy9BBQ^>sxZ)%|@) zbnJx>sRpwEW2GUiZxHQgoeBw-_+wvYr=H80_Nv}@zVmVE&Nt0m%GYXv>SdQ(9KZ;_ z8T_wA+FQ_rZNP8P&-BUiQ9yBeMe38A{|jP7Np+ft{?*~#YYcvcC0-Aw#f_Q|wuO@1 zy;(@Ftn(iWuk3rr?2mp2Hzszz+)JC@DvLZ&5N^@>c8}e6oaRaY`24g!DRz7mqqn9F z^{0==)6*#7v!`Ty6m;{nCYzCdcq7v z+!CL#+gMqwYp7ZDvFqojljo#b55E$f4|@6GEKK6I(}iu|x6l{zU=4ZNee1NDsMOD* z)6j!R3WVf1(U4&gVB*x_(&v7xPl*;r! zG)pas-Y{?Mp^`l5>DOZ9q_fKg0SuV5yRs9VMlnbHs7=_B{p}|c+`*kHFsU<}!Y%>v zx;kxIKI6Xs7veh$UpX2=7oYZesFhYRlz5VM zwcZPw}>Gu=y4?=;uaa`LmMdM)#eyDkTKrPz10R@3kDGYayHK3s&?Qx$#A(r~kM6@R^I zm?M;V%1eO6MA(e-6X2}X8Y~iGoJjI><#6Di6DaZ%fO{dvEktXHo$DO4Q+AXd%F7~J ziYF|w&d9gzNr@6meES~<^%hp*5j~ukbt8SjyW;5m@l6yOtu)g*fYy=B!SC zuv9;7>PF|ZZlrfZOQtYwa2DX{YCBhl8Bi8s{5|_N>!i%Oc8``|2+d6SRBZ6GxD#)< z>k6^scSsIox3$cb=_3&qm6cqkT|4p;fpJ;_-)miOJWYL3ruZ~A98MNlYCAK7WAuVI z@#r1!qogk_;)UrCo<%URAUEfwItwJT{Y*6~7M+tcb6+eu0XgVubN9C-*)8~;%_8<$ zToY_UPq#XvHPMx9*%sj>b@c0{mc?Jk9OT~Tc6~s4<={C!oO=}M7eO4HNiQWF$8!Jz zMv!6Lwab|5Ta>zLz+HnEGYXV4czlH)B9A^GznbHdGaFd6_uY_iPZxSL>3)3Z)O!sV zO>`-CCfnySI;Qa`8P<8Ol-goEB!|4TD0%J3&I>qYd1xr+s)6Q)ugqFyBeM8_L)UBo z_)6!lV0Tv*{WR3h8l3iluLBCfi8=bYqkYt?TQ?}|>w5E!6m=ZT%~DlkOLcS0*R==$rl>(kmrcl19!4G=tESK0(zo6_IBGWc3_wmxh?&Vf=s zE7t@Y>zqs7izORr#6MQ_DKwKq6|}@U{g|wX%oIBQ=2bH~lrCnQ{4#=vh|n_{-TVu3Lv!lR^wioi7OXEt2=Q$^Y2(Hm)1}{VJpw)1ppto} z=2?2II{Pv8=6OPfr zUMyTEvksXw@)H^>|KzX?+C$$-Pu=_7hPZ->o}JJM&?>&+)>QHFrZGn#bL`KzKkVmW zWNXP#_|8RgAE*vVFshoZex;nQlE$CzBxyH4O*)lBW7PTb;9_54y__dSkv?j~lwq>0 zHLK#LLwq9Wk)J)Osrjge^)x{~ajo@G! z5M=Y)tBzzskPF*2ed4gY<}E&g7s-_BK9xRMk@wB}As=Vp;IZ<&56=rUYIS_pNBfYg zn@NtaJM*Z(q>x@ zkvY%^j)ws`elLeA?9HLgvbrRaPwEvqZD?jv*sZjkzWm~2l~E788{UPG!fDCRfB^8FC;eodevaVFLCTW~uJP+{rLf<-YXx_37=(8p z(Wuixf)2i+cjb@i-BYv#QVpWLPGMUPC8<87V`~1BZRsyuoDM%iX!KLK7-M=7mEA(d%bFcCx?a~k-RrEf12{vR07Gl{6KZj;Z z%l5YL^Kpomsr`EQnTe;F>Y^Y=6r;liL)<;qwU}`X$&E0C9V21c1cr*fHU*1i5jIi- z-1Xl~ws3{Wil;IiUE4AC*KoT|(sb>nr1z%cgX=l(k%ixw99bKWKEKlI zo#AEO#?zir6P8;#m{T1o4@tNhu6|P>#?=H#_yIqOUA{v^(U~NW=6FWy=tB0n8?5thHH;a*>S09}n2^9NZKH z0>YBIWWTJ4(q^{xLr+4vA1IN~32PguU;GEqD0mq*QWXln4&D4- zjC&~3EqBjw>ItpSIju!v*wR036gN8WrvnELAu7n1X~*ZP>hQdMXKe@U6xEX$T-rHN zf}(?6ZA-5mina^*Z^WQh;7Y6KZrFPMHknlK*K-z7yL4@VTbB`bTWkXwkbViYXQad6 z7R`}iE?7GVFl)PZM0MX#=KL;g$e}eF3{lM$)YN)6GAz()2l4VfpKduHh{LI87PrPb zXT`D2dNC%OL6&FkRESXVZ;a)#lDD#c9ZAqK|bWjjW9x?Wk zrKMtY`>41cLvvffhAa;t7#;miLXF=b*%O?bP-C2}2k*u;!8OboQl#}foUdHAdU3rc zbZ_6w;Hc`Bi_d5;|2abAmpSKCfQ4!B6?i6o5e{Y)fJ#Rq-*0NoK(z3Ukzhl}@B@?C zcS&<>sM%`4Dd*X`n*({uOpC41ZU*G1Lfn7So7&}#XD#S&c+j=A{r-aJ8#KtPt2iX} zf@`B6hi4+b;h3;i=;LGd(6i{G-6A))GBt+|^>Rglm7f=-|dX+F;*o~ zEiKJmY}s*gGun%*6l(WHN21QVZ&=uJZw$;9 zIlM2lkQ=s68bLUwIoXHZxORfyO) z(Gi7@5~Ao=d@M>Hq=|xgA>I+UI`t|oVpK)7a)>HQW(U+hk{Q|h#T-1skhse8qo`(Q z>a=nFb|GeSpEbx^w&beS{>d^nUIxĀnvo9o+iK$7r{?zC+B^;P(Jgrwbg`|sM; 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

?_W5)dt3L0uX&^89dLbjM0SiRN45c| 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