<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1918621439400142370</id><updated>2026-05-15T16:32:48.863+08:00</updated><category term="程式設計"/><category term="生活"/><category term="網頁撰寫"/><category term="Linux"/><category term="資工"/><category term="軟體(Software)"/><category term="PHP"/><category term="C/C++"/><category term="Programming"/><category term="Linuxamp;FreeBSD"/><category term="網路"/><category term="C#"/><category term="Java"/><category term="資訊安全"/><category term="學術"/><category term="學術研究"/><category term="cloud computing"/><category term="科技"/><category term="Windows"/><category term="jQuery"/><category term="雲端運算"/><category term="ASP.NET"/><category term="Web Design"/><category term="ajax"/><category term="Ubuntu"/><category term="browser"/><category term="hadoop"/><category term="心情"/><category term="網路 java"/><category term="Security"/><category term="visual studio"/><category term="3C產品"/><category term="XML"/><category term="svn"/><category term="CSS"/><category term="Docear"/><category term="Python"/><category term="SQL Server"/><category term="Translate"/><category term="apache"/><category term="chrome"/><category term="mvc"/><category term="3c"/><category term="Blog"/><category term="CKAN"/><category term="Software"/><category term="vim"/><category term="讀書"/><category term="ActiveMQ"/><category term="Big Data"/><category term="C"/><category term="Data Mining"/><category term="Docear4Word"/><category term="Drupal"/><category term="English Learning"/><category term="FFMPEG"/><category term="Flash"/><category term="HTML"/><category term="ICAO"/><category term="JavaScript"/><category term="Kdevelop"/><category term="LPI"/><category term="LXDE"/><category term="MS Office"/><category term="Machine Learning"/><category term="Movie"/><category term="OpenGL"/><category term="OpenOffice"/><category term="Raspberry Pi"/><category term="VPN"/><category term="WCF"/><category term="WPF"/><category term="eID"/><category term="git"/><category term="latex"/><category term="solaris"/><category term="wordpress"/><category term="健康"/><category term="感人的"/><category term="照片"/><category term="讀書心得"/><title type='text'>Allen&#39;s Blog</title><subtitle type='html'>Write down my life!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>300</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-6474893205688991522</id><published>2022-10-02T14:15:00.004+08:00</published><updated>2022-10-02T14:15:44.125+08:00</updated><title type='text'>Blog has been migrated! 部落格搬家囉!</title><content type='html'>Hi, all, 
This blog is not currently maintained. 
Please move to &lt;a href=&quot;https://blog.allenworkspace.net&quot;&gt;https://blog.allenworkspace.net&lt;/a&gt; for getting my new posts.

大家好，本部落格已不再更新。請移駕到&lt;a href=&quot;https://blog.allenworkspace.net&quot;&gt;https://blog.allenworkspace.net&lt;/a&gt; 得到我更新的文章。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/6474893205688991522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/6474893205688991522'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2022/10/blog-has-been-migrated.html' title='Blog has been migrated! 部落格搬家囉!'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-8987464447812550576</id><published>2021-04-07T11:05:00.001+08:00</published><updated>2021-04-07T11:08:00.892+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Data Mining"/><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning"/><title type='text'>Logistics regression in Chinese</title><content type='html'>&lt;font face=&quot;Arial&quot;&gt;Here are recommended posts in Chinese for understanding logistics regressions. The readers can read them step by step.&amp;nbsp;&lt;/font&gt;&lt;div&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font face=&quot;Arial&quot;&gt;1.&amp;nbsp;&lt;span style=&quot;letter-spacing: -0.016em; -webkit-text-size-adjust: auto;&quot;&gt;機器/統計學習:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;bx&quot; style=&quot;letter-spacing: -0.016em; -webkit-text-size-adjust: auto; box-sizing: inherit;&quot;&gt;羅吉斯回歸(Logistic regression), URL:&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8-%E7%B5%B1%E8%A8%88%E5%AD%B8%E7%BF%92-%E7%BE%85%E5%90%89%E6%96%AF%E5%9B%9E%E6%AD%B8-logistic-regression-aff7a830fb5d&quot;&gt;https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8-%E7%B5%B1%E8%A8%88%E5%AD%B8%E7%BF%92-%E7%BE%85%E5%90%89%E6%96%AF%E5%9B%9E%E6%AD%B8-logistic-regression-aff7a830fb5d&lt;/a&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font face=&quot;Arial&quot;&gt;2. 你可能不知道的邏輯回歸(Logistics Regression), URL:&amp;nbsp;&lt;a href=&quot;https://taweihuang.hpd.io/2017/12/22/logreg101/&quot;&gt;https://taweihuang.hpd.io/2017/12/22/logreg101/&lt;/a&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/8987464447812550576/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2021/04/logistics-regression-in-chinese.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/8987464447812550576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/8987464447812550576'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2021/04/logistics-regression-in-chinese.html' title='Logistics regression in Chinese'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-8147772749719817297</id><published>2020-08-05T13:35:00.001+08:00</published><updated>2020-08-05T13:35:45.238+08:00</updated><title type='text'>科技的進步，學無止境</title><content type='html'>在2006年左右，我還在唸嘉義大學數學系時，跟同學分工合作，用PHP 5+Dreamweaver 寫學校處室網站，那時候學校IT不給MySQL/Sql Server，我自己還默默用很簡單的檔案系統處理函數，定義好資料結構，一行一行把「最新消息」等訊息，存在單一檔案作為offline database使用（那時候學藝不精，不知道有Sqlite可以用）。就這樣把學校處室的消息發布功能做了出來，還具備CRUD功能。&amp;nbsp;&lt;div&gt;在那個大學年代，身兼學校的BBS系統站長，在那邊辛苦學習FreeBSD , Linux⋯當起MIS，三不五時就是去修伺服器，怎麼用fsck修硬碟, Make tools, build kernel 還自己去學怎麼剪RJ 45網路線，讓Server可以正常運作（可見那時候多窮，還要自己剪網路線）。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;就這樣懵懵懂懂地大學畢業。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;碩士班時期&lt;/b&gt;，實驗室還沒有積累一些關於data mining智慧資產，自己寫了一些演算法，像是PrefixSpan sequential pattern mining. 為了求效能，還全部用C++搭配STL寫。自己排crontab job，搭配bash script來產生自己要的實驗記錄。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;博士班時期&lt;/b&gt;，老實說蠻精彩的。&lt;/div&gt;&lt;div&gt;當了三年的兼任助理，幫忙編hadoop教材...。為了自己的生計，還幫學校處室架設Wordpress，改別人的theme，甚至去看wordpress template怎麼寫，修掉別人模板的bug。也稍微懂得怎麼調整Apache的參數讓系統效能能夠跟得上來。&lt;/div&gt;&lt;div&gt;因為過去都用PHP寫網站，也順便接了幾個案子，像是做一些報名系統，多語系網站建置。&lt;/div&gt;&lt;div&gt;去當了幾家公司的兼任工程師，都是以C# + ASP.Net/MVC 作為主要工作技能。&lt;/div&gt;&lt;div&gt;曾經接了某個專利事務所的案子，幫別人寫Chrome外掛（後續做得不錯，顧客還有回鍋要我再幫忙開發，但是要顧學業，就婉拒了。）&lt;/div&gt;&lt;div&gt;曾幫博弈平台公司維護模組（這期間眼睛也去動手術了）。&lt;/div&gt;&lt;div&gt;為了打軟體競賽，還去用MongoDB，寫寫jQuery and Bootstrap。&lt;/div&gt;&lt;div&gt;為了做某公司的軟體專案，自己去玩Zebra ZPL印表機語言, WCF跟實作軟體序號與數位簽章演算法。&lt;/div&gt;&lt;div&gt;為了幫德國實驗室的同事做Big Data Benchmark，學怎麼用HBase &amp;amp; MapReduce API來做一些ETL工作（後來這也成為我的論文參考文獻之一）。&lt;/div&gt;&lt;div&gt;那時候政府還很流行Open Data，就去學架設CKAN，以及去研究HTTP協議，寫一些CKAN的prototype plugin。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;出社會工作了，這些學到的技能也逐漸成為我的技術基石，不過是這些都是後話了。&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/8147772749719817297/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2020/08/blog-post.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/8147772749719817297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/8147772749719817297'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2020/08/blog-post.html' title='科技的進步，學無止境'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-453829547190703319</id><published>2020-07-27T12:49:00.001+08:00</published><updated>2020-07-27T12:49:30.476+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="Raspberry Pi"/><title type='text'>Raspberry Pi Camera + OpenCV</title><content type='html'>If you are interested in how to use Raspberry Pi Camera + OpenCV to capture images, here is a great post in Chinese.&amp;nbsp;&lt;div&gt;&lt;a href=&quot;https://link.medium.com/k2aEqonas8&quot;&gt;https://link.medium.com/k2aEqonas8&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;However, the post had something wrong. If you want to install OpenCV packages of Python 3, please use the command “&lt;i&gt;apt-get install python3-opencv&lt;/i&gt;”.&amp;nbsp;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/453829547190703319/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2020/07/raspberry-pi-camera-opencv.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/453829547190703319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/453829547190703319'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2020/07/raspberry-pi-camera-opencv.html' title='Raspberry Pi Camera + OpenCV'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-2901282270864805612</id><published>2020-06-25T07:08:00.000+08:00</published><updated>2020-07-06T04:38:58.097+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="FFMPEG"/><title type='text'>FFMPEG: Decode and then encode frames to JPEG images</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=1918621439400142370&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;I&#39;ve used FFMPEG library for a while. Actually, the FFMPEG library&#39;s decoding process flow can be described as the following picture. If you want to read the videos and then save to jpeg file, you can take a look on my programming code (tested on FFMPEG ver. 4 library).&lt;br&gt;
&lt;img alt=&quot;&quot; height=&quot;160&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABJwAAAHZCAYAAADDgyGkAAAgAElEQVR4Aeyd+XcUVd7/+8/4/ugzhwSOYI6sB+Z5HE8A9xmPDvqghiWs8zzOjDPDoo/oKA6uLAYRRxERwxYIYQkhQQRERUARiCwJS4OgyCrIDgECn+9536pbXVVd1V3V6XR3knefk/RSt+699aruvlWv/txPRYQ3EiABEiABEiABEiABEiABEiABEiABEiABEkgjgUga62JVJEACJEACJEACJEACJEACJEACJEACJEACJCAUTnwTkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJpJUAhVNacbIyEiABEiABEiABEiABEiABEiABEiABEiABCie+B0iABEiABEiABEiABEiABEiABEiABEiABNJKgMIprThZGQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAIUT3wMkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJpJUDhlFacrIwESIAESIAESIAESIAESIAESIAESIAESIDCie8BEiABEiABEiABEiABEiABEiABEiABEiCBtBKgcEorTlZGAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRA4cT3AAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQFoJUDilFScrIwESIAESIAESIAESIAESIAESIAESIAESoHDie4AESIAESIAESIAESIAESIAESIAESIAESCCtBCic0oqTlZEACZAACZAACZAACZAACZAACZAACZAACVA48T1AAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQVgIUTmnFaassGpWo7WnSh9Gp0isSkUivKVLX0CCNjY1JV2EBEiABEiABEiABEiABEiABEiABEiABEshFAjkknGpk6m8jEoF0ifSUYct3y/Xr1+XWrVsJuEWlZqReJyI9J+2Wa9euJVknQXW2RdGpvzX6MqxSGhoa5ObNm7al9odRs9+9ZHJdg9F+9UhzO4bJ0kuXAmyHiGjh1OUlqdqxQ06cOEHpZMesHmvWxj4ftvxq2vZ3XFN8gQRIgARIgARIgARIgARIgARIgARIIGUCOSWcRijZpAXSozJz3z65fPmyv0Cq0WLHWOeOUUtlz549ShClTESvGJ0qPVV/HpPptbVy/vx5735oUdRtglR9/70cOHBArlUON4RTwRiZt369/Pjj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BEiABHKTAIVTbu4X9ooESIAESIAESIAESIAESIAESIAESIAEWiwBCqcWu+vYcRIgARIgARIgARIgARIgARIgARIgARLITQIUTrm5X9grEiABEiABEiABEiABEiABEiABEiABEmixBCicWuyuY8dJgARIgARIgARIgARIgARIgARIgARIIDcJUDjl5n5hr0iABEiABEiABEiABEiABEiABEiABEigxRKgcGqxu44dJwESIAESIAESIAESIAESIAESIAESIIHcJEDhlJv7hb0iARIgARIgARIgARIgARIgARIgARIggRZLgMKpxe46dpwESIAESIAESIAESIAESIAESIAESIAEcpMAhVNu7hf2igRIgARIgARIgARIgARIgARIgARIgARaLIFmE07Hjx+X2tpaWb9+vaxZs0Zmz56t/t544w15+eWX+UcGGX8PTJgwwXofVlVVqffm5s2b5ciRIy32A8yOkwAJkAAJkAAJkAAJkAAJkAAJkEAuEkircDp06JDgRL6kpETef/99WbZsmTqp37Bhg2AZ/q5evZqLHNinNkDgxo0b1vvwu+++U+/NVatWycyZMwUiFO/XPXv2CMrxRgIkQAIkQAIkQAIkQAIkQAIkQAIkkDqBJgsnCCSctOOEHVFMOJE/e/Zs6j3imiSQBQJ4HyMir6yszJJPfB9nYUewSRIgARIgARIgARIgARIgARIggVZBIGXhhCgQTJdDNBOmJTFyqVW8H7gRIirCCfLp3XffVTKV722+LUiABEiABEiABEiABEiABEiABEggHIGUhBOimCCaIJx4Mh4OOEu3HAKQqpCp+r3ecnrOnpIACZAACZAACZAACZAACZAACZBAdgmEEk44AV+8eLHK03Tx4sXs9pytk0CGCECqQq5iyigFa4agsxkSIAESIAESIAESIAESIAESIIEWTSCwcIJgwgn3rl274jZ4x5GLsmTbKXl15WEZUbpXimbW8c9kUPxxveKycMtJ2XTgXBy7VF84fuGQ7D6xSdYfXCxLd78ni3a8zb8mMqjYOU3x3Hl8g/x4dm/crkHSeyQY/+WXX+KW8QUSIAESIAESIAESIAESIAESIAESIIEYgUDC6fjx4+qqc+7Lx1++1ijTP/+ZcimEYHu58gc5erYhtgdCPrre2CCbf6ymXGqiXAoi6NZGy+R8wxnHHoJsgnSKRqOO1/mEBEiABEiABEiABEiABEiABEiABEggRiCpcIJkwgm2ewrduSs35O8L91M2hZBNOvILUU+HT1+N7YWAj67euCQr93xE2ZQB2aSFFKKezl455dhDmFaHq9lROjmw8AkJkAAJkAAJkAAJkAAJkAAJkAAJWAQSCidIpvfffz9ONmHtkjU/UTalIJu0dBq39KBcb7xl7YggD74+vIKyKYOySUun1fvnSuOtG45dhHxm+Gxwep0DC5+QAAmQAAmQAAmQAAmQAAmQAAmQgCLgK5xwQo2cTe5pdFjru0MXKJuaIJu0dFq163Tgt+HP56KUTVmQTVo67Tu1LW5fnT17VkknJhKPQ8MXSIAESIAESIAESIAESIAESIAE2jgBX+GEq9F5JQgHr7mbT1A4pUE4IUos6K322BcUTlkUTogu87ohkfjcuXMFgpY3EiABEiABEiABEiABEiABEiABEiABg4CncPruu++kqqrKlxESX+soHd6nfkW+p+ft82XsXoAE1jrahveZvyJfZd0M9y6xnm/YsEHWrFljPecDEiABEiABEiABEiABEiABEiABEmjrBOKEEyI1SkpKPPM2aVhIek3RlLposrPTTJPdI3k1RVPmRZOdud8+CvKZ8VuXr5MACZAACZAACZAACZAACZAACZBAayQQJ5wQqYGIjUQ3uzDh46aJp0Sc7cvs4oOPsyOe7PvD/RjTTzENlTcSIAESIAESIAESIAESIAESIAESIAERh3DCVekQ3ZQsHw0lU9Mkk51f0DchJVN2JJOde7J9havWHT9+PFkxLicBEiABEiABEiABEiABEiABEiCBVk/AIZxWrVolmzdvTrrRdmHCx02TT0lhmwXs4oOPsyOfku2rPXv2SFlZWbJiXE4CJEACJEACJEACJEACJEACJEACrZ6AJZwQ1fTGG28kjW4CEUqmpkkmO7+g7zBKpuxIJjv3IPsKEYJnz54NUpRlSIAESIAESIAESIAESIAESIAESKDVErCEUzQaVZd3D7KldmHCx02TT0F4o4xdfPBxduRTkH2FqzviKo+8kQAJkAAJkAAJkAAJkAAJkAAJkEBbJmAJp2XLlkltbW0gFpRMTZNMdn6BgFM45YRwC7KvDh06JLNnzw5SlGVIgARIgARIgARIgARIgARIgARIoNUSsITTpEmTBEnDg9zswoSPmyafgvBGGUY1ZSeqyc49yL7C1FR8lq5evRqkOMuQAAmQAAmQAAmQAAmQAAmQAAmQQKskoIRT2KiMFieZKk7JMRE5VhvNufxTQd9VdvHBx9mRT0H3VZhowaB1shwJkAAJkAAJkAAJkAAJkAAJkAAJtCQCSjjhynS4Ql3QWzqF03uH4lvduq5pUUNx/aNwMiKk9n0j5zXuq9/I6h2Jxc3mc7rwGanbl7hszkmwH6O683Lkx/T03aowyYOwn6ck1XExCZAACZAACZAACZAACZAACZAACbQ4Ako4rVmzRjZs2BC483FCZ2YKgsiUQHL2lDzvWP+IbBWRtEonCidDONkkDHZ2QhFjl1PS0oRTtRyxvZsTbmcS6WYXabYqEz7ctWuXLF68OGEZLiQBEiABEiABEiABEiABEiABEiCB1kxACaewU4CaLpwMqRQvm1IQVw5Z5bM+hZNDOJ0/8Y0hZM5V++aGMqKbolJ34oxICxNOq1Wfo7LZFGyZFk5hp6i25i8YbhsJkAAJkAAJkAAJkAAJkAAJkEDbJKCEE66qhZPkoLemCqfnaxtUU2GimOKn3p2X9zxlkymz9MYcOiJFvsLJVdY3sioqlWd1hcZ9uvJBOWv1f2aPtEn5sSlgzp+YI4ZQ8otcMiOEzlWLIW+c5Syhs+Ntc7nut7NcrJ/OiCOU9pRArggsXatvea/oJDMyC9u4KEvC6ezZs1JSUmLvPh+TAAmQAAmQAAmQAAmQAAmQAAmQQJsioIQTTo5xkhz01jThpOWNnzByRyl5RUPpOhqkssJePr6sXVQ5JJGe0gchZYorbxEWX2fRTLzmbtvej+CPgzKPyZsm5COyCSctY5SYcYkbu2SyP9Z90K+dx4XYbFFSnhJLT82zlTPWd0kne99Uf7SkispmV/90P7zuVR90fqosCSfs05dffjnormU5EiABEiABEiABEiABEiABEiABEmh1BJRwmjBhguBy7kFvWtCkdu8lcPwFjSGMvOSOWY9NGPmV1dLJLpzUa3H5o0yRZXvdr87Utj1+O4My95IroV9zSJ05UgdhJG6hY75uShstl+xJw7UwEi12LCEUi4zSfXMIIKucs41FO9zPDanm1bau1/PeLZjcz632U5N2QfcVylE4haHFsiRAAkEJREt6SSQSUX/Fi89JQ0OD3Lp1y1rdWl5cIZcvX5abN29ay5wPolLSC/X0kDdqz8v169fNxVGpHtFLepptoK3u3YvljYpauXr1aoL6nLXzGQmQAAmQAAmQAAmQAAko4RT25LhpsiWMcIoXQPa2DRmkI6USlI2bUhcvq3S9gev0nM4XL5R0vX73Qd+CnoIlrEBxCKfYdDjH9DaXpPGSPlo4OdZTfXFLrHgBpbfDiIbSsstbOOkorPh2vISRR+WQaAoAACAASURBVB2ubdFtp3ofdF+hXNjPVJi6WZYESKCtEojKFCWJDOEU6TtOcJGCa9euWUCu10+RzkoW3SuTNmyQS5cuWcscD6JTpQfKdfyzfFBZKceOHZObN6tlhBZNd9wh99xzj/Tpk28Jrkff2aKioQ2JpYVVT5m483KoH60c/eATEiABEiABEiABEiCBVksgx4WTvxiCwHFGHyUo6xZOejqd727VEitBna1AOC3aYQohW6SSUwRpKeXMzeQvnN42c0OZIklPp/PlnFg4eckuP1nkWZbCyZc8F5AACbRAAloS/f73cpcSQ/8lr1RXy/nz562NaWzcK+O7GkKqz7ML5MSJE55RSfvNSKm8AVOkvLxcTp8+Lfq1yIMTZM6cOVJRUSG4iu2nsybIkPbt5Z4Xl8j+/fvNaKioTO6Jdu6Uv5Z9JSdPnpTGxkarH3xAAiRAAiRAAiRAAiRAAlkQTjr/kpY6iaKCEgsfT+Fkmw5nRRX5CSfbdDyrrEMkJW7fe51E2xO/LOhb0E+0hHrdFeGEdQ3BZAole8JtM3rKS+SEFk62/E2+/Y2TQ/EyTEc8OZipun0iqeLq9IqMCv6ao90kTxjhlAQQF5MACYQmoKfL9R1XLs/1MaRS77Hz5Mcff3TInto3ehhRSYWjZMeOHY4IKKNRLYsKpGjSHPnyyy/l8uWdpkCKSOGYObJixQo5evSoXLx4Uf0pIbV/v00sRWWiEk6dZFBJmRw8eJBRTqH3KFcgARIgARIgARIggdZNIAvCyR2ZFC9hYiLHFD5eEsmKcNLiKj1T6mJto1+J23eWTbQd/suCvr18RU2YaXUewklLHL8r14UTTu5pbT4iKK7Per0zEvud3pmQPOH2m9uVjGWwqXn+AipZ/fblFE52GnxMAiTQdAJaEj0mY+fNk68m/cGQSnlFUr55s8qvpNtoqJssBSoC6m6Z8OmncuHCBb3IuNeRUh1GyuS5c1XUEvI4Lh9qSKx2T02UTZs2yZUrV6z1kCcKeZ4QxVQ90iinc0nZ75FXClP8bkVLpFckIj3erJUruybKcD0VsPvrUnHhghV1Fa2ZGlum+txdit+okF1XrlhldCduRaOyYngvYyqgOfUP+aXerL1gtGnLZSXRqbb2l8uU4bHcV5HuxVJRe0Ftz61otYzQfUO+quLXZeelSw6Bp9vnPQmQAAmQAAmQAAmQQDgCWRFORXpKW9IIo0RyKj76yBnxFJM8xusisaThwaOs/OpMh2xCHUFvCYVLnMDxkSZewkkn7NYdcUUjJRJO9ivUqf7pKXRWHaZIiktM7u6fIaa8rpjXpO1mhJPeq7wnARJo6QRqRhqC6YEJUlZWJocPfyn/7ALxkydD31sqv/76q5U8/ObN/da0ut7PzjfzM8WSh+upc1iGaXN63SvLh5r5mtrJQ6+VqnxN9oTkGmH9iinSv39/aW9Kn//4z/+Uu+++W3r3Higvvb9cDh8+LNfqJ0v3SEQ6PPCAdDLL3X47+ttXxq9cqSSYjtiKRLpIx4ceUjmj8s2ykTv+Lt/+8ktM/NRMtRKZd+xolO2br/NLdZDnP61Xgkz39+b+EqP9++832+8iDz/8sNzbXsuy+2XcuP7G9nbpIg899JDk55vLOj4tG44cYcSW3uG8JwESIAESIAESIIEUCWRHOGHa2jozliUueskQSZYc0nLKUc5HGOmyNpGlhNHZBjkmduFUJ5b0ctRbJ8/XNojY1vcuZ7S/dV1MaqUqoILutyaJFy2kPIWTztNk9MQdBZRQOGGVOLnkzPe0SEsoW54obIuqN25dDxqu9UJxoHDyAMqXSIAEWiKBqhGQIV3V9LWVK1fKuXPnZPvr3ZUwySuaZEUp6W2rfTM2ra62tlZdzc5YViPDlNTpJ2PmzpWNGzdakUyIYPqwf2dTOqG9O2Twoq1Sj4glW/QQoqEgvP5HCaR28vgr78uiRYsE/Vq3bp0cOXJECaeuWh7lF8u7ixfLwoULZfny5bJq1Sq5UPumIZDufFbeWbRIli5dqqb2bdy4SP71gCF+HvjXKpVbCm03Vo2QrkXjZfyHVaoOTANEFNacpzsa/e3znOzbt8+62h6Ek9V+3/+Tfy9bJkuWLJFPP50lQy3pFJFOzyxUr2PZqlX/kntUn9vJiA+rfIWbZsx7EiABEiABEiABEiCBxASyJ5xUriQzSsnVx3iRowWTraBdCtnzLmnpZBY1xJVLYlnlPdr3rDe+nCXErLpSk0+2LUr4MJRo0YLJfe8jnLySh+v2EgknyCkjB5Tuuk4C7h3BpEupe0s2GWVVO3FyySOPk3ubEj2ncHIg5xMSIIGWSsCURHeMUlPgvvvuOzWF7uruSXIHBEm7p2SBysN02drAa9cq5TElTwrllZqa2LQ6K1LqFZk3b54cOHDAiuSB2MH0u7JJf5XCPDPaR9Vxpwwu32ZMQbt1S8mn69fr5dXuKHO7FE0sVVfLO3v2rLoqnpp6t/dtU/gUyl8++ECWLVum2kIZtLFiuFE/EpEjygpRUbiiHqbxnfp2gtyOdnuPES3LcGU8rBuNRpWEunz5sip7dvvrBoPCUUp24XXcLOGUVyQTZsxQOamQ6wptf/OvboakuusvUlpaKmvXrlVRYFj29fiuahnyWCFBOuQabyRAAiRAAiRAAiRAAqkRyLJwSk3SpBpNlIvrBd1tWgDlwr0hoUTc0VAp9y2BGPISXim3k0hOBVgWdF+hHHM4haHFsiRAAgkJmJKow/AZMn/+fBVBhFxK9ivS9X1+kfzyyy9WJBIEzYKBhtRBYnEkAMdr1SpSKiK4gh2ijSBx7DeUUdFT27fLtGnj5O52MfHUedxntmlrOml4RxkwZZ4SQXY5YwmfwlHy8ccfy549e2xRVjofVUTyevdWU92GDBkiw4cPV39Dh/Y0hFC7p+Tj1atV0nL0Edt8vb5eqqtLZOTIkTJixAgZNswsWzhaKisrLbEWa3+0zJ07V3744Qcr+qmhcpiqv92TbyoGuJKfvsLerolGfYga27p1q63Pdkp8TAIkQAIkQAIkQAIkEIQAhVMTI5SaKrGC7CSUyZZk8Wo33cIpUX2Oq+gFkEJe/U3Xa0H3FcpROIWhxbIkQAKJCBjT6SKSl9db7rvvPhk8eLAlZwarKKOIRApHS319vSVVUN/FpUMMcVM4yowUqnRMp/vmm28cycZ1HxDpdPXqVYGI2bJli0wr1rmSessHdXXmVe+CCqfRarrdmTNnLBkmoteNySx74nHrcbsn5L2lS+X8eUzBj0rJSFvibxV5ZVv/d39XkVKQZbjFhNMYKS8vd4i16yuGKy55AyarqChEVulb3WRTOA2YLH58dFnekwAJkAAJkAAJkAAJJCZA4UThFFpmJRJEKckdnzxP+gp6sTxR7ql6mX2e+KPkXErh5OTBZyRAAikSiMaSZVsixi1b1PPfyetr11rRQGgN0+oeV8vMaXUVpoB6YIIsWLBAMMVMR/Z49Q7RTpjidvToXHlQ1fMbGTJ9iRjySEujZBFOY2Tx4sUqairWRlTe6gFZdLv894QZamofcighj5P+wzroI3JCQQhZV8br/IK8XrpW5V1CmfJpxZKHvv3XXxzt2IWTu/0bVVo4TZH169eLnoaH/tVbwmkKhVNsh/ERCZAACZAACZAACaREgMKJwin7wklFLpn5mlxv47RN20tDdJSrawmfUjglxMOFJEACAQnoK7m1H/KuzJgxQ+bMmaMihhC1g79Fi96RIjPfEqbJHT9+XE2dQ/WIVCobZEQB5Q2YInOKjMeYfqcTjwfpRmNjlQxQwilP5Wv66aef1HS+iT1RXyrCSWTpUKMvhaNLZfv27XLq1Cl1tTxcMU//YbrfxYsXBVfdm9IL5btI8buL1XZv3rxZJQnf99k4I4fT7/5O4RRkZ7IMCZAACZAACZAACWSQAIUThVNo4ZRSFFMahE+22w3zuaRwCkOLZUmABLwJRE3R0lmKJs1Ribd3796t8iUhebb+q37uTmPq3N166lyDVd2lpUONZXmF8iik0R2jZMq8eaITj1sFo1OlV6+RMqVqj23qG5ZGpWakIYci+YNkYmmpGMKpUZaZ0qj3mLkqRxOShetboggjlLmyXPerSJZ55EqK1kyVmqiuTUdTdVIckFsJCb6RuLzSTD6OKYX2SKZE7TPCSXPlPQmQAAmQAAmQAAk0LwEKJwonCqeAMizMR5HCKQwtliUBEvAkEJ0qPSCJOv5ZiR5EAmH6F5Jz2/8uXVpqyKRIOxk5q8bMeWTUeP36CumvopMMadR+yHQpKytTScQd0+ncU/d69pSePc2E3Gr9zvLUxE9UdBEikHDTCbYjkTx55JFHZEiPHjJ8xXU1Ta9RX6Wu0GtKnahcUx/2N0VWJCLdug1UealGjIjlaRq6/IrKF4VIrR1v9TDEWaSdFPTrJ0gs3su2XZG7/0Hh5Pkm4oskQAIkQAIkQAIkkD0CFE4UThROFE7Z+wZiyyRAAr4E9HS6/EElKs+RvtKcewWIo7kDDHmDRNhHjhyxcjNB1nz7andT1vxG+r82U1atWmVdzc1e19nt5TLi/g7S3i5yIp3ljkenyrTycnW1t23btllXbrt27Zr8+zEzukqt80cZt3qvnD59Wq7XT5GueM1HOKFfSPD9yWsPSp45JdDIUdVVunZ9Sv5dXS2bNm2Sw4cPKzmFXFLlf39E2tn61rVrkUxbPk3uwWt3/cU3abg98gnbywgn+17nYxIgARIgARIgARJoPgIpCadxSw9KU6/OxvXrZETp3sB7dvX+uRRDAcVQc0y9W7r7vcD7CgUZ4RQKFwuTAAl4EEAU0w8//KBEypo1azwlkV4NU8xQZtGiRYJpd5BB+oaoqI0bNyphhETcO3bssKSRLoN7XJkOQgm5oebNmyfz589XibsREVVRUaGuWId2IItwwz3kEvJBlZaWqnWWLVsmBw8eVO3jKndIBl5dXe3Zd4iyY8eOydq1a1U7CxcuFP2H7UC9SGwODkhgfvLkSfn0009VO+gT+llZWSkbNmxQycbtIg3l/dpHfYcOHVLrQGpBZukbuOFqf0hejoiyhobY9ERdhvckQAIkQAIkQAIkQALBCKQknGZ8eZTCKQ2RUa+uPBxsL4nIliOrKZyyKJzWH1wceF+hIIVTKFwsTAIk4EEA0uT8+fNKuiCptmMKnKs8lqEMIoJwFTl7WdSDBNyQVxAtSMStpZG9GrwG+QKxA+myZcsWlesJuaJQN5a510M7aG/v3r2C3EpYD1eV03VBGEEqQfJ43bA+JBb6XVdXp9qE9Dpw4IBKHo68ULpNlEVUFLajtrZWtYUk6Vgf0V/udtBfr/ZRHxhgmZsrWKENLHNz9Oo/XyMBEiABEiABEiABEvAnkJJwWlv/K4VTGoTTwi0n/feMa8mB0zsonLIonHYe3+DaI4mfUjgl5sOlJEACwQhAgEC04D7ZLVFZSBZIH9SlBY5ffagHkT6IeMIf1ku0DpZBDKEs1tNlcY/28JfshjK6TUQVJWoTy1AG5dFXv3b8XkdfEi1LxDHZdnA5CZAACZAACZAACZBAjEBKwul64y0Zu/gApVMTpNPT8/bJuSvev/jGdk/sUeOtG7Jq7yeUTlmQTpV1M+TqjUuxnRHgEYVTAEgsQgIkQAIkQAIkQAIkQAIkQAIk0GoJpCScQCN68gqFUxOE05f7zoZ+U52+fIzCKQvC6Yczu0PvKwqn0Mi4AgmQAAmQAAmQAAmQAAmQAAmQQCsikLJwAoMdRy4KInWYALwuMAMkCk9FNun33PELhwQRN82RGJt1vu3gikThqcgm7CsKJ/2O5T0JkAAJkAAJkAAJkAAJkAAJkEBbJNAk4QRgl681CnIRIQE2xZO/eHq58gf5+OtjoabR+b0hrzc2CHIKIZE1JZFTEqWDx9pomWz9eW3oaXT2/UXhZKfBxyRAAiRAAiRAAiRAAiRAAiRAAm2NQJOFU1sDxu0lgSAEKJyCUGIZEiABEiABEiABEiABEiABEiCB1kqAwqm17lluV1YJUDhlFT8bJwESIAESIAESIAESIAESIAESyDIBCqcs7wA23zoJUDi1zv3KrSIBEiABEiABEiABEiABEiABEghGgMIpGCeWIoFQBCicQuFiYRIgARIgARIgARIgARIgARIggVZGgMKple1Qbk5uEKBwyo39wF6QAAmQAAmQAAmQAAmQAAmQQFMJDJu4RAr/8RH/QjAAs7QIpx1HLsqSbafUlepGlO7l1epmxq5WV/xxveKCK/ltOnCuqe9za/3jFw7J7hOb1JXqlu5+j1er29H0q9VV7JymeOIKgD+e3WuxTuUBhVMq1LgOCeQeAY5vsfHMfSXa5hrf8C7gGNf0Mc1+1dZ0jm+59yllj0iABEiABEig+QlANn2/fTv/QjAAsyYJp8vXGmX65z9TMNkEk/uA3P385cof5OjZhpQ/EdcbG2Tzj9UUTGkQTPaDca/Ha6Nlcr7hTEr7isIpJWxciQRyhgDHN3/R5B7X9POmjm/Y+Rzj0iuavMY2vNaU8S1nPqTsCAmQAAmQAAlkkACFU3jZ1iThdO7KDfn7wv2UTSFkkz4ox6/Ch09fDf3xuHrjkqzc8xFlUwZkkz5Ix6/CZ6+cCr2vKJxCI+MKJJAzBDi+hZdNTR3fsPM5xmVGNjV1fMuZDyo7QgIkQAIkQAIZJEDhlGHhVLLmJ8qmFGSTPigft/SgXG+8Feoj8vXhFZRNGZRN+qB89f650njrRqh9ReEUChcLk0BOEeD4lrpwwhiXyviGNwDHuMwKJ4xxqYxvOfVhZWdIgARIgARIIEMEKJwyKJy+O3SBsqkJsklLp1W7Tgf+ePx8LkrZlAXZpKXTvlPbAu8rFKRwCoWLhUkgZwhwfGuabEplfMPO5xiXedmU6viWMx9WdoQESIAESIAEMkiAwimDwmnu5hMUTmkQTvgVPeit9tgXFE5ZFE745T3MjcIpDC2WJYHcIcDxLT3CKcz4hr3PMS57wins+JY7n1b2hARIgARIgAQyR4DCKYPCCYlB9a+YvE/94PzpefsCf0KQ4FP/Gsn7zB+YV9bNCLyvUJDCKRQuFiaBnCHA8S31Mc1+PBBmfMPO5xiX+XFNH0uEHd9y5sPKjpAACZAACZBABglQOGVQOCHptf3Ako9TP0AP+hlB8mp9cMj77ByYB91XKEfhFIYWy5JA7hDg+Jb6eOY+FgizVznGZWdc08cTYfYVy5IACZAACZBAWyRA4ZRB4eQ+qOTz1A/Qg35Y9UEh77N3UB50X6EchVMYWixLArlDgONZ6uOZm12YvcqxLXtjG9jzRgIkQAIkQAIkkJgAhROFU4uMukr8to4t5cF4dg/Gwx6QUzjF3rt8RAItiYBbmvB56gIqzH7nGJfdMS7MvmJZEiABEiABEmiLBCicKJwonLKYVLstnCyE+WKlcApDi2VJIHcIUDClLpjc7MLs1bYwhuTyNobZVyxLAiRAAiRAAm2RAIUThROFE4VTs+a5CvPFmovCqbGxUfB38+ZNz03Ryz0X2l68deuWZz1Y/8aNG3F/eB3r8BYjoFnhnrfcIuCWJnyeuoAKs2dzWca0hb6F2VcsSwIkQAIkQAJtkQCFE4UThROFE4WTx7d/dOpvJRKJqL8nZx+SU6dOKWGki1rLi+bIzz//LNeuXdOLXPdRKemFenrIy1/+KL/88os0NlbJSLNu3Ybz/gmZfeiQXLhwoW1Lp2iNlIzoJT3trLp0kS5PvSTl236Vq1ev+opA107g02YmQMGUumByswuzq9qC1MnlbQyzr1iWBEiABEiABNoiAQonCicKJwonCqe4b38tiQzhFCkcJStWrJCzZ8/GBFB0qvRQIuQ+Gbd4sRw5csQhpKwqo1MNYXLns/Lu4sXyzTffyJUry2W4lij5+ZKXl+f6GygvLlki9fX1CUSW1UILexCVqb8F117yRu15uXLlSoypbUssoWdyat++vWIUE3P3yDtbtqh94hd9ZqsuTQ+D9T1NjdmqyVa7ti4keeiWJnyeuoBKgtqxOJdlTFvom2Nn8AkJkAAJkAAJkEAcgVYhnKb1k0ikn0zfHl4efZ/COmAWAcmw0394AJ76AbibXdw72eeFtnDAm+vb6LNrPF8O+5nyrCQdL2pJ9PjjcrcSHv8lo2bPlv3798v169fNFqLyVg9DSN39j4+VSELEjfumxUmHkbOktLRUSaTr11fIMFXvo/KPjz+WJUuWyIYNG1QdEFL427Ztmxw7dsxbYrkbaVHPo/K2ivjqKsNnrJAtW7Yo6eTYhJqRVnTZfS9/IHPmzJGlS5fKunXrZOPGjTJnzhvSN79Ynl+0SL7//ntpaGhwrN58TwL0vVkaz1a7wTfG/R3N56mPd8GpS7P+WJDrY0su9C/MvmJZEiABEiABEmiLBFISTkrwRCTSb5poYTO9X0QiBWOkykPgqGW2slhHvaZ/4Me9a7muN9A9hVPiA9vna42TsWO10eTRTBWn5JiIBCo7M3G7zXnCEfTDmgsHpG29D0H3FcrlinDSkujB1z6TUYWmVBo1W7744gu5dOmStUn1k3saYqRwlCxbtkxF21gL1QMdKdVVBkyZJ4sWLVJT6m7dqraE0+jSUiWbED0FYWX/Q24nr5vOB5UszxPK6egfr3Xsy9GOvYy7XbSVrD2sg/Z0TirvXEtRmdwTTDvLgMlzlUQ6f/68Wsfoa4013fD+8VUye/Zs+fzzz+XEiROKPSKisA/wHFIOUWBewsm+LXjsd/NjoLk510vWd2dpPEM9ml380thyr2W6b7duhW/Xq77mfK05v+8T1d2Wxzfsz7Y+vmR7+5vzM9XUuvHdk+i7r6n1W+tHp0ovHMj3eEN2XrpkjTnWcj4gARIgARJo0wRSEU6QRY/1c0UVKelTIGMr3VFG0+SxSEQem6ZfN567BRPqLBhTaQmsQKJJy622JJz0wfXWdQlkz7rz6k2tpZFeRz9PdPBeROGU+gH8j1HF/fyJOZ51rD5xRi0/8qPzMs76dfs3kbuM+6B68zl7aeOxX7tqXbNvKJmsbndbTX0e31P/V3JDOGlJNEBF0Cx/6V5DKuUNlHcWLVK5nPRB/K1oiXRT5ryvQBwdOHBAiRNrC3WkVMFYmVhaKuvXrzeFVY1DOCGiySs6yqpHRKI1U2V4r15W5A+mlnXp8qSUfXtKLl686IyEMk8Aur++XU5+M0GGKcETkUiXl2T24cNyaedb6gTBWF4mk4eb4gzb0uVJKf3qJ5U/6ub+ahmhopEM6dblyZfk219+iZsGdysalRXDe5lTDM2yXZ6Q8RuOiJZJ2Jaakcay2LS42PMnZx2U06dPS2PVCGMbC0bLxE8+UVMZkffKLYDwHKIJf3p/pM4onsH4jUdV37U0C9R3M5m50Y/YtkUiXaRofKls+/XXWH/1SVpksMw9elTtQ70doiO8Bi2UeQPs9TgfW8xyIIl6wnEl4I8Teqzi+Gb/5Cd+3NTv58Drc3zzHNcT753MLr0VrZYpru/hSLdu0r34dVm287JzjEhj1xr3vi1dMXa0HyZlX30lly9fTmPtrIoESIAESKClEwgtnCrHSIGavlYpYwviRVKcNHLJIBXZ5BMJFUoyadmEe1cbKddjrzPB4+xOqTOFkBw64hut9N4hvC0bpLIigZTyOwGgcPI8qAx0UJ7CAbmSTVe/kdW2PFJaJnkKpH3fiNKJrnUS969ajti+qSicbDC8HuqT/X7TZd68ebJly1KZ0A0n+rdL0cRS2bVrly2vkm1a3ajZaroXInD0TUdKPfBKjcydO9c2JS+ccNL1QNTc/sAD0rdvX+mTH5MPiMRC4nIrIsoUXZ3+8Adpr4RYRG6/HeX7yAsVFbK75jnpHolIbHkXefjhh+Ueq87e8uc//94QP127yoMPPij5eln+ICnftEnJGCVIasxftyMR6dDB6Fvf/HxTjOXLn2Z9Kj/99JPqG0TM4MGDpYPZp//4z/+Uu+66S3r3HiDjppXL119/LcuGGtvVfui/5eOPP3bx1mTj75vOSDPQfc+TP81aZeXmCtJ3nGjF+tFFOpj7Kt/c3kj7IbJ82zYrGfzyYeY+vGeceu9AHIrUyAhVfqCMr6qSj14ZKU888URCZrlwgpcO4aR/8OD4Fv/+9nsl8Xe/88eNJpXl+OZ5bOC3XzL9erTE+WNEfn6+4C8m9/8g85ppivaNPVOkC76z8orko+pq9f2W6e1vLe0Nm7hEcJLBv7bHAPueNxJorQTCCqeqMQXW9Df7Y0geL5mkXrOmy7mjnXTUk/vekFmxcdKVn0lJL32uVSBjx7iirbYnWd+93Oqfux/ez7MrnGZGpfIs3o7n5T1PaXREtmLx2VPyvOfyJBKKwsnzoDLQgXoKB+Te9ZqCKE4qzZE6pAiKez3xSYURQRWVzWb/KJwSf50bkSw9ZOSsGlmwYIESDrsmGhFAeUUTZfXq1Y4D6vop5oF+4WiVi+nXX381G9DiYIA8O3++VFRUCJYZUSxaON0heYWF8sgjj8iQIUNk+PDhxl/Vntj0NS3AIk/Ki9OXKAm2du1a2bp1q1SUPGqeUBTKS8uXq2lmKhLISmgekchv+sv0JUtk8eLFamrapk2b5NAXLynhpL5k73pG3lu6VE0J/PzzufLXTvrLNSIdRsxUuZOWL18uX3zxlvxeiZA8KZo0R3bs2GGIt5qR0mPoW/LmvPUqGgk5lvbs2SNVYwuMvt09SmpqapSgApgrV3apXysg8Pq/+qEsXLhQTSlELqdodK053S4ihWPmqJxXx48ftyKYfPdcUxmZDHSeqIXPdDL7/o8QfY/KtfrJxtSSLv+UdysqFPNvv/1W9uxZLdP+aHDt/ex82b59u4pow9UKi0wZ1XvsPCUkVww3yj08aYMpPLfImTNbEzCL2gSoL6FmX5AW4cTxTf2QFGZneY8hiceElNbh+OZ5bBBmXzVX2VvVsZx3vcdOUTnv70hqqQAAIABJREFU8J2NnHerVq2Sd999QXrnDZBXmkkGQTh1pnBKy+4Ne1LW3L+ws37vE8Hm4IJ9zxsJtFYC4b7bXFFNSvzYptG5n293Caa45V6fY1MW2SSQklZWUnD3cnOKnu/y7aLEmBVV5V7fEGWxKX9efXK+lmXhVCcJpx24ptOpkwDztfhpCqac0u9uRE35CidXWRGJr8+QWUaEla4U935yLIn8SiDM7LUnepzSgbUt2ijU+mk7IDfFkkRls70vqQgjMyJKRUulsr69/RQfJ9o/7mXZn1JnSqKu46VkwQKprq5WouTmfnPqXP4g9TqSeespXsjHNFhJg3uc0+q0BOk3XZ0AICl4LPpJC6eY3IkZ9ohEnvhIDh8+rKZf6alcD72+VkVJQTQh3xOmkmEa3sJBRh2Foz4RyCTVhiWc7pe/vP++lJWVyb59+5Qow/Lr9VOM6W8dRsq/PvhAiZFoNKqW73irhyWKZsyYIThxQV8QfbP9DWPZ3aNmK/FmROSISqQOMYR+qfqvX5eGusnGNIu+/6fEydGjRxUz5CMykq13VuJqzZo1cubMGbUt16/XmwnFI4LtQb9RZ7Jbkxh5MLi8c6LR9/zBMnnuXBWhZeSvStT361JtThlExNn8+fOVeEP0ERLNX909yYgC6POsEpPYZsjHq8uHGbzzimT8+PuNx/1nKtmJ95+aZti4NwGz68mFXDKAaVieHuHE8Q0cw9xCjVEpfoerNji+5ahwio0lvcfMVd+ZO3fuVD9uINcdvqPxHVJbW6sE1IULF3zfXnpM8y3gWqCnAIcRTlhHr+eqzvNpmPIoG3QbUNb4TvfP7+fuEOoOu467jmTPw52UOU9OmkOCsM7MMW5Lwqn4TUbyYX+3tb/A3ydKGNmjjQx5E5tG53runuoWRDi511FT22ziyqsO+zpey5X4MsWY5/Jw3yd4f2T3KnUJptV5TqfzFE7xkVB2UeTI9+TRnrf0iq+zyPrFOsUpfj7SKdmgrZdn7GAcB/JpOyD3jnAyptqdkbp9wX+9VuvoiCgKJ/228L83JdEd/6hQcgeRKEZCai0aIlI4ulQdvBuvG1UtN6eBQZIgwgfSRUsQTKfD1Dxnfid9kvCoPDNzpsycOVOVQUSV/luxYoWcOvWtKWC6ycCSBUpU4OTBfsC+x4ywavfURLUcOZNEC6f7X5FZs2YpEWVPdm5fjqTcuNKbElXYHJNB/qASNaVt7969VgTNfnPaRl7RpFhbJs3GvXulurpERowYoaK0hg0z80Ld+5KKVIptf1SmqLxQnVUideS1ik0J08sM4VReXi7nznkkLHPsQZ1zK3VGcQykRoZAIt7+vzJpzhwl64yrE+r+efe9xMx3ldenj9x7770ycOBAGTp0qAwbNkyGDjV5dBguU+bNs6bqYV+WD7aLx4fkxSVL1IljMGYOGFl7ki7hpH/08JpWx/EtfvdmbIzj+JaTwsmKbmo/ROUJhGzCd7l9jMBjjFeQT3YhE60ukeE9bfn7IhHp3n2wLN1xMTY92/GWi0p1yQjpaUZlRiLdpPvr5VJb+0bCCCe0Y+URVOt2k+LXy2XXlSuO/uimotUjpafOO4jy3YzydWa+PuRORB96vFkrDQ11Km9V7AebblJcbozbdgao++b+/bJ8WE9HrsHu3QfJm7UX1BhnL29v48quiTJU96fLS1L+66/Nlg8LJxiBT8oS5P5gHeFO7HKBF/Z9W7lhW0vKD/CvDTEI892mIoWsccZ2fGxFDzmjiRCZFJNR+OzbxJHf96RdHlllbOt5Lbe/poSSrW+2/qooJntZq/5w30tgll3h5CtxvIRPnRR5CCfPA/eZdaKlk104qdfipuiZU/tsr/vVWTTT7FeCvFNhT1aCfiln7GA8ncLJ58DeEE6xqXF2Bp75ntyCyf28Kb92h1jX3s9kj7Md4aQlUfv290phYaE8+eSTljAo7mF+sdw9SlauXGlNEcM23agabkSmFI4xp86Vm3l4jOl0mKrljNSJCad/fPyxkjeIgELycP2HKWuXLi2V4epLrL+MmTtXPvvsM8dV8tC2lTOo9xglyRA5YxdKpaWlNmFi7gGbkJozZ46aymXlf9LCqfhdJYqQG0qfpOi28gZMUVFRhgyKytSRvzW23/aFa50A9B4jn3zyiSCCymgjkbQRqRphcIZACxbhVNNkRnEMpEaGYls6/lkJp1jerkR918u8ByCLR36xEk4//PCDdVKH94/KgYI27/qLEpBfffWVOkE09piu20t0mfs0y3dhv8P9y+tp4+4fKTi+ee3ijI1xPuOSbl9f/CLplG2fetrC+Oa1/5r6WqU5BRffl/iRAuOMXZz41a9/PMD3Uof774/LC/jErAMq6tReV7X53RyJdJJ77rlH+jhyREUk0u6puBxOsXYKpMN996n1rJx2nf4mW06ftsYX9DXWxh3S/t57Vb90+X7TtqsfJxBRhSTl6PedaszpLLc/+KD07RvLWVUwtkp9f+r+36ousaaRd+hwn7m9unwHGbd6r9pezUsnQkcbd5jjmpHHsLe89tlntu9mvUZ67sOclOWCJGEfwp1AJuKFfd9WbthWCqe2JdyCf7fZpI9d1LgjhqznKG+bbmeu48zp5PE59RRCtrat+m3r2tfxWp6ov/ZlAR+DWZaFU0wi2cWQl1hSB/VxwileFlkH/3FT6vxlkSGY9HS5BHVaIkuXTX0qne5n0C9lfTCckXvzQDpZ3xIfkPtMp9uhX4/P4aQP9OVcte0XWI98TxROiXeNddWwJMIgcpeaOnfkyBHbr5w1UqwOSu9Vy/Z/1N8QMP2mKwm0efNmx8EsEkMPU+UfVeUhm3CigCly+g+/SN+8ud/MaXSnmn6GnByxaCBjc7QEyh/8jpq6d/LkScGvsz1Q//2vqNdissdE4BJOjuU24QQRo6fCYU3dll04aUkX6fJPmTDrU0FUEvJVLX63WNSJwl1/VZFSsTYSyxMr+W1ekfrFPnkOp2gzMHIKJytflSTqe6wfT775seKOfF/YZ/a/Tz/9VOXSOnXqlHmipSO0Yu+73/3tI1ey9ETtJn5bZ2qp/m5Oy705ZnF8S773MjK22X5QSdYjjm/JCKVzeVQmmpE3iLxFHrxkVztF61ZUVORhefbt+VZ+P1y0YdaEB8wfD/rIh3v3qunAznUeUmPWkiVL5IsvvpDVH0+QvqaQifzmvx3CyRqHOj0jJWVlKp/Ud999py7E8cr9xvfd799cb+VEtPrV6Q8ydt48qaysVBeSQL/+/c+h8tL7y9XFMTBdW+WMQrv3vijvLl6sfgTCOPrZaw+a/e8t07//3oxQFrlWOVw6//fzqg5MVUYkMqagf/K/txvl+46zok6xvdY0QbSRP1j1H9uMH5vwY4AjYjiNuzT4SZntJCjgyUsi2cFl2eeJfd9WbthWCicKJ8/vHbvUcXy3uabRmQm5CwoKJGKLfLLqVEIoYiUe16/HEpAbcinizuFk1WUstyKndH0JcjjpNoz7VpDDyTigj/+11ymAbFInTjj5SyQ9ncE60NfT6Xy/BbVESlCnJZzcv1jb+ugzdc7v5MW3O64FGTsYtx2Qe0Yb7XhbtBhKdEBu/MorEl9GCydXXicVaRS/zGjLNf2Owsn17nA+1TKl0zMLVYQJIoMWLVqkBAokSnn5NBlsXqntd8/MVJFI9oN7fcUx/NI88Q/GwTSm0yGXz48//miTU2jXKZwQ1WSvy94znUQaJxSQFTpvklEmKlN/a7SFpNNoSyUtTySUsGKi5aGE03YxppF1l6HvLVVyDdsCSfTrtteNPEj3/lNFSvkJp88//9wp0aJTrV+i7/5HsKvUpZ9RMOHk7nuVGW2AhOdVVVUqiTtyprj/cLKCXCDGrjCiw+58dqWUji40Tn5+019mrlypclsZv9A7hZO7XeO9kN3/ft/Vqb3O8S3o3szYGOcTmaTb5/gWdI+ls1xU3jQjbzGde/fu3db050St6O9LjBnI0YfxCeMKpuLhh493zAsc3D9+pTWlWa+TN2CyusAEfnDB9ximcO/7bJzx44JLOOl1+jxXpnL+QbLrH1ROfjNBbofM6fOcHDp0SH0f6vLoF6K1kCsRfcIfppLX19er/uHiDEo4tXtK3po9W7788kvBDy34Mebs2e0yusAYE+/95zJVHizwfYs6ELGLyFyr3i2vSkf0o3C0Q9jFhNPdato7ootPnDihvsux3TrqNxHnVJZROGVf/DhPGjPXHwqntiVg2ppwC/rdligyyZhqF8vtpKfeWVLIIajw2TWlD77j9Z9NMOmpd9YySzaZn3tLMmH9fjJdPY+171m/JaRQhym1PNtO/t0CZtmPcIqTOAmEj59wsk2Hs04K3BFOWjglnQ6XoP24vqYumnQ/gw7k+mA4I/dNPCDXB+x+wsqacuAxnc1YpgWTmQPKEfEUyzEVL7OC54RKhWPQfYVy2ZtSp6NMusuQd438Tcifg+lpEDj679tXuxtfWnePUldvs0+Ta6waYSzL62384nvnc/L2/PnqwDk+D1Fw4WTVG+kt46aVq4NmPU0gasqhSJcXVTQQfhFWSWETCSWATrQ8pHDS+Zhw5Tr8+gtmiMyyIp/uH+8STiJazCDJbbxEE9E5sSKRdnLf+Bnyyy+/OA/wozUyotcIWb7biAizpjSmjZGfcErc95vV+j0wQF0Z0J1vK1ozVWqitk+EFVU3QOVtwhX7pj9mDIy4IiISxOPECLdkzGy1ZuWh/m5O171zinaC8aUNj2/Y0al8J6e0Dsc3T9ZZ+bBZjUblDZtw2r9/vxWRZBWJe6DzEd4uRRNLBTmf7PkIMbZsfc0Y5xDJiqm/jY17zUiqjmqdbdu2OX4gQY6jAhxQO6bUxaKvcCXWxx9/XF2JFfns8FdcbF6cIq9IKtQPLrvNCyN0VNG8sWnMxgagX9euXVPjgCWDCker8dU+PqCcvpAGcg1qmYVaVNJvV65BK7de4RgVsaUjiGNtjFJXUnVGNMdBTdsLQU/KsiVF2G7yk8RUGVE4UTi1ZgnF77bw3x05I5z0FDoVjRR30G2TOnHLEkx/cwunwPmX4n+Rtp94+EZfhYxs0nUGHd1TOrD2EDqB6mnCAbmWTc5pcU4R5JRKCZaZ/UjGKFPiKVk/7MuzJpz0iX/ncSpnT01NjRXmb+8frkg3SJnqfHXgHUvqjFJ6Wp0hDNoPfU/lLsIUgvjopeDCCTUvLo7Z+YI//lGKi4tjSUwj3eRPs1ap6CIk/1YnD4mEEipMtDyUcDonOml5JJKncm4MHNjNllQWv2A/68rhJLL37V7mrw15KpfGgG7dZOjyK6rvOGHACc7cAV1jv0hEItK1a1fp0cM8SVH7oJuMXrZVnTBByqSXkb9wStR3nNBU2PdVgbGvrATqkYgMWXpRRRNAyukk43+Y9JUVHXbu3GLpr7YvTwa/s9Ca5pGoXTDL9k1/N6ft3hy3OL4l3rOBxqZUxzT7ehzfclA4ifV9g8haXODBuLhBoveMHqfukTFz5qiIH3e0zs6JZiLxwjHqghLXrtWbkVQdZMDkuXERu5acySuyTamLRV9Zvx6r77XYWKZeb/eEzFm3TuUrVBdqiNyr8hXacwe6t8Zqr/cYNV3ZPb1tp3mlVUj7uro6M+orKiUj9bjj6gP6VThK7BewsLeBK6k6I4vdPUrfc56UhT8pS1Xw5Np6FE4UThRObffz7/V9lDvCScugs6ek8hAGPD29zSabIHTihJNODh4/xc0QQyLWlDorQblP3TZh5PxF2t6HBL9O29YPc6ISdHjP2ME4DsxTPSDXgkhfTc5+kG9/7Fu/91Xt4rbdXD9Tokm3H3RfoVy2hJOeTtfx6TkqGgeXkLb/6mvfhqXmFenaPfmmyuWgI1BQpm6yvuJPO3l8/L/VleeQA0lPn4rVE0444SRi9Yf9xUhaqg+WO0mnh5+RF99bqtpZu3atmj6g5EMioYROJFoeUjihvW8nDJL2tpOJgoLHZEr5FLlXHciPjhNOWKd8sBktpta7X/5WvknJIy3nwL/6389JX3di2o4dpcMDI1W0F6Y86l/b08vIXzgl6zv68dlM974qkDvvfFxKKipU4nfkPtm5dKgh1PrPVFMhMbVF53WqfdMUa3ePUidjmLaSrN3Yeys7j8J8fwcrG/sRg+Ob/z7V37PNfu87/hg/fugfTeLGF45v/jsvDUt2mHIF0UXLt23zHbdiTUXl9e4YQ/JUJBGiMN23XaZwgrAx8kLtNiOp2qt17Hn9sK4lZ1zCyWgnX42FmO5tTE3H9HTjDxeFQFTnt99+K1eu7DL7le/bL91Pq73eYx2SSC9fZo7RiHDSkVLVI81xs2CsjP+wyso1uGT6EMnDGHTXM466krWh20r3PYVT2z3hpHCicKJwaruf/xwXTnXyfG1DbLzzm/bmIZx0rib7paeVMDrbIMfELpzqxCrrmoKn2ra3qaffOcrpKw4lF1bBTkIMkRXb6MSPmv0gPJAQSnBAvu8bOY9NSCabVDs6V5OeOmfUmyjyybH9FE4J3yyYiobIJpz4I1eD+1dfvTKEAqYuIIGo+5dPrIN1UQcOsPGLqd8voxAqiEhCWSsySTfiuodsgIhBu8htgYN0fbCOfuCkANP+7H3G1AAkN0X98TmkROW78FsOFpjqhnWRG8NeL+QHpu5huZq+J6J+Qd63b58qv2DBApX7ClfmQ7JX9A1T7dx9wPQI5ORA/+fNm6dOAJDEVQs8vc2HDx9Wv2Jjm1EOXLHtqBNiUMsYXT5djNAP9B0MEDmA/upbor6jH9i3Bw8eVIxwcoW+63xgSFirp7FgHyHRLVjt2bPHagOCEvlLkAcKrPV0jkTt6r5l6z7M93fQshzfku9Nx3e8fTxK9+NUhBPHt+Q7sIklMJ2tkyn7H5yw2vpOTlStjgZFrjmMV/jOit1iU+GwHGMTvnd05CZe++mnnxw/olhyxiGcYpG5yC+F72X3FHWMWZiWju9a9MHeL+QBtI87sf7ZBFfvseoCDHoanFFGTxmMCPqK79Xr1+vNC0sUyMCSBep7FSIK37Gnvp1gTAcsHEPhFJf/hCd/XieBzfUahROFE4UTv3Ps3y85FOFkk0ESH61kHdR7CSdEFmlBZI7kRlST8atyLMJJRyqZvzbbR327bLIilbRgshX0LKfrTe3eVnvChxk7GMfBfQoH5IYs8t8Er3xO8et4JRJ3TrlTHCic/EGbSUUhL/AXH5EUWxUHxjgAR14mCBf3QTHWRR04kE6UXBT1QCKhLO6dB/2x9uyPILvQJn6VhojBQTna8Vof/dJJXdFfd/2JlmMZ2kHfbty4Ye+CYoPX7duOutE39AUnI+gbTi5wIoG+oay7D1gHr2EdlIeQstepGwVPbAdOTiBekJMDkUAoC7Hj3q50MUK96D+21d1OkL6DG2Sj3lcQUIgMwPtG1wfOKIM23Hyw3dhGlNfLgrSruWX63hpvrLEgte92Rz3WGMXxzW9/ZmyM4/iWk1Pq8H03s7+Oes2TJz5aq74vHO8XW8479Z2zdIg5XblQPlwNIXPdKm7lBewwXKbMm2fmcGqUi3qddk/Jyp07Y21Ep8amUDtyOElsnbwi+WzfvrixxJ3Tzors9Cgfra6Wqj031Hh7vX5K7Cp1978iW8+cscaBaPVIY9vaD5HJc/X0v73WlEDkrcJUeIxLmNasE5VHelM42U90+DjzJ74UThROFE6Z/9zl8nddbgmndB7ct6C6rKOjJA8ydjCe7l+TW1F9SXaRY3G2ptQ5OtECnkA8QEjg5CHXbugX/sLcgq6jy2H7k90yxUj3KVF/UAYCKp37K0i7ifqU7mUOUdSCxpJc7HeYfcMxzuPHlQyOn2H2VXOUxffc+fO18vpDHR0575DvrmdPPcUbQqqLjFr2nYpshfCe1k9Lqoh0GzhQJfIe3lO/1lnlakIUqb7gRUNDnXX1t0jkdhk0aJAM1/V3eUrubR+RiOsqdWhHXXHIjMDq1m2QDB8+XIYPj+VSQk47Lbwwre5vnXQfbpdugwapfvU0139y9iH1A0XsKnXtpJ1adocMHjxYhun+RCKCq7oiGlj3f/sbOv9fO+nyxBOCvHq6XpVL6m6/HE7e0/aaY1+iTpxg5PIJEPvWfCfEFE4UThROzff5aonfXRROOXAyEXSw58F4dg/GwT/MjcIpDC2WJYHcIZCL4qal9inMXuUYl90xLsy+aq6ykM+ILP3g5eFyd7t2DvEU6dRJbn/wf+S5kjI1lQxRk5BUuLLbBy/fJ+3aacGD+ztVXkCUxTRgexJyyPLjxzfJi/e0t9V/p/xx1DKprPxABudDOPW3JQ0X1Q4iPGeOv1/y8uztdJbOnfvL2+XlgtyDmNqmBfrRoxtlXPE9pkgy1ykokAf/9zX5oLJSbWdD3WQjwunuUfLhq89I77y8WJ86PSxjp8xT06/tU9URJVv69EOOepFX7405bxhXlf0dczi1xBOy1tRnCicKJwonCif7dxqFE4WTZ2g9D/y9D/zDHGRTOIWhxbIkkDsEWqrcycV+h9mrHHe8x51McQmzr5qzLKKEMMUaFyRAjjud7w459SCPPvvsM5VXTkcTIeISU3whfFAef8gzh7LIG4ecS+6p2pjai+loy5YtU7n0ULaiokLlUUIOP+Si+/zzz9UUaL2taAdCCe3o+nXScNzjdUgpHf2JNjD9GNFV6LvuG8pu3LhRTT+2ptT1HqOimNAmlqOsziGIi0louYa+QGjhynerVq1SZdD3xYsXq7yNKItcgvYcgug3pnpjmzZv3mzlFtTb1Vz3OMGwn3Dwcds5AaVwonCicGo7n/cg3+0UThROFE4hpiyEOTCjcApDi2VJIHcI5KK4aal9CrNXMyVW2I632Aqzr5q7LKQNEmgjfx5kSTQaVfIGF35ArjhIFPsNEgZSBqIKkgcySeeZ02LKXh6P8brO1Yd1sC7qxvQ5iCVETqFe+w3PUQb9wDq6X1gX7bvLo5+YCoecfegT1sG62DZso5WkvPdYdUEJ5PRD27os+uCWZegP2kG9YIOyuMe2oF60BfGl+4IoMP06eOrX7dvVHI8pnNruCSeFE4UThVPb/fx7CSgKJwonCicKp+Y41mSdJNBiCbRUuZOL/Q7zJqAI8hZBmeISZl9lsiwECcQN/iBPEt2UxDHL6kijROWxDPXjz17e/dxdB/qh+4R7+7rusroNXd6+DXbhhCvB6otzoCz6YC+bqF6UxQ3lvfru97pXnel6jcKp7Z5wUjhROFE4td3PP4VTDsglrxOCoIN7pg462Y7/QX/QfYVyjHAKQ4tlSSB3CHh9T/O11K7UF2avcuzxH3sywSbMvmLZ9BBwCydEIrWWG4VT2z3hpHCicKJwaruffwonCidGM4WIZvI6wA9zIEjhFIYWy5JA7hCgXEpNLnlxC7NXvb5z+VrmJFSYfcWy6SGASKZDhw6pHEzI63TlypX0VJwDtVA4td0TTgonCicKp7b7+U+rcBq39KB4HVzytXAH6iNK9wY+LFi9fy6FUROFUVNOXpbufi/wvkJBCqdQuFiYBHKGAMe3cOOY37gfZnzDzucYlzm55B4Lw45vOfNhbeEdwVQ35GLatWuXSgQOAdVabhRObfeEk8KJwonCqe1+/tMqnGZ8eZTCKQ0RU6+uPBz42GLLkdUUTlkUTusPLg68r1CQwikULhYmgZwhwPEtPcIpzPiGnc8xLnvCKez4ljMf1lbQEeR/whXtWpNswm6hcGq7J5wUThROFE5t9/OfVuG0tv5XCqc0CKeFW04GPlw6cHoHhVMWhdPO4xsC7ysUpHAKhYuFSSBnCHB8S49wCjO+YedzjMuecAo7vuXMh5UdyVkCFE5NPOGsHCMFkYhECsZI1fYm1pXh9SmcKJxas3C6b+wnSqjjfc6/YAx+/3ypRDBahT05vt54S8YuPkDp1ATp9PS8fXLuSvDw6cZbN2TV3k8onbIgnSrrZsjVG5dCHdiF/UyFqpyFSYAEVO6T5sDA8a3pwins+Ib9yDEuO8IplfGtOT53rLN1EWhu4VQ1pkAiEDKRiDw2LV7IWMv7TROvX9xjr1XK2ALUUyBjK+Pr+b5ymoztV2DIH7O9SEGBFPQbI9O9yqdL7lA4tYgPBN7nrVmucNtahzzE+zTbt5SEEzodPXmFwqkJwunLfWdD7/vTl49ROGVBOP1wZnfofUXhFBoZVyCBUARwolFcXNws4onjW9OkUyrjG3Y+x7jMS6dUxrdQH1QWbpMEmlc4aUlkCKeIl1TSwibST6YnkkC6nEckkSWtTNFUANFUEBNdkWR1J2o32bIE/YrJMg9BlqzeDCzPhZPbTH3oWoVwmvai3Ib3eP6L8kJ56xAsFGXO/ZgLn8mUhRM+zDuOXBT8kumXNJSvxx+0I5FqqgfjYH78wiHBL5LupJ98nv4DdSRSTfVgnMIpU8M922mrBPSv280lnji+xY9fycb0po5vHOPSP475HRs0ZXxrq9853O7gBJpVOGkZ06+fPKZkkJdUikkprwgoLW20VCoYU+mMhJrWzxZB5Vq2fbtUVU6TxwrGJJZZTZE7ehs9RJjue67e58LJbfB3atNKplU4TZslj/btYsgfHU2X30Vu6/uijJzmFAhpFSrZFE7Z2uY2JtZy4TPZJOGEj+nla42CXA1IEJrsYLQtL3+58gf5+OtjoabR+X0NXm9sEORcQKJPv4NJvp76gfvaaJls/Xlt6Gl09v1F4WSnwcckkH4CduGkH6c74onjWzDplM7xDe8UjnGpj1/Jxv50jG/p/zSzxlwhcPz4cbl69WqTu9OcwklLIoik6f2aMq1OSyn3dLpppsjynq6XEdFD4dTk96Cu4NChQ/ph2u/TJZxeKO5iCU4cz9wG0ZRvf+0JGdlckiRLwimr2+zLcp08mo/vlC7yaHNKvrj2m7fdViGc0v7pZYUk0AoIpCKcsI4+cea9GSqvf+XhPd8bId4QJaO5AAAgAElEQVQDqXz+WsHXDjeBBEiABJpEYPbs2fL//t//k5KSkiaJp+YTTloSmVFNOhLJKxJISxu/qW96uXvdRHUmiVqqmjZGHnNMu4tIQUG/BPmeKmX6mH62HFEFUjBmmlT59c1s32jHfpxUII9hPZ/+VU3rJwUqV5W5TkHi8k2Rarlwcmv/ENx2223yyCOPSG1trf3ltDxOi3Aa94R1fNdr3Lq4nFAvTJslvfJfbF3CKdvbHCd8dARZ84of/8i05m03Fz6TTY5wSssnlpWQQCsjwBPeVrZDuTk5R8BLyuLAEidMvJEACZAACYQngO9P/d3aFPHUbMJJyyArb5MWUO4oJeQ30su8I5XskVJ2waKjpuKm2fnIHL2urg/8CjDdD382yeM1tU+3haTlRnl7jijvq9TF2kHycqMddUU7/CjjlmfbY1FgaMNd3qtPentSvc+Fk1v7Ox/HBfo9nW7x1HThNEt6mT+m9RqnpUeG7zMe4ZQD20zhZP+IZOQxhVNGMLORtkaAwqmt7XFub6YJ6ANI3FM0ZZo+2yMBEmiNBOzCSX/HpiKemks4GYLGKZe0gPESRHpZfGJxPW3Onf8psaTylTBahCGaynX1OkQXGSxdbfm9jvxQOqLXLZB8I58qvacX6jYQZeUSZoiScvfVd/tc6yYql8vCSb+n0yWemiycdKRPCgm7Xxj3ovRyTLvDVLwnEuR7Wicji5+w5YjqIrcVz5IXkggnox17NF0X6YX1fKTNC+OekNvUtDRznXxX+Uxts7ldtxWvkxIzV5Te/5H8J+KmzI3sa99G52O3DAzERHONeEyH1Az6zpIw7fpHSCWWlLnwmaRwao1HDNymrBOgcMr6LmAHWjkBHDhQNLXynczNa5EEMP5ZB/b6xJn3LZ4JxNPmzZsDvSebRziZIiawhEGUk5Y3LuGiRYwVKaWv+JaacNKRSn4RQ17L9Wteoux7H7Gk1/FsR69j26aE5UNIpESCyb0s2cltLn0//M///E+Tp46mKgGwnpYNSor4CByv+u35j27r+4T0wp9N8rgFib0t5CcyyttzRHlfpS7WDpKXG+2oK9rh+9xDkuntQRvu8rpPukyzb7MWTn21ZHNvtzNPk5JIVtmI1f9erqTtYZjobY30nWWbKqkjvAwRFbRdr/dB0NeSfSYDfak3sRCFUxMBcnUS8CJA4eRFha+RQPoIcOpc+liyJhIggZZLAHIvXTevCCfUHzYipFmEkymJ4gVNYknkJV28XjPESeK63HLFuY4z8speVkdaxfqu2/FZR8sjh1zT69im7Ompe+renI5nraPL+7SRJeGUrvdq0HrsU+q0CE8las+rPbzPg570x5fTeXsiomVMfBmPyBUdHYPIGVdia0QXGdvoiqrxex35ofSPAW6BpCN03K+Xr7NEmaPfug1EWbnkGaSK0dcMbrPuP7avrzMiy5JGDhEE1rp/Thll7RddZ1Am5TG+mpWWUPq5UXeSdl08rf4EfL3VCCdcyefLfWdl7uYTgqvVtOWr0bm3fdzSgzLjy6OyatdpOXXhutf3VUqv4So+P5zZLbXHvhBcdSbZlWm4PPlVf1bvnytbjqyWfae2yaVr51PaL3olCidNgvck0LIJcHzzv1Jdc41veMdwjEs+ZoUZ19M5vrXsT3Tr631zCqewoknTbQ7hpCURknCrfEd22aJzJdmieyzhExfN5BP1ZAoYq50xlWLVkVDOJK4PdWjhFJval0QGJRFOWpx43lvCKXm/gm2fjv4Kdp8LJ7f6fYh7u3BKl2jS9WdDOHkLi5iY8lquX/OMKvKRKHodpxgx29Hr2IRNwvKWGNFiJZxkS1a353Ldxzg5dEBKfJfp/nkLJ8929LbpOm1MlBiyRNyLMlI/dpdJJrp0Gyne58JnsskRTjuOXJSn5+2jZJrpf1CuJVTxx/VKPOkvqlTvj184JJV1MyiZdqT3gNx+8F6xc5oST6nuIwqnVMlxPRLIHQIc35KPa+ke37D3OcY139iGca6p41vufELZExBoDuGUqmjSeyTtwkkLGB2N4XvvmjqnRJFLvMQJKKdIseSQJW6cy+MlTRJ5ZBNO6YlwChqxlLxf8duSbFuTL8+Fk1v9PsQ9hFO6RZOuP/PCKbEQgeDQ0TsxuZRkHS1KHGJGr2OfWmZO3VNT68zpeNY6ury3qIlF5OhyYYSTXse/7vhttkmlOLkDaWZGHln918IuUVt6WVAmus7Y1ElDEMdHgCWNrEpRNGnuufCZbJJwQkSTPtjkffAD85I1P+nvqtD3iGiyixE+bt4D868Prwi9j7AChVNK2LgSCeQMAY5vwcc0+/jflPENO59jXPOOafZjhlTHt5z5kLIjikA6hRMuHZ+Oy8enWzhpCRQTNm7xoeWK9xXp7FFL+rFnHiQIKpvc8i3jinhKXKd33xKuo/vgkl4J13H1CTIpbPl0CKhcOLm1fzWUlZU1KU+TvS7346YJp5iIiMmhmKTQssB5r6doeUkLY10tX2J5g7Qo8RE2SYSTZxSdFr6WsEneL70dOkqoebe5eYVTMCa2fYlE6pqZpwBLso/asnDadOAcZVOAqCb7gbj98Yrvf3F/byV9/uPZvZRNzRjVZD8Qtz+uP7kl6b5xF6BwchPhcxJoOQQ4vqUmm/QYl8r4hncHx7jMySY9xqUyvrWcT3Lb6Gk6hVO6iKVXOGlhkziyR0up2LQ1m5TSUU2YjocTP5fIcYsWLWoikQJ5bJrH1DpcSQ5XftNXpNP1J7pKnbtNvY77dS2bvPrpt44pm9xXnrOYuNtA1NW0abH+e8gqN5Ogz3NNOKXrPe1VT1OFkyWHLHFjkxSekiG5mNB1xoROknUSCicfSRXXtyRt2Mrr/nklHddSynmfvG5dZ2ybm1M4BWWi96Xuf+zKd/HTFHWZsHXrNhLf58JnMqUIp3NXbnAaXRNkEw7KMb3u6NkGr+8vz9eu3rjEaXRZkE04KMf0g/MNZzz3i9+LFE5+ZPg6CeQ2AY5vTZNNqYxveEdwjMu8bEp1fMvtT3Db612rF05awHhIE6cE0VPnvMSUXmac9PlHSmlJVSnT+5lJuM3IhIKCAsFfLLrB2U5MUtmSeuvcUhFnWaPfWqShTwVGXipdP8QY1vXYZkc7Vj6rWL+cUVnONgrMvFcF5jY5y+ptb9p9LpzcZupboKnCycolFAk+xUxHCMVLC0gHLS6c9SVcx1M4xaKvvNuJFxwJ27AJp0xts9WOZ0RRKlPqwjOBOHPIMJ3DKU4w6v1G4eT47CIBtv4lk/epH5xjykbQGxJZ618keZ/5A3NM8whzo3AKQ4tlSSB3CHB8S31Msx8PhBnfsPc5xmV+XNPHEmHHt9z5tLInINDahZOO0kkuiWJTyLzK6nogd8bqyKQkkT2IGHpMSyBT0kQgnvqN8YwOqprWTwosyWSIJL+yWjo5xVaBPKaSlZuiyEM4YT3PdlTElUc01vZKmT6mn2jJpIRZAdqZJlVJtt8p9IKJKAqneBnjjNhxLteiJhLpIr3GrYu/6h2uJIcrv+kr0mlpkegqdW6hoddxv65lE97b7mV+65jyKHblOWN7tFiJqwfSZdysWP/LY+KmWbdZb1so4RTrm6doC8nEkl7YVyY3vb8d0Vg2Jp7t2oVdCo9z4TOZUoQTrrpmP7Dk49QO0F9deTjw0RKunqYPDnmf+QPz9QcXB95XKEjhFAoXC5NAzhDg+JbaeOY+DggzvmHnc4zL/LimjyXCjm8582FlRxSB1i6cUpEeXCeYHGoOTrlwcpupr4YmRzgpebBORvY1k3CbUvO2/C6Cv1g0nTPyRUsLLL9NJfF+Qnrl6ylbzrKG7NIRNCjTRXphHV1/vrmuWzjZJIhqB+XsCcPjorKcbeh+6dxFTpGSgW1OUThZ4szGyd53B/uETGI87OtbCcsjzv2UrN1E0jLZslz4TKYknHApZPfBJZ+HP0gfUbo38HciLmmsDw55n/kD86W73wu8r1CQwikULhYmgZwhwPEt/FjmNf6HGd+w8znGZX5c08cSYce3nPmwsiOKAIVT9uRKcwibll5nLpzcZuqrIT3CyYwQGvdiTALpaDqIp74vOqKDtFx4AYmoLclkiCS/slo6OcVWF+lVjIgqU4x4CCes59mOirjyiMYqXycji20JslXkFNqZJS94ROYgSsoSX+ne5hSFE7bZyekJeVRHl5nbEIQJyihh6BFhZcmlvk4uydrV+z7sfS58JlMSTl4Hl3wttYP0oF+K+sCQ99k7KA+6r1COwikMLZYlgdwhwLEstbHMi1uYvcqxLXtjG9jz1nIJUDhROOWSpMqFk9tMfZrTKZzCSgSWd05NJA9/HrnwmaRwamLyb6+D7DCvBf1S5MF4dg/Gwx6QUzgFfWezHAnkFoEw398sm1hOhdmzHOOyO8aF2Vcsm1sEKJwonCicsvOZpHDylxwUQLnDhsIpy7InF04Wgn5F8mA8uwfjFE5B36ksRwItm0AujAutpQ9h3gkc47I7xoXZVyybWwQonCicKJyy85mkcModqULB5b8vKJwonAJ/Q/JgPLsH4xROgd+qLEgCLZpAa5E9ubAdYd4IHOOyO8aF2Vcsm1sEKJwonCicsvOZpHDylxwUQLnDhsKJwinwNyQPxrN7ME7hFPityoL/v717D5KrKvAHPn/65/7Jn9QWiZSKBVFSxPqtEIzrY5USdXdRIs+Q36/WXeWlrojiY9WVVxBcWY0BEkgIEEhiSCJiBOUR5CHyDDAgjyARIwYIkISEnF+d2317ume6Z7oz/bjnzmeqpqan+/Y9537O6b493znnXAJJCxQhqClLHTrpCM5xgz3HddJWti2WgMBJ4CRwGsxrUuBUnFBFwNW6LQROAqe23yF9GB/sh3GBU9td1YYEkhYoS9hThOPopCM4xw32HNdJW9m2WAICJ4GTwGkwr0mBU+uQQwBUHBuBk8Cp7XdIH8YH+2Fc4NR2V7UhgaQFihDUlKUOnXQE57jBnuM6aSvbFktA4CRwEjgN5jUpcCpOqCLgat0WAieBU9vvkD6MD/bDuMCp7a5qQwJJC5Ql7CnCcXTSEZzjBnuO66StbFssAYGTwEngNJjXpMCpdcghACqOjcBJ4NT2O6QP44P9MC5warur2pBA0gJFCGrKUodOOoJz3GDPcZ20lW2LJSBwEjgJnAbzmhQ4FSdUEXC1bguBU78DpxV/CS+EEF64fzjkH+i/ev/O7F2q/r78sX78bPct0ofxwX4YFzi121NtRyBtgX687/ekjITPb7HHOMcN9hyX9qt2atde4CRwEjgN5j1A4NQ65BAAFcdG4JQHTtUPyvHt4t4Nj9TCoK5/KE/4A3mhPow/fld4pfrevvnZNj4kd7j9xpfHnjjaKueBNuoyiW3G1qr1Peecc07rBz1CgEBhBXp13okH7PzWutmd43p7/prIt3XLeKToAgIngZPAaTCvUoFTcUIVAVfrthA4VQOnbJTRtlfCvdtCCE9v7mvg1PU/LvIQrc2f7b5FTvRhsZ+P3/Tnl0LYMRw27wghvLx2wv9Mt719HkztuCvc1BAMrQ2bQwiDDp3abau4ncCpEy3bEiiOQLfPCc5v7bVtP89hE5XV9jmrep5qe/sCn+PaayVbFVFA4CRwEjgN5pUpcGodcgiAimMjcMpCmc3h3uo0t8r0tp1h9YoejXJqMsKp239cdLq/dt8iJ/qA3L/HK+HPK39eErIP2eGl8Mjj4/1ntt3tK9uFMWHTePvu72PttlXcTuDUiZZtCRRHoNP38PG3d35rt2X7dw6b6LzR7jkr30+72xf7HNduO9mueAICJ4GTwGkwr0uBU3FCFQFX67YQOMXAaUNlclY21aB6u9l6Si3DqPrnN4wqqnzQr70FxZFTzQKnls9/JPzP07VnV2+8Ev6noYzJB2OjS2j1e2E+jD87nFUxG21UvR3Dp5b1a3P7Sng1+FFMLY/jgQtbNU3T+wVOTVncSaDwAuMHSB2+59efX5zfxm378d57+/pYm+esWp3a3L7o57hxG8eDhRYQOAmcBE6DeYkKnFqHHAKg4tgInBbmoU4e5FRDom1/CV8dFex0FjiN3U99eNQQaNX/QVArc+zzj104HFbHKX+huyOw2n2LrH24bZhqlv+HtX8/K+srDYeNWT0m/o9te9svCY/E6Xkh32//jqcT13bbKm4ncOpEy7YEiiPQzcCpct5xfmundTt5L+7ltu2ds0bOUe1tX/xzXDttZJtiCgicBE4Cp8G8NgVOxQlVBFyt20LgtLAa7NSt21T5gD421OkkcGq1jzx0mihwavX8Y5vUd7J/nLT7FtnLD9jt77saMNWt21T5sN1qWl27208cXLVfx5E/BLr9nHbbKm4ncOpEy7YEiiMw2ff0kec7v3XSqt1+v963/bV7zsrPM+1uX/xzXCdtZdtiCQicBE4Cp8G8JgVOrUMOAVBxbAROzUYXtZh20H7gVB2J1GSUVHtT6sZ5/pgRWR1Or6iNoBp5Xrtvkfv24Tn/UNyln/VTB/KRVtX7mk6ra3v74n8Yj/6dfAmcOtGyLYHiCIwERiPv0/t0n/NbR43qHNel83R+bu7wZ0eNZeNCCQicBE4Cp8G8JAVOxQlVBFyt22KKB04tpqhV11kKowKj9gOnsf9Vrv2x0NYaTuM8vxY4jR2BVSujSag03mPtvkUO/sN4PiVg1Gimllfd6WR7gVO7/cB2BAj0VmC89+v2H3N+i1adfDnHCZw66S+2HREQOAmcBE4jr4d+3hI4tQ45BEDFsZnagVOLYGlkraQQsoXEqwFOx4HTqMAq+0NB4NR6ce+J/hs6YbA0asHvjrbPwylrOPXzRKksAgTGCrQfKo0zAsr5LSQXOHV0zrowXNPR9sU/x419JbgnFQGBk8BJ4DSYV6vAqTihioCrdVtM6cCpEiBN8AZRt7ZT+4HTOFPiOgmcmgVWtRFO+SKw4/zB0eZIpwkEag8P+r+/+RV2ahVqdqNubadOtx9/LajB/uc3t292yK3uM6WulYz7CRRboBuBk/Nb5dzYSUvn77OD+tnpOavT7Yt+juukrWxbLAGBk8BJ4DSY16TAqXXIIQAqjs0UDpzy6QatgpvqtLZQ93iz9TBqV45rHA3VatFvi4bva3Az0X9nq1PialeZ63T7uv8W14VWg/rDo1W5nZzOBE6daNmWQHEEJh84Ob/lhp20aqv33f7c3+k5q9Pti3+O66StbFssgSIGTh/76uIQ/8jxPfUMYttPlS+BU3FCFQFX67aYuoFTPt2gbgRT/gE1/5mHQyPT6qohVN3Io3yb+MY2st0jIV8cPNTtP9t2287wQghhoqvU1Z5fV9bIVL+6EKzNUUz5MTX72e6bcn8+dLcIpPKpA+OEQZX/3lan1XW6fT6dr7rIeNhxV7gpvy/7WQm0mi5M3rBdi/p3aZt22ypuJ3DqRMu2BIoj0Ox9uqP7nN+y6XTRrJMv57gQBnmO66StbFssgSIGTsUSUhsCvRH4J8GqUDmBYD3200F/DcUKdPrHcUcfvpuEMpWgaIKFt5t9aM/vq6plwVH1vobAKZbZbNuFldBqwsApq3P+X+q6JqoLsCZrkD+/bu/j3hzkh/G2pgLUhUydbt94bPloqUaOzc/2NkxqrEPzshprNP5vnb6mxt+bRwkQ6JdA/t68rz+d30ammnfSZu28B/dqm07PWZ1u31jvYp7jOmkr2xZLQOBUrPZQGwIECBBoFBhI4LSvH+TL+LzG5mj9W+MH1uaBiG1669K6dcY+InAaa+IeAikIlPE8M6hj6qS9nb96e/6ayLeTtrJtsQQETsVqD7UhQIAAgUaBLHBasGBB2LZtW+Mj4/w2qA+vZSx3HOaGhyb6sOjx3n9Yb2iQCX4ROE0A5GECBRUo43lmUMfUSRM7h/X+HDaecSdtZdtiCQicitUeakOAAAECjQJZ4LRw4cKwefPmxkfG+W1QH17LWO44zA0PjfdB0WP9+aDe0CDj/LJ9+/Zw3nnnjbOFhwgQKKpAGc8zgzqmTtrYeaw/57FWzp20lW2LJSBwKlZ7qA0BAgQINApkgdPVV18dNm3a1PjIOL8N6sNrGcsdh7nhoVYfEt3fvw/pDQ0yzi9btmwJl1566ThbeIgAgaIKlPE8M6hj6qSNncv6dy5rZt1JW9m2WAICp2K1h9oQIECAQKNAFjitX78+bNy4sfGRcX4b1IfXMpY7DnPDQ80+ILqvvx/QGxpknF9ieBtDXF8ECKQnUMbzzKCOqZPWdz7r7/lstHcnbWXbYgkInIrVHmpDgAABAo0CWeB02223hZtvvrnxkXF+G9SH1zKWOw5zw0OjPxz6vf8fzhsaZJxf7rnnnrBmzZpxtvAQAQJFFSjjeWZQx9RJGzun9f+cVm/eSVvZtlgCAqditYfaECAwImBN2xGLqXwrC5w6HZExqA+vZSy33c5X/8HQ7cF8MG+3rTodMdjufm1HgEDvBcp4nhnUMXXSWs5rgzmv5e6dtJVtiyUgcCpWe3RyEaZi1VxtCHRfwPtT901T3GMWOO3YsSNb5Hj37t1tHcOgPryWsdy2wEMI+YdCPwf3obzdtur0qo/t7td2BAj0XqCM55lBHVMnreXcNrhzW7T3la6AP+iK03bx76mDDz44xJ++CBAIwfuTXhAFssAp3rjyyivD8PBwWyr/dtXjYVAfYMtWblvgIYTVj/xE6PRA8T+Qb926NVxyySXtNqvtCBAomIDz2yNdO7930rTOccU/v3XSnrbtn4A/6PpnPVFJ8R+OsT3iT18ECAic9IGKQC1w6mTdmQU3P9e1D6RlC5A6OZ6zbniq7X54+zM/FzgNMHC66Ykr22qrW265JcRvXwQIpCng/NadwKmT81vsKc5xgwuc2j2/pfmKLn+tBU7FaOM4qmm//fbLAqf40yinYrSLWgxWwPvTYP2LUnotcNq+fXs2ra6dil1/318ETgsn/6H8J7/5Uzvc2TYP//lOgdMAA6e7N9/UVlstXLgwbN68ua1tbUSAQPEEnN8mf26L/3jp5PwWe4Fz3OACp3bPb8V7tapRFPAHXTH6QT66KbZH/DbKqRjtohaDFfD+NFj/opReC5xihdqdVjf84hsCpy4ETvc8/Wrb/eCvr78gcBpg4PT8yxNPN92yZUu49NJL225TGxIgUDwB57fuBE6dnN9iL3COG1zg1M75rXivVDXKBfxBl0sM7mf96KY8cDLKaXDtoeTiCHh/Kk5bDLImDYFTJ38wL7/7RaHTJEKnH/36+Y7b/cEttwmdBhA6bXx2bVttdfXVV4d4xUdfBAikLeD8NrnQaV/Ob7HHOMf1P3Rq9/yW9iu63LX3B93g23f06KY8dDLKafBtowaDFfD+NFj/opTeEDjFSrX7R/Obe/aGc1b/Uei0D6HTqcufCK/v2tNxH9izd3f41fDVQqc+hk43bvpZeHPPzgnbqpOwdsKd2YAAgYEKOL/te+C0r+e32ODOcf0NnNo9vw30xajwCQX8QTchUU83aDa6KQ+cjHLqKb2dJyDg/SmBRupDFccETvEqW3Fa0O7duycsPn4o95/gzj6YxwVp9yVsyhsjfiD3X+D+fCiPi9i2EzbFtrF2U95D/SRQDgHnt87ObXHdpsme32LPcY4r3vmtHK/o8h6FP+gG27ZxZPs555xT+47tUf+7ke+DbR+lD1bA+9Ng/YtS+pjAKVZs/fr1YePGjW3XMa55ERcIjVel6eQqbVNl2/gf3/hB/M4nX27bdKIN43oXcaHPeHWZa/o44qfsZcX/+Mag6dltj03UBLXH44eJODLQFwEC5RNwfhs/eOrF+S32Iue47gdP+3J+K98runxH5A+6YrWp9ihWe6jNYAW8HgbrX5TSmwZOcXRTHLERpwn5IkCgtcC2bduy10q8yqMvAgQIECBAgEA/BfxB10/ticvSHhMb2WLqCHg9TJ22Hu9ImwZO8Qn+kB6PzWMEQjbtVDCrJxAgQIAAAQKDEvAH3aDkm5d7yy23NH/AvQSmoID3pynY6E0OuWXgFLfdvHlzuPzyy9taz6nJvt1FoNQC7S6wX2oEB0eAAAECBAgMTMAfdAOjVzABAhMIeH+aAGiKPDxu4BQN7rnnnrBy5copwuEwCbQnEP+D5b9Y7VnZigABAgQIEOiNgD/oeuNqrwQITF7A+9PkDcuwhwkDp3iQMXSKI53ipT99EZjKAnF9s+uuu07YNJU7gWMnQIAAAQIFEfAHXUEaolqNI444olgVUhsCAxTw/jRA/AIV3VbgFOv79NNPh0svvTRs3bq1QNVXFQL9E4gLg8c1mx566KH+FaokAgQIECBAgEALAX/QtYAZ0N3aY0Dwii2kgNdDIZul75VqO3CKNcsXEvcHd9/bSYEDFsgDV1duHHBDKJ4AAQIECBCoCfiDrkZRiBvaoxDNoBIFEfB6KEhDDLgaHQVOsa5xWl2cUhRHO8U/wn0RKLNADJjidNL4HUc4+SJAgAABAgQIFEXAH3RFaYlKPbRHsdpDbforsGnTpnDOOefUvuProf73jRs39rdCSiuEQMeBU17r+j/EjfrIVfwsi0AczSdYLUtrOg4CBAgQIFBOAQFHsdrVBWWK1R5q01+BODBlv/32C/F9afT32972tiAz6G97FKW0fQ6c8gPIpxrFEU/xTdYaT7mMn6kJxJApJu9xNNOCBQus1ZRaA6ovAQIECBCYYgICpynW4A6XQMEF4t9Qo8Om+Pupp55a8JqrXq8EJh045RWLiWUMnC655JLsj/X169eH+++/P5t2t3nz5nwzPwkUQiAGozEsjUM/b7755myKaHyDjP3WVNFCNJFKECBAgAABAhMICJwmAPIwAQJ9FWg2ysnopr42QeEK61rgVH9k+UiRlStXZqNF4pW96udvuj0yt5XFYCxiMBpHMl199dXhtttuM8Sz/gXsNgECBAgQIJCEgMCpWM10xBFHFKtCakNgAAKjRzkZ3S0BQKEAACAASURBVDSARihQkT0JnAp0fKpCgAABAgQIECBAoJQCAqdiNav2KFZ7qM1gBOpHORndNJg2KFKpAqcitYa6ECBAgAABAgQIEGhTQMDRJlSfNtMefYJWTOEF8lFORjcVvql6XkGBU8+JFUCAAAECBAgQIECg+wICju6bTmaP2mMyep5bJoE4ymn//fe3bEmZGnUfj0XgtI9wnkaAAAECBAgQIEBgkAICjkHqjy07XkDJFwECFQEXYtITooDAST8gQIAAAQIECBAgkKCAwCnBRlNlAgQITCEBgdMUamyHSoAAAQIECBAgUB4BgVN52tKRECBAoIwCAqcytqpjIkCAAAECBAgQKL2AwKlYTXzEEUcUq0JqQ4AAgQELCJwG3ACKJ0CAAAECBAgQILAvAgKnfVHr3XO0R+9s7ZkAgTQFBE5ptptaEyBAgAABAgQITHEBAUexOoD2KFZ7qA0BAoMXEDgNvg3UgAABAgQIECBAgEDHAgKOjsl6+gTt0VNeO59qAsMXhVlDQ2Fo3uqwa9eusHfv3qkmUIrjFTiVohkdBAECBAgQIECAwFQTEHAUq8VvueWWYlVIbUotMHzR+0J8D4jfJ6/eGfbs2dNwvLXHT14d3nzzzXECm+Fw0fvifmaF8x/ZGXbv3h1CWBfmV/edl1H5eViYNe+CsPaJtxrK6skvwxeFw2IdPv3j8OCDD4YdO3b0pBg77a2AwKm3vvZOgAABAgQIECBAoCcC8Q9AXwQITEWB4bBgViVsyoKgT14cnn/++WpYVPF464kF4dAsNPp0WPj442Hnzp3NofKRRO/5ZljzwAPhz3/+c9izZ004JXvue8O7P/nJcPTRR2ffBx00UuaJK14dE3I1L2Af7x2+qFL/OV8N11xzTdi2bds+7mj000YCtgsf2xPeeqsP4dnoKkyh352lplBjO1QCBAgQIECAAIHyCAicytOWjoRARwL56J9//udwZBYMHR6++8tfhldffbW2m7feeiJ8+72VgOiDZ10Xtm7d2nSUUz4S6h3/77Is2PnjH/8Ydu9eE07K9vuxcPoVV4QlS5aEpUuXhmXLloUFn5tWHVn1T2Hpli29C53ywGn2mVn5f/vb32rHNrkbw+HCLKw7NHzzt8+Fl19+Weg0OdBxny1wGpfHgwQIECBAgAABAgSKKSBwGmy73H///eGII45o+b1+/frBVlDppRXIQ6KPfveX4Qv/UAmVjvzSVWHz5s0NAdD9359ZCYdmnx4eeuihbC2kRpR8pNR7wtwLrsoCp0owtTacmAVOHwmnXXZZuO2228Jjjz0WHn/88XDvvSvDSW+vlPmRb60LL730UtMgq7Gcffith4HT+YfF+r87nPQ/N4RHH320ics+1NdTmgoInJqyuJMAAQIECBAgQIBAsQUEToNvn4MPPri2jk42tSn7I30o7LffftacGXzzlLQGeUg0N3z1mmvCNV+dU+mDB3w2rLjrroZ+t/OR88O7sz45O3znppsaRkBlOPlIqXd/KZy7eHGI65C99tpr2RpOlcDpw+GMxYuzsCmuoRTXgnrjjYfCN2ZUAqfDT788PPzww2HXo4+GdfPfV1nku/oaOOywk8P5j+5qOXpoeN388L5s7ajKvoYOOyzMO391eCKf4tYqcFo3v1LOYeeHR3burO1/eN1FYX79/oYOCyefvzo8Vre21br51bKqdax/zZ68akdDWFfSztP3wxI49Z1cgQQIECBAgAABAgQmLyBwmrzhZPewcuXKpoHTggULJrtrzyfQXGDd/Eqf+9SPwlVXXRXuvPPa8JWDY5AyLZx86aqGtY7itLpvVafVfeDLy7L1merXLMpHSsWRSldeeWV44oknslApLhqeB05nLlkShoeH69aHyh97R/jMf18W7rzgi2FmNcCZMeMz4ZNxzaeDDqq+Lt4dvnPXi9V9jhzOSPAzM8z4TOU5B1X3MXfplmy9qb3D1TWo6qfU5cc+NDN8Zd3D2WLicRrh8IJZ1fLG7m9oxjfCg6+/no3CemLtgnD88ceHvKy//4d/CB/60IfCUUd9MVy86r6wpZdTBEcOf0rdEjhNqeZ2sAQIECBAgAABAmUREDgVoyVHj3IyuqkY7VLWWlTCmplh/s/WZmsqPffcc+Hu/zo0C1ymHXteePLJJ+vCoRDu/+98Wt0Z4YEHHqibPrauujD43PDlpUvDihUrQlwnae/evQ0jnEYHTnlINfTOz4cfXH552HjhJ8J7P/ed8P0lG7IpeXGB72uvvTb88PjplRDoH78Rnn322ZHRQ3lo9N7Phe9v2BCuvvrq7Ds+b8FXjgtf//HK7BjefPSCyqLheeB03/eqI6hmhtOu/132nJtuuin8Lb//0O+G5bfdltVh+fLl4dprLw5f+UBlRNPRP7w7bN++PQu+nnnmN+HEbErg34dPf/NHYdGiRVlwd/3111dGa+3aVdauM5DjEjgNhF2hBAgQIECAAAECBCYnIHCanF+3nj16lJPRTd2StZ+xAtWQ6D3fDAuWLQvr1q0Lr7zySnjjoXPDu+IIoQM+m4Uub7zxRu2pu3atDp/ORg/NDt/5xS9GptXlwc+nfpSNbrrjjjvCyPPyUUwHhmmzZ4djjjkmzJs3L7yvOgppaOjQbP2jK664Igtp4pXtfvWrX4W77747u1reX//61/D87d8M74zbH3562LBhQ3j99dezOuWjmz72g1vD4sWLQwyNnnrqqfDiiy+GRx55JNvPH/7wh7Dj4fNGAqfzjq1ecW9mOGPlvdkC5qtWrcqCrJ/Pq4RKn7jgziyAu/XWW2t1eHLD2eHAWIcPfLm2VlOcEvi1Q+JzDsxGaMW6bdq0KTz99NMWEK/1mu7dEDh1z9KeCBAgQIAAAQIECPRNQODUN+oJC8pHORndNCGVDSYjUA2JDjptRTYqJy5cv3PnzrBnz2O1dZXiFenqF/KOI5au/lwllInT6l544YVs3aM8+InT6eLUvMaRUXngVHlefK/JvmfODMd95+pw7Z13hssvvzzccMMN4S9/+Us2cmj7Aw+EVavOC6ecckqYP39+OOWU6jS3I8/MRjzFq8GFkF8hbka2SPl1112X1Wf37t3ZyKpdu3ZlgVgM0fY8dmElZJo2LUzLyp8bvnzjg9nIpjxsevPNR6tXnBsK0+fMyabHHXfccbU6zJt3WKXe0+aGRevXZ6Oc9u4dDj+YGY/nXWHu+VeGaBjDsLwOk2kezx0rIHAaa+IeAgQIECBAgAABAoUXEDgVp4nyUU5GNxWnTcpYkzwkevvb/zHMmTMnzJ07txaunHBoNRSafUa2yHdc4Dv/eu2GkyrBy+wzsoBl587VI9Ppli0LMcDZtm1bvnnDlLr/+MlPsmlqN954Y4jfMSSK6z3FKWjxqnW7dj0aLpr/vsr+82Cq/ucHvpIFWpX9rwsnZ499KsSper/97W9rI5/qCq9M66stGn5sOOaAyrFNP/6HWbnPPPNMdV2o4VC54lz12OvLrb89bW744fLl1WMcDudlV6k7KAu9GqcZ1tfC7W4ICJy6oWgfBAgQIECAAAECBPosIHDqM/gExX34wx9uuELYBJt7mEBnAsMXNVwFrjbqqD5YyW4fnq2NVLnaXKWIN9/8efiX7LHZ4Vvr1oVXV5xYCYiq0+nuGnV1u/pFw//90kuz0UxLly7NRirFaXwbN27MFtiOI5LW5ld+m/mDcMVvng333HNPNoXuV4v/Lbwjlvn+L2QBVVwfKo5wOjcLe94Vjj1vSbj33nuzEVpNIWqB05nhxz/+fPhA9TiPOu+2bBRUZa2pkfDoX7+7MFx22WWhsn7TtVld41pScY2ouE5TDMryUVYCp6biPblT4NQTVjslQIAAAQIECBAg0FsBgVNvfTvde7xsvC8CvRLIF+t+1xeWh5/+9KfZd5wKt2zZsux76dILw2eqI4Hi1Lm4JlIllAnZz+XHVUYBTZt7QbhybuV2nE4Xg6SGRb2zA8in1H04nH7FFSGuqbR169ZshFC8Klxc66lytbvhsGBW3NfM8IXllQW74zS7X/7yl+H25V+orCt1+Ol1gVMIK0+qlD37jMXh97//fVuB089+9rNw23lHVUdRTQ9fv+WPtYXRV1X39/5TF2UjtW6//fYQA7T679/97nfZ+lBx+mEMvQROveqlY/crcBpr4h4CBAgQIECAAAEChRcQOBW+iVSQQJcE8mDn0HDCJdeFhQsXZuHK2rVrQ/33T+YdWAllDj9t1BXpQqhNq5s2O3wyjhaa8fVs4fE4Ta4y8qe+qiOB0+ir1NVvFcObC7LA6ZDwuQuXZlPuNm/eHF599f5asDQ056vZlLrKCKcQHjo3X1fp2HBNw0LlIQyvWxfWDVdLqBvhFBcXj1fjW/6Fd1WO78BTwl0vvpiFXjtWnVy5b9qx4erf/jYLxWL4m38/vOq8sOrhHdnV+fIAbtXJldDryDOvzMK0ShDVeGR+646AwKk7jvZCgAABAgQIECBAoK8CAqe+ciuMwOAE8ul0h3w1nLdkSRbsxCvDxdFG9d8vvXRNJUwaOiD830V1V6QLIcRpdf9anZYW3zve9R/LsiAoToEbOzqv3cCpLkAamhYOOvrocNJJh9VdzW4oDM35z4YRTnHNp68cXAl8hobeHg49/vhskfH8Cngnr6qERXuHF4xcpW7JkhCvfBdHWX3rI9Xnfvzc7Ap9cVrfT/4l399QOPTQE7L9za9bV+qUtW+FPXv21Nrv4fOqodfQtHDUUUeFkw47LMxfV3vYjS4KCJy6iGlXBAgQIECAAAECBPolIHDql7RyCAxWIJ9O985/WxLiaJ/86nSjaxWnuV1VnS4Xp8796U9/qk59q0yru+97h1anpf19OPbcxdlUvLhNfRhT2Wf7gVMcHbTqjE+GA+rCrJkzTwxX/+7q8PF43/u/2BA4xVFGW7f+Lpx94gcbnjM0c2aY+62rwsp7781GZ+14+LyGwCmOkIpXknv22SvCB6dXAqZP/2hNtuh4DKP+95wPhWnTRoKnOM0v1uPa3/8+W28qXk0vP84YUv34nw+uWsTnzA3/ff+rWfCWj4Iabev3fRMQOO2bm2cRIECAAAECBAgQGKiAwGmg/Aon0DeBGILEUCUufB0XxY6jmyprKI2tQhzxFNdQileSi2svxXAl/4prL8U1juKaSHFa3i9+0TgKKt8u/ty+fXv2eFzj6cknn6ytmVS/TbwdQ5w4jS7W7fLLLw/xio0333xzWLNmTXZfXGcq1rn+KnixTg899FB2f6xnfM7Pf/7z7Gp4caHvPFCLz8nXqMqfHwOuRx99NFt7asWKFVnZ8bjiFfPilfNifWPZcXHzOF1w9erV2f7jPvORXNFuy5YtWf3iguKxzPXr12f7rfcafax+71xA4NS5mWcQIECAAAECBAgQGLiAwGngTaACBPoiEAOSuAj4rbfeGu6+++5sVE+rgmNgMjw8HG655ZYs1KlfnygPhzZs2JCFQjFIevPNN5vuKoY49913X1ZmDGfy0UHNNo5lPv300+HXv/51FvDEsOeOO+7Igqq4jxhy1V81LwZocf9PPfVUtv8YNuWhTwyiYmgWt4nP+e1vf5t958/P749hWixv06ZN2cLjsQ7PP/98tm0Mj+L+rrnmmixIimb1I5ziMeRON910U63sZ555pmWw1uy43TexgMBpYiNbECBAgAABAgQIECicwGQCpxP++/ow+7Sf+WZQ6D4Q+6mvikCcThZDlxjUxNCl1Vd8LIYpcds4omf0tvl+4uMxbBr9eL7feH8sK24XnzPRV77fV155JQuM4nPjfbEOr7/+etMRWfHx+FgMmOIIpjiqKtY9r1MM2uLjo58fH49B2uhjjKFY/f7iPuO+Yx1GB2ZxH/H4Y5lx0fS43XgeEx2/x5sLCJyau7iXAAECBAgQIECAQKEFJhM4xbBpwbVP+mZQ6D4Q+6kvAgTSFRA4pdt2ak6AAAECBAgQIDCFBQROArOyh4YCpyn8BufQSyEgcCpFMzoIAgQIECBAgACBqSYgcBI4CZym2qve8RJIS0DglFZ7qS0BAgQIECBAgACBTEDgJHASOHkzIECgyAICpyK3jroRIECAAAECBAgQaCEgcBI4CZxavDjcTYBAIQQEToVoBpUgQIAAAQIECBAg0JmAwEngJHDq7DVjawIE+isgcOqvt9IIECBAgAABAgQIdEVA4CRwEjh15aVkJwQI9EhA4NQjWLslQIAAAQIECBAg0EsBgZPASeDUy1eYfRMgMFkBgdNkBT2fAAECBAgQIECAwAAEBE4CJ4HTAF54iiRAoG0BgVPbVDYkQIAAAQIECBAgUBwBgZPASeBUnNdjz2rywk9C6Nd3/UFMlTLrj9ntrgsInLpOaocECBAgQIAAAQIEei8gcBI4CZx6/zobeAn9Cn5iOfVf/Sp30GXWl+921wUETl0ntUMCBAgQIECAAAECvRcQOAmcBE69f50NvIR+BT8Cp4E3dRkrIHAqY6s6JgIECBAgQIAAgdILCJwETgKn0r/M+zedTuA0BTpT/w9R4NR/cyUSIECAAAECBAgQmLSAwEngJHCa9Muo+Dswwqn7oVvxW700NRQ4laYpHQgBAgQIECBAgMBUEhA4CZwETlPgFS9wEjgl3M0FTgk3nqoTIECAAAECBAhMXQGBk8BJ4DQFXv8CJ4FTwt1c4JRw46k6AQIECBAgQIDA1BUQOAmcBE5T4PUvcBI4JdzNBU4JN56qEyBAgAABAgQITF0BgZPASeA0BV7/AieBU8LdXOCUcOOpOgECBAgQIECAwNQVEDgJnAROU+D1L3ASOCXczQVOCTeeqhMgQIAAAQIECExdAYHTk2HBxWeH/YeGwtD0s8PXrhVAlS2Amn3az6buCzw/coGTwCnvCwn+FDgl2GiqTIAAAQIECBAgQKBQgdPFi8LRc2ZUwp8YAGUh0Iyw/5yzw/yLexgEDTJwGtQxT6FgTeAUuh+2jBdg1b+tjrddNx8bdJn15bvddQGBU9dJ7ZAAAQIECBAgQIBA7wWKEjh97YQZlYCpGjTtP31GiN9Z6JTdd0yY36uQZECB00CPuaXlhnD09Bj2zQhH9zLkG1N+78oVOAmcQjfDrXxfvX97VkJVQOCkKxAgQIAAAQIECBBIUKAQgdNZx9SCpVlnbQijp3R97eJFYdb0s8sVOA36mMcEPvkIst4FP6PbtfH33pUrcBI4CZwSPDnVVVngVIfhJgECBAgQIECAAIFUBAYfOC0Ks6qjmmadlYceff7Z9xFOBThmgVMqL9Hu1DMfldOPn/U17kd5sYz6r0GUWV++210XEDh1ndQOCRAgQIAAAQIECPReYLzAadu2bSF+t/qKI0caR6nsQ1CUj/TZhwW7v3bW2WFWw7S7obD/9GPGWe9pQ5h/wjF1a0TNCPufsCh8bYLAqVJOdU2pLBybEWbF57UIbb521jFh/2xa2sg6VA3b9+uYq8e1/wkbwoLqWlG1KYrTjxkzZW7+nPpjbLw9OgxsyyR3HWoyHTI3mLModFLuvvQ3I5yMcDLCqdW7eBr3C5zSaCe1JECAAAECBAgQINAgMF7gdMstt4S/+7u/C+ecc07T4KkbgVMeNmShSIsAp1nIUL/+0f5zjgmz4nddyDM6IIn7yMuK6xNVtq9fI6r5VepGyomLl1fKya5oF4OnJiFZfRmjt8/rlG/T82POA6c5ecg2+rgb12nKQqTatkO14501atH2TkzyYx2as6gunMxHeFWCqHbLbdYP2rlP4CRwEjg1vO0n94vAKbkmU2ECBAgQIECAAAECIVs7qZVDDJzyETHNgqfJB075uj1DIQ9j2gkQFuSjY+LImVELW8fRRZU6jxpV0+r+uD5UdUrfmAApH6EzJljaUAuvGuqdlxFHWY0Kz2KoUqlrH485r388vjmNI7JqoVFDEBRHqOX1awyjau2S77Ndk2tHfHOrPITKf6/se4JyR3nW6tPG/QIngZPAqdW7fBr3C5zSaCe1JECAAAECBAgQINAgMNEIpzxwyn/WB0+DCpyaBxYj0/maPZ7f13RUUYsQJX9OYzBSLSd/Tl1gM+72tWAkD1Y6C9km2nfTx/M6jgmHngwLWj6W16954NS0nPzY8n3WmWTBUC2IOzvMz2+P3maioCsvYx9+CpwETgKnhrf95H4ROCXXZCpMgAABAgQIECBAIITjjz++NoopD5Xa+RmDp4OO+nzdNKmRwKf90Sd5uNFJ+JI/p3kgEsvOR++MhEsTPCcPShqCmfw59VPLqlP3sql11el4tefk27euV8Ul367Xx1wXKo0Jd2JbVUce1eqft19ev2bHkT/Wrkm+z/rpjHFtqLEjwCYcWbUPQVPeDwVOAieBU9pnO4FT2u2n9gQIECBAgAABAgTGCNRPqasPoY444ogQH5v8CKeRIGIkHBoJKfLAoPFnPkWrWWhReW4eOI2sG5QHJc1ClLpgpiF8yZ/TuHh2vUN2u/acieuVH0c+Sqi3x1x3XD0InMY45NMSW6xtFadB1ta+alqf3LtFGwmcxrw+O7qjX1duK8IV4/p1rB01gI0nIyBwmoye5xIgQIAAAQIECBAooMDowCkPmvKqdiNwqoVDteBmosBp4mAi3+dIoDPBc8Yd4dRuADJBGXWBSV6/MWtG1W2Th1OVnxPvO9/nyDH3MnBq1yRvy7z+I+Hd2GmK+Tad7jsvo/VPI5yMcDLCKX/XTvOnwCnNdlNrAgQIECBAgAABAi0F8sBpdNCUP6EbgVNtLaGh9qeY5SOExoYWMXTIg4vG/Y37nKaB08joq+bljA04xi2jPkzKy+vxMddsm44o2pcpdZ2bxMCsIQzL13AaEzDm7SZwyl9fXf3Zr1E/Rjh1tdnsrCIgcNITCBAgQIAAAQIECJRM4Omnn86mzrU6rK4ETteOhBhDQzPCrLM2jF0XKl5JLl75Lb8iXR5ajHeVutGBRv6c0ffXhT9jRhy1ek41PBq58lwlfMqDlTH7iaHLWYtG6t+vY86PraPAaaQ9mgZtHZrUQq+6dZvyYK5hNFadSdNy6wO7Dm8b4WSEkxFOrd7F07hf4JRGO6klAQIECBAgQIAAga4JdCtwiqOS5s+pLsJdXQto/+kzQvweWSuoceRLHlrEx/fPFvE+Jsyank/Zaty2cVpa3GZGmBWfk+9/evW5o8OouhAkKyduV79g+JgRSvkonUoZeb3ytYsag5Q+HPM+Bk614KzOqb7uDfbjmox41D+/tmD5UGM7TVRu4zTDsSPMWj0ucBI4CZy69rY/kB0JnAbCrlACBAgQIECAAAECgxPoXuBUHSF01tkjIVC+CHUMnuac3TA6KA8WvhYXoq6FTHnI03zbPHRqDLZmhFknxBFV1WCkSeAUn9e0nGzEVZPRWDE8O6FugexsEe1YzqLwtSYjc+IoqVrw1e1j3sfAKR5zo9Mx4eh8dFltdFcT+1Em0S0LDJuMsKqFS3MaXSYqN2/7Tn4KnAROAqfBnSe6UbLAqRuK9kGAAAECBAgQIEAgIYFuB06dhAi2bX+Ez1S3EjgJnAROCZ1YmlRV4NQExV0ECBAgQIAAAQIEyiwgcBL6pBBmCZwETgKntM9EAqe020/tCRAgQIAAAQIECHQsIHASOAmcOn7ZDOYJrlIXuh46DaYlp2SpAqcp2ewOmgABAgQIECBAYCoLCJwETgKnRN4BBE4Cp0S6arNqCpyaqbiPAAECBAgQIECAQIkFBE4CJ4FTIi9wgZPAKZGu2qyaAqdmKu4jQIAAAQIECBAgUGIBgZPASeCUyAtc4CRwSqSrNqumwKmZivsIECBAgAABAgQIlFhA4CRwEjgl8gIXOAmcEumqzaopcGqm4j4CBAgQIECAAAECJRYQOAmcBE6JvMAFTgKnRLpqs2oKnJqpuI8AAQIECBAgQIBAiQUETgIngVMiL3CBk8Apka7arJoCp2Yq7iNAgAABAgQIECBQYgGBk8BJ4JTIC1zgJHBKpKs2q6bAqZmK+wgQIECAAAECBAiUWEDgJHASOCXyAhc4CZwS6arNqilwaqbiPgIECBAgQIAAAQIlFhA4CZwETom8wAVOAqdEumqzagqcmqm4jwABAgQIECBAgECJBQROAieBUyIvcIGTwCmRrtqsmgKnZiruI0CAAAECBAgQIFBiAYGTwEnglMgLXOAkcEqkqzarpsCpmYr7CBAgQIAAAQIECJRYQOAkcBI4JfICFzgJnBLpqs2qKXBqpuI+AgQIECBAgAABAiUWEDgJnAROibzABU4Cp0S6arNqCpyaqbiPAAECBAgQIECAQIkFBE4CJ4FTIi9wgZPAKZGu2qyaAqdmKu4jQIAAAQIECBAgUGIBgZPASeCUyAtc4CRwSqSrNqumwKmZivsIECBAgAABAgQIlFhA4CRwEjgl8gIXOAmcEumqzaopcGqm4j4CBAgQIECAAAECJRYQOAmcBE6JvMAFTgKnRLpqs2oKnJqpuI8AAQIECBAgQIBAiQUETgIngVMiL3CBk8Apka7arJoCp2Yq7iNAgAABAgQIECBQYgGBk8BJ4JTIC1zgJHBKpKs2q6bAqZmK+wgQIECAAAECBAiUWOCfvro4xNDJN4Mi94HYT6f8l8BJ4JTwi0DglHDjqToBAgQIECBAgAABAgQIlFhA4CRwSrh7C5wSbjxVJ0CAAAECBAgQIECAAIESCwicBE4Jd2+BU8KNp+oECBAgQIAAAQIECBAgUGIBgZPAKeHuLXBKuPFUnQABAgQIECBAgAABAgRKLCBwEjgl3L0FTgk3nqoTIECAAAECBAgQIECAQIkFBE4Cp4S7t8Ap4cZTdQIECBAgQIAAAQIECBAosYDASeCUcPcWOCXceKpOgAABAgQIECBAgAABAiUWEDgJnBLu3gKnhBtP1QkQIECAAAECBAgQIECgxAICJ4FTwt1b4JRw46k6AQIECBAgQIAAAQIECJRYQOAkcEq4ewucEm48VSdAgAAB+Y+VGQAAHc1JREFUAgQIECBAgACBEgsInAROCXdvgVPCjafqBAgQIECAAAECBAgQIFBiAYGTwCnh7i1wSrjxVJ0AAQIECBAgQIAAAQIESiwgcBI4Jdy9BU4JN56qEyBAgAABAgQIECBAgECJBQROAqeEu7fAKeHGU3UCBAgQIECAAAECBAgQKLGAwEnglHD3Fjgl3HiqToAAAQIECBAgQIAAAQIlFhA4CZwS7t4Cp4QbT9UJECBAgAABAgQIECBAoMQCAieBU8LdW+CUcOOpOgECBAgQIECAAAECBAiUWEDgJHBKuHsLnBJuPFUnQIAAAQIECBAgQIAAgRILCJwETgl3b4FTwo2n6gQIECBAgAABAgQIECBQYgGBk8Ap4e4tcEq48VSdAAECBAgQIECAAAECBEosIHASOCXcvQVOCTeeqhMgQIAAAQIECBAgQIBAiQUETgKnhLu3wCnhxlN1AgQIECBAgAABAgQIECixgMBJ4JRw9xY4Jdx4qk6AAAECBAgQIECAAAECJRYQOAmcEu7eAqeEG0/VCRAgQIAAAQIECBAgQKDEAgIngVPC3VvglHDjqToBAgQIECBAgAABAgQIlFhA4CRwSrh7C5wSbjxVJ0CAAAECBAgQIECAAIESCwicBE4Jd2+BU8KNp+oECBAgQIAAAQIECBAgUGIBgZPAKeHuLXBKuPFUnQABAgQIECBAgAABAgRKLCBwEjgl3L0FTgk3nqoTIECAAAECBAgQIECAQIkFBE4Cp4S7t8Ap4cZTdQIECBAgQIAAAQIECBAosYDASeCUcPcWOCXceKpOgAABAgQIECBAgAABAiUWEDgJnBLu3gKnhBtP1QkQIECAAAECBAgQIECgxAICJ4FTwt1b4JRw46k6AQIECBAgQIAAAQIECJRYQOAkcEq4ewucEm48VSdAgAABAgQIECBAgACBEgsInAROCXdvgVPCjafqBAgQIECAAAECBAgQIFBiAYGTwCnh7i1wSrjxVJ0AAQIECBAgQIAAAQIESiwgcBI4Jdy9BU4JN56qEyBAgAABAgQIECBAgECJBQROAqeEu7fAKeHGU3UCBAgQIECAAAECBAgQIECAQBEFBE5FbBV1IkCAAAECBAgQIECAAAECBAgkLCBwSrjxVJ0AAQIECBAgQIAAAQIECBAgUEQBgVMRW0WdCBAgQIAAAQIECBAgQIBAYgLnnHNOYjVW3V4KCJx6qWvfBAgQIECAAAECBAgQIEBgiggMDYkYpkhTt3WYekNbTDYiQIAAAQIECBAgQIAAAQIExhMQOI2nM/UeEzhNvTZ3xAQIECBAgAABAgQIECBAoOsCAqeukya9Q4FT0s2n8gQIECBAgAABAgQIECBAoBgCAqditENRaiFwKkpLqAcBAgQIECBAgAABAgQIEEhYQOCUcOP1oOoCpx6g2iUBAgQIECBAgAABAgQIEJhqAgKnqdbi4x+vwGl8H48SIECAAAECBAgQIECAAAECbQgInNpAmkKbCJymUGM7VAIECBAgQIAAAQIECBAg0CsBgVOvZNPcr8ApzXZTawIECBAgQIAAAQIECBAgUCgBgVOhmmPglRE4DbwJVIAAAQIECBAgQIAAAQIECKQvIHBKvw27eQQCp25q2hcBAgQIECBAgAABAgQIEJiiAgKnKdrwLQ5b4NQCxt0ECBAgQIAAAQIECBAgQIBA+wICp/atpsKWAqep0MqOkQABAgQIECBAgAABAgQI9FhA4NRj4MR2L3BKrMFUlwABAgQIECBAgAABAgQIFFFA4FTEVhlcnQROg7NXMgECBAgQIECAAAECBAgQKI2AwKk0TdmVAxE4dYXRTggQIECAAAECBAgQIECAwNQWEDhN7fYfffQCp9EifidAgAABAgQIECBAgAABAgQ6FhA4dUxW6icInErdvA6OAAECBAgQIECAAAECBAj0RmDTpk3hnHPOqX3HwKn+940bN/amYHtNQkDglEQzqSQBAgQIECBAgAABAgQIECiWwI4dO8J+++0XYtA0+vttb3tb2LJlS7EqrDZ9FRA49ZVbYQQIECBAgAABAgQIECBAoDwCCxYsGBM2xfDp1FNPLc9BOpJ9EhA47RObJxEgQIAAAQIECBAgQIAAAQLNRjkZ3aRfRAGBk35AgAABAgQIECBAgAABAgQI7LPA6FFORjftM2WpnihwKlVzOhgCBAgQIECAAAECBAgQINBfgfpRTkY39de+yKUJnIrcOupGgAABAgQIECBAgAABAgRaCLz11lthz549LR4N2WNxm4m+9u7dm20bf+7rVz7KyeimfRUs3/METuVrU0dEgAABAgQIECBAgAABAiUWGL7ofbWFuo9d/Fx49dVXQ32wVHv82CvDiy++GHbv3t1CYzgsmBWvMDczfPO2zeGVV14Jb721NsxvctW5kavQHR+ue/nlsGvXrlAfUMVRTvvvv78r07WQnop3C5ymYqs7ZgIECBAgQIAAAQIECBBIVGA4XJiFRDEoGgpDR54Zbr311vDaa6/VjuetJxaE92ah0QfD11euzEKn+kCqtuHwReGwuN1Bp4UfXX99ePTRR8OuXavDyXngNH16mD7m+4TwzTVrwjPPPDMmyHr66adru3aDgMBJHyBAgAABAgQIECBAgAABAqkI5CHRJz8Z3p8FQ/8nfHnZsvDCCy/UjXIaDt87tBJIHX765eGBBx7IRiSNPsThBbOy0OrtJ14SrrrqqrB58+awZ8+acFK234+FUxctCqtXrw533HFHuOuuu2rf9913X9i6deu40/lGl+X3qScgcJp6be6ICRAgQIAAAQIECBAgQCBRgXy63Ie/uSacPrsSKs0+Y3G4//77w86dO2tH9fB5h1VGQB1+WvjF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dwIECBAgQIAAAQIECBAorYDASeCUcucWOKXceupOgAABAgQIECBAgAABAqUVEDgJnFLu3AKnlFtP3QkQIECAAAECBAgQIECgtAICJ4FTyp1b4JRy66k7AQIECBAgQIAAAQIECJRWQOAkcEq5cwucUm49dSdAgAABAgQIECBAgACB0goInAROKXdugVPKrafuBAgQIECAAAECBAgQIFBaAYGTwCnlzi1wSrn11J0AAQIECBAgQIAAAQIESisgcBI4pdy5BU4pt566EyBAgAABAgQIECBAgEBpBQROAqeUO7fAKeXWU3cCBAgQIECAAAECBAgQKK2AwEnglHLnFjil3HrqToAAAQIECBAgQIAAAQKlFRA4CZxS7twCp5RbT90JECBAgAABAgQIECBAoLQCAieBU8qdW+CUcuupOwECBAgQIECAAAECBAiUVkDgJHBKuXMLnFJuPXUnQIAAAQIECBAgQIAAgdIKCJwETil3boFTyq2n7gQIECBAgAABAgQIECBQWgGBk8Ap5c4tcEq59dSdAAECBAgQIECAAAECBEorIHASOKXcuQVOKbeeuhMgQIAAAQIECBAgQIBAaQUETgKnlDu3wCnl1lN3AgQIECBAgAABAgQIECitgMBJ4JRy5xY4pdx66k6AAAECBAgQIECAAAECpRUQOAmcUu7cAqeUW0/dCRAgQIAAAQIECBAgQKC0AgIngVPKnVvglHLrqTsBAgQIECBAgAABAgQIlFZA4CRwSrlzC5xSbj11J0CAAAECBAgQIECAAIHSCgicBE4pd26BU8qtp+4ECBAgQIAAAQIECBAgUFoBgZPAKeXOLXBKufXUnQABAgQIECBAgAABAgRKKyBwEjil3LkFTim3nroTIECAAAECBAgQIECAQGkFBE4Cp5Q7t8Ap5dZTdwIECBAgQIAAAQIECBAorYDASeCUcucWOKXceupOgAABAgQIECBAgAABAqUVEDgJnFLu3AKnlFtP3QkQIECAAAECBAgQIECgtAICJ4FTyp1b4JRy66k7AQIECBAgQIAAAQIECJRWQOAkcEq5cwucUm49dSdAgAABAgQIECBAgACB0goInAROKXdugVPKrafuBAgQIECAAAECBAgQIFBaAYGTwCnlzi1wSrn11J0AAQIECBAgQIAAAQIESisgcBI4pdy5BU4pt566EyBAgAABAgQIECBAgEBpBQROAqeUO7fAKeXWU3cCBAgQIECAAAECBAgQKK2AwEnglHLnFjil3HrqToAAAQIECBAgQIAAAQKlFRA4CZxS7twCp5RbT90JECBAgAABAgQIECBAoLQCAieBU8qdW+CUcuupOwECBAgQIECAAAECBAiUVkDgJHBKuXMLnFJuPXUnQIAAAQIECBAgQIAAgdIKCJwETil3boFTyq2n7gQIECBAgAABAgQIECBQWgGBk8Ap5c4tcEq59dSdAAECBAgQIECAAAECBEorIHASOKXcuQVOKbeeuhMgQIAAAQIECBAgQIBAaQUETgKnlDu3wCnl1lN3AgQIECBAgAABAgQIECitgMBJ4JRy5xY4pdx66k6AAAECBAgQIECAAAECpRUQOAmcUu7cAqeUW0/dCRAgQIAAAQIECBAgQKC0AgIngVPKnVvglHLrqTsBAgQIECBAgAABAgQIlFZA4CRwSrlzC5xSbj11J0CAAAECBAgQIECAAIHSCgicBE4pd26BU8qtp+4ECBAgQIAAAQIECBAgUFoBgZPAKeXOLXBKufXUnQABAgQIECBAgAABAgRKKyBwEjil3LkFTim3nroTIECAAAECBAgQIECAQGkFBE4Cp5Q7t8Ap5dZTdwIECBAgQIAAAQIECBAorYDASeCUcucWOKXceupOgAABAgQIECBAgAABAqUVEDgJnFLu3AKnlFtP3QkQIECAAAECBAgQIECgtAICJ4FTyp1b4JRy66k7AQIECBAgQIAAAQIECJRWQOAkcEq5cwucUm49dSdAgAABAgQIECBAgACB0goInAROKXdugVPKrafuBAgQIECAAAECBAgQIFBaAYGTwCnlzi1wSrn11J0AAQIECBAgQIAAAQIESisgcBI4pdy5BU4pt566EyBAgAABAgQIECBAgEBpBQROAqeUO7fAKeXWU3cCBAgQIECAAAECBAgQKK2AwEnglHLnFjil3HrqToAAAQIECBAgQIAAAQKlFRA4CZxS7twCp5RbT90JECBAgAABAgQIECBAoLQCAieBU8qdW+CUcuupOwECBAgQIECAAAECBAiUVkDgJHBKuXMLnFJuPXUnQIAAAQIECBAgQIAAgdIKCJwETil3boFTyq2n7gQIECBAgAABAgQIECBQWgGBk8Ap5c4tcEq59dSdAAECBAgQIECAAAECBEorIHASOKXcuQVOKbeeuhMgQIAAAQIECBAgQIBAaQUETgKnlDu3wCnl1lN3AgQIECBAgAABAgQIECitgMBJ4JRy5xY4pdx66k6AAAECBAgQIECAAAECpRUQOAmcUu7c/x8cdD4BK6HLXAAAAABJRU5ErkJggg==&quot; width=&quot;400&quot; id=&quot;id_fba6_dcaf_8cbb_232a&quot; style=&quot;width: 400px; height: auto;&quot;&gt;&lt;br&gt;
&lt;br&gt;
&lt;pre class=&quot;brush:c++&quot;&gt;// VideoProcessing.cpp 
//
#pragma once
using namespace std;
#include &amp;lt;iostream&amp;gt;
extern &quot;C&quot; 
{
    #include &amp;lt;libavcodec/avcodec.h&amp;gt;
    #include &amp;lt;libavdevice/avdevice.h&amp;gt;
    #include &amp;lt;libavformat/avformat.h&amp;gt;
    #include &amp;lt;libavfilter/avfilter.h&amp;gt;
    #include &amp;lt;libavutil/avutil.h&amp;gt;
    #include &amp;lt;libswscale/swscale.h&amp;gt;
    #pragma comment(lib, &quot;avcodec.lib&quot;)
    #pragma comment(lib, &quot;avdevice.lib&quot;)
    #pragma comment(lib, &quot;avformat.lib&quot;)
    #pragma comment(lib, &quot;avfilter.lib&quot;)
    #pragma comment(lib, &quot;avutil.lib&quot;)
    #pragma comment(lib, &quot;swscale.lib&quot;)
}

void SaveToJPEG(AVFrame* pFrame, const char * folderName, int index)

{

    // Setup Output Path
    char outFile[256] = { 0 };
    sprintf_s(outFile, sizeof(outFile)/sizeof(outFile[0]), &quot;%s\\OutputImages-%d.jpg&quot;, folderName, index);


    AVFormatContext* pFormatCtx = avformat_alloc_context();

    // Setup the output format
    pFormatCtx-&amp;gt;oformat = av_guess_format(&quot;mjpeg&quot;, NULL, NULL);

    // Initializext 
    if (avio_open(&amp;amp;pFormatCtx-&amp;gt;pb, outFile, AVIO_FLAG_READ_WRITE) &amp;lt; 0) {

        printf(&quot;Couldn&#39;t open output file.&quot;);

        return;

    }

    // Get a new Stream from the indicated format context
    AVStream* pAVStream = avformat_new_stream(pFormatCtx, 0);

    if (pAVStream == NULL) {

        return;

    }

    // Find encoder from the codec identifier.

    AVCodec* pCodec = avcodec_find_encoder(pFormatCtx-&amp;gt;oformat-&amp;gt;video_codec);
    
    if (!pCodec) {
        printf(&quot;Codec not found.&quot;);
        return;
    }
    // Setup the codec context
    AVCodecContext* codecCtx = avcodec_alloc_context3(pCodec);
    codecCtx-&amp;gt;codec_id =  pFormatCtx-&amp;gt;oformat-&amp;gt;video_codec;
    codecCtx-&amp;gt;codec_type = AVMEDIA_TYPE_VIDEO;
    codecCtx-&amp;gt;pix_fmt = AV_PIX_FMT_YUVJ420P;
    codecCtx-&amp;gt;width = pFrame-&amp;gt;width;
    codecCtx-&amp;gt;height = pFrame-&amp;gt;height;
    codecCtx-&amp;gt;time_base = AVRational{ 1,25 };
    
    // Open the codec
    if (avcodec_open2(codecCtx, pCodec, NULL) &amp;lt; 0) {

        printf(&quot;Could not open codec.&quot;);

        return;

    }
    // assign the codec context to the stream parameters.
    avcodec_parameters_from_context(pAVStream-&amp;gt;codecpar, codecCtx);


    //Write Header 
    avformat_write_header(pFormatCtx, NULL);

    int y_size = (codecCtx-&amp;gt;width) * (codecCtx-&amp;gt;height);

    // assign large enough space
    AVPacket pkt;

    av_new_packet(&amp;amp;pkt, y_size); 

    int got_picture = 0;

    // Use avcodec_send_frame()/avcodec_receive_packet() instead
    int ret = avcodec_send_frame(codecCtx, pFrame);

    if (ret &amp;lt; 0) {

        printf(&quot;Encode Error.\n&quot;);

        return;

    }
    else
    {
        ret = avcodec_receive_packet(codecCtx, &amp;amp;pkt);

        ret = av_write_frame(pFormatCtx, &amp;amp;pkt);

    }

    av_packet_unref(&amp;amp;pkt);

    //Write Trailer 
    av_write_trailer(pFormatCtx);

    printf(&quot;Encode Successful.\n&quot;);

    avcodec_close(codecCtx);

    avio_close(pFormatCtx-&amp;gt;pb);
    
    avformat_free_context(pFormatCtx);
    avcodec_free_context(&amp;amp;codecCtx);
}

int main(int argc, char * argv[])
{

    if (argc &amp;lt; 2) {
        cout &amp;lt;&amp;lt; &quot;You need to specify a media file.&quot; &amp;lt;&amp;lt; endl;
        cout &amp;lt;&amp;lt; &quot;Command line : VideoProcessing.exe [input_video_path] [output_folder]&quot; &amp;lt;&amp;lt; endl;
        return -1;
    }

    AVFormatContext* pFormatContext = avformat_alloc_context();
    if (!pFormatContext) {
        cout &amp;lt;&amp;lt; &quot;ERROR could not allocate memory for Format Context&quot; &amp;lt;&amp;lt; endl;
        return -1;
    }

    if (avformat_open_input(&amp;amp;pFormatContext, argv[1], NULL, NULL) != 0) {
        cout &amp;lt;&amp;lt; &quot;ERROR could not open the file&quot; &amp;lt;&amp;lt; endl;
        return -1;
    }

    if (avformat_find_stream_info(pFormatContext, NULL) &amp;lt; 0) {
        cout &amp;lt;&amp;lt; &quot;ERROR could not get the stream info&quot; &amp;lt;&amp;lt; endl;
        return -1;
    }

    // Initialize the codec, paramters for subsequent useage. 
    AVCodec* pCodec = NULL;
    AVCodecParameters* pCodecParameters = NULL;
    int videoStreamIndex = -1;

    for (int i = 0; i &amp;lt; pFormatContext-&amp;gt;nb_streams; i++)
    {
        AVCodecParameters* pLocalCodecParameters = NULL;
        // Read the codec parameters corresponding to each stream.
        pLocalCodecParameters = pFormatContext-&amp;gt;streams[i]-&amp;gt;codecpar;

        AVCodec* pLocalCodec = NULL;
        pLocalCodec = avcodec_find_decoder(pLocalCodecParameters-&amp;gt;codec_id);

        if (pLocalCodec == NULL)
        {
            cout &amp;lt;&amp;lt; &quot;[ERROR] Cannot find the codec&quot; &amp;lt;&amp;lt; endl;
        }

        if (pLocalCodecParameters-&amp;gt;codec_type == AVMEDIA_TYPE_VIDEO)
        {
            if (videoStreamIndex == -1)
            {
                videoStreamIndex = i;
                pCodec = pLocalCodec;
                pCodecParameters = pLocalCodecParameters;
            }
        }
    }

    AVCodecContext* pCodecContext = avcodec_alloc_context3(pCodec);
    if (pCodecContext == NULL)
    {
        cout &amp;lt;&amp;lt; &quot;Fail to allocate the memoery to the Codec Context.&quot; &amp;lt;&amp;lt; endl;
        return -1;
    }

    if (avcodec_parameters_to_context(pCodecContext, pCodecParameters) &amp;lt; 0)
    {
        cout &amp;lt;&amp;lt; &quot;failed to copy codec params to codec context&quot; &amp;lt;&amp;lt; endl;
        return -1;
    }

    if (avcodec_open2(pCodecContext, pCodec, NULL) &amp;lt; 0)
    {
        cout &amp;lt;&amp;lt; &quot;failed to open codec through avcodec_open2&quot; &amp;lt;&amp;lt; endl;
        return -1;
    }

    AVFrame* pFrame = av_frame_alloc();
    if (!pFrame)
    {
        cout &amp;lt;&amp;lt; &quot;failed to allocated memory for AVFrame&quot; &amp;lt;&amp;lt; endl;
        return -1;
    }

    AVPacket* pPacket = av_packet_alloc();
    if (!pPacket)
    {
        cout &amp;lt;&amp;lt; &quot;failed to allocated memory for AVPacket&quot; &amp;lt;&amp;lt; endl;
        return -1;
    }

    int indexOfFrame = 0;
    while (av_read_frame(pFormatContext, pPacket) &amp;gt;= 0)
    {
        // if it&#39;s the video stream
        if (pPacket-&amp;gt;stream_index == videoStreamIndex) {
            int response = avcodec_send_packet(pCodecContext, pPacket);
            if (response &amp;lt; 0)
            {
                break;
            }
            else
            {
                response = avcodec_receive_frame(pCodecContext, pFrame);

                if (response &amp;gt;= 0)
                {
                    indexOfFrame++;
                    SaveToJPEG(pFrame, argv[2], indexOfFrame);
                }
            }
        }
        av_packet_unref(pPacket);
        // Limit the number of output frame to be 5.
        if (indexOfFrame == 5)
        {
            break;
        }

    }
    // https://ffmpeg.org/doxygen/trunk/group__lavc__packet.html#ga63d5a489b419bd5d45cfd09091cbcbc2
    avformat_close_input(&amp;amp;pFormatContext);
    av_frame_free(&amp;amp;pFrame);
    avcodec_free_context(&amp;amp;pCodecContext);
}
&lt;/pre&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Reference:
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://kkc.github.io/2019/01/12/ffmpeg-libav-decode-note/&quot;&gt;FFMPEG libav decode note&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/leandromoreira/ffmpeg-libav-tutorial&quot;&gt;FFMPEG libav tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.csdn.net/luotuo44/article/details/54981809&quot;&gt;用AVCodecParameters代替AVCodecContext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.csdn.net/zhoubotong2012/article/details/79342116&quot;&gt;用FFmpeg保存JPEG图片&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;&lt;/span&gt;&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/2901282270864805612/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2020/06/ffmpeg-decode-and-then-encode-frames-to.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/2901282270864805612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/2901282270864805612'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2020/06/ffmpeg-decode-and-then-encode-frames-to.html' title='FFMPEG: Decode and then encode frames to JPEG images'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-2103297606889779845</id><published>2020-05-02T10:19:00.001+08:00</published><updated>2020-05-02T10:19:50.474+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><title type='text'>The introduction for JavaScript ES6’s classes</title><content type='html'>Do not understand the &lt;i&gt;class&lt;/i&gt; features of JavaScript ES6?&lt;div&gt;You can take a look on this introduction in Chinese.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://shubo.io/javascript-class/&quot;&gt;https://shubo.io/javascript-class/&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/2103297606889779845/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2020/05/the-overview-of-javascript-es6.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/2103297606889779845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/2103297606889779845'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2020/05/the-overview-of-javascript-es6.html' title='The introduction for JavaScript ES6’s classes'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-2816624280091048049</id><published>2020-05-02T10:15:00.001+08:00</published><updated>2020-05-02T10:15:29.948+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ActiveMQ"/><title type='text'>Speed up ActiveMQ performance by 25x</title><content type='html'>&lt;div&gt;Sometimes we encounter the performance issue for persistent messaging using ActiveMQ.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Here’s the best practice on Linux system to accelerate it.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;a href=&quot;https://blog.christianposta.com/activemq/speeding-up-activemq-persistent-messaging-performance-by-25x/&quot;&gt;https://blog.christianposta.com/activemq/speeding-up-activemq-persistent-messaging-performance-by-25x/&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/2816624280091048049/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2020/05/speed-up-activemq-performance-by-25x.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/2816624280091048049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/2816624280091048049'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2020/05/speed-up-activemq-performance-by-25x.html' title='Speed up ActiveMQ performance by 25x'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-3068375859577338466</id><published>2020-05-02T02:25:00.001+08:00</published><updated>2020-05-02T02:26:26.949+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><title type='text'>使用 git worktree 建立多個工作區</title><content type='html'>Reference:&amp;nbsp;&lt;div&gt;&lt;a href=&quot;https://medium.com/@kmsh3ng/%E4%BD%BF%E7%94%A8-git-worktree-%E5%BB%BA%E7%AB%8B%E5%A4%9A%E5%80%8B%E5%B7%A5%E4%BD%9C%E5%8D%80-5a02f6d9d3fd&quot;&gt;https://medium.com/@kmsh3ng/%E4%BD%BF%E7%94%A8-git-worktree-%E5%BB%BA%E7%AB%8B%E5%A4%9A%E5%80%8B%E5%B7%A5%E4%BD%9C%E5%8D%80-5a02f6d9d3fd&lt;/a&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/3068375859577338466/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2020/05/git-worktree.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/3068375859577338466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/3068375859577338466'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2020/05/git-worktree.html' title='使用 git worktree 建立多個工作區'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-6359907072217838913</id><published>2018-12-24T06:16:00.001+08:00</published><updated>2019-01-11T08:37:50.240+08:00</updated><title type='text'>Materials for Neural Network</title><content type='html'>Some materials are enclosed here.&lt;br /&gt;
1. 深度學習（二）： 反向傳播 URL:&lt;a href=&quot;http://chansh518.github.io/deep%20learning/2016/08/08/Deep-Learning-Notes-Backpropagation.html&quot;&gt;http://chansh518.github.io/deep%20learning/2016/08/08/Deep-Learning-Notes-Backpropagation.html&lt;/a&gt;&lt;br /&gt;
2. 一文看懂常用的梯度下降算法 URL:&amp;nbsp;&lt;a href=&quot;https://blog.csdn.net/u013709270/article/details/78667531&quot;&gt;https://blog.csdn.net/u013709270/article/details/78667531&lt;/a&gt;&lt;br /&gt;
3. 邏輯回歸代價函數及其梯度下降公式 URL:&amp;nbsp;&lt;a href=&quot;https://blog.csdn.net/Mr_HHH/article/details/78934793&quot;&gt;https://blog.csdn.net/Mr_HHH/article/details/78934793&lt;/a&gt;&lt;br /&gt;
4. The Back Propagation Algorithm. URL:&amp;nbsp;&lt;a href=&quot;https://page.mi.fu-berlin.de/rojas/neural/chapter/K7.pdf&quot;&gt;https://page.mi.fu-berlin.de/rojas/neural/chapter/K7.pdf&lt;/a&gt;&lt;br /&gt;
5. Derivation of Back Propagation Algorithm for Forward Neural Networks. URL: &amp;nbsp;&lt;a href=&quot;http://www.cs.put.poznan.pl/pliskowski/pub/teaching/eio/lab1/eio-supplementary.pdf&quot;&gt;http://www.cs.put.poznan.pl/pliskowski/pub/teaching/eio/lab1/eio-supplementary.pdf&lt;/a&gt;&lt;br /&gt;
6. 凸優化 梯度下降。URL:&amp;nbsp;http://www.hanlongfei.com/凸优化/2015/09/29/cmu-10725-gradient/&lt;br /&gt;
7. Geadient Descent demystified. URL: &amp;nbsp;&lt;a href=&quot;https://towardsdatascience.com/gradient-descent-demystified-bc30b26e432a&quot;&gt;https://towardsdatascience.com/gradient-descent-demystified-bc30b26e432a&lt;/a&gt;&lt;br /&gt;
8. An introduction to gradient descent and linear regression. URL:&amp;nbsp;&lt;a href=&quot;https://spin.atomicobject.com/2014/06/24/gradient-descent-linear-regression/&quot;&gt;https://spin.atomicobject.com/2014/06/24/gradient-descent-linear-regression/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/6359907072217838913/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2018/12/materials-for-neural-network.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/6359907072217838913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/6359907072217838913'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2018/12/materials-for-neural-network.html' title='Materials for Neural Network'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-2088978811352943102</id><published>2018-05-01T16:24:00.005+08:00</published><updated>2018-05-01T16:55:34.187+08:00</updated><title type='text'>It&#39;s time to push my career forward</title><content type='html'>After a long time, almost 3 months, I&#39;ve done my PhD degree. In the past, I could not image that I get my PhD. Thanks for my supervisor&#39;s and family&#39;s great supports. I did it!&lt;br /&gt;
Through the training of PhD, making things clear and be systematic are not the difficult parts anymore for me. But, I deeply felt that doing research tasks and engineering works was the most difficult part!&lt;br /&gt;
&lt;br /&gt;
Now, I am a software engineer of an international corporate.&lt;br /&gt;
For me, doing both engineering and research work is better than doing only researches!&lt;br /&gt;
Now, it&#39;s time to push my career forward.</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/2088978811352943102/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2018/05/its-time-to-push-my-career-forward.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/2088978811352943102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/2088978811352943102'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2018/05/its-time-to-push-my-career-forward.html' title='It&#39;s time to push my career forward'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-93464822847965346</id><published>2017-08-19T23:05:00.000+08:00</published><updated>2017-08-19T23:07:42.234+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="VPN"/><title type='text'>Build your service using Pritunl and Lets Encrypt</title><content type='html'>&lt;a href=&quot;https://pritunl.com/&quot;&gt;Pritunl&lt;/a&gt; is an open source enterprise VPN platform which is used to easily build free VPN service.&lt;br /&gt;
It is built on the top of TLS/SSL protocol and is not easily banned by some countries. :)&lt;br /&gt;
However, by the default settings of its tutorial, the generated TLS certificate for Pritunl is not recognized by browsers because its certificate is not authorized by third-party CA.&lt;br /&gt;
&lt;br /&gt;
To mitigate the effect, &lt;a href=&quot;https://certbot.eff.org/&quot;&gt;Let&#39;s Encrypt&lt;/a&gt;, the well-known CA, is considered as the best choice for end-users.&lt;br /&gt;
&lt;br /&gt;
This post briefs how to setup Let&#39;s Encrypt&#39;s SSL certificate and setup Pritunl on Ubuntu 14.04. You can follow the following easy steps to build your own VPN service.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Go to&amp;nbsp;&lt;a href=&quot;https://certbot.eff.org/&quot;&gt;Let&#39;s Encrypt&lt;/a&gt;&amp;nbsp;and apply for a certificate by the certbot script.&lt;/li&gt;
&lt;li&gt;If you are using apache, nginx or Plesk, please stop and remove it first. Otherwise, the later Pritunl will have a conflict on port 80.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Follow the &lt;a href=&quot;https://www.vultr.com/docs/setup-a-vpn-server-with-pritunl-on-ubuntu&quot;&gt;post&lt;/a&gt; of Vultr to setup Pritunl.&lt;/li&gt;
&lt;li&gt;Congratulations! You have your own VPN service. &amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Trouble Shotting&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
If your Pritunl service cannot normally start, please check Pritunl&#39;s log in &lt;i&gt;/var/log/pritunl.log&lt;/i&gt;. If the log displays the message like &quot;127.0.0.1:27001 connection refused&quot;, please check MongoDB&#39;s log messages in &lt;i&gt;/var/log/mongodb/mongod.log.&lt;/i&gt;&amp;nbsp;You may find the following texts in the log file:&lt;br /&gt;
&lt;span style=&quot;background-color: yellow;&quot;&gt;ERROR: Insufficient free space for journal files&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: yellow;&quot;&gt;Please make at least 3379MB available in /var/lib/mongo/journal or use --smallfiles&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It seems that the disk space is not enough for running MongoDB and it will impact the service of Pritunl. To solve this issue, please add the following configuration in the configuration file (it is generally put in &lt;i&gt;/etc/mongod.conf&lt;/i&gt;) of MongoDB.&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; mmapv1:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; &amp;nbsp; smallFiles: true&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Then, restart MongoDB service by the command: &lt;b&gt;service mongod restart&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Finally, you may normally activate the Pritunl service.</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/93464822847965346/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2017/08/build-your-service-using-pritunl-and.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/93464822847965346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/93464822847965346'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2017/08/build-your-service-using-pritunl-and.html' title='Build your service using Pritunl and Lets Encrypt'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-3960064088400810696</id><published>2016-11-16T11:10:00.002+08:00</published><updated>2016-11-16T11:12:20.769+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="WPF"/><title type='text'>Math Editor in C#</title><content type='html'>When you are acquiring to integrate a math editor into your application in 
WPF (Windows Presentation Foundation), I recommend you to use this math editor 
project called &lt;a href=&quot;http://www.codeproject.com/Articles/522345/OOP-in-the-Real-World-Creating-an-Equation-Editor&quot; target=&quot;_blank&quot;&gt;OOP in the Real World&lt;/a&gt; - Creating an Equation Editor in Code 
Project platform.&lt;br /&gt;
&lt;br /&gt;
However, the source code put in Code Project is out of date. If you want a 
new version of the source code and start to program it, I give the instructions 
for you as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Download the Math_Editor_1.0.6.5.zip from &lt;a href=&quot;http://www.codeproject.com/KB/architecture/522345/Math_Editor_1.0.6.5.zip&quot;&gt;http://www.codeproject.com/KB/architecture/522345/Math_Editor_1.0.6.5.zip&lt;/a&gt;&amp;nbsp; 
then get&lt;strong&gt; ICSharpCode.SharpZipLib.dll&lt;/strong&gt; after extracting this zip 
file.&lt;/li&gt;
&lt;li&gt;Download the source codes from &lt;a href=&quot;https://github.com/kashifimran/math-editor/releases&quot; title=&quot;https://github.com/kashifimran/math-editor/releases&quot;&gt;https://github.com/kashifimran/math-editor/releases&lt;/a&gt;. 
You can choose any relase version. In fact, I have tested the source codes with 
both versions 1.0.6.5 and 1.0.6.6 and they work.&lt;/li&gt;
&lt;li&gt;Extract the source codes 
and open the project solution.&lt;/li&gt;
&lt;li&gt;Put 
&lt;strong&gt;ICSharpCode.SharpZipLib.dll&lt;/strong&gt;&amp;nbsp;in your project if there’s no 
library refering to &lt;strong&gt;ICSharpCode.SharpZipLib.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Right click 
on this project then click the item ‘project properties’.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Click the tab 
“Signing” then &lt;strong&gt;cancel&lt;/strong&gt; the clickbox called “Sign the assembly”.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Afterall, you will build this project successfully.</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/3960064088400810696/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2016/11/math-editor-in-c.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/3960064088400810696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/3960064088400810696'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2016/11/math-editor-in-c.html' title='Math Editor in C#'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-8967952863346322514</id><published>2016-08-05T14:55:00.001+08:00</published><updated>2016-08-05T14:55:30.277+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CKAN"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Install CKAN 2.5 on Ubuntu 14.04 LTS</title><content type='html'>&lt;p&gt;Author: Jyun-Yao Huang (Allen; &lt;a href=&quot;mailto:allen501pc@gmail.com&quot;&gt;allen501pc@gmail.com&lt;/a&gt;)&lt;br&gt;System Environment: Ubuntu Linux 14.04 LTS (64bits)  &lt;p&gt;1. Update the metadata of packages  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ sudo apt-get update &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;2. Install &lt;i&gt;apache2&lt;/i&gt;, &lt;i&gt;nginx&lt;/i&gt;, apache’s module &lt;i&gt;wsgi&lt;/i&gt; and the library of postgres- &lt;i&gt;libpq5&lt;/i&gt;.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ sudo apt-get install -y nginx apache2 libapache2-mod-wsgi libpq5&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;3. Download deb-package of python-ckan. &lt;br&gt;There are two ways to get CKAN deb package. &lt;br&gt;First, here you can download my provided deb package in the cloud storage. URL: &lt;a href=&quot;https://drive.google.com/file/d/0B6PKt2-xNai_QlNfdEZfY05JRlE/view?usp=sharing&quot;&gt;https://drive.google.com/file/d/0B6PKt2-xNai_QlNfdEZfY05JRlE/view?usp=sharing&lt;/a&gt;&lt;br&gt;Or, download it from CKAN official site.&lt;/p&gt; &lt;p&gt; &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ wget http://packaging.ckan.org/python-ckan_2.5-trusty_amd64.deb&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;4. Install the package.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ sudo dpkg -i python-ckan_2.5-trusty_amd64.deb&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;5. Install &lt;i&gt;postgresql&lt;/i&gt;.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ sudo apt-get install postgresql&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;6. Check the encoding format of Postgresql is UTF-8.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ sudo -u postgres psql -l&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;7. Create the database account and the corresponding database. In this case, the account is &lt;i&gt;ckan_default &lt;/i&gt;and the database is also called &lt;i&gt;ckan_default&lt;/i&gt;.&lt;br&gt;Please remember your password of your database account.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ sudo -u postgres createuser -S -D -R -P ckan_default &lt;br&gt;$ sudo -u postgres createdb -O ckan_default ckan_default -E utf-8&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;8. Edit the file at &lt;i&gt;/etc/ckan/default/production.ini &lt;/i&gt;with super user’s permission. Check the settings below:  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;sqlalchemy.url = postgresql://ckan_default:&lt;b&gt;pass&lt;/b&gt;@localhost/ckan_default&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Please replace words in bold with the password of your created account for Postgresql.  &lt;p&gt;9. Create the fold for CKAN storage. Type the following command to create storage.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ sudo mkdir /var/lib/ckan&lt;br&gt;$ chown –R www-data:www-data /var/lib/ckan&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;10. Edit the file at &lt;i&gt;/etc/ckan/default/production.ini &lt;/i&gt;with super user’s permission. Check the settings below:  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;ckan.storage_path = /var/lib/ckan&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;11. Download Solr 5.4.1&lt;br&gt;Warning: Form the CKAN official guide, if you install solr-jetty in Ubuntu 14.04, the JSP of Solr will not be supported. We have to install Solr.&lt;br&gt;There are two ways to get Solr package. &lt;br&gt;First, here you can download my provided Solr package in the cloud storage. URL: &lt;a href=&quot;https://drive.google.com/open?id=0B6PKt2-xNai_Tm9sSnJoZmx1VW8&quot;&gt;https://drive.google.com/open?id=0B6PKt2-xNai_Tm9sSnJoZmx1VW8&lt;/a&gt;&lt;br&gt;Or download it from Solr&#39;s site.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ wget http://apache.mirror1.spango.com/lucene/solr/5.4.1/solr-5.4.1.tg&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;12. Install Solr 5.4.1  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ tar xzf solr-5.4.1.tgz solr-5.4.1/bin/install_solr_service.sh --strip-components=2 &lt;br&gt;$ sudo chmod +x install_solr_service.sh &lt;br&gt;$ sudo ./install_solr_service.sh solr-5.4.1.tgz -f&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;13. Prepare the CKAN’s schema for Solr&lt;br&gt;In this case, we prepare a core named &lt;i&gt;ckan&lt;/i&gt; for Solr.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ sudo su &lt;br&gt;root$ mkdir /var/solr/data/ckan &lt;br&gt;root$ touch /var/solr/data/ckan/core.properties&lt;br&gt;root$ cp -a /opt/solr/server/solr/configsets/basic_configs/conf /var/solr/data/ckan&lt;br&gt;root$ mv /var/solr/data/ckan/conf/schema.xml /var/solr/data/ckan1/conf/schema.xml.orig&lt;br&gt;root$ ln -s /usr/lib/ckan/default/src/ckan/ckan/config/solr/schema.xml /var/solr/data/ckan/conf/schema.xml &lt;br&gt;root$ chown -R solr:solr /var/solr&lt;br&gt;root$ exit&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;14. [Support of Chinese Segmentation] Download the libraries for supporting Chinese segmentation in Solr. There are two packages: mmseg4j-core-x.y.z.jar and mmseg4j-lang-x.y.z.jar to be downloaded. I’ve prepared the zipped file – &lt;i&gt;mmseg4j.zip&lt;/i&gt; at &lt;a href=&quot;https://drive.google.com/open?id=0B6PKt2-xNai_a1luR20wQ0JtenM&quot;&gt;https://drive.google.com/open?id=0B6PKt2-xNai_a1luR20wQ0JtenM&lt;/a&gt;.  &lt;p&gt;15. [Support of Chinese Segmentation] After downloading &lt;i&gt;mmseg4j.zip&lt;/i&gt; and unzipping it into&lt;i&gt; mmseg4j-core-1.10.0.jar&lt;/i&gt; and &lt;i&gt;mmseg4j-solr-2.3.0.jar&lt;/i&gt;, upload JARs under the folder - &lt;i&gt;/opt/solr/server/solr-webapp/webapp/WEB-INF/lib&lt;/i&gt;.  &lt;p&gt;16. [Support of Chinese Segmentation]Modify the schema file at &lt;i&gt;/usr/lib/ckan/default/src/ckan/ckan/config/solr/schema.xml&lt;/i&gt; to let Solr support Chinese segmentation.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;&amp;lt;fieldType name=&quot;text&quot; class=&quot;solr.TextField&quot; positionIncrementGap=&quot;100&quot;&amp;gt;&lt;br&gt;&amp;lt;analyzer type=&quot;index&quot;&amp;gt;&lt;br&gt;&amp;lt;tokenizer class=&quot;com.chenlb.mmseg4j.solr.MMSegTokenizerFactory&quot; mode=&quot;max-word&quot;/&amp;gt;&lt;br&gt;&amp;lt;filter class=&quot;solr.SynonymFilterFactory&quot; synonyms=&quot;synonyms.txt&quot; ignoreCase=&quot;true&quot; expand=&quot;true&quot;/&amp;gt;&lt;br&gt;&amp;lt;filter class=&quot;solr.WordDelimiterFilterFactory&quot; generateWordParts=&quot;1&quot; generateNumberParts=&quot;1&quot; catenateWords=&quot;0&quot; catenateNumbers=&quot;0&quot; catenateAll=&quot;0&quot; splitOnCaseChange=&quot;1&quot;/&amp;gt;&lt;br&gt;&amp;lt;filter class=&quot;solr.SnowballPorterFilterFactory&quot; language=&quot;English&quot; protected=&quot;protwords.txt&quot;/&amp;gt;&lt;br&gt;&amp;lt;filter class=&quot;solr.LowerCaseFilterFactory&quot;/&amp;gt;&lt;br&gt;&amp;lt;filter class=&quot;solr.ASCIIFoldingFilterFactory&quot;/&amp;gt;&lt;br&gt;&amp;lt;/analyzer&amp;gt;&lt;br&gt;&amp;lt;analyzer type=&quot;query&quot;&amp;gt;&lt;br&gt;&amp;lt;tokenizer class=&quot;com.chenlb.mmseg4j.solr.MMSegTokenizerFactory&quot; mode=&quot;max-word&quot;/&amp;gt;&lt;br&gt;&amp;lt;filter class=&quot;solr.SynonymFilterFactory&quot; synonyms=&quot;synonyms.txt&quot; ignoreCase=&quot;true&quot; expand=&quot;true&quot;/&amp;gt;&lt;br&gt;&amp;lt;filter class=&quot;solr.WordDelimiterFilterFactory&quot; generateWordParts=&quot;1&quot; generateNumberParts=&quot;1&quot; catenateWords=&quot;0&quot; catenateNumbers=&quot;0&quot; catenateAll=&quot;0&quot; splitOnCaseChange=&quot;1&quot;/&amp;gt;&lt;br&gt;&amp;lt;filter class=&quot;solr.SnowballPorterFilterFactory&quot; language=&quot;English&quot; protected=&quot;protwords.txt&quot;/&amp;gt;&lt;br&gt;&amp;lt;filter class=&quot;solr.LowerCaseFilterFactory&quot;/&amp;gt;&lt;br&gt;&amp;lt;filter class=&quot;solr.ASCIIFoldingFilterFactory&quot;/&amp;gt;&lt;br&gt;&amp;lt;/analyzer&amp;gt;&lt;br&gt;&amp;lt;/fieldType&amp;gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;17. Restart Solr.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ sudo service solr restart&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;18. Serve the following URL to create the core called &lt;i&gt;ckan&lt;/i&gt; via your browser.&lt;br&gt;&lt;a href=&quot;http://127.0.0.1:8983/solr/admin/cores?action=CREATE&amp;amp;name=ckan&amp;amp;configSet=ckan&quot;&gt;http://127.0.0.1:8983/solr/admin/cores?action=CREATE&amp;amp;name=ckan&amp;amp;configSet=ckan&lt;/a&gt;  &lt;p&gt;19. Edit the file at /etc/ckan/default/production.ini with super user’s permission. Check the setting for Solr below:  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;solr_url = http://127.0.0.1:8983/solr/ckan&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;In this case, &lt;i&gt;ckan&lt;/i&gt; is the core we used in Solr, so we add ckan as suffix of the URL.  &lt;p&gt;20. Initialize your database. We have to use VirtualEnv which is a virtual environment written in Python. Here, (virtualEnv) is the mark for denoting you are in VirtualEnv.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ . /usr/lib/ckan/default/bin/activate&lt;br&gt;$ (virtualEnv) cd /usr/lib/ckan/default/src/ckan&lt;br&gt;$ (virtualEnv) paster db init -c /etc/ckan/default/production.ini&lt;br&gt;$ (virtualEnv) deactivate&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;21. Create Administrator for CKAN.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ . /usr/lib/ckan/default/bin/activate&lt;br&gt;$ (virtualEnv) cd /usr/lib/ckan/default/src/ckan&lt;br&gt;$ (virtualEnv) paster sysadmin add admin -c /etc/ckan/default/production.ini&lt;br&gt;$ (virtualEnv) deactivate&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;22. Restart apache2 and nginx.  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;553&quot;&gt; &lt;p&gt;$ sudo service apache2 restart&lt;br&gt;$ sudo service nginx restart&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;After that, you will get the following CKAN site.  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcQohLizsDqYAL3XEWYIrt2GQ4a5WxtP2VgVoTVittT59AJD8ZHcd4XtV1BHW28KA9yO8Nqgl5oQUoKZ0DDtGCMj44n-osK__olirstO777LAW7JPqEgdw9j7blI6ploycdRK0gEzI4yKa/s1600-h/Image%25252039%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;Image 39&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;Image 39&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4MawOW8lgpar90pzufj08XegYG4il1fvBxG3qMvyHNK7orqQt_dLBC5InTC2P0E3nCv6GR_OKxwjeMNLonc4kHY6lZf7bxORSX2zw3rxkghdjQjgBk6WR8h0iwbYjOw8xO8A0BPnn2Zmt/?imgmax=800&quot; width=&quot;315&quot; height=&quot;166&quot;&gt;&lt;/a&gt;  &lt;h3&gt;Support of SSL&lt;/h3&gt; &lt;p&gt;With the support of SSL, we can enhance the security of CKAN.  &lt;p&gt;First, we have to apply for an SSL certificate. For freelancers, we can request the SSL certificate from &lt;a href=&quot;https://letsencrypt.org/&quot;&gt;Let’s Encrypt&lt;/a&gt;. The method of applying such certificate has been introduced in the official site of Let’s Encrypt. Interested readers can refers to its documents.  &lt;p&gt;After getting an SSL certificate, please following the instructions in the post: &lt;a href=&quot;https://github.com/ckan/ckan/wiki/SSL&quot;&gt;Setting up CKAN with SSL.&lt;/a&gt;  &lt;p&gt;&lt;b&gt;REFERENCE&lt;/b&gt;  &lt;ol&gt; &lt;li&gt;CKAN, “Installing CKAN from Package,” CKAN. [Online]. Available: &lt;a href=&quot;http://docs.ckan.org/en/latest/maintaining/installing/install-from-package.html&quot;&gt;http://docs.ckan.org/en/latest/maintaining/installing/install-from-package.html&lt;/a&gt;  &lt;li&gt;CKAN, “Installing CKAN from Source,” CKAN. [Online]. Available: &lt;a href=&quot;http://docs.ckan.org/en/latest/maintaining/installing/install-from-source.html&quot;&gt;http://docs.ckan.org/en/latest/maintaining/installing/install-from-source.html&lt;/a&gt;  &lt;li&gt;Koen Vlasinkel, “How to Install Solr 5.2.1 on Ubuntu 14.04,” Digital Ocean Community. [Online]. Available: &lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-install-solr-5-2-1-on-ubuntu-14-04&quot;&gt;https://www.digitalocean.com/community/tutorials/how-to-install-solr-5-2-1-on-ubuntu-14-04&lt;/a&gt;  &lt;li&gt;Hvwaldow, “How to Upgrade to SOLR 5.3.1 on Debian Jessie for Use with CKAN,” CKAN. [Online]. Available: &lt;a href=&quot;https://gist.github.com/hvwaldow/67fecf80a9790b5c9153#filesolr-upgrade-md&quot;&gt;https://gist.github.com/hvwaldow/67fecf80a9790b5c9153#filesolr-upgrade-md&lt;/a&gt;  &lt;li&gt;CKAN2 安裝教學. URL: &lt;a href=&quot;http://ckan-docs-tw.readthedocs.io/zh_TW/2.4/install.html&quot;&gt;http://ckan-docs-tw.readthedocs.io/zh_TW/2.4/install.html&lt;/a&gt;  &lt;li&gt;CKAN, “Setting up CKAN with SSL,”. [Online]. Available: &lt;a href=&quot;https://github.com/ckan/ckan/wiki/SSL&quot;&gt;https://github.com/ckan/ckan/wiki/SSL&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/8967952863346322514/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2016/08/install-ckan-25-on-ubuntu-1404-lts.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/8967952863346322514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/8967952863346322514'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2016/08/install-ckan-25-on-ubuntu-1404-lts.html' title='Install CKAN 2.5 on Ubuntu 14.04 LTS'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4MawOW8lgpar90pzufj08XegYG4il1fvBxG3qMvyHNK7orqQt_dLBC5InTC2P0E3nCv6GR_OKxwjeMNLonc4kHY6lZf7bxORSX2zw3rxkghdjQjgBk6WR8h0iwbYjOw8xO8A0BPnn2Zmt/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-5384936923678327763</id><published>2016-07-21T14:42:00.001+08:00</published><updated>2016-07-21T14:47:22.048+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Design"/><category scheme="http://www.blogger.com/atom/ns#" term="wordpress"/><category scheme="http://www.blogger.com/atom/ns#" term="程式設計"/><category scheme="http://www.blogger.com/atom/ns#" term="網頁撰寫"/><title type='text'>[Wordpress] A Method for combining both of plain and custom URLs</title><content type='html'>&lt;p&gt;In Wordpress, we usually set the custom URLs for the purpose of SEO.&lt;br&gt;For the old plain URLs which are previously published to other sites, we should maintain them by redirecting to the new custom URLs.  &lt;p&gt;The &lt;em&gt;htaccess&lt;/em&gt; setting can simply do the redirection to a static page, such as response 404 not found or see other new site. Sometimes, we don’t know how many old plain urls are published. It cannot fulfill our needs for mapping the &lt;em&gt;old plain&lt;/em&gt; URLs to the&lt;em&gt; corresponding new URLs&lt;/em&gt;. For example, we want to create the following rules of redirections:  &lt;p&gt;redirect &lt;a href=&quot;http://example.com/?p=123&quot;&gt;http://example.com/?p=123&lt;/a&gt; to &lt;a href=&quot;http://example.com/custom/link&quot;&gt;http://example.com/custom/link&lt;/a&gt;  &lt;p&gt;redirect &lt;a href=&quot;http://example.com/?p=456 to&quot;&gt;http://example.com/?p=456 to&lt;/a&gt; &lt;a href=&quot;http://example.com/the/other_links&quot;&gt;http://example.com/the/other_links&lt;/a&gt;  &lt;p&gt;There may be more old URLs we don’t be aware of are published. A general soluton is to keep both of the plain and custom URLs.  &lt;p&gt;In this case, we use &lt;em&gt;add_filter&lt;/em&gt; function provided by Wordpress. &lt;br&gt;Navigate your directory of currently used theme and find &lt;em&gt;functions.php&lt;/em&gt; and put a piece of codes as follows: &lt;pre class=&quot;brush: php;&quot;&gt;function compatible_link( $postlink, $redirect) {
    $id = get_query_var(&#39;p&#39;, -1);
    if($id !== -1 &amp;amp;&amp;amp; is_numeric($id)) {
        return get_permalink($id);
    }
    return $postlink;
}

add_filter(&#39;post_type_link&#39;, &#39;compatible_link&#39;, 10, 2);
&lt;/pre&gt;
&lt;p&gt;Done! Enjoy your website.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;REFERENCE:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Rewriting URLs in WordPress: Tips and Plugins. URL: &lt;a title=&quot;http://www.hongkiat.com/blog/wordpress-url-rewrite/&quot; href=&quot;http://www.hongkiat.com/blog/wordpress-url-rewrite/&quot;&gt;http://www.hongkiat.com/blog/wordpress-url-rewrite/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wordpress的Hook機制與原理. URL: &lt;a title=&quot;http://www.mrmu.com.tw/2011/10/10/wordpress-hook/&quot; href=&quot;http://www.mrmu.com.tw/2011/10/10/wordpress-hook/&quot;&gt;http://www.mrmu.com.tw/2011/10/10/wordpress-hook/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Custom post type with post_id in permalink structure. URL: &lt;a title=&quot;https://wordpress.org/support/topic/custom-post-type-permalink-structure&quot; href=&quot;https://wordpress.org/support/topic/custom-post-type-permalink-structure&quot;&gt;https://wordpress.org/support/topic/custom-post-type-permalink-structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Custom Login Url with plain permalink format. URL: &lt;a title=&quot;https://wordpress.org/support/topic/custom-login-url-with-plain-permalink-format&quot; href=&quot;https://wordpress.org/support/topic/custom-login-url-with-plain-permalink-format&quot;&gt;https://wordpress.org/support/topic/custom-login-url-with-plain-permalink-format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Function Reference/get query var. URL:&lt;a title=&quot;https://codex.wordpress.org/Function_Reference/get_query_var&quot; href=&quot;https://codex.wordpress.org/Function_Reference/get_query_var&quot;&gt;https://codex.wordpress.org/Function_Reference/get_query_var&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CREATING CUSTOM PERMALINKS IN WORDPRESS. URL:&lt;a href=&quot;http://wp-events-plugin.com/tutorials/creating-custom-permalinks-in-wordpress/&quot;&gt;http://wp-events-plugin.com/tutorials/creating-custom-permalinks-in-wordpress/&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/5384936923678327763/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2016/07/wordpress-method-for-combining-both-of.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/5384936923678327763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/5384936923678327763'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2016/07/wordpress-method-for-combining-both-of.html' title='[Wordpress] A Method for combining both of plain and custom URLs'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-7243233335936724599</id><published>2016-04-12T09:26:00.001+08:00</published><updated>2016-04-12T09:26:54.381+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HTML"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Design"/><title type='text'>HTML Specification Standard</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://html.spec.whatwg.org&quot;&gt;https://html.spec.whatwg.org&lt;/a&gt;&lt;br&gt;The version of HTML specification description is greater than W3C’s. &lt;img class=&quot;wlEmoticon wlEmoticon-smile&quot; style=&quot;border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none&quot; alt=&quot;Smile&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjShMJftSqpgoyLEjUorUnFATUDD-ZyJmSGXQf9OeggBI2lXmn_hsH803aYAKNxUgNdi0LoVWoxc5TMuqcGjOr7it7CRaO36oXbVzoLsAsVljzejBfg7_YTnlGNs_g8Gn1feRP41U9ubayW/?imgmax=800&quot;&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/7243233335936724599/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2016/04/html-specification-standard.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/7243233335936724599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/7243233335936724599'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2016/04/html-specification-standard.html' title='HTML Specification Standard'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjShMJftSqpgoyLEjUorUnFATUDD-ZyJmSGXQf9OeggBI2lXmn_hsH803aYAKNxUgNdi0LoVWoxc5TMuqcGjOr7it7CRaO36oXbVzoLsAsVljzejBfg7_YTnlGNs_g8Gn1feRP41U9ubayW/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-3835053388316323913</id><published>2016-02-14T20:10:00.001+08:00</published><updated>2016-02-14T20:10:12.687+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CKAN"/><category scheme="http://www.blogger.com/atom/ns#" term="Software"/><title type='text'>How to install SSL on CKAN</title><content type='html'>&lt;p&gt;Please refer to the configuration files: &lt;a href=&quot;https://gist.github.com/nigelbabu/076ad12c13b2071de8e1&quot;&gt;https://gist.github.com/nigelbabu/076ad12c13b2071de8e1&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Related references:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;(Chinese) &lt;a href=&quot;https://blog.longwin.com.tw/2015/11/let-encrypt-ssl-certificate-setup-2015/&quot;&gt;Let’s Encrypt 的 SSL 憑證安裝&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-14-04&quot;&gt;How To Secure Nginx with Let&#39;s Encrypt on Ubuntu 14.04&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/3835053388316323913/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2016/02/how-to-install-ssl-on-ckan.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/3835053388316323913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/3835053388316323913'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2016/02/how-to-install-ssl-on-ckan.html' title='How to install SSL on CKAN'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-5993479545505557510</id><published>2016-01-29T18:25:00.001+08:00</published><updated>2016-01-29T18:25:22.146+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Design"/><title type='text'>[Software] Pencil Project</title><content type='html'>&lt;p&gt;Web developers can try the &lt;em&gt;Pencil Project&lt;/em&gt;. It offers not only a GUI to design the webpages, but also exports all of the webpages to a single web page. These features help you a lot to present your designed pages for customers. &lt;br&gt;Official Site: &lt;a title=&quot;http://pencil.evolus.vn/&quot; href=&quot;http://pencil.evolus.vn/&quot;&gt;http://pencil.evolus.vn/&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/5993479545505557510/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2016/01/software-pencil-project.html#comment-form' title='390 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/5993479545505557510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/5993479545505557510'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2016/01/software-pencil-project.html' title='[Software] Pencil Project'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>390</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-2382292453849116572</id><published>2016-01-14T19:33:00.000+08:00</published><updated>2016-01-16T10:47:27.101+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eID"/><category scheme="http://www.blogger.com/atom/ns#" term="ICAO"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><category scheme="http://www.blogger.com/atom/ns#" term="科技"/><category scheme="http://www.blogger.com/atom/ns#" term="軟體(Software)"/><title type='text'>[eID] The short survey of electronic ID cards.</title><content type='html'>&lt;span style=&quot;color: #b45f06;&quot;&gt;[Chinese]&lt;/span&gt;&lt;br /&gt;
根據新版台灣國民身分證的新聞報導[1]，大部分人會擔心這類措施的相關問題。像是：&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;為什麼我們政府要遵循國際民航組織ICAO(&lt;b&gt;I&lt;/b&gt;nternational &lt;b&gt;C&lt;/b&gt;ivil &lt;b&gt;A&lt;/b&gt;viation &lt;b&gt;O&lt;/b&gt;rganization)的標準呢？&lt;/li&gt;
&lt;li&gt;為什麼機讀碼這麼像中國政府的台胞證形式呢？&lt;/li&gt;
&lt;/ol&gt;
我在此做了一些關於電子身分證(electronic ID, eID)的研究：&lt;br /&gt;
&lt;br /&gt;
ICAO的策略目標強烈地與United Nations Sustainable Development Goals (SDGs)做連結，滿足17項中的13項。包含了確保健康的生命、達到性別平等、建立彈性的基礎設施、確保可承受的消耗與產製樣式、降低國與國之間的不平等性等等。[2]&lt;br /&gt;
為了達到這些目標，其中的一個解決方案是推動可機讀旅行文件，稱為ICAO Doc 9303.[3]&lt;br /&gt;
&lt;br /&gt;
為什麼ICAO Doc 9303這麼重要？因為它可讓機器容易讀取你的個人資訊，包含姓名、出生日期、出生地與其他欄位。為了保護這些隱私資料，一系列的安全措施也被採用 (請見[3] 的Part 11與Part 12)。&lt;br /&gt;
&lt;br /&gt;
為了建立eID，德國的新版身分證也採用ICAO Doc 9303 [4]。(事實上，它採用其他方案 ISO/IEC standard 14443 [5]，但也使用ICAO Doc 9303的部分標準[6])&lt;br /&gt;
&lt;br /&gt;
這就是為何我們政府聲稱eID遵循ICAO的國際規範。&lt;br /&gt;
&lt;br /&gt;
另一個問題：「為什麼機讀碼這麼像中國政府的台胞證形式呢？」&lt;br /&gt;
可機讀護照(Machine Readable Passport, MRP)採用可機讀區域(Machine Readable Zone)來讓機器輕易讀取[7][8]，這樣的措施也被德國、義大利等國的身分證採用，新式身分證也採用類似的編碼方式。這就是為何新版台胞證有類似的機讀碼。&lt;br /&gt;
&lt;br /&gt;
更多的eID趨勢，可以參見科技新報的報導[9]。&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #b45f06;&quot;&gt;[English]&lt;/span&gt;&lt;br /&gt;
According to the news of electronic ID card for Taiwanese [1], most of people wonder the problems of this measure. Some problems arises:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Why does our government follow the standard of ICAO(&lt;b&gt;I&lt;/b&gt;nternational &lt;b&gt;C&lt;/b&gt;ivil &lt;b&gt;A&lt;/b&gt;viation &lt;b&gt;O&lt;/b&gt;rganization)?&lt;/li&gt;
&lt;li&gt;Why is the machine readable code very similar to that of Taiwanese citizen card which China provided?&lt;/li&gt;
&lt;/ul&gt;
I make a short survey on the specification of electronic ID card (abbreviate&lt;i&gt; eID&lt;/i&gt;).&lt;br /&gt;
&lt;br /&gt;
ICAO&#39;s strategic objective strongly linked to 13 of the 17 United Nations Sustainable Development Goals (SDGs) proposed. Those include ensuring healthy lives, achieving gender equality, building resilient infrastructure, ensuring sustainable consumption and production patterns, reducing inequality among countries and so on.[2]&lt;br /&gt;
For achieving these goals, one of the solution is to promote &lt;i&gt;Machine Readable Travel Documents&lt;/i&gt;, called ICAO Doc 9303.[3]&lt;br /&gt;
&lt;br /&gt;
Why is the ICAO Doc 9303 important? Because it can let machines easily read your personal information including name, birthday, born town and other fields. For protecting the private data, a series of security measures are adopted. (See Parts 11 and 12 in [3].)&lt;br /&gt;
&lt;br /&gt;
For creating eID cards, ICAO Doc 9303 is one of the solution for German new ID card [4]. (Actually, it adopts another solution called ISO/IEC standard 14443 [5] but also uses part of the specification of ICAO Doc 9303 [6]).&lt;br /&gt;
&lt;br /&gt;
That&#39;s why our government say that the new ID card can be compatible with international specification - ICAO.&lt;br /&gt;
&lt;br /&gt;
The other question: &quot;Why is the machine readable code very similar to Taiwanese citizen card which China provided?&quot;&lt;br /&gt;
&lt;br /&gt;
The machine readable passport (MRP) should use a machine readable zone (MRZ) to let machine easily read the information [7][8] which is also adopted by multiple eID cards like German, Italian and so on. The Taiwanese citizen card provided by China use the similar encoding method. That&#39;s why the new Taiwanese use the MRZ for machines.&lt;br /&gt;
As aforementioned, the security is also ensured.&lt;br /&gt;
For further trend of eID, please refer to the post of TechNews.[9] &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: white;&quot;&gt;&lt;span style=&quot;background-color: #3d85c6;&quot;&gt;References&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;仝澤蓉, &quot;新版身分證樣式曝光 將採中英對照,&quot;&amp;nbsp; &lt;i&gt;聯合財經網&lt;/i&gt; [Online]. Available:&amp;nbsp; &lt;a href=&quot;http://goo.gl/HHKvWx&quot;&gt;http://goo.gl/HHKvWx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ICAO, &quot;ICAO and the United Nations Sustainable Development Goals,&quot;&lt;i&gt; ICAO&lt;/i&gt; [Online]. Available:&lt;a href=&quot;http://www.icao.int/about-icao/aviation-development/Pages/SDG.aspx&quot;&gt;http://www.icao.int/about-icao/aviation-development/Pages/SDG.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ICAO, &quot;Machine Readable Travel Documents,&quot; ICAO [Online] Available: &lt;a href=&quot;http://www.icao.int/publications/pages/publication.aspx?docnum=9303&quot;&gt;http://www.icao.int/publications/pages/publication.aspx?docnum=9303&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moritz Horsch, Johannes Braun and Alex Wiesmaier, &quot;Mobile eID application for the German identity card,&quot; Technische Universität Darmstadt, Technical Report [Online]. Available: &lt;a href=&quot;https://www.cdc.informatik.tu-darmstadt.de/reports/TR/Mobile_eID_app_for_the_German_ID_card.pdf&quot;&gt;https://www.cdc.informatik.tu-darmstadt.de/reports/TR/Mobile_eID_app_for_the_German_ID_card.pdf&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&quot;ISO/IEC 14443,&quot; Wikipedia [Online]. Available: &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO/IEC_14443&quot;&gt;https://en.wikipedia.org/wiki/ISO/IEC_14443&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&quot;National identity cards in the European Economic Area,&quot; Wikipedia [Online]. Available: &lt;a href=&quot;https://en.wikipedia.org/wiki/National_identity_cards_in_the_European_Economic_Area&quot;&gt;https://en.wikipedia.org/wiki/National_identity_cards_in_the_European_Economic_Area&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&quot;Machine-readable passport,&quot; Wikipedia [Online] Available: &lt;a href=&quot;https://en.wikipedia.org/wiki/Machine-readable_passport#Official_travel_documents&quot;&gt;https://en.wikipedia.org/wiki/Machine-readable_passport#Official_travel_documents&lt;/a&gt;&amp;nbsp; &lt;/li&gt;
&lt;li&gt;&quot;可機讀護照,&quot; Wikiwand [Online] Available:&lt;a href=&quot;http://goo.gl/iG87tf&quot;&gt;http://goo.gl/iG87tf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sanada Yukimura, &quot;台灣新版晶片身分證 2017 年上路？ 看全球 eID 趨勢,&quot; 科技新報 [Online] Available: &lt;a href=&quot;http://technews.tw/2015/05/11/taiwan-eid-2007/&quot;&gt;http://technews.tw/2015/05/11/taiwan-eid-2007/&amp;nbsp;&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/2382292453849116572/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2016/01/eid-small-survey-of-electronic-id-cards.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/2382292453849116572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/2382292453849116572'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2016/01/eid-small-survey-of-electronic-id-cards.html' title='[eID] The short survey of electronic ID cards.'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-8006995618001799422</id><published>2016-01-12T15:46:00.001+08:00</published><updated>2016-01-12T15:46:15.792+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Docear"/><category scheme="http://www.blogger.com/atom/ns#" term="Docear4Word"/><title type='text'>[Docear4Word] The beta version for fixing bugs on displaying reference list. </title><content type='html'>Today, I downloaded the &lt;a href=&quot;https://github.com/Docear/Docear4Word&quot;&gt;source code of Docear4Word&lt;/a&gt; with version 1.23 in order to fix the bug I reported in my previous &lt;a href=&quot;http://blog.allenworkspace.net/2016/01/docear4word-fix-bug-from-docear4word.html&quot;&gt;post&lt;/a&gt;.&lt;br /&gt;
After struggling a while, the improvement is done.&lt;br /&gt;
Please visit my created repository here. (URL: &lt;a href=&quot;https://github.com/allen501pc/Docear4Word&quot;&gt;https://github.com/allen501pc/Docear4Word&lt;/a&gt; )</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/8006995618001799422/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2016/01/docear4word-beta-version-for-fixing.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/8006995618001799422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/8006995618001799422'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2016/01/docear4word-beta-version-for-fixing.html' title='[Docear4Word] The beta version for fixing bugs on displaying reference list. '/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-6674876962829259287</id><published>2016-01-02T17:26:00.000+08:00</published><updated>2016-01-03T11:26:54.287+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Docear"/><category scheme="http://www.blogger.com/atom/ns#" term="學術研究"/><title type='text'>[Docear4Word] Fix the bug from Docear4Word that doesn&#39;t display URL in IEEE-with-URL style.</title><content type='html'>&lt;a href=&quot;http://www.docear.org/&quot;&gt;Docear&lt;/a&gt; is the one of academic literature suites I love. It provides&amp;nbsp; not only a comprehensive mind map tool but also a reference management tool inherited by &lt;a href=&quot;http://jabref.sourceforge.net/&quot;&gt;JabRef&lt;/a&gt;. By using the JabRef&#39;s managed reference results, the extension, &lt;a href=&quot;http://www.docear.org/software/add-ons/docear4word/overview/&quot;&gt;Docear4Word , &lt;/a&gt;can help us easily add citations and display them with many styles. However, the provided &lt;i&gt;IEEE-with-URL&lt;/i&gt; style has a bug on displaying URL.&lt;br /&gt;
No matter how URLs&amp;nbsp; you add, the generated reference list never shows URLs.&lt;br /&gt;
That&#39;s because the included &lt;i&gt;ieee-w-url.csl&lt;/i&gt; doesn&#39;t add the macro for generating URLs when you use the entry types except &lt;i&gt;webpage&lt;/i&gt;. The &lt;i&gt;webpage&lt;/i&gt; entry type is not set as default entry types in &lt;a href=&quot;http://www.docear.org/software/add-ons/docear4word/overview/&quot;&gt;Docear&lt;/a&gt;. That&#39;s why you add any entry types that Docear provided, then the URLs are never displayed!&lt;br /&gt;
One&amp;nbsp; solution is to replace the old &lt;i&gt;ieee-w-url.csl&lt;/i&gt; with newer one.&lt;br /&gt;
According to Prof. Dr. Artur Lugmayr&#39;s post [1], we just follow these steps:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Open the directory named &quot;&lt;i&gt;C:\ProgramData\Docear4Word\Styles&lt;/i&gt;&quot;&lt;/li&gt;
&lt;li&gt;Getting the administrator permission, open the file called &quot;&lt;i&gt;ieee-w-url.csl&lt;/i&gt;&quot; in the directory.&lt;/li&gt;
&lt;li&gt;Replace the whole content with the newer one I put in Github. (mirrored from &lt;a href=&quot;https://github.com/citation-style-language/styles&quot;&gt;the git&lt;/a&gt; [2] of citation-style-languages) The newer content of this csl is on &lt;a href=&quot;https://github.com/allen501pc/styles/blob/master/ieee-with-url.csl&quot;&gt;https://github.com/allen501pc/styles/blob/master/ieee-with-url.csl&lt;/a&gt;. Then save it!&lt;/li&gt;
&lt;/ol&gt;
&lt;a href=&quot;http://www.docear.org/&quot;&gt;Docear&lt;/a&gt;是我喜愛的學術文獻整理套件之一。它提供了全面性的心智圖以及基於&lt;a href=&quot;http://jabref.sourceforge.net/&quot;&gt;JabRef&lt;/a&gt;的參考文獻整理工具。其外掛 &lt;a href=&quot;http://www.docear.org/software/add-ons/docear4word/overview/&quot;&gt;Docear4Word&lt;/a&gt; 藉著使用JabRef的整理文獻結果，幫助我們輕易地加入文獻參考與展現不同風格的參考文獻。然而，提供的IEEE-with-URL風格在輸出URL時，存在著一個臭蟲。&lt;br /&gt;
無論您如何加入URL，產生的文獻列表卻從不顯示這些URL。這是因為內建的ieee-w-url.csl 除了webpage這個entry type以外，並無產生URL的巨集。而webpage這個entry type卻沒有成為Docear的內建entry type。這就是無論你怎麼在Docear提供的entry type加入URL，這些URL卻從未顯示。 &lt;br /&gt;
解決之道是替換掉舊的ieee-w-url.csl。根據Prof. Dr. Artur Lugmayr的貼文[1]，我們只要遵循以下步驟即可：&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;開啟 &lt;i&gt;C:\ProgramData\Docear4Word\Styles&lt;/i&gt; 目錄。&lt;/li&gt;
&lt;li&gt;在此目錄中，以管理者權限開啟ieee-w-url.csl檔案。&lt;/li&gt;
&lt;li&gt;到本人提供的Gibhub&lt;a href=&quot;https://github.com/allen501pc/styles/blob/master/ieee-with-url.csl&quot;&gt;https://github.com/allen501pc/styles/blob/master/ieee-with-url.csl&lt;/a&gt; 取得該新版的內容格式，替換掉舊的(該內容格式是由Citation-Style-Languages的&lt;a href=&quot;https://github.com/citation-style-language/styles&quot;&gt;Github&lt;/a&gt; [2]鏡射而來。)&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;b&gt;References&lt;/b&gt;&lt;br /&gt;
[1] Prof. Dr. Artur Lugmayr, &quot;Professional and free referencing software,&quot; [Online] Available: &lt;a href=&quot;http://artur-lugmayr.blogspot.tw/2013/09/professional-free-referencing-software.html&quot;&gt;http://artur-lugmayr.blogspot.tw/2013/09/professional-free-referencing-software.html&lt;/a&gt;&lt;br /&gt;
[2]&amp;nbsp;&lt;a href=&quot;http://citationstyles.org/&quot;&gt;CitationStyles.org&lt;/a&gt;, &quot;Official repository for Citation Style Language (CSL) citation styles,&quot; [Online] Available: &lt;a href=&quot;https://github.com/citation-style-language/styles&quot;&gt;https://github.com/citation-style-language/styles&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/6674876962829259287/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2016/01/docear4word-fix-bug-from-docear4word.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/6674876962829259287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/6674876962829259287'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2016/01/docear4word-fix-bug-from-docear4word.html' title='[Docear4Word] Fix the bug from Docear4Word that doesn&#39;t display URL in IEEE-with-URL style.'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-8293919455314654956</id><published>2015-11-24T11:19:00.000+08:00</published><updated>2015-11-24T11:20:47.324+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="visual studio"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><category scheme="http://www.blogger.com/atom/ns#" term="程式設計"/><category scheme="http://www.blogger.com/atom/ns#" term="網路"/><category scheme="http://www.blogger.com/atom/ns#" term="軟體(Software)"/><title type='text'>Solve the problem of Causing IIS Express Slow Down</title><content type='html'>[Chinese/中文]&lt;br /&gt;
最近我的Visual Studio 2013內建的IIS Express 實在跑太慢了，而且常常回報無服務回應的錯誤。根據此&lt;a href=&quot;https://social.msdn.microsoft.com/Forums/en-US/8e42baa5-38c7-4fef-b120-b0dd22ba8228/vs-2013-professional-web-dev-server-iis-express-is-very-slow?forum=visualstudiogeneral&quot;&gt;條目&lt;/a&gt;，看起來像是logger元件出問題。&lt;br /&gt;
為了解決此一問題，我們可以嘗試以下步驟：&lt;br /&gt;
1. 用系統管理員權限開啟命令提示字元視窗 (&lt;b&gt;cmd&lt;/b&gt;&amp;nbsp;console)&lt;br /&gt;
2. 輸入以下指令&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp; (1) cd&amp;nbsp;&lt;span style=&quot;background-color: white; line-height: 24px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; line-height: 24px;&quot;&gt;%systemroot%\system32\inetsrv\&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 24px;&quot;&gt;&amp;nbsp; (2)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;appcmd&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; line-height: 20.162px;&quot;&gt;&amp;nbsp;set config /section:&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;urlCompression&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; line-height: 20.162px;&quot;&gt;&amp;nbsp;/doStaticCompression:&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;True&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 24px;&quot;&gt;&amp;nbsp; (3)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;appcmd&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; line-height: 20.162px;&quot;&gt;&amp;nbsp;set config /section:&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;urlCompression&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; line-height: 20.162px;&quot;&gt;&amp;nbsp;/doDynamicCompression:&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;False&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 24px;&quot;&gt;&amp;nbsp; (4)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong style=&quot;background-color: white; border: 0px; color: #333333; font-family: Calibri; font-size: 14.6667px; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;appcmd&amp;nbsp;&lt;/strong&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; line-height: 20.162px;&quot;&gt;set config /section:httpLogging /dontLog:&lt;/span&gt;&lt;strong style=&quot;background-color: white; border: 0px; color: #333333; font-family: Calibri; font-size: 14.6667px; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;True&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
[English]&lt;br /&gt;
Recently, my Visual Studio 2013&#39;s built-in IIS Express runs too slower and it often reports errors about no service response.&lt;br /&gt;
According to &lt;a href=&quot;https://social.msdn.microsoft.com/Forums/en-US/8e42baa5-38c7-4fef-b120-b0dd22ba8228/vs-2013-professional-web-dev-server-iis-express-is-very-slow?forum=visualstudiogeneral&quot;&gt;the thread&lt;/a&gt;, it seems logger component of IISExpress broken.&lt;br /&gt;
To fix the problem, we can try the following steps:&lt;br /&gt;
1. Open a&amp;nbsp;&lt;b&gt;cmd&lt;/b&gt; console with &lt;b&gt;Administrator permission&lt;/b&gt;.&lt;br /&gt;
2. Type the subsequent commands:&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp; (1) cd&amp;nbsp;&lt;span style=&quot;background-color: white; line-height: 24px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; line-height: 24px;&quot;&gt;%systemroot%\system32\inetsrv\&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 24px;&quot;&gt;&amp;nbsp; (2)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;appcmd&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; line-height: 20.162px;&quot;&gt;&amp;nbsp;set config /section:&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;urlCompression&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; line-height: 20.162px;&quot;&gt;&amp;nbsp;/doStaticCompression:&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;True&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 24px;&quot;&gt;&amp;nbsp; (3)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;appcmd&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; line-height: 20.162px;&quot;&gt;&amp;nbsp;set config /section:&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;urlCompression&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; line-height: 20.162px;&quot;&gt;&amp;nbsp;/doDynamicCompression:&lt;/span&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; font-weight: bold; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;False&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 24px;&quot;&gt;&amp;nbsp; (4)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong style=&quot;background-color: white; border: 0px; color: #333333; font-family: Calibri; font-size: 14.6667px; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;appcmd&amp;nbsp;&lt;/strong&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;calibri&amp;quot;; font-size: 14.6667px; line-height: 20.162px;&quot;&gt;set config /section:httpLogging /dontLog:&lt;/span&gt;&lt;strong style=&quot;background-color: white; border: 0px; color: #333333; font-family: Calibri; font-size: 14.6667px; line-height: 20.162px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;True&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #0b5394; color: white;&quot;&gt;Reference&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Mike Volodarsky, &quot;Getting Start with Appcmd.exe&quot;, Microsoft Developer Network. URL:&amp;nbsp;&lt;a href=&quot;http://www.iis.net/learn/get-started/getting-started-with-iis/getting-started-with-appcmdexe&quot;&gt;http://www.iis.net/learn/get-started/getting-started-with-iis/getting-started-with-appcmdexe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&quot;VS 2013 Professional - Web Dev Server (IIS Express) is very slow&quot;, Microsoft Developer Network. URL:&amp;nbsp;&lt;a href=&quot;https://social.msdn.microsoft.com/Forums/en-US/8e42baa5-38c7-4fef-b120-b0dd22ba8228/vs-2013-professional-web-dev-server-iis-express-is-very-slow?forum=visualstudiogeneral&quot;&gt;https://social.msdn.microsoft.com/Forums/en-US/8e42baa5-38c7-4fef-b120-b0dd22ba8228/vs-2013-professional-web-dev-server-iis-express-is-very-slow?forum=visualstudiogeneral&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/8293919455314654956/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2015/11/solve-problem-of-causing-iis-express.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/8293919455314654956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/8293919455314654956'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2015/11/solve-problem-of-causing-iis-express.html' title='Solve the problem of Causing IIS Express Slow Down'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-3980371614495574405</id><published>2015-05-30T20:22:00.000+08:00</published><updated>2015-05-30T20:27:58.394+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="學術研究"/><category scheme="http://www.blogger.com/atom/ns#" term="程式設計"/><title type='text'>Resource Scheduler , Calculator, Short-Circuit in Hadoop YARN and HDFS</title><content type='html'>In order to execute the next-year plan, I search the research topics and 
technologies in Hadoop YARN and HDFS, then make a note as follows:&lt;br /&gt;
&lt;br /&gt;
Since &lt;a href=&quot;http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html&quot; target=&quot;_blank&quot;&gt;Hadoop YARN&lt;/a&gt; was proposed, the new generation technology are 
continusly discussed. For knowing the work of YARN, please refer to the post [&lt;a href=&quot;http://blog.cloudera.com/blog/2014/05/how-apache-hadoop-yarn-ha-works/&quot; target=&quot;_blank&quot;&gt;1&lt;/a&gt;]. &lt;br /&gt;
The capacity scheduler of YARN[&lt;a href=&quot;http://hadoop.apache.org/docs/r2.5.2/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html#Configuration&quot; target=&quot;_blank&quot;&gt;2&lt;/a&gt;][&lt;a href=&quot;http://blog.csdn.net/skywalker_only/article/details/41351147&quot; target=&quot;_blank&quot;&gt;3&lt;/a&gt;] provides a default capacity scheduler, 
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler 
[&lt;a href=&quot;http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-yarn-server-resourcemanager/2.6.0/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java/&quot; target=&quot;_blank&quot;&gt;4&lt;/a&gt;], to let hadoop eco-system manipulates its’ resources. It 
also provides resource calculator, 
org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator [&lt;a href=&quot;http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-yarn-common/2.6.0/org/apache/hadoop/yarn/util/resource/DefaultResourceCalculator.java/&quot; target=&quot;_blank&quot;&gt;5&lt;/a&gt;], to calculate the memory usage, the disk usage and the cpu 
usage of each compute node. &lt;br /&gt;
For those system administrators and developers 
who are curious about the operations of resource allocation and the scheduler, 
please see the reports [&lt;a href=&quot;http://hortonworks.com/blog/resource-localization-in-yarn-deep-dive/&quot; target=&quot;_blank&quot;&gt;6&lt;/a&gt;], [&lt;a href=&quot;http://blog.sequenceiq.com/blog/2014/07/22/schedulers-part-1/&quot; target=&quot;_blank&quot;&gt;7&lt;/a&gt;] and [&lt;a href=&quot;http://blog.sequenceiq.com/blog/2014/09/09/yarn-schedulers-demystified-part-2-fair/&quot; target=&quot;_blank&quot;&gt;8&lt;/a&gt;]. &lt;br /&gt;
In scientific area, Project HaSTE [&lt;a href=&quot;http://www.cs.umb.edu/~shengbo/research/haste.html&quot; target=&quot;_blank&quot;&gt;9&lt;/a&gt;] 
proposed a new Hadoop YARN scheduling algorithm, which aims at efficiently 
utilizing the resources for scheduling map/reduce tasks in Hadoop YARN and 
improving the makespan of MapReduce jobs. &lt;br /&gt;
&lt;br /&gt;
On the other hand, HDFS [&lt;a href=&quot;http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Related_Documentation&quot; target=&quot;_blank&quot;&gt;10&lt;/a&gt;] is a usually used file system in Hadoop. However, it needs 
TCP socket connection to read/write data. Due to this reason, the IO performance 
will be lower than directly reading from local disk without network connection. 
Therefore, HDFS provides a function called HDFS Short-Circuit Local Reads [&lt;a href=&quot;https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/ShortCircuitLocalReads.html&quot; target=&quot;_blank&quot;&gt;11&lt;/a&gt;] and also provides a native libaray to directly access the 
HDFS file system. According to the report [&lt;a href=&quot;http://blog.cloudera.com/blog/2013/08/how-improved-short-circuit-local-reads-bring-better-performance-and-security-to-hadoop/&quot; target=&quot;_blank&quot;&gt;12&lt;/a&gt;], the I/O performance of using Short-Circuit is better than 
TCP. &lt;br /&gt;
ps. The other tricky technology to improve the I/O performance of HDFS 
is to use CombineFileInputFormat [&lt;a href=&quot;http://hadoopblog.blogspot.de/2009/09/hdfs-block-replica-placement-in-your.html&quot; target=&quot;_blank&quot;&gt;13&lt;/a&gt;][&lt;a href=&quot;http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/lib/CombineFileInputFormat.html&quot; target=&quot;_blank&quot;&gt;14&lt;/a&gt;]. But I don’t think this method is better than using 
Short-Circuit. &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #4f81bd; color: white;&quot;&gt;Reference&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #4f81bd; color: white;&quot;&gt;&lt;/span&gt;

&lt;ol&gt;
&lt;li&gt;Karthik Kambatla, Wing Yew Poon, and Vikram Srivastava, “How Apache Hadoop 
YARN HA Works,” Cludera. Available: [Online] &lt;a href=&quot;http://blog.cloudera.com/blog/2014/05/how-apache-hadoop-yarn-ha-works/&quot; title=&quot;http://blog.cloudera.com/blog/2014/05/how-apache-hadoop-yarn-ha-works/&quot;&gt;http://blog.cloudera.com/blog/2014/05/how-apache-hadoop-yarn-ha-works/&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;Hadoop, “Haddop MapReduce Next Generation – Capacity Scheduler”, Apache 
Hadoop. Available: [Online] &lt;a href=&quot;http://hadoop.apache.org/docs/r2.5.2/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html#Configuration&quot; title=&quot;http://hadoop.apache.org/docs/r2.5.2/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html#Configuration&quot;&gt;http://hadoop.apache.org/docs/r2.5.2/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html#Configuration&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;skyWalker_ONLY, “Hadoop-2.4.1学习之容量调度器”. Available: [Online] &lt;a href=&quot;http://blog.csdn.net/skywalker_only/article/details/41351147&quot; title=&quot;http://blog.csdn.net/skywalker_only/article/details/41351147&quot;&gt;http://blog.csdn.net/skywalker_only/article/details/41351147&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;GrepCode, “CapacityScheduler”, GrepCode.com. Available: [Online] &lt;a href=&quot;http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-yarn-server-resourcemanager/2.6.0/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java/&quot; title=&quot;http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-yarn-server-resourcemanager/2.6.0/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java/&quot;&gt;http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-yarn-server-resourcemanager/2.6.0/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java/&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;GrepCode, “ResourceCalculator”, GrepCode.com. Available: [Online] &lt;a href=&quot;http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-yarn-common/2.6.0/org/apache/hadoop/yarn/util/resource/DefaultResourceCalculator.java/&quot; title=&quot;http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-yarn-common/2.6.0/org/apache/hadoop/yarn/util/resource/DefaultResourceCalculator.java/&quot;&gt;http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-yarn-common/2.6.0/org/apache/hadoop/yarn/util/resource/DefaultResourceCalculator.java/&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;Vinod Kumar Vavilapalli, “Resource Location in YARN: Deep Dive,” 
Hortonworks. Available: [Online] &lt;a href=&quot;http://hortonworks.com/blog/resource-localization-in-yarn-deep-dive/&quot; title=&quot;http://hortonworks.com/blog/resource-localization-in-yarn-deep-dive/&quot;&gt;http://hortonworks.com/blog/resource-localization-in-yarn-deep-dive/&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;SEQUENCEIQ, “YARN Schedulers demystified – Part 1: Capacity.” Available: 
[Online] &lt;a href=&quot;http://blog.sequenceiq.com/blog/2014/07/22/schedulers-part-1/&quot; title=&quot;http://blog.sequenceiq.com/blog/2014/07/22/schedulers-part-1/&quot;&gt;http://blog.sequenceiq.com/blog/2014/07/22/schedulers-part-1/&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;SEQUENCEIQ, “YARN Schedulers demystified – Part 2: Fair.” Available: 
[Online] &lt;a href=&quot;http://blog.sequenceiq.com/blog/2014/09/09/yarn-schedulers-demystified-part-2-fair/&quot; title=&quot;http://blog.sequenceiq.com/blog/2014/09/09/yarn-schedulers-demystified-part-2-fair/&quot;&gt;http://blog.sequenceiq.com/blog/2014/09/09/yarn-schedulers-demystified-part-2-fair/&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;Bo Sheng, “Project HaSTE: Hadoop YARN Scheduling Based on Task-Dependency 
and Resource-Demand,” The 7th IEEE International Conference on Cloud Computing, 
Anchorage, AK, June 2014.&amp;nbsp; Available: [Online] &lt;a href=&quot;http://www.cs.umb.edu/~shengbo/research/haste.html&quot; title=&quot;http://www.cs.umb.edu/~shengbo/research/haste.html&quot;&gt;http://www.cs.umb.edu/~shengbo/research/haste.html&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;Hadoop, “HDFS User Guide,” Apache Hadoop. Available: [Online] &lt;a href=&quot;http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Related_Documentation&quot; title=&quot;http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Related_Documentation&quot;&gt;http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Related_Documentation&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;Hadoop, “HDFS Short-Circuit Local Reads,” Apache Hadoop. Available: [Online] 
&lt;a href=&quot;https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/ShortCircuitLocalReads.html&quot; title=&quot;https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/ShortCircuitLocalReads.html&quot;&gt;https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/ShortCircuitLocalReads.html&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;Colin McCabe, “How Improved Short-Circuit Local Reads Bring Better 
Performance and Security to Hadoop,” Cloudera. Available: [Online] &lt;a href=&quot;http://blog.cloudera.com/blog/2013/08/how-improved-short-circuit-local-reads-bring-better-performance-and-security-to-hadoop/&quot; title=&quot;http://blog.cloudera.com/blog/2013/08/how-improved-short-circuit-local-reads-bring-better-performance-and-security-to-hadoop/&quot;&gt;http://blog.cloudera.com/blog/2013/08/how-improved-short-circuit-local-reads-bring-better-performance-and-security-to-hadoop/&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;Dhruba Borthakur, “HDFS block replica placement in your hands now!” 
Available: [Online] &lt;a href=&quot;http://hadoopblog.blogspot.de/2009/09/hdfs-block-replica-placement-in-your.html&quot; title=&quot;http://hadoopblog.blogspot.de/2009/09/hdfs-block-replica-placement-in-your.html&quot;&gt;http://hadoopblog.blogspot.de/2009/09/hdfs-block-replica-placement-in-your.html&lt;/a&gt; 

&lt;/li&gt;
&lt;li&gt;Hadoop, “Class CombineFileInputFormat&amp;lt;K,V&amp;gt;”. Available: [Online] &lt;a href=&quot;http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/lib/CombineFileInputFormat.html&quot; title=&quot;http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/lib/CombineFileInputFormat.html&quot;&gt;http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/lib/CombineFileInputFormat.html&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/3980371614495574405/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2015/05/resource-scheduler-calculator-short.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/3980371614495574405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/3980371614495574405'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2015/05/resource-scheduler-calculator-short.html' title='Resource Scheduler , Calculator, Short-Circuit in Hadoop YARN and HDFS'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-1721349673348453441</id><published>2015-05-25T06:21:00.001+08:00</published><updated>2015-05-25T06:21:29.166+08:00</updated><title type='text'>艾倫查字典已經更新</title><content type='html'>&lt;p&gt;Dear all,&lt;/p&gt; &lt;p&gt;I’ve updated this plugin called “艾倫查字典”. Please download or update it from &lt;a href=&quot;https://chrome.google.com/webstore/detail/%E8%89%BE%E5%80%AB%E6%9F%A5%E5%AD%97%E5%85%B8/dgbpamfkmlagjojabonanhmbddjhigoj&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;br&gt;I also published the source code on Github, developers who are interested in can fork or download its’ source code from &lt;a title=&quot;https://github.com/allen501pc/AllenDictionary&quot; href=&quot;https://github.com/allen501pc/AllenDictionary&quot;&gt;https://github.com/allen501pc/AllenDictionary&lt;/a&gt;&lt;br&gt;&lt;br&gt;Best regards,&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/1721349673348453441/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2015/05/blog-post.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/1721349673348453441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/1721349673348453441'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2015/05/blog-post.html' title='艾倫查字典已經更新'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-4586408912362144624</id><published>2015-05-21T19:34:00.001+08:00</published><updated>2015-05-21T19:41:14.062+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="程式設計"/><title type='text'>Process SequenceFile without Enabling Hadoop Platform</title><content type='html'>&lt;p&gt;Recently I got a requirement for reading Hadoop’s &lt;a href=&quot;https://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/SequenceFile.html&quot; target=&quot;_blank&quot;&gt;SequenceFile&lt;/a&gt; without enabling Hadoop Platform. However, most examples introduce the read/write SequenceFile with Hadoop Platform. How do I read such files without hadoop? &lt;br&gt;There’s a tricky solution in this case. &lt;br&gt;1. Download Hadoop &lt;strong&gt;binary&lt;/strong&gt; file from hadoop site. For Linux/Unix please directly download it; for Windows, there’s pre-built archive file – &lt;a href=&quot;https://github.com/srccodes/hadoop-common-2.2.0-bin/archive/master.zip&quot; target=&quot;_blank&quot;&gt;hadoop-common-2.2.0-bin&lt;/a&gt; (source code is &lt;a href=&quot;https://github.com/srccodes/hadoop-common-2.2.0-bin&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;) , created by &lt;a href=&quot;http://www.srccodes.com/p/user/1/abhijit-ghosh&quot;&gt;Abhijit Ghosh&lt;/a&gt;.&lt;br&gt;2. Set environment variable &lt;strong&gt;HADOOP_HOME&lt;/strong&gt; by the directory path (suppose the directory is /usr/local/hadoop in Unix ; or C:/hadoop-common-2.2.0-bin in Windows) &lt;br&gt;3. Append $&lt;strong&gt;HADOOP_HOME/bin &lt;/strong&gt; to the end of environment variable &lt;strong&gt;PATH&lt;/strong&gt;. ( i.e. /usr/local/hadoop/bin in Unix ; or C:/hadoop-common-2.2.0-bin/bin in Windows&lt;br&gt;4. Write your program like this (Notice that you have to download hadoop-common-2.2+):&lt;br&gt;&lt;pre class=&quot;brush: java; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;&quot;&gt;import java.io.IOException;&lt;br /&gt;import java.net.URI;&lt;br /&gt;import java.net.URISyntaxException;&lt;br /&gt;import java.net.URLEncoder;&lt;br /&gt;&lt;br /&gt;import org.apache.hadoop.conf.Configuration;&lt;br /&gt;import org.apache.hadoop.fs.FileSystem;&lt;br /&gt;import org.apache.hadoop.fs.Path;&lt;br /&gt;import org.apache.hadoop.io.SequenceFile;&lt;br /&gt;import org.apache.hadoop.io.Text;&lt;br /&gt;import org.apache.hadoop.util.ReflectionUtils;&lt;br /&gt;&lt;br /&gt;public class ProcessSequenceFile {&lt;br /&gt;	&lt;br /&gt;	public static void readSequenceFile(String sequenceFileName) throws IOException, URISyntaxException {&lt;br /&gt;		Configuration conf = new Configuration();&lt;br /&gt;		String directoryPath = &quot;file:///&quot;;&lt;br /&gt;		directoryPath = URLEncoder.encode(directoryPath, &quot;UTF-8&quot;);&lt;br /&gt;		FileSystem fs = FileSystem.get(new URI(directoryPath),conf);&lt;br /&gt;		Path file = new Path(fs.getUri().toString() +  sequenceFileName);&lt;br /&gt;		@SuppressWarnings(&quot;deprecation&quot;)&lt;br /&gt;		SequenceFile.Reader reader = new SequenceFile.Reader(fs, file, conf);&lt;br /&gt;		Text key = (Text) ReflectionUtils.newInstance(reader.getKeyClass(), conf);&lt;br /&gt;		Text value = (Text) ReflectionUtils.newInstance(reader.getValueClass(), conf);&lt;br /&gt;		while(reader.next(key,value)) {&lt;br /&gt;			System.out.println(&quot;Key:&quot; + key);&lt;br /&gt;			System.out.println(&quot;=================&quot;);			&lt;br /&gt;			System.out.println(value);&lt;br /&gt;			&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public static void main(String[] args) {&lt;br /&gt;		try {&lt;br /&gt;			// If args[0] is the SequenceFile we need to read.&lt;br /&gt;			readSequenceFile(args[0]);&lt;br /&gt;		} catch (IOException | URISyntaxException e) {&lt;br /&gt;			// TODO Auto-generated catch block&lt;br /&gt;			e.printStackTrace();&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br&gt;Enjoy it!&lt;br&gt;&lt;br&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;strong&gt;&lt;font style=&quot;background-color: #4f81bd&quot;&gt;Reference:&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&lt;/font&gt;1. Gnosis Runmination, “WIN7下运行hadoop程序报：Failed to locate the winutils binary in the hadoop binary path.” Available: [Online] &lt;a title=&quot;http://www.cnblogs.com/zq-inlook/p/4386216.html&quot; href=&quot;http://www.cnblogs.com/zq-inlook/p/4386216.html&quot;&gt;http://www.cnblogs.com/zq-inlook/p/4386216.html&lt;/a&gt;&lt;br&gt;2. StackOverFlow, “Running Apache Hadoop 2.1.0 on Windows”. Available: [Online] &lt;a title=&quot;http://stackoverflow.com/questions/18630019/running-apache-hadoop-2-1-0-on-windows&quot; href=&quot;http://stackoverflow.com/questions/18630019/running-apache-hadoop-2-1-0-on-windows&quot;&gt;http://stackoverflow.com/questions/18630019/running-apache-hadoop-2-1-0-on-windows&lt;/a&gt;&lt;br&gt;3.&amp;nbsp; Abhijit Ghosh, &quot;ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path,&quot; SrcCodes.com. Available: [Online] &lt;a href=&quot;http://www.srccodes.com/p/article/39/error-util-shell-failed-locate-winutils-binary-hadoop-binary-path&quot;&gt;http://www.srccodes.com/p/article/39/error-util-shell-failed-locate-winutils-binary-hadoop-binary-path&lt;/a&gt; &lt;br&gt;4. Hadoop, “Native Libraries Guide.” Available: [Online] &lt;a title=&quot;https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/NativeLibraries.html#Native_Hadoop_Library&quot; href=&quot;https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/NativeLibraries.html#Native_Hadoop_Library&quot;&gt;https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/NativeLibraries.html#Native_Hadoop_Library&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/4586408912362144624/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2015/05/process-sequencefile-without-executing.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/4586408912362144624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/4586408912362144624'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2015/05/process-sequencefile-without-executing.html' title='Process SequenceFile without Enabling Hadoop Platform'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1918621439400142370.post-879782939106997000</id><published>2015-05-21T19:12:00.001+08:00</published><updated>2015-05-21T19:12:19.420+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="browser"/><category scheme="http://www.blogger.com/atom/ns#" term="chrome"/><category scheme="http://www.blogger.com/atom/ns#" term="Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="程式設計"/><title type='text'>Allen查字典故障一事</title><content type='html'>&lt;p&gt;各位使用者好。上架許久的Allen查字典外掛，最近好像故障了。我目前著手修正中，看能不能趕在周六以前修正完畢，請耐心等候。謝謝！&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://allen501pc.blogspot.com/feeds/879782939106997000/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://allen501pc.blogspot.com/2015/05/allen.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/879782939106997000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1918621439400142370/posts/default/879782939106997000'/><link rel='alternate' type='text/html' href='http://allen501pc.blogspot.com/2015/05/allen.html' title='Allen查字典故障一事'/><author><name>Allen&#39;s Blog</name><uri>http://www.blogger.com/profile/13195732453805455970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>