求PHP版SM2 SM3 SM4的国密加解密及签名验签(代替原来的RSA),最好来个Deomo,万分跪谢。。 5C

公司要做PHP版本的SM2 SM3 SM4的国密加解密及签名验签(代替原来的RSA),查了很多都没有,求做过的大神指点最好来个Deomo,万分跪谢。。

php
BigCatLR
BigCatLR 大哥 你找到没有 我这也遇到了 找到的话能分享小老弟吗 万分跪谢
3 个月之前 回复

1个回答

可以用c代码封装一下,给php调用
https://www.cnblogs.com/TaiYangXiManYouZhe/p/4317519.html

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
国密SM2签名算法一次签名中做多少次点乘运算。
国密SM2签名算法一次签名中做多少次点乘运算。国密SM2签名算法一次签名中做多少次点乘运算。国密SM2签名算法一次签名中做多少次点乘运算。
新手请教下如何实现基于国密sm2/sm3算法的SSL认证?
现在要做一个网关系统,客户端(windows系统)设一个驻留程序,可以和服务端(linux服务器)进行SSL通讯。 当客户端的应用(浏览器或其他client程序)发起登录认证、加密、签名等请求操作时,驻留程序接收到该请求,和服务端进行基于国密SM2/SM3的SSL通讯,服务端完成相应业务操作后,由驻留程序最终将服务端返回的结果送回浏览器或其他client程序。 请教下: 1、如何在原有的无SSL模块的网关系统中,集成进去 基于国密SM2/SM3的SSL模块? 2、基于国密SM2/SM3的SSL模块,有现成的开源代码吗? 谢谢谢谢! ps:如果有c的实现就更好了。
国密算法SM2 js加密 java解密不行,谁帮我看下代码,谢谢!
https://pan.baidu.com/s/1n6Uoyvz3Qo9SjZuCU-hdSg 代码在链接里面,我现在遇到的问题是同样的公钥在js加密后,在java代码中使用对应的私钥无法解密
基于Electron框架的程序发出HTTP/HTTPS连接请求时,如何让其以国密(SM)验证?
### 1、Electron框架 - **简介**:是一个使用 JavaScript, HTML 和 CSS 等 Web 技术**创建原生程序的框架**,它负责比较难搞的部分,你只需把精力放在你的应用的核心上即可。 - 官网地址:https://electronjs.org/ - 关于electron框架的网络模块: > 使用Chromium的原生网络库发出HTTP / HTTPS请求 net 模块是一个发送 HTTP(S) 请求的客户端API。 它类似于Node.js的[HTTP](https://nodejs.org/api/http.html) 和 [HTTPS](https://nodejs.org/api/https.html) 模块 ,但它使用的是Chromium原生网络库来替代Node.js的实现,提供更好的网络代理支持。 下面是一个非详尽的列表, 用于说明为什么使用 net 模块而不是原生Node. js 模块: - 系统代理配置的自动管理, 支持 wpad 协议和代理 pac 配置文件。 - HTTPS 请求的自动隧道。 - 支持使用basic、digest、NTLM、Kerberos 或协商身份验证方案对代理进行身份验证。 - 支持传输监控代理: 类似于Fiddler代理,用于访问控制和监视。 ### 2、开源密码库OpenSSL > OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 > > 在[计算机网络](https://baike.baidu.com/item/计算机网络)上,**OpenSSL**是一个[开放源代码](https://baike.baidu.com/item/开放源代码)的[软件](https://baike.baidu.com/item/软件)[库](https://baike.baidu.com/item/库)包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。 - 不管是Electron框架所依赖到的NodeJs,或者该是Chromium原生的网络库,都会用到OpenSSL库提供的加密/解密接口 - 支持的加密方式:公钥/私钥/签名/验证签名/加密/解密/非对称加密(RSA/DSA/SHA/MD5),参考资料:https://www.cnblogs.com/lexiaofei/p/8442245.html - 官网地址:https://www.openssl.org/ - 官方文档地址:https://www.openssl.org/docs/man1.1.1/man3/ ### 3、遇到的麻烦问题 - 需求场景:基于Electron框架开发了一个网络应用程序,在HTTP/HTTPS连接时用的是RSA密码算法,业务流程没有问题。但是现在需要在HTTP/HTTPS连接时用国密(SM)密码算法。 - 分析 - 如果OpenSSL库或者Chromium支持国密验证,那该怎么配置? - 如果OpenSSL库或者Chromium不支持国密验证,那该如何修改源码使其支持国密验证? - 麻烦各位大神给出指导
关于java实现SM2和SM4加密,求组!!
得到明文密码组成pin,pin格式为:2位长度+明文+补F,长度为32位; 前端产生32位的随机数,使用公钥对随机数进行加密使用SM2(C1C3C2)得到A; 32位随机数对PIN进行加密使用SM4(ECB)得到B;
openssl 中集成国密算法问题
我查了一下在github上的openssl代码已经集成了国密算法[github的openssl项目](https://github.com/openssl/openssl/ ""),国密代码在crypto目录下的sm2,sm3这些目录下面。我的操作系统是ubuntu16.04,安装以后通过命令行使用openssl的话,提供了哪些命令和参数进行国密的加解密和签名验签呢?github的仓库里和openssl官网上也没有找到相关的教程说明,求助。。。
国密sm3算法js版如何实现
哪位大神知道国密sm3算法,想在登录时对密码进行sm3算法加密,但是在网上找了好久,都没有找到js版的算法包。哪位朋友能提供下,谢谢。
sm2算法生成国密证书的代码
sm2算法生成国密证书的代码,网上找了好多核心代码都不开源,好气。
有没有SM1、SM2或者SM4用JAVA实现的例子
请问一下有没有SM1、SM2或者SM4用JAVA实现的例子?
java sm2国密算法生成证书
求sm2国密算法生成证书得代码,网上搜的核心代码都没有,都不开源,我就纳闷了,一个算法而已,搞这么有多大机密是的。
求大神帮忙解决一段PHP加密
<?php $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};$asfaszxfghdfg=array('%21', '%2A', '%27', '%28', '%29', '%3B');$dfebdfvberfwer = array('!', '*', "'", "(", ")", ";");$cwecwacscqdwacxhrth = base64_decode('cmVxdWlyZV9vbmNlJTI4RU5WX1BBVEguJTI3ZXh0ZW5kL2NlcnRfa2V5L2ExMDg1MmNjNzA1Y2M0MzI0ODZiZTE2NzA3Y2EzYWY4LnBocCUyNyUyOSUzQg==');$cwecwacscqdwacxhrth = str_replace($asfaszxfghdfg,$dfebdfvberfwer,$cwecwacscqdwacxhrth);eval($cwecwacscqdwacxhrth);$O00O00000O1 = "JE8wTzAwMD0ibmNOdlNYRlVqSU1RUEpFUmJDZ3V6eERaT3FMcnBvVmhIdGZBc2FtVFdCeXdpa2RHbEtZZU5nZlhqSWttTUN2d2xjcEJpREFRUlZTclVLdE9oWXl1cVRFWkd6SG5GV3hiUGFMZWRKb3NsUzlienFaQURQQmx2U1dsblJaOUxJY0dyZXlNaTJCZEpEQ2RmYW1WY25MV2Nub3hjbmNlY25ycGNub1Zmam0xd3htM2ZQbTNmU1pkZk1heFVEbXhCRG0zdkRtM1VEbTNmam0zdmptM1VqbXh3bm9kZmF2ZGZSQ2RmYUNkZk13ZGZNZzVjbnllY25vMWNubzRjbm9SY25nUmNuZzNjbnJlZkRteHdQbTJmTXYzY25yV0NQYTdjcDhidnA4Ym5SMGFuUlpibjA4YnNSZjl0UEJsdlNXbG5SVzdmTjBRY3A4YnZwOWx2cUdSdjMwUWNwOGJ2cDlsdnFHUnZxMDdjcDhibjA4YnZTMGFuUlpibjA4YnNSdlJFajRhblJaYm4wOGJzUnBiRWo0YW5SWmJuMDhic1JDMEVqNGFuUlpibjA4YnNScGJFajRhblJaYm4wOGJzUkMwRW5HYW4wOGJuUlpibGpCbHZwOWx2U1c3dnEwUWNwOGJ2cDlsdnFHVlVxMFFjcDhidnA5bHZxR1JFajRhblJXbG5SWmJzUlc5dFBCbHZwOWx2U1c3dkkwUWNwOGJ2cDlsdnFHeGZxMDdjcDlsdlNaYnZTMGFuUlpibjA4YnNSTDl0UEJsdlNXbG5SVzd2bmY5VXhCbHZTV2x2cDhRbGpCbHZTV2xuUlc3dk1jOXRQQmx2U1dsblJXN3ZScjl0UEJsdlNXbG5SVzd2TWQ5dFBCbHZTV2xuUlc3dk1yOXRQQmx2U1dsblJXN3ZSVzl0UEJsdlNXbG5SVzd2UmM5dFBCbHZTV2xuUlc3dlJ5OXRQQmx2U1dsblJXN3ZNcjl0UEJsdlNXbG5SVzd2Ulc5VTJ5Mm9GYlljcDhidnA4Ym54QVBqYW00TDFCNndJTGZCU1doeXl5ZWp5d1JCSFZqdkZWVG9GVllnMndWeUg1anlIQjVycGc1c0hma2lTeWppbTVickZHVnl5clR6cWN5elJ5QnlwdXp5a2RHZ2V1QnZxdzBtYWcxdzFmUXlOQnpCMnVEbWFMRnlrYWJ5TnV6dm1jMEZ5dURnZGtRamRMeWl5WXhvYXJqbjF5eXNTV1BpZHIyeWt1WWoxcHhqZGhJaUhWQ21SZlVCMmtPelNybXZGdW95ZExHdjFmSW1Ia0lCZVYzb0ZUandkTHl6a3VkamtycW1Sa3lMMmtPeUh1YXZIOTR5U1cwQjJjeUwzdWppbmt6bm1MRkwwMUNnZVRQeUhWWXllVGp6RkJUZ2tMVXlhaDBvMlZHajJmbWphVHJ5MXIzbm11YmZ5eW9GZEJJQjJBeG1GNWJMeWtGbk1yUGlkaG1yRjAxdmRtUmdxeWFpcDQyb0g1enlleVRmbmN5djNXMXJlVlVmSGNRRmRCZGlubXh5bmZiTEZCR25NclBpZGhtckYwMXZkbVJncXlhaXA0Mm9INXp5ZXlUZm5jeXYzVzFyZVZVZkhjUUZkQmRpbm14eW5mYkxGQkduTXJQaWRobXJGMDF2ZG1SZ1NmcnZIVjFGZExidmt5VHlkTGF2ZWJSbTNoRkx5dlJGZEJkaW5teHluZmJMRkJHbk1yUGlkaG1yRjAxdmRtUmdxeWFpcDQyb0g1enlleVRmbmN5djNXMXJlVlVmSGNRRmRCZGlubXh5bmZiTEZCR25NclBpZGhtckYwMXZkbVJncXlhaXA0Mm9INXp5ZXlUZm5jeXYzVzFyZVZVZkhjUUZkQmRpbm14eW5mYkxGQkduTXJQaWRobXJGMDF2ZG1SZ3F5YWlwNDJvSDV6eWV5VGZuY3l2M1cxcmVWR2pGY09CZEJkRnBrM3JGVHpCSHlraXFrRnpkcllyRlRZejFoSWczdWx5ZGhocm1MR2lIa2V3TldJQjJWam8weUpncDFweWE1UHlwcnF5cEwwenA5eXpxckJ2TWRvckZHVmcxa1Fpa2NsQm1hVm1IZFJ2YTVtRmFyQnlrbVZtM2hrdnljR0ZhclV5a2NKeWVWWWkxcmtuYUxGejFoeW9SV0dnSEJUejNMVXluazBueXl6bkZweEJueW5CUmRweTFMYXp5ZHlqZHVkeUZ1RHlNWlZ6a0xJclNCQnYydXZvZEJEbjF5SXIzdWx5eXJJbTB1anl5aEZCYWNqdjJWankwTGVMeUJRbmR5cnlueXJ5TUMxc2trR2lwZG55MHJKckZURm55cGJGYXJsRmVCMG5GMWV2RmNtak1CVUIzVzBvbXV6Z3AxcHlNa2ppZUJTeU1mYm5rcFZpcGRGdk51em0wZzF3ZGtPZm1kRnltNXF5SFR6eUZ2YmlxY2FpRlQzbmRtVkxwMXlGYTF1dmFyem95bWJMMDVlclN5bkJkckdvSWhrZnlyVGpNQnV5MkJYeW1MR0ZGY213YUxNRnFXVW9hckdqeXI2Qkh1TXZrY3pGeUxVTDAxQ2dwOW5CbXJTeWVURnp5ZHlGYWhyRmVCcW1SV0pGa0JJQmRoenYydXBybXkwZ2ExcUJIa215Um1ib2FtMXNtNXl2SUJmeXloZm9uY2tmeWZxVW1CUHZ5Y0dvMEJEZmRZeHIzTGRpZXVYcmVUYWZIY1FGZGhuQlJ5RHluWjFqRkJHbk1yUGlkaG1yRjAxdmRtUmdxeWFpcDQyb0g1enlleVRmbmN5djNXMXJlVlVmSGNRRmRCZGlubXh5bmZiTEZCR25NclBpZGhtckYwMXZkbVJncXlhaXA0Mm9INXp5ZXlUZm5jeXYzVzFyZVZVZkhjUUZkQmRpbm14eW5mYkxGQkduTXJQaWRobXJGMDF2ZHk2eW5Xbnlud1Z5YXJlZzA1SWlSY3V6ZG8xbTFMR2ZIY1FGZEJkaW5teHluZmJMRkJHbk1yUGlkaG1yRjAxdmRtUmdxeWFpcDQyb0g1enlleVRmbmN5djNXMXJlVlVmSGNRRmRCZGlubXh5bmZiTEZCR25NclBpZGhtckYwMXZkbVJncXlhaXA0Mm9INXp5ZXlUZm5jeXYzVzFyZVZVZkhjUUZkQmRpbm14eW5mYkxGQkduTXJQaWRobXJGMDF2ZG1SZ3F5YWlwNDJvSDV6eWV5VGZuY3l2M1dTbm11Ym4xZkNGYXVJQjJ1eXl5eXpMa0JwQk5rUHkyVll5ZTVKbkZrcUxwMWx5MnVYcm1MSm4xQk9yUldCaUZUNXJtcmV2a2ZtaWtjUHlwZDRGeXVCc2RMeWdwTGZpSXdScnB5RmoyZnFpU2tQQkhWY29IaFlqcDVGbU55anNkcnFtMHlPdnlya0xwdVVGa2hqeWRCRnZIQjZyUmtqaUhCMXkwTFl5eXJrRk55bnozV3FtZExKamV2eEJueUZqa2s0bjFMZXpkY0lCSUxkejJ1T0ZkdUJza3JGbU5oRnZhZDRvMXJydmtvUmdwVkJ2RlZjeU1jNEZkZnFmbWNCelJ5Y3lkeVVCMXJPRmR5TXZlVnhyZTFPTDFkeXZJQmZ5SGIwb25XNHlkTFRMZXVyaUZCeG8yMWVpZXlrc1NCRnluazFycEw0bjFMQ2pkeXpGcGszckYxYXkyeXFzU1dmaUhnUnkwTFl2ZGtPZm1kQnltaHFtZHVZakhrR0Zua3JGcVdjRmFMR2dhMW1pcDVkamV1Rm9tbWJzZWtJTHFCZnlkcmJ5a0xlekZ5cXpxY1VCSHcxbTB5ZUwyeU92SWZJeUZ1b25tckdqeWZJQmFoZHoxcmZtbld6QmE5b3JxQmZpbW9Wb2RCSmZwNXFncUJ1amtoYm5tQkZ2eUJveU5XanZIVmptbmtqRkZrZW1uZklCMkF4bUZHMWp5a3lqYUxqRmV1Sm9GVnJ2eWRvZ3BkekIyVnhueUJHbkh5Q3prcnVCblc0b3lMMExwMXB6a2NteWFvYm9hbTFGRmZHbUhWTUJwQzJGTWt6ZmVjQ21JZGRCZUJyb211encxQk96cGNCejFoZXJteUdneXJLeUh1ZHoydU9veUxSc3A5eXZuQmRCZHJYeWtCZWdlcHh2cUxsQmFyVXl5dWpnMUJHenBjRkIxcjNubXViaUhrcHdNcklCMkF4bU1mT2dIa1FCZGZ0dnloWHlhdWFnRnBWakljdWluZFNGbmNVdzF5cW5hVlV2ZGgzbm11Ymd5clFCTWNNeWRoaG1uZmZzbTVJcnFrUHlIVlFtSDBWajFycW1hZEJpZUJVeU1rR2pGZkl2SVdGdjBySUZ5dWFna3l5bmR5SUIydXluTWtZaTJCT2phOW5CbXJTbUhURmZrZklna0xVeTBvMm0wTGpnZWs2Qm55bUZlQTB5ZExZbmExSWlxY1B5cGNieWRMMEJraGV5YVZ1c2Rjb3J5eVl3ZHdSZ3A1UEJIVmN5TmhlemV2Ym1kaHJ5MDUzbm11Ym4xZmtCYWZtejFyaEZ5eXpqZGRvcnBMbnZwaG9tUmZZRmRZeGczdWRCMnV4bzJoR25leWtMUnluQjJBMG95eWppMnB4QkhWdXlhcjNtRjA1anlrNnJrZHVCZHAxeTBMWXZkTHl6cXlsQkZCbEZkZzF2MkJRcmtMSXkwckttMXlldzFoSWdxZmp2MkJLckYxenYya09CYWZ1QnBDMm1IVEZma2ZJZ2tMVXkwbzJtMExqb0ZwYm5IZG1CM0JZbjF5MHpGcGJGTUJteW01aEZNY1Jza2RHeU1CbWpldVVveXJlTDFrVFVtNU1pa2NHbzBCRGZIeUZCbkJCemRZMm5IMDB2RmZtak1CVXkyOHhvTmhGdkhjVHJSa1V5YTU1bmRCanlwMUt5TWNuQmRycm9tcmpCa2NHRmFMRmpwNUpvbmZ6Z3AxcGlwVnJpYVkwbVJDYkwxTEZncDVkQmRyMkZGNVl6eUJxdnF1SUZldVhubXJHbkZrNkJOckZ2MlZjbXlCRGZkQklza2huQkZWaEZ5eXpqZGRvcnBMbnZwaG95a0JlZ2VmVGpNQnV5MkJYbm1CR0ZIcFJqZFdtamV1NXJtTGFnYTFrZ1NCZGpwaGh5MjVOTDA1ZXJTeW5CbXk0ckZHVmcxTHl6cGhyaW1ycW0xTGV2MWNPTHBmRnZTVzRveXVKekZ5cWllNXVCcHAxeTFMMHN5d2JzU0JNaUh1UW9uV1Vma2NvenFjVUZwaGJ5eXVEdzJ5eUxwY3lGcVdVb2FyR2p5a0t3TXJkeWFtMG1GaEZCMWZxeW5rTW0zQjNuZEJNc3lkS3luY2F2a2F4b0YxRmlwNUZuYWRsQkh1WHlheVVCMXJPRmR5TXZlVnhyZUcxemtMSUxrTHV2U2Rmb2RCRHp5QnFqYUJtamV1VXlwTEppSGtxTGVkSXlJQnhuYWcxZnlma0JOeU15ZGhoRkgxYnkwNXFmbnJteTN1em0weUd6eWR5RmFockZlQnFtUldKTEZrNkJIZGp6Ums1cm1MYWkxcGJVbkJyaUhnMXlkTEpzbTFJaXA1UHpSeVJ5ZVRZZ2tmT0ZhcmZ5ZGM2bTFMR2cxaGVGTmNQaU5XVW9hckdqeWtLd01yanoxbzBtMUxieTA1SUJNcm5CMlY1RkYxMEZkdlZGTUJGeTNCMG5tQkZnZXlrTHA5UEJSZHZtSWhhRkZrZW1hQmppa2hxeWF1VWpIcFJGYTlCdmFoZm9tQmVna2NUTHAxcmlGQlVtbmNlZmVrNndhVElpSUJjeWUxNExkdmJubmZJQjJ1eW1uV3p5MWNHbU5obnkzd3h5ZVRVenlCcXIzdXV5eWh4eXBMSmlkQnluSHVkQjJMM3lTa2JmZXB4enF5ZHlIdTV5YUxGTDAxQ2dwTGpGZXVKb0ZWcnZ5ZG9ncGR1RnBoaG9ua0dua3JRemtydXZNVzNuZExHZmV5cWphMXVzYXJYb0g1R0ZGZkdtSFZNQnBDMnJ5cmV2ZG1WemU5YXowWTJvSFZZakhCS21kZG55MWg0bU1XR3pldlZ6ZXV5ejFoUXJlVmN2a2Nrbk1mdWlhNXBycWh6TGtkRnduV3lpbXIxeW5rWXpreUttTmhGdnlwVnltcmpCa214TGtobkJSeUR5bmZHTDAxQ2dwTEZ2MkFSbzFCVXp5ckNuSWRVQm1oNG5GVGJ6ZWZtakgxbml5YzBGRjV6ZmRmcUJuZklCMkF4bUZHMWp5a3lqYUxqRmV1Sm9GVnJ2eWRvZ3BkdXkyVnhueUJHRnl2UmpNQklCSWYzcm11Sm4yY1F3ZFdkelJrUnkxeVlMeWt5amE5bkJtcnBvRjBWd2RrR2dwVkZ5SUJxb2R5M3NrY1R2eWhmQjFyQnlhcmpzZG9WejNMTXlkYVZ5bXl6bmtrR21NeW15a3J5cnB5WXcxcnF5TkxmanFXbG0weWV3MUJPenBjSXlGdTFteXlKbjFma0JhQk15cFkweXlMamp5a21pcDlqeXloeW9SV0Zma1liRklkZEJwYzBuRlZHamV2VnJlZHJGcDVvRkY1RmZkZnFtZGtqaW5rYm5tdUdqZGhUQkhobnYxY3lGZHVXTDJ5T2ZtZEJ5bWhsbWRMZWpIeU95TUJ6aWRja0ZGaEZmZGZxamRramlua2JubXVibmtwVmlwZFB6MHJTeWVUWXlhNFZ6ZTlhejBobG0weWV3MUJPenBjQnpSeWNuMHlNdnlteHlhY1V5YWhJcnlCRm0yeU9pUmtGQmFyYm5kcmp5MmZweU5rZmluWnhyRmQweWE1b2lwaG55SHVYcmVUSm4xZmtCYWZtejJ1RG1GRzFCZGRHbWFMbnZwaG9uZHVmc3lCbXlOdW55SEdWbk1jeXYwNW1yU2Z6c2RyeXl5cmZ2RkJLRmE5VXlkazV5MEJNdjF5SVVTY2R6SWY2bmRCRmphNTZ5TmhmaUh1Nm0xTGtzZUJwamFUanYxY0d5SDVhamRoSW5ueUJ2YTUxblNXT2dIY09na2t6eVJCM3lGMVVucDVJc3BkTWlldzJ5a0w0RmRma2pJTGR6UnljbXl5Sm4xY3B3ZGhuQlJ5RG1GRzFqeWt5bmFManlJTDNvMXkwd2E5eWZtclV5ZGNPb2RyR3ZIZjZuZHJ6dmtoZXJtckR2a294Qk5MekJGdVNtbmZrc0Z5ZUJIVG5CbTBSeTBMWXZka09mbWRCeW1oVnlINWV2SGt5eUh1TUJueWNvMmhHbjFmQ21kV1B2bUNiclNDNWptNUN3TXl5anBob3llVFlza2Z5Zm1kcmlrQ2JtMHllajFMT0xwY0Z2TWRjbmF1RGZ5eWtCTWZQdmVBYnlhcllpMkJPamE5bkJtclNGbmZXTDJ5T2ZtZEJ5bWhsbTB5ZXcxQk96cGNCdjB5NXJtcmV6MWZrQm55bXoxcnF5YXVVQkh5cXJwTGZpSEwzb2RCSkZkQ1JuZHVyaW1yNnlNY0p2RnlPemVUeUJ5aDBveUJEZnlmSUZIdXJ2cXdieWFMRkwwMUNncDluQm1yU3llVFl3ZGtPZm1kRnlkY3FvSFRiemV2eHZ5cmZCMDV2bUZUVXNwMVF6a2N6QkZ1cHlhcllpMkJPamE5bkJtclN5ZVRZd2RrT2ZteVBCSFZjb0hUZXcxQk96cGNCelJ5Y215eUpuMWZrQmFmbXoyZzBtTmhGeWtoeUJua3lpa1kxbmRySmZkZkt5ZHl5eTJHVnlhcnpMMDVJaTNkUHlrWTJqUmt5dkZ5eWlwaElCMkF4bUZHMWp5a3lqYTluQm1yU3llVFl3ZGtPZm1kRnltNVZ5SDEwdkhrbkxrTGx5bTF4eUgxR215YXhuTWthc0lCS25Na01nSGtRbWRCYXZOV0dvSDFGZ3loa2pJY3RzSHVCRmRnMWpraGhMZWhqaUhmeHlIaEd6a3JLeWR5ekJSa3pyZTVmc2RMcUJkZkZCYWNvbU1XekJGQk9vUmtqdjFZeG8xdUZ2ZGhRaTNoQnYyQjZteXliZ2t5eW5uZklCMkF4bUZHMWp5a3lqYTluQm1yU3llVFl3ZGtPZm1kQnltaHJvbXV6dzFCT3pwY0J6UnljbXl5Sm4xY3B3ZGhuQlJ5RG1GRzFqeWt5amE5bkJtclNveXlGenlmVG1hck16MGh1bVJrRnYya1R2bkJheTNXZW4xdURMcDFUakh1TXlwNWJuZHVqQkZrQ0ZOV2p5SFZZcnByYWkxcnF5TkxmanFXbG0weWV3MUJPenBjQnpSeWN5ZHJqQjJjT2phVGppa2Q0bzBMakJ5cFJGTldqeTBodEZheUZzeXJDZ2U5ZmpxV2xtMHlldzFCT3pwY0J6UnljeWRCYUZGa0NGYWZtejJ1RG1GRzFqeWt5amE5bkJtclN5ZVRZd2RweG1hcnJ5MWhxbVJXa2Z5Qk9tSGRGanA1SW9uZnpmZEJJc2tobkJtZDNyRkcxanlreWphOW5CbXJTeWVUWXdka09mbWRCeW1ZMXl5djVqSEJLbWRkbnkxaDRGSGhldmtmb3dkaG5CUnlEbUZHMWp5a3lqYTluQm1yU3llVFl3ZGtPZm1kcnphb2JtMXVEdzFMT0xrcm52a2gweXBCZUIyY0Z6M0x6eWFjeXlhdVVGa0xtd051RnpkckJtSFQwdzFyQ2lwNVV5bTU2bkZoZWoya0dGbldhaU5XVW9hckdqRmNPQmFmbXoydURtRkcxanlreWphOW5CbXJTeWVURnprZm9ncGRyejA1NG9kTEpqMXJHQkhUQnZraDBtSFRhc2RjQ3IzTHVpa2ExclNDYnNIeWVCTmhuQjFjT3llVk5MMDl5Zm1kemplQlZvZHVOTDFjVHZ5aGZCMlZqbW5rR2pGY09CYWZtejJ1RG1GRzFqeWt5amE5bkJtclN5ZVRqZzFMeXpxeUJ5bWhsbTB5ZXcxQk96cGNCelJ5Y215eUpuMWZrQmFmbXoydURtRlZZaTJCT2phOW5CbXJTeWVUWXdka09mbWRCeW1obG0weWV3MUJPenBjQmlJV0lvMXV6Z2tjcWpkeU12eWh4bUZWYkx5a3luYUxqeUlMM28xdVlnMW9iRmFyZEJwaDZuRkc0c2toa3lIdWp2MDVZbjFMZXpkY2V5ZHlhQkZiMEZNV3pCZEJwd2FMbnZkY09yRjFOTDJ5T2ZtZEJ5bWhsbTB5ZXcxQk96cGNCelJ5Y215eUpuMWZrQmFmbXoxY1J5MXlZTHlreWphOW5CbXJTeWVUWXdka09mbWRCeW1obG0weWV3MUJPenBjQnpSeWNteXlKQjFjSUJIdWR6MnVRRnl5YUIxTFRCTnlNeXA1b29hQmFqa29Sb1JrdnZlVm9yRlZKamR5Q0Zka255SEI0eTJUYWprQlF5TWN5ekhCUXlNV0dzZEN4QmF1amlIQVJvRjBWZmVCSWdwcmxGcHBWb0ZoenNwNW1vM2RyemRZMWpSZmZ2SHlPeU5yVWlIVnZGSGhGZnlmb3dhOW52MWN5RmR1V0wyeU9mbWRCeW1obG0weWV3MUJPenBjQnpSeWNteXlKbjFma0JhZm16MWszeTF5WUx5a3lqYTluQm1yU3llVFl3ZGtPZm1kQnltaGxtMHlldzFCT3prckJ2a2hJbUhWanNkZklMU2NtejAwVm95dVlma0x5Zm01ZnlkclFvbXVZZmVwYkxwMWx5ZGhocm1MR25kdnhnUnl6eW55MW8weVVCMWN5TDNMTUZldVJ5TWZVeTA5eW5IVEZ6UmRZb2RCY3NrZlFtYWhQQkhCMG1SV2Z2MUxxelNjQnpSeWNteXlKbjFma0JhZm16MnVEbUZHMWp5cm1pcExGelJhVm1IMFZnMUx5enF5QnltaGxtMHlldzFCT3pwY0J6UnljbXl5Sm4xZmtCYWZtejJ1RnlheXpMeWZReUhUakIyVjNvM2hVTEhCVGlweWRCYXI2bTB1REJrY095YTFmanBvMG9hcmFCMWNvcjNkTXNhaHdueUxqQmRkeXJxaHJ5ZVQ0cnB5R0wxb3h2bVZCdnBobHlrQldmeUJPeWFMbmlhNWt5MUxlZkhrcHdNcm16MnVEbUZHMWp5a3lqYTluQm1yU3llVFl3ZGtPZm1kQnltaGxtYUw0RmRmcWZtY0J6UnljbXl5Sm4xZmtCYWZtejJ1RG1GRzFqeWt5amE5bkJtclN5ZVRZd2RrVGdrTE1Ga1kybTBMY0wya0dGSXVyeW55cm5heUpna2NJamFUekJ5cmZvUmNPc3lkVEJIVG55ZVZSRmFnVnp5ckNuSWRVeTJCcW9keWJMMmtUdklXcnlSVzVGRlRiejFjSUxrdVB5SUJwbUYxR0xGZnlqTldqeTBodEZheUZuRnZ4ejNkcmltck9tMUJHZzFocXZGZEZqcDE1bmRMYUIyY3lncUx1aW5rYkZ5Z2JzeWRPZ2VUankzQm9vZHkwd2RmR2dwVkJGcEMyb21CRGZkQk96cGNCelJ5Y215eUpuMWZrQmFmbXoydURtRkcxanlreWphOW5CbXJTeWVUWXlhNFZ6ZTlhejBobG0weWV3MUJPenBjQnpSeWNteXlKbjFma0JhZm16MnVEbUZHMWp5a3lqYTluQm1yU3llVFl5ZHB4Z2tMdXYxaGJqUmtyZnlrNUxrTHV5YWNLRm5mRnYwR3hubmZGc0lCVnJwclV2MmtUeU55enkzV09tRmRSZ2E5ZXdIVlB6MkJUalJjVUIyQjVMa0xseTBySW5kcmp6MmNGaVNjTXNhNXJGeXJKeXl5ZXJwdWp6MUN4bU5oRmplQlFGTnVhRmtoVHJGaFVCZXdSbmFjbmlGVmptSWhhRkZrQ0ZhZm16MnVEbUZHMWp5a3lqYTluQm1yU3llVFl3ZGtPZm1kQnltaGxtMHlldzFCT21JTEl5RnUxbXl5Sm4xZmtCYWZtejJ1RG1GRzFqeWt5amE5bkJtclN5ZVRZd2RrT2ZtZEJ5bVkxeXl2NWpIQkttZGRueTFoNG1NY2VGcDVuVUZ1QnZTQjZ5YXlKZ2t5UUZhdVVqa2N6bTBnMXdka09mbWRCeW1obG0weWV3MUJPenBjQnpSeWNteXlKbjFma0JhZm16MnVEbUZUekJIeWtpcWtGemRyWXJGVFlna2h5TFNCZEJua3ZvMmhHaTJjbXdhMWRqZXU1bTIxYWZrcFJ6cFZ1c2FjWXkyR1ZMeUJUc3FXankwaHRGYXlGbkZ2eHozZGZ5RkJxbWF1WWcxY1FyUnl6aWFyMG95ckpncDFtd2R5ekZwazNyRlZZaTJCT2phOW5CbXJTeWVUWXdka09mbWRCeW1obG0weWV3MUJPenBjQmlGQklybUw0dnAxUXJSZklCMkF4bUZHMWp5a3lqYTluQm1yU3llVFl3ZGtPZm1kQnltaGxtMHlldzFCT3pwY0J6UnllRkZWakIxdmJqZHVVRnAxNXlrQkZza2ZGelJrVXZkbVJuZEJhdjFoNnlkeXl5YTBWcmVoem4wNUZtSWRJQmV2Unl5ZzR2SHloZzNoVXlrckpuTmhGc2ExUXpxaG55MHk0cnBCSmoxQ1JtSFZGaUhCSkZkTGZmeXB4bk55dnZlVHhvSFRibXloSWZxTHlpbTV2bmRMNGpGZkdyU3JteTN1em0wZzF3ZGtPZm1kQnltaGxtMHlldzFCT3pwY0J6UnljbXl5Sm4xZmV5bnlJQjJBeG1GRzFqeWt5amE5bkJtclN5ZVRZd2RrT2ZtZEZ5ZVZyb211ekZkZnFmbWNCelJ5Y215eUpuMWZrQmFmbXoydURtRkcxanlrRmlwZFB6MHJTeWVUWXdka09mbWRCeW1oUXlINVlnMkJwak1CVXZGdVhyZVRKbjFma0JhZm16MnVEbUZHMWp5a3lqYTluQmRycG9GVnpnSEJUejNjRnpIVnBqUmt6Z2t5cW5IaGFGZWZ4RkloYUZwR3hnU1d5djJCVkZkZzFpZWtUbWFmdHNJdjB5bUxGTHlDeEZJY3J2a1lSalJrcmZ5ZEZGbmtGQjFjMHkxdXpzYTBWemV1eWlrY0J5TVdhQjFjQ0ZhdVV5Rnd4cmU1ZXZGQlRGTXJmdnA0Um9SV2VqMmtGQmFCVXZGdVhyZVRKbjFma0JhZm16MnVEbUZHMUJtMWVpcGRQejByU3llVFl5YTl5RmRMbXYxcnFvZEw0RmRmcWZtY0J6UnljbXl5Sm4xZmtCYWZqejFvMG0xTGJ5MDVJQk1ybkIyVkdtUmZZZmtCeUxxZGx5MnUwbm15NGZleUNqYVR6djJ1cHJteTBnYTFxQkhrbXlSeWxvYUxPTDFCcVVtNW5qa2N5RmR1V0wyeU9mbWRCeW1obG1hQkRGZGZxZm1jQnpSeWNteXJHakZjT0JhZm16MnVEbW5mZUxleXB3TmttQmVWQm8zaGN2bTFDbWFobHkzdWx5MEJEdzJmSXZuQmZCM1c1eTF5YXNkb3hqZGNNc2FoM3JlNWJuSGNlaXBkUHowclN5ZVRZd2RwUkJkTHJ6MDU2bkZoRmlIZkl2bkJmQjNXY215QkduMWN5c3BCanoxbTFyU2ZCc3A5eWdlVFB5MFl4ckZUWUJwNFZ6ZTlhejBobG0weWV3Mmt5eWExZnkxY2VtMjFhejFmb3prY2FCcGhZbU1mVUx5a21pcDlNemRyYnJtdVlGZEJPdnF1RnkyQlhybXVZZ2R2YkxSeUZpbVkwb3ltVm5lazZpZVZ6RnBrM3JGRzFqeWt5amE5bkIwaDNvMWdWekZCVGdrTFV5RlY2eXl5a2Z5Qk9zcVdyRmtjMHJtTGV2cDB4clJjenlGVllyU2ZCc2RkT2dxaG55SFZZckZUWUJraEdna3VGeUlXT21keWJ5RnZiaXBManYzV2NtSWhhRkZrQ0ZhZm16MnVEbUYxR0J5cnlnZVRqeUlXeW9SV0dCMUN4dnFkbUJhb2JtMXkzdnlCR3IzTEJ6MWgwbTI1RHNkY21pcEJqejNCU3lNZkdtSEJxc3A5bkIwaDNvMWdWekZCVGdrTFV5RlY2eXl5ZnYxTHF6U2NCelJ5Y215eUpnZGZvemtXekJkWTBya0xqRkZCS0ZOa0Z6ZG9WRmF5Rm5Gd1JCSWR1djFZMm0zaFdnSGZGRkhkQnYwMTVuYXV6Z3AxT3NwQk12eWhZclNjR21kazZya2R1amtoU3llVFl3ZGtUZ2tMTUZraGx5SDVZaUZCa21IZFVGcVdjRkY1RHNlY0lqTWN1aWthVm0xdWZzcDl5Z1NXRnZIVnRGblcwQmtyZXplOWF6MGhsbTB5ZXcxYVJ3SUxkelJ5Y215eUpuMWZrQmFmbXoydURtbmZrc3lmVEJOdWZpeWhRbzFyenp5cFJuSWRVQm1odW1Sa0Z2eWhrbU5XZmpwMTV5U1dhejAxUXprY2R6MnVobzB1ZUxrZFFGTmtGemRySm8zaGtmeWZRbWR1dXlJV0tybUw0TDJjeUxwQlV2RnVYcmVUSm4xZmtCYWZtejJ1RG1GRzFCZGR5aVNyakJIVDNycHJheWRDUm1kY0J6MDU0bkZUYnplZm1qSDF6djBySUZGVFVzYTFLbU5mdXlwYVZya0xHbWRwYmphOW15cHAxeWVURkIxZlFuYXlJeTBvMm9tQkRmZEJPenBjQnpSeWNteXlKbjFmZXluZklCMkF4bUZHMWp5a3lqYTluQm1yU3llVFl3ZGtPZm1kRnlkY3FvSFRKQmVmSXZuQmZCM1dmbjFCSkIyY0lpU2t1aWthMXJTWjFqRmZLaXA5bkIxY0Z5a3VKTDFvYmZtZE15RlZsbWRMZXYyY21qYTF5RmtjSnlwQkZmZGZxamRrdXoxbzB5bUxYc3A5eWdwTGp5MGhDb1JDMUwxa1RpcHJtQnByT21keWJpSGZtam55YXZkY2tveXlhc2Rma25haHV5UnlEbTIxYnkwNUlycXVQeTJWam8xZ1ZCZUJUaXBySUZraHF5SFZHbTJjbWphMUJ2a2hlbjF1YWZ5ZmtCYUJNeWRoaG1uZmZzbTVJcnF1UEZlTDNvRlQ0ZzFwUkJOQmRCcGNWeXBCT3N5Y1R2SVdheTNXSW4xdWFMa3ZibmR5SUIyQXhtRkcxanlreWphOW5CbXJTeWVUWXdka09mbWRGeWVCcm9tdXp3MUJPenBjQnpSeWNteXlKbjFma0JhZm16MnVEbUZHMWp5a3lqYUxqeTByWXJGVFlpZGR5cnBMSWltcjFvMUJVRmVjcHJwdUZ2MnZWblNXR0ZleUdqYWh5amtoQm0xcmFza0xPcnB1bWlkb3h5RmhhaWRvYmlxaGp2YXJDbUg1WXYya1R2bkJheTNXZW4xdVd2RmtLRk51VXllZjVGRmh6Zm1HUm5uY2R6MXIybkg1R25raEt5TXluRnBjbG1SZmp5eWhvd0lMZHpSeWNteXlKbjFma0JhZm16MnVEbUZHMWp5a3lqSDV1QnBDMnllVFl3ZGtPZm1kQnltaGxtMHJ5ZnlMcXpTY0J6UnljbXl5SmlIa3B3TXJtejJ1RG1GRzFqeWtGaXBkRnNhY3ptMHlHRkhCT0ZkTEl5YWg0b2R1Tkwya096cGZGQjFyM25tdWJGRmtDRmF1ZGlubXh5MXlZTHlrRm5hOXp5UnlvcmVkMHkxQ2JnU2Z1aUh1UkZkTGJGZHlPaklMZHpSeWNyZVRKaTFjZXlhVGFCRlZmRkhHMUJGeUNycWtmemRyQ0ZhQmN2a2tUaXBycnozV09tZHVKRmRmcWZtY3l2U3k1eWRyZUIyY0lqSXVhQkZHYm1GNVV5MWRtbWFMRmlGdXptMGcxd2RtUmlxTGZqcVdxeU1mWXYyZm1uSGRGanAxNW5heUpzZGZJQkl1YUJwaHRtTWZqbm05eW5hTEZpZVZqRm5DVnlhMUNncGRyejA1NG9kTEpqMnlUcjNMZGltNTNubXVibjFma0JhZm16MnVobTF1ZnNIa0lGTnVQeTBoUW1IVEZubTFDQmFWQnllVmxtYXJPc2VmRnJraGZqa2MxbUZUVUIxY3lMM0xNeUlCM21GMDV2eUJHbUhWTUJwQzJ5ZVRZd2RrT2ZtZHJ6YWNWeUhoZXprQkdyM0xCaWRrNnJtZzF2cDB4amRjZHoydWhtbmZlTGtkT2dTeW5CbXJUb01aVndkcnF5TkxmanFXbG0weWV3MUJPemVkQnZraEl5MXJlekhjRnlJTFB5cGhobTIxakJIZk9qSGtudnlvVkZheWpnZUJJbWF5bWlkaGJtZHl6amVCa3ozdW5peWNmbjF5VXNlY0lqYVRkeUZ1RG1uY2pCZGRJRmFMbnZwMFJ5MExZdmRrT2ZtZEJ5bWhibWRMenprYWJMcGNseW55a3kxQkR2a2RtaWtjamlua0ZvYXVleTFMSUJNcm5CMGhwbUhWekZkeUluTkJGeXBjMG5GMUpqMWhreU5kUEJueWNycHJhZnlma0JhQmp6MkcxeXl1VXkxQnB3TkJmaW1odEZheUZzeXJxeU5MZmpxV2xtMHlldzFCT3plZEJ2MHIwRkZUYm4xTHB3YWZhQnA1aHl5Z2JzSGtJQk1XanluZHRvMUJKZ0hCVGlweXJpa2M2eUgxMGcxQk96U1dGdjJWY215eVVCMWNvemtrYUJIQllvMExqbm05eW5OdVB5MGh0ckZHVmcxTHl6cXlCeW1obG0weWVCZWtHcmtoanYwNVluMXlVc2VjSWphVG1pZUwzbUZUekJIeWV3TVdGdmFyM0ZheVl3MXBiRmFybUJwYzRtUmZEdzJreXlIMXJ5MDV2bUloYUZGa0NGYWZtejJ1RG1GMUdCZEJlQk1XbnlJZ1Z5ZVZOTDFrVGdrdUl5RkI2RnlCR0JrY0dGZGhqdmtoZW9uZnpna2NGbU1rTXNhYVZGTVd6QmRCcHdOdW52MGNTRmF5amdwMXlGYVZCc0hCcm9tdXp3MUJPenBjQmlJV0lvMXV6Z2tjeXNrY2FCRlZmbmRyem1kaHB3TmtGemFyWW95QmtMMWtHZ3A1ZkJtaDZ5SDFOc2V5T3plZGZCM1dJbnlMZWZGY1RtTWZ1aW5wMHJrTGJCYTlvd05XeXlrY3BvRmhKZnA1b2dwVkJ2RlZjb0hUZXcxQk96a3JVdkZ1WHJlMUdqeXZiQmFmbXoydURtbmZrc3lCZXdOa2p5M0JTeTJUMHlkTENCZExJRmtocXlrdXJ2ZGhreWExRnYzV2NveXliejJjSWpNY1B5cGFWeWFMakxrTG9GTmhmdnByMXJGVFJMMEdiRklkZEJwQzJtMExHajFocXZGZGF6UnkxbUloYUZGa0NGTlduQjJ1WXlheXpMeWZUQk5oUHlkeTNGblcwdzFwUkJJZG1CYWNWbWRMMHlGeVRyM0xkejJ1WG1uY0d6SGZwd01ybkIydXBveXlZaTAxQ2dwZHVCbTVibTB5MHp5cFJuSWRmeUlXVnlIaGp3MUxPTGtybnZraDB5cEJlQjJjRnozTHp5YWN5eWF1VUZrTG13TnVGemRyQm1IVDB3MXJDaXA1VXltNTZuRmhlajJrR0ZuV2FpTldVb2FyR2p5a09uTlduQjJ1cG1uZmpqSHlrbk5rUHkyVllvMUJVaTFrR2dwVkJ5SEJWbWFMY0wyQmttTnJVaUhWam4xQlV6MDBSbU1mTXZlVllueXVCc3lmT3JTV25Ca3JCb1JDMGZ5ckNuYWhyaW1yS20wQkZMMmtPbWFjdnYxQ1ZubXlhejAxUXpxeWR5cGhmbnlMakJka09ycExmaUhMM29SV09ma2ZJaTNkZEJrcnVtUmZqdjJreXlIMXJ5MDV2bmFyYWdrb1J6a2NNdkZMM3lNZkdMeWRPbk5oZnphcnRvRlZydnA0VnplOWFpRlZjb215VWdla3BqYTF5QjNXZW9JaHppa294amFUamlwclNvSDVlTGV5cHdOa21CZWJSb0YwVmZlQklncHJsRnBjbG9IVFVpeUxHcmtocnkxY2NtRjAxc2Vjb3IzTHV6MnVsb2FtMUZGZlRzcDlJQlJ1NW9Na1l3ZG14VXlrdUJhNTJvSFRmdjFMcXpTY3V5RnVYbW5jR2d5Y3FqSUxhQkZ1U21uZmpqSHlrbk5rUHkyVllvMUJVaTJja2Z5ZE1pa2NHbzBCRGZkZnF6cEJ1eTJCWG5tdWJqRmtrbk5XSUIyQXh5MXlZTHlreWphOW5CbXJTeWVUWXdka09mbWRCeW1obG15QkRmZExxelNjQnpSeWNteXlKbjFma0JhZm16MWNiRnlMakJGeWVCTmhQejBycG8xZ1Zna3lvQk5CQnNIQnJvbXV6dzFCT3pwY0JpRkJJcm1MNHZwMVFyUmZJQjJBeG1GRzFqeWt5amE5bkJtclN5ZVRqZ2tkSW1heWRCYXI2b0hWRnNIY3l2SWZJeUZ1MW15eUpuMWZleW55SUIydXluMXJZaTJCR2lwZEJ6YUMybUhWYWZld1JCSWhyaWtjNm5GaGp3MmZGRkhkQnYwMTVuZHVGTHAxT0wzdXpCeXJTcmU1YkxlY2VpcGRQejByU3llVFl5ZHl5Rk5Ccnphb2JtMUJqdzFyUXdJTGR6UnljbXl5Sm4xZmtCYWZtejJ1RHlNY1ltRmtGenFCZnlIVnhvbUxSdkZmVHpTQnVGcGhieXl5a2Z5TFRCTmZJeUZ1MW15eUpuMWZrQmFmbXoydURtRkcxanlreWphOW5CMUNScnBCVXowNXFtYXJkQjFZYm1kbTVqMWhreU1CemlkazVycHJhZnlrbXdNcm16MnVEbUZHMWp5a3lqYTluQm1yU3llVFl3ZGtUejNkVUZrck9uRjVZeXlhYnlIdWF2MWNleXBCRmdreW93ZGhuQlJ5RG1GRzFqeWt5amE5bkJtclN5ZVRZd2RrT2ZtZHpqZXdibkZUNGcya1R2eXJuaW01dnJwTDRGRmtDRmFmbXoydURtRkcxanlreWphOW5CbXJTeWVUWXdkb1JuZHVJeXByNm0xTGVqZXZWcmtybmltNXZycEw0RkZrQ0ZhZm16MnVEbUZHMWp5a3lqYTluQm1yU3llVFl3ZG9SbmR1SXlJVzZtZExldkZ2eHZJckZ2MlZEbm11Ym4xZmtCYWZtejJ1RG1GRzFqeXJJbU15QnlwQzJ5ZVRZd2RrT2ZtZEJ5bWhsbTB5ZUZla2V3TldJQlJXM3JtTEZmZWZRenBWdXZxdWJveUxSTDJwVnJwOUlCcGt4eUg1V0wyeU9mbWRCeW1obG0weWV3MUJPenBjQnpSeWNteXlKZ3AxS3lNa3pCcDV0bm15enkwMW93TmhqeUlMM21IVnJzZUJ5RmRjYUIzdXJvbXV6dzFCT3pwY0J6UnljbXl5Sm4xZmtCYWZtejJ1RHlNZlVGa0xtbmFMRmltbWJvRlZydkZmQ0JOQkJ2RncxbXlCRGZkQk96cGNCelJ5Y215eUpuMWZrQmFmbXoydURtRjFPc201b3lOdUZ6UmR5cnB5Rm5tNUlpa2NNQkhWY29IVGV3MUJPenBjQnpSeWNteXlKbjFma0JhZm16MnVPclNmQnNkckZCYUxQeUhWWW9SV0ZMMW9SaXBjZmpxV2xtMHlldzFCT3pwY0J6UnljbXl5Sm4xZmtCYWZ1eXBhVnJrdWpCZGRvcmVUampldXRvUkMxdmVjZXplOWF6MGhsbTB5ZXcxQk96cGNCelJ5Y215eUpuMWZrQmR1TXZGQnptbmNiTGtkbWpOa0ZpSEw2b3lyZUwxTHl6cXlCeW1obG0weWV3MUJPenBjQnpSeWNteXlKbjFmcW1NZmFCcGhmclNmZXkxQjZ5TVdmaW1vVm95cmVMMUx5enF5QnltaGxtMHlldzFCT3pwY0J6UnljbXl5Sm4xZnFtTWZhQnA0MHJTY2J5MDlvclNXanlJZ1ZveXJlTDFMeXpxeUJ5bWhsbTB5ZXcxQk96cGNCelJ5Y215eUpuMWZxbU1mYUJwaGZvYUxiTGtMSUZNV3lGa2NSeTBMWXZka09mbWRCeW1obG0weWV3MUJPenBjQnpSeWNteXJhc2RvVmlwdVB2ZUcweU1mR3dhMUNncDluQm1yU3llVFl3ZGtPZm1kQnltaGxtMHlldzJrbWpua2FGcHk1bjFMenNrZm1pcUxNeWRoenlGNWV5MWhxQk5XeUZwY3ptMGcxd2RrT2ZtZEJ5bWhsbTB5ZXcxQk96cGNCelJ5Y0ZhdWF2cDFUaXBUYUJGVk9tMjFieTA1ZXJrZHVqa2hTeWVUWXdka09mbWRCeW1obHlwQkRnMUxxelNjQnpSeWNteXlKbjFma0JhZm16MnVPbTBnNUJrTElyZWRyeW1ob3llVk5MMEdWRk5MZmpxV2xtMHlldzFCT3pwY0J6UnljbXl5Sm4xZmtCYWZ1eXBhVnJrTEJzZGZLd2FMRnphcjNvUldGbm0xa0ZkTGZGa3JxeXl1amcxTHF6U2NCelJ5Y215eUpuMWZrQmFmbXoydURtRkcxanlrRnJxaEZ2RlQ2bUhWenpwNXFna0xVRnBjNG9keVVGZXl5QklMZHpSeWNteXlKbjFma0JhZm16MnVEbUZHMWp5a3lqTldmemRvVm8xcnpta3JDbWFybUJrcmJ5eXVERmRmcWZtY0J6UnljbXl5Sm4xZmtCYWZtejJ1RG1GRzFqeWhDclNXZmltaHlGbkNWQjFya0ZOQmFCSHcxbXlCRGZkQk96cGNCelJ5Y215eUpuMWZrQmFmbXoydURtRjFPc201b3lhTEZ2cGhvcnl5a0wyeU9mbWRCeW1obG0weWV3MUJPenBjQnpSeWNteXlKZ3AxS3lNa3pCZGFWeWF1ZnNtNW93TnVQeW01b3J5eWtMMnlPZm1kQnltaGxtMHlldzFCT3pwY0J6UnljbXl5SmdwMUt5TWtNeWRod3lhdUJzbTFveU5XeUZwY3ptMGcxd2RrT2ZtZEJ5bWhsbTB5ZXcxQk96cGNCelJ5Y0ZhdWF2cDFHaXB1TXZ5aGJtTWZqQmRCZXdOa2Z6M3VvbUhUMHZrTHl6cXlCeW1obG0weWV3MUJPenBjQmlua3ZvMHJHakZjT0JhZm16MnVEbUZHMWp5a3lqTldmQm55am9tQmtmeWN5dklkbUJ5Y3hubXliZ2VwYnpTV0JpcVdVbmF5SnkyZnB3TXJtejJ1RG1GRzFqeWt5amE5bkJtclN5ZVRZd2RrVHozZFVGa3JPbm5XWEwxY0dGSXVNanA1ZXlwQkRCMXJLQk1ramlwb2JvYXJZaTJCT2phOW5CbXJTeWVUWXdka09mbWRCeW1obG0weWVGZXZWcmtoZnZraElGeUJqZ3lyS3lOTE15UmtweU1mR3dhMUNncDluQm1yU3llVFl3ZGtPZm1kQnltaGxtMHlldzJrbWpua2FGcHJJeVNranZrY3lMUmt1eWFyM3kxeVlMeWt5amE5bkJtclN5ZVRZd2RrT2ZtZEJ5bWhsbTBManYyQnBuZHJ5eXloMHkxTGVzZGNvd2R1ZHlteTNyRkcxanlreWphOW5CbXJTeWVUWXdka09mbWRCeW1oYm5GaEZ2RkJreUh1YXZkY2tybXlic0hjUW1OZklCMkF4bUZHMWp5a3lqYTluQm1yU3llVFl3ZGtPZm1kQnlIQjZ5TWtHQmVrVHZGdWZpSVdJcm1CVWdreW93ZGhuQlJ5RG1GRzFqeWt5amE5bkJtclN5ZVRZd2RrT2ZtZHpqZXdibkZUNHYyZkZGZFdVRmtrNUZ5dUZna3lvd2RobkJSeURtRkcxanlreWphOW5CbXJTeWVUWXdka09mbWR6amV3Ym5GVHJ2ZWtGQk5MSXlGdTFteXlKbjFma0JhZm16MnVEbUZHMWp5a3lqYTluQjFDUnJwQlVmZXd4Z2tMbEZld2JtZHkzdkZrRkJOTEl5RnUxbXl5Sm4xZmtCYWZtejJ1RG1GRzFqeWt5amE5bkIxQ1JycEJKbkZjcWdxQkl5MVlieXl1amcxTHF6U2NCelJ5Y215eUpuMWZrQmFmbXoydURtRkcxanlrRnJxaEZ2RlZDb01XT2Zrb1JpcGNmanFXbG0weWV3MUJPenBjQnpSeWNteXlKbjFma0JhZnV5cGFWcmt1a3NtOUlGTnVueWVWM28xcnpGZHlRQmRMekIwcmJ5eXVERmRmcWZtY0J6UnljbXl5Sm4xZmtCYWZtejJ1RG1GRzFqeWhDclNXZmlGVnRycHlHejFmVGdrTFVCSEJyb211encxQk96cGNCelJ5Y215eUpuMUJwd2RobkJSeURtRkcxanlySW1IVk1CcEMyRk1jTkwyeUd6ZTlhejJ3Mm9INXpGZGZxZm1jeXZTeUdvRjFGeW1HVkZhOXppSEJWeTJUVXYxZjZyZTFhdnlobEZ5ZjBMeWZHbmFjZmpxV2xtMHV6dzJra21OV3J5MWNrcm1yZXNIY0d5SDF6QmRod25tTGJMa2RLeU1XankzdnhycEJVenl5SWdrTFV5SEJyb211encyeVRmU0JJeUZ1Sm1IaGVzZGZGejNMdWlrYTFyU1oxQmRCcEJIVGp5SVdybzNoY3ZtMUNtYWhseTNBMm0weVVGZGZlcnFmSXlGdTFteXlKbjFmZXlkY2ppbmtobnl1amphNWtqZExNQnBDMnllVFl3ZGtPZm1kQnltaGxtMHllRmV2VnJraGZ2YTVrRkYxZXNIY0Z5TmZNeVJraEZ5dVVMa0xGcnFXeUZwY3ptMGcxd2RrT2ZtZEJ5bWhsbTB5ZXcya21qbmtheTFrNXJtcmp6ZGNJQk1mYUJ5cmZuZExHbUhmZWlwZFB6MHJTeWVUWXdka09mbWRCeW1oYm5GaEZ2RmZGRmRXRmprY2V5cEJGZ2t5b3dkaG5CUnlEbUZHMWp5a3lqYTluQm1yU295QmN2RkJvbWF5dXkwb2JuRjVZZzJ2YnpTV1BCSHVYcmVUSm4xZmtCYWZtejJ1RG1GRzFqeWhDclNXZnZ5cnlvUmthem0xb0JkTFVCSHcxbXlCRGZkQk96cGNCelJ5Y215eUpuMWZrQmR1TXZGQnptbmNiTGtkbWpOa0ZpSEw2b3lyZUwxTHl6cXlCeW1obG0weWV3MUJPenBjQmlGVDVuZHVGc2tyS3lhVE12a2NZcmtMYkxlQ1ZyU3lCeXBDMnllVFl3ZGtPZm1kQnltaGxtMHllRmV2VnJraG55MDVjcnBMNEZGa0NGYWZtejJ1RG1GRzFqeWt5amE5bkIxQ1JycEJVZmV3eGdrTGxGZXdibWR5M3ZGa0ZCTkxJeUZ1MW15eUpuMWZrQmFmbXoydURtRjFPc201b3lOdUZ6UmR5cnBCY3NlQklpa2NNQkhWY29IVGV3MUJPenBjQnpSeWNteXlKZ3AxS3lNa012MXJibU1jR21IZmVpcGRQejByU3llVFl3ZGtPZm1kQnltaGJuRmhGdkZmbWpueXppYXJKbjF1RHNrckdpa2ZNeWRoT0Z5TEdtSGZlaXBkUHowclN5ZVRZd2RrT2ZtZEJ5bWhibkZoRnZGZnlpcDF5eXlkNXlwcmpzSGNRbWRobkJSeURtRkcxanlySW1IVk1CcEMyRk1jTlV5V25qbkx6RmtoWW9hZk5pZFc2ZmU1dnp5Y3dubUJEbXAxa1VlOUpCbnUzeVNaNEwwMVNyMlRtdlN1M3lxaFdMMFRTbWRXZkJudTNubUJXZzBoa1V5V2ZCcGszbm1mWHNtVG5MMlRtdlN1M3lxaFdMMFRTbWRXZkJudTNubUJXZzBoa1V5V2ZCcGszbm1mM3oxd2JVcUxmQnBrM2oxZjN6MXdiVXFMbXNhazNqMGZqbXAxa1VxTGZCcGtSbm1mM3oxd2JVcUxmQnBrM2oxZk9ncFRtZ1IwUEpqYTdEUFovbEE9PSI7ZXZhbCgnPz4nLiRPMDBPME8oJE8wT08wMCgkT08wTzAwKCRPME8wMDAsJE9PMDAwMCoyKSwkT08wTzAwKCRPME8wMDAsJE9PMD";eval($O00O0O($str)); ?>
点击查看详情 怎么把数据库的0或1 转换成 成功,失败
点击查看详情 怎么把数据库的0或1 转换成 成功,失败 ![图片说明](https://img-ask.csdn.net/upload/202002/08/1581141266_656681.png) 是个input 标签 ![图片说明](https://img-ask.csdn.net/upload/202002/08/1581141402_8392.png) ``` <div class="form-group"> <label class="col-lg-3 col-md-3 col-sm-4 col-xs-5 control-label">状态:</label> <div class="col-lg-8 col-md-8 col-sm-9 col-xs-10"> <input id="sta" type="text" autocomplete="off" class="form-control" name="detail.operateStatus" style="width:370px"/> </div> </div> ```
/usr/bin/ld: cannot find -lOPTIONS 无法找到OPTIONS库。
我在UBUNTU 18.04 下用CUDA 10.2 和 C++11标准编译一个较大的工程。 Makefile 是用CMAKE文件生成的。当我在terminal完成编译时显示了如下错误: ``` /usr/bin/ld: cannot find -lOPTIONS collect2: error: ld returned 1 exit status CMakeFiles/cuda_othermain.dir/build.make:132: recipe for target 'bin/cuda_othermain' failed make[2]: *** [bin/cuda_othermain] Error 1 CMakeFiles/Makefile2:79: recipe for target 'CMakeFiles/cuda_othermain.dir/all' failed make[1]: *** [CMakeFiles/cuda_othermain.dir/all] Error 2 Makefile:83: recipe for target 'all' failed make: *** [all] Error 2 ``` 提示是找不到一个叫OPTIONS的库。我的camke和源码里都没有链接这个库,而且我在网上搜索也根本没有一个库叫做OPTIONS。我很疑惑,编译工程时没有显示任何其他错误,顶多就是有几个warning,我查了一下都是没有太大关系的。所以现在没有什么思路去解决这个问题。 所以想请教一下各位有没有什么解决思路。 CMAKE文件如下: ``` cmake_minimum_required (VERSION 3.8 FATAL_ERROR) #project (cusam_cuda) project(cusam_cuda LANGUAGES C CXX CUDA) find_package(CUDA 10.2 REQUIRED) set(CUDA_NVCC_FLAGS -std=c++11 -L/usr/local/cuda-10.2/lib64 -lcudart -lcuda) set(CMAKE_CXX_STANDARD 11) if (CUDA_VERBOSE_PTXAS) set(VERBOSE_PTXAS --ptxas-options=-v) endif (CUDA_VERBOSE_PTXAS) #set(CMAKE_BUILD_TYPE "Release") set(CMAKE_BUILD_TYPE "Debug") SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CUDA_NVCC_FLAGS} -O0 -Wall -g -ggdb") SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CUDA_NVCC_FLAGS} -O3 -Wall") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(GENCODE_SM30 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_30,code=compute_30) set(GENCODE_SM35 -gencode=arch=compute_35,code=sm_35 -gencode=arch=compute_35,code=compute_35) set(GENCODE_SM37 -gencode=arch=compute_37,code=sm_37 -gencode=arch=compute_37,code=compute_37) set(GENCODE_SM50 -gencode=arch=compute_50,code=sm_50 -gencode=arch=compute_50,code=compute_50) set(GENCODE_SM60 -gencode=arch=compute_60,code=sm_60 -gencode=arch=compute_60,code=compute_60) set(GENCODE_SM61 -gencode=arch=compute_61,code=sm_61 -gencode=arch=compute_61,code=compute_61) set(GENCODE_SM70 -gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_70,code=compute_70) set(GENCODE_SM71 -gencode=arch=compute_71,code=sm_71 -gencode=arch=compute_71,code=compute_71) set(GENCODE_SM75 -gencode=arch=compute_75,code=sm_75 -gencode=arch=compute_75,code=compute_75) option(CUDAMATRIX_GENCODE_SM30 "GENCODE_SM30" OFF) option(CUDAMATRIX_GENCODE_SM35 "GENCODE_SM35" ON) option(CUDAMATRIX_GENCODE_SM37 "GENCODE_SM37" OFF) option(CUDAMATRIX_GENCODE_SM50 "GENCODE_SM50" OFF) option(CUDAMATRIX_GENCODE_SM60 "GENCODE_SM60" OFF) option(CUDAMATRIX_GENCODE_SM61 "GENCODE_SM61" OFF) option(CUDAMATRIX_GENCODE_SM70 "GENCODE_SM70" OFF) option(CUDAMATRIX_GENCODE_SM71 "GENCODE_SM71" OFF) option(CUDAMATRIX_GENCODE_SM75 "GENCODE_SM75" OFF) if (CUDAMATRIX_GENCODE_SM37) set(GENCODE ${GENCODE} ${GENCODE_SM37}) endif(CUDAMATRIX_GENCODE_SM37) if (CUDAMATRIX_GENCODE_SM50) set(GENCODE ${GENCODE} ${GENCODE_SM50}) endif(CUDAMATRIX_GENCODE_SM50) if (CUDAMATRIX_GENCODE_SM60) set(GENCODE ${GENCODE} ${GENCODE_SM60}) endif(CUDAMATRIX_GENCODE_SM60) if (CUDAMATRIX_GENCODE_SM61) set(GENCODE ${GENCODE} ${GENCODE_SM61}) endif(CUDAMATRIX_GENCODE_SM61) if (CUDAMATRIX_GENCODE_SM70) set(GENCODE ${GENCODE} ${GENCODE_SM70}) endif(CUDAMATRIX_GENCODE_SM70) if(CUDAMATRIX_GENCODE_SM71) set(GENCODE ${GENCODE} ${GENCODE_SM71}) endif(CUDAMATRIX_GENCODE_SM71) if(CUDAMATRIX_GENCODE_SM75) set(GENCODE ${GENCODE} ${GENCODE_SM75}) endif(CUDAMATRIX_GENCODE_SM75) include_directories(/usr/local/cuda/include) include_directories(utils) #include_directories(3rdparty/googletest/googletest) #include_directories(3rdparty/googletest/googletest/include) #add_subdirectory(3rdparty/googletest/googletest googletest.out) add_subdirectory(geometry) add_subdirectory(navigation) add_subdirectory(3rdparty) add_subdirectory(nonlinear) add_subdirectory(inference) add_subdirectory(mat) add_subdirectory(miniblas) add_subdirectory(miniblas/cblas) add_subdirectory(miniblas/blas) add_subdirectory(miniblas/permutation) add_subdirectory(miniblas/sys) add_subdirectory(miniblas/linalg) add_subdirectory(linear) #add_subdirectory(test) #cuda_add_executable(imukittiexamplegps_gaussiannewton imukittiexamplegps_gaussiannewton.cpp # OPTIONS ${GENCODE} ${CUDA_VERBOSE_PTXAS}) #target_link_libraries(imukittiexamplegps_gaussiannewton geometry miniblas blas cblas linalg permutation sys navigation 3rdparty linear nonlinear inference mat) #cuda_add_executable(othermain othermain.cpp # OPTIONS ${GENCODE} ${CUDA_VERBOSE_PTXAS}) #target_link_libraries(othermain geometry miniblas blas cblas linalg permutation sys navigation 3rdparty linear nonlinear inference mat) target_compile_features(nonlinear PUBLIC cxx_std_11) cuda_add_executable(cuda_othermain cuda_othermain.cu OPTIONS ${GENCODE} ${CUDA_VERBOSE_PTXAS}) target_compile_features(cuda_othermain PUBLIC cxx_std_11) set_target_properties(cuda_othermain PROPERTIES CUDA_SEPARABLE_COMPILATION ON) target_link_libraries(cuda_othermain geometry miniblas blas cblas linalg permutation sys navigation 3rdparty linear nonlinear inference mat) ``` 源代码就没发帖了,因为工程还算比较大。有劳各位了。
C++正则表达式,如何得到匹配结果的分组???
``` regex reg1("(\\d+(\\.\\d+)?(e[\\+\\-]?\\d+)?)|([a-zA-Z\\_]\\w*)|(,)|([\\+\\-\\*\\/\\^\\%\\(\\)])"); string str1 = "43+12 - Print(3,4)*7"; smatch sm1; for (sregex_token_iterator it(str1.begin(),str1.end(),reg1), it_end;it!=it_end; ++it) { cout << it->str() << endl; } ``` 我匹配一个字符串,把不同种类的分出来,并且在分组来时还能知道是哪个正则分组匹配到的。。。不然我只能在分出来后,再做多次匹配了。。。 * 所以我想只用一次匹配,不但把匹配到的字符串都找出来,还能得到对应的分组是哪个!!!
ise verilog 制作数字时钟,数码管引脚问题 signal is connected to multiple drivers
源代码以及管教设计如下 module clock(clk,clk_div,set_mod,set_option,time_add,option_1,qout, secL_1,secH_1,minL_1,minH_1,hourL_1,hourH_1,secL_2,secH_2,minL_2,minH_2,hourL_2,hourH_2, secL,secH,minL,minH,hourL,hourH, data,sm_wei,sm_qout ); input time_add; input set_mod; input set_option; input clk; input [15:0] data; output [3:0] sm_wei; output [6:0] sm_qout; output [3:0]secL_2,secH_2,minL_2,minH_2,hourL_2,hourH_2; output [3:0]secL_1,secH_1,minL_1,minH_1,hourL_1,hourH_1; output [3:0]secL,secH,minL,minH,hourL,hourH; output clk_div; output [1:0]option_1; output [6:0]qout; reg [1:0]option_1; reg [3:0]secL_1,secH_1,minL_1,minH_1,hourL_1,hourH_1; reg [3:0]secL_2,secH_2,minL_2,minH_2,hourL_2,hourH_2; reg [3:0]secL,secH,minL,minH,hourL,hourH; reg [6:0]qout,sm_qout; //分频--------------------------------------------------------------- parameter m=49999999; integer div_cnt=0; reg clk_div; always@(posedge clk) begin if(div_cnt==m) begin clk_div<=1'b1; div_cnt<=0; end else begin clk_div<=1'b0; div_cnt<=div_cnt+1; end end //计数------------------------------------------------------------- always@(posedge clk_div) begin if(set_mod==1) begin //清零 if(hourH_1==4'b0010 && hourL_1==4'b0011 && minH_1==4'b0101 && minL_1==4'b1001 && secH_1==4'b0101 && secL_1==4'b1001) begin secL_1<=4'b0000; secH_1<=4'b0000; minL_1<=4'b0000; minH_1<=4'b0000; hourL_1<=4'b0000; hourH_1<=4'b0000; end else //计数 if(secL_1==9) begin secL_1<=4'b0000; if(secH_1==5) begin secH_1<=4'b0000; if(minL_1==9) begin minL_1<=4'b0000; if(minH_1==5) begin minH_1<=4'b0000; if(hourL_1==9) begin hourL_1<=4'b0000; hourH_1<=hourH_1+1; end else hourL_1<=hourL_1+1; end else minH_1<=minH_1+1; end else minL_1<=minL_1+1; end else secH_1<=secH_1+1; end else secL_1<=secL_1+1; end else if(set_mod==0) begin //调时结果 secL_1<=secL_2; secH_1<=secH_2; minL_1<=minL_2; minH_1<=minH_2; hourL_1<=hourL_2; hourH_1<=hourH_2; end end //设置 always@(posedge set_option) begin if(option_1==2) option_1<=0; else option_1<=option_1+1; end //调时 always@(posedge time_add) begin if(set_mod==0) begin //清零 if(hourH_2==4'b0010 && hourL_2==4'b0011 && minH_2==4'b0101 && minL_2==4'b1001 && secH_2==4'b0101 && secL_2==4'b1001) begin secL_2<=4'b0000; secH_2<=4'b0000; minL_2<=4'b0000; minH_2<=4'b0000; hourL_2<=4'b0000; hourH_2<=4'b0000; end else //计数 //调分 if(option_1==0) begin if(minL_2==9) begin minL_2<=4'b0000; if(minH_2==5) minH_2<=4'b0000; else minH_2<=minH_2+1; end else minL_2<=minL_2+1; end //调时 if(option_1==1) begin if(hourL_2==9) begin hourL_2<=4'b0000; hourH_2<=hourH_2+1; end else hourL_2<=hourL_2+1; end end end //选择---------------------------------------------------------------- always@(secL_1 or secH_1 or minL_1 or minH_1 or hourL_1 or hourH_1 or secL_2 or secH_2 or minL_2 or minH_2 or hourL_2 or hourH_2) begin //计数 if(set_mod==1) begin secL<=secL_1; secH<=secH_1; minL<=minL_1; minH<=minH_1; hourL<=hourL_1; hourH<=hourH_1; end //调时 else if(set_mod==0 ) begin secL<=secL_2; secH<=secH_2; minL<=minL_2; minH<=minH_2; hourL<=hourL_2; hourH<=hourH_2; end end //fenpin integer clk_cnt; reg clk_400Hz; always @(posedge clk) if(clk_cnt==32'd100000) begin clk_cnt <= 1'b0; clk_400Hz <= ~clk_400Hz;end else clk_cnt <= clk_cnt + 1'b1; //位控制 reg [3:0]wei_ctrl=4'b1110; always @(posedge clk_400Hz) wei_ctrl <= {wei_ctrl[2:0],wei_ctrl[3]}; //段控制 reg [3:0]qout_ctrl; always @(wei_ctrl) case(wei_ctrl) 4'b1110:wei_ctrl=minL; 4'b1101:wei_ctrl=minH; 4'b1011:wei_ctrl=hourL; 4'b0111:wei_ctrl=hourH; endcase always@(minL) begin case(minL) 4'b0000:qout<=7'b1000000; 4'b0001:qout<=7'b1111001; 4'b0010:qout<=7'b0100100; 4'b0011:qout<=7'b0110000; 4'b0100:qout<=7'b0011001; 4'b0101:qout<=7'b0010010; 4'b0110:qout<=7'b0000010; 4'b0111:qout<=7'b1111000; 4'b1000:qout<=7'b0000000; 4'b1001:qout<=7'b0010000; default:qout<=7'b1111111; endcase end always@(minH) begin case(minH) 4'b0000:qout<=7'b1000000; 4'b0001:qout<=7'b1111001; 4'b0010:qout<=7'b0100100; 4'b0011:qout<=7'b0110000; 4'b0100:qout<=7'b0011001; 4'b0101:qout<=7'b0010010; 4'b0110:qout<=7'b0000010; 4'b0111:qout<=7'b1111000; 4'b1000:qout<=7'b0000000; 4'b1001:qout<=7'b0010000; default:qout<=7'b1111111; endcase end always@(hourL) begin case(hourL) 4'b0000:qout<=7'b1000000; 4'b0001:qout<=7'b1111001; 4'b0010:qout<=7'b0100100; 4'b0011:qout<=7'b0110000; 4'b0100:qout<=7'b0011001; 4'b0101:qout<=7'b0010010; 4'b0110:qout<=7'b0000010; 4'b0111:qout<=7'b1111000; 4'b1000:qout<=7'b0000000; 4'b1001:qout<=7'b0010000; default:qout<=7'b1111111; endcase end always@(hourH) begin case(hourH) 4'b0000:qout<=7'b1000000; 4'b0001:qout<=7'b1111001; 4'b0010:qout<=7'b0100100; 4'b0011:qout<=7'b0110000; 4'b0100:qout<=7'b0011001; 4'b0101:qout<=7'b0010010; 4'b0110:qout<=7'b0000010; 4'b0111:qout<=7'b1111000; 4'b1000:qout<=7'b0000000; 4'b1001:qout<=7'b0010000; default:qout<=7'b1111111; endcase end endmodule NET "set_mod" LOC = N13 ; NET "set_option" LOC = N3 ; NET "time_add" LOC = E2 ; NET "clk" LOC = B8 ; NET "minL" LOC = K14 ; NET "minH" LOC = M13 ; NET "hourL" LOC = J12 ; NET "hourH" LOC = F12 ; NET "qout[6]" LOC = L14 ; NET "qout[5]" LOC = H12 ; NET "qout[4]" LOC = N14 ; NET "qout[3]" LOC = N11 ; NET "qout[2]" LOC = P12 ; NET "qout[1]" LOC = L13 ; NET "qout[0]" LOC = M12 ;
python 爬虫遇到问题了,这个问题怎么办
我们老师让写一个爬虫,爬东方财富每个股票的历史流动资金,我写出来后,运行程序,前面没什么问题,到后面就有问题了 代码如下:import requests import pandas import json import pymssql import re #获取股票资金流量网页的数据 def GetHtml(url): html=requests.get(url) html=html.text return html #对数据进行拆分 def CleanData(html): Str_data=html[len('jQuery1830006374794149931473_1577602052640')+1:-2] #对数据进行切割 Str_data2=json.loads(Str_data)['data'] #对无用数据进行再切分获取代码和名称 print(Str_data2['code']) code = Str_data2['code'] #股票编码 name = Str_data2['name'] #股票名称 data=[] for i in range (len(Str_data2['klines'])): data.append(Str_data2['klines'][i]) dealData(data,name,code) data.clear() Str_data2.clear() #对拆分数据进行整理 def dealData(datalist,name,code): #对列表中元素进行切片 new_datalist = ''.join(datalist) new_datalist=new_datalist.split(',') Name=name Code=code #将新列表放入数据库中 insertDatabase(new_datalist,Name,Code) new_datalist.clear() #将数据导入数据库中 def insertDatabase(datalist,Name,Code): #对新列表数据进行分类 date=datalist[0] #时间 close_price=datalist[11] #收盘价 Quote_change=datalist[12] #涨跌幅 Main_net=datalist[1] #主力净额 Main_foce=datalist[6] #主力净占比 Over_net=datalist[5] #超大单净额 Over_foce=datalist[10] #超大单净占比 Big_net=datalist[4] #大单净额 Big_foce=datalist[9] #大单净占比 Mid_net=datalist[3] #中单净额 Mid_foce=datalist[8] #中单净占比 Sm_net=datalist[2] #小单净额 Sm_foce=datalist[7] #小单净占比 data=(Name,Code,date,close_price,Quote_change,Main_net,Main_foce,Over_net,Over_foce,Big_net,Big_foce,Mid_net,Mid_foce,Sm_net,Sm_foce) sql="insert into Moneymove values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);" #建立连接 conn = pymssql.connect(host="localhost:1433", user="sa", password="123456", database="test", charset="UTF-8") cursor = conn.cursor() #插入测试数据 cursor.execute(sql , data) conn.commit() del data conn.close() #创建数据库 def Createdatabase(): conn = pymssql.connect(host="localhost:1433", user="sa", password="123456", database="test", charset="UTF-8") cursor = conn.cursor() cursor.execute(""" create table Moneymove( 股票代码 varchar(100), 股票名称 varchar(100), 时间 varchar(100) , 收盘价 varchar(100), 涨跌幅 varchar(100), 主流净额 varchar(100), 主流净占比 varchar(100), 超大单净额 varchar(100), 超大单净占比 varchar(100), 大单净额 varchar(100), 大单净占比 varchar(100), 中单净额 varchar(100), 中单净占比 varchar(100), 小单净额 varchar(100), 小单净占比 varchar(100) ) """) conn.commit() conn.close() # def NeedData(): # 建立连接并获取cursor conn = pymssql.connect(host="localhost:1433", user="sa", password="123456", database="test", charset="UTF-8") cursor = conn.cursor() # 如果连接时没有设置autocommit为True的话,必须主动调用commit() 来保存更改。 conn.commit() # 查询记录 cursor.execute('SELECT 股票代码 From SwClass$ ') # 获取一条记录 row = cursor.fetchone() code_list=[] # 循环打印记录(这里只有一条,所以只打印出一条) for i in range (3769): if row[0] != None: if str(row[0][0]) =='6': code='1.'+row[0] code_list.append(code) else: code = '0.'+row[0] code_list.append(code) row = cursor.fetchone() return code_list # 连接用完后记得关闭以释放资源 conn.close() def main(): Createdatabase() code_list=NeedData() print(code_list) for i in code_list: url='http://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get?lmt=0&klt=101&secid='+ str(i)+'&fields1=f1,f2,f3,f7&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65&ut=b2884a393a59ad64002292a3e90d46a5&cb=jQuery1830006374794149931473_1577602052640&_=1577602052949' html=GetHtml(url) CleanData(html) main() 出现的问题是这个: Traceback (most recent call last): File "C:/Users/VULCAN/Desktop/爬虫实习/3.py", line 135, in <module> main() File "C:/Users/VULCAN/Desktop/爬虫实习/3.py", line 134, in main CleanData(html) File "C:/Users/VULCAN/Desktop/爬虫实习/3.py", line 25, in CleanData dealData(data,name,code) File "C:/Users/VULCAN/Desktop/爬虫实习/3.py", line 39, in dealData insertDatabase(new_datalist,Name,Code) File "C:/Users/VULCAN/Desktop/爬虫实习/3.py", line 65, in insertDatabase conn = pymssql.connect(host="localhost:1433", user="sa", password="123456", database="test", charset="UTF-8") File "src\pymssql.pyx", line 636, in pymssql.connect File "src\_mssql.pyx", line 1957, in _mssql.connect File "src\_mssql.pyx", line 675, in _mssql.MSSQLConnection.__init__ ValueError: list.remove(x): x not in list 请问各位大佬,这要如何解决?
微信小程序 腾讯云 即时通讯IM GenerateTestUserSig的开源模块怎么使用?
这是GenerateTestUserSig.js的代码 ``` global.webpackJsonpMpvue([16],{ /***/ "dutN": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _SDKAPPID; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return genTestUserSig; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lib_generate_test_usersig_es_min_js__ = __webpack_require__("n7IX"); /*eslint-disable*/ const _SDKAPPID = 0; const _SECRETKEY = ''; /* * Module: GenerateTestUserSig * * Function: 用于生成测试用的 UserSig,UserSig 是腾讯云为其云服务设计的一种安全保护签名。 * 其计算方法是对 SDKAppID、UserID 和 EXPIRETIME 进行加密,加密算法为 HMAC-SHA256。 * * Attention: 请不要将如下代码发布到您的线上正式版本的 App 中,原因如下: * * 本文件中的代码虽然能够正确计算出 UserSig,但仅适合快速调通 SDK 的基本功能,不适合线上产品, * 这是因为客户端代码中的 SECRETKEY 很容易被反编译逆向破解,尤其是 Web 端的代码被破解的难度几乎为零。 * 一旦您的密钥泄露,攻击者就可以计算出正确的 UserSig 来盗用您的腾讯云流量。 * * 正确的做法是将 UserSig 的计算代码和加密密钥放在您的业务服务器上,然后由 App 按需向您的服务器获取实时算出的 UserSig。 * 由于破解服务器的成本要高于破解客户端 App,所以服务器计算的方案能够更好地保护您的加密密钥。 * * Reference:https://cloud.tencent.com/document/product/647/17275#Server */ function genTestUserSig(userID) { /** * 腾讯云 SDKAppId,需要替换为您自己账号下的 SDKAppId。 * * 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ) 创建应用,即可看到 SDKAppId, * 它是腾讯云用于区分客户的唯一标识。 */ var SDKAPPID = _SDKAPPID; /** * 签名过期时间,建议不要设置的过短 * <p> * 时间单位:秒 * 默认时间:7 x 24 x 60 x 60 = 604800 = 7 天 */ var EXPIRETIME = 604800; /** * 计算签名用的加密密钥,获取步骤如下: * * step1. 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ),如果还没有应用就创建一个, * step2. 单击“应用配置”进入基础配置页面,并进一步找到“帐号体系集成”部分。 * step3. 点击“查看密钥”按钮,就可以看到计算 UserSig 使用的加密的密钥了,请将其拷贝并复制到如下的变量中 * * 注意:该方案仅适用于调试Demo,正式上线前请将 UserSig 计算代码和密钥迁移到您的后台服务器上,以避免加密密钥泄露导致的流量盗用。 * 文档:https://cloud.tencent.com/document/product/647/17275#Server */ var SECRETKEY = _SECRETKEY; var generator = new __WEBPACK_IMPORTED_MODULE_0__lib_generate_test_usersig_es_min_js__["a" /* default */](SDKAPPID, SECRETKEY, EXPIRETIME); var userSig = generator.genTestUserSig(userID); return { sdkappid: SDKAPPID, userSig: userSig }; } /***/ }) }); ``` 我该怎么去引用GenerateTestUserSig.js, 使用里面的function genTestUserSig(userID) ``` var GenerateTestUserSig=require("../../debug/GenerateTestUserSig.js"); ``` 是这么引用吗?这么引用就会报错 ``` Uncaught TypeError: global.webpackJsonpMpvue is not a function at GenerateTestUserSig.js? [sm]:1 at require (VM167 WAService.js:1) at VM167 WAService.js:1 at person.js? [sm]:5 at require (VM167 WAService.js:1) at <anonymous>:92:7 at HTMLScriptElement.scriptLoaded (appservice?t=1574470090358:1736) at HTMLScriptElement.script.onload (appservice?t=1574470090358:1748) ```
Java BouncyCastle 如何生成SM2证书
最近需要用java生成SM2数字证书, 于是想到了Bouncycastle ,可是应用的时候发现BouncyCastle 无法实现SM2证书的生成, 网上找了半天全是一样的答案,由于本人新手,所以看完还是不太理解, 不知哪位大神能够给些实现SM2证书的思路?
帮我看下这个网页中的三个图片div的大小和位置怎么更改设置
我想更换几张大图,但是无论放多大的图片都会局限在这个边框里,怎么样才能更改所放图片的大小和位置呢? ![图片说明](https://img-ask.csdn.net/upload/201912/25/1577260837_900227.png) 下边的图其实我放了一张很大的图,但是都会按比例缩放到这个位置,怎么才能更改默认图片的长宽?和位置? ![图片说明](https://img-ask.csdn.net/upload/201912/25/1577260847_818926.png) ``` <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS3鼠标悬停图片遮罩层动画特效</title> <!--bootstrap布局框架--> <link rel="stylesheet" type="text/css" href="css/bootstrap-grid.min.css" /> <!--字体图标样式--> <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/font-awesome/4.6.0/css/font-awesome.min.css"> <style> body{background-color: #353535} .box { font-family: 'Ubuntu', sans-serif; overflow: hidden; position: relative; transition: all 0.3s; } .box:hover { box-shadow: 0 0 15px -5px #000; } .box:before { content: ''; background-color: transparent; background-image: radial-gradient(circle at 20% 80%, transparent 29%, rgba(255,255,255,0.4) 30%, rgba(255,255,255,0.4) 33%, transparent 34%), radial-gradient(circle at 80% 20%, transparent 29%, rgba(255,255,255,0.4) 30%, rgba(255,255,255,0.4) 33%, transparent 34%); background-size: 30px 30px; height: 100%; width: 100%; opacity: 0; position: absolute; left: 0; top: 0; z-index: 1; transition: all 0.3s ease 0.2s; } .box:hover:before { opacity: 1; } .box img { width: 100%; height: auto; transition: all 0.3s ease 0s; } .box:hover img { filter: blur(2px); } .box .box-content { color: #fff; background-color: rgba(0,0,0,0.6); text-align: center; width: 100%; height: 59%; padding: 18% 0 0 0; position: absolute; left: 0; top: -100%; z-index: 2; transition: all 0.3s ease 0s; } .box:hover .box-content { top: 0; } .box .title { color: #fff; font-size: 23px; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; margin: 0; } .box .post { color: #32c287; font-size: 14px; font-style: italic; text-transform: capitalize; letter-spacing: 2px; } .box .icon { background: rgba(50,194,135,0.6); text-align: center; height: 39%; width: 100%; padding: 15px 0 0; margin: 0; list-style: none; transform: translateX(50%); position: absolute; right: 50%; bottom: -100%; z-index: 1; transition: all 0.3s; } .box:hover .icon { bottom: 0; } .box .icon li { display: inline-block; margin: 0 3px; } .box .icon li a { color: #32c287; background-color: #fff; font-size: 18px; line-height: 40px; height: 40px; width: 40px; border-radius: 40%; display: block; transition: all 0.3s; } .box .icon li a:hover { color: #fff; background-color: #04a562; box-shadow: 0 0 0 3px rgba(255,255,255,0.5), 0 0 5px rgba(0,0,0,0.5) inset; } @media only screen and (max-width:990px) { .box { margin-bottom: 30px; } } @media only screen and (max-width:479px) { .box .title { font-size: 20px; } } </style> </head> <body> <h4 style="text-align: center; color: aliceblue;line-height: 50px">CSS3图片鼠标悬停动画特效 <span>Hover Effect Style</span></h4> <div class="demo"> <div class="container"> <div class="row"> <div class="col-md-4 col-sm-6"> <div class="box"> <img src="images/img-1.jpg" alt=""> <div class="box-content"> <h3 class="title">餐饮软件</h3> <span class="post">web developer</span> </div> <ul class="icon"> <li><a href="#"><i class="fa fa-search"></i></a></li> <li><a href="#"><i class="fa fa-link"></i></a></li> </ul> </div> </div> <div class="col-md-4 col-sm-6"> <div class="box"> <img src="images/img-2.jpg" alt=""> <div class="box-content"> <h3 class="title">零售软件</h3> <span class="post">web designer</span> </div> <ul class="icon"> <li><a href="#"><i class="fa fa-search"></i></a></li> <li><a href="#"><i class="fa fa-link"></i></a></li> </ul> </div> </div> <div class="col-md-4 col-sm-6"> <div class="box"> <img src="images/img-3.jpg" alt=""> <div class="box-content"> <h3 class="title">会员系统</h3> <span class="post">web developer</span> </div> <ul class="icon"> <li><a href="#"><i class="fa fa-search"></i></a></li> <li><a href="#"><i class="fa fa-link"></i></a></li> </ul> </div> </div> </div> </div> </div> <div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';color:#ffffff"> <p>适用浏览器:360、FireFox、Chrome、Opera、傲游、搜狗、世界之窗. 不支持Safari、IE8及以下浏览器。</p> <p>来源:<a href="https://www.lanrenzhijia.com/" target="_blank">懒人</a></p> </div> </body> </html> ```
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
MyBatis研习录(01)——MyBatis概述与入门
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis原本是apache的一个开源项目iBatis, 2010年该项目由apache software foundation 迁移到了google code并改名为MyBatis 。2013年11月MyBatis又迁移到Github。
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
Python爬虫精简步骤1 获取数据
爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。 爬虫能做很多事,能做商业分析,也能做生活助手,比如:分析北京近两年二手房成交均价是多少?广州的Python工程师平均薪资是多少?北京哪家餐厅粤菜最好吃?等等。 这是个人利用爬虫所做到的事情,而公司,同样可以利用爬虫来实现巨大的商业价值。比如你所熟悉的搜索引擎——百度和谷歌,它们的核心技术之一也是爬虫,而且是超级爬虫。 从搜索巨头到人工...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
web前端javascript+jquery知识点总结
1.Javascript 语法.用途 javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
渗透测试-灰鸽子远控木马
木马概述 灰鸽子( Huigezi),原本该软件适用于公司和家庭管理,其功能十分强大,不但能监视摄像头、键盘记录、监控桌面、文件操作等。还提供了黑客专用功能,如:伪装系统图标、随意更换启动项名称和表述、随意更换端口、运行后自删除、毫无提示安装等,并采用反弹链接这种缺陷设计,使得使用者拥有最高权限,一经破解即无法控制。最终导致被黑客恶意使用。原作者的灰鸽子被定义为是一款集多种控制方式于一体的木马程序...
Python:爬取疫情每日数据
前言 目前每天各大平台,如腾讯、今日头条都会更新疫情每日数据,他们的数据源都是一样的,主要都是通过各地的卫健委官网通报。 以全国、湖北和上海为例,分别为以下三个网站: 国家卫健委官网:http://www.nhc.gov.cn/xcs/yqtb/list_gzbd.shtml 湖北卫健委官网:http://wjw.hubei.gov.cn/bmdt/ztzl/fkxxgzbdgrfyyq/xxfb...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧???? 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升自...
粒子群算法求解物流配送路线问题(python)
1.Matlab实现粒子群算法的程序代码:https://www.cnblogs.com/kexinxin/p/9858664.html matlab代码求解函数最优值:https://blog.csdn.net/zyqblog/article/details/80829043 讲解通俗易懂,有数学实例的博文:https://blog.csdn.net/daaikuaichuan/article/...
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang....
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c#如何定义数组列表 c#倒序读取txt文件 java代码生成c# c# tcp发送数据 c#解决时间格式带星期 c#类似hashmap c#设置istbox的值 c#获取多线程返回值 c# 包含数字 枚举 c# timespan
立即提问