Authored by 梁志锋

Merge remote-tracking branch 'origin/master'

@@ -19,6 +19,7 @@ use Plugin\Helpers; @@ -19,6 +19,7 @@ use Plugin\Helpers;
19 use Hood\Session; 19 use Hood\Session;
20 use LibModels\Wap\Passport\LoginData; 20 use LibModels\Wap\Passport\LoginData;
21 use Plugin\UdpLog; 21 use Plugin\UdpLog;
  22 +use Plugin\Encryption;
22 23
23 class AbstractAction extends Controller_Abstract 24 class AbstractAction extends Controller_Abstract
24 { 25 {
@@ -329,6 +330,7 @@ class AbstractAction extends Controller_Abstract @@ -329,6 +330,7 @@ class AbstractAction extends Controller_Abstract
329 $userInfo = LoginData::profile($uid); 330 $userInfo = LoginData::profile($uid);
330 $token = Helpers::makeToken($uid); 331 $token = Helpers::makeToken($uid);
331 if (isset($userInfo['data']) && $userInfo['data']) { 332 if (isset($userInfo['data']) && $userInfo['data']) {
  333 + $userInfo['data']['uid'] = Encryption::encrypt($userInfo['data']['uid']);
332 $uidCookie = $userInfo['data']['profile_name'] . '::' . $userInfo['data']['uid'] . '::' . $userInfo['data']['vip_info']['title'] . '::' . $token; 334 $uidCookie = $userInfo['data']['profile_name'] . '::' . $userInfo['data']['uid'] . '::' . $userInfo['data']['vip_info']['title'] . '::' . $token;
333 $this->setCookie('_UID', $uidCookie, time() + 3600 * 24 * 30); 335 $this->setCookie('_UID', $uidCookie, time() + 3600 * 24 * 30);
334 UdpLog::info('【登录】同步登陆cookie生成',$uidCookie); 336 UdpLog::info('【登录】同步登陆cookie生成',$uidCookie);
@@ -357,7 +359,8 @@ class AbstractAction extends Controller_Abstract @@ -357,7 +359,8 @@ class AbstractAction extends Controller_Abstract
357 // 兼容老的 359 // 兼容老的
358 if (!empty($cookie)) { 360 if (!empty($cookie)) {
359 $cookieList = explode('::', $cookie); 361 $cookieList = explode('::', $cookie);
360 - if (isset($cookieList[1]) && is_numeric($cookieList[1])) { 362 + $cookieList[1] = intval(Encryption::decrypt($cookieList[1]));
  363 + if (isset($cookieList[1]) && $cookieList[1]) {
361 if ($useSession) { 364 if ($useSession) {
362 $token = $this->getSession('_TOKEN'); 365 $token = $this->getSession('_TOKEN');
363 if (empty($token)) { 366 if (empty($token)) {
@@ -382,7 +385,7 @@ class AbstractAction extends Controller_Abstract @@ -382,7 +385,7 @@ class AbstractAction extends Controller_Abstract
382 } 385 }
383 } 386 }
384 } 387 }
385 - return $this->_uid; 388 + return intval($this->_uid);
386 } 389 }
387 390
388 /** 391 /**
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
12 namespace Api; 12 namespace Api;
13 13
14 use Plugin\Cache; 14 use Plugin\Cache;
  15 +use Plugin\UdpLog;
15 16
16 class Yohobuy 17 class Yohobuy
17 { 18 {
@@ -34,18 +35,6 @@ class Yohobuy @@ -34,18 +35,6 @@ class Yohobuy
34 'h5' => 'fd4ad5fcfa0de589ef238c0e7331b585', 35 'h5' => 'fd4ad5fcfa0de589ef238c0e7331b585',
35 ); 36 );
36 37
37 - //分流服务器接口  
38 - public static $interfaceShunt = array(  
39 - 'tencentServers' => array(  
40 - 'api' => array('123.206.1.98', '123.206.2.80'),  
41 - 'service' => array('123.206.1.98', '123.206.2.80')  
42 - ),  
43 - 'awsServers' => array(  
44 - 'api' => 'app-java-168863769.cn-north-1.elb.amazonaws.com.cn',  
45 - 'service' => 'service-yoho-579825100.cn-north-1.elb.amazonaws.com.cn'  
46 - )  
47 - );  
48 -  
49 /** 38 /**
50 * 取得当前的客户端类型 39 * 取得当前的客户端类型
51 */ 40 */
@@ -149,14 +138,23 @@ class Yohobuy @@ -149,14 +138,23 @@ class Yohobuy
149 { 138 {
150 $isApi = false; 139 $isApi = false;
151 $isService = false; 140 $isService = false;
  141 + $urlBack = $url;
152 142
153 if (USE_INTER_FACE_SHUNT) { 143 if (USE_INTER_FACE_SHUNT) {
154 - if (strpos($url, 'api.')) { 144 + if (strpos($url, 'api')) {
155 $isApi = true; 145 $isApi = true;
156 - } else if (strpos($url, 'service.')) { 146 + $url = self::_getUrl($url, $data);
  147 + } else if (strpos($url, 'service')) {
157 $isService = true; 148 $isService = true;
  149 + $url = self::_getUrl($url, $data);
  150 + }
  151 +
  152 + //$url 返回为空,走原先的url
  153 + if (empty($url)) {
  154 + $isApi = false;
  155 + $isService = false;
  156 + $url = $urlBack;
158 } 157 }
159 - $url = self::_getUrl($url, $data);  
160 } 158 }
161 159
162 // 销毁私钥参数 160 // 销毁私钥参数
@@ -166,6 +164,9 @@ class Yohobuy @@ -166,6 +164,9 @@ class Yohobuy
166 if (!empty($data)) { 164 if (!empty($data)) {
167 $url = self::httpBuildQuery($url, $data); 165 $url = self::httpBuildQuery($url, $data);
168 } //echo $url; 166 } //echo $url;
  167 +
  168 + UdpLog::debug('get shut api', $url);
  169 +
169 /* 开启缓存的情况 */ 170 /* 开启缓存的情况 */
170 if ($cache && USE_CACHE) { 171 if ($cache && USE_CACHE) {
171 // 先尝试获取一级缓存(master), 有数据则直接返回. 172 // 先尝试获取一级缓存(master), 有数据则直接返回.
@@ -192,6 +193,67 @@ class Yohobuy @@ -192,6 +193,67 @@ class Yohobuy
192 curl_setopt($ch, CURLOPT_USERAGENT, $userAgent); 193 curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
193 } 194 }
194 $result = curl_exec($ch); 195 $result = curl_exec($ch);
  196 +
  197 + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  198 + //如果分流执行失败,则走原来的逻辑
  199 + if (USE_INTER_FACE_SHUNT && $httpCode !== 200) {
  200 + curl_close($ch);
  201 + return self::_get($urlBack, $data, $cache, $returnJson, $timeout, $userAgent, $useGzip);
  202 + }
  203 +
  204 + if (!$returnJson && !empty($result)) {
  205 + $result = json_decode($result, true);
  206 + }
  207 +
  208 + curl_close($ch);
  209 + $data = array();
  210 +
  211 + /* 开启缓存的情况 */
  212 + if ($cache && USE_CACHE) {
  213 + // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据.
  214 + if (empty($result)) {
  215 + $result = Cache::get($url, 'slave');
  216 + } // 接口调用成功时,这里会设置一级(master)和二级(slave)的缓存数据.
  217 + else {
  218 + Cache::set($url, $result, $cache);
  219 + }
  220 + }
  221 +
  222 + return $result;
  223 + }
  224 +
  225 + public static function _get($url, $data = array(), $cache = false, $returnJson = false, $timeout = 5, $userAgent = null, $useGzip = true)
  226 + {
  227 + // 销毁私钥参数
  228 + if (isset($data['private_key'])) {
  229 + unset($data['private_key']);
  230 + }
  231 + if (!empty($data)) {
  232 + $url = self::httpBuildQuery($url, $data);
  233 + } //echo $url;
  234 + /* 开启缓存的情况 */
  235 + if ($cache && USE_CACHE) {
  236 + // 先尝试获取一级缓存(master), 有数据则直接返回.
  237 + $result = Cache::get($url, 'master');
  238 + if (!empty($result)) {
  239 + return $result;
  240 + }
  241 + }
  242 + $ch = curl_init($url);
  243 + curl_setopt($ch, CURLOPT_HEADER, 0);
  244 + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  245 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  246 +
  247 + if ($useGzip) {
  248 + curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
  249 + }
  250 + if (!empty($userAgent)) {
  251 + curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
  252 + }
  253 +
  254 + UdpLog::debug('call api: ', $url);
  255 + $result = curl_exec($ch);
  256 +
195 if (!$returnJson && !empty($result)) { 257 if (!$returnJson && !empty($result)) {
196 $result = json_decode($result, true); 258 $result = json_decode($result, true);
197 } 259 }
@@ -228,14 +290,23 @@ class Yohobuy @@ -228,14 +290,23 @@ class Yohobuy
228 { 290 {
229 $isApi = false; 291 $isApi = false;
230 $isService = false; 292 $isService = false;
  293 + $urlBack = $url;
231 294
232 if (USE_INTER_FACE_SHUNT) { 295 if (USE_INTER_FACE_SHUNT) {
233 - if (strpos($url, 'api.')) { 296 + if (strpos($url, 'api')) {
234 $isApi = true; 297 $isApi = true;
235 - } else if (strpos($url, 'service.')) { 298 + $url = self::_getUrl($url, $data);
  299 + } else if (strpos($url, 'service')) {
236 $isService = true; 300 $isService = true;
  301 + $url = self::_getUrl($url, $data);
  302 + }
  303 +
  304 + //$url 返回为空,走原先的url
  305 + if (empty($url)) {
  306 + $isApi = false;
  307 + $isService = false;
  308 + $url = $urlBack;
237 } 309 }
238 - $url = self::_getUrl($url, $data);  
239 } 310 }
240 311
241 $ch = curl_init($url); 312 $ch = curl_init($url);
@@ -274,6 +345,61 @@ class Yohobuy @@ -274,6 +345,61 @@ class Yohobuy
274 curl_setopt($ch, CURLOPT_POSTFIELDS, $str); 345 curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
275 } 346 }
276 $result = curl_exec($ch); 347 $result = curl_exec($ch);
  348 +
  349 + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  350 +
  351 + UdpLog::debug('post api', array('url' => $url, 'httpCode' => $httpCode));
  352 +
  353 + //如果分流执行失败,则走原来的逻辑
  354 + if (USE_INTER_FACE_SHUNT && $httpCode !== 200) {
  355 + curl_close($ch);
  356 + return self::_post($urlBack, $data, $returnJson, $timeout, $header, $cookie);
  357 + }
  358 +
  359 + if (!$returnJson && !empty($result)) {
  360 + $result = json_decode($result, true);
  361 + }
  362 + curl_close($ch);
  363 + $data = array();
  364 +
  365 + return $result;
  366 + }
  367 +
  368 + public static function _post($url, $data = array(), $returnJson = false, $timeout = 10, $header = array(), $cookie = array())
  369 + {
  370 + $ch = curl_init($url);
  371 +
  372 + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  373 +
  374 + if (!empty($header)) {
  375 + curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  376 + } else {
  377 + curl_setopt($ch, CURLOPT_HEADER, 0);
  378 + }
  379 + if (!empty($cookie)) {
  380 + $cookie_str = array();
  381 + foreach ($cookie as $key => $val) {
  382 + $cookie_str[] = urlencode($key) . '=' . urlencode($val);
  383 + }
  384 + curl_setopt($ch, CURLOPT_COOKIE, implode(';', $cookie_str));
  385 + }
  386 + curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 YOHOWEB');
  387 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  388 + curl_setopt($ch, CURLOPT_POST, true);
  389 + // 销毁私钥参数
  390 + if (isset($data['private_key'])) {
  391 + unset($data['private_key']);
  392 + }
  393 + if (!empty($data)) {
  394 + $str = http_build_query($data, null, '&');
  395 + // 新加支持application/x-www-form-urlencoded调用方式
  396 + //curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  397 + curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
  398 + }
  399 +
  400 + UdpLog::debug('post fail api', $url);
  401 +
  402 + $result = curl_exec($ch);
277 if (!$returnJson && !empty($result)) { 403 if (!$returnJson && !empty($result)) {
278 $result = json_decode($result, true); 404 $result = json_decode($result, true);
279 } 405 }
@@ -548,36 +674,92 @@ class Yohobuy @@ -548,36 +674,92 @@ class Yohobuy
548 */ 674 */
549 private static function _getUrl($url, $param) 675 private static function _getUrl($url, $param)
550 { 676 {
551 - if (USE_INTER_FACE_SHUNT === false) {  
552 - return $url; 677 + if (USE_CACHE === false || USE_INTER_FACE_SHUNT === false) {
  678 + return false;
  679 + }
  680 +
  681 +
  682 + UdpLog::debug('read memcache');
  683 + $interfaceShunt = Cache::getBy('INTERFACE_SHUT_KEY', 'master');
  684 +
  685 + UdpLog::debug('read memcahe: ', $interfaceShunt);
  686 + if (empty($interfaceShunt)) {
  687 + return false;
553 } 688 }
554 689
555 - $uid = 0; 690 + $interfaceShunt = json_decode($interfaceShunt, true);
  691 +
  692 + if (empty($interfaceShunt['cloud'])) {
  693 + return false;
  694 + }
  695 +
  696 + $uid = isset($param['uid']) ? intval($param['uid']) : 0;
556 $mod = 0; 697 $mod = 0;
  698 + $cloud = intval($interfaceShunt['cloud']);
  699 + $ips = '';
557 700
558 - if (isset($param['uid'])) {  
559 - $uid = intval($param['uid']);  
560 - $mod = $uid % 1024; 701 + switch ($cloud) {
  702 + case 1:
  703 + $ips = $interfaceShunt['aws'];
  704 + break;
  705 + case 2:
  706 + $ips = $interfaceShunt['tencent'];
  707 + break;
  708 + case 3:
  709 + if (empty($uid) || empty($interfaceShunt['strategy']) ||
  710 + empty($interfaceShunt['strategy']['model']) ||
  711 + empty($interfaceShunt['strategy']['tencentMax'])) {
  712 + break;
  713 + } else {
  714 + $ips = $uid % $interfaceShunt['strategy']['model'] > $interfaceShunt['strategy']['tencentMax'] ?
  715 + $interfaceShunt['aws'] : $interfaceShunt['tencent'];
  716 + }
  717 + break;
  718 + default:
  719 + $ips = '';
  720 + break;
561 } 721 }
562 722
563 - if ($mod > 128 || $uid === 0) {  
564 - $paseUrl = parse_url($url);  
565 - if (strpos($url, 'api.')) {  
566 - $url = 'http://' . self::$interfaceShunt['awsServers']['api'] . rtrim($paseUrl['path'], '/') . '/';  
567 - } else if (strpos($url, 'service.')) {  
568 - $url = 'http://' . self::$interfaceShunt['awsServers']['service'] . rtrim($paseUrl['path'], '/') . '/'; 723 + //未登录情况下
  724 + if (empty($uid) && empty($ips) && !empty($interfaceShunt['strategy']) &&
  725 + !empty($interfaceShunt['strategy']['notLogin'])) {
  726 + $ips = $interfaceShunt[$interfaceShunt['strategy']['notLogin']];
  727 + }
  728 +
  729 + if (empty($ips)) {
  730 + return false;
  731 + }
  732 +
  733 + $paseUrl = parse_url($url);
  734 + if (strpos($url, 'api')) {
  735 +
  736 + if (empty($ips['api.yoho.cn'])) {
  737 + return false;
569 } 738 }
570 - } else {  
571 - $paseUrl = parse_url($url);  
572 - if (strpos($url, 'api.')) {  
573 - $num = array_rand(self::$interfaceShunt['tencentServers']['api']);  
574 - $url = 'http://' . self::$interfaceShunt['tencentServers']['api'][$num] . rtrim($paseUrl['path'], '/') . '/';  
575 - } else if (strpos($url, 'service.')) {  
576 - $num = array_rand(self::$interfaceShunt['tencentServers']['service']);  
577 - $url = 'http://' . self::$interfaceShunt['tencentServers']['service'][$num] . rtrim($paseUrl['path'], '/') . '/'; 739 +
  740 + $num = array_rand($ips['api.yoho.cn']);
  741 +
  742 + if (empty($ips['api.yoho.cn'][$num]['ip'])) {
  743 + return false;
578 } 744 }
  745 +
  746 + $url = 'http://' . $ips['api.yoho.cn'][$num]['ip'] . rtrim($paseUrl['path'], '/') . '/';
  747 +
  748 + } else if (strpos($url, 'service')) {
  749 +
  750 + if (empty($ips['service.yoho.cn'])) {
  751 + return false;
  752 + }
  753 +
  754 + $num = array_rand($ips['service.yoho.cn']);
  755 +
  756 + if (empty($ips['service.yoho.cn'][$num]['ip'])) {
  757 + return false;
  758 + }
  759 +
  760 + $url = 'http://' . $ips['service.yoho.cn'][$num]['ip'] . rtrim($paseUrl['path'], '/') . '/';
579 } 761 }
580 762
581 return $url; 763 return $url;
582 } 764 }
583 -} 765 +}
@@ -94,6 +94,29 @@ class Cache @@ -94,6 +94,29 @@ class Cache
94 } 94 }
95 95
96 /** 96 /**
  97 + * 直接查询缓存,不对key做任何处理
  98 + */
  99 + public static function getBy($key, $node = 'master')
  100 + {
  101 + $result = array();
  102 +
  103 + try {
  104 + // WINDOWS
  105 + if (DIRECTORY_SEPARATOR === '\\') {
  106 + $result = HoodCache::Memcache($node)->getBy($key);
  107 + }
  108 + // LINUX
  109 + else {
  110 + $result = HoodCache::Memcached($node)->getBy($key);
  111 + }
  112 + } catch (Exception $e) {
  113 + $result = array();
  114 + }
  115 +
  116 + return $result;
  117 + }
  118 +
  119 + /**
97 * 清除缓存 120 * 清除缓存
98 * 121 *
99 * @param string $key 键名 122 * @param string $key 键名
@@ -336,7 +336,7 @@ class ShopProcess @@ -336,7 +336,7 @@ class ShopProcess
336 } 336 }
337 337
338 $goods = array( 338 $goods = array(
339 - 'url' => Helpers::getUrlBySkc($val['product_skn'], $val['goods_list'][0]['goods_id'], $val['cn_alphabet']), 339 + 'url' => Helpers::getUrlBySkc($val['product_id'], $val['goods_list'][0]['goods_id'], $val['cn_alphabet']),
340 'img' => Helpers::getImageUrl($goodsCover, 235, 314), 340 'img' => Helpers::getImageUrl($goodsCover, 235, 314),
341 'productName' => $val['product_name'], 341 'productName' => $val['product_name'],
342 'salesPrice' => '¥' . $val['sales_price'], 342 'salesPrice' => '¥' . $val['sales_price'],
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
  1 +<?xml version="1.0" standalone="no"?>
  2 +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
  3 +<svg xmlns="http://www.w3.org/2000/svg">
  4 +<metadata>
  5 +Created by FontForge 20120731 at Fri May 20 14:25:03 2016
  6 + By admin
  7 +</metadata>
  8 +<defs>
  9 +<font id="iconfont" horiz-adv-x="1024" >
  10 + <font-face
  11 + font-family="iconfont"
  12 + font-weight="500"
  13 + font-stretch="normal"
  14 + units-per-em="1024"
  15 + panose-1="2 0 6 3 0 0 0 0 0 0"
  16 + ascent="896"
  17 + descent="-128"
  18 + x-height="792"
  19 + bbox="-0.75 -128 3943 896.75"
  20 + underline-thickness="50"
  21 + underline-position="-100"
  22 + unicode-range="U+0078-E64C"
  23 + />
  24 +<missing-glyph horiz-adv-x="374"
  25 +d="M34 0v682h272v-682h-272zM68 34h204v614h-204v-614z" />
  26 + <glyph glyph-name=".notdef" horiz-adv-x="374"
  27 +d="M34 0v682h272v-682h-272zM68 34h204v614h-204v-614z" />
  28 + <glyph glyph-name=".null" horiz-adv-x="0"
  29 + />
  30 + <glyph glyph-name="nonmarkingreturn" horiz-adv-x="341"
  31 + />
  32 + <glyph glyph-name="x" unicode="x" horiz-adv-x="1001"
  33 +d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5
  34 +t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5
  35 +t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z" />
  36 + <glyph glyph-name="uniE600" unicode="&#xe600;" horiz-adv-x="1463"
  37 +d="M798 -64q0 -46 25 -58t61 16l537 420q36 28 36 68t-36 68l-537 424q-36 29 -61 16.5t-25 -57.5v-238q-486 0 -676 -290q-102 -157 -102 -361q0 -49 2 -49q47 62 87 104t90 78t103.5 57.5t127 36.5t161.5 21t207 6v-262z" />
  38 + <glyph glyph-name="uniE601" unicode="&#xe601;"
  39 +d="M281 468q-14 -9 -23 -23t-9 -28v-7v-19v-464h1q5 -24 24 -39.5t44 -15.5h582q28 0 48.5 20t20.5 49t-20.5 49t-48.5 20h-215h256q35 0 59 24.5t24 58.5t-24 58.5t-59 24.5h-235h235q35 0 59 24t24 58.5t-24 58.5t-59 24h-259h211q31 0 53.5 22.5t22.5 53.5v-13
  40 +q0 31 -22.5 54t-53.5 24q-125 6 -259 9q40 148 16 278q-8 44 -30.5 70.5t-49.5 31t-53 -4t-43 -35t-17 -62.5q-5 -34 -6.5 -64t-2.5 -42t-5 -30.5t-14 -42.5q-24 -60 -133 -115q-7 -2 -13 -6zM60 452q-25 0 -42.5 -17.5t-17.5 -42.5v-405q0 -25 17.5 -42.5t42.5 -17.5h134
  41 +v525h-134z" />
  42 + <glyph glyph-name="uniE602" unicode="&#xe602;" horiz-adv-x="1323"
  43 +d="M643 568q0 -68 -47.5 -116t-113.5 -48q0 -68 47 -116t113.5 -48t113.5 48t47 116t-47 116t-113 48zM643 896q-79 0 -162 -28.5t-152 -74.5t-131 -102t-105 -110.5t-68 -101.5t-25 -75t25 -75t68 -102t105 -111t131 -101.5t152 -74.5t161.5 -29t161.5 29t152 74.5
  44 +t131 101.5t105 111t68 102t25 75t-25 75t-68 101.5t-105 110.5t-131 102t-152 74.5t-161 28.5zM643 75q-88 0 -162 44t-117 120t-43 165t43 164.5t117 119.5t161.5 44t161.5 -44t117 -119.5t43 -164.5t-43 -165t-117 -120t-161 -44z" />
  45 + <glyph glyph-name="uniE603" unicode="&#xe603;"
  46 +d="M512 382v343h85v-426h-81v-2h-256v85h252zM512 -128q139 0 257 68.5t186.5 186.5t68.5 257t-68.5 257t-186.5 186.5t-257 68.5t-257 -68.5t-186.5 -186.5t-68.5 -257t68.5 -257t186.5 -186.5t257 -68.5z" />
  47 + <glyph glyph-name="uniE604" unicode="&#xe604;"
  48 +d="M774 420q13 -17 11.5 -39.5t-17.5 -38.5q0 -1 -1 -1l-427 -428q-18 -17 -42.5 -17t-42 17.5t-17.5 42t17 41.5l387 387l-387 387q-17 17 -17 41.5t17.5 42t42 17.5t42.5 -17l427 -428q1 0 1 -1z" />
  49 + <glyph glyph-name="uniE605" unicode="&#xe605;"
  50 +d="M707 844q-112 0 -195 -77q-83 77 -195 77q-121 0 -207 -88t-86 -212q0 -110 69 -194l2 -2l344 -391q30 -33 73 -33t73 33l344 391l2 2q69 84 69 194q0 124 -86 212t-207 88z" />
  51 + <glyph glyph-name="uniE606" unicode="&#xe606;" horiz-adv-x="1000"
  52 +d="M109.5 511q37.5 0 64 -26.5t26.5 -63.5t-26.5 -63.5t-64 -26.5t-64 26.5t-26.5 63.5t26.5 63.5t64 26.5zM515.5 511q37.5 0 63.5 -26.5t26 -63.5t-26 -63.5t-63.5 -26.5t-64 26.5t-26.5 63.5t26.5 63.5t64 26.5zM921 511q37 0 63.5 -26.5t26.5 -63.5t-26.5 -63.5
  53 +t-63.5 -26.5t-63.5 26.5t-26.5 63.5t26.5 63.5t63.5 26.5z" />
  54 + <glyph glyph-name="uniE607" unicode="&#xe607;" horiz-adv-x="1643"
  55 +d="M547 286h-1l45 -46l248 239l-45 46l-201 -194l-195 201l-46 -44z" />
  56 + <glyph glyph-name="uniE608" unicode="&#xe608;" horiz-adv-x="1821"
  57 +d="M930 231q-14 -13 -33.5 -13t-33.5 13l-252 242q-14 13 -14 32t14 32t34 13t34 -13l251 -242q14 -13 14 -32t-14 -32zM360 231q-14 13 -14 32t14 32l251 242q14 13 34 13t33.5 -13t13.5 -32t-13 -32l-252 -242q-14 -13 -33.5 -13t-33.5 13z" />
  58 + <glyph glyph-name="uniE609" unicode="&#xe609;" horiz-adv-x="1821"
  59 +d="M930 473l-251 -242q-14 -13 -34 -13t-34 13t-14 32t14 32l252 242q14 13 33.5 13t33.5 -13t14 -32t-14 -32zM427 537l252 -242q13 -13 13 -32t-13.5 -32t-33.5 -13t-34 13l-251 242q-14 13 -14 32t14 32t33.5 13t33.5 -13z" />
  60 + <glyph glyph-name="uniE60A" unicode="&#xe60a;"
  61 +d="M1024 384q0 -139 -68.5 -257t-186.5 -186.5t-257 -68.5t-257 68.5t-186.5 186.5t-68.5 257t68.5 257t186.5 186.5t257 68.5t257 -68.5t186.5 -186.5t68.5 -257zM801 594l-365 -366l-156 156l-37 -37l193 -193l403 403z" />
  62 + <glyph glyph-name="uniE60B" unicode="&#xe60b;" horiz-adv-x="1344"
  63 +d="M1280 320h-1216q-27 0 -45.5 18.5t-18.5 45.5t18.5 45.5t45.5 18.5h1216q27 0 45.5 -18.5t18.5 -45.5t-18.5 -45.5t-45.5 -18.5zM1280 -128h-1216q-27 0 -45.5 18.5t-18.5 45.5t18.5 45.5t45.5 18.5h1216q27 0 45.5 -18.5t18.5 -45.5t-18.5 -45.5t-45.5 -18.5zM1280 768
  64 +h-1216q-27 0 -45.5 18.5t-18.5 45.5t18.5 45.5t45.5 18.5h1216q27 0 45.5 -18.5t18.5 -45.5t-18.5 -45.5t-45.5 -18.5z" />
  65 + <glyph glyph-name="uniE60C" unicode="&#xe60c;"
  66 +d="M1024 384q0 -139 -68.5 -257t-186.5 -186.5t-257 -68.5t-257 68.5t-186.5 186.5t-68.5 257t68.5 257t186.5 186.5t257 68.5t257 -68.5t186.5 -186.5t68.5 -257z" />
  67 + <glyph glyph-name="uniE60D" unicode="&#xe60d;" horiz-adv-x="1685"
  68 +d="M1229 7l289 -135l58 124l-281 131q-21 -54 -66 -120zM944 559v-134h137v258q42 47 62 81l-118 69q-2 -4 -8 -12t-24.5 -30.5t-41 -45.5t-60.5 -54.5t-81 -59.5l75 -114q30 20 59 42zM1524 103v304h-605v-304h137v167h332v-167h136zM1283 253h-137v-66q0 -31 -20 -57.5
  69 +t-49.5 -45t-70.5 -34.5t-76.5 -25t-73.5 -17l74 -124q55 14 103 30.5t95.5 43t80.5 58t53.5 75.5t20.5 96v66zM1088 654l31 -133q42 9 85 21q19 -49 59 -78q49 -36 120 -36q45 0 92 14q69 21 133 78l-67 125q-17 -19 -46 -40.5t-60 -31.5q-63 -19 -91 1q-4 3 -8 9
  70 +q147 51 240 103l-81 111q-74 -38 -173 -74v85h-137v-129q-50 -14 -97 -25zM755 561v137h-348q11 42 19 84l-134 26q-11 -56 -28 -110h-200v-137h142q-79 -149 -206 -260l90 -103q43 38 85 83v-389h137v165h260v-24h-124l48 -137h83q54 0 92 38t38 92v490h-373q11 22 21 45
  71 +h398zM312 218h260v-24h-260v24zM312 379h260v-24h-260v24zM1683 816q0 -33 -22.5 -56t-55.5 -23t-56 23t-23 56t23 55.5t56 22.5t55.5 -22.5t22.5 -55.5zM1545 816q0 -26 17.5 -44.5t42.5 -18.5t41.5 18t16.5 44q0 27 -16.5 45.5t-42.5 18.5q-25 0 -42 -18.5t-17 -44.5z
  72 +M1592 775h-17v79q17 2 29 2q18 0 26 -6t8 -17q0 -13 -16 -19v-1q10 -3 14 -19q2 -13 6 -19h-19q-2 3 -6 19q-2 12 -16 12h-9v-31zM1593 819h8q18 0 18 12t-16 12q-6 0 -10 -1v-23z" />
  73 + <glyph glyph-name="uniE60E" unicode="&#xe60e;" horiz-adv-x="3958"
  74 +d="M611 723h-177l-150 -222l-95 222h-178l168 -395v-2l-31 -243h156l30 231zM699 565q-100 0 -179.5 -72.5t-92.5 -175.5q-13 -105 51 -178q61 -68 157 -68q99 0 178.5 72.5t92.5 175.5q13 104 -51 177q-60 69 -156 69zM759 317q-5 -41 -35.5 -70.5t-68.5 -29.5
  75 +q-37 0 -60 27q-27 30 -21 75q5 41 36 70.5t69 29.5q36 0 59 -27q27 -30 21 -75zM1656 565q-100 0 -179.5 -72.5t-92.5 -175.5q-13 -105 51 -178q61 -68 157 -68q99 0 178.5 72.5t92.5 175.5q13 104 -51 177q-60 69 -156 69zM1717 317q-6 -41 -36.5 -70.5t-68.5 -29.5
  76 +q-37 0 -60 27q-27 30 -21 75q5 41 36 70.5t69 29.5q36 0 60 -27q26 -30 21 -75zM1332 502q-44 50 -114 50q-51 0 -97 -27l-10 -6l26 204h-156l-80 -640h155l37 288q3 24 22 41t43 17q25 0 40.5 -17.5t11.5 -41.5l-36 -287h156l37 298q10 71 -35 121zM2949 544l-37 -288
  77 +q-3 -24 -22 -41t-44 -17q-24 0 -39.5 17.5t-12.5 41.5l37 287h-156l-38 -298q-9 -71 36 -121q43 -50 114 -50q51 0 97 27l9 6l-3 -25h156l58 461h-155zM1951 723l-55 -432h156l55 432h-156zM1970 252q-37 0 -67 -26.5t-34.5 -63.5t18.5 -63q22 -26 59 -26t67 26.5t34 63.5
  78 +q5 37 -18 63t-59 26zM2608 262q6 51 -14.5 93.5t-62.5 65.5l-8 5l8 5q39 21 64 57t30 78q8 63 -30 108q-37 44 -97 48l-6 1h-314l-81 -640h317q72 3 128.5 55t65.5 124zM2451 284q-3 -27 -25 -46.5t-50 -19.5h-106l17 134h107q27 -1 43.5 -20.5t13.5 -47.5zM2483 531
  79 +q-3 -25 -23 -43t-45 -18h-113l15 124h112q25 0 41.5 -18.5t12.5 -44.5zM3132 -127q65 0 124 37.5t89 99.5l264 534h-156l-127 -258l-63 258h-156l113 -471l-7 -14q-8 -18 -25 -29t-36 -11q-10 0 -20 4l-29 11l-67 -139l29 -10q31 -12 67 -12zM3943 730q0 -65 -45 -110.5
  80 +t-110.5 -45.5t-111 45.5t-45.5 111t45.5 110.5t111.5 45q65 0 110 -45t45 -111zM3670 730q0 -52 34 -88t84 -36q49 -1 82.5 35.5t33.5 87.5q0 53 -33.5 89.5t-84.5 36.5q-49 0 -82.5 -36.5t-33.5 -88.5zM3763 650h-35v155q35 5 58 5q36 0 52 -12t16 -34q0 -26 -32 -37v-2
  81 +q20 -6 27 -37q5 -26 11 -38h-37q-4 5 -12 38q-4 23 -31 23h-17v-61zM3764 737h17q35 0 35 23t-32 23q-13 0 -20 -1v-45z" />
  82 + <glyph glyph-name="uniE60F" unicode="&#xe60f;"
  83 +d="M682 158q-108 -89 -249 -89q-107 0 -197.5 53t-143.5 143.5t-53 197.5t53 197.5t143.5 143.5t197.5 53t197.5 -53t143.5 -143.5t53 -197.5q0 -141 -89 -249l286 -286l-56 -56zM433.5 148q130.5 0 222.5 92t92 222.5t-92 223t-222.5 92.5t-223 -92.5t-92.5 -223
  84 +t92.5 -222.5t223 -92z" />
  85 + <glyph glyph-name="uniE610" unicode="&#xe610;"
  86 +d="M245 384l-9 9l472 472l80 -80l-400 -401l400 -401l-80 -80l-472 472z" />
  87 + <glyph glyph-name="uniE611" unicode="&#xe611;"
  88 +d="M509 876q-4 -2 -245 -245q-176 -179 -208.5 -213.5t-32.5 -46.5q0 -35 42 -33q7 0 233 227l225 228l226 -228q225 -227 232 -227q21 -1 31.5 7.5t10.5 25.5q0 12 -31.5 46t-206.5 212q-241 243 -246 246q-15 8 -30 1zM171 341q-12 -8 -14 -38.5t-2 -188t2 -188t14 -38.5
  89 +q7 -6 352.5 -6t352.5 6q11 8 13 38.5t2 188t-2 188t-13 38.5q-8 7 -21.5 5.5t-21.5 -10.5l-10 -9v-381h-600v381l-10 9q-8 9 -21 10.5t-21 -5.5zM398 298l-11 -12v-215l11 -12q10 -13 25.5 -13t25.5 13l10 12v175h128v-175l11 -12q11 -13 25.5 -13t25.5 13l10 12v215l-20 24
  90 +h-231z" />
  91 + <glyph glyph-name="uniE612" unicode="&#xe612;"
  92 +d="M951 77h-878l439 614z" />
  93 + <glyph glyph-name="uniE613" unicode="&#xe613;"
  94 +d="M512 77l-439 614h878z" />
  95 + <glyph glyph-name="uniE614" unicode="&#xe614;"
  96 +d="M313 35l349 349l-349 349q-7 7 -7 16.5t6.5 16t16 6.5t16.5 -6l345 -345q16 -15 21 -20q7 -7 7 -17t-7 -17q-44 -44 -48 -47l-318 -318q-7 -6 -16.5 -6t-16 6.5t-6.5 16t7 16.5z" />
  97 + <glyph glyph-name="uniE615" unicode="&#xe615;"
  98 +d="M527 559q8 0 14 -6l293 -288q6 -6 6.5 -14.5t-5.5 -14.5t-14.5 -6t-14.5 6l-279 273l-278 -273q-7 -6 -15 -6t-14 6t-6 14.5t6 14.5l293 288q6 6 14 6z" />
  99 + <glyph glyph-name="uniE616" unicode="&#xe616;"
  100 +d="M527.5 230q-8.5 0 -14.5 6l-293 288q-6 6 -6 14t6 14.5t14 6.5t15 -6l278 -274l279 274q6 6 14.5 6t14.5 -6.5t5.5 -14.5t-6.5 -14l-293 -288q-5 -6 -13.5 -6z" />
  101 + <glyph glyph-name="uniE617" unicode="&#xe617;" horiz-adv-x="1030"
  102 +d="M-195 258zM520 866q-98 0 -187.5 -38t-154 -102.5t-102.5 -154t-38 -187.5t38 -187.5t102.5 -154t154 -102.5t187.5 -38t187.5 38t154 102.5t102.5 154t38 187.5t-38 187.5t-102.5 154t-154 102.5t-187.5 38zM857 581l-339 -451l-328 238q-12 9 -14 23.5t6.5 26.5t23 14
  103 +t26.5 -6l271 -198l297 396q9 12 23.5 14t26.5 -7t14 -23.5t-7 -26.5z" />
  104 + <glyph glyph-name="uniE618" unicode="&#xe618;"
  105 +d="M224 288q-40 0 -68 28t-28 68t28 68t68 28t68 -28t28 -68t-28 -68t-68 -28zM512 288q-40 0 -68 28t-28 68t28 68t68 28t68 -28t28 -68t-28 -68t-68 -28zM800 288q-40 0 -68 28t-28 68t28 68t68 28t68 -28t28 -68t-28 -68t-68 -28z" />
  106 + <glyph glyph-name="uniE619" unicode="&#xe619;"
  107 +d="M125.5 309q30.5 0 51 21.5t20.5 52.5q0 33 -20.5 54.5t-51 21.5t-51.5 -21.5t-21 -54.5q0 -31 21 -52.5t51.5 -21.5zM512.5 309q30.5 0 51 21.5t20.5 52.5q0 33 -20.5 54.5t-51 21.5t-51.5 -21.5t-21 -54.5q0 -31 21 -52.5t51.5 -21.5zM899.5 309q30.5 0 51 21.5
  108 +t20.5 52.5q0 33 -20.5 54.5t-51 21.5t-51.5 -21.5t-21 -54.5q0 -31 21 -52.5t51.5 -21.5z" />
  109 + <glyph glyph-name="uniE61A" unicode="&#xe61a;"
  110 +d="M512 -62q-91 0 -173.5 35.5t-142 95t-95 142t-35.5 173.5t35.5 173.5t95 142t142 95t173.5 35.5t173.5 -35.5t142 -95t95 -142t35.5 -173.5t-35.5 -173.5t-95 -142t-142 -95t-173.5 -35.5zM512 766q-104 0 -192 -51t-139 -139t-51 -192t51 -192t139 -139t192 -51t192 51
  111 +t139 139t51 192t-51 192t-139 139t-192 51zM512 592zM464 592q0 20 14 34t34 14t34 -14t14 -34t-14 -34t-34 -14t-34 14t-14 34zM512 128q-13 0 -22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5v-288q0 -13 -9.5 -22.5t-22.5 -9.5z" />
  112 + <glyph glyph-name="uniE61B" unicode="&#xe61b;"
  113 +d="M437 137h-193q-27 2 -41.5 22.5t-17.5 45.5q3 25 17.5 41t41.5 18h193v63l-193 1q-27 2 -41.5 19t-17.5 43q3 25 17.5 41t41.5 18h144l-134 236q-10 12 -19 30.5t-8 40.5q5 28 20 45.5t56 22.5q24 -2 43 -16.5t31 -31.5l152 -278l167 280q12 17 31 30t43 16
  114 +q15 -1 27.5 -4t22 -10t16 -20t9.5 -34q0 -29 -20 -55l-155 -252h147q26 -2 41 -18t17 -41q-2 -26 -17.5 -44t-41.5 -20l-191 -1v-61h192q26 -2 41 -20t17 -43q-2 -26 -17 -43.5t-41 -19.5l-192 1v-106q-4 -85 -93 -85q-44 0 -68.5 21t-26.5 64v104z" />
  115 + <glyph glyph-name="uniE61C" unicode="&#xe61c;"
  116 +d="M946 -112h-868q-26 0 -44 18t-18 44v868q0 26 18 44t44 18h868q26 0 44 -18t18 -44v-868q0 -26 -18 -44t-44 -18zM946 787q0 13 -9 22t-22 9h-806q-13 0 -22 -9t-9 -22v-806q0 -13 9 -22t22 -9h806q13 0 22 9t9 22v806z" />
  117 + <glyph glyph-name="uniE61D" unicode="&#xe61d;"
  118 +d="M939 -106h-876q-26 0 -44.5 18.5t-18.5 44.5v876q0 26 18.5 44.5t44.5 18.5h876q26 0 44.5 -18.5t18.5 -44.5v-876q0 -26 -18.5 -44.5t-44.5 -18.5zM814 708l-376 -438l-250 188l-63 -126l313 -250l439 501z" />
  119 + <glyph glyph-name="uniE61E" unicode="&#xe61e;"
  120 +d="M224 307l416 410l179 -179l-416 -410zM659 621l-19 19l-333 -333l19 -19zM698 582l-20 20l-332 -333l19 -19zM736 544l-19 19l-333 -333l19 -19zM717 800q14 14 38 14t39 -14l102 -102q14 -15 14 -39t-14 -38l-64 -58l-173 173zM211 282l167 -167l-148 -51l-70 70z
  121 +M205 51l-83 -32l32 83z" />
  122 + <glyph glyph-name="uniE61F" unicode="&#xe61f;"
  123 +d="M512 896q-138 0 -256 -69t-187 -187t-69 -256t69 -256t187 -187t256 -69t256 69t187 187t69 256t-69 256t-187 187t-256 69zM563 128h-102v307h102v-307zM563 538h-102v102h102v-102z" />
  124 + <glyph glyph-name="uniE620" unicode="&#xe620;"
  125 +d="M938 372h-30h-370v274h-50v-274h-395h-4q-31 0 -53 21.5t-22 52.5v175q0 31 22 53t53 22h90q-40 47 -40 100q0 27 10 47.5t25 30t29.5 15t24.5 6.5l11 1q53 0 100 -15.5t81 -42t56 -50t39 -50.5q17 27 39.5 51t56 50t79.5 41.5t98 15.5q4 0 11 -1t24 -7t30 -15.5
  126 +t24 -30.5t11 -49q0 -51 -35 -97h85q31 0 53 -22t22 -53v-175q0 -31 -22 -52.5t-53 -21.5zM264 821q-15 0 -26 -2.5t-15.5 -6t-6.5 -7.5t-2 -6v-3q0 -49 66 -100h173q-14 30 -30 52.5t-34 35.5t-33 21t-34.5 11.5t-30 4t-27.5 0.5zM763 819q-17 0 -27.5 -1t-29.5 -4
  127 +t-33.5 -11t-32 -20.5t-33.5 -34.5t-30 -52h177q59 50 59 97q2 0 0 6.5t-14 13t-36 6.5zM488 -128h-349q-31 0 -53 22t-22 53v375h424v-450zM538 322h400v-375q0 -31 -22 -53t-53 -22h-325v450z" />
  128 + <glyph glyph-name="uniE621" unicode="&#xe621;"
  129 +d="M160 576v-640q0 -26 19 -45t45 -19h576q26 0 45 19t19 45v640h-704zM352 0h-64v448h64v-448zM480 0h-64v448h64v-448zM608 0h-64v448h64v-448zM736 0h-64v448h64v-448zM880 768h-208v80q0 20 -14 34t-34 14h-224q-20 0 -34 -14t-14 -34v-80h-208q-20 0 -34 -14t-14 -34
  130 +v-80h832v80q0 20 -14 34t-34 14zM608 768h-192v63h192v-63z" />
  131 + <glyph glyph-name="uniE622" unicode="&#xe622;" horiz-adv-x="1173"
  132 +d="M586 672q-28 65 -69 113t-86.5 73.5t-96 34t-97.5 -2t-90 -39.5t-75.5 -73t-51.5 -107.5t-20 -138.5q0 -41 9 -78.5t24 -66.5t39 -57.5t47 -48.5t55.5 -43t56.5 -38t58.5 -35.5t53.5 -33.5q93 -61 162 -138.5t82 -120.5q10 39 81.5 118.5t160.5 142.5q24 17 71.5 47
  133 +t79 50.5t71.5 54.5t64 67t41 81t16 102q0 75 -19.5 138t-52.5 105.5t-76.5 70.5t-91 37.5t-98 1t-96 -34.5t-85.5 -72.5t-67 -108.5z" />
  134 + <glyph glyph-name="uniE623" unicode="&#xe623;"
  135 +d="M835 660l-60 63l-263 -275v0l-263 275l-60 -63l262 -276l-262 -276l60 -63l263 275v0l263 -275l60 63l-262 276z" />
  136 + <glyph glyph-name="uniE624" unicode="&#xe624;" horiz-adv-x="1000"
  137 +d="M459 850h55h54v-120v-142v-120h191h191v-109h-191h-191v-191v-190h-109v190v191h-191h-190q-1 37 -1 109h191h191v382z" />
  138 + <glyph glyph-name="uniE625" unicode="&#xe625;" horiz-adv-x="1000"
  139 +d="M77 468h873v-109h-873v109z" />
  140 + <glyph glyph-name="uniE626" unicode="&#xe626;"
  141 +d="M866.5 747.5q-97.5 97.5 -228 132t-261.5 0t-228.5 -132t-132 -228.5t0 -261.5t132 -228t228.5 -132t261.5 0t228 132t132 228t0 261.5t-132 228.5zM798 199l-101 -101l-187 186l-186 -186l-101 101l186 186l-186 187l101 101l186 -186l187 186l101 -101l-186 -187z" />
  142 + <glyph glyph-name="uniE627" unicode="&#xe627;"
  143 +d="M741 342q-23 9 -22 34q6 114 -8 186q-13 68 -37.5 125.5t-48 89.5t-50.5 57t-38 32t-18 10l-7 3l-7 -3q-7 -3 -18 -10t-38 -32t-50.5 -57t-48 -89.5t-37.5 -125.5q-14 -72 -8 -186q1 -25 -22 -34q-25 -11 -47.5 -26t-47 -40.5t-39 -65t-14.5 -87.5v-16h198
  144 +q2 -22 17.5 -36.5t37.5 -14.5h248q22 0 37.5 14.5t17.5 36.5h198v16q0 48 -14.5 87.5t-39 65t-47 40.5t-47.5 26zM512 526q-31 0 -53 22t-22 53t22 53t53 22t53 -22t22 -53t-22 -53t-53 -22zM453 23q-14 0 -23.5 -10t-9.5 -24v-83q0 -14 9.5 -24t23.5 -10t24 10t10 24v83
  145 +q0 14 -10 24t-24 10zM571 23q-14 0 -24 -10t-10 -24v-83q0 -14 10 -24t24 -10t23.5 10t9.5 24v83q0 14 -9.5 24t-23.5 10z" />
  146 + <glyph glyph-name="uniE628" unicode="&#xe628;"
  147 +d="M505 860q95 0 182 -37t150 -100t100.5 -150t37.5 -182t-37.5 -182t-100.5 -150t-150 -100.5t-182 -37.5t-182 37.5t-150 100.5t-100 150t-37 182t37 182t100 150t150 100t182 37zM505 -20q112 0 206.5 55t149.5 149.5t55 206t-55 206t-149.5 149.5t-206 55t-206 -55
  148 +t-149.5 -149.5t-55 -206t55 -206t149.5 -149.5t205.5 -55zM528 222v-59h-58v59h58zM470 648h58v-349h-58v349z" />
  149 + <glyph glyph-name="uniE629" unicode="&#xe629;"
  150 +d="M512 893v0q-58 0 -112.5 -12t-105.5 -38t-80.5 -44t-77.5 -51v-450q0 -57 19.5 -110.5t49 -93.5t69 -76t75.5 -59.5t73.5 -43t57 -28t32.5 -12.5q13 4 32.5 12.5t57 28t73.5 43t75.5 59.5t69 76t49 93.5t19.5 110.5v450q-48 33 -77.5 51t-80.5 44t-105.5 38t-112.5 12z
  151 +M808 298q0 -76 -36.5 -138t-112.5 -117q-73 -53 -147 -82q-74 29 -147 82q-76 55 -112.5 117t-36.5 138v421q87 53 146.5 75t149.5 23q90 -1 149.5 -23t146.5 -75v-421zM512 755q-67 0 -112.5 -12.5t-119.5 -49.5v-399q0 -35 12.5 -68.5t30 -57.5t44 -46t47 -35.5t46 -26
  152 +t34 -16t18.5 -6.5q10 3 18.5 6.5t34 16t46 26t47 35.5t44 46t30 57.5t12.5 68.5v399q-74 37 -119.5 49.5t-112.5 12.5v0zM667 599v-47h-105v-67h92v-61h-92v-77h116v-57h-332v57h42v168h64v-168h46v205h-138v61h307v-14z" />
  153 + <glyph glyph-name="uniE62A" unicode="&#xe62a;"
  154 +d="M497 890l-451 -386q-20 -18 -20 -45v-500q0 -32 22.5 -54.5t53.5 -22.5h256v333h308v-333h256q31 0 53.5 22.5t22.5 54.5v500q0 27 -20 45l-451 386q-15 13 -30 0z" />
  155 + <glyph glyph-name="uniE62B" unicode="&#xe62b;"
  156 +d="M761 623q0 -104 -73 -177t-176.5 -73t-177 73t-73.5 177t73.5 177t177 73t176.5 -73t73 -177zM888 -80q11 22 9 48q-7 99 -60 181.5t-139 130t-186.5 47.5t-187 -47.5t-139.5 -130t-60 -181.5q-1 -26 10 -48q12 -25 40 -25h673q27 0 40 25z" />
  157 + <glyph glyph-name="uniE62C" unicode="&#xe62c;" horiz-adv-x="1048"
  158 +d="M832 -42.5q0 -35.5 -25 -60.5t-60.5 -25t-60.5 25t-25 60.5t25 60.5t60.5 25t60.5 -25t25 -60.5zM533 -42.5q0 -35.5 -25 -60.5t-60 -25t-60 25t-25 60.5t25 60.5t60 25t60 -25t25 -60.5zM277 704l-35 159q-3 14 -15 23.5t-27 9.5h-147q-22 0 -37.5 -15.5t-15.5 -37.5
  159 +t15.5 -38t37.5 -16h54l157 -627q6 -25 25.5 -40t44.5 -15h527q25 0 44.5 15t25.5 40l113 452q9 34 -13 62t-57 28h-697z" />
  160 + <glyph glyph-name="uniE62D" unicode="&#xe62d;"
  161 +d="M442 358h-84v-76h-230v76h-81q-20 0 -33.5 -12.5t-13.5 -31.5v-395q0 -20 13.5 -33.5t33.5 -13.5h395q19 0 31.5 13.5t12.5 33.5v395q0 19 -12.5 31.5t-31.5 12.5zM977 896h-81v-77h-230v77h-84q-19 0 -31.5 -13.5t-12.5 -33.5v-395q0 -19 12.5 -31.5t31.5 -12.5h395
  162 +q20 0 33.5 12.5t13.5 31.5v395q0 20 -13.5 33.5t-33.5 13.5zM977 358h-81v-76h-230v76h-84q-19 0 -31.5 -12.5t-12.5 -31.5v-395q0 -20 12.5 -33.5t31.5 -13.5h395q20 0 33.5 13.5t13.5 33.5v395q0 19 -13.5 31.5t-33.5 12.5z" />
  163 + <glyph glyph-name="uniE62E" unicode="&#xe62e;" horiz-adv-x="1639"
  164 +d="M1 867h1045v-625h-1045v625zM1424 867h-337v-625l61 -33q33 14 70 14q66 0 116 -42t61 -105l7 -4h205v398zM1178 495v290h164l121 -290h-285zM235 209h-235v-163h111q2 57 36.5 101.5t87.5 61.5zM452 38q0 66 -47 112.5t-113.5 46.5t-114 -46.5t-47.5 -112.5t47.5 -112.5
  165 +t114 -46.5t113.5 46.5t47 112.5zM1067 209h-721q54 -17 88.5 -61.5t36.5 -101.5h570q0 50 26 92v71zM1380 40q0 66 -47 112.5t-113.5 46.5t-113.5 -46.5t-47 -112.5t47 -112.5t113.5 -46.5t113.5 46.5t47 112.5z" />
  166 + <glyph glyph-name="uniE62F" unicode="&#xe62f;"
  167 +d="M474 112v161h-167v50h167v74h-167v49h134l-168 265h87l152 -257v386q-35 0 -70.5 2t-64 6t-55 8.5t-46.5 8.5t-34.5 8t-22.5 6t-7 2q-2 -43 -16.5 -74t-34 -44t-38.5 -20t-33 -7h-13q0 -40 1.5 -78t3.5 -69t5.5 -59.5t7 -51t6.5 -41.5t6.5 -32.5t5.5 -23t3 -13.5l2 -5
  168 +q15 -61 45 -120.5t65.5 -105.5t75 -87t76.5 -70.5t67 -50.5t47.5 -32t17.5 -10v225h-38zM550 112v161h167v50h-167v74h167v49h-134l168 265h-87l-152 -257v386q76 0 151 10.5t112 20.5l37 10q2 -43 16.5 -74t34 -44t38.5 -20t33 -7h13q0 -234 -40 -368l-1 -5
  169 +q-15 -61 -44.5 -120.5t-65.5 -105.5t-75.5 -87t-76.5 -70.5t-66.5 -50.5t-47.5 -32t-18 -10v225h38z" />
  170 + <glyph glyph-name="uniE630" unicode="&#xe630;"
  171 +d="M629 25h-268v20q0 31 -21.5 53t-52.5 22t-52.5 -22t-21.5 -53v-20h-174v609h590v-609zM400 66h188v527h-508v-527h94q7 41 39 68t74 27t74 -27t39 -68zM989 25h-136v20q0 31 -21.5 53t-52.5 22t-52.5 -22t-21.5 -53v-20h-117v476h210q22 0 57 -34q27 -26 58 -67
  172 +q31 -40 52 -75q24 -41 24 -62v-238zM892 66h56v197q0 9 -18 40t-46 68t-53 63q-23 23 -34 26h-168v-394h37q7 41 39 68t74 27t74 -27t39 -68zM989 233h-287v193h191l6 -8q35 -43 61 -84q29 -48 29 -71v-30zM743 274h202q-6 15 -21 39q-21 34 -50 72h-131v-111zM779.5 -70
  173 +q-47.5 0 -81.5 34t-34 81.5t34 81.5t81.5 34t81 -34t33.5 -81.5t-33.5 -81.5t-81 -34zM779 120q-31 0 -52.5 -22t-21.5 -52.5t21.5 -52.5t52.5 -22t52.5 22t21.5 52.5t-21.5 52.5t-52.5 22zM287 -70q-48 0 -81.5 34t-33.5 81.5t33.5 81.5t81.5 34t81.5 -34t33.5 -81.5
  174 +t-33.5 -81.5t-81.5 -34zM287 120q-31 0 -52.5 -22t-21.5 -52.5t21.5 -52.5t52.5 -22t52.5 22t21.5 52.5t-21.5 52.5t-52.5 22z" />
  175 + <glyph glyph-name="uniE631" unicode="&#xe631;"
  176 +d="M24 895v-1022v1022zM47 895v-1022v1022zM70 895v-1022v1022zM94 895v-1022v1022zM117 895v-1022v1022zM140 895v-1022v1022zM163 895v-1022v1022zM187 895v-1022v1022zM210 895v-1022v1022zM233 895v-1022v1022zM256 895v-1022v1022zM280 895v-1022v1022zM303 895v-1022
  177 +v1022zM326 895v-1022v1022zM349 895v-1022v1022zM373 895v-1022v1022zM396 895v-1022v1022zM419 895v-1022v1022zM442 895v-1022v1022zM466 895v-1022v1022zM489 895v-1022v1022zM512 895v-1022v1022zM535 895v-1022v1022zM558 895v-1022v1022zM582 895v-1022v1022zM605 895
  178 +v-1022v1022zM628 895v-1022v1022zM651 895v-1022v1022zM675 895v-1022v1022zM698 895v-1022v1022zM721 895v-1022v1022zM744 895v-1022v1022zM768 895v-1022v1022zM791 895v-1022v1022zM814 895v-1022v1022zM837 895v-1022v1022zM861 895v-1022v1022zM884 895v-1022v1022z
  179 +M907 895v-1022v1022zM930 895v-1022v1022zM954 895v-1022v1022zM977 895v-1022v1022zM1000 895v-1022v1022zM1 872h1022h-1022zM1 849h1022h-1022zM1 826h1022h-1022zM1 802h1022h-1022zM1 779h1022h-1022zM1 756h1022h-1022zM1 733h1022h-1022zM1 709h1022h-1022zM1 686
  180 +h1022h-1022zM1 663h1022h-1022zM1 640h1022h-1022zM1 616h1022h-1022zM1 593h1022h-1022zM1 570h1022h-1022zM1 547h1022h-1022zM1 523h1022h-1022zM1 500h1022h-1022zM1 477h1022h-1022zM1 454h1022h-1022zM1 430h1022h-1022zM1 407h1022h-1022zM1 384h1022h-1022zM1 361
  181 +h1022h-1022zM1 338h1022h-1022zM1 314h1022h-1022zM1 291h1022h-1022zM1 268h1022h-1022zM1 245h1022h-1022zM1 221h1022h-1022zM1 198h1022h-1022zM1 175h1022h-1022zM1 152h1022h-1022zM1 128h1022h-1022zM1 105h1022h-1022zM1 82h1022h-1022zM1 59h1022h-1022zM1 35h1022
  182 +h-1022zM1 12h1022h-1022zM1 -11h1022h-1022zM1 -34h1022h-1022zM1 -58h1022h-1022zM1 -81h1022h-1022zM1 -104h1022h-1022zM512 -127q-7 8 -18.5 22t-45.5 59t-64.5 91t-68 113.5t-64.5 131.5t-45.5 139t-18.5 141q0 52 11 96.5t30 75.5t43 56.5t51 41t54 27t51.5 17
  183 +t43.5 8.5t30 3h11q7 0 18.5 -0.5t45.5 -7t64.5 -17.5t68 -35.5t64.5 -57.5t45.5 -87t18.5 -120q0 -237 -215 -552q-60 -88 -110 -145zM740 613q-16 85 -86 140q-1 1 -4 3.5t-5 3.5q-5 4 -22 13t-19 10q-1 0 -20 7q-21 7 -24 7q-24 5 -48 5v0q-24 0 -47 -5q-44 -8 -82 -34h-1
  184 +q-12 -9 -27 -23q-2 -1 -5 -4l-3 -3q-4 -4 -16 -19.5t-13 -16.5q-2 -3 -4.5 -7.5t-3.5 -5.5q-10 -19 -13 -27q-1 -2 -2 -6t-2 -5q-7 -21 -9 -32q-4 -22 -4 -44q0 -65 23.5 -146.5t58 -151.5t68.5 -129.5t58 -95.5t24 -35q9 13 25 36.5t56 92t70.5 133.5t55.5 148t25 148
  185 +q0 22 -4 43zM373 570q0 58 40.5 98.5t98.5 40.5t98.5 -40.5t40.5 -98.5t-40.5 -99t-98.5 -41t-98.5 41t-40.5 99z" />
  186 + <glyph glyph-name="uniE632" unicode="&#xe632;"
  187 +d="M313 247h397v69h-397v-69zM313 110h397v68h-397v-68zM611 831h-430q-14 0 -23.5 -10t-9.5 -24v-825q0 -14 9.5 -24t23.5 -10h661q14 0 24 10t10 24v619zM644 710l131 -119h-131v119zM809 7h-595v755h364v-206q0 -14 9.5 -24t23.5 -10h198v-515zM313 384h397v69h-397v-69z
  188 +" />
  189 + <glyph glyph-name="uniE633" unicode="&#xe633;" horiz-adv-x="1304"
  190 +d="M1303 538l-161 242h-304v-443h233q19 0 32.5 14t13.5 33t-13.5 33t-32.5 14h-140v256h161l118 -177v-242h-442v577q0 21 -15 36t-36 15h-666q-21 0 -36 -15t-15 -36v-620q0 -21 15 -35.5t36 -14.5h142q-30 -49 -30 -105q0 -82 58 -140t140 -58t140 58t58 140
  191 +q0 56 -31 105h363q-30 -49 -30 -105q0 -82 58 -140t140 -58t140 58t58 140q0 56 -31 105h77v363zM93 803h582v-535h-582v535zM465 70q0 -43 -30.5 -74t-74 -31t-74 31t-30.5 74t30.5 74t74 31t74 -31t30.5 -74zM1164 70q0 -43 -31 -74t-74 -31t-74 31t-31 74t31 74t74 31
  192 +t74 -31t31 -74z" />
  193 + <glyph glyph-name="uniE634" unicode="&#xe634;" horiz-adv-x="1476"
  194 +d="M1403 896h-1331q-30 0 -51 -21t-21 -51v-880q0 -30 21 -51t51 -21h1331q30 0 51.5 21t21.5 51v880q0 30 -21.5 51t-51.5 21zM120 776h1235v-151h-1235v151zM120 414h1235v-422h-1235v422zM211 294h572v-61h-572v61zM211 173h331v-60h-331v60z" />
  195 + <glyph glyph-name="uniE635" unicode="&#xe635;"
  196 +d="M512 881q-102 0 -194.5 -39.5t-160 -106.5t-107 -160t-39.5 -194.5t39.5 -194.5t107 -160t160 -107t194.5 -40t194.5 40t160 107t107 160t39.5 194.5t-39.5 194.5t-107 160t-160 106.5t-194.5 39.5zM512 -34q-112 0 -207.5 55.5t-151 151t-55.5 208t55.5 207.5t151 150.5
  197 +t207.5 55.5t207.5 -55.5t151 -150.5t55.5 -207.5t-55.5 -208t-151 -151t-207.5 -55.5zM512 555q25 0 43 -18t18 -44h87q0 50 -29 89t-75 53v50q0 9 -6.5 15.5t-15.5 6.5h-44q-9 0 -15.5 -6.5t-6.5 -15.5v-50q-46 -14 -75 -53t-29 -89q0 -104 133 -154q27 -9 44 -20t23 -22
  198 +t7.5 -16.5t1.5 -13.5q0 -25 -18 -43t-43 -18t-43 18t-18 43h-87q0 -49 29 -88t75 -54v-50q0 -9 6.5 -15t15.5 -6h44q9 0 15.5 6t6.5 15v50q46 15 75 54t29 88q0 105 -133 154q-27 10 -44 21t-23 22t-7.5 16.5t-1.5 12.5q0 26 18 44t43 18z" />
  199 + <glyph glyph-name="uniE636" unicode="&#xe636;"
  200 +d="M947 759h-892q-23 0 -39 -16t-16 -38v-642q0 -23 16 -39t39 -16h892q22 0 38 16t16 39v642q0 22 -16 38t-38 16zM836 668l-335 -260l-336 260h671zM91 100v511l376 -293q15 -11 33.5 -11t33.5 11l376 293v-511h-819z" />
  201 + <glyph glyph-name="uniE637" unicode="&#xe637;"
  202 +d="M512 656q-63 0 -107.5 -44.5t-44.5 -107.5t44.5 -107.5t107.5 -44.5t107.5 44.5t44.5 107.5t-44.5 107.5t-107.5 44.5zM512 880q-102 0 -188.5 -50.5t-136.5 -137t-50 -188.5q0 -56 36 -137.5t81 -151t104 -146.5t85 -107t44 -50l25 -28l25 28q18 20 44 50t85 107
  203 +t104 146.5t81 151t36 137.5q0 102 -50 188.5t-136.5 137t-188.5 50.5zM512 -13q-46 54 -93.5 115.5t-98.5 137t-83 147t-32 117.5q0 127 90 217t217 90t217 -90t90 -217q0 -46 -32 -117.5t-83 -147t-98.5 -137t-93.5 -115.5z" />
  204 + <glyph glyph-name="uniE638" unicode="&#xe638;" horiz-adv-x="1335"
  205 +d="M1273 -4h-1179q-26 0 -44 -18t-18 -44t18 -44t44 -18h1179q26 0 44 18t18 44t-18 44t-44 18zM841 741h429q27 0 46 18t19 44t-19 44t-46 18h-429q-27 0 -46 -18t-19 -44t19 -44t46 -18zM841 314h429q27 0 46 18t19 44t-19 44t-46 18h-429q-27 0 -46 -18t-19 -44t19 -44
  206 +t46 -18zM85 314h434q26 0 44 18t18 44v435q0 25 -18 43.5t-44 18.5h-434q-26 0 -44 -18.5t-18 -43.5v-435q0 -25 18 -43.5t44 -18.5zM147 749h310v-311h-310v311z" />
  207 + <glyph glyph-name="uniE639" unicode="&#xe639;"
  208 +d="M507 895q-101 0 -194 -40t-160 -107t-107 -160t-40 -194.5t40 -194.5t107 -160t160 -107t194.5 -40t194.5 40t160 107t107 160t40 194.5t-40 194.5t-107 160t-160 107t-195 40zM507 -20q-112 0 -207.5 55.5t-150.5 150.5t-55 207.5t55 208t150.5 151t208 55.5
  209 +t207.5 -55.5t150.5 -151t55.5 -208t-55.5 -207.5t-150.5 -150.5t-208 -55.5zM506 689h-1h-1q-67 0 -115 -47q-48 -48 -48 -116q0 -18 12.5 -31t30.5 -13t31 13t13 31q0 32 22 54q22 21 55 22q30 -1 52.5 -23t22.5 -52q1 -24 -12 -43t-34 -29q-34 -14 -54 -44.5t-20 -68.5
  210 +v-36q0 -18 13 -30.5t31 -12.5t31 12.5t13 30.5v36q0 24 20 33q46 20 73 61.5t26 91.5q-1 66 -48 113t-113 48zM504 219q-23 0 -39 -16t-16 -38.5t16 -38.5t39 -16t38.5 16t15.5 38.5t-15.5 38.5t-38.5 16z" />
  211 + <glyph glyph-name="uniE63A" unicode="&#xe63a;"
  212 +d="M964 460q21 1 35 16t14 36v147q0 21 -15.5 36.5t-36.5 15.5h-898q-21 0 -36.5 -15.5t-15.5 -36.5v-147q0 -21 14 -36t35 -16q29 -2 49.5 -24t20.5 -52t-20.5 -52t-49.5 -24q-21 -1 -35 -16t-14 -36v-147q0 -21 15.5 -36.5t36.5 -15.5h898q21 0 36.5 15.5t15.5 36.5v147
  213 +q0 21 -14 36t-35 16q-29 2 -49.5 24t-20.5 52t20.5 52t49.5 24zM926 227v-83h-828v83q52 15 85.5 58.5t33.5 98.5t-33.5 98.5t-85.5 58.5v83h283v-66h66v66h479v-83q-52 -15 -85.5 -58.5t-33.5 -98.5t33.5 -98.5t85.5 -58.5zM381 362h66v-109h-66v109zM381 515h66v-109h-66
  214 +v109zM381 210h66v-66h-66v66z" />
  215 + <glyph glyph-name="uniE63B" unicode="&#xe63b;" horiz-adv-x="1199"
  216 +d="M1149 896h-1099q-21 0 -35.5 -14.5t-14.5 -35.5v-350q0 -20 14.5 -35t35.5 -15h1099q21 0 35.5 15t14.5 35v350q0 21 -14.5 35.5t-35.5 14.5zM100 796h999v-250h-999v250zM1024 396q-21 0 -35.5 -14.5t-14.5 -34.5v-375h-749v375q0 20 -14.5 34.5t-35.5 14.5t-35.5 -14.5
  217 +t-14.5 -34.5v-425q0 -21 14.5 -35.5t35.5 -14.5h849q21 0 35.5 14.5t14.5 35.5v425q0 20 -14.5 34.5t-35.5 14.5zM325 396q-21 0 -35.5 -14.5t-14.5 -34.5v-200q0 -21 14.5 -35.5t35.5 -14.5h549q21 0 35.5 14.5t14.5 35.5v200q0 20 -14.5 34.5t-35.5 14.5t-35.5 -14.5
  218 +t-14.5 -34.5v-150h-449v150q0 20 -15 34.5t-35 14.5z" />
  219 + <glyph glyph-name="uniE63C" unicode="&#xe63c;" horiz-adv-x="1048"
  220 +d="M297.5 521q-20.5 0 -35 -14.5t-14.5 -35.5t14.5 -35.5t35 -14.5t35.5 14.5t15 35.5t-15 35.5t-35.5 14.5zM953 29q95 93 95 215t-94 214q2 20 2 23q0 111 -64 205t-174.5 148.5t-240 54.5t-239.5 -54.5t-174 -148.5t-64 -205q0 -78 33 -148.5t93 -125.5l-77 -123
  221 +q-8 -12 -6.5 -26t10.5 -25q13 -15 32 -15q9 0 18 4l180 80q4 2 7 4q20 -7 39 -12q48 -80 138.5 -128t199.5 -48q75 0 145 25q1 -1 2 -1l140 -62q8 -4 17 -4q20 0 32 15q10 10 11 24t-7 26zM286 244q0 -17 2 -35v1q-88 42 -140.5 114t-52.5 157t51.5 157t139.5 114t192 42
  222 +q142 0 249.5 -76.5t128.5 -189.5q-88 43 -189 43q-104 0 -191.5 -43.5t-138.5 -119t-51 -164.5zM381 244q0 96 84 164t202 68t202 -68t84 -163.5t-84 -163.5t-202 -68t-202 68t-84 163zM527 275q-16 0 -27.5 -11t-11.5 -27t11.5 -27.5t27.5 -11.5t27.5 11.5t11.5 27.5
  223 +t-11.5 27t-27.5 11zM667 275q-16 0 -27.5 -11t-11.5 -27t11.5 -27.5t27.5 -11.5t27.5 11.5t11.5 27.5t-11.5 27t-27.5 11zM806 275q-16 0 -27 -11t-11 -27t11 -27.5t27 -11.5t27.5 11.5t11.5 27.5t-11.5 27t-27.5 11z" />
  224 + <glyph glyph-name="uniE63D" unicode="&#xe63d;"
  225 +d="M512 13q-131 0 -241.5 55t-175 149.5t-64.5 205.5t64.5 205.5t175 149.5t241.5 55t241.5 -55t175 -149.5t64.5 -205.5t-64.5 -205.5t-175 -149.5t-241.5 -55zM512 751q-108 0 -200 -44t-145.5 -119.5t-53.5 -164.5t53.5 -164.5t145.5 -119.5t200 -44t200 44t145.5 119.5
  226 +t53.5 164.5t-53.5 164.5t-145.5 119.5t-200 44zM730 75l184 -82l-102 164zM914 -44q-8 0 -15 3l-184 82q-14 6 -19.5 20.5t0.5 28.5t20.5 19.5t28.5 -1.5l74 -33l-39 62q-8 13 -4.5 28t16.5 23t28 4.5t23 -16.5l102 -164q15 -23 -3 -43q-11 -13 -28 -13zM379 412.5
  227 +q0 -21.5 -15 -36.5t-36.5 -15t-36.5 15t-15 36.5t15 36.5t36.5 15t36.5 -15t15 -36.5zM563 412.5q0 -21.5 -15 -36.5t-36 -15t-36 15t-15 36.5t15 36.5t36 15t36 -15t15 -36.5zM748 413q0 -22 -15 -37t-36.5 -15t-36.5 15t-15 36.5t15 36.5t36.5 15t36.5 -15t15 -36z" />
  228 + <glyph glyph-name="uniE63E" unicode="&#xe63e;"
  229 +d="M521 401zM768 -94q-94 0 -205 56q-145 72 -277 204.5t-205 277.5q-55 113 -56.5 201t52.5 140q13 13 30 13t29.5 -13t12.5 -30t-12 -30q-32 -32 -26.5 -98t47.5 -149q68 -137 187.5 -256.5t256.5 -187.5q83 -42 149 -47.5t98 26.5q13 13 30 13t30 -13t13 -30t-13 -30
  230 +q-54 -47 -141 -47zM333 439q-26 0 -39 26q-9 16 -4 32.5t21 23.5l99 46q15 8 26 23t8 33q0 13 -17 30l-141 145q-20 20 -56 13q-12 -7 -25 -13l-68 -73q-13 -12 -30 -12t-30 12.5t-13 29.5t13 30l68 68q28 28 60 34q80 20 141 -34l140 -140q32 -32 39 -82q6 -41 -16.5 -81.5
  231 +t-64.5 -63.5l-98 -47h-13zM875 -55q-17 0 -30 12.5t-13 29.5t13 30l68 68q5 6 7.5 8.5t4 7t1.5 10.5q7 35 -13 55l-141 141q-4 4 -30 17q-18 3 -33 -7t-22 -27l-47 -98q-6 -16 -22.5 -21.5t-32.5 4.5q-17 6 -22 22.5t4 32.5l47 99q23 42 62 64.5t83 16.5q45 -7 77 -39
  232 +l141 -141q29 -28 38 -65t-4 -75q-17 -43 -34 -60l-72 -73q-13 -12 -30 -12zM602 171q-9 0 -26 8q-77 58 -154 128q-76 77 -128 154q-9 12 -6 29.5t19 30.5q16 9 33 6.5t27 -15.5q69 -95 119 -141q94 -85 141 -119q16 -10 18.5 -27t-9.5 -33q-6 -21 -34 -21z" />
  233 + <glyph glyph-name="uniE63F" unicode="&#xe63f;" horiz-adv-x="1025"
  234 +d="M512 18q-11 0 -31 -1t-36.5 -1t-30.5 2l-222 -146q0 227 5 243q-91 65 -144 152.5t-53 189.5q0 122 68.5 223t186 158.5t257.5 57.5t257.5 -57.5t186 -158.5t68.5 -222.5t-68.5 -223t-186 -159t-257.5 -57.5zM512 847q-122 0 -229 -52.5t-170.5 -143t-63.5 -194.5
  235 +q0 -95 53 -179t142 -138v-170l146 97q16 -3 35.5 -4t49 0t37.5 1q122 0 229 53.5t170.5 144.5t63.5 195t-63.5 194.5t-170.5 143t-229 52.5zM768 384q-27 0 -45.5 18.5t-18.5 45.5t18.5 45.5t45.5 18.5t45.5 -18.5t18.5 -45.5t-18.5 -45.5t-45.5 -18.5zM512 384
  236 +q-27 0 -45.5 18.5t-18.5 45.5t18.5 45.5t45.5 18.5t45.5 -18.5t18.5 -45.5t-18.5 -45.5t-45.5 -18.5zM256 384q-27 0 -45.5 18.5t-18.5 45.5t18.5 45.5t45.5 18.5t45.5 -18.5t18.5 -45.5t-18.5 -45.5t-45.5 -18.5z" />
  237 + <glyph glyph-name="uniE640" unicode="&#xe640;"
  238 +d="M957 594q-12 19 -38 19h-598l-29 62q-3 7 -8 14q-3 4 -8 8q-4 3 -7 6l-2 1l-8 4h-2q-5 2 -9 2l-4 1h-5h-118q-23 0 -40 -16.5t-17 -40t17 -40.5t40 -17h81l33 -71q2 -6 5 -13t5 -12t4.5 -9.5t3.5 -6.5l1 -2l81 -181q0 -2 2 -5l15 -32q9 -30 39 -38v-3h392l18 1v2
  239 +q30 9 39 38l98 217q40 77 19 112zM909 497l-93 -207l-3 1l-4 -15q-5 -19 -25 -19l-19 1v-1h-340h-18q-19 0 -24 19l-4 15l-3 -1l-93 208q-10 17 -18 40l-42 92h-102q-10 0 -17 7t-7 17t7 17.5t17 7.5h119l3 -1q1 0 4 -1q2 0 4 -2q2 -1 4 -3q2 -1 3 -3l4 -6l38 -83h619
  240 +q8 0 10 -3q5 -8 -1.5 -32.5t-18.5 -47.5zM470 191q-33 0 -56.5 -23t-23.5 -56t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5t-23.5 56t-56.5 23zM470 61q-21 0 -36 15t-15 36t15 36t36 15t36 -15t15 -36.5t-15 -36t-36 -14.5zM747 191q-33 0 -56.5 -23t-23.5 -56t23.5 -56.5
  241 +t56.5 -23.5t56.5 23.5t23.5 56.5t-23.5 56t-56.5 23zM747 61q-21 0 -36 14.5t-15 36t15 36.5t36 15t36 -15t15 -36t-15 -36t-36 -15z" />
  242 + <glyph glyph-name="uniE641" unicode="&#xe641;" horiz-adv-x="1045"
  243 +d="M522 893q-103 0 -197 -40t-162 -108t-108.5 -162t-40.5 -197.5t40.5 -197.5t108.5 -162t162 -108t197.5 -40t197.5 40t162 108t108 162t40 197.5t-40 197.5t-108 162t-162 108t-198 40zM522 -49q-88 0 -168.5 34.5t-138.5 93t-92.5 138.5t-34.5 168.5t34.5 169
  244 +t92.5 138.5t138.5 92.5t169 34.5t168.5 -34.5t138.5 -92.5t93 -138.5t34.5 -169t-34.5 -168.5t-93 -138.5t-138.5 -93t-169 -34.5zM775 268l-105 61q-11 4 -21 6.5t-18 2.5t-15 -0.5t-13 -4t-10 -5.5t-9 -6l-6 -7q-2 -2 -6 -7l-3 -4l-6 -10q-34 -4 -59 21l-51 50
  245 +q-24 25 -20 60l9 4q3 5 16 16t17 18t4 25t-11 43h-1l-60 105q-12 20 -33 25.5t-41 -5.5l-62 -36q-6 -3 -14 -11.5t-13 -14.5l-5 -6q-14 -87 24.5 -183.5t121.5 -174.5q72 -68 157 -101.5t165 -29.5q4 1 10.5 2.5t20.5 10t21 20.5l36 62q11 20 5.5 41.5t-25.5 32.5z" />
  246 + <glyph glyph-name="uniE642" unicode="&#xe642;"
  247 +d="M439 324h110l-54 148zM501 881q-101 0 -192.5 -39.5t-158 -105.5t-105.5 -158t-39 -192.5t39 -192.5t105.5 -158.5t158 -105.5t192.5 -39t192.5 39t158 105.5t105.5 158.5t39 192.5t-39 192.5t-105.5 158t-158 105.5t-192.5 39.5zM656 180l-19 -9q-5 -3 -11 -3q-5 0 -9 2
  248 +q-10 4 -14 14l-27 69h-163l-25 -69q-4 -10 -14.5 -14t-19.5 1l-20 9q-9 4 -12.5 13t-0.5 18l151 401q6 16 23 16t23 -16l151 -401q3 -9 -0.5 -18t-12.5 -13z" />
  249 + <glyph glyph-name="uniE643" unicode="&#xe643;" horiz-adv-x="1124"
  250 +d="M859 896h-595q-109 0 -186.5 -77.5t-77.5 -186.5v-760l200 135q18 14 49.5 24t63.5 14.5t71.5 6.5t66 2t57 -1t34.5 -1h317q109 0 186.5 77.5t77.5 186.5v316q0 109 -77.5 186.5t-186.5 77.5zM477 367q-42 0 -71.5 29.5t-29.5 70.5t29.5 70t71.5 29t71.5 -29t29.5 -70
  251 +t-29.5 -70.5t-71.5 -29.5zM848 367q-42 0 -71.5 29.5t-29.5 70.5t29.5 70t71.5 29t71.5 -29t29.5 -70t-29.5 -70.5t-71.5 -29.5z" />
  252 + <glyph glyph-name="uniE644" unicode="&#xe644;"
  253 +d="M523 881q-101 0 -192.5 -39.5t-158 -105.5t-105.5 -158t-39 -192.5t39 -192.5t105.5 -158.5t158 -105.5t192.5 -39t192.5 39t158 105.5t105.5 158.5t39 192.5t-39 192.5t-105.5 158t-158 105.5t-192.5 39.5zM739 224q8 -8 7.5 -18.5t-8.5 -17.5q-11 -10 -15 -14
  254 +q-7 -7 -17 -7t-18 7l-34 34q-59 -42 -131 -42q-94 0 -160.5 66.5t-66.5 160.5t67 160.5t160.5 66.5t160 -66.5t66.5 -160.5q0 -75 -45 -135zM592 337q8 7 18 6.5t17 -7.5l27 -27q25 39 25 84q0 64 -45.5 109.5t-110 45.5t-110 -45.5t-45.5 -109.5t45.5 -109.5t109.5 -45.5
  255 +q44 0 80 21l-27 28q-8 7 -7.5 18t7.5 18z" />
  256 + <glyph glyph-name="uniE645" unicode="&#xe645;"
  257 +d="M512 894q-104 0 -198 -40.5t-162.5 -109t-109 -162.5t-40.5 -198t40.5 -198t109 -162.5t162.5 -109t198 -40.5t198 40.5t162.5 109t109 162.5t40.5 198t-40.5 198t-109 162.5t-162.5 109t-198 40.5zM512 -53q-89 0 -170 34.5t-139.5 93t-93 139.5t-34.5 170t34.5 170
  258 +t93 139.5t139.5 93t170 34.5t170 -34.5t139.5 -93t93 -139.5t34.5 -170t-34.5 -170t-93 -139.5t-139.5 -93t-170 -34.5zM659 384q15 0 25.5 10.5t10.5 25.5t-10.5 26t-25.5 11h-111v17l135 141q11 11 10.5 26t-11 25.5t-25.5 10t-26 -11.5l-115 -121l-123 122
  259 +q-11 11 -26 10.5t-25.5 -11t-11 -25.5t10.5 -26l135 -135v-22h-108q-15 0 -26 -11t-11 -26t11 -25.5t26 -10.5h108v-73h-108q-15 0 -26 -10.5t-11 -25.5t11 -26t26 -11h108v-108q0 -15 10.5 -25.5t25.5 -10.5t25.5 10.5t10.5 25.5v108h111q15 0 25.5 11t10.5 26t-10.5 25.5
  260 +t-25.5 10.5h-111v73h111z" />
  261 + <glyph glyph-name="uniE646" unicode="&#xe646;"
  262 +d="M708 553l-257 -267l-135 141q-12 13 -28.5 13t-28 -12.5t-11.5 -29.5t11 -29l164 -170q4 -4 8 -7q12 -7 25.5 -5.5t23.5 12.5l284 295q12 13 12 30t-12 29q-41 16 -56 0zM512 384zM17 384q0 101 39 192.5t105.5 158t158 105.5t192.5 39t192.5 -39t158 -105.5t105.5 -158
  263 +t39 -192.5t-39 -192.5t-105.5 -158t-158 -105.5t-192.5 -39t-192.5 39t-158 105.5t-105.5 158t-39 192.5z" />
  264 + <glyph glyph-name="uniE647" unicode="&#xe647;"
  265 +d="M512 -92q-97 0 -185 37.5t-152 101.5t-101.5 152t-37.5 185t37.5 185t101.5 152t152 101.5t185 37.5t185 -37.5t152 -101.5t101.5 -152t37.5 -185t-37.5 -185t-101.5 -152t-152 -101.5t-185 -37.5zM512 828q-90 0 -172.5 -35t-142 -94.5t-94.5 -142t-35 -172.5t35 -172.5
  266 +t94.5 -142t142 -94.5t172.5 -35t172.5 35t142 94.5t94.5 142t35 172.5t-35 172.5t-94.5 142t-142 94.5t-172.5 35z" />
  267 + <glyph glyph-name="uniE648" unicode="&#xe648;"
  268 +d="M512 882q-101 0 -193.5 -39.5t-159 -106t-106 -159t-39.5 -193.5t39.5 -193.5t106 -159t159 -106t193.5 -39.5t193.5 39.5t159 106t106 159t39.5 193.5t-39.5 193.5t-106 159t-159 106t-193.5 39.5zM512 -82q-95 0 -181 37t-148.5 99.5t-99.5 148.5t-37 181t37 181
  269 +t99.5 148.5t148.5 99.5t181 37t181 -37t148.5 -99.5t99.5 -148.5t37 -181t-37 -181t-99.5 -148.5t-148.5 -99.5t-181 -37zM420 217l-156 155l-22 -22l178 -179l361 361l-23 23z" />
  270 + <glyph glyph-name="uniE649" unicode="&#xe649;"
  271 +d="M875 126l-363 -164l-363 164v610q247 75 363 75t363 -75v-610zM930 808q-34 11 -84.5 26t-159.5 38.5t-174 23.5t-174 -23.5t-159.5 -38.5t-84.5 -26q-14 -4 -22 -15.5t-8 -25.5v-669q0 -27 25 -39l405 -183q9 -3 18 -3t18 3l405 183q25 12 25 39v669q0 14 -8 25.5
  272 +t-22 15.5zM751 552v83h-473v-83h206v-298h-72v237h-87v-237h-66v-84h506v84h-193v119h151v83h-151v96h179z" />
  273 + <glyph glyph-name="uniE64A" unicode="&#xe64a;"
  274 +d="M510.5 -61q-90.5 0 -173.5 35.5t-142.5 95t-95 142.5t-35.5 173.5t35.5 173.5t95 142.5t142.5 95t173.5 35.5t173.5 -35.5t142.5 -95t95 -142.5t35.5 -173.5t-35.5 -173.5t-95 -142.5t-142.5 -95t-173.5 -35.5zM510.5 793q-110.5 0 -204.5 -54.5t-148.5 -148.5
  275 +t-54.5 -204.5t54.5 -204.5t148.5 -148.5t204.5 -54.5t204.5 54.5t148.5 148.5t54.5 204.5t-54.5 204.5t-148.5 148.5t-204.5 54.5zM491 347q-8 0 -13.5 5.5t-5.5 13.5v330q0 8 5.5 14t13.5 6t14 -6t6 -14v-330q0 -8 -6 -13.5t-14 -5.5zM763 347h-272q-8 0 -13.5 5.5
  276 +t-5.5 13.5t5.5 13.5t13.5 5.5h272q8 0 13.5 -5.5t5.5 -13.5t-5.5 -13.5t-13.5 -5.5z" />
  277 + <glyph glyph-name="uniE64B" unicode="&#xe64b;"
  278 +d="M379 -128q-57 0 -122 51.5t-97 132.5q-26 71 -27 149.5t24 151.5q11 33 32.5 70.5t37 58.5t46.5 62q17 20 51 68l11 14l23 34q9 14 21 35t18.5 38.5t11.5 38t4 42.5t-7 44q-6 11 7 24q7 7 20 7q149 -50 216 -284q27 50 58 69q12 6 23 0t11 -21q-3 -59 11.5 -126.5
  279 +t42.5 -126.5q4 -5 9 -17t8 -17q51 -89 55 -157q4 -63 -14.5 -126.5t-65.5 -120t-115 -80.5q-30 -11 -61 -11q-18 0 -30.5 5t-18 12.5t-7.5 13t-2 10.5q0 7 2 13t4 10t7.5 9.5t7.5 7t9 6.5t8 6l3 3q36 26 54 75.5t7 95.5q-4 28 -27 75q-2 6 -7.5 20t-8.5 22t-6.5 20t-4.5 23
  280 +q0 -2 -2 -5t-2 -5q-15 -42 -20 -75q0 -45 7 -58q7 -5 7.5 -14.5t-4.5 -16.5q-5 -8 -14 -10t-17 3v0q-67 44 -85 120q7 34 7 78v21v24q0 68 -10 92q-14 -53 -28 -72q-22 -39 -37 -58q-6 -6 -15.5 -20t-12.5 -18q-13 -22 -24 -46.5t-21.5 -61.5t-5.5 -78t28 -76
  281 +q3 -7 7.5 -12.5t8 -10t8.5 -10t7.5 -8t8 -7t7.5 -6.5t7.5 -6.5t6.5 -4.5q11 -9 16.5 -14.5t10 -14.5t0.5 -19q-5 -18 -21.5 -29.5t-39.5 -11.5z" />
  282 + <glyph glyph-name="uniE64C" unicode="&#xe64c;"
  283 +d="M911 725h-242v123q0 21 -13.5 34.5t-34.5 13.5h-246q-20 0 -33.5 -13.5t-13.5 -34.5v-123h-246q-21 0 -34.5 -13.5t-13.5 -34t13.5 -34t34.5 -13.5h293h243h293q21 0 34.5 13.5t13.5 34t-13.5 34t-34.5 13.5zM423 725v72h147v-72h-147zM765 579q-21 0 -34.5 -14
  284 +t-13.5 -34v-560h-441v560q0 20 -13.5 34t-34 14t-34 -14t-13.5 -34v-611q0 -21 13.5 -34.5t34.5 -13.5h536q20 0 33.5 13.5t13.5 34.5v611q3 20 -11.5 34t-35.5 14zM447 67v389q0 20 -13.5 33.5t-34 13.5t-34 -13.5t-13.5 -33.5v-389q0 -21 13.5 -34.5t34 -13.5t34 13.5
  285 +t13.5 34.5zM645 67v389q0 20 -13.5 33.5t-34.5 13.5q-20 0 -35.5 -13.5t-15.5 -33.5v-389q0 -21 13.5 -34.5t34.5 -13.5t36 13.5t15 34.5z" />
  286 + </font>
  287 +</defs></svg>
@@ -122,6 +122,11 @@ class Memcache extends Root implements CacheInterface @@ -122,6 +122,11 @@ class Memcache extends Root implements CacheInterface
122 return $this->init()->get($this->_makeTag() . $key, $flags); 122 return $this->init()->get($this->_makeTag() . $key, $flags);
123 } 123 }
124 124
  125 + public function getBy($key, $cacheCb = null, &$casToken = null)
  126 + {
  127 + return $this->init()->get($key, $cacheCb, $casToken);
  128 + }
  129 +
125 /** 130 /**
126 * 向一个新的key下面增加一个元素 131 * 向一个新的key下面增加一个元素
127 * @param $key 132 * @param $key
@@ -167,6 +167,11 @@ class Memcached extends Root implements CacheInterface @@ -167,6 +167,11 @@ class Memcached extends Root implements CacheInterface
167 return $this->init()->get($this->_makeTag() . $key, $cacheCb, $casToken); 167 return $this->init()->get($this->_makeTag() . $key, $cacheCb, $casToken);
168 } 168 }
169 169
  170 + public function getBy($key, $cacheCb = null, &$casToken = null)
  171 + {
  172 + return $this->init()->get($key, $cacheCb, $casToken);
  173 + }
  174 +
170 /** 175 /**
171 * 向一个新的key下面增加一个元素 176 * 向一个新的key下面增加一个元素
172 * @param $key 177 * @param $key
@@ -161,7 +161,8 @@ class DetailController extends AbstractAction @@ -161,7 +161,8 @@ class DetailController extends AbstractAction
161 } 161 }
162 $this->setTitle('购买咨询'); 162 $this->setTitle('购买咨询');
163 163
164 - $uid = $this->getUid(); 164 + $uid = $this->get('uid', $this->getUid());
  165 +
165 $consults = DetailModel::getConsults($uid, $productId); 166 $consults = DetailModel::getConsults($uid, $productId);
166 $data = array( 167 $data = array(
167 'goodsConsultsPage' => true, 168 'goodsConsultsPage' => true,
1 [memcached] 1 [memcached]
2 -master.hosts=127.0.0.1:11212,127.0.0.1:11213  
3 -slave.hosts=127.0.0.1:11212,127.0.0.1:11213  
4 -session.hosts=127.0.0.1:11212,127.0.0.1:11213 2 +master.hosts=127.0.0.1:12111
  3 +slave.hosts=127.0.0.1:12111
  4 +session.hosts=127.0.0.1:12111
5 5
6 [redis] 6 [redis]
7 servers.hosts = 127.0.0.1:6379 7 servers.hosts = 127.0.0.1:6379
@@ -11,7 +11,7 @@ define('APPLICATION_PATH', dirname(__DIR__)); // 应用目录 @@ -11,7 +11,7 @@ define('APPLICATION_PATH', dirname(__DIR__)); // 应用目录
11 define('ROOT_PATH', dirname(dirname(APPLICATION_PATH))); // 根目录 11 define('ROOT_PATH', dirname(dirname(APPLICATION_PATH))); // 根目录
12 defined('APPLICATION_ENV') || define('APPLICATION_ENV', 'preview'); 12 defined('APPLICATION_ENV') || define('APPLICATION_ENV', 'preview');
13 13
14 -define('USE_INTER_FACE_SHUNT', false);//分流开关 14 +define('USE_INTER_FACE_SHUNT', true);//分流开关
15 15
16 define('API_URL', 'http://api.yoho.yohoops.org/'); 16 define('API_URL', 'http://api.yoho.yohoops.org/');
17 define('SERVICE_URL', 'http://service.yoho.yohoops.org/'); 17 define('SERVICE_URL', 'http://service.yoho.yohoops.org/');
@@ -6,16 +6,17 @@ define('SITE_MAIN', '//m.yohobuy.com'); // 网站主域名 @@ -6,16 +6,17 @@ define('SITE_MAIN', '//m.yohobuy.com'); // 网站主域名
6 define('OLD_MAIN', '//m.yohobuy.com'); // 网站旧域名 6 define('OLD_MAIN', '//m.yohobuy.com'); // 网站旧域名
7 define('COOKIE_DOMAIN', '.yohobuy.com'); // COOKIE作用域 7 define('COOKIE_DOMAIN', '.yohobuy.com'); // COOKIE作用域
8 define('SUB_DOMAIN', '.m.yohobuy.com'); // 子域名后缀 8 define('SUB_DOMAIN', '.m.yohobuy.com'); // 子域名后缀
9 -define('USE_CACHE', false); // 缓存的开关 9 +define('USE_CACHE', true); // 缓存的开关
10 define('APPLICATION_PATH', dirname(__DIR__)); // 应用目录 10 define('APPLICATION_PATH', dirname(__DIR__)); // 应用目录
11 define('ROOT_PATH', dirname(dirname(APPLICATION_PATH))); // 根目录 11 define('ROOT_PATH', dirname(dirname(APPLICATION_PATH))); // 根目录
12 defined('APPLICATION_ENV') || define('APPLICATION_ENV', 'testing'); 12 defined('APPLICATION_ENV') || define('APPLICATION_ENV', 'testing');
13 -define('USE_INTER_FACE_SHUNT', false);//分流开关  
14 13
15 -define('API_URL', 'http://api-test1.yohops.com:9999/');  
16 -define('SERVICE_URL', 'http://service-test1.yohops.com:9999/'); 14 +define('USE_INTER_FACE_SHUNT', true);//分流开关
  15 +
  16 +define('API_URL', 'http://api-test2.yohops.com:9999/');
  17 +define('SERVICE_URL', 'http://service-test2.yohops.com:9999/');
17 define('YOHOBUY_URL', 'http://www.yohobuy.com/'); 18 define('YOHOBUY_URL', 'http://www.yohobuy.com/');
18 -define('SERVICE_NOTIFY', 'http://service-test1.yohops.com:9999/'); 19 +define('SERVICE_NOTIFY', 'http://service-test2.yohops.com:9999/');
19 20
20 $application = new Application(APPLICATION_PATH . '/configs/application.testing.ini'); 21 $application = new Application(APPLICATION_PATH . '/configs/application.testing.ini');
21 $application->bootstrap()->run(); 22 $application->bootstrap()->run();
@@ -11,7 +11,7 @@ define('APPLICATION_PATH', dirname(__DIR__)); // 应用目录 @@ -11,7 +11,7 @@ define('APPLICATION_PATH', dirname(__DIR__)); // 应用目录
11 define('ROOT_PATH', dirname(dirname(APPLICATION_PATH))); // 根目录 11 define('ROOT_PATH', dirname(dirname(APPLICATION_PATH))); // 根目录
12 defined('APPLICATION_ENV') || define('APPLICATION_ENV', 'production'); 12 defined('APPLICATION_ENV') || define('APPLICATION_ENV', 'production');
13 13
14 -define('USE_INTER_FACE_SHUNT', false);//分流开关 14 +define('USE_INTER_FACE_SHUNT', true);//分流开关
15 15
16 define('API_URL', 'http://api.yoho.yohoops.org/'); 16 define('API_URL', 'http://api.yoho.yohoops.org/');
17 define('SERVICE_URL', 'http://service.yoho.yohoops.org/'); 17 define('SERVICE_URL', 'http://service.yoho.yohoops.org/');