精华内容
下载资源
问答
  • 下面贴同样一张图片的正确base编码 和 错误的 问问大佬们怎么处理一下 因为太长 就贴了开头一段 正确的 /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEP ...
  • python 编码

    2016-08-28 10:33:00
    首先看这个问题之前,咱们是否曾想过为什么我们可以显示器能看到这些文字、数字、图片、字符、等等信息呢?大家都知道计算机本身只能识别 0 1 的组合,他们是怎么展示这些内容的呢?我们怎么和计算机去沟通呢...

    Python编码

    在2.7环境中要写上这一行#-*- coding:utf-8 -*-  为什么我们要加这一行呢?这一样的意思是置顶编码类型为utf-8编码!

    首先在看这个问题之前,咱们是否曾想过为什么我们可以在显示器上能看到这些文字、数字、图片、字符、等等信息呢?大家都知道计算机本身只能识别 0  1 的组合,他们是怎么展示这些内容的呢?我们怎么和计算机去沟通呢?

    如果我们使用0 1 的组合和计算机沟通你还能看到这些内容吗?还有一个问题就是01的组合对于咱们说几乎看不懂对吧!

    那怎么办?如何让计算机理解我们的语言,并且我们能理解计算机的语言呢?

    举个比较形象的例子,中英文词典对照表,这样我们就可以把中英文进行互相的翻译了呢?对不对!同理计算机也是这样的他需要一个标准的对照关系,那么这个标准最早叫什么呢?ASCII表

    ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

     

    咱们看下这张表:

    有特殊符号、大写字母、小写字母、数字(这里注意下0~9的数字是字符),在这些字符左边都有一个10进制的数字。但是对于10进制来说计算机他也是不能理解的,因为他只能理解0 1 ,但是10进制和2进制的转换就非常容易了!

    举例来说:如果我在键盘上按一个A字母的时候那么实际是给计算机传输了一个数字65,通过这样的机制和计算机沟通,有了这个ASCII码表就可以和任何计算机进行沟通了。NICE

    这里在看个知识点:计算机中最小的单位是什么?bit   bit就咱们常说一位二进制,一位二进制要么是0 要么是 1

    但是bit这个单位太小了,我们用字节(byte)来表示。他们是有换算的规则的(看下面的规则我想大家都不是很陌生对吧):

    '''
    8b = 1B  #小b=bit ; 大B=byte
    1024B = 1KB
    1024KB = 1M
    1024M = 1G
    1024G = 1T 
    '''

    在存储英文的时候我们至少需要1个字节(一个字母),就是8位(bit),看下ASCII表中1个字节就可以表示所有的英文所需要的字符,是不非常高效!

    为什么呢?早期的计算机的空间是非常宝贵的!

    那你会发现1个字节8位,他能存储的最大数据是2的8次方-1 = 255,一个字节最多能表示255个字符 那西方国家他们使用了127个字符,那么剩下字符是做什么的呢?就是用来做扩展的,西方人考虑到还有其他国家。所以留下了扩展位。

     

    但是呢有问题,计算机是西方人发明的,如果仅仅支持英文的话,这127个字符完全就可以表示所有英文中能用的的内容了。但是他没有考虑咱们大中国啊!ASCII到了中国之后发现:咱们中国最常用的中文都有6000多个完全不够用啊!

    但是怎们办?中国人非常聪明:就在原有的扩展位中,扩展出自己的gbk、gb2312、gb2318字符编码。 

    他是怎么扩展的呢?比如说在ASCII码中的128这个位置,这个位置又指定一张单独表,聪明吧! 其他国家也是这样设计的!

    中国东亚大国是吧,我们国家比较NB,我要兼容其他国家的常用的编码!比如韩国日本,因为韩国和日本人家都有自己的编码,人家根本就不鸟你,举个例子来说,比如韩国的游戏,在中国下载安装之后会出现乱码的情况?什么鬼?

    这种乱码的出现基本上就两种情况:

    1、字符编码没有

    2、字符编码冲突了,人家在写这个程序的时候指定的字符集和咱们使用的字符集的位置不对。 0 0 !

    你想想不光是亚洲国家这样,欧洲国家,非洲国家都会存在这个问题,基于这个乱象国际互联网组织就说你们各个国家都别搞了,我们给你们搞一个统一的这个统一的是什么呢Unicode“万国编码”

     

    Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,

    规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536, 注:此处说的的是最少2个字节,可能更多

     

    这里还有个问题:使用的字节增加了,那么造成的直接影响就是使用的空间就直接翻倍了!举例还说:同样是ABCD这些字符存储一篇相同的文章,使用ASCII码如果是1M的话,那么Unicode存储至少2M可能还会更多。

    为了解决个问题就出现了:UTF-8编码

    UTF-8编码:是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

    通过这种可扩展的方式来存储。

    OK 上面了解了:

    1、什么ASCII编码

    2、什么Unicode编码

    3、什么UTF-8编码

    回顾下乱码的出现原因:1、没有字符集 2、字符集冲突

     

    回过头来看下为什么需要在第二行加上指定编码呢?在2.x版本的Python中Pyton在解释.py文件的时候,默认是给他一个编码的就是ASCII码,so如果在2.7版本中如果你不指定编码并且在.py文件中写了一个ASCII码中没有的字符就会显示乱码 0 0 !

    不过这个问题在Python3中就不存在了,因为在Python3中默认就是Unicode编码。。。。。

    Python编码转换

    疑问:

      既然有统一的Unicode编码了,为什么还需要编码转换?大家都统一一个编码不就可以了吗?

    1、

      如果世界上出了一种世界语言,中国人会放弃中文吗?去使用这个世界通用语言吗?

    2、

    还有一个情况是什么呢?韩国的游戏到中国来之后,是乱码?结合上一个回答咱们可以猜出:编写这个游戏的人在编写游戏的时候可能根本就没有考虑出口其他国家。那如果没有这个Unicode编码的话,到咱们这里来显示肯定是乱码是吧。

    那就得需要通过转码把他们编码集,转换为Unicode(utf-8)编码集。这样他们就可以正常显示韩文了!(这里只是转编码集并不是翻译成中文不要弄混了~~!)

    一、Python3中的编码转换

    #因为在Python3中默认就是unicode编码

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    tim = '我'
    #转为UTF-8编码
    print(tim.encode('UTF-8'))
    #转为GBK编码
    print(tim.encode('GBK'))
    #转为ASCII编码(报错为什么?因为ASCII码表中没有‘我’这个字符集~~)
    print(tim.encode('ASCII'))
    复制代码
    二、Python2.X中的编码转换

    #因为在python2.X中默认是ASCII编码,你在文件中指定编码为UTF-8,但是UTF-8如果你想转GBK的话是不能直接转的,的需要Unicode做一个转接站点。

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import chardet
    tim = '你好'
    print chardet.detect(tim)
    #先解码为Unicode编码,然后在从Unicode编码为GBK
    new_tim = tim.decode('UTF-8').encode('GBK')
    print chardet.detect(new_tim)
    
    #结果
    '''
    {'confidence': 0.75249999999999995, 'encoding': 'utf-8'}
    {'confidence': 0.35982121203616341, 'encoding': 'TIS-620'}
    '''

    转载于:https://www.cnblogs.com/lst1010/p/6587743.html

    展开全文
  • 最近写移动端web项目,遇见一个上传图片的需求,一开始没有做任何优化,直接用ajax上传,结果就是被客户一顿臭叼,上传5张照片怎么要这么久 !啥玩意 后来做出优化,PC端上传没毛病 嗖的一下就请求好了,...

    最近在写移动端web项目,遇见一个上传图片的需求,一开始没有做任何优化,直接用ajax上传,结果就是被客户一顿臭叼,上传5张照片怎么要这么久 !啥玩意
    后来做出优化,在PC端上传没毛病 嗖的一下就请求好了,在移动端上就 响应特别慢,目前的手机拍照图片大小都是很大的,比如我的 华为P20拍一张HDR照片就已经将近10MB的内存了,PC使用的是宽带影响非常小,但是移动端就不能了。 不管是 把图片转为base64 编码传到后端,这个base64编码长度就已经是很大
    最后想到 压缩图片,效果非常非常显著

    效果图

    1、HTML界面
    在这里插入图片描述
    2、上传前图片大小
    在这里插入图片描述
    3、上传后图片大小
    在这里插入图片描述

    效果是非常显著的,尤其是在移动端上面,速度提升非常明显。PC端使用的是带宽影响不大,图片的大小可以自己根据画布分辨率调,我这边是做一个案例
    

    HTML代码

    HTML head头加入

    <meta http-equiv="Content-Type"  content="multipart/form-data; charset=utf-8" />
    

    引入canvas.js

    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/canvasjs/1.7.0/canvasjs.min.js"></script>
    

    引入Layui.js

    <script src="https://www.layuicdn.com/auto/layui.js" v="layui" e="layui"" charset="utf-8"></script>
    

    我前端使用的是Layui,除了样式组件不一样,压缩图片代码是通用的

     <div class="layui-card-body">
      <form class="layui-form" action="">
      <div class="layui-form-item">
        <label class="layui-form-label">图片描述</label>
        <div class="layui-input-inline">
           <textarea id="desc" placeholder="以上是某某某店铺VMD图片....." class="layui-textarea"></textarea>
        </div>
      </div>
    </form>
    
    <div class="layui-upload">
      <button type="button" class="layui-btn layui-btn-fluid color3" id="img_select_click"> <i class="layui-icon"></i> 图片选择</button> 
      <button type="button" class="layui-btn layui-btn-fluid color3" style="margin-top: 10px;" id="ok_upload_click"> <i class="layui-icon"></i> 确定上传</button> 
        <!-- 准备一个 div块级元素 用来 装载img标签 -->
        <div class="layui-upload-list" id="img_show_div"></div>
    
    </div>
      </div>
    

    JS代码

    JS代码=== //使用的 是 layui uplaod组件 非常好用,upload组件直接可以让我们简单的拿到图片base64编码地址

    layui.use(['upload','layer'], function(){
      var jQuery = layui.jquery,
          upload = layui.upload,
           layer = layui.layer;
        
      //创建画布 canvas 用于存放压缩后的图片
       var canvas = document.createElement('canvas');
       //获取2D绘制对象
       var context = canvas.getContext('2d');
       //画布的宽 对等于压缩后的图片宽
       canvas.width = 400;
       //画布的高 对等于压缩后的图片高
       canvas.height = 300;
     
      upload.render({
        elem: '#img_select_click'
        ,auto: false    //取消选择图片后自动上传
        ,multiple: true //开启多选
        ,choose: function(obj){
          //预读本地文件示例,不支持ie8
            obj.preview(function(index, file, result){
                //let length = files.length;
                //files[length]=file;
                //选择文件后 在div元素创建img标签显示图片
                // index  多选图片时 返回下标
                // file   具体file对象
                // result 图片的 base64 的图片地址
                //创建img标签到html上预览图片
                jQuery('#img_show_div').append('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img img1" οnclick="showImg(this)" >')
          });
        }
      });
      
     //确认上传按钮
      jQuery('#ok_upload_click').on('click',function(){
      
    	  var imgs = jQuery('img');//得到所有img标签对象
    	  //因为是可多选图片 循环遍历得到img 对象
    	  //循环外面还可以实现做进度条,for循环完成上传后进度条到100%
    	  for(let i = 0;i<imgs.length;i++){
    		  //得到img的  base64 图片地址
    		  let src_ = imgs[i].src;
    		  //截取图片类型 image/jpg 等等
    		  let imgType = src_.substring(src_.indexOf(':')+1,src_.indexOf(';'));
    		  //清除画布内容画布
    		  context.clearRect(0, 0, 400, 300);
    		  //绘制图片 imgs[i] 是 img图片标签
    		  context.drawImage(imgs[i],0,0,400,300);
    		  //将画布中的图片 转为 二进制 blob文件对象 传参到 java 后端,使用 MultipartFile 类绑定
    	      canvas.toBlob(function (blob) {
    	    	  //使用 formData形式传递 ,不能用json格式 否则会报类型转换错误!!
    	    	  let formData = new FormData();
    	    	  formData.append('file',blob);   //file对象
    	    	  
    	          jQuery.ajax({
    	                url:"/O2OSALE2/wx/vmdtest.json",    //请求的url地址
    	                dataType:"json",   //返回格式为json
    	                async:true,//请求是否异步,默认为异步,这也是ajax重要特性
    	                data: formData,    //参数值
    	                type:"POST",   //请求方式
    	                processData : false, // 使数据不做处理!很重要
    	                contentType : false, // 不要设置Content-Type请求头!很重要
    	                success:function(req){
    	                    //请求成功时处理
    	                    console.log(req);
    	                },
    	                error:function(){
    	                    //请求出错处理
    	                	layer.msg('上传失败!!', {icon: 5});
    	                }
    	            });
    		  
    	       },imgType);
    
    	  }
    
      });
    });
    

    JAVA代码

      @RequestMapping(value = { "/vmdTest.json" })
        @ResponseBody
        public String upload(@RequestParam MultipartFile file) {
    
           System.out.println("文件名称==="+file.getName());
           
           System.out.println("完整文件==="+file);
           
           return "";
    
        }
    
    展开全文
  • 昨天夜幕论坛看到一个提问顺手答了一下: 这个验证码的图片返回的接口i是一串字符,怎么获取着张图码? 解答 首先定位一下图片标签 发现图片对应的src是图片的base64密码 然后搜索图片标签 发现src由v.a....

    提问

    昨天在夜幕论坛上看到一个提问顺手答了一下:
    这个验证码的图片返回的接口i是一串字符,怎么获取着张图码?在这里插入图片描述

    解答

    首先定位一下图片标签
    在这里插入图片描述
    发现图片对应的src是图片的base64加密码
    然后在搜索图片标签
    在这里插入图片描述
    发现src由v.a.decode生成
    打断点,查看目标函数
    在这里插入图片描述
    对比一下发现函数传入加密字符串,输出图片的base64编码
    到这里,我们把这段代码抠出来用就可以了。

    反混淆

    这段代码有一点点混淆,0x22,0x27之类的。
    这种混淆不严重的比较简单,我们在函数结尾打断点,然后在控制台测试混淆代码即可
    在这里插入图片描述
    另外x是一个128个数字的数组,在控制台输出会不全,我们可以用x.slice(0,50),x.slice(50,100),x.slice(100,128)分段输出
    在这里插入图片描述
    在这里插入图片描述

    写成python

    def v_a_decode(t):
        x = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 24, 3, -1, 20, -1, 17, 8, -1, 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 22, 10, -1, -1, 15, 14, 6, -1, 5, -1, -1, 7, 18, -1, 25, 9, -1, 28, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 21, -1, 31, 13, 16, -1, 26, -1, 27, -1, 0, 19, -1, 11, 4, -1, -1, 23, -1, 29, -1, -1, -1, -1, -1, -1]
        e = len(t)
        if e % 8 != 0:
            print("t数据有误,请检查")
            return null
        n = []
        r = 0
        while r < e:
            a = x[ord(t[r])]
            i = x[ord(t[r + 1])]
            o = x[ord(t[r + 2])]
            l = x[ord(t[r + 3])]
            d = x[ord(t[r + 4])]
            p = x[ord(t[r + 5])]
            v = x[ord(t[r + 6])]
            b = (31 & a) << 3 | (31 & i) >> 2
            y = (3 & i) << 6 | (31 & o) << 1 | (31 & l) >> 4
            m = (15 & l) << 4 | (31 & d) >> 1
            g = (1 & d) << 7 | (31 & p) << 2 | (31 & v) >> 3
            w = (7 & v) << 5 | 31 & (x[ord(t[r + 7])])
            n.append(chr((31 & b) << 3 | y >> 5))
            n.append(chr((31 & y) << 3 | m >> 5))
            n.append(chr((31 & m) << 3 | g >> 5))
            n.append(chr((31 & g) << 3 | w >> 5))
            n.append(chr((31 & w) << 3 | b >> 5))
            r += 8
        res = "".join(n)
        res = res.replace("#", "").replace("@?", "").replace("*&%", "").replace("<$|>", "")
        print(res)
        print(len(res))
        return res
    
    #测试用例
    t = "VSMZy2eRf4Gl1sRFXwG4X2OF4yGt1sqFtn27seKROfZ9iZe7V7fMlllVOVMLjHZ7Oq4ZjHeH6p4tjHe7jwqtylZ7Vp4ZUlR7OqGM6lZHiq4jjqwFiOtM4sRV6Ztt4HL7VpwMqZt7effM6swRUH4j4qKFetMjF2eVieRLUlH7tlMXSH2ViU4S92wF6O471njV6ZtZ9ZL7i7qpS2UFtlfpf2RKU7tMi2lVyZt1sUSLiet7jH6i6OtM4swV6ZttUlL7VVML9HVHOnGjqsHVOX4llSVKfMG4SsUVVftS9HiiOtwSqsHVOX4llSVKfMG4SsUVVftS9HiiOtwSqsHVOX4llSVKfMG4SsUVVftS9HiiOtwSqsHVyX4llSFOin4ZjHS7Up471leFO747jHqVVp4ZlZO7ypwj6HZOXXOZjH7Lfp4ZjH6HVetZ4HO7OpfZ6He7Op4ZjHe7fp4ZjHe7Ue4Zyl67ieML1lV7e7G9qeKRO74ZyZS76p4ZUlO7OpwLSHO7OnfH6SZ7U74ZjHe7jX4Z4HV7Vp4Z4HS7fVtSlZiHUZ4L6V67e4tt9HHKi2t7SlZiej4HSHVMUOwjylSHiVqpUSeiyMqtSqUFeqGGSlMiy6fS6lSiyGt4ls2iUOfMnUjV6HOSFlK7VfqF4VjHO2OtlntVUVfHXZ4HO2OFflGMU4O4fniVUff4flliij4Ln26F1UftFstiOS27UH1LyZMjSHw7O427lHHiV1tGf2FVOsfLnefiViMlXHsie1tGfniL7nMSX26LyOw4yZFH4UR7inVMelwMqZtKeMfj6n1R6ft49s4VyH2ZqS1H71qSlSlMil4jlV4OUHM1isfFewqFUsSKtXRF4ejReqMtFUsHOw2FsU1HOp4jylO7OpwL6HZ7O74HjSeHOZ4tjH67Op4ZjHe7Op4Z6H27ynfZ6SZFy64Sjl6iOMZ9LZ67OlOt6He7Oq4HjlZ7i747jSeFO2ttjH67OpfZS6q7ep4HjleKfZ4HjSq7VXttlZH7iHfZU27FyVtllHiiiZ4S6SOVVVM91S77fefMqslHUntZfSUiOMOtjn7s6f4XqlOiXXOt1lU7OVM9nHHKfqwpSnHH4UtX9qRMVRGGqSOHfHf4SZq7VGtGfV6HOsOFn2tsVsfFX2HsV2fFnHlMU4Rp1sLVF1M7GZlMyS4jneGFOw496s7sfj4jlHVifOGGXZKHfGO41H1iOOMl1sKLORGGX2eFOwRZSniL6UwtqUjL66MZFnfVeGqFynqHeZwj1nZVeX4lnSsM6lOpfV6FU6OjFSLiijq7yHji1lGH1qLMURGXXV1LV72pLsMF1USG42LMjwqSnle7Op4ljSe7ftftjs17ipfpyltMiGGSlsVLfyOZ1SVL7f4Xlnlii64MqV6iO1fSiZ6KOHOZ6qj7Uq2L9Z77O6tFGq2syFZGFH7H66f49H4LOyRS42ZROOqtX2fK6FGlXqsiOUOpyqs7pfw4SqLH1Uqp6liFV1OLlZSHOsGMnsiRfpfZfHfHystSynKiewG9jHsLVRwjfUsVUeG1ySUFUVwtyZMV6MG1XVfHVGwHfqFiUO4GXSlVisfSfHiFUOwZUsKM712LjHZVUp4Lfe6V6MOt1lOLi6RMSlsVfOft4HfHUHfHjHM7U2tFjHZHVFfjq2MFiftZfSRMUUGHsl4VfsGZ9HRLeeMtFlfMefOSq22iyS2MGVfOfnwpln4iOU4jfsqKO4MLfl1LOpGH4SqMV42tXHFFtU4MGZOiflqtsnsVOX2SUsjR4wS9X66LUH47f2f7O2tF6SVsOHfHfHf7U7Glin7HeXwp1SZVVUGZnZt7e4M14l2HVHfHlq6ietfZiZZsFUqLfSfLUfMSflS7VXfSHnKVU1MSq247f2tFSHUHUHfHfHe7V2tF6Se7OVOt4S67OHfHfHf7O2tF6SM7OeOt4SSHipfF6ZKMOVMF926FVf4S6Zt7y2GZ6nSiejG7nq2iUsOMf6qLF1OH1l2iyftS4SqMfSO7yljF61t4Un1HOp4LUsOFyV4GqZR7e6RtFS7LUHqtFHsLy1RZqstHVS4XFnMiieGXjs671UOL1n1iVXGXfSGKt1OpsUGLylR4XslLeMwZUqOH6nO71Sl7ettZjHSiyUGXqqZLUjG4jqsVtU4GFs1ROwfL42ZVV7fFS6GitffFfU4HUettS2RFinGSXVUOeHR74qOKOOtXfnw7O1Gj46j7fn4G1UqFVe4HqZSHyVOLSswiiwG9nleViO4GSle7O4GSlsR7OwG9nnK7OO4GSls7ieGSlsRiipf4SqwVeettfHMKijwjFlR7pffZ46qVisGX6lfLU6ftlSjLeHtjLeSHjlGSiefMjn2pSlGL6Hf4ys6i61G11nZ7OFft4sUifVOL1nsFV1tFfn6sitt4isVO4l2FFesiXlGMFqjiy1tG4nfF6wG9nnj7yeGSlsVFypG9nnKiip4GSlsVOp4MlsViyq4ZnnKiiw4ZSlsVfO4ZSVfMtl2L1HVKfV4jjH7MffSGUnS76fGG6U1H6VftlH47pnGSnS6ViUZGn2ZF4XtHU2l7eFqHjqsV1XRLUSfHV7qZSlMFeSqZ62wLeqqL92fHOFM4nsiiesGl4qlseMqZ9s6iywqpfSwLfXwZ62FLOwtjLeGMytG1Sl6iOUOS9HM76R4GXSwFfUtFiHfHyXttq2qiO6MXnlti6UM1jHHFe7G9nnKLi2ttfSOMyHGGlUSLyRwM4nROVXtMX66HVXwL92Ui4lqZiVUF7X4l4SOFiHMH6efLeyR79qLMUt2HfSL7OeGGSU4HOFqSfeGMi2tF6ZH7jf4Zi2eVt1OpfHGsiw4ZSlsVyOfZynKiiwG9jHsVOO4GjH2iy4GSUleiiwG9nleViO4GSle7O4GSlsR7OwG9nnK7VO4Gjl67UfGXjsj7OiOL6lGsOZGH92K7VsGSlsKVO6MLXVsMyVMG62SM712pXqVVtntG4H7VeeRjl6GMfltSGHfHUHfHjHM7V2tFjHZHfVOt4HeHOHfF6q2KURtF1qfMXXftF2jFOGM7FSHFyOwZflGLXXRpGSl7iXft9HKVOGwHSqGVe4t1LH4M6pqSiqZHOnOSX2wFUGRSln47U7qtF21if4qM6q27OttF6SHLiXt1fZ4L6XGZlllFeXG1feqLVj4G4siLf1w4SnLiO7tMjnVLVewj1SeK6HGMLZiMVpGGU2FVVeRjlntHVHqZyl2Le1SG1leRiqM4snLOUst91stFOM2Hiqsse7Rp4SRsiMM9GH6iywfjlSFiVVOtissFiqqL4nMHOUMZUn7HUeGMlntMe1O4UZHi62wZi2ML11RZGSHiVsfZ4qUiyfqSiqiVOGqHXSqipffFHnfKOFG9nnKLy4wLnnKiiw4ZSlsVOO4ZjnViy4GLjsKiiwG9jHsVOO4GjH2ie4GSUleLye4Z9sFHVp4S4ZZ7tnqpyZM7Oe4SlsKiVwG9yn6iep4jyZqMUHfHjHM7V2tFjHZHfVOt4HeHUHfHfHe7V2tF6Se7OVOt4S67OHfHfHf7O2tF6SM7OeOt4SSHfpfHfHfHUp4F6SM7Vp4t4SSHO74tfHVF7nMXGSRVUZGZS24Mt14X6lVVVG4GnlG7OORL4qfLy1fZF22MeXt7UlqVftO7Xl4Hyfw7nnVLyfwtnq2iOyMGnqSHfH441Uqif2qjnHtMjlGS1n2Ff1w4FqeFpUG16ZqR6fOpSUfMFfGX6SK7UXfLinVMe7f44HLiOUfH4nfRj1G1GssVeFSGGsLViRM7fHOiUltXlS2H7nwHHUfLeGfFjSRVfyRL4qsF7X44SZiVOefZjqRi6UwMGZlHXlf4GsV7OpwjLHZReOqp1SfKVltLfnHFySR4UnL76RGZ92F7iGOLX2eifGf7FZfHOsMlfHMVy24tnlHLfeGZ1s6Mf2f7fs4LtXGGjVsiff4ZjVGHyXfLfZlFyZRtfSsMUOM1SSSH4UOMfSZFyq2jUsHOOp4SUqlLfHfMSnOVOfOpX2iLFfG96sVMV247FHUsU1GGyZqMeHOHXZsKiFMLsn2Mf6GFGS1H6qM4lnMM11441UKLjlfLfsMFi4fHlnLM1ww4sle7iwwFFeSOysqFlSRVUMG4yeGFF1wpjHRHinGGnZHOeSf7lnLVU6OpLZeiXX2FyqlVU4qSil4MXn4HnsLOipfpS2fM4fqSsl6HiHSG9Hf7F1fHlqfHiHOtfHqMfM4Gnq1VUUfHfHfHOOtSlZeVfnfZjljFU1w4yS77eMR76H4Hyt49nqGMt1GZnnjLinGllUqF6wftHlUViqwS9HSi6lftlle7e1OHiqKRVUG9ln2Fe749Un6KUVOZinqFUMGG6SM7y2tSjsKiiwG9jHsVOO4GjH2iy4GSUleiiwG9nleViO4GSle7O4GSlsR7OwG9nnK7OO4GSls7OeGSls6MtU4GF2eLf2t9jUSFOjGZf6qsVVO4nn6ifRtMGVj7OwG1SqZMey2ZHnFsOtwSfnVHUwRZfSZVURM9j667i2tF4liViO4GSle7O4GSlsR7VwG94Z4ieUOHSstKyXGH46qie2MMnsKLV4wSXsMFtn2pHnR7OwG9nlH7iet4qleVieMj4S67ye4Z4s2F11OHjHM7V2tFjHZH6VOt4HZ7O7tZSqFRy24j4V67iF41le6767tGqqGL6sRZlsRVffGFlnjMe7M16q2LOftL6ZwF62G1FeGFffqHL2jLyGGFiVKHOlMZnsqielfFFleVVjGMlSjLVsRLn2ZHtn4H9HGRiVwHn26iU1f4nHfVOwRpfqs7Op4ZjHe7OStZSlwiU1Mt1SR7O2tF6SVsUftZllU76p4LjqVifwwpfU6LfpGjSHf7OwR7fHiFOGft9VwsOXOHiHeVenftnssKylOjjnHifR4tfSHiiHq71Uji4UwMlH2HVpwH6SGHew2tXHSLfsfj6UfViZ2FF2sVfZf4GqqMtXqFXS4HVXf7GZt76i2tfqMHewtZXs4Vewf4SUGsfRMH9SlFieRSqsViyiOZynwLOetjnneK4XR4X2tFUVt7qnliy1MGLHZOVRw7fnFVOs49nZiFU4416nRHUVMj46j762t9nnj7ieGSlsVifpfHfHfHyXtl4nFifwwpFUw7f1t9HnKHiHfHfsViO2tF6SMVfFfHfHfHip4FSVqMfH2SSlwieXGFiqqMf7OSjlL7UZt1lUfMj1Rp621Myt494S4i7wqSflsVV72SfneKtlfF9Vq766wpFls7eVqpFSjROpqZGsjMUj41fSe7V2tF6Se7OVOt4S67OHfHfHf7V2OZGZ6itXRtq2RROS4lU22Mi7OF4ssMVf476SSiiZ2jjVUOO7Z9jHsR6stFUZ6L6wftjU6iXXR7flfF7l4ZqUSLfRR7qVjijlfjjHtVUHGZnVwHVpGL4qO7yq4jSslOip47XHwMOq4lflwstlG7ysjLfGqSqSqHUHOHfHfHUGfH6SM7V2tZjSSHOVOZjHGHUntX4n4VORG4qV6MV6wLfUjsi6OSS2Li6e4GfUGM6Xf7Fsw7esZGyHjRVp4LqqjVy1qtyes71X44qHqLejwF1lqsiGRLfnVMtlOL6Ht7y7Mt1VSOejGMLsUHOwfL4SKRVlt7nU4sefwH4SRRO6GS4lHVVpwSys77OHwZUH6HOV2Zi26KyUGtSnO7XlRt9qGLewt4UesVUntFq2O74UM76q4HyGO4nnMVVOO4XZUMes2MfsjMOnwL927iieRMiZjMesS9FsLLe2t7SqjsOjqZ6lqKiUtMnVfLtlR4lqVLU1wtq2OF6MqHFSSFyq49slLH4UfZ4lVHf6M94qVLVeqjfqeLO1GGqnqFfi271VjF7lGZFnGF6lG7GqLiOH47SlSLOSwH62wHUSRpSSRFtltlS27LVl4XXqeFeGqFlnKKVn2ZqUUHy2M44HsiUnG9ilfMent9qSMRUHMZlqKii4wFfSLVFXOMFnUMiHfH1SSV6MRj4s6V6ZRH6lGVy14ZjlMVFlfZfUf7iwtZ9q7L41qFqHRHeUfFj6fVOHGHnZ6KOZSGGHwii4GSlliViO4GSle7O4GSlsR7OwG9nnK7OO4GSls7yeGSlsVFypG9nnKiOp4GGSHVeUfMiniHi2OFnqOH1UMX9sl7UwqtiSeiy1O7inRMjlfS6HZ7ypGX1lSMiq2H9SSFOewS4qssi1GX1nl771M4yn77ifGtX2LLV7OLXqFsURf4nsfLyRGGyefHinGMXsf7VMGHnqeLiqwtllLVXXwSiHlH4UGG92ZiftR4y2UF6RGLLHsLysOH4UUV4XfHn2RFVMwM4HMKjUwZFlqiiSSGXZq7y4GSlsj7O2tF6SM7OeOt4SSHfpfHfHfHOp4F6SMVOV4FjSHVyp4jSSHiipfLls6LeSZ9SZHHplGHqqKHtU4LS6sR4wGjfq6iit4GSlsVO7wLX2qi6GM1ylsFOVOZFsMHOe4lUHU7Up4F6SVHOSR4Leq7f1fLlsjMe74Z6ZeKOVOt4SG7O2tF6SM7OeOt4SSHfpfHFVq7Oj4F9qL7O2GHjS4LfOfS6Hf7pnR49ewienGHi2lMe1R7n6KKpnRpHljR1nRt9q1LU6OMHnt76nwpiqRFVnZ9XSfMf24L4lq7V24GU27KUqwZ1nH766MMXs4FU7OZFefHyFqp1HsiO4qMyswHyqOpLZeOOtM4f66Hf7G96ZLLO7MMieGMVwtGSlwKUtGZye67VwG9nn67OeOt4SSHfpfHfHfH6p4F1nFMilqZ6nMHtXfty2SL71GZFSwsfRtXySwHVHMGi2ZFtl41iZGHO7fLSS2RiMG4jsUMVRqMj6GMOl4tLZfKOV4Xi2LMeS4FnSUKeM27fnfV6stMUqF7f2R4lnRFe12tl61ipnOHFZSHtlO7S2iMVnGZ92KMVwMHqHFVitw4XSRifVS9yl2iXU2jGZfLewMjl2ULeR4MqssViwG9G6sH6VOjX24iiSRtU6SLVs2Z62lFfyOtXSH7Xw4S9sj7y7GMS2Lifjqj1UjVjUwHnZSL61G1XnqL6yO44SwiV1wHXVSiVM2HyqiMtnGjL2qHOyt7in6LOpG9Fq67O1tjFnsKpnqSUe1HXXfLy2ZVOjq7LZLiXnfLflZHeRRjX22L672jjsSMi2wS9ZeOUHf4GS4iyS2M9qf7f7MGqSLiVRt9iqOLfRw4FHjHf6MF4lLVflG74sfi7URLfU1siSRH4H2F6StZqss7iOt9jHZMUOtFUseMORRt6qGsiGM71U6My6SGyeGOyMwFlnwHjXt9isKMVe2jXsLFOfMM6SH7OXMLXlw7UFtL4ltHtwwLjseF11Gt1sSFfXqFfUjLVStFF2GsU6qFXSF7ynOS9Hi77URt1StFUqf4SSVMUwMLLe17iZOj6VqFfS2Zi2jLyMMZiV6HeqtLnUGieqOZ4sSRef27yZUVOZMtqHFRFU47GSH76UfZFSO7fZMMSZFHVO2tU2lH6yMZn2tFVZOLFVs76UMX9ZFMV1GXfHss7l2L1Hi7efMGqq4RVf2HUnSsVpw4yZ1VyFtSGs67eXM14VGHpn4tjqZLep49qlwHUHGlySsFOZ47qsGipwwjfSeKjU2tXU1FiltFqsMVVjfZSsjieFt1nZKitUtGS22s7fGM6SeHtXM9lnSMeG4Xn61ifsGXfSVMyRM9q27H7U4GX21KOqGG6ZVRFXt7iSfMyMRMfSRHOURM42KL61t1XHLLfZGM1qUMtX4H6nMM7nOHfn4K6RMM4lOLfpfSi24L67f7FlLVefG7XqFsyVMtnnKiV1ftlZSHfVOZjHfHfHfHjHMHiMMtfnZVpnwHfnRiVG2MyH7MitfFHlUHiZRSF2sM6pG442UMyffH1qHFVitSS22selfMlH6KVR4SnHGVUewpFSiM7nGL6eSVV2ftlnOM6V2S1V1iOwR74ZORiwRZFVKFij4SFZfL6O2MGq4M71tG6qsH6ftFSHVifMtFnZeVeVGLlHLRplMZqZRHOGtMiHGFffMj1sULUstLSllM7nf76nFiUV2SXSK7UR4lLe1H6XGXl2LMy4MZf64Fi6fLL2KOOnfjl21iiOf4ylGiVOt9jHOFOft4iq2sye2Hi2lF6Gw7ineVVfOH6lZ7UO47UnRiX1Z9HnGHOlt9fseiOlGXnllMf2q7fl1HF1tZ4H67iZMG6nVLpnMHSVSifHwj4liVtXwFXZGMV1MGls4KV7tl9s1Hi1GlLVSF7ltMjHtVUOt4iSeHfHOFn22HfiOjU2LLU7qMLs17f6RL9esFUUMtSSHHi4qMUll76MwjFq6H7UwLflsLVXMXinwKeXMGlSiM6tOHSVUHifMjnHeVVlGtUHKsef4tFl2HfSG9GHFLUXM4qltiOtOjll77yX4GLeKLOZtHsnVi6FRjXeUL712M4lFFi2MX1H6HVFtHy21VeRqF164MFUR7nSU7ye2Z6le7UZtjisRFeG2H9eqHeqwS9sLMFwfM42qiVUGG46sKiwRS6ZOLiswjlntFXnw79ZZLU7qt4sUi6p44fqRHefGXqq2M6jwF4ZfL6tOSFq2ViV2ZFlKiVwwpjl67Ufqp9qtL6nwFf2iLeGqL6lURyZ4jnneHfwGl6nwMitOMXZeFUftSnl4MOM4t1HsKeiRF6S7ipfqMnssiOGqZFl4VXlfSFSsVVf2M1lUsOs4tyl6HUHRL4SSH6sf4USHVVUGMy64Hp14962wKi1qpUqwOelGGnZiM6Zf4ln4VfnwjnZGLinqtiSSL6MR4y21iV4MXSSZMeRRS621syqOFlUGOOwfHfnfFeSqp4nlHVjfjXs6HO6OjFZV7fGR7FSKVeGOLiqRVVp47jHOsV2ftnsfH712M9ZSL67Mj4ZfFiOqjqqOVtlMFy2qMjUw7lq4LVVR7flF7eXfjjlZs7UGj1nssyXfLjSHL6sRSjlqHOsR71USL7U4XnS7M1UwF46qMiU2SfejHV4GSlsqKOwtMlsViyq4MyqtieXMSFn6K6eOjlU1MU24Gnl17VXt1qlOiO7tMUq1s4nGXFn6Mi14HqsqL624S9s27UGM1Se1HOHG16sZHOOfHSSRMUMwHfljFyROLlSRiiwtjFnKiyfwZfnSHVRGFqS4KfMGtXnRMfOOpXZGLOnG1UHwMieMFql6FOiOpU6qLfUO4F6j7V1wMXnVFyGfHLZ7VVRfpynSHOVtFlS6VOq4Zfst7yOG1nsqHUlfF1nKMf4GSlssVOO4GSls7yeGGGqRi6Xf7UlfLisRp4UwHy2MHyHKF62t7SsFVOGOtqsqLUnRL62lMy2GXFH77U2tS6ZZVf1tj6SqHyZM4UVSiUHfHfHf7OeOt4SSH6eRSsnV76XRpj64F41Gl6nULiMt94lqV6V4H4n4Vi2q7FlFiOU4ljS4MXlfjFH7HO1fjsle7eUS94qMR6pGXFV67XwwFFqLOUn4ZGZwF61wFls7FV2ZGSVUKiRM74HRHV24GFHwMOtM1UqO7itfLfZK7e64HiHHVe6M4iq2RflMtiqLFpUtLyqHKUR4Xqns7ynt11nUVVlqjqqqFUqRH9sKFf24M1lMLOqOHUZKM664li61iVORp42SMtUt4ystKeqMSU2Kieetty2ZR6qS9yltH6ROpLZeMelwpyZLRiiMZS22MUMfZlsGFVUS9nVfKVtMMXqqMXlR4FsZMfnMtlqLLyeOj66s7VFqLq217Fl2F1HwOiVOFlqLiVGRH6q4M6eMMqUqVVetMUHK76XGHUHtLUXM4nsjL644jGVGHfFqFyZeLiwt1SZMFVMGjqq176Z4lSnLHfjGM62R76fOpS2q7yfMXSq6VfORZ92RM4ntX1StHeGGGUsfMVsRjS2RFVHGGUnGL6yRLilMFOUMHF6ULe7tlyewiOtqSnlVKVR27i61iV6qMj6fK6yR4lSMFUnOjfS4ifyRjyHeHyHfHfS6LOwG9nnK76O4GSnSH4UwMU2GVfff7jVwiVXR4FZe7eR4GXHis6O2t4sSifGwH6U1HVnwLqq6Mylw4qSZV7XwjS2K7Ost4SVSseOtLlZMKilqML27HiefZnHeFywt9jlZL6V49isSif7tHSeKV71GFLsRVi7Z91qiiUOfL92HFOZMZSlKF41wHXqeFeRO4jstHelOFnZSi1XM4jqiiOt4LyUU7OHf41Uf74U4jq2MVi2qMqqHMewMjXVUMyyRj4ZtiXfGXf21HilR4isHMfSG4G2SFyi2jXHlV4fqtGVKVUM4ZGqZii7MF4esLeR49lesVyZtlLZ4VV6M4964KV1R7nHVKOGRFnZeF6SOLGZt76twLylUFiV49qsH76f4GysSMpU2jSnMR6OO4XZOFVntjqSM7i6wL4lRHVOftieUMVqM1SVSs4nRZjntLeV4lsntVyeM9qVsHXXtHUsZH1XGGnsfMiGtFi2MLXnGj1qUVj1f4XqiMU6R4XZ17jXG7qsK7VXwMFSe7U2wtjHFiOtfSXqsLesf4lZ1siS4G1SKMXXtXiSHiyM2M6VsOOiRtXlGMiSfj4qV7VGft9qGstU4GXHjKytt9jHeVi6fFXnO7eqt79qeHU1tlqeqViGw7X2tO6H4Sns77ie2SlZZOOi2SylHKeyMGjsLVe24FlS1VeXf4qH1KeRMSlqsRepqFUnlKf1w44q47OX4Fl2sLeqtlfHlVUwGM6sHMVZqpjqUM64qt1llMeGRH1qiVeXRti2fiOltjlV1KVjwjfHKieetFG64iyewpUSUMfit94Hi7e14tL2UiOlfZ9s6FtXGLSHt7yqGL6H7FeqqZiHjRf7fSqZfFVM41yqMsVnfM6l1Hi2GMinFOe6MHXq4i6nftLeSMieOt9HeM6XwZ4s2Vylf4USGif4tSSHf7fytGL2KHy62t4qtiiO2LlleiXltjy2sOysGLXHRMyMwZ9qeV41RFSSfijUM41qL7eMwF4Z7LpXftfqwsjXMMF2Giy7GjnHHOe4wj9ZGsfHGG6HGMittlfStVpU44fVURUqZ9fn1Hy1O4nlV76Ot1Ss6M6XG9S2KHFUtF1slLF1MXFlHipURFUZHiVeGHyVK77XwZfS1sV2qty6s7O1t1UVGiilG7snFitw4G1l7VXwfLXZqiiFfSSsUVOXGZ1VjsX1f74U6FiMOt4SSHyROZnnKiVw4ZSnViOlMtUHFK6nt1UnVHeXfHL2fHyjGL6n1Ve7M1S2KHeGOjl6SV61OHyZlLtn4X4ZjLeZfLnVSM4nfZ6qKiUGGlnqHHysGHqHeFyOG96ZeFi2MSfnwH6ZRLlSe7y7tGX2fLUtqj4V1F6sqpfqSM1lqZ4lK7iRRZ666iVtwSfe1KUwwtqsOFOHGGnsGH6ntMS2VLiRO7F2RMy2wtG2eHV6qp1qiVOUMS4HMVXlf7Ul7M4lwLnlUM7fqLnSj7VR4lUZLF6sGFjsOi6jwtXZOiU1GG1lfV7l2LHneFXXRjjqjHV6w7n2iF62qMqn2LOX2p6nO76M476njMy6qp6ltL1lG9XlKie74XisiMyGRpSSqieHwSqnOLft4jiZeFyn4F1n47eGOHXe6syOMtqsfiFlO7lssOV4tXjqZLV6wpSZKFO4O4nUq7yiOL4q4L6iO79H27pnOF9H7K6s2ZnH1HFX4Myew7FUG1n2HifnMXGHKHeXMjnnFVyytGfe67yVwSLHKieettLHtMUGGGFliHOnRpUe6LUZw4Hl17fRM74nf7ip4966sFfwwZXsRMVZtXUlOLtXqL9S7sOF4tqlsKyRMZLZ7HXUG4jlwHtwwF6ZjF6RfSn2VLOZM4626Ljnw4ystHjUOSyHtLFlOSjSSiO1fMfSRMyjfHiqFVj1M7FS4HiftL62fF7XqjSHUFfSGZFe6LfRfZUHlMfwM1SSH7tntZnlfV6q2MisliyqftlqqVOlGH4ZfL7lG4f2G7pXtjleSsOy2SjqFFeOfti2FiVGG4yH7spl2HqsMRfltMjqHMiX2Zi2w7yMwZjsfMf64Xls1LtnGLFn2Ry4MH6lHMfG4t6sFV6U4G6SOFitt1jsMVVVfMXZZHVqftlUUiiwMXjHG7VMRpylfVy2O7USiMyww7GSKM6ZMXlSLVftwFLZe7UOqHslfFO2GllHwLVjwZSsjM6nt1nSqiOZ2Mfq4FiURHllGFOq4HlSK7y7wHUqiLyqM192lFj1GSUsMM7Xqjf2wMO22MX2jiFXtXF6qVXU4Hf6q7eOt49stKfeOSjqsMy2qp6ZeVVnGGiVwFUHOL9sjLiiM4lSSi4XfjnnGV1nRFflLFj1Z94SLV6nt1i6UiXffMFsHHfVfLqljMewRL9eSLjXRFLZeLyM4MjH4FUittiV4Vf6wpqqOFUMfp6SFMe6MHUHRLfq2L6UjF6j4lyZHVUSwLnlli4ffSUSi71fGtSHsieOS9U2li6UGGjs6He1GZj61HOStLFZ2R6nRt9ZlVOlSGnqGsFUMSnqeOyf4HnVfHORfjjSe7ie2MSZRF7lqFUVfKj1G7fqKLflOMyse7U7MjFsMiXwGG1ntOenwZyqws7w4ZqSeFpwwLjsiLfn2jjV4Le4wH92KL1X2jyV4LU62ZU6fitXqLjnVifGfM4nj7OMwHylMHOFw7FSKVUHRLy26iVqwtfZLHUqRL1HOLiOt1nVGHisMt6UUiy7M19ZSMOV4M6Vss6iMtSS7VftM1fSeMetwS1qsVUXt7F24VO6w7LH2MyR4LiejO6sRp6qH7OnwHjSViVVwH4HMiFUG9f2sifZ4HSZRVOtMGUUf7FnRSq66iUft7X6jVUsMtslqVyR2ZG2UOpnftFeGMinOpq2lL7fqp4sSVUlR4lSKVen49qV4V1lfFUSiiFXOtXn6LUi2FFHMFOy2Fn2UiVnOple47p1fjyU6L6fOZHl2LyqRHq2OHfsfS4Zsiyw4X6U1HXUGZ4HqiiZftyUqMeqRZjqlMU2OjisG7OswF1HLLV2GXFSRLyS4jisZLOyOtiUwLXfqpXHKHiV4LSsFMip4ZG2eHV64ZSl4K6wMGiZZMOeO7l6SsVRGGnqS77US9jHes4UOtqlZi614tFe1HVpwFSlqLyGRMiZ17iRw7fst7jXOSiSZMefGln27MfUOHfsLiV4fHqU1seV2pSH1LVf4tUliip1wjF2UHOHfFfVsVeRwFf2OV6ntMqq1F1UM196UiOnOjlnHiel2tFSZRyUfLjSVLe7ftLswH11S9nqViU2411nfHf6MlqV4LeZRFqZqKVnRtGSVi6tfSFSlFVwS96V6sUUtFLZVMflqtyVs7tX4XFHMKXnfM9swFiVwM9s7H41MSln6M6n49qHMi6OtjyeGFiOqtXHfi412LqHfHOl2ZFH2ii4GSXZs7V4GSlsR7624SfSqHj1tF4sw7OMtliVGMiMfZ6lR7iMGSlZG7fftZiSf76lOj1HULO2tF6SZHOHfHfHf7O2ttSHeKOHMLfHfKf6Z9jHMVfwZGiqMMeHqZXs1VVffjlqOMOqG1LZ6FOlMHUqZsUsM14lq7U2R79HtLO64LSHlsU6fSyliFeyR4lqHHi641XqiiUjw7jqjVO4RpFejFOGq7nHSMU4OHGse7VFG4is77VHG742f7yqRj9HiFVsRjysjMOlGG1sjL4UGSqUfLVU2L9sjFeitFHnlLFlGSXefiy4G94HGLinwSFnlV6eRji6sMyUM11S4MV6t7yqGFV72L4sLMeqtLiqOVi6fpqeqFUZt162jiVfGHLsOsiOGFXUGiyUMZX24OOGfZnsMHe2Rj1qwsfH474Vq7OMGMFZ4s7U44SsKsVHMLiVf71XqFLZfFXXtZXlR7O6OjnlHstl4LSsssfjG7SS2MOOwZjsl7V6qHyl6HOl2HqnO7V64jqliMU6RFf6K7OUMHSewFtXMXyqjM412HFU1LUOfFSSMHVG4SFlt7fOS9qnMLel2Zi64LpUM9FS7i1ff74HL7eRMjUZ6KFnM11liLVSRjysFFfjwH4q7iyqt9U2f7VX2FGSZV62ftF26L6HfFfZGVy6RFisF7Vw2j4ZFF4n4ji2RFOsRpnnjVXl41S22H64Gt1lOVORwH6HURfGSGfV1F71GHnU6KVtMjnqwKVjqFSqKiUMwM9Vq7VXMMSHHVeO2p1SsVyp44fHFOUUqjnqLLUwOpnlZL1UO7n2SFVeZ9lZK76FOj4sRMe7fMGqesUlqMqZM7i2tF1sV7i4wZi6qH6MqHfV176UGZXlf7ijGZFl2L1UfL6sl7V2t4n6wLyZfSHnGO7nRZF26L6jGjSefiiGtSqHtVifMMqVULOqZ9jHML41Rp42FifGftqZUii4GF9SViyfwjlq2ifRfpfZLFV6MHSSLFVlqLS217XlMlXlHMO2qFyHURV7wMfs4LVMwLSlRsi7MGFqHV1XfMl2siUtqMU6qL6GtL4li7Un2SSnMFiitZGs1LyFG4i6UOUn4MyZ6MOwM9fqLLOfqpqq1Vy2G4ysK7esM9Xe4RVZwZ4qL74URMjnS7eiMt6U4Vi6RHSSR7f6qpX21MVitXjneFysGj9sLLyXG7GqSHVVGZqlLHe241SUSi6i27lsMVOMRZFeSHOpf7L2SsfiOMynwVyUfMFS27fZtXFU6HOSt1F26MX1MSFqe7X147GstFjnwM9SlVeM4FjUfKt1OHGHGHV2OHjS67Oq4ZjnSMVV49SnqLOeOj4e17ifMl9VsMpf4MqSwiFXR49VULVeMl9q4KewRS9H7Kjf49Fl7MX1qp6SGMpfw4l66VfHRtXs1iOiM1lsfsiwMj1nKFiZ4tUl6F6i2LLej7ijwHXS7iVqMSFSZsOMO7ynGLi6qZi2UMO2R4nnsLeVfMfZqVyZtFGHLL4l4tjSFVOitMqlqHiVftll7iVt2t6lsHfiM9fsFHyM4FUZ6L6ZM9fSK7pnMLiZVHVUGH1V1Ffn2jjswMV6qFGqMMfGM1US1iV12M666siiMGXnqHiRtSlnUVtntHUHqi1lO44lMHfGO46SU7VRRMGHOVylf4US4OVp4ZXSVLeS4FLHLiOnwS9SwRUltFjSL7itGj464MistF9sSVf64HS2KF6SG9SHVM6t4XjqL7VSMllqtMenwHnntiVFwtUUf7eXMlnlOMel4LqHeRylwL9eUMO1ZGfS1LVOGZlUjLOtw79Z4VOww4yZeHyV2L4HjMywwLSnFiUwwpjSMVVMOFlZSHOVOMSl2iV4GSUleLepGXFHsM11O7fs4HentXfqFRV1tMllFHfXqL4lSMOpSGfHs7yeMGnZl7V6GXjHK7OOGlf2U7iRRS1seV4UGjlniiUffMqlsVOVqLyVw7VOwZUllVUOOp4H2L6MGFls4Me42plVGRfM2t4lwiewfLLVjsintM9siMf6fMjVw7ORq71qFKipftisVFUZS99ZGVeVOMisZKis2tlVGFOttXFSqVFw4FG21H6fqjFUwVplMMUZSVfltLi61F67MGnqRMiVOLiStLiVwLisUFUpfSjSLFfHZ9lVUFinfLls1M4fGl4S1HeXqjUsZVOM2HfU4sftOH1SqVjlwSUHi7fwM9SU1Li22pG2i7iVRjqsUiUi2MS2RFtw4ZSn6Fy7R7ln6VyUttSsfVUe49y61M7lt1FVsFyGG1SSSOyURMU2VLOXfMyZFHXfG4SqK7eUwF6Zssi1t9FqO76S2LLZjLeF4M62lVyiMXSSGFeewLfSHVyettjHlFyZM41s17yRf7LZfOf2RH9qRVisR7i22iesqHnsUVyGM1UHHFyw4ZqntFeetZSSHKeXGHyljVeORSyH7H7lMty24H7f4F6qFLyRwpFniiXUfF9ZUiXnOZSllLOZ4Z1H1sy1q7SnLFeF4tLH4M6yMLSlMMyROSGV6V6sM44HOF6nG9XSwLOFMjjSwitUwZyS6iV2t9nq6M4nGXnntM4XOSUZ4L1w47iZKiUjGF62eMe4fjFSKRf4t1Un6HpwqZllUKOq4jUeSsUwtj9VKFUXG7yVfFej4tU6GKe2RpUqHHOHqS1nf76GRtGqSFfVfLqqFL6q4MXHGVfR4SFlt7fUM1f2RM4lGtjSRMV7ftXU1iVU2tG2wKVMtj4e1VieO4ynfLiGR44ZMFUswM1lqiiMtLfqUOX1GMU2HFU4M4nqKLUytjjHZV6RG4lSHHO6OFln47Vwt44Vs7Us49XVjienw4nniiVHO79qesi1M1yqZHUytl9SKMVM2jFlH7UOGLnqKLOpSGfHU7OXRLSU6LyO4GilRMXnGXSVfVUHRHFSM7f2tFSH6HUHfHfHe7UHGG4H17tU4SF2LVfft9jsGM41G7XSjLfsMHFniVV14jjss7ie2SXHtVO1RpGqGsVGMGy66HOXwZq2G7pnqH9ZfRfMwSfZFLe7qSqnKHeHfH9VSRVn2LSliFiSRH42iOynMFqS6HyVS9yqjHVHZ9f6U7FnqjLZf7iHwpGZGMVlfjXsVFXlqH4HKLf1ftlq4HfGwZf6fF6swHnseFURMFFnqMynfLLZsMOwMGGV17Oq2ZSSj7VpqHSqw7yHfMyVSiywwZUSUiejGXiZjRe7MZn2ZsOjw41HSs6Ut11n6MVSq74USifZG9GqqMOF4XyesROfqH96GMyn4jlS7LyVfp62LLFlwHSstVF1GZinHL6Fwtl6wHO7ttSlMspU47qHUM6H4FneSMysMMGq1FFlfpFZRVy4SG42G7V7MS9SfLO4wLLZLHO74SSVSFyj4llZOH6HRS4s27iS2HlSMFjw4lys2FpfGX6nesyFO442VFVlGLGejMfwGjSsS7y7GSSnO7yRtSGZliiXwpf6qO6Ft4921iVfMGGVqsVp4Zjq1MUnG99qHVV6w44U1LyGt16S4HXU2MFnsOenqpFsGK6jG7qs4VeVw4F2VMVlw7624seOtSiHliVt4HnslKytfZqsGFflM1l2HM6747lleiVSfLSZ6MXUwjSnFFj12tLsGL6SqjqeGLf1MMU2GMOSwLUH4VXwGlinHFtw4l9HsL7lZGG26HUwOpSZj7y7GFjqHOyff7inGOyp4GsUqO6n474q2FVSGSFHLsy1OF6nS7UU4GXl1766qpf61LV7ZGj6s7yyOFne4OjXt1G24ifjfjSV6ip1MLHUjRfe4GUHGHOS4liZHVy6f4Hl1M61tLf2wHUfttqlSiiwGGnsVifSftSVf7iSM9nVSHUeOLjSsV6q4jj6U7OqGLsl6iVUGtfsG7jUGjilGLy7R7ilRM71MlFlLLV6tlfn7iV44tlHOsy7Oj6nl7OpGHXZ7HVwttilGiyXGFjUwLjXtXG6KLeVwSq6ULUUSGFsw7iUGtUn1VVUtl6lZsfS4lXHSLXltZSH1FfZtLqsRMOSqFG2ei7XGlFVsVjUM16q2VU2276U6LVVw762fFO7OM4ZMMtXRMsnLV7XwM1qsF71MSlsH7XUOZUllV71tHn2tK6pfSSHf7e6M4SHHHeiZ96s6MOVwL1VqMeHOtX64KO1fpyZ2Kyn4LqsUVplwL1U4ViOwpnSVVjn4M4HtiOVGHjn2L7ntl4ZlHiSqpnesViRqFnnSiVi2S4U1FOXMHS6wiyOfp4sZ7O6OtfHwHOXOMSq27iVfMllSi6w4ln27LfMOpUl7MyM474ZfFe6M4nHFReVGti66MUjqLFHjH7w4MqnjM6ZfFySL7ftMLl2HLisRSF6fLyUwZiZ2MVV2S4nUiVft91HKH1X4tSn7V1w47G6KVOSO7FZRi6l4Fn6sVi7Mji66HOnGZiqRMyRqMq64ief4M9VSL6Hwj92sMfsfZLeKVV12HSHsFUl4ZUVK7ejwpHlVVi4OFUZwit1RSfZwVVwwtyHsHplMX6sUH62wZXnfFUn41XleLOFqSHnOMVMMGneS7t1tGlVsKyyRp1HsL6Mt7924Mii2ZSnUiVnt1USwLVVOSSVf7fZqL9qGMOR4LSHH7OnSG62U7U6GHyHtMO2wtsU17e62tl6ssV6OMU6SLOFG1q24iflRHynf7fXtl4s27OOR4L21KU74l6ZjVeOw44StiyOMZqSOMXU2LXqFijlGSySKHewRpnsKMVwM1neqHVF47iHfiy7OMnHFVy6ZGflqV6O2ZSn1L6lMGjHKFi1RL62ROpf4M62HMftwZil77UffMiZfF6HSGyZqLjnG9ls1MOORtU6K7ye4jLHSOpnZGX2MRUpqpSV6Ltf4Mq2fR6lqHX2M761wMynqVen49FewKVw4MLZUMOF44jSVVfp496SfMVe2FLZUVeyOFXqwR7XwF6e1H6lOt4U4iyfM4lneHeS49jqiVFw414sUFUp4jXlqVUnS9SZ7FV2MZ62eiewSGl6sHeURHG6wKit4F1V6VfHRF6sSVOZt9GZZVVR4tFsw7Uw2M9qLiiRMM6seFV6ZGF22LijGGSU4OFXSG666LesqMflwLfHOtnlMMfVfLqHq7iw2FUnSOUs4GiZUMOFtjSZZLy4MXySUi4nGl92tHOs4jXHlKVFtGy24VOtfp6liRfZZG6qOiVXZGqUU7O44HlnHFf4t4Sq4HfGOH6H4MfFSGUnUVViZGX2SiURt4FZqFeX2ZXSKL7UwtFnMMyiOZHU1M6qf4flRMewMZnUfVVp4Z92LMOttjnlGFUStXyZsiO1qtfqKFVtRLHU6MVs4lFlRiUyOM1qKiV7wFjHRFtnGj961KUqGHiZKFi6MZf2Hip1qFG2eKO24GjHeR6HRS1V1i4XtG1HGFXUOplqqH7nfZl2jFVMR46ZFM62qM1HG7iZt9jl6HUXq7HnKVeSw7ynUHit4MfnVVOFqFG6wM71OSfqGMUSMXFZFH7ffHn26LO6wSlnLKeHw4yHjspw4MXSOiiiOHSSGFVU49Un6LVjGjUSiVOFS9ySjHF1qpqs677fqpfZHFO14SU2H7UZGXXHSMt14F6slH6HtM6qHiOH2pqSwKi74tlU17U1GHUq471UtMy6qHpnSGynKVe2R7FnfsUOw4in6M6wRjqZ2VORfZUnRLV24L4ljLt1Rt4sKLjlRSfH1FU1qHlUjH6Rt9UnsLtnfSXSV7V2416V4KVwtFfUGLUFt9nUSViGtX1qwMis2H1qwH4U471SV76GM1fSwiV6tS6lM767t4iH7Ht14F4slF4lwp6qGFOVfL1USLXUtlUe67f1M7iZ1LeZ47XsKsO6fMfSHKUp4FHnZMi6qp4nZiXnwM1sVMUj4Sy6jH642M42HVUnqM1seFiMMF4neMfFwF1q1Vy149FZiLyGtSGqqMVVMjqsLVOnf7FeG7iwM96ZG7XlZGSqMF7fqtL2SKfRMtlHji6XMS4qMVefMHfZeHV74j1sjM6wZ9jHRHeqG4yHsseOSG92eLystjyZMOe6G7GZSs6twtLZSLeZGGLZSselGjyn1s712ZineLVMML4qwsiZw4926Hj1MZ1UfVO64ljqs7VZG4UU1ifRt9qe4i6VMZn2KFfyRZqnVFVtM7GqGMV4Ml4lOHVe4HjHiKepGGsliLf6Mj4HKFfRwtqeGMOZ2HSqtiinOSfSKM7X4li6jiOytX46UHin2FGH7OeROLFstseyR7GH7V6wGZLeUijXOji64HyFfMFqGFeUOHq2ssi1GFqnHHVG4lynUFiXwpf6Ki6RqZUs77VRR7jSZK6XMLFseielwF6nGRipwLlntMUttFXZKiVsGHn2KViVMZ9qlHVG2tllV7Ve4HilwVyp41GHH711OSGZVMjXf4fHwL6s41FSiiy1qLqefi7nwZlsf7ff2pn64ietOMG64LVqtHUssLeS4M4S1iUGOLFUq7yX2pGSRVfn4Gnl7HeFftlH4KOf4MleK7tUGSSUUi71M9FnMi66OHSH1LpnG7SsSLU6OZXnGi6Z4l9ZH7O6Mj9q4sUMRHSnsiij4MUsfVVUM1G22L1UOHfqGV6qM4snsFFXfLqqtOOMtXjsqR6OMFfSHFfFR76nqHef4H4qiiUf4HnUqiFf4H1Siiiwtt9qRFjl2HiSGieswFyUfMfVqtFslHilOF1HwOVGMGFHMsUfGXl2OFy6tLfqFVVFtL6SeVUtt492siVtOjXHeHU6w7USeiO4MH96jR7n4LqZSLV6qtinlViRwS9HliiOM7UqfiiGMSf2RFVftL1lUsV4M46Z7VjnG9XSfiflqtsnsHFnwti2FOe22LUseKU4MjyS1LyiMt92KLi4fL1lSiiiOZisw7fn4j4sHLen2MHlSRVlOZsU1VXnG7FlRiUjG416GF4lO7FsiMO4wMnl1sVXwFSefV6jfZGHVHOjqt62RL6XwMqnSMU72M6Z1H1U2tnSwV6fGG4lwiiwMtylF7yUt46HVifGOHSsS7y2MLqHtFUZGL6V4MUf4MXSL7tl2SUUfLyjqtl6UM4wwSqlZLfRO7HlVFOUMZjSOMe4M9n2jLOs2M4227eSf4q22iVwMSlZjK6eM46nUMU24tlZ4iOMO46ZUHeitLqZGKtlOLLZGFfwRZ6qLFXUGXlSMMU7ftqsHLVjGZU2ZFitwLUqFMfO4LqZ7FVR49XqRi6fS9q2RMyUR7SlsVV6RMlesMUjSG6SHFeMZ9qUfKO2GXsle7UU2pjnULf6RZiqLi4147fHRLXl2MlqLHjnGX6Z2HV6fZ4nlFf7wpSqUVyqGGnSZLUSG9jS7V6qtH1SqLeOqjqqOViSOpFZ1Hpn4Z4swsi227LVSFVXwMHl7HVpwFLZSVpl4762GKil2Si6UFyURSqe4L6FMlslGLeRRMUSFK7l4l6Z4FtX2SUewsUXM4F61L7XtZGeSLiGwjUZqHi1Opfs2VflOM1nGFei2HyS4LitwpSsi7UX4S9HiHeZtZqHiVyetL4sMie7fZUq1LflMtsnVLyXSG9VqVfGR4UHlLtfqZ1H1FVyOS92HFi44lSqHMtfqHn61F4XO44qfieyMHHn4iyfSGiSFLy7O4XV1MVFGly6fsVtG9nUS7OFtMnnRs6nR4LVwiOSM9yl27UsfpSHUH6ffLLs4VUSOM6lK7iRR4lZ7iOtwSj61LiOfLGV1OUq4tqSSHp1Z9UUSKisq76nfMVMRLXnUMVlGGFlFVVt4liZSMeHMZqsLLefwZGe4Hen2FfSqse7t4SH4MUVR46qOL7w4MSlsKyRGSG2siiV4ZFn6MeOOFnSeVeG4Mqs6iip44i6wHU7GF1SVVVSfZf6GF7Xtj1qiVU6RFfqSHiwRjqSVieHGSq2RRi1wpGHiFFX49XqSOVSMZiZSMe1G9nsSRVO2F9ZSHOVOjXl7VO2tF6SM7OeOt4SSHypfHlSs7O24LjHVRiZOMFZf7VOwtflOViRfZfl7LUZOFnZGHO2tMXHi7fStt4UjHiefHfs4iy2MHG2M7VRS9yHtFyjfjnn4iOMM9yqtKf2MllqVH7nf41lO7fsZGiU1M4U4jqleFfR4lUUfH6f2Z6nGVUnMS9ZLVy1MlXnO7iSO46s2L41tFX22V7lG4iZ27iGO46leMfFwSjnwHjXGMsntMetOjqUsVpwGSSsiLpXt4Fl1ifyRLiHUFi2w7Sn7LFn49jlVHUe4Xfqiiysfp1VjMeZt9flURiwRZ4l67eHM4qlZKfV27X6KMiZS9fUKOyntMU6KLUetFyZGMUnwFil1HiMtM6UsLei2pnq4LUG2MSSVLy7G4Hn7MOZ4jllOsURtlFHFHU6t746wVfURFfsZLeOqtUl1HVyOMqqHVOnf7UltLVHMLS2RsfORjfntMURfFFnfHi1OSL2jOyefpFqZMOiRtqUwKenR7G2FKySfjnSROyiM1yeSVXf4liliOOn47jsMFOnOSXV1V4f47X2fiXXOj9SSLjUGt9ZwMelOLlnLiVpwSXnw7fewZ6eG7e22jiVGRfZG79S1LXXGtGs4He1wMlsFROtfHfHGH6GG1nsfVeUqtLZFiO2Ojinl711w4nsjF6wwtqsFLUFRMnnHVVZtlyn1iy647FUKLVpqHXVUFVytMUHZsUR4lLs1M62GLqZOLO2tF6SV7O1GlFqsFejqS9q2sUM2FU2eVi7MM92iVySfHyn6HOGOZUleLyXRjn27FOpfS4Z77V1qH4S47yRRtGswMVwRL164FilqS42FLfitX6sqHil2HflGMfs4L6HS7OUwHU2jKOG47lllVpn2SjlSMUORtSsGLf4RpiZ1LysGSSVjHip416SRL6VGSSlSMOXfZqUws6FGtl6KLOtt4422M4UM76SjiOqMMyZGFU4qtlUKLeR4GS2RHUnqtqqOi11fLfnUi6sGZisVifVfL42li4XR7lSFLyZRFl6wL6Ot7qHK7eq4ZLZtHiROZ92M7UUOZFej7pX4GlV6VesfFy2jLy4tlHUSMVn4jiZ77OHMtXlVKVpGMintMU7491lt7fS2t4H2ViZf46SM7Owt1yHfLpXfFUqeH6GGlfZqVye2LjltOUp4HnVs7XU4MiHe7is2t1SK7Oe47FHt74l4jfZRV6Stl1UwVpf4MisFRyR41i2776URSyZ7VilqMfnf7fRMLq2FVe4RMnSjHOt4LjqHM4l2HLVfLyMMHjUGFVj4Li27ifGGS1SRMiOtF6ZsFUtOpSHjLVs476qKMyGtLfsGOyFw7lUKLeZRMlVSsVpS94nfFpUM7fZwR6U2F6sfLfHqtysOHFf4HUSZ7fS44qZ1Hy6MZGZwMeG4MLsHROl27SZZKORRH4lRKyGGMlntVi4tLjlSOVRGZGstH1XOpiqfMfjfFi2FLOsG4l2s7VMwM6ZOVVRR7SSVVU2GM6s2ifqqLle6M6twtFlZFOt2pn2i7VRGLfl67iR4lslliplZ9yltV6jwFFqfi4nMFGsUiysqpXlFHjUGGSVSiiwG9fS6iUSGl4HKiypwpL24HUXwMFsML6FwtF6UHUn2jjsRLXXtZSV1O1Xt1Hl2LeZGMqnKsO7MSjU4M11wtqUwLiwqHUnZFFURZyHGM6ftGXl6HVq4Hqq4Fe2fpi22Ve2fMjqKKiS4M4ZOifsGjFlKi1wqjS66FiMqpF2UHfeq71HeifVtFjHKMO7wjlUq7VZqL62wHefMZU6wKiURHXHsMV4qM6Sw7Os2HXq4R6XqFUSVMiZOL4ZZM64fMUS4VU2ttiefLiwG4GqwO6sqL4S6iU2GlGsfFiGfSXSV7VHR7FqSKUw2LXZjHyfOHXljFyyOF16qHe2qZ4U4R6FGZnVULVRtLiSRMVp4M6HliOO4ZUn6HOq4S42l7U4t9nl7F6GwH9sGitUfLfsKKUeRjnqLMX1f7y2ZLy1Mt4qwLVXR7SSFKpX4t9sMRVpqFFH1KORwLFH1LesqpslHVyOftsltOVsGjnU6K6iRSHlLLfsGHisFiVVftq2LKVtZG4SG7O2qM1qGKe7G792lRUnqHjUsiyMwMsnwMfGwHi2tVO4GGLZwFp1qHfqGVi4q7FS4ie2q71lisVVfZSZHMef4lUHiiVl4FfHl762f7FVqifHOtj6fMy12tFlUVy2OjinKM6ZZGnZLLVFwpU27sUFtMSUqFV2f79ZSKi7MHiHOL6FOHfssiXfGj96GOeZ2F9Z4Ke2MHi6fVf1SGXnjFtUGS9sjViHwHfSe7elwp6lZRUlGMq2wH1lq7SlFMisMXynM7eMRLiltLUR2HXeqi7nMLL2tKOOtFSl1FVsM7F2ZH1nGLjnf76pqH62q7ef4jX6SH6RM7lSZFOnRHGSl7fFOp1qeViGwpnnSiOVfMUHwKO2tjLHtH7U4XjnHiOORF1H1R6tqHUUK7VMRLnSHstUM7yq2FO6qji24Vyqt4lqtMi4fZqHGMOMwj9q4seZt4GqiHOHRF92RsO2OjSVK7ynMjXHjH6iM7flRiewqZiliMVfOMqU1LfUwtnH67f7M1jn1HfqGjnHRVOFqHXqKLiOGXnsFMyOG71sKOUlOpinli6Mt7ynMM6F2pFS2H6H27qSMLVZttSSVVVsfLiZ4KVlR4UlU7iXSGf2w7V6GHnH4ie1GMFUqMVHOM4V6iiZGlnHwV6UMZqllVO64MFl4RfXGMinVHXlZGGZH7fS49i26MVSt4ylH7t14FqV1M7Xq7nZ2s624lSesLViRH1qGsVGGMXssM7XfLfUGHyUG1f24Ve2wjyneifsqF4VKFeXwpslKLUGM7GZRHfF4LnsiiOOqFGS4iifMly2FMtnG7FqOL6ZRt4qqiflf4Ull7fOG9ySUMO1qL4SSsyMtt4H4FOiOp4nVLXXqtyHULi6GMUU6FVsM7FSMV4UOF9s1HeqMX62liVZ4Z1UUKFf4FjlqVOFqZGqi7UX49slMHU1O46HiMVRwp9HZiyR4tf2H7jnwM9HlHeUwtnnfMyHfHfSZiO2tF6SM7eeOjleqKeVRF424sOfOM4l7KFXwFFSw7yR4jqn2MVUG4UqLMFfS9l61VFXwjXq1MeXMtiZKReHMZFU4L6n2jjHfVOqOM1l6KVR4FlSjMUGfpisFHy7G91qFFeVMGq2LVi6t9SUfFyFwpqlMii1SGX2jHejfHXqqRjXRtFeqMe12Fqs4iV1t9lZLFfXO4l24HVRMlF2lF6S2HjHGFeqfp4sLifFOpfZeMXnO4XqiOjf4F1UsVU72jjsK7eqZGfZOspw4ZqHGsO1wFl6qHe1Z96H7iV42L1Vji6jfMinViyVfL6liVO1GjlqLFV6G1yHiFOsfSLHSKOe2SSUfFfstLG2qMO1RtXneKVGwHGSwsXlt7G2SOyn4ZSHFViRtX6V677X4t1qlVi6MG4Si7fS4Z6Hf7eFqSsnLHXnOF9ZjOep4ZXqLKUiZ9FZ2LtXtZ9HUi7wSGSnSMfMRLn2jHVlGSUHMLfZO7inRMOGG44s4VfRfpnZliOMtFUH2Hy64FXllMjlR4f2wiiOfMXH1iiUOL6SGiUlfL9HjiUVwHiVs762R46SZMOnGHqlSReUR4FqSKfXM4jSKM6qfF1S7LinwtSe1V64wMsn7FXlM1ys4OUwOtfU6iflRjlqlMVqG7FUjMV6RHnqGifUOj4nO7FwGjFs6OeqSGSqSHiHwtXVfLyFMjleqMeGMSU2UKVXG4SlisyH47XsMHyUqFqSRiU1RZGZsHVRGMfniLUwRpyZM7y2MHys2iOHfHfHf7O2tF6SM7OeOt4SSHfpfHfHfHOp4FqsFiyfMXl2O7ej4XSSVLO2tGysHLiewtSnO7ee47FHMHf1M9UZqMy74ljnwMVHwL4ZLLOf27qlw7p1GSSU1MtnfFin6KfqfM4HqFOHwZinLHV4RMslHVOf4F1lt7yetSGsH7i6GlnHwMUnGFflsMOSSGn61HVFtHLVsVffGllqiVVVOH1qRMFlGSHl7M6Mf7iq7ietfpql4sV1OHXUGHi1qHqZeLVww4y2lKyst4iniMU4f4GSH7enGjsn7KtwGGls4MOswZyq6sel4l66jHOtwFlZfiVjG7LZ6FXURSnS1MV7t9n2LVU6MlSlqHis44nZGi7UGL6HU77lfF9qRsfn4tFHKVj1qLUZ1i6GG4HltLiHR7UqVLFfwH921Of6RpX2fM4l4LnZK7fOSGGSML6ttt42l7fSt4XnULiSfH1SKVjXf7nn1ViHwpSqSLiRGGXSVVfyRtlH2FO2qFqq17VMGLLH677wf7ySwiyHOjGsS7Oytt4n17iOtZS2OL6ZOF6SOV6SOjGS6Hft4Si2qM6FG7q6qL4n2pnsFV6VwMXVfMUettSesFinwp9SqMyS2p6nHHyZftSlSFeGZ9yltHpX4GyZwRVeqtLZ6HOVf7FlHRfHOZq6w7yltF6SGMUlfM4lLHyO4jjslFp12pXqfKiMM7n22LfHfH9qlHie4tFSUVie4llSL7fVwpSH2Hf6t9SlGiy22p42KiOwwp6Z2iy4GSUleiiwG9nleViO4GSle764GSlsR7iR2ZqlULiXfL9H7iiwt11UKiy72jHU6HVF4HL26VVFq7n2w7F1GtSZfOVlO7qSOiiR4jSnRLyRGjiUKLUeGH1sHHeftH9ZfRO4w7SVSFXXRSGSiFOlG4SHVRf4RSUs2iOGfZFlFHV4fM6l6FVeG9qUqiVnZ9nqiLfF49GeqLf74tFqlHUR2M6sqMtff46s2KOO49UUwiUwtSnH2HpUwtXVUit1GSnVSVilGFi2HOfqwpllS7elG9qV4Hypw4iUfMfHqF92i76f4LylU7fU2tsnSHyZfHlSSVF1M7yHZVtlfpS6wse2O7Uqtitn4G4UfsXXG44nKiiwwZ6Z67UMG4j6GHisM4sn2MVeOZsntFU1Z94nSHyOMLGqlFUi2FGqjVeFtHFZVMOjfpLVfHVjfFfSGHy4OZjHsHy4GXGHeiUwG9nlR7fMGlG2t7OnqHiqtLiqOtfZ4LUORZiqqHVMMZSlKHUefL6l4if1MlnS1VOjwtjl2LeqfS4ZHL41tHqZSVXUOMjnjOyRwpnHfVy1OFl2s7fUMMyqOLViRZS2fMVlRZqq7FUStHXefMiS2FUSqVVwft4s6iep4FqZfHf6qpfnwHeHfHfs7iOVOt4S67OHfHfHf7O2tF6SM7OeOt4SSHfpfHfHfHUp4F6SM7Vp4t4SSHf74ZfHfHUH4Z6SM7y2tZjSGHy72Hqe6LOSSGU617V2wtfSGsO7MGySfVtnq7snw7UO4Z4S1LetGFSnFR11t7qsZi4lGjnq6Fel4GySeL66wLU6wVi4GXqnRiVVMG1qKHV4wZLsjFVXfZ6qwKepwZf2wHXn2ZUewi6yR7G6sHy2fLlsULiyOp6sUiiX2S4VSV6lqpfHGVVS2S4nsLfOwLfHfHyHGSUnKiOwG9jHsiylfFFUSMfStlUllMU1fLlsiiii2M6V6FO1OLXlqKVfMMsnlFiS4ZyqjMfwf44SZFVt4SHleMiMG442SHU7SGGSMV6tGG1sRMy7Otysj7Oq2jjVGR6V416ZFVUR44SS67XU27ylZH4nGHXqZFO4MGy2VMyVOt4S1VV6tt4SSHf74ZfHfHUH4Z6SM7V2tZjSSHVVOZjHG7ORfZ6lfsplqS1sLLOUGSj6jVXw4GXqRMVRqH6VjMOltMSSVM6qt1qHqHVVfMyn7HVlf7Ss1MV12p6e4VUVRHnn6HU44ZXZHMOsO7lU6VU4OtlSsVVXGL1S6KVV4M4S7MU4RMinlMUtZ9jHKLOs2tSlMVeHqtnnfH6HqS9S4VU6fS4sLi6fqZS2OH6RtL6SG7f4MS1U6VOG2LFssFUnG1SlfHO6w7fHfiFl4M622FOlM4lUsROMOH6Z2iy4GSUleiiwG9nleVOO4GSle7iwtZ9S4Fy2RHySeieqRpf27MXlRp1qfLfq4ZyliHeHG4Gq1K6VGtylOV6Zq7jHRHVHRFXSU7X14FqSwHURR4lZ7Hef2FjVfLX14ljsKiOwwp6Z2iy4GSUleiiwG9nleViO4GSle7i4GSlsR7yeqLG66FVOO7lqssytqLfSZ7OOMj6HHse1tMFn6Ly12HlnsFiSRFqlROfRMSUHSHVSRZ1l1Hys4llnjFXlw4iSfL6MRM1qZM71Gt6liiVR4GUZSHiV4ZSlsVOO4ZjnViy4GLjsKiewG9jHsiOGGLLe6MyF4XyZVM714X4S67fFZG9s7LUFMGGqHMF141SZRLUVqLfqlMXX2pHnVFypG9nnKiip4GSlsVOp4MlsViyq4ZnnKiiw4ZSlsVOO4ZjnViy4GLjsKiiwG9jHsVOO4GjH2iy4GSUleiiwG9nleVOO4GSleVUO2pql6M1Xft4nVVe1t9GStK7UOHfSLHOs2jin4siy2SnsSMfZRpfSeLVUG1inGsUn4Hf2KFe1Z9LZesy1qHSn1HVOMSnlHFfttLjqLiU14l1lRMVyM7Hn7KffGF4sMM6Rt46n6VVFGXq2q7O2tLfl7Rpl2jjnjiywtj4Zwi66OLf2lV6SMFfqMif1GZln1VOO4GSlsHieOt4S6HVe2Zqls7OeOtfZSV61t9jseFU7Glnqq7fn4S9HiHenGtne4KfGGXFZfiVUMLq6ss6l4lGHM7i6tF4VwLeeMHHUwLeHRZGVGKVyM9fSjKfO479HeFjwq7fVjL66RMjnLFFU2jSl6OVStjL2Ss6eOj1sO7twGXFq6MV6OMqSFFewqLUqOHUF2jiqKLi6Rjyl1HeVM1UeGHUfRZ1lOFOGOLnHe76p4ZqHeFyp4GFsiOeSOMFlViUlqt6SM7f2O46nRHUHfHfHe7V2tF6Se7OVOt4S67OHfHfHf7y2tSXs6iVnwZUltMO2t14S67OHfHfHf7O2tF6SM7OeOt4SSHfpfHfHfHUp4F6SM7Vp4t4SSHf74ZfHfHUH4Z6SM7V2tZjSSHfVOZjHfHUHfHjHM7V2tFjHZHfVOt4HeHUHfHfHe7V2tF6Se7OVOt4S67OHfHfHf7O2tF6SM7OeOt4SSHfpfHfHfHipft4S67f22tSl7MOsqL6njFVO4GGHZHVVOt4lesetfLjVssO12MX2LKe6M7FqtKFXqFns6L7wqM9q1iOGwMiVGFVffMFe6VetqpiVqV1XtGn2j7jlfHUSqii1q7XsUVyVwMUnKiOwwplS2Lef2t1SsKVSqMllisyORSf6w7eUM76SfLVRMt6s4VXnG1SSFVesRp9ZFHOO4MfSVVOXOFFqViy4fHnVULOVfMjnViO4wpSl2iy4GSUleiiwG9nleViO4GSle7O4GSlsR7OwG9nnK7OO4GSls7yeGSlsVFOZZ9sUSH49qlH6Mt"
    v_a_decode(t)
    
    # data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADcAfQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3miiiszQbIu+NkzjcCM1kqY4QyTQFpAf7xHFbFZcYX+1HWcZyTtzyPb9K2puyYmrklrPvkA+zJnP30GMfpWhRRWcmm9AQUUUVIwooooAKpOxW+JClvYfSrtFNMlq5TmuVljKKrZNWYUMcKqeo607ABJAGT1NLRcEtbsKKKKRQUUUUAFFFFABVYXLfbjAVG3se/TNWayGuBb3U0jYLchd3Y5/wpktmsHUsyhgWXqAeRS1h2qLb3CXEiu2/kMx9ep9//r1uUDTuFFFFIYUUUUAQm7hVypbBHsalDBhlSCPUUjqjIQ4BX37VUsjiWRFyY+oJpiLtFFFIYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVDO3RfxqakIDDBGaGroadnchVSV3v0UcCkjIRS7dTwPepJgxTAGeeaSKLGGbr2HpU21KvpqMdWeN3fjCnAqC2WcxnynVVz0P/6qtzqzwMqfePvTbZDHAARhsnNbwajBkN3K1x9oWPbIQVJ6j+VW4QBBHgfwiq9+TtRexJNWwAqhR0AwKc3eCELRRRWIwooooAKKKKACiiigAooooAKKKKACiigkAZJwKBBUFxax3GC+QR3HWnGUscRjPvTH82P5i45460KVtUZuqlqlcbDYRQyiRWckepFWqZHJ5i+460+m5c2popKSugooopDCiiigAooooAKKKKACiiigAooooAKKKKAI5547aIySHAH5k+grEkkG8TSRiTD7inQHr+lbc8EdzEY5BkH8wfUVQ1KFbe1Dwpg7xuPXjmmiWmRzXM1yqho0VWwyqDlunH861IlKQorYyFAOKrWdrF5UUxBLsobnoDirlAJdQooopFBVE3Ukk2wOsSg/xCr1Rywxyj5159e9MREbTeD5sztzn0H5VNFCkK4QY9T61FFDJC+A4aL0PUVYoAKKKKQwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKCQBknApFZWGVYEexoAWiioJbgq+1RkDr700riJ6KQHIBxj60tIYUUUUAFFFFABRRRQAUUVFcyNFbu69R0pgld2JaKqWVw8pZZGyRyOKmuJvIhL9T0A96bTvYpwalyktFQ20xni3FcEHFFJqxLTTsyakZdylT3paKQmrqzKnmPCCiqCxbAzUc8M4AkdlJBxkdRU1wCrq+cA8fj/n+VOadfL56kYPpRGXLoYQkoXjLoRR5kbg7SfSraghQCckd6pZdJhGq4ft0qZJnWQRyjk96mOm5rSi+V+uxYoooqiwooooAKKKKACiiigAooooAKKKKACiiigApCAylWAIPBB70tFACIioioowqjAHtS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBUIa6nZGJEaHt61NGIImKoVBJwRuqqQ0c7xDgSHHTsTUktoiwkrncozknrQUJc3mG8mD55iccdqz2ae3lDS8jPK54+nFOCyW7i6QZQNhsUSu91lYkLY+YnHNdUEktNjCV7u+5rmVBGHzwRke9JHMJCQBgissXZT5ZYiGAx9B9K0bUxtGWjbdzg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
    # 17907
    
    展开全文
  • 2.7环境中我们要写这一行#-*- coding:utf-8 -*- 为什么我们要这一行呢?这一样的意思是置顶编码类型为utf-8编码! 首先看这个问题之前,咱们是否曾想过一个问题? 为什么我们可以显示器能看到这些文字...

    在2.7环境中我们要写上这一行#-*- coding:utf-8 -*- 为什么我们要加这一行呢?这一样的意思是置顶编码类型为utf-8编码!

    首先在看这个问题之前,咱们是否曾想过一个问题?

    为什么我们可以在显示器上能看到这些文字、数字、图片、字符、等等信息呢?大家都知道计算机本身只能识别 0 1 的组合,他们是怎么展示这些内容的呢?我们怎么和计算机去沟通呢?

    如果我们使用0 1 的组合和计算机沟通你还能看到这些内容吗?还有一个问题就是01的组合对于咱们说几乎看不懂对吧!

    那怎么办?如何让计算机理解我们的语言,并且我们能理解计算机的语言呢?

    举个比较形象的例子,中英文词典对照表,这样我们就可以把中英文进行互相的翻译了呢?对不对?同理计算机也是这样的他需要一个标准的对照关系,那么这个标准最早叫什么呢?ASCII表

    ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

    咱们看下这张表:

    有特殊符号、大写字母、小写字母、数字(这里注意下0~9的数字是字符),在这些字符左边都有一个10进制的数字。但是对于10进制来说计算机他也是不能理解的,因为他只能理解0 1 ,但是10进制和2进制的转换就非常容易了!

    举例来说:如果我在键盘上按一个A字母的时候那么实际是给计算机传输了一个数字65,通过这样的机制和计算机沟通,有了这个ASCII码表就可以和任何计算机进行沟通了。NICE

     

    这里在看个知识点:计算机中最小的单位是什么?bit   bit就咱们常说一位二进制,一位二进制要么是0 要么是 1

    但是bit这个单位太小了,我们用字节(byte)来表示。他们是有换算的规则的(看下面的规则我想大家都不是很陌生对吧):

    '''
    1B = 8b   #小b=bit ; 大B=byte
    1KB = 1024B
    1M = 1024KB
    1G = 1024M
    1T = 1024G
    '''

    在存储英文的时候我们至少需要1个字节(一个字母),就是8位(bit),看下ASCII表中1个字节就可以表示所有的英文所需要的字符,是不非常高效!

    为什么呢?早期的计算机的空间是非常宝贵的!

    那你会发现1个字节8位,他能存储的最大数据是2的8次方-1 = 255,一个字节最多能表示255个字符 那西方国家他们使用了127个字符,那么剩下字符是做什么的呢?就是用来做扩展的,西方人考虑到还有其他国家。所以留下了扩展位。

     

    但是呢有问题,计算机是西方人发明的,如果仅仅支持英文的话,这127个字符完全就可以表示所有英文中能用的的内容了。但是他没有考虑咱们大中国啊!ASCII到了中国之后发现:咱们中国最常用的中文都有6000多个完全不够用啊!

    但是怎们办?中国人非常聪明:就在原有的扩展位中,扩展出自己的gbk、gb2312、gb2318字符编码。 

    他是怎么扩展的呢?比如说在ASCII码中的128这个位置,这个位置又指定一张单独表,聪明吧! 其他国家也是这样设计的!

    中国东亚大国是吧,我们国家比较NB,我要兼容其他国家的常用的编码!比如韩国日本,因为韩国和日本人家都有自己的编码,人家根本就不鸟你,举个例子来说,比如韩国的游戏,在中国下载安装之后会出现乱码的情况?什么鬼?

    这种乱码的出现基本上就两种情况:

    1、字符编码没有

    2、字符编码冲突了,人家在写这个程序的时候指定的字符集和咱们使用的字符集的位置不对。 0 0 !

    你想想不光是亚洲国家这样,欧洲国家,非洲国家都会存在这个问题,基于这个乱象国际互联网组织就说你们各个国家都别搞了,我们给你们搞一个统一的这个统一的是什么呢Unicode“万国编码”

     

    Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,

    规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536, 注:此处说的的是最少2个字节,可能更多

     

    这里还有个问题:使用的字节增加了,那么造成的直接影响就是使用的空间就直接翻倍了!举例还说:同样是ABCD这些字符存储一篇相同的文章,使用ASCII码如果是1M的话,那么Unicode存储至少2M可能还会更多。

    为了解决个问题就出现了:UTF-8编码

    UTF-8编码:是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

    通过这种可扩展的方式来存储。

    OK 上面了解了:

    1、什么ASCII编码

    2、什么Unicode编码

    3、什么UTF-8编码

    回顾下乱码的出现原因:1、没有字符集 2、字符集冲突

     

    回过头来看下为什么需要在第二行加上指定编码呢?在2.x版本的Python中Pyton在解释.py文件的时候,默认是给他一个编码的就是ASCII码,so如果在2.7版本中如果你不指定编码并且在.py文件中写了一个ASCII码中没有的字符就会显示乱码 0 0 !

    不过这个问题在Python3中就不存在了,因为在Python3中默认就是Unicode编码。。。。。

     

     

    Python编码转换

    有一个问题,既然有统一的Unicode编码了,为毛还需要编码转换?大家都统一一个编码不就可以了吗?

    1、不要问我为什么,我问你们个问题,如果世界上出了一种世界语言,你会放弃中文吗?去使用这个世界通用语言吗?这就是个坑,是个遗留问题

    但是虽然以后可能世界语言会慢慢替代咱们常用的语言,大家以后沟通就使用世界语言就不会有沟通障碍了对吧。(就是举个例子)

    2、还有一个情况是什么呢?韩国的游戏到中国来之后,是乱码?结合上一个回答咱们可以猜出:编写这个游戏的人在编写游戏的时候可能根本就没有考虑出口其他国家。那如果没有这个Unicode编码的话,到咱们这里来显示肯定是乱码是吧。

    那就得需要通过转码把他们编码集,转换为Unicode(utf-8)编码集。这样他们就可以正常显示韩文了!(这里只是转编码集并不是翻译成中文不要弄混了~~!)

     

    一、Python3中的编码转换

    #因为在Python3中默认就是unicode编码

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    #author chenjing
    
    tim = '陈静'
    #转为UTF-8编码
    print(tim.encode('UTF-8'))
    #转为GBK编码
    print(tim.encode('GBK'))
    #转为ASCII编码(报错为什么?因为ASCII码表中没有‘陈静’这个字符集~~)
    print(tim.encode('ASCII'))

    二、Python2.X中的编码转换

    #因为在python2.X中默认是ASCII编码,你在文件中指定编码为UTF-8,但是UTF-8如果你想转GBK的话是不能直接转的,的需要Unicode做一个转接站点。

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    #author chenjing
    
    import chardet
    tim = '你好'
    print chardet.detect(tim)
    #先解码为Unicode编码,然后在从Unicode编码为GBK
    new_tim = tim.decode('UTF-8').encode('GBK')
    print chardet.detect(new_tim)
    
    #结果
    '''
    {'confidence': 0.75249999999999995, 'encoding': 'utf-8'}
    {'confidence': 0.35982121203616341, 'encoding': 'TIS-620'}
    '''

     

    转载于:https://www.cnblogs.com/wooya/p/5788529.html

    展开全文
  • 这两天用eclipse改jsp网页时,了个filter,发现加上去以后,网页加载js时,js中的内容,包括注释等,中文都成了乱码。 除了js中的内容,jsp页面的原本的内容不受影响,去掉filter则是正常的。 已经尝试...
  • 图片软件通过这串编码判定这个文件是不是PNG格式的图片。 <p><code>0000 000d</code>:是iHDR数据块的长度,为13。 <p><code>4948 4452</code>:是数据块的type,为IHDR,之后紧跟着是data。...
  • <img src="/images/smiles/icon_biggrin.gif"/> <strong>问题补充</strong><br/><div class="quote_title">vipyami 写道</div><div class="quote_div">怎么现在还做短信营业厅?我们03年就了,不知道现在还...
  • 3. 支持私有化部署,下载软件安装包后可以安装自己的服务器,数据更安全。 4. 随时随地办公,平台支持兼容HTML5的浏览器,并且提供了原生的IOS/Android应用,并且支持钉钉和企业微信集成。 5. 高可扩展性,...
  • 网站开发了很久了,之前一直都用记事本写,也搞不懂编码问题,所以每一个文件了一个,一直编码也没有出现什么问题。 后来发现找错误的时候没有行,于是用了Notepad++,结果他默认使用UTF-8编码书写,后来...
  • 1 有趣的是,之前的基础,即使我们输入的是另外一个人脸,也会被 Autoencoder 编码成为一个类似原来的脸。 2 为了提升我们最终的效果,我们还需要把人脸共性相关的属性和人脸特性相关的属性进行学习。 因此,...
  • ·优化的图片水印功能:可以为网站所上传图片加上水印,指定水印方式为“文字水印”、“图片水印”,也可选择不水印,方便易用。 ·优化的自定义JS功能。让您的新闻想怎么调就怎么调。并可批量更新所有自定义JS...
  • MD5算法(看你是女孩的份,给你一个吧) MySQL的JDBC驱动程序下载地址 NT下安装JSP Operators and Assignments(1) Operators and Assignments(2) Oracle中ID自增得方法(转自JSP001) orcale测试实例 Orion...
  • 内容,本着使用不同技术尽可能实现相同功能的原则,让读者能够充分体会认识每个技术的优缺点。 《Java Web 开发就该这样学》的内容和组织形式立足于高校教学教材的要求,适用于从职业院校到重点本科院校的教师...
  • 如果有多引导系统的计算机,必须保证是包含 Windows 的驱动器使用该命令。 Diskpart  创建和删除硬盘驱动器的分区。diskpart 命令仅使用故障恢复控制台时才可用。  diskpart [ /add |/delete] [device_...
  • C#基类库(苏飞版)

    2014-05-16 23:11:45
    C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以实现 CookieHelper C#操作Cookie的帮助类,添加Cookie,删除Cookie,修改Cookie,清理Cookie SessionHelper C#...
  • asp.net知识库

    2015-06-18 08:45:45
    怎么在ASP.NET 2.0中使用Membership asp.net 2.0-实现数据访问(1) ASP.NET 2.0 新特性 .NET 2.0里使用强类型数据创建多层应用 在MastPage中引用脚本资源 2.0正式版中callback的一些变化+使用示例(ASP.NET 2.0)...
  •  系统的广告管理位很多,所有广告图片内容均可以直接在线上传管理,同时支持FLASH滚动广告,管理员后台只须上传广告图片,前台会自动生成各式各样的FLASH动态效果,给用户以美的视觉冲击。 十九、商品评论、留言...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64解密、哈希解密以及其它的文件解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了树控件中来回拖动...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64解密、哈希解密以及其它的文件解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了树控件中来回拖动...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64解密、哈希解密以及其它的文件解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了树控件中来回拖动...
  • 8、 "FCKLang 未定义"错误的解决办法问题:属编码问题,本机使用记事本打开fckeditor\editor\lang\zh-cn.js,不用修改任何内容,重新保存后上传服务器覆盖原文件即可解决。 9、 修正了栏目设置中 是否添加水印...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64解密、哈希解密以及其它的文件解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了树控件中来回拖动...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64解密、哈希解密以及其它的文件解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了树控件中来回拖动...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64解密、哈希解密以及其它的文件解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了树控件中来回拖动...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

怎么在图片上加编码