Commit e48ef997c03b49c8090970f5fbb29ce80b0ac6df

Authored by 64850858
1 parent e1fcc1f2

更换播放器, 修正和优化sql脚本,

sql/mysql.sql
... ... @@ -5,10 +5,10 @@ create table device
5 5 (
6 6 deviceId varchar(50) not null
7 7 primary key,
8   - name varchar(50) null,
9   - manufacturer varchar(50) null,
10   - model varchar(50) null,
11   - firmware varchar(50) null,
  8 + name varchar(255) null,
  9 + manufacturer varchar(255) null,
  10 + model varchar(255) null,
  11 + firmware varchar(255) null,
12 12 transport varchar(50) null,
13 13 streamMode varchar(50) null,
14 14 online varchar(50) null,
... ... @@ -25,7 +25,7 @@ create table device
25 25 create table device_channel
26 26 (
27 27 channelId varchar(50) not null,
28   - name varchar(50) null,
  28 + name varchar(255) null,
29 29 manufacture varchar(50) null,
30 30 model varchar(50) null,
31 31 owner varchar(50) null,
... ... @@ -42,7 +42,7 @@ create table device_channel
42 42 secrecy varchar(50) null,
43 43 ipAddress varchar(50) null,
44 44 port int null,
45   - password varchar(50) null,
  45 + password varchar(255) null,
46 46 PTZType int null,
47 47 status int null,
48 48 longitude double null,
... ... @@ -59,7 +59,7 @@ create table device_channel
59 59 create table device_mobile_position
60 60 (
61 61 deviceId varchar(50) not null,
62   - deviceName varchar(50) null,
  62 + deviceName varchar(255) null,
63 63 time varchar(50) not null,
64 64 longitude double not null,
65 65 latitude double not null,
... ... @@ -75,10 +75,10 @@ create table device_mobile_position
75 75  
76 76 create table gb_stream
77 77 (
78   - app varchar(50) not null,
79   - stream varchar(50) not null,
  78 + app varchar(255) not null,
  79 + stream varchar(255) not null,
80 80 gbId varchar(50) not null,
81   - name varchar(50) null,
  81 + name varchar(255) null,
82 82 longitude double null,
83 83 latitude double null,
84 84 streamType varchar(50) null,
... ... @@ -90,7 +90,7 @@ create table parent_platform
90 90 (
91 91 id int auto_increment,
92 92 enable int null,
93   - name varchar(50) null,
  93 + name varchar(255) null,
94 94 serverGBId varchar(50) not null,
95 95 serverGBDomain varchar(50) null,
96 96 serverIP varchar(50) null,
... ... @@ -98,7 +98,7 @@ create table parent_platform
98 98 deviceGBId varchar(50) not null,
99 99 deviceIp varchar(50) null,
100 100 devicePort varchar(50) null,
101   - username varchar(50) null,
  101 + username varchar(255) null,
102 102 password varchar(50) null,
103 103 expires varchar(50) null,
104 104 keepTimeout varchar(50) null,
... ... @@ -122,21 +122,21 @@ create table platform_gb_channel
122 122 create table platform_gb_stream
123 123 (
124 124 platformId varchar(50) not null,
125   - app varchar(50) not null,
126   - stream varchar(50) not null,
  125 + app varchar(255) not null,
  126 + stream varchar(255) not null,
127 127 primary key (platformId, app, stream)
128 128 );
129 129  
130 130 create table stream_proxy
131 131 (
132 132 type varchar(50) not null,
133   - app varchar(50) not null,
134   - stream varchar(50) not null,
135   - url varchar(50) null,
136   - src_url varchar(50) null,
137   - dst_url blob null,
  133 + app varchar(255) not null,
  134 + stream varchar(255) not null,
  135 + url varchar(255) null,
  136 + src_url varchar(255) null,
  137 + dst_url varchar(255) null,
138 138 timeout_ms int null,
139   - ffmpeg_cmd_key varchar(50) null,
  139 + ffmpeg_cmd_key varchar(255) null,
140 140 rtp_type varchar(50) null,
141 141 enable_hls bit(1) null,
142 142 enable_mp4 bit(1) null,
... ... @@ -146,8 +146,8 @@ create table stream_proxy
146 146  
147 147 create table stream_push
148 148 (
149   - app varchar(50) not null,
150   - stream varchar(50) not null,
  149 + app varchar(255) not null,
  150 + stream varchar(255) not null,
151 151 totalReaderCount varchar(50) null,
152 152 originType int null,
153 153 originTypeStr varchar(50) null,
... ... @@ -160,8 +160,8 @@ create table user
160 160 (
161 161 id int auto_increment
162 162 primary key,
163   - username varchar(50) not null,
164   - password varchar(50) not null,
  163 + username varchar(255) not null,
  164 + password varchar(255) not null,
165 165 roleId int not null,
166 166 create_time varchar(50) not null
167 167 );
... ...
src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
... ... @@ -5,9 +5,11 @@ import java.util.logging.LogManager;
5 5 import org.springframework.boot.SpringApplication;
6 6 import org.springframework.boot.autoconfigure.SpringBootApplication;
7 7 import org.springframework.context.ConfigurableApplicationContext;
  8 +import org.springframework.scheduling.annotation.EnableScheduling;
8 9 import springfox.documentation.oas.annotations.EnableOpenApi;
9 10  
10 11 @SpringBootApplication
  12 +@EnableScheduling
11 13 @EnableOpenApi
12 14 public class VManageBootstrap extends LogManager {
13 15 private static String[] args;
... ...
src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
... ... @@ -8,6 +8,8 @@ package com.genersoft.iot.vmp.common;
8 8 */
9 9 public class VideoManagerConstants {
10 10  
  11 + public static final String WVP_SERVER_PREFIX = "VMP_wvp_server";
  12 +
11 13 public static final String MEDIA_SERVER_PREFIX = "VMP_media_server";
12 14  
13 15 public static final String MEDIA_STREAM_PREFIX = "VMP_media_stream";
... ...
src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
... ... @@ -58,7 +58,7 @@ public class MediaConfig {
58 58 @Value("${media.rtp.port-range}")
59 59 private String rtpPortRange;
60 60  
61   - @Value("${media.record-assist-port}")
  61 + @Value("${media.record-assist-port:0}")
62 62 private Integer recordAssistPort;
63 63  
64 64 public String getIp() {
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
... ... @@ -48,4 +48,16 @@ public class VideoStreamSessionManager {
48 48 ssrcMap.remove(deviceId + "_" + channelId);
49 49 streamIdMap.remove(deviceId + "_" + channelId);
50 50 }
  51 +
  52 + public ConcurrentHashMap<String, ClientTransaction> getSessionMap() {
  53 + return sessionMap;
  54 + }
  55 +
  56 + public ConcurrentHashMap<String, String> getSsrcMap() {
  57 + return ssrcMap;
  58 + }
  59 +
  60 + public ConcurrentHashMap<String, String> getStreamIdMap() {
  61 + return streamIdMap;
  62 + }
51 63 }
... ...
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
... ... @@ -34,11 +34,13 @@ public class ZLMRTPServerFactory {
34 34 if (currentStreams == null) {
35 35 currentStreams = new HashMap<>();
36 36 JSONObject jsonObject = zlmresTfulUtils.listRtpServer();
37   - JSONArray data = jsonObject.getJSONArray("data");
38   - if (data != null) {
39   - for (int i = 0; i < data.size(); i++) {
40   - JSONObject dataItem = data.getJSONObject(i);
41   - currentStreams.put(dataItem.getString("stream_id"), dataItem.getInteger("port"));
  37 + if (jsonObject != null) {
  38 + JSONArray data = jsonObject.getJSONArray("data");
  39 + if (data != null) {
  40 + for (int i = 0; i < data.size(); i++) {
  41 + JSONObject dataItem = data.getJSONObject(i);
  42 + currentStreams.put(dataItem.getString("stream_id"), dataItem.getInteger("port"));
  43 + }
42 44 }
43 45 }
44 46 }
... ... @@ -73,12 +75,12 @@ public class ZLMRTPServerFactory {
73 75 result= createRTPServer(streamId);
74 76 break;
75 77 default:
76   - logger.error("创建RTP Server 失败: " + jsonObject.getString("msg"));
  78 + logger.error("创建RTP Server 失败 {}: " + jsonObject.getString("msg"), newPort);
77 79 break;
78 80 }
79 81 }else {
80 82 // 检查ZLM状态
81   - logger.error("创建RTP Server 失败: 请检查ZLM服务");
  83 + logger.error("创建RTP Server 失败 {}: 请检查ZLM服务", newPort);
82 84 }
83 85 return result;
84 86 }
... ...
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
... ... @@ -127,7 +127,7 @@ public class ZLMRunner implements CommandLineRunner {
127 127 if (responseJSON != null && responseJSON.getInteger("code") == 0) {
128 128 logger.info("设置zlm成功");
129 129 }else {
130   - logger.info("设置zlm失败: " + responseJSON.getString("msg"));
  130 + logger.info("设置zlm失败");
131 131 }
132 132 }
133 133  
... ... @@ -155,6 +155,9 @@ public class ZLMRunner implements CommandLineRunner {
155 155 // 设置为未启用
156 156 logger.info("恢复流代理失败,请检查流地址后重新启用" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream());
157 157 streamProxyService.stop(streamProxyDto.getApp(), streamProxyDto.getStream());
  158 + }else if (jsonObject.getInteger("code") != 0){ // TODO 将错误信息存入数据库, 前端展示
  159 + logger.info("恢复流代理失败:" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream() + "[ " + JSONObject.toJSONString(jsonObject) + " ]");
  160 + streamProxyService.stop(streamProxyDto.getApp(), streamProxyDto.getStream());
158 161 }
159 162 }
160 163 }
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
... ... @@ -120,7 +120,6 @@ public class PlayServiceImpl implements IPlayService {
120 120 zlmresTfulUtils.getSnap(streamUrl, 15, 1, path, fileName);
121 121 }
122 122 }
123   - System.out.println(path);
124 123 } catch (FileNotFoundException e) {
125 124 e.printStackTrace();
126 125 }
... ...
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
1 1 package com.genersoft.iot.vmp.vmanager.gb28181.play;
2 2  
  3 +import com.alibaba.fastjson.JSONArray;
3 4 import com.genersoft.iot.vmp.common.StreamInfo;
  5 +import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
4 6 import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
5 7 import com.genersoft.iot.vmp.gb28181.bean.Device;
6 8 import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
7 9 import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
8 10 import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
9 11 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
  12 +import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
10 13 import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
11 14 import com.genersoft.iot.vmp.service.IMediaService;
12 15 import com.genersoft.iot.vmp.service.IPlayService;
... ... @@ -31,6 +34,8 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
31 34 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
32 35 import org.springframework.web.context.request.async.DeferredResult;
33 36  
  37 +import java.util.Enumeration;
  38 +import java.util.Map;
34 39 import java.util.UUID;
35 40  
36 41 import javax.sip.message.Response;
... ... @@ -47,6 +52,9 @@ public class PlayController {
47 52 private SIPCommander cmder;
48 53  
49 54 @Autowired
  55 + private VideoStreamSessionManager streamSession;
  56 +
  57 + @Autowired
50 58 private IVideoManagerStorager storager;
51 59  
52 60 @Autowired
... ... @@ -227,6 +235,20 @@ public class PlayController {
227 235 logger.debug("语音广播API调用");
228 236 }
229 237 Device device = storager.queryVideoDevice(deviceId);
  238 + DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(3 * 1000L);
  239 + if (device == null) {
  240 + resultHolder.put(DeferredResultHolder.CALLBACK_CMD_BROADCAST + deviceId, result);
  241 + RequestMessage msg = new RequestMessage();
  242 + msg.setId(DeferredResultHolder.CALLBACK_CMD_BROADCAST + deviceId);
  243 + JSONObject json = new JSONObject();
  244 + json.put("DeviceID", deviceId);
  245 + json.put("CmdType", "Broadcast");
  246 + json.put("Result", "Failed");
  247 + json.put("Description", "Device 不存在");
  248 + msg.setData(json);
  249 + resultHolder.invokeResult(msg);
  250 + return result;
  251 + }
230 252 cmder.audioBroadcastCmd(device, event -> {
231 253 Response response = event.getResponse();
232 254 RequestMessage msg = new RequestMessage();
... ... @@ -239,7 +261,7 @@ public class PlayController {
239 261 msg.setData(json);
240 262 resultHolder.invokeResult(msg);
241 263 });
242   - DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(3 * 1000L);
  264 +
243 265 result.onTimeout(() -> {
244 266 logger.warn(String.format("语音广播操作超时, 设备未返回应答指令"));
245 267 RequestMessage msg = new RequestMessage();
... ... @@ -256,5 +278,32 @@ public class PlayController {
256 278 return result;
257 279 }
258 280  
  281 + @ApiOperation("获取所有的ssrc")
  282 + @GetMapping("/ssrc")
  283 + public WVPResult<JSONObject> getSSRC() {
  284 + if (logger.isDebugEnabled()) {
  285 + logger.debug("获取所有的ssrc");
  286 + }
  287 + JSONArray objects = new JSONArray();
  288 + for(Map.Entry<String, String> entry: streamSession.getSsrcMap().entrySet()) {
  289 + System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
  290 + JSONObject jsonObject = new JSONObject();
  291 + String[] keyArray = entry.getKey().split("_");
  292 + jsonObject.put("deviceId", keyArray[0]);
  293 + jsonObject.put("channelId", keyArray[1]);
  294 + jsonObject.put("ssrc", entry.getValue());
  295 + jsonObject.put("streamId", streamSession.getStreamIdMap().get(entry.getKey()));
  296 + objects.add(jsonObject);
  297 + }
  298 + WVPResult<JSONObject> result = new WVPResult<>();
  299 + result.setCode(0);
  300 + result.setMsg("success");
  301 + JSONObject jsonObject = new JSONObject();
  302 + jsonObject.put("data", objects);
  303 + jsonObject.put("count", objects.size());
  304 + result.setData(jsonObject);
  305 + return result;
  306 + }
  307 +
259 308 }
260 309  
... ...
web_src/index.html
... ... @@ -4,10 +4,11 @@
4 4 <meta charset="utf-8">
5 5 <meta name="viewport" content="width=device-width,initial-scale=1.0">
6 6 <title>国标28181</title>
7   - <link rel="stylesheet" type="text/css" href="./static/css/font-awesome.min.css">
  7 + <link rel="stylesheet" type="text/css" href="./static/css/iconfont.css">
8 8 <link rel="stylesheet" type="text/css" href="./static/css/login.css">
9 9 </head>
10 10 <body>
  11 + <script type="text/javascript" src="./static/js/jessibuca/index.js"></script>
11 12 <script type="text/javascript" src="./static/js/EasyWasmPlayer.js"></script>
12 13 <script type="text/javascript" src="./static/js/ZLMRTCClient.js"></script>
13 14 <script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=rk73w8dv1rkE4UdZsataG68VarhYQzrx&s=1"></script>
... ...
web_src/package-lock.json
... ... @@ -1633,7 +1633,7 @@
1633 1633 "dev": true,
1634 1634 "requires": {
1635 1635 "browserslist": "1.7.7",
1636   - "caniuse-db": "1.0.30001146",
  1636 + "caniuse-db": "1.0.30001244",
1637 1637 "lodash.memoize": "4.1.2",
1638 1638 "lodash.uniq": "4.5.0"
1639 1639 },
... ... @@ -1644,16 +1644,16 @@
1644 1644 "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
1645 1645 "dev": true,
1646 1646 "requires": {
1647   - "caniuse-db": "1.0.30001146",
  1647 + "caniuse-db": "1.0.30001244",
1648 1648 "electron-to-chromium": "1.3.742"
1649 1649 }
1650 1650 }
1651 1651 }
1652 1652 },
1653 1653 "caniuse-db": {
1654   - "version": "1.0.30001146",
1655   - "resolved": "https://registry.npm.taobao.org/caniuse-db/download/caniuse-db-1.0.30001146.tgz?cache=0&sync_timestamp=1602133173904&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-db%2Fdownload%2Fcaniuse-db-1.0.30001146.tgz",
1656   - "integrity": "sha1-poOLhbXEFSLrDXsetgeHFsBQ1q4=",
  1654 + "version": "1.0.30001244",
  1655 + "resolved": "https://registry.nlark.com/caniuse-db/download/caniuse-db-1.0.30001244.tgz?cache=0&sync_timestamp=1626154539434&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-db%2Fdownload%2Fcaniuse-db-1.0.30001244.tgz",
  1656 + "integrity": "sha1-pt/zJHNkjfCwrg+Z2YeXrft89Fk=",
1657 1657 "dev": true
1658 1658 },
1659 1659 "caniuse-lite": {
... ... @@ -2241,7 +2241,7 @@
2241 2241 },
2242 2242 "css-loader": {
2243 2243 "version": "0.28.11",
2244   - "resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-0.28.11.tgz",
  2244 + "resolved": "https://registry.nlark.com/css-loader/download/css-loader-0.28.11.tgz?cache=0&sync_timestamp=1621865230592&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-loader%2Fdownload%2Fcss-loader-0.28.11.tgz",
2245 2245 "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=",
2246 2246 "dev": true,
2247 2247 "requires": {
... ... @@ -2426,7 +2426,7 @@
2426 2426 "dev": true,
2427 2427 "requires": {
2428 2428 "browserslist": "1.7.7",
2429   - "caniuse-db": "1.0.30001146",
  2429 + "caniuse-db": "1.0.30001244",
2430 2430 "normalize-range": "0.1.2",
2431 2431 "num2fraction": "1.2.2",
2432 2432 "postcss": "5.2.18",
... ... @@ -2439,7 +2439,7 @@
2439 2439 "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
2440 2440 "dev": true,
2441 2441 "requires": {
2442   - "caniuse-db": "1.0.30001146",
  2442 + "caniuse-db": "1.0.30001244",
2443 2443 "electron-to-chromium": "1.3.742"
2444 2444 }
2445 2445 },
... ... @@ -3548,6 +3548,7 @@
3548 3548 "is-string": "1.0.6",
3549 3549 "object-inspect": "1.10.3",
3550 3550 "object-keys": "1.1.1",
  3551 + "object.assign": "4.1.2",
3551 3552 "string.prototype.trimend": "1.0.4",
3552 3553 "string.prototype.trimstart": "1.0.4",
3553 3554 "unbox-primitive": "1.0.1"
... ... @@ -5463,9 +5464,9 @@
5463 5464 }
5464 5465 },
5465 5466 "math-expression-evaluator": {
5466   - "version": "1.2.22",
5467   - "resolved": "https://registry.npm.taobao.org/math-expression-evaluator/download/math-expression-evaluator-1.2.22.tgz",
5468   - "integrity": "sha1-wU3LPYtNFQ5dzqnGjI2tgDCbDV4=",
  5467 + "version": "1.3.8",
  5468 + "resolved": "https://registry.nlark.com/math-expression-evaluator/download/math-expression-evaluator-1.3.8.tgz",
  5469 + "integrity": "sha1-Mg2jsrwVEvT1D8MCCysc1cjp1Xc=",
5469 5470 "dev": true
5470 5471 },
5471 5472 "md5.js": {
... ... @@ -6161,6 +6162,18 @@
6161 6162 "isobject": "3.0.1"
6162 6163 }
6163 6164 },
  6165 + "object.assign": {
  6166 + "version": "4.1.2",
  6167 + "resolved": "https://registry.nlark.com/object.assign/download/object.assign-4.1.2.tgz",
  6168 + "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
  6169 + "dev": true,
  6170 + "requires": {
  6171 + "call-bind": "1.0.2",
  6172 + "define-properties": "1.1.3",
  6173 + "has-symbols": "1.0.2",
  6174 + "object-keys": "1.1.1"
  6175 + }
  6176 + },
6164 6177 "object.getownpropertydescriptors": {
6165 6178 "version": "2.1.2",
6166 6179 "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz",
... ... @@ -7544,7 +7557,7 @@
7544 7557 "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
7545 7558 "dev": true,
7546 7559 "requires": {
7547   - "caniuse-db": "1.0.30001146",
  7560 + "caniuse-db": "1.0.30001244",
7548 7561 "electron-to-chromium": "1.3.742"
7549 7562 }
7550 7563 },
... ... @@ -9198,7 +9211,7 @@
9198 9211 "dev": true,
9199 9212 "requires": {
9200 9213 "balanced-match": "0.4.2",
9201   - "math-expression-evaluator": "1.2.22",
  9214 + "math-expression-evaluator": "1.3.8",
9202 9215 "reduce-function-call": "1.0.3"
9203 9216 },
9204 9217 "dependencies": {
... ...
web_src/package.json
... ... @@ -36,7 +36,7 @@
36 36 "babel-preset-stage-2": "^6.22.0",
37 37 "chalk": "^2.0.1",
38 38 "copy-webpack-plugin": "^4.6.0",
39   - "css-loader": "^0.28.0",
  39 + "css-loader": "^0.28.11",
40 40 "extract-text-webpack-plugin": "^3.0.0",
41 41 "file-loader": "^1.1.4",
42 42 "friendly-errors-webpack-plugin": "^1.6.1",
... ...
web_src/src/components/channelList.vue
... ... @@ -154,7 +154,6 @@ export default {
154 154 },
155 155 currentChange: function (val) {
156 156 var url = `/${this.$router.currentRoute.name}/${this.deviceId}/${this.parentChannelId}/${this.count}/${val}`
157   - console.log(url)
158 157 this.$router.push(url).then(() => {
159 158 this.initParam();
160 159 this.initData();
... ... @@ -182,7 +181,6 @@ export default {
182 181 channelType: that.channelType
183 182 }
184 183 }).then(function (res) {
185   - console.log(res);
186 184 that.total = res.data.total;
187 185 that.deviceChannelList = res.data.list;
188 186 // 防止出现表格错位
... ... @@ -196,7 +194,6 @@ export default {
196 194  
197 195 //通知设备上传媒体流
198 196 sendDevicePush: function (itemData) {
199   - console.log(itemData);
200 197 let deviceId = this.deviceId;
201 198 this.isLoging = true;
202 199 let channelId = itemData.channelId;
... ... @@ -232,13 +229,11 @@ export default {
232 229 this.$refs.devicePlayer.openDialog("record", deviceId, channelId, {date: format})
233 230 },
234 231 stopDevicePush: function (itemData) {
235   - console.log(itemData)
236 232 var that = this;
237 233 this.$axios({
238 234 method: 'get',
239 235 url: '/api/play/stop/' + this.deviceId + "/" + itemData.channelId
240 236 }).then(function (res) {
241   - console.log(JSON.stringify(res));
242 237 that.initData();
243 238 }).catch(function (error) {
244 239 if (error.response.status === 402) { // 已经停止过
... ... @@ -273,7 +268,6 @@ export default {
273 268 })
274 269 },
275 270 changeSubchannel(itemData) {
276   - console.log(this.$router.currentRoute)
277 271 this.beforeUrl = this.$router.currentRoute.path;
278 272  
279 273 var url = `/${this.$router.currentRoute.name}/${this.$router.currentRoute.params.deviceId}/${itemData.channelId}/${this.$router.currentRoute.params.count}/1`
... ... @@ -310,13 +304,11 @@ export default {
310 304 });
311 305 },
312 306 search: function () {
313   - console.log(this.searchSrt)
314 307 this.currentPage = 1;
315 308 this.total = 0;
316 309 this.initData();
317 310 },
318 311 updateChannel: function (row) {
319   - console.log(row)
320 312 this.$axios({
321 313 method: 'post',
322 314 url: `/api/device/query/channel/update/${this.deviceId}`,
... ...
web_src/src/components/dialog/devicePlayer.vue
... ... @@ -151,7 +151,8 @@
151 151 <script>
152 152 // import player from '../dialog/rtcPlayer.vue'
153 153 // import LivePlayer from '@liveqing/liveplayer'
154   -import player from '../dialog/easyPlayer.vue'
  154 +// import player from '../dialog/easyPlayer.vue'
  155 +import player from '../dialog/jessibuca.vue'
155 156 export default {
156 157 name: 'devicePlayer',
157 158 props: {},
... ... @@ -280,7 +281,8 @@ export default {
280 281 console.log(12121212)
281 282 console.log(baseZlmApi)
282 283 // return `${baseZlmApi}/${streamInfo.app}/${streamInfo.streamId}.flv`;
283   - return `http://${baseZlmApi}/${streamInfo.app}/${streamInfo.streamId}.flv`;
  284 + // return `http://${baseZlmApi}/${streamInfo.app}/${streamInfo.streamId}.flv`;
  285 + return streamInfo.ws_flv;
284 286 },
285 287 coverPlay: function () {
286 288 var that = this;
... ...
web_src/src/components/dialog/jessibuca.vue 0 → 100644
  1 +<template>
  2 + <div id="jessibuca" style="width: auto; height: auto">
  3 + <div id="container" ref="container" style="width: 100%; height: 10rem; background-color: #000" @dblclick="fullscreenSwich">
  4 + <div class="buttons-box" id="buttonsBox">
  5 + <div class="buttons-box-left">
  6 + <i v-if="!playing" class="iconfont icon-play jessibuca-btn" @click="playBtnClick"></i>
  7 + <i v-if="playing" class="iconfont icon-pause jessibuca-btn" @click="pause"></i>
  8 + <i class="iconfont icon-stop jessibuca-btn" @click="destroy"></i>
  9 + <i v-if="isNotMute" class="iconfont icon-audio-high jessibuca-btn" @click="jessibuca.mute()"></i>
  10 + <i v-if="!isNotMute" class="iconfont icon-audio-mute jessibuca-btn" @click="jessibuca.cancelMute()"></i>
  11 + </div>
  12 + <div class="buttons-box-right">
  13 + <span class="jessibuca-btn">{{kBps}} kb/s</span>
  14 +<!-- <i class="iconfont icon-file-record1 jessibuca-btn"></i>-->
  15 +<!-- <i class="iconfont icon-xiangqing2 jessibuca-btn" ></i>-->
  16 + <i class="iconfont icon-crop2 jessibuca-btn" @click="jessibuca.screenshot('截图','png',0.5)"></i>
  17 + <i class="iconfont icon-shuaxin11 jessibuca-btn" @click="playBtnClick"></i>
  18 + <i v-if="!fullscreen" class="iconfont icon-weibiaoti10 jessibuca-btn" @click="fullscreenSwich"></i>
  19 + <i v-if="fullscreen" class="iconfont icon-weibiaoti11 jessibuca-btn" @click="fullscreenSwich"></i>
  20 + </div>
  21 + </div>
  22 +
  23 + </div>
  24 + </div>
  25 +</template>
  26 +
  27 +<script>
  28 +export default {
  29 + name: 'jessibuca',
  30 + data() {
  31 + return {
  32 + jessibuca: null,
  33 + playing: false,
  34 + isNotMute: false,
  35 + quieting: false,
  36 + fullscreen: false,
  37 + loaded: false, // mute
  38 + speed: 0,
  39 + performance: "", // 工作情况
  40 + kBps: 0,
  41 + btnDom: null,
  42 + videoInfo: null,
  43 + volume: 1,
  44 + rotate: 0,
  45 + vod: true, // 点播
  46 + forceNoOffscreen: false,
  47 + };
  48 + },
  49 + props: ['videoUrl', 'error', 'hasaudio', 'height'],
  50 + mounted () {
  51 + window.onerror = (msg) => {
  52 + // console.error(msg)
  53 + };
  54 + let paramUrl = decodeURIComponent(this.$route.params.url)
  55 + this.$nextTick(() =>{
  56 + let dom = document.getElementById("container");
  57 + dom.style.height = (9/16 ) * dom.clientWidth + "px"
  58 + if (typeof (this.videoUrl) == "undefined") {
  59 + this.videoUrl = paramUrl;
  60 + }
  61 + this.btnDom = document.getElementById("buttonsBox");
  62 + console.log("初始化时的地址为: " + this.videoUrl)
  63 + this.play(this.videoUrl)
  64 + })
  65 + },
  66 + watch:{
  67 + videoUrl(newData, oldData){
  68 + this.play(newData)
  69 + },
  70 + immediate:true
  71 + },
  72 + methods: {
  73 + create(){
  74 + let options = {};
  75 + console.log(this.$refs.container)
  76 +
  77 + this.jessibuca = new window.Jessibuca(Object.assign(
  78 + {
  79 + container: this.$refs.container,
  80 + videoBuffer: 0.5, // 最大缓冲时长,单位秒
  81 + isResize: true,
  82 + decoder: "./static/js/jessibuca/index.js",
  83 + // text: "WVP-PRO",
  84 + // background: "bg.jpg",
  85 + loadingText: "加载中",
  86 + hasAudio: this.hasAudio,
  87 + debug: false,
  88 + supportDblclickFullscreen: false, // 是否支持屏幕的双击事件,触发全屏,取消全屏事件。
  89 + operateBtns: {
  90 + fullscreen: false,
  91 + screenshot: false,
  92 + play: false,
  93 + audio: false,
  94 + },
  95 + record: "record",
  96 + vod: this.vod,
  97 + forceNoOffscreen: this.forceNoOffscreen,
  98 + isNotMute: this.isNotMute,
  99 + },
  100 + options
  101 + ));
  102 +
  103 + let _this = this;
  104 + this.jessibuca.on("load", function () {
  105 + console.log("on load init");
  106 + });
  107 +
  108 + this.jessibuca.on("log", function (msg) {
  109 + console.log("on log", msg);
  110 + });
  111 + this.jessibuca.on("record", function (msg) {
  112 + console.log("on record:", msg);
  113 + });
  114 + this.jessibuca.on("pause", function () {
  115 + _this.playing = false;
  116 + });
  117 + this.jessibuca.on("play", function () {
  118 + _this.playing = true;
  119 + });
  120 + this.jessibuca.on("fullscreen", function (msg) {
  121 + console.log("on fullscreen", msg);
  122 + _this.fullscreen = msg
  123 + });
  124 +
  125 + this.jessibuca.on("mute", function (msg) {
  126 + console.log("on mute", msg);
  127 + _this.isNotMute = !msg;
  128 + });
  129 + this.jessibuca.on("audioInfo", function (msg) {
  130 + // console.log("audioInfo", msg);
  131 + });
  132 +
  133 + this.jessibuca.on("videoInfo", function (msg) {
  134 + this.videoInfo = msg;
  135 + // console.log("videoInfo", msg);
  136 +
  137 + });
  138 +
  139 + this.jessibuca.on("bps", function (bps) {
  140 + // console.log('bps', bps);
  141 +
  142 + });
  143 + let _ts = 0;
  144 + this.jessibuca.on("timeUpdate", function (ts) {
  145 + // console.log('timeUpdate,old,new,timestamp', _ts, ts, ts - _ts);
  146 + _ts = ts;
  147 + });
  148 +
  149 + this.jessibuca.on("videoInfo", function (info) {
  150 + console.log("videoInfo", info);
  151 + });
  152 +
  153 + this.jessibuca.on("error", function (error) {
  154 + console.log("error", error);
  155 + });
  156 +
  157 + this.jessibuca.on("timeout", function () {
  158 + console.log("timeout");
  159 + });
  160 +
  161 + this.jessibuca.on('start', function () {
  162 + console.log('start');
  163 + })
  164 +
  165 + this.jessibuca.on("performance", function (performance) {
  166 + let show = "卡顿";
  167 + if (performance === 2) {
  168 + show = "非常流畅";
  169 + } else if (performance === 1) {
  170 + show = "流畅";
  171 + }
  172 + _this.performance = show;
  173 + });
  174 + this.jessibuca.on('buffer', function (buffer) {
  175 + // console.log('buffer', buffer);
  176 + })
  177 +
  178 + this.jessibuca.on('stats', function (stats) {
  179 + // console.log('stats', stats);
  180 + })
  181 +
  182 + this.jessibuca.on('kBps', function (kBps) {
  183 + _this.kBps = Math.round(kBps);
  184 + });
  185 +
  186 + // 显示时间戳 PTS
  187 + this.jessibuca.on('videoFrame', function () {
  188 +
  189 + })
  190 +
  191 + //
  192 + this.jessibuca.on('metadata', function () {
  193 +
  194 + });
  195 + },
  196 + playBtnClick: function (event){
  197 + this.play(this.videoUrl)
  198 + },
  199 + play: function (url) {
  200 + console.log(url)
  201 + if (this.jessibuca) {
  202 + this.destroy();
  203 + }
  204 + this.create();
  205 + this.jessibuca.on("play", () => {
  206 + this.playing = true;
  207 + this.loaded = true;
  208 + this.quieting = this.jessibuca.quieting;
  209 + });
  210 + if (this.jessibuca.hasLoaded()) {
  211 + this.jessibuca.play(url);
  212 + } else {
  213 + this.jessibuca.on("load", () => {
  214 + console.log("load 播放")
  215 + this.jessibuca.play(url);
  216 + });
  217 + }
  218 + },
  219 + pause: function () {
  220 + if (this.jessibuca) {
  221 + this.jessibuca.pause();
  222 + }
  223 + this.playing = false;
  224 + this.err = "";
  225 + this.performance = "";
  226 + },
  227 + destroy: function () {
  228 + if (this.jessibuca) {
  229 + this.jessibuca.destroy();
  230 + }
  231 + if (document.getElementById("buttonsBox") == null) {
  232 + document.getElementById("container").appendChild(this.btnDom)
  233 + }
  234 + this.jessibuca = null;
  235 + this.playing = false;
  236 + this.err = "";
  237 + this.performance = "";
  238 +
  239 + },
  240 + eventcallbacK: function(type, message) {
  241 + // console.log("player 事件回调")
  242 + // console.log(type)
  243 + // console.log(message)
  244 + },
  245 + fullscreenSwich: function (){
  246 + let isFull = this.isFullscreen()
  247 + this.jessibuca.setFullscreen(!isFull)
  248 + this.fullscreen = !isFull;
  249 + },
  250 + isFullscreen: function (){
  251 + return document.fullscreenElement ||
  252 + document.msFullscreenElement ||
  253 + document.mozFullScreenElement ||
  254 + document.webkitFullscreenElement || false;
  255 + }
  256 + },
  257 + destroyed() {
  258 + if (this.jessibuca) {
  259 + this.jessibuca.destroy();
  260 + }
  261 + this.playing = false;
  262 + this.loaded = false;
  263 + this.performance = "";
  264 + },
  265 +}
  266 +</script>
  267 +
  268 +<style>
  269 + .buttons-box{
  270 + width: 100%;
  271 + height: 28px;
  272 + background-color: rgba(43, 51, 63, 0.7);
  273 + position: absolute;
  274 + display: -webkit-box;
  275 + display: -ms-flexbox;
  276 + display: flex;
  277 + left: 0;
  278 + bottom: 0;
  279 + user-select: none;
  280 + z-index: 10;
  281 + }
  282 + .jessibuca-btn{
  283 + width: 20px;
  284 + color: rgb(255, 255, 255);
  285 + line-height: 27px;
  286 + margin: 0px 10px;
  287 + padding: 0px 2px;
  288 + cursor: pointer;
  289 + text-align: center;
  290 + font-size: 0.8rem !important;
  291 + }
  292 + .buttons-box-right {
  293 + position: absolute;
  294 + right: 0;
  295 + }
  296 +</style>
... ...
web_src/src/router/index.js
... ... @@ -15,7 +15,7 @@ import web from &#39;../components/setting/Web.vue&#39;
15 15 import sip from '../components/setting/Sip.vue'
16 16 import media from '../components/setting/Media.vue'
17 17  
18   -import wasmPlayer from '../components/dialog/easyPlayer.vue'
  18 +import wasmPlayer from '../components/dialog/jessibuca.vue'
19 19 import rtcPlayer from '../components/dialog/rtcPlayer.vue'
20 20  
21 21 const originalPush = VueRouter.prototype.push
... ...
web_src/static/css/font-awesome.min.css deleted 100644 → 0
1   -/*!
2   - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3   - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4   - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
web_src/static/css/iconfont.css 0 → 100644
  1 +@font-face {
  2 + font-family: "iconfont"; /* Project id 1291092 */
  3 + src: url('iconfont.woff2?t=1626163621710') format('woff2'),
  4 + url('iconfont.woff?t=1626163621710') format('woff'),
  5 + url('iconfont.ttf?t=1626163621710') format('truetype');
  6 +}
  7 +
  8 +.iconfont {
  9 + font-family: "iconfont" !important;
  10 + font-size: 16px;
  11 + font-style: normal;
  12 + -webkit-font-smoothing: antialiased;
  13 + -moz-osx-font-smoothing: grayscale;
  14 +}
  15 +
  16 +.icon-xiangqing2:before {
  17 + content: "\e798";
  18 +}
  19 +
  20 +.icon-record:before {
  21 + content: "\e7a6";
  22 +}
  23 +
  24 +.icon-audio-mute:before {
  25 + content: "\e792";
  26 +}
  27 +
  28 +.icon-audio-high:before {
  29 + content: "\e793";
  30 +}
  31 +
  32 +.icon-record1:before {
  33 + content: "\e7f8";
  34 +}
  35 +
  36 +.icon-audio-line:before {
  37 + content: "\e794";
  38 +}
  39 +
  40 +.icon-record2:before {
  41 + content: "\e795";
  42 +}
  43 +
  44 +.icon-audio-fill:before {
  45 + content: "\e796";
  46 +}
  47 +
  48 +.icon-PTZ:before {
  49 + content: "\e797";
  50 +}
  51 +
  52 +.icon-camera1196054easyiconnet:before {
  53 + content: "\e791";
  54 +}
  55 +
  56 +.icon-weibiaoti10:before {
  57 + content: "\e78f";
  58 +}
  59 +
  60 +.icon-weibiaoti11:before {
  61 + content: "\e790";
  62 +}
  63 +
  64 +.icon-page-next1:before {
  65 + content: "\e69c";
  66 +}
  67 +
  68 +.icon-page-last1:before {
  69 + content: "\e69d";
  70 +}
  71 +
  72 +.icon-ptz-down1:before {
  73 + content: "\e69e";
  74 +}
  75 +
  76 +.icon-file-search1:before {
  77 + content: "\e69f";
  78 +}
  79 +
  80 +.icon-page-first1:before {
  81 + content: "\e6a0";
  82 +}
  83 +
  84 +.icon-fork1:before {
  85 + content: "\e6a1";
  86 +}
  87 +
  88 +.icon-ptz-middle1:before {
  89 + content: "\e6a2";
  90 +}
  91 +
  92 +.icon-ptz-upright1:before {
  93 + content: "\e6a3";
  94 +}
  95 +
  96 +.icon-ptz-downleft1:before {
  97 + content: "\e6a4";
  98 +}
  99 +
  100 +.icon-window-restore1:before {
  101 + content: "\e6a5";
  102 +}
  103 +
  104 +.icon-plus1:before {
  105 + content: "\e6a6";
  106 +}
  107 +
  108 +.icon-ptz-right1:before {
  109 + content: "\e6a7";
  110 +}
  111 +
  112 +.icon-stop:before {
  113 + content: "\e6a8";
  114 +}
  115 +
  116 +.icon-refresh1:before {
  117 + content: "\e6a9";
  118 +}
  119 +
  120 +.icon-tool-polyline1:before {
  121 + content: "\e6aa";
  122 +}
  123 +
  124 +.icon-tool-point1:before {
  125 + content: "\e6ab";
  126 +}
  127 +
  128 +.icon-minus1:before {
  129 + content: "\e6ac";
  130 +}
  131 +
  132 +.icon-ptz-wiper1:before {
  133 + content: "\e6ad";
  134 +}
  135 +
  136 +.icon-tool-select1:before {
  137 + content: "\e6ae";
  138 +}
  139 +
  140 +.icon-tool-polygon1:before {
  141 + content: "\e6af";
  142 +}
  143 +
  144 +.icon-settings1:before {
  145 + content: "\e6b0";
  146 +}
  147 +
  148 +.icon-search1:before {
  149 + content: "\e6b1";
  150 +}
  151 +
  152 +.icon-ir-vis1:before {
  153 + content: "\e6b2";
  154 +}
  155 +
  156 +.icon-ptz-light1:before {
  157 + content: "\e6b3";
  158 +}
  159 +
  160 +.icon-ptz-up1:before {
  161 + content: "\e6b4";
  162 +}
  163 +
  164 +.icon-ptz-upleft1:before {
  165 + content: "\e6b5";
  166 +}
  167 +
  168 +.icon-temp-stream1:before {
  169 + content: "\e6b6";
  170 +}
  171 +
  172 +.icon-tool-mouse1:before {
  173 + content: "\e6b7";
  174 +}
  175 +
  176 +.icon-zhongyingwenyingwen-01:before {
  177 + content: "\e6b8";
  178 +}
  179 +
  180 +.icon-zhongyingwenyingwen02-01:before {
  181 + content: "\e6b9";
  182 +}
  183 +
  184 +.icon-crop2:before {
  185 + content: "\e6ba";
  186 +}
  187 +
  188 +.icon-expander-down2:before {
  189 + content: "\e6bb";
  190 +}
  191 +
  192 +.icon-window-restore2:before {
  193 + content: "\e6bc";
  194 +}
  195 +
  196 +.icon-file-jpg2:before {
  197 + content: "\e6bd";
  198 +}
  199 +
  200 +.icon-asterisk3:before {
  201 + content: "\e6be";
  202 +}
  203 +
  204 +.icon-ffc2:before {
  205 + content: "\e6bf";
  206 +}
  207 +
  208 +.icon-file-record2:before {
  209 + content: "\e6c0";
  210 +}
  211 +
  212 +.icon-file-stream2:before {
  213 + content: "\e6c1";
  214 +}
  215 +
  216 +.icon-fork2:before {
  217 + content: "\e6c2";
  218 +}
  219 +
  220 +.icon-file-mp42:before {
  221 + content: "\e6c3";
  222 +}
  223 +
  224 +.icon-ir-vis2:before {
  225 + content: "\e6c4";
  226 +}
  227 +
  228 +.icon-file-search2:before {
  229 + content: "\e6c5";
  230 +}
  231 +
  232 +.icon-pause:before {
  233 + content: "\e6c6";
  234 +}
  235 +
  236 +.icon-play1:before {
  237 + content: "\e6c7";
  238 +}
  239 +
  240 +.icon-page-previous2:before {
  241 + content: "\e6c8";
  242 +}
  243 +
  244 +.icon-page-next2:before {
  245 + content: "\e6c9";
  246 +}
  247 +
  248 +.icon-minus2:before {
  249 + content: "\e6ca";
  250 +}
  251 +
  252 +.icon-page-last2:before {
  253 + content: "\e6cb";
  254 +}
  255 +
  256 +.icon-page-first2:before {
  257 + content: "\e6cc";
  258 +}
  259 +
  260 +.icon-ptz-downleft2:before {
  261 + content: "\e6cd";
  262 +}
  263 +
  264 +.icon-ptz-downright2:before {
  265 + content: "\e6ce";
  266 +}
  267 +
  268 +.icon-ptz-middle2:before {
  269 + content: "\e6cf";
  270 +}
  271 +
  272 +.icon-ptz-down2:before {
  273 + content: "\e6d0";
  274 +}
  275 +
  276 +.icon-plus2:before {
  277 + content: "\e6d1";
  278 +}
  279 +
  280 +.icon-ptz-left2:before {
  281 + content: "\e6d2";
  282 +}
  283 +
  284 +.icon-ptz-up2:before {
  285 + content: "\e6d3";
  286 +}
  287 +
  288 +.icon-ptz-right2:before {
  289 + content: "\e6d4";
  290 +}
  291 +
  292 +.icon-ptz-light2:before {
  293 + content: "\e6d5";
  294 +}
  295 +
  296 +.icon-ptz-wiper2:before {
  297 + content: "\e6d6";
  298 +}
  299 +
  300 +.icon-ptz-upright2:before {
  301 + content: "\e6d7";
  302 +}
  303 +
  304 +.icon-search2:before {
  305 + content: "\e6d8";
  306 +}
  307 +
  308 +.icon-refresh2:before {
  309 + content: "\e6d9";
  310 +}
  311 +
  312 +.icon-ptz-upleft2:before {
  313 + content: "\e6da";
  314 +}
  315 +
  316 +.icon-stop1:before {
  317 + content: "\e6db";
  318 +}
  319 +
  320 +.icon-tool-mouse2:before {
  321 + content: "\e6dc";
  322 +}
  323 +
  324 +.icon-settings2:before {
  325 + content: "\e6dd";
  326 +}
  327 +
  328 +.icon-tool-polygon2:before {
  329 + content: "\e6de";
  330 +}
  331 +
  332 +.icon-tool-point2:before {
  333 + content: "\e6df";
  334 +}
  335 +
  336 +.icon-temp-stream2:before {
  337 + content: "\e6e0";
  338 +}
  339 +
  340 +.icon-tool-polyline2:before {
  341 + content: "\e6e1";
  342 +}
  343 +
  344 +.icon-window-maximize2:before {
  345 + content: "\e6e2";
  346 +}
  347 +
  348 +.icon-window-minimize2:before {
  349 + content: "\e6e3";
  350 +}
  351 +
  352 +.icon-tool-select2:before {
  353 + content: "\e6e4";
  354 +}
  355 +
  356 +.icon-video-stream2:before {
  357 + content: "\e6e5";
  358 +}
  359 +
  360 +.icon-bianji1:before {
  361 + content: "\e6e6";
  362 +}
  363 +
  364 +.icon-caidanzhankai1:before {
  365 + content: "\e6e7";
  366 +}
  367 +
  368 +.icon-cha11:before {
  369 + content: "\e6e8";
  370 +}
  371 +
  372 +.icon-caidanshouqi1:before {
  373 + content: "\e6e9";
  374 +}
  375 +
  376 +.icon-zhongyingwen2zhongwen1:before {
  377 + content: "\e6ea";
  378 +}
  379 +
  380 +.icon-bofang011:before {
  381 + content: "\e6eb";
  382 +}
  383 +
  384 +.icon-zuo:before {
  385 + content: "\e6ec";
  386 +}
  387 +
  388 +.icon-baojing1:before {
  389 + content: "\e6ed";
  390 +}
  391 +
  392 +.icon-fuxuankuang-true1:before {
  393 + content: "\e6ee";
  394 +}
  395 +
  396 +.icon-bofang2:before {
  397 + content: "\e6ef";
  398 +}
  399 +
  400 +.icon-baojingshezhi1:before {
  401 + content: "\e6f0";
  402 +}
  403 +
  404 +.icon-jiahao2:before {
  405 + content: "\e6f1";
  406 +}
  407 +
  408 +.icon-huifangxuanzhong1:before {
  409 + content: "\e6f2";
  410 +}
  411 +
  412 +.icon-cewen1:before {
  413 + content: "\e6f3";
  414 +}
  415 +
  416 +.icon-baojingjilu2:before {
  417 + content: "\e6f4";
  418 +}
  419 +
  420 +.icon-danxuan1:before {
  421 + content: "\e6f5";
  422 +}
  423 +
  424 +.icon-pingmufenge1:before {
  425 + content: "\e6f6";
  426 +}
  427 +
  428 +.icon-luxiangguanli1:before {
  429 + content: "\e6f7";
  430 +}
  431 +
  432 +.icon-goukuang:before {
  433 + content: "\e6f8";
  434 +}
  435 +
  436 +.icon-shanchu11:before {
  437 + content: "\e6f9";
  438 +}
  439 +
  440 +.icon-cha02:before {
  441 + content: "\e6fa";
  442 +}
  443 +
  444 +.icon-huifang1:before {
  445 + content: "\e6fb";
  446 +}
  447 +
  448 +.icon-rili1:before {
  449 + content: "\e6fc";
  450 +}
  451 +
  452 +.icon-quanping1:before {
  453 + content: "\e6fd";
  454 +}
  455 +
  456 +.icon-jianhao1:before {
  457 + content: "\e6fe";
  458 +}
  459 +
  460 +.icon-shijian1:before {
  461 + content: "\e6ff";
  462 +}
  463 +
  464 +.icon-shishiyulanxuanzhong1:before {
  465 + content: "\e700";
  466 +}
  467 +
  468 +.icon-shouji1:before {
  469 + content: "\e701";
  470 +}
  471 +
  472 +.icon-shouyexuanzhong1:before {
  473 + content: "\e702";
  474 +}
  475 +
  476 +.icon-luxiang01:before {
  477 + content: "\e703";
  478 +}
  479 +
  480 +.icon-shishiyulan:before {
  481 + content: "\e704";
  482 +}
  483 +
  484 +.icon-quxiao:before {
  485 + content: "\e601";
  486 +}
  487 +
  488 +.icon-sousuo1:before {
  489 + content: "\e705";
  490 +}
  491 +
  492 +.icon-file-record:before {
  493 + content: "\e602";
  494 +}
  495 +
  496 +.icon-shebeiguanli1:before {
  497 + content: "\e706";
  498 +}
  499 +
  500 +.icon-play:before {
  501 + content: "\e603";
  502 +}
  503 +
  504 +.icon-suo1:before {
  505 + content: "\e707";
  506 +}
  507 +
  508 +.icon-file-stream:before {
  509 + content: "\e604";
  510 +}
  511 +
  512 +.icon-tuichudenglu1:before {
  513 + content: "\e708";
  514 +}
  515 +
  516 +.icon-ptz-middle:before {
  517 + content: "\e606";
  518 +}
  519 +
  520 +.icon-wenhao1:before {
  521 + content: "\e709";
  522 +}
  523 +
  524 +.icon-minus:before {
  525 + content: "\e607";
  526 +}
  527 +
  528 +.icon-shezhixuanzhong:before {
  529 + content: "\e70a";
  530 +}
  531 +
  532 +.icon-fork:before {
  533 + content: "\e608";
  534 +}
  535 +
  536 +.icon-shezhiweixuanzhong1:before {
  537 + content: "\e70b";
  538 +}
  539 +
  540 +.icon-ptz-up:before {
  541 + content: "\e609";
  542 +}
  543 +
  544 +.icon-shuju2:before {
  545 + content: "\e70c";
  546 +}
  547 +
  548 +.icon-file-jpg:before {
  549 + content: "\e60a";
  550 +}
  551 +
  552 +.icon-xiazai011:before {
  553 + content: "\e70d";
  554 +}
  555 +
  556 +.icon-ptz-left:before {
  557 + content: "\e60b";
  558 +}
  559 +
  560 +.icon-xiala11:before {
  561 + content: "\e70e";
  562 +}
  563 +
  564 +.icon-ptz-down:before {
  565 + content: "\e60c";
  566 +}
  567 +
  568 +.icon-shuaxin:before {
  569 + content: "\e70f";
  570 +}
  571 +
  572 +.icon-file-search:before {
  573 + content: "\e60d";
  574 +}
  575 +
  576 +.icon-pingmufenge01:before {
  577 + content: "\e710";
  578 +}
  579 +
  580 +.icon-crop:before {
  581 + content: "\e60e";
  582 +}
  583 +
  584 +.icon-yonghu1:before {
  585 + content: "\e711";
  586 +}
  587 +
  588 +.icon-asterisk:before {
  589 + content: "\e60f";
  590 +}
  591 +
  592 +.icon-wenhao01:before {
  593 + content: "\e712";
  594 +}
  595 +
  596 +.icon-expander-down:before {
  597 + content: "\e610";
  598 +}
  599 +
  600 +.icon-you:before {
  601 + content: "\e713";
  602 +}
  603 +
  604 +.icon-ptz-right:before {
  605 + content: "\e611";
  606 +}
  607 +
  608 +.icon-shujuxuanzhong1:before {
  609 + content: "\e714";
  610 +}
  611 +
  612 +.icon-ptz-wiper:before {
  613 + content: "\e612";
  614 +}
  615 +
  616 +.icon-kuangxuan1:before {
  617 + content: "\e715";
  618 +}
  619 +
  620 +.icon-ir-vis:before {
  621 + content: "\e613";
  622 +}
  623 +
  624 +.icon-yonghuguanli1:before {
  625 + content: "\e716";
  626 +}
  627 +
  628 +.icon-ptz-upleft:before {
  629 + content: "\e614";
  630 +}
  631 +
  632 +.icon-zhongyingwenyingwen:before {
  633 + content: "\e717";
  634 +}
  635 +
  636 +.icon-ptz-downright:before {
  637 + content: "\e615";
  638 +}
  639 +
  640 +.icon-xiala2:before {
  641 + content: "\e718";
  642 +}
  643 +
  644 +.icon-search:before {
  645 + content: "\e616";
  646 +}
  647 +
  648 +.icon-luxiang:before {
  649 + content: "\e719";
  650 +}
  651 +
  652 +.icon-ptz-upright:before {
  653 + content: "\e617";
  654 +}
  655 +
  656 +.icon-zanting2:before {
  657 + content: "\e71a";
  658 +}
  659 +
  660 +.icon-ptz-downleft:before {
  661 + content: "\e618";
  662 +}
  663 +
  664 +.icon-kefu:before {
  665 + content: "\e71b";
  666 +}
  667 +
  668 +.icon-tool-point:before {
  669 + content: "\e619";
  670 +}
  671 +
  672 +.icon-jiqiren:before {
  673 + content: "\e71c";
  674 +}
  675 +
  676 +.icon-ptz-light:before {
  677 + content: "\e61a";
  678 +}
  679 +
  680 +.icon-huanliuzhan:before {
  681 + content: "\e71d";
  682 +}
  683 +
  684 +.icon-tool-polyline:before {
  685 + content: "\e61b";
  686 +}
  687 +
  688 +.icon-shouji2:before {
  689 + content: "\e71e";
  690 +}
  691 +
  692 +.icon-file-mp4:before {
  693 + content: "\e61c";
  694 +}
  695 +
  696 +.icon-cangku:before {
  697 + content: "\e71f";
  698 +}
  699 +
  700 +.icon-window-maximize:before {
  701 + content: "\e61d";
  702 +}
  703 +
  704 +.icon-shuaxin11:before {
  705 + content: "\e720";
  706 +}
  707 +
  708 +.icon-page-next:before {
  709 + content: "\e61e";
  710 +}
  711 +
  712 +.icon-weixiu:before {
  713 + content: "\e721";
  714 +}
  715 +
  716 +.icon-ffc:before {
  717 + content: "\e61f";
  718 +}
  719 +
  720 +.icon-biandianzhan:before {
  721 + content: "\e722";
  722 +}
  723 +
  724 +.icon-tool-mouse:before {
  725 + content: "\e620";
  726 +}
  727 +
  728 +.icon-youxiang:before {
  729 + content: "\e723";
  730 +}
  731 +
  732 +.icon-settings:before {
  733 + content: "\e621";
  734 +}
  735 +
  736 +.icon-qq:before {
  737 + content: "\e724";
  738 +}
  739 +
  740 +.icon-page-last:before {
  741 + content: "\e622";
  742 +}
  743 +
  744 +.icon-dianhua01:before {
  745 + content: "\e725";
  746 +}
  747 +
  748 +.icon-window-restore:before {
  749 + content: "\e624";
  750 +}
  751 +
  752 +.icon-fasongyoujian:before {
  753 + content: "\e726";
  754 +}
  755 +
  756 +.icon-tool-select:before {
  757 + content: "\e625";
  758 +}
  759 +
  760 +.icon-gaotieyunhangcopy:before {
  761 + content: "\e727";
  762 +}
  763 +
  764 +.icon-video-stream:before {
  765 + content: "\e627";
  766 +}
  767 +
  768 +.icon-dizhi:before {
  769 + content: "\e728";
  770 +}
  771 +
  772 +.icon-page-first:before {
  773 + content: "\e628";
  774 +}
  775 +
  776 +.icon-anfangbaojingmian:before {
  777 + content: "\e729";
  778 +}
  779 +
  780 +.icon-page-previous:before {
  781 + content: "\e629";
  782 +}
  783 +
  784 +.icon-piliangcaozuo1:before {
  785 + content: "\e72a";
  786 +}
  787 +
  788 +.icon-refresh:before {
  789 + content: "\e62a";
  790 +}
  791 +
  792 +.icon-qiyeguanli1:before {
  793 + content: "\e72b";
  794 +}
  795 +
  796 +.icon-temp-stream:before {
  797 + content: "\e62b";
  798 +}
  799 +
  800 +.icon-luxiangguanli2:before {
  801 + content: "\e72c";
  802 +}
  803 +
  804 +.icon-tool-polygon:before {
  805 + content: "\e62c";
  806 +}
  807 +
  808 +.icon-quanxianguanli1:before {
  809 + content: "\e72d";
  810 +}
  811 +
  812 +.icon-window-minimize:before {
  813 + content: "\e62d";
  814 +}
  815 +
  816 +.icon-shezhi1:before {
  817 + content: "\e72e";
  818 +}
  819 +
  820 +.icon-plus:before {
  821 + content: "\e62e";
  822 +}
  823 +
  824 +.icon-shishi1:before {
  825 + content: "\e72f";
  826 +}
  827 +
  828 +.icon-qiyeguanli:before {
  829 + content: "\e62f";
  830 +}
  831 +
  832 +.icon-shujuquanxian1:before {
  833 + content: "\e730";
  834 +}
  835 +
  836 +.icon-quanxianguanli:before {
  837 + content: "\e630";
  838 +}
  839 +
  840 +.icon-shishiyulanxuanzhong2:before {
  841 + content: "\e731";
  842 +}
  843 +
  844 +.icon-shujuquanxian:before {
  845 + content: "\e631";
  846 +}
  847 +
  848 +.icon-renzheng:before {
  849 + content: "\e732";
  850 +}
  851 +
  852 +.icon--_baojinglianxiren:before {
  853 + content: "\e632";
  854 +}
  855 +
  856 +.icon-shuju3:before {
  857 + content: "\e733";
  858 +}
  859 +
  860 +.icon-yuechi:before {
  861 + content: "\e633";
  862 +}
  863 +
  864 +.icon-shouye1:before {
  865 + content: "\e734";
  866 +}
  867 +
  868 +.icon-xitongguanli:before {
  869 + content: "\e634";
  870 +}
  871 +
  872 +.icon-zuzhi1:before {
  873 + content: "\e735";
  874 +}
  875 +
  876 +.icon-zuzhi:before {
  877 + content: "\e635";
  878 +}
  879 +
  880 +.icon-zuzhiguanli1:before {
  881 + content: "\e736";
  882 +}
  883 +
  884 +.icon-renzheng6:before {
  885 + content: "\e636";
  886 +}
  887 +
  888 +.icon-xitongguanli1:before {
  889 + content: "\e737";
  890 +}
  891 +
  892 +.icon-yonghuguanli01:before {
  893 + content: "\e637";
  894 +}
  895 +
  896 +.icon-yuechi1:before {
  897 + content: "\e738";
  898 +}
  899 +
  900 +.icon-baojingmoban:before {
  901 + content: "\e638";
  902 +}
  903 +
  904 +.icon-baojinglianxiren:before {
  905 + content: "\e739";
  906 +}
  907 +
  908 +.icon-zuzhiguanli:before {
  909 + content: "\e639";
  910 +}
  911 +
  912 +.icon-baojingjilu3:before {
  913 + content: "\e73a";
  914 +}
  915 +
  916 +.icon-yonghuguanli:before {
  917 + content: "\e63a";
  918 +}
  919 +
  920 +.icon-huifangxuanzhong2:before {
  921 + content: "\e73b";
  922 +}
  923 +
  924 +.icon-bumenguanli:before {
  925 + content: "\e63b";
  926 +}
  927 +
  928 +.icon-caiwu1:before {
  929 + content: "\e73c";
  930 +}
  931 +
  932 +.icon-shishi:before {
  933 + content: "\e63c";
  934 +}
  935 +
  936 +.icon-baojingguize1:before {
  937 + content: "\e73d";
  938 +}
  939 +
  940 +.icon-baojing:before {
  941 + content: "\e63d";
  942 +}
  943 +
  944 +.icon-bumenguanli1:before {
  945 + content: "\e73e";
  946 +}
  947 +
  948 +.icon-shezhi:before {
  949 + content: "\e63e";
  950 +}
  951 +
  952 +.icon-baojing2:before {
  953 + content: "\e73f";
  954 +}
  955 +
  956 +.icon-huifangxuanzhong:before {
  957 + content: "\e63f";
  958 +}
  959 +
  960 +.icon-yonghuguanli2:before {
  961 + content: "\e740";
  962 +}
  963 +
  964 +.icon-luxiangguanli:before {
  965 + content: "\e640";
  966 +}
  967 +
  968 +.icon-huifang2:before {
  969 + content: "\e741";
  970 +}
  971 +
  972 +.icon-huifang:before {
  973 + content: "\e642";
  974 +}
  975 +
  976 +.icon-baojingmoban1:before {
  977 + content: "\e742";
  978 +}
  979 +
  980 +.icon-shouye:before {
  981 + content: "\e643";
  982 +}
  983 +
  984 +.icon-dingdanxiangqing1:before {
  985 + content: "\e743";
  986 +}
  987 +
  988 +.icon-shishiyulanxuanzhong:before {
  989 + content: "\e644";
  990 +}
  991 +
  992 +.icon-fapiaoguanli1:before {
  993 + content: "\e744";
  994 +}
  995 +
  996 +.icon-caiwu:before {
  997 + content: "\e645";
  998 +}
  999 +
  1000 +.icon-shiyonggaikuang1:before {
  1001 + content: "\e745";
  1002 +}
  1003 +
  1004 +.icon-baojingjilu:before {
  1005 + content: "\e646";
  1006 +}
  1007 +
  1008 +.icon-zengzhifuwu1:before {
  1009 + content: "\e746";
  1010 +}
  1011 +
  1012 +.icon-baojingguize:before {
  1013 + content: "\e647";
  1014 +}
  1015 +
  1016 +.icon-yiguanzhu:before {
  1017 + content: "\e747";
  1018 +}
  1019 +
  1020 +.icon-shuju:before {
  1021 + content: "\e648";
  1022 +}
  1023 +
  1024 +.icon-baojingtuisongshezhi1:before {
  1025 + content: "\e748";
  1026 +}
  1027 +
  1028 +.icon-piliangcaozuo:before {
  1029 + content: "\e649";
  1030 +}
  1031 +
  1032 +.icon-quxiao1:before {
  1033 + content: "\e749";
  1034 +}
  1035 +
  1036 +.icon-suo:before {
  1037 + content: "\e64a";
  1038 +}
  1039 +
  1040 +.icon-xiangqing1:before {
  1041 + content: "\e74a";
  1042 +}
  1043 +
  1044 +.icon-yonghu:before {
  1045 + content: "\e64b";
  1046 +}
  1047 +
  1048 +.icon-xufei1:before {
  1049 + content: "\e74b";
  1050 +}
  1051 +
  1052 +.icon-shouji:before {
  1053 + content: "\e64c";
  1054 +}
  1055 +
  1056 +.icon-zhifu1:before {
  1057 + content: "\e74c";
  1058 +}
  1059 +
  1060 +.icon-tianjiadian:before {
  1061 + content: "\e64d";
  1062 +}
  1063 +
  1064 +.icon-kuang:before {
  1065 + content: "\e74d";
  1066 +}
  1067 +
  1068 +.icon-tianjiaxian:before {
  1069 + content: "\e64e";
  1070 +}
  1071 +
  1072 +.icon-shouzhimingxi:before {
  1073 + content: "\e74e";
  1074 +}
  1075 +
  1076 +.icon-tianjiaxuanqu:before {
  1077 + content: "\e64f";
  1078 +}
  1079 +
  1080 +.icon-shouzhimingxi1:before {
  1081 + content: "\e74f";
  1082 +}
  1083 +
  1084 +.icon-xuanzeduixiang:before {
  1085 + content: "\e650";
  1086 +}
  1087 +
  1088 +.icon-daochu:before {
  1089 + content: "\e750";
  1090 +}
  1091 +
  1092 +.icon-baojing01:before {
  1093 + content: "\e651";
  1094 +}
  1095 +
  1096 +.icon-daochu1:before {
  1097 + content: "\e751";
  1098 +}
  1099 +
  1100 +.icon-baojingjilu1:before {
  1101 + content: "\e652";
  1102 +}
  1103 +
  1104 +.icon-daping:before {
  1105 + content: "\e752";
  1106 +}
  1107 +
  1108 +.icon-baojingshezhi:before {
  1109 + content: "\e653";
  1110 +}
  1111 +
  1112 +.icon-shaixuan:before {
  1113 + content: "\e753";
  1114 +}
  1115 +
  1116 +.icon-cewen:before {
  1117 + content: "\e654";
  1118 +}
  1119 +
  1120 +.icon-zhifu2:before {
  1121 + content: "\e754";
  1122 +}
  1123 +
  1124 +.icon-tuichudenglu:before {
  1125 + content: "\e655";
  1126 +}
  1127 +
  1128 +.icon-shaixuan1:before {
  1129 + content: "\e755";
  1130 +}
  1131 +
  1132 +.icon-shezhiweixuanzhong:before {
  1133 + content: "\e656";
  1134 +}
  1135 +
  1136 +.icon-zhifu3:before {
  1137 + content: "\e756";
  1138 +}
  1139 +
  1140 +.icon-shezhixuanzhong1:before {
  1141 + content: "\e657";
  1142 +}
  1143 +
  1144 +.icon-xia:before {
  1145 + content: "\e757";
  1146 +}
  1147 +
  1148 +.icon-shouyexuanzhong:before {
  1149 + content: "\e658";
  1150 +}
  1151 +
  1152 +.icon-xia1:before {
  1153 + content: "\e758";
  1154 +}
  1155 +
  1156 +.icon-shujuxuanzhong:before {
  1157 + content: "\e659";
  1158 +}
  1159 +
  1160 +.icon-yanzhengma:before {
  1161 + content: "\e759";
  1162 +}
  1163 +
  1164 +.icon-shuju1:before {
  1165 + content: "\e65a";
  1166 +}
  1167 +
  1168 +.icon-tongxunlu:before {
  1169 + content: "\e75a";
  1170 +}
  1171 +
  1172 +.icon-bianji:before {
  1173 + content: "\e65b";
  1174 +}
  1175 +
  1176 +.icon-yanzhengma1:before {
  1177 + content: "\e75b";
  1178 +}
  1179 +
  1180 +.icon-rili:before {
  1181 + content: "\e65c";
  1182 +}
  1183 +
  1184 +.icon-tongxunlu1:before {
  1185 + content: "\e75c";
  1186 +}
  1187 +
  1188 +.icon-shanchu:before {
  1189 + content: "\e65d";
  1190 +}
  1191 +
  1192 +.icon-yingyongbangding:before {
  1193 + content: "\e75d";
  1194 +}
  1195 +
  1196 +.icon-jiahao:before {
  1197 + content: "\e65e";
  1198 +}
  1199 +
  1200 +.icon-yingyongbangding1:before {
  1201 + content: "\e75e";
  1202 +}
  1203 +
  1204 +.icon-wenhao:before {
  1205 + content: "\e65f";
  1206 +}
  1207 +
  1208 +.icon-yingyongbangding2:before {
  1209 + content: "\e75f";
  1210 +}
  1211 +
  1212 +.icon-zhongyingwen:before {
  1213 + content: "\e660";
  1214 +}
  1215 +
  1216 +.icon-dapingzhanshi:before {
  1217 + content: "\e760";
  1218 +}
  1219 +
  1220 +.icon-kuangxuan:before {
  1221 + content: "\e661";
  1222 +}
  1223 +
  1224 +.icon-jiankong:before {
  1225 + content: "\e761";
  1226 +}
  1227 +
  1228 +.icon-cha1:before {
  1229 + content: "\e662";
  1230 +}
  1231 +
  1232 +.icon-touxiang:before {
  1233 + content: "\e762";
  1234 +}
  1235 +
  1236 +.icon-bofang01:before {
  1237 + content: "\e663";
  1238 +}
  1239 +
  1240 +.icon-lou:before {
  1241 + content: "\e763";
  1242 +}
  1243 +
  1244 +.icon-caidanzhankai:before {
  1245 + content: "\e664";
  1246 +}
  1247 +
  1248 +.icon-jiankong1:before {
  1249 + content: "\e764";
  1250 +}
  1251 +
  1252 +.icon-caidanshouqi:before {
  1253 + content: "\e665";
  1254 +}
  1255 +
  1256 +.icon-lou1:before {
  1257 + content: "\e765";
  1258 +}
  1259 +
  1260 +.icon-danxuan:before {
  1261 + content: "\e666";
  1262 +}
  1263 +
  1264 +.icon-dapingzhanshi1:before {
  1265 + content: "\e766";
  1266 +}
  1267 +
  1268 +.icon-fuxuankuangxuanzhong:before {
  1269 + content: "\e667";
  1270 +}
  1271 +
  1272 +.icon-touxiang1:before {
  1273 + content: "\e767";
  1274 +}
  1275 +
  1276 +.icon-fuxuankuang-true:before {
  1277 + content: "\e668";
  1278 +}
  1279 +
  1280 +.icon-shebei:before {
  1281 + content: "\e768";
  1282 +}
  1283 +
  1284 +.icon-jianhao:before {
  1285 + content: "\e669";
  1286 +}
  1287 +
  1288 +.icon-shebeii:before {
  1289 + content: "\e769";
  1290 +}
  1291 +
  1292 +.icon-shanchu1:before {
  1293 + content: "\e66a";
  1294 +}
  1295 +
  1296 +.icon-bianji11:before {
  1297 + content: "\e76a";
  1298 +}
  1299 +
  1300 +.icon-shijian:before {
  1301 + content: "\e66b";
  1302 +}
  1303 +
  1304 +.icon-jilu:before {
  1305 + content: "\e76b";
  1306 +}
  1307 +
  1308 +.icon-jiahao1:before {
  1309 + content: "\e66c";
  1310 +}
  1311 +
  1312 +.icon-yun:before {
  1313 + content: "\e76c";
  1314 +}
  1315 +
  1316 +.icon-sousuo:before {
  1317 + content: "\e66d";
  1318 +}
  1319 +
  1320 +.icon-baojing3:before {
  1321 + content: "\e76d";
  1322 +}
  1323 +
  1324 +.icon-zhongyingwen2zhongwen:before {
  1325 + content: "\e66e";
  1326 +}
  1327 +
  1328 +.icon-zhinengyangan:before {
  1329 + content: "\e76e";
  1330 +}
  1331 +
  1332 +.icon-xiala:before {
  1333 + content: "\e66f";
  1334 +}
  1335 +
  1336 +.icon-yongdiananquan:before {
  1337 + content: "\e76f";
  1338 +}
  1339 +
  1340 +.icon-xiala1:before {
  1341 + content: "\e670";
  1342 +}
  1343 +
  1344 +.icon-zhinengmensuo:before {
  1345 + content: "\e770";
  1346 +}
  1347 +
  1348 +.icon-xiazai01:before {
  1349 + content: "\e671";
  1350 +}
  1351 +
  1352 +.icon-xiaokongyujing:before {
  1353 + content: "\e771";
  1354 +}
  1355 +
  1356 +.icon-pingmufenge02:before {
  1357 + content: "\e672";
  1358 +}
  1359 +
  1360 +.icon-zhinengdianbiao:before {
  1361 + content: "\e772";
  1362 +}
  1363 +
  1364 +.icon-shezhi01:before {
  1365 + content: "\e673";
  1366 +}
  1367 +
  1368 +.icon-zhinengshuibiao:before {
  1369 + content: "\e773";
  1370 +}
  1371 +
  1372 +.icon-zuixiaohuaxi:before {
  1373 + content: "\e674";
  1374 +}
  1375 +
  1376 +.icon-shuiyajiance01:before {
  1377 + content: "\e774";
  1378 +}
  1379 +
  1380 +.icon-zuidahuaxi:before {
  1381 + content: "\e675";
  1382 +}
  1383 +
  1384 +.icon-zhinengzhaoming:before {
  1385 + content: "\e775";
  1386 +}
  1387 +
  1388 +.icon-huifuxi:before {
  1389 + content: "\e676";
  1390 +}
  1391 +
  1392 +.icon-zhinengmenjin:before {
  1393 + content: "\e776";
  1394 +}
  1395 +
  1396 +.icon-guanbixi:before {
  1397 + content: "\e677";
  1398 +}
  1399 +
  1400 +.icon-tingchechang:before {
  1401 + content: "\e777";
  1402 +}
  1403 +
  1404 +.icon-baocunJPG:before {
  1405 + content: "\e678";
  1406 +}
  1407 +
  1408 +.icon-xiala3:before {
  1409 + content: "\e778";
  1410 +}
  1411 +
  1412 +.icon-quxian:before {
  1413 + content: "\e679";
  1414 +}
  1415 +
  1416 +.icon-zhinengkongtiao:before {
  1417 + content: "\e779";
  1418 +}
  1419 +
  1420 +.icon-tingzhiyulan:before {
  1421 + content: "\e67a";
  1422 +}
  1423 +
  1424 +.icon-sousuo2:before {
  1425 + content: "\e77a";
  1426 +}
  1427 +
  1428 +.icon-wenduliuluzhi:before {
  1429 + content: "\e67b";
  1430 +}
  1431 +
  1432 +.icon-shang1:before {
  1433 + content: "\e77b";
  1434 +}
  1435 +
  1436 +.icon-shuaxin1:before {
  1437 + content: "\e67c";
  1438 +}
  1439 +
  1440 +.icon-1_jingdianchuwuweixuanzhong:before {
  1441 + content: "\e77c";
  1442 +}
  1443 +
  1444 +.icon-shangjiantou:before {
  1445 + content: "\e67d";
  1446 +}
  1447 +
  1448 +.icon-dianti:before {
  1449 + content: "\e77d";
  1450 +}
  1451 +
  1452 +.icon-shang:before {
  1453 + content: "\e67e";
  1454 +}
  1455 +
  1456 +.icon-zhuangtai:before {
  1457 + content: "\e77e";
  1458 +}
  1459 +
  1460 +.icon-zixun:before {
  1461 + content: "\e67f";
  1462 +}
  1463 +
  1464 +.icon-keshi:before {
  1465 + content: "\e77f";
  1466 +}
  1467 +
  1468 +.icon-youxiang01:before {
  1469 + content: "\e680";
  1470 +}
  1471 +
  1472 +.icon-chongzhijilu:before {
  1473 + content: "\e780";
  1474 +}
  1475 +
  1476 +.icon-QQ:before {
  1477 + content: "\e681";
  1478 +}
  1479 +
  1480 +.icon-jingshi:before {
  1481 + content: "\e781";
  1482 +}
  1483 +
  1484 +.icon-dianhua:before {
  1485 + content: "\e682";
  1486 +}
  1487 +
  1488 +.icon-bianji2:before {
  1489 + content: "\e782";
  1490 +}
  1491 +
  1492 +.icon-pingmufenge:before {
  1493 + content: "\e683";
  1494 +}
  1495 +
  1496 +.icon-fuzhi:before {
  1497 + content: "\e783";
  1498 +}
  1499 +
  1500 +.icon-gou:before {
  1501 + content: "\e684";
  1502 +}
  1503 +
  1504 +.icon-guanyu:before {
  1505 + content: "\e784";
  1506 +}
  1507 +
  1508 +.icon-dingdanxiangqing:before {
  1509 + content: "\e685";
  1510 +}
  1511 +
  1512 +.icon-shishiyulan-01:before {
  1513 + content: "\e785";
  1514 +}
  1515 +
  1516 +.icon-shiyonggaikuang:before {
  1517 + content: "\e686";
  1518 +}
  1519 +
  1520 +.icon-shujuchakan:before {
  1521 + content: "\e786";
  1522 +}
  1523 +
  1524 +.icon-fapiaoguanli:before {
  1525 + content: "\e687";
  1526 +}
  1527 +
  1528 +.icon-shanchu2:before {
  1529 + content: "\e787";
  1530 +}
  1531 +
  1532 +.icon-xiangqing:before {
  1533 + content: "\e688";
  1534 +}
  1535 +
  1536 +.icon-xitongpeizhi:before {
  1537 + content: "\e788";
  1538 +}
  1539 +
  1540 +.icon-baojingtuisongshezhi:before {
  1541 + content: "\e689";
  1542 +}
  1543 +
  1544 +.icon-tezhengwendu:before {
  1545 + content: "\e789";
  1546 +}
  1547 +
  1548 +.icon-zhifu:before {
  1549 + content: "\e68a";
  1550 +}
  1551 +
  1552 +.icon-quanzhenwendu:before {
  1553 + content: "\e78a";
  1554 +}
  1555 +
  1556 +.icon-zengzhifuwu:before {
  1557 + content: "\e68b";
  1558 +}
  1559 +
  1560 +.icon-fenxiang:before {
  1561 + content: "\e78b";
  1562 +}
  1563 +
  1564 +.icon-xufei:before {
  1565 + content: "\e68c";
  1566 +}
  1567 +
  1568 +.icon-fenxiang01:before {
  1569 + content: "\e78c";
  1570 +}
  1571 +
  1572 +.icon-asterisk1:before {
  1573 + content: "\e68d";
  1574 +}
  1575 +
  1576 +.icon-wenhao2:before {
  1577 + content: "\e78d";
  1578 +}
  1579 +
  1580 +.icon-window-maximize1:before {
  1581 + content: "\e68e";
  1582 +}
  1583 +
  1584 +.icon-dian:before {
  1585 + content: "\e78e";
  1586 +}
  1587 +
  1588 +.icon-crop1:before {
  1589 + content: "\e68f";
  1590 +}
  1591 +
  1592 +.icon-asterisk2:before {
  1593 + content: "\e690";
  1594 +}
  1595 +
  1596 +.icon-file-record1:before {
  1597 + content: "\e691";
  1598 +}
  1599 +
  1600 +.icon-ffc1:before {
  1601 + content: "\e692";
  1602 +}
  1603 +
  1604 +.icon-file-mp41:before {
  1605 + content: "\e693";
  1606 +}
  1607 +
  1608 +.icon-window-minimize1:before {
  1609 + content: "\e694";
  1610 +}
  1611 +
  1612 +.icon-ptz-downright1:before {
  1613 + content: "\e695";
  1614 +}
  1615 +
  1616 +.icon-video-stream1:before {
  1617 + content: "\e696";
  1618 +}
  1619 +
  1620 +.icon-file-jpg1:before {
  1621 + content: "\e697";
  1622 +}
  1623 +
  1624 +.icon-file-stream1:before {
  1625 + content: "\e698";
  1626 +}
  1627 +
  1628 +.icon-page-previous1:before {
  1629 + content: "\e699";
  1630 +}
  1631 +
  1632 +.icon-expander-down1:before {
  1633 + content: "\e69a";
  1634 +}
  1635 +
  1636 +.icon-ptz-left1:before {
  1637 + content: "\e69b";
  1638 +}
  1639 +
  1640 +.icon-yinpinwenjian1:before {
  1641 + content: "\e623";
  1642 +}
  1643 +
  1644 +.icon-yinpinwenjian2:before {
  1645 + content: "\e626";
  1646 +}
  1647 +
  1648 +.icon-xiazaiyinpinwenjian:before {
  1649 + content: "\e605";
  1650 +}
  1651 +
  1652 +.icon-yinpinwenjian:before {
  1653 + content: "\e641";
  1654 +}
  1655 +
... ...
web_src/static/css/iconfont.woff2 0 → 100644
No preview for this file type
web_src/static/css/login.css deleted 100755 → 0
1   -
2   -
3   -
4   -
5   -/*//////////////////////////////////////////////////////////////////
6   -[ FONT ]*/
7   -
8   -@font-face {
9   - font-family: Poppins-Regular;
10   - src: url('../fonts/poppins/Poppins-Regular.ttf');
11   -}
12   -
13   -@font-face {
14   - font-family: Poppins-Medium;
15   - src: url('../fonts/poppins/Poppins-Medium.ttf');
16   -}
17   -
18   -@font-face {
19   - font-family: Poppins-Bold;
20   - src: url('../fonts/poppins/Poppins-Bold.ttf');
21   -}
22   -
23   -@font-face {
24   - font-family: Poppins-SemiBold;
25   - src: url('../fonts/poppins/Poppins-SemiBold.ttf');
26   -}
27   -
28   -.limiter {
29   - width: 100%;
30   - margin: 0 auto;
31   - font-family: Poppins-Regular, sans-serif;
32   -
33   -}
34   -
35   -.container-login100 {
36   - width: 100%;
37   - min-height: 100vh;
38   - display: -webkit-box;
39   - display: -webkit-flex;
40   - display: -moz-box;
41   - display: -ms-flexbox;
42   - display: flex;
43   - flex-wrap: wrap;
44   - justify-content: center;
45   - align-items: center;
46   - background: #f2f2f2;
47   -}
48   -
49   -.wrap-login100 {
50   - background: #fff;
51   - border-radius: 10px;
52   - overflow: hidden;
53   - padding: 77px 55px 33px 55px;
54   -
55   - box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1);
56   - -moz-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1);
57   - -webkit-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1);
58   - -o-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1);
59   - -ms-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1);
60   -}
61   -
62   -
63   -/*------------------------------------------------------------------
64   -[ Form ]*/
65   -
66   -.login100-form {
67   - width: 100%;
68   -}
69   -
70   -.login100-form-title {
71   - display: block;
72   - font-family: Poppins-Bold;
73   - font-size: 30px;
74   - color: #333333;
75   - line-height: 1.2;
76   - text-align: center;
77   -
78   -}
79   -.login100-form-title i {
80   - font-size: 60px;
81   -}
82   -
83   -/*------------------------------------------------------------------
84   -[ Input ]*/
85   -
86   -.wrap-input100 {
87   - width: 100%;
88   - position: relative;
89   - border-bottom: 2px solid #adadad;
90   - margin-bottom: 37px;
91   -}
92   -
93   -.input100 {
94   - font-family: Poppins-Regular;
95   - font-size: 15px;
96   - color: #555555;
97   - line-height: 1.2;
98   -
99   - display: block;
100   - width: 100%;
101   - height: 45px;
102   - background: transparent;
103   - padding: 0 5px;
104   - outline: none;
105   - border: none;
106   -}
107   -.input100::-webkit-input-placeholder { color: #adadad;}
108   -.input100:-moz-placeholder { color: #adadad;}
109   -.input100::-moz-placeholder { color: #adadad;}
110   -.input100:-ms-input-placeholder { color: #adadad;}
111   -
112   -/*---------------------------------------------*/
113   -.focus-input100 {
114   - position: absolute;
115   - display: block;
116   - width: 100%;
117   - height: 100%;
118   - top: 0;
119   - left: 0;
120   - pointer-events: none;
121   - color:transparent;
122   -}
123   -
124   -.focus-input100::before {
125   - content: "";
126   - display: block;
127   - position: absolute;
128   - bottom: -2px;
129   - left: 0;
130   - width: 0;
131   - height: 2px;
132   -
133   - -webkit-transition: all 0.4s;
134   - -o-transition: all 0.4s;
135   - -moz-transition: all 0.4s;
136   - transition: all 0.4s;
137   -
138   - background: #6a7dfe;
139   - background: -webkit-linear-gradient(left, #21d4fd, #b721ff);
140   - background: -o-linear-gradient(left, #21d4fd, #b721ff);
141   - background: -moz-linear-gradient(left, #21d4fd, #b721ff);
142   - background: linear-gradient(left, #21d4fd, #b721ff);
143   -}
144   -
145   -.focus-input100::after {
146   - font-family: Poppins-Regular;
147   - font-size: 15px;
148   - color: #999999;
149   - line-height: 1.2;
150   -
151   - content: attr(data-placeholder);
152   - display: block;
153   - width: 100%;
154   - position: absolute;
155   - top: 16px;
156   - left: 0px;
157   - padding-left: 5px;
158   -
159   - -webkit-transition: all 0.4s;
160   - -o-transition: all 0.4s;
161   - -moz-transition: all 0.4s;
162   - transition: all 0.4s;
163   -}
164   -
165   -.input100:focus + .focus-input100::after {
166   - top: -15px;
167   -}
168   -
169   -.input100:focus + .focus-input100::before {
170   - width: 100%;
171   -}
172   -
173   -.has-val.input100 + .focus-input100::after {
174   - top: -15px;
175   -}
176   -
177   -.has-val.input100 + .focus-input100::before {
178   - width: 100%;
179   -}
180   -
181   -/*---------------------------------------------*/
182   -.btn-show-pass {
183   - font-size: 15px;
184   - color: #999999;
185   -
186   - display: -webkit-box;
187   - display: -webkit-flex;
188   - display: -moz-box;
189   - display: -ms-flexbox;
190   - display: flex;
191   - align-items: center;
192   - position: absolute;
193   - height: 100%;
194   - top: 0;
195   - right: 0;
196   - padding-right: 5px;
197   - cursor: pointer;
198   - -webkit-transition: all 0.4s;
199   - -o-transition: all 0.4s;
200   - -moz-transition: all 0.4s;
201   - transition: all 0.4s;
202   -}
203   -
204   -.btn-show-pass:hover {
205   - color: #6a7dfe;
206   - color: -webkit-linear-gradient(left, #21d4fd, #b721ff);
207   - color: -o-linear-gradient(left, #21d4fd, #b721ff);
208   - color: -moz-linear-gradient(left, #21d4fd, #b721ff);
209   - color: linear-gradient(left, #21d4fd, #b721ff);
210   -}
211   -
212   -.btn-show-pass.active {
213   - color: #6a7dfe;
214   - color: -webkit-linear-gradient(left, #21d4fd, #b721ff);
215   - color: -o-linear-gradient(left, #21d4fd, #b721ff);
216   - color: -moz-linear-gradient(left, #21d4fd, #b721ff);
217   - color: linear-gradient(left, #21d4fd, #b721ff);
218   -}
219   -
220   -
221   -
222   -/*------------------------------------------------------------------
223   -[ Button ]*/
224   -.container-login100-form-btn {
225   - display: -webkit-box;
226   - display: -webkit-flex;
227   - display: -moz-box;
228   - display: -ms-flexbox;
229   - display: flex;
230   - flex-wrap: wrap;
231   - justify-content: center;
232   - padding-top: 13px;
233   -}
234   -
235   -.wrap-login100-form-btn {
236   - width: 100%;
237   - display: block;
238   - position: relative;
239   - z-index: 1;
240   - border-radius: 25px;
241   - overflow: hidden;
242   - margin: 0 auto;
243   -}
244   -
245   -.login100-form-bgbtn {
246   - position: absolute;
247   - z-index: -1;
248   - width: 300%;
249   - height: 100%;
250   - background: #a64bf4;
251   - background: -webkit-linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff);
252   - background: -o-linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff);
253   - background: -moz-linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff);
254   - background: linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff);
255   - top: 0;
256   - left: -100%;
257   -
258   - -webkit-transition: all 0.4s;
259   - -o-transition: all 0.4s;
260   - -moz-transition: all 0.4s;
261   - transition: all 0.4s;
262   -}
263   -
264   -.login100-form-btn {
265   - font-family: Poppins-Medium;
266   - font-size: 15px;
267   - color: #fff;
268   - line-height: 1.2;
269   - text-transform: uppercase;
270   -
271   - display: -webkit-box;
272   - display: -webkit-flex;
273   - display: -moz-box;
274   - display: -ms-flexbox;
275   - display: flex;
276   - justify-content: center;
277   - align-items: center;
278   - padding: 0 20px;
279   - width: 100%;
280   - height: 50px;
281   - outline: none !important;
282   - border: none;
283   - background: transparent;
284   -}
285   -
286   -.login100-form-btn:hover {
287   - cursor: pointer;
288   -}
289   -
290   -.wrap-login100-form-btn:hover .login100-form-bgbtn {
291   - left: 0;
292   -}
293   -
294   -
295   -/*------------------------------------------------------------------
296   -[ Responsive ]*/
297   -
298   -@media (max-width: 576px) {
299   - .wrap-login100 {
300   - padding: 77px 15px 33px 15px;
301   - }
302   -}
303   -
304   -
305   -
306   -/*------------------------------------------------------------------
307   -[ Alert validate ]*/
308   -
309   -.validate-input {
310   - position: relative;
311   -}
312   -
313   -.alert-validate::before {
314   - content: attr(data-validate);
315   - position: absolute;
316   - max-width: 70%;
317   - background-color: #fff;
318   - border: 1px solid #c80000;
319   - border-radius: 2px;
320   - padding: 4px 25px 4px 10px;
321   - top: 50%;
322   - -webkit-transform: translateY(-50%);
323   - -moz-transform: translateY(-50%);
324   - -ms-transform: translateY(-50%);
325   - -o-transform: translateY(-50%);
326   - transform: translateY(-50%);
327   - right: 0px;
328   - pointer-events: none;
329   -
330   - font-family: Poppins-Regular;
331   - color: #c80000;
332   - font-size: 13px;
333   - line-height: 1.4;
334   - text-align: left;
335   -
336   - visibility: hidden;
337   - opacity: 0;
338   -
339   - -webkit-transition: opacity 0.4s;
340   - -o-transition: opacity 0.4s;
341   - -moz-transition: opacity 0.4s;
342   - transition: opacity 0.4s;
343   -}
344   -
345   -.alert-validate::after {
346   - content: "\f06a";
347   - font-family: FontAwesome;
348   - font-size: 16px;
349   - color: #c80000;
350   -
351   - display: block;
352   - position: absolute;
353   - background-color: #fff;
354   - top: 50%;
355   - -webkit-transform: translateY(-50%);
356   - -moz-transform: translateY(-50%);
357   - -ms-transform: translateY(-50%);
358   - -o-transform: translateY(-50%);
359   - transform: translateY(-50%);
360   - right: 5px;
361   -}
362   -
363   -.alert-validate:hover:before {
364   - visibility: visible;
365   - opacity: 1;
366   -}
367   -
368   -@media (max-width: 992px) {
369   - .alert-validate::before {
370   - visibility: visible;
371   - opacity: 1;
372   - }
373   -}
374   -
375   -/** util **/
376   -.p-b-26 {padding-bottom: 26px;}
377   -.p-b-48 {padding-bottom: 48px;}
378   -.p-t-115 {padding-top: 115px;}
379   -
380   -/**font**/
381   -/* .zmdi {
382   - display: inline-block;
383   - font: normal normal normal 14px/1 'Material-Design-Iconic-Font';
384   - font-size: 14px;
385   - font-size: inherit;
386   - text-rendering: auto;
387   - -webkit-font-smoothing: antialiased;
388   - -moz-osx-font-smoothing: grayscale;
389   -}
390   -.zmdi-font::before {
391   - content: '\f16a';
392   -}
393   -.login100-form-title i {
394   - font-size: 60px;
395   -} */
396   -
web_src/static/js/jessibuca/ff.js 0 → 100644
  1 +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=true;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_PTHREAD=Module["ENVIRONMENT_IS_PTHREAD"]||false;if(ENVIRONMENT_IS_PTHREAD){buffer=Module["buffer"]}var _scriptDir=typeof document!=="undefined"&&document.currentScript?document.currentScript.src:undefined;if(ENVIRONMENT_IS_WORKER){_scriptDir=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var str="";while(!(idx>=endIdx)){var u0=heap[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function UTF16ToString(ptr,maxBytesToRead){var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite<str.length*2?maxBytesToWrite/2:str.length;for(var i=0;i<numCharsToWrite;++i){var codeUnit=str.charCodeAt(i);HEAP16[outPtr>>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343)++i;len+=4}return len}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||67108864;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module["wasmMemory"];buffer=Module["buffer"]}else{if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":INITIAL_MEMORY/65536,"shared":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)")}throw Error("bad memory")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___wasm_call_ctors()}});if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,"addRunDependency cannot be used in a pthread worker");runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error("Pthread aborting at "+(new Error).stack);what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var wasmBinaryFile="ff.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["da"];wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){removeRunDependency("wasm-instantiate")}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}function receiveInstantiatedSource(output){receiveInstance(output["instance"],output["module"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;var ASM_CONSTS={155132:function(){throw"Canceled!"},155395:function($0,$1){setTimeout(function(){__emscripten_do_dispatch_to_thread($0,$1)},0)}};function initPthreadsJS(){PThread.initRuntime()}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};function _emscripten_futex_wake(addr,count){if(addr<=0||addr>HEAP8.length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(HEAP32,__emscripten_main_thread_futex>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(HEAP32,__emscripten_main_thread_futex>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(HEAP32,addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}Module["_emscripten_futex_wake"]=_emscripten_futex_wake;function killThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in killThread!";HEAP32[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function cancelThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cancelThread!";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({"cmd":"cancel"})}function cleanupThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cleanupThread!";HEAP32[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];if(pthread){var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={unusedWorkers:[],runningWorkers:[],initMainThreadBlock:function(){},initRuntime:function(){var tb=_malloc(228);for(var i=0;i<228/4;++i)HEAPU32[tb/4+i]=0;HEAP32[tb+12>>2]=tb;var headPtr=tb+152;HEAP32[headPtr>>2]=headPtr;var tlsMemory=_malloc(512);for(var i=0;i<128;++i)HEAPU32[tlsMemory/4+i]=0;Atomics.store(HEAPU32,tb+100>>2,tlsMemory);Atomics.store(HEAPU32,tb+40>>2,tb);__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(tb)},initWorker:function(){},pthreads:{},threadExitHandlers:[],setThreadStatus:function(){},runExitHandlers:function(){while(PThread.threadExitHandlers.length>0){PThread.threadExitHandlers.pop()()}if(ENVIRONMENT_IS_PTHREAD&&_pthread_self())___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(HEAPU32,tb+4>>2,exitCode);Atomics.store(HEAPU32,tb+0>>2,1);Atomics.store(HEAPU32,tb+56>>2,1);Atomics.store(HEAPU32,tb+60>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__emscripten_thread_init(0,0,0);if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exit"})}}},threadCancel:function(){PThread.runExitHandlers();var tb=_pthread_self();Atomics.store(HEAPU32,tb+4>>2,-1);Atomics.store(HEAPU32,tb+0>>2,1);_emscripten_futex_wake(tb+0,2147483647);__emscripten_thread_init(0,0,0);postMessage({"cmd":"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i<PThread.unusedWorkers.length;++i){var worker=PThread.unusedWorkers[i];worker.terminate()}PThread.unusedWorkers=[];for(var i=0;i<PThread.runningWorkers.length;++i){var worker=PThread.runningWorkers[i];var pthread=worker.pthread;PThread.freeThreadData(pthread);worker.terminate()}PThread.runningWorkers=[]},freeThreadData:function(pthread){if(!pthread)return;if(pthread.threadInfoStruct){var tlsMemory=HEAP32[pthread.threadInfoStruct+100>>2];HEAP32[pthread.threadInfoStruct+100>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){PThread.runWithoutMainThreadQueuedCalls(function(){delete PThread.pthreads[worker.pthread.threadInfoStruct];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined})},runWithoutMainThreadQueuedCalls:function(func){HEAP32[__emscripten_allow_main_runtime_queued_calls>>2]=0;try{func()}finally{HEAP32[__emscripten_allow_main_runtime_queued_calls>>2]=1}},receiveObjectTransfer:function(data){},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e["data"];var cmd=d["cmd"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d["transferList"])}else{console.error('Internal error! Worker sent a message "'+cmd+'" to target pthread '+d["targetThread"]+", but that thread no longer exists!")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd==="processQueuedMainThreadWork"){_emscripten_main_thread_process_queued_calls()}else if(cmd==="spawnThread"){spawnThread(e.data)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd==="print"){out("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="printErr"){err("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="alert"){alert("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="exit"){var detached=worker.pthread&&Atomics.load(HEAPU32,worker.pthread.threadInfoStruct+64>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd==="exitProcess"){try{exit(d["returnCode"])}catch(e){if(e instanceof ExitStatus)return;throw e}}else if(cmd==="cancelDone"){PThread.returnWorkerToPool(worker)}else if(cmd==="objectTransfer"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target==="setimmediate"){worker.postMessage(e.data)}else{err("worker sent an unknown command "+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err("pthread sent an error! "+e.filename+":"+e.lineno+": "+e.message)};worker.postMessage({"cmd":"load","urlOrBlob":Module["mainScriptUrlOrBlob"]||_scriptDir,"wasmMemory":wasmMemory,"wasmModule":wasmModule})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile("ff.worker.js");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}if(PThread.unusedWorkers.length>0)return PThread.unusedWorkers.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()<t){}}};function establishStackSpace(stackTop,stackMax){_emscripten_stack_set_limits(stackTop,stackMax);stackRestore(stackTop)}Module["establishStackSpace"]=establishStackSpace;function getNoExitRuntime(){return noExitRuntime}Module["getNoExitRuntime"]=getNoExitRuntime;function invokeEntryPoint(ptr,arg){return wasmTable.get(ptr)(arg)}Module["invokeEntryPoint"]=invokeEntryPoint;function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return"(no stack trace available)"}}return error.stack.toString()}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var _emscripten_get_now;if(ENVIRONMENT_IS_PTHREAD){_emscripten_get_now=function(){return performance.now()-Module["__performance_now_clock_drift"]}}else _emscripten_get_now=function(){return performance.now()};function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,address,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,fd,cmd,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,path,flags,varargs);SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i])}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;dependentTypes.forEach(function(dt,i){if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(function(){typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options){options=options||{};if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(function(cb){cb()})}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.indexOf("j")!=-1){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i<arguments.length;i++){argCache[i]=arguments[i]}return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.indexOf("j")!=-1){return getDynCaller(signature,rawFunction)}return wasmTable.get(rawFunction)}var fp=makeDynCaller();if(typeof fp!=="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i<count;i++){array.push(HEAP32[(firstElement>>2)+i])}return array}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);var args=[rawConstructor];var destructors=[];whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+" called with "+arguments.length+" arguments, expected "+(argCount-1))}destructors.length=0;args.length=argCount;for(var i=1;i<argCount;++i){args[i]=argTypes[i]["toWireType"](destructors,arguments[i-1])}var ptr=invoker.apply(null,args);runDestructors(destructors);return argTypes[0]["fromWireType"](ptr)};return[]});return[]})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){needsDestructorStack=true;break}}var returns=argTypes[0].name!=="void";var argsList="";var argsListWired="";for(var i=0;i<argCount-2;++i){argsList+=(i!==0?", ":"")+"arg"+i;argsListWired+=(i!==0?", ":"")+"arg"+i+"Wired"}var invokerFnBody="return function "+makeLegalFunctionName(humanName)+"("+argsList+") {\n"+"if (arguments.length !== "+(argCount-2)+") {\n"+"throwBindingError('function "+humanName+" called with ' + arguments.length + ' arguments, expected "+(argCount-2)+" args!');\n"+"}\n";if(needsDestructorStack){invokerFnBody+="var destructors = [];\n"}var dtorStack=needsDestructorStack?"destructors":"null";var args1=["throwBindingError","invoker","fn","runDestructors","retType","classParam"];var args2=[throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,argTypes[0],argTypes[1]];if(isClassMethodFunc){invokerFnBody+="var thisWired = classParam.toWireType("+dtorStack+", this);\n"}for(var i=0;i<argCount-2;++i){invokerFnBody+="var arg"+i+"Wired = argType"+i+".toWireType("+dtorStack+", arg"+i+"); // "+argTypes[i+2].name+"\n";args1.push("argType"+i);args2.push(argTypes[i+2])}if(isClassMethodFunc){argsListWired="thisWired"+(argsListWired.length>0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){var paramName=i===1?"thisWired":"arg"+(i-2)+"Wired";if(argTypes[i].destructorFunction!==null){invokerFnBody+=paramName+"_dtor("+paramName+"); // "+argTypes[i].name+"\n";args1.push(paramName+"_dtor");args2.push(argTypes[i].destructorFunction)}}}if(returns){invokerFnBody+="var ret = retType.fromWireType(rv);\n"+"return ret;\n"}else{}invokerFnBody+="}\n";args1.push(invokerFnBody);var invokerFunction=new_(Function,args1).apply(null,args2);return invokerFunction}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=function(v){throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){++count}}return count}function get_first_emval(){for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){return emval_handle_array[i]}}return null}function init_emval(){Module["count_emval_handles"]=count_emval_handles;Module["get_first_emval"]=get_first_emval}function __emval_register(value){switch(value){case undefined:{return 1}case null:{return 2}case true:{return 3}case false:{return 4}default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv},"toWireType":function(destructors,value){return __emval_register(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<<bitshift>>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(value<minRange||value>maxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAPU8[value+4+i])}str=a.join("")}_free(value);return str},"toWireType":function(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value)}var getLength;var valueIsOfTypeString=typeof value==="string";if(!(valueIsOfTypeString||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Int8Array)){throwBindingError("Cannot pass non-string to std::string")}if(stdStringIsUTF8&&valueIsOfTypeString){getLength=function(){return lengthBytesUTF8(value)}}else{getLength=function(){return value.length}}var length=getLength();var ptr=_malloc(4+length+1);HEAPU32[ptr>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i<length;++i){HEAPU8[ptr+4+i]=value[i]}}}if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=function(){return HEAPU16};shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=function(){return HEAPU32};shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emscripten_notify_thread_queue(targetThreadId,mainThreadId){if(targetThreadId==mainThreadId){postMessage({"cmd":"processQueuedMainThreadWork"})}else if(ENVIRONMENT_IS_PTHREAD){postMessage({"targetThread":targetThreadId,"cmd":"processThreadQueue"})}else{var pthread=PThread.pthreads[targetThreadId];var worker=pthread&&pthread.worker;if(!worker){return}worker.postMessage({"cmd":"processThreadQueue"})}return 1}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAP32[(argTypes>>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i<argCount-1;++i){argsList+=(i!==0?", ":"")+"arg"+i;params.push("argType"+i);args.push(types[1+i])}var functionName=makeLegalFunctionName("methodCaller_"+signatureName);var functionBody="return function "+functionName+"(handle, name, destructors, args) {\n";var offset=0;for(var i=0;i<argCount-1;++i){functionBody+=" var arg"+i+" = argType"+i+".readValueFromPointer(args"+(offset?"+"+offset:"")+");\n";offset+=types[i+1]["argPackAdvance"]}functionBody+=" var rv = handle[name]("+argsList+");\n";for(var i=0;i<argCount-1;++i){if(types[i+1]["deleteObject"]){functionBody+=" argType"+i+".deleteObject(arg"+i+");\n"}}if(!retType.isVoid){functionBody+=" return retType.toWireType(destructors, rv);\n"}functionBody+="};\n";params.push(functionBody);var invokerFunction=new_(Function,params).apply(null,args);return __emval_addMethodCaller(invokerFunction)}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1}}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){abort()}function _clock(){if(_clock.start===undefined)_clock.start=Date.now();return(Date.now()-_clock.start)*(1e6/1e3)|0}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_check_blocking_allowed(){if(ENVIRONMENT_IS_WORKER)return;warnOnce("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>HEAP8.length||addr&3!=0)return-28;if(!ENVIRONMENT_IS_WEB){var ret=Atomics.wait(HEAP32,addr>>2,val,timeout);if(ret==="timed-out")return-73;if(ret==="not-equal")return-6;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{if(Atomics.load(HEAP32,addr>>2)!=val){return-6}var tNow=performance.now();var tEnd=tNow+timeout;var lastAddr=Atomics.exchange(HEAP32,__emscripten_main_thread_futex>>2,addr);while(1){tNow=performance.now();if(tNow>tEnd){lastAddr=Atomics.exchange(HEAP32,__emscripten_main_thread_futex>>2,0);return-73}lastAddr=Atomics.exchange(HEAP32,__emscripten_main_thread_futex>>2,0);if(lastAddr==0){break}_emscripten_main_thread_process_queued_calls();if(Atomics.load(HEAP32,addr>>2)!=val){return-6}lastAddr=Atomics.exchange(HEAP32,__emscripten_main_thread_futex>>2,addr)}return 0}}function reallyNegative(x){return x<0||x===0&&1/x===-Infinity}function convertI32PairToI53(lo,hi){return(lo>>>0)+hi*4294967296}function convertU32PairToI53(lo,hi){return(lo>>>0)+(hi>>>0)*4294967296}function reSign(value,bits){if(value<=0){return value}var half=bits<=32?Math.abs(1<<bits-1):Math.pow(2,bits-1);if(value>=half&&(bits<=32||value>half)){value=-2*half+value}return value}function unSign(value,bits){if(value>=0){return value}return bits<=32?2*Math.abs(1<<bits-1)+value:Math.pow(2,bits)+value}function formatString(format,varargs){var textIndex=format;var argIndex=varargs;function prepVararg(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){ptr+=4}}else{}return ptr}function getNextArg(type){var ret;argIndex=prepVararg(argIndex,type);if(type==="double"){ret=HEAPF64[argIndex>>3];argIndex+=8}else if(type=="i64"){ret=[HEAP32[argIndex>>2],HEAP32[argIndex+4>>2]];argIndex+=8}else{type="i32";ret=HEAP32[argIndex>>2];argIndex+=4}return ret}var ret=[];var curr,next,currArg;while(1){var startTextIndex=textIndex;curr=HEAP8[textIndex>>0];if(curr===0)break;next=HEAP8[textIndex+1>>0];if(curr==37){var flagAlwaysSigned=false;var flagLeftAlign=false;var flagAlternative=false;var flagZeroPad=false;var flagPadSign=false;flagsLoop:while(1){switch(next){case 43:flagAlwaysSigned=true;break;case 45:flagLeftAlign=true;break;case 35:flagAlternative=true;break;case 48:if(flagZeroPad){break flagsLoop}else{flagZeroPad=true;break}case 32:flagPadSign=true;break;default:break flagsLoop}textIndex++;next=HEAP8[textIndex+1>>0]}var width=0;if(next==42){width=getNextArg("i32");textIndex++;next=HEAP8[textIndex+1>>0]}else{while(next>=48&&next<=57){width=width*10+(next-48);textIndex++;next=HEAP8[textIndex+1>>0]}}var precisionSet=false,precision=-1;if(next==46){precision=0;precisionSet=true;textIndex++;next=HEAP8[textIndex+1>>0];if(next==42){precision=getNextArg("i32");textIndex++}else{while(1){var precisionChr=HEAP8[textIndex+1>>0];if(precisionChr<48||precisionChr>57)break;precision=precision*10+(precisionChr-48);textIndex++}}next=HEAP8[textIndex+1>>0]}if(precision<0){precision=6;precisionSet=false}var argSize;switch(String.fromCharCode(next)){case"h":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==104){textIndex++;argSize=1}else{argSize=2}break;case"l":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==108){textIndex++;argSize=8}else{argSize=4}break;case"L":case"q":case"j":argSize=8;break;case"z":case"t":case"I":argSize=4;break;default:argSize=null}if(argSize)textIndex++;next=HEAP8[textIndex+1>>0];switch(String.fromCharCode(next)){case"d":case"i":case"u":case"o":case"x":case"X":case"p":{var signed=next==100||next==105;argSize=argSize||4;currArg=getNextArg("i"+argSize*8);var argText;if(argSize==8){currArg=next==117?convertU32PairToI53(currArg[0],currArg[1]):convertI32PairToI53(currArg[0],currArg[1])}if(argSize<=4){var limit=Math.pow(256,argSize)-1;currArg=(signed?reSign:unSign)(currArg&limit,argSize*8)}var currAbsArg=Math.abs(currArg);var prefix="";if(next==100||next==105){argText=reSign(currArg,8*argSize,1).toString(10)}else if(next==117){argText=unSign(currArg,8*argSize,1).toString(10);currArg=Math.abs(currArg)}else if(next==111){argText=(flagAlternative?"0":"")+currAbsArg.toString(8)}else if(next==120||next==88){prefix=flagAlternative&&currArg!=0?"0x":"";if(currArg<0){currArg=-currArg;argText=(currAbsArg-1).toString(16);var buffer=[];for(var i=0;i<argText.length;i++){buffer.push((15-parseInt(argText[i],16)).toString(16))}argText=buffer.join("");while(argText.length<argSize*2)argText="f"+argText}else{argText=currAbsArg.toString(16)}if(next==88){prefix=prefix.toUpperCase();argText=argText.toUpperCase()}}else if(next==112){if(currAbsArg===0){argText="(nil)"}else{prefix="0x";argText=currAbsArg.toString(16)}}if(precisionSet){while(argText.length<precision){argText="0"+argText}}if(currArg>=0){if(flagAlwaysSigned){prefix="+"+prefix}else if(flagPadSign){prefix=" "+prefix}}if(argText.charAt(0)=="-"){prefix="-"+prefix;argText=argText.substr(1)}while(prefix.length+argText.length<width){if(flagLeftAlign){argText+=" "}else{if(flagZeroPad){argText="0"+argText}else{prefix=" "+prefix}}}argText=prefix+argText;argText.split("").forEach(function(chr){ret.push(chr.charCodeAt(0))});break}case"f":case"F":case"e":case"E":case"g":case"G":{currArg=getNextArg("double");var argText;if(isNaN(currArg)){argText="nan";flagZeroPad=false}else if(!isFinite(currArg)){argText=(currArg<0?"-":"")+"inf";flagZeroPad=false}else{var isGeneral=false;var effectivePrecision=Math.min(precision,20);if(next==103||next==71){isGeneral=true;precision=precision||1;var exponent=parseInt(currArg.toExponential(effectivePrecision).split("e")[1],10);if(precision>exponent&&exponent>=-4){next=(next==103?"f":"F").charCodeAt(0);precision-=exponent+1}else{next=(next==103?"e":"E").charCodeAt(0);precision--}effectivePrecision=Math.min(precision,20)}if(next==101||next==69){argText=currArg.toExponential(effectivePrecision);if(/[eE][-+]\d$/.test(argText)){argText=argText.slice(0,-1)+"0"+argText.slice(-1)}}else if(next==102||next==70){argText=currArg.toFixed(effectivePrecision);if(currArg===0&&reallyNegative(currArg)){argText="-"+argText}}var parts=argText.split("e");if(isGeneral&&!flagAlternative){while(parts[0].length>1&&parts[0].indexOf(".")!=-1&&(parts[0].slice(-1)=="0"||parts[0].slice(-1)==".")){parts[0]=parts[0].slice(0,-1)}}else{if(flagAlternative&&argText.indexOf(".")==-1)parts[0]+=".";while(precision>effectivePrecision++)parts[0]+="0"}argText=parts[0]+(parts.length>1?"e"+parts[1]:"");if(next==69)argText=argText.toUpperCase();if(currArg>=0){if(flagAlwaysSigned){argText="+"+argText}else if(flagPadSign){argText=" "+argText}}}while(argText.length<width){if(flagLeftAlign){argText+=" "}else{if(flagZeroPad&&(argText[0]=="-"||argText[0]=="+")){argText=argText[0]+"0"+argText.slice(1)}else{argText=(flagZeroPad?"0":" ")+argText}}}if(next<97)argText=argText.toUpperCase();argText.split("").forEach(function(chr){ret.push(chr.charCodeAt(0))});break}case"s":{var arg=getNextArg("i8*");var argLength=arg?_strlen(arg):"(null)".length;if(precisionSet)argLength=Math.min(argLength,precision);if(!flagLeftAlign){while(argLength<width--){ret.push(32)}}if(arg){for(var i=0;i<argLength;i++){ret.push(HEAPU8[arg++>>0])}}else{ret=ret.concat(intArrayFromString("(null)".substr(0,argLength),true))}if(flagLeftAlign){while(argLength<width--){ret.push(32)}}break}case"c":{if(flagLeftAlign)ret.push(getNextArg("i8"));while(--width>0){ret.push(32)}if(!flagLeftAlign)ret.push(getNextArg("i8"));break}case"n":{var ptr=getNextArg("i32*");HEAP32[ptr>>2]=ret.length;break}case"%":{ret.push(curr);break}default:{for(var i=startTextIndex;i<textIndex+2;i++){ret.push(HEAP8[i>>0])}}}textIndex+=2}else{ret.push(curr);textIndex+=1}}return ret}function traverseStack(args){if(!args||!args.callee||!args.callee.name){return[null,"",""]}var funstr=args.callee.toString();var funcname=args.callee.name;var str="(";var first=true;for(var i in args){var a=args[i];if(!first){str+=", "}first=false;if(typeof a==="number"||typeof a==="string"){str+=a}else{str+="("+typeof a+")"}}str+=")";var caller=args.callee.caller;args=caller?caller.arguments:[];if(first)str="";return[args,funcname,str]}function _emscripten_get_callstack_js(flags){var callstack=jsStackTrace();var iThisFunc=callstack.lastIndexOf("_emscripten_log");var iThisFunc2=callstack.lastIndexOf("_emscripten_get_callstack");var iNextLine=callstack.indexOf("\n",Math.max(iThisFunc,iThisFunc2))+1;callstack=callstack.slice(iNextLine);if(flags&32){warnOnce("EM_LOG_DEMANGLE is deprecated; ignoring")}if(flags&8&&typeof emscripten_source_map==="undefined"){warnOnce('Source map information is not available, emscripten_log with EM_LOG_C_STACK will be ignored. Build with "--pre-js $EMSCRIPTEN/src/emscripten-source-map.min.js" linker flag to add source map loading to code.');flags^=8;flags|=16}var stack_args=null;if(flags&128){stack_args=traverseStack(arguments);while(stack_args[1].indexOf("_emscripten_")>=0)stack_args=traverseStack(stack_args[0])}var lines=callstack.split("\n");callstack="";var newFirefoxRe=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)");var firefoxRe=new RegExp("\\s*(.*?)@(.*):(.*)(:(.*))?");var chromeRe=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(var l in lines){var line=lines[l];var symbolName="";var file="";var lineno=0;var column=0;var parts=chromeRe.exec(line);if(parts&&parts.length==5){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]}else{parts=newFirefoxRe.exec(line);if(!parts)parts=firefoxRe.exec(line);if(parts&&parts.length>=4){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]|0}else{callstack+=line+"\n";continue}}var haveSourceMap=false;if(flags&8){var orig=emscripten_source_map.originalPositionFor({line:lineno,column:column});haveSourceMap=orig&&orig.source;if(haveSourceMap){if(flags&64){orig.source=orig.source.substring(orig.source.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+=" at "+symbolName+" ("+orig.source+":"+orig.line+":"+orig.column+")\n"}}if(flags&16||!haveSourceMap){if(flags&64){file=file.substring(file.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+=(haveSourceMap?" = "+symbolName:" at "+symbolName)+" ("+file+":"+lineno+":"+column+")\n"}if(flags&128&&stack_args[0]){if(stack_args[1]==symbolName&&stack_args[2].length>0){callstack=callstack.replace(/\s+$/,"");callstack+=" with values: "+stack_args[1]+stack_args[2]+"\n"}stack_args=traverseStack(stack_args[0])}}callstack=callstack.replace(/\s+$/,"");return callstack}function _emscripten_log_js(flags,str){if(flags&24){str=str.replace(/\s+$/,"");str+=(str.length>0?"\n":"")+_emscripten_get_callstack_js(flags)}if(flags&1){if(flags&4){console.error(str)}else if(flags&2){console.warn(str)}else if(flags&512){console.info(str)}else if(flags&256){console.debug(str)}else{console.log(str)}}else if(flags&6){err(str)}else{out(str)}}function _emscripten_log(flags,format,varargs){var result=formatString(format,varargs);var str=UTF8ArrayToString(result,0);_emscripten_log_js(flags,str)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var serializedNumCallArgs=numCallArgs;var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i<numCallArgs;i++){var arg=arguments[2+i];HEAPF64[b+i]=arg}var ret=_emscripten_run_in_main_runtime_thread_js(index,serializedNumCallArgs,args,sync);stackRestore(stack);return ret}var _emscripten_receive_on_main_thread_js_callArgs=[];var readAsmConstArgsArray=[];function readAsmConstArgs(sigPtr,buf){readAsmConstArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?HEAPF64[buf++>>1]:HEAP32[buf]);++buf}return readAsmConstArgsArray}function _emscripten_receive_on_main_thread_js(index,numCallArgs,args){_emscripten_receive_on_main_thread_js_callArgs.length=numCallArgs;var b=args>>3;for(var i=0;i<numCallArgs;i++){_emscripten_receive_on_main_thread_js_callArgs[i]=HEAPF64[b+i]}var isEmAsmConst=index<0;var func=!isEmAsmConst?proxiedFunctionTable[index]:ASM_CONSTS[-index-1];return func.apply(null,_emscripten_receive_on_main_thread_js_callArgs)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},queueEventHandlerOnThread_iiii:function(targetThread,eventHandlerFunc,eventTypeId,eventData,userData){var stackTop=stackSave();var varargs=stackAlloc(12);HEAP32[varargs>>2]=eventTypeId;HEAP32[varargs+4>>2]=eventData;HEAP32[varargs+8>>2]=userData;__emscripten_call_on_thread(0,targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}HEAP32[varargs>>2]=targetCanvasPtr;HEAP32[varargs+4>>2]=width;HEAP32[varargs+8>>2]=height;__emscripten_call_on_thread(0,targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!=="undefined"?document.querySelector(target):undefined);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){HEAP32[canvas.canvasSharedPtr>>2]=width;HEAP32[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=HEAP32[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);HEAP32[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var a=attributes>>2;var powerPreference=HEAP32[a+(24>>2)];var contextAttributes={"alpha":!!HEAP32[a+(0>>2)],"depth":!!HEAP32[a+(4>>2)],"stencil":!!HEAP32[a+(8>>2)],"antialias":!!HEAP32[a+(12>>2)],"premultipliedAlpha":!!HEAP32[a+(16>>2)],"preserveDrawingBuffer":!!HEAP32[a+(20>>2)],"powerPreference":__emscripten_webgl_power_preferences[powerPreference],"failIfMajorPerformanceCaveat":!!HEAP32[a+(28>>2)],majorVersion:HEAP32[a+(32>>2)],minorVersion:HEAP32[a+(36>>2)],enableExtensionsByDefault:HEAP32[a+(40>>2)],explicitSwapControl:HEAP32[a+(44>>2)],proxyContextToMainThread:HEAP32[a+(48>>2)],renderViaOffscreenBackBuffer:HEAP32[a+(52>>2)]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,__environ,environ_buf);try{var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _environ_sizes_get(penviron_count,penviron_buf_size){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,penviron_count,penviron_buf_size);try{var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,fd);try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_fdstat_get(fd,pbuf){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(7,1,fd,pbuf);try{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4;HEAP8[pbuf>>0]=type;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(8,1,fd,iov,iovcnt,pnum);try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(9,1,fd,offset_low,offset_high,whence,newOffset);try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(10,1,fd,iov,iovcnt,pnum);try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}function _tzset(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(11,1);if(_tzset.called)return;_tzset.called=true;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAP32[__get_timezone()>>2]=stdTimezoneOffset*60;HEAP32[__get_daylight()>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset<winterOffset){HEAP32[__get_tzname()>>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _pthread_cleanup_pop(execute){var routine=PThread.threadExitHandlers.pop();if(execute)routine()}function _pthread_cleanup_push(routine,arg){PThread.threadExitHandlers.push(function(){wasmTable.get(routine)(arg)})}function spawnThread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var worker=PThread.getNewWorker();if(worker.pthread!==undefined)throw"Internal error!";if(!threadParams.pthread_ptr)throw"Internal error, no pthread ptr!";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){HEAP32[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(HEAPU32,tis+(64>>2),threadParams.detached);Atomics.store(HEAPU32,tis+(100>>2),tlsMemory);Atomics.store(HEAPU32,tis+(40>>2),pthread.threadInfoStruct);Atomics.store(HEAPU32,tis+(80>>2),threadParams.stackSize);Atomics.store(HEAPU32,tis+(76>>2),stackHigh);Atomics.store(HEAPU32,tis+(104>>2),threadParams.stackSize);Atomics.store(HEAPU32,tis+(104+8>>2),stackHigh);Atomics.store(HEAPU32,tis+(104+12>>2),threadParams.detached);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(HEAPU32,tis+(172>>2),global_locale);worker.pthread=pthread;var msg={"cmd":"run","start_routine":threadParams.startRoutine,"arg":threadParams.arg,"threadInfoStruct":threadParams.pthread_ptr,"stackBase":threadParams.stackBase,"stackSize":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 6}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;if(attr&&attr!=-1){stackSize=HEAP32[attr>>2];stackSize+=81920;stackBase=HEAP32[attr+8>>2];detached=HEAP32[attr+12>>2]!==0}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(228);for(var i=0;i<228>>2;++i)HEAPU32[(threadInfoStruct>>2)+i]=0;HEAP32[pthread_ptr>>2]=threadInfoStruct;HEAP32[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+152;HEAP32[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList)}else{spawnThread(threadParams)}return 0}function __pthread_testcancel_js(){if(!ENVIRONMENT_IS_PTHREAD)return;var tb=_pthread_self();if(!tb)return;var cancelDisabled=Atomics.load(HEAPU32,tb+56>>2);if(cancelDisabled)return;var canceled=Atomics.load(HEAPU32,tb+0>>2);if(canceled==2)throw"Canceled!"}function __emscripten_do_pthread_join(thread,status,block){if(!thread){err("pthread_join attempted on a null thread pointer!");return ERRNO_CODES.ESRCH}if(ENVIRONMENT_IS_PTHREAD&&_pthread_self()==thread){err("PThread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}else if(!ENVIRONMENT_IS_PTHREAD&&_emscripten_main_browser_thread_id()==thread){err("Main thread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}var self=HEAP32[thread+12>>2];if(self!==thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var detached=Atomics.load(HEAPU32,thread+64>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return ERRNO_CODES.EINVAL}if(block){_emscripten_check_blocking_allowed()}for(;;){var threadStatus=Atomics.load(HEAPU32,thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(HEAPU32,thread+4>>2);if(status)HEAP32[status>>2]=threadExitCode;Atomics.store(HEAPU32,thread+64>>2,1);if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({"cmd":"cleanupThread","thread":thread});return 0}if(!block){return ERRNO_CODES.EBUSY}__pthread_testcancel_js();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function _pthread_join(thread,status){return __emscripten_do_pthread_join(thread,status,true)}function _setTempRet0($i){setTempRet0($i|0)}function _sysconf(name){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(12,1,name);switch(name){case 30:return 16384;case 85:var maxHeapSize=HEAPU8.length;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}setErrNo(28);return-1}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var GLctx;var proxiedFunctionTable=[null,___sys_fcntl64,___sys_open,_emscripten_set_canvas_element_size_main_thread,_environ_get,_environ_sizes_get,_fd_close,_fd_fdstat_get,_fd_read,_fd_seek,_fd_write,_tzset,_sysconf];function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"e":___assert_fail,"Q":___sys_fcntl64,"P":___sys_open,"V":__embind_register_bool,"y":__embind_register_class,"q":__embind_register_class_constructor,"m":__embind_register_class_function,"$":__embind_register_class_property,"U":__embind_register_emval,"w":__embind_register_float,"d":__embind_register_integer,"c":__embind_register_memory_view,"x":__embind_register_std_string,"o":__embind_register_std_wstring,"W":__embind_register_void,"I":__emscripten_notify_thread_queue,"J":__emval_as,"i":__emval_call_void_method,"z":__emval_decref,"h":__emval_get_method_caller,"_":__emval_incref,"C":__emval_run_destructors,"R":__emval_take_value,"b":_abort,"Y":_clock,"s":_emscripten_asm_const_int,"M":_emscripten_check_blocking_allowed,"t":_emscripten_conditional_set_current_thread_status,"g":_emscripten_futex_wait,"f":_emscripten_futex_wake,"k":_emscripten_get_now,"j":_emscripten_log,"D":_emscripten_memcpy_big,"F":_emscripten_receive_on_main_thread_js,"E":_emscripten_resize_heap,"G":_emscripten_set_canvas_element_size,"r":_emscripten_set_current_thread_status,"H":_emscripten_webgl_create_context,"N":_environ_get,"O":_environ_sizes_get,"v":_fd_close,"S":_fd_fdstat_get,"T":_fd_read,"A":_fd_seek,"u":_fd_write,"X":_gettimeofday,"B":initPthreadsJS,"a":wasmMemory,"K":_pthread_cleanup_pop,"L":_pthread_cleanup_push,"l":_pthread_create,"p":_pthread_join,"n":_setTempRet0,"Z":_sysconf};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["aa"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ba"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ca"]).apply(null,arguments)};var _strlen=Module["_strlen"]=function(){return(_strlen=Module["_strlen"]=Module["asm"]["ea"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["fa"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["ga"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["ha"]).apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return(_emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=Module["asm"]["ia"]).apply(null,arguments)};var __get_tzname=Module["__get_tzname"]=function(){return(__get_tzname=Module["__get_tzname"]=Module["asm"]["ja"]).apply(null,arguments)};var __get_daylight=Module["__get_daylight"]=function(){return(__get_daylight=Module["__get_daylight"]=Module["asm"]["ka"]).apply(null,arguments)};var __get_timezone=Module["__get_timezone"]=function(){return(__get_timezone=Module["__get_timezone"]=Module["asm"]["la"]).apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return(_pthread_self=Module["_pthread_self"]=Module["asm"]["ma"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return(_emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=Module["asm"]["na"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return(___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=Module["asm"]["oa"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return(_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=Module["asm"]["pa"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return(_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=Module["asm"]["qa"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return(_emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=Module["asm"]["ra"]).apply(null,arguments)};var __emscripten_do_dispatch_to_thread=Module["__emscripten_do_dispatch_to_thread"]=function(){return(__emscripten_do_dispatch_to_thread=Module["__emscripten_do_dispatch_to_thread"]=Module["asm"]["sa"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=Module["asm"]["ta"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=Module["asm"]["ua"]).apply(null,arguments)};var __emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=function(){return(__emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=Module["asm"]["va"]).apply(null,arguments)};var _emscripten_tls_init=Module["_emscripten_tls_init"]=function(){return(_emscripten_tls_init=Module["_emscripten_tls_init"]=Module["asm"]["wa"]).apply(null,arguments)};var __emscripten_thread_init=Module["__emscripten_thread_init"]=function(){return(__emscripten_thread_init=Module["__emscripten_thread_init"]=Module["asm"]["xa"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["ya"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["za"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["Aa"]).apply(null,arguments)};var _emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=function(){return(_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=Module["asm"]["Ba"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["Ca"]).apply(null,arguments)};var dynCall_ijiii=Module["dynCall_ijiii"]=function(){return(dynCall_ijiii=Module["dynCall_ijiii"]=Module["asm"]["Da"]).apply(null,arguments)};var dynCall_viiijj=Module["dynCall_viiijj"]=function(){return(dynCall_viiijj=Module["dynCall_viiijj"]=Module["asm"]["Ea"]).apply(null,arguments)};var dynCall_jij=Module["dynCall_jij"]=function(){return(dynCall_jij=Module["dynCall_jij"]=Module["asm"]["Fa"]).apply(null,arguments)};var dynCall_jii=Module["dynCall_jii"]=function(){return(dynCall_jii=Module["dynCall_jii"]=Module["asm"]["Ga"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["Ha"]).apply(null,arguments)};var _ff_h264_cabac_tables=Module["_ff_h264_cabac_tables"]=77706;var __emscripten_allow_main_runtime_queued_calls=Module["__emscripten_allow_main_runtime_queued_calls"]=241152;var __emscripten_main_thread_futex=Module["__emscripten_main_thread_futex"]=1178e3;Module["PThread"]=PThread;Module["PThread"]=PThread;Module["wasmMemory"]=wasmMemory;Module["ExitStatus"]=ExitStatus;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"loaded"});return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(!implicit){if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exitProcess","returnCode":status});throw new ExitStatus(status)}else{}}if(noExitRuntime){}else{PThread.terminateAllThreads();EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}if(ENVIRONMENT_IS_PTHREAD){noExitRuntime=false;PThread.initWorker()}run();module.exports=Module;
... ...
web_src/static/js/jessibuca/ff.wasm 0 → 100755
No preview for this file type
web_src/static/js/jessibuca/ff.worker.js 0 → 100644
  1 +var initializedJS=false;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};function moduleLoaded(){}this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}moduleLoaded()}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);if(!initializedJS){Module["___embind_register_native_and_builtin_types"]();initializedJS=true}try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["getNoExitRuntime"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}};
... ...
web_src/static/js/jessibuca/index.js 0 → 100644
  1 +!function () {
  2 + function e(e) {
  3 + return e && e.__esModule ? e.default : e
  4 + }
  5 +
  6 + function t(e, t, r) {
  7 + Object.defineProperty(e, t, {get: r, enumerable: !0})
  8 + }
  9 +
  10 + var r, n, o = !1;
  11 +
  12 + function a() {
  13 + return o || (o = !0, n = e => {
  14 + var t = ["attribute vec4 vertexPos;", "attribute vec4 texturePos;", "varying vec2 textureCoord;", "void main()", "{", "gl_Position = vertexPos;", "textureCoord = texturePos.xy;", "}"].join("\n"),
  15 + r = ["precision highp float;", "varying highp vec2 textureCoord;", "uniform sampler2D ySampler;", "uniform sampler2D uSampler;", "uniform sampler2D vSampler;", "const mat4 YUV2RGB = mat4", "(", "1.1643828125, 0, 1.59602734375, -.87078515625,", "1.1643828125, -.39176171875, -.81296875, .52959375,", "1.1643828125, 2.017234375, 0, -1.081390625,", "0, 0, 0, 1", ");", "void main(void) {", "highp float y = texture2D(ySampler, textureCoord).r;", "highp float u = texture2D(uSampler, textureCoord).r;", "highp float v = texture2D(vSampler, textureCoord).r;", "gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;", "}"].join("\n"),
  16 + n = e.createShader(e.VERTEX_SHADER);
  17 + e.shaderSource(n, t), e.compileShader(n), e.getShaderParameter(n, e.COMPILE_STATUS) || console.log("Vertex shader failed to compile: " + e.getShaderInfoLog(n));
  18 + var o = e.createShader(e.FRAGMENT_SHADER);
  19 + e.shaderSource(o, r), e.compileShader(o), e.getShaderParameter(o, e.COMPILE_STATUS) || console.log("Fragment shader failed to compile: " + e.getShaderInfoLog(o));
  20 + var a = e.createProgram();
  21 + e.attachShader(a, n), e.attachShader(a, o), e.linkProgram(a), e.getProgramParameter(a, e.LINK_STATUS) || console.log("Program failed to compile: " + e.getProgramInfoLog(a)), e.useProgram(a);
  22 + var i = e.createBuffer();
  23 + e.bindBuffer(e.ARRAY_BUFFER, i), e.bufferData(e.ARRAY_BUFFER, new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), e.STATIC_DRAW);
  24 + var s = e.getAttribLocation(a, "vertexPos");
  25 + e.enableVertexAttribArray(s), e.vertexAttribPointer(s, 2, e.FLOAT, !1, 0, 0);
  26 + var u = e.createBuffer();
  27 + e.bindBuffer(e.ARRAY_BUFFER, u), e.bufferData(e.ARRAY_BUFFER, new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]), e.STATIC_DRAW);
  28 + var c = e.getAttribLocation(a, "texturePos");
  29 +
  30 + function l(t, r) {
  31 + var n = e.createTexture();
  32 + return e.bindTexture(e.TEXTURE_2D, n), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MAG_FILTER, e.LINEAR), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MIN_FILTER, e.LINEAR), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_S, e.CLAMP_TO_EDGE), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_T, e.CLAMP_TO_EDGE), e.bindTexture(e.TEXTURE_2D, null), e.uniform1i(e.getUniformLocation(a, t), r), n
  33 + }
  34 +
  35 + e.enableVertexAttribArray(c), e.vertexAttribPointer(c, 2, e.FLOAT, !1, 0, 0);
  36 + var d = l("ySampler", 0), f = l("uSampler", 1), p = l("vSampler", 2);
  37 + return function (t, r, n, o, a) {
  38 + e.viewport(0, 0, t, r), e.activeTexture(e.TEXTURE0), e.bindTexture(e.TEXTURE_2D, d), e.texImage2D(e.TEXTURE_2D, 0, e.LUMINANCE, t, r, 0, e.LUMINANCE, e.UNSIGNED_BYTE, n), e.activeTexture(e.TEXTURE1), e.bindTexture(e.TEXTURE_2D, f), e.texImage2D(e.TEXTURE_2D, 0, e.LUMINANCE, t / 2, r / 2, 0, e.LUMINANCE, e.UNSIGNED_BYTE, o), e.activeTexture(e.TEXTURE2), e.bindTexture(e.TEXTURE_2D, p), e.texImage2D(e.TEXTURE_2D, 0, e.LUMINANCE, t / 2, r / 2, 0, e.LUMINANCE, e.UNSIGNED_BYTE, a), e.drawArrays(e.TRIANGLE_STRIP, 0, 4)
  39 + }
  40 + }, t(r = {}, "default", (function () {
  41 + return n
  42 + }))), r
  43 + }
  44 +
  45 + var i, s, u = !1;
  46 +
  47 + function c() {
  48 + i = {}, a(), s = e => {
  49 + const t = document.createElement("canvas");
  50 + t.style.position = "absolute", t.style.top = 0, t.style.left = 0, e.$container.appendChild(t), e.$canvasElement = t, e.$container.style.overflow = "hidden", "absolute" !== e.$container.style.position && (e.$container.style.position = "relative");
  51 + if (!e._supportOffscreen()) {
  52 + const t = (() => {
  53 + const t = e.$canvasElement;
  54 + let r = null;
  55 + const n = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"];
  56 + let o = 0;
  57 + for (; !r && o < n.length;) {
  58 + const a = n[o];
  59 + try {
  60 + let n = {preserveDrawingBuffer: !0};
  61 + e._opt.contextOptions && (n = Object.assign(n, e._opt.contextOptions)), r = t.getContext(a, n)
  62 + } catch (e) {
  63 + r = null
  64 + }
  65 + r && "function" == typeof r.getParameter || (r = null), ++o
  66 + }
  67 + return r
  68 + })();
  69 + e._contextGLRender = a().default(t), e._contextGL = t
  70 + }
  71 + e._destroyContextGL = () => {
  72 + e._contextGL && (e._contextGL = null), e._contextGLRender && (e._contextGLRender = null), e._bitmaprenderer && (e._bitmaprenderer = null)
  73 + }
  74 + }, t(i, "default", (function () {
  75 + return s
  76 + }))
  77 + }
  78 +
  79 + function l() {
  80 + return u || (u = !0, c()), i
  81 + }
  82 +
  83 + var d, f, p, h, m, A, g = !1;
  84 +
  85 + function v() {
  86 + return g || (g = !0, f = {
  87 + videoBuffer: .5,
  88 + vod: !1,
  89 + isResize: !0,
  90 + isFullSize: !1,
  91 + debug: !1,
  92 + timeout: 30,
  93 + supportDblclickFullscreen: !1,
  94 + showBandwidth: !1,
  95 + keepScreenOn: !1,
  96 + isNotMute: !1,
  97 + hasAudio: !0,
  98 + operateBtns: {fullscreen: !1, screenshot: !1, play: !1, audio: !1},
  99 + loadingText: "",
  100 + background: "",
  101 + decoder: "index.js",
  102 + rotate: 0,
  103 + forceNoOffscreen: !1
  104 + }, t(d = {}, "DEFAULT_OPTIONS", (function () {
  105 + return f
  106 + })), p = {
  107 + init: "init",
  108 + initSize: "initSize",
  109 + render: "render",
  110 + playAudio: "playAudio",
  111 + print: "print",
  112 + printErr: "printErr",
  113 + initAudioPlanar: "initAudioPlanar",
  114 + kBps: "kBps"
  115 + }, t(d, "CMD_TYPE", (function () {
  116 + return p
  117 + })), h = {
  118 + close: "close",
  119 + play: "play",
  120 + setVideoBuffer: "setVideoBuffer",
  121 + init: "init"
  122 + }, t(d, "POST_MESSAGE", (function () {
  123 + return h
  124 + })), m = {
  125 + fullscreen: "fullscreen",
  126 + play: "play",
  127 + pause: "pause",
  128 + mute: "mute",
  129 + load: "load",
  130 + videoInfo: "videoInfo",
  131 + timeUpdate: "timeUpdate",
  132 + audioInfo: "audioInfo",
  133 + log: "log",
  134 + error: "error",
  135 + kBps: "kBps",
  136 + timeout: "timeout",
  137 + stats: "stats",
  138 + performance: "performance",
  139 + record: "record",
  140 + buffer: "buffer",
  141 + videoFrame: "videoFrame",
  142 + start: "start",
  143 + metadata: "metadata"
  144 + }, t(d, "EVEMTS", (function () {
  145 + return m
  146 + })), A = {empty: "empty", buffering: "buffering", full: "full"}, t(d, "BUFFER_STATUS", (function () {
  147 + return A
  148 + }))), d
  149 + }
  150 +
  151 + var E, y = !1;
  152 +
  153 + function w(e) {
  154 + e.resume();
  155 + const t = e.createBufferSource();
  156 + t.buffer = e.createBuffer(1, 1, 22050), t.connect(e.destination), t.noteOn ? t.noteOn(0) : t.start(0)
  157 + }
  158 +
  159 + function _(e, t) {
  160 + e && (e.style.display = t ? "block" : "none")
  161 + }
  162 +
  163 + function b(e = "") {
  164 + const t = e.split(","), r = atob(t[1]), n = t[0].replace("data:", "").replace(";base64", "");
  165 + let o = r.length, a = new Uint8Array(o);
  166 + for (; o--;) a[o] = r.charCodeAt(o);
  167 + return new File([a], "file", {type: n})
  168 + }
  169 +
  170 + function k(e, t) {
  171 + const r = document.createElement("a");
  172 + r.download = t, r.href = URL.createObjectURL(e), r.click(), URL.revokeObjectURL(e)
  173 + }
  174 +
  175 + function T(e) {
  176 + if (null == e || "" === e) return "0 KB/S";
  177 + let t = parseFloat(e);
  178 + return t = t.toFixed(2), t + "KB/S"
  179 + }
  180 +
  181 + function D(e) {
  182 + let t = 0;
  183 + return e >= 24 ? t = 2 : e >= 15 && (t = 1), t
  184 + }
  185 +
  186 + function S(e, t) {
  187 + Object.keys(t || {}).forEach((function (r) {
  188 + e.style[r] = t[r]
  189 + }))
  190 + }
  191 +
  192 + function C() {
  193 + let e = document.fullscreenElement || window.webkitFullscreenElement || document.msFullscreenElement;
  194 + return void 0 === e && (e = !1), !!e
  195 + }
  196 +
  197 + function O() {
  198 + }
  199 +
  200 + function P() {
  201 + return (new Date).getTime()
  202 + }
  203 +
  204 + function x(e) {
  205 + Object.keys(e || {}).forEach((t => {
  206 + "bgDom" !== t && _(e[t], !1)
  207 + }))
  208 + }
  209 +
  210 + function B(e) {
  211 + _(e.pauseDom, !0), _(e.screenshotsDom, !0), _(e.fullscreenDom, !0), _(e.quietAudioDom, !0), _(e.textDom, !0), _(e.speedDom, !0), _(e.recordDom, !0), _(e.loadingDom, !1), _(e.playDom, !1), _(e.playBigDom, !1), _(e.bgDom, !1)
  212 + }
  213 +
  214 + function M(e, t) {
  215 + let r = v().BUFFER_STATUS.buffering;
  216 + return 0 === e ? r = v().BUFFER_STATUS.empty : e >= t && (r = v().BUFFER_STATUS.full), r
  217 + }
  218 +
  219 + function R() {
  220 + return y || (y = !0, E = {}, v(), t(E, "audioContextUnlock", (function () {
  221 + return w
  222 + })), t(E, "$domToggle", (function () {
  223 + return _
  224 + })), t(E, "dataURLToFile", (function () {
  225 + return b
  226 + })), t(E, "downloadImg", (function () {
  227 + return k
  228 + })), t(E, "bpsSize", (function () {
  229 + return T
  230 + })), t(E, "fpsStatus", (function () {
  231 + return D
  232 + })), t(E, "setStyle", (function () {
  233 + return S
  234 + })), t(E, "checkFull", (function () {
  235 + return C
  236 + })), t(E, "noop", (function () {
  237 + return O
  238 + })), t(E, "now", (function () {
  239 + return P
  240 + })), t(E, "$hideBtns", (function () {
  241 + return x
  242 + })), t(E, "$initBtns", (function () {
  243 + return B
  244 + })), t(E, "bufferStatus", (function () {
  245 + return M
  246 + }))), E
  247 + }
  248 +
  249 + var L, I, F = !1;
  250 +
  251 + function U() {
  252 + return F || (F = !0, L = {}, R(), I = e => {
  253 + e._audioContext = new (window.AudioContext || window.webkitAudioContext), e._gainNode = e._audioContext.createGain(), e._audioEnabled = t => {
  254 + t ? (R().audioContextUnlock(e._audioContext), e._audioEnabled = t => {
  255 + t ? e._audioContext.resume() : e._audioContext.suspend()
  256 + }, e._audioContext.resume()) : e._audioContext.suspend()
  257 + }, e._audioEnabled(!0), e._mute = () => {
  258 + e._audioEnabled(!1), e.quieting = !0
  259 + }, e._cancelMute = () => {
  260 + e._audioEnabled(!0), e.quieting = !1
  261 + }, e._audioResume = () => {
  262 + e._cancelMute()
  263 + }, e._initAudioPlanar = t => {
  264 + const r = e._audioContext;
  265 + if (!r) return !1;
  266 + let n = [];
  267 + const o = r.createScriptProcessor(1024, 0, 2);
  268 + o.onaudioprocess = function (e) {
  269 + if (n.length) {
  270 + const r = n.shift();
  271 + for (let n = 0; n < t.channels; n++) {
  272 + const t = r[n], o = e.outputBuffer.getChannelData(n);
  273 + for (let e = 0; e < 1024; e++) o[e] = t[e]
  274 + }
  275 + }
  276 + }, o.connect(e._gainNode), e._closeAudio = () => {
  277 + o.disconnect(e._gainNode), e._gainNode.disconnect(r.destination), delete e._closeAudio, n = []
  278 + }, e._gainNode.connect(r.destination), e._playAudio = e => n.push(e)
  279 + }, e._destroyAudioContext = () => {
  280 + e._audioContext.close(), e._audioContext = null, e._gainNode = null
  281 + }
  282 + }, t(L, "default", (function () {
  283 + return I
  284 + }))), L
  285 + }
  286 +
  287 + var N, j, G = !1;
  288 +
  289 + function z() {
  290 + return G || (G = !0, N = {}, R(), j = e => {
  291 + e._resize$2 = () => e.resize(), e._handleVisibilityChange$2 = () => e._handleVisibilityChange(), e._onfullscreenchange$2 = () => e._onfullscreenchange(), e._handleWakeLock$2 = () => e._handleWakeLock(), window.addEventListener("resize", e._resize$2), window.addEventListener("fullscreenchange", e._onfullscreenchange$2), document.addEventListener("visibilitychange", e._handleVisibilityChange$2), document.addEventListener("visibilitychange", e._handleWakeLock$2), window.addEventListener("fullscreenchange", e._handleWakeLock$2), e._opt.supportDblclickFullscreen && e.$canvasElement.addEventListener("dblclick", (() => {
  292 + e.fullscreen = !e.fullscreen
  293 + }), !1), e._removeEventListener = () => {
  294 + window.removeEventListener("resize", e._resize$2), window.removeEventListener("fullscreenchange", e._onfullscreenchange$2), document.removeEventListener("visibilitychange", e._handleWakeLock$2), document.removeEventListener("visibilitychange", e._handleVisibilityChange$2), window.removeEventListener("fullscreenchange", e._handleWakeLock$2)
  295 + }, e.$doms.playDom && e.$doms.playDom.addEventListener("click", (t => {
  296 + t.stopPropagation(), e._play()
  297 + }), !1), e.$doms.playBigDom && e.$doms.playBigDom.addEventListener("click", (t => {
  298 + t.stopPropagation(), e._play()
  299 + }), !1), e.$doms.pauseDom && e.$doms.pauseDom.addEventListener("click", (t => {
  300 + t.stopPropagation(), e._pause()
  301 + }), !1), e.$doms.screenshotsDom && e.$doms.screenshotsDom.addEventListener("click", (t => {
  302 + t.stopPropagation();
  303 + const r = e._opt.text + "" + R().now();
  304 + e._screenshot(r)
  305 + }), !1), e.$doms.fullscreenDom && e.$doms.fullscreenDom.addEventListener("click", (t => {
  306 + t.stopPropagation(), e.fullscreen = !0
  307 + }), !1), e.$doms.minScreenDom && e.$doms.minScreenDom.addEventListener("click", (t => {
  308 + t.stopPropagation(), e.fullscreen = !1
  309 + }), !1), e.$doms.recordDom && e.$doms.recordDom.addEventListener("click", (t => {
  310 + t.stopPropagation(), e.recording = !0
  311 + }), !1), e.$doms.recordingDom && e.$doms.recordingDom.addEventListener("click", (t => {
  312 + t.stopPropagation(), e.recording = !1
  313 + }), !1), e.$doms.quietAudioDom && e.$doms.quietAudioDom.addEventListener("click", (t => {
  314 + t.stopPropagation(), e._cancelMute()
  315 + }), !1), e.$doms.playAudioDom && e.$doms.playAudioDom.addEventListener("click", (t => {
  316 + t.stopPropagation(), e._mute()
  317 + }), !1), e._enableWakeLock()
  318 + }, t(N, "default", (function () {
  319 + return j
  320 + }))), N
  321 + }
  322 +
  323 + var W, Y, H = !1;
  324 +
  325 + function $() {
  326 + return H || (H = !0, W = {}, R(), z(), Y = e => {
  327 + e._showControl = () => {
  328 + let t = !1, r = !1;
  329 + return Object.keys(e._opt.operateBtns).forEach((t => {
  330 + e._opt.operateBtns[t] && (r = !0)
  331 + })), (e._opt.showBandwidth || e._opt.text || r) && (t = !0), t
  332 + };
  333 + const t = {}, r = document.createDocumentFragment(), n = document.createElement("div"),
  334 + o = document.createElement("div"), a = document.createElement("div"), i = document.createElement("div"),
  335 + s = document.createElement("div"), u = document.createElement("div"), c = document.createElement("div"),
  336 + l = document.createElement("div"), d = document.createElement("div"), f = document.createElement("div"),
  337 + p = document.createElement("div"), h = document.createElement("div"), m = document.createElement("div"),
  338 + A = document.createElement("div"), g = document.createElement("div"), v = document.createElement("div"),
  339 + E = document.createElement("div"), y = document.createElement("div");
  340 + m.innerText = e._opt.loadingText || "", i.innerText = e._opt.text || "", s.innerText = "", u.title = "播放", l.title = "暂停", d.title = "截屏", f.title = "全屏", p.title = "退出全屏", A.title = "静音", g.title = "取消静音", v.title = "录制", E.title = "取消录制";
  341 + let w = {position: "absolute", width: "100%", height: "100%"};
  342 + e._opt.background && (w = Object.assign({}, w, {
  343 + backgroundRepeat: "no-repeat",
  344 + backgroundPosition: "center",
  345 + backgroundSize: "100%",
  346 + backgroundImage: "url('" + e._opt.background + "')"
  347 + }));
  348 + const _ = {
  349 + position: "absolute",
  350 + width: "100%",
  351 + height: "100%",
  352 + textAlign: "center",
  353 + color: "#fff",
  354 + display: "none",
  355 + backgroundImage: "url('data:image/gif;base64,R0lGODlhgACAAKIAAP///93d3bu7u5mZmQAA/wAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBQAEACwCAAIAfAB8AAAD/0i63P4wygYqmDjrzbtflvWNZGliYXiubKuloivPLlzReD7al+7/Eh5wSFQIi8hHYBkwHUmD6CD5YTJLz49USuVYraRsZ7vtar7XnQ1Kjpoz6LRHvGlz35O4nEPP2O94EnpNc2sef1OBGIOFMId/inB6jSmPdpGScR19EoiYmZobnBCIiZ95k6KGGp6ni4wvqxilrqBfqo6skLW2YBmjDa28r6Eosp27w8Rov8ekycqoqUHODrTRvXsQwArC2NLF29UM19/LtxO5yJd4Au4CK7DUNxPebG4e7+8n8iv2WmQ66BtoYpo/dvfacBjIkITBE9DGlMvAsOIIZjIUAixliv9ixYZVtLUos5GjwI8gzc3iCGghypQqrbFsme8lwZgLZtIcYfNmTJ34WPTUZw5oRxdD9w0z6iOpO15MgTh1BTTJUKos39jE+o/KS64IFVmsFfYT0aU7capdy7at27dw48qdS7eu3bt480I02vUbX2F/JxYNDImw4GiGE/P9qbhxVpWOI/eFKtlNZbWXuzlmG1mv58+gQ4seTbq06dOoU6vGQZJy0FNlMcV+czhQ7SQmYd8eMhPs5BxVdfcGEtV3buDBXQ+fURxx8oM6MT9P+Fh6dOrH2zavc13u9JXVJb520Vp8dvC76wXMuN5Sepm/1WtkEZHDefnzR9Qvsd9+/wi8+en3X0ntYVcSdAE+UN4zs7ln24CaLagghIxBaGF8kFGoIYV+Ybghh841GIyI5ICIFoklJsigihmimJOLEbLYIYwxSgigiZ+8l2KB+Ml4oo/w8dijjcrouCORKwIpnJIjMnkkksalNeR4fuBIm5UEYImhIlsGCeWNNJphpJdSTlkml1jWeOY6TnaRpppUctcmFW9mGSaZceYopH9zkjnjUe59iR5pdapWaGqHopboaYua1qije67GJ6CuJAAAIfkEBQUABAAsCgACAFcAMAAAA/9Iutz+ML5Ag7w46z0r5WAoSp43nihXVmnrdusrv+s332dt4Tyo9yOBUJD6oQBIQGs4RBlHySSKyczVTtHoidocPUNZaZAr9F5FYbGI3PWdQWn1mi36buLKFJvojsHjLnshdhl4L4IqbxqGh4gahBJ4eY1kiX6LgDN7fBmQEJI4jhieD4yhdJ2KkZk8oiSqEaatqBekDLKztBG2CqBACq4wJRi4PZu1sA2+v8C6EJexrBAD1AOBzsLE0g/V1UvYR9sN3eR6lTLi4+TlY1wz6Qzr8u1t6FkY8vNzZTxaGfn6mAkEGFDgL4LrDDJDyE4hEIbdHB6ESE1iD4oVLfLAqPETIsOODwmCDJlv5MSGJklaS6khAQAh+QQFBQAEACwfAAIAVwAwAAAD/0i63P5LSAGrvTjrNuf+YKh1nWieIumhbFupkivPBEzR+GnnfLj3ooFwwPqdAshAazhEGUXJJIrJ1MGOUamJ2jQ9QVltkCv0XqFh5IncBX01afGYnDqD40u2z76JK/N0bnxweC5sRB9vF34zh4gjg4uMjXobihWTlJUZlw9+fzSHlpGYhTminKSepqebF50NmTyor6qxrLO0L7YLn0ALuhCwCrJAjrUqkrjGrsIkGMW/BMEPJcphLgDaABjUKNEh29vdgTLLIOLpF80s5xrp8ORVONgi8PcZ8zlRJvf40tL8/QPYQ+BAgjgMxkPIQ6E6hgkdjoNIQ+JEijMsasNY0RQix4gKP+YIKXKkwJIFF6JMudFEAgAh+QQFBQAEACw8AAIAQgBCAAAD/kg0PPowykmrna3dzXvNmSeOFqiRaGoyaTuujitv8Gx/661HtSv8gt2jlwIChYtc0XjcEUnMpu4pikpv1I71astytkGh9wJGJk3QrXlcKa+VWjeSPZHP4Rtw+I2OW81DeBZ2fCB+UYCBfWRqiQp0CnqOj4J1jZOQkpOUIYx/m4oxg5cuAaYBO4Qop6c6pKusrDevIrG2rkwptrupXB67vKAbwMHCFcTFxhLIt8oUzLHOE9Cy0hHUrdbX2KjaENzey9Dh08jkz8Tnx83q66bt8PHy8/T19vf4+fr6AP3+/wADAjQmsKDBf6AOKjS4aaHDgZMeSgTQcKLDhBYPEswoA1BBAgAh+QQFBQAEACxOAAoAMABXAAAD7Ei6vPOjyUkrhdDqfXHm4OZ9YSmNpKmiqVqykbuysgvX5o2HcLxzup8oKLQQix0UcqhcVo5ORi+aHFEn02sDeuWqBGCBkbYLh5/NmnldxajX7LbPBK+PH7K6narfO/t+SIBwfINmUYaHf4lghYyOhlqJWgqDlAuAlwyBmpVnnaChoqOkpaanqKmqKgGtrq+wsbA1srW2ry63urasu764Jr/CAb3Du7nGt7TJsqvOz9DR0tPU1TIA2ACl2dyi3N/aneDf4uPklObj6OngWuzt7u/d8fLY9PXr9eFX+vv8+PnYlUsXiqC3c6PmUUgAACH5BAUFAAQALE4AHwAwAFcAAAPpSLrc/m7IAau9bU7MO9GgJ0ZgOI5leoqpumKt+1axPJO1dtO5vuM9yi8TlAyBvSMxqES2mo8cFFKb8kzWqzDL7Xq/4LB4TC6bz1yBes1uu9uzt3zOXtHv8xN+Dx/x/wJ6gHt2g3Rxhm9oi4yNjo+QkZKTCgGWAWaXmmOanZhgnp2goaJdpKGmp55cqqusrZuvsJays6mzn1m4uRAAvgAvuBW/v8GwvcTFxqfIycA3zA/OytCl0tPPO7HD2GLYvt7dYd/ZX99j5+Pi6tPh6+bvXuTuzujxXens9fr7YPn+7egRI9PPHrgpCQAAIfkEBQUABAAsPAA8AEIAQgAAA/lIutz+UI1Jq7026h2x/xUncmD5jehjrlnqSmz8vrE8u7V5z/m5/8CgcEgsGo/IpHLJbDqf0Kh0ShBYBdTXdZsdbb/Yrgb8FUfIYLMDTVYz2G13FV6Wz+lX+x0fdvPzdn9WeoJGAYcBN39EiIiKeEONjTt0kZKHQGyWl4mZdREAoQAcnJhBXBqioqSlT6qqG6WmTK+rsa1NtaGsuEu6o7yXubojsrTEIsa+yMm9SL8osp3PzM2cStDRykfZ2tfUtS/bRd3ewtzV5pLo4eLjQuUp70Hx8t9E9eqO5Oku5/ztdkxi90qPg3x2EMpR6IahGocPCxp8AGtigwQAIfkEBQUABAAsHwBOAFcAMAAAA/9Iutz+MMo36pg4682J/V0ojs1nXmSqSqe5vrDXunEdzq2ta3i+/5DeCUh0CGnF5BGULC4tTeUTFQVONYAs4CfoCkZPjFar83rBx8l4XDObSUL1Ott2d1U4yZwcs5/xSBB7dBMBhgEYfncrTBGDW4WHhomKUY+QEZKSE4qLRY8YmoeUfkmXoaKInJ2fgxmpqqulQKCvqRqsP7WooriVO7u8mhu5NacasMTFMMHCm8qzzM2RvdDRK9PUwxzLKdnaz9y/Kt8SyR3dIuXmtyHpHMcd5+jvWK4i8/TXHff47SLjQvQLkU+fG29rUhQ06IkEG4X/Rryp4mwUxSgLL/7IqFETB8eONT6ChCFy5ItqJomES6kgAQAh+QQFBQAEACwKAE4AVwAwAAAD/0i63A4QuEmrvTi3yLX/4MeNUmieITmibEuppCu3sDrfYG3jPKbHveDktxIaF8TOcZmMLI9NyBPanFKJp4A2IBx4B5lkdqvtfb8+HYpMxp3Pl1qLvXW/vWkli16/3dFxTi58ZRcChwIYf3hWBIRchoiHiotWj5AVkpIXi4xLjxiaiJR/T5ehoomcnZ+EGamqq6VGoK+pGqxCtaiiuJVBu7yaHrk4pxqwxMUzwcKbyrPMzZG90NGDrh/JH8t72dq3IN1jfCHb3L/e5ebh4ukmxyDn6O8g08jt7tf26ybz+m/W9GNXzUQ9fm1Q/APoSWAhhfkMAmpEbRhFKwsvCsmosRIHx444PoKcIXKkjIImjTzjkQAAIfkEBQUABAAsAgA8AEIAQgAAA/VIBNz+8KlJq72Yxs1d/uDVjVxogmQqnaylvkArT7A63/V47/m2/8CgcEgsGo/IpHLJbDqf0Kh0Sj0FroGqDMvVmrjgrDcTBo8v5fCZki6vCW33Oq4+0832O/at3+f7fICBdzsChgJGeoWHhkV0P4yMRG1BkYeOeECWl5hXQ5uNIAOjA1KgiKKko1CnqBmqqk+nIbCkTq20taVNs7m1vKAnurtLvb6wTMbHsUq4wrrFwSzDzcrLtknW16tI2tvERt6pv0fi48jh5h/U6Zs77EXSN/BE8jP09ZFA+PmhP/xvJgAMSGBgQINvEK5ReIZhQ3QEMTBLAAAh+QQFBQAEACwCAB8AMABXAAAD50i6DA4syklre87qTbHn4OaNYSmNqKmiqVqyrcvBsazRpH3jmC7yD98OCBF2iEXjBKmsAJsWHDQKmw571l8my+16v+CweEwum8+hgHrNbrvbtrd8znbR73MVfg838f8BeoB7doN0cYZvaIuMjY6PkJGSk2gClgJml5pjmp2YYJ6dX6GeXaShWaeoVqqlU62ir7CXqbOWrLafsrNctjIDwAMWvC7BwRWtNsbGFKc+y8fNsTrQ0dK3QtXAYtrCYd3eYN3c49/a5NVj5eLn5u3s6e7x8NDo9fbL+Mzy9/T5+tvUzdN3Zp+GBAAh+QQJBQAEACwCAAIAfAB8AAAD/0i63P4wykmrvTjrzbv/YCiOZGmeaKqubOu+cCzPdArcQK2TOL7/nl4PSMwIfcUk5YhUOh3M5nNKiOaoWCuWqt1Ou16l9RpOgsvEMdocXbOZ7nQ7DjzTaeq7zq6P5fszfIASAYUBIYKDDoaGIImKC4ySH3OQEJKYHZWWi5iZG0ecEZ6eHEOio6SfqCaqpaytrpOwJLKztCO2jLi1uoW8Ir6/wCHCxMG2x7muysukzb230M6H09bX2Nna29zd3t/g4cAC5OXm5+jn3Ons7eba7vHt2fL16tj2+QL0+vXw/e7WAUwnrqDBgwgTKlzIsKHDh2gGSBwAccHEixAvaqTYcFCjRoYeNyoM6REhyZIHT4o0qPIjy5YTTcKUmHImx5cwE85cmJPnSYckK66sSAAj0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gwxZJAAA7')",
  356 + backgroundRepeat: "no-repeat",
  357 + backgroundPosition: "center",
  358 + backgroundSize: "40px 40px"
  359 + }, b = {
  360 + position: "absolute",
  361 + width: "100%",
  362 + height: "100%",
  363 + display: "none",
  364 + background: "rgba(0,0,0,0.4)",
  365 + backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwEAYAAAAHkiXEAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAByBJREFUeNrlXFlIVV0U3vsaaINmZoX0YAR6y8oGMkKLoMESSjBoUJEoIogoIggigoryIQoKGqi3Roh6TKGBIkNEe6hMgzTNKLPSUlMrNdvrf/juurlP5zpc7znb+r+X755pn7W+Pe+9zpVimIEUKVKJiUIKKWRqKs5OmwZOTBQkSFBUFK5HR+tPt7WBOzpwX3U1jquqwGVleK6iQkoppSQy7a8xEBERLVwIPnsWXF9PrqCxEXzxInjpUrDH47YO0h2hw8JwtG4deN8+8OzZA0vl7Vt/iZZCCtnUhPPt7fp9o0fjvpgYHHu9uD8+Hsdsh52hggTV1uLg2DHwpUvSIz3S093ttE4hB5qSxYuRAc+f910im5vBFy6As7LALORQ7RgzBullZIBPngQ3NPRt1+vXeH7NGtN69u8oERFFRIDPnQMrZe8YZ0huLhwMDzdjb1gYC4zj4uKAeaFIkbpxAwfWvse48FOngp89s7eeS1p2Nlg63vQF7Y8iRWrlSthZXR2wZhAR0dy55gwlIqI5c8AfPtgbeuUKHIqKMi3soP3z1UzwiRP2NbqtDbxsmXuGacK3tOgG/fwJ3rbNtIDO+J2ZiQzp6ND97uzE+RUrHDaAmxprif/+HQasXm1aKKcBPxcsADc1/VEjFClS8+eH7oXcuSpSpJ480V/Y0wPOyjItjNtgofWmiPHuHa7Hxg79RUT0e1Rjxb/X1ASnDw9vf/3S9bl1K/iEFSlSixbZdz7Xr5t2fLgBuuTn2xfUjRsHmVBYGNg6gWpo+FtHNU4DuowYAZ3Ky+11GzOm/4SIiGjDBvuczM52zAHua4iI6OpVcGEheO1a8PCdP/j9CNRyKFKk9u4doBDWCRXXBOcE0GekgVBUhPuSk00LPTAdCwp0+3n0GBER4AFenbQiJ8cdg7dvpwGB5xunT4PHjTMtuL0/qan29q9fH+AB62jnyxe31moGlwFWNDbCzq1bcez+snLffr14odtrMzrCBet6/Pnz7hoabAZY8fgxT5iGRwbs36/b19kJHjnS49+BEkIIMXmy/vjt26YdCA4pKdgHKC2Fo5cvh2xiFBTu3NGPw8Ox/5CW5tG3/hi8VffokRmDQwUeNOTlwc/KSmRIbq67djx9Cm5p+W2akEKmpfnaSt5zZdTXY8+0udmQcg5h0iQwD3MfPgRPn+7UG6GjUjiqrNSver0eVIWEBP85EiSIN7H/dSxZAuY1roMHHRt02OqamOhrgnoN46SQQn76ZFoad8Hj8kOH4D/PZJOSQvYKW11jYnxNkHWK3NFhWhKz8HrB9+7xaCU06fYKIiBBgiIjfRlgHTf/j+NlNMTFgceOHXJSJEgQ9wXCVyOk9AlvLfEDWDT6X+DAAXSiHz8OOSkppJCRkfrJ9vYR+NHaql8wNV42jVevUFJ37kQ8kHX8PlRMmOD/SYIEtbZ69IAkvsATs38dP36ADx8GJyc7IzyD+xbhqxE1Nb4a8PKlfiE+HsOxyEgYZI1A+9tRUADetQtNTF2dU29CJ84Twhkz9KtVVb4+oKxMvxAWxjM101KFBvX1qNmbNkHwNWucFl4HT/QmTvSfIkGCSks9HC2MsxxzyTekp5uWLjh0dYHz88FeL2ry5ctm7LHq2NMD7rXUg6rC0cKM9+/BfQS1hghDXg1VpEjdvasvLpqHf3VWs/P+/QA3Lltm75jz8T7BZQAvn9tscJgWXpEiNWuWvd2bNwcQwONbnq6p0R8oLnYnA7Zs6Vvw7m7Yd/z4gDe5DQH2Xrum29/SwoObfh7cts1egFWrnDU4Lg785g2Ytx4LC2H4zJmmhe3XD5+dsJsD1xhHjgwwgfBwPFBXpydQXe3uFqXzfU9o7ZUSXFRkX/IHMcENGKXgixY27fBwA8TZudO+5dixY4gJ37xpyQVfvEtmpmnHTQMFMiUFevBeL6OkZMg1GQlER4P5wwTGt29g65bmvw/4HShanD+5mjIlxC+cNw/cKxqYw7RDHZY9TOEXXpEiVVurC8+jtJUrnTNAkSK1fDle2NWlG9DeDs7IMC2UM35zU2Mt8Urhel6eywalp+vCMzhM++hRDlo1LeCg/dNGNdy5Wtt4LvEuCv+HodqHCu/e2Y8Cyss5aNW0sAPzh8fx1uEkgyMGHWxqgjM8NhYGWoNSraMnvm6+89aXDHjmap1AMUpKcD9/+D2MAYNzcsD9fRDNsZMcwsedfehiPJFeUhJ4925wWVnfdvFHiDt2gEM/MXT+rwp47UMKKeT27Ti7Zw+YA6UCgbdKKyr8cTVSSCEbG3Ge/5yDwWtD48fjfv6rAl7C6LUeb4uvX8FnzuD5U6ewjP35s9M6uQaUJP4Qgz8E4SbJ2sk5BV5jevAAvHmzqS9/hs0XJxBi1CgOWtVjVnlHKSEB16Oj/wgoE0L8LsFcM169AldV8Q4UjouKULKtNch9/AdsEf6XQYgIsAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wMS0xMlQxMTo1NjowNSswODowMGcMj/QAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDEtMTJUMTE6NTY6MDUrMDg6MDAWUTdIAAAASXRFWHRzdmc6YmFzZS11cmkAZmlsZTovLy9ob21lL2FkbWluL2ljb24tZm9udC90bXAvaWNvbl9wZHMzeWYxNGczYi9ib2Zhbmcuc3Zn11us5wAAAABJRU5ErkJggg==')",
  366 + backgroundRepeat: "no-repeat",
  367 + backgroundPosition: "center",
  368 + backgroundSize: "48px 48px",
  369 + cursor: "pointer"
  370 + }, k = {position: "absolute", top: 0, height: "100%", display: "flex", alignItems: "center"}, T = {
  371 + display: "none",
  372 + position: "relative",
  373 + fontSize: "13px",
  374 + color: "#fff",
  375 + lineHeight: "20px",
  376 + marginLeft: "5px",
  377 + marginRight: "5px",
  378 + userSelect: "none"
  379 + }, D = {
  380 + display: "none",
  381 + position: "relative",
  382 + width: "16px",
  383 + height: "16px",
  384 + marginLeft: "8px",
  385 + marginRight: "8px",
  386 + backgroundRepeat: "no-repeat",
  387 + backgroundPosition: "center",
  388 + backgroundSize: "100%",
  389 + cursor: "pointer"
  390 + };
  391 + R().setStyle(y, w), R().setStyle(n, {
  392 + height: "38px",
  393 + zIndex: 11,
  394 + position: "absolute",
  395 + left: 0,
  396 + bottom: 0,
  397 + width: "100%",
  398 + background: "rgba(0,0,0)"
  399 + }), R().setStyle(h, _), R().setStyle(c, b), R().setStyle(m, {
  400 + position: "absolute",
  401 + width: "100%",
  402 + top: "60%",
  403 + textAlign: "center"
  404 + }), R().setStyle(o, Object.assign({}, k, {left: 0})), R().setStyle(a, Object.assign({}, k, {right: 0})), R().setStyle(i, T), R().setStyle(s, T), R().setStyle(u, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAARVJREFUSMe9laEOglAUhs+5k9lJFpsJ5QWMJoNGbEY0mEy+gr6GNo0a3SiQCegMRILzGdw4hl+Cd27KxPuXb2zA/91z2YXoGRERkX4fvN3A2QxUiv4dFM3n8jZRBLbbVfd+ubJuF4xjiCyXkksueb1uSKCIZYGLBTEx8ekEoV7PkICeVgs8HiGyXoO2bUigCDM4HoPnM7bI8wwJ6Gk0sEXbLSay30Oo2TQkoGcwgFCSQMhxDAvoETEscDiQkJC4LjMz8+XyZ4HrFYWjEQqHQ1asWGWZfmdFAsVINxuw00HhbvfpydpvxWkKTqdYaRCUfUPJCdzv4Gr1uqfli0tOIAzByUT/iCrL6+84y3Bw+D6ui5Ou+jwA8FnIO++FACgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAEl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvYm9mYW5nLnN2Z8fICi0AAAAASUVORK5CYII=')"})), R().setStyle(l, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAHVJREFUSMftkCESwCAMBEOnCtdXVMKHeC7oInkEeQJXkRoEZWraipxZc8lsQqQZBACAlIS1oqGhhTCdu3oyxyyMcdRf79c5J7SWDBky+z4173rbJvR+VF/e/qwKqIAKqMBDgZyFzAQCoZTpxq7HLDyOrw/9b07l3z4dDnI2IAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMIo/vCcAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDD7YgSbAAAASnRFWHRzdmc6YmFzZS11cmkAZmlsZTovLy9ob21lL2FkbWluL2ljb24tZm9udC90bXAvaWNvbl9nZjcwMHM3YjNmdy96YW50aW5nLnN2ZxqNZJkAAAAASUVORK5CYII=')"})), R().setStyle(d, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAaxJREFUSMfNlLFOAkEQhmevAZMjR6OGRBJKsFBzdkYNpYSaWkopIOFRCBWh1ieA+ALGRgutjK0HzV2H5SX7W/zsmY3cnTEhcZovOzcz9+/s7Ir8d4OGht7fBwAgjvEri2OTl1ffSf0xAMBxRIkS1e3Se3+vcszEMe/6OqmT/aN2m1wsNu/o5YVsNHI7BgA4PCRfXzfXCwKy1RLbcXZG9nrkzc12jvT8nPU/PtatOThgAx8fuS4WyZ0de2e+T87n5OcnuVqRsxl5cpImQDnKUc7DA1fVqpimZCu+vCSjiNH9PlmpJNTQ0INBErfeafZRAakC6FWKfH9nwU7H/l6rGdqCOx3y7c3U+aOARsMMp+1vNskwTLjulB23XJL1epqA9OshIiKeJxAIoug7UyA4OuLi6Ynr52deu+NjOy4MSc9Ln8rMDpTLybBpaOjdXbJUIqdTm8a/t2fn/RSQewR24HicTLmGhnbdzcPquvYtGY3+PIR24UKBUXd35v6Sk4lN47+9NXm/FBAEedfGTjw9JYdDm76fm6+hoS8ujGAxT6L9Im7bTKeurvIEb92+AES1b6x283XSAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABJdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L2NhbWVyYS5zdmeyubWEAAAAAElFTkSuQmCC')"})), R().setStyle(f, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAALZJREFUSMftVbsORUAQVSj8DomChvh3lU5CoSVCQq2RObeYu8XG3deVoHCak81kds7Oaz3vxRcAAMwztOg6vX9d6/3XFQQC+b7iAoFhYE7Tvx9EIFAcy/ftO3MQGAQkCfM4MmeZWyajiLnvmYuCeduMAuSzvRBVYNluFHCssSgFp7Sq9ALKkjnPf9ubRtkDL27HNT3QtsY9cAjsNAVheHIKBOwD2wpxFHDbJpwmaHH2L1iWx+2BDy8RbXXtqbRBAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABTdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L3F1YW5waW5nenVpZGFodWEuc3ZnTBoI7AAAAABJRU5ErkJggg==')"})), R().setStyle(p, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAYJJREFUSMfdVbGKwkAQnQn+geAfWBixUTsVgp3YGKxSWflVNmIjARULwc5KO40ipNHWRgs/wGLniucKa+Jd5ODuuGle5u3szGRmd5bor4iIiMhuB3Sc+HXXBdp2/Lpta7v4dccRJUrUdhtNQIkSVa3C8HwG1uumg34f2OnEB+h0tF1Sv5b+YIsttpZLEhKSdhvscPi8IXFF74GJiYnHY7Cex8zMvFgkbInjmJnv98kqoO30vmhLtaRMB60WtEbDNDudgMUiKiQSzfjOMzFxoQAyCPSfw7/nQZ/PUYnpNGV6OR6BmYzJbzYIoBQCzGaRBDQvJCTdLnTLolg5HN5t6f8V1h/oUT4PrVKJWBotmEzQw+vV3J9Ow851P2/BaoX9Yfh0BrJZYKlk8uUyHOpDeLuBHwzMBJtN2PV6IPUhXK9Nf5cLMAxfluanrmGkRBggtRo03wfq66P/6CsJAnOg+f6rgfZI4BGYiYlHIx048eR6krcnq34kkj1GuVz8+jceo9+SD5A8yGh8CTq7AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABNdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L3p1aXhpYW9odWEuc3ZnoCFr0AAAAABJRU5ErkJggg==')"})), R().setStyle(A, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAR9JREFUSMfVlD0LglAYhe9VkwgNihpsjbYQf4JTS7+iuaGxpcGfJjS0NFRLk2NDi6MogafhJGRIX9yEzvJwrx/nvPd9VYh/F3LkyBuN2g3J1QoAgCQhPe/Hxq5Lo+0WlfJ9dYYAgGaTDAIyy/BUnwcwWJlhcLnZkN2ugIBAuy2kkEL2ep8F73S4kjfFcfn6cMj9KLodrWVBiXyf75tMyOOR+4MBOZ8XLXzorboA5UpnM/J0Ivd7+vX7xX2asqGpVKtFXi5sqWmypXefrfIWAACmU/JwKCoun8hu9zA0uk6u13wgirg+n7+bAcsibbt6SB3n9TQXPxwAwHJJpum7M6BcDDQa0SgMaw9QPkJNIxcLMo4ZcDz+eYDqQFLWbqxKV57EtW1WtMbmAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABKdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L2ppbmd5aW4uc3ZnIlMYaQAAAABJRU5ErkJggg==')"})), R().setStyle(g, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAU5JREFUSMftkzGKwlAURf9PULBQwULSCKK1bZAgNuoaFFyAC3AdZg0uQCwshWzAShEEO7Gy0soUCu9Occ3An5nMGCfdzGsO7+Xy3/03iVL/lbAAACiVIBCI77O37Vi9QCDZbEqLm03ycEBUAoHk818v7nYpul5Jz4tf8HBKYa1mcjwmbzd8rG8NFIsU7ffk8UjmcjE3XK+RtB4G2PT75GbDeblMttumfjSKMRCGLxsQCKTReE9KIJDJxDw/SmKxiOZWWh+ntrSlre2WXRAorbTSrZapip7X66kbMKtQUFBQCENznsmQ93vqBhh5r8fO85jAcsnIrcce1yV3uxgD8zl5uZgU+dGBVlrp6GbTKRPwffaDAek45Gz2/M0AAJ0OeTol+w0rFYrOZ3K1MhNJEjEAwHF4cBA8Z8B1zcXV6msv+JMR2yaHQ1LrXx/8Z+sNRxsWcwZeb6UAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAEt0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvc2hlbmd5aW4uc3ZnFog1MQAAAABJRU5ErkJggg==')"})), R().setStyle(v, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAPRJREFUSMflVDEOwjAQO0e8gr2sZYVunREbD6ISfAgmkBjpC/hBEQ+AtTWD6QAI0gBlqRfLp+TiXC5n1nXgMUCS5HBoNBqj6IOMMFwuEpsNAABl6d3HihWrOJaBsuRPkGW+c929HAxuYefb6L+R0ZgkMrJYiItCnCT1sl5Y1jwXj0bNniJNJWqujfX7LyrwJh8AYDxWgulU0dPp20IFlxoODm61kpE4VnS9/puBXyPYgH7LbKY3PhwUnUw+NdC4CdW9+71UgyZspwIBB9No3O0klktxUahyx+Pz+lYG0Xzu84lXRqTqwRQAGAzns8R223gUdxZXGcAK5Hp0ClIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAE50RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvbHV6aGlzaGlwaW4uc3Zn5Zd7GQAAAABJRU5ErkJggg==')"})), R().setStyle(E, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAahJREFUSMdjYBjpgBFd4NZK+f+soQYG//T+yzFuUFUl2cApjEWM/758UZvysPDn3127GBkZGBgY/v4l6ICb9xTWsRbp6/9f9W8N44Jz5xgCGI4wfGFiIttrR/5n/3/U3KyR8rj8t0RdHS5lcAv+//yXzzhZTY1ii2FAmsGZocna+maD3GnWY62tNzbJBbDOffLkxie5eJYwa2uYMhaigzb2/zyGguPH/y9mTGKYYGlJUIMiYxDjHCen/4oMDAxznJzg4k8Z/jP+l5LCCAFCQP30Y5dfXVZWDI7/zzIs8PNjNGJ4/7/r+XNKA4rkoNZ4/lj0V9TmzUxJv0J+F+jrM3YyvPq/acsWujmA2oBkB9y4LifLxhoa+teAzYFtwtWr/8sZxBj9fHxo7oCbprJ72MqOHWNgZGBkYFy1isGGoZahTFSU0hAgOhcQnfph4P7/df9T9u1jPMn4nyHmxIn/bAzLGe7GxTHsZyj+f+zpUwYGBmmG6bQsiMr+L/v/rqlJY9Njm9889fW4lGEUxXCHwAomUgH3vxBG8c+f1WWf9P98sns3oaJ4FAAAbtWqHTT84QYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6MzU6MjMrMDg6MDBLHbvEAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjM1OjIzKzA4OjAwOkADeAAAAE50RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fcTM1YTFhNHBtY2MvbHV6aGlzaGlwaW4uc3Zn6xlv1QAAAABJRU5ErkJggg==')"})), h.appendChild(m), e._opt.text && (o.appendChild(i), t.textDom = i), e._opt.showBandwidth && (o.appendChild(s), t.speedDom = s), e._opt.operateBtns.record && (a.appendChild(E), a.appendChild(v), t.recordingDom = E, t.recordDom = v), e._opt.operateBtns.screenshot && (a.appendChild(d), t.screenshotsDom = d), e._opt.operateBtns.play && (a.appendChild(u), a.appendChild(l), t.playDom = u, t.pauseDom = l), e._opt.operateBtns.audio && (a.appendChild(g), a.appendChild(A), t.playAudioDom = g, t.quietAudioDom = A), e._opt.operateBtns.fullscreen && (a.appendChild(f), a.appendChild(p), t.fullscreenDom = f, t.minScreenDom = p), n.appendChild(o), n.appendChild(a), r.appendChild(y), t.bgDom = y, r.appendChild(h), t.loadingDom = h, e._showControl() && r.appendChild(n), e._opt.operateBtns.play && (r.appendChild(c), t.playBigDom = c), e.$container.appendChild(r), e.$doms = t, e._removeContainerChild = () => {
  405 + for (; e.$container.firstChild;) e.$container.removeChild(e.$container.firstChild)
  406 + }, z().default(e), R().$hideBtns(e.$doms), e._opt.isNotMute || e._mute()
  407 + }, t(W, "default", (function () {
  408 + return Y
  409 + }))), W
  410 + }
  411 +
  412 + var V, Q, X = !1;
  413 +
  414 + function q() {
  415 + return X || (X = !0, V = {}, v(), R(), Q = e => {
  416 + const t = new Worker(e._opt.decoder);
  417 + t.onmessage = r => {
  418 + const n = r.data;
  419 + switch (n.cmd) {
  420 + case v().CMD_TYPE.init:
  421 + e.setBufferTime(e._opt.videoBuffer), t.postMessage({
  422 + cmd: v().POST_MESSAGE.init,
  423 + opt: JSON.stringify(e._opt),
  424 + sampleRate: e._audioContext.sampleRate
  425 + }), e._hasLoaded || (e._hasLoaded = !0, e.onLoad(), e._trigger(v().EVEMTS.load));
  426 + break;
  427 + case v().CMD_TYPE.initSize:
  428 + e.$canvasElement.width = n.w, e.$canvasElement.height = n.h, e.onInitSize(), e._resize(), e._trigger(v().EVEMTS.videoInfo, {
  429 + w: n.w,
  430 + h: n.h
  431 + }), e._trigger(v().EVEMTS.start), e._supportOffscreen() && (e._bitmaprenderer = e.$canvasElement.getContext("bitmaprenderer"));
  432 + break;
  433 + case v().CMD_TYPE.render:
  434 + e.loading && (e.loading = !1, e.playing = !0, e._clearCheckLoading()), e.playing && (e._supportOffscreen() ? e._bitmaprenderer.transferFromImageBitmap(n.buffer) : e._contextGLRender(e.$canvasElement.width, e.$canvasElement.height, n.output[0], n.output[1], n.output[2])), e._trigger(v().EVEMTS.timeUpdate, n.ts), e.onTimeUpdate(n.ts), e._updateStats({
  435 + buf: n.delay,
  436 + ts: n.ts
  437 + }), e._checkHeart();
  438 + break;
  439 + case v().CMD_TYPE.playAudio:
  440 + e.playing && !e.quieting && e._playAudio(n.buffer);
  441 + break;
  442 + case v().CMD_TYPE.print:
  443 + e.onLog(n.text), e._trigger(v().EVEMTS.log, n.text);
  444 + break;
  445 + case v().CMD_TYPE.printErr:
  446 + e.onLog(n.text), e._trigger(v().EVEMTS.log, n.text), e.onError(n.text), e._trigger(v().EVEMTS.error, n.text);
  447 + break;
  448 + case v().CMD_TYPE.initAudioPlanar:
  449 + e._initAudioPlanar(n), e._trigger(v().EVEMTS.audioInfo, {
  450 + numOfChannels: n.channels,
  451 + sampleRate: n.samplerate
  452 + });
  453 + break;
  454 + case v().CMD_TYPE.kBps:
  455 + e.playing && (e.$doms.speedDom && (e.$doms.speedDom.innerText = R().bpsSize(n.kBps)), e._trigger(v().EVEMTS.kBps, n.kBps));
  456 + default:
  457 + e[n.cmd] && e[n.cmd](n)
  458 + }
  459 + }, e._decoderWorker = t
  460 + }, t(V, "default", (function () {
  461 + return Q
  462 + }))), V
  463 + }
  464 +
  465 + var Z, K, J = !1;
  466 +
  467 + function ee() {
  468 + return J || (J = !0, Z = {}, R(), v(), K = e => {
  469 + e._loading = !0, e._recording = !1, e._playing = !1, e._audioPlaying = !1, e._quieting = !1, e._fullscreen = !1, e._stats = {
  470 + buf: 0,
  471 + fps: 0,
  472 + abps: "",
  473 + vbps: "",
  474 + ts: ""
  475 + }, e._hasLoaded = !1, e._playUrl = "", e._startBpsTime = "", e._bps = 0, e._checkHeartTimeout = null, e._wakeLock = null, e._contextGL = null, e._contextGLRender = null, e._checkLoadingTimeout = null, e._bitmaprenderer = null, e._isPlayingBeforePageHidden = !1, e._initCheckVariable = () => {
  476 + e._startBpsTime = "", e._bps = 0, e._clearCheckHeartTimeout(), e._clearCheckLoading()
  477 + }, e._clearCheckHeartTimeout = () => {
  478 + e._checkHeartTimeout && (clearTimeout(e._checkHeartTimeout), e._checkHeartTimeout = null)
  479 + }, e._startCheckHeartTimeout = () => {
  480 + e._checkHeartTimeout = setTimeout((function () {
  481 + e._trigger(v().EVEMTS.timeout), e.recording = !1, e.playing = !1, e._close()
  482 + }), 1e3 * e._opt.timeout)
  483 + }, e._clearCheckLoading = () => {
  484 + e._checkLoadingTimeout && (clearTimeout(e._checkLoadingTimeout), e._checkLoadingTimeout = null)
  485 + }, e._checkLoading = () => {
  486 + e._clearCheckLoading(), e._checkLoadingTimeout = setTimeout((() => {
  487 + e._trigger(v().EVEMTS.timeout), e.playing = !1, e._close(), R().$domToggle(e.$doms.loadingDom, !1)
  488 + }), 1e3 * e._opt.timeout)
  489 + }
  490 + }, t(Z, "default", (function () {
  491 + return K
  492 + }))), Z
  493 + }
  494 +
  495 + var te, re, ne = !1;
  496 +
  497 + function oe() {
  498 + return ne || (ne = !0, te = {}, R(), re = e => {
  499 + e.onPlay = R().noop, e.onPause = R().noop, e.onRecord = R().noop, e.onFullscreen = R().noop, e.onMute = R().noop, e.onLoad = R().noop, e.onLog = R().noop, e.onError = R().noop, e.onTimeUpdate = R().noop, e.onInitSize = R().noop
  500 + }, t(te, "default", (function () {
  501 + return re
  502 + }))), te
  503 + }
  504 +
  505 + var ae, ie, se = !1;
  506 +
  507 + function ue() {
  508 + return se || (se = !0, ie = e => {
  509 + e._on = (t, r) => {
  510 + let n, o, a;
  511 + if (!r) return e;
  512 + for (n = e.__events || (e.__events = {}), t = t.split(/\s+/); o = t.shift();) a = n[o] || (n[o] = []), a.push(r);
  513 + return e
  514 + }, e._off = () => {
  515 + let t;
  516 + return (t = e.__events) ? (delete e.__events, e) : e
  517 + }, e._trigger = (t, ...r) => {
  518 + function n(e, t) {
  519 + if (e) for (let r = 0, n = e.length; r < n; r += 1) e[r](...t)
  520 + }
  521 +
  522 + let o, a, i;
  523 + if (!(o = e.__events)) return e;
  524 + for (t = t.split(/\s+/); a = t.shift();) (i = o[a]) && (i = i.slice()), n(i, r);
  525 + return e
  526 + }
  527 + }, t(ae = {}, "default", (function () {
  528 + return ie
  529 + }))), ae
  530 + }
  531 +
  532 + var ce, le, de = !1;
  533 +
  534 + function fe() {
  535 + return de || (de = !0, ce = {}, R(), v(), le = e => {
  536 + e._pause = () => {
  537 + e._close(), e.loading && R().$domToggle(e.$doms.loadingDom, !1), e.recording = !1, e.playing = !1
  538 + }, e._play = t => {
  539 + if (!e._playUrl && !t) return;
  540 + let r = !1;
  541 + t ? (e._playUrl && (e._close(), r = !0, e.clearView()), e.loading = !0, R().$domToggle(e.$doms.bgDom, !1), e._checkLoading(), e._playUrl = t) : e._playUrl && (e.loading ? (R().$hideBtns(e.$doms), R().$domToggle(e.$doms.fullscreenDom, !0), R().$domToggle(e.$doms.pauseDom, !0), R().$domToggle(e.$doms.loadingDom, !0), e._checkLoading()) : e.playing = !0), e._initCheckVariable(), r ? setTimeout((() => {
  542 + e._decoderWorker.postMessage({cmd: v().POST_MESSAGE.play, url: e._playUrl})
  543 + }), 300) : e._decoderWorker.postMessage({cmd: v().POST_MESSAGE.play, url: e._playUrl})
  544 + }, e._screenshot = (t, r, n) => {
  545 + t = t || R().now();
  546 + const o = {png: "image/png", jpeg: "image/jpeg", webp: "image/webp"};
  547 + let a = .92;
  548 + void 0 !== n && (a = Number(n));
  549 + const i = e.$canvasElement.toDataURL(o[r] || o.png, a);
  550 + R().downloadImg(R().dataURLToFile(i), t)
  551 + }, e._close = () => {
  552 + e._close$2(), e._clearView()
  553 + }, e._close$2 = () => {
  554 + e._opt.debug && console.log("_close$2-START"), e._closeAudio && e._closeAudio(), e._audioPlayBuffers = [], e._audioPlaying = !1, e._decoderWorker.postMessage({cmd: v().POST_MESSAGE.close}), delete e._playAudio, e._releaseWakeLock(), e._initCheckVariable(), e._opt.debug && console.log("_close$2-END")
  555 + }, e._releaseWakeLock = () => {
  556 + e._wakeLock && (e._wakeLock.release(), e._wakeLock = null)
  557 + }, e._clearView = () => {
  558 + e._contextGL && e._contextGL.clear(e._contextGL.COLOR_BUFFER_BIT)
  559 + }, e._resize = () => {
  560 + const t = e.$container.clientWidth;
  561 + let r = e.$container.clientHeight;
  562 + e._showControl() && (r -= 38);
  563 + const n = e.$canvasElement.width, o = e.$canvasElement.height, a = e._opt.rotate, i = t / n, s = r / o;
  564 + let u = i > s ? s : i;
  565 + e._opt.isResize || i !== s && (u = i + "," + s), e._opt.isFullResize && (u = i > s ? i : s);
  566 + let c = "scale(" + u + ")";
  567 + a && (c += " rotate(" + a + "deg)"), e.$canvasElement.style.transform = c, e.$canvasElement.style.left = (t - n) / 2 + "px", e.$canvasElement.style.top = (r - o) / 2 + "px"
  568 + }, e._enableWakeLock = () => {
  569 + e._opt.keepScreenOn && "wakeLock" in navigator && navigator.wakeLock.request("screen").then((t => {
  570 + e._wakeLock = t
  571 + }))
  572 + }, e._supportOffscreen = () => !e._opt.forceNoOffscreen && "function" == typeof e.$canvasElement.transferControlToOffscreen, e._checkHeart = () => {
  573 + e._clearCheckHeartTimeout(), e._startCheckHeartTimeout()
  574 + }, e._updateStats = t => {
  575 + t = t || {}, e._startBpsTime || (e._startBpsTime = R().now());
  576 + const r = R().now();
  577 + r - e._startBpsTime < 1e3 ? e._stats.fps += 1 : (e._stats.ts = t.ts, e._stats.buf = t.buf, e._trigger(v().EVEMTS.stats, e._stats), e._trigger(v().EVEMTS.performance, R().fpsStatus(e._stats.fps)), e._trigger(v().EVEMTS.buffer, R().bufferStatus(e._stats.buf, 1e3 * e._opt.videoBuffer)), e._stats.fps = 0, e._startBpsTime = r)
  578 + }, e._onfullscreenchange = () => {
  579 + (void 0).fullscreen = R().checkFull()
  580 + }, e._handleVisibilityChange = () => {
  581 + e._opt.debug && console.log(document.visibilityState, e._isPlayingBeforePageHidden), "visible" === document.visibilityState ? e._isPlayingBeforePageHidden && e._play() : (e._isPlayingBeforePageHidden = e.playing, e.playing && e._pause())
  582 + }, e._handleWakeLock = () => {
  583 + null !== e._wakeLock && "visible" === document.visibilityState && e._enableWakeLock()
  584 + }
  585 + }, t(ce, "default", (function () {
  586 + return le
  587 + }))), ce
  588 + }
  589 +
  590 + var pe, he, me = !1;
  591 +
  592 + function Ae() {
  593 + return me || (me = !0, pe = {}, ee(), oe(), ue(), fe(), he = e => {
  594 + ee().default(e), oe().default(e), ue().default(e), fe().default(e)
  595 + }, t(pe, "default", (function () {
  596 + return he
  597 + }))), pe
  598 + }
  599 +
  600 + var ge, ve = !1;
  601 + var Ee, ye, we, _e, be, ke, Te, De, Se, Ce, Oe, Pe, xe, Be, Me, Re, Le, Ie, Fe, Ue, Ne, je, Ge, ze, We, Ye, He, $e,
  602 + Ve, Qe, Xe, qe, Ze, Ke, Je, et, tt, rt, nt, ot, at, it, st, ut, ct, lt, dt, ft, pt, ht, mt, At, gt, vt, Et, yt, wt,
  603 + _t, bt, kt, Tt, Dt, St, Ct, Ot, Pt, xt, Bt, Mt, Rt, Lt, It, Ft, Ut, Nt, jt, Gt, zt, Wt, Yt, Ht, $t, Vt, Qt, Xt, qt,
  604 + Zt, Kt, Jt, er, tr, rr, nr, or, ar, ir, sr, ur, cr, lr, dr, fr, pr, hr, mr, Ar, gr, vr, Er, yr, wr, _r, br, kr, Tr,
  605 + Dr = !1;
  606 +
  607 + function Sr(e) {
  608 + return Ee.locateFile ? Ee.locateFile(e, Oe) : Oe + e
  609 + }
  610 +
  611 + function Cr(e) {
  612 + Cr.shown || (Cr.shown = {}), Cr.shown[e] || (Cr.shown[e] = 1, Me(e))
  613 + }
  614 +
  615 + function Or(e, t) {
  616 + e || Yr("Assertion failed: " + t)
  617 + }
  618 +
  619 + function Pr(e, t, r) {
  620 + for (var n = t + r, o = ""; !(t >= n);) {
  621 + var a = e[t++];
  622 + if (!a) return o;
  623 + if (128 & a) {
  624 + var i = 63 & e[t++];
  625 + if (192 != (224 & a)) {
  626 + var s = 63 & e[t++];
  627 + if ((a = 224 == (240 & a) ? (15 & a) << 12 | i << 6 | s : (7 & a) << 18 | i << 12 | s << 6 | 63 & e[t++]) < 65536) o += String.fromCharCode(a); else {
  628 + var u = a - 65536;
  629 + o += String.fromCharCode(55296 | u >> 10, 56320 | 1023 & u)
  630 + }
  631 + } else o += String.fromCharCode((31 & a) << 6 | i)
  632 + } else o += String.fromCharCode(a)
  633 + }
  634 + return o
  635 + }
  636 +
  637 + function xr(e, t) {
  638 + return e ? Pr(We, e, t) : ""
  639 + }
  640 +
  641 + function Br(e, t, r, n) {
  642 + if (!(n > 0)) return 0;
  643 + for (var o = r, a = r + n - 1, i = 0; i < e.length; ++i) {
  644 + var s = e.charCodeAt(i);
  645 + if (s >= 55296 && s <= 57343) s = 65536 + ((1023 & s) << 10) | 1023 & e.charCodeAt(++i);
  646 + if (s <= 127) {
  647 + if (r >= a) break;
  648 + t[r++] = s
  649 + } else if (s <= 2047) {
  650 + if (r + 1 >= a) break;
  651 + t[r++] = 192 | s >> 6, t[r++] = 128 | 63 & s
  652 + } else if (s <= 65535) {
  653 + if (r + 2 >= a) break;
  654 + t[r++] = 224 | s >> 12, t[r++] = 128 | s >> 6 & 63, t[r++] = 128 | 63 & s
  655 + } else {
  656 + if (r + 3 >= a) break;
  657 + t[r++] = 240 | s >> 18, t[r++] = 128 | s >> 12 & 63, t[r++] = 128 | s >> 6 & 63, t[r++] = 128 | 63 & s
  658 + }
  659 + }
  660 + return t[r] = 0, r - o
  661 + }
  662 +
  663 + function Mr(e, t, r) {
  664 + return Br(e, We, t, r)
  665 + }
  666 +
  667 + function Rr(e) {
  668 + for (var t = 0, r = 0; r < e.length; ++r) {
  669 + var n = e.charCodeAt(r);
  670 + n >= 55296 && n <= 57343 && (n = 65536 + ((1023 & n) << 10) | 1023 & e.charCodeAt(++r)), n <= 127 ? ++t : t += n <= 2047 ? 2 : n <= 65535 ? 3 : 4
  671 + }
  672 + return t
  673 + }
  674 +
  675 + function Lr(e, t) {
  676 + for (var r = "", n = 0; !(n >= t / 2); ++n) {
  677 + var o = Ye[e + 2 * n >> 1];
  678 + if (0 == o) break;
  679 + r += String.fromCharCode(o)
  680 + }
  681 + return r
  682 + }
  683 +
  684 + function Ir(e, t, r) {
  685 + if (void 0 === r && (r = 2147483647), r < 2) return 0;
  686 + for (var n = t, o = (r -= 2) < 2 * e.length ? r / 2 : e.length, a = 0; a < o; ++a) {
  687 + var i = e.charCodeAt(a);
  688 + Ye[t >> 1] = i, t += 2
  689 + }
  690 + return Ye[t >> 1] = 0, t - n
  691 + }
  692 +
  693 + function Fr(e) {
  694 + return 2 * e.length
  695 + }
  696 +
  697 + function Ur(e, t) {
  698 + for (var r = 0, n = ""; !(r >= t / 4);) {
  699 + var o = $e[e + 4 * r >> 2];
  700 + if (0 == o) break;
  701 + if (++r, o >= 65536) {
  702 + var a = o - 65536;
  703 + n += String.fromCharCode(55296 | a >> 10, 56320 | 1023 & a)
  704 + } else n += String.fromCharCode(o)
  705 + }
  706 + return n
  707 + }
  708 +
  709 + function Nr(e, t, r) {
  710 + if (void 0 === r && (r = 2147483647), r < 4) return 0;
  711 + for (var n = t, o = n + r - 4, a = 0; a < e.length; ++a) {
  712 + var i = e.charCodeAt(a);
  713 + if (i >= 55296 && i <= 57343) i = 65536 + ((1023 & i) << 10) | 1023 & e.charCodeAt(++a);
  714 + if ($e[t >> 2] = i, (t += 4) + 4 > o) break
  715 + }
  716 + return $e[t >> 2] = 0, t - n
  717 + }
  718 +
  719 + function jr(e) {
  720 + for (var t = 0, r = 0; r < e.length; ++r) {
  721 + var n = e.charCodeAt(r);
  722 + n >= 55296 && n <= 57343 && ++r, t += 4
  723 + }
  724 + return t
  725 + }
  726 +
  727 + function Gr(e) {
  728 + var t = Rr(e) + 1, r = Jt(t);
  729 + return r && Br(e, ze, r, t), r
  730 + }
  731 +
  732 + function zr(e) {
  733 + Or(!Se, "addRunDependency cannot be used in a pthread worker"), nt++, Ee.monitorRunDependencies && Ee.monitorRunDependencies(nt)
  734 + }
  735 +
  736 + function Wr(e) {
  737 + if (nt--, Ee.monitorRunDependencies && Ee.monitorRunDependencies(nt), 0 == nt && (null !== ot && (clearInterval(ot), ot = null), at)) {
  738 + var t = at;
  739 + at = null, t()
  740 + }
  741 + }
  742 +
  743 + function Yr(e) {
  744 + throw Ee.onAbort && Ee.onAbort(e), Se && console.error("Pthread aborting at " + (new Error).stack), Me(e += ""), je = !0, 1, e = "abort(" + e + "). Build with -s ASSERTIONS=1 for more info.", new WebAssembly.RuntimeError(e)
  745 + }
  746 +
  747 + function Hr(e) {
  748 + return t = e, r = it, String.prototype.startsWith ? t.startsWith(r) : 0 === t.indexOf(r);
  749 + var t, r
  750 + }
  751 +
  752 + function $r(e) {
  753 + try {
  754 + if (e == st && Ie) return new Uint8Array(Ie);
  755 + if (xe) return xe(e);
  756 + throw"both async and sync fetching of the wasm failed"
  757 + } catch (e) {
  758 + Yr(e)
  759 + }
  760 + }
  761 +
  762 + function Vr() {
  763 + var e = {a: qt};
  764 +
  765 + function t(e, t) {
  766 + var r = e.exports;
  767 + Ee.asm = r, Ze = Ee.asm.da, Ne = t, Se || Wr()
  768 + }
  769 +
  770 + function r(e) {
  771 + t(e.instance, e.module)
  772 + }
  773 +
  774 + function n(t) {
  775 + return (Ie || !Te && !De || "function" != typeof fetch ? Promise.resolve().then((function () {
  776 + return $r(st)
  777 + })) : fetch(st, {credentials: "same-origin"}).then((function (e) {
  778 + if (!e.ok) throw"failed to load wasm binary file at '" + st + "'";
  779 + return e.arrayBuffer()
  780 + })).catch((function () {
  781 + return $r(st)
  782 + }))).then((function (t) {
  783 + return WebAssembly.instantiate(t, e)
  784 + })).then(t, (function (e) {
  785 + Me("failed to asynchronously prepare wasm: " + e), Yr(e)
  786 + }))
  787 + }
  788 +
  789 + if (Se || zr(), Ee.instantiateWasm) try {
  790 + return Ee.instantiateWasm(e, t)
  791 + } catch (e) {
  792 + return Me("Module.instantiateWasm callback failed with error: " + e), !1
  793 + }
  794 + return Ie || "function" != typeof WebAssembly.instantiateStreaming || Hr(st) || "function" != typeof fetch ? n(r) : fetch(st, {credentials: "same-origin"}).then((function (t) {
  795 + return WebAssembly.instantiateStreaming(t, e).then(r, (function (e) {
  796 + return Me("wasm streaming compile failed: " + e), Me("falling back to ArrayBuffer instantiation"), n(r)
  797 + }))
  798 + })), {}
  799 + }
  800 +
  801 + function Qr() {
  802 + ft.initRuntime()
  803 + }
  804 +
  805 + function Xr(e) {
  806 + for (; e.length > 0;) {
  807 + var t = e.shift();
  808 + if ("function" != typeof t) {
  809 + var r = t.func;
  810 + "number" == typeof r ? void 0 === t.arg ? Ze.get(r)() : Ze.get(r)(t.arg) : r(void 0 === t.arg ? null : t.arg)
  811 + } else t(Ee)
  812 + }
  813 + }
  814 +
  815 + function qr(e, t) {
  816 + if (e <= 0 || e > ze.length || !0 & e || t < 0) return -28;
  817 + if (0 == t) return 0;
  818 + t >= 2147483647 && (t = 1 / 0);
  819 + var r = Atomics.load($e, br >> 2), n = 0;
  820 + if (r == e && (Atomics.compareExchange($e, br >> 2, r, 0) == r && (n = 1, --t <= 0))) return 1;
  821 + var o = Atomics.notify($e, e >> 2, t);
  822 + if (o >= 0) return o + n;
  823 + throw"Atomics.notify returned an unexpected value " + o
  824 + }
  825 +
  826 + function Zr(e) {
  827 + if (Se) throw"Internal Error! cleanupThread() can only ever be called from main application thread!";
  828 + if (!e) throw"Internal Error! Null pthread_ptr in cleanupThread!";
  829 + $e[e + 12 >> 2] = 0;
  830 + var t = ft.pthreads[e];
  831 + if (t) {
  832 + var r = t.worker;
  833 + ft.returnWorkerToPool(r)
  834 + }
  835 + }
  836 +
  837 + function Kr(e, t) {
  838 + yr(e, t), vr(e)
  839 + }
  840 +
  841 + function Jr() {
  842 + return Fe
  843 + }
  844 +
  845 + function en(e, t) {
  846 + return Ze.get(e)(t)
  847 + }
  848 +
  849 + function tn() {
  850 + var e = new Error;
  851 + if (!e.stack) {
  852 + try {
  853 + throw new Error
  854 + } catch (t) {
  855 + e = t
  856 + }
  857 + if (!e.stack) return "(no stack trace available)"
  858 + }
  859 + return e.stack.toString()
  860 + }
  861 +
  862 + function rn(e, t, r, n) {
  863 + Yr("Assertion failed: " + xr(e) + ", at: " + [t ? xr(t) : "unknown filename", r, n ? xr(n) : "unknown function"])
  864 + }
  865 +
  866 + function nn(e) {
  867 + return $e[tr() >> 2] = e, e
  868 + }
  869 +
  870 + function on(e) {
  871 + for (var t = function (e, t) {
  872 + return t || (t = Re), Math.ceil(e / t) * t
  873 + }(e, 16384), r = Jt(t); e < t;) ze[r + e++] = 0;
  874 + return r
  875 + }
  876 +
  877 + function an(e, t, r) {
  878 + if (Se) return zo(1, 1, e, t, r);
  879 + Et.varargs = r;
  880 + try {
  881 + var n = Et.getStreamFromFD(e);
  882 + switch (t) {
  883 + case 0:
  884 + return (o = Et.get()) < 0 ? -28 : vt.open(n.path, n.flags, 0, o).fd;
  885 + case 1:
  886 + case 2:
  887 + return 0;
  888 + case 3:
  889 + return n.flags;
  890 + case 4:
  891 + var o = Et.get();
  892 + return n.flags |= o, 0;
  893 + case 12:
  894 + o = Et.get();
  895 + return Ye[o + 0 >> 1] = 2, 0;
  896 + case 13:
  897 + case 14:
  898 + return 0;
  899 + case 16:
  900 + case 8:
  901 + return -28;
  902 + case 9:
  903 + return nn(28), -1;
  904 + default:
  905 + return -28
  906 + }
  907 + } catch (e) {
  908 + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), -e.errno
  909 + }
  910 + }
  911 +
  912 + function sn(e, t, r) {
  913 + if (Se) return zo(2, 1, e, t, r);
  914 + Et.varargs = r;
  915 + try {
  916 + var n = Et.getStr(e), o = r ? Et.get() : 0;
  917 + return vt.open(n, t, o).fd
  918 + } catch (e) {
  919 + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), -e.errno
  920 + }
  921 + }
  922 +
  923 + function un(e) {
  924 + switch (e) {
  925 + case 1:
  926 + return 0;
  927 + case 2:
  928 + return 1;
  929 + case 4:
  930 + return 2;
  931 + case 8:
  932 + return 3;
  933 + default:
  934 + throw new TypeError("Unknown type size: " + e)
  935 + }
  936 + }
  937 +
  938 + function cn(e) {
  939 + for (var t = "", r = e; We[r];) t += yt[We[r++]];
  940 + return t
  941 + }
  942 +
  943 + function ln(e) {
  944 + if (void 0 === e) return "_unknown";
  945 + var t = (e = e.replace(/[^a-zA-Z0-9_]/g, "$")).charCodeAt(0);
  946 + return t >= kt && t <= Tt ? "_" + e : e
  947 + }
  948 +
  949 + function dn(e, t) {
  950 + return e = ln(e), new Function("body", "return function " + e + '() {\n "use strict"; return body.apply(this, arguments);\n};\n')(t)
  951 + }
  952 +
  953 + function fn(e, t) {
  954 + var r = dn(t, (function (e) {
  955 + this.name = t, this.message = e;
  956 + var r = new Error(e).stack;
  957 + void 0 !== r && (this.stack = this.toString() + "\n" + r.replace(/^Error(:[^\n]*)?\n/, ""))
  958 + }));
  959 + return r.prototype = Object.create(e.prototype), r.prototype.constructor = r, r.prototype.toString = function () {
  960 + return void 0 === this.message ? this.name : this.name + ": " + this.message
  961 + }, r
  962 + }
  963 +
  964 + function pn(e) {
  965 + throw new Dt(e)
  966 + }
  967 +
  968 + function hn(e) {
  969 + throw new St(e)
  970 + }
  971 +
  972 + function mn(e, t, r) {
  973 + function n(t) {
  974 + var n = r(t);
  975 + n.length !== e.length && hn("Mismatched type converter count");
  976 + for (var o = 0; o < e.length; ++o) An(e[o], n[o])
  977 + }
  978 +
  979 + e.forEach((function (e) {
  980 + bt[e] = t
  981 + }));
  982 + var o = new Array(t.length), a = [], i = 0;
  983 + t.forEach((function (e, t) {
  984 + _t.hasOwnProperty(e) ? o[t] = _t[e] : (a.push(e), wt.hasOwnProperty(e) || (wt[e] = []), wt[e].push((function () {
  985 + o[t] = _t[e], ++i === a.length && n(o)
  986 + })))
  987 + })), 0 === a.length && n(o)
  988 + }
  989 +
  990 + function An(e, t, r) {
  991 + if (r = r || {}, !("argPackAdvance" in t)) throw new TypeError("registerType registeredInstance requires argPackAdvance");
  992 + var n = t.name;
  993 + if (e || pn('type "' + n + '" must have a positive integer typeid pointer'), _t.hasOwnProperty(e)) {
  994 + if (r.ignoreDuplicateRegistrations) return;
  995 + pn("Cannot register type '" + n + "' twice")
  996 + }
  997 + if (_t[e] = t, delete bt[e], wt.hasOwnProperty(e)) {
  998 + var o = wt[e];
  999 + delete wt[e], o.forEach((function (e) {
  1000 + e()
  1001 + }))
  1002 + }
  1003 + }
  1004 +
  1005 + function gn(e, t, r, n, o) {
  1006 + var a = un(r);
  1007 + An(e, {
  1008 + name: t = cn(t), fromWireType: function (e) {
  1009 + return !!e
  1010 + }, toWireType: function (e, t) {
  1011 + return t ? n : o
  1012 + }, argPackAdvance: 8, readValueFromPointer: function (e) {
  1013 + var n;
  1014 + if (1 === r) n = ze; else if (2 === r) n = Ye; else {
  1015 + if (4 !== r) throw new TypeError("Unknown boolean type size: " + t);
  1016 + n = $e
  1017 + }
  1018 + return this.fromWireType(n[e >> a])
  1019 + }, destructorFunction: null
  1020 + })
  1021 + }
  1022 +
  1023 + function vn(e) {
  1024 + if (!(this instanceof Cn)) return !1;
  1025 + if (!(e instanceof Cn)) return !1;
  1026 + for (var t = this.$$.ptrType.registeredClass, r = this.$$.ptr, n = e.$$.ptrType.registeredClass, o = e.$$.ptr; t.baseClass;) r = t.upcast(r), t = t.baseClass;
  1027 + for (; n.baseClass;) o = n.upcast(o), n = n.baseClass;
  1028 + return t === n && r === o
  1029 + }
  1030 +
  1031 + function En(e) {
  1032 + pn(e.$$.ptrType.registeredClass.name + " instance already deleted")
  1033 + }
  1034 +
  1035 + function yn(e) {
  1036 + }
  1037 +
  1038 + function wn(e) {
  1039 + e.count.value -= 1, 0 === e.count.value && function (e) {
  1040 + e.smartPtr ? e.smartPtrType.rawDestructor(e.smartPtr) : e.ptrType.registeredClass.rawDestructor(e.ptr)
  1041 + }(e)
  1042 + }
  1043 +
  1044 + function _n(e) {
  1045 + return "undefined" == typeof FinalizationGroup ? (_n = function (e) {
  1046 + return e
  1047 + }, e) : (Ct = new FinalizationGroup((function (e) {
  1048 + for (var t = e.next(); !t.done; t = e.next()) {
  1049 + var r = t.value;
  1050 + r.ptr ? wn(r) : console.warn("object already deleted: " + r.ptr)
  1051 + }
  1052 + })), yn = function (e) {
  1053 + Ct.unregister(e.$$)
  1054 + }, (_n = function (e) {
  1055 + return Ct.register(e, e.$$, e.$$), e
  1056 + })(e))
  1057 + }
  1058 +
  1059 + function bn() {
  1060 + if (this.$$.ptr || En(this), this.$$.preservePointerOnDelete) return this.$$.count.value += 1, this;
  1061 + var e, t = _n(Object.create(Object.getPrototypeOf(this), {
  1062 + $$: {
  1063 + value: (e = this.$$, {
  1064 + count: e.count,
  1065 + deleteScheduled: e.deleteScheduled,
  1066 + preservePointerOnDelete: e.preservePointerOnDelete,
  1067 + ptr: e.ptr,
  1068 + ptrType: e.ptrType,
  1069 + smartPtr: e.smartPtr,
  1070 + smartPtrType: e.smartPtrType
  1071 + })
  1072 + }
  1073 + }));
  1074 + return t.$$.count.value += 1, t.$$.deleteScheduled = !1, t
  1075 + }
  1076 +
  1077 + function kn() {
  1078 + this.$$.ptr || En(this), this.$$.deleteScheduled && !this.$$.preservePointerOnDelete && pn("Object already scheduled for deletion"), yn(this), wn(this.$$), this.$$.preservePointerOnDelete || (this.$$.smartPtr = void 0, this.$$.ptr = void 0)
  1079 + }
  1080 +
  1081 + function Tn() {
  1082 + return !this.$$.ptr
  1083 + }
  1084 +
  1085 + function Dn() {
  1086 + for (; Pt.length;) {
  1087 + var e = Pt.pop();
  1088 + e.$$.deleteScheduled = !1, e.delete()
  1089 + }
  1090 + }
  1091 +
  1092 + function Sn() {
  1093 + return this.$$.ptr || En(this), this.$$.deleteScheduled && !this.$$.preservePointerOnDelete && pn("Object already scheduled for deletion"), Pt.push(this), 1 === Pt.length && Ot && Ot(Dn), this.$$.deleteScheduled = !0, this
  1094 + }
  1095 +
  1096 + function Cn() {
  1097 + }
  1098 +
  1099 + function On(e, t, r) {
  1100 + if (void 0 === e[t].overloadTable) {
  1101 + var n = e[t];
  1102 + e[t] = function () {
  1103 + return e[t].overloadTable.hasOwnProperty(arguments.length) || pn("Function '" + r + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + e[t].overloadTable + ")!"), e[t].overloadTable[arguments.length].apply(this, arguments)
  1104 + }, e[t].overloadTable = [], e[t].overloadTable[n.argCount] = n
  1105 + }
  1106 + }
  1107 +
  1108 + function Pn(e, t, r, n, o, a, i, s) {
  1109 + this.name = e, this.constructor = t, this.instancePrototype = r, this.rawDestructor = n, this.baseClass = o, this.getActualType = a, this.upcast = i, this.downcast = s, this.pureVirtualFunctions = []
  1110 + }
  1111 +
  1112 + function xn(e, t, r) {
  1113 + for (; t !== r;) t.upcast || pn("Expected null or instance of " + r.name + ", got an instance of " + t.name), e = t.upcast(e), t = t.baseClass;
  1114 + return e
  1115 + }
  1116 +
  1117 + function Bn(e, t) {
  1118 + if (null === t) return this.isReference && pn("null is not a valid " + this.name), 0;
  1119 + t.$$ || pn('Cannot pass "' + lo(t) + '" as a ' + this.name), t.$$.ptr || pn("Cannot pass deleted object as a pointer of type " + this.name);
  1120 + var r = t.$$.ptrType.registeredClass;
  1121 + return xn(t.$$.ptr, r, this.registeredClass)
  1122 + }
  1123 +
  1124 + function Mn(e, t) {
  1125 + var r;
  1126 + if (null === t) return this.isReference && pn("null is not a valid " + this.name), this.isSmartPointer ? (r = this.rawConstructor(), null !== e && e.push(this.rawDestructor, r), r) : 0;
  1127 + t.$$ || pn('Cannot pass "' + lo(t) + '" as a ' + this.name), t.$$.ptr || pn("Cannot pass deleted object as a pointer of type " + this.name), !this.isConst && t.$$.ptrType.isConst && pn("Cannot convert argument of type " + (t.$$.smartPtrType ? t.$$.smartPtrType.name : t.$$.ptrType.name) + " to parameter type " + this.name);
  1128 + var n = t.$$.ptrType.registeredClass;
  1129 + if (r = xn(t.$$.ptr, n, this.registeredClass), this.isSmartPointer) switch (void 0 === t.$$.smartPtr && pn("Passing raw pointer to smart pointer is illegal"), this.sharingPolicy) {
  1130 + case 0:
  1131 + t.$$.smartPtrType === this ? r = t.$$.smartPtr : pn("Cannot convert argument of type " + (t.$$.smartPtrType ? t.$$.smartPtrType.name : t.$$.ptrType.name) + " to parameter type " + this.name);
  1132 + break;
  1133 + case 1:
  1134 + r = t.$$.smartPtr;
  1135 + break;
  1136 + case 2:
  1137 + if (t.$$.smartPtrType === this) r = t.$$.smartPtr; else {
  1138 + var o = t.clone();
  1139 + r = this.rawShare(r, uo((function () {
  1140 + o.delete()
  1141 + }))), null !== e && e.push(this.rawDestructor, r)
  1142 + }
  1143 + break;
  1144 + default:
  1145 + pn("Unsupporting sharing policy")
  1146 + }
  1147 + return r
  1148 + }
  1149 +
  1150 + function Rn(e, t) {
  1151 + if (null === t) return this.isReference && pn("null is not a valid " + this.name), 0;
  1152 + t.$$ || pn('Cannot pass "' + lo(t) + '" as a ' + this.name), t.$$.ptr || pn("Cannot pass deleted object as a pointer of type " + this.name), t.$$.ptrType.isConst && pn("Cannot convert argument of type " + t.$$.ptrType.name + " to parameter type " + this.name);
  1153 + var r = t.$$.ptrType.registeredClass;
  1154 + return xn(t.$$.ptr, r, this.registeredClass)
  1155 + }
  1156 +
  1157 + function Ln(e) {
  1158 + return this.fromWireType(Ve[e >> 2])
  1159 + }
  1160 +
  1161 + function In(e) {
  1162 + return this.rawGetPointee && (e = this.rawGetPointee(e)), e
  1163 + }
  1164 +
  1165 + function Fn(e) {
  1166 + this.rawDestructor && this.rawDestructor(e)
  1167 + }
  1168 +
  1169 + function Un(e) {
  1170 + null !== e && e.delete()
  1171 + }
  1172 +
  1173 + function Nn(e, t, r) {
  1174 + if (t === r) return e;
  1175 + if (void 0 === r.baseClass) return null;
  1176 + var n = Nn(e, t, r.baseClass);
  1177 + return null === n ? null : r.downcast(n)
  1178 + }
  1179 +
  1180 + function jn() {
  1181 + return Object.keys(Bt).length
  1182 + }
  1183 +
  1184 + function Gn() {
  1185 + var e = [];
  1186 + for (var t in Bt) Bt.hasOwnProperty(t) && e.push(Bt[t]);
  1187 + return e
  1188 + }
  1189 +
  1190 + function zn(e) {
  1191 + Ot = e, Pt.length && Ot && Ot(Dn)
  1192 + }
  1193 +
  1194 + function Wn(e, t) {
  1195 + return t = function (e, t) {
  1196 + for (void 0 === t && pn("ptr should not be undefined"); e.baseClass;) t = e.upcast(t), e = e.baseClass;
  1197 + return t
  1198 + }(e, t), Bt[t]
  1199 + }
  1200 +
  1201 + function Yn(e, t) {
  1202 + return t.ptrType && t.ptr || hn("makeClassHandle requires ptr and ptrType"), !!t.smartPtrType !== !!t.smartPtr && hn("Both smartPtrType and smartPtr must be specified"), t.count = {value: 1}, _n(Object.create(e, {$$: {value: t}}))
  1203 + }
  1204 +
  1205 + function Hn(e) {
  1206 + var t = this.getPointee(e);
  1207 + if (!t) return this.destructor(e), null;
  1208 + var r = Wn(this.registeredClass, t);
  1209 + if (void 0 !== r) {
  1210 + if (0 === r.$$.count.value) return r.$$.ptr = t, r.$$.smartPtr = e, r.clone();
  1211 + var n = r.clone();
  1212 + return this.destructor(e), n
  1213 + }
  1214 +
  1215 + function o() {
  1216 + return this.isSmartPointer ? Yn(this.registeredClass.instancePrototype, {
  1217 + ptrType: this.pointeeType,
  1218 + ptr: t,
  1219 + smartPtrType: this,
  1220 + smartPtr: e
  1221 + }) : Yn(this.registeredClass.instancePrototype, {ptrType: this, ptr: e})
  1222 + }
  1223 +
  1224 + var a, i = this.registeredClass.getActualType(t), s = xt[i];
  1225 + if (!s) return o.call(this);
  1226 + a = this.isConst ? s.constPointerType : s.pointerType;
  1227 + var u = Nn(t, this.registeredClass, a.registeredClass);
  1228 + return null === u ? o.call(this) : this.isSmartPointer ? Yn(a.registeredClass.instancePrototype, {
  1229 + ptrType: a,
  1230 + ptr: u,
  1231 + smartPtrType: this,
  1232 + smartPtr: e
  1233 + }) : Yn(a.registeredClass.instancePrototype, {ptrType: a, ptr: u})
  1234 + }
  1235 +
  1236 + function $n(e, t, r, n, o, a, i, s, u, c, l) {
  1237 + this.name = e, this.registeredClass = t, this.isReference = r, this.isConst = n, this.isSmartPointer = o, this.pointeeType = a, this.sharingPolicy = i, this.rawGetPointee = s, this.rawConstructor = u, this.rawShare = c, this.rawDestructor = l, o || void 0 !== t.baseClass ? this.toWireType = Mn : n ? (this.toWireType = Bn, this.destructorFunction = null) : (this.toWireType = Rn, this.destructorFunction = null)
  1238 + }
  1239 +
  1240 + function Vn(e, t, r) {
  1241 + return -1 != e.indexOf("j") ? function (e, t, r) {
  1242 + var n = Ee["dynCall_" + e];
  1243 + return r && r.length ? n.apply(null, [t].concat(r)) : n.call(null, t)
  1244 + }(e, t, r) : Ze.get(t).apply(null, r)
  1245 + }
  1246 +
  1247 + function Qn(e, t) {
  1248 + var r, n, o, a = -1 != (e = cn(e)).indexOf("j") ? (r = e, n = t, o = [], function () {
  1249 + o.length = arguments.length;
  1250 + for (var e = 0; e < arguments.length; e++) o[e] = arguments[e];
  1251 + return Vn(r, n, o)
  1252 + }) : Ze.get(t);
  1253 + return "function" != typeof a && pn("unknown function pointer with signature " + e + ": " + t), a
  1254 + }
  1255 +
  1256 + function Xn(e) {
  1257 + var t = rr(e), r = cn(t);
  1258 + return Kt(t), r
  1259 + }
  1260 +
  1261 + function qn(e, t) {
  1262 + var r = [], n = {};
  1263 + throw t.forEach((function e(t) {
  1264 + n[t] || _t[t] || (bt[t] ? bt[t].forEach(e) : (r.push(t), n[t] = !0))
  1265 + })), new Mt(e + ": " + r.map(Xn).join([", "]))
  1266 + }
  1267 +
  1268 + function Zn(e, t, r, n, o, a, i, s, u, c, l, d, f) {
  1269 + l = cn(l), a = Qn(o, a), s && (s = Qn(i, s)), c && (c = Qn(u, c)), f = Qn(d, f);
  1270 + var p = ln(l);
  1271 + !function (e, t, r) {
  1272 + Ee.hasOwnProperty(e) ? ((void 0 === r || void 0 !== Ee[e].overloadTable && void 0 !== Ee[e].overloadTable[r]) && pn("Cannot register public name '" + e + "' twice"), On(Ee, e, e), Ee.hasOwnProperty(r) && pn("Cannot register multiple overloads of a function with the same number of arguments (" + r + ")!"), Ee[e].overloadTable[r] = t) : (Ee[e] = t, void 0 !== r && (Ee[e].numArguments = r))
  1273 + }(p, (function () {
  1274 + qn("Cannot construct " + l + " due to unbound types", [n])
  1275 + })), mn([e, t, r], n ? [n] : [], (function (t) {
  1276 + var r, o;
  1277 + t = t[0], o = n ? (r = t.registeredClass).instancePrototype : Cn.prototype;
  1278 + var i = dn(p, (function () {
  1279 + if (Object.getPrototypeOf(this) !== u) throw new Dt("Use 'new' to construct " + l);
  1280 + if (void 0 === d.constructor_body) throw new Dt(l + " has no accessible constructor");
  1281 + var e = d.constructor_body[arguments.length];
  1282 + if (void 0 === e) throw new Dt("Tried to invoke ctor of " + l + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(d.constructor_body).toString() + ") parameters instead!");
  1283 + return e.apply(this, arguments)
  1284 + })), u = Object.create(o, {constructor: {value: i}});
  1285 + i.prototype = u;
  1286 + var d = new Pn(l, i, u, f, r, a, s, c), h = new $n(l, d, !0, !1, !1), m = new $n(l + "*", d, !1, !1, !1),
  1287 + A = new $n(l + " const*", d, !1, !0, !1);
  1288 + return xt[e] = {pointerType: m, constPointerType: A}, function (e, t, r) {
  1289 + Ee.hasOwnProperty(e) || hn("Replacing nonexistant public symbol"), void 0 !== Ee[e].overloadTable && void 0 !== r ? Ee[e].overloadTable[r] = t : (Ee[e] = t, Ee[e].argCount = r)
  1290 + }(p, i), [h, m, A]
  1291 + }))
  1292 + }
  1293 +
  1294 + function Kn(e, t) {
  1295 + for (var r = [], n = 0; n < e; n++) r.push($e[(t >> 2) + n]);
  1296 + return r
  1297 + }
  1298 +
  1299 + function Jn(e) {
  1300 + for (; e.length;) {
  1301 + var t = e.pop();
  1302 + e.pop()(t)
  1303 + }
  1304 + }
  1305 +
  1306 + function eo(e, t, r, n, o, a) {
  1307 + Or(t > 0);
  1308 + var i = Kn(t, r);
  1309 + o = Qn(n, o);
  1310 + var s = [a], u = [];
  1311 + mn([], [e], (function (e) {
  1312 + var r = "constructor " + (e = e[0]).name;
  1313 + if (void 0 === e.registeredClass.constructor_body && (e.registeredClass.constructor_body = []), void 0 !== e.registeredClass.constructor_body[t - 1]) throw new Dt("Cannot register multiple constructors with identical number of parameters (" + (t - 1) + ") for class '" + e.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!");
  1314 + return e.registeredClass.constructor_body[t - 1] = function () {
  1315 + qn("Cannot construct " + e.name + " due to unbound types", i)
  1316 + }, mn([], i, (function (n) {
  1317 + return e.registeredClass.constructor_body[t - 1] = function () {
  1318 + arguments.length !== t - 1 && pn(r + " called with " + arguments.length + " arguments, expected " + (t - 1)), u.length = 0, s.length = t;
  1319 + for (var e = 1; e < t; ++e) s[e] = n[e].toWireType(u, arguments[e - 1]);
  1320 + var a = o.apply(null, s);
  1321 + return Jn(u), n[0].fromWireType(a)
  1322 + }, []
  1323 + })), []
  1324 + }))
  1325 + }
  1326 +
  1327 + function to(e, t) {
  1328 + if (!(e instanceof Function)) throw new TypeError("new_ called with constructor type " + typeof e + " which is not a function");
  1329 + var r = dn(e.name || "unknownFunctionName", (function () {
  1330 + }));
  1331 + r.prototype = e.prototype;
  1332 + var n = new r, o = e.apply(n, t);
  1333 + return o instanceof Object ? o : n
  1334 + }
  1335 +
  1336 + function ro(e, t, r, n, o, a, i, s) {
  1337 + var u = Kn(r, n);
  1338 + t = cn(t), a = Qn(o, a), mn([], [e], (function (e) {
  1339 + var n = (e = e[0]).name + "." + t;
  1340 +
  1341 + function o() {
  1342 + qn("Cannot call " + n + " due to unbound types", u)
  1343 + }
  1344 +
  1345 + s && e.registeredClass.pureVirtualFunctions.push(t);
  1346 + var c = e.registeredClass.instancePrototype, l = c[t];
  1347 + return void 0 === l || void 0 === l.overloadTable && l.className !== e.name && l.argCount === r - 2 ? (o.argCount = r - 2, o.className = e.name, c[t] = o) : (On(c, t, n), c[t].overloadTable[r - 2] = o), mn([], u, (function (o) {
  1348 + var s = function (e, t, r, n, o) {
  1349 + var a = t.length;
  1350 + a < 2 && pn("argTypes array size mismatch! Must at least get return value and 'this' types!");
  1351 + for (var i = null !== t[1] && null !== r, s = !1, u = 1; u < t.length; ++u) if (null !== t[u] && void 0 === t[u].destructorFunction) {
  1352 + s = !0;
  1353 + break
  1354 + }
  1355 + var c = "void" !== t[0].name, l = "", d = "";
  1356 + for (u = 0; u < a - 2; ++u) l += (0 !== u ? ", " : "") + "arg" + u, d += (0 !== u ? ", " : "") + "arg" + u + "Wired";
  1357 + var f = "return function " + ln(e) + "(" + l + ") {\nif (arguments.length !== " + (a - 2) + ") {\nthrowBindingError('function " + e + " called with ' + arguments.length + ' arguments, expected " + (a - 2) + " args!');\n}\n";
  1358 + s && (f += "var destructors = [];\n");
  1359 + var p = s ? "destructors" : "null",
  1360 + h = ["throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"],
  1361 + m = [pn, n, o, Jn, t[0], t[1]];
  1362 + for (i && (f += "var thisWired = classParam.toWireType(" + p + ", this);\n"), u = 0; u < a - 2; ++u) f += "var arg" + u + "Wired = argType" + u + ".toWireType(" + p + ", arg" + u + "); // " + t[u + 2].name + "\n", h.push("argType" + u), m.push(t[u + 2]);
  1363 + if (i && (d = "thisWired" + (d.length > 0 ? ", " : "") + d), f += (c ? "var rv = " : "") + "invoker(fn" + (d.length > 0 ? ", " : "") + d + ");\n", s) f += "runDestructors(destructors);\n"; else for (u = i ? 1 : 2; u < t.length; ++u) {
  1364 + var A = 1 === u ? "thisWired" : "arg" + (u - 2) + "Wired";
  1365 + null !== t[u].destructorFunction && (f += A + "_dtor(" + A + "); // " + t[u].name + "\n", h.push(A + "_dtor"), m.push(t[u].destructorFunction))
  1366 + }
  1367 + return c && (f += "var ret = retType.fromWireType(rv);\nreturn ret;\n"), f += "}\n", h.push(f), to(Function, h).apply(null, m)
  1368 + }(n, o, e, a, i);
  1369 + return void 0 === c[t].overloadTable ? (s.argCount = r - 2, c[t] = s) : c[t].overloadTable[r - 2] = s, []
  1370 + })), []
  1371 + }))
  1372 + }
  1373 +
  1374 + function no(e, t, r) {
  1375 + return e instanceof Object || pn(r + ' with invalid "this": ' + e), e instanceof t.registeredClass.constructor || pn(r + ' incompatible with "this" of type ' + e.constructor.name), e.$$.ptr || pn("cannot call emscripten binding method " + r + " on deleted object"), xn(e.$$.ptr, e.$$.ptrType.registeredClass, t.registeredClass)
  1376 + }
  1377 +
  1378 + function oo(e, t, r, n, o, a, i, s, u, c) {
  1379 + t = cn(t), o = Qn(n, o), mn([], [e], (function (e) {
  1380 + var n = (e = e[0]).name + "." + t, l = {
  1381 + get: function () {
  1382 + qn("Cannot access " + n + " due to unbound types", [r, i])
  1383 + }, enumerable: !0, configurable: !0
  1384 + };
  1385 + return l.set = u ? function () {
  1386 + qn("Cannot access " + n + " due to unbound types", [r, i])
  1387 + } : function (e) {
  1388 + pn(n + " is a read-only property")
  1389 + }, Object.defineProperty(e.registeredClass.instancePrototype, t, l), mn([], u ? [r, i] : [r], (function (r) {
  1390 + var i = r[0], l = {
  1391 + get: function () {
  1392 + var t = no(this, e, n + " getter");
  1393 + return i.fromWireType(o(a, t))
  1394 + }, enumerable: !0
  1395 + };
  1396 + if (u) {
  1397 + u = Qn(s, u);
  1398 + var d = r[1];
  1399 + l.set = function (t) {
  1400 + var r = no(this, e, n + " setter"), o = [];
  1401 + u(c, r, d.toWireType(o, t)), Jn(o)
  1402 + }
  1403 + }
  1404 + return Object.defineProperty(e.registeredClass.instancePrototype, t, l), []
  1405 + })), []
  1406 + }))
  1407 + }
  1408 +
  1409 + function ao(e) {
  1410 + e > 4 && 0 == --Lt[e].refcount && (Lt[e] = void 0, Rt.push(e))
  1411 + }
  1412 +
  1413 + function io() {
  1414 + for (var e = 0, t = 5; t < Lt.length; ++t) void 0 !== Lt[t] && ++e;
  1415 + return e
  1416 + }
  1417 +
  1418 + function so() {
  1419 + for (var e = 5; e < Lt.length; ++e) if (void 0 !== Lt[e]) return Lt[e];
  1420 + return null
  1421 + }
  1422 +
  1423 + function uo(e) {
  1424 + switch (e) {
  1425 + case void 0:
  1426 + return 1;
  1427 + case null:
  1428 + return 2;
  1429 + case!0:
  1430 + return 3;
  1431 + case!1:
  1432 + return 4;
  1433 + default:
  1434 + var t = Rt.length ? Rt.pop() : Lt.length;
  1435 + return Lt[t] = {refcount: 1, value: e}, t
  1436 + }
  1437 + }
  1438 +
  1439 + function co(e, t) {
  1440 + An(e, {
  1441 + name: t = cn(t), fromWireType: function (e) {
  1442 + var t = Lt[e].value;
  1443 + return ao(e), t
  1444 + }, toWireType: function (e, t) {
  1445 + return uo(t)
  1446 + }, argPackAdvance: 8, readValueFromPointer: Ln, destructorFunction: null
  1447 + })
  1448 + }
  1449 +
  1450 + function lo(e) {
  1451 + if (null === e) return "null";
  1452 + var t = typeof e;
  1453 + return "object" === t || "array" === t || "function" === t ? e.toString() : "" + e
  1454 + }
  1455 +
  1456 + function fo(e, t) {
  1457 + switch (t) {
  1458 + case 2:
  1459 + return function (e) {
  1460 + return this.fromWireType(Qe[e >> 2])
  1461 + };
  1462 + case 3:
  1463 + return function (e) {
  1464 + return this.fromWireType(Xe[e >> 3])
  1465 + };
  1466 + default:
  1467 + throw new TypeError("Unknown float type: " + e)
  1468 + }
  1469 + }
  1470 +
  1471 + function po(e, t, r) {
  1472 + var n = un(r);
  1473 + An(e, {
  1474 + name: t = cn(t), fromWireType: function (e) {
  1475 + return e
  1476 + }, toWireType: function (e, t) {
  1477 + if ("number" != typeof t && "boolean" != typeof t) throw new TypeError('Cannot convert "' + lo(t) + '" to ' + this.name);
  1478 + return t
  1479 + }, argPackAdvance: 8, readValueFromPointer: fo(t, n), destructorFunction: null
  1480 + })
  1481 + }
  1482 +
  1483 + function ho(e, t, r) {
  1484 + switch (t) {
  1485 + case 0:
  1486 + return r ? function (e) {
  1487 + return ze[e]
  1488 + } : function (e) {
  1489 + return We[e]
  1490 + };
  1491 + case 1:
  1492 + return r ? function (e) {
  1493 + return Ye[e >> 1]
  1494 + } : function (e) {
  1495 + return He[e >> 1]
  1496 + };
  1497 + case 2:
  1498 + return r ? function (e) {
  1499 + return $e[e >> 2]
  1500 + } : function (e) {
  1501 + return Ve[e >> 2]
  1502 + };
  1503 + default:
  1504 + throw new TypeError("Unknown integer type: " + e)
  1505 + }
  1506 + }
  1507 +
  1508 + function mo(e, t, r, n, o) {
  1509 + t = cn(t), -1 === o && (o = 4294967295);
  1510 + var a = un(r), i = function (e) {
  1511 + return e
  1512 + };
  1513 + if (0 === n) {
  1514 + var s = 32 - 8 * r;
  1515 + i = function (e) {
  1516 + return e << s >>> s
  1517 + }
  1518 + }
  1519 + var u = -1 != t.indexOf("unsigned");
  1520 + An(e, {
  1521 + name: t, fromWireType: i, toWireType: function (e, r) {
  1522 + if ("number" != typeof r && "boolean" != typeof r) throw new TypeError('Cannot convert "' + lo(r) + '" to ' + this.name);
  1523 + if (r < n || r > o) throw new TypeError('Passing a number "' + lo(r) + '" from JS side to C/C++ side to an argument of type "' + t + '", which is outside the valid range [' + n + ", " + o + "]!");
  1524 + return u ? r >>> 0 : 0 | r
  1525 + }, argPackAdvance: 8, readValueFromPointer: ho(t, a, 0 !== n), destructorFunction: null
  1526 + })
  1527 + }
  1528 +
  1529 + function Ao(e, t, r) {
  1530 + var n = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array][t];
  1531 +
  1532 + function o(e) {
  1533 + var t = Ve, r = t[e >>= 2], o = t[e + 1];
  1534 + return new n(Ge, o, r)
  1535 + }
  1536 +
  1537 + An(e, {
  1538 + name: r = cn(r),
  1539 + fromWireType: o,
  1540 + argPackAdvance: 8,
  1541 + readValueFromPointer: o
  1542 + }, {ignoreDuplicateRegistrations: !0})
  1543 + }
  1544 +
  1545 + function go(e, t) {
  1546 + var r = "std::string" === (t = cn(t));
  1547 + An(e, {
  1548 + name: t, fromWireType: function (e) {
  1549 + var t, n = Ve[e >> 2];
  1550 + if (r) for (var o = e + 4, a = 0; a <= n; ++a) {
  1551 + var i = e + 4 + a;
  1552 + if (a == n || 0 == We[i]) {
  1553 + var s = xr(o, i - o);
  1554 + void 0 === t ? t = s : (t += String.fromCharCode(0), t += s), o = i + 1
  1555 + }
  1556 + } else {
  1557 + var u = new Array(n);
  1558 + for (a = 0; a < n; ++a) u[a] = String.fromCharCode(We[e + 4 + a]);
  1559 + t = u.join("")
  1560 + }
  1561 + return Kt(e), t
  1562 + }, toWireType: function (e, t) {
  1563 + t instanceof ArrayBuffer && (t = new Uint8Array(t));
  1564 + var n = "string" == typeof t;
  1565 + n || t instanceof Uint8Array || t instanceof Uint8ClampedArray || t instanceof Int8Array || pn("Cannot pass non-string to std::string");
  1566 + var o = (r && n ? function () {
  1567 + return Rr(t)
  1568 + } : function () {
  1569 + return t.length
  1570 + })(), a = Jt(4 + o + 1);
  1571 + if (Ve[a >> 2] = o, r && n) Mr(t, a + 4, o + 1); else if (n) for (var i = 0; i < o; ++i) {
  1572 + var s = t.charCodeAt(i);
  1573 + s > 255 && (Kt(a), pn("String has UTF-16 code units that do not fit in 8 bits")), We[a + 4 + i] = s
  1574 + } else for (i = 0; i < o; ++i) We[a + 4 + i] = t[i];
  1575 + return null !== e && e.push(Kt, a), a
  1576 + }, argPackAdvance: 8, readValueFromPointer: Ln, destructorFunction: function (e) {
  1577 + Kt(e)
  1578 + }
  1579 + })
  1580 + }
  1581 +
  1582 + function vo(e, t, r) {
  1583 + var n, o, a, i, s;
  1584 + r = cn(r), 2 === t ? (n = Lr, o = Ir, i = Fr, a = function () {
  1585 + return He
  1586 + }, s = 1) : 4 === t && (n = Ur, o = Nr, i = jr, a = function () {
  1587 + return Ve
  1588 + }, s = 2), An(e, {
  1589 + name: r, fromWireType: function (e) {
  1590 + for (var r, o = Ve[e >> 2], i = a(), u = e + 4, c = 0; c <= o; ++c) {
  1591 + var l = e + 4 + c * t;
  1592 + if (c == o || 0 == i[l >> s]) {
  1593 + var d = n(u, l - u);
  1594 + void 0 === r ? r = d : (r += String.fromCharCode(0), r += d), u = l + t
  1595 + }
  1596 + }
  1597 + return Kt(e), r
  1598 + }, toWireType: function (e, n) {
  1599 + "string" != typeof n && pn("Cannot pass non-string to C++ string type " + r);
  1600 + var a = i(n), u = Jt(4 + a + t);
  1601 + return Ve[u >> 2] = a >> s, o(n, u + 4, a + t), null !== e && e.push(Kt, u), u
  1602 + }, argPackAdvance: 8, readValueFromPointer: Ln, destructorFunction: function (e) {
  1603 + Kt(e)
  1604 + }
  1605 + })
  1606 + }
  1607 +
  1608 + function Eo(e, t) {
  1609 + An(e, {
  1610 + isVoid: !0, name: t = cn(t), argPackAdvance: 0, fromWireType: function () {
  1611 + }, toWireType: function (e, t) {
  1612 + }
  1613 + })
  1614 + }
  1615 +
  1616 + function yo(e, t) {
  1617 + if (e == t) postMessage({cmd: "processQueuedMainThreadWork"}); else if (Se) postMessage({
  1618 + targetThread: e,
  1619 + cmd: "processThreadQueue"
  1620 + }); else {
  1621 + var r = ft.pthreads[e], n = r && r.worker;
  1622 + if (!n) return;
  1623 + n.postMessage({cmd: "processThreadQueue"})
  1624 + }
  1625 + return 1
  1626 + }
  1627 +
  1628 + function wo(e) {
  1629 + return e || pn("Cannot use deleted val. handle = " + e), Lt[e].value
  1630 + }
  1631 +
  1632 + function _o(e, t) {
  1633 + var r = _t[e];
  1634 + return void 0 === r && pn(t + " has unknown type " + Xn(e)), r
  1635 + }
  1636 +
  1637 + function bo(e, t, r) {
  1638 + e = wo(e), t = _o(t, "emval::as");
  1639 + var n = [], o = uo(n);
  1640 + return $e[r >> 2] = o, t.toWireType(n, e)
  1641 + }
  1642 +
  1643 + function ko(e, t, r, n) {
  1644 + var o, a;
  1645 + (e = Ft[e])(t = wo(t), r = void 0 === (a = It[o = r]) ? cn(o) : a, null, n)
  1646 + }
  1647 +
  1648 + function To(e, t) {
  1649 + for (var r = function (e, t) {
  1650 + for (var r = new Array(e), n = 0; n < e; ++n) r[n] = _o($e[(t >> 2) + n], "parameter " + n);
  1651 + return r
  1652 + }(e, t), n = r[0], o = n.name + "_$" + r.slice(1).map((function (e) {
  1653 + return e.name
  1654 + })).join("_") + "$", a = ["retType"], i = [n], s = "", u = 0; u < e - 1; ++u) s += (0 !== u ? ", " : "") + "arg" + u, a.push("argType" + u), i.push(r[1 + u]);
  1655 + var c = "return function " + ln("methodCaller_" + o) + "(handle, name, destructors, args) {\n", l = 0;
  1656 + for (u = 0; u < e - 1; ++u) c += " var arg" + u + " = argType" + u + ".readValueFromPointer(args" + (l ? "+" + l : "") + ");\n", l += r[u + 1].argPackAdvance;
  1657 + c += " var rv = handle[name](" + s + ");\n";
  1658 + for (u = 0; u < e - 1; ++u) r[u + 1].deleteObject && (c += " argType" + u + ".deleteObject(arg" + u + ");\n");
  1659 + n.isVoid || (c += " return retType.toWireType(destructors, rv);\n"), c += "};\n", a.push(c);
  1660 + var d, f, p = to(Function, a).apply(null, i);
  1661 + return d = p, f = Ft.length, Ft.push(d), f
  1662 + }
  1663 +
  1664 + function Do(e) {
  1665 + e > 4 && (Lt[e].refcount += 1)
  1666 + }
  1667 +
  1668 + function So(e) {
  1669 + Jn(Lt[e].value), ao(e)
  1670 + }
  1671 +
  1672 + function Co(e, t) {
  1673 + return uo((e = _o(e, "_emval_take_value")).readValueFromPointer(t))
  1674 + }
  1675 +
  1676 + function Oo() {
  1677 + Yr()
  1678 + }
  1679 +
  1680 + function Po() {
  1681 + return void 0 === Po.start && (Po.start = Date.now()), 1e3 * (Date.now() - Po.start) | 0
  1682 + }
  1683 +
  1684 + function xo(e, t, r) {
  1685 + var n = function (e, t) {
  1686 + var r;
  1687 + Nt.length = 0, t >>= 2;
  1688 + for (; r = We[e++];) {
  1689 + var n = r < 105;
  1690 + n && 1 & t && t++, Nt.push(n ? Xe[t++ >> 1] : $e[t]), ++t
  1691 + }
  1692 + return Nt
  1693 + }(t, r);
  1694 + return lt[e].apply(null, n)
  1695 + }
  1696 +
  1697 + function Bo() {
  1698 + De || Cr("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")
  1699 + }
  1700 +
  1701 + function Mo(e, t) {
  1702 + }
  1703 +
  1704 + function Ro(e, t, r) {
  1705 + if (e <= 0 || e > ze.length || !0 & e) return -28;
  1706 + if (Te) {
  1707 + if (Atomics.load($e, e >> 2) != t) return -6;
  1708 + var n = performance.now(), o = n + r;
  1709 + for (Atomics.exchange($e, br >> 2, e); ;) {
  1710 + if ((n = performance.now()) > o) return Atomics.exchange($e, br >> 2, 0), -73;
  1711 + if (0 == Atomics.exchange($e, br >> 2, 0)) break;
  1712 + if (lr(), Atomics.load($e, e >> 2) != t) return -6;
  1713 + Atomics.exchange($e, br >> 2, e)
  1714 + }
  1715 + return 0
  1716 + }
  1717 + var a = Atomics.wait($e, e >> 2, t, r);
  1718 + if ("timed-out" === a) return -73;
  1719 + if ("not-equal" === a) return -6;
  1720 + if ("ok" === a) return 0;
  1721 + throw"Atomics.wait returned an unexpected value " + a
  1722 + }
  1723 +
  1724 + function Lo(e, t) {
  1725 + return (e >>> 0) + 4294967296 * t
  1726 + }
  1727 +
  1728 + function Io(e, t) {
  1729 + if (e <= 0) return e;
  1730 + var r = t <= 32 ? Math.abs(1 << t - 1) : Math.pow(2, t - 1);
  1731 + return e >= r && (t <= 32 || e > r) && (e = -2 * r + e), e
  1732 + }
  1733 +
  1734 + function Fo(e, t) {
  1735 + return e >= 0 ? e : t <= 32 ? 2 * Math.abs(1 << t - 1) + e : Math.pow(2, t) + e
  1736 + }
  1737 +
  1738 + function Uo(e) {
  1739 + if (!e || !e.callee || !e.callee.name) return [null, "", ""];
  1740 + e.callee.toString();
  1741 + var t = e.callee.name, r = "(", n = !0;
  1742 + for (var o in e) {
  1743 + var a = e[o];
  1744 + n || (r += ", "), n = !1, r += "number" == typeof a || "string" == typeof a ? a : "(" + typeof a + ")"
  1745 + }
  1746 + r += ")";
  1747 + var i = e.callee.caller;
  1748 + return n && (r = ""), [e = i ? i.arguments : [], t, r]
  1749 + }
  1750 +
  1751 + function No(e, t) {
  1752 + 24 & e && (t = t.replace(/\s+$/, ""), t += (t.length > 0 ? "\n" : "") + function (e) {
  1753 + var t = tn(), r = t.lastIndexOf("_emscripten_log"), n = t.lastIndexOf("_emscripten_get_callstack"),
  1754 + o = t.indexOf("\n", Math.max(r, n)) + 1;
  1755 + t = t.slice(o), 32 & e && Cr("EM_LOG_DEMANGLE is deprecated; ignoring"), 8 & e && "undefined" == typeof emscripten_source_map && (Cr('Source map information is not available, emscripten_log with EM_LOG_C_STACK will be ignored. Build with "--pre-js $EMSCRIPTEN/src/emscripten-source-map.min.js" linker flag to add source map loading to code.'), e ^= 8, e |= 16);
  1756 + var a = null;
  1757 + if (128 & e) for (a = Uo(arguments); a[1].indexOf("_emscripten_") >= 0;) a = Uo(a[0]);
  1758 + var i = t.split("\n");
  1759 + t = "";
  1760 + var s = new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"), u = new RegExp("\\s*(.*?)@(.*):(.*)(:(.*))?"),
  1761 + c = new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");
  1762 + for (var l in i) {
  1763 + var d = i[l], f = "", p = "", h = 0, m = 0, A = c.exec(d);
  1764 + if (A && 5 == A.length) f = A[1], p = A[2], h = A[3], m = A[4]; else {
  1765 + if ((A = s.exec(d)) || (A = u.exec(d)), !(A && A.length >= 4)) {
  1766 + t += d + "\n";
  1767 + continue
  1768 + }
  1769 + f = A[1], p = A[2], h = A[3], m = 0 | A[4]
  1770 + }
  1771 + var g = !1;
  1772 + if (8 & e) {
  1773 + var v = emscripten_source_map.originalPositionFor({line: h, column: m});
  1774 + (g = v && v.source) && (64 & e && (v.source = v.source.substring(v.source.replace(/\\/g, "/").lastIndexOf("/") + 1)), t += " at " + f + " (" + v.source + ":" + v.line + ":" + v.column + ")\n")
  1775 + }
  1776 + (16 & e || !g) && (64 & e && (p = p.substring(p.replace(/\\/g, "/").lastIndexOf("/") + 1)), t += (g ? " = " + f : " at " + f) + " (" + p + ":" + h + ":" + m + ")\n"), 128 & e && a[0] && (a[1] == f && a[2].length > 0 && (t = t.replace(/\s+$/, ""), t += " with values: " + a[1] + a[2] + "\n"), a = Uo(a[0]))
  1777 + }
  1778 + return t.replace(/\s+$/, "")
  1779 + }(e)), 1 & e ? 4 & e ? console.error(t) : 2 & e ? console.warn(t) : 512 & e ? console.info(t) : 256 & e ? console.debug(t) : console.log(t) : 6 & e ? Me(t) : Be(t)
  1780 + }
  1781 +
  1782 + function jo(e, t, r) {
  1783 + No(e, Pr(function (e, t) {
  1784 + var r = e, n = t;
  1785 +
  1786 + function o(e) {
  1787 + var t;
  1788 + return n = function (e, t) {
  1789 + return "double" !== t && "i64" !== t || 7 & e && (e += 4), e
  1790 + }(n, e), "double" === e ? (t = Xe[n >> 3], n += 8) : "i64" == e ? (t = [$e[n >> 2], $e[n + 4 >> 2]], n += 8) : (e = "i32", t = $e[n >> 2], n += 4), t
  1791 + }
  1792 +
  1793 + for (var a, i, s, u, c = []; ;) {
  1794 + var l = r;
  1795 + if (0 === (a = ze[r >> 0])) break;
  1796 + if (i = ze[r + 1 >> 0], 37 == a) {
  1797 + var d = !1, f = !1, p = !1, h = !1, m = !1;
  1798 + e:for (; ;) {
  1799 + switch (i) {
  1800 + case 43:
  1801 + d = !0;
  1802 + break;
  1803 + case 45:
  1804 + f = !0;
  1805 + break;
  1806 + case 35:
  1807 + p = !0;
  1808 + break;
  1809 + case 48:
  1810 + if (h) break e;
  1811 + h = !0;
  1812 + break;
  1813 + case 32:
  1814 + m = !0;
  1815 + break;
  1816 + default:
  1817 + break e
  1818 + }
  1819 + r++, i = ze[r + 1 >> 0]
  1820 + }
  1821 + var A = 0;
  1822 + if (42 == i) A = o("i32"), r++, i = ze[r + 1 >> 0]; else for (; i >= 48 && i <= 57;) A = 10 * A + (i - 48), r++, i = ze[r + 1 >> 0];
  1823 + var g, v = !1, E = -1;
  1824 + if (46 == i) {
  1825 + if (E = 0, v = !0, r++, 42 == (i = ze[r + 1 >> 0])) E = o("i32"), r++; else for (; ;) {
  1826 + var y = ze[r + 1 >> 0];
  1827 + if (y < 48 || y > 57) break;
  1828 + E = 10 * E + (y - 48), r++
  1829 + }
  1830 + i = ze[r + 1 >> 0]
  1831 + }
  1832 + switch (E < 0 && (E = 6, v = !1), String.fromCharCode(i)) {
  1833 + case"h":
  1834 + 104 == ze[r + 2 >> 0] ? (r++, g = 1) : g = 2;
  1835 + break;
  1836 + case"l":
  1837 + 108 == ze[r + 2 >> 0] ? (r++, g = 8) : g = 4;
  1838 + break;
  1839 + case"L":
  1840 + case"q":
  1841 + case"j":
  1842 + g = 8;
  1843 + break;
  1844 + case"z":
  1845 + case"t":
  1846 + case"I":
  1847 + g = 4;
  1848 + break;
  1849 + default:
  1850 + g = null
  1851 + }
  1852 + switch (g && r++, i = ze[r + 1 >> 0], String.fromCharCode(i)) {
  1853 + case"d":
  1854 + case"i":
  1855 + case"u":
  1856 + case"o":
  1857 + case"x":
  1858 + case"X":
  1859 + case"p":
  1860 + var w = 100 == i || 105 == i;
  1861 + s = o("i" + 8 * (g = g || 4)), 8 == g && (s = 117 == i ? (s[0] >>> 0) + 4294967296 * (s[1] >>> 0) : Lo(s[0], s[1])), g <= 4 && (s = (w ? Io : Fo)(s & Math.pow(256, g) - 1, 8 * g));
  1862 + var _ = Math.abs(s), b = "";
  1863 + if (100 == i || 105 == i) D = Io(s, 8 * g).toString(10); else if (117 == i) D = Fo(s, 8 * g).toString(10), s = Math.abs(s); else if (111 == i) D = (p ? "0" : "") + _.toString(8); else if (120 == i || 88 == i) {
  1864 + if (b = p && 0 != s ? "0x" : "", s < 0) {
  1865 + s = -s, D = (_ - 1).toString(16);
  1866 + for (var k = [], T = 0; T < D.length; T++) k.push((15 - parseInt(D[T], 16)).toString(16));
  1867 + for (D = k.join(""); D.length < 2 * g;) D = "f" + D
  1868 + } else D = _.toString(16);
  1869 + 88 == i && (b = b.toUpperCase(), D = D.toUpperCase())
  1870 + } else 112 == i && (0 === _ ? D = "(nil)" : (b = "0x", D = _.toString(16)));
  1871 + if (v) for (; D.length < E;) D = "0" + D;
  1872 + for (s >= 0 && (d ? b = "+" + b : m && (b = " " + b)), "-" == D.charAt(0) && (b = "-" + b, D = D.substr(1)); b.length + D.length < A;) f ? D += " " : h ? D = "0" + D : b = " " + b;
  1873 + (D = b + D).split("").forEach((function (e) {
  1874 + c.push(e.charCodeAt(0))
  1875 + }));
  1876 + break;
  1877 + case"f":
  1878 + case"F":
  1879 + case"e":
  1880 + case"E":
  1881 + case"g":
  1882 + case"G":
  1883 + var D;
  1884 + if (s = o("double"), isNaN(s)) D = "nan", h = !1; else if (isFinite(s)) {
  1885 + var S = !1, C = Math.min(E, 20);
  1886 + if (103 == i || 71 == i) {
  1887 + S = !0, E = E || 1;
  1888 + var O = parseInt(s.toExponential(C).split("e")[1], 10);
  1889 + E > O && O >= -4 ? (i = (103 == i ? "f" : "F").charCodeAt(0), E -= O + 1) : (i = (103 == i ? "e" : "E").charCodeAt(0), E--), C = Math.min(E, 20)
  1890 + }
  1891 + 101 == i || 69 == i ? (D = s.toExponential(C), /[eE][-+]\d$/.test(D) && (D = D.slice(0, -1) + "0" + D.slice(-1))) : 102 != i && 70 != i || (D = s.toFixed(C), 0 === s && ((u = s) < 0 || 0 === u && 1 / u == -1 / 0) && (D = "-" + D));
  1892 + var P = D.split("e");
  1893 + if (S && !p) for (; P[0].length > 1 && -1 != P[0].indexOf(".") && ("0" == P[0].slice(-1) || "." == P[0].slice(-1));) P[0] = P[0].slice(0, -1); else for (p && -1 == D.indexOf(".") && (P[0] += "."); E > C++;) P[0] += "0";
  1894 + D = P[0] + (P.length > 1 ? "e" + P[1] : ""), 69 == i && (D = D.toUpperCase()), s >= 0 && (d ? D = "+" + D : m && (D = " " + D))
  1895 + } else D = (s < 0 ? "-" : "") + "inf", h = !1;
  1896 + for (; D.length < A;) f ? D += " " : D = !h || "-" != D[0] && "+" != D[0] ? (h ? "0" : " ") + D : D[0] + "0" + D.slice(1);
  1897 + i < 97 && (D = D.toUpperCase()), D.split("").forEach((function (e) {
  1898 + c.push(e.charCodeAt(0))
  1899 + }));
  1900 + break;
  1901 + case"s":
  1902 + var x = o("i8*"), B = x ? er(x) : "(null)".length;
  1903 + if (v && (B = Math.min(B, E)), !f) for (; B < A--;) c.push(32);
  1904 + if (x) for (T = 0; T < B; T++) c.push(We[x++ >> 0]); else c = c.concat(ga("(null)".substr(0, B), !0));
  1905 + if (f) for (; B < A--;) c.push(32);
  1906 + break;
  1907 + case"c":
  1908 + for (f && c.push(o("i8")); --A > 0;) c.push(32);
  1909 + f || c.push(o("i8"));
  1910 + break;
  1911 + case"n":
  1912 + var M = o("i32*");
  1913 + $e[M >> 2] = c.length;
  1914 + break;
  1915 + case"%":
  1916 + c.push(a);
  1917 + break;
  1918 + default:
  1919 + for (T = l; T < r + 2; T++) c.push(ze[T >> 0])
  1920 + }
  1921 + r += 2
  1922 + } else c.push(a), r += 1
  1923 + }
  1924 + return c
  1925 + }(t, r), 0))
  1926 + }
  1927 +
  1928 + function Go(e, t, r) {
  1929 + We.copyWithin(e, t, t + r)
  1930 + }
  1931 +
  1932 + function zo(e, t) {
  1933 + for (var r = arguments.length - 2, n = gr(), o = r, a = Er(8 * o), i = a >> 3, s = 0; s < r; s++) {
  1934 + var u = arguments[2 + s];
  1935 + Xe[i + s] = u
  1936 + }
  1937 + var c = hr(e, o, a, t);
  1938 + return vr(n), c
  1939 + }
  1940 +
  1941 + function Wo(e, t, r) {
  1942 + Ut.length = t;
  1943 + for (var n = r >> 3, o = 0; o < t; o++) Ut[o] = Xe[n + o];
  1944 + return (e < 0 ? lt[-e - 1] : Xt[e]).apply(null, Ut)
  1945 + }
  1946 +
  1947 + function Yo(e) {
  1948 + Yr("OOM")
  1949 + }
  1950 +
  1951 + function Ho(e, t, r, n) {
  1952 + var o, a, i, s = gr(), u = Er(12), c = 0;
  1953 + t && (a = Rr(o = t) + 1, i = Jt(a), Mr(o, i, a), c = i), $e[u >> 2] = c, $e[u + 4 >> 2] = r, $e[u + 8 >> 2] = n, mr(0, e, 657457152, 0, c, u), vr(s)
  1954 + }
  1955 +
  1956 + function $o(e) {
  1957 + var t;
  1958 + return e = (t = e) > 2 ? xr(t) : t, Gt[e] || ("undefined" != typeof document ? document.querySelector(e) : void 0)
  1959 + }
  1960 +
  1961 + function Vo(e) {
  1962 + return $o(e)
  1963 + }
  1964 +
  1965 + function Qo(e, t, r) {
  1966 + var n = Vo(e);
  1967 + if (!n) return -4;
  1968 + if (n.canvasSharedPtr && ($e[n.canvasSharedPtr >> 2] = t, $e[n.canvasSharedPtr + 4 >> 2] = r), !n.offscreenCanvas && n.controlTransferredOffscreen) return n.canvasSharedPtr ? (function (e, t, r, n) {
  1969 + Ho(e, t = t ? xr(t) : "", r, n)
  1970 + }($e[n.canvasSharedPtr + 8 >> 2], e, t, r), 1) : -4;
  1971 + n.offscreenCanvas && (n = n.offscreenCanvas);
  1972 + var o = !1;
  1973 + if (n.GLctxObject && n.GLctxObject.GLctx) {
  1974 + var a = n.GLctxObject.GLctx.getParameter(2978);
  1975 + o = 0 === a[0] && 0 === a[1] && a[2] === n.width && a[3] === n.height
  1976 + }
  1977 + return n.width = t, n.height = r, o && n.GLctxObject.GLctx.viewport(0, 0, t, r), 0
  1978 + }
  1979 +
  1980 + function Xo(e, t, r) {
  1981 + return Se ? zo(3, 1, e, t, r) : Qo(e, t, r)
  1982 + }
  1983 +
  1984 + function qo(e, t, r) {
  1985 + return Vo(e) ? Qo(e, t, r) : Xo(e, t, r)
  1986 + }
  1987 +
  1988 + function Zo(e) {
  1989 + }
  1990 +
  1991 + function Ko(e, t) {
  1992 + return r = e, o = $e[(n = t >> 2) + 6], a = {
  1993 + alpha: !!$e[n + 0],
  1994 + depth: !!$e[n + 1],
  1995 + stencil: !!$e[n + 2],
  1996 + antialias: !!$e[n + 3],
  1997 + premultipliedAlpha: !!$e[n + 4],
  1998 + preserveDrawingBuffer: !!$e[n + 5],
  1999 + powerPreference: Wt[o],
  2000 + failIfMajorPerformanceCaveat: !!$e[n + 7],
  2001 + majorVersion: $e[n + 8],
  2002 + minorVersion: $e[n + 9],
  2003 + enableExtensionsByDefault: $e[n + 10],
  2004 + explicitSwapControl: $e[n + 11],
  2005 + proxyContextToMainThread: $e[n + 12],
  2006 + renderViaOffscreenBackBuffer: $e[n + 13]
  2007 + }, (i = Vo(r)) ? a.explicitSwapControl ? 0 : zt.createContext(i, a) : 0;
  2008 + var r, n, o, a, i
  2009 + }
  2010 +
  2011 + function Jo() {
  2012 + if (!Jo.strings) {
  2013 + var e = {
  2014 + USER: "web_user",
  2015 + LOGNAME: "web_user",
  2016 + PATH: "/",
  2017 + PWD: "/",
  2018 + HOME: "/home/web_user",
  2019 + LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8",
  2020 + _: be || "./this.program"
  2021 + };
  2022 + for (var t in Yt) e[t] = Yt[t];
  2023 + var r = [];
  2024 + for (var t in e) r.push(t + "=" + e[t]);
  2025 + Jo.strings = r
  2026 + }
  2027 + return Jo.strings
  2028 + }
  2029 +
  2030 + function ea(e, t) {
  2031 + if (Se) return zo(4, 1, e, t);
  2032 + try {
  2033 + var r = 0;
  2034 + return Jo().forEach((function (n, o) {
  2035 + var a = t + r;
  2036 + $e[e + 4 * o >> 2] = a, function (e, t, r) {
  2037 + for (var n = 0; n < e.length; ++n) ze[t++ >> 0] = e.charCodeAt(n);
  2038 + r || (ze[t >> 0] = 0)
  2039 + }(n, a), r += n.length + 1
  2040 + })), 0
  2041 + } catch (e) {
  2042 + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno
  2043 + }
  2044 + }
  2045 +
  2046 + function ta(e, t) {
  2047 + if (Se) return zo(5, 1, e, t);
  2048 + try {
  2049 + var r = Jo();
  2050 + $e[e >> 2] = r.length;
  2051 + var n = 0;
  2052 + return r.forEach((function (e) {
  2053 + n += e.length + 1
  2054 + })), $e[t >> 2] = n, 0
  2055 + } catch (e) {
  2056 + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno
  2057 + }
  2058 + }
  2059 +
  2060 + function ra(e) {
  2061 + if (Se) return zo(6, 1, e);
  2062 + try {
  2063 + var t = Et.getStreamFromFD(e);
  2064 + return vt.close(t), 0
  2065 + } catch (e) {
  2066 + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno
  2067 + }
  2068 + }
  2069 +
  2070 + function na(e, t) {
  2071 + if (Se) return zo(7, 1, e, t);
  2072 + try {
  2073 + var r = Et.getStreamFromFD(e), n = r.tty ? 2 : vt.isDir(r.mode) ? 3 : vt.isLink(r.mode) ? 7 : 4;
  2074 + return ze[t >> 0] = n, 0
  2075 + } catch (e) {
  2076 + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno
  2077 + }
  2078 + }
  2079 +
  2080 + function oa(e, t, r, n) {
  2081 + if (Se) return zo(8, 1, e, t, r, n);
  2082 + try {
  2083 + var o = Et.getStreamFromFD(e), a = Et.doReadv(o, t, r);
  2084 + return $e[n >> 2] = a, 0
  2085 + } catch (e) {
  2086 + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno
  2087 + }
  2088 + }
  2089 +
  2090 + function aa(e, t, r, n, o) {
  2091 + if (Se) return zo(9, 1, e, t, r, n, o);
  2092 + try {
  2093 + var a = Et.getStreamFromFD(e), i = 4294967296 * r + (t >>> 0), s = 9007199254740992;
  2094 + return i <= -s || i >= s ? -61 : (vt.llseek(a, i, n), ct = [a.position >>> 0, (ut = a.position, +Math.abs(ut) >= 1 ? ut > 0 ? (0 | Math.min(+Math.floor(ut / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ut - +(~~ut >>> 0)) / 4294967296) >>> 0 : 0)], $e[o >> 2] = ct[0], $e[o + 4 >> 2] = ct[1], a.getdents && 0 === i && 0 === n && (a.getdents = null), 0)
  2095 + } catch (e) {
  2096 + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno
  2097 + }
  2098 + }
  2099 +
  2100 + function ia(e, t, r, n) {
  2101 + if (Se) return zo(10, 1, e, t, r, n);
  2102 + try {
  2103 + var o = Et.getStreamFromFD(e), a = Et.doWritev(o, t, r);
  2104 + return $e[n >> 2] = a, 0
  2105 + } catch (e) {
  2106 + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno
  2107 + }
  2108 + }
  2109 +
  2110 + function sa(e) {
  2111 + var t = Date.now();
  2112 + return $e[e >> 2] = t / 1e3 | 0, $e[e + 4 >> 2] = t % 1e3 * 1e3 | 0, 0
  2113 + }
  2114 +
  2115 + function ua() {
  2116 + if (Se) return zo(11, 1);
  2117 + if (!ua.called) {
  2118 + ua.called = !0;
  2119 + var e = (new Date).getFullYear(), t = new Date(e, 0, 1), r = new Date(e, 6, 1), n = t.getTimezoneOffset(),
  2120 + o = r.getTimezoneOffset(), a = Math.max(n, o);
  2121 + $e[ir() >> 2] = 60 * a, $e[ar() >> 2] = Number(n != o);
  2122 + var i = l(t), s = l(r), u = Gr(i), c = Gr(s);
  2123 + o < n ? ($e[or() >> 2] = u, $e[or() + 4 >> 2] = c) : ($e[or() >> 2] = c, $e[or() + 4 >> 2] = u)
  2124 + }
  2125 +
  2126 + function l(e) {
  2127 + var t = e.toTimeString().match(/\(([A-Za-z ]+)\)$/);
  2128 + return t ? t[1] : "GMT"
  2129 + }
  2130 + }
  2131 +
  2132 + function ca(e) {
  2133 + var t = ft.threadExitHandlers.pop();
  2134 + e && t()
  2135 + }
  2136 +
  2137 + function la(e, t) {
  2138 + ft.threadExitHandlers.push((function () {
  2139 + Ze.get(e)(t)
  2140 + }))
  2141 + }
  2142 +
  2143 + function da(e) {
  2144 + if (Se) throw"Internal Error! spawnThread() can only ever be called from main application thread!";
  2145 + var t = ft.getNewWorker();
  2146 + if (void 0 !== t.pthread) throw"Internal error!";
  2147 + if (!e.pthread_ptr) throw"Internal error, no pthread ptr!";
  2148 + ft.runningWorkers.push(t);
  2149 + for (var r = Jt(512), n = 0; n < 128; ++n) $e[r + 4 * n >> 2] = 0;
  2150 + var o = e.stackBase + e.stackSize, a = ft.pthreads[e.pthread_ptr] = {
  2151 + worker: t,
  2152 + stackBase: e.stackBase,
  2153 + stackSize: e.stackSize,
  2154 + allocatedOwnStack: e.allocatedOwnStack,
  2155 + threadInfoStruct: e.pthread_ptr
  2156 + }, i = a.threadInfoStruct >> 2;
  2157 + Atomics.store(Ve, i + 16, e.detached), Atomics.store(Ve, i + 25, r), Atomics.store(Ve, i + 10, a.threadInfoStruct), Atomics.store(Ve, i + 20, e.stackSize), Atomics.store(Ve, i + 19, o), Atomics.store(Ve, i + 26, e.stackSize), Atomics.store(Ve, i + 28, o), Atomics.store(Ve, i + 29, e.detached);
  2158 + var s = nr() + 40;
  2159 + Atomics.store(Ve, i + 43, s), t.pthread = a;
  2160 + var u = {
  2161 + cmd: "run",
  2162 + start_routine: e.startRoutine,
  2163 + arg: e.arg,
  2164 + threadInfoStruct: e.pthread_ptr,
  2165 + stackBase: e.stackBase,
  2166 + stackSize: e.stackSize
  2167 + };
  2168 + t.runPthread = function () {
  2169 + u.time = performance.now(), t.postMessage(u, e.transferList)
  2170 + }, t.loaded && (t.runPthread(), delete t.runPthread)
  2171 + }
  2172 +
  2173 + function fa(e, t, r, n) {
  2174 + if ("undefined" == typeof SharedArrayBuffer) return Me("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6;
  2175 + if (!e) return Me("pthread_create called with a null thread pointer!"), 28;
  2176 + var o = [];
  2177 + if (Se && 0 === o.length) return pr(687865856, e, t, r, n);
  2178 + var a = 0, i = 0, s = 0;
  2179 + t && -1 != t ? (a = $e[t >> 2], a += 81920, i = $e[t + 8 >> 2], s = 0 !== $e[t + 12 >> 2]) : a = 2097152;
  2180 + var u = 0 == i;
  2181 + u ? i = wr(16, a) : Or((i -= a) > 0);
  2182 + for (var c = Jt(228), l = 0; l < 57; ++l) Ve[(c >> 2) + l] = 0;
  2183 + $e[e >> 2] = c, $e[c + 12 >> 2] = c;
  2184 + var d = c + 152;
  2185 + $e[d >> 2] = d;
  2186 + var f = {
  2187 + stackBase: i,
  2188 + stackSize: a,
  2189 + allocatedOwnStack: u,
  2190 + detached: s,
  2191 + startRoutine: r,
  2192 + pthread_ptr: c,
  2193 + arg: n,
  2194 + transferList: o
  2195 + };
  2196 + return Se ? (f.cmd = "spawnThread", postMessage(f, o)) : da(f), 0
  2197 + }
  2198 +
  2199 + function pa() {
  2200 + if (Se) {
  2201 + var e = sr();
  2202 + if (e) if (!Atomics.load(Ve, e + 56 >> 2)) if (2 == Atomics.load(Ve, e + 0 >> 2)) throw"Canceled!"
  2203 + }
  2204 + }
  2205 +
  2206 + function ha(e, t) {
  2207 + return function (e, t, r) {
  2208 + if (!e) return Me("pthread_join attempted on a null thread pointer!"), dt.ESRCH;
  2209 + if (Se && sr() == e) return Me("PThread " + e + " is attempting to join to itself!"), dt.EDEADLK;
  2210 + if (!Se && ur() == e) return Me("Main thread " + e + " is attempting to join to itself!"), dt.EDEADLK;
  2211 + if ($e[e + 12 >> 2] !== e) return Me("pthread_join attempted on thread " + e + ", which does not point to a valid thread, or does not exist anymore!"), dt.ESRCH;
  2212 + if (Atomics.load(Ve, e + 64 >> 2)) return Me("Attempted to join thread " + e + ", which was already detached!"), dt.EINVAL;
  2213 + for (r && Bo(); ;) {
  2214 + var n = Atomics.load(Ve, e + 0 >> 2);
  2215 + if (1 == n) {
  2216 + var o = Atomics.load(Ve, e + 4 >> 2);
  2217 + return t && ($e[t >> 2] = o), Atomics.store(Ve, e + 64 >> 2, 1), Se ? postMessage({
  2218 + cmd: "cleanupThread",
  2219 + thread: e
  2220 + }) : Zr(e), 0
  2221 + }
  2222 + if (!r) return dt.EBUSY;
  2223 + pa(), Se || lr(), Ro(e + 0, n, Se ? 100 : 1)
  2224 + }
  2225 + }(e, t, !0)
  2226 + }
  2227 +
  2228 + function ma(e) {
  2229 + Le(0 | e)
  2230 + }
  2231 +
  2232 + function Aa(e) {
  2233 + if (Se) return zo(12, 1, e);
  2234 + switch (e) {
  2235 + case 30:
  2236 + return 16384;
  2237 + case 85:
  2238 + return We.length / 16384;
  2239 + case 132:
  2240 + case 133:
  2241 + case 12:
  2242 + case 137:
  2243 + case 138:
  2244 + case 15:
  2245 + case 235:
  2246 + case 16:
  2247 + case 17:
  2248 + case 18:
  2249 + case 19:
  2250 + case 20:
  2251 + case 149:
  2252 + case 13:
  2253 + case 10:
  2254 + case 236:
  2255 + case 153:
  2256 + case 9:
  2257 + case 21:
  2258 + case 22:
  2259 + case 159:
  2260 + case 154:
  2261 + case 14:
  2262 + case 77:
  2263 + case 78:
  2264 + case 139:
  2265 + case 82:
  2266 + case 68:
  2267 + case 67:
  2268 + case 164:
  2269 + case 11:
  2270 + case 29:
  2271 + case 47:
  2272 + case 48:
  2273 + case 95:
  2274 + case 52:
  2275 + case 51:
  2276 + case 46:
  2277 + return 200809;
  2278 + case 27:
  2279 + case 246:
  2280 + case 127:
  2281 + case 128:
  2282 + case 23:
  2283 + case 24:
  2284 + case 160:
  2285 + case 161:
  2286 + case 181:
  2287 + case 182:
  2288 + case 242:
  2289 + case 183:
  2290 + case 184:
  2291 + case 243:
  2292 + case 244:
  2293 + case 245:
  2294 + case 165:
  2295 + case 178:
  2296 + case 179:
  2297 + case 49:
  2298 + case 50:
  2299 + case 168:
  2300 + case 169:
  2301 + case 175:
  2302 + case 170:
  2303 + case 171:
  2304 + case 172:
  2305 + case 97:
  2306 + case 76:
  2307 + case 32:
  2308 + case 173:
  2309 + case 35:
  2310 + case 80:
  2311 + case 81:
  2312 + case 79:
  2313 + return -1;
  2314 + case 176:
  2315 + case 177:
  2316 + case 7:
  2317 + case 155:
  2318 + case 8:
  2319 + case 157:
  2320 + case 125:
  2321 + case 126:
  2322 + case 92:
  2323 + case 93:
  2324 + case 129:
  2325 + case 130:
  2326 + case 131:
  2327 + case 94:
  2328 + case 91:
  2329 + return 1;
  2330 + case 74:
  2331 + case 60:
  2332 + case 69:
  2333 + case 70:
  2334 + case 4:
  2335 + return 1024;
  2336 + case 31:
  2337 + case 42:
  2338 + case 72:
  2339 + return 32;
  2340 + case 87:
  2341 + case 26:
  2342 + case 33:
  2343 + return 2147483647;
  2344 + case 34:
  2345 + case 1:
  2346 + return 47839;
  2347 + case 38:
  2348 + case 36:
  2349 + return 99;
  2350 + case 43:
  2351 + case 37:
  2352 + return 2048;
  2353 + case 0:
  2354 + return 2097152;
  2355 + case 3:
  2356 + return 65536;
  2357 + case 28:
  2358 + return 32768;
  2359 + case 44:
  2360 + return 32767;
  2361 + case 75:
  2362 + return 16384;
  2363 + case 39:
  2364 + return 1e3;
  2365 + case 89:
  2366 + return 700;
  2367 + case 71:
  2368 + return 256;
  2369 + case 40:
  2370 + return 255;
  2371 + case 2:
  2372 + return 100;
  2373 + case 180:
  2374 + return 64;
  2375 + case 25:
  2376 + return 20;
  2377 + case 5:
  2378 + return 16;
  2379 + case 6:
  2380 + return 6;
  2381 + case 73:
  2382 + return 4;
  2383 + case 84:
  2384 + return "object" == typeof navigator && navigator.hardwareConcurrency || 1
  2385 + }
  2386 + return nn(28), -1
  2387 + }
  2388 +
  2389 + function ga(e, t, r) {
  2390 + var n = r > 0 ? r : Rr(e) + 1, o = new Array(n), a = Br(e, o, 0, o.length);
  2391 + return t && (o.length = a), o
  2392 + }
  2393 +
  2394 + function va(e) {
  2395 + this.name = "ExitStatus", this.message = "Program terminated with exit(" + e + ")", this.status = e
  2396 + }
  2397 +
  2398 + function Ea(e) {
  2399 + function t() {
  2400 + kr || (kr = !0, Ee.calledRun = !0, je || (!0, Ee.noFSInit || vt.init.initialized || vt.init(), At.init(), Xr(Je), Se || (vt.ignorePermissions = !1, Xr(et)), Ee.onRuntimeInitialized && Ee.onRuntimeInitialized(), function () {
  2401 + if (!Se) {
  2402 + if (Ee.postRun) for ("function" == typeof Ee.postRun && (Ee.postRun = [Ee.postRun]); Ee.postRun.length;) e = Ee.postRun.shift(), rt.unshift(e);
  2403 + var e;
  2404 + Xr(rt)
  2405 + }
  2406 + }()))
  2407 + }
  2408 +
  2409 + e = e || _e, nt > 0 || (Se ? postMessage({cmd: "loaded"}) : (!function () {
  2410 + if (!Se) {
  2411 + if (Ee.preRun) for ("function" == typeof Ee.preRun && (Ee.preRun = [Ee.preRun]); Ee.preRun.length;) e = Ee.preRun.shift(), Ke.unshift(e);
  2412 + var e;
  2413 + Xr(Ke)
  2414 + }
  2415 + }(), nt > 0 || (Ee.setStatus ? (Ee.setStatus("Running..."), setTimeout((function () {
  2416 + setTimeout((function () {
  2417 + Ee.setStatus("")
  2418 + }), 1), t()
  2419 + }), 1)) : t())))
  2420 + }
  2421 +
  2422 + function ya(e, t) {
  2423 + if (!t || !Fe || 0 !== e) {
  2424 + if (!t && Se) throw postMessage({cmd: "exitProcess", returnCode: e}), new va(e);
  2425 + Fe || (ft.terminateAllThreads(), e, Se || !0, Ee.onExit && Ee.onExit(e), je = !0), ke(e, new va(e))
  2426 + }
  2427 + }
  2428 +
  2429 + function wa() {
  2430 + for (we in {}, ye = {}, Ee = void 0 !== Ee ? Ee : {}) Ee.hasOwnProperty(we) && (ye[we] = Ee[we]);
  2431 + for (we in _e = [], be = "./this.program", ke = function (e, t) {
  2432 + throw t
  2433 + }, Te = !1, De = !0, !1, (Se = Ee.ENVIRONMENT_IS_PTHREAD || !1) && (Ge = Ee.buffer), Ce = "undefined" != typeof document && document.currentScript ? document.currentScript.src : void 0, De && (Ce = self.location.href), Oe = "", (Te || De) && (De ? Oe = self.location.href : "undefined" != typeof document && document.currentScript && (Oe = document.currentScript.src), Oe = 0 !== Oe.indexOf("blob:") ? Oe.substr(0, Oe.lastIndexOf("/") + 1) : "", Pe = function (e) {
  2434 + var t = new XMLHttpRequest;
  2435 + return t.open("GET", e, !1), t.send(null), t.responseText
  2436 + }, De && (xe = function (e) {
  2437 + var t = new XMLHttpRequest;
  2438 + return t.open("GET", e, !1), t.responseType = "arraybuffer", t.send(null), new Uint8Array(t.response)
  2439 + }), function (e, t, r) {
  2440 + var n = new XMLHttpRequest;
  2441 + n.open("GET", e, !0), n.responseType = "arraybuffer", n.onload = function () {
  2442 + 200 == n.status || 0 == n.status && n.response ? t(n.response) : r()
  2443 + }, n.onerror = r, n.send(null)
  2444 + }, function (e) {
  2445 + document.title = e
  2446 + }), Be = Ee.print || console.log.bind(console), Me = Ee.printErr || console.warn.bind(console), ye) ye.hasOwnProperty(we) && (Ee[we] = ye[we]);
  2447 + if (ye = null, Ee.arguments && (_e = Ee.arguments), Ee.thisProgram && (be = Ee.thisProgram), Ee.quit && (ke = Ee.quit), Re = 16, 0, Le = function (e) {
  2448 + e
  2449 + }, Atomics.load, Atomics.store, Atomics.compareExchange, Ee.wasmBinary && (Ie = Ee.wasmBinary), Fe = Ee.noExitRuntime || !0, "object" != typeof WebAssembly && Yr("no native wasm support detected"), je = !1, qe = Ee.INITIAL_MEMORY || 67108864, Se) Ue = Ee.wasmMemory, Ge = Ee.buffer; else if (Ee.wasmMemory) Ue = Ee.wasmMemory; else if (!((Ue = new WebAssembly.Memory({
  2450 + initial: qe / 65536,
  2451 + maximum: qe / 65536,
  2452 + shared: !0
  2453 + })).buffer instanceof SharedArrayBuffer)) throw Me("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"), Error("bad memory");
  2454 + var t;
  2455 + if (Ue && (Ge = Ue.buffer), qe = Ge.byteLength, Ge = t = Ge, Ee.HEAP8 = ze = new Int8Array(t), Ee.HEAP16 = Ye = new Int16Array(t), Ee.HEAP32 = $e = new Int32Array(t), Ee.HEAPU8 = We = new Uint8Array(t), Ee.HEAPU16 = He = new Uint16Array(t), Ee.HEAPU32 = Ve = new Uint32Array(t), Ee.HEAPF32 = Qe = new Float32Array(t), Ee.HEAPF64 = Xe = new Float64Array(t), Ke = [], Je = [], et = [], tt = [], rt = [], !1, !1, Se || Je.push({
  2456 + func: function () {
  2457 + Zt()
  2458 + }
  2459 + }), Se && !0, nt = 0, ot = null, at = null, Ee.preloadedImages = {}, Ee.preloadedAudios = {}, it = "data:application/octet-stream;base64,", Hr(st = "ff.wasm") || (st = Sr(st)), lt = {
  2460 + 155132: function () {
  2461 + throw"Canceled!"
  2462 + }, 155395: function (e, t) {
  2463 + setTimeout((function () {
  2464 + fr(e, t)
  2465 + }), 0)
  2466 + }
  2467 + }, dt = {
  2468 + EPERM: 63,
  2469 + ENOENT: 44,
  2470 + ESRCH: 71,
  2471 + EINTR: 27,
  2472 + EIO: 29,
  2473 + ENXIO: 60,
  2474 + E2BIG: 1,
  2475 + ENOEXEC: 45,
  2476 + EBADF: 8,
  2477 + ECHILD: 12,
  2478 + EAGAIN: 6,
  2479 + EWOULDBLOCK: 6,
  2480 + ENOMEM: 48,
  2481 + EACCES: 2,
  2482 + EFAULT: 21,
  2483 + ENOTBLK: 105,
  2484 + EBUSY: 10,
  2485 + EEXIST: 20,
  2486 + EXDEV: 75,
  2487 + ENODEV: 43,
  2488 + ENOTDIR: 54,
  2489 + EISDIR: 31,
  2490 + EINVAL: 28,
  2491 + ENFILE: 41,
  2492 + EMFILE: 33,
  2493 + ENOTTY: 59,
  2494 + ETXTBSY: 74,
  2495 + EFBIG: 22,
  2496 + ENOSPC: 51,
  2497 + ESPIPE: 70,
  2498 + EROFS: 69,
  2499 + EMLINK: 34,
  2500 + EPIPE: 64,
  2501 + EDOM: 18,
  2502 + ERANGE: 68,
  2503 + ENOMSG: 49,
  2504 + EIDRM: 24,
  2505 + ECHRNG: 106,
  2506 + EL2NSYNC: 156,
  2507 + EL3HLT: 107,
  2508 + EL3RST: 108,
  2509 + ELNRNG: 109,
  2510 + EUNATCH: 110,
  2511 + ENOCSI: 111,
  2512 + EL2HLT: 112,
  2513 + EDEADLK: 16,
  2514 + ENOLCK: 46,
  2515 + EBADE: 113,
  2516 + EBADR: 114,
  2517 + EXFULL: 115,
  2518 + ENOANO: 104,
  2519 + EBADRQC: 103,
  2520 + EBADSLT: 102,
  2521 + EDEADLOCK: 16,
  2522 + EBFONT: 101,
  2523 + ENOSTR: 100,
  2524 + ENODATA: 116,
  2525 + ETIME: 117,
  2526 + ENOSR: 118,
  2527 + ENONET: 119,
  2528 + ENOPKG: 120,
  2529 + EREMOTE: 121,
  2530 + ENOLINK: 47,
  2531 + EADV: 122,
  2532 + ESRMNT: 123,
  2533 + ECOMM: 124,
  2534 + EPROTO: 65,
  2535 + EMULTIHOP: 36,
  2536 + EDOTDOT: 125,
  2537 + EBADMSG: 9,
  2538 + ENOTUNIQ: 126,
  2539 + EBADFD: 127,
  2540 + EREMCHG: 128,
  2541 + ELIBACC: 129,
  2542 + ELIBBAD: 130,
  2543 + ELIBSCN: 131,
  2544 + ELIBMAX: 132,
  2545 + ELIBEXEC: 133,
  2546 + ENOSYS: 52,
  2547 + ENOTEMPTY: 55,
  2548 + ENAMETOOLONG: 37,
  2549 + ELOOP: 32,
  2550 + EOPNOTSUPP: 138,
  2551 + EPFNOSUPPORT: 139,
  2552 + ECONNRESET: 15,
  2553 + ENOBUFS: 42,
  2554 + EAFNOSUPPORT: 5,
  2555 + EPROTOTYPE: 67,
  2556 + ENOTSOCK: 57,
  2557 + ENOPROTOOPT: 50,
  2558 + ESHUTDOWN: 140,
  2559 + ECONNREFUSED: 14,
  2560 + EADDRINUSE: 3,
  2561 + ECONNABORTED: 13,
  2562 + ENETUNREACH: 40,
  2563 + ENETDOWN: 38,
  2564 + ETIMEDOUT: 73,
  2565 + EHOSTDOWN: 142,
  2566 + EHOSTUNREACH: 23,
  2567 + EINPROGRESS: 26,
  2568 + EALREADY: 7,
  2569 + EDESTADDRREQ: 17,
  2570 + EMSGSIZE: 35,
  2571 + EPROTONOSUPPORT: 66,
  2572 + ESOCKTNOSUPPORT: 137,
  2573 + EADDRNOTAVAIL: 4,
  2574 + ENETRESET: 39,
  2575 + EISCONN: 30,
  2576 + ENOTCONN: 53,
  2577 + ETOOMANYREFS: 141,
  2578 + EUSERS: 136,
  2579 + EDQUOT: 19,
  2580 + ESTALE: 72,
  2581 + ENOTSUP: 138,
  2582 + ENOMEDIUM: 148,
  2583 + EILSEQ: 25,
  2584 + EOVERFLOW: 61,
  2585 + ECANCELED: 11,
  2586 + ENOTRECOVERABLE: 56,
  2587 + EOWNERDEAD: 62,
  2588 + ESTRPIPE: 135
  2589 + }, Ee._emscripten_futex_wake = qr, ft = {
  2590 + unusedWorkers: [], runningWorkers: [], initMainThreadBlock: function () {
  2591 + }, initRuntime: function () {
  2592 + for (var e = Jt(228), t = 0; t < 57; ++t) Ve[e / 4 + t] = 0;
  2593 + $e[e + 12 >> 2] = e;
  2594 + var r = e + 152;
  2595 + $e[r >> 2] = r;
  2596 + var n = Jt(512);
  2597 + for (t = 0; t < 128; ++t) Ve[n / 4 + t] = 0;
  2598 + Atomics.store(Ve, e + 100 >> 2, n), Atomics.store(Ve, e + 40 >> 2, e), Ar(e, !De, 1), dr(e)
  2599 + }, initWorker: function () {
  2600 + }, pthreads: {}, threadExitHandlers: [], setThreadStatus: function () {
  2601 + }, runExitHandlers: function () {
  2602 + for (; ft.threadExitHandlers.length > 0;) ft.threadExitHandlers.pop()();
  2603 + Se && sr() && cr()
  2604 + }, threadExit: function (e) {
  2605 + var t = sr();
  2606 + t && (Atomics.store(Ve, t + 4 >> 2, e), Atomics.store(Ve, t + 0 >> 2, 1), Atomics.store(Ve, t + 56 >> 2, 1), Atomics.store(Ve, t + 60 >> 2, 0), ft.runExitHandlers(), qr(t + 0, 2147483647), Ar(0, 0, 0), Se && postMessage({cmd: "exit"}))
  2607 + }, threadCancel: function () {
  2608 + ft.runExitHandlers();
  2609 + var e = sr();
  2610 + Atomics.store(Ve, e + 4 >> 2, -1), Atomics.store(Ve, e + 0 >> 2, 1), qr(e + 0, 2147483647), Ar(0, 0, 0), postMessage({cmd: "cancelDone"})
  2611 + }, terminateAllThreads: function () {
  2612 + for (var e in ft.pthreads) {
  2613 + (n = ft.pthreads[e]) && n.worker && ft.returnWorkerToPool(n.worker)
  2614 + }
  2615 + ft.pthreads = {};
  2616 + for (var t = 0; t < ft.unusedWorkers.length; ++t) {
  2617 + (r = ft.unusedWorkers[t]).terminate()
  2618 + }
  2619 + ft.unusedWorkers = [];
  2620 + for (t = 0; t < ft.runningWorkers.length; ++t) {
  2621 + var r, n = (r = ft.runningWorkers[t]).pthread;
  2622 + ft.freeThreadData(n), r.terminate()
  2623 + }
  2624 + ft.runningWorkers = []
  2625 + }, freeThreadData: function (e) {
  2626 + if (e) {
  2627 + if (e.threadInfoStruct) {
  2628 + var t = $e[e.threadInfoStruct + 100 >> 2];
  2629 + $e[e.threadInfoStruct + 100 >> 2] = 0, Kt(t), Kt(e.threadInfoStruct)
  2630 + }
  2631 + e.threadInfoStruct = 0, e.allocatedOwnStack && e.stackBase && Kt(e.stackBase), e.stackBase = 0, e.worker && (e.worker.pthread = null)
  2632 + }
  2633 + }, returnWorkerToPool: function (e) {
  2634 + ft.runWithoutMainThreadQueuedCalls((function () {
  2635 + delete ft.pthreads[e.pthread.threadInfoStruct], ft.unusedWorkers.push(e), ft.runningWorkers.splice(ft.runningWorkers.indexOf(e), 1), ft.freeThreadData(e.pthread), e.pthread = void 0
  2636 + }))
  2637 + }, runWithoutMainThreadQueuedCalls: function (e) {
  2638 + $e[_r >> 2] = 0;
  2639 + try {
  2640 + e()
  2641 + } finally {
  2642 + $e[_r >> 2] = 1
  2643 + }
  2644 + }, receiveObjectTransfer: function (e) {
  2645 + }, loadWasmModuleToWorker: function (e, t) {
  2646 + e.onmessage = function (r) {
  2647 + var n = r.data, o = n.cmd;
  2648 + if (e.pthread && (ft.currentProxiedOperationCallerThread = e.pthread.threadInfoStruct), n.targetThread && n.targetThread != sr()) {
  2649 + var a = ft.pthreads[n.targetThread];
  2650 + return a ? a.worker.postMessage(r.data, n.transferList) : console.error('Internal error! Worker sent a message "' + o + '" to target pthread ' + n.targetThread + ", but that thread no longer exists!"), void (ft.currentProxiedOperationCallerThread = void 0)
  2651 + }
  2652 + if ("processQueuedMainThreadWork" === o) lr(); else if ("spawnThread" === o) da(r.data); else if ("cleanupThread" === o) Zr(n.thread); else if ("killThread" === o) !function (e) {
  2653 + if (Se) throw"Internal Error! killThread() can only ever be called from main application thread!";
  2654 + if (!e) throw"Internal Error! Null pthread_ptr in killThread!";
  2655 + $e[e + 12 >> 2] = 0;
  2656 + var t = ft.pthreads[e];
  2657 + t.worker.terminate(), ft.freeThreadData(t), ft.runningWorkers.splice(ft.runningWorkers.indexOf(t.worker), 1), t.worker.pthread = void 0
  2658 + }(n.thread); else if ("cancelThread" === o) !function (e) {
  2659 + if (Se) throw"Internal Error! cancelThread() can only ever be called from main application thread!";
  2660 + if (!e) throw"Internal Error! Null pthread_ptr in cancelThread!";
  2661 + ft.pthreads[e].worker.postMessage({cmd: "cancel"})
  2662 + }(n.thread); else if ("loaded" === o) e.loaded = !0, t && t(e), e.runPthread && (e.runPthread(), delete e.runPthread); else if ("print" === o) Be("Thread " + n.threadId + ": " + n.text); else if ("printErr" === o) Me("Thread " + n.threadId + ": " + n.text); else if ("alert" === o) alert("Thread " + n.threadId + ": " + n.text); else if ("exit" === o) {
  2663 + e.pthread && Atomics.load(Ve, e.pthread.threadInfoStruct + 64 >> 2) && ft.returnWorkerToPool(e)
  2664 + } else if ("exitProcess" === o) try {
  2665 + ya(n.returnCode)
  2666 + } catch (r) {
  2667 + if (r instanceof va) return;
  2668 + throw r
  2669 + } else "cancelDone" === o ? ft.returnWorkerToPool(e) : "objectTransfer" === o ? ft.receiveObjectTransfer(r.data) : "setimmediate" === r.data.target ? e.postMessage(r.data) : Me("worker sent an unknown command " + o);
  2670 + ft.currentProxiedOperationCallerThread = void 0
  2671 + }, e.onerror = function (e) {
  2672 + Me("pthread sent an error! " + e.filename + ":" + e.lineno + ": " + e.message)
  2673 + }, e.postMessage({cmd: "load", urlOrBlob: Ee.mainScriptUrlOrBlob || Ce, wasmMemory: Ue, wasmModule: Ne})
  2674 + }, allocateUnusedWorker: function () {
  2675 + var e = Sr("ff.worker.js");
  2676 + ft.unusedWorkers.push(new Worker(e))
  2677 + }, getNewWorker: function () {
  2678 + return 0 == ft.unusedWorkers.length && (ft.allocateUnusedWorker(), ft.loadWasmModuleToWorker(ft.unusedWorkers[0])), ft.unusedWorkers.length > 0 ? ft.unusedWorkers.pop() : null
  2679 + }, busySpinWait: function (e) {
  2680 + for (var t = performance.now() + e; performance.now() < t;) ;
  2681 + }
  2682 + }, Ee.establishStackSpace = Kr, Ee.getNoExitRuntime = Jr, Ee.invokeEntryPoint = en, pt = Se ? function () {
  2683 + return performance.now() - Ee.__performance_now_clock_drift
  2684 + } : function () {
  2685 + return performance.now()
  2686 + }, ht = {
  2687 + splitPath: function (e) {
  2688 + return /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1)
  2689 + }, normalizeArray: function (e, t) {
  2690 + for (var r = 0, n = e.length - 1; n >= 0; n--) {
  2691 + var o = e[n];
  2692 + "." === o ? e.splice(n, 1) : ".." === o ? (e.splice(n, 1), r++) : r && (e.splice(n, 1), r--)
  2693 + }
  2694 + if (t) for (; r; r--) e.unshift("..");
  2695 + return e
  2696 + }, normalize: function (e) {
  2697 + var t = "/" === e.charAt(0), r = "/" === e.substr(-1);
  2698 + return (e = ht.normalizeArray(e.split("/").filter((function (e) {
  2699 + return !!e
  2700 + })), !t).join("/")) || t || (e = "."), e && r && (e += "/"), (t ? "/" : "") + e
  2701 + }, dirname: function (e) {
  2702 + var t = ht.splitPath(e), r = t[0], n = t[1];
  2703 + return r || n ? (n && (n = n.substr(0, n.length - 1)), r + n) : "."
  2704 + }, basename: function (e) {
  2705 + if ("/" === e) return "/";
  2706 + var t = (e = (e = ht.normalize(e)).replace(/\/$/, "")).lastIndexOf("/");
  2707 + return -1 === t ? e : e.substr(t + 1)
  2708 + }, extname: function (e) {
  2709 + return ht.splitPath(e)[3]
  2710 + }, join: function () {
  2711 + var e = Array.prototype.slice.call(arguments, 0);
  2712 + return ht.normalize(e.join("/"))
  2713 + }, join2: function (e, t) {
  2714 + return ht.normalize(e + "/" + t)
  2715 + }
  2716 + }, mt = {
  2717 + resolve: function () {
  2718 + for (var e = "", t = !1, r = arguments.length - 1; r >= -1 && !t; r--) {
  2719 + var n = r >= 0 ? arguments[r] : vt.cwd();
  2720 + if ("string" != typeof n) throw new TypeError("Arguments to path.resolve must be strings");
  2721 + if (!n) return "";
  2722 + e = n + "/" + e, t = "/" === n.charAt(0)
  2723 + }
  2724 + return (t ? "/" : "") + (e = ht.normalizeArray(e.split("/").filter((function (e) {
  2725 + return !!e
  2726 + })), !t).join("/")) || "."
  2727 + }, relative: function (e, t) {
  2728 + function r(e) {
  2729 + for (var t = 0; t < e.length && "" === e[t]; t++) ;
  2730 + for (var r = e.length - 1; r >= 0 && "" === e[r]; r--) ;
  2731 + return t > r ? [] : e.slice(t, r - t + 1)
  2732 + }
  2733 +
  2734 + e = mt.resolve(e).substr(1), t = mt.resolve(t).substr(1);
  2735 + for (var n = r(e.split("/")), o = r(t.split("/")), a = Math.min(n.length, o.length), i = a, s = 0; s < a; s++) if (n[s] !== o[s]) {
  2736 + i = s;
  2737 + break
  2738 + }
  2739 + var u = [];
  2740 + for (s = i; s < n.length; s++) u.push("..");
  2741 + return (u = u.concat(o.slice(i))).join("/")
  2742 + }
  2743 + }, At = {
  2744 + ttys: [], init: function () {
  2745 + }, shutdown: function () {
  2746 + }, register: function (e, t) {
  2747 + At.ttys[e] = {input: [], output: [], ops: t}, vt.registerDevice(e, At.stream_ops)
  2748 + }, stream_ops: {
  2749 + open: function (e) {
  2750 + var t = At.ttys[e.node.rdev];
  2751 + if (!t) throw new vt.ErrnoError(43);
  2752 + e.tty = t, e.seekable = !1
  2753 + }, close: function (e) {
  2754 + e.tty.ops.flush(e.tty)
  2755 + }, flush: function (e) {
  2756 + e.tty.ops.flush(e.tty)
  2757 + }, read: function (e, t, r, n, o) {
  2758 + if (!e.tty || !e.tty.ops.get_char) throw new vt.ErrnoError(60);
  2759 + for (var a = 0, i = 0; i < n; i++) {
  2760 + var s;
  2761 + try {
  2762 + s = e.tty.ops.get_char(e.tty)
  2763 + } catch (e) {
  2764 + throw new vt.ErrnoError(29)
  2765 + }
  2766 + if (void 0 === s && 0 === a) throw new vt.ErrnoError(6);
  2767 + if (null == s) break;
  2768 + a++, t[r + i] = s
  2769 + }
  2770 + return a && (e.node.timestamp = Date.now()), a
  2771 + }, write: function (e, t, r, n, o) {
  2772 + if (!e.tty || !e.tty.ops.put_char) throw new vt.ErrnoError(60);
  2773 + try {
  2774 + for (var a = 0; a < n; a++) e.tty.ops.put_char(e.tty, t[r + a])
  2775 + } catch (e) {
  2776 + throw new vt.ErrnoError(29)
  2777 + }
  2778 + return n && (e.node.timestamp = Date.now()), a
  2779 + }
  2780 + }, default_tty_ops: {
  2781 + get_char: function (e) {
  2782 + if (!e.input.length) {
  2783 + var t = null;
  2784 + if ("undefined" != typeof window && "function" == typeof window.prompt ? null !== (t = window.prompt("Input: ")) && (t += "\n") : "function" == typeof readline && null !== (t = readline()) && (t += "\n"), !t) return null;
  2785 + e.input = ga(t, !0)
  2786 + }
  2787 + return e.input.shift()
  2788 + }, put_char: function (e, t) {
  2789 + null === t || 10 === t ? (Be(Pr(e.output, 0)), e.output = []) : 0 != t && e.output.push(t)
  2790 + }, flush: function (e) {
  2791 + e.output && e.output.length > 0 && (Be(Pr(e.output, 0)), e.output = [])
  2792 + }
  2793 + }, default_tty1_ops: {
  2794 + put_char: function (e, t) {
  2795 + null === t || 10 === t ? (Me(Pr(e.output, 0)), e.output = []) : 0 != t && e.output.push(t)
  2796 + }, flush: function (e) {
  2797 + e.output && e.output.length > 0 && (Me(Pr(e.output, 0)), e.output = [])
  2798 + }
  2799 + }
  2800 + }, gt = {
  2801 + ops_table: null, mount: function (e) {
  2802 + return gt.createNode(null, "/", 16895, 0)
  2803 + }, createNode: function (e, t, r, n) {
  2804 + if (vt.isBlkdev(r) || vt.isFIFO(r)) throw new vt.ErrnoError(63);
  2805 + gt.ops_table || (gt.ops_table = {
  2806 + dir: {
  2807 + node: {
  2808 + getattr: gt.node_ops.getattr,
  2809 + setattr: gt.node_ops.setattr,
  2810 + lookup: gt.node_ops.lookup,
  2811 + mknod: gt.node_ops.mknod,
  2812 + rename: gt.node_ops.rename,
  2813 + unlink: gt.node_ops.unlink,
  2814 + rmdir: gt.node_ops.rmdir,
  2815 + readdir: gt.node_ops.readdir,
  2816 + symlink: gt.node_ops.symlink
  2817 + }, stream: {llseek: gt.stream_ops.llseek}
  2818 + },
  2819 + file: {
  2820 + node: {getattr: gt.node_ops.getattr, setattr: gt.node_ops.setattr},
  2821 + stream: {
  2822 + llseek: gt.stream_ops.llseek,
  2823 + read: gt.stream_ops.read,
  2824 + write: gt.stream_ops.write,
  2825 + allocate: gt.stream_ops.allocate,
  2826 + mmap: gt.stream_ops.mmap,
  2827 + msync: gt.stream_ops.msync
  2828 + }
  2829 + },
  2830 + link: {
  2831 + node: {getattr: gt.node_ops.getattr, setattr: gt.node_ops.setattr, readlink: gt.node_ops.readlink},
  2832 + stream: {}
  2833 + },
  2834 + chrdev: {node: {getattr: gt.node_ops.getattr, setattr: gt.node_ops.setattr}, stream: vt.chrdev_stream_ops}
  2835 + });
  2836 + var o = vt.createNode(e, t, r, n);
  2837 + return vt.isDir(o.mode) ? (o.node_ops = gt.ops_table.dir.node, o.stream_ops = gt.ops_table.dir.stream, o.contents = {}) : vt.isFile(o.mode) ? (o.node_ops = gt.ops_table.file.node, o.stream_ops = gt.ops_table.file.stream, o.usedBytes = 0, o.contents = null) : vt.isLink(o.mode) ? (o.node_ops = gt.ops_table.link.node, o.stream_ops = gt.ops_table.link.stream) : vt.isChrdev(o.mode) && (o.node_ops = gt.ops_table.chrdev.node, o.stream_ops = gt.ops_table.chrdev.stream), o.timestamp = Date.now(), e && (e.contents[t] = o, e.timestamp = o.timestamp), o
  2838 + }, getFileDataAsTypedArray: function (e) {
  2839 + return e.contents ? e.contents.subarray ? e.contents.subarray(0, e.usedBytes) : new Uint8Array(e.contents) : new Uint8Array(0)
  2840 + }, expandFileStorage: function (e, t) {
  2841 + var r = e.contents ? e.contents.length : 0;
  2842 + if (!(r >= t)) {
  2843 + t = Math.max(t, r * (r < 1048576 ? 2 : 1.125) >>> 0), 0 != r && (t = Math.max(t, 256));
  2844 + var n = e.contents;
  2845 + e.contents = new Uint8Array(t), e.usedBytes > 0 && e.contents.set(n.subarray(0, e.usedBytes), 0)
  2846 + }
  2847 + }, resizeFileStorage: function (e, t) {
  2848 + if (e.usedBytes != t) if (0 == t) e.contents = null, e.usedBytes = 0; else {
  2849 + var r = e.contents;
  2850 + e.contents = new Uint8Array(t), r && e.contents.set(r.subarray(0, Math.min(t, e.usedBytes))), e.usedBytes = t
  2851 + }
  2852 + }, node_ops: {
  2853 + getattr: function (e) {
  2854 + var t = {};
  2855 + return t.dev = vt.isChrdev(e.mode) ? e.id : 1, t.ino = e.id, t.mode = e.mode, t.nlink = 1, t.uid = 0, t.gid = 0, t.rdev = e.rdev, vt.isDir(e.mode) ? t.size = 4096 : vt.isFile(e.mode) ? t.size = e.usedBytes : vt.isLink(e.mode) ? t.size = e.link.length : t.size = 0, t.atime = new Date(e.timestamp), t.mtime = new Date(e.timestamp), t.ctime = new Date(e.timestamp), t.blksize = 4096, t.blocks = Math.ceil(t.size / t.blksize), t
  2856 + }, setattr: function (e, t) {
  2857 + void 0 !== t.mode && (e.mode = t.mode), void 0 !== t.timestamp && (e.timestamp = t.timestamp), void 0 !== t.size && gt.resizeFileStorage(e, t.size)
  2858 + }, lookup: function (e, t) {
  2859 + throw vt.genericErrors[44]
  2860 + }, mknod: function (e, t, r, n) {
  2861 + return gt.createNode(e, t, r, n)
  2862 + }, rename: function (e, t, r) {
  2863 + if (vt.isDir(e.mode)) {
  2864 + var n;
  2865 + try {
  2866 + n = vt.lookupNode(t, r)
  2867 + } catch (e) {
  2868 + }
  2869 + if (n) for (var o in n.contents) throw new vt.ErrnoError(55)
  2870 + }
  2871 + delete e.parent.contents[e.name], e.parent.timestamp = Date.now(), e.name = r, t.contents[r] = e, t.timestamp = e.parent.timestamp, e.parent = t
  2872 + }, unlink: function (e, t) {
  2873 + delete e.contents[t], e.timestamp = Date.now()
  2874 + }, rmdir: function (e, t) {
  2875 + var r = vt.lookupNode(e, t);
  2876 + for (var n in r.contents) throw new vt.ErrnoError(55);
  2877 + delete e.contents[t], e.timestamp = Date.now()
  2878 + }, readdir: function (e) {
  2879 + var t = [".", ".."];
  2880 + for (var r in e.contents) e.contents.hasOwnProperty(r) && t.push(r);
  2881 + return t
  2882 + }, symlink: function (e, t, r) {
  2883 + var n = gt.createNode(e, t, 41471, 0);
  2884 + return n.link = r, n
  2885 + }, readlink: function (e) {
  2886 + if (!vt.isLink(e.mode)) throw new vt.ErrnoError(28);
  2887 + return e.link
  2888 + }
  2889 + }, stream_ops: {
  2890 + read: function (e, t, r, n, o) {
  2891 + var a = e.node.contents;
  2892 + if (o >= e.node.usedBytes) return 0;
  2893 + var i = Math.min(e.node.usedBytes - o, n);
  2894 + if (i > 8 && a.subarray) t.set(a.subarray(o, o + i), r); else for (var s = 0; s < i; s++) t[r + s] = a[o + s];
  2895 + return i
  2896 + }, write: function (e, t, r, n, o, a) {
  2897 + if (!n) return 0;
  2898 + var i = e.node;
  2899 + if (i.timestamp = Date.now(), t.subarray && (!i.contents || i.contents.subarray)) {
  2900 + if (a) return i.contents = t.subarray(r, r + n), i.usedBytes = n, n;
  2901 + if (0 === i.usedBytes && 0 === o) return i.contents = t.slice(r, r + n), i.usedBytes = n, n;
  2902 + if (o + n <= i.usedBytes) return i.contents.set(t.subarray(r, r + n), o), n
  2903 + }
  2904 + if (gt.expandFileStorage(i, o + n), i.contents.subarray && t.subarray) i.contents.set(t.subarray(r, r + n), o); else for (var s = 0; s < n; s++) i.contents[o + s] = t[r + s];
  2905 + return i.usedBytes = Math.max(i.usedBytes, o + n), n
  2906 + }, llseek: function (e, t, r) {
  2907 + var n = t;
  2908 + if (1 === r ? n += e.position : 2 === r && vt.isFile(e.node.mode) && (n += e.node.usedBytes), n < 0) throw new vt.ErrnoError(28);
  2909 + return n
  2910 + }, allocate: function (e, t, r) {
  2911 + gt.expandFileStorage(e.node, t + r), e.node.usedBytes = Math.max(e.node.usedBytes, t + r)
  2912 + }, mmap: function (e, t, r, n, o, a) {
  2913 + if (0 !== t) throw new vt.ErrnoError(28);
  2914 + if (!vt.isFile(e.node.mode)) throw new vt.ErrnoError(43);
  2915 + var i, s, u = e.node.contents;
  2916 + if (2 & a || u.buffer !== Ge) {
  2917 + if ((n > 0 || n + r < u.length) && (u = u.subarray ? u.subarray(n, n + r) : Array.prototype.slice.call(u, n, n + r)), s = !0, !(i = on(r))) throw new vt.ErrnoError(48);
  2918 + ze.set(u, i)
  2919 + } else s = !1, i = u.byteOffset;
  2920 + return {ptr: i, allocated: s}
  2921 + }, msync: function (e, t, r, n, o) {
  2922 + if (!vt.isFile(e.node.mode)) throw new vt.ErrnoError(43);
  2923 + if (2 & o) return 0;
  2924 + gt.stream_ops.write(e, t, 0, n, r, !1);
  2925 + return 0
  2926 + }
  2927 + }
  2928 + }, vt = {
  2929 + root: null,
  2930 + mounts: [],
  2931 + devices: {},
  2932 + streams: [],
  2933 + nextInode: 1,
  2934 + nameTable: null,
  2935 + currentPath: "/",
  2936 + initialized: !1,
  2937 + ignorePermissions: !0,
  2938 + trackingDelegate: {},
  2939 + tracking: {openFlags: {READ: 1, WRITE: 2}},
  2940 + ErrnoError: null,
  2941 + genericErrors: {},
  2942 + filesystems: null,
  2943 + syncFSRequests: 0,
  2944 + lookupPath: function (e, t) {
  2945 + if (t = t || {}, !(e = mt.resolve(vt.cwd(), e))) return {path: "", node: null};
  2946 + var r = {follow_mount: !0, recurse_count: 0};
  2947 + for (var n in r) void 0 === t[n] && (t[n] = r[n]);
  2948 + if (t.recurse_count > 8) throw new vt.ErrnoError(32);
  2949 + for (var o = ht.normalizeArray(e.split("/").filter((function (e) {
  2950 + return !!e
  2951 + })), !1), a = vt.root, i = "/", s = 0; s < o.length; s++) {
  2952 + var u = s === o.length - 1;
  2953 + if (u && t.parent) break;
  2954 + if (a = vt.lookupNode(a, o[s]), i = ht.join2(i, o[s]), vt.isMountpoint(a) && (!u || u && t.follow_mount) && (a = a.mounted.root), !u || t.follow) for (var c = 0; vt.isLink(a.mode);) {
  2955 + var l = vt.readlink(i);
  2956 + if (i = mt.resolve(ht.dirname(i), l), a = vt.lookupPath(i, {recurse_count: t.recurse_count}).node, c++ > 40) throw new vt.ErrnoError(32)
  2957 + }
  2958 + }
  2959 + return {path: i, node: a}
  2960 + },
  2961 + getPath: function (e) {
  2962 + for (var t; ;) {
  2963 + if (vt.isRoot(e)) {
  2964 + var r = e.mount.mountpoint;
  2965 + return t ? "/" !== r[r.length - 1] ? r + "/" + t : r + t : r
  2966 + }
  2967 + t = t ? e.name + "/" + t : e.name, e = e.parent
  2968 + }
  2969 + },
  2970 + hashName: function (e, t) {
  2971 + for (var r = 0, n = 0; n < t.length; n++) r = (r << 5) - r + t.charCodeAt(n) | 0;
  2972 + return (e + r >>> 0) % vt.nameTable.length
  2973 + },
  2974 + hashAddNode: function (e) {
  2975 + var t = vt.hashName(e.parent.id, e.name);
  2976 + e.name_next = vt.nameTable[t], vt.nameTable[t] = e
  2977 + },
  2978 + hashRemoveNode: function (e) {
  2979 + var t = vt.hashName(e.parent.id, e.name);
  2980 + if (vt.nameTable[t] === e) vt.nameTable[t] = e.name_next; else for (var r = vt.nameTable[t]; r;) {
  2981 + if (r.name_next === e) {
  2982 + r.name_next = e.name_next;
  2983 + break
  2984 + }
  2985 + r = r.name_next
  2986 + }
  2987 + },
  2988 + lookupNode: function (e, t) {
  2989 + var r = vt.mayLookup(e);
  2990 + if (r) throw new vt.ErrnoError(r, e);
  2991 + for (var n = vt.hashName(e.id, t), o = vt.nameTable[n]; o; o = o.name_next) {
  2992 + var a = o.name;
  2993 + if (o.parent.id === e.id && a === t) return o
  2994 + }
  2995 + return vt.lookup(e, t)
  2996 + },
  2997 + createNode: function (e, t, r, n) {
  2998 + var o = new vt.FSNode(e, t, r, n);
  2999 + return vt.hashAddNode(o), o
  3000 + },
  3001 + destroyNode: function (e) {
  3002 + vt.hashRemoveNode(e)
  3003 + },
  3004 + isRoot: function (e) {
  3005 + return e === e.parent
  3006 + },
  3007 + isMountpoint: function (e) {
  3008 + return !!e.mounted
  3009 + },
  3010 + isFile: function (e) {
  3011 + return 32768 == (61440 & e)
  3012 + },
  3013 + isDir: function (e) {
  3014 + return 16384 == (61440 & e)
  3015 + },
  3016 + isLink: function (e) {
  3017 + return 40960 == (61440 & e)
  3018 + },
  3019 + isChrdev: function (e) {
  3020 + return 8192 == (61440 & e)
  3021 + },
  3022 + isBlkdev: function (e) {
  3023 + return 24576 == (61440 & e)
  3024 + },
  3025 + isFIFO: function (e) {
  3026 + return 4096 == (61440 & e)
  3027 + },
  3028 + isSocket: function (e) {
  3029 + return 49152 == (49152 & e)
  3030 + },
  3031 + flagModes: {r: 0, "r+": 2, w: 577, "w+": 578, a: 1089, "a+": 1090},
  3032 + modeStringToFlags: function (e) {
  3033 + var t = vt.flagModes[e];
  3034 + if (void 0 === t) throw new Error("Unknown file open mode: " + e);
  3035 + return t
  3036 + },
  3037 + flagsToPermissionString: function (e) {
  3038 + var t = ["r", "w", "rw"][3 & e];
  3039 + return 512 & e && (t += "w"), t
  3040 + },
  3041 + nodePermissions: function (e, t) {
  3042 + return vt.ignorePermissions || (-1 === t.indexOf("r") || 292 & e.mode) && (-1 === t.indexOf("w") || 146 & e.mode) && (-1 === t.indexOf("x") || 73 & e.mode) ? 0 : 2
  3043 + },
  3044 + mayLookup: function (e) {
  3045 + var t = vt.nodePermissions(e, "x");
  3046 + return t || (e.node_ops.lookup ? 0 : 2)
  3047 + },
  3048 + mayCreate: function (e, t) {
  3049 + try {
  3050 + vt.lookupNode(e, t);
  3051 + return 20
  3052 + } catch (e) {
  3053 + }
  3054 + return vt.nodePermissions(e, "wx")
  3055 + },
  3056 + mayDelete: function (e, t, r) {
  3057 + var n;
  3058 + try {
  3059 + n = vt.lookupNode(e, t)
  3060 + } catch (e) {
  3061 + return e.errno
  3062 + }
  3063 + var o = vt.nodePermissions(e, "wx");
  3064 + if (o) return o;
  3065 + if (r) {
  3066 + if (!vt.isDir(n.mode)) return 54;
  3067 + if (vt.isRoot(n) || vt.getPath(n) === vt.cwd()) return 10
  3068 + } else if (vt.isDir(n.mode)) return 31;
  3069 + return 0
  3070 + },
  3071 + mayOpen: function (e, t) {
  3072 + return e ? vt.isLink(e.mode) ? 32 : vt.isDir(e.mode) && ("r" !== vt.flagsToPermissionString(t) || 512 & t) ? 31 : vt.nodePermissions(e, vt.flagsToPermissionString(t)) : 44
  3073 + },
  3074 + MAX_OPEN_FDS: 4096,
  3075 + nextfd: function (e, t) {
  3076 + e = e || 0, t = t || vt.MAX_OPEN_FDS;
  3077 + for (var r = e; r <= t; r++) if (!vt.streams[r]) return r;
  3078 + throw new vt.ErrnoError(33)
  3079 + },
  3080 + getStream: function (e) {
  3081 + return vt.streams[e]
  3082 + },
  3083 + createStream: function (e, t, r) {
  3084 + vt.FSStream || (vt.FSStream = function () {
  3085 + }, vt.FSStream.prototype = {
  3086 + object: {
  3087 + get: function () {
  3088 + return this.node
  3089 + }, set: function (e) {
  3090 + this.node = e
  3091 + }
  3092 + }, isRead: {
  3093 + get: function () {
  3094 + return 1 != (2097155 & this.flags)
  3095 + }
  3096 + }, isWrite: {
  3097 + get: function () {
  3098 + return 0 != (2097155 & this.flags)
  3099 + }
  3100 + }, isAppend: {
  3101 + get: function () {
  3102 + return 1024 & this.flags
  3103 + }
  3104 + }
  3105 + });
  3106 + var n = new vt.FSStream;
  3107 + for (var o in e) n[o] = e[o];
  3108 + e = n;
  3109 + var a = vt.nextfd(t, r);
  3110 + return e.fd = a, vt.streams[a] = e, e
  3111 + },
  3112 + closeStream: function (e) {
  3113 + vt.streams[e] = null
  3114 + },
  3115 + chrdev_stream_ops: {
  3116 + open: function (e) {
  3117 + var t = vt.getDevice(e.node.rdev);
  3118 + e.stream_ops = t.stream_ops, e.stream_ops.open && e.stream_ops.open(e)
  3119 + }, llseek: function () {
  3120 + throw new vt.ErrnoError(70)
  3121 + }
  3122 + },
  3123 + major: function (e) {
  3124 + return e >> 8
  3125 + },
  3126 + minor: function (e) {
  3127 + return 255 & e
  3128 + },
  3129 + makedev: function (e, t) {
  3130 + return e << 8 | t
  3131 + },
  3132 + registerDevice: function (e, t) {
  3133 + vt.devices[e] = {stream_ops: t}
  3134 + },
  3135 + getDevice: function (e) {
  3136 + return vt.devices[e]
  3137 + },
  3138 + getMounts: function (e) {
  3139 + for (var t = [], r = [e]; r.length;) {
  3140 + var n = r.pop();
  3141 + t.push(n), r.push.apply(r, n.mounts)
  3142 + }
  3143 + return t
  3144 + },
  3145 + syncfs: function (e, t) {
  3146 + "function" == typeof e && (t = e, e = !1), vt.syncFSRequests++, vt.syncFSRequests > 1 && Me("warning: " + vt.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work");
  3147 + var r = vt.getMounts(vt.root.mount), n = 0;
  3148 +
  3149 + function o(e) {
  3150 + return vt.syncFSRequests--, t(e)
  3151 + }
  3152 +
  3153 + function a(e) {
  3154 + if (e) return a.errored ? void 0 : (a.errored = !0, o(e));
  3155 + ++n >= r.length && o(null)
  3156 + }
  3157 +
  3158 + r.forEach((function (t) {
  3159 + if (!t.type.syncfs) return a(null);
  3160 + t.type.syncfs(t, e, a)
  3161 + }))
  3162 + },
  3163 + mount: function (e, t, r) {
  3164 + var n, o = "/" === r, a = !r;
  3165 + if (o && vt.root) throw new vt.ErrnoError(10);
  3166 + if (!o && !a) {
  3167 + var i = vt.lookupPath(r, {follow_mount: !1});
  3168 + if (r = i.path, n = i.node, vt.isMountpoint(n)) throw new vt.ErrnoError(10);
  3169 + if (!vt.isDir(n.mode)) throw new vt.ErrnoError(54)
  3170 + }
  3171 + var s = {type: e, opts: t, mountpoint: r, mounts: []}, u = e.mount(s);
  3172 + return u.mount = s, s.root = u, o ? vt.root = u : n && (n.mounted = s, n.mount && n.mount.mounts.push(s)), u
  3173 + },
  3174 + unmount: function (e) {
  3175 + var t = vt.lookupPath(e, {follow_mount: !1});
  3176 + if (!vt.isMountpoint(t.node)) throw new vt.ErrnoError(28);
  3177 + var r = t.node, n = r.mounted, o = vt.getMounts(n);
  3178 + Object.keys(vt.nameTable).forEach((function (e) {
  3179 + for (var t = vt.nameTable[e]; t;) {
  3180 + var r = t.name_next;
  3181 + -1 !== o.indexOf(t.mount) && vt.destroyNode(t), t = r
  3182 + }
  3183 + })), r.mounted = null;
  3184 + var a = r.mount.mounts.indexOf(n);
  3185 + r.mount.mounts.splice(a, 1)
  3186 + },
  3187 + lookup: function (e, t) {
  3188 + return e.node_ops.lookup(e, t)
  3189 + },
  3190 + mknod: function (e, t, r) {
  3191 + var n = vt.lookupPath(e, {parent: !0}).node, o = ht.basename(e);
  3192 + if (!o || "." === o || ".." === o) throw new vt.ErrnoError(28);
  3193 + var a = vt.mayCreate(n, o);
  3194 + if (a) throw new vt.ErrnoError(a);
  3195 + if (!n.node_ops.mknod) throw new vt.ErrnoError(63);
  3196 + return n.node_ops.mknod(n, o, t, r)
  3197 + },
  3198 + create: function (e, t) {
  3199 + return t = void 0 !== t ? t : 438, t &= 4095, t |= 32768, vt.mknod(e, t, 0)
  3200 + },
  3201 + mkdir: function (e, t) {
  3202 + return t = void 0 !== t ? t : 511, t &= 1023, t |= 16384, vt.mknod(e, t, 0)
  3203 + },
  3204 + mkdirTree: function (e, t) {
  3205 + for (var r = e.split("/"), n = "", o = 0; o < r.length; ++o) if (r[o]) {
  3206 + n += "/" + r[o];
  3207 + try {
  3208 + vt.mkdir(n, t)
  3209 + } catch (e) {
  3210 + if (20 != e.errno) throw e
  3211 + }
  3212 + }
  3213 + },
  3214 + mkdev: function (e, t, r) {
  3215 + return void 0 === r && (r = t, t = 438), t |= 8192, vt.mknod(e, t, r)
  3216 + },
  3217 + symlink: function (e, t) {
  3218 + if (!mt.resolve(e)) throw new vt.ErrnoError(44);
  3219 + var r = vt.lookupPath(t, {parent: !0}).node;
  3220 + if (!r) throw new vt.ErrnoError(44);
  3221 + var n = ht.basename(t), o = vt.mayCreate(r, n);
  3222 + if (o) throw new vt.ErrnoError(o);
  3223 + if (!r.node_ops.symlink) throw new vt.ErrnoError(63);
  3224 + return r.node_ops.symlink(r, n, e)
  3225 + },
  3226 + rename: function (e, t) {
  3227 + var r, n, o = ht.dirname(e), a = ht.dirname(t), i = ht.basename(e), s = ht.basename(t);
  3228 + if (r = vt.lookupPath(e, {parent: !0}).node, n = vt.lookupPath(t, {parent: !0}).node, !r || !n) throw new vt.ErrnoError(44);
  3229 + if (r.mount !== n.mount) throw new vt.ErrnoError(75);
  3230 + var u, c = vt.lookupNode(r, i), l = mt.relative(e, a);
  3231 + if ("." !== l.charAt(0)) throw new vt.ErrnoError(28);
  3232 + if ("." !== (l = mt.relative(t, o)).charAt(0)) throw new vt.ErrnoError(55);
  3233 + try {
  3234 + u = vt.lookupNode(n, s)
  3235 + } catch (e) {
  3236 + }
  3237 + if (c !== u) {
  3238 + var d = vt.isDir(c.mode), f = vt.mayDelete(r, i, d);
  3239 + if (f) throw new vt.ErrnoError(f);
  3240 + if (f = u ? vt.mayDelete(n, s, d) : vt.mayCreate(n, s)) throw new vt.ErrnoError(f);
  3241 + if (!r.node_ops.rename) throw new vt.ErrnoError(63);
  3242 + if (vt.isMountpoint(c) || u && vt.isMountpoint(u)) throw new vt.ErrnoError(10);
  3243 + if (n !== r && (f = vt.nodePermissions(r, "w"))) throw new vt.ErrnoError(f);
  3244 + try {
  3245 + vt.trackingDelegate.willMovePath && vt.trackingDelegate.willMovePath(e, t)
  3246 + } catch (r) {
  3247 + Me("FS.trackingDelegate['willMovePath']('" + e + "', '" + t + "') threw an exception: " + r.message)
  3248 + }
  3249 + vt.hashRemoveNode(c);
  3250 + try {
  3251 + r.node_ops.rename(c, n, s)
  3252 + } catch (e) {
  3253 + throw e
  3254 + } finally {
  3255 + vt.hashAddNode(c)
  3256 + }
  3257 + try {
  3258 + vt.trackingDelegate.onMovePath && vt.trackingDelegate.onMovePath(e, t)
  3259 + } catch (r) {
  3260 + Me("FS.trackingDelegate['onMovePath']('" + e + "', '" + t + "') threw an exception: " + r.message)
  3261 + }
  3262 + }
  3263 + },
  3264 + rmdir: function (e) {
  3265 + var t = vt.lookupPath(e, {parent: !0}).node, r = ht.basename(e), n = vt.lookupNode(t, r),
  3266 + o = vt.mayDelete(t, r, !0);
  3267 + if (o) throw new vt.ErrnoError(o);
  3268 + if (!t.node_ops.rmdir) throw new vt.ErrnoError(63);
  3269 + if (vt.isMountpoint(n)) throw new vt.ErrnoError(10);
  3270 + try {
  3271 + vt.trackingDelegate.willDeletePath && vt.trackingDelegate.willDeletePath(e)
  3272 + } catch (t) {
  3273 + Me("FS.trackingDelegate['willDeletePath']('" + e + "') threw an exception: " + t.message)
  3274 + }
  3275 + t.node_ops.rmdir(t, r), vt.destroyNode(n);
  3276 + try {
  3277 + vt.trackingDelegate.onDeletePath && vt.trackingDelegate.onDeletePath(e)
  3278 + } catch (t) {
  3279 + Me("FS.trackingDelegate['onDeletePath']('" + e + "') threw an exception: " + t.message)
  3280 + }
  3281 + },
  3282 + readdir: function (e) {
  3283 + var t = vt.lookupPath(e, {follow: !0}).node;
  3284 + if (!t.node_ops.readdir) throw new vt.ErrnoError(54);
  3285 + return t.node_ops.readdir(t)
  3286 + },
  3287 + unlink: function (e) {
  3288 + var t = vt.lookupPath(e, {parent: !0}).node, r = ht.basename(e), n = vt.lookupNode(t, r),
  3289 + o = vt.mayDelete(t, r, !1);
  3290 + if (o) throw new vt.ErrnoError(o);
  3291 + if (!t.node_ops.unlink) throw new vt.ErrnoError(63);
  3292 + if (vt.isMountpoint(n)) throw new vt.ErrnoError(10);
  3293 + try {
  3294 + vt.trackingDelegate.willDeletePath && vt.trackingDelegate.willDeletePath(e)
  3295 + } catch (t) {
  3296 + Me("FS.trackingDelegate['willDeletePath']('" + e + "') threw an exception: " + t.message)
  3297 + }
  3298 + t.node_ops.unlink(t, r), vt.destroyNode(n);
  3299 + try {
  3300 + vt.trackingDelegate.onDeletePath && vt.trackingDelegate.onDeletePath(e)
  3301 + } catch (t) {
  3302 + Me("FS.trackingDelegate['onDeletePath']('" + e + "') threw an exception: " + t.message)
  3303 + }
  3304 + },
  3305 + readlink: function (e) {
  3306 + var t = vt.lookupPath(e).node;
  3307 + if (!t) throw new vt.ErrnoError(44);
  3308 + if (!t.node_ops.readlink) throw new vt.ErrnoError(28);
  3309 + return mt.resolve(vt.getPath(t.parent), t.node_ops.readlink(t))
  3310 + },
  3311 + stat: function (e, t) {
  3312 + var r = vt.lookupPath(e, {follow: !t}).node;
  3313 + if (!r) throw new vt.ErrnoError(44);
  3314 + if (!r.node_ops.getattr) throw new vt.ErrnoError(63);
  3315 + return r.node_ops.getattr(r)
  3316 + },
  3317 + lstat: function (e) {
  3318 + return vt.stat(e, !0)
  3319 + },
  3320 + chmod: function (e, t, r) {
  3321 + var n;
  3322 + "string" == typeof e ? n = vt.lookupPath(e, {follow: !r}).node : n = e;
  3323 + if (!n.node_ops.setattr) throw new vt.ErrnoError(63);
  3324 + n.node_ops.setattr(n, {mode: 4095 & t | -4096 & n.mode, timestamp: Date.now()})
  3325 + },
  3326 + lchmod: function (e, t) {
  3327 + vt.chmod(e, t, !0)
  3328 + },
  3329 + fchmod: function (e, t) {
  3330 + var r = vt.getStream(e);
  3331 + if (!r) throw new vt.ErrnoError(8);
  3332 + vt.chmod(r.node, t)
  3333 + },
  3334 + chown: function (e, t, r, n) {
  3335 + var o;
  3336 + "string" == typeof e ? o = vt.lookupPath(e, {follow: !n}).node : o = e;
  3337 + if (!o.node_ops.setattr) throw new vt.ErrnoError(63);
  3338 + o.node_ops.setattr(o, {timestamp: Date.now()})
  3339 + },
  3340 + lchown: function (e, t, r) {
  3341 + vt.chown(e, t, r, !0)
  3342 + },
  3343 + fchown: function (e, t, r) {
  3344 + var n = vt.getStream(e);
  3345 + if (!n) throw new vt.ErrnoError(8);
  3346 + vt.chown(n.node, t, r)
  3347 + },
  3348 + truncate: function (e, t) {
  3349 + if (t < 0) throw new vt.ErrnoError(28);
  3350 + var r;
  3351 + "string" == typeof e ? r = vt.lookupPath(e, {follow: !0}).node : r = e;
  3352 + if (!r.node_ops.setattr) throw new vt.ErrnoError(63);
  3353 + if (vt.isDir(r.mode)) throw new vt.ErrnoError(31);
  3354 + if (!vt.isFile(r.mode)) throw new vt.ErrnoError(28);
  3355 + var n = vt.nodePermissions(r, "w");
  3356 + if (n) throw new vt.ErrnoError(n);
  3357 + r.node_ops.setattr(r, {size: t, timestamp: Date.now()})
  3358 + },
  3359 + ftruncate: function (e, t) {
  3360 + var r = vt.getStream(e);
  3361 + if (!r) throw new vt.ErrnoError(8);
  3362 + if (0 == (2097155 & r.flags)) throw new vt.ErrnoError(28);
  3363 + vt.truncate(r.node, t)
  3364 + },
  3365 + utime: function (e, t, r) {
  3366 + var n = vt.lookupPath(e, {follow: !0}).node;
  3367 + n.node_ops.setattr(n, {timestamp: Math.max(t, r)})
  3368 + },
  3369 + open: function (e, t, r, n, o) {
  3370 + if ("" === e) throw new vt.ErrnoError(44);
  3371 + var a;
  3372 + if (r = void 0 === r ? 438 : r, r = 64 & (t = "string" == typeof t ? vt.modeStringToFlags(t) : t) ? 4095 & r | 32768 : 0, "object" == typeof e) a = e; else {
  3373 + e = ht.normalize(e);
  3374 + try {
  3375 + a = vt.lookupPath(e, {follow: !(131072 & t)}).node
  3376 + } catch (e) {
  3377 + }
  3378 + }
  3379 + var i = !1;
  3380 + if (64 & t) if (a) {
  3381 + if (128 & t) throw new vt.ErrnoError(20)
  3382 + } else a = vt.mknod(e, r, 0), i = !0;
  3383 + if (!a) throw new vt.ErrnoError(44);
  3384 + if (vt.isChrdev(a.mode) && (t &= -513), 65536 & t && !vt.isDir(a.mode)) throw new vt.ErrnoError(54);
  3385 + if (!i) {
  3386 + var s = vt.mayOpen(a, t);
  3387 + if (s) throw new vt.ErrnoError(s)
  3388 + }
  3389 + 512 & t && vt.truncate(a, 0), t &= -131713;
  3390 + var u = vt.createStream({
  3391 + node: a,
  3392 + path: vt.getPath(a),
  3393 + flags: t,
  3394 + seekable: !0,
  3395 + position: 0,
  3396 + stream_ops: a.stream_ops,
  3397 + ungotten: [],
  3398 + error: !1
  3399 + }, n, o);
  3400 + u.stream_ops.open && u.stream_ops.open(u), !Ee.logReadFiles || 1 & t || (vt.readFiles || (vt.readFiles = {}), e in vt.readFiles || (vt.readFiles[e] = 1, Me("FS.trackingDelegate error on read file: " + e)));
  3401 + try {
  3402 + if (vt.trackingDelegate.onOpenFile) {
  3403 + var c = 0;
  3404 + 1 != (2097155 & t) && (c |= vt.tracking.openFlags.READ), 0 != (2097155 & t) && (c |= vt.tracking.openFlags.WRITE), vt.trackingDelegate.onOpenFile(e, c)
  3405 + }
  3406 + } catch (t) {
  3407 + Me("FS.trackingDelegate['onOpenFile']('" + e + "', flags) threw an exception: " + t.message)
  3408 + }
  3409 + return u
  3410 + },
  3411 + close: function (e) {
  3412 + if (vt.isClosed(e)) throw new vt.ErrnoError(8);
  3413 + e.getdents && (e.getdents = null);
  3414 + try {
  3415 + e.stream_ops.close && e.stream_ops.close(e)
  3416 + } catch (e) {
  3417 + throw e
  3418 + } finally {
  3419 + vt.closeStream(e.fd)
  3420 + }
  3421 + e.fd = null
  3422 + },
  3423 + isClosed: function (e) {
  3424 + return null === e.fd
  3425 + },
  3426 + llseek: function (e, t, r) {
  3427 + if (vt.isClosed(e)) throw new vt.ErrnoError(8);
  3428 + if (!e.seekable || !e.stream_ops.llseek) throw new vt.ErrnoError(70);
  3429 + if (0 != r && 1 != r && 2 != r) throw new vt.ErrnoError(28);
  3430 + return e.position = e.stream_ops.llseek(e, t, r), e.ungotten = [], e.position
  3431 + },
  3432 + read: function (e, t, r, n, o) {
  3433 + if (n < 0 || o < 0) throw new vt.ErrnoError(28);
  3434 + if (vt.isClosed(e)) throw new vt.ErrnoError(8);
  3435 + if (1 == (2097155 & e.flags)) throw new vt.ErrnoError(8);
  3436 + if (vt.isDir(e.node.mode)) throw new vt.ErrnoError(31);
  3437 + if (!e.stream_ops.read) throw new vt.ErrnoError(28);
  3438 + var a = void 0 !== o;
  3439 + if (a) {
  3440 + if (!e.seekable) throw new vt.ErrnoError(70)
  3441 + } else o = e.position;
  3442 + var i = e.stream_ops.read(e, t, r, n, o);
  3443 + return a || (e.position += i), i
  3444 + },
  3445 + write: function (e, t, r, n, o, a) {
  3446 + if (n < 0 || o < 0) throw new vt.ErrnoError(28);
  3447 + if (vt.isClosed(e)) throw new vt.ErrnoError(8);
  3448 + if (0 == (2097155 & e.flags)) throw new vt.ErrnoError(8);
  3449 + if (vt.isDir(e.node.mode)) throw new vt.ErrnoError(31);
  3450 + if (!e.stream_ops.write) throw new vt.ErrnoError(28);
  3451 + e.seekable && 1024 & e.flags && vt.llseek(e, 0, 2);
  3452 + var i = void 0 !== o;
  3453 + if (i) {
  3454 + if (!e.seekable) throw new vt.ErrnoError(70)
  3455 + } else o = e.position;
  3456 + var s = e.stream_ops.write(e, t, r, n, o, a);
  3457 + i || (e.position += s);
  3458 + try {
  3459 + e.path && vt.trackingDelegate.onWriteToFile && vt.trackingDelegate.onWriteToFile(e.path)
  3460 + } catch (t) {
  3461 + Me("FS.trackingDelegate['onWriteToFile']('" + e.path + "') threw an exception: " + t.message)
  3462 + }
  3463 + return s
  3464 + },
  3465 + allocate: function (e, t, r) {
  3466 + if (vt.isClosed(e)) throw new vt.ErrnoError(8);
  3467 + if (t < 0 || r <= 0) throw new vt.ErrnoError(28);
  3468 + if (0 == (2097155 & e.flags)) throw new vt.ErrnoError(8);
  3469 + if (!vt.isFile(e.node.mode) && !vt.isDir(e.node.mode)) throw new vt.ErrnoError(43);
  3470 + if (!e.stream_ops.allocate) throw new vt.ErrnoError(138);
  3471 + e.stream_ops.allocate(e, t, r)
  3472 + },
  3473 + mmap: function (e, t, r, n, o, a) {
  3474 + if (0 != (2 & o) && 0 == (2 & a) && 2 != (2097155 & e.flags)) throw new vt.ErrnoError(2);
  3475 + if (1 == (2097155 & e.flags)) throw new vt.ErrnoError(2);
  3476 + if (!e.stream_ops.mmap) throw new vt.ErrnoError(43);
  3477 + return e.stream_ops.mmap(e, t, r, n, o, a)
  3478 + },
  3479 + msync: function (e, t, r, n, o) {
  3480 + return e && e.stream_ops.msync ? e.stream_ops.msync(e, t, r, n, o) : 0
  3481 + },
  3482 + munmap: function (e) {
  3483 + return 0
  3484 + },
  3485 + ioctl: function (e, t, r) {
  3486 + if (!e.stream_ops.ioctl) throw new vt.ErrnoError(59);
  3487 + return e.stream_ops.ioctl(e, t, r)
  3488 + },
  3489 + readFile: function (e, t) {
  3490 + if ((t = t || {}).flags = t.flags || 0, t.encoding = t.encoding || "binary", "utf8" !== t.encoding && "binary" !== t.encoding) throw new Error('Invalid encoding type "' + t.encoding + '"');
  3491 + var r, n = vt.open(e, t.flags), o = vt.stat(e).size, a = new Uint8Array(o);
  3492 + return vt.read(n, a, 0, o, 0), "utf8" === t.encoding ? r = Pr(a, 0) : "binary" === t.encoding && (r = a), vt.close(n), r
  3493 + },
  3494 + writeFile: function (e, t, r) {
  3495 + (r = r || {}).flags = r.flags || 577;
  3496 + var n = vt.open(e, r.flags, r.mode);
  3497 + if ("string" == typeof t) {
  3498 + var o = new Uint8Array(Rr(t) + 1), a = Br(t, o, 0, o.length);
  3499 + vt.write(n, o, 0, a, void 0, r.canOwn)
  3500 + } else {
  3501 + if (!ArrayBuffer.isView(t)) throw new Error("Unsupported data type");
  3502 + vt.write(n, t, 0, t.byteLength, void 0, r.canOwn)
  3503 + }
  3504 + vt.close(n)
  3505 + },
  3506 + cwd: function () {
  3507 + return vt.currentPath
  3508 + },
  3509 + chdir: function (e) {
  3510 + var t = vt.lookupPath(e, {follow: !0});
  3511 + if (null === t.node) throw new vt.ErrnoError(44);
  3512 + if (!vt.isDir(t.node.mode)) throw new vt.ErrnoError(54);
  3513 + var r = vt.nodePermissions(t.node, "x");
  3514 + if (r) throw new vt.ErrnoError(r);
  3515 + vt.currentPath = t.path
  3516 + },
  3517 + createDefaultDirectories: function () {
  3518 + vt.mkdir("/tmp"), vt.mkdir("/home"), vt.mkdir("/home/web_user")
  3519 + },
  3520 + createDefaultDevices: function () {
  3521 + vt.mkdir("/dev"), vt.registerDevice(vt.makedev(1, 3), {
  3522 + read: function () {
  3523 + return 0
  3524 + }, write: function (e, t, r, n, o) {
  3525 + return n
  3526 + }
  3527 + }), vt.mkdev("/dev/null", vt.makedev(1, 3)), At.register(vt.makedev(5, 0), At.default_tty_ops), At.register(vt.makedev(6, 0), At.default_tty1_ops), vt.mkdev("/dev/tty", vt.makedev(5, 0)), vt.mkdev("/dev/tty1", vt.makedev(6, 0));
  3528 + var e = function () {
  3529 + if ("object" == typeof crypto && "function" == typeof crypto.getRandomValues) {
  3530 + var e = new Uint8Array(1);
  3531 + return function () {
  3532 + return crypto.getRandomValues(e), e[0]
  3533 + }
  3534 + }
  3535 + return function () {
  3536 + Yr("randomDevice")
  3537 + }
  3538 + }();
  3539 + vt.createDevice("/dev", "random", e), vt.createDevice("/dev", "urandom", e), vt.mkdir("/dev/shm"), vt.mkdir("/dev/shm/tmp")
  3540 + },
  3541 + createSpecialDirectories: function () {
  3542 + vt.mkdir("/proc");
  3543 + var e = vt.mkdir("/proc/self");
  3544 + vt.mkdir("/proc/self/fd"), vt.mount({
  3545 + mount: function () {
  3546 + var t = vt.createNode(e, "fd", 16895, 73);
  3547 + return t.node_ops = {
  3548 + lookup: function (e, t) {
  3549 + var r = +t, n = vt.getStream(r);
  3550 + if (!n) throw new vt.ErrnoError(8);
  3551 + var o = {
  3552 + parent: null, mount: {mountpoint: "fake"}, node_ops: {
  3553 + readlink: function () {
  3554 + return n.path
  3555 + }
  3556 + }
  3557 + };
  3558 + return o.parent = o, o
  3559 + }
  3560 + }, t
  3561 + }
  3562 + }, {}, "/proc/self/fd")
  3563 + },
  3564 + createStandardStreams: function () {
  3565 + Ee.stdin ? vt.createDevice("/dev", "stdin", Ee.stdin) : vt.symlink("/dev/tty", "/dev/stdin"), Ee.stdout ? vt.createDevice("/dev", "stdout", null, Ee.stdout) : vt.symlink("/dev/tty", "/dev/stdout"), Ee.stderr ? vt.createDevice("/dev", "stderr", null, Ee.stderr) : vt.symlink("/dev/tty1", "/dev/stderr");
  3566 + vt.open("/dev/stdin", 0), vt.open("/dev/stdout", 1), vt.open("/dev/stderr", 1)
  3567 + },
  3568 + ensureErrnoError: function () {
  3569 + vt.ErrnoError || (vt.ErrnoError = function (e, t) {
  3570 + this.node = t, this.setErrno = function (e) {
  3571 + this.errno = e
  3572 + }, this.setErrno(e), this.message = "FS error"
  3573 + }, vt.ErrnoError.prototype = new Error, vt.ErrnoError.prototype.constructor = vt.ErrnoError, [44].forEach((function (e) {
  3574 + vt.genericErrors[e] = new vt.ErrnoError(e), vt.genericErrors[e].stack = "<generic error, no stack>"
  3575 + })))
  3576 + },
  3577 + staticInit: function () {
  3578 + vt.ensureErrnoError(), vt.nameTable = new Array(4096), vt.mount(gt, {}, "/"), vt.createDefaultDirectories(), vt.createDefaultDevices(), vt.createSpecialDirectories(), vt.filesystems = {MEMFS: gt}
  3579 + },
  3580 + init: function (e, t, r) {
  3581 + vt.init.initialized = !0, vt.ensureErrnoError(), Ee.stdin = e || Ee.stdin, Ee.stdout = t || Ee.stdout, Ee.stderr = r || Ee.stderr, vt.createStandardStreams()
  3582 + },
  3583 + quit: function () {
  3584 + vt.init.initialized = !1;
  3585 + var e = Ee._fflush;
  3586 + e && e(0);
  3587 + for (var t = 0; t < vt.streams.length; t++) {
  3588 + var r = vt.streams[t];
  3589 + r && vt.close(r)
  3590 + }
  3591 + },
  3592 + getMode: function (e, t) {
  3593 + var r = 0;
  3594 + return e && (r |= 365), t && (r |= 146), r
  3595 + },
  3596 + findObject: function (e, t) {
  3597 + var r = vt.analyzePath(e, t);
  3598 + return r.exists ? r.object : null
  3599 + },
  3600 + analyzePath: function (e, t) {
  3601 + try {
  3602 + e = (n = vt.lookupPath(e, {follow: !t})).path
  3603 + } catch (e) {
  3604 + }
  3605 + var r = {
  3606 + isRoot: !1,
  3607 + exists: !1,
  3608 + error: 0,
  3609 + name: null,
  3610 + path: null,
  3611 + object: null,
  3612 + parentExists: !1,
  3613 + parentPath: null,
  3614 + parentObject: null
  3615 + };
  3616 + try {
  3617 + var n = vt.lookupPath(e, {parent: !0});
  3618 + r.parentExists = !0, r.parentPath = n.path, r.parentObject = n.node, r.name = ht.basename(e), n = vt.lookupPath(e, {follow: !t}), r.exists = !0, r.path = n.path, r.object = n.node, r.name = n.node.name, r.isRoot = "/" === n.path
  3619 + } catch (e) {
  3620 + r.error = e.errno
  3621 + }
  3622 + return r
  3623 + },
  3624 + createPath: function (e, t, r, n) {
  3625 + e = "string" == typeof e ? e : vt.getPath(e);
  3626 + for (var o = t.split("/").reverse(); o.length;) {
  3627 + var a = o.pop();
  3628 + if (a) {
  3629 + var i = ht.join2(e, a);
  3630 + try {
  3631 + vt.mkdir(i)
  3632 + } catch (e) {
  3633 + }
  3634 + e = i
  3635 + }
  3636 + }
  3637 + return i
  3638 + },
  3639 + createFile: function (e, t, r, n, o) {
  3640 + var a = ht.join2("string" == typeof e ? e : vt.getPath(e), t), i = vt.getMode(n, o);
  3641 + return vt.create(a, i)
  3642 + },
  3643 + createDataFile: function (e, t, r, n, o, a) {
  3644 + var i = t ? ht.join2("string" == typeof e ? e : vt.getPath(e), t) : e, s = vt.getMode(n, o),
  3645 + u = vt.create(i, s);
  3646 + if (r) {
  3647 + if ("string" == typeof r) {
  3648 + for (var c = new Array(r.length), l = 0, d = r.length; l < d; ++l) c[l] = r.charCodeAt(l);
  3649 + r = c
  3650 + }
  3651 + vt.chmod(u, 146 | s);
  3652 + var f = vt.open(u, 577);
  3653 + vt.write(f, r, 0, r.length, 0, a), vt.close(f), vt.chmod(u, s)
  3654 + }
  3655 + return u
  3656 + },
  3657 + createDevice: function (e, t, r, n) {
  3658 + var o = ht.join2("string" == typeof e ? e : vt.getPath(e), t), a = vt.getMode(!!r, !!n);
  3659 + vt.createDevice.major || (vt.createDevice.major = 64);
  3660 + var i = vt.makedev(vt.createDevice.major++, 0);
  3661 + return vt.registerDevice(i, {
  3662 + open: function (e) {
  3663 + e.seekable = !1
  3664 + }, close: function (e) {
  3665 + n && n.buffer && n.buffer.length && n(10)
  3666 + }, read: function (e, t, n, o, a) {
  3667 + for (var i = 0, s = 0; s < o; s++) {
  3668 + var u;
  3669 + try {
  3670 + u = r()
  3671 + } catch (e) {
  3672 + throw new vt.ErrnoError(29)
  3673 + }
  3674 + if (void 0 === u && 0 === i) throw new vt.ErrnoError(6);
  3675 + if (null == u) break;
  3676 + i++, t[n + s] = u
  3677 + }
  3678 + return i && (e.node.timestamp = Date.now()), i
  3679 + }, write: function (e, t, r, o, a) {
  3680 + for (var i = 0; i < o; i++) try {
  3681 + n(t[r + i])
  3682 + } catch (e) {
  3683 + throw new vt.ErrnoError(29)
  3684 + }
  3685 + return o && (e.node.timestamp = Date.now()), i
  3686 + }
  3687 + }), vt.mkdev(o, a, i)
  3688 + },
  3689 + forceLoadFile: function (e) {
  3690 + if (e.isDevice || e.isFolder || e.link || e.contents) return !0;
  3691 + if ("undefined" != typeof XMLHttpRequest) throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
  3692 + if (!Pe) throw new Error("Cannot load without read() or XMLHttpRequest.");
  3693 + try {
  3694 + e.contents = ga(Pe(e.url), !0), e.usedBytes = e.contents.length
  3695 + } catch (e) {
  3696 + throw new vt.ErrnoError(29)
  3697 + }
  3698 + },
  3699 + createLazyFile: function (e, t, r, n, o) {
  3700 + function a() {
  3701 + this.lengthKnown = !1, this.chunks = []
  3702 + }
  3703 +
  3704 + if (a.prototype.get = function (e) {
  3705 + if (!(e > this.length - 1 || e < 0)) {
  3706 + var t = e % this.chunkSize, r = e / this.chunkSize | 0;
  3707 + return this.getter(r)[t]
  3708 + }
  3709 + }, a.prototype.setDataGetter = function (e) {
  3710 + this.getter = e
  3711 + }, a.prototype.cacheLength = function () {
  3712 + var e = new XMLHttpRequest;
  3713 + if (e.open("HEAD", r, !1), e.send(null), !(e.status >= 200 && e.status < 300 || 304 === e.status)) throw new Error("Couldn't load " + r + ". Status: " + e.status);
  3714 + var t, n = Number(e.getResponseHeader("Content-length")),
  3715 + o = (t = e.getResponseHeader("Accept-Ranges")) && "bytes" === t,
  3716 + a = (t = e.getResponseHeader("Content-Encoding")) && "gzip" === t, i = 1048576;
  3717 + o || (i = n);
  3718 + var s = this;
  3719 + s.setDataGetter((function (e) {
  3720 + var t = e * i, o = (e + 1) * i - 1;
  3721 + if (o = Math.min(o, n - 1), void 0 === s.chunks[e] && (s.chunks[e] = function (e, t) {
  3722 + if (e > t) throw new Error("invalid range (" + e + ", " + t + ") or no bytes requested!");
  3723 + if (t > n - 1) throw new Error("only " + n + " bytes available! programmer error!");
  3724 + var o = new XMLHttpRequest;
  3725 + if (o.open("GET", r, !1), n !== i && o.setRequestHeader("Range", "bytes=" + e + "-" + t), "undefined" != typeof Uint8Array && (o.responseType = "arraybuffer"), o.overrideMimeType && o.overrideMimeType("text/plain; charset=x-user-defined"), o.send(null), !(o.status >= 200 && o.status < 300 || 304 === o.status)) throw new Error("Couldn't load " + r + ". Status: " + o.status);
  3726 + return void 0 !== o.response ? new Uint8Array(o.response || []) : ga(o.responseText || "", !0)
  3727 + }(t, o)), void 0 === s.chunks[e]) throw new Error("doXHR failed!");
  3728 + return s.chunks[e]
  3729 + })), !a && n || (i = n = 1, n = this.getter(0).length, i = n, Be("LazyFiles on gzip forces download of the whole file when length is accessed")), this._length = n, this._chunkSize = i, this.lengthKnown = !0
  3730 + }, "undefined" != typeof XMLHttpRequest) {
  3731 + if (!De) throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";
  3732 + var i = new a;
  3733 + Object.defineProperties(i, {
  3734 + length: {
  3735 + get: function () {
  3736 + return this.lengthKnown || this.cacheLength(), this._length
  3737 + }
  3738 + }, chunkSize: {
  3739 + get: function () {
  3740 + return this.lengthKnown || this.cacheLength(), this._chunkSize
  3741 + }
  3742 + }
  3743 + });
  3744 + var s = {isDevice: !1, contents: i}
  3745 + } else s = {isDevice: !1, url: r};
  3746 + var u = vt.createFile(e, t, s, n, o);
  3747 + s.contents ? u.contents = s.contents : s.url && (u.contents = null, u.url = s.url), Object.defineProperties(u, {
  3748 + usedBytes: {
  3749 + get: function () {
  3750 + return this.contents.length
  3751 + }
  3752 + }
  3753 + });
  3754 + var c = {};
  3755 + return Object.keys(u.stream_ops).forEach((function (e) {
  3756 + var t = u.stream_ops[e];
  3757 + c[e] = function () {
  3758 + return vt.forceLoadFile(u), t.apply(null, arguments)
  3759 + }
  3760 + })), c.read = function (e, t, r, n, o) {
  3761 + vt.forceLoadFile(u);
  3762 + var a = e.node.contents;
  3763 + if (o >= a.length) return 0;
  3764 + var i = Math.min(a.length - o, n);
  3765 + if (a.slice) for (var s = 0; s < i; s++) t[r + s] = a[o + s]; else for (s = 0; s < i; s++) t[r + s] = a.get(o + s);
  3766 + return i
  3767 + }, u.stream_ops = c, u
  3768 + },
  3769 + createPreloadedFile: function (e, t, r, n, o, a, i, s, u, c) {
  3770 + Browser.init();
  3771 + var l = t ? mt.resolve(ht.join2(e, t)) : e;
  3772 +
  3773 + function d(r) {
  3774 + function d(r) {
  3775 + c && c(), s || vt.createDataFile(e, t, r, n, o, u), a && a(), Wr()
  3776 + }
  3777 +
  3778 + var f = !1;
  3779 + Ee.preloadPlugins.forEach((function (e) {
  3780 + f || e.canHandle(l) && (e.handle(r, l, d, (function () {
  3781 + i && i(), Wr()
  3782 + })), f = !0)
  3783 + })), f || d(r)
  3784 + }
  3785 +
  3786 + zr(), "string" == typeof r ? Browser.asyncLoad(r, (function (e) {
  3787 + d(e)
  3788 + }), i) : d(r)
  3789 + },
  3790 + indexedDB: function () {
  3791 + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB
  3792 + },
  3793 + DB_NAME: function () {
  3794 + return "EM_FS_" + window.location.pathname
  3795 + },
  3796 + DB_VERSION: 20,
  3797 + DB_STORE_NAME: "FILE_DATA",
  3798 + saveFilesToDB: function (e, t, r) {
  3799 + t = t || function () {
  3800 + }, r = r || function () {
  3801 + };
  3802 + var n = vt.indexedDB();
  3803 + try {
  3804 + var o = n.open(vt.DB_NAME(), vt.DB_VERSION)
  3805 + } catch (e) {
  3806 + return r(e)
  3807 + }
  3808 + o.onupgradeneeded = function () {
  3809 + Be("creating db"), o.result.createObjectStore(vt.DB_STORE_NAME)
  3810 + }, o.onsuccess = function () {
  3811 + var n = o.result.transaction([vt.DB_STORE_NAME], "readwrite"), a = n.objectStore(vt.DB_STORE_NAME), i = 0,
  3812 + s = 0, u = e.length;
  3813 +
  3814 + function c() {
  3815 + 0 == s ? t() : r()
  3816 + }
  3817 +
  3818 + e.forEach((function (e) {
  3819 + var t = a.put(vt.analyzePath(e).object.contents, e);
  3820 + t.onsuccess = function () {
  3821 + ++i + s == u && c()
  3822 + }, t.onerror = function () {
  3823 + s++, i + s == u && c()
  3824 + }
  3825 + })), n.onerror = r
  3826 + }, o.onerror = r
  3827 + },
  3828 + loadFilesFromDB: function (e, t, r) {
  3829 + t = t || function () {
  3830 + }, r = r || function () {
  3831 + };
  3832 + var n = vt.indexedDB();
  3833 + try {
  3834 + var o = n.open(vt.DB_NAME(), vt.DB_VERSION)
  3835 + } catch (e) {
  3836 + return r(e)
  3837 + }
  3838 + o.onupgradeneeded = r, o.onsuccess = function () {
  3839 + var n = o.result;
  3840 + try {
  3841 + var a = n.transaction([vt.DB_STORE_NAME], "readonly")
  3842 + } catch (e) {
  3843 + return void r(e)
  3844 + }
  3845 + var i = a.objectStore(vt.DB_STORE_NAME), s = 0, u = 0, c = e.length;
  3846 +
  3847 + function l() {
  3848 + 0 == u ? t() : r()
  3849 + }
  3850 +
  3851 + e.forEach((function (e) {
  3852 + var t = i.get(e);
  3853 + t.onsuccess = function () {
  3854 + vt.analyzePath(e).exists && vt.unlink(e), vt.createDataFile(ht.dirname(e), ht.basename(e), t.result, !0, !0, !0), ++s + u == c && l()
  3855 + }, t.onerror = function () {
  3856 + u++, s + u == c && l()
  3857 + }
  3858 + })), a.onerror = r
  3859 + }, o.onerror = r
  3860 + }
  3861 + }, Et = {
  3862 + mappings: {}, DEFAULT_POLLMASK: 5, umask: 511, calculateAt: function (e, t, r) {
  3863 + if ("/" === t[0]) return t;
  3864 + var n;
  3865 + if (-100 === e) n = vt.cwd(); else {
  3866 + var o = vt.getStream(e);
  3867 + if (!o) throw new vt.ErrnoError(8);
  3868 + n = o.path
  3869 + }
  3870 + if (0 == t.length) {
  3871 + if (!r) throw new vt.ErrnoError(44);
  3872 + return n
  3873 + }
  3874 + return ht.join2(n, t)
  3875 + }, doStat: function (e, t, r) {
  3876 + try {
  3877 + var n = e(t)
  3878 + } catch (e) {
  3879 + if (e && e.node && ht.normalize(t) !== ht.normalize(vt.getPath(e.node))) return -54;
  3880 + throw e
  3881 + }
  3882 + return $e[r >> 2] = n.dev, $e[r + 4 >> 2] = 0, $e[r + 8 >> 2] = n.ino, $e[r + 12 >> 2] = n.mode, $e[r + 16 >> 2] = n.nlink, $e[r + 20 >> 2] = n.uid, $e[r + 24 >> 2] = n.gid, $e[r + 28 >> 2] = n.rdev, $e[r + 32 >> 2] = 0, ct = [n.size >>> 0, (ut = n.size, +Math.abs(ut) >= 1 ? ut > 0 ? (0 | Math.min(+Math.floor(ut / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ut - +(~~ut >>> 0)) / 4294967296) >>> 0 : 0)], $e[r + 40 >> 2] = ct[0], $e[r + 44 >> 2] = ct[1], $e[r + 48 >> 2] = 4096, $e[r + 52 >> 2] = n.blocks, $e[r + 56 >> 2] = n.atime.getTime() / 1e3 | 0, $e[r + 60 >> 2] = 0, $e[r + 64 >> 2] = n.mtime.getTime() / 1e3 | 0, $e[r + 68 >> 2] = 0, $e[r + 72 >> 2] = n.ctime.getTime() / 1e3 | 0, $e[r + 76 >> 2] = 0, ct = [n.ino >>> 0, (ut = n.ino, +Math.abs(ut) >= 1 ? ut > 0 ? (0 | Math.min(+Math.floor(ut / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ut - +(~~ut >>> 0)) / 4294967296) >>> 0 : 0)], $e[r + 80 >> 2] = ct[0], $e[r + 84 >> 2] = ct[1], 0
  3883 + }, doMsync: function (e, t, r, n, o) {
  3884 + var a = We.slice(e, e + r);
  3885 + vt.msync(t, a, o, r, n)
  3886 + }, doMkdir: function (e, t) {
  3887 + return "/" === (e = ht.normalize(e))[e.length - 1] && (e = e.substr(0, e.length - 1)), vt.mkdir(e, t, 0), 0
  3888 + }, doMknod: function (e, t, r) {
  3889 + switch (61440 & t) {
  3890 + case 32768:
  3891 + case 8192:
  3892 + case 24576:
  3893 + case 4096:
  3894 + case 49152:
  3895 + break;
  3896 + default:
  3897 + return -28
  3898 + }
  3899 + return vt.mknod(e, t, r), 0
  3900 + }, doReadlink: function (e, t, r) {
  3901 + if (r <= 0) return -28;
  3902 + var n = vt.readlink(e), o = Math.min(r, Rr(n)), a = ze[t + o];
  3903 + return Mr(n, t, r + 1), ze[t + o] = a, o
  3904 + }, doAccess: function (e, t) {
  3905 + if (-8 & t) return -28;
  3906 + var r;
  3907 + if (!(r = vt.lookupPath(e, {follow: !0}).node)) return -44;
  3908 + var n = "";
  3909 + return 4 & t && (n += "r"), 2 & t && (n += "w"), 1 & t && (n += "x"), n && vt.nodePermissions(r, n) ? -2 : 0
  3910 + }, doDup: function (e, t, r) {
  3911 + var n = vt.getStream(r);
  3912 + return n && vt.close(n), vt.open(e, t, 0, r, r).fd
  3913 + }, doReadv: function (e, t, r, n) {
  3914 + for (var o = 0, a = 0; a < r; a++) {
  3915 + var i = $e[t + 8 * a >> 2], s = $e[t + (8 * a + 4) >> 2], u = vt.read(e, ze, i, s, n);
  3916 + if (u < 0) return -1;
  3917 + if (o += u, u < s) break
  3918 + }
  3919 + return o
  3920 + }, doWritev: function (e, t, r, n) {
  3921 + for (var o = 0, a = 0; a < r; a++) {
  3922 + var i = $e[t + 8 * a >> 2], s = $e[t + (8 * a + 4) >> 2], u = vt.write(e, ze, i, s, n);
  3923 + if (u < 0) return -1;
  3924 + o += u
  3925 + }
  3926 + return o
  3927 + }, varargs: void 0, get: function () {
  3928 + return Et.varargs += 4, $e[Et.varargs - 4 >> 2]
  3929 + }, getStr: function (e) {
  3930 + return xr(e)
  3931 + }, getStreamFromFD: function (e) {
  3932 + var t = vt.getStream(e);
  3933 + if (!t) throw new vt.ErrnoError(8);
  3934 + return t
  3935 + }, get64: function (e, t) {
  3936 + return e
  3937 + }
  3938 + }, yt = void 0, wt = {}, _t = {}, bt = {}, kt = 48, Tt = 57, Dt = void 0, St = void 0, Ct = !1, Ot = void 0, Pt = [], xt = {}, Bt = {}, Mt = void 0, Rt = [], Lt = [{}, {value: void 0}, {value: null}, {value: !0}, {value: !1}], It = {}, Ft = [], Ut = [], Nt = [], jt = {
  3939 + inEventHandler: 0, removeAllEventListeners: function () {
  3940 + for (var e = jt.eventHandlers.length - 1; e >= 0; --e) jt._removeHandler(e);
  3941 + jt.eventHandlers = [], jt.deferredCalls = []
  3942 + }, registerRemoveEventListeners: function () {
  3943 + jt.removeEventListenersRegistered || (tt.push(jt.removeAllEventListeners), jt.removeEventListenersRegistered = !0)
  3944 + }, deferredCalls: [], deferCall: function (e, t, r) {
  3945 + function n(e, t) {
  3946 + if (e.length != t.length) return !1;
  3947 + for (var r in e) if (e[r] != t[r]) return !1;
  3948 + return !0
  3949 + }
  3950 +
  3951 + for (var o in jt.deferredCalls) {
  3952 + var a = jt.deferredCalls[o];
  3953 + if (a.targetFunction == e && n(a.argsList, r)) return
  3954 + }
  3955 + jt.deferredCalls.push({targetFunction: e, precedence: t, argsList: r}), jt.deferredCalls.sort((function (e, t) {
  3956 + return e.precedence < t.precedence
  3957 + }))
  3958 + }, removeDeferredCalls: function (e) {
  3959 + for (var t = 0; t < jt.deferredCalls.length; ++t) jt.deferredCalls[t].targetFunction == e && (jt.deferredCalls.splice(t, 1), --t)
  3960 + }, canPerformEventHandlerRequests: function () {
  3961 + return jt.inEventHandler && jt.currentEventHandler.allowsDeferredCalls
  3962 + }, runDeferredCalls: function () {
  3963 + if (jt.canPerformEventHandlerRequests()) for (var e = 0; e < jt.deferredCalls.length; ++e) {
  3964 + var t = jt.deferredCalls[e];
  3965 + jt.deferredCalls.splice(e, 1), --e, t.targetFunction.apply(null, t.argsList)
  3966 + }
  3967 + }, eventHandlers: [], removeAllHandlersOnTarget: function (e, t) {
  3968 + for (var r = 0; r < jt.eventHandlers.length; ++r) jt.eventHandlers[r].target != e || t && t != jt.eventHandlers[r].eventTypeString || jt._removeHandler(r--)
  3969 + }, _removeHandler: function (e) {
  3970 + var t = jt.eventHandlers[e];
  3971 + t.target.removeEventListener(t.eventTypeString, t.eventListenerFunc, t.useCapture), jt.eventHandlers.splice(e, 1)
  3972 + }, registerOrRemoveHandler: function (e) {
  3973 + var t = function (t) {
  3974 + ++jt.inEventHandler, jt.currentEventHandler = e, jt.runDeferredCalls(), e.handlerFunc(t), jt.runDeferredCalls(), --jt.inEventHandler
  3975 + };
  3976 + if (e.callbackfunc) e.eventListenerFunc = t, e.target.addEventListener(e.eventTypeString, t, e.useCapture), jt.eventHandlers.push(e), jt.registerRemoveEventListeners(); else for (var r = 0; r < jt.eventHandlers.length; ++r) jt.eventHandlers[r].target == e.target && jt.eventHandlers[r].eventTypeString == e.eventTypeString && jt._removeHandler(r--)
  3977 + }, queueEventHandlerOnThread_iiii: function (e, t, r, n, o) {
  3978 + var a = gr(), i = Er(12);
  3979 + $e[i >> 2] = r, $e[i + 4 >> 2] = n, $e[i + 8 >> 2] = o, mr(0, e, 637534208, t, n, i), vr(a)
  3980 + }, getTargetThreadForEventCallback: function (e) {
  3981 + switch (e) {
  3982 + case 1:
  3983 + return 0;
  3984 + case 2:
  3985 + return ft.currentProxiedOperationCallerThread;
  3986 + default:
  3987 + return e
  3988 + }
  3989 + }, getNodeNameForTarget: function (e) {
  3990 + return e ? e == window ? "#window" : e == screen ? "#screen" : e && e.nodeName ? e.nodeName : "" : ""
  3991 + }, fullscreenEnabled: function () {
  3992 + return document.fullscreenEnabled || document.webkitFullscreenEnabled
  3993 + }
  3994 + }, Gt = [0, "undefined" != typeof document ? document : 0, "undefined" != typeof window ? window : 0], zt = {
  3995 + counter: 1,
  3996 + buffers: [],
  3997 + programs: [],
  3998 + framebuffers: [],
  3999 + renderbuffers: [],
  4000 + textures: [],
  4001 + uniforms: [],
  4002 + shaders: [],
  4003 + vaos: [],
  4004 + contexts: {},
  4005 + offscreenCanvases: {},
  4006 + timerQueriesEXT: [],
  4007 + programInfos: {},
  4008 + stringCache: {},
  4009 + unpackAlignment: 4,
  4010 + recordError: function (e) {
  4011 + zt.lastError || (zt.lastError = e)
  4012 + },
  4013 + getNewId: function (e) {
  4014 + for (var t = zt.counter++, r = e.length; r < t; r++) e[r] = null;
  4015 + return t
  4016 + },
  4017 + getSource: function (e, t, r, n) {
  4018 + for (var o = "", a = 0; a < t; ++a) {
  4019 + var i = n ? $e[n + 4 * a >> 2] : -1;
  4020 + o += xr($e[r + 4 * a >> 2], i < 0 ? void 0 : i)
  4021 + }
  4022 + return o
  4023 + },
  4024 + createContext: function (e, t) {
  4025 + var r = e.getContext("webgl", t);
  4026 + return r ? zt.registerContext(r, t) : 0
  4027 + },
  4028 + registerContext: function (e, t) {
  4029 + var r = Jt(8);
  4030 + $e[r + 4 >> 2] = sr();
  4031 + var n = {handle: r, attributes: t, version: t.majorVersion, GLctx: e};
  4032 + return e.canvas && (e.canvas.GLctxObject = n), zt.contexts[r] = n, (void 0 === t.enableExtensionsByDefault || t.enableExtensionsByDefault) && zt.initExtensions(n), r
  4033 + },
  4034 + makeContextCurrent: function (e) {
  4035 + return zt.currentContext = zt.contexts[e], Ee.ctx = Qt = zt.currentContext && zt.currentContext.GLctx, !(e && !Qt)
  4036 + },
  4037 + getContext: function (e) {
  4038 + return zt.contexts[e]
  4039 + },
  4040 + deleteContext: function (e) {
  4041 + zt.currentContext === zt.contexts[e] && (zt.currentContext = null), "object" == typeof jt && jt.removeAllHandlersOnTarget(zt.contexts[e].GLctx.canvas), zt.contexts[e] && zt.contexts[e].GLctx.canvas && (zt.contexts[e].GLctx.canvas.GLctxObject = void 0), Kt(zt.contexts[e].handle), zt.contexts[e] = null
  4042 + },
  4043 + initExtensions: function (e) {
  4044 + if (e || (e = zt.currentContext), !e.initExtensionsDone) {
  4045 + e.initExtensionsDone = !0;
  4046 + var t, r = e.GLctx;
  4047 + !function (e) {
  4048 + var t = e.getExtension("ANGLE_instanced_arrays");
  4049 + if (t) e.vertexAttribDivisor = function (e, r) {
  4050 + t.vertexAttribDivisorANGLE(e, r)
  4051 + }, e.drawArraysInstanced = function (e, r, n, o) {
  4052 + t.drawArraysInstancedANGLE(e, r, n, o)
  4053 + }, e.drawElementsInstanced = function (e, r, n, o, a) {
  4054 + t.drawElementsInstancedANGLE(e, r, n, o, a)
  4055 + }
  4056 + }(r), function (e) {
  4057 + var t = e.getExtension("OES_vertex_array_object");
  4058 + if (t) e.createVertexArray = function () {
  4059 + return t.createVertexArrayOES()
  4060 + }, e.deleteVertexArray = function (e) {
  4061 + t.deleteVertexArrayOES(e)
  4062 + }, e.bindVertexArray = function (e) {
  4063 + t.bindVertexArrayOES(e)
  4064 + }, e.isVertexArray = function (e) {
  4065 + return t.isVertexArrayOES(e)
  4066 + }
  4067 + }(r), function (e) {
  4068 + var t = e.getExtension("WEBGL_draw_buffers");
  4069 + if (t) e.drawBuffers = function (e, r) {
  4070 + t.drawBuffersWEBGL(e, r)
  4071 + }
  4072 + }(r), r.disjointTimerQueryExt = r.getExtension("EXT_disjoint_timer_query"), (t = r).multiDrawWebgl = t.getExtension("WEBGL_multi_draw"), (r.getSupportedExtensions() || []).forEach((function (e) {
  4073 + e.indexOf("lose_context") < 0 && e.indexOf("debug") < 0 && r.getExtension(e)
  4074 + }))
  4075 + }
  4076 + },
  4077 + populateUniformTable: function (e) {
  4078 + for (var t = zt.programs[e], r = zt.programInfos[e] = {
  4079 + uniforms: {},
  4080 + maxUniformLength: 0,
  4081 + maxAttributeLength: -1,
  4082 + maxUniformBlockNameLength: -1
  4083 + }, n = r.uniforms, o = Qt.getProgramParameter(t, 35718), a = 0; a < o; ++a) {
  4084 + var i = Qt.getActiveUniform(t, a), s = i.name;
  4085 + r.maxUniformLength = Math.max(r.maxUniformLength, s.length + 1), "]" == s.slice(-1) && (s = s.slice(0, s.lastIndexOf("[")));
  4086 + var u = Qt.getUniformLocation(t, s);
  4087 + if (u) {
  4088 + var c = zt.getNewId(zt.uniforms);
  4089 + n[s] = [i.size, c], zt.uniforms[c] = u;
  4090 + for (var l = 1; l < i.size; ++l) {
  4091 + var d = s + "[" + l + "]";
  4092 + u = Qt.getUniformLocation(t, d), c = zt.getNewId(zt.uniforms), zt.uniforms[c] = u
  4093 + }
  4094 + }
  4095 + }
  4096 + }
  4097 + }, Wt = ["default", "low-power", "high-performance"], Yt = {}, Se || ft.initMainThreadBlock(), Ht = function (e, t, r, n) {
  4098 + e || (e = this), this.parent = e, this.mount = e.mount, this.mounted = null, this.id = vt.nextInode++, this.name = t, this.mode = r, this.node_ops = {}, this.stream_ops = {}, this.rdev = n
  4099 + }, $t = 365, Vt = 146, Object.defineProperties(Ht.prototype, {
  4100 + read: {
  4101 + get: function () {
  4102 + return (this.mode & $t) === $t
  4103 + }, set: function (e) {
  4104 + e ? this.mode |= $t : this.mode &= -366
  4105 + }
  4106 + }, write: {
  4107 + get: function () {
  4108 + return (this.mode & Vt) === Vt
  4109 + }, set: function (e) {
  4110 + e ? this.mode |= Vt : this.mode &= -147
  4111 + }
  4112 + }, isFolder: {
  4113 + get: function () {
  4114 + return vt.isDir(this.mode)
  4115 + }
  4116 + }, isDevice: {
  4117 + get: function () {
  4118 + return vt.isChrdev(this.mode)
  4119 + }
  4120 + }
  4121 + }), vt.FSNode = Ht, vt.staticInit(), function () {
  4122 + for (var e = new Array(256), t = 0; t < 256; ++t) e[t] = String.fromCharCode(t);
  4123 + yt = e
  4124 + }(), Dt = Ee.BindingError = fn(Error, "BindingError"), St = Ee.InternalError = fn(Error, "InternalError"), Cn.prototype.isAliasOf = vn, Cn.prototype.clone = bn, Cn.prototype.delete = kn, Cn.prototype.isDeleted = Tn, Cn.prototype.deleteLater = Sn, $n.prototype.getPointee = In, $n.prototype.destructor = Fn, $n.prototype.argPackAdvance = 8, $n.prototype.readValueFromPointer = Ln, $n.prototype.deleteObject = Un, $n.prototype.fromWireType = Hn, Ee.getInheritedInstanceCount = jn, Ee.getLiveInheritedInstances = Gn, Ee.flushPendingDeletes = Dn, Ee.setDelayFunction = zn, Mt = Ee.UnboundTypeError = fn(Error, "UnboundTypeError"), Ee.count_emval_handles = io, Ee.get_first_emval = so, Xt = [null, an, sn, Xo, ea, ta, ra, na, oa, aa, ia, ua, Aa], qt = {
  4125 + e: rn,
  4126 + Q: an,
  4127 + P: sn,
  4128 + V: gn,
  4129 + y: Zn,
  4130 + q: eo,
  4131 + m: ro,
  4132 + $: oo,
  4133 + U: co,
  4134 + w: po,
  4135 + d: mo,
  4136 + c: Ao,
  4137 + x: go,
  4138 + o: vo,
  4139 + W: Eo,
  4140 + I: yo,
  4141 + J: bo,
  4142 + i: ko,
  4143 + z: ao,
  4144 + h: To,
  4145 + _: Do,
  4146 + C: So,
  4147 + R: Co,
  4148 + b: Oo,
  4149 + Y: Po,
  4150 + s: xo,
  4151 + M: Bo,
  4152 + t: Mo,
  4153 + g: Ro,
  4154 + f: qr,
  4155 + k: pt,
  4156 + j: jo,
  4157 + D: Go,
  4158 + F: Wo,
  4159 + E: Yo,
  4160 + G: qo,
  4161 + r: Zo,
  4162 + H: Ko,
  4163 + N: ea,
  4164 + O: ta,
  4165 + v: ra,
  4166 + S: na,
  4167 + T: oa,
  4168 + A: aa,
  4169 + u: ia,
  4170 + X: sa,
  4171 + B: Qr,
  4172 + a: Ue,
  4173 + K: ca,
  4174 + L: la,
  4175 + l: fa,
  4176 + p: ha,
  4177 + n: ma,
  4178 + Z: Aa
  4179 + }, Vr(), Zt = Ee.___wasm_call_ctors = function () {
  4180 + return (Zt = Ee.___wasm_call_ctors = Ee.asm.aa).apply(null, arguments)
  4181 + }, Kt = Ee._free = function () {
  4182 + return (Kt = Ee._free = Ee.asm.ba).apply(null, arguments)
  4183 + }, Jt = Ee._malloc = function () {
  4184 + return (Jt = Ee._malloc = Ee.asm.ca).apply(null, arguments)
  4185 + }, er = Ee._strlen = function () {
  4186 + return (er = Ee._strlen = Ee.asm.ea).apply(null, arguments)
  4187 + },tr = Ee.___errno_location = function () {
  4188 + return (tr = Ee.___errno_location = Ee.asm.fa).apply(null, arguments)
  4189 + },rr = Ee.___getTypeName = function () {
  4190 + return (rr = Ee.___getTypeName = Ee.asm.ga).apply(null, arguments)
  4191 + },Ee.___embind_register_native_and_builtin_types = function () {
  4192 + return (Ee.___embind_register_native_and_builtin_types = Ee.asm.ha).apply(null, arguments)
  4193 + },nr = Ee._emscripten_get_global_libc = function () {
  4194 + return (nr = Ee._emscripten_get_global_libc = Ee.asm.ia).apply(null, arguments)
  4195 + },or = Ee.__get_tzname = function () {
  4196 + return (or = Ee.__get_tzname = Ee.asm.ja).apply(null, arguments)
  4197 + },ar = Ee.__get_daylight = function () {
  4198 + return (ar = Ee.__get_daylight = Ee.asm.ka).apply(null, arguments)
  4199 + },ir = Ee.__get_timezone = function () {
  4200 + return (ir = Ee.__get_timezone = Ee.asm.la).apply(null, arguments)
  4201 + },sr = Ee._pthread_self = function () {
  4202 + return (sr = Ee._pthread_self = Ee.asm.ma).apply(null, arguments)
  4203 + },ur = Ee._emscripten_main_browser_thread_id = function () {
  4204 + return (ur = Ee._emscripten_main_browser_thread_id = Ee.asm.na).apply(null, arguments)
  4205 + },cr = Ee.___pthread_tsd_run_dtors = function () {
  4206 + return (cr = Ee.___pthread_tsd_run_dtors = Ee.asm.oa).apply(null, arguments)
  4207 + },lr = Ee._emscripten_main_thread_process_queued_calls = function () {
  4208 + return (lr = Ee._emscripten_main_thread_process_queued_calls = Ee.asm.pa).apply(null, arguments)
  4209 + },Ee._emscripten_current_thread_process_queued_calls = function () {
  4210 + return (Ee._emscripten_current_thread_process_queued_calls = Ee.asm.qa).apply(null, arguments)
  4211 + },dr = Ee._emscripten_register_main_browser_thread_id = function () {
  4212 + return (dr = Ee._emscripten_register_main_browser_thread_id = Ee.asm.ra).apply(null, arguments)
  4213 + },fr = Ee.__emscripten_do_dispatch_to_thread = function () {
  4214 + return (fr = Ee.__emscripten_do_dispatch_to_thread = Ee.asm.sa).apply(null, arguments)
  4215 + },pr = Ee._emscripten_sync_run_in_main_thread_4 = function () {
  4216 + return (pr = Ee._emscripten_sync_run_in_main_thread_4 = Ee.asm.ta).apply(null, arguments)
  4217 + },hr = Ee._emscripten_run_in_main_runtime_thread_js = function () {
  4218 + return (hr = Ee._emscripten_run_in_main_runtime_thread_js = Ee.asm.ua).apply(null, arguments)
  4219 + },mr = Ee.__emscripten_call_on_thread = function () {
  4220 + return (mr = Ee.__emscripten_call_on_thread = Ee.asm.va).apply(null, arguments)
  4221 + },Ee._emscripten_tls_init = function () {
  4222 + return (Ee._emscripten_tls_init = Ee.asm.wa).apply(null, arguments)
  4223 + },Ar = Ee.__emscripten_thread_init = function () {
  4224 + return (Ar = Ee.__emscripten_thread_init = Ee.asm.xa).apply(null, arguments)
  4225 + },gr = Ee.stackSave = function () {
  4226 + return (gr = Ee.stackSave = Ee.asm.ya).apply(null, arguments)
  4227 + },vr = Ee.stackRestore = function () {
  4228 + return (vr = Ee.stackRestore = Ee.asm.za).apply(null, arguments)
  4229 + },Er = Ee.stackAlloc = function () {
  4230 + return (Er = Ee.stackAlloc = Ee.asm.Aa).apply(null, arguments)
  4231 + },yr = Ee._emscripten_stack_set_limits = function () {
  4232 + return (yr = Ee._emscripten_stack_set_limits = Ee.asm.Ba).apply(null, arguments)
  4233 + },wr = Ee._memalign = function () {
  4234 + return (wr = Ee._memalign = Ee.asm.Ca).apply(null, arguments)
  4235 + },Ee.dynCall_ijiii = function () {
  4236 + return (Ee.dynCall_ijiii = Ee.asm.Da).apply(null, arguments)
  4237 + },Ee.dynCall_viiijj = function () {
  4238 + return (Ee.dynCall_viiijj = Ee.asm.Ea).apply(null, arguments)
  4239 + },Ee.dynCall_jij = function () {
  4240 + return (Ee.dynCall_jij = Ee.asm.Fa).apply(null, arguments)
  4241 + },Ee.dynCall_jii = function () {
  4242 + return (Ee.dynCall_jii = Ee.asm.Ga).apply(null, arguments)
  4243 + },Ee.dynCall_jiji = function () {
  4244 + return (Ee.dynCall_jiji = Ee.asm.Ha).apply(null, arguments)
  4245 + },Ee._ff_h264_cabac_tables = 77706,_r = Ee.__emscripten_allow_main_runtime_queued_calls = 241152,br = Ee.__emscripten_main_thread_futex = 1178e3,Ee.PThread = ft,Ee.PThread = ft,Ee.wasmMemory = Ue,Ee.ExitStatus = va,at = function e() {
  4246 + kr || Ea(), kr || (at = e)
  4247 + },Ee.run = Ea,Ee.preInit) for ("function" == typeof Ee.preInit && (Ee.preInit = [Ee.preInit]); Ee.preInit.length > 0;) Ee.preInit.pop()();
  4248 + Se && (Fe = !1, ft.initWorker()), Ea(), Tr = e(Ee)
  4249 + }
  4250 +
  4251 + var _a = !1;
  4252 +
  4253 + function ba(e) {
  4254 + let t = e.next(), r = null;
  4255 + return n => {
  4256 + var o = new Uint8Array(n);
  4257 + if (r) {
  4258 + var a = new Uint8Array(r.length + o.length);
  4259 + a.set(r), a.set(o, r.length), o = a, r = null
  4260 + }
  4261 + for (; o.length >= t.value;) {
  4262 + var i = o.slice(t.value);
  4263 + t = e.next(o.slice(0, t.value)), o = i
  4264 + }
  4265 + o.length > 0 && (r = o)
  4266 + }
  4267 + }
  4268 +
  4269 + function ka() {
  4270 + ({}), Dr || (Dr = !0, wa()), a(), (() => {
  4271 + try {
  4272 + if ("object" == typeof WebAssembly && "function" == typeof WebAssembly.instantiate) {
  4273 + const e = new WebAssembly.Module(Uint8Array.of(0, 97, 115, 109, 1, 0, 0, 0));
  4274 + if (e instanceof WebAssembly.Module) return new WebAssembly.Instance(e) instanceof WebAssembly.Instance
  4275 + }
  4276 + } catch (e) {
  4277 + }
  4278 + return !1
  4279 + })(), Date.now || (Date.now = function () {
  4280 + return (new Date).getTime()
  4281 + }), Tr.print = function (e) {
  4282 + postMessage({cmd: "print", text: e})
  4283 + }, Tr.printErr = function (e) {
  4284 + postMessage({cmd: "printErr", text: e})
  4285 + }, Tr.postRun = function () {
  4286 + var e = [], t = {
  4287 + _firstCheckpoint: 0, _lastCheckpoint: 0, _intervalBytes: 0, _lastSecondBytes: 0, addBytes: function (e) {
  4288 + 0 === t._firstCheckpoint ? (t._firstCheckpoint = Date.now(), t._lastCheckpoint = t._firstCheckpoint, t._intervalBytes += e) : Date.now() - t._lastCheckpoint < 1e3 ? t._intervalBytes += e : (t._lastSecondBytes = t._intervalBytes, t._intervalBytes = e, t._lastCheckpoint = Date.now())
  4289 + }, reset: function () {
  4290 + t._firstCheckpoint = t._lastCheckpoint = 0, t._intervalBytes = 0, t._lastSecondBytes = 0
  4291 + }, getCurrentKBps: function () {
  4292 + t.addBytes(0);
  4293 + var e = (Date.now() - t._lastCheckpoint) / 1e3;
  4294 + return 0 == e && (e = 1), t._intervalBytes / e / 1024
  4295 + }, getLastSecondKBps: function () {
  4296 + return t.addBytes(0), 0 !== t._lastSecondBytes ? t._lastSecondBytes / 1024 : Date.now() - t._lastCheckpoint >= 500 ? t.getCurrentKBps() : 0
  4297 + }
  4298 + }, r = {
  4299 + opt: {}, initAudioPlanar: function (e, t) {
  4300 + postMessage({cmd: "initAudioPlanar", samplerate: t, channels: e});
  4301 + var r = [], n = [], o = 0;
  4302 + this.playAudioPlanar = function (t, a) {
  4303 + for (var i = a, s = [], u = 0, c = 0; c < 2; c++) {
  4304 + var l = Tr.HEAPU32[(t >> 2) + c] >> 2;
  4305 + s[c] = Tr.HEAPF32.subarray(l, l + i)
  4306 + }
  4307 + if (o) {
  4308 + if (!(i >= (a = 1024 - o))) return o += i, r[0] = Float32Array.of(...r[0], ...s[0]), void (2 == e && (r[1] = Float32Array.of(...r[1], ...s[1])));
  4309 + n[0] = Float32Array.of(...r[0], ...s[0].subarray(0, a)), 2 == e && (n[1] = Float32Array.of(...r[1], ...s[1].subarray(0, a))), postMessage({
  4310 + cmd: "playAudio",
  4311 + buffer: n
  4312 + }, n.map((e => e.buffer))), u = a, i -= a
  4313 + }
  4314 + for (o = i; o >= 1024; o -= 1024) n[0] = s[0].slice(u, u += 1024), 2 == e && (n[1] = s[1].slice(u - 1024, u)), postMessage({
  4315 + cmd: "playAudio",
  4316 + buffer: n
  4317 + }, n.map((e => e.buffer)));
  4318 + o && (r[0] = s[0].slice(u), 2 == e && (r[1] = s[1].slice(u)))
  4319 + }
  4320 + }, inputFlv: function* () {
  4321 + yield 9;
  4322 + for (var t = new ArrayBuffer(4), r = new Uint8Array(t), a = new Uint32Array(t); ;) {
  4323 + r[3] = 0;
  4324 + var i = yield 15, s = i[4];
  4325 + r[0] = i[7], r[1] = i[6], r[2] = i[5];
  4326 + var u = a[0];
  4327 + r[0] = i[10], r[1] = i[9], r[2] = i[8];
  4328 + var c = a[0];
  4329 + 16777215 === c && (r[3] = i[11], c = a[0]);
  4330 + var l = yield u;
  4331 + switch (s) {
  4332 + case 8:
  4333 + this.opt.hasAudio && e.push({ts: c, payload: l, decoder: n, type: 0});
  4334 + break;
  4335 + case 9:
  4336 + e.push({ts: c, payload: l, decoder: o, type: l[0] >> 4})
  4337 + }
  4338 + }
  4339 + }, play: function (r) {
  4340 + this.opt.debug && console.log("Jessibuca play", r), this.getDelay = function (e) {
  4341 + return e ? (this.firstTimestamp = e, this.startTimestamp = Date.now(), this.getDelay = function (e) {
  4342 + return this.delay = Date.now() - this.startTimestamp - (e - this.firstTimestamp), this.delay
  4343 + }, -1) : -1
  4344 + };
  4345 + var i = this.opt.vod ? () => {
  4346 + if (e.length) {
  4347 + var t = e[0];
  4348 + if (-1 === this.getDelay(t.ts)) e.shift(), this.ts = t.ts, t.decoder.decode(t.payload); else for (; e.length && (t = e[0], this.getDelay(t.ts) > this.videoBuffer);) e.shift(), this.ts = t.ts, t.decoder.decode(t.payload)
  4349 + }
  4350 + } : () => {
  4351 + if (e.length) if (this.dropping) 1 == (t = e.shift()).type ? (this.dropping = !1, this.ts = t.ts, t.decoder.decode(t.payload)) : 0 == t.type && (this.ts = t.ts, t.decoder.decode(t.payload)); else {
  4352 + var t = e[0];
  4353 + if (-1 === this.getDelay(t.ts)) e.shift(), this.ts = t.ts, t.decoder.decode(t.payload); else if (this.delay > this.videoBuffer + 1e3) this.dropping = !0; else for (; e.length && (t = e[0], this.getDelay(t.ts) > this.videoBuffer);) e.shift(), this.ts = t.ts, t.decoder.decode(t.payload)
  4354 + }
  4355 + };
  4356 + if (this.stopId = setInterval(i, 10), this.speedSamplerId = setInterval((() => {
  4357 + postMessage({cmd: "kBps", kBps: t.getLastSecondKBps()})
  4358 + }), 1e3), 0 == r.indexOf("http")) {
  4359 + this.flvMode = !0;
  4360 + var s = this, u = new AbortController;
  4361 + fetch(r, {signal: u.signal}).then((function (e) {
  4362 + var r = e.body.getReader(), n = s.inputFlv(), o = ba(n), a = function () {
  4363 + r.read().then((({done: e, value: r}) => {
  4364 + e ? n.return(null) : (t.addBytes(r.byteLength), o(r), a())
  4365 + })).catch((function (e) {
  4366 + n.return(null), s.opt.debug && console.error(e), -1 === e.toString().indexOf("The user aborted a request") && postMessage({
  4367 + cmd: "printErr",
  4368 + text: e.toString()
  4369 + })
  4370 + }))
  4371 + };
  4372 + a()
  4373 + })).catch((e => {
  4374 + postMessage({cmd: "printErr", text: e.message})
  4375 + })), this._close = function () {
  4376 + u.abort()
  4377 + }
  4378 + } else {
  4379 + if (this.flvMode = -1 != r.indexOf(".flv"), this.ws = new WebSocket(r), this.ws.binaryType = "arraybuffer", this.flvMode) {
  4380 + let e = this.inputFlv();
  4381 + var c = ba(e);
  4382 + this.ws.onmessage = e => {
  4383 + t.addBytes(e.data.byteLength), c(e.data)
  4384 + }, this.ws.onerror = t => {
  4385 + e.return(null), postMessage({cmd: "printErr", text: t.toString()})
  4386 + }
  4387 + } else this.ws.onmessage = r => {
  4388 + t.addBytes(r.data.byteLength);
  4389 + var a = new DataView(r.data);
  4390 + switch (a.getUint8(0)) {
  4391 + case 1:
  4392 + this.opt.hasAudio && e.push({
  4393 + ts: a.getUint32(1, !1),
  4394 + payload: new Uint8Array(r.data, 5),
  4395 + decoder: n,
  4396 + type: 0
  4397 + });
  4398 + break;
  4399 + case 2:
  4400 + e.push({
  4401 + ts: a.getUint32(1, !1),
  4402 + payload: new Uint8Array(r.data, 5),
  4403 + decoder: o,
  4404 + type: a.getUint8(5) >> 4
  4405 + })
  4406 + }
  4407 + }, this.ws.onerror = e => {
  4408 + postMessage({cmd: "printErr", text: e.toString()})
  4409 + };
  4410 + this._close = function () {
  4411 + this.ws.close(), this.ws = null
  4412 + }
  4413 + }
  4414 + this.setVideoSize = function (e, t) {
  4415 + postMessage({cmd: "initSize", w: e, h: t});
  4416 + var r = e * t, n = r >> 2;
  4417 + if (this.opt.forceNoOffscreen || "undefined" == typeof OffscreenCanvas) this.draw = function (e, t, o, a) {
  4418 + var i = [Tr.HEAPU8.subarray(t, t + r), Tr.HEAPU8.subarray(o, o + n), Tr.HEAPU8.subarray(a, a + n)].map((e => Uint8Array.from(e)));
  4419 + postMessage({
  4420 + cmd: "render",
  4421 + compositionTime: e,
  4422 + delay: this.delay,
  4423 + ts: this.ts,
  4424 + output: i
  4425 + }, i.map((e => e.buffer)))
  4426 + }; else {
  4427 + var o = new OffscreenCanvas(e, t), i = o.getContext("webgl"), s = a().default(i);
  4428 + this.draw = function (a, i, u, c) {
  4429 + s(e, t, Tr.HEAPU8.subarray(i, i + r), Tr.HEAPU8.subarray(u, u + n), Tr.HEAPU8.subarray(c, c + n));
  4430 + let l = o.transferToImageBitmap();
  4431 + postMessage({cmd: "render", compositionTime: a, delay: this.delay, ts: this.ts, buffer: l}, [l])
  4432 + }
  4433 + }
  4434 + }
  4435 + }, close: function () {
  4436 + this._close && (this.opt.debug && console.log("worker close"), this._close(), clearInterval(this.stopId), this.stopId = null, clearInterval(this.speedSamplerId), this.speedSamplerId = null, t.reset(), this.ws = null, n.clear(), o.clear(), this.firstTimestamp = 0, this.startTimestamp = 0, this.delay = 0, this.ts = 0, this.flvMode = !1, e = [], delete this.playAudioPlanar, delete this.draw, delete this.getDelay)
  4437 + }
  4438 + }, n = new Tr.AudioDecoder(r), o = new Tr.VideoDecoder(r);
  4439 + postMessage({cmd: "init"}), self.onmessage = function (e) {
  4440 + var t = e.data;
  4441 + switch (t.cmd) {
  4442 + case"init":
  4443 + r.opt = JSON.parse(t.opt), n.sample_rate = t.sampleRate;
  4444 + break;
  4445 + case"getProp":
  4446 + postMessage({cmd: "getProp", value: r[t.prop]});
  4447 + break;
  4448 + case"setProp":
  4449 + r[t.prop] = t.value;
  4450 + break;
  4451 + case"play":
  4452 + r.play(t.url);
  4453 + break;
  4454 + case"setVideoBuffer":
  4455 + r.videoBuffer = 1e3 * t.time | 0;
  4456 + break;
  4457 + case"close":
  4458 + r.close()
  4459 + }
  4460 + }
  4461 + }
  4462 + }
  4463 +
  4464 + "undefined" == typeof importScripts ? ve || (ve = !0, {}, l(), U(), $(), q(), Ae(), v(), R(), ge = class {
  4465 + constructor(e) {
  4466 + if (this._opt = Object.assign(v().DEFAULT_OPTIONS, e), this.$container = e.container, "string" == typeof e.container && (this.$container = document.querySelector(e.container)), !this.$container) throw new Error("Jessibuca need container option");
  4467 + delete this._opt.container, this._opt.debug && console.log("options", this._opt), Ae().default(this), l().default(this), U().default(this), q().default(this), $().default(this)
  4468 + }
  4469 +
  4470 + set fullscreen(e) {
  4471 + e ? (R().checkFull() || this.$container.requestFullscreen(), R().$domToggle(this.$doms.minScreenDom, !0), R().$domToggle(this.$doms.fullscreenDom, !1)) : (R().checkFull() && document.exitFullscreen(), R().$domToggle(this.$doms.minScreenDom, !1), R().$domToggle(this.$doms.fullscreenDom, !0)), this._fullscreen !== e && (this.onFullscreen(e), this._trigger(v().EVEMTS.fullscreen, e)), this._fullscreen = e
  4472 + }
  4473 +
  4474 + get fullscreen() {
  4475 + return this._fullscreen
  4476 + }
  4477 +
  4478 + set playing(e) {
  4479 + e ? (R().$domToggle(this.$doms.playBigDom, !1), R().$domToggle(this.$doms.playDom, !1), R().$domToggle(this.$doms.pauseDom, !0), R().$domToggle(this.$doms.screenshotsDom, !0), R().$domToggle(this.$doms.recordDom, !0), this._quieting ? (R().$domToggle(this.$doms.quietAudioDom, !0), R().$domToggle(this.$doms.playAudioDom, !1)) : (R().$domToggle(this.$doms.quietAudioDom, !1), R().$domToggle(this.$doms.playAudioDom, !0))) : (this.$doms.speedDom && (this.$doms.speedDom.innerText = ""), this._playUrl && (R().$domToggle(this.$doms.playDom, !0), R().$domToggle(this.$doms.playBigDom, !0), R().$domToggle(this.$doms.pauseDom, !1)), R().$domToggle(this.$doms.recordDom, !1), R().$domToggle(this.$doms.recordingDom, !1), R().$domToggle(this.$doms.screenshotsDom, !1), R().$domToggle(this.$doms.quietAudioDom, !1), R().$domToggle(this.$doms.playAudioDom, !1)), this._playing !== e && (e ? (this.onPlay(), this._trigger(v().EVEMTS.play)) : (this.onPause(), this._trigger(v().EVEMTS.pause))), this._playing = e
  4480 + }
  4481 +
  4482 + get playing() {
  4483 + return this._playing
  4484 + }
  4485 +
  4486 + set quieting(e) {
  4487 + e ? (R().$domToggle(this.$doms.quietAudioDom, !0), R().$domToggle(this.$doms.playAudioDom, !1)) : (R().$domToggle(this.$doms.quietAudioDom, !1), R().$domToggle(this.$doms.playAudioDom, !0)), this._quieting !== e && (this.onMute(e), this._trigger(v().EVEMTS.mute, e)), this._quieting = e
  4488 + }
  4489 +
  4490 + get quieting() {
  4491 + return this._quieting
  4492 + }
  4493 +
  4494 + set loading(e) {
  4495 + e ? (R().$hideBtns(this.$doms), R().$domToggle(this.$doms.fullscreenDom, !0), R().$domToggle(this.$doms.pauseDom, !0), R().$domToggle(this.$doms.loadingDom, !0)) : R().$initBtns(this.$doms), this._loading = e
  4496 + }
  4497 +
  4498 + get loading() {
  4499 + return this._loading
  4500 + }
  4501 +
  4502 + set recording(e) {
  4503 + e ? (R().$domToggle(this.$doms.recordDom, !1), R().$domToggle(this.$doms.recordingDom, !0)) : (R().$domToggle(this.$doms.recordDom, !0), R().$domToggle(this.$doms.recordingDom, !1)), this._recording !== e && (this.onRecord(e), this._trigger(v().EVEMTS.record, e), this._recording = e)
  4504 + }
  4505 +
  4506 + get recording() {
  4507 + return this._recording
  4508 + }
  4509 +
  4510 + setDebug(e) {
  4511 + this._opt.isDebug = !!e
  4512 + }
  4513 +
  4514 + setTimeout(e) {
  4515 + this._opt.timeout = Number(e)
  4516 + }
  4517 +
  4518 + setVod(e) {
  4519 + this._opt.vod = !!e
  4520 + }
  4521 +
  4522 + setNoOffscreen(e) {
  4523 + this._opt.forceNoOffscreen = !!e
  4524 + }
  4525 +
  4526 + setScaleMode(e) {
  4527 + 0 === (e = Number(e)) ? (this._opt.isFullResize = !1, this._opt.isResize = !1) : 1 === e ? (this._opt.isFullResize = !1, this._opt.isResize = !0) : 2 === e && (this._opt.isFullResize = !0), this._resize()
  4528 + }
  4529 +
  4530 + mute() {
  4531 + this._mute()
  4532 + }
  4533 +
  4534 + cancelMute() {
  4535 + this._cancelMute()
  4536 + }
  4537 +
  4538 + audioResume() {
  4539 + this._cancelMute()
  4540 + }
  4541 +
  4542 + pause() {
  4543 + this._pause()
  4544 + }
  4545 +
  4546 + play(e) {
  4547 + this._play(e)
  4548 + }
  4549 +
  4550 + close() {
  4551 + this._close()
  4552 + }
  4553 +
  4554 + destroy() {
  4555 + this._close(), this._destroyAudioContext(), this._destroyContextGL(), this._decoderWorker.terminate(), this._removeEventListener(), this._initCheckVariable(), this._off(), this._removeContainerChild()
  4556 + }
  4557 +
  4558 + clearView() {
  4559 + this._clearView()
  4560 + }
  4561 +
  4562 + resize() {
  4563 + this._resize()
  4564 + }
  4565 +
  4566 + setBufferTime(e) {
  4567 + e = Number(e), this._decoderWorker.postMessage({cmd: v().POST_MESSAGE.setVideoBuffer, time: e})
  4568 + }
  4569 +
  4570 + setRotate(e) {
  4571 + e = parseInt(e, 10), this._opt.rotate !== e && -1 !== [0, 90, 270].indexOf(e) && (this._opt.rotate = e, this.resize())
  4572 + }
  4573 +
  4574 + setVolume(e) {
  4575 + if (this._gainNode) {
  4576 + if (e = parseFloat(e), isNaN(e)) return;
  4577 + this._gainNode.gain.setValueAtTime(e, this._audioContext.currentTime)
  4578 + }
  4579 + }
  4580 +
  4581 + setKeepScreenOn() {
  4582 + this._opt.keepScreenOn = !0
  4583 + }
  4584 +
  4585 + setFullscreen(e) {
  4586 + const t = !!e;
  4587 + this.fullscreen !== t && (this.fullscreen = t)
  4588 + }
  4589 +
  4590 + hasLoaded() {
  4591 + return this._hasLoaded
  4592 + }
  4593 +
  4594 + screenshot(e, t, r) {
  4595 + this._screenshot(e, t, r)
  4596 + }
  4597 +
  4598 + on(e, t) {
  4599 + this._on(e, t)
  4600 + }
  4601 + }, window.Jessibuca = ge) : _a || (_a = !0, ka())
  4602 +}();
... ...
web_src/static/js/jessibuca/logo.png 0 → 100644

10.4 KB