tag:blogger.com,1999:blog-364703982024-03-01T20:56:52.914+02:00Cloud Architecture and Technology BlogCloud, Security, Digital Forensics, UNIXcmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.comBlogger344125tag:blogger.com,1999:blog-36470398.post-3146053743564492822023-09-09T09:49:00.006+03:002023-09-09T09:49:47.823+03:00Understand GenAI Large Language Model limitations, and how Retrieval Augmented Generation can help<p> </p><h3 class="graf graf--h3" name="3514">Add context from private data and documents to GenAI LLMs to reduce hallucinations and increase performance through Retrieval Augmented Generation.</h3><figure class="graf graf--figure" name="b2e2"><img class="graf-image" data-height="482" data-image-id="1*k34NYOsRRbmLU8t6BkfQkA.png" data-is-featured="true" data-width="3161" src="https://cdn-images-1.medium.com/max/960/1*k34NYOsRRbmLU8t6BkfQkA.png" /><figcaption class="imageCaption">Use Cases for Large Language Models</figcaption></figure><h4 class="graf graf--h4" name="932e">Key use cases for Large Language Models include:</h4><ul class="postList"><li class="graf graf--li" name="ea98"><strong class="markup--strong markup--li-strong">Generation</strong>: LLMs can be used to generate text, translate languages, write different kinds of creative content, and answer your questions in an informative way. For example, LLMs can be used to generate realistic dialogue for chatbots, write news articles, or even create poems.</li><li class="graf graf--li" name="b287"><strong class="markup--strong markup--li-strong">Summarization</strong>: LLMs can be used to summarize text, extract the main points of an article or document, and create a shorter version that is still accurate and informative. For example, LLMs can be used to summarize research papers, news articles, or even books.</li><li class="graf graf--li" name="a025"><strong class="markup--strong markup--li-strong">Classification</strong>: LLMs can be used to classify text, identify the topic of a document, and determine whether it is positive or negative, factual or opinion, etc. For example, LLMs can be used to classify customer reviews, social media posts, or even medical records.</li><li class="graf graf--li" name="0853"><strong class="markup--strong markup--li-strong">Extraction</strong>: LLMs can be used to extract information from text, identify specific entities or keywords, and create a table or list of the extracted information. For example, LLMs can be used to extract contact information from a business card, product information from a website, or even scientific data from a research paper.</li><li class="graf graf--li" name="646f"><strong class="markup--strong markup--li-strong">Q&A:</strong> LLMs can be used to answer questions in an informative way, even if they are open ended, challenging, or strange. For example, LLMs can be used to answer questions about a particular topic, provide customer support, or even generate creative text formats of text content.</li></ul><h4 class="graf graf--h4" name="b31e">While Generative AI Large Language Models often seem like a panacea, they suffer from a number of key issues:</h4><ol class="postList"><li class="graf graf--li" name="4102"><strong class="markup--strong markup--li-strong">Hallucinations</strong>: models will ‘make stuff up’ if they don’t know an answer. They also suffer from a lack of <strong class="markup--strong markup--li-strong">contextual understanding</strong>. Techniques like <a class="markup--anchor markup--li-anchor" data-href="https://www.w3schools.com/gen_ai/chatgpt-4/chatgpt-4_few_shot.php" href="https://www.w3schools.com/gen_ai/chatgpt-4/chatgpt-4_few_shot.php" rel="noopener" target="_blank">few-shot</a> prompting can help.</li><li class="graf graf--li" name="aa88"><strong class="markup--strong markup--li-strong">Inference Performance</strong>: even the faster models are slower than a dial-up modem, or a fast typist! They also suffer from <strong class="markup--strong markup--li-strong">latency or </strong>time to first token. For most queries, expect 10–20 second response times from most models, and even with streaming, you’ll end up waiting a few seconds for the first token to be generated!</li><li class="graf graf--li" name="89a9"><strong class="markup--strong markup--li-strong">Inference Cost: </strong>LLMs are expensive to run! Some of the top 180B parameter models may need as many as 5xA100 GPUs to run, while even quantized versions of 70B LLAMA would take up a whole GPU! That’s one query at a time. The costs add up. For example, a dedicated A100 might cost as much as $20K a month with a cloud provider! A brute force approach is going to be expensive.</li><li class="graf graf--li" name="bb0e"><strong class="markup--strong markup--li-strong">Stale training data:</strong> even top models haven’t been trained on ‘recent’ data, and have a cut-off date. Remember, a model doesn’t ‘have access to the internet’. While certain ‘plugins’ do offer ‘internet search’, it’s just a form of RAG, where ‘top 10 internet search query results’ are fed into the prompt as context, for example.</li><li class="graf graf--li" name="8ca1"><strong class="markup--strong markup--li-strong">Use with private data</strong>: LLMs haven’t been trained on *your* private data, and as such, cannot answer questions based on our dataset, unless that data is inject through fine tuning or prompt engineering.</li><li class="graf graf--li" name="1bac"><strong class="markup--strong markup--li-strong">Token limits / context window size:</strong> Models are limited by the TOKEN_LIMIT, and most models can process, at best, a few pages of total input/output. You can’t feed a model and entire document, and ask for a summary or extract facts from the document. You need to chunk documents into pages first, and perform multiple queries.</li><li class="graf graf--li" name="37b5"><strong class="markup--strong markup--li-strong">They only support text:</strong> while this sounds obvious (from the name), it also means you can’t just feed a PDF file or WORD document to a LLM. You first need to convert that data to text, and chunk it to fit in the token limit, alongside your prompt and some room for output. Conversions aren’t perfect. What happens to your images, or tables, or metadata? It also means models can only output text. Formatting the text to output HTML or DOCX or other rich text formats requires a lot of heavy lifting in our pipeline.</li><li class="graf graf--li" name="e493"><strong class="markup--strong markup--li-strong">Lack of transparency / explainability:</strong> why did the model generate a particular answer? Techniques such as RAG can help, as you are able to point at the ‘context’ that generated a particular answer, and even display the context. While the LLM answer may not necessarily be correct, you can display the source content that helped generate that answer.</li><li class="graf graf--li" name="3a44"><strong class="markup--strong markup--li-strong">Potential bias, hate, abuse, harm, ethical concerns, </strong>etc: sometimes, answers generated by an LLM can be outright harmful. Using the RAG pattern, in addition to HARM filters can help mitigate some of these issues.</li><li class="graf graf--li" name="e88e"><strong class="markup--strong markup--li-strong">Training and fine tuning costs: </strong>to put it in perspective, <a class="markup--anchor markup--li-anchor" data-href="https://arxiv.org/pdf/2307.09288.pdf" href="https://arxiv.org/pdf/2307.09288.pdf" rel="noopener" target="_blank">a 70B model like LLAMA2</a> might need ~2048 A100 GPUs for a month to train, adding up to $20–40M training cost, not to mention what it takes to download and store the data. The: “Training Hardware & Carbon Footprint” section from the <a class="markup--anchor markup--li-anchor" data-href="https://arxiv.org/pdf/2307.09288.pdf" href="https://arxiv.org/pdf/2307.09288.pdf" rel="noopener" target="_blank">LLAMA2 paper</a> suggests a total of 3311616 GPU hours was used to train LLAMA2 (7/13/34 and 70B)!</li></ol><p class="graf graf--p" name="9f3b"><strong class="markup--strong markup--p-strong">It helps to think of of Large Language Models (LLMs) like mathematical functions, or your phone’s autocomplete:</strong></p><p class="graf graf--p" name="235d"><em class="markup--em markup--p-em">f(x) = x’</em></p><ul class="postList"><li class="graf graf--li" name="e22c">Where the input (x) and the output (x’) are strings. The model starts by looking at the input, then will ‘autocomplete’ the output.</li><li class="graf graf--li" name="9a8b">For example, f(“What is Kubernetes”) = “Kubernetes, often abbreviated as K8s, is an open-source platform designed to automate deploying, scaling, and operating application containers.”</li><li class="graf graf--li" name="445a">Most chat interfaces will also provide a default system prompt. For <a class="markup--anchor markup--li-anchor" data-href="https://replicate.com/blog/how-to-prompt-llama" href="https://replicate.com/blog/how-to-prompt-llama" rel="noopener" target="_blank">LLAMA2</a>, this is: “<code class="markup--code markup--li-code">You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature. If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information."</code></li><li class="graf graf--li" name="ab8b">Depending on the model and interface, there may be ‘hidden’ inputs to your model. Many Chat interfaces will include a conversational memory, where they insert a moving window of your previous prompts into the current prompt, as context. It would look something like this: “Below are a series of dialogues between a user and a AI assistant…. [dialogues] [new content]“</li></ul><h4 class="graf graf--h4" name="a0c8">The inputs to a model are a little more complex though:</h4><p class="graf graf--p" name="2e7a"><em class="markup--em markup--p-em">f(training_data, model_parameters, input_string) = output_string</em></p><ul class="postList"><li class="graf graf--li" name="faf8">training_data represents the data it was trained (different models will provide different answers). While not an ‘input’ as such, the data the model was trained (and how it was trained) on plays a key factor in the output.</li><li class="graf graf--li" name="7405"><a class="markup--anchor markup--li-anchor" data-href="https://huggingface.co/docs/api-inference/detailed_parameters#text-generation-task" href="https://huggingface.co/docs/api-inference/detailed_parameters#text-generation-task" rel="noopener" target="_blank">model_parameters</a> represent things like “temperature”, “repetition penalty”, “min tokens” or “max tokens”, “top_p”, “top_k”, and other such values.</li><li class="graf graf--li" name="b8cc">input_string is the combination of <strong class="markup--strong markup--li-strong">prompt</strong> and <strong class="markup--strong markup--li-strong">context</strong> you give to the model. Ex: “What is Kubernetes” or “Summarize the following document: ${DOCUMENT}”</li><li class="graf graf--li" name="933c">the ‘<strong class="markup--strong markup--li-strong">prompt</strong>’ is usually an optional instruction like “summarize”, “extract”, “translate”, “classify” etc. but more complex prompts are usually used. “Be a helpful assistant that responds to my question.. etc.”</li><li class="graf graf--li" name="577e">The function can process a maximum of <strong class="markup--strong markup--li-strong">TOKEN_LIMIT</strong> (total input and output), usually ~4096 tokens (~3000 words in English, fewer in say.. Japanese). Models with larger TOKEN_LIMITS exist, though they usually don’t perform as well above the 4096 token limit. This means, in practice, you can’t feed a whole whitepaper to an LLM and ask it to ‘summarize this document’, for example.</li></ul><h3 class="graf graf--h3" name="1287">What Large Language Models DON’T DO</h3><p class="graf graf--p" name="4e20"><strong class="markup--strong markup--p-strong">Learn</strong>: A model will not ‘learn’ from interactions (unless specifically trained/fine-tuned).</p><p class="graf graf--p" name="c7bb"><strong class="markup--strong markup--p-strong">Remember</strong>: A model doesn’t remember previous prompts. In fact, it’s all done with prompt trickery: previous prompts are injected. The API does a LOT of of filtering and heavy lifting!</p><p class="graf graf--p" name="263b"><strong class="markup--strong markup--p-strong">Reason:</strong> Think of LLMs like your phone’s autocomplete, it doesn’t reason, or do math.</p><p class="graf graf--p" name="7d36"><strong class="markup--strong markup--p-strong">Use your data:</strong> LLMs don’t provide responses based on YOUR data (databases or files), unless it’s include in the training dataset, or the prompt (ex: RAG).</p><p class="graf graf--p" name="912d"><strong class="markup--strong markup--p-strong">Use the Internet:</strong> A LLM doesn’t have the capacity to ‘search the internet’, or make API calls.</p><ul class="postList"><li class="graf graf--li" name="98e2">In fact, a model does not perform <em class="markup--em markup--li-em">any</em> activity other than converting one string of text into another string of text.</li><li class="graf graf--li" name="b238">Any 3rd party data not in the model will need to be injected into prompts (RAG)</li></ul><p class="graf graf--p" name="d834"><strong class="markup--strong markup--p-strong">Adding a LLM to your software architecture:</strong></p><figure class="graf graf--figure" name="7504"><img class="graf-image" data-height="2089" data-image-id="1*aUD4euAjDnRreb9hTcjghA.png" data-width="3420" src="https://cdn-images-1.medium.com/max/960/1*aUD4euAjDnRreb9hTcjghA.png" /><figcaption class="imageCaption">A LLM is much much slower than a Faxmodem!</figcaption></figure><p class="graf graf--p" name="8e1e">Believe it or not, LLMs are <strong class="markup--strong markup--p-strong">much slower </strong>than even a faxmodem! At WPM = ((BPS / 10) / 5) * 60, a 9600 baud modem will generate 11520 words / minute.</p><p class="graf graf--p" name="d4b6">At an average 30 tokens / second (20 words) for LLAMA-70B, you’re getting 1200 words / minute!</p><p class="graf graf--p" name="b228">Large models (70B) such as LLAMA2 can be painfully slow. Smaller models (20B, 13B, 7B) are faster, and require less GPU to run. Quantized models are also faster, but provide lower quality responses.</p><h4 class="graf graf--h4" name="d6e0">Quantize your model for faster inference</h4><p class="graf graf--p" name="f6b8">You can <a class="markup--anchor markup--p-anchor" data-href="https://huggingface.co/docs/transformers/main/main_classes/quantization" href="https://huggingface.co/docs/transformers/main/main_classes/quantization" rel="noopener" target="_blank">load and quantize your model</a> in 8, 4, 3 or even 2 bits, sacrificing quality for faster inference speed.</p><p class="graf graf--p" name="c0da">This is always a tradeoff, as you’re sacfificing model output quality for faster inferencing. Since a quantized model needs less GPU VRAM to run in, this helps you run large models on commodity hardware.</p><h4 class="graf graf--h4" name="8847">Reducing model hallucinations:</h4><p class="graf graf--p" name="fe12">LLMs lack context from private data — leading to hallucinations when asked domain or company-specific questions. RAG can help reduce hallucinations by ‘injecting’ context into prompts. Papers:</p><ul class="postList"><li class="graf graf--li" name="acb0"><a class="markup--anchor markup--li-anchor" data-href="https://www.pinecone.io/learn/retrieval-augmented-generation/" href="https://www.pinecone.io/learn/retrieval-augmented-generation/" rel="noopener noreferrer noopener noopener" target="_blank">Retrieval Augmented GFeneration as a mechanism to reduce hallucinations</a></li><li class="graf graf--li" name="0f79"><a class="markup--anchor markup--li-anchor" data-href="https://arxiv.org/abs/2104.07567" href="https://arxiv.org/abs/2104.07567" rel="noopener noreferrer noopener noopener" target="_blank">Retrieval Augmentation Reduces Hallucination in Conversation</a></li><li class="graf graf--li" name="6d58"><a class="markup--anchor markup--li-anchor" data-href="https://arxiv.org/abs/2308.06394" href="https://arxiv.org/abs/2308.06394" rel="noopener noreferrer noopener noopener" target="_blank">Detecting and Preventing Hallucinations in Large Vision Language Models</a></li><li class="graf graf--li" name="2846"><a class="markup--anchor markup--li-anchor" data-href="https://arxiv.org/abs/2201.11903" href="https://arxiv.org/abs/2201.11903" rel="noopener noreferrer noopener noopener" target="_blank">Chain-of-Thought Prompting Elicits Reasoning in Large Language Models</a></li><li class="graf graf--li" name="b173"><a class="markup--anchor markup--li-anchor" data-href="https://arxiv.org/abs/2305.10601" href="https://arxiv.org/abs/2305.10601" rel="noopener noreferrer noopener noopener" target="_blank">Tree of Thoughts: Deliberate Problem Solving with Large Language Models</a></li><li class="graf graf--li" name="8969"><a class="markup--anchor markup--li-anchor" data-href="https://arxiv.org/abs/2308.11764" href="https://arxiv.org/abs/2308.11764" rel="noopener noreferrer noopener noopener" target="_blank">Halo: Estimation and Reduction of Hallucinations in Open-Source Weak Large Language Models</a></li></ul><h3 class="graf graf--h3" name="cb8c">Retrieval Augmented Generation and the importance of Vector Databases</h3><p class="graf graf--p" name="ab2e">A vector database is a specialized database designed to store and query vector embeddings efficiently. Vector embeddings are numerical representations of text, images, audio, or other data. They are used in a variety of machine learning applications, such as natural language processing, image recognition, and recommendation systems.</p><p class="graf graf--p" name="d2bf"><strong class="markup--strong markup--p-strong">Near Vector search or how to Search for “Sky” and find “Blue”:</strong></p><ul class="postList"><li class="graf graf--li" name="bb31">Finding the most similar documents to a given document</li><li class="graf graf--li" name="e7e2">Finding documents that contain a specific keyword or phrase</li><li class="graf graf--li" name="b64b">Clustering documents together based on their similarity</li><li class="graf graf--li" name="6712">Ranking documents for a search query</li></ul><p class="graf graf--p" name="02c3">Popular vector databases include ChormaDB, Weaviate, Milvus.</p><p class="graf graf--p" name="1ad0"><strong class="markup--strong markup--p-strong">Advantages of using a VectorDB with your LLM, in a Retrieval Augmented Generation Pattern:</strong></p><ul class="postList"><li class="graf graf--li" name="d770">Insert your data into prompts every time</li><li class="graf graf--li" name="0b8d">Cheap, and can work with vast amounts of data</li><li class="graf graf--li" name="5417">While LLMs are SLOW, Vector Databases are FAST!</li><li class="graf graf--li" name="d241">Can help overcome model limitations (such as token limits) — as you’re only feeding ‘top search results’ to the LLM, instead of whole documents.</li><li class="graf graf--li" name="0c80">Reduce hallucinations by providing context.</li></ul><figure class="graf graf--figure" name="6160"><img class="graf-image" data-height="487" data-image-id="1*kzn4Bat9LXgoE_cmYpjmHg.png" data-width="1009" src="https://cdn-images-1.medium.com/max/960/1*kzn4Bat9LXgoE_cmYpjmHg.png" /></figure><h4 class="graf graf--h4" name="f01b"><strong class="markup--strong markup--h4-strong">Loading Documents into your Vector Databases:</strong></h4><p class="graf graf--p" name="8693">Loading data into your vector database typically requires you to convert documents to text, split the text into chunks, then vectorize those chunks using an embedding model. <a class="markup--anchor markup--p-anchor" data-href="https://www.sbert.net/" href="https://www.sbert.net/" rel="noopener" target="_blank">SentenceTransformers</a> offers a number of pre-trained models, such as <strong class="markup--strong markup--p-strong">all-mpnet-base-v2</strong> or<strong class="markup--strong markup--p-strong"> all-MiniLM-L12-v2</strong> that perform well for English text.</p><figure class="graf graf--figure" name="f312"><img class="graf-image" data-height="592" data-image-id="1*dlyUqmzR11QOgmr4DQAvWg.png" data-width="893" src="https://cdn-images-1.medium.com/max/960/1*dlyUqmzR11QOgmr4DQAvWg.png" /></figure><h3 class="graf graf--h3" name="f816">Scaling factor for RAG: what to consider:</h3><ul class="postList"><li class="graf graf--li" name="242a">Vector Database: consider sharding and High Availability</li><li class="graf graf--li" name="3234">Fine Tuning: collecting data to be used for fine tuning</li><li class="graf graf--li" name="f599">Governance and Model Benchmarking: how are you testing your model performance over time, with different prompts, one-shot, and various parameters</li><li class="graf graf--li" name="9d36">Chain of Reasoning and Agents</li><li class="graf graf--li" name="c610">Caching embeddings and responses</li><li class="graf graf--li" name="d349">Personalization and Conversational Memory Database</li><li class="graf graf--li" name="2901">Streaming Responses and optimizing performance. A fine tuned 13B model may perform better than a poor 70B one!</li><li class="graf graf--li" name="96d5">Calling 3rd party functions or APIs for reasoning or other type of data (ex: LLMs are terrible at reasoning and prediction, consider calling other models)</li><li class="graf graf--li" name="fd47">Fallback techniques: fallback to a different model, or default answers</li><li class="graf graf--li" name="8e48">API scaling techniques, rate limiting, etc.</li><li class="graf graf--li" name="e703">Async, streaming and parallelization, multiprocessing, GPU acceleration (including embeddings), generating your API using OpenAPI, etc.</li><li class="graf graf--li" name="da73">Retraining your embedding model</li></ul><h3 class="graf graf--h3" name="1af1">RAG Talk from Shipitcon can be found on GitHub and YouTube:</h3><ul class="postList"><li class="graf graf--li" name="1ef4"><a class="markup--anchor markup--li-anchor" data-href="https://github.com/crivetimihai/shipitcon-scaling-retrieval-augmented-generation" href="https://github.com/crivetimihai/shipitcon-scaling-retrieval-augmented-generation" rel="noopener" target="_blank">https://github.com/crivetimihai/shipitcon-scaling-retrieval-augmented-generation</a></li><li class="graf graf--li" name="9158"><a class="markup--anchor markup--li-anchor" data-href="https://www.youtube.com/watch?v=lL4DPcxljH8" href="https://www.youtube.com/watch?v=lL4DPcxljH8" rel="nofollow noopener noopener" target="_blank">https://www.youtube.com/watch?v=lL4DPcxljH8</a></li></ul><h3 class="graf graf--h3" name="8707">Social media</h3><ul class="postList"><li class="graf graf--li" name="c6c3"><a class="markup--anchor markup--li-anchor" data-href="https://twitter.com/CrivetiMihai" href="https://twitter.com/CrivetiMihai" rel="noopener" target="_blank">https://twitter.com/CrivetiMihai</a> — follow for more LLM content</li><li class="graf graf--li" name="1c5f"><a class="markup--anchor markup--li-anchor" data-href="https://youtube.com/CrivetiMihai" href="https://youtube.com/CrivetiMihai" rel="noopener" target="_blank">https://youtube.com/CrivetiMihai</a> — more LLM videos to follow</li><li class="graf graf--li" name="231d"><a class="markup--anchor markup--li-anchor" data-href="https://www.linkedin.com/in/crivetimihai/" href="https://www.linkedin.com/in/crivetimihai/" rel="noopener" target="_blank">https://www.linkedin.com/in/crivetimihai/</a></li></ul>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-25709241325818250362018-09-24T22:44:00.000+03:002019-10-19T22:10:30.866+03:00Data Science environment with Docker and Jupyter on the IBM Mainframe<h3 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 20px; line-height: 28px; margin: 2.4rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
Guide to getting started with Docker, Python and Jupyter Notebook on zLinux.</h3>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Here, I'm using Red Hat Enterprise Linux 7.5 to build and deploy Jupyter notebook in an Ubuntu container. I will go over the steps used to build and run a Docker container.</div>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Oh, and in case you're wondering: why would anyone do this - check out this snippet from the <a href="https://developer.ibm.com/mainframe/2017/07/17/ibm-z-software-z14-announcement/" rel="nofollow noopener" style="background: 0px 0px transparent; border: 0px; box-sizing: inherit; color: #665ed0; margin: 0px; overflow-wrap: break-word; padding: 0px; text-decoration-line: none; touch-action: manipulation; vertical-align: baseline;" target="_blank">z14 announcement:</a> "Microservices can be built on z14 with Node.js, Java, Go, Swift, Python, Scala, Groovy, Kotlin, Ruby, COBOL, PL/I, and more. They can be deployed in Docker containers where a single z14 can scale out to <span style="background: 0px 0px; border: 0px; box-sizing: inherit; font-weight: 600; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">2 million Docker containers</span>".</div>
<div class="slate-resizable-image-embed slate-image-embed__resize-full-width" style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin: 3.2rem 0px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;">
<span style="color: rgba(0 , 0 , 0 , 0.9); font-size: 24px;">A few basic commands:</span></div>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Establish the OS release and version. We're running on RHEL 7.5 for s390x.</div>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;">[cmihai@rh74s390x ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release <span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">7.5</span> (Maipo)
[cmihai@rh74s390x ~]$ uname -a
Linux rh74s390x.novalocal <span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">3.10</span>.<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span>-<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">693.17</span>.<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span>.el7.s390x <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">#1 SMP Sun Jan 14 10:38:29 EST 2018 s390x s390x s390x GNU/Linux</span>
[cmihai@rh74s390x ~]$ docker --version
Docker version <span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">17.05</span>.<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span>-ce, build <span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">89658</span>be
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Setup regular user access, sudo and SSH keys</h2>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 2.8rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
Create a regular user account</h2>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;">useradd cmihai
passwd cmihai
usermod <span class="hljs-_" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-a</span>G wheel cmihai
su - cmihai
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Add your SSH public key to authorized_hosts</h2>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;">mkdir -p ~/.ssh
<span class="hljs-built_in" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">echo</span> <span class="hljs-string" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">"YOURKEYHERE"</span> >> ~/.ssh/authorized_keys
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Log in as your new user, and forward port 9000:</h2>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;">ssh -L <span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">9000</span><span class="hljs-symbol" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #720059; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:https://www</span>.linkedin.com/redir/invalid-link-page?url=<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">127</span>%<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">2</span>e<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span>%<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">2</span>e<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span>%<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">2</span>e1%<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">3</span>A900<span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span> -i cmihai.pem cmihai@myzLinux
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Setup docker</h2>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 2.8rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
Create the Docker group</h2>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;">sudo groupadd docker
sudo usermod <span class="hljs-_" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-a</span>G docker cmihai
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Start Docker</h2>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;">sudo systemctl enable docker
sudo systemctl restart docker.service
sudo systemctl status docker.service
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Test docker</h2>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;">docker run s390x/hello-world
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Let’s run a simple Ubuntu interactive shell:</h2>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;"><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">docker</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">run</span> <span class="hljs-literal" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">name</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">s390x</span><span class="hljs-literal" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">ubuntu</span> <span class="hljs-literal" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">hostname</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">s390x</span><span class="hljs-literal" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">ubuntu</span> <span class="hljs-literal" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">interactive</span> <span class="hljs-literal" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">tty</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">s390x/ubuntu</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/bin/bash</span>
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Building a Docker container for Jupyter Notebook</h2>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Create a Dockerfile from the s390x/ubuntu base image.</div>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;">FROM s390x/ubuntu
MAINTAINER Mihai Criveti
<span class="hljs-meta" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #0073b1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"># ADD AND RUN</span>
RUN apt-<span class="hljs-keyword" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">get</span> update \
&& apt-<span class="hljs-keyword" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">get</span> install -y python3 python3-pip \
&& pip3 install jupyter \
&& apt-<span class="hljs-keyword" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">get</span> clean
<span class="hljs-meta" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #0073b1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"># COMMAND and ENTRYPOINT:</span>
CMD [<span class="hljs-string" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">"jupyter"</span>,<span class="hljs-string" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">"notebook"</span>,<span class="hljs-string" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">"--allow-root"</span>,<span class="hljs-string" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">"--ip=0.0.0.0"</span>,<span class="hljs-string" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">"--port=9000"</span>]
<span class="hljs-meta" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #0073b1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"># NETWORK</span>
EXPOSE <span class="hljs-number" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">9000</span>
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Build the container:</h2>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;">docker build . --tag <span class="hljs-string" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">"cmihai/jupyter-lite:v1"</span> <span class="hljs-_" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-f</span> Dockerfile
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Run your new container:</h2>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;"><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">docker</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">run</span> <span class="hljs-literal" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">name</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">jupyter</span> <span class="hljs-literal" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">hostname</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">jupyter</span> <span class="hljs-literal" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">p</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">9000:9000</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">cmihai/jupyter</span><span class="hljs-literal" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">lite:v1</span>
</pre>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;">
Connect to Jupyter Notebook</h2>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://localhost:9000/" rel="nofollow noopener" style="background: 0px 0px transparent; border: 0px; box-sizing: inherit; color: #665ed0; margin: 0px; overflow-wrap: break-word; padding: 0px; text-decoration-line: none; touch-action: manipulation; vertical-align: baseline;" target="_blank">http://localhost:9000</a></div>
<h2 style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 2.8rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
You can now install depedencies directly from Jupyter:</h2>
<pre spellcheck="false" style="background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;">!apt-get <span class="hljs-keyword" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">install</span> <span class="hljs-comment" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--yes zlib1g-dev libjpeg-dev</span>
</pre>
<div class="slate-resizable-image-embed slate-image-embed__resize-full-width" style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin: 3.2rem 0px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;">
</div>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background: 0px 0px; border: 0px; box-sizing: inherit; font-weight: 600; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Potential next steps:</span></div>
<ul style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin: 3.2rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<li style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Consider setting up persistence for your notebooks (ex: VOLUME ["/notebooks"] in Dockerfile)</li>
<li style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Setup Docker Compose and build multi-tiered applications specifications - such as connecting your Jupyter Notebook to PostgreSQL, Redis, Spark, etc.</li>
<li style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Set up other programming languages or kernels (Java, R) even Zeppelin Notebook</li>
</ul>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">
For an interactive tutorial of using Docker for Data Science, check out: <a href="https://github.com/crivetimihai/docker-data-science" rel="nofollow noopener" style="background: 0px 0px transparent; border: 0px; box-sizing: inherit; color: #665ed0; margin: 0px; overflow-wrap: break-word; padding: 0px; text-decoration-line: none; touch-action: manipulation; vertical-align: baseline;" target="_blank">https://github.com/crivetimihai/docker-data-science</a></div>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: "Source Serif Pro", serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">
To see the original article, check out <a href="https://www.linkedin.com/pulse/data-science-environment-docker-jupyter-ibm-mainframe-mihai-criveti/">https://www.linkedin.com/pulse/data-science-environment-docker-jupyter-ibm-mainframe-mihai-criveti/</a></div>
cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-41623441952696043322018-08-13T10:29:00.000+03:002018-08-13T10:29:19.750+03:00Learn Cloud Native, Docker, K8s & Istio with free courses and IBM Badges<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Microservices are the building blocks for cloud native architecture. Learn how to create and use containers with Docker, manage and orchestrate Containers with Kubernetes and secure and connect microservices with Istio.</div>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAE7CAYAAAAB7v+1AAAAAXNSR0IArs4c6QAAAgtpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpDb21wcmVzc2lvbj4xPC90aWZmOkNvbXByZXNzaW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cg9FKpMAAEAASURBVHgB7L0HgFzHdSV6X8fJATnnOMg5MYA5AYwgRZGismxZsiXtetdyWK/tb62+7f3r3bVkr770ZdkiRYqZIphzRCBIgiByTgMMMDlP5/7nVPeb6RlM6O7pGUy4BfR09Xv1KpxXr+q8W7fuFdGgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAopAHyBg9UGemqUioAgoAoqAItAtAtFolOc5B+UhOuZibXhGZV14cjAs+TgY8bit+nHFzlPF+Y4z+F2OdE3mAkunLeKgYeAj4Br4VdQaKgKKgCKgCAwVBOLEytPsj845Xha85cDp4DWnK0ILLlSH82saI3n+YNRFCuX1WMFRBc76scWO+mlj3XvmT3a/PXO861VcfxKng5YSraHSJYZsO/RVYMjeWm2YIqAIKAIDB4E4scoCiVr2+cnAgzsP+zftPhaYdK4q5GxsiYoRaHWckSDkcjpE8nMcMmW0K7hspufU6nne5xdP8zyal23tQ+sCSrQGzj3WmrRHoGN3bn9WfykCioAioAgoAmkiECdVvDq7vC6yZu/JwEPbDvhu2XXEP+58ddgKR2JrhD0Jo0i+uKDocopMHuWKrp7rLV1f4n1+0TTPb4rzHLtxyqdEizBrGEgIKMEaSHdD66IIKAKKwBBAIIFY5WHp74rdJwyxuvGTY4GRF2vCVgRsyZHm7MNrKdWaMMIZXTnHe3FDifelRdM9j4wpdO4EdM2ET8nWEOhEQ6AJaXbxIdBybYIioAgoAopARhFIIFZF5yrDGz895v/yhwf9G7EUWFxRHzZiqJ6kVclWiFIt5jW22BldMctTtaEk6/UlMzwPjx/h/AB5NDAfJVrJoqnp+gIBJVh9garmqQgoAorAMEIggViNPFMeumHX0cCXsRR4xZ4TgfzqBqwDImSKWHWE1dbdGl3gFOho1WDp8J0Vs7wPTxzlfBtpa2Nl61TXETf93fcIaK/re4y1BEVAEVAEhiQCcWLFeWTMsbLQrR8f8UPHyr9676lAbm1TxNhg6Cti1RFQQ7RwEGYdZMl0TwOWDj/AEuIjU8e4XsPhSqZXiRZR0NBfCCjB6i+ktRxFQBFQBIYIAjaxCoWjE4+dD93+0RH/gyBWyw6cCWQ3YEcgJ5b+IlYdIbUV4otyHbJwqrtpfUnWR1CKf2TGeNdLqNdFpI8q0eqImv7uCwSUYPUFqpqnIqAIKAJDEIE4sXLAVtXUo+eDd+08FHhg20HfwsNng94m/+UlVh3htolWfrYlJVM8Levnez+DiYffzBrv/h12I55DeiVaHUHT3xlFQAlWRuHUzDKJwMr775NQXpZknatzBiJOjoaZzL5dXszZFQlFc6K+SMhyygevvdTuvP5QBIYzAnFi5fQFozMPng3eu/Og/wvbD/rngWS5WwIgVniA+u7p7B3yNtHK9Voyd5Lbv25+1v6187yPzZnoegbW4k8h94hKtHqHsV7dOQJqyb1zXPToAEDA1RgRWCAstFzuP/KKTEKVYtqyfVM3bPz27PeHXL8Qh/j6pgjNVREYXAjEiZULJGrevlOB+0Gqtuw45J914kLICSmWIVbpmlvoLyRs8tcMIvjp8YD3wNng8vf2tSxaNy/rK2vne5+Ahfgn0c6jqE9YiVZ/3ZXhUY4SrOFxnwdnK2krJxrNEaf1BTRgYczUYF81xaIC7GthS/4dMSVYfQWz5jsoEIgTK099c2TR/lNBLgPeBcvrU09dDDngK9DYsBroxKoj0JSwkWyRGO49FXQfKQ0tfG+fbz6kWV/CzsOnF071/BbtPohk6oanI3j6Oy0ElGClBZte1M8IgGrhvx3s7UL27958c8Q1gflbcSWS+CH9UgSGGQJxYpUF0wrLsROQiutUYJ9YWhmyQoOUWHW8hTbRCoajcqg06IQ/xDnv7/f9cO1c7xfXlWQ9t2ia+1Hg8Dmu86tEqyN6+jsVBJRgpYKWpr3sCESdLol6sjKzRQlEzeGH4edIX648XnbItAKKQLcIxEkV0+TQnQ38BNrubMaWxd3ZUFo12CRW3TY6fpJtorue42Uhx+mLoWkfHPB/HzsOt0Ah/kW44XkE2HyMpOqGJxkwNc0lCCjBugQSPTBgEQARCk6cJvXXfVGibk+smiRHRskCIyXjDqhSUdplfHEgbjRc8ZvHE+NI5WislaJX/l2ctRWZIWwDFjitmCJwKQIJxCq/rCp8xWeGWPlv+OSof+TF2rDFx4WP1lAkVh3RYBs5ZJwuD1mQ1k2CkdTfgw2tO2FL65Ul070kWttxTROvU6lWR/T0d1cIKMHqChk9PgARiBrpVXD0RHHWV4ujpVGCY6eKq7pMuH4RHD1J3OVn4ajMKcFRE8R94bREvdkSKh6D+CmJ5BRIJK/IxENFoyWCNFEXHwGMrAN2D9QAvA1apUGNQAKxKgKZuObTY7S6Dnc2x/1FFfV4SYkTq9bV80Hd2tQqT6JFYnm+Kmxt3dE8duch/1eWz/JsghueN5fO9DwM/4fvAb965qpEKzVsh2NqJVjD8a4P8jbz1Tpnz3viPXtEqu/6ruTteAlkq0lqb/2aFLz7pES8uVJ3wwNS+OZjEhg3TRrX3ipFrz4svllLpKVkrRS9+EtpWn2TtMxdEeNWgxwPrb4ikAwCCcRqFCQ1N+w64iex2rDnZCC/JtGdDUjGcA82uYRjanl5V8vIjw7771s203sTlOHfXTnb+/CkUc43gWcNcVKiNdx7S9ftV4LVNTZ6ZgAjYIVDUJ4ImhoybsXjEgqK5YodN/EwNHMRLB5nHOSMcYnEjpuT+kcRGMIIxIkVdnDI2OPnQ7eCWH0JuwJX7zsV7Hd3NoMNZptoVUGy98bulsKPj/pvXzzdcy2WDrfRDc/0sa5XgC90DJRoDbZ72x/1VYLVHyhrGZlHwIx8ia/adhzf9qjI74TD7eKZr5HmqAgMKARsYhV3Z3MHpDAPbjvoX5rozmY46Fdl4qbYQ0otbPO9u9eX99nxwI0LpvqugETrY7rhmTnO/QLwvoCy1Dp8JgAfInkowRoiN1KboQgoAooAEYgTK0cgJFOPlAbv3nHI9wAMhC44XNrmzkaJVXp9xX5ng30wAVnNwY7Lq9793Lca/g6/sWau99FZE9zPAX8ogirRSg/hoXWVEqyhdT+1NYqAIjBMEYgTK6cvEJ118Gzg3h2HAnBn45sLZ8yt7myUWGWmc9hEi/4Xdx0NZO0/E1wDydaydfO9X4Ph0t/CJc/TuB8nUZpah88M5IMyFyVYg/K2aaUVAUVAEYghECdWJFHzYBzUuLPB7reZJ8rgziY0ONzZDNZ7SQ0Eki36Y/zsRMBz6Gxw6Xt7fQvh7/DLcMPz5IIp7idwf44gWUiV4QfrXU6/3kqw0sdOr1QEFAFF4LIhECdWcGcTXQw/gXRncyfd2cBg5qB1Z3PZwOxlwTbRCoDQQprlOno+VAI3PH8JadaDMFr6zMJpnsdwv/ajGHXD00usB9PlSrAG093SuioCisCwRyBOrLKqGiIr9p0MYEegfxMU2GPubGhrF7O9LgVevm5C7LGxQI6cCzpOXgjO+mC/7z9BEf4LsKX1/MJp7t/g/n2G2qkbnst3i/qtZCVY/Qa1FqQIKAKKQHoIxEkVL84prw2v/fxk8KEPD/hugdmAMUPdnU16iF3+q0i06IbnxAW44SkPTYXNsT9cNcdzDxTiX1o83U3r8B+hli26dHj571Vf1UAJVl8hq/kqAoqAItBLBBKIVT6I1JXQ8yGxuuHTowG6szFWx6kDpBKrXgLdh5fz3tA6/JkK44ZnAnZ0fmPlbM/tIFqvLZlh/B1+iOIbWQUlW314Iy5D1kqwLgPoWqQioAgoAt0hkECs4M4mfC38A34ZS4FX051NZR3EIghmJxsmbw2DAwGbBFPiuPWjljE7Dge+tHym51YsHb4NdzwPTxjpfAf3vY6tUaI1OO5pT7VUgtUTQnpeEVAEFIF+QiCBWI06dTF0E5YAH8LS0vo9J+DOBkYuGUisNAxeBOz7VwEJ5KuftIyAZf17IMm6Adbh3181x/vw5NGuN9APqthCJVqD9z6z5kqwBvf909orAorAEEAgTqzoZnPs8bLQbR/Rnc0BuLM5Hcypa4oYJwT2xDwEmttlE7CShvW02Omh3l67fdXwA/nWHl8BnG7ftmiafyOsw++gdfgZ41wvo1+UExElWrE+Mdj+KsEabHdM65shBFQMkCEgNZteIGATq2BYJh07H6Q7mwcgsVoGQ6FZDS2wYYW87aWlXhQzKC6NgFh53ZZke2LPZrM/IrBGP+TbT6LFFpNIv7/fl/vZCf917+71rId5h09Xz/M+Mmu8eyv6yXkkUaI1KHpyWyWVYLVhobHBhEAEb/X4mNddapDGnTdb0YhEeQ6HLB4zcZ5HWqZjMPHYckvsgP5VBPoXgTixcviD0Wl0ZwP7VV+EjtVCuLPxNMM6+HAiVnwqXQ6R1bO9cvPKbIEDZfOoHi8Lysu7WmjAU0i+hnqwiVYjiPWOQ/5sGI3dAOvwK6EM/3W44Xls9kTXs+g3Z4BDRCVag6M3KMEaHPdp2NaS1AiTzSXDa2j0RExCUYk63RIcN00c/hYRp0sCk2ZL1J0lURfik+dKaMQ4xD3inzpfQiPHS9STJf5pCyRcNLqTXIctzNrwfkIgTqzozmb2gbPBe3ce9N8HdzbzjpaFXDhm9KuGi8TKhpzk6va1OfL7t+bL6EKnfViglySwiC7/8kK9vPxxS+v7UWuCIRqxiRaJ9ifHAt4DZ4KrQLSWwg3PV2G49PH5k91PoR8dR/PVDc8A7wN8UdIwHBCY9Ndy9ao9Egi6SvAAr0OTB8O9p8ypCEzoB6jvJEqp/DMXS81d34Ws3AEpFQmWU6wwJFUIUQficUlWaxyNNWkjIfMtvI5xh0ucTXUy4vH/Ia4qSN953HK8Gg6H78PbYf2OF54yeQ7FP2s23cVmufEhcJGdLzzL3xr6EIE4sXJj0py/7zTc2Rzwb4GUYsbJCzF3NsONVNlQUzIFkwXyoy8Xy9jiNnJln+d3aWVI/vzfamTvqeCQXy5MbLcd59slB0Iun0IvK7xunvcoiOdTMFr6eJbHOoTT6obHBmuAfasEa4DdkD6rzhY8pEfxquiUq8Em/hfpSJ+VlcGMyQIxuMRGXpAgV+V5KXj9UShm9Lb6llhBnzia6lHCYOCamQF13aZ7CWix5XL8AN9HwuHQU2s33+PfsfXpzBSgubRDIE6s4M4mshgE4cHtB4w7mykwPKnubICU12XJLVgW7IpcEcxJo1xy4/JsgZ8/Y7izHcDD4AdHJ0q1gnDDc/Bs0AldvXnQ1frzNfO8D6yfn/Vs3A3PXiQL6NLhwOoQSrAG1v3ou9oUc17FaxBWIaJW1Ikfnb8u9l0Nep8zRhlnfbXk7nmX7egdLyIUHLkg9TKjV+9rN+BzWHvrFgmHIllOt/V93P8/BQRNTodrBuSAP1m/+d7abVufHPBtGCwVjBOrrKr68EoSK+hXbYYC+4RzlSErBPU/SqyGq9TKvoccjgpzLSmZ4rEPdfm9YKpb8rMdQlMVJBvDNbDP0Do8fB06Tl4Mzfhgv/8/Qj/rPuw83LpomodueD4FNj4lWgOjhyjBGhj3oe9rQULSScC2lE6OpnfI5MRRk8Hkm6m8kWdCvhEs72UqcJlxOIS1m0iuoKXmdnwNArsfYCDmrObBffpzyPJm4Pf/deUd95/0hf2yS5cM0+oScVLFa3Mu1oTXfX4qQBtWN398BO5sasIWJ0YlVm3Q8snL9lpSlNuzNLoo1ylYDmu7eJjH2I+4Vwe20qyzFaHJsO7/B7ChdTcU4l9eMt1Yh98BiJoJk5Kty9dZMjdTXb42aMlpIkBydXH+GmkYM7mNwJBw2KSLI2DHMS3xWGJaJCy4cFLGHvkET35YfLNXiG/+6rZ8WUfmaxOaJOMszlVTLnk7XxaHr1maoKhetmC9RKB7ZUJiHVKMu/zNMnHP++JpxjKh3eZYrkPq77rb74HemVssd+gmNPO/gAgU2g1EPAtt/wo+k0KR4H/OcRd+tmbzXbJzq+pl2Rj19J1ArPLPV4ev+uw4iZXveigoj4TfQNPl2b2Gu8SqMxwdAMZ+lDs7bx9z4XF3goclDj/2ueH8zT7FYe9cZdg6X9U8bsdB/1dXzPZsBtF6fSnc8Iwf4Xwf/bOBGCnR6v+eogSr/zEfOCVicKvHDryqqSXigcJ3GDvsIlgyc/uaJOTNxhMJnSdfI+K5qHNUXNipF8rKNYrkzoBPgtl54ggFxRkKSCCnwCiPjwHBolQoNHqSNJesFWcjPD9AXyqSlWP0naIut9nJ50B53NEXdXtix3GeiufUiYpm5yLuEEdzg0RyC8VVUSq5H7+OKsAuTk6+VM1YBDk5FF5DIQkhrRP1MmUiDxfqznqz/q6WRijBu0y73IiHseMwgvJMHOfZhnEHPxIL73kcuIdswFpoVIIzMML+JQbbCbF2xqcqjs5ADJ/rMQD/IhBq+sF56/SHa2+/W3Y8/0wsqf7tFIEEYlVMdzawuv5lSKyu/uy4v7CyHuIFBBIrfjR0jkAYWu4B6Bb1FKh/xKVVhbJzpOw+dgGS0hc/ahlFsx/LZnpvgXX4d1bADc/EUa630F9rebUSrc4x7IujSrD6AtXBlCcmWG9jrcx+90m5OHelNBePlZkfPCelSzZKMCdPZmx7Xk6vuskQqcm735KTazcjfTWIyU45duU9Ulh2XEaeOiBHNhrl6baWI18HCEzBm49KJK9IGlffJEUv/NKYUWgpWSPFW38hLSWrjcmEopd+KY0oI4yyC1/5N2m84k4Qslxc+5jU3/CARGBmIRYwvJIQgGiNP7BT8kC8jm+4XSZ/9o4hS6dX3yzTd7woIRC3s8uvkxkf/k6aR4yVC/PWyKz3n5G68TOkGmSScba1duLstvoO0di6zfcAr5DLcri/BeggUkQgUR0/SwIT50rOgfdBZCnBcxDalRiofzbJmvm97b978u21kGTtUEnWJT0jgVjRnc3NcHVi3Nl8fjKQp+5sLoGrywMkSzRN0dCMZ3pkl8nMCRpd9SOthu4RsIkW/VW+/mlLEZan71w8w3Md/B1+uGqO5+GpY1yvof9WMhclWt1jmYmzSrAygeIgz4OmDUiynAG/OKCok8V4yA+dHa9kNdQgDmlRMCDehlqch8QK6Zie11GqFYvH3tjbQYEZ24lrjAkEKAw4G6rFAUkSr3PWVSLeBBMLUAyqqzJ2rCImXikW8rcg6XLVVYiFsqWVYLXlzuU9L6RglFxRIsXfjHuaGoxki3GeD0LiReOjrKObkq6Etg6L12ESJ7GWYjJ7AMzKsKhwTqE0rbldgpPnSXjURMn78BncG4y5hmRFF0In6yfrNm/5TsjteW/DprvlwxdUksWeFydWFoQu404YdzY+uLPxr9p3Cu5smoePO5u2p7D3Mdp6qqyntRBaDek6VNSFpYUES0VYXYOUcMYmWiT873zuy999LHAzzDpcCaK1K+6G50X054u4RK3DJ+CW6agSrEwjOkjzM8ru8cErpviOH3hKaUPKBJ6zn1qOcnbcpOESVBeB6RLStg6Q9vHEb2ZhfpuIKbvLfJEkVs/4NfGMecw+buLmuN0W5hu/ju0Z4mHNbVskFIy4XC7HAxhMp9jN9c1bK6GJcwwygdkrpcGTLXnvPwFdtzLgTw4WXYC32//pDgZ+D2rxn6y99R7Z8dLwNeMQJ1bcJj/xWFnorp2H/A9uP+hfegDubGh1m11J9avs3pX8Nx91SrCwvNrjRbSFBav38ae8x+SaII6APZzCTIh8eMCfCynrxnc+96zBrsNvrJ2X9cjM8a5n0L8vMLlKtDLfbZRgZR7TwZ9jd6xm8Ldu2LTAWKBwWjPQ4NsMA4YkL1w4BpsP1oMRQGsYvxmCUxdKA3TV8t95NJFkLceA+98j4cg3YTPrxAMz1sqjJ7gxaXiFOLnKxZb4Oz/Y5//u25+3rBiO7mz66q6HwK2wC864wumKpIbCMRLGXZhUdNeQOgI20eILARyJZ8PY7br39/mWX7Mk+37oaf102lgX/R22KMlKHdvurlCC1R06ek4RGKQIrLr5XnoOommGjWjCdLsZvhlLJFI8rpVcmeMgWqFJ86Th6vul4K1HYGusIibJEtloOay/lnD0+6dKJtXICTuXof9NYgWbVfB8EJ2047D/L363vfkB2LEqaPRBigLJS1dkYOgjk9kW8l2OS4RUYqel8s4CHT5ziVBD7xGwiRaXW+mG58i54JWfn8xadOe6nLUr53j/oaI2fGFUIb1adH4vel+D4ZWDvg8Mr/utrR0mCDjdIE3BMLaCyvVY88PWzahEsBs0MH2J2dV5CQwkWZPnS+OGeySSXQAChqkvCpO0IvdFHda3JRx2rYMtreEQSK7KqsOCnVfTX9/d8rN/eaHh99/e4ytoArkisdKpJ3O9gFhWN2DTRTc7CUFyTRqd8zOLO/syJVpv7G4p+ucX6r/32qctPx1Z4JhUAQX5uOQ2cwUO05yUYA3TG6/NHtoIcOICO5oIlrTctBSkIQSF9vDISTHy1FnzkSYwc5k0rboVDrKhdBwjWV5MbH8UdbuujXpcsuGWOzu7ckgdo4kF2A+a+rsdzT/95WuNt2FJ0LzQ6wTfB7cZHZWK2NTF6io0+iLCTQQaMo+A3af3nw46f/1G4z1vfub7p9GFjgkkvRp6j4ASrN5jqDkoAgMKgXHfuB9SFjzaDsdC0CysByJgIgvCNEMUtsIMceqqxhhxfQuukJb5G1pFNXibHY/L/9QKhCZCZb6rK4fE8RZ/REYVOAow0fzNI2823gJnzLoc2Id3li8CLdhJ2NDS9YTeAHJFAsa0GvoGAUqzjp4Lyr+93nAH3O/82Yh8RzZ13zT0DgElWL3DT69WBAYcAlPKg+KhAlZUYJFVaCUWEimPBMdOA2nq4ZGn1MrlleYVN0lg3ExcGJv4cPQqMI2vhsJhx9rNQ3OpkMsicMdiHT0ffPDZbU33Hi8LQQWN6GnoSwS4O5BLVV0F6r1xmVBD3yJAadaBM0HHc9uavgz7blsWfbtUlwp7CXkPo20vc9fLFQFFoN8RoOJUU9DvhabqvPgyHwy35km4aGz30iu7piBV0YKR0rzyVnNdPA/6Jvqay+VcYi8r2MmHynd5TJF69hu7fd/55GggR0Um/XNnKSnpjkBResUdhBr6B4Edh/wFsJ31hwd+PmlKbZMC3xvUlWD1Bj29VhEYgAhQ6AI2lIvvKaZ6kMyEYU0/SuX1ri2WtW8JDMMGp8wX39w1icch0rK+Cluz7rWbYLl/CIUgZvAxhU7ZfTzwhXf3+hb41OZSv91dGG7tUcmdjo2V8Pb9LeHLUxOWbEGwVhw4G7zr2z+tUilWL2BXgtUL8PRSRWAgIkCCBelVPuatMbH6YQdhbjF8P3qTk2DZjYJvSN/CqyRUhGxiCu88cydWHxf1tNJoZzFYvv0BU9PxcHtzJ5ZHdGmwn29ct1JRdmjTqfu5UsO0ON6LY+eDzk+P+u/+7Q9Hj+ASrob0EFCClR5uepUiMHAR4AhpWQUgRYWxSlrGabYxLppKrbFUGB4xPibFapvgpmBL3Z0OeDlaP4SkWAfPBKW0Irwau6nmqM+7VDpJ79M60F+7soHF3HnO6MLpPN97sJPIgY86pVh4FhZiN+EibvTQkB4CSrDSw21oX9U2mQ7tdg7h1kEPi+Qq5iUb9zOcndfm9iildlvin7VCwvmjEqVYt0WyIxOMlayU8hqYiancvmru/yfnqkOrT14I5nUrTRmYTRi0taJgdNpYp0we1fXuVJ7j8i3Taug/BLDZY8Tp8tD6v32sVpcJ04RdCVaawA21y+gc2VbPMXH+wDE6SjaBg1vrCBc7FzvONN1soTb58mIEE49FY/F4PizDzrs1Tazs7rherJ7xfOOVN3WJ5xWrl6l4vC2xss118SrFazOkvuJGm3LxTcV0BKDohF2r7sCMJbz0L+5NBMrx/iklbfdIZB5ECmtIRFZveejSawbZEV+AhhW/U4BlkRVGqTcdnAZZmwdCdfmY0mr4g9fkyeiieFftpGKTx7jkwWtzBaYDWoeJTpLpoQwiwEeA9uDgImr5b/5kdG5QDemnha4SrLRgG4QX/fVfS8hpBrE4Y2prQxR+6fx5xRKGjk4ECja+fMTdiMPYpC9/hITxHXZ7xI/jPBb2ZJn0vC7kzUYcCtSOTroSZuAw88rFahXOh7EzLZIDSQrKCBWNgsVwxGFXKVw4GlbGs9viqAfNCoRwnN+dhZA3B+UWGqlMMCdfAjkoA+X5UVaAZZh4oQSzck0a1jGYhTLY1vwi0wabUCbkH2djCUcGZdSiqwsC13pTSLrS5g24X4Fpi6DDlYUso5jkojnIbWM0bDldft+gRCix0nTFgjCqrCo8l9ba08YpMVON94gAH7arF2XJxsXsV10HLg/euipHrliAcaHrZHomgwhguIDpjIicLQ8tRrbFahMrPXC7lsuml59e1UsEVm++U0KRgJXlyp2H+RGWuOUSQtSLIsLRaAT5tp9DSD4Ob7xXIphAIyAgh657QEIekhFLDt7wIEgUjFMiNI6aICEQlqYR46Ru/HQJgiAFQG6qIN1gvF3AE8r86q+7H81wgkDlSO1t3wBhgtcWHK+567vmmwSq5u4/NOejIIDVW74HY5gxUlRzzx+BnBWKq6K0LWs++fiUzV8jjvByU58zy641krYQXMGcXEe/xiB2KO/4hjsMmSNZPHoVXMBAihNBeYevuR/tyxJX0N+Wr4lFRzqdzqtBRprX3/GFDufS+8nagpH4IpHwbtS7efvWp9LL6HJeBSlWaMxUQ3jdlWcN/qjOqqgVGYFvOC4c3AGW2mVcsbPkbGVoBHerdfauMLhbePlrnyCYNiQJz4UJMOoqbpf9q+t6Ug+rMJcSLOyIjcbSm6EgfgnjGjKLQBhSq3NVoZHQw5p9sSacMAhntpyhnJsSrAF2d62oQxwRtwuj0HfBGr6K6mVUwxDjkAeDlJFscKms6NwxcfmbKZhAsN8POVqlGMcl+RfPxJgbtpi5L5yS3E/fYqbxwPzsUbBDnKMjR2CGxDjT47+zrkqsUNCc8zbVyZjDH4MI2l23Yz1ZRsdjJuMOx2FPM9CCj681Na5ahuJ/QxkNr8hEQEbAOloaEesO1OxoJvLsOQ/TggDa0krOQaxNO4lOygFwRLPzJTR6srgrzph7gnZNx1a7KcjrEoK15M47JWyFxRvOcqCzta79IJuIwxGO0MXh9q3PpFyNvriAE/Y/PFknN67IXlxaGS5o7aJ9UdgwyZMPD58gfvg4u9EDcrwxgjSqwCnwdyfFeQ4ZiSW/9SXdS69syJgPpV0ekDG61qluCMuFmoiJN8GVDq3Bh9Db2b+Zlh8NvUQAGJ6pCI04Xx1aik0gb/NZoSRcQ/II2LNU8ldoyj5GAIsvkPigM0OEFDVWuPusQDwwY458Yj4ZLQMPoffEXvPJZL5cZsyurZBpO1/OZLZto3E06gLuNBaV6UDF6dblukxn3jE/DoQITfiKa07gNwlq7HjH5Mn9hnQxNGpSq3gHwyzXZGc4XM5P1m66OxvNK8bgOxkz3MRoJDoB9BXru1KEzNmHzagMDALgW/X4Wbnu9nsv4PhZEL+zqF25FbWaUMHIjheeTq4+GUpF3ZI/ubcwa+vOlgWcuHX6SA9Ydi1+OP/CGr4hUdPHuqDA7pKp+Ewe7ZLxxU4jhSJJwiukOFM0k79itleWz/LC6GhUgnjtbIZboyr4zIN0RbjT7cSFoPk+VxWWerjXYRreUN5T1ktDaggQsqr6iHWhOjz/3itz3YQ9tRw0tRKsgdsHMFy1hVZl87ZDaceMlok94kCyYZS+086t7ULqPbW6YsFom6l8OUJGbcNLJt9WwUxb4WnEDMAgs3bIKMYG39ZRvd29tMvrs+9YabXALaYgBcxckPz17n5g2bUAnAnLrFY4RGkYjWrdHA6HZjoczpX4PQftod9DECorC7MtJXedNxGLpkCGgzVEp44qbNM/iuXGz3B0+/rNWz6FrO0Czoe2b+17shWGFXG30yo+XR5cSp0T+7HovOJ6NBEBEip+qNpJBXQSqvlT3LJwqkdmTXDJ2GKXIVsp8qjEIi6J8/64nBY+ItleSsOcMmeiW66E181giD4No1JaGZIjWPbdeypAUwNSBgLWDAkXgxmiLslVD3SGALEinnAZtfz6ZVIEfC+RVnd2nR5rQ0AJVhsWAzZG3aGqaSVGeZtuUGITF3q/CTyQWryw7KTkVp430gjfbOgxwdYR5ry2+ZDZxcajWNZJxEna3NCV8p7Yh2sj0jBmsjSMnRqrYsr1TCgQdXE3N8rIU/vFEQrA3csY8c1eFhvV7WQJpXQZ7dgmJLSgoJ11aJc4Whqhs5UtldMXGuX+WB7MPDVc7fQkasVnj0hWXSUO2Xl0WbM+OMG6R2sBUg2+x7MAq7kOthrwSg+F9bQCZtII9OGi0Gczy7Vc+rSsh5CXExIzI5279HbgSMeDsfvAbkwlfH6KcP1MfN8MCVgjvo8j4zdx7Pm1m+/+OCtQ0NSUVSW7frcVpzIfzlaGZWyRc/r5qvBoSjxU/6pnjGl5naSpCMt8s0Gk1szzyipIlyipysuCikO/yWrb15W6XCPy+fHI4ukeuX1djlTC/dHBs0H56LBfPj0WAPkKi22l/7I8mu2rPOB/0cjohZrwBOgmToK0UAlWincszdE2xVI0efoIcGKDYnhZyVppGjlenFDM5m++Ojqghcg4J3QLce72c0TCYuFpuCTOyRWBSuZTscSWV3EOAgNLWhasF9+8VWL5IEzA5MtlOAtlMB3JgRUMxHfygUJhmcns6kPZRoqBnYUWyhOUHQVByd77gXhP7sexKJTgZ8jZFdeJA9cznwhec51BXI/8qUjvZF5cCsVvB+I8T+lXLI5uiQHcEQqZ3Yt5VWXQFTsqTuhLhaBg33D1PTE8UXbrhI86RVkfUx7byTiU2JGnkbqEEDflOeNtAlbN9eI5c0ic+KZS/7nFVxmlfVMH4goc2b5LsCTGKC+MHZCsI0MEcdMmStrQXm9jrVnONFK9WG377y/KxxzYAMnQBRCVEtbH2VANQtkiUeyyNGKHdGrDHZ22JJHXR6PoJOa7laCzvbynUejIcUeqfY9ZISsa65sO+NpxoD8aiSGOs37mumiUOyWW4LMYZOvLqPVbfm/zrxxB77trb9vSsuPFzG4QADbywkfN8IPnXn6mPDSylU+jAhraIwCoTLfx4o7PGO+G7pRX1oJYzYb0qCCbXLt9+oHwi0uRE0a6zIf6Wxdrw/LZ8YC8t9cnu08EuPwlNlkcCPUdqHWALayRx8qCS0FOdw/UOg7UeinBGqh3pmO9MILll5fKxD3vyrmlG8Xla5Sx0J86tepmyas8JyNBbE6uvVWKobReeP64nFp9s4w+9plk11XI6ZU3yfiDOwxhOIsddx2DA5Nv4euPSkvJGkNgCt55SppAjiLYIZj/3tPSuG4TSElQcne9Kg1X3SXO+mrJ2bdN6q69XzylRyUL+lZ12G2IITj+iZVA8jHlkzewwzBXyueskKm4vmnkBKmeMk+mffSy1EyeK/WQck3b9ZpchCSNZiCmfPy6lC1YZ8woTPrsHSlddo1ZT2pXZ4z2OXveF1f5GWnYuEVycQ2lUY0bNkv++8+B7GVJI3DJf/dJCYGUtizcIAVvPiaBSbPFDylVwVuPo61rze/EfFl7YjcWSvRnVt4o+VDULy49AixvkRFnDkouiN7pVTcZJXsq259dfp1Mwv0gOSA5m/zpmxIAgSkDab2cgQuooDLN2K95AlHccFAVSLAcTbVmV2bsPqVRQzOLxmdS3APQIrTdae4vzXz4sITYkj9SAojTPAZJaxikjCSLgaTKCSkkN1W4QWqzGqokp64cfbRcPPhN4sW6Ak/w1ygsm1r3gYVd73BazyH+L2tv3bIHM3lox4tPmvx6+4e6PJtW5zjhd21eRX0kkytZKVeNBKY1AOKBwlcMsULF8qFlt2CqW65fmm0U0yH1u2ySqlacUohwWXEiyBY/1y7JFhjRhL+9Fnl3r19Aro2C/GXtAB3aYuPOw+wLl4vAsmzouHkgvZp/7RKu/OO5v1yVIRiDLCjBGkQ3zI2JqeDiabmI3W+e5gaza48TFif7ApANJyYob0MNpFOlZjLLwRIVJVWOSEhyaspxDNOuIUEJjeZgDqmP+/wxCUyeY5wCkzS1QKpFiY/n7FFxLG0UC9IjHqekywnpjAcSJUqInPVV4i7DPG4kZO2nBUoocqsvgHQUmrJZl7A7y0ip8i+elebiseLE8iR3H9ZMmiVh2KliOypnLjb1zEecu/yCkI51DM6ai+IpO2XKdWG504FlRNbBDXwimNwpYTPnIXGh5M1z/oREYI4igLZ6QELZ1ktmMQwcbiwXslwuR2Y11pg4cc1GO/MqS02+xJXLfyQMbB8ViohxXtV5LD/4L8m2Y937+nco2yk5DaFgyC37MRial3QH7purqlTCXLZNnMxTqQwHV0ihONr7c4ukcfQUqRs7Q5qg/M7fNH1ByVVsNkAhreXYkXj/iH9RfOAMo++hL+dVn5PCsmNScOE4iFeNKcfo3UUFpiCsr4NyXWO5rF+BPP4MCvIV25/vPcmi/atsjxQdLwuuaIBS9OW4cZxIOV8V5DjMTjuSvvrmaGwZC8dtqFK5TZlIa0/wBbB4RknVLSuzZdlMr1FSz0T+lzOPbOxo5BLiAuiK3b42JG/vaZFXP2mhrtFlJ1rEnSEfuBeiT3AjQCN2SdZiAwb8kccerViS/vmLDliHZwNGeJetm+ctxDI6dA00JIuAEqxkkRoA6fjscfklFjj6xuL2sowZjjFa2wrhicdNnCN5Z4HHkRfT8Ak2ZfCbv015seMmHj9OyYUZ/ZkmcdmoY/52eh5nXkzPCxPyjbWJ1C9ed5OGyVAnXtdZwPX2dSZPkx/wYV14DkVc0g47X6btqs6mvm242nVgvom4mjJN2jhO8bobzDqrbz8e++SJx2X97feyRp+jWOzaw24+kEHXhRPin7s2fg/SqBAwbRw3Q6pGgVhNmGOM0FI/MBZwp8ysjFmgy5sWP5FwPozraYDWVzgK9tQWgtRWQ3/toIw+sRtLrBdjy4jIEFlPB1n8Cu4MpFmXmoZIozUwpBgFwbLGYZfU5JYAltzZNfsxEC5aMid5WT8/S2gTKgD+eqIsKG/s9slO6A35UC+72/ZX1cjIc0FCVsz2yJ3rc2T1HK/kQrdqqAUnmsRdjl+5IV+ug2TupV3N8vLHLUZPi/fmcuBeDFtf1y3LgpQtS6Zg56ULy5zlWNr8YJ9PfrejGfH+3YjBR4IbBGCEdzaio/GcKMFK4UFQgpUCWIMzacJslnYDMpFHKoX3R3n9UUYqbc5s2ij0x8B0DsLkxwlEloNtQdJ4XCxIO6NYijVkKJUiIY0M5I2U0g33SpMhVcgQx8wnlXw6S2uIGZcboRNYMAp6gVdJDYzXzvzgCUg0T8WJLcuT56BreDBGzjvLKLVjB88GpK7JtfR0RXhkalf2PjWbPKbIIX98d6Fcg8mUS1h2mD+Zu+KyZCsm1F+/2SjldZF+IX8kVrRZtXyGR+4GsdqwIMtI1ux6DdVvEuspcMfzrVvycS+y5Xng/sbuFqkA7nxu2u5M3yHA/jBrvEt+D3W4Cvpiic6vuRxbMsVj9N3+4ak6KO73L8niY34W9rDwWVhWHT7WdygMvZyH3mvJ0LtH2iJFIC0EouFoBWjLdnMxJHCu2nKQrKNpvZpT96IaUjBDrgwhwqjbF4F5I7hbGrBRoAacKj69WXISbXkk4nSEPnyh98rubM/Vi/bRUGVJWXUoqz8m0US4uKfj7g25RnKSSK7sNFwyvH9jnvzw3kJIMuAJIQaLfTqj3+Z2Iv8JI5xmgv9vXymWW+CahnUYToHLcXMnueUHdxbI//21YrkBkqQsWJDvS+yJL/FfPN0tf/lAkdywPLsdubLxp7SN5G/z6px+Idt2ueYbD0dpVTgfmwIWPfJWI+rbh52xXcGD/8fweoIG//3SFigCSSFQX1EtDo+bBqtewVpHAy+iLpr32Kci0GtL9b28Drpl9QHsxOzrwRVSLFegWcbvf1+8NC1h1mlghjQqj0cDob2Zmu249BaNrsyH/tXSuqY+Iotd3ClCOAImDuhbL76y3WlKM6li6YpSrkkj+4ZkkTzQMOj1IBM//mqxfO3GfEjWYpsSOq3UMDhIcw80aPoXXyyS792RL1PH0PBz33R94l8C22F/sqXQ6IV1By/7wzrs3swH8e3rxzCxHnz5oA7YqfLQgn/6g5E5tJivITkElGAlh5OmUgQGFQL7d76N1Tso9Eh0BwZIsCoEkBVP6WGzoSGV1+AmELMa7NLEXNDngeYvxhzdhd2wh1t13lDtfaBD/2Z53OHtL2bG+Cj2ezCMhK+1+cbBcz+KsIhjHkwbjC7smciwWlwu/M6mfONaJpPSFOY1EcTte3cUyF+CTCzB0iAncQ0xBCjBu++qPEM8b1wOaRaIaKbxp3HWH9xVICVQuE8m0L0Q3Q71Z+A7Do3wYrclTagUh2DQVUNyCOjjlBxOmkoRGHQIwGWNuLK9lSAnj4NcBUiwHL4mydr7TszuGUfOHoIfTKTK1wIHu/0wqGIZswjEagKkV9wFaoJlQRVd/vnQp4cOw2F2D7VN/vRhbNOHcdH5sO1jHDwnf2VmUgZhQZ5GHJMJvE1cOvrWzflYtsPWheQu6zJrXs8818z1yN98qUjuuzLXSEW6vGAYn6B+FvWf/uL+Ivk+iCgJaSZIFvPgkiwlZHQBlGygwnngMhCcEB49PC+jIMmaCbtYyVZ32KdTgjXsu4ACMFQR2PHiMxJsgaHYqDyPNn5s2ok1Ke+ZA+I5vLPHZgehKF8J0yCBDBKbLgsFucqvOC1TP3lZPC3Y+EgGgA/+PoW56LF5K+bLTrQnE4E6JDsP+aWiPrwEiruFtppXJvJOJg+0SWrgQw/Lk8kkN2mop3XXhhxDsriFP12SxetyoXH2haty5a8eLDaTe3fLlElXMImEIZDKBkhCgLnshsHPA2fgmSGF5Sam3X86YFzg0GgoJY+pXJ9EFbtMwmW5e4HZf4We1BLoSzEAyrQCyRWJ2n+A5OqqRdkpdb9DsEpPP4t8PPo1oDw4fobEN7zswBkYiU63A/ZrpS9/YbqL8PLfA62BItB3CERhnsFdeC4cbvoZRuUlGBlzLdj1yv30VQmPnCihibAHxm1CHQIlVtWw/N4St1Tf4XRmf8bJ1fSdv5OcWtoVi733YUz/CAP5j2GeoT5zsiv4rMMM9we35Xtf/Kil5HI4eObkSHLwCkwCrICuD5cLkwm0TA6nu2Z19xevNEotdMdSMS3BiX00zEJ848Y8uWNdrlnySqbcdNOQUFG/jRKPw/ANeAJ2pk6DXMEshiEJN67Ilv+8xS3wrZBUEczvyfeb5L19fuP7cBycR08e5ZR52HVJi/I0Ikos+2qZk1ivnusFhkXy/77UIG9/Dht9EOakQnZsyRUV6a+Ffl0q9w8ua0yfof22VK5LCtweEvEOVdaHLRgdnXfX+hwX2qFirB4w42klWEmApEkUgcGKwI4XnpN1m4xroWcth3UN5tivwraX5YQV9bwPn5KGax+S8KjJ7UgW306pc9VIt0N9GSihQllFpQchuXoJ5OpiG7myrOOox59F4C3SJU2y/flnM1YTckZ4VSo+dTG4jAZGU5kgM1YJzFgkCnM/aJYvbsztdOdYZ2Vx+z5JFuv885eTJ1mc2KnvQ12ujYvbm4XorJx0j3H5igTq85MB447mMCQuWFoykisuM5mAulMAwl17cOeUdFHGfB2SV4FukxgfOw93S7jaA4FSIexHTRrlkhKQrVWw20XF8RFwBN0XZGv6OLf88L4ilNdoCB8dIifTDN4DblagzhV3BKZCkqhk/q+vNcge4JrKdUmD20NCtq8BBnBplPfapVlFwbBU9nCJngYCSrC0GygCQxwBjOsCxdRmtzv6OqJkWwU0oOq+eFLy3v6NNF7zIEjWpNish5O12C1Yhw+v67OA8l3wSECF9gn73zPLgq2SK8s6i8J/GGpufNuVFZEPX8wcuWJ7YMuHDp6n4XvM5XLwTGLQAn0aTppNsNT9AEwyFEOBOZnAXW5brohJoChJuVgDSVY3l5LMcFmLyuzLIDFj2ZkMJA4kPXSmvP2gz5CrsuqIMZLKwlgeJ+jEOlJmmgOl8VQIkBOZZHvoTJrEjJnGWkHiRttQFbUgdVh6pEFO2rVaMcsja+d7ZREUyLnEl8lQjF2gtJs1FlI03gO4kumW+BCjOXCM/T1IrmhUNhlCZtcXS3Pyi5cb5LVPW4yl+Xiz7dP99k0n2WU14YkocGJNQ1gJVhLIK8FKAiRNoggMRgTW3nY3SJO4ICWY63Y7HsCE9EWIDvJb24JB3wrCZAOIjh3qYY6hBmYcoBhvH8rsN4gVHWjnV5w0phiKzx0ybpQSyNUxFPhDX9j/nDsnN7p9a2Z2DdqNoHSOS3M+f2QZndjak7R9vj+/OcnSmjyNiXL57KHr82Qh/P11ZherY71Ism5fmytFkNz8DBP80XO0yNHKOVoncJKrlbDI/p9gBmAOltEyGbhkd/JiSN6HlfF3sVx2FBIlkkZi2pFQdSyXJIEua1IJJGjcQdfZVSzPJi1cfqWe0EF8aDR00TSPMUOxdl6WjKYPxc4ySKUi8bSUJmK5DNJH7MLY2tDOICxx5/3gH9o8W4sNBd/ZVGDqkmxRxPLDAz6h7am9p6D3hAszVPVkq3BJOj4z6GtLsft2zyUn9cAlCCjBugQSPaAIDF4E1mI50AHxQMQpeZblgM6VgGXJHRjppyMee42HzlXU6RL/zGXStGqTREbhpRQzAs0xVGPHYISzQyZDfPbjzsCc6jK4wflURp36HP40YVUehMu4F0IaTB67UPIPLV/9O1menOi2DJMrNoltu3lltuO9fXDwXBdJsJ+eyQYnnxehwXKL0ec5iOU01E02r8mWqWPdPRIBSn+41DQBukckaZ8e9WO3J1xyIj8uoTGsmuOBnlOhzJqQOXJFYnUMhPDlj5rlLRArSgRZJm5lOylVdyiw3emYG0iGlJnuFi+cfh0/2O+XXUcDsJTeLDdiNyZ3ZI7DDr5MkBWS4dtW58ICviU/eb5BzgMLFwgVbYnRKj7ruwG2q+69Mk/Go8xkApdZ950KyDPbmg15ZRtICjNR32TK7yoNy4cOlre6ITyf/Y4vK9CP7Cq5HgcCSrAGWTegzkqnIeE49hjFkvBYPNrtY5CYxsT5J/Fj/8Qxc9g+x2IS4/zdTUioo1HCsCsXPx6rY7wMkw3z7iKYaxLOt+bN6+PH+Y3/Jl8eih/uqcpt+CWW3WpTPCGj+PnWutgFJF7X9/G1t20RZ8QhIUcYaw+OqVFn9EoMfLeh3evhk3E0BsI4tLH6hYrHS/PiayQwd7VEvdDnAeFqBrmqhEPokI1dr6qN4lgiBl8LOxFdvkbjKHvEmf1SdP6IeOCuhyFBatWMn89AavbjUe78g+USkZ3PZ1ZyZQrEnwA27mXBwTP0dy6bg2e7Lva3uTn4QyVmEiVKhO5Yl2N8FI6EHlFPgdbHaUagtDIEosOdelH5zduNhrj98d0FMnN8ZsgVu8bJC0HZuhOuZD7zGd0qLn1x8k9c/uupvjzvojQqDf+GJGUsL9knzZAtpCdp2X86KEfOBeV1uMG5fW2O8feXDL49tYdE96YVOYZk/fyVBizHemQL9OTysFvTi2VQShmTkUqynFOQCD79QZNZDjSuenAsUxK3ntrR43ngyE0LINdLMaao4+ceAVOClQREAydJ1OGUkCcLToxhiwVy55DHayapiMMVO47RJALJRMgNuyqMuzwSNnG81SJuOfCa2VnAExz14o0E13KkjHpz8M04ykGc5QnORbJ4HKMJfNExPV9Zo4hHPIzj6esQSElYbsSFAR7nWZdwPM520FEwpRdhE4e1ZORn2oe20VFzyM22orxOQhRaylFcx3yjyDfq4aYWxIkPjzPuRZzpEI+wfSwb+bXGO8k3QoxRbgy/BCxR1/a4Ml/gGs/ftAP1YFuTHfw7KT6pQ1d+8Qvy/mOPy5rb73WBwBSCTE2POiMrsfhxFcpejcpPBsn0tNbD7BIEzvkjxDd7pfhKNkikeFysLJxrgWSpApIrmmVoH3BP7dG9LbN4koT7bUeRhst/jpAfOlUNRmk9D6YX6E+QCuxOLD8amtrWV6hhfggZ/hN8Jz4WdVj1kbpa2flGZnWuEtvE5SMYjBwLMjOVDp7bqpKY6vLEWReSGEqHfvJ8PfSZ/PLgtbmyarZXuCTYXSDxSFwCpMSKpII77TIRaFbiVegAcfI/cSFkbEGxa9jdI5Uy2JWckPikI8HK8WKXIJrUqjCfZMFEjxI2mnXYB6J19HydvI723H91rvG5mOj7L8ks2yXjMHUNdgXOmugyBmRTdY5NPTwSv8ffbTYkkP1gIPVNNpYY0g7X+arQXERH+QKR2JsST2roFAGVYHUKy2U+aMExSMJLWlz+IA1jJsuRa+4THxziWsVjpaVoDOIjJATi0zhmigRyCqRi1lKpmTwH8Xw5v3C9mdQCWXlSuuRqkyUJWPvAiXek1Nz2TYnACTDJSs0d35Zw4WhDuGru/K6ERozF2kpETHzkOAmNmiDBsVNMmpaSNeKfViKR3IIO2YLUuN1yZuUNhvQFs3LlxPrbDYEKZufJsau2SCA7V0IgcEev3iL+vEKk88jRjWgfnRFjxDq68V60cbRk1Ve1y5ukq3npRmmZv0YiyKth/SYjKYmgzfXX3h8jUYjX3fAlQ7ZYt9pbvipR1CECjGo3/56EgZuZzTrMW3UTZoq/YKS0AJPgzKVSN2G2+HOL5MK8VVI5Y7GwHecXbgCJCJr4mRU3mLoFIQk6tfoWECxXjJC2qzF/WBFQvkuOdnVgwU1fE18kWwqcVQ6PI+TCYAuGbIHhyqhQY3jyus33zkZ8oeVwLESus5D/CLxVgkHGA0dofoBVCGTKP2Op+OesNqYZzExjSJcIDYlWglxdausKLmv8TZJfVWqIMIlyjNijfRhqHdEwjIHA1Y81AABAAElEQVSCTMHkgwt6XC4YMKVkKquxWrKwQzGrodocc4ZjOxFJQG2JFWpIYnUa30/CRMSvGutDh7NyXdGPMuBj0G5+V9+0vTRhpHMprFKP5N3ocPu7uqxfj5O0cNlwGwgWJS6UtlCpPdklJlZ2RJIK8z01jMuBVF5/GJI1LrPROGq6xKq1rFi3NH7+Wo8lGeGSG3cf0lBruveO9aepg11HAiBaWJaFuYj7r87DsmzHsTHJSsWTUZI1DUu7qQQ+ojRhQT2rd7Dc2gQCw/oNNHJlt4nvYGdhnPdcZbgECu/H7eP63TkCvetRnec57I6u3rwFb0YRh8fpuhlLeEvxzHQUBaSECZ5TvKNFl5qL8LA50Ktzq8qMMjCP5cBpL6cGTlp5OG5LBfKqzrfFK+24SH7lOZOW1+aXnzXSBcYZXLjGnQdCgyfdWVvROik7qy/ibGwkdCEvMxXhyXdVnIs9/SjbdfF0fCSw4H7lpLhqeE0sqReTLctioOTC0wInobjG0wx/eM31ZrL1NtVLFtJx4s2ur0FKLBIhnlNHQhWP15Sb9lIywlHHgWUsT+mxmDQKGLjLTsbrgK33Jg70cK0dt2BqwNGIFy3kazXWiqMB5YB0OGsrxQkdICuINSPk44AUJ7+i1BBT/s6DrtCluMaxxHn+b4drHGNnKCBslwsGOpkmHgoQ/TYOlIMYtR21z3b63egokIZcnKIuVTHaPgJig3G4I2MBA9lsLgiVE79NMN82qUIJERC+4GiQ7hlLJDB1oURAmFuJVZxckVRxWdBnW02P52W+UMgImE+Y/tHzBgcSc0OQKM3EORJuiySLEitcz6VAB+8R64DAe810CaSKv6FRL0eR4VZ8P4HlpQNAPvj5u7/jJX0egJdY15yQXT+fWHK+OpSd5I3o83p1VgDrRgjhYFd+/Uaj2Zn3TVhyXwlpVio77zrLO9lj1ON6DnpAj7/XJDTsyfpw8s9EYBvoeibVkG3vPGQ3S/3y1uJ4KSVadU1ReeL9Zpg/CMpDkBbSNlVvpVmthfQQoT9MSq3+7fVGLL1SAp85fHsoOv3TAO5cZagANrEWv7izeat5ptgxNHSKgBKsTmFJ7SCmHGoPezD4PITn/n57kkktl65S440NW+anffRybEToKlkKxyl1MEtvmBTztr8ouR+9Qk7Su4BnjBINtp2T6siT+2TEGa7+ZCCAEDhBhChBcYPUFT/70wxkyizwthiApXMQLjf0hGZ+8BwakZnBwgGilUAuilDWf0TmpsyeK98+HQexxD4V5zDxY/FzwCYC6VpoxHgJQuoWmFwi4dFYKeRyLwNJVZxY8SeXAytArrg8eGlAnwMpps6UkzsKSUjxm8FGp7W7mAOxozapapefZVG/qhQpdqHer6J3vAcjpqUOGOHe+ULf6Fm1Kz/hhx9cOvr2jLwn3mtawol1MAR2R+o5fQzpUWllrXwVOw2pn5UOOUmlvZSq/BymAT7c7zPSnkwRK7sO2NqalgSL7UZ3zFiwH3fuOPz7J+vM8uwDsEuWCd2s7ipJ8vrrNxrk6Q+bjc5cpvHtruzenOOTzrpDAlzyV18qysZSbdsW5N5kPESvVYKVgRuLSYMzjwcTIZdpEnJMjCccTjWKPEmyMhpic6JYyDeVpavu64BM4/lyCU34yWRg3iAEJIiZCTYIyA2zGMlERkM8+7Y8k+0P8XTtkuOH3bcwK0ShIxfNypYwpI+hkViyHTNNQmOnSaRorFkKNUSR6RNIlV2PGLlq6tpKO/LPrTkPid6ZOElEQ+JtaVclO0N8Qw+MTM2P/t+EHxeR/ATie/Fo7MaexT2oyLnG+R/6co+sll3PPZ9wZf9FudwF6cSI0qpwCXVe7Mm1/2qQfkmcgKkE/9Ot9VIH46hfAdHqC0kLdZRIqv7Pi/VYusIt5a2P3/v0a3/pldxpRwXwVAPbHFMY76onpppjLD1JG3frcSmUivy/f2uBzMXmgb4IJCj/+7k6eWkX7FrhnXSwkCtiwb5Ax8+nykPL8LMYz5QSrG46iRKsbsBJ9pRllKQsukOHYk8s8G2eCuBcZupyGKGMusuTdk76PWwRQP+IUqMXZIrSKe74C+cVGd036siFQaYiUFzncYHulwmGVCWQsQ7g2eSquRsXONxVOAL+Ct3Qq4pLpWhk6Q2QpLPIzvZMy2VwSqca8anBeRoeLMc31pClLCKROn8k2Oy0nNGPX4grrXNh0LhF5Hf/B1r+hmHIeVjiGElhayYlIf3RGk7EjVDSf+ydJmMva30JN3NkLlC/ikuC//o6bDrVdm84s7elUmk/HYLIa2j+oC8CyUMIvfqdz/0wPVFrDLOunQfDrBkeo9/AsuDLsMVGcpXpvPsCl4550jgvzFGMAiGdgaVj6o9o6AIBJVhdAJPS4dgDmINpzWh6c4JqGD1Nzi+6RiIYxTs+n3z3oouIIihoQ28rpaI08fBBgLs6oy7wGe5M5O5IE0d/4Q5PMzLHiRRJFZb8egrJkCvm64WCelEpl3fZU80LwhlE/sQfjezHvGg6LBZqwL2scLMjK+IBW9m19dGeir+s5ylZpq7L8lleOnguuuShvKy1S75wkiz6IKTF8kwSLEr0HgVxowSHZh76UqrCXkUJVjrLnFlxCVasZyaPW7IpzViNP4ewRPp3T9TKH26O+QzMlN4blfO50YLL1ZnKM9m2ZSwd8OEmETxHS09cCH7AZwtjQcayH0oZ6eyesbsZpSIzSZaZl3z5o6Rm4jyjvxKbqNoXRIKVnZ2PuZK3wFzVPoH+UgSIQGvXQMTuXFz2az2eHExJkSuTlSW0rp7dUJmoQ/Z6JBw67HE4IrCs3scOCpNrT6qpKC346g15HkgOSqphcmBQTwe493thiJIGPlPZWdgVZgFIrkis/v2NptZdgl2lzdRxEiU6r041kJT1ZLIi1Tw7S0+CeaY8LP/9aWzCAd50TJ2JcBxS1ENnsSkk9aZnoviM5MGqwzWRo7wuPG/zGjp+hkd5DZ0ioASrU1jSOWjl4EFsldnT5pOZA7mzqrPAJwznUtu831lGekwR6B6BGLlqhjHRHsZB9Ekq+488tdfsDqSSPt5Ma/CG+ozlcgVcTRnWA+y+2hk9S8kBdHeKoV+zvAE6JIN5guPS5icwnfCPz9QZFzjwq9grrGiTiuYFJo92GgfKJBR9ig/yz4Y9K0qxUg0kZVl9oxrVrirEgPWjg+wxRQA8A4EbBygVo+mNvpQQZqCq3WbBvsFn6Pj54IprFmfR4Gh7OzrdXj28TirBysD9hi0iSBSiJFdOikv5ehyBAUrzmoyfXQa+CmhQBPoQAZpiqGjpardgx4ItKbxwHCZBShOlV1gCiOzgQuH7b14e5fSOtUznN3WKMFFOuVATGUsbSIN5gmP7yZXLYTqBw01vA5eq6KJn5niX/Ar6V29DB4kmBPoKI1aZRkbTWSKjSiLJmXl77aPxk7s2i3Its1uT9rEyZayVksKL6IfMv6+w7W1fSPZ6GunFpospSD8eulhKsLoALjPUvIvMh8th85xblhuvfa140iJ4jyEDg2OPZWiCYYsAjYiWp0CunDAYOurEbqEtLwZIr6CNI487oo56rOcMWhz50nO4NEBbQ3DwHBw5aBsSrzhJVR6seN13VW7GJn9mPRvOoP/sviL5w035MgF+80gE+irEzC2kzpBIynKwTNgXVbPJ6jzsHvyzLxTJH9xWkFF8S+DI+4612WlJ7vrqPvQmXzh+HnHsfHApdco0dI5AKyHo/LQeTQYBPuwYxKGFHDWsijsHjXsZI8LqOgdj3qHr03pGEUgbARoPLccuwE6NiHaWK+T+BRdP4nMitnMwluYTzLJvRDFKbH/68c6uGhTHOHHCya+DTmohyUpD82fgNfPKBVmycXGrRkLGKpif45D7N+bJ3zxUJNxBR0mLTTwyVggyajUYmmKmtOKeBelXpgPJJEnfbauy5UdfKTJOodPZ5dhdvVj329flygIQrb4kr93VIVPneAcuVIezqhsjJRsXv8v5L1NZD6l8Bu9raQZvw5Lrvyw19cUyfvT5QomGm/HmHtzxYspGENueesQudUnTvsLskD3v+2p/zaD+ZSt1DPQHcbDUs5vOYDtuDiSxs9DOhoZRRx//VFw0LGrMh1hY0JDH8rzOi7X+LvQI7YuT+F5z6z0chN2Ww8q5UFFWV1RQJHveeCmJK3ufxIeWYEIvhJmG5fWwIdXDe0/vC+zDHPj4jIN06QvwoZeqv7tkq0UpES3GTx7tgm+8RphuaJEa7FzM5LKWkWC1jZjJVs2Y1qCCfCYDyc6kUU558Jpc2bQ6B9LBvpM7UDJ4PySPJ8rqYE+Ku+8y2ZL+zYv22KC0vyQavakAy5/1/Vv64Cit73rS4Gi/qaWjxSWTJ5RyALnS6XJtwRu7ay3c3yQfOrB3/DSuXXrIALsvekgxRE5jFHHWV4oDLnKMf4qB2iwQC9aRdR2sI18jXAOVw0J7KuSK96Sg/KQUldGLTWzEx989MFL6QmMAJhh66SPQPEuOqMvpdm1xWI6rJk2YII6Wwn7rBdQXQRgD32kzWuDrbRDPaUZvafOabFk4jWb3+jZQef7bMLj55/cXSsnkmGZ5JoYskop0lwhJ8nhtJu4h20IyeUWJV/72oWK578q8PiVX9t26alG2XLUw89JHO//++OY9pON0uJyaj/JGYpjQ0AkCSrAAyu4P/xVzCVb3oOOLz4+dluOb8CmYvW7TPZ1A1smhGE/iFisjlKKGgPHL1o2mAC+JYLt97NJO8kw8xN6ciZEtMc/+imMDgAP+BvPef0LyPngS8VpoeA7AbmfqWWvqyLqyzgOynl3cN/ajOljlp/ubMN3fsM8kFUB+Q34Zc/TjuP9EXAcJLjrcI1bxzWcs6WHnYQ9lrN20hcbksx2W85uo0o/xfBVEIw48c4/1cGXmTh+Ejgjs9SyG7Z7ipJ63zBWd0ZwoaaFD4ltW5qSlIJ5OZTyQFl2/LFv+Fstmm1ZnQ8EcTtx7CSJ7JvWo0pGIOXAR69BbhsU2FOc5jEX8//pgkSyd6em3x50K/neuz4E7HhgS7iWW6dzTTF1DAfnZivCI81Wh+UewQ1LDpQgMwJnu0kr29RESKaeXb2jRaejx07CU8fd42n6Evj/lOz/7pay57e7uq4CZA/+g6WcZgsXEyUiw4JOtx3z51DsaayR35/PiOfU5Mh4kt4wTPD5OOJPOe++34jn5uXiP7JL8tx4WV/mZWDuY5nIHU0+ILFEn1o11ZF1ZZ9bdEJWBUM9ucKIktMbvkyos7xXCf+CUz16Hw2kQRNNXesAYbSsoOy5F54+06l7hCkivos9Ga16VbVvhnzGNwGfmOz+j3lZ0isNp/QiRf+CzxWeMz1rSLy9plJ14CZfiv/9/qqWmIbLwfFUYe8MGb6C05QaQnSlj+l+zY8Y4t/zJvYXGuvlkLKf1NHT1hLIhST0l6uQ8SRn1t9K9j3a9F0EP6r98sVC+dUu+jC5MYkNSJ3XpzaFFkECunx835dObjC7ntbgJpRWhwoq6yJL39kG1wAb3ctZpgJXd/0/qAAPAVAeTTLDFPxX6IZvjnYQW2b8P8wtrdr/08j9hc+DLV155Y0Ng1AjZ+exvL2lBNKbrQkd2MUEpeJMTSzU9iadCuI4U65LBwkz6GET8LeKBy5LsPW+K+/wxCReMkib49/PPhBsoWvOGaGBgBbSEIyAeNCesgXuP75as/e+Js/pCjKigsiSJzroKaV52g/hnLY/5zeOD2d8Pp40xFMG9xz6VnN2vi7OmLE5K4A8Gx1zV58W34CqDdxguaQzZMq/vPRDjfrwpJOkkVo2+Fri32SdTPnlFvI3Vkl9+Ssrmb5Da8XMkDCvwpjNegjHMsgdaZNyRneY7bveKr6KPhIvHnnHWlKfckjV33S+uhnIJOaVg90tP3oxn6HvIZC3KhwkTxCxrM561R6DneDrlzNO4gPpXH/9kQu5T7zctroMe0WAN7HbTQayuX5aVluQnE+2mzte9V+QKd9n98tUG2XHIn5a7Fwqwc2hqIc1ACVA6gRjm4loaDf3KdXlGGphOPpm4hgr0t0Hf64MDfpJ/M7RkIt/+zIN3gX4Vz1aGS35wZ0EWjPlm2Jlrf7amb8oa9gRr/e1YwohGix0Oxw/x/K1shTm2I3ADev5iCALeCBUV/sYKBt6/4pa7K8KQ7G5/8ZnWpGRIuLYZX36bVDmDcKIMAmR8ubWlbBczBAuzjrHuYCZ8nMbWekqsPOcOixfLNu5zR8XC9nlKI5z1FZL3zqPiunASE/8GCRePjy1jcea6ZPJsV1Qf/UCL+ZSx7mwHCKGrugykcJ94TuwxBIXGVGOSlHgV2A4QmXxIiLwwCdBScoUEJ82N+dNjkr4mjUaqgyr5m8Rdeliy939gsBaaJoifMzVFm5xoS+6HT4n34DYJzFgigSkLJTRiPOoKq87xNsfuN/Dv74DyqWdV3dIkkcpzMuXoLhlzAqTQ32z6HHcE5oIg1o+ZIVXTFkvduBkSyC2I7W41/QUVRh7FpQelALavEvrpJ5FI9GkHyNW2rU8l3ao1t96NWx1x4BkZFckeeSWmzy/h4uvQL/I7ZLISyzw/xDP3F3j2arY9n3wZHfJJ6mfs3Ufo4Hlh4yBz8JzYQNgClWuXZsHwZepWNmnTisr9o6FTxce1N4HkaMkMj3BZ7cn3m+TpD5qlCgQhleU+Y2ohK/2a5IDoMQ/zrpNEY8zTiT9TxzjloWvz5JZVOcYOVxKX9piE/auyPiwj8mk4NbU2LZ7ukXXYqfkinD6ndmWP1eqXBBwCaXD09MUg3vizi+D4GW/SGhIRGLYEa92muyTSXEFeMAcE508BygP4camsODZB3IXJ6EbLcn4WseQ1PA3vrdt870GxQtX1YyJBuLjFIe6isJpscCkZMATLSJr4iKM3tj5FsUgIPZQyLNofom6Sq7JUPJj0Ka1y1iFTSKvMyGVP/Ph2QOKS89kb4j25x0z6fkyeoVGTMOnnIC2qb4gWyjPfdm0y8M2nicF8Iw4ihMkUysoNIEwXxH3hhLjLUG+0wdFC/7+oA+tt191cHP/DY9AT8pzcawhkcOx0CcxcKoFJ8yQCKV3UZRtpZTt4jfmTmEOScdST1WadWR2QKAcU2D3ws+c5/pm4QUIsSH+M8kVX9QSOrsqz5t5k7X1XwsA6OH6WBEFYwsXjJAJ3R1FjVBZtYiE27vZ3kjXtMZmNO79BWoNQxveVnZBRsLpefPaAZEFiyGATJUqjuDOw+NxBGA89Jr78kVI/dho+M6UJJDGQWwgy1iJjD+8wdq/i0qsWNOEXuXme0ob67q22r77nLmkqjkA53gFHia4RwHm+w+m8Gt83ohpLgAM8UHcS+IxZ1tchwcoCyfq7RZtuOZJjZcvOrQkvLJ1clu6h42Uh2jKaM1gdPLPdJBJTYGUdpiZMV00Viw/2++SZD5vk924pMLpGqV7fWfpRBU755k35Mh/K7796rVH2nQ6arm+6aWcXxI/xSaa5Ai7zpRuov2UIVhKK1XwM3ZjluBz3ddR3wVToWqVfdLsqh0Gu3t7TIs/CQfZ3N+dLyZTUNh4YsxDQa9t20C+1kAT1hF27wgfIj7jj59F4eZleXhNRgtXhvgw7grV2892YQyCDEudEZ97424HHt/AMLsbo0P1jF5swNmACW4dr6vAwHIMzhc8LyqP7MXUfwSjox5NL5WADsQtEyAUpFkmUxdccTIpUfHeANJF8eUBMsiCpym+pFS8ICiUGzmbozZBUsSac8Pm62DHEn0Ius2VjWSvrwDYJjZwgIZCUICbQcNFYiWDyjHggZaEjaeZzyZOLOsaqGcu9teWtkdhxjk6UKIEMGTIVaDZEkGWTVFFaxW8qhFtoa+sIa8rrkFfHdvA32mdBwdpz9qB4oAMUyS2S4JipIDAzJTR6qoQLQbaycuOEq2M7EtpgikooL15v5m3hPjjrKsVVcRoE8Li4y0+bNlBSaEbazjDuWNc4+SJxdJw5KO6zh0CqvAZnkixKtfgdLhxt2hDx5MRIV3f4s4xL7kFCG8z5Nvwd6DPE2Vl7UVwXT4mFtowB/m4cN0kvucc8CtqP49QHzKm9YD5jjn0iAZBCH+rKc3ntrbbvAenZ1tzoz8cEFl1z610Y9QmTZUE+CcUb8SBK4jRSgtbEgovRWfi9EGkWoaaz8EYBMyfSSadlXdoCyvCiT34Vn+V5Vt7P8Xvrms13nMO0GdmRQaKFfOW37/Kdx730TEWo2DxXbdUYNDH2ivXY6TZjXOrDdVVDGFKmJtl+KABJS618/84CkI2sS4eENNCgT8CNi7NRL7f8Gr4MX/2kBUvVPViAR0fh8hgVzNMNxZAWsexACL2ywyOTmCeJ6Sgokt93Za7cc0UOpEyXvj8npk8lHkTZL37ULD97qUEu1kRkwkinzBrvFm4KSCUsme6VZZAIvrXH121bUsmzX9OiuXT8DL+NyyDJ2s5nDmNCv1ZhIBc2LJBYfdud4DdRh9vthENmZwkGWr5lb8ZngRnse3OHLHoTlGbkw/XnAnzwGgMKB4LTAJJAi+42seJuLSckJlw+ZJxkS8waBkaCTolQEhUzZILXI60TBuwgySJRiUBnKJxXjHhBTMqSlYdJH7ZQ4Vw6aib+hMGG0ijuPMNETKLEyZzEhNIyR0s9JnZ8QP6s5gZxYGnNkCmkTZlQ9dQcuy0gPVHoDUVyCo3eGXXPIvloC35HstkOKIeirUZixzxZ73AwVneSINTV0VBjzC3EzEOg7pRUEWs+/BkZAIC5XV/mh/tsSJcXhDAnX8IguVFT33yJkCTiQ9LLNCatTb5sTKJsA4gsfKBwSdiCT0BKB4m9E0TcAQkVpZwOLAEK24rrMJSl1xYOgqw7LqfkKiFUY3DEi4M0ACMueRsTzUgJKVUUjB07AKNRWkIvQDo6NgeTpBnSXgTL8qMcvKTIVjToNTw5ByAZqAekkZ0v9E6qhSULSjo8mPj/5f95uu4bVfWDT0rA21SY65C/+3qxrJmLvpNieOK9JvnHZ+sNGWFetPf0XVhq587AVJe0uiu6GeYvXvm4GU6jmwQWvk3fwn29JJD00L/fT74zQiaOTJ0wMkNYD5fvYeMCzG50Ko1iOymlWjTdLV+/MV/WQnrlTnH57pKKJxyg2Q8uj1JyVwu9PraTpO9HXy6SdSCvqYatO5vlx7+tEz8JY6oXX+b0xHoMlp5hyuMnMD3xH7DhJuxM5qX1Mte7v4pPr4f3V+3SLGcVdjDBS5fD63Dk4P19HMjLfHFE16D3rkeWi9EnRmBiyExfxgSD/PKQLz/xABoHksKlGxaC863H254gGnNAMPJquyptKe0revzmpZzgeSkmaJILJ00hwK4RRznzyLLD80MhhImDXCWSDD4llFSBgJjdj/G4WQY0FWDmMWmI+WkagTLbydqZppehtS2oNYiECyYHXNXnkGm8bC6BghAYgmjaE5/b7bqTJJo4yArbZEBBeubLOrfWNwN1NVkiTxt7Yoc6O/GxsLwLRmLKNCWRxMTrayz823XveA9IFEkCQbYMGWSeJp94XiZ9rMy2FrTFWKWkAvKxlxI7pB8BArXaHAN+rWkMlu1TIl37A+n+gjQLOS0HjstQrT/Ek/O5yyHb8Hsn7GcdABgXoWvWjHXFyK5EvcckyqOEA0tRRXCRs6KhGX3K9IMkLhxASQgzLX+XTEld9wqWtuV5TN5+EALT5dD+0sqw/I9n6qGTFTW+9jJlrZyK53etz5W5cQX4D6G83dHnI3sMb8E6EB5OyukGGkAlaeLSnJ2nnRcfn3yM+rfAt+JDUGSfNCqzUxx12X79RqP8FsS1OUFaVw09tOdQnyUzvCnrd62a45XpkE4ePIsXp8HWR1FfYgIjviuuWiiFsIdVbd8L/cYa11ABYePGzdIwMU+y6vyFEctRgoYtRduW4QEswXQyFk92PiYFzshcuef2KD6bmQ5cPokr9WJnIiUWJAU9hX5/qtD0RA1RPtQkAVRsoGRlUAS2AaMpA+tPnJPB2lwwEP50cg9a29BhMs0UmYk32wnJqSMCMtoWuM4IHcIOz0SGy20rrpMYXniACO/kQkjHSlCVL+AHdDqsg16HczeOf7Zh090HfIXeuvxzjfLOO1s7yaT9IUqsxhY5JsMp7ThKB1r5dftkA/oXBM5Gfyg/DeviHxzwybFzuNcc9eKBGFQCl39+gSQrIl/cmDmL8BzGqOP0l18sNjpfz4BwlIHk2UONrQvFMnsjUSIp/DLIUxWUy7mT0Y+FAAY3hoA5k11oU57cAH213uh5xXJs/7eyLiw/f7kBpLVF6Lg5cdhmx911NCB7TwZkDRTXUwljYCZi9RyPHALBGmyB7eYmCtznqYiOa2yOKsFKuImDZTZNqHJX0QI5csersvjXV2OcNix6BwbnjxDHpqiYGADSrK4uzsRxik/uxOTwVyByZoa8MGmRVI2ajsNxItBJKdxBaOVAJyJxFOwknR4anghEA1AeDgQgcGW37m2wxI3lx+nHt0kOTDkYCZVlhZD5/8Z08SieDj4gffqQJNOC+ISM+ctMYaAHUR7C2qgVPXLH67LiX25KJhs5BAfPDS0uOHgODUoHz7zlnHxXQsKRauDW/9egE0Xy0XFoIcmiRI9LXCRZXEYr6oVOVMe6cbnsKzfkGaLxFpTAT10MGwfHS7Br7noQH1qI722YhmXG//LFInn7c58chII9bcHRWfXVi7KM1CqR/PS2LF5fWhmSnz5fL29CV4rqmx3z52+aLKAe2rJZHvhGT/4x4v2hRO657S3mfnTMOxP178s8ODJBD2sENpQsgWV3SJ012AgMGYL1zju/EXlH5EN5mm/i/PRrWH/7fWRxY1AotWqLuETFXYTNuSPwk12wq4BphATLwx0o3aXr6no9PiQR4FuBH8SKalDuzPQLvmAUn/1MsrCMbC//YRrYBvr/z/gu3b71yYEP5Qt8zPGs9xA44aJNFnZozbtYG05R9biHzPvpNAkWlwenYEks1fDREb8cONP1khMnceoSPY6lLpKsP7itQMYW95742PWkfhfd+XBnna1bRMlTJskDDYRSgT24HkDhvwukBs3KeDgKKeD/eq7eSMv4JHbVBpa97aBPDpfmCA2JphLmTvLIzPEu+fRYoMv8U8mvP9Oy3WXVoWwsky646ooT5mUQgob+rMKALSv1J3fANuXyViwKMoWH7zRqUYlPEZ/4nCYoJsOKQwS6T10HXIW9rhbl5xoUASAQhcW+qA8m1aDwnrGAAS+/rkzGn9sX07PDbwyC1ZCM/SPIfanVxPeCoRMg+MNuNYGD5+CgdfDM5cHlkIZwO38qgUs2NB9AX3EdpVeJ+XAODEIa88JHMcnJ9+4oFEqGMhlYfqaX6jrWrzfLjR3z6vh7z4mA/M9n6+TzkzGy2t2dIJ6wai7vQqq2EEul/J1sKMJGBrrr2X3c7CtJ9rIBk66uKWrcUUVrSvL9IWyS0WAQSFidV0R6hwCepqhUYsnveCwfy0gKuCSDd57us+ZEausTdZ9Szw5lBCCy4HJgpBnmqDJJrtD/2A8nndktHuwM5cgPcsWX8YfRaV8R2DPb9srvhhSycQfPo6EbMpPKyD08gQOu7ZRejcCyXaqSEDaEu/hsQtBTw4gLy3p3r19+/Hit0G+jhhgmH8J+2H/7bW3SWBI3DuM7D/uN8dFUcCQZWwpzDXkwwMr7MZgC604jvucqwwtQ7xEh6DtqiCGgBCtDPYEyqtwImXt0H7PkEowHJg2yYRCyp1cZutqh1ELDMEYAfSDS4sMH9sQyTLa5E3Hc+QNSWF3aujQIpD+GatNPQbT82/vYmvrluKskCqcuhhZRN2QwDvecZClNSmd5cBeWByugkM2JL5Xw8ZGA/AjmAnj9YMQslbZ2l5bmPV79pFn+7ok6OXoeqwsp4Mi06Hey71TqRHUOdMjGw57WYMSeQxb01EZg5+q8ozCjoSGGgBKsDPWEXFjzaXJB8yoqu/FEGjPYTtgrym3kimHPj0yUJnF7Tpah2mo2AwkB3vtIE6RWXNfK9OsrRvzimrMy7hxNTcU6WHxp8O9dOd5jkVDXGzAGEkap1IUP4c9hADLu4DnBfEoquVzetJyo58FKem6KuwfpumQ7LIOn877GMqm39ePH6+QdLDFmmOdfXkCTLN2P3YHPfNhsTFnAvVLKO0+JIY2t0jo7iVoqgZsDSLIG5TyAdp+tDBWV14WXGIKe6XEsFSAHUFolWBm6Ga++9gRMbVGxPfo5JAYVzJZK7vn1sHRO+0w9BC4JRWm8U8PwQQCK7BHoWpklQW5NynTAaJ8NQ7GTTn0St/iOURCGcVHMv0ZC4RcCjX7Z8VLvjHlmusqZyA86IPKrPx6Vc7I8tMg2BJmJfPsrD07L1LuigniqpiW4PEilbE706QSWRwnMPzxVLzSASYvlwyU0YZnrYVikpwkLmrJIFftEnKi7VQl9rFQCdx6SVLu6U9lNJcN+TMvuxp2rsLNW8q2b8710I6QBO3gVhMwhwDdn/DuNWSy2TAjNj5zG/5+97wCMozrz/2b7rrpc5N57N67CxkDoLlRDILlc+uWS3D+FdEJCyJFwuUuDNFJIhwCmuoBNM8VYkjvuvchyk6wurbbP//eb1cqy0a52VruStjx7tLszb1753pv3fvPVarG6EZuvsxWP95KLlUlpQQECag1YAWDFnWulUVAREzioQ05sk2wECQ9ZDeLS24FA4FGDyeguXfNcStLaH/TzUHiyyjetCRydzh69XkcEYJpcOMuk80m9ib6UNFAZI8BifQQW8B0mj8ByjlaGVJpP9cRYgL8H1/PPcF1BFxZdAVckPel3+Ix+URk5WFn25NTDIvf0+DnvZeh+vlcn9y5V51cGYMVxZFVMKtvwfg3ASu9pqzpWduph5TbQr2nnK54mIkpHvnwcx6DXFxXiWlEkGFdF9ot7Tr2rIuhd9ak80gauIBo8gVwPAlydbPP+ePFtKfGLHJjqxsCY09X+PrGIynqaCFg/ZGChUbe3c3KbqPsTj/c0AgwCNYKOx19thD+x1GVJnAMY+uWL9W1gsquAnPfTgnMP/HPpTYMRyqgwOzn1sKjhAKOSoha3OpxRBDIpw8GK6xwofeV5cZ+sJrbagGdM82jLOIR5tRWXes7uuF6AKw1kdXy1157lhkCmQeq/53ZtCDRdK1oIJoxr1do+TMDC6hMy6OT7QZcMPI3Yghihnwa8ze+q8ORekqLcK3KR953wyOlq30wquEfxXtO1QU3A3XyOhvc3SRbCz+hJdHSpeQPXd1vYKkJA4Z+IL0gnm/ScnmqJYPwnK+o0VxV0WcE+xyNRRLYH85BiRz0pP8soQ/sBYCXjYgraQURdeAxcrAMVcJCclJ3QM1qd581wsDqnka4c9IeF4MO7cFObmDCn/pzYXJ1bE7IiDWAliQCbzhzpsLiPzSSDssySb0HEOPQhKKFhbzJJowCAs2YhGHf3Cx3QFztENgwrhh7bDL0ruAjhjhEMSP5XDMxfjEZHoGT1Cx3cmBqn/OAi37EwywyuxAQAgnjtl91KHPqOYgw9Mx8uHekUvI1XQu9H312RKyABNcVvhL1BwGyY4qeOGgMtTemagi4qiAXiTTfEwNSsOSNT+OKr1L1jrMVknLikH/yAmcA9nnDDLDtVktM+6Rfypz3JOiOAKtair1a7qh59DU/JFcitWKCDlY+gxU5HQWc3Q9EdmzF8IRns+qOyd1p4HDPwYbqsb5bcNqJQphQ6JMtskBqXV7ZUNsmLJ+rkSIM7KReJOJJI060i10rzyJ4IJfZLG4tV2eZqlOFHyuDktrZNNIhsb/jVwP9ARNhcuurZS+9Kqd9agGejko+wHbMaWmB0Es9dsxsoxT3JCmA1BKIivYmBnJ3gmMS7zyyP73yvbnNBVKjK127Pi0k/TG9/Epl/6yG3/PyFBvj9it0gIFL7OO3q4SGfsRhHFGmR0yJlb7tG0SzBNQKeJ9+LKtreGvj5sismSx48+Ne2dSxNv2Q4WHEe+JJVEBNWPcq3oVdxIFgtEBa4WgXVx8XkpfcGnO0kkYuVSP2cTqrv9DJ7sHRYvvx03lC5MssrVe+XyY7X14qt8qR8cnxf+d+5Q2VOv6zkWyA67Xn0GVQAqqBfK5fwe8ITdkEz5tewY1skt+5UG7gCqNqL1/P7jEbzSRUORVM91TapBAODoWQ8iJyXpEtosh2iwVjC1tCC0JMgBlNo1aL7gUdeqteUuJOOtq0NPgjxFUPf7IWOVLzBaIgmLBe6SIjRp//ZHwT9Oys4WcnGAeIcYZ+hfzUSX4vo4DfdU4aDlYAZoIkJISKEV/cNKP5OFQGdsxuroOx+Vmr6jNA4GxGrxZOluhCTCvL4hK0AERsQ/iLFgjP7ZMmXphTJ+cP75ZmnV0hFRYVYzBb57Oc/h/YaZGKBTe6dWiRfKzspp5q9XbLICd+SXnqlVY8uQI1PfO+epIgRrkBoMdin8jCqDG6HAFdnMJPuL1n19pa5SxbJprUru6c5PVjLfmyeUMim/lVSBngm6RzYXAt0Bl+mpR+sJrWXGoQBTFhi0Rv2uOWF95rlc4tzI4biibYRCGckb+xo0cL2dHQPOXrXz7JremkdXddzjqD7ybeaZDfAVaQwQnrKDJeXBhYEveT+GXWwMvrkGrTwQskIUAipqPt49KxvOrh3+8PRJl3OZwBWAkbaDI6Fx2xxYoN9HpvcUij72Y1QLO6Lza8uf7AEDJ2z/zW/WAj2q9isCWhh7EWawcNeNqJArPBQv+KZZ+XE8RNYqAxiNpslNzdXjEajOBHXbnyOWa4emCv/PFwde2XJdCdBcXeKA9vRxgAO6aBTu6ToTLtA9orSgBb9yONvWTlv2UIpW5WaLhnakaFNqbZ0v3siOFiAKcmXuEFlw0w/x6FjR8Y9BA50DdAdfSZDdsNet3z4Sr8U5nS+lkUaBVrwPfpSg7wL0BYusU90efCtO/O6XB+t2xhQuTsSx/J0jU8bG4cOg4U8xCUkF5P3d8d4xpMWbC/67Kht9E++9YfntGcSe2A8q0iqsvQ9xUnVtZ5r7DsvvygKXlvUgLoerdjKlqiYY3nQw8oBJ4tcnmhSAACrN/nG0hZ/s1EmF9jl0KFDcqrilAao+AA1A1S99PwL8sarr8tTTz4lZ0+dkunQ0bICkPG+lE3oXMg6kCLBbhEHtiMmqTsAwGpQ+Y72FoPU2n004A88bjbY/GWrUlepvR0p4K9J4xgywPNM6oIk3e7EzmA+EbRYzfo2JSdEM/Xw39QtfUbTGuDCga4IupJoYfeX1xo1z/Pcg6l/1NHBPr2FAMpPrm/WwEqX6nQHhHEqUWTCE+uohsNSj05RdbbNAD9o0e0RCe9EDBUEAz/7p1Y9NSybTn/TOSXvKPbyUePSY3FYzuHznwAgeGUKBtztf/ZAdC4b2D9NVIg3O/KYe0NCZ8jBckADs6mpGQy6i9u1Z/ce+cff/i4l720Up9MpuQBjiRRX9DRJ2vSsaB1I50MYr+5MXMCLMJ+GHN8iBnBIOccw13w4/2dwr34GzqKrNA04VyGaty7mfU/X+McScHTHJhqqO16fnEHkYJmINHSkRgBKAkx9d+mooH1WNDIfIkwCgVgTl7QXYJm4qqxFW94itZvX+Hit2NAsL292dukxI3hl27vlUUXDOS5OgDo9yQy5Uj64WN3SRj0NiyIvgTIDPyMu4RRkL6RVbzqn2J+QdKZaFH0vXf2seF0MfyOrkH0LbyEXqwD+ifLqTmMvjI702ibugrn9JWAmiibEPwva34LYdTVuv/Tv11fMFgsWgQsPEDlZBF3ZOdmSX5AvZ1s84oHPBtyWWgkyEpWBmbX4gcDO7WjQXR0lTfufO6i5YzBReZ0rWzAMzlMYkx8AatWVpLjF4KW0PgAv5lAqngJdpMLe8Lhc2r5of1OcpEdnh+XSEahbv1/LaJvUlo9TnQDg6mk2ydOpJ9ZWCL68s6tF/v56k6YUzanbWWKeBnDoHl/XpAWj7ix/uOv98ozyoek2LRxNoh9bdovcMo2bGq5BHZw38iVWh0ixgyJ69BRFyHDn0aeyLjDu8Jn0ZmFFt8v36HAlceUAFxa76TTY/k8CfGD5w5up1yUDTu8Rky86i0L2XhNBJdo5ZRRk5oLRDIBVeq5RRo0dK1OnTtEAFUEWD4Ir6mPNnz9fcvr0k5KzTeJN9CoWRbvjloViX4yDH8CK4tueAr0ch/7nDsiwo2War6tgGBxFVVR5AWPwHVyuTDdwxflHjkhNo3/qqfP+nGRF9Rxb6t8YdHKwGGA4keFJ+BgTtFJ0edMcu9xS7IjZeGUv/E89Bg/xVRCfRQOuQs8vSXIKAZh/i1iBx87GhiYJXO9cmCVL59k1OrNP9Nt34TUxVFt8Pqkb1wTXFnoS28g5kLQJTS+v8hWcrfXN2HGE2gr6+p+0/e6g4RmA1QFR4nWqZE2Qi4Vt+SWU2aqLZYBn99PwtH2ceCvqRNcNgRaAsh6erFyMVp2olQNgqt19z4dl0ZWLNG6V3eGQ/v37y+Kli+WmJTfJW+ec8h6AmEHPCho1Nbo5Yxuwgt0CgW6PsUew8bbqXA07sukicAWKvAxw9XWEwalwV8Jpe5oluid4+JMFdlhtTWFcOR2PVu+iFBpugVxdJ74SimK0pSFOHdcAFZ51TnVu+H3zDLJgslW+8+E8ufe2POmTG5tyO834//Zakxw85dPdRw4U6bLzmBeWgM1wSRHbxt0XXKx74cvrgY/my42z7TKkD3TeYKnItY39jecSS1Go3nbSupHtidNQdvv8ZrtrEPgZVoQT//2abAtpkK4pY0WY4JGniM+SZ6/wNbkfw+vaVDy9WQaY1A+o2C0NeQPFZcuJ+olW4YCUc9Vgh2VhdwAX1EEBH/14aQm/ucFXwPXCj7eflq9NHSh3//vHpP58lbRA5yonL1cc+YXy5tlmeXT3OWn0di0ifYKHpvPiCay8ALbd6nIhXLNAe9UvA0/tkcFwx2DywQBCmwPgXCnyCvaGrxitluPupkbZVvZyuEJS9nzrIl6AN+fpjQlwttmdhIMhrq6XL7aN/e8qMOD9PDitKKKiL64JQ80yfaRFJg83a24Ssu1dfCdH2WCCB9saI4IgEKJOVoy3a0OZg35cf5ldFk2xAQj4tBBD7x/zaPED6bCVulOkafARi70uNFXrr1Zp1H8gIo4Nv0ZdQyIzkmZ0SAtXDbNQTz4AJoPxpmXKAKwED3vpy89L8bLlWFHkBUy8G/HA3c0dMQvhTLhZnhg1F6Ap+qUiCLIQ7d0GT+96X3M76yvaFdKYYgxFs6tJHPWVkldVrt15buQMcWUXaCBrb61LvrWpXBYMyJEZ8IuVY8+R8w0+2Xz4tJRVNUtTEoMrzRKQHEOu4j3GrWo3WBgXo98rgxFbcODJXWLAdw1cBUPgrIG16r0IUnTYheDRW15d3e7G9PlaXumVonzjaIiQ+jKGdqJ9HCWSshQPRr8iBFsSC8Di5q+BMnwxtSpWMwbi1BFmmQZQNW6wGZwr/RaNkWhjh/OMcYNNsn5npFyRr8F2RsYP0R9KqKNSGZpm5ACzdlwHwFUP60gAA9mFoNk7AbgOn/ZhXaN+G6kVBFp4HKNOpK9eRW+WTz0s3ZMg6lYlPiO5dnCJMQB0G4bwORmAlXiSp28NKsLIGLyBBsiifwFdrLn4HEVq9IMFWEPeAKnuO6J1pYuORpq4EE+uApCl6NWGZRUakAp+AlGBQwXAFvCJCbHrrM56gKoqya49g89z2m8juCVciQNGs5yctFBrJJ//apdfXjxeK6sRGofWguTY+1kWyo839tMqTeQftFuFZ0ByrDQv+nxN7g0JtDR7W2To8a3S/8wBjBU0SLkCBxXan4dT268rBvMJX6BRtqxc0xta3O1toI7HSyVOOqoMOhgFeZI5hcRUHOZoU7R6LiBVG5eKej79AaDGDzW1cqksGpeK3J1EAlQCNzpT1Sw9dfSRtGD7s+DCYMyg6MPPREtDExYxij55zB5r1RTUyd1iOB1yt/bik7EYyZ3hGAUfwwilo29sbyt3NULGSy5x6eGR5AniejocnQmaaUZeSd6dmJqf4WDFRDZ9N5U+/4zMAxfL4/NvsZlNvwbIehgPnpWhcwaf2C7OrEJpseehUD5VkVacC0+dBgZgyUZHpArNenhf+1svZNXKDYIoOCLEymBEvQRNBFPWlkZ81omtsVpszfVidjdr1ykWDBYRLFSFc1Q/vLW3T1xgGN6Z+fiCx5xGPbtC+8J66jvocQFYAbxwRewtCbS0t9RDmX2TFJ4/3toqcDc0gwl5MhBQv6soxlNef6NsXpOe4IpE8QMMQ+na9Ob7rgngNiTbDGwd1wsfPupT4Wf7x/nC1Y6/MbRKR6CI5WhTGl8odqL5/zBwqaaAS0XR3/ghZumfH18uVcctvHB2RJFJc5XghDWy3sT+9IOncwZETmTiJKKYdPRAs3ZQV6sWun1HYRW3E9ytXa3cLRhVBK03kZ/jddHkQ2P5okngpidx9H18wWNn9d2qp5qE5mWzK+v8ZuhiTbh2pl1BBBA1JfRxdVItsbNUZ2NSOXsZTOaLb74D88z/V2yKxegrQugERYUjD22QxtwiTezjM9s0TlHAYGrVsQlSxW8ywwN8B29tfKJtFjGBs0HdrlAiQCJHimI+gqsQd4riJZ6jyMnocWucq5COFZ9nHtqzjXuMkBv4LHZx5vaTuqKRUj1kYjBDqJJ2n0m1DnDtggiUihwBcKz0v2K263iivmJcc8FBHH60VHLwqYkEtbqUFqy6f8BEeghA63zJqmcS1YKkKZcqclBLzD9y2jubujMXbXJJ04vWhmJuesEK1kCRjofKYTUEXTtwbqOo0P0UyfWDgjq5RgRUU0aASwWAQ0eWsTC/40FOukoY2s8IbhBe+HT0kXWzXxpAA1DszkSQxHbzmDveqnHfTlf7ZC9cg7x/1AMul0dOw8KR1pwh7hbbp1kEYgz0JPaRYXaSOqHLwcDP3ssWTLLmQ1SYloGfMwCrG2dxIABQY7DV4hH8MTbHSQD1k1l9fk0FjpP4Bm4QVpzgZnrxQ8nwOoxp2GHCPdSZUgga2iUCK02kFDrHlReJ/ri0T/wGpxuLFvKhDAIqu90uBX36yOChw2TE6FHyqssh2xoB9izglGn3txYSLCK5/pJbRR9WMDlTCUZ7ixjwIipSmT0gfaqOwMfVFrG1NLTOB74dK3Wg/s+wgj+Ct8HGjatWXHRnuv6oB6iyW42DECpmiAus1KQTT7cbOD5dTvhOAncSa8XFa0C7bB/4Sl0iZidgyQN4IoCZPNwi00cFuVQDoLDOPL0hEQySM1S6H6oHOhO5dGMhHuzJvpDGWTZFxgK08lgMtxW1sJpjTMWg7pYXelxezYs78+r1ys9libElk3il1RhvFAHDknA0hrgfrEczAEvnXM9k10mBstUrZd7S5fLSqgE7br/l7I+wYf4a4KawPaAi2LnoFai1Dg1ARajv4ocRv1gMymp/niCKhwlAyoTYgQRTOXkwuQag6jegSAYOGoRjoPTF75zsbCxiJrFW1Mt7m05q/q8iVN97L5EGBFXgVgV1q2jC1Eubi7Exw0/awFO7ZQAMIChCDnGuMG7lQMI/DKiBJ/AdHtqf7aWd6P5m7QMXASBrBnU+ur/2+NfIIL/U2+mAXx22Mor+PjTDLkP7GjUF9ZEDTMKYdnpAWtjC43yBIGk8gAmV1aE3FzUgJmeIemPjINbsTckM7hbFrDyKJ9qkGZ7byZ3bc8Ijx8/5dAfu5tgTnCR7Yg9g1Vt47JxvGhTeDyZ7f2Jpf4aDFQvVunBPGTy837bsDuyVgecUg3ECEM+38UNTbiL4KQS4YcBkL0KfULeEb7IqVxZwNQJ0kdtRwn0GKliAw2XE6kUrJJvVKlnwqG6z2cUCHa3snBzJRjDmnCwHOFR9EZg5R/IArrKyssTusMM7swn3MTwD6ms9fOBTz+lrx+GQN880Jo9+FdtPbhWtAGFSpsZiYtURnRN5DmOY1VQtQ09slYLz5agJ7cc5JsyL7ZgA3/G5Xa8ZzZZAyerUD9ysdTyKP5yrivJzcEO+OAkcLGy/yZ3YfoYaoR4WRj7qzlAnicGQLfSfFP1tUZcf74xzIGa7Y6FD3nrfJefqMdfR3XAMO3J0eG0Q/FVdO9OmAch4tyde5ZH2DCE0fggPs+b8Va9eKseecyAJhrFTskFsmgXu3pQHn6h7NvispkKvOu12W4YMwGojRfd94QYJ1w1kAj9qEGUUtoiPYgOFRE+VocOHyYeuv04LQwOleJj4wh8LgRXEf36EROGye1Hi4gNgZARHilqsJhxmCP4t+E0uFAGUGQBLA164xulNIMcUAlKhT60e7UrwD+vKwb13jCyULeed0gQHNr328SCoAq2osB4EVfjkqt3bE8aC3Mk+VcdkCPxb2ZvrWoFVmzI7nFqp38/Pz9lZW6NKBlxdPKCMv6eq9+Y+sb5pht6QJBeX1Et+4QGjuIluAbLt0beJuj69kVsVrgcUWX4VDkuXzHHI2q0t8jaCOSOGpCa1DwEtAiv2axi4clcjvM0NsxywHoR7Bp1K4+Ha0B3nY2krx57OcnvvYhsd5bhX1MHtBThYU9c+VJSFUE7N0d2ZOrkyAKuHxtILqy/zsmXVgYD/AYNiGAgscA2bsvv9neIAKLruphulDz4JfnQlAo12N7jcbk1UaLUE2eohcNUuS8SvFDPO758ti+DvavVJumPoRRCL3D2K/+j4iJ/JwKlqT23Q0uZqlIEVu4RBwI3gWoa4VkDBDcj6WMAf+LnBZDhXfbZeyl59vv3dme+gAD24w8aj75lq//hmiNZ60/SMZYD4uHNToj+mWL2lx1JvT9xDbhuV7unMdOlch7y6zSmwBEWgYOiTokFUZr92hk3on4rf9Vrj9USf4lEnx54vC9rS34uWW71947PYhBiZFVW+qbi3ABKZDMDSS8RM/tgosCXQIgvxpuI1K0fhKPIb4Ff8EXBhlg9goXTDe+IGMLpx6RKI8nIhJsTbTIzJB+Dha2kRAi2zyQjOlkUTBxr5ahhFIlhzmAzykdGFsvV8MwI4xxbiIoqqOs8SEpdqYAocKn7yNVdbiTq/vdfkwMpDrlVB9UkZXL5DshqDfvhC4AogeD969WMsSM8qBkPLxpcyyuzhxu5AhVfADZl08nwwwDP1e5I59YfF31SADjPAR7okAieCrDGD8qAw7pD1AFnUePjQdOiUQfQZ5VKVMuSyWwxyOXS5th52a7EXk215az8QWKLZhz5wnzLuXK2/ov21dPiOaZxJPUWB8kN7ZeiocQilk3824HHvx8Y6D23px/acOXVaampqZMiwoZqYTzcn65JO8X6KGz1wS8DDC1Ea9buYuJRH4mwxV3+HWZwQEW6DqLBbElcVHJpXdSqoI0yQigDL2id1q5KNW6URDZQGuKJvq6EQBw4p365ZCQbZLto1N8ZhFTr+FdXTuM5gNPtKV2X0rcLNN87pJ95shm6OafnqspbFtXjzT1YOFqf77LEW+e49+XL7AocUwtllsvYl3Hh1dp7guDDHKDNHW2UGjoJs6JOmD85sI082rEAvn2iVOeOsmt8tik65SCcjKbh34GXBjjHdufekp2TFn38kDz74YFtfU/1Lkr/vJf/wlL7yorhq6mTjqvXvYMO4Fxtsm7XF7h3vy3NPPSOnALaoZxWv5AdHzA3A0oT4gQ2NTVLf1CSNzc3S4nJp4ItcL3LN+HCEEkWDd44qlNlQeNf0b0MX4vHJ3UXTnwKQAogKwIFqoLlFAk0IrsxP/Kb3eg1sMW8yJtDP5PdIEUSB4/e8JkWwEjT6LrISrIAbjB9AnvtZxZi1jTp3JasyIsFIQ00LtG/emWc7WeWbTCeQybIBu5ET6gAAQABJREFUcQZzGvP9hu8JTJOGmeXLt+ZqbhWyoCSdjsAiSAnqlAaV2kO/0+2T89hiVjQl+S/dkivT4BQWQgSsycGDc0c7koAw7Et1g59hcybcdUWWOTTfk6DpcWlisqxJcelsby5k/pI7pKW2WXH0zbkBg/JLgK3xbC+BzsChQ+Wmm5fJuHFjtU2Eb+6JSuRk8dDC3WCloygROmIawKPyPOMMfnfLaTnvpqiw3fQJfdea1q59rb+1JretDDhJAMff2qoBThWsJDVEl8C+JYpmEcslLdG3nPqzmvsF+jszULQZopeieEDF9aDA/wQCxg0GJeAryfi3ikjS0MUWmMPDH9LAX69qeP3vrzdN6g2Ld2j6tj0B+BL6ziGnuIu6R/QSng8OzQh4VWcg5SsQdHg0/Du1e6JC3cx8pjkF8AIhWw65tUDUxxAn8Vxd0KEpleE9OC7VktDmEP5c9NmDNKS4+xPXZm//zyU5N8AfVpUDLxDpkjLPcy8aaYIsd4tHsWdZrwbK+QUAyDQ2jyArr6BQPnTjDTJr9mWaDlUiQVY4khB4MT11uEb+vO+8wAyynRij/VRq3VK0D/zR/gc/tVevcBWk0nnQio5eHc5aKTqzX/pUHhGzxwlgdWFxAT2Pgx6PgYp/VSz+cwGXSUrWZDyzRzsNDp3y0vfQgv95pu6FVza39IsjkzfaJmj5CKp4MGIVuU9ZAE90hEmfTfzMhlNK+qQqgPiLXtUZ/48+kxCcWjtPR5QhvK2r4m7OzD4yiG8LHvxahIgJWm0qUgSLQPant3LdCETojwpcFE23i2NBj+yMuWiF7U+yKM/TfQP9YyH8DAJQ+zVHplX1wU8aRjjxwkEHpRyfBvyud+ITyvIANRrI76nxIQBEKKuz99+dvxjgcPuQvuljW5c+Pe3mxSiW6krXPCfzb7xL/e+Vx968/+YRn8MG/HPMzWKKBxtqa+XlF16QqspKufLqqyQPfqy6ovweS/sI6gijbh6eJyfrXfLyiXoAhlhKSuF7WndKOzyw96s8JH3PHoKlILyxo8tt4EpRmkC2VTj3iM8f2AK/Zf6y5zLiQD2zgnNx9SYn3BmYezTAM8d1YKFRZo0Jek2ntRut/wiqTHhzJ8fKhJ0Nbua0z2QBUl5s5tys6TKCHBN45BZyUk4hPAxDwkBpWdvIObEHoP83z7fLsnlZmodzPeOY6LzwjSZ/fa1R3t7lkkYADtKfgJYgi+M2CAc3/MFwBUHXEQRe2RrwCo5dotunp3wCwVwHD3A+Mc9CicCXsQspDCAXl/4TydkiEIOjT9mBUD4b97rlBEAmLvcIl5ROgA+f8SLwsx8+/dInZbbHXjjWxUvvEANjD/p9kwGyHkYTF2NDMWoABxyQ0RMmyLXgZo0YPlRrPc93Z+KbUKXTJz/bfkZKz8HyNjOLNFYeyWCF24W+VUcBrA6KHUG0ycW6IA4UL3gVW5HtV36/b5XFaG2sdlfL3nWvdefwpURdNNgAMDW+tdP1yMPP1H+xCiCgu8ELOWZXTrVR/KF5F6foL5kSVw0fOFIEUuSAIDjvBSAFQEUgxXM0tSdXhLYl5Eawl+1pzeWHIs9P3ZAtHwctegtHqBnOOv/v2XpZVQY9ztZ2h8aHfWe72ReOIzmNmtg2BLzg1JTAawiAV1G+SfqC80gHotSNImhOpkTQdfycV/72WpOs29bS7XEOSWeC2fvvyf9p8UTrN0i7kDQkmegYS1svwOBY7s7ckxAK0Jnk/CWL4Zg9b48a8Hwepvr3YUZ+AouBA8uCHNq7R85XnpOFV18NkeEscdgRIJqvL92UuFj1d5jk81OL4Hz0jOyuZvzhbqq8t1WDnYYgygbLwD4EVhAF2ptr24CVBq4UhYy+Q4Baf0Wom3+6jHLSKgZ5d+VTva03SdMeqACK3YIAz2e8sxjguSfm35XQm4KSvSby6+2EI0fKDZDEuI0ETRSXnYS/qVPnwZHCd5jQS2MLxEsQM9G3WBsgwcTlo01AxaMjH588z/iJz25watZvE4dpgSl6nCTbjng0lw/c4C8Vj7FP7ecMASRFaeTMHTrt0y4RSGnAC9xIWjQGOV5B0EXwRdFo31yDUKfICnDdUyLqzgjNfjD241dvz9M8y7+6zdXZLfG9DmJz3iFW42UAWPmIF1oX3wp6b2kZgNVLx6Z0DRx4I81fuvwUnE1+y2A0HATq/wa4VYMpMqyrrpZXXnxJjh0+Ildec5UMHTJUWwC7i5vFBXhErkW+PL1Ifr7jnOyrSSeQhRUDuwp9WTmaqzVgVVh1XANZIY5ViGuFMavAMD4DcPUXeCTbC3OBwI4XM+JAbXJ34U8TwIDdogwAUBjGzfHSDbQLRXd6Kzfs/vkG+dg12b0SXBFMVSP8TCX0cyjaqwCIovPOMzXQQwKQaoCojGCCukl6gFQkwpD+NdDLOgIl7N4CsA4gRiVBIwFgZ0nLwseaGVvzY5g1nSfqPVWBngcqCLzcmh4XgRd17QpzDBAzmmTgRRwvo+a/i3l6UyJIvOeqbNkO4FlZ130uTUgF0hBAfgy+9gXHNAOwetPESOe2lCJ2YfHSO5sUv/pr1WjYg8XiATz4l2PSGgLw/L17+zY5VX5C5i64XGbPma3FFyTI6g6gxcV5XL5N7p1RJL8AyNqb6iCrdaU2+TyS03BOA1b5NRVidjdrazJBVSuwwodyBvN2JTiOf1N9gW347dm05sV0nspx7fu+kx54OzfNOFHl7/YAz5z3BBHjELC4NyZyo/77yTqNE0PwSX0ciom07R5/2j7xpSOOVKx9IvBkpKrektierqYQOAvRjOWxXAbk5lEJ4LXvZJDjBT/Omn7X0H5G+cG/FWhuFrpaf7zvHwNLVc7bs7UAilqn4l1Dx+XRSBw6fIXQA5t6ptZ/uONcqXc2w8FKgjEtWb0CIsM7/aY+ptd9572H8bb4ZezgH0fTC+gqoQ4OSV8Hx2v/7j1SfMVCmThpotjtdg1kJRpohUDWN2YOkN/sqpStlc0ppviOVQg0VsCtskFxPb/ulBQibmBWY5WY6MeK2xWBlTaPIApU5DS+wllo4O9wM78NF90lL2c4VvF8zDinFWWLbDowbRK4MhDgdH/qA84F9XG6mijZb4ZYjtZglbUBsUK6NnKAWfKhC8TEzRxzSleiojaPsgMeTWzF2xOtN8R20oJyCDg5vSWNHWzS9KrIPdFLw876ECpPG5rW8eFa2ATQRdEhdbf0JoLgECeWyul7y+FYGWUO7mPSAl1zTnTVw78ZzaJ7kG5PoBE8umeDyzn1iTebXgg+w62E6/bGdF+FGYDVfbTuUk2la4LhUuYvu+M44gN+R1GM74Ir8jU8f3MxTU2csCeOHoUH+FMyeuxYmVs8H59jxGazJRxocWEZlWeVrwNkPb63St461SBeLBbBV+UudbuHbgZFsYIqeO0ye53gVlVKfk255NWehhJ7E87Tj5VBO4INVBg87Ri+vwTe4dO4vhNLurtk1Qs91P7UrpZK2ao6O+dfbzXPYNy2nkhNUKCm2XwsAZa5kdLMfj9EWO/DwmvPCY8mwqMyuRFshYlDzHIVghtThEc3ArTO0yNuopXchxDD7y1YzpHL0h3PIWrRQMUw+PXqLWkSuIwjB5hk9wlvd5BAe8niOF09zaaBTT104FiveLdZs/zj+K1/v0WOVwbZgRRF0g3GRIQTmj7KItNGmhm9QOOW6amDeb0watACSeu9sYv5CaVYL/o05Vdf6OMAV7WbQoJ0seFdvL33PA1d7Ei63M7QKXOX3uk6Isbnx6q+LYpB+TSA1ieAr4ZRN8sLD+37du+WY0eOaADrsjlzZNSY0W3hdhLF0SLIGphlli9BJ2sAwuq8cLRWmuhqO/Sq1+sH6AKoMnlbJLupWvLArcqrPSU2WAMa/V70ICgCDLlbAN2heCa7ceCNTF6EAvshnIOj0AywSuRwt9pzFIJ7NaEnAjxzSh+AWIi6TVQejibx+aDvqD3lXind75btiDNHvSi2n1yKC4+JKhtxfTMcSxKIFRUYZMYoq4zVKY7kPeMB1LYd8rQrO5qWxpaH4qaFk60a5yy2EuJ/F7l4V6BN+wBkSeNEJ9Yxor9RC3Gjt67TcH/xzDvNcKsAX11gMHG+hOaE5nIB4ISA/OXNLdIfc2LqcIvMRzidGQBcVL6P1nLz4GkvdMm8bZwyve2MNT/7whcIiAmnoYx89C8DsGIlZua+xFJgE0SGTONuXl6OR/G/oeL7Mibw58E1uRnzuACbvLgR9mbPzl1y+MBBGTp8uEydMUPGTRgvBYUFEBuA+4LVIN5gi4tCjsUoH5/YV0aCo/V3OCM93ui+sFIkliw6Swel8J9/qKxu9jZLFkBVbt0ZyYXXdbpYMELXiolyvxCowqpHi8BKdHUDjhdBxDeBqc5SJa5sdUYUqBEswX/KAWwG5BuHnasL5BJsdbf1FsU4CC4tT73VLF9CeBs6rAyXyJmg9+13drvkvT0uOYrvGqjCDZx+3Hh4tE/8SXCF+SXnoeOz9bBHN8Ci8vX1M+2y+7gn4XpRBBb9IRajN/pL+9K+X939nW1hm14sadGU+xPdNoazuWaGHYBHP9+Cvqrobyw0l0OiQo1mnCP8gj80YDgJEHayskXeQFDswRDJzp9glavB8SSHi2LacIkGD39/vVmzlEw0LTpqA/XzYKWZh/fugVUNAapSpHzSPxNSniTJ08GSlc/CfbT4Fi65p8zr9ewCcHoagq1PowfX4mHMI9DygKN1+OBBjaPVt18/gKwJMn7yRBk8ZIg4HA4siAAPcQRbXGxNKPOaIbkyIscqTxyolg1nGsWNhSG4SvQUfS+sUhT9MQ6gDT6rspuqEMbmnKZTRfFfkFMVAlXashZssKI049de/FiHnryM0D47bUMbm91nsmXjCxnl9e4c1QpsMABWI8/X+3N7ak7xZWL1phZtw7trUZamNxX0g0XrPAIjPzgnHnkPDh63govEzRMRktoAVbuZFZZ0zEPfUxv3umTpPLvmhyls5g4uXAVR1StbnBBDgmMRft/t4E59p0AKmYNA1dFy8zornaJXpmi5MpHKGwUO4+xxFs0XVjQ0j1RWpGucD6MgjrzuMrtukEmLTs4ThFuNapw08IXO0Ks+ATsB/NqtLVrMwuKJNpmC2IW0bKS4kkCKOmgUQ0OkDr08vPD2VEJboGuYc7LSN+x0jY/+AFM+ZQBWsg8xHsoNL/5L5i5Z7rSbA684PcoGPFRXAjh9HM/81ZjTfUIgqvLsWTmHY8umTTJg4AAZjdiGo0aPkSJ8z8rKEoMRGpCtYKsr3C0ujwRao8HF+hr0smb0c8izCK9T3gilTdIbjUpsQgVaHfwDvh4AFRXSre4muFWoAZg6L9k4rPBdZfa6tOu8IciputA40I0OY46hCATilrUwai9DpnPoQ6AUvsoyqWco4PLAV5PXkA8LuejkcwloJmeJGxscnVhugjL5RARrpusGgiiCKYZmoWk/rfiYlxtdLCCH9+2BDtF+iBZnj7Pq6gmVrZfOdcj+igZtM2Y74p34nNNrPTko1B3qSqILiXegN0YRFvvNGI105FqIEEOxJk0fDW1bD25PIsXJ5F7dMMsuw2PQQTsEsd1OcLDYZz2J2UP30OP+WzvdGlCjEjs91IfCF5Gux88FQxuF8uupJ555oT9paXarBRyLdEgZgJUio7xpDbhZSABajWAcrcYkfgsP0zyAhLtw+npM56FwWKpZ5rpaWsDROirHjx6T9+zvCjlbQ0cMl2EQJQ4cNEjyC/LFaoUrzNYdIQS2Qp9aRVH84VudAyvPspH5Mq2PXV48WifroQBf5+arfBQFdJoFhWjlhAqDsBSsDYPfIxboUdHqj6I+gio7YgJqHCoALYoEmQioWECb+I+/wKnCx3EcJQBWb6ILpf6Av0JRDN6yDKgCWXo+cWnGQZdjoYHvkUaFKucGRmedod9sH6cWj4tEPTG0kmXUQv+GCuszx1h1WwNeqXGxWmQbxIywy4h7IsCirteM0frA36UNgcNY+elzDeD2gZMDrh3T6jK8PO5xy5chhh3WL/atajr00SZAfLbloH4QE2xJ5L9c58YMjI17xXvfhfi4GgBJW44iVxX2ami+aQYUAPZV8HMF3/tafs7L0PWwBXTTBfSXz62B8yYdUuyzNh2ok4R9DAEtNL2peOntb4B58y5W5XF4xOAaXlmK89PxwOUASPC5E4KtkydOaMcmBEzLysmWPn37gcM1UIoGDZR+/ftrgMvhyBKLxQwrJyOKAesZ935QtBhU2GW5oaQ9R/gzItcmX5zWXxYOypGXjtXKFrhzcNLUUGtFKHf7T1xou9b2BRlan1CAJAMUz00EU/BDRe4UARUPhqvhORO4U3AWpj3RLCwYN/EDgAp8CKlFDQfwuQkVvKsG1G2QQZ1R+/m9yiGLbNqY0a1qPzI9/Z2iOLNRaQJ3gltxj69hfJIS6VOIzxD1t2673KFbDEdF7zuvcMAnlhdKxnh22j9KcRhIBrimKJJOLGNNtAR9bE2jlEG5n898yKUEgRY5TzZwxugxn/EDY0ls21XghNFikwAknoljw/bdvtAhsVhQUrmd+nkEWl0F46F+cYzjPc6hsrv6CbGlx26VegZCT4fU44tTOhC5p/pYElS69sAb/G68M+xBpM8/48GbDYB0Pdp0JY6xOLJDYIvhdhrq6qW+tk6OHjqkgSkLOFmOrGzJzc+T/D59pKCgQHILCiUPQMyemwvxgFXMyGNC7EQzVkZ4nMfDjU/tKQ9iJO07KjIDnM0dkC2TwM3ajBiGLx+vkx3nEbAXqx7FeHy1aQNQAE8ER0a0yexxaiI+k9etASezz6WBKAIos6dFU0Y3Ekghr8bb4F9theFDHBT94YuW0FdqeDTgSjk+4U5BBahStqDvh+C3qg5bkL90TQZQhejVGz8p+kCIkpPYOBuBtwsuAPHe2Nqut4kbL8PavIY4ciMXm3VvxIum2qVkn1sTZ3a9NRdKICgYCiXryyd1jXv1xo4WjVPFkttvu3yEuSS8CZB1GYJp37Ew60LlOr+xjSs2GOUEXB/EC8iwCWzf3PEWueEy6LPqbBOzbwBwpjg5nm2KoRndcwtoBf9xTdAPOxnaE7qn4p6rJQOweo723VYzvcEjYXrL+XnLlq8Fh+Y1aDUU4ameiXOLgIiKsTiMx3d6xYaOenCpIIeKHC4e1VWViKZ3CCsgY24ZxAhuF4GVxQxgBe4WRYo2vM6asnLEAt9bFrg1NiGfCSuH5ZLVw4uVGb68ZBJEhZ7KRqlzugCgPBrHSZP7wM8Uf9OKj7+peE5Hn+1BGNqJdIErxV8XQBV/MWmOP10oog7NPo4Te/H9feTciSYcUgOBarfX7TYZTbJl7Uu8IZOSgAKj4IgzL0s5CvP0RoxrQRI0uctNJOfl9e0uuXG2Q0YU6Vu2GcT47quy5P1jnrgCDK4StGDriviOAaVfLHFqAadbNRIuohWXIvo9Yx66JaDTzVjSUIgY2dbyyvh5B8BaosUi/AjCz8TivJOGEATN0Sq3x9Lv3nQPVXzxctSQZVNO0foxHVJsszUdKJOifSxbpYEtKiGdnr/k9tOAXWsRdzhPMRjHYL2YCXA1C5/TcH4EFrc85LORFCHQxe98bfN7Yf4NC0U6ghLERSR6017nuCJGmZiTbrgHaO9+Wgnt7gyBJ566UOYHQVTwFrSPCgdOgMJ6fD+J78fQzANo2H58PwSNhAqYZDW4Kv1eC5R/N72esfwLUi75/rY63ayESGZvtl0ZlgjRV2+jCt9RTlT6hNyeT12fw/ccXWnCEIvcdUWW/HpVowZY9N5/aWUEF/QsfvU0e8zWfuSArd3q1Pw7dQSuQnXy2n4ovq/d0iKfRN8veV8LZYv4SYvEq6fb5dWtLqmDSLKr/WdlDI1za7FDLoMFZSyJuld7y8F5j03yGUuVPXYP5wtFvLC03IZGnI8H/XusMzoqzgAsHcRKtaytojCCrZriW2/ZdKbs7k0DZq+AZZYhH+v3MAAb6G7JJAAWihKHA7wMxvdcfLepqmIJuoTCLzwtOtd73BRMF2BV5BJQL/Vt8C4rjB/RjN81qPcMvp9Bu07i/DFcLwegwvdAFX43KyaLWwXnq+SlZ1pry3ykAgXo3fxzvzrf8MVluW+Co3EDNt+0WK994GK9Co7H9XAFQI6MnkQCLZtPi0KvrIF7ia4mbph0B0BLv1jTUSi2r4YVJv0Rdwaa6ENp9SanLIJfK71OV0PtmwxLT7b53d3uLgMs9p8cMbrogD5gqIqoPxkaif0hdy4SuIy6wF6ekfQCp9MHg4i3/rm+ueXfro5d3NvLu3pR8/Q9pRfdmvmRShQoeZEispfk+CrN9KQKP6pmLr55q8fvU7LNNqokZgNJ9cXKNAjfB4JdNQR5BgLo9MV5iGnUfPwGx0t14GHiKx3nFo9w72cEdqHDhw2ABu0tKLsJ5SEejTQCOEHHRou8fh7fq1BXFQAU2WXnUU8NPKc3Q9zpUp3NXsVsUcteRQjATEp5CmAewAu6V4ryjWtnjbV8AQrcI7iAp3oiCKHPo3XwefSpG/RzcugQldwv6vzsOh67N2+Smu4P6JohO4KT1UjjQV9XK0udGleuM3DFcpinHPpTL+Ger8CqMBYfWWwr27wJ1oT0IYUiY0rkvA2Hx/bP3pgTk+d6ztXXtrdo7jfSgXtFItMYYvZYy2EArFf7w/CCz3A6pAzASodRjrGP219eyTu5ntIfFA8AG9k/+8ZrJM8yXVq8xwx+g2KGppNFVVQzVNvh20FF8EPFgXxWWO0RaOEVl0W0T7hDVT1YaMAfh2gPjudxD16rA3iZVbxQVqe4zxdQVJ/apPo2vzU3MGHiTtm/71/tC8l8T2MKtOri7INjxecReubeI2fSQ1GY3B4Ck2LoI01GuBS9ifpbnwEweOhfdZqfrmjAzaV1ECCMKILByvjYldvpYZ7cOJYV7V7LvK/jnmsAkuiyIpY0D21mOJsDp7j06C+Bbci1K/KJa7PBDdNPf9Z49KxXXngPxj3gycdCf/2t7tk7aHs0YYg5cPkkGxfwY7Fag/ZsL2KrPQOwYqNbWt+1Ze0b6D8P2CXC32Lrwd8JSi8AXCWo6EyxSUkBvgGfrfH5Lp9o/dOuY/YbTlc3TXYhLE0Me2ZS9Z8bMmMYPo24dd++yyxUYNebFkyyyWfAAfvNqgZpjMF1A9uwYLItppAwbCvFYs8DYFTCV5MekMO8lfDx9NxGp0xAIGc7PJXrTQPg4Xwh2n7oNBjlOhPBFTl390C8ddMcRsHQWQCyk3PGvtMDezqAK9Isx6FQrL0FlqD/qGn0B/rkpg/sCCe+0T9zMndkKJChQIYC3UgBeirHJrcPHrT/D4GG62PY77qxtfGt6q2dLugSxaZLRT9Tt0A5+6MACgQM3ASjTczbJ9egeViPFSBsQriWd+FANNa0AcrhZfvJUNef2OZF8IkFNx/6+o2qaAXHkEUfhdUg6RZLYtgkinj10DyWenrLPdQvgyHE+Wsvs//Pd/5cd6wrXvl7S5/0tCMDsPRQK5M3Q4EMBXoNBcjF4kY1coDp6eVXZD02bYTFR/2YVE/knJDz9PTbzcIAvrEkAoSPXJ0tt8J5Ka3hot3wSd7LRltk3ODYlNvpVPS595pjtuRj3+udKspwSh083MeS2Hb61dIzVQinPgTR5H/clAOOTGzbJtv79NtNXfbaHkufe+IezqlZY6yuOxY4fgm3DKse/lQ+XohiA6Y90f541BnbTIlHzZkyMhTIUCBDgS5SwACWRENzwDV3nPVnsOh6iT6Z0gFkkROzGzEKnwdY8bYGR9ZLSip9/wf0scjNigZkEZBQJEl3B62uMvRWKW8j5E9XQ9ZwjyYn6K1dsXHw2Hb2gX2JFmRdOdUq/+/m3JiU2kkk6iHRarAMcSvTAWPwGRw90KTimXx62ijLb1rcAkOm9AJXHPcMwCIVMilDgQwFkpYCufCvg3iAVTfMsn13+UJHKf0zRcuRSdpOo+F0XUB9nrchLow1FeQY5AtLc7UwPLT0ikQ3BFuQsYNM4ErEptzNmI0vbESILNoLx9pg3Md7W9wqynLGzMEjF459YZ/CpRD4Yiigr92RJ0P6xq47tAUxFp9c3yzpoCdIcNUPItg7F2W9dc0M24OIs1jnoMPDNEwZgJWGg57pcoYCqUQBvhkPgD7WinedB26a7bh/yVx7uaZblEqd7KAvZAjUQOz0+LomOYxYg7EmxuojyLoToWgi6WRRB0nTX4KZvd5E4EarwT3gusWqu9W+Tur27Cv3Qp/JGREUtr+n/fe+6MOV0MUi566jxPbSvdW1MwGubs+N2YM8y6YY9/F1jXIGADMefe+ovb3lHOlGzuDNxVkHls5x3LfjiPcYwuP0luZ1ezvSt+fdTupMhRkKZCiQKAoQZH34yizpm2d48/bLs364aGp6KL1zwz4A56HcwKnfFGui6fx/LsmBb6dg2JdLxaz8TRBLC7xY0rFzXlkF9xJ0MxGvxLLoqJRuD2JJtIRkny7tK0ECgxHfCc/33wDnalCM4XnYJjcsW59c3yRbD3tSHlyxvzSguGaGvfrmefYfgGtVOmO0Oe30rkiHUIqd5xkqIfMZFQWKl93BfIwIOhFM7iI8xFQgOGBSA2cY5njj6ueiKieTKXEUmL9kOQs3YYz6Y7+GY1XxY5yqDIqxAd7hpWTVisRVnim5yxQgyIJDWnXUQNM/77oie1RVfeAbO454zOT0pHRC/9bvdEPxvFk+dk12TE44SR/qZPF+Wmf+/pVGOVl1MceFPqRG6oyDyHL9QDAEQnSSGk8ODsui01QCt/+CfpRe56PsC315VUDUGEoEW4XguHwcdGBwacTNC13S/UmgRq7dyjKnpoOV6vOQ/Z093tpy1xWOnyKM1bMkWDrqXbWfKBkOVntqJOh78c3LoUypIMyM4RdQe1uNafc0Jt4LiCj+fEAxLXY6vcq8xdrmnqAWZIrtjALFy+6kckeewah8UzEoa5F/PY43oET9T6ioLuwLBdUFQQDWWVGZ6z1IAS7oDc6AGx7ef4HYey8M75/6Su+EAB5wSp6Ajs/r8BDOjS7WZDYpshg+nr5/Tz49b2sK2QQddK5JXSRe15v2QpS3Fq4JLuUU6S2no/wsc902lyZ67Oh6pHPsCz2758JPE8sh3aiX9c3leZqvq66AK9ZLdxR/WtuI+YjVXz/ZIjW9110j/cYMMqt45v4FB6y/g55dWiq1XzowGQ7WpRSJ8+/5S5eLz6uaTGbDlzEHP4unuO1Rw+952NR/YsuyHMXunnGlGWfaR1vcPIxRk9OlZGfZPo17vocxapODgCEyHJv2wPNzHXfj2pFoy8zk6zkK5GUZ4cTSd/6G2fb7qxv9g/+8rmlBLXSVUnmTY9+gTCy/Wd0oVPq/fGLbFNY9ECxr9jirDIZS97/eapIXS5wycahZpo3Ur9xOERktHc9CDykR9GeZ51qV5xGGRbd141R4Y2ffwOmkaEs+cV12zLEO2xN6/0mvPLqyQcov4QK2z5Mq3wmuGP4GFoNvALD+sKYxUN8nN4xyW6p0Osp+ZDhYURIq5myYfCDyQEWVm9qDq3bljccasYgKpLOvBxclk7qdAjTWdtgtfVHxnQBUHe1M03HtGoPil9nL/r3b25epUD8F+mHBf2Vzy6Gg0rvjuBWm+XgUUzpRZEYv74++2IBYg54u93VgoVEQUFu+e3c+LcIklhAntJ57e1fsTkWj7QTr2HxQfz3s0y0Igs34ht/+cF5cwFXFeZ888lKDpoQfT5FotLToznzk+mVBXw2uPvbBuOS7cB1ygiLWTApSIMPBSvRMwKKnGA15qqgIiNxBUlWOwQCrOSAeU2ZidkChxJ/CazD+5QAAD+yoMoAuelUcaQu4xW/IPDId0ai3naOoEOPGZr192+WOB6vq/b9AgN38rojPelsfO2oPN/SDiLP3yxca5Lv35MmoAbE5BA2VTatChDkBLUNnov9sdMKp6AankHuYSKBBLlZdqwPT6aMsEPnpW0evQ/+griG0TOxqqm7wayGIKB5ku1I9kTFw7Uz7+WVUarcaNvGZ47OXSUEKxGFKZUgZkQKcbNy/+T9CAocrk3qMAqGxibgyGJqOnsMoZgaqx4ZJZ8WtC70KT+9PQnzx6IxRFgYYT/nEWbwdIi+CrPJKRBTuYmJ5sYCPd/e4ZBO4SqGnq4vNiHg769h80CPvwJGp3kTl+Fj6d2k9tU1++d2aRnljhystVgk+S3Dw64S15f8O7Wd6PgOuLp0RGUejH6RIYs50uqx3miEx7cqUehEFIo6CanBYL8qd+dH7KUCQ1ehUPTNHWx4FyHpuBCzHqDOS6omg6L29bvmfZ+rlyJnY3Bh0hUbgGGpOUJtjCCYdS73sr9MFfS9YBJ6ri6MviCgbcx79fRRiwZWwaKQD2O4AlVE2LSHZ+Awh5BA9tT8xebj59y0ZpfYO6ZzhYHVIlszJDAUyFEgVClDp+3xDoBqiru/hbftdOj5MB04Wx690P0DW0/VCpevuSsSvr8E9AfXA4sEZirbdrGvPCY/mGqE7x5eA7pfQe1u9qSUIrlIcXRFcFeVrSu2vwVnrQxABN0A8GO0wpVW+DFXSargznc1QID0p0BehO9a/7zpy02z7d5fOcxxlPLru3IR7iurk7NDJ5cNP18nOY11XfI+mHychlqTloQshcbqTxqyLdb6EuukfqzvS6Wqf/Pz5es0NhR9+XknvVE6kcTZ8gyFI+J7Fc+z3HajwlTMSQCZ1TIEMZTqmS+ZshgIZCqQQBSgqpM+j/GzDhluLHT/A99ru5K70JCm56e867pUfA2RtgF4UgUAiE+tbMMkqEMsK40LyN4Md8+AGHQ/QhWK0cshNYX+oRM+4ipchTmLxRGu36EAdPOWVn6yolze2uzSxM5qQ8omhhWAUULlsruMBu/XNreOHwC8zBziTOqRAxiSqQ7JkTmYokKFAqlGAGwEUcVXoYT0FUeFI6Andt+Wgx5oO+wP7CG6DPPSvevn4tT6Y1WdpMeMSMcZQeIZn9TxpaPYjjI1PE08eRKzEo2d8mn4UdaUY9NgPXSUCJSZtiw63TxOUBbNpYI1gyg4OJDkpdMcxHHp1k4eZZfJwi8CDuGZFyJAtiUoEdBv3uuQxKLTvg+iVtA3X9ES1oSfKJTCeN8HajGfnJ4P7Gl9U1Wsy4KqTgcgArE4IlLmcoUCGAqlDgaDSe8ALi8Jf3XlF9tiaxoaPHjnjg/P+1OljuJ6wj9QX+s0qhsHxAWjlaGFxwuXvynkCnIIco8ziMdYqXp8qjVB4P1dLkBUQitZOw/loHVw4NLYEtDiKzQBeBC8B7OTczBFFAcGnRWxwFZFtM2gcKvpYYqDmwX2MMqjQJP2hC0SgZUGe7kgtboggS5vlr681a7RMh3lDupJTOGGoOYAQVP+AY9Y/uL3ip5g9kyJTIAOwItMnczVDgQwFUowCOfCTBKuv2utm2h6oafQPQTiTq6obUtvTe2gICQicAAkr3nVqsQYZ4HnSsGBInFCeRHwyLE1hDg94Th8WrIEiQx92blrdEYD5CK7wmyCL8QvNcJ9AFwoEaxRNsQzNpUIP7esEp39/vQkAyykEg+kErhgUG2FwXr1iivVHUGpvKgRwzqTOKZABWJ3TKJMjQ4EMBVKMAn2g9F62330Unt6/W1nr/9tT7zSPIXciXcSF5EjQjUMFOEn3XJktN86263bQ2dUpQR04C1CKhbsQvIH31kTwtxke6Qmuth7ytOl89db2xrNd5CTmIA4lnPXupFL7kdO+itGI15hJ0VEgQ6l2dJp043Uy1z5H9rj34eVJyYY4IR8rbj4e/VxI2UNS/UBAUZsUVakNiFpn9PsbXXlF3tzT++Wtt99qV1rPfV2w9DYxqKrRK4YsRTXkIlYPvcjnYvNAMDG6ylS5vjajX/VQSalT0B+f0dBiwNmylc/1XMNba546d6YUDpsm3pYGs6ooeSB9f2x9A7EWF6DNdE2N5vOPguYH6vH1LH6d9fkDtbtrc9xjcp2ya50WzJ3ZeiTNW3oH62Vo3GwcGA4FBk5Gp1EJyOY1K+LWpstRD8o3BkAn+LMdgh8jUXgRFsYCEMeCMaeSSB0c2VaBaMcx8hWKwV/TpFq9g5U6WbuKca17R1qw7HY0NaD4/EayVKgbZQpqRBswZcUZmJrnNmw4LyUbXuxyg1v1sVjOxpvnOx6orPf/au2WlkI+GOmSQF9Y2wVdDGwFgPjYNdkaNytdlP+jGeeziHP43IZmzSoSrj40rhXpli6JnEO4Nzm3FErttsuPblc3j8ajmUYE6OJApz2lpl2/XJZOUOWNI4odC8sYzJ5iLOpzMInGYZMajI0b4Erb1NuTmk5lGpHnFPLuxz2bsAOUBNTAkYAjy2WtKJcN772t5Z+/TIsvOAWExk6morwO0w/sVvXBRqdBNr8c2+Y7D/Vgb0CwHXUw7HbmoJb52GynoA9DUW8hftNLZvvxph1zM/pQic9j2Ix34mIZ0OP7ATFVI758oGzN07jUfWn+ktvRVMUMKDtMUQwL8GMBaDsVbRuKTwgYNIDYvg9onOrFdSfHAn3dgxMbcLwDGHkE9PCWrOocaLWO0Sjcsx73tgow8O3i9BM5c+bbMmiQlKwMP0ZKv7tk4SJU7JVClPcZNHYJ2m7GPDmNAXrGH/CvQt9aSld33q6Lq7/wa96Su/AWbROzoakQiiqcq9fg6nzQYQy+c75aQQssjQgsDvSMNkAII/Birjbhdzl+78Dvd3B9I/KVY730blwZe3tQVkxpLsChVwKYmEYH2jACbZsGOk3GNB0Fpah+KDRL64MgCKSqHgL9/hYIBN5FHwMlXaBf+8aCJvxphguDb/x2deP3EOLElm77R5AEIkP6GuXuK7MYV06yoPOUzolcqxL4EPsHuFY7jga5Vuk4L66YYmv6/NKc+ycMMf8a88GPZy+dp4XuvqctteZhMx+V31eO11Xn4bXkaizud4EYC7DcDsRiri+Al6IQcJ3C/W9jsXoKXIINikVtUluwSAVLShjAmr90OfYgsRqMyky0YTnafyPaMQobh13nbKASSiPu2YPyVoMGL2J3PojC/RvjtJmFa8+8JeD2gNtiMBpn4vn9MMDqTah7JPqg33V6cCwIItaAw/WE6g9sR7+8pavDg6J4AaxZN94iDpsd+iS+EVDQfQhjsRz9ausDFqcGnPuez6X+2mhWAqU6OVnFN90u9btPSf6MIf3A1VsKet6D8uaijrxwtA13Hm1hZNxjONaCTs9izm4F/HaVrgpPp3Bl6T1fDGCFsQXONAzC2FyHsVqK52Y2xh6ctw6DbWtV4IYjuP5Zk6Ksb4ICz/Y4zcsmKFln2ZR8hDj55WMvN/z74dPpofR+6bhR92n0QJM88rlCGQJLwHROZ6GAf+8fa2RvuVfTAUs3WpCTO2mYOfCFJTm/WzDZ9i2PT222mtMbdMcyB9LyKbp8WRCUHG+ouQpPzxcBKK7Cip+DORVbCgKyEbifb+E3K0ZlnfiU36oGXymkHARfcU9zsdm2NLTwhWIS3vb/AxUQXBEcxhrWkO6tuVFfjmMe+vEJsD6eQGF/FZlTPuemYbL5lfiKD4sBcv0tTloLjcXmyT7cjY2WXD5UG+NoBMdiNO7+EmhzG8biHwAPv79h2SfLa9Ra2by66+IltO8Dae7i28RkNkFh1zsewOEX6MeNQI3ADhcSwAHEtMqnjFb1eVyouHCl82/FywBKRHXkzRh2A4DQF3DHwkhgpLMScS+B3wSQejyYXHeDa7gaU+ePc5feuQ0cUF/p6mc6K0L39WJwWa1ZLeJuVvobDAY8hPJxHNNb24LpF7lIiINHk34AsCVWg6I/6FyY4rPt9PTur7tmhu0HUHof+se1jR+qqk9sgOIwTenR0wZMylnwI1VUmFFgLoSO3vghZs0NQ48OSg9UTnA1CHMASu1rAa4ehlJ7c0apPbaBSCuARa6VIytHWpzNw7Gp/z+sJ/+OxZ2iiPglVYW+k3I3NvcrDCbT76El9FuwhjrZOvRVPz/IAcjO6ZN9N+78KgqfSGClr5SIuSleGod+fI8chuKbR/xY9ftexyYPkVt8QFbxUoo0VZsxK+dW0OqbGIfpaFFcX5FQJkWL3wYAnd6oNn7WrJjPROx1jBcJrswAV7CAAlgxPIJ+3RCuKLRpAIR2fXE9KoA1D/p0Ld4GYrUpACVfwX3LUYZujlW49rBgAJsBGOvPAGhdB6OtP6Ajf7zi5n+rcvprZeuaNeFv1XGFLzWwDzN7nParMN7fwK2L0I827p6OoiYCkUM/UuIGsFg3w+e8f8x7fPEcx32VdYG//eutpvG0tkM9aZPY14HYWGm9l+7JAu1J0oKgM50SX3Jy8MJx24KsHTfNsX8HHvFPMX5nJsVGgbhuaLE1oXvumnfzcvFBddblci7Chvt3zKOvYIGPL7hq6wq2WFXTt7ofK/TvcXoKji6DrPmLb5Hi2z6CIpXhEKf9FGX+EvVMijO4ausFyjWh/IVYY/6sGExfwl6cRS5EV9KMBQtlwS0fRhGBvgC5D2BR/x3qoHgzMXNRVVnudSDaDTQBv/JOYtL4pbmLbwe4MreCKyUIriKNNEVzBAdRLNzzyWkVoyXLUvBhzNl/gU6fxhFHcNWeDtqcHY4zD2BX+YNPdU21mXOE4ryupvkA09DtyxXFeC/K+hv6cB2OWMAVm+ID6SJROKbmkhU8faSZosKyZfPsD1wz037emGaMHLpNYMxChptJ90Rwvbc8qHuVLrTgqOM9UW6cZT+zZI7j+1d/q2onwRWfjUyKjQKJ2dRia0vC7iLHB7Ibk9Vv+DDBAoDDIhyJXz6hV4SN5DbU+X/YE6hoHnOiOM1gd6AfnumY8H/AFvNZlA0l4MQn1AMOh/wQm/x3YTmZMx9gNZY0Cxttdp8ibLa+ERCjPYIyvoay82MpS889qIPjMCnLNkY8rvhJbKmkbTUb0Z/ARIzJo3j7u6GzrR9zYb3f7y9HeyJ2gSJBGBo48Ab9FZT9G+QnSE98Aq3wbNyKVfXxQMC/oGT1czJ3KYwPYkiXXbdcLr+FcwWGF0bhC8EP0I+BMRQVvCW40Jf4ff56iH1jLibcjaGNBN7An4O36p/OGWdt6WSYwhWVlOdJ0QZnAEtl57T1Is85WNi54ZE9WRJ1zNg/fnaW+DLmTkOgWTzR1rR8oePHAwsNa977Wf8MuOpsonRyPeUBVvESLPBexWgwmj4GMQg5PqM7oUm8L4PGEFWJAB3FligmMpoRX8vjvQybADk+16PMbh47le3/CtxXfBsrlEMvZ2P6oiugia+IX1VGQEEbnB4oaOsxJqA1nKJ4cNDykQc4QfB5oCMV9S3oDP9EXZoGrsDi8KnqVLQlNCYR70e+7ejzz01mo9PrDG9HMZ/6VirorRi+iT5+H9/7RCz40ov0daAoLhwhWulHlbSkFfld8bLlxdnwljBLA0qXVhT+98zr7hAbRA1+vzIcwJxg+tPolC38HZGu0BgSYy/UE5Pfmq0mX8U56ujHP6EegT8s35Th5t8BZD05drA5EVgu/g2PQ4l06DkRTkcd1s6XlvePeOTrf6qRHz5ZJ6vKnFKOAM9QhI5DK+JbBLlyNY0BKd3vkl+vbJDv/KVWth3ufO44YEXJ0DukSTokvq9Aqd3/4UVZj48bYv4zQDbXkHToekL7mNLC1fmwTnM2NyqOnNzbMVd+jI2qKBpqYmLhvUw9h2V9P+bdUWwMpzHVmluXD/rHgiK2Mh4gBw4epA+uJ+wxnHXTYjzkFmxU3gmo9xH0oTiaPqB9UP2SWrT7MPIfxH0n8VmH33yWrLg2EP2DMjhEjKIMQh/C7/itFaIMO3a6LxsMxvM+8T+KzdcfjRsE3m7PJecqAOVm5WHUvwz1df70XrAI3Ia6dwJhleOmBrQdPyUbf/ui6JFoE/W3ZgA9gRvWOkqstDWBbi6c3lN+ZhsAHj0WdC1dBK5E+TUas6izEtEGzqWvDcjtt/Nk3VnZ+uazHd5SDKvQgE81GUzG/0Sbv47+RMWlRPlOFEjXFFvYV3xWECuAVooaEHJP6cJBoxOuDQDtOuXgol8Ejz9rUQOfMuNZuGn+7fJK6fMdtvvSkzZsUBjvwdAb+xn6cDvK6ny8WQiBs6rW4EsV2k89q0ZoQp2Agvu7qgTWWmyWs64ml1RsWX1plXH7zc21usHfcPU02w9rGvzD/7C26dpKePFOZX0ccuqK8g3yoRk2qLiFJyW5Pwx38/Q7zVoA6d0IIv3mDpemrzR1hFmmjrQITPo1K0Q6qDR2M9HYD4o4OV6Hz3hl93EP3Cx45dhZL7hXmEG47oBTU+pXDUSonXAAis1mcPA1m53ob2p7+SdNGHoISu0vI1D2T+qaVWdBdoRJEH56ZK5cQoGUBViXg+ujGk3iyM2dj2flISzwFHNFTNhMuKCX4uAu8hb8WpUbAoZm1WPGloeNOYBFFrJ5X7YBfo0kx2BQJ2BDuAH33Y45SkXzTjetiA3o4KLF5ECx/n6o47+xeCzsIMvFpyBXwp4KQCUvYGNb6w8E9il+td7kafEGjGa1HLjr5IxJMnfvAaMpYHaoBmUo6HMlyqdyFX0pRXbvQLGkonwT6p+HrCbH6rlLb5VNnVjmUZcI5Vqx2d4LOvFHZ5utH3W8j/b8A3R+BSKhcjXgbhGQfdMrF6wA52mWddj3IGY0iGE+NmQod8HlBnR1UZ82t9GvZvx+Ar9XQTjQdStCENZmMonX7yf4iBZcAaTLV08f6L9eHVclW9ZgaDpIs5bdKn0MOVJtaFwMAlHxv3NwpSj1KOoNHE+rgQB8scm5I7XiGZQjsnNd0CBh7pJbxYdpYVXM2dg9x6LsxaDvHRiLyRiLiMAa3S2GOPd74Fr+V10/Y20Hzf7AKYqQ8ezkYry/jzmIB7HT8UZzlPMoaD3qexmf28E2Oou74KtNRTQVtcUrFo8R41e64qkP1JeIE4x5t6/cW754LpTe6wODnljfNIlBijHHUjKxX1dPt2uWc+E6SPHaMwBWr29vkWNwUBoCJ25wro6d8wHE+OSVLS2Sl2UQBnxGzDoZC6/f/D4AgCYf5xm/Ll6gi8DAg1fhJldAA1Snq/2CuJKyv8IrRxBcuhqcK3rnx5zSxo19pP7+O7tdcgIctxtm2eXOhVmSi3Z1lMYNNsvV0+wamOzoeiqcI21yETrqjgVZ22jgcbLKf2Zov7hvY6lAqpj6kLIAS6D0oag+gCrDA9ioYBEXOWGB34e59iv4PXy2ue5clT2nUMrabeaX3E2RSw24DRvxZl0KUc4/wCn4NJ7iT+Fp7n9J3ph/zlsMR4wuv8lsN30BhdyCzSZyWYqCN38oEYv6B0MgcAgcH3/Z6g9yHJR1a1gOWTmNxUtu2+tradlrzsp+Fu2n7g2U2SPr+4CeA5Dvfre3eZ9RMR5hYeHSPIhobVajuN3+W7G2fQ73Rp5z8DqOsv6IfL9tcjSccLiy1U2vfLAPrK8saNEYKL51WY3qyXlZNbreVBTjeAAucpSos4QtUd4F2V4DDKvfGMFBKMvrLKk2OPeEWBDgahrmy6/Qxmg4V8eANu6tczavKxoDgNDBeITqtUAUd97fOAYitftRdmRuq6L4YJu6AQskFetfNzvMTe5Gj5S9HARVRCuhtGmNBko5eRrnLbt9m198OyyK5Z/Ydu5BP6jLNzKU94OfKF2ELtZLaxqrfz1v6e1qR3MqdB/KF2/AbbAYrJ/GeH8MZXe8e7XegPr5UrMOc+43ODa6XUXNjqyTsmHVqlCRPfKJdqE5BFSPbD5Z+V8PgCPy2zWbnP2i0d/pkQZ3oVIClaFwMgqP9mEtCNnv599rlsfXNWkcovZcLowz6MQ/jCEo4P4FEOvRI9shRmQYHIoc87MUGdTHJINRT38Ea+6TiwMglmAsG5wuWu0xYDMtGDWmF8qieI8xCen00wuoTSBFkAe3ARp4QjxJBI32SwX46ayzCU+7C4CL97E97Y/25GHsw0OnfABZjdrpT16X0yHXjrEPSZMNe1xy8nzqcTC5ILCPCJN0GhaD3/vyYzW7f/PFQtCNg5lJ8aBA5M0uHjX0QBkMU9Ls8RmyLOZPoPprIjdBc6HwKhbT+zzuqm0WSx/ZueGdyLe0Xm31Jh2Yt/TOw3jjfgBvZu9hdv4QK/PMqAqIkGnBslvAcwCfyGS4HNOdm2BETgMeikPYDx6AWOZ5fHe/t6ZjUHJplSWt3BTQrKpRbfljrthLDQBP4B7cin5YLs3f9luVuXBJ8J8+NXAfOFTe0jAe0+EAFQuyfwTadC/6ABFe+IQ8Fbj6PShXP4Xvrt1Pvxo+c7srJS+2bcau2Tfe8j7a/b5iBIMOvK2t5a/7hwwolop169rdEdtXc34+FIA1zlX04AqcK1Oje2VBlkN9rxX8dFT7fHBc/QE38JsVokF1dkd5QucwHxrw/THQ81FzX/8p7zmTvPP0v0KXI36WrdLmRQBA6LhfVf/XrBjXg+P5A2yO16G8jsEQdKcwHv9ZkFPwBvLuDVfBrBvuAncCQXBVYzHa+GWUF5EbijLPoq8/h3Xq4yajocbl9cu2138brvhuP4/2oXnchuQFcDpGVNX7H9y4102v8ymVYKehAQlybMKl/Sc98uwGpwZg2oOrjvKHgA2vEczUNwekDnxkhuVh4nWGYCGgsmKDt+KTv8nZohUbz5PE1OkisCLIInCjQj0PD84RdBEYcni0+rSC8R2fIc4aT4VL7APLWYXAzYum2AS6dh1mJU0Isv7wSqPWhg4zJelJ0mrBJGsjlNofQjDntRlwFf+BTEmABYAgDrMJukXySSyQkfqIV1RZiTeee41W41FDc6GUvBodMGk/FGXwEj5v2XKP3WxZ3eL1QPdFoaPJqzrlOLUv5JLvATRbDUAYaTR+AX2Azlf4hPr2o77/qq11v5mba1HL1nSs3xO+BHCDYC02bc5SMQ417Ap4Al/EqlWB4wtYwcIoJlPso3zUqBigDKO+vWjZp+SdVX++qIp50CdqbvYqWQ4TfEvIrIsuXvIDfTiDU193tTSvMFtsgVK0J5a0Ze1LoduwfAZTxftdB1coKYA4EVPQzmjFgscoFpRm10pftkXduCZ8f2bDQlQBx9WoGiHOVj4CnhHXvg4T6q/GmDwIIP0nZGp5568dixs7vLndSQKtedfe4TcWKqV+l/pZ1PswLt+Do0OQhTZNMiiGu71e9wOwcFQ78odmNmPT8yOGp0H9f5izw9tV94Gv6MchlPltryew0mhUfBtjHO8PFBznE2inON0B/6Th5t9D6X0sOCWfgQgKqoRxrqiHiiNImT7CIkvnOTrk4rBZ5Ai9vqNFTsO7eSz9bg+AQt0kYKLI1dnKlUczLk480Y7G7b5q5/k7xOm6+Mbof/F+cqZeg8hz9CBzh30jECNtGDZn22FPh3mir7H35OS4Tx1hoVL7H8cOMv8VIDaAl5ze08AUaUnKUfTyxcvF6PQBYyl3Yw6NjTRO2FTeAefp64gAcLSxySub34xts2IdZeDguFqgU2wy7MAG+F9YVN6JVHeka7PhWwl6L3AbZFiAPsBiMHxCP0/DVeS38lateKOwwKhuelk/uAqVvnPzannv+WfAOVPO44F7EOd/DZDlCV2/9BObKBTl5TMQq9qhQnrpZQbDkyy7aSTHAjThzzBJaUZZP/Z7/CssFjtiIOoHuWEKjudpGgPo4lwpAFdijwyu2EATJkvA77eB1p8iTcM2WlGasB89pPq8j0EM2kIXCl1JZa8/J36IXAK+wFmAHeq8tYHSD5SrbXjKZbDGzeLXS9Psa8G9AhMAxp7XYk7cdOn19r8xH6CMr37J21D5PECZLyTWbJ+nN32niAtiqcYrp9oeumtR1mt429e4J72pje/wBZ8AADE7SURBVLG0hdyfPOjffOSqLGGfwqXTNT6IyWh7EC5HbOc14IXJwk+CnYsO7Eztf7fPi6xxSwQa7+xyyRn0MVwibUgjijnjTYNwdSbyPPvMuJN3LXKsnjfB+n/1zkBLBlwlhuIpB7BUiKT8dtMwkOtmPA1hn0Us8iewyH8fG8Zhn98tu9Z1fVPfSF0hLxYigwlWXOrXUce+WIbNxD4E/FAHVej+uiBsGRAFop5f+NyuNXXwVbRxVewAsX0dZYhHhyY0QL/sYRDwmfbXLv2OZ/V6UPkD3Kn5NwIkWrBoU/SkhWS59M7W3xwhRZ5EzMC/GEyMz9c10BCmlnicXgxaX9lZQcF5JV9tbmxZ6YsCXLE8gmlwKi/D1xvDlo+1HdcY7PgPqtHsLYkDCIUVKAvNgsXiVzHXvoXyw4uE2TCouBhUuIDo4LEyO/wEanAtobnfyGX2jhLoUw0QeX9zs3+tKbu/lKyOz5ztqK54nqNV1aHT3pPQVbnv1mLH7mxb8m+2BC3XXWaThZPDMKlbCUjODZSfNSAUT5r2hrJIg+OVftly0B2xOaTR9VCKZ/5kTiFQDaX2zTfNctwHHbazBNmZlBgKpBRlJ9x0h5j42qMol2PjCM+9goIwJtpj7oBrgz/gkdI1K+NG3Y2wqPMHfPLVQTmb0YafoC1NegvHJgR2vWEE7r8qkpgRPX0toCp/MVrs/kjK03rrZ366X0A7arAZPozPXWHLgFI/2gG3Cz4DnWOGkgLdioDbm4V74XwzvP4YNva9GItHoDPV3FWOTKjuBH1SSSPi8oq+ngII+ZbH61tpz7ZBVNs5WJwHz/huSF5AI7quiGDpquzE9UehAO8s7WKQ4xnzPiELbl2Ozijwpm94EG3u1NcW+uZB/W+IzetUOpS6YymBCBU0WhSO/igDgiF53Kf6n7djUe9qP8LVk4jzaDss4sxgSO7ctnSu/fvXX2avpN5QsiZyMSbAyu8jV2drln3h+kGdp1KIx+h0M+LkD1dALz/PPrFv7+11Sws+wyXqiX3kqmz4xkLUhvDZwt3eK86z2dRvWzzHXgFP7d979KWmvYPgnoFzO5MSQ4GUAlgFYLt4vQEz5stV2AzCvpZhOm0BOZ+wGiGOCir9xpW6mwBOfnEKIjMVCucia/UUvvDWjyE77lIVcoWGhL1XUWrBUfmt2a9Uu3Ijv32FLaOTC1xIRuVa96Kex7QNNkx+0PtqsO36Y6NuSwAC4PEbwElUyZkJkzSg+1ePUyXISuoE+gBcqV/3eVwrLFCujxY8AIaKxRAowip3bTgCoGwfaPv3yYuK4H4DdO1CmgNXEDlF8GLmU0ajzkdR1JcwRp24g9DYZ2uBjp4Tj1U2rnnqohYsgFEJDTLQxitxRLKi3YVx/iOcfHlaLUAvKqe3/+BGxJCZg/uaVkIf6+H5E6wQbff2Vn+wfWwzOXKfvD5bRnYSZ668yic7j3kwVT5YTqqcYd92oY/Hz0X2xzu8v0k+BZrR+jEZx51DuHCyteH2BY6H+uUbXvvq7dkZcJXgSZxSAIu0UgyaSG1GWLppTkTlHwYlcDJsnjhccAe80CEwNoID9DcszEBb0aWAv0XMPj/HZXYkkIjrr6sB/zt+o192/HNldIXrzEW9smMNAG+qsIKd4W7Hu+1YgKlJFHUxDZw5FQ8udMgUZTJGJPyGq8h+gNDnrA4VgGRFuOJ7/Xn08xTG+etej+sZg8kc0CO+0+gkhqlY/MaF6yj2w2OYC2v2vFMJrk/sdCqG2w/b6Cx4n3fNxvD8CcD5brSbnLnwCUpVwPtvYA58BxCq0qsZ3V6cnbZhis8D6zplPiZLh2sKrhGvrziYrx72J/FmjX6Q4+EH9+dPd16R/Xd8MqpKUiXqMt8y3y5Xwnqus7T1kFvzMZXqAOs83DxsPRRW3bSNTAsgKrz1cofAW0tSJc5RKLX7oNT++zGDzH/DepLx1N4NI9jhYtgN9SamCi7ccLeCt4uwnB9kOQIe76sQrUlJF/0iRerENogd6TUcThJLMbepQBxV4psR4sFQtDYh3A241oJ97jlFMTVbIm+P4YrQcV4Vs9t5Cs1aF+E1ljo3U2hOfeVtd8nIIWPQd/hiVWUijjCm+hBQqeq6QMB9nBmTNWEsThNcgXP1jNFkgQ4Z9PCiTPNvhNsxbQDVmSgjrN4SiitF5IrjMPSJsuQPZmPAZR/QnO+oh45xHwfNr8IRGerAVQYy/ANmZJ/DhrLXB3OyLSs7MqJgMQZENBBEN+g4YYTP4Por4xBLYNNLsYPEjkvv3rO2oNJ70xVTrD+C0vs6egVPFpDFdo6HaPAOONikD6RIqRl+p0r2uTVXCZHypcI1upPYdMANo9/Izxj9dN0OgEUnqsk05sPgPBRzdSXia/60oTngCr0Mp8LY9eY+pBTAauWaDMbbVk4Eom/2K+rJbtnSgYK8hppqtGVjhPZ84BKgByy1tPiFH7jWeoLBgjeRtfT2853r+YQrJJrzG+HM02ej4Zj6Hpbjxg7vCfpPGufxKwb4i0ergHMDDRDVqsPYxg6TIvCMo7xrhJi2JILzzQ7v7SUnAVQqMU73BVy+Z0wmqy5wpXUBDoj8LjfCFmm6Sx32CnX4QcJNZrPB7fdF1kHvsACcZLBzvLBaYDzxMYzh7zF3poXL23aeDl9VeRgvCF9G+45seHGFhNMpI3cDHLGBoEVY56iY0ztR76Gw86Gt4uT4QhHb0bO+UzfNtt932+WO9xkWJhneE+j4c9lcB6zIInmvCY5BBVwYHIRX9FTmXoVmG/sIIwY4LSU/NnKiw9RlcN1Avazenjgn6UEfgLoMDkW/e7bWXxnOc31v70syti+lAJa2wgU9qVs7GgxsVnzp2A5ZhtsFv0OJTltzG8C+6Us2wS7UHZWiFPJhs1Ly0Ze8CO07gAenMhx2iXBfTJe0aLcB9SDadD5cAWj3IJshYNOoCimRGjBj+TEUhsvPsmARt78rXJmwZXfDBfQX9Fe/4/f5nlCsRogF9QNdjDS12+0oKyzHFV1pRrZDasAgW9b+S3fPtDBFIvCnZvgK5uHPAXKGd1YI2lOOvF8LqP6fIG9dZ/EmkR/ZlAH4DMOtJKxSdzfa65oCcESaCol9HjXAJH3uqdixZK7j+wi7cpZOMntz4uJHnStw3qJq5r5yj9TAa7o2vFHdkbyZ2EcGhd4Hh6rRJFoVjizq3ZxLPmkEgZif5QiDc/8/33Tup8uJ4PMaTS8zebpKgZQCWEQyCA9Ddks49ISwHOoJN3asHS893VXadXq/95+vaxgI7alA5pZOb0AGbETYt9VsfA2rIIHrJ2CPFVV50dTZWZ7WNtXiyTwTLi8e2lxwMWhggATogJg16LcjQv5z4KqAu8dlILkS+kZw+x2f2/d3gxh9sTpFxUBDTCp2jGdYIIosTujBV2ogVweZrIMHy8JbPszy+xoNhh+gvQ9EqidUNPq2G3k/73U2/hWvI+5wHvpD+YOf/7+9M4GTqroS932vlq7eWEWQfUdQ2WRHhbiNrG5INJnJmAxuSSbLODr+0cQ1zugYo2PUMYlGx0RRo6BsbhFEZVFAUUEREEGURZam967t/b9TTQvdXa+q6I3q6nN/v+qqfu++u3z3vnfPO/fcc2n0Sq1xXBGDNEUL93mbinbO/rID1S9txv9RL1P8t26mczvPghmn5d459sRAcVr3ZgqHHY45vo3b4/FwY4in9A8+D7LX3+Fjmf5L6voB2/uIB/lkoUNr25wMS/p12gZ5FCNMH0TDevtxrey//+AsvKi0BGk5jVokowSsI7jGhvkj/o/95F7g9SS2X1/NU432P1MsIjCJsXtKGiy5X7lCLKviDlaVBbX2RbKiKAOaqPm4KRFcZa6g0A0U5fbzqdRPCP2qj9sFpIUdQKi53fCUl+1dzA2RitD/eXwIVwm2v3Gr+uHjcDW2nw7iKkzTGyqYai0RW/NUw2g2dx4xcqLBZqo32tD7ue5npOMq7H6brmUtJ5cr1szvtsjjzY+uXJSajyppQ4on85duHZJlaGavCOqbXn3j2+wy4YfUHWEkOqCr77FLzsj986A0NnqXsfUEluWLn71kYSde2z/6AokjedRkSTWf89T1w60hnI4mnyYUhh0RVIVpOgaGHTOktz8084y8h/qc4H2SMvIIT9PCpiPABiqT2wOxgZJPs2TYyYNnfIhPEwbp1LzByxDUUMFxIhGsjm3Zb6IJQqwGlfkkrkPiszVLChPEzppH0/x/hIS32I/weeP3hOsyLehSPdcn36ETKWOSfThbBXLwDF8xDE8Z2FvFHH8mXgrB1DkPX9ny6Aq/x7dy6NQvzMqXUzdElwc3BZQ83OoRRgQrTdvRyKVRUj3sZyuIAyXREvZ1+08MiRd1QYhJVwPoSHLZIVZt8X0lmyiLt5WWEqSuX+0Lm+UbmOhIIaSi6UohmQaPIn2vOy4lZp6e++KIfv7fFZXKS1oLasgGJ1r3BDNRwHLvSewpCirxNt1kQW5aOncueSa0UK4qUuy7Ul3hPqiyP2o2biBCTbt3lAd5yNXGBqBHCEvuRf8WvIPvJQeH8UkWsn0bP21+WOd6PPY1FCdbjMfrFaRv2Aj8CezzICldIqX7dOz5M0zUG7ZKwqGz6HOPIr6eLS+uCctI3kR4nAWK13ht34bi0mL2pUx9JWTCtKufFAVWxoa2GBJv3xPZOWlEzuyLxuWubZWdfr6S5Abdujsc2zA5UUOwqbV5eU1ZbDPkRPEy8ZxsAP3y6rKkWqxS9tDYshP3dGnWp6U8sgCDDZyXYxd4456CyDf5OYkfAZnYjulSp5Qe3OlS2GTliOmI0FDRneKqdjjuR5BvL8L8lUZmTpogkBnv9+LtPL5laeWbRVA0Us7huX82NZTpTLdgdQwFWQ/UgEoxt5xix7lpEYRyuXndfVoZI699karnDaOptIHrtChpYXcUs5dLmHXanWTxAcLLjWx2+XOUAdmiMapzkLa3TBnpJTJMwkbLap3Mj3bMmD3Cyvuo73sIMn9EuBqWQrmKiXsvt8u/08A73pr3tFnzykspXFanKFQ2cwNtiNbAY65+YN9HbKfza1ZsfS1uEKruh3SouXS397dUmE+/dDesCnMHv7Sy1KzfJn780qHUTVsGqfMn8Jn7TklCW6x1n1eYddioVT6+m7aMbrlJXxOj9qmjcrZh1P6r+atKPxN7O+mbGo4NgYwSsORdn0faflDGFU7ogAEG9l7GCZqPpq1sdOLj2evtkA1Wf/KOawNDkXFPZB0Isk2Dv+JbJddBnsy4MYgfuF96Icvkop2IH6GBj8oNii1Pd8rqKmAxoFNmh+nXSkUFJQtyTNrCJSB02lZXkm52gXrl89SazSbNP6fwddZkYeRP/4iWkd7XbhBgj7tl0yMRJ9miCI/wubZt/YyWuo/06B+JA+nu4aKb8JJ5RzRqHUi2UjBxanpWCMh98ugv2xv8Yi2++LSc3zBlWJRO3Vv60O4DUfPI4iKzdReqmhqhtCJqnnurxPx1SYnYldU423L+FZ9YzyyDwxvF5mBJ9Xd1mX5bvy1o/gBDWXWY6L5samIymLMheQGOUG9tl28vmT5Gjdqbug1q5pdZApbUDseP/I2/wo7BnxtiaDTizTbIAo0d5Na0olHxcD0awcPtWYuWx9ptcG+9/M2nuEJWlkUPcs0ut/JRjQGc79YUN/eYyexZV/kmPoIBua1bmajfThNhp2sR+qip33hF2NrmFp/yt+HcEDbbNqPOm+oWLX2PI2RRh9kehCyqmz22DposlimY3CyrHE6fuFUUYUmmZYftxIf6qCkzakUbM/0Stqmx2hvLczPkbyX+cbUi1ThAubfQTD9HvnsIoazeexvWSL5F/wtbgxYo2r+L73FsYP50Ug+/+N9NmyDPjFXYV/3q/w6Yp5YUm7WbK2Jb4by8utTc9tcC89CCIoMzjbQSHJoanjAqKkMN/HJxjNPfEDrFJu2tj8vNI4sKOVZg1mEM3xTP31TrzphghvTxB7EB/D3uQ2IDifRFDceWQIKVase2YHXJXbRFhB10rG/4jrv0nRgjjMfuxfkNErnRQ6VH9lFu+VBknHdGt1adj836RdFe2WYzx06rOl7t2zKd0FScbvusj0dPmmFWLY7nXbvaFXX+R7aYi4Qi+WwKfC6Dd9z13fCOUI9Ndk5WNLLfg53Hu6Zv/5Eia62nnKKhqWW7xTHxI31WNFjxpMeTVVrnAh7DC6lDTMiSxxi/70fIKjuaDas/+3qAGdR9owik75MG+9rF3xOQ5+SETsd5jyfe7qrqjpl6IVM4WUzEhnsiJN1Gv/4uhfBXnXf9tqy1tMt1waLyJd4cv7NiUeP1HdcyZPgJnxej9+JI6ZiBWXfvLYr05vf54sAynabc1m8Pmc++CpkcvNJLucrZ1Fk2O5a+rONyJQNh8tb6iphwFfCjI+YmK8P2SoaZdGIk5eqJfzME+rnD+/rvKy5zKvLZTF3DsSeQWa1AR+Mu2MNDIpHw1IPzk2WbnDFxNAIN1SSj0GiUB8MyAX4Jt2QXt3S5Ub9AqGKj4MoYYWQYBCeZXvsAwaW6froqEdk/jh0bwsFIe6sRReRRky/i4YszTMsaT9byiRsoehF2+RsMsw6rlj5j9nyylYE/tkjwYx5G7po4hERje4bJE/7H066Km3a6HxQhizaeTVvFpguPRpNV8P4dIphRxeg6/n7hVlfODYXRmR6c446cdpEZNeUi0641vmit8FCmWf9AEv+YVLiigSjj38lvVl5O3ht2rs+pn4sJt9LqcSEg3rO/2hvedR6GxhePz13dmgEv1tRpgkeEKlmEXFgaNQVMg4kwIcfSSXA41qjAEWMinBBaTGm53KvpxUj6VDuM2tl8/G2M2m9igcI+Fa5izZQWfzJLwGJQ9wQCpQwib/OkcBNORAvz/bFTZ/RhBVejhAlTp7M8zjYBn3c4GaBZiL0Yxs2L+2N1JBzZXznQsh/WwmeREWMbJYuRmGji3MI4tErT/OEcM+b8ehhau6XOcbx/iy8lpgWtqymf6/QgD6Kt4pW9mjNMKsY123hgr3bPwumEgPAvRMz5wJEdhZpnoJ6VQpZt/4ymDozF9i7lwBMSW6yvYLjU9Rr4cH4WjE/wotost8usA0XFZ9IuslLwHEjLWOAe8GFGhKfJ6Qo7y36/qLCQftYoKwXdy9DCziDMmi5sR/Pb54vWi8Exhu9f+dPM6F2aRASq2KeFtc/RVreK09Fe15jxRbgSzRrb9mydPCL7ptfXlm3u0DruJENjFkPTTkCgkUSMBDk24ilxjMiUkyiDlpLN165ZOWYwryZXY+CbJauvGjoELfEdGW2D8PBv/Ojllj4P4RIK+4Y32xM5+HXet9EYNNEAoREyZs23B2v+qBx0fxHylg7yovXqdeZZNWPU639ZHRcMhvAFav8jw/c/JEoM3ssiJrzbOXJVox0FsU+mB1/mCR530YGkybVYaNsXL1/wNzNqcuMIionK3lDnYkKWMf+PNr0KOd8vmyunEnbtyoOTl/XeZh6cXBcFwOkMxPQrWB+bnWtyL2Vc/CN9SwT4xMHC/5QxD9LX2SrH3rruo0/NisVHv61P4kz0bDwCImT9x8xWeE63X714fM7tp52UVUi7aVACDULAZvSeODhw4HyM2tvk2cvOHp7NI0R7WIPAbaBEMkrAEiaVwkl0A91sCe9mLphiLtD/BeHhski5YzfkVOG4qRcZKxz0IlxdwaB4gUsBYoc5/yEFXhFlau2T9584HJX/Lb8l3t/ncsO4CyeOM4Tzt2BT27FTrquC6XC6Kf4afs50k9+azUyzfBMhKEJiwPXSmIsBZ4HXzoqsNIe1IitemoteBSWiZdEOBkMjl+A4rWimGxF0x/uyAmb0lAtdIh7zwyKoJHTTSHu1Js7Ntse6Gstm/+ipyYX3re89IUKmdFXRWL4hP+MGbNaIdw3S2MO0+e/Iq3fceEcelLZxzO2svP8V7fDN8peeNSUbPzwyhv5uZAKxAQ8Hx307+57AAPkRtqoJp5PReyNXX5NvJAKivRrWx1+B3dX97C/5NNmop/ZGYl2fZDNOwAozDHk8Hpkt/yvCvPu8E1NenL/NG7AuMqEyz9jJ9R/Yxf4mFImwI18WGgbruiSCCWKU82xbX4dd6KuqteEKMVoPywyns4g/CabYYpddyEP8NlaEHT/ugsvMKUNOqZbW0f4zAvuevJxsU1xYNpRR/y4G8p5J0ljKgLGKeMbMrx5TzLAqymIrCZG8XKZs5RLHkVWR9+F9fMyWgx3N+OnJBZPqOTXJf3Np03mUs3pj1co61q9uYSuNq+GCkJVck1Wal4Wv/6jsY/dYIi0WnDoB659h3bFWtjUOUM4vOXQttnC/w/qneOX81D2z10hK/60nAV62ZLl/+agBWfewnc78bh3S19N7PauqlzcBARHQe7HRONvgPD+0j/+B4nInyP3eBDlrFkdLIOMErNXzXjBMh7BVSHQZ/fClREAYqHB1YN1nZWXPcmw7Zwz+hOoaxKs3Po38Xq/vn0jjv0i7Q6K0uB1WM1Q/XxD+xqycX3vKhtVh7FJ33NfU4VEG3fhuJ8iAfMTM/UeWx/ofJxLq7xlyrhnHXnR1CSOnzzS3ezbjwCoyEi4PkjhLAROEyimtR73stRgK1FZyrVr4nMkKIFg5Zg73v7sWS7JwnBEIMH/q327fBdh9+evTFglKXJ9T2ynktSQgWkWRfl0DbdIWjdQtXpmGZmVfMiFr3VN/MYjlsiJwKYnOdU04xROUbz1RrwmWlol6LMUNm1NMXKPViUBrjN7Z427PeacGZs8Yn7tKjODlnUSDEjgaAtJn2ufHjNqXnTMs8Ou9hdH9+ewaoCE9CTTiGrRjV+F9LF/vYKE7cZwHGWxO57uvW2k41wUB5r9ZKTcYu6f7R50zfZPHz/L1hWiRUgjjWIkYORHT400htAueq9HU/Ctptkt4KRsdE+eBSMB86SuN/+axYsGLZmxMk2O9QIxJ3Feuah3Soh2tmdS1Z07B9v90bM8rOJ8sXxFHcHMr17hpaFqiTvbt9oCp5Pdrnv4nu8U9dFyGhznsivj3CNLTmuf+Ejc62ybiEbl4Y5av9Z/hfCfpuvY56nESdfiDbXvEvugPo8+/ZJvsHi0rPlMJY7DhQpPnwbVWLwTmXlxThhC7KWjbezwkvoopsnoEkohso41/QRnL+XyXJN0tSmOLAiyELLbCiYb/iHYznMiFgwjZ46ZfUkYffBCNxwTSdu2ziepAud7hIXztxvllq/qfFzAr47hhGMfLAMb4uHRwumBkJyrPLmBmoYJZhoKudOX81Pp+onLoueoEaBe6tGMee6X402ljcn61uyDy6PPvlHaT/ey43zQogaQERLiKGbWPydkyaWTOje9sqNiCM9uk12mEY0fAfYA4dmWqd877P/vIdB0w0DiR4C7L9kYY2CeSaKINb+ml1qkMbBNtn5ctaMyuE/oNKO42YJDz1WfxfUCOnXSh6d6rr+V4vR2s/dHplmXfyaOSbUqcvIQVkI11mQqKRiMP2BErtALjbrfQq19fnEj6yhEStvGA/g7xEglu8pzGM7p1Dp8uaIO+6dpn4P5hI4eEA8f3Nbu3flormwnTWO140gQzoH9PrCPNcOpwA5FuoA49akWucYA83iPe9XzvWbmgtgauKvoO+PU8cRhRzefEHcbxPlXnXL7Zt9EaS9zTEa7k1Wx31xNPLJG22LGxdluMmnSBOb5Ld9PrlKG5tN9wy2P/hGtvYTybxbWX8v0dEjnohIOfdRtwkiPlqRm6DjhJDrUF4OV8ix1VvPC22b3rdZOXX8hs50oMxk8gH7kw0etjNnFGUa59zPl+SP7RePlXZda5/0ATjIZ2e2zmuZP32arLqr5lw+Z5gP4JiwY+Or6fZVYsOtwu46ZcbHr0OcnqPHBgB9I+mzKJoDibi3/EZzqfacxktUPyeg/WZTs+kzUWqYXuJ55Mts6psJ7CFbV4kA92hJZ09E1fbhTlWssMt956q3nxyTtNbsDa2qmtt2jvwcgEPKrXVv22TDxa6yQExKj9nGHZ+783Me+GTm09C7t3YKjiptOQvgQyunVkuTwagXwG3XtoglmMArUe/jWbpnIwMBt4WXgdOG870ahMbcnqrkOue/FBZfBCblm9SU+m0s4m7qn8zq2ZVrz/if8qKwyv5Hvb8pfchauqa8WuK1pRYdnZ2T/k2L3k4yYAVF3Ct/g8wreWMW8y8Inh9Ed8dnKtGGpTXMQpy+QwinemHIP5/0zqegZCUGdOJ+0TXLOdRK4MGN8rxWw3+N5Lhwdy0qoVhn/nUpPbPmjCFTYr4SymrZLadcXSIJ8KfohE9Bb5reX7C67dy3cZ5ZRB20dtRAM5lPqeyfEx1Pd4vqu1c6y8jnMZh5f7PCVm2byFRDkcxoj2zpje6BiW8N398Jlqv+4yO3feYDqfADqZ3gnDznM35bqUfxK+qJD/N5T3Bqci/ITl9USWL3TnFdtTEMN/j23fS9o/Iu2k7XGolPAwz8BhMZfsoOMX0JRBioqmypKFBLIf5gDiTOIzHE55h6779oty4mrSXL9t8HP39/hohlnxYvL+KRefdsGlJhKJ0KfNg6RbS0NJukWU4VKiLhJD+5YeYCQIslZvqrjlwflF17KnnQ92GpSAKwHpMiP7Z5X/eGr+b4b09t9FxBD3lWt8PZEeBGo9DNOjWA1TCtlfjWk2VuNFf2NbdlcEiskMdAkT5+HHgIRjR2MNYVC6hsF7Hx2ZfdsO2UHhlZw4Heja7UiJDZCTC21VGZLOu5Tlesvj2SbuJFIJMq00etrFzMRFnsJ4vwfluJ5BN8lbLw4THNOV9L9Pnpfwm613jNThIB/ZAl4EAjxVxoSR1nz7E1M5XFLS203cm8LR8GtlmCK9l8I05Nolc8xoVleGw+Vv+/3Zd5DGPXBrczjV+L+II/pv2sIgQMUGfxEQEa5oC6bpaEqsw5121C2fuK59mfqL0HSO15u1HNcT/KxPwGA59Kxp5Zv5ddSJXEe/EsH7++TvqiHlXAfKf4eVhTay3J4zbsrM6HL8ncULMj03ZuqMQuwIb0fLdAJx6LMpBem32P9ZM/kupUzsRBvbk1OOswWskT7DXpzu/ZVzbIZund993cVPcJ8UEF9DIxCAMUbvkYoR/bLunXlGtO+B4uiMbXuwudTxshFoN/8kxai9zwlehwUSzyFcPVhS7oTy1O6qWTRstTf9ZlHioyyk45TzEu/bjmBzHRqKZalfLkJKTCvVne8RaLJOj334TRo9OJbPd+r8LGs51t4/be0JrKuIhLGNeTHloqxCiLFlZaTj3MtFDzF4piadEZlrGGCdDnyfxGccdUBT5YyX/zndQYSrVAvCwIDRvfMf5ZHyp/gdjWec75bWqgUvGL8vAALnL+R9J3UodIsb7zjXiHMxEcoQOnBR4DiD+JbpxraccxWuKtOKiY/5odJdzJ6l3mTxyiHH1i8Wu7BnqYLZyXKK6zj0ODwSSm6UUYSlu52s6KTsPMeMPC+mNZPkaoWwOMz12Nu45t8Qkl5FaKoVx+0A1yCUxpzCdiRONz58O+04nsMnaeURRk9gXpq4qefpVhY97k6gFZ7d9xREvxFP7zNOy1nRFm/csNegBKoRkD5xXCtbtsF58+yhgZv3FUYPqHBVDVFa/5P0gZvWpU+hcCvnL2AvPYSsLP8GVnT9mIFwkQgHKVzaMFFk4LWsF3l6Xum1/O8dCJeZNfNfOOq0V2LozZB3kEHyNr7vJc3io06kHhfAbD33+k8qguV/8Rtf5N061EE0ijwwKtDOPMCP2xAc9tejSEd7abE3j9lVsYCrWxCBu9qVK2JTo9Zejs/mxOO0STIhi+lM84viYqcthviuYTUOc8MVFSJUb2ThATZlRqQ5mQJs/GDhoBdD96OQ6Rq/TBmYA/eTOCA181aUfjZpRM5NU0Zlb8tCz1i9h2VgxbVKKROQx012lmWmj8nZhFH77Pc+C25tj7ClofkQaBGtterleSZcHjIer1eEhKv5PNIUAgoP0X10hXvQhV1lPP714chBI5qcugYRUDD8PogW6g4exTeQ/va6ppXydWjLyOdFhIgfWMUV87K8gciqemyzsrLSqL88Eok+QBn+lbRrW9+nXLjUIpLHLoS5peILYc+XYsJVt9A6jly+Ajs62ndvxImkKGQZVkrK9G3ioXTVyy+a/Qf2GJ/Xt5n2/gklvrOyHnUreypXkf5BivVk57bdCmoKk6lcr3GOjgC8zYXjcgyD5pILx+XeNuGUQEGLeCAfHaYWG5udysyZQwP7po/NuTk/21oxsr+fYavOL4gtluOxrHiLuZ9XMbC/M+8ZxjXnSwzfmS40P6OzrmPgxR1mwwbSxf7FWsoQ+sNI2LkVTwW7V8x7yqxcUN24ui65ypYyWKiXYpT1v1z/T+S1gA92SQ0cKjcH3sSAO5s3qVloU9aGAz6TaNVjqiVYhZG31/IE7XLradIWO7GnG0vgJe0DCAv30ObvRHDeuuXDpbWKGdMbYLVOX0ikJSoJdutswpHaD7iVaLLIZy82WbM5+2d+J9JkSQpxUqlVLPPpm0swyJ8jLppJ22GVqvk+Gc3lg9F4AwZZ2WrZH9PWOCaNztl5YAcvAu6G+DVzZo9E0JkSjrvdS5iROClPa9dMP5P/p69I9Zzenbx/xdP774f08QdrKEozufpaNxcC0gew0SufeVrub3t08D4n0Q71FZcr9HA6EmgxAlYV/JgWyDglTjj0OAPKDJ5vv6HnfsIn0aBYdXnibwQdboJ3ifTvCHLf+6igYD4qpwoR7hoyxIQsjzcSDXuXMfpezs34U/J9i48McvUKpIFbK2sLifyWe/ziSFnkvmg4uleE03ePWPZfr0y4eDlOSPfZ+xy8YqyNmMhVDDOzyPfVSuEhNujUKwvSKuXzJm18FcLJ7xEAXF1iVDqmjewjzgfxMiWdgxxfHYx6zI6t8TVgImTZxkYQioom62HqUR4/LbOG9voy3jm3YzG/VCFPyJNf+AYOdC8n3j+T/guUay/fNFPdAteLC5PN0L6LVYczQqHgYxjWlx+1EE2FKMVGShEfjuwLGo1uRXirW0Ez/CrawRSVORXD+/rvw9Zmbo+OXmaGM7zSWj1XAtL2bK0kRu1zTunlf6i0wglLH9HQ/Ai06FYbNWlmpWNKv9PbtpxzeUc4l749FCgd+A4gJCXmI1oeWbFVubH0u1yzmIFkaThU9rXtzXJWLay3U+6kPUo2ZQ47UbYu9MhKtdMREmQZ/hg+3fjkob1JIkSjD7PwtVA5OH7M92tsKLyYvfQ2kV5oJYJQY4fRUy9guVs5wHPaWbZnHPnJyrnxfHrwkRWCqdRBBGTR7Ijw8h5j/it8lvlLgnvCAa9ZnmCD48FnzjRtWRPKws4zqPPDaFsG0fYkE3trFO3gn1jFOZtzxYl8fkl82eSZ8ra2betauIrTWTHMl4RoGvMFAt+Vjsf7mh0qMe8sTLjRQOyymn9G0t7vzv+xGTP9oTxWMA7n/CTSnch3Pz5tyE9WiLoG6oCmLuZ2ZD3fi1l1sIAFIJsoYFgWU9QljMXZLg5e/bbPuoXrf0kZDq9yFVtBx9zM1gr3s8IgctTCW10K1Eyv2VMQNh1ae/o9taT4sUdfKT6N1YXSbTS0IAIiXB3f2jazzsv/+yWn587aXxT9on2rhLd0C6LT/Kqqty9tdurUC02It+tsr5e1PHYP3sYHMsj25+nWnWGxLVHyGB0rzZIdE+Y3g4azj4FjK9r9jcTdQJwd7+9tV35yuwKzugmEkppd7ZQLppgupW1Mgb+UpfaeTgykJ1IuvK3i38m22xM/nzIHYk9slr5RhxL+F6P5HcTdSLz1aF+2OpGKIsvyOisXzauZRZP8L1vkUG4f7dBR6kCmg5B1+vJbVsUhrFT5G4tNiyJQOfupw1e001bqtBlh4XO22tnbM7d/cP3B98yGV95Iqdwjp8w0obBtZfsjw1DHTKMQsupPpnrfZVEf07CmYOWC1IRN3CxwqRNgd4BJXM8/lvDfQTmfioYjS/HLFj1ki5ZS2dwiycbiqDo8jtdux4JWYXUKnxNh1ZW25ZjJ5SP3eAnl2Mc06Q7Yruf8OifibPREQwVRy+OsWFR3u0DSjgXxOcfg0MZjW98lr7PIX/y1sQDALEJzJdOapQ1R50PZZeQX/cO8trZMpoYmPP568Z+fe6ukVzmeyVTIysjmrlUpeafLwaj9som5n/7wnPzLN38dWjW4t9pd1QLVjA6ogBWnsU6dOs1EPSHjDeYiVFk+28YNQEwBQWRGKH6GuRmChcXZkUBWyLz/2pw4qRzbQz2mTDHbKjab0YGTZf23j/JLXapehagFlmFMmxVHo2G/ZTvv18NwvbFqevqEWab3m98zn05+2IOyEMHR8fEMYssaaQ2mMqNOyLEioVKfJ+ylRd6vxwKCqjqMQMCLopgMhFG3QK7IE4p6afEPX0rdrYakNW76+Shs0A+F/eJ7ysf8YUXb0J5gsaeNWbZwQVV2DfYt7f1Fz7vNyO2/9lBecdXgB1LspYDGDnOjB0NOtGL1wrmRrhMmmh1vLm2wvKsSGjkNjTCqOzscCoDO58GmzR8Nl0cs2yxjZaSG5AREyCJYW3eHf/DHxUW/e3VtWdvKQ8mv1RjNm4B4kJk8MmfvrH/I+2m3Dl4MhukIKl0360ZVAatZN58WXgkogUwjcEjI8n+wJTj7wQWFN6zZFMzScTbTWrl6fUSIHjMwqwxP7bec3MN/L2fV7qo6omb5XxLblmZZJy20ElACSqDZEhCtRXGZExzax/8/GL0/36uTGr0328ZMoeBid9Wvi8+hrZ9CuPrfMnYVU81VCuCaQRQVsJpBI2kRlYASaFkE8vH0vrcwsv+c4dm/xth5Wft8melvWQxaQm1FuOqIw9mZp+e8PnFw4DaM2gvFDktDZhBQASsz2lFroQSUQIYROI7VY8s/CW7BLudGvHlvCWBVp0JW5jSytGVewDIXjM3dMHlUzuxPtoe2t0OQ1pA5BLQ1M6cttSZKQAlkEAGZJho30G9a5VhvI2DdcuaQwP4G2Eozgwg136qIMtLLkqOzh2V/M3V0zs05WXNWD+zOWiQ1tmu+jRqn5CpgxYGih5SAElAC6UCgasDt2dH7DJ7e/3v8oEC9nQmnQ71aehlkEvC0kwJFl5yec2fX4zxzHecyFa4ysFOogJWBjapVUgJKIHMIiJAVDJvQ4F7+318zNf/h8YOyYltj6XRh82tjaTMb6QptZPGPzs27e1B3/yOsGpXdM5pfZbTESQloqyZFpBGUgBJQAseeQBlOR9kOtNW6z4M/n/NmyS/f+ri8bUmFExuwj33ptATJCMhOUfk5lpk4OHsfzkT/a2A330NcI1t6JbtUzzdTAtqyzbThtNhKQAm0PAKHfGQFcER60etry65//YPyUz7fGbLZxxzvu+KYsuUxSecai8ZK7K3wumv6dfZFWBW6Bu3VXd2P94q34aAKV+ncevUvm96O9WeoKSgBJaAEmoxAlbf38pDTD23W5cs3VFyydnNFzy+/iXiLyqJsh0pR9MneZO0RNyOkKg9CVSvcbXTv4A2O6Of/fOzArKdP7ul/MsvHtl7SRCoNx0WXSQf1Nsyk1tS6KAEl0GIIHBK0vOxX2GfLzvB5n+4ITfxid2jI7gPR/H2FkVYIYN5IhE2ajgxJnvhJTh+ZUuP8PlwAUfzUCodP1zrVJAeS5Y9QFcWdRogNmgs7tvEU9u7kXdO/q29pr47eVxGstlFItbdqkpZKj0yS9Zf0KKWWQgkoASWgBOISOCRoyTnZ3LvDvqJoj937Iz0wjG/FOdmH9HCIK7YcPl3vX7jqqncazKodWeQj0+OEe/ruZ75Nwi3dqghJknAtl1wv12LAHszOsg52auvZhvZqB4f28oktSlCNFSQ0KAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJdA8Cfx/xbczhxxUu28AAAAASUVORK5CYII=" /> </h3>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Prerequisites:</h3>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
You should have a good understanding of Linux and some basic concepts such as Version Control (preferably using Git). If you need a refresher, check out these 2 free resources:</div>
<ol style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Optional:<span class="Apple-converted-space"> </span><a href="https://www.katacoda.com/courses/git" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Learn Git Version Control</a><span class="Apple-converted-space"> </span>on Katakoda if you've never used Version Control.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Optional:<span class="Apple-converted-space"> </span><a href="https://www.edx.org/course/introduction-linux-linuxfoundationx-lfs101x-1" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Take up Introduction to Linux</a><span class="Apple-converted-space"> </span>by The Linux Foundation on edX.</li>
</ol>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Get started learning containers with Docker</h3>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Find out what containers are, how they differ from Virtual Machines and what are the benefits of using containers. Install Docker CE on your machine, search for and run container from the Docker Hub, build your first Docker container from a Dockerfile and publish it to a Docker Registry.</div>
<ol style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Learn<span class="Apple-converted-space"> </span><a href="https://www.katacoda.com/courses/docker" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Docker & Containers using Interactive Browser-Based Scenarios<span class="Apple-converted-space"> </span></a>on Katakoda.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Test your knowledge and collect the<span class="Apple-converted-space"> </span><a href="https://developer.ibm.com/courses/all/docker-essentials-extend-your-apps-with-containers/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Docker essentials: Extend your apps with containers</a><span class="Apple-converted-space"> </span>badge on developerWorks.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Optional:<span class="Apple-converted-space"> </span><a href="https://github.com/crivetimihai/docker-data-science" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Try my interactive Docker for Data Science</a><span class="Apple-converted-space"> </span>course.</li>
</ol>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Learn container orchestration with Kubernetes</h3>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Kubernetes is a platform for managing containerized workloads and services. Learn about the key Kubernetes components and architecture:</div>
<ol style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Join<span class="Apple-converted-space"> </span><a href="https://www.edx.org/course/introduction-to-kubernetes" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Introduction to Kubernetes</a><span class="Apple-converted-space"> </span>by The Linux Foundation on edX.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Collect the<span class="Apple-converted-space"> </span><a href="https://cognitiveclass.ai/courses/kubernetes-course/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Container & Kubernetes Essentials with IBM Cloud</a><span class="Apple-converted-space"> </span>badge.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Complete<span class="Apple-converted-space"> </span><a href="https://www.katacoda.com/courses/kubernetes" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Kubernetes Introduction</a><span class="Apple-converted-space"> </span>on Katakoda.</li>
</ol>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Cloud Native, Microservices, 12-factor and Istio</h3>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Learn about essential cloud-native technologies, the twelve-factor app methodology, microservices, and Istio : an intelligent service mesh for microservices. Istio helps you to connect, secure, control, and observe services.</div>
<div class="slate-resizable-image-embed slate-image-embed__resize-left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.74902); float: left; font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 32px 0px 0px; max-width: 432px; orphans: auto; outline: 0px; padding: 0px; position: relative; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<img data-li-src="https://media.licdn.com/dms/image/C4E12AQG1uZ8pTrkTFw/article-inline_image-shrink_1000_1488/0?e=1539820800&v=beta&t=iep6ECA5J9xLQk0L0trR1Jlai_-YmRfPI6q00v1qnjk" data-media-urn="urn:li:digitalmediaAsset:C4E12AQG1uZ8pTrkTFw" src="https://media.licdn.com/dms/image/C4E12AQG1uZ8pTrkTFw/article-inline_image-shrink_1000_1488/0?e=1539820800&v=beta&t=iep6ECA5J9xLQk0L0trR1Jlai_-YmRfPI6q00v1qnjk" style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; height: auto; margin: 0px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline;" /></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<br style="box-sizing: inherit;" /></div>
<ol style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://cognitiveclass.ai/courses/get-started-with-microservices-istio-and-ibm-cloud-container-service/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Getting started with Microservices with Istio and IBM Cloud Kubernetes Service</a><span class="Apple-converted-space"> </span>badge.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Complete<span class="Apple-converted-space"> </span><a href="https://cognitiveclass.ai/courses/beyond-the-basics-istio-and-ibm-cloud-kubernetes-service/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Beyond the Basics: Istio and IBM Cloud Kubernetes Service</a><span class="Apple-converted-space"> </span>badge and also collect the badge for completing the<span class="Apple-converted-space"> </span><a href="https://cognitiveclass.ai/learn/containers-k8s-and-istio-on-ibm-cloud/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Containers, microservices, Kubernetes, and Istio on the Cloud</a>Learning Path.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Complete the<span class="Apple-converted-space"> </span><a href="https://www.katacoda.com/courses/istio" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Istio<span class="Apple-converted-space"> </span></a>course on Katakoda - use the Istio service mesh to connect, manage, and secure microservices.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Optional: Pursue the<span class="Apple-converted-space"> </span><a href="https://www.youracclaim.com/badges/c8e27e68-40c0-493c-a876-2419caefae43" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">IBM Cloud Garage Method Explorer</a><span class="Apple-converted-space"> </span>and<span class="Apple-converted-space"> </span><a href="https://www.youracclaim.com/badges/1c871d65-34ff-4365-b14a-84d920a36ba7" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">IBM Cloud Garage Method Advocate</a><span class="Apple-converted-space"> </span>badges and learn about key practices such as IBM Design Thinking, Agile, DevOps used in developing and managing Cloud Native applications.</li>
</ol>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Advanced Courses & Next Steps:</h3>
<ol style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Complete<span class="Apple-converted-space"> </span><a href="https://www.katacoda.com/courses/debugging-troubleshooting" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Debugging and Troubleshooting Containers</a><span class="Apple-converted-space"> </span>on Katakoda.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.katacoda.com/courses/docker-production" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Learn Docker in Production</a><span class="Apple-converted-space"> </span>on Katakoda.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.katacoda.com/courses/docker-security" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Learn Docker Security</a><span class="Apple-converted-space"> </span>on Katakoda.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.katacoda.com/courses/docker-orchestration" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Learn Docker Orchestration / Swarm Mode</a><span class="Apple-converted-space"> </span>on Katakoda.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.katacoda.com/courses/containers-without-docker" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Running Containers without Docker</a><span class="Apple-converted-space"> </span>on Kotakoda.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.edx.org/course/configuration-management-for-containerized-delivery-0" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Configuration Management for Containerized Delivery</a><span class="Apple-converted-space"> </span>on edX.</li>
</ol>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
For IBMers:</h3>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
For IBM-ers who have access to YourLearning courses and Safari Books Online:</div>
<ol style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Complete the<span class="Apple-converted-space"> </span><a href="https://www.youracclaim.com/badges/6907a9b7-f51f-4554-822d-32eb2e12d347" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">IBM Cloud Private Consultant Bootcamp</a>, which includes 15+ hours of self-paced learning on Kubernetes, Helm, Docker, Microservices (IBM Garage Method), Cloud Foundry, and introduction to IBM Cloud Private.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Complete other courses and certifications from the ICp series:<span class="Apple-converted-space"> </span><a href="https://www.youracclaim.com/badges/5e001810-78c7-407b-89ff-b4a3da7be98f" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">IBM Cloud Private - Continuous Integration/Continuous Delivery Pipelines</a>.</li>
</ol>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Books:</h3>
<ol style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Read up on Docker on Safari Books online:<span class="Apple-converted-space"> </span><a href="http://shop.oreilly.com/product/0636920036142.do" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Docker: Up & Running</a><span class="Apple-converted-space"> </span>,<span class="Apple-converted-space"> </span><a href="http://shop.oreilly.com/product/0636920035671.do" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Using Docker</a></li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Check out:<span class="Apple-converted-space"> </span><a href="http://shop.oreilly.com/product/0636920043874.do" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Kubernetes: Up & Running</a><span class="Apple-converted-space"> </span>and<span class="Apple-converted-space"> </span><a href="http://shop.oreilly.com/product/0636920064947.do" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Kubernetes Cookbook</a>.</li>
</ol>
<h2 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 32px; margin: 2.8rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<strong style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 24.000001907348633px; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Next Steps:</strong></h2>
<ol style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Find and join a Docker or Kubernetes community at<span class="Apple-converted-space"> </span><a href="https://www.meetup.com/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">meetup.com</a>. Attend a few presentations, talk to people!</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Capstone project: find an application you like, create a Docker container for it and publish it on Docker Hub.</li>
</ol>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
For additional Learning Paths, check out my<span class="Apple-converted-space"> </span><a href="https://www.linkedin.com/pulse/learn-cloud-ai-ibm-badges-mihai-criveti/" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Learn Cloud and AI with IBM Badges</a><span class="Apple-converted-space"> </span>article.</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
This article was originally published on <a href="https://www.linkedin.com/pulse/cloud-native-docker-k8s-istio-mihai-criveti/">https://www.linkedin.com/pulse/cloud-native-docker-k8s-istio-mihai-criveti/</a> </div>
cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-5218560155245496602018-08-01T21:49:00.000+03:002018-08-01T21:49:26.596+03:00Learn Cloud and AI with IBM Badges<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6jofBMIUgyxD-CdAfb-p61opNqZA8NLxui-GDfyvFcF9wDZ2p1TC8PhW5t0L-LDmVtB4f4tJAadBDp8DapKRZgraMszIFG_2iRe1I9Ak2W08v15r0fMZBBFqf2KJFBT3xihHf/s1600/mihai-criveti-badges.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="838" data-original-width="1600" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6jofBMIUgyxD-CdAfb-p61opNqZA8NLxui-GDfyvFcF9wDZ2p1TC8PhW5t0L-LDmVtB4f4tJAadBDp8DapKRZgraMszIFG_2iRe1I9Ak2W08v15r0fMZBBFqf2KJFBT3xihHf/s320/mihai-criveti-badges.png" width="320" /></a></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
Life-long learning doesn't have to cost a fortune. I've put together a free 'summer study plan' that covers Cloud Native, Docker / Kubernetes, Data Science, Big Data, Blockchain and IoT - and best of all - it's free. Completing the courses will earn you badges on<span class="Apple-converted-space"> </span><a href="https://www.youracclaim.com/user/mihai-criveti" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Acclaim</a><span class="Apple-converted-space"> </span>that can be easily shared on social media.</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<strong style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">My favourite IBM sites for free courses and badges include:</strong></div>
<ul style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: disc; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://developer.ibm.com/courses/badges/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">developerWorks Courses</a><span class="Apple-converted-space"> </span>for courses and badges on Blockchain, IBM Cloud / Bluemix, Node-Red, Chatbots, Raspberry Pi, API Connect, Streaming, Docker and Kubernetes. I've completed the entire set - and I can say by far ' Cloud App Developer V2' is my favourite. 21 hours of self-paced hands-on training. The labs are excellent - and highlight the twelve-factor app methodology.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://cognitiveclass.ai/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Data Science and Cognitive Computing Courses on CognitiveClass.AI</a><span class="Apple-converted-space"> </span>for learning paths on Containers, Kubernetes and IStio, Big Data, Python, R, Deep Learning, Analytics, Hadoop and Spark. I found "Applied Data Science with Python" to be a fun and exciting course. All the courses have hands-on labs, with tools deployed and available on the cloud through IBM Cloud, Data Science Experience or CogntiveClass Labs!</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://labs.cognitiveclass.ai/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">CognitiveClass Labs</a><span class="Apple-converted-space"> </span>- comes in support of the courses available on CogntiveClass.AI - providing access to data science tools such as OpenRefine, Jupyter Notebook/Lab, RStudio, Zeppelin Notebook, SeaHorse and more.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.watson-academy.info/local/staticpage/view.php?page=badges" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">IBM Watson Academy</a><span class="Apple-converted-space"> </span>for courses and badges such as "Watson and Cloud Platform", "Watson Assistant", "Watson Discovery Service" or "Watson Knowledge Studio".</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.ibm.com/cloud/garage/category/courses" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">IBM Garage Courses</a><span class="Apple-converted-space"> </span>for "Garage Method Explorer" and "Garage Method Advocate"- an excellent series on DevOps, Agile, CI/CD, practices and tools.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.iot-academy.info/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Watson IOT Academy</a><span class="Apple-converted-space"> </span>- courses and badges on Watson IOT offerings.</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/W8877c01e0b3f_4ed5_9fa5_b8268c46f433/page/Welcome%20to%20IBM%20Analytics%20Product%20Skills%20Validation%20Digital%20Badge%20Program" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">IBM Analytics Product Skills Validation</a><span class="Apple-converted-space"> </span>- various analytics badges and courses - that usually build on top of existing learning paths.</li>
</ul>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<strong style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Additional free resources:</strong></div>
<ul style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: disc; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.katacoda.com/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Katakoda</a><span class="Apple-converted-space"> </span>provides interactive scenario driven labs and excellent courses on topics such as Docker, Kubernetes, Prometheus, Git, Jenkins, Istio, Machine Learning, Tensorflow and more. I highly recommend taking some of the courses here!</li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://www.edx.org/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">https://www.edx.org</a><span class="Apple-converted-space"> </span>- you can 'audit' courses for free, but verified certificates usually cost money. Worth taking a look for courses such as<span class="Apple-converted-space"> </span><a href="https://courses.edx.org/courses/course-v1:LinuxFoundationX+LFS158x+1T2018/course/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Introduction to Kubernetes</a><span class="Apple-converted-space"> </span>from the Linux Foundation or<span class="Apple-converted-space"> </span><a href="https://courses.edx.org/courses/course-v1:Microsoft+DAT256x+2T2018/course/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Essential Math for Machine Learning: Python Edition</a></li>
<li style="background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="http://www.fast.ai/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">http://www.fast.ai</a><span class="Apple-converted-space"> </span>- free courses on Deep Learning, Computational Linear Algebra.</li>
</ul>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
If you want to try something hands-on, respond to<a href="https://developer.ibm.com/callforcode/" rel="nofollow noopener" style="background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank"><span class="Apple-converted-space"> </span>IBM's Call for Code</a><span class="Apple-converted-space"> </span>- and build an application to tackle natural disasters (hurricanes, earthquakes, floods, extreme weather, etc).</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
This article was originally published on LinkedIn: <a href="https://www.linkedin.com/pulse/learn-cloud-ai-ibm-badges-mihai-criveti/">https://www.linkedin.com/pulse/learn-cloud-ai-ibm-badges-mihai-criveti/</a></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: "Source Serif Pro", serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;">
</div>
cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-87626216179083680442014-11-13T12:38:00.002+02:002014-11-13T12:38:40.569+02:00Microsoft released .NET Core as open source. Find out what's inside!Microsoft <a class="xref" href="http://blogs.msdn.com/b/dotnet/archive/2014/11/12/net-core-is-open-source.aspx" target="_blank">announced that .NET Core will be open source</a>, including the runtime and the framework libraries.<br />
There are several open source <a class="xref" href="https://github.com/dotnet/home" target="_blank">Microsoft .NET projects on GitHub</a> and <a class="xref" href="https://www.codeplex.com/" target="_blank">CodePlex</a>:<br />
<div class="body">
<div class="p">
<ul class="ul" id="topic_gvg_32n_bq__ul_arj_l2n_bq">
<li class="li"><a class="xref" href="https://github.com/dotnet/corefx" target="_blank">.NET Core 5 (corefx)</a> - foundational libraries that make up the .NET Core development stack;</li>
<li class="li"><a class="xref" href="https://github.com/dotnet/buildtools" target="_blank">.NET Core 5 buildtools</a> - Build tools that are necessary for building the .NET Core project;</li>
<li class="li"><a class="xref" href="https://roslyn.codeplex.com/" target="_blank">.NET Compiler Platform (Roslyn)</a> - open-source C# and Visual Basic compilers with rich code analysis APIs;</li>
<li class="li"><a class="xref" href="https://github.com/aspnet/EntityFramework" target="_blank">EntityFramework</a> - Microsoft's recommended data access technology for new applications in .NET;</li>
<li class="li"><a class="xref" href="https://github.com/aspnet/home" target="_blank">ASP.NET vNext Home</a> - The Home repository is the starting point for people to learn about ASP.NET vNext;</li>
</ul>
</div>
<div class="p">
So what's in this stuff, anyway? Let's dissect it using <a class="xref" href="http://www.dwheeler.com/sloccount/" target="_blank">sloccount</a> and <a class="xref" href="http://cloc.sourceforge.net/" target="_blank">cloc</a> (count lines of code) and find out!</div>
<div class="p">
<br /></div>
<div class="p">
<strong class="ph b">Grab the code for Roslyn:</strong><br />
<pre class="src src-sh" style="background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;"><span style="color: #ff7f24; font-family: courier, monospace;"><span style="font-size: 14px; line-height: 20.8000011444092px;">$ GIT_CURL_VERBOSE=1 git clone -v https://git01.codeplex.com/roslyn</span></span></pre>
</div>
<div class="p">
<br />
<pre class="src src-sh" style="background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); color: #333333; font-family: courier, monospace; font-size: 14px; line-height: 20.8000011444092px; overflow: auto; padding: 5pt;">Cloning into 'roslyn'...
error: RPC failed; result=56, HTTP code = 200
GnuTLS recv error (-9): A TLS packet with unexpected length was received.</pre>
<br />
Whatever - no time to rebuild git against OpenSSL. Let's use a workaround:<br />
<pre class="src src-sh" style="background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;"><span style="color: #ff7f24; font-family: courier, monospace;"><span style="font-size: 14px; line-height: 20.8000011444092px;">$ </span></span><span style="background-color: transparent; font-size: 14px; line-height: 20.8000011444092px;"><span style="color: #ff7f24; font-family: courier, monospace;">mkdir roslyn; cd roslyn; git init
$ git remote add origin https://git01.codeplex.com/roslyn
$ git checkout -B master origin/master</span></span></pre>
</div>
<div class="p">
<br />
Great. Now let's grab the .NET Core dev stack, libraries and build tools (github clones fine):<br />
<pre class="src src-sh" style="background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;"><span style="color: #ff7f24; font-family: courier, monospace;"><span style="font-size: 14px; line-height: 20.8000011444092px;">$ git clone https://github.com/dotnet/corefx.git
$ git clone https://github.com/dotnet/buildtools.git</span></span></pre>
</div>
<div class="p">
<pre class="pre codeblock"></pre>
</div>
<div class="p">
<strong class="ph b">Analyze the .NET Core 5 (corefx) and buildtools</strong><br />
<pre class="pre codeblock"></pre>
<pre class="pre codeblock"><pre class="src src-sh" style="background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;"><span style="color: #ff7f24; font-family: courier, monospace;"><span style="font-size: 14px; line-height: 20.8000011444092px;">$ </span></span><span style="background-color: transparent; font-size: 14px; line-height: 20.8000011444092px;"><span style="color: #ff7f24; font-family: courier, monospace;">cloc --xsl=1 --xml corefx/ buildtools/</span></span></pre>
</pre>
<pre class="pre codeblock"></pre>
</div>
<div class="tablenoborder">
<table border="1" cellpadding="4" cellspacing="0" class="table" frame="border" id="topic_gvg_32n_bq__table_yjz_pln_bq" rules="all" summary="">
<thead align="left" class="thead">
<tr class="row">
<th class="entry" id="d41e128" valign="top">Language</th>
<th class="entry" id="d41e131" valign="top">Files</th>
<th class="entry" id="d41e134" valign="top">Blank</th>
<th class="entry" id="d41e137" valign="top">Comment</th>
<th class="entry" id="d41e140" valign="top">Code</th>
</tr>
</thead>
<tbody class="tbody">
<tr class="row">
<td class="entry" headers="d41e128 " valign="top">C#</td>
<td class="entry" headers="d41e131 " valign="top">565</td>
<td class="entry" headers="d41e134 " valign="top">17312</td>
<td class="entry" headers="d41e137 " valign="top">24750</td>
<td class="entry" headers="d41e140 " valign="top">104192</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e128 " valign="top">XML</td>
<td class="entry" headers="d41e131 " valign="top">2</td>
<td class="entry" headers="d41e134 " valign="top">0</td>
<td class="entry" headers="d41e137 " valign="top">7</td>
<td class="entry" headers="d41e140 " valign="top">4456</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e128 " valign="top">MSBuild scripts</td>
<td class="entry" headers="d41e131 " valign="top">15</td>
<td class="entry" headers="d41e134 " valign="top">54</td>
<td class="entry" headers="d41e137 " valign="top">90</td>
<td class="entry" headers="d41e140 " valign="top">1820</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e128 " valign="top">SKILL</td>
<td class="entry" headers="d41e131 " valign="top">2</td>
<td class="entry" headers="d41e134 " valign="top">11</td>
<td class="entry" headers="d41e137 " valign="top">0</td>
<td class="entry" headers="d41e140 " valign="top">52</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e128 " valign="top">Visual Basic</td>
<td class="entry" headers="d41e131 " valign="top">1</td>
<td class="entry" headers="d41e134 " valign="top">17</td>
<td class="entry" headers="d41e137 " valign="top">1</td>
<td class="entry" headers="d41e140 " valign="top">43</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e128 " valign="top">ASP.Net</td>
<td class="entry" headers="d41e131 " valign="top">6</td>
<td class="entry" headers="d41e134 " valign="top">0</td>
<td class="entry" headers="d41e137 " valign="top">0</td>
<td class="entry" headers="d41e140 " valign="top">32</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e128 " valign="top">C/C++ Header</td>
<td class="entry" headers="d41e131 " valign="top">1</td>
<td class="entry" headers="d41e134 " valign="top">5</td>
<td class="entry" headers="d41e137 " valign="top">1</td>
<td class="entry" headers="d41e140 " valign="top">7</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e128 " valign="top">DOS Batch</td>
<td class="entry" headers="d41e131 " valign="top">1</td>
<td class="entry" headers="d41e134 " valign="top">0</td>
<td class="entry" headers="d41e137 " valign="top">0</td>
<td class="entry" headers="d41e140 " valign="top">5</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e128 " valign="top">Total</td>
<td class="entry" headers="d41e131 " valign="top">593</td>
<td class="entry" headers="d41e134 " valign="top">17399</td>
<td class="entry" headers="d41e137 " valign="top">24849</td>
<td class="entry" headers="d41e140 " valign="top">110607</td>
</tr>
</tbody>
</table>
</div>
<div class="p">
<pre class="pre codeblock"></pre>
</div>
<div class="p">
<strong class="ph b"><br /></strong><strong class="ph b">Analyze Roslyn</strong><br />
<pre class="pre codeblock"><pre class="src src-sh" style="background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;"><span style="color: #ff7f24; font-family: courier, monospace;"><span style="font-size: 14px; line-height: 20.8000011444092px;">$ </span></span><span style="background-color: transparent; font-size: 14px; line-height: 20.8000011444092px;"><span style="color: #ff7f24; font-family: courier, monospace;">cloc --xsl=1 --xml roslyn/Src</span></span></pre>
</pre>
<pre class="pre codeblock"></pre>
<pre class="pre codeblock"></pre>
<div class="tablenoborder">
<table border="1" cellpadding="4" cellspacing="0" class="table" frame="border" id="topic_gvg_32n_bq__table_f3j_3tn_bq" rules="all" summary="">
<thead align="left" class="thead">
<tr class="row">
<th class="entry" id="d41e346" valign="top">Language</th>
<th class="entry" id="d41e349" valign="top">Files</th>
<th class="entry" id="d41e352" valign="top">Blank</th>
<th class="entry" id="d41e355" valign="top">Comment</th>
<th class="entry" id="d41e358" valign="top">Code</th>
</tr>
</thead>
<tbody class="tbody">
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">C#</td>
<td class="entry" headers="d41e349 " valign="top">4138</td>
<td class="entry" headers="d41e352 " valign="top">186147</td>
<td class="entry" headers="d41e355 " valign="top">131956</td>
<td class="entry" headers="d41e358 " valign="top">1173792</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">Visual Basic</td>
<td class="entry" headers="d41e349 " valign="top">1767</td>
<td class="entry" headers="d41e352 " valign="top">178277</td>
<td class="entry" headers="d41e355 " valign="top">140738</td>
<td class="entry" headers="d41e358 " valign="top">981301</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">XML</td>
<td class="entry" headers="d41e349 " valign="top">4</td>
<td class="entry" headers="d41e352 " valign="top">1870</td>
<td class="entry" headers="d41e355 " valign="top">1920</td>
<td class="entry" headers="d41e358 " valign="top">12451</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">MSBuild scripts</td>
<td class="entry" headers="d41e349 " valign="top">74</td>
<td class="entry" headers="d41e352 " valign="top">0</td>
<td class="entry" headers="d41e355 " valign="top">216</td>
<td class="entry" headers="d41e358 " valign="top">10066</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">C/C++ Header</td>
<td class="entry" headers="d41e349 " valign="top">15</td>
<td class="entry" headers="d41e352 " valign="top">1607</td>
<td class="entry" headers="d41e355 " valign="top">428</td>
<td class="entry" headers="d41e358 " valign="top">7361</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">SKILL</td>
<td class="entry" headers="d41e349 " valign="top">33</td>
<td class="entry" headers="d41e352 " valign="top">888</td>
<td class="entry" headers="d41e355 " valign="top">0</td>
<td class="entry" headers="d41e358 " valign="top">4954</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">C++</td>
<td class="entry" headers="d41e349 " valign="top">12</td>
<td class="entry" headers="d41e352 " valign="top">322</td>
<td class="entry" headers="d41e355 " valign="top">186</td>
<td class="entry" headers="d41e358 " valign="top">1698</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">XSD</td>
<td class="entry" headers="d41e349 " valign="top">3</td>
<td class="entry" headers="d41e352 " valign="top">74</td>
<td class="entry" headers="d41e355 " valign="top">217</td>
<td class="entry" headers="d41e358 " valign="top">401</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">ASP.Net</td>
<td class="entry" headers="d41e349 " valign="top">44</td>
<td class="entry" headers="d41e352 " valign="top">4</td>
<td class="entry" headers="d41e355 " valign="top">0</td>
<td class="entry" headers="d41e358 " valign="top">351</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">XAML</td>
<td class="entry" headers="d41e349 " valign="top">3</td>
<td class="entry" headers="d41e352 " valign="top">3</td>
<td class="entry" headers="d41e355 " valign="top">1</td>
<td class="entry" headers="d41e358 " valign="top">128</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">DOS Batch</td>
<td class="entry" headers="d41e349 " valign="top">6</td>
<td class="entry" headers="d41e352 " valign="top">22</td>
<td class="entry" headers="d41e355 " valign="top">11</td>
<td class="entry" headers="d41e358 " valign="top">79</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">PowerShell</td>
<td class="entry" headers="d41e349 " valign="top">3</td>
<td class="entry" headers="d41e352 " valign="top">7</td>
<td class="entry" headers="d41e355 " valign="top">0</td>
<td class="entry" headers="d41e358 " valign="top">13</td>
</tr>
<tr class="row">
<td class="entry" headers="d41e346 " valign="top">Total</td>
<td class="entry" headers="d41e349 " valign="top">6102</td>
<td class="entry" headers="d41e352 " valign="top">369221</td>
<td class="entry" headers="d41e355 " valign="top">275673</td>
<td class="entry" headers="d41e358 " valign="top">2192595</td>
</tr>
</tbody>
</table>
</div>
</div>
<pre class="pre codeblock"></pre>
<pre class="pre codeblock"></pre>
<pre class="pre codeblock"><pre class="src src-sh" style="background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;"><span style="color: #ff7f24; font-family: courier, monospace;"><span style="font-size: 14px; line-height: 20.8000011444092px;">$ sloccount roslyn/Src</span></span></pre>
</pre>
<pre class="pre codeblock"></pre>
<pre class="pre codeblock"><pre class="src src-sh" style="background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); color: #333333; font-family: courier, monospace; font-size: 14px; line-height: 20.8000011444092px; overflow: auto; padding: 5pt;">Total Physical Source Lines of Code (SLOC) = 1,205,824
Development Effort Estimate, Person-Year (Person-Month) = 343.86 (4,126.29)
(Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months) = 4.93 (59.14)
(Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule) = 69.78
Total Estimated Cost to Develop = $ 46,450,431
(average salary = $56,286/year, overhead = 2.40).</pre>
</pre>
</div>
<div class="p">
<strong class="ph b">So - what have we learned?</strong></div>
<ul class="ul" id="topic_gvg_32n_bq__ul_o2k_5tn_bq">
<li class="li">sloccount COCOMO estimates are just that - estimates;</li>
<li class="li">We have over one million lines of C# to play around with;</li>
<li class="li">Porting this thing will likely depend on Mono and will require quite a lot of work;</li>
<li class="li">It still doesn't make up an ecosystem - there's work to be done here to turn this into a cross-platform .NET environment;</li>
<li class="li">Microsoft is most likely pushing for the clouds - this open source seems consistent with their <a class="xref" href="http://www.theregister.co.uk/2014/10/16/windows_containers_deep_dive/" target="_blank">recent partnership with Docker</a>.</li>
</ul>
<ul class="ul" id="topic_gvg_32n_bq__ul_o2k_5tn_bq">
</ul>
cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-66130108069082973122013-02-21T06:04:00.004+02:002013-02-21T06:04:53.275+02:00Set up a highly available firewall and load balancer in the IBM cloud<a href="http://www.ibm.com/developerworks/cloud/library/cl-setupfirewalloncloud/index.html">http://www.ibm.com/developerworks/cloud/library/cl-setupfirewalloncloud/index.html</a><br />
Summary: Set up a highly available (Virtual Router Redundancy Protocol) firewall and load balancer (Linux Virtual Server IP Virtual Server) using Keepalived for Linux and the IBM SmartCloud Enterprise virtual IP and anti-collocation features.cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-15887619532103428662012-10-20T00:09:00.000+03:002012-10-20T00:09:23.425+03:00QEMU and kpartx to perform bare metal recovery or forensics on cloud instancesUsing qemu or kpartx to perform "bare metal" instance recovery or forensics on KVM cloud instances:<br />
<br />
<br />
<a href="http://www.ibm.com/developerworks/cloud/library/cl-qemurecovery/index.html">Use QEMU on IBM SmartCloud Enterprise to recover images after system disasters</a><br />
<br />
<br />
<br />
<br />cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-83027729072885213082011-12-11T17:24:00.001+02:002011-12-11T17:27:16.002+02:00HP to Contribute webOS to Open SourceLooks like after killing their TouchPad tablet, HP open sources WebOS:<br /><ul><li><a href="http://www.hp.com/hpinfo/newsroom/press/2011/111209xa.html?mtxs=rss-corp-news">http://www.hp.com/hpinfo/newsroom/press/2011/111209xa.html?mtxs=rss-corp-news</a></li><li>http://developer.palm.com/blog/2011/12/open-source/</li><li>I wonder.. <a href="https://github.com/hpwebos">https://github.com/hpwebos</a></li></ul><p>Might mean the TouchPad will make a comback. We'll see.<br /></p>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-31208288665392074362011-12-11T14:26:00.001+02:002011-12-11T14:26:35.349+02:00Review: 1Q84<br /> <a style='float: left; padding-right: 20px' href='http://www.goodreads.com/book/show/10357575'><img alt='1Q84' border='0' src='http://photo.goodreads.com/books/1316729331m/10357575.jpg'/></a><br /> <a href='http://www.goodreads.com/book/show/10357575'>1Q84</a> by <a href='http://www.goodreads.com/author/show/3354'>Haruki Murakami</a><br/><br /> My rating: <a href='http://www.goodreads.com/review/show/227461074'>5 of 5 stars</a><br /> <br/><br/><br /> I can't quite put my finger on it, but this books keeps reminding me of things I've forgotten or ignored.<br /><br />I must say I've enjoyed Book 3 the most.<br /><br />Well, that's it. For now at least - I'm out of Murakami :-(.<br /> <br/><br/><br /> <a href='http://www.goodreads.com/review/show/227461074'>View all my reviews</a><br /> cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-7922646272025991382011-10-25T12:15:00.002+03:002011-10-25T12:25:20.099+03:00Review: Getting Things Done: The Art of Stress-Free Productivity<a style="float: left; padding-right: 20px" href="http://www.goodreads.com/book/show/1633"><img alt="Getting Things Done: The Art of Stress-Free Productivity" src="http://photo.goodreads.com/books/1312474060m/1633.jpg" border="0" /></a><a href="http://www.goodreads.com/book/show/1633">Getting Things Done: The Art of Stress-Free Productivity</a> by <a href="http://www.goodreads.com/author/show/1058">David Allen</a><br /><br /> My rating: <a href="http://www.goodreads.com/review/show/107076331">5 of 5 stars</a><br /> <br /> I've been using the methods and techniques described in GTD along side mind mapping in practice for over 8 years (mostly due to tools like OneNote, Emacs ORG mode, XMind/Fremind, etc). Reading this book has definitely helped optimize my workflow and planning into something quite a bit more efficient.<br /><br />Right now I'm still looking to overhaul my tooling, OneNote isn't available on UNIX-like system (though it mostly works with wine), and Emacs ORG mode isn't practical for pasting images, screenshots, video, audio, files, etc. and such for reference.<br /><br />It's tried a bunch of Java tools (Thinking Rock and GTD Free) but they're not very good for reference, note taking and reminders / calendar stuff. So far it's proving hard to beat the OneNote + Outlook + Project combo.<br /><br />One tool I've been using for a while now (probably an year or so) along side OneNote is <a href="http://getontracks.org/">Tracks</a> . It's a RoR webapp that covers most things in the GTD workflow. Although import/export isn't yet available as of version 2.0, it gets the job done. It's also available from <a href="http://bitnami.org/stack/tracks">Bitnami</a> as a pre-installed stack.<br /><br />If you're into GTD or just like to organize yourself with TODOS, tasks, projects and such, Tracks is worth a try.<br /><br /> <a href="http://www.goodreads.com/review/show/107076331">View all my reviews</a>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-15686495934361567922011-05-26T21:27:00.003+03:002011-05-26T21:29:36.293+03:00Convert AWK to Perl using a2p<div class="body"><div class="abstract">Automatic conversion of AWK scripts to perl.</div> <div class="p"><br />A little <span class="keyword cmdname">awk</span> script that numbers lines:<pre class="pre codeblock"><strong class="ph b">ls -la /usr | ./linum.pl<br /> 1 : total 240<br /> 2 : drwxr-xr-x+ 12 root root 4096 2010-06-21 06:47 .<br /> 3 : drwxr-xr-x 22 root root 4096 2011-05-11 12:06 ..<br /> 4 : drwxr-xr-x+ 2 root root 69632 2011-05-24 14:07 bin<br /> 5 : drwxr-xr-x+ 2 root root 4096 2010-05-05 11:33 games<br /> 6 : drwxr-xr-x+ 5 root root 4096 2010-06-21 06:47 i586-suse-linux<br /> 7 : drwxr-xr-x+ 52 root root 4096 2011-05-13 04:17 include<br /> 8 : drwxr-xr-x+ 156 root root 69632 2011-05-24 14:07 lib<br /> 9 : drwxr-xr-x+ 10 root root 4096 2010-06-21 06:47 local<br /> 10 : drwxr-xr-x+ 2 root root 12288 2011-05-24 14:07 sbin<br /> 11 : drwxr-xr-x+ 213 root root 4096 2011-05-23 13:19 share</strong></pre> Let's convert this to <span class="keyword cmdname">perl</span> using <span class="keyword cmdname">a2p</span>.<pre class="pre codeblock">echo '{ printf("%5d : %s\n", NR, $0) }' | a2p > linum.pl<br />chmod +x linum.pl</pre> Let's try it out:<pre class="pre codeblock"><strong class="ph b">ls -la /usr | ./linum.pl<br /> 1 : total 240<br /> 2 : drwxr-xr-x+ 12 root root 4096 2010-06-21 06:47 .<br /> 3 : drwxr-xr-x 22 root root 4096 2011-05-11 12:06 ..<br /> 4 : drwxr-xr-x+ 2 root root 69632 2011-05-24 14:07 bin<br /> 5 : drwxr-xr-x+ 2 root root 4096 2010-05-05 11:33 games<br /> 6 : drwxr-xr-x+ 5 root root 4096 2010-06-21 06:47 i586-suse-linux<br /> 7 : drwxr-xr-x+ 52 root root 4096 2011-05-13 04:17 include<br /> 8 : drwxr-xr-x+ 156 root root 69632 2011-05-24 14:07 lib<br /> 9 : drwxr-xr-x+ 10 root root 4096 2010-06-21 06:47 local<br /> 10 : drwxr-xr-x+ 2 root root 12288 2011-05-24 14:07 sbin<br /> 11 : drwxr-xr-x+ 213 root root 4096 2011-05-23 13:19 share</strong><br /><br /><span style="font-weight: bold;">The code block looks pretty good:<br /><br /></span>while (<>) {<br />chomp; # strip record separator<br />printf "%5d : %s\n", $., $_;<br />}<br /><br /></pre> </div> </div>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com3tag:blogger.com,1999:blog-36470398.post-76309722619290857222011-05-26T13:35:00.002+03:002011-05-26T13:37:52.969+03:00NSA Operating Systems Security Configuration GuidesNSA published some rather interesting OS security guides:<br /><a href="http://www.nsa.gov/ia/guidance/security_configuration_guides/operating_systems.shtml">http://www.nsa.gov/ia/guidance/security_configuration_guides/operating_systems.shtml</a><br /><br />The RHEL Security Guides are quite good.<br /><ul><li><a title="This link will open the Guide to the Secure Configuration of Red Hat Enterprise Linux 5. Click to view the legal notice and open the pdf file." href="http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf">Guide to the Secure Configuration of Red Hat Enterprise Linux 5 </a></li><li><a title="This link will open the Hardening Tips for the Red Hat Enterprise Linux 5. Click to view the legal notice and open the pdf file." href="http://www.nsa.gov/ia/_files/factsheets/rhel5-pamphlet-i731.pdf">Hardening Tips for the Red Hat Enterprise Linux 5</a></li></ul>I've used these along with the <a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/index.html"><em class="citetitle" id="Title-6-Security_Guide">Security Guide and the </em></a><em class="citetitle" id="Title-6-Security-Enhanced_Linux"><a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/index.html">Security-Enhanced Linux guides</a> from RHEL.<br /></em>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com2tag:blogger.com,1999:blog-36470398.post-42593473677557340652011-05-20T16:58:00.002+03:002011-05-20T17:05:31.269+03:00IBM SmartCloud Enterprise tips: LVM and FTPS<span style="font-weight: bold;"><a href="http://www.ibm.com/cloud-computing/us/en/">IBM SmartCloud Enterprise</a> tips:</span><br /><br />Learn how to set up a 64-bit Linux® instance (starting with a Bronze-level offering) with the Linux Logical Volume Manager (LVM), capture a private image and deploy a new instance as a different offering (a Platinum tier) and then grow the LVM volumes and file systems to accommodate the new physical volumes. This article also shows how to configure and manage LVM across physical volumes using Linux LVM-type partitions:<br /><ul><li><a href="http://www.ibm.com/developerworks/cloud/library/cl-cloudtip-lvmconfig/">Configure the Linux LVM and file system to accommodate larger physical volume offerings</a></li></ul><br />Set up a Microsoft® Windows™ Server 2008 R2 on the IBM Cloud so that it can act as a file server. This article details the steps to configure an FTPS and SMB file server using persistent storage; this enables the cloud user to upload and download files to and from instances in the cloud and facilitate data exchange:<br /><ul><li><a href="http://www.ibm.com/developerworks/cloud/library/cl-windowsfileserver/">Configure an FTPS/SMB file server on a Windows Server 2008 R2 using persistent storage</a><br /></li></ul>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-8008601085480820652010-10-10T03:06:00.002+03:002010-10-10T03:14:31.084+03:00Microsoft Mathematics Add-In for Word and OneNoteHeh, this one is pretty awesome. Calculus and plotting in Microsoft Word :-). Best of all, it's a free add-on.<div><br /></div><div><a href="http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=ca620c50-1a56-49d2-90bd-b2e505b3bf09">Microsoft Mathematics Add-In for Word and OneNote</a></div><div><br /></div><div>And while we're on the subject of educational software:</div><div><a href="http://research.microsoft.com/en-us/downloads/b28c604a-ce3a-4327-833a-3c2f24aeadd6/">Biology Add-in for Word</a></div><div><a href="http://research.microsoft.com/en-us/projects/chem4word/">Chemistry Add-in for Word</a></div><div><br /></div><div>You can even grab the source code for this: <a href="http://chem4word.codeplex.com/">http://chem4word.codeplex.com/</a></div>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com2tag:blogger.com,1999:blog-36470398.post-79019700571615234812010-10-02T14:11:00.005+03:002010-10-06T21:34:34.646+03:00Mount hfsplus and hfs read write on Linux<div><span class="Apple-style-span" style="font-family: Times, serif; "><div><h1 class="title" style="text-align: center; ">Mount HFS+ rw on Linux (at your own risk...)</h1><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "></span><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">Install HFS+ support</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "></span>aptitude install hfsplus hfsprogs hfsutils</pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">Keep an eye on your dmesg:</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "></span>tail -f /var/log/messages</pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">Get an idea on what partition you'd want to mount</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; ">cat /proc/partitions</pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">See what filesystems are supported</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; ">cat /proc/filesystems</pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">Check for a hfsplus LKM</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; ">modprobe -l | grep hfsplus</pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">Load it</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; ">modprobe hfsplus<br /></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">Check to see if it's loaded</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; ">grep hfsplus /proc/partitions<br /></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">Mount the HFS+ partition. If it's journaled, we don't need -o force.</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; ">mount -t hfsplus -o force -o rw /dev/sda2 /mnt/test</pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">Verify it</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; ">/dev/sda2 on /mnt/test type hfsplus (rw,force) touch /mnt/test/selftest ls -la /mnt/test/selftest<br /></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">If we're not allowed to mount with the write option, check dmesg</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "><span style="color: rgb(255, 127, 36); "># </span><span style="color: rgb(255, 127, 36); ">If required, fsck, then remount.</span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; ">/sbin/fsck.hfsplus -f /dev/sda2</pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "># As an alternative, you can disable the journal on a MacOS:</pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; "># GUI: hold option while clicking the menu in Disk Utility. CMD:</pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; overflow-x: auto; overflow-y: auto; "><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 14px;">diskutil list</span></span></pre><pre class="src src-sh" style="border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; overflow-x: auto; overflow-y: auto; "><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 14px;">sudo diskutil disableJournal /Volumes/Yourdisk</span></span></pre></div></span></div>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com5tag:blogger.com,1999:blog-36470398.post-88380075213617177542010-08-24T22:29:00.004+03:002010-08-24T22:36:00.109+03:00ClusterSSH alternative, broadcasting to multiple terminalsGnome "Terminator" is basically similar to ClusterSSH, dsh, kanif or such but runs all terminals in a single window you can split and such somewhat similar to screen.<br /><br />It's also a bit more configurable (eg: gnome-terminal).<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeyAukkFe-gS_lUrJawTi1bg8_1KDqA0GSyFQd3e83FccGXjZdLgyfq9_0o99Ls2wwa_4eL8M3xBCsueZxa4VVOeNU4oXQurZQV2Ryw-cbGVnyZei-Dk9qk1SVPH59IZUy-8Bg/s1600/GnomeTerminator.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 274px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeyAukkFe-gS_lUrJawTi1bg8_1KDqA0GSyFQd3e83FccGXjZdLgyfq9_0o99Ls2wwa_4eL8M3xBCsueZxa4VVOeNU4oXQurZQV2Ryw-cbGVnyZei-Dk9qk1SVPH59IZUy-8Bg/s400/GnomeTerminator.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5509062204205079586" /></a><br /><br /><a href="http://freshmeat.net/projects/gnometerminator/?branch_id=70626&release_id=268543">http://freshmeat.net/projects/gnometerminator/?branch_id=70626&release_id=268543</a>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-20901991042541400562010-08-13T13:50:00.003+03:002010-08-13T13:54:10.422+03:00ThinkPad fingerprint scanner - Linux PAM setupUsing fingerprint scanners for login is cool. Sure, it's insecure, but who cares about that :-). It's awesome!<br /><br />Do enroll more than one finger, and have a fallback mechanism though...<br /><br /># Install fingerprint software.<br /># You can play around with fprint_demo to try it out...<br />sudo aptitude install fprint-demo libpam-fprint libfprint<br /><br /># Enroll the index finder. See pam_fprint_enroll --help for details<br />pam_fprint_enroll --enroll-finger 7<br /><br /># Edit your PAM configuration to enable fingerprint login<br /># Fallback to password if it fails.<br /><br /># emacs /etc/pam.d/commond-auth<br /># Add something like:<br /><br /># Fingerprint<br />auth sufficient pam_fprint.so<br /><br />You could also require both, but that's just awkward :-). And if finger print scanning breaks, it's a PITA.cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-46123773063711729582010-07-26T01:44:00.007+03:002010-07-26T10:40:37.948+03:00Emacs: Different fonts in different modes<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsx6eTDPTYLXZHRkzxZrXX4S_-Mo1cwxoUGDh5tlQKJwq14urNXjSGxzD5r-zOaKEw3ZuuAOXv5u9y6fUadEtbRgu9cQgYcAWVZdpnIweUb6ELtNj3Nh11euin-w37FKJ-jByB/s1600/emacs-org-ditaa-buffer-face-mode.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 250px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsx6eTDPTYLXZHRkzxZrXX4S_-Mo1cwxoUGDh5tlQKJwq14urNXjSGxzD5r-zOaKEw3ZuuAOXv5u9y6fUadEtbRgu9cQgYcAWVZdpnIweUb6ELtNj3Nh11euin-w37FKJ-jByB/s400/emacs-org-ditaa-buffer-face-mode.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5497994046977936274" /></a><br />I love monospaced fonts (such as Terminus or Consolas / Inconsolata), but they can be harder to read when it comes to documentation or simple conversation.<div><br /></div><div>So, let's make Emacs use different fonts (monospaced and variable) depending on the mode we're in (eg: Info and ERC should not be monospaced), and let's add some shortcuts to change font type /size easily. You can do something like this with a bit of elisp in your init.el / .emacs.</div><div><br /></div><div><br /></div><div>;; Insidious Black Magic Bits:</div><div><br /></div><div><div><div><div>;; Use variable width font faces in current buffer</div><div>(defun my-buffer-face-mode-variable ()</div><div> "Set font to a variable width (proportional) fonts in current buffer"</div><div> (interactive)</div><div> (setq buffer-face-mode-face '(:family "DejaVu Sans" :height 100 :width semi-condensed))</div><div> (buffer-face-mode))</div><div><br /></div><div>;; Use monospaced font faces in current buffer</div><div>(defun my-buffer-face-mode-fixed ()</div><div> "Sets a fixed width (monospace) font in current buffer"</div><div> (interactive)</div><div> (setq buffer-face-mode-face '(:family "Consolas" :height 100))</div><div> (buffer-face-mode))</div><div><br /></div><div>;; Set default font faces for Info and ERC modes</div><div>(add-hook 'erc-mode-hook 'my-buffer-face-mode-variable)</div><div>(add-hook 'Info-mode-hook 'my-buffer-face-mode-variable)</div><div><br /></div><div>;; Control + scroll to change font type</div><div>(global-set-key [C-mouse-4] 'my-buffer-face-mode-fixed)</div><div>(global-set-key [C-mouse-5] 'my-buffer-face-mode-variable)</div><div><br /></div><div>;; Shift + scroll to change font size</div><div>(global-set-key [S-mouse-4] 'text-scale-increase)</div><div>(global-set-key [S-mouse-5] 'text-scale-decrease)</div></div><div><br /></div></div></div><div><br /></div>And the results:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG1RGHpaSE91HY67cyXYUPfvX2BExvrpN40L2zPXQ-0D_nu-UX85LrIi9-L8Mx7V-5Vy8OkkplmqIXVm7ZTPFL-iDY3DYX-_1EjSYEpSW2hDWryDGpGBeLn0aXmPCLl3it-1KQ/s1600/emacs-buffer-face-mode.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 250px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG1RGHpaSE91HY67cyXYUPfvX2BExvrpN40L2zPXQ-0D_nu-UX85LrIi9-L8Mx7V-5Vy8OkkplmqIXVm7ZTPFL-iDY3DYX-_1EjSYEpSW2hDWryDGpGBeLn0aXmPCLl3it-1KQ/s400/emacs-buffer-face-mode.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5497982214973955778" /></a><div><br /></div><div>Note that you can also Shift + Left Click on a window to set fonts / font sizes.</div>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-26796421573938375432010-07-18T22:56:00.004+03:002010-07-18T23:43:50.497+03:00Converting Perforce depots to Mercurial repositories with hg convert<div>Converting Perforce to Mercurial repositories is fast (4-5 seconds for a 500MB repository with 300 revisions).</div><div><br /></div><div>You'll also want to start p4d and log into P4V before, so it caches credentials.</div><div><br /></div><div>1. Setup your p4 client:</div><div>export P4PORT=localhost:1666</div><div>export P4CLIENT=your_client_here</div><div><br /></div><div>2. Enable hg converter by adding to ~/.hgrc</div><div>[extensions]</div><div>hgext.convert=</div><div><br /></div><div>3. Start p4d</div><div>./p4d &</div><div><br /></div><div>4. Convert the depot:</div><div>You need to specify a revision. Look it up in the p4 client (depot-details-revision). @all might also work.</div><div>hg convert //depot/...@307 converted-perforce path/to/hg-repo</div><div><br /></div><div>5. Look at the history</div><div>hg history</div><div><br /></div><div>6. Look at diffs and history with a graphical tool. This should give you a better idea of branches and such.</div><div>hgview</div><div><br /></div><div>7. Clone your repository</div><div>hg clone /path/to/hg-repo</div><div><br /></div><div>8. Publish your repository via the web interface</div><div>hg serve</div><div><br /></div><div>9. Browse around</div><div>http://localhost:8000/</div><div><br /></div><div><br /></div><div>Additional notes:</div><div>Keep an eye on:</div><div><a href="http://mercurial.selenic.com/wiki/RepositoryConversion#Perforce">http://mercurial.selenic.com/wiki/RepositoryConversion#Perforce</a></div><div><br /></div>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-44946338312702622672010-07-11T07:26:00.003+03:002010-07-11T07:30:46.825+03:00Memory Scanner and Editor for LinuxIf you're familiar with ArtMoney, MemEdit or <a href="http://www.cheatengine.org/">Cheat Engine</a> on Windows, then you know what it's used for :-).<div><br /></div><div>Basically, it lets you search for variables in the memory of a running process, then refine the search further (eg: give higher, lower or fixed values). You can use this basically to cheat at games. Look for the health, money or mana values, refine the search, then freeze or set the value to whatever you want.</div><div><br /></div><div><a href="http://taviso.decsystem.org/scanmem.html">ScanMem</a> is a simple commandline tool on Linux that lets you do the same. There are other uses, but this one is the most common...</div><div><br /></div>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com1tag:blogger.com,1999:blog-36470398.post-56728475616715908532010-06-07T20:46:00.005+03:002010-06-07T20:52:28.863+03:00Nautilus Location Bar - Fix Text ModeGnome keeps getting dumber and dumber all the time. First the "Open in Terminal" right click option was gone, now the address bar.<div><br /></div><div>Before at least you had a crayon button to toggle it. Now you need to type / and start typing or Ctrl-L to show it. Makes it a bit harder to copy/paste stuff to it.<br /><div><br /></div><div>Here's how you fix it:</div><div><blockquote>gconftool-2 --type=Boolean --set /apps/nautilus/preferences/always_use_location_entry true</blockquote></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNNzi_RAqcgt8quNVp59QSoLJKiw_thLKo27R0E6d2WiHtoswkHuVENMke-2b99ggikaNGGhOTMAA_Cai9yVYvDYajupdnhjTedL2xP1CqPbhGk_WZGKC8cbKM77kCNh8YtobZ/s1600/Nautilus-Address-Bar.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 247px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNNzi_RAqcgt8quNVp59QSoLJKiw_thLKo27R0E6d2WiHtoswkHuVENMke-2b99ggikaNGGhOTMAA_Cai9yVYvDYajupdnhjTedL2xP1CqPbhGk_WZGKC8cbKM77kCNh8YtobZ/s400/Nautilus-Address-Bar.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5480090743449939746" /></a><br /><br /></div>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com1tag:blogger.com,1999:blog-36470398.post-41939447248319487892010-05-21T22:50:00.005+03:002010-05-21T23:45:23.246+03:00VIM: The Matrix Has You<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj8b744juBDzglRwp3TPxtXLoYkCzH3yR-EjO2lcHZxRvkGd-pb7Mguc7MhQgBqdGaoOr7nwYfb-j1qkhSJfNEnWME2WUPPPWk_V6etddbrwFvvDQi8WYfXOiR4ZMk_aGFabnM/s1600/vim-matrix.gif"><img style="cursor:pointer; cursor:hand;width: 400px; height: 265px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj8b744juBDzglRwp3TPxtXLoYkCzH3yR-EjO2lcHZxRvkGd-pb7Mguc7MhQgBqdGaoOr7nwYfb-j1qkhSJfNEnWME2WUPPPWk_V6etddbrwFvvDQi8WYfXOiR4ZMk_aGFabnM/s400/vim-matrix.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5473827033272493922" /></a><br />(click for gif animation)<div><br /><div>This is pretty much the coolest thing I've seen all day.<div><br /></div><div>A "Matrix" screensaver for VIM. It's amazingly realistic too.</div><div><a href="http://www.vim.org/scripts/script.php?script_id=1189">http://www.vim.org/scripts/script.php?script_id=1189</a></div></div></div>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com1tag:blogger.com,1999:blog-36470398.post-59589385836742480742010-04-06T13:27:00.004+03:002010-04-07T22:59:17.729+03:00Share GNU screen sessions with a different userHere's something cool you can do with screen. Share a screen session with multiple terminals. "screen -x". Of course, this only works if you're using the same user.<div><br /></div><div>Let's say you want to do some cooperative debugging with another username. Simple:</div><div><br /></div><div>1. Set screen setuid flag:</div><div>chmod +s screen</div><div><br /></div><div>2. Start a new screen sessions:</div><div>screen -S mihai</div><div><br /></div><div>3. Set multiuser</div><div>Ctrl-A</div><div>:multiuser on</div><div><br /></div><div>4. Add the user to join your session to the ACL list:</div><div>Ctrl-A</div><div>:acladd jimbo</div><div><br /></div><div>5. Now connect as jimbo and join cmihai's session (called mihai):</div><div>screen -x cmihai/mihai</div><div><br /></div><div><br /></div><div>Now you can share you screen session with that user :-).</div>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com3tag:blogger.com,1999:blog-36470398.post-22022352124993266072010-01-03T04:09:00.006+02:002010-01-03T18:44:19.248+02:00Unpack functions and BSDProgress - progress bar for your archives.<pre>A colored unpack script using bar:</pre><pre><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnqhicsTpGotWm-j-WRjzUKJIZ5wlhqVxDwTZFVArARGhOW9B82-cdnduI0Uy5n-cCPyOidFkJaprttLLKQ7gZTTK6MIHUQoc6vT8Dcah_KRdXV3Q9DIf-GDYlXX53mIh4QVjF/s1600-h/bar-gup-unpacking.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 228px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnqhicsTpGotWm-j-WRjzUKJIZ5wlhqVxDwTZFVArARGhOW9B82-cdnduI0Uy5n-cCPyOidFkJaprttLLKQ7gZTTK6MIHUQoc6vT8Dcah_KRdXV3Q9DIf-GDYlXX53mIh4QVjF/s400/bar-gup-unpacking.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5422555279373894626" /></a><br /></pre><pre>A little KSH93 function for your .profile. Now you can augomatically unpack most archives while watching the pretty progress bar.</pre><pre>You need bsdprogress (Solaris and Linux port of NetBSD's progress). With a bit work it also works on AIX.</pre><pre>I just re-wrote this for progress, so I didn't check the cpio and such yet.</pre><pre># Mihai Criveti - Unpack function:<br /><span class="c"># Progress Unpack - unpack using GNU tar and bsdprogress.</span><br /><span class="w">function</span> <span class="i">up</span> <span class="s">{</span><br /><span class="k">for</span> <span class="w">archive</span> <span class="w">in</span> <span class="i">$*</span><span class="sc">;</span> <span class="k">do</span><br /> <span class="k">print</span> <span class="i">$archive</span><span class="sc">;</span><br /> <span class="k">case</span> <span class="i">$archive</span> <span class="i">in</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">tar</span><span class="s">)</span> <span class="w">progress</span> <span class="k">-f</span> <span class="i">$archive</span> <span class="w">gtar</span> <span class="w">xpif</span> - <span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">tar</span>.<span class="w">gz</span><span class="s">)</span> <span class="w">progress</span> <span class="k">-f</span> <span class="i">$archive</span> <span class="w">gtar</span> -<span class="w">zpixf</span> - <span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">tgz</span><span class="s">)</span> <span class="w">progress</span> -<span class="w">zf</span> <span class="i">$archive</span> <span class="w">gtar</span> -<span class="w">ipxf</span> - <span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">tar</span>.<span class="w">bz2</span><span class="s">)</span> <span class="w">progress</span> <span class="k">-f</span> <span class="i">$archive</span> <span class="w">gtar</span> -<span class="w">jipxf</span> - <span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">tbz</span><span class="s">)</span> <span class="w">progress</span> <span class="k">-f</span> <span class="i">$archive</span> <span class="w">gtar</span> -<span class="w">jipxf</span> - <span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">gz</span><span class="s">)</span> <span class="w">progress</span> <span class="k">-f</span> <span class="i">$archive</span> <span class="w">gunzip</span> -<span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">bz2</span><span class="s">)</span> <span class="w">progress</span> <span class="k">-f</span> <span class="i">$archive</span> <span class="w">bunzip</span> -<span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">tar</span>.<span class="w">Z</span><span class="s">)</span> <span class="w">uncompress</span> <span class="k">-c</span> <span class="i">$archive</span> | <span class="w">tar</span> <span class="w">gxvf</span> - <span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">cpio</span><span class="s">)</span> <span class="w">cpio</span> -<span class="w">icd</span> < <span class="i">$archive</span> <span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">Z</span><span class="s">)</span> <span class="w">uncompress</span> <span class="i">$archive</span> <span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">rar</span><span class="s">)</span> <span class="w">unrar</span> <span class="w">x</span> <span class="i">$archive</span> <span class="sc">;</span><span class="sc">;</span><br /> <span class="s">(</span><span class="i">*.</span><span class="w">zip</span><span class="s">)</span> <span class="w">unzip</span> <span class="i">$archive</span> <span class="sc">;</span><span class="sc">;</span><br /> <span class="w">esac</span><br /><span class="w">done</span><br /><span class="s">}</span><br /><span class="w"><br /></span></pre><pre>Let's say we want to unpack files that end in *bz2 (it will automagically detect .tar.bz2 or tbz2), *gz and a specific tar archive:<br /><br /></pre><pre><br /><span class="w">cmihai</span><span class="i">@phobos</span><span class="co">:</span><span class="q">/home/cmihai</span>/<span class="w">build</span><span class="i">$ up</span> <span class="w">g</span>*<span class="w">bz2</span> <span class="w">c</span>*<span class="w">gz</span> <span class="w">Python</span>\<span class="n">-3.0</span>.<span class="n">1.</span><span class="w">tar</span><br /><span class="w">gnupg</span>-<span class="v">1.4.10</span>.<span class="w">tar</span>.<span class="w">bz2</span><br /><span class="n">100</span>% |**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**| <span class="n">3330</span> <span class="w">KB</span> <span class="n">296.95</span> <span class="w">KB</span>/<span class="q">s 00:00</span> <span class="w">ETA</span><br /><span class="w">gnupg</span>-<span class="v">2.0.14</span>.<span class="w">tar</span>.<span class="w">bz2</span><br /><span class="n">100</span>% |**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**| <span class="n">3888</span> <span class="w">KB</span> <span class="n">340.20</span> <span class="w">KB</span>/<span class="q">s 00:00</span> <span class="w">ETA</span><br /><span class="w">ccache</span>-<span class="n">2.4</span>.<span class="w">tar</span>.<span class="w">gz</span><br /><span class="n">100</span>% |**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**| <span class="n">86363</span> <span class="n">201.51</span> <span class="w">KB</span>/<span class="q">s 00:00</span> <span class="w">ETA</span><br /><span class="w">Python</span>-<span class="v">3.0.1</span>.<span class="w">tar</span><br /><span class="n">91</span>% |**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>***<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">**</span>**<span class="i">* |</span> <span class="n">43320</span> <span class="w">KB</span> <span class="n">787.63</span> <span class="w">KB</span>/<span class="q">s 05:00</span> <span class="w">ETA</span><br /></pre><pre><span class="w"><br /></span></pre><pre><span class="w">See: </span></pre><pre><span class="w"><span class="Apple-style-span" style=" white-space: normal; font-family:Georgia, serif;"><a href="http://netbsd.gw.com/cgi-bin/man-cgi?progress++NetBSD-current"><span class="Apple-style-span" style="font-size:medium;">http://netbsd.gw.com/cgi-bin/man-cgi?progress++NetBSD-current</span></a></span></span></pre><pre><span class="w"><a href="http://mac.freshmeat.net/projects/bsdprogress/">http://mac.freshmeat.net/projects/bsdprogress/</a></span></pre><pre>It builds fine on AIX (Makefile tweaks), Solaris and Linux. Native on NetBSD.</pre><pre><b>Other versions:</b></pre><pre><a href="http://clpbar.sourceforge.net/">http://clpbar.sourceforge.net/</a></pre><pre><a href="http://freshmeat.net/projects/progress">http://freshmeat.net/projects/progress</a></pre><pre><br /></pre><pre><span class="Apple-style-span" style=" white-space: normal; font-family:Georgia, serif;font-size:16px;"><pre><br /></pre></span></pre><pre><br /></pre>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0tag:blogger.com,1999:blog-36470398.post-36727703243953748632009-12-26T14:28:00.002+02:002009-12-26T14:31:36.067+02:00Screenrc hardstatus line<div>Here's a pretty neat hardstatus line for your .screenrc:</div><div><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW0ZloJuoeZAAxvBM9PPCQFSlrYVNaYRR3F1rhJ3E-7gsk6nupDxdsW5HZnQIQP1pR4Nizr2cIB_6yRzWccV4Rx5Gg-cfqAoQqYXt7q-WwyG_3-vV1n7YRFnZdOBH3AYa8ZTPb/s1600-h/colored_screen.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 228px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW0ZloJuoeZAAxvBM9PPCQFSlrYVNaYRR3F1rhJ3E-7gsk6nupDxdsW5HZnQIQP1pR4Nizr2cIB_6yRzWccV4Rx5Gg-cfqAoQqYXt7q-WwyG_3-vV1n7YRFnZdOBH3AYa8ZTPb/s400/colored_screen.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5419521383876419954" /></a><br /><div><br /></div><div><br />hardstatus alwayslastline "%{-b ck}%?%-Lw%?%{bg}%n*%f %t%?(%u)%?%{wk}%?%+Lw%? %= %{r} %H %{g} %D %d/%m/%Y %0c "</div>cmihaihttp://www.blogger.com/profile/06014247302155057225noreply@blogger.com0