services.js 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819
  1. define([ 'angular', 'common/utils', 'big'], function(angular, utils, Big) {
  2. 'use strict';
  3. angular.module('common.services', [ 'common.utils', 'ngResource' ]).factory('FlashService', ['$rootScope', function($rootScope) {
  4. return {
  5. show : function(message) {
  6. $rootScope.flashMessage = message;
  7. },
  8. clear : function() {
  9. $rootScope.flashMessage = "";
  10. }
  11. };
  12. }]).factory('SessionService', function() {
  13. return {
  14. get : function(key) {
  15. var storage = window.sessionStorage;
  16. if(storage)
  17. return sessionStorage.getItem(key);
  18. return null;
  19. },
  20. set : function(key, val) {
  21. var storage = window.sessionStorage;
  22. if(storage)
  23. return sessionStorage.setItem(key, val);
  24. return null;
  25. },
  26. unset : function(key) {
  27. var storage = window.sessionStorage;
  28. if(storage)
  29. return sessionStorage.removeItem(key);
  30. return null;
  31. },
  32. getCookie: function(key) {
  33. var storage = window.localStorage;
  34. if(storage)
  35. return storage.getItem(key);
  36. else {
  37. var val = document.cookie.match(new RegExp("(^| )" + key + "=([^;]*)(;|$)"));
  38. if (val != null) {
  39. return unescape(val[2]);
  40. }
  41. return null
  42. }
  43. },
  44. setCookie: function(key, val) {
  45. var storage = window.localStorage;
  46. if(storage)
  47. storage.setItem(key, val);
  48. else {
  49. var date = new Date(new Date().getTime() + 30 * 24 * 60 * 60 * 1000);
  50. document.cookie = key + "=" + escape(val) + ";expires=" + date.toGMTString();
  51. }
  52. },
  53. removeCookie: function(key) {
  54. var storage = window.localStorage;
  55. if(storage)
  56. storage.removeItem(key);
  57. else {
  58. var val = this.getCookie(key);
  59. if (val != null) {
  60. var date = new Date(new Date().getTime() - 1);
  61. document.cookie = key + "=" + val + ";expires=" + date.toGMTString()
  62. }
  63. }
  64. }
  65. };
  66. }).factory('BaseService', ['$rootScope', function($rootScope) {
  67. return {
  68. getRootPath: function() {
  69. var pathName = window.location.pathname.substring(1);
  70. var webName = pathName == '' ? '': pathName.substring(0, pathName.indexOf('/'));
  71. if (webName == "" || webName == "store") {
  72. return window.location.protocol + '//' + window.location.host;
  73. } else {
  74. return window.location.protocol + '//' + window.location.host + '/' + webName;
  75. }
  76. },
  77. isNumber: function(n) {
  78. return !isNaN(parseFloat(n)) && isFinite(n);
  79. },
  80. // parse url params
  81. parseParams: function(requestParams) {
  82. var me = this;
  83. for (var key in requestParams) {
  84. if (key.indexOf('[') >= 0) {
  85. var params = key.split(/\[(.*)\]/), value = requestParams[key], lastKey = '';
  86. angular.forEach(params.reverse(), function(name) {
  87. if (name != '') {
  88. var v = value;
  89. value = {};
  90. value[lastKey = name] = me.isNumber(v) ? parseFloat(v) : v;
  91. }
  92. });
  93. requestParams[lastKey] = angular.extend(requestParams[lastKey] || {}, value[lastKey]);
  94. delete requestParams[key];
  95. } else {
  96. requestParams[key] = me.isNumber(requestParams[key]) ? parseFloat(requestParams[key]) : requestParams[key];
  97. }
  98. }
  99. return requestParams;
  100. },
  101. // 获取platform-b2c之后的路径
  102. getCurrentUrl: function() {
  103. var fullPath = window.document.location.href;
  104. return fullPath.substring(this.getRootPath().length, fullPath.length);
  105. },
  106. // 返回路径中带的搜索关键字
  107. getKeyWord: function() {
  108. var urlParam = window.document.location.href;
  109. var keyword = "";
  110. if(urlParam) {
  111. keyword = urlParam.substring(urlParam.indexOf("?wd=")+4, urlParam.length);
  112. }
  113. return keyword;
  114. },
  115. decodeSpecialCode: function(str) {
  116. return str.replace('%2F', '/').replace('%3F', '?').replace('%25', '%')
  117. .replace('%20', ' ').replace('%3D', '=').replace('%23', '#');
  118. },
  119. scrollBackToTop: function() {
  120. var scrollToTop = function() {
  121. if(angular.element(document).scrollTop() > 0) {
  122. window.scrollBy(0, -50);
  123. setTimeout(function() {
  124. $rootScope.$apply(function() {
  125. scrollToTop();
  126. });
  127. }, 10);
  128. }
  129. }
  130. scrollToTop();
  131. },
  132. // 获取指定模块pathname,主要用于兼容类似于产品模块同时使用两个product和products这类情况
  133. getModulePathname: function (currentPathname, currentModule, nextModule) {
  134. if(currentPathname.indexOf(currentModule+'s') !== -1) {
  135. return currentPathname.replace(currentModule+'s', nextModule);
  136. }else {
  137. return currentPathname.replace(currentModule, nextModule);
  138. }
  139. }
  140. };
  141. }]).factory('AuthenticationService', ['$http', 'SessionService', 'BaseService', 'SerializerUtil', function($http, SessionService, BaseService, SerializerUtil) {
  142. var cacheSession = function() {
  143. SessionService.set('authenticated', true);
  144. };
  145. var uncacheSession = function() {
  146. SessionService.unset('authenticated');
  147. };
  148. var rootPath = BaseService.getRootPath();
  149. return {
  150. root : function() {
  151. return rootPath;
  152. },
  153. /*login : function(user) {
  154. var payload = SerializerUtil.param(user);
  155. var config = {
  156. headers : {
  157. 'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
  158. }
  159. };
  160. var login = $http.post(rootPath + "/j_spring_security_check", payload, config);
  161. login.success(cacheSession);
  162. return login;
  163. },*/
  164. logout : function() {
  165. var config = {
  166. cache: false,
  167. headers: {
  168. 'Cache-Control': 'no-cache',
  169. 'Pragma': 'no-cache'
  170. },
  171. params: {
  172. returnUrl: window.location.href
  173. }
  174. };
  175. var logout = $http.get(rootPath + "/logout", config);
  176. logout.success(uncacheSession);
  177. logout.success(function(data){
  178. var pathName = document.location.pathname;
  179. /*var str = pathName.replace('platform-b2c/','');
  180. console.log(str);
  181. console.log(document.location);*/
  182. var index = pathName.substr(1).indexOf("/");// platform-b2c/logout/proxy
  183. var result = pathName.substr(0,index);
  184. var uri = pathName.substr(13,index+1000) + document.location.hash;
  185. if (result == '/platform-b2c') {
  186. var contextPath = ''
  187. /*var contextPath = (function getContextPath() {
  188. var pathName = document.location.pathname;
  189. var index = pathName.substr(1).indexOf("/");
  190. var result = pathName.substr(0,index+1);
  191. return result;
  192. })();*/
  193. data.content = contextPath + uri;
  194. }
  195. if (data.content) {
  196. if (data.content == window.location.href) {
  197. window.location.reload();
  198. } else {
  199. window.location.href = data.content;
  200. }
  201. }
  202. });
  203. return logout;
  204. },
  205. redirectSignin: function() {
  206. // 获取跳转登录的url
  207. $http.get(rootPath + '/login/page', {
  208. params: {
  209. returnUrl: window.location.href
  210. }
  211. }).success(function(data) {
  212. if (data.content) {
  213. window.location.href = data.content;
  214. } else {
  215. alert('系统错误');
  216. }
  217. }).error(function() {
  218. alert('系统错误');
  219. });
  220. },
  221. redirectRegister: function() {
  222. // 获取跳转注册的url
  223. $http.get(rootPath + '/register/page', {
  224. params: {
  225. returnUrl: window.location.href
  226. }
  227. }).success(function(data) {
  228. if (data.content) {
  229. window.location.href = data.content;
  230. } else {
  231. alert('系统错误');
  232. }
  233. }).error(function() {
  234. alert('系统错误');
  235. });
  236. },
  237. isAuthed : function() {
  238. return SessionService.get('authenticated');
  239. },
  240. getAuthentication : function() {
  241. var config = {
  242. cache: false,
  243. headers: {
  244. 'Cache-Control': 'no-cache',
  245. 'Pragma': 'no-cache'
  246. }
  247. };
  248. var request = $http.get(rootPath + '/user/authentication', config);
  249. request.success(function(data){
  250. if(data)
  251. cacheSession();
  252. else
  253. uncacheSession();
  254. });
  255. request.error(uncacheSession);
  256. return request;
  257. },
  258. reSignin : function(enUU) {
  259. return $http.get(rootPath + '/user/authentication/' + enUU);
  260. }
  261. };
  262. }]).factory('TableService', ['$parse', 'ngTableParams', function($parse, ngTableParams){
  263. var scope;
  264. return {
  265. init: function(initConfig, dataConfig) {
  266. var service = this, data = service.getData();
  267. scope = initConfig.scope;
  268. // no paging tableParams
  269. scope.tableParams = new ngTableParams({
  270. page : 1,
  271. total : 1,
  272. count : 1000
  273. }, {
  274. counts : [],
  275. getData: function($defer, params) {
  276. $defer.resolve(data.slice((params.page() - 1) * params.count(), params.page() * params.count()));
  277. }
  278. });
  279. // watch $data, set to scope model
  280. if(dataConfig) {
  281. service.setGenerator(dataConfig.rownumGenerator);
  282. var setModelValue = $parse(dataConfig.model).assign;
  283. scope.$watch(data, function(){
  284. setModelValue && setModelValue(scope, data);
  285. });
  286. }
  287. //add item
  288. scope.addItem = function(){
  289. service.addItem(data);
  290. };
  291. scope.removeItem = function(item){
  292. service.removeItem(data, item);
  293. };
  294. if(initConfig) {
  295. // add default items
  296. service.addItem(data, initConfig.defaultItemsSize);
  297. }
  298. },
  299. setGenerator: function(gen) {
  300. this.generator = gen;
  301. this.rownum = 0;
  302. },
  303. getGenerator: function() {
  304. return this.generator;
  305. },
  306. getRownum: function() {
  307. if(this.generator) {
  308. this.rownum++;
  309. }
  310. return this.rownum;
  311. },
  312. getData: function(){
  313. return this.data || [];
  314. },
  315. refresh: function(){
  316. if(scope.tableParams.data.length > 0)
  317. scope.tableParams.reload();
  318. },
  319. addItem: function(data, size) {
  320. size = size || 1;
  321. var s = this, gen = s.getGenerator(), i = 0;
  322. for (;i < size; i++ ) {
  323. var d = {};
  324. d[gen] = s.getRownum();
  325. (size == 1) && ( d.$edit = true);
  326. data.push(d);
  327. }
  328. this.refresh();
  329. },
  330. removeItem: function(data, item){
  331. var key = item.$$hashKey;
  332. for (var i = 0; i < data.length; i++) {
  333. if (key === data[i].$$hashKey)
  334. data.splice(i, 1);
  335. }
  336. this.refresh();
  337. },
  338. removeAll: function(data){
  339. data = [];
  340. this.refresh();
  341. }
  342. };
  343. }]).filter('summary', function(){
  344. var isNumber = function (n) {
  345. return !isNaN(parseFloat(n)) && isFinite(n);
  346. };
  347. var getSum = function(data, attr) {
  348. var sum = 0;
  349. angular.forEach(data, function(d){
  350. if(isNumber(d[attr]))
  351. sum += Number(d[attr]);
  352. });
  353. return sum;
  354. };
  355. return function(data, summaryField) {
  356. if(data && summaryField)
  357. return getSum(data, summaryField);
  358. return 0;
  359. };
  360. }).factory('Loading', function(){
  361. var loading = angular.element('#loading');
  362. return {
  363. show: function(){
  364. loading.addClass('in');
  365. },
  366. hide: function() {
  367. loading.removeClass('in');
  368. }
  369. }
  370. }).factory('ImgUrl', function(){
  371. //获得不同尺寸的图片url
  372. return {
  373. handelByWidthHeigth: function( url, width_px, heigth_px ){
  374. return url.substring(0, url.lastIndexOf('.')) + "_" + width_px + "x" + heigth_px + url.substr(url.lastIndexOf('.'));
  375. }
  376. }
  377. }).factory('dynamicInput', function(){
  378. /**
  379. * 将dynamicInput动态生成的东西处理为接口对应的数据格式
  380. * @return Arr[Property, Property, Property, ...]
  381. */
  382. return {
  383. resolveDynamicInput: function(properties){
  384. var arrProperties = [];
  385. function getClass(x){
  386. var str = Object.prototype.toString.call(x);
  387. return /^\[object (.*)\]$/.exec(str)[1];
  388. }
  389. var length = properties.length;
  390. for( var i = 0; i < length; i++ ){
  391. var objProperty = {};
  392. objProperty.propertyId = properties[i].id;
  393. objProperty.num = properties[i].num;
  394. //根据值类型不一样选择不同处理方式
  395. if( getClass(properties[i].value) === "Object" ){
  396. //这里针对区间值要单独拼接
  397. var arr = [];
  398. if(properties[i].type == "text-text"){
  399. arr = ["", ""];
  400. for( var key in properties[i].value ){
  401. if(key == "0"){
  402. arr[0] = properties[i].value[0];
  403. }
  404. else if(key == "1"){
  405. arr[1] = properties[i].value[1];
  406. }
  407. }
  408. objProperty.stringValue = arr.join("-");
  409. }
  410. else{
  411. for(var key in properties[i].value){
  412. //过滤掉值为false的
  413. if(properties[i].value[key] != false){
  414. arr.push(properties[i].value[key]);
  415. }
  416. }
  417. objProperty.stringValue = arr.join("\n");
  418. }
  419. }
  420. else{
  421. objProperty.stringValue = properties[i].value;
  422. }
  423. arrProperties.push(objProperty);
  424. }
  425. return arrProperties;
  426. }
  427. }
  428. }).factory('ArrayUtil', function(){
  429. //拼接数组
  430. return {
  431. buildArr: function(num){
  432. var arr = [];
  433. for(var i = 1; i <= num; i++){
  434. arr.push(i);
  435. }
  436. return arr;
  437. }
  438. }
  439. }).factory('ChineseToPinYin', function(){
  440. /**
  441. * 将输入字符串中的汉字转为拼音首字母大写拼接输出
  442. * 例如:中s华骄子网络->ZsHJZWL
  443. */
  444. return {
  445. getPinYin: function(input){
  446. //参数去空格
  447. var strInput = input.replace(/(^\s*)|(\s*$)/g, "");
  448. var strChineseFirstPY = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY";
  449. //此处收录了375个多音字
  450. var oMultiDiff = {"19969":"DZ","19975":"WM","19988":"QJ","20048":"YL","20056":"SC","20060":"NM","20094":"QG","20127":"QJ","20167":"QC","20193":"YG","20250":"KH","20256":"ZC","20282":"SC","20285":"QJG","20291":"TD","20314":"YD","20340":"NE","20375":"TD","20389":"YJ","20391":"CZ","20415":"PB","20446":"YS","20447":"SQ","20504":"TC","20608":"KG","20854":"QJ","20857":"ZC","20911":"PF","20985":"AW","21032":"PB","21048":"XQ","21049":"SC","21089":"YS","21119":"JC","21242":"SB","21273":"SC","21305":"YP","21306":"QO","21330":"ZC","21333":"SDC","21345":"QK","21378":"CA","21397":"SC","21414":"XS","21442":"SC","21477":"JG","21480":"TD","21484":"ZS","21494":"YX","21505":"YX","21512":"HG","21523":"XH","21537":"PB","21542":"PF","21549":"KH","21571":"E","21574":"DA","21588":"TD","21589":"O","21618":"ZC","21621":"KHA","21632":"ZJ","21654":"KG","21679":"LKG","21683":"KH","21710":"A","21719":"YH","21734":"WOE","21769":"A","21780":"WN","21804":"XH","21834":"A","21899":"ZD","21903":"RN","21908":"WO","21939":"ZC","21956":"SA","21964":"YA","21970":"TD","22003":"A","22031":"JG","22040":"XS","22060":"ZC","22066":"ZC","22079":"MH","22129":"XJ","22179":"XA","22237":"NJ","22244":"TD","22280":"JQ","22300":"YH","22313":"XW","22331":"YQ","22343":"YJ","22351":"PH","22395":"DC","22412":"TD","22484":"PB","22500":"PB","22534":"ZD","22549":"DH","22561":"PB","22612":"TD","22771":"KQ","22831":"HB","22841":"JG","22855":"QJ","22865":"XQ","23013":"ML","23081":"WM","23487":"SX","23558":"QJ","23561":"YW","23586":"YW","23614":"YW","23615":"SN","23631":"PB","23646":"ZS","23663":"ZT","23673":"YG","23762":"TD","23769":"ZS","23780":"QJ","23884":"QK","24055":"XH","24113":"DC","24162":"ZC","24191":"GA","24273":"QJ","24324":"NL","24377":"TD","24378":"QJ","24439":"PF","24554":"ZS","24683":"TD","24694":"WE","24733":"LK","24925":"TN","25094":"ZG","25100":"XQ","25103":"XH","25153":"PB","25170":"PB","25179":"KG","25203":"PB","25240":"ZS","25282":"FB","25303":"NA","25324":"KG","25341":"ZY","25373":"WZ","25375":"XJ","25384":"A","25457":"A","25528":"SD","25530":"SC","25552":"TD","25774":"ZC","25874":"ZC","26044":"YW","26080":"WM","26292":"PB","26333":"PB","26355":"ZY","26366":"CZ","26397":"ZC","26399":"QJ","26415":"ZS","26451":"SB","26526":"ZC","26552":"JG","26561":"TD","26588":"JG","26597":"CZ","26629":"ZS","26638":"YL","26646":"XQ","26653":"KG","26657":"XJ","26727":"HG","26894":"ZC","26937":"ZS","26946":"ZC","26999":"KJ","27099":"KJ","27449":"YQ","27481":"XS","27542":"ZS","27663":"ZS","27748":"TS","27784":"SC","27788":"ZD","27795":"TD","27812":"O","27850":"PB","27852":"MB","27895":"SL","27898":"PL","27973":"QJ","27981":"KH","27986":"HX","27994":"XJ","28044":"YC","28065":"WG","28177":"SM","28267":"QJ","28291":"KH","28337":"ZQ","28463":"TL","28548":"DC","28601":"TD","28689":"PB","28805":"JG","28820":"QG","28846":"PB","28952":"TD","28975":"ZC","29100":"A","29325":"QJ","29575":"SL","29602":"FB","30010":"TD","30044":"CX","30058":"PF","30091":"YSP","30111":"YN","30229":"XJ","30427":"SC","30465":"SX","30631":"YQ","30655":"QJ","30684":"QJG","30707":"SD","30729":"XH","30796":"LG","30917":"PB","31074":"NM","31085":"JZ","31109":"SC","31181":"ZC","31192":"MLB","31293":"JQ","31400":"YX","31584":"YJ","31896":"ZN","31909":"ZY","31995":"XJ","32321":"PF","32327":"ZY","32418":"HG","32420":"XQ","32421":"HG","32438":"LG","32473":"GJ","32488":"TD","32521":"QJ","32527":"PB","32562":"ZSQ","32564":"JZ","32735":"ZD","32793":"PB","33071":"PF","33098":"XL","33100":"YA","33152":"PB","33261":"CX","33324":"BP","33333":"TD","33406":"YA","33426":"WM","33432":"PB","33445":"JG","33486":"ZN","33493":"TS","33507":"QJ","33540":"QJ","33544":"ZC","33564":"XQ","33617":"YT","33632":"QJ","33636":"XH","33637":"YX","33694":"WG","33705":"PF","33728":"YW","33882":"SR","34067":"WM","34074":"YW","34121":"QJ","34255":"ZC","34259":"XL","34425":"JH","34430":"XH","34485":"KH","34503":"YS","34532":"HG","34552":"XS","34558":"YE","34593":"ZL","34660":"YQ","34892":"XH","34928":"SC","34999":"QJ","35048":"PB","35059":"SC","35098":"ZC","35203":"TQ","35265":"JX","35299":"JX","35782":"SZ","35828":"YS","35830":"E","35843":"TD","35895":"YG","35977":"MH","36158":"JG","36228":"QJ","36426":"XQ","36466":"DC","36710":"JC","36711":"ZYG","36767":"PB","36866":"SK","36951":"YW","37034":"YX","37063":"XH","37218":"ZC","37325":"ZC","38063":"PB","38079":"TD","38085":"QY","38107":"DC","38116":"TD","38123":"YD","38224":"HG","38241":"XTC","38271":"ZC","38415":"YE","38426":"KH","38461":"YD","38463":"AE","38466":"PB","38477":"XJ","38518":"YT","38551":"WK","38585":"ZC","38704":"XS","38739":"LJ","38761":"GJ","38808":"SQ","39048":"JG","39049":"XJ","39052":"HG","39076":"CZ","39271":"XT","39534":"TD","39552":"TD","39584":"PB","39647":"SB","39730":"LG","39748":"TPB","40109":"ZQ","40479":"ND","40516":"HG","40536":"HG","40583":"QJ","40765":"YQ","40784":"QJ","40840":"YK","40863":"QJG"};
  451. //参数,中文字符串
  452. //返回值:拼音首字母串数组
  453. return makePy(strInput);
  454. function makePy(str){
  455. if( typeof(str) != "string")
  456. throw new Error(-1, "函数makePy需要字符串类型参数!");
  457. var arrResult = new Array(); //保存中间结果的数组
  458. for(var i=0, len=str.length; i<len; i++){
  459. //获得unicode码
  460. var ch = str.charAt(i);
  461. //检查该unicode码是否在处理范围之内,在则返回该码对映汉字的拼音首字母,不在则调用其它函数处理
  462. arrResult.push(checkCh(ch));
  463. }
  464. //处理arrResult,返回所有可能的拼音首字母串数组
  465. return mkRslt(arrResult);
  466. }
  467. function checkCh(ch){
  468. var uni = ch.charCodeAt(0);
  469. //如果不在汉字处理范围之内,返回原字符,也可以调用自己的处理函数
  470. if(uni > 40869 || uni < 19968)
  471. return ch; //dealWithOthers(ch);
  472. //检查是否是多音字,是按多音字处理,不是就直接在strChineseFirstPY字符串中找对应的首字母
  473. return (oMultiDiff[uni] ? oMultiDiff[uni] : (strChineseFirstPY.charAt(uni - 19968)));
  474. }
  475. function mkRslt(arr){
  476. var arrRslt = [""];
  477. for(var i=0,len=arr.length;i<len;i++){
  478. var str = arr[i];
  479. var strlen = str.length;
  480. if(strlen == 1){
  481. for(var k=0;k<arrRslt.length;k++){
  482. arrRslt[k] += str;
  483. }
  484. }else{
  485. var tmpArr = arrRslt.slice(0);
  486. arrRslt = [];
  487. for(k=0;k<strlen;k++){
  488. //复制一个相同的arrRslt
  489. var tmp = tmpArr.slice(0);
  490. //把当前字符str[k]添加到每个元素末尾
  491. for(var j=0;j<tmp.length;j++){
  492. tmp[j] += str.charAt(k);
  493. }
  494. //把复制并修改后的数组连接到arrRslt上
  495. arrRslt = arrRslt.concat(tmp);
  496. }
  497. }
  498. }
  499. return arrRslt[0];
  500. }
  501. }
  502. }
  503. }).filter("statusAndTypeFilter", function(){
  504. var statusConfig = {
  505. "100":"在录入",
  506. "101":"已提交",
  507. "102":"已审核",
  508. "103":"未通过",
  509. "104":"已通过",
  510. "111":"已结束",
  511. "112":"已删除",
  512. "200":"未回复",
  513. "201":"已回复",
  514. "202":"待上传",
  515. "203":"已下载",
  516. "210":"未阅读",
  517. "211":"已阅读",
  518. "221":"已同意",
  519. "310":"未启用",
  520. "311":"申请中",
  521. "312":"未激活",
  522. "313":"已激活",
  523. "314":"已禁用",
  524. "315":"已注销",
  525. "317":"已开账",
  526. "350":"未完成",
  527. "351":"运行中",
  528. "400":"已发货",
  529. "401":"未发货",
  530. "402":"部分发货",
  531. "403":"出货中",
  532. "404":"待收货",
  533. "405":"已收货",
  534. "406":"待发货",
  535. "407":"已出货",
  536. "408":"发货中",
  537. "409":"待回寄",
  538. "410":"验货中",
  539. "411":"已验货",
  540. '412':'等待供应商接单',
  541. '413':'已接单',
  542. "501":"待确认",
  543. "502":"已确认",
  544. "503":"待付款",
  545. "504":"已付款",
  546. "505":"已收款",
  547. "506":"待收款",
  548. "507":"待退款",
  549. "508":"已退款",
  550. "509":"退货中",
  551. "510":"换货中",
  552. "511":"售后处理中",
  553. "512":"待开发票",
  554. "513":"已开发票",
  555. "520":"已完成",
  556. "601":"有效",
  557. "602":"无效",
  558. "603":"无效(因未按时付款)",
  559. "604":"供应商缺货",
  560. "607":"审核中..",
  561. "606": "用户取消",
  562. "608":"审核通过",
  563. "609":"不通过",
  564. "610":"确认状态取消",
  565. "611":"已付款取消",
  566. "1001":"收货地址",
  567. "1002":"发货地址",
  568. "1011":"增加",
  569. "1012":"扣除",
  570. "1021":"退货",
  571. "1022":"换货",
  572. "1051":"现货",
  573. "1052":"期货",
  574. "1101":"货到付款",
  575. "1102":"在线支付",
  576. "1103":"公司转账",
  577. "1104":"邮局汇款",
  578. "1201":"17%增值税可抵扣,累计开票,8%税点",
  579. "1202":"17%增值税不可抵扣,累计开票,8%税点",
  580. "1203":"17%增值税可抵扣,随元器件一起发货,10%税点",
  581. "1204":"17%增值税不可抵扣,,随元器件一起发货,10%税点",
  582. "1301":"第三方配送",
  583. "1302":"卖家配送",
  584. "1303":"上门自取"
  585. };
  586. return function(data) {
  587. return statusConfig[data];
  588. }
  589. }).filter('hideBankFilter', function() {
  590. return function(input) {
  591. var result;
  592. if(input) {
  593. result ="***" + (new String(input)).substr(-4,4);
  594. }else{
  595. result = '银行卡号为空';
  596. }
  597. return result;
  598. }
  599. }).filter('trusthtml', ['$sce', function($sce) {
  600. return function(input) {
  601. return $sce.trustAsHtml(input);
  602. }
  603. }]).filter('strongStr', function() {
  604. return function(input, keyword) {
  605. if(angular.isUndefined(keyword) || keyword == "") {
  606. return "<span>" + input + "</span>";
  607. }
  608. var index = angular.lowercase(input).indexOf(angular.lowercase(keyword));
  609. if(index < 0) {
  610. return "<span>" + input + "</span>";
  611. }
  612. var bold = input.slice(index + keyword.length, input.length);
  613. var prefix = input.slice(0, keyword.length);
  614. return "<span>" + prefix + "<strong>" + bold + "</strong></span>";
  615. }
  616. }).factory('SmoothScroll', function(){
  617. var currentYPosition = function (pID) {
  618. var parent = pID ? document.getElementById(pID) :
  619. (self || document.documentElement || document.body);
  620. return parent.pageYOffset || parent.scrollTop || 0;
  621. }
  622. var elmYPosition = function(pID, eID) {
  623. var elm = document.getElementById(eID), parent = pID ? document.getElementById(pID) : document.body;
  624. var y = elm.offsetTop;
  625. var node = elm;
  626. while (node.offsetParent && node.offsetParent != parent) {
  627. node = node.offsetParent;
  628. y += node.offsetTop;
  629. }
  630. return y;
  631. }
  632. return {
  633. scrollTo: function(pID, eID, offset) {
  634. var startY = currentYPosition(pID);
  635. var stopY = elmYPosition(pID, eID) - (offset || 0);
  636. var distance = stopY > startY ? stopY - startY : startY - stopY;
  637. if (distance < 100) {
  638. scrollTo(0, stopY);
  639. return;
  640. }
  641. var speed = Math.round(distance / 100);
  642. if (speed >= 20)
  643. speed = 20;
  644. var step = Math.round(distance / 25);
  645. var leapY = stopY > startY ? startY + step : startY - step;
  646. var timer = 0;
  647. var parent = pID ? "#" + pID + "" : "document";
  648. if (stopY > startY) {
  649. for (var i = startY; i < stopY; i += step) {
  650. setTimeout("$(" + parent + ").scrollTop(" + leapY + ")", timer * speed);
  651. leapY += step;
  652. if (leapY > stopY)
  653. leapY = stopY;
  654. timer++;
  655. }
  656. return;
  657. }
  658. for (var i = startY; i > stopY; i -= step) {
  659. setTimeout("$(" + parent + ").scrollTop(" + leapY + ")", timer * speed);
  660. leapY -= step;
  661. if (leapY < stopY)
  662. leapY = stopY;
  663. timer++;
  664. }
  665. }
  666. };
  667. }).factory('NumberService', [function() {
  668. return {
  669. /*
  670. js的除法运算
  671. */
  672. div : function (arg1, arg2) {
  673. var t1 = 0, t2 = 0, t3 = 0, r1, r2;
  674. try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
  675. try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
  676. r1 = Number(arg1.toString().replace(".", ""))
  677. r2 = Number(arg2.toString().replace(".", ""))
  678. if (r2 == 0)
  679. return 0;
  680. var result = String(r1 / r2);
  681. try { t3 = result.toString().split(".")[1].length } catch (e) { }
  682. var index = t2 - t1 - t3;
  683. if (index < 0) {
  684. result = result.replace(".", "");
  685. while (result.length <= Math.abs(index)) {
  686. result = '0' + result;
  687. }
  688. var start = result.substring(0, result.length + index);
  689. var end = result.substring(result.length + index, result.length);
  690. result = start + '.' + end;
  691. return Number(result);
  692. }
  693. else if (index > 0) {
  694. result = result.replace(".", "");
  695. while (result.length <= Math.abs(index)) {
  696. result += '0';
  697. }
  698. return Number(result);
  699. }
  700. else return Number(result.replace(".", ""));
  701. },
  702. mul: function(arg1, arg2) {
  703. var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
  704. try { m += s1.split(".")[1].length } catch (e) { }
  705. try { m += s2.split(".")[1].length } catch (e) { }
  706. return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
  707. },
  708. add : function(arg1, arg2) {
  709. var r1, r2, m, c;
  710. try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
  711. try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
  712. c = Math.abs(r1 - r2);
  713. m = Math.pow(10, Math.max(r1, r2))
  714. if (c > 0) {
  715. var cm = Math.pow(10, c);
  716. if (r1 > r2) {
  717. arg1 = Number(arg1.toString().replace(".", ""));
  718. arg2 = Number(arg2.toString().replace(".", "")) * cm;
  719. }
  720. else {
  721. arg1 = Number(arg1.toString().replace(".", "")) * cm;
  722. arg2 = Number(arg2.toString().replace(".", ""));
  723. }
  724. }
  725. else {
  726. arg1 = Number(arg1.toString().replace(".", ""));
  727. arg2 = Number(arg2.toString().replace(".", ""));
  728. }
  729. return (arg1 + arg2) / m
  730. },
  731. sub : function (arg1, arg2) {
  732. var r1,r2,m,n;
  733. try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
  734. try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
  735. m=Math.pow(10,Math.max(r1,r2));
  736. //last modify by deeka
  737. //动态控制精度长度
  738. n=(r1>=r2)?r1:r2;
  739. return ((arg1*m-arg2*m)/m).toFixed(n);
  740. },
  741. //进一发 例如 0.00002 保留两位,使用进一发 0.01
  742. //num 是传入的数字,scacle保留几位,
  743. toCeil : function (num, scacle) {
  744. //Math.ceil(num * Math.pow(10, scacle)) / Math.pow(10, scacle)
  745. console.log(new Big(num));
  746. return new Big(num).rnd(scacle, 3);
  747. }
  748. }
  749. }]).filter('formateNumber', ['$filter', function ($filter) {
  750. //判断是否是整数
  751. function isInteger(obj) {
  752. return Math.floor(obj) === obj;
  753. }
  754. return function (num, fractionSize) {
  755. if(num == 1) {
  756. console.log(1);
  757. }
  758. //判断是否是数字,如果不是这返回。
  759. if(typeof num !== 'number') {
  760. return num;
  761. }
  762. var formateNumber = num;
  763. if(fractionSize && isInteger(fractionSize)) {
  764. formateNumber = $filter('number')(num, fractionSize);
  765. formateNumber = formateNumber.replace(new RegExp(",",'gm'),'');
  766. }
  767. //去掉头尾的0
  768. var noZeroNumber = Number(formateNumber);
  769. //至少要有两位小数,如果没有两位,补0;
  770. var decimal = (noZeroNumber+"").split(".")[1];
  771. if(!decimal || decimal.length < 2) {
  772. return noZeroNumber.toFixed(2);
  773. }else {
  774. return noZeroNumber
  775. }
  776. }
  777. }]).factory('CommonGoodsBrowsingHistory', ['$resource', function ($resource) {
  778. return $resource('trade/history', { }, {
  779. getAllHistory : {
  780. url : 'trade/history/goods/list',
  781. method : 'GET',
  782. isArray : true
  783. },
  784. setDelete :{
  785. url : 'trade/history/goods/setDelete',
  786. method : 'POST'
  787. }
  788. });
  789. }]);
  790. });