From 997c3882cd44f1d279432c6d2065423d657f4e1f Mon Sep 17 00:00:00 2001 From: dp <15886898+iheipi@users.noreply.github.com> Date: Mon, 24 Feb 2020 15:02:33 +0800 Subject: [PATCH] Mask detection (#373) * Add mask detection demo --- demo/mask_detection/README.md | 304 + .../mask_detection/PaddleMaskDetection.py | 125 + demo/mask_detection/web/css/css.css | 354 + demo/mask_detection/web/image/arrow.png | Bin 0 -> 1011 bytes demo/mask_detection/web/image/ava.png | Bin 0 -> 3719 bytes demo/mask_detection/web/image/b2f2.png | Bin 0 -> 205470 bytes demo/mask_detection/web/image/cam.png | Bin 0 -> 1330 bytes demo/mask_detection/web/image/cam1.png | Bin 0 -> 1406 bytes demo/mask_detection/web/image/cp.png | Bin 0 -> 3722 bytes demo/mask_detection/web/image/df.jpg | Bin 0 -> 25824 bytes demo/mask_detection/web/image/dot.png | Bin 0 -> 1030 bytes demo/mask_detection/web/image/icon1.png | Bin 0 -> 1353 bytes demo/mask_detection/web/image/icon2.png | Bin 0 -> 1274 bytes demo/mask_detection/web/image/icon3.png | Bin 0 -> 1620 bytes demo/mask_detection/web/image/icon4.png | Bin 0 -> 1671 bytes demo/mask_detection/web/image/icon5.png | Bin 0 -> 1283 bytes demo/mask_detection/web/image/icon6.png | Bin 0 -> 2349 bytes demo/mask_detection/web/image/logo.png | Bin 0 -> 7033 bytes demo/mask_detection/web/image/map.png | Bin 0 -> 57094 bytes demo/mask_detection/web/image/mask.png | Bin 0 -> 7624 bytes demo/mask_detection/web/image/mask1.png | Bin 0 -> 7622 bytes demo/mask_detection/web/image/mu.png | Bin 0 -> 1614 bytes demo/mask_detection/web/image/narrow.png | Bin 0 -> 1688 bytes demo/mask_detection/web/image/nav1.png | Bin 0 -> 2275 bytes demo/mask_detection/web/image/nav2.png | Bin 0 -> 1782 bytes demo/mask_detection/web/image/nav3.png | Bin 0 -> 1724 bytes demo/mask_detection/web/image/point1.png | Bin 0 -> 1141 bytes demo/mask_detection/web/image/point2.png | Bin 0 -> 961 bytes demo/mask_detection/web/image/search.png | Bin 0 -> 1352 bytes demo/mask_detection/web/image/t1.png | Bin 0 -> 1733 bytes demo/mask_detection/web/image/t2.png | Bin 0 -> 1457 bytes demo/mask_detection/web/image/t3.png | Bin 0 -> 1317 bytes demo/mask_detection/web/image/t4.png | Bin 0 -> 1270 bytes demo/mask_detection/web/image/t5.png | Bin 0 -> 1439 bytes demo/mask_detection/web/image/t6.png | Bin 0 -> 1456 bytes demo/mask_detection/web/image/t7.png | Bin 0 -> 1334 bytes demo/mask_detection/web/image/zoom.png | Bin 0 -> 1737 bytes demo/mask_detection/web/index.php | 241 + .../web/js/ckplayer/ckplayer.js | 8182 +++++++++++++++++ .../web/js/ckplayer/ckplayer.min.js | 110 + .../web/js/ckplayer/ckplayer.swf | Bin 0 -> 127366 bytes .../web/js/ckplayer/ckplayer.xml | 106 + .../web/js/ckplayer/hls/LICENSE | 28 + .../mask_detection/web/js/ckplayer/hls/hls.js | 7 + .../web/js/ckplayer/hls/hls.min.js | 7 + .../web/js/ckplayer/language.xml | 44 + demo/mask_detection/web/js/ckplayer/style.xml | 640 ++ demo/mask_detection/web/js/jquery.js | 12 + paddlehub/module/module.py | 64 +- 49 files changed, 10202 insertions(+), 22 deletions(-) create mode 100644 demo/mask_detection/README.md create mode 100644 demo/mask_detection/mask_detection/PaddleMaskDetection.py create mode 100644 demo/mask_detection/web/css/css.css create mode 100644 demo/mask_detection/web/image/arrow.png create mode 100644 demo/mask_detection/web/image/ava.png create mode 100644 demo/mask_detection/web/image/b2f2.png create mode 100644 demo/mask_detection/web/image/cam.png create mode 100644 demo/mask_detection/web/image/cam1.png create mode 100644 demo/mask_detection/web/image/cp.png create mode 100644 demo/mask_detection/web/image/df.jpg create mode 100644 demo/mask_detection/web/image/dot.png create mode 100644 demo/mask_detection/web/image/icon1.png create mode 100644 demo/mask_detection/web/image/icon2.png create mode 100644 demo/mask_detection/web/image/icon3.png create mode 100644 demo/mask_detection/web/image/icon4.png create mode 100644 demo/mask_detection/web/image/icon5.png create mode 100644 demo/mask_detection/web/image/icon6.png create mode 100644 demo/mask_detection/web/image/logo.png create mode 100644 demo/mask_detection/web/image/map.png create mode 100644 demo/mask_detection/web/image/mask.png create mode 100644 demo/mask_detection/web/image/mask1.png create mode 100644 demo/mask_detection/web/image/mu.png create mode 100644 demo/mask_detection/web/image/narrow.png create mode 100644 demo/mask_detection/web/image/nav1.png create mode 100644 demo/mask_detection/web/image/nav2.png create mode 100644 demo/mask_detection/web/image/nav3.png create mode 100644 demo/mask_detection/web/image/point1.png create mode 100644 demo/mask_detection/web/image/point2.png create mode 100644 demo/mask_detection/web/image/search.png create mode 100644 demo/mask_detection/web/image/t1.png create mode 100644 demo/mask_detection/web/image/t2.png create mode 100644 demo/mask_detection/web/image/t3.png create mode 100644 demo/mask_detection/web/image/t4.png create mode 100644 demo/mask_detection/web/image/t5.png create mode 100644 demo/mask_detection/web/image/t6.png create mode 100644 demo/mask_detection/web/image/t7.png create mode 100644 demo/mask_detection/web/image/zoom.png create mode 100644 demo/mask_detection/web/index.php create mode 100644 demo/mask_detection/web/js/ckplayer/ckplayer.js create mode 100644 demo/mask_detection/web/js/ckplayer/ckplayer.min.js create mode 100644 demo/mask_detection/web/js/ckplayer/ckplayer.swf create mode 100644 demo/mask_detection/web/js/ckplayer/ckplayer.xml create mode 100644 demo/mask_detection/web/js/ckplayer/hls/LICENSE create mode 100644 demo/mask_detection/web/js/ckplayer/hls/hls.js create mode 100644 demo/mask_detection/web/js/ckplayer/hls/hls.min.js create mode 100644 demo/mask_detection/web/js/ckplayer/language.xml create mode 100644 demo/mask_detection/web/js/ckplayer/style.xml create mode 100644 demo/mask_detection/web/js/jquery.js diff --git a/demo/mask_detection/README.md b/demo/mask_detection/README.md new file mode 100644 index 00000000..e6c82452 --- /dev/null +++ b/demo/mask_detection/README.md @@ -0,0 +1,304 @@ +# 百度PaddlePaddle实现口罩检测应用 + +## 0 项目介绍 +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/BB6BC87A45D146CEBA7BF237B5383835?ynotemdtimestamp=1582271320612) + +### [>点击查看视频链接<](https://www.bilibili.com/video/av88962128) + +##### 背景 +本项目可以部署在大型场馆出入口,学校,医院,交通通道出入口,人脸识别闸机,机器人上,支持的方案有:安卓方案(如RK3399的人脸识别机,机器人),ubuntu 边缘计算,windowsPC+摄像头,识别率80%~90%,如果立项使用场景可以达到 99% (如:人脸识别机场景)。但是限于清晰度和遮挡关系,对应用场景有一些要求。 + +##### 效果分析 +可以看到识别率在80~90%之前,稍小的人脸有误识别的情况,有些挡住嘴的场景也被误识别成了戴口罩,一个人带着口罩,鼻子漏出来识别成没有戴口罩,这个是合理的因为的鼻子漏出来是佩戴不规范。初步判断,这个模型应用在门口,狭长通道,人脸识别机所在位置都是可以的。 + +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/7E12DBD91D1D4AB5B33C84786D519065?ynotemdtimestamp=1582271320612)![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/2BD974FB990C4C448B30B04194545054?ynotemdtimestamp=1582271320612)![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/E49E34A071F8484D948511430FAB0360?ynotemdtimestamp=1582271320612) + +## 1 部署环境 +参考: https://www.paddlepaddle.org.cn/install/quick + +### 安装paddlehub +`pip install paddlehub` + + +## 2 开发识别服务 +### 加载预训练模型 +```python +import paddlehub as hub +module = hub.Module(name="pyramidbox_lite_mobile_mask") #口罩检测模型 +``` + +>以上语句paddlehub会自动下载口罩检测模型 "pyramidbox_lite_mobile_mask" 不需要提前下载模型 + +### OpenCV打开摄像头或视频文件 +```python +import cv2 + +capture = cv2.VideoCapture(0) # 打开摄像头 +# capture = cv2.VideoCapture('./2.mp4') # 打开视频文件 +while(1): + ret, frame = capture.read() # frame即视频的一帧数据 + + if ret == False: + break + + cv2.imshow('Mask Detection', frame) + + if cv2.waitKey(1) & 0xFF == ord('q'): + break + +cv2.destroyAllWindows() +``` + +### 口罩检测 +```python +# frame为一帧数据 + +input_dict = {"data": [frame]} + +results = module.face_detection(data=input_dict) + +print(results) +``` +输出结果: +```json +[ + { + "data": { + "label": "MASK", + "left": 258.37087631225586, + "right": 374.7980499267578, + "top": 122.76758193969727, + "bottom": 254.20085906982422, + "confidence": 0.5630852 + }, + "id": 1 + } +] +``` +>"label":是否戴口罩,"confidence":置信度,其余字段为脸框的位置大小 + +### 将结果显示到原视频帧中 +```python +# results为口罩检测结果 +for result in results: + # print(result) + + label = result['data']['label'] + confidence = result['data']['confidence'] + + top, right, bottom, left = int(result['data']['top']), int(result['data']['right']), int(result['data']['bottom']), int(result['data']['left']) + + color = (0, 255, 0) + if label == 'NO MASK': + color = (0, 0, 255) + + cv2.rectangle(frame, (left, top), (right, bottom), color, 3) + cv2.putText(frame, label + ":" + str(confidence), (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2) +``` +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/F85FCBCA17994C8691024381CBDAFCA7?ynotemdtimestamp=1582271320612) + +>原DEMO中是英文+置信度显示在框的上面,尝试改为中文,遇到字体问题,以下是解决办法 + +### 图片写入中文 +需要事先准备ttf/otf等格式的字体文件 +```python +def paint_chinese_opencv(im,chinese,position,fontsize,color_bgr):#opencv输出中文 + img_PIL = Image.fromarray(cv2.cvtColor(im,cv2.COLOR_BGR2RGB))# 图像从OpenCV格式转换成PIL格式 + font = ImageFont.truetype('思源黑体SC-Heavy.otf',fontsize,encoding="utf-8") # 加载字体文件 + #color = (255,0,0) # 字体颜色 + #position = (100,100)# 文字输出位置 + color = color_bgr[::-1] + draw = ImageDraw.Draw(img_PIL) + draw.text(position,chinese,font=font,fill=color)# PIL图片上打印汉字 # 参数1:打印坐标,参数2:文本,参数3:字体颜色,参数4:字体 + img = cv2.cvtColor(np.asarray(img_PIL),cv2.COLOR_RGB2BGR)# PIL图片转cv2 图片 + return img +``` +```python +for result in results: + # print(result) + + label = result['data']['label'] + confidence = result['data']['confidence'] + + top, right, bottom, left = int(result['data']['top']), int(result['data']['right']), int(result['data']['bottom']), int(result['data']['left']) + + color = (0, 255, 0) + label_cn = "有口罩" + if label == 'NO MASK': + color = (0, 0, 255) + label_cn = "无口罩" + + cv2.rectangle(frame, (left, top), (right, bottom), color, 3) + # cv2.putText(frame, label + ":" + str(confidence), (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2) + frame = paint_chinese_opencv(frame, label_cn + ":" + str(confidence), (left, top-36), 24, color) +``` +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/4F75E5C6F42F4C3CBE1341742D032847?ynotemdtimestamp=1582271320612) + + +### 提取头像文件 +```python +img_name = "avatar_%d.png" % (maskIndex) +path = "./result/" + img_name +image = frame[top - 10: bottom + 10, left - 10: right + 10] +cv2.imwrite(path, image,[int(cv2.IMWRITE_PNG_COMPRESSION), 9]) +``` + + +### 结果写入JSON +```python +with open("./result/2-mask_detection.json","w") as f: + json.dump(data, f) +``` + +>此处可以按照自己的应用需要改为输出到mysql,Redis,kafka ,MQ 供应用消化数据 + +### 完整代码如下 +```python +import paddlehub as hub +import cv2 +from PIL import Image, ImageDraw, ImageFont +import numpy as np +import json +import os + +module = hub.Module(name="pyramidbox_lite_mobile_mask") + + +def paint_chinese_opencv(im,chinese,position,fontsize,color_bgr):#opencv输出中文 + img_PIL = Image.fromarray(cv2.cvtColor(im,cv2.COLOR_BGR2RGB))# 图像从OpenCV格式转换成PIL格式 + font = ImageFont.truetype('思源黑体SC-Heavy.otf',fontsize,encoding="utf-8") # 加载字体文件 + #color = (255,0,0) # 字体颜色 + #position = (100,100)# 文字输出位置 + color = color_bgr[::-1] + draw = ImageDraw.Draw(img_PIL) + draw.text(position,chinese,font=font,fill=color)# PIL图片上打印汉字 # 参数1:打印坐标,参数2:文本,参数3:字体颜色,参数4:字体 + img = cv2.cvtColor(np.asarray(img_PIL),cv2.COLOR_RGB2BGR)# PIL图片转cv2 图片 + return img + + +result_path = './result' +if not os.path.exists(result_path): + os.mkdir(result_path) + + +name = "./result/1-mask_detection.mp4" +width = 1920 +height = 1080 +fps = 30 +fourcc = cv2.VideoWriter_fourcc(*'mp4v') +writer = cv2.VideoWriter(name, fourcc, fps, (width, height)) + +maskIndex = 0 +index = 0 +data = [] + +# capture = cv2.VideoCapture(0) # 打开摄像头 +capture = cv2.VideoCapture('./2.mp4') # 打开视频文件 +while(1): + frameData = {} + + ret, frame = capture.read() # frame即视频的一帧数据 + + if ret == False: + break + + frame_copy = frame.copy() + + input_dict = {"data": [frame]} + + results = module.face_detection(data=input_dict) + # print(results) + + maskFrameDatas = [] + for result in results: + # print(result) + + label = result['data']['label'] + + confidence_origin = result['data']['confidence'] + confidence = round(confidence_origin, 2) + confidence_desc = str(confidence) + + top, right, bottom, left = int(result['data']['top']), int(result['data']['right']), int(result['data']['bottom']), int(result['data']['left']) + + #将当前帧保存为图片 + img_name = "avatar_%d.png" % (maskIndex) + path = "./result/" + img_name + image = frame[top - 10: bottom + 10, left - 10: right + 10] + cv2.imwrite(path, image,[int(cv2.IMWRITE_PNG_COMPRESSION), 9]) + + maskFrameData = {} + maskFrameData['top'] = top + maskFrameData['right'] = right + maskFrameData['bottom'] = bottom + maskFrameData['left'] = left + maskFrameData['confidence'] = float(confidence_origin) + maskFrameData['label'] = label + maskFrameData['img'] = img_name + + maskFrameDatas.append(maskFrameData) + + maskIndex += 1 + + color = (0, 255, 0) + label_cn = "有口罩" + if label == 'NO MASK': + color = (0, 0, 255) + label_cn = "无口罩" + + cv2.rectangle(frame_copy, (left, top), (right, bottom), color, 3) + # cv2.putText(frame, label, (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2) + frame_copy = paint_chinese_opencv(frame_copy, label_cn, (left, top-36), 24, color) + + + writer.write(frame_copy) + + cv2.imshow('Mask Detection', frame_copy) + + frameData['frame'] = index + # frameData['seconds'] = int(index/fps) + frameData['data'] = maskFrameDatas + + data.append(frameData) + + print(json.dumps(frameData)) + + index += 1 + + if cv2.waitKey(1) & 0xFF == ord('q'): + break + +with open("./result/2-mask_detection.json","w") as f: + json.dump(data, f) + +writer.release() + +cv2.destroyAllWindows() +``` +## 3 制作网页呈现效果 +此DEMO是显示一个固定视频,分析导出的 json 渲染到网页里面,如需实时显示需要再次开发 + +### python 导出的数据 +使用上面的 python 文件完整执行后会有3个种类的数据输出,放到`web/video/result`目录下 +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/329AC9C2D89447EABE6B8C45D620441E?ynotemdtimestamp=1582271320612) + +### json数据结构 +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/5D46F32061B047D4AB0AC016FE2A63A5?ynotemdtimestamp=1582271320612) + +### 使用数据渲染网页 + +- 网页中左侧 "视频播放视频区",播放同时实时回调当前播放的时间点 +- 根据时间点换算为帧(1秒30帧),遍历 json 数据中的数据 +- 把数据中对应的数据输出到网页右侧 "信息区" + +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/6329B326216A4950BF35E0CB37CDC58F?ynotemdtimestamp=1582271320612) + +## 4 欢迎交流 + + +**百度飞桨合作伙伴:** + + +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/DC72DE1CF51747138871BB0E3D54E20D?ynotemdtimestamp=1582271320612) + +北京奇想天外科技有限公司 diff --git a/demo/mask_detection/mask_detection/PaddleMaskDetection.py b/demo/mask_detection/mask_detection/PaddleMaskDetection.py new file mode 100644 index 00000000..8d3d7b32 --- /dev/null +++ b/demo/mask_detection/mask_detection/PaddleMaskDetection.py @@ -0,0 +1,125 @@ +import paddlehub as hub +import cv2 +from PIL import Image, ImageDraw, ImageFont +import numpy as np +import json +import os + +module = hub.Module(name="pyramidbox_lite_mobile_mask") + + +#opencv输出中文 +def paint_chinese(im, chinese, position, fontsize, color_bgr): + img_PIL = Image.fromarray(cv2.cvtColor( + im, cv2.COLOR_BGR2RGB)) # 图像从OpenCV格式转换成PIL格式 + font = ImageFont.truetype('思源黑体SC-Heavy.otf', fontsize, encoding="utf-8") + #color = (255,0,0) # 字体颜色 + #position = (100,100)# 文字输出位置 + color = color_bgr[::-1] + draw = ImageDraw.Draw(img_PIL) + # PIL图片上打印汉字 # 参数1:打印坐标,参数2:文本,参数3:字体颜色,参数4:字体 + draw.text(position, chinese, font=font, fill=color) + img = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR) # PIL图片转cv2 图片 + return img + + +result_path = './result' +if not os.path.exists(result_path): + os.mkdir(result_path) + +name = "./result/1-mask_detection.mp4" +width = 1920 +height = 1080 +fps = 30 +fourcc = cv2.VideoWriter_fourcc(*'mp4v') +writer = cv2.VideoWriter(name, fourcc, fps, (width, height)) + +maskIndex = 0 +index = 0 +data = [] + +# capture = cv2.VideoCapture(0) # 打开摄像头 +capture = cv2.VideoCapture('./2.mp4') # 打开视频文件 +while (1): + frameData = {} + + ret, frame = capture.read() # frame即视频的一帧数据 + + if ret == False: + break + + frame_copy = frame.copy() + + input_dict = {"data": [frame]} + + results = module.face_detection(data=input_dict) + # print(results) + + maskFrameDatas = [] + for result in results: + # print(result) + + label = result['data']['label'] + + confidence_origin = result['data']['confidence'] + confidence = round(confidence_origin, 2) + confidence_desc = str(confidence) + + top, right, bottom, left = int(result['data']['top']), int( + result['data']['right']), int(result['data']['bottom']), int( + result['data']['left']) + + #将当前帧保存为图片 + img_name = "avatar_%d.png" % (maskIndex) + path = "./result/" + img_name + image = frame[top - 10:bottom + 10, left - 10:right + 10] + cv2.imwrite(path, image, [int(cv2.IMWRITE_PNG_COMPRESSION), 9]) + + maskFrameData = {} + maskFrameData['top'] = top + maskFrameData['right'] = right + maskFrameData['bottom'] = bottom + maskFrameData['left'] = left + maskFrameData['confidence'] = float(confidence_origin) + maskFrameData['label'] = label + maskFrameData['img'] = img_name + + maskFrameDatas.append(maskFrameData) + + maskIndex += 1 + + color = (0, 255, 0) + label_cn = "有口罩" + if label == 'NO MASK': + color = (0, 0, 255) + label_cn = "无口罩" + + cv2.rectangle(frame_copy, (left, top), (right, bottom), color, 3) + # cv2.putText(frame, label, (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2) + origin_point = (left, top - 36) + frame_copy = paint_chinese(frame_copy, label_cn, origin_point, 24, + color) + + writer.write(frame_copy) + + cv2.imshow('Mask Detection', frame_copy) + + frameData['frame'] = index + # frameData['seconds'] = int(index/fps) + frameData['data'] = maskFrameDatas + + data.append(frameData) + + print(json.dumps(frameData)) + + index += 1 + + if cv2.waitKey(1) & 0xFF == ord('q'): + break + +with open("./result/2-mask_detection.json", "w") as f: + json.dump(data, f) + +writer.release() + +cv2.destroyAllWindows() diff --git a/demo/mask_detection/web/css/css.css b/demo/mask_detection/web/css/css.css new file mode 100644 index 00000000..589c32ee --- /dev/null +++ b/demo/mask_detection/web/css/css.css @@ -0,0 +1,354 @@ +/*reset*/ +*{ margin: 0; padding: 0; box-sizing: border-box; } +body{ font-family: Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans CJK SC,WenQuanYi Micro Hei,Arial,sans-serif; font-size: 14px; line-height: 1.4; color: #fff; -webkit-font-smoothing: antialiased; background: #2f3242;} +ul,ol{ list-style-type: none; } +a{ text-decoration: none; transition: all .2s ease; -webkit-transition: all .2s ease;} +img{border: none; } +table{ border-collapse:collapse; border-spacing:0; } +p{ line-height: 1.4 } +a {color: #333;} +a:hover {color: #666;} +input{ outline: none; } +button {background: none;border:none} +.clear:after{ content: " "; clear: both; display: block; } +h1,h2,h3,h4,h5,h6{font-style: normal;margin:0;padding:0;font-weight: normal;} +.clear:after{ content: " "; clear: both; display: block; } +.header {height:95px;padding-left:95px;padding-right:25px;} +.header .logo{padding-left:0px;padding-top:25px;} +.header .right-bar {float: right;padding-top:20px;} +.header .search {width: 313px; + height: 48px; + border: 2px solid #fff; /* stroke */ + -moz-border-radius: 26px; + -webkit-border-radius: 26px; + border-radius: 26px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background: url(../image/search.png) 10px center no-repeat; + padding-left:50px; + color: #fff; + font-size: 16px; + } + +.header .icon {display: inline-block;margin-left:40px;width:31px;height: 31px;vertical-align: middle;position: relative;} +.icon1 {background: url(../image/icon1.png) no-repeat center center;} +.icon2 {background: url(../image/icon2.png) no-repeat center center;} +.header .avatar {width:56px;height: 56px;border-radius: 100%;overflow: hidden;display: inline-block;margin-left:40px;vertical-align: middle;} +.header .right-bar .news-dot { + width: 15px; +height: 15px; +border: 3px solid #2f3141; /* stroke */ +-moz-border-radius: 9px; +-webkit-border-radius: 9px; +border-radius: 9px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #2195f3; /* layer fill content */ +position: absolute; +right:0px; +top:0px; +} +.header .arrow {display: inline-block;background: url(../image/arrow.png) no-repeat 0 0;width:12px;height: 8px;margin-left:10px;} +.bd {padding-left:95px;position: relative;background: #2f3242;} +.bd .side {width:95px;position: absolute;left:0;top:0;} +.bd .con {background: #2b2d3c;} +.bd .con .hd {background: #6d7499;color: #fff;font-size: 18px;padding:0 25px 0 60px;line-height: 60px;height: 60px;} +.bd.chart {padding:0;} +.bd .con .hd .right-bar {float:right;} +.select-wrap {min-width: 150px;margin-top:10px;line-height: 38px; + height: 38px; + border-radius: 19px; + position: relative; + border:1px solid #9da3bd; + display: inline-block; + color: #fff; + margin-left:20px; +} +.select-wrap select {border: none; + outline: none; + width: 100%; + height: 40px; + line-height: 40px; + background: transparent; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + font-size: 16px; + color: #fff; + padding-left: 20px;} +.select-wrap:after{ + content: ""; + width: 14px; + height: 8px; + background: url(../image/arrow.png) no-repeat center; + position: absolute; + right: 20px; + top: 45%; + pointer-events: none; +} +.con-bd {position: relative;min-height: 960px;} +.maper {padding-left:380px;} +.con-left {left:0;top:0;position: absolute;width:380px;min-height: 960px;} +.con-left .map {padding:20px;} + +.con-left .ctr-pan {position:absolute;bottom:20px;left:0;width:380px;color: #fff;} +.con-left .ctr-pan ul{padding-left:20px;} +.con-left .ctr-pan li {padding:5px 0;} +.con-left .ctr-pan .icon {width:23px;height: 23px;display: inline-block;vertical-align: middle;margin-right:10px;} +.con-left .ctr-pan .icon3 {background: url(../image/icon3.png) no-repeat center center;} +.icon4 {background: url(../image/icon4.png) no-repeat center center;} +.con-left .ctr-pan .icon5 {background: url(../image/icon5.png) no-repeat center center;} +.con-left .ctr-pan .switch {border:2px solid #aaaaaa;border-radius:8px;height:15px;width:30px;display: inline-block;line-height: 15px;position: relative;vertical-align: middle;margin-left:10px;} +.con-left .ctr-pan .switch em {width: 7px; + height: 7px; + -moz-border-radius: 4px / 3px; + -webkit-border-radius: 4px / 3px; + border-radius: 4px / 3px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background-color: #aaa; /* layer fill content */ + display: inline-block; + vertical-align: middle; + position: absolute; + top:2px; + } + + .con-left .ctr-pan .switch.on em{left:16px;} + .con-left .ctr-pan .switch.off em{left:2px;} +.map-wrap {padding:20px 0 0 0;} + +.map-wrap img {} + +.zoom-bar { + width: 49px; +height: 231px; +border: 3px solid #757da3; /* stroke */ +-moz-border-radius: 27px; +-webkit-border-radius: 27px; +border-radius: 27px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #2f3141; /* layer fill content */ +position: absolute; +right:50px; +top:30%; +text-align: center; +} +.zoom-bar .icon {width:30px;height: 30px;display: inline-block;} +.zoom-bar .zoom {background: url(../image/zoom.png) no-repeat center center;margin-top:5px;} +.zoom-bar .narrow {background: url(../image/narrow.png) no-repeat center center;margin-top:55px;} +.zoom-bar .mouse {background: url(../image/mu.png) no-repeat center center;margin-top:58px;} +.side .nav {padding-top:118px;} +.side .nav a{display: block;width:95px;height: 95px;margin:100px 0 0 0;position: relative;} +.side .nav a:hover {background-color: #2c2e3d;} + +.side .nav .nav1 {background-image: url(../image/nav1.png);background-repeat: no-repeat;background-position: center center;} +.side .nav .nav2 {background-image: url(../image/nav2.png);background-repeat: no-repeat;background-position: center center;} +.side .nav .nav3 {background-image: url(../image/nav3.png);background-repeat: no-repeat;background-position: center center;} +.side .news-dot { + width: 15px; +height: 15px; +border: 3px solid #2f3141; /* stroke */ +-moz-border-radius: 9px; +-webkit-border-radius: 9px; +border-radius: 9px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #2195f3; /* layer fill content */ +position: absolute; +left:55px; +top:30px; +} +.side .nav a.current {background-color: #2c2e3d;} + +.person-list {font-size: 16px;padding-left:60px;} +.person-list table {width:100%;} +.person-list thead td{color: #9ea3b4;height:70px;line-height: 70px;text-align: center;background: none;} + +.person-list td {color: #fff;text-align: center;padding:10px 0;} +.person-list .pro .item {display: inline-block;} + +.person-list .pro .item span {display:block;width:33px;height: 33px;margin:0 10px;margin-bottom:5px;} +.t1 {background: url(../image/t1.png) no-repeat center center;} +.t2 {background: url(../image/t2.png) no-repeat center center;} +.t3 {background: url(../image/t3.png) no-repeat center center;} +.t4 {background: url(../image/t4.png) no-repeat center center;} +.t5 {background: url(../image/t5.png) no-repeat center center;} +.t6 {background: url(../image/t6.png) no-repeat center center;} +.t7 {background: url(../image/t7.png) no-repeat center center;} +.person-list .dot {background: url(../image/dot.png) no-repeat 0 0;width:4px;height: 16px;display: inline-block;} +.person-list .time {font-size: 14px;color: #9ea3b4;} +.person-list tr:nth-child(odd) td {background: #3a3e52;} +.person-list thead tr:nth-child(odd) td {background: none;} +.person-list tr:nth-child(even) td {height:20px;} +.person-list tr td:last-child {padding:10px 10px;} +.line-female {border-left:4px solid #ed70bc;} +.line-male {border-left:4px solid #2196f3;} +.line-child {border-left:4px solid #e2e3e8;} + +.mask {background: rgba(0,0,0,.90);position: absolute;width: 100%;height: 100%;left: 0;top:0;z-index: 99;} +.mask .cp {background: url(../image/cp.png) no-repeat 0 0 ;width:154px;height: 59px;margin:10% auto 0 auto;} +.drop-area { + width: 247px; + height: 247px; + border:4px dotted #fff; + border-radius: 30px; + background: url(../image/icon6.png) no-repeat center 50px; + margin:10% auto 50px auto; + } + + .drop-area .text {font-size: 20px;text-align: center;color: #fff;margin-top:170px;} +.match-box {text-align: center;width:470px;margin: auto;color: #fff;font-size: 20px;} + +.match-box .match-bar {width: 316px; + height: 8px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background-color: #252734; /* layer fill content */ + -moz-box-shadow: 0 0 48px rgba(0,0,0,.14); /* outer glow */ + -webkit-box-shadow: 0 0 48px rgba(0,0,0,.14); /* outer glow */ + box-shadow: 0 0 48px rgba(0,0,0,.14); /* outer glow */ + position: relative; + display: inline-block; + margin:0 10px; + vertical-align: middle; + } + .match-box .match-bar span { +height: 8px; +-moz-border-radius: 4px; +-webkit-border-radius: 4px; +border-radius: 4px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #71799f; /* layer fill content */ +position: absolute; +left: 0; +top:0; + } + .match-box .match-bar span em { + width: 25px; +height: 25px; +-moz-border-radius: 12px / 13px; +-webkit-border-radius: 12px / 13px; +border-radius: 12px / 13px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #fff; /* layer fill content */ +-moz-box-shadow: 0 5px 5px rgba(0,0,0,.13); /* drop shadow */ +-webkit-box-shadow: 0 5px 5px rgba(0,0,0,.13); /* drop shadow */ +box-shadow: 0 5px 5px rgba(0,0,0,.13); /* drop shadow */ +position: absolute; +right:0; +top:-8px; +} +.match-res-box {text-align: center;margin:60px auto 80px auto;width:320px;counter-reset: #fff;font-size: 17px;} +.match-avatar { + width: 98px; +height: 98px; +-moz-border-radius: 49px; +-webkit-border-radius: 49px; +border-radius: 49px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #6b7397; /* layer fill content */ +overflow: hidden; +background: #6c7398; +margin: auto; +} +.match-res-box .text {text-align: center;margin-top:15px;} + +.match-res-box .text span {font-weight: bold;} +.avatar-s {width: 56px; + height: 56px; + -moz-border-radius: 28px; + -webkit-border-radius: 28px; + border-radius: 28px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background-color: #ed6fbb; /* layer fill content */ + display: inline-block; + overflow: hidden; + vertical-align: middle; + margin-right:20px; + } + +.camera-list {padding:75px 0 0 90px;} + +.camera-list li {float: left;width:400px;padding:0 40px 40px 40px;text-align: center;} + +.camera-list .video-box { + width: 315px; + height: 236px; + -moz-border-radius: 24px; + -webkit-border-radius: 24px; + border-radius: 24px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background-color: #37394b; /* layer fill content */ + overflow: hidden; +} +.camera-list li p {height: 44px;line-height: 44px;font-size: 18px;} +.camera-list li .icon {width:23px;height: 23px;display: inline-block;vertical-align: middle;margin-right:10px;} + +.camera-con {padding-right:350px;position: relative;margin-top:40px;padding-left:40px;} +.camera-con .list {width:240px;position: absolute;right:50px;top:0;text-align: center;} +.camera-con .list li {margin-bottom:30px;} +.camera-con .list li .ca {width:240px;height: 178px;overflow: hidden;border-radius: 20px;} +.video-box {width:100%;} +.camera-con .list li p {padding:10px 0 0 0;} + + +.camera-con .list li .icon {width: 23px; + height: 23px; + display: inline-block; + vertical-align: middle; + margin-right: 10px;} + + .tab li {float: left;} +.tab a {font-size: 18px;display: block;width: 180px;height: 58px;list-style: 58px;text-align: center;color: #fff;} +.tab a:hover, +.tab a.current {background: #8088ad;} +.chart .con .hd {padding-left:130px;} +.chart-bd {padding:20px;} +.chart-panel {padding-bottom:20px;} +.left-panel {width:790px;height:380px;float: left;background: #2f3242;padding:10px 20px;} + +.right-panel {width:1040px;height: 380px;float: left;margin-left:20px;} +.panel-hd .right-bar {float:right;color: #9ea3b4;font-size: 16px;} +.panel-hd {font-size: 25px;color:#fff;height:70px;} +.panel-hd .select-wrap select{color: #9ea3b4;font-size: 16px;} + +.right-panel .panel-hd {background: #3a3e52;height:96px;line-height: 96px;font-size: 25px;color: #fff;text-align: center;} +.right-panel .list {height:65px;padding:30px 0;} +.right-panel .list li {padding:30px 100px 30px 85px;position: relative;border-bottom:1px solid #505464;} +.right-panel .list li .avatar { + width: 42px; + height: 42px; + -moz-border-radius: 21px; + -webkit-border-radius: 21px; + border-radius: 21px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background-color: #9ba1b1; /* layer fill content */ + display: block; + position: absolute; + left:25px; + } + .right-panel .list li .time {font-size: 16px;color: #fff;} + .right-panel .list li .text {color: #9ea3b4;} + .right-panel .list li .dot {position: absolute;right:25px;background: url(../image/dot.png) no-repeat center center;width:4px;height: 16px;top:40px;} diff --git a/demo/mask_detection/web/image/arrow.png b/demo/mask_detection/web/image/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..5c636bad6ff3141bd8cfa06c65bcc13eb29e94dc GIT binary patch literal 1011 zcmaJ=PiWIn91awv8|#qaVT$M@6HhjI>C!(5tNYWmuCk2LRqXJxGY!w!Pz&6}VOFCxNx>DtbNHSqHO@O|I!`~BYUt&EMH zjkF(aXBZ}uA65!J|Ewq(-D#_k#Rgls+x~RnA<{q z3=;xou|!Jhh^%9a(*g|VTMlJ2Okcn6X!;Bypp2$XJI#K3`iuppk!CN%Rj4`{R56Da zT{ONpTGSV3bje`*&wxH(rUDis8t|=I+mrn?Tho>4IymN8P=k<}G`nZ2q>h0Mb`gkk zFsj1@1POr?dc|Zic^br^0C^bWg;-Qb%DpieLQwx$8qGDPMhtr^P{%c(@;>5r@N*@Ol*TdQ7hwll4hyXy%a2`DQkQ6 zGSPzZzUJ@(2ZNLvKvn%e)Uujrj}*|p-+u~w#RUiP1?1s*SEm;@)f0qr=EIRk$HL!Vu7CNt%G@1(yQy^D?|gN8 z(^lRuuXR7@{G@N*gNOC)s~c@uA^do9$2joudPm2^!0!_iUEn$MWb55IEAr!V@C@_W KQDtLj^4cFn#6si% literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/ava.png b/demo/mask_detection/web/image/ava.png new file mode 100644 index 0000000000000000000000000000000000000000..1cfdb55b4508af9c3800d7c8c2d134d1ef7d6ed7 GIT binary patch literal 3719 zcmaJ^XIN9)whcv^Qba%qJ%9oddY90W&?IyLDUy%`NRR|W5QG2%0tOMW0MdJ}BBCI@ ziwYK+NE6gxp-VG*dEwmSx$npI?r-nC$~VTCbFMl5EUKN2IX4%O3jhFcTUx*z7^CjN z$HB(*AxIi+FNRT>EM0pc~$q*1D(|?x`5crQQA?WX8VjP%CC@N4zO_S48xLem#`Q!5-~vP zuafm~f6m3^k9vP|F@Mg*^p9K>Mlvb~js1U({=LO;&%yK`+cFma7#~YuxShnXbw;D6 z768CSw}hEEg-(r%68&5zwzA6vShaejk7zjR9Eq;%yG1Cf$eKYS@n1W6tM2<>l(eP= z3h0|pm?vDi6N;AZUdiveHaz z%gbx}c55embtZfc61BP);#I#hy9KxgfbsFPAL5F7-(*nfJLV;E_O#O*3e!=^4`uYw zc_5)B;mHJv-nx)_&TxN-HZUDRt#c8MJ8ZD+&C2VD6zEb~>o1PYQXr4i@tvXzhFTQk#KCs)8CrXgp)V+KB$n}2g zt?4tB^;e3O-(%%JY!)$#HiBDUfhGCX&b?^oqVpa!-Ik)IQ8ex zE2GQH3xx3%$?!KP4EMV>lh&H+vs3b8@#q?TK^_X!uy&7P0zATU&n}*-cfq3hb)cQJ zi9?c%#c{H-iCgEwJ}1lGA)_rMmQ`{39qJabRTX3*DlGS_wT+!LSx05NHE@)jdZgTp zPudv~*ITwr%4J$f8f#(^RV$IWk7yGsx|=*B{a7{VNdX*t28F#_9sMCEb^1Gde2cSt zeJ?;z(fSh57R=$M1?CqM@eb1Vv~zpWQ$MiG@ec9fO4NFwYqkl)Xs%ti^MhHRL+fnF=9#4(cR$raHDO zsV#@iAY=E;ji&v#3dZ}EwrDD}p6Pbgjo4J`;8AguV#}NIiZ1P?;8>h6P};QrWqyXF zqpz1v=GqvwDY1QpZ%b;@RkNIveYja>!i-nk^2AY&KC@`Cpmbe5D@X7Pr~BQ--NwC6 zFDxPQ_fA9k?Lrgq+#6R%1TK0l4_2Tc1;@nSvUc-hM3T2Xs||!Q4IU`0O>9=Fnf7R4 ze`W}Z?-+~37jVmUwg~q`e5YJMTYM_DF6ru?ih@&>a8LWApV%~}j;~zp4tP$-OmK~nL;2(ejl*ByY8SG!UY zUDGRk*KK%ae~;eNmZYLpTIFx=$3Awx>&v;cM}n|R;NgL^HB}yp(AtQXEK7!$UE>(= z$p&A(`T05a^nF9lEFFkAlP-xYsq`rlCrSBms{U*9a{Y4F6J%zz#N}Utkvi&r1)lv} zGMM4?o#d|F0#0Euif-$vq?hOc-ZmyQdlXMq=ufI+!uuOk$9h_v3v*#rqFxi^{^8*~ zx?@tfa@@)0N!i$(>VSqG9Fc@_p#QyeKs5-k`MZ=CemJP6-+F&(co>#q`Kq zF<;@nNfB9@&Zt1zcy=(QtJs?L`-^Kpc}(0sDZiJ@)8&l%`A$K2*TKjd(JIo<(K?VI z5qGvKJeFKzpR6I~(Vg>av-zTUhM2X>$cNSldTc(BJ#rfq6#V#hXYQ?ER$BE7?G_&6 z@#REr-dLEB%6X1~n>o(yDU~Jp6H$A$<#@~9_E#4t*OtO2)xQh>TpJkq!Rhj?Xx#E_ zO`Tct!ZnYKWsR~q@0EZL54Qt_Pkl8X$DWl@jBsW`s)>qM4~4kanSY!s-v5>{*Ig@l zq-W>eZr6>k@26MypMR}7K7MWeHf1Sf6_!1>Noi+;dopETD81{GOqruZeksx?tQ{L( zXrRaaLf!8e@b~^X&l=h%9DVZZ7JY>K)DPVVO zz&@OVkKV6h$pNCF5#|llj6}y-=E5|^ThyEKR@m1d`LG{#U|>_()ur-K1p-+p|7F^G zr+e^6-YxGKz3|C4ZifsJxFSS`zx4}{yHF32^?>`9>-y_Nn;1u~&i)~$zV%y{mzK}N z8YWC$oQA?)p10`Zac9Me`#H$!a@u^Pu8^V@JCqH{+9rrTasP`piCK^51=H%AuV!3J zv*zsB;2fPl!*|C4>d=mJ12vUr>%JUp^WYO~bNyDWJ&vWNg{ump>V&d1keN{`iLAcO zi#k*Y;o-z&e)kfg?P%#oUi>w0fE!oGd3oA+oN4`f6XkG<;1}|!H$3FYiNW{g*TcpR z3E)3s%Od)V{nDLEk%fWZ-+$KhB3%CXOs}kDC@~-F7NH6bZK%BtvPfMjoAtpsJuD2n zDXnI@WKo&~FM=3a@4!VD>>DdDkZd8GeS(9rlpT}_^4u5?>oBs6yG?KY<10?Nvs`io zwCDziW9gQU2_}13GcIv5WmlR!OEF$lyf76PX|*(lU(88ZlhvF~IJR3a(6$fBygFp@9k zGNmQsE*!M+fTWXk!pKBM^^k0x%^QLIvbLCaKDqwD<@joUxWX`Pcil60=X$X$XRTQo zPhKYmXy3T%(YD6vKFfXk@Z+|3LdSfm$*B{WlT{7JyC)u`CQfoYh^n1cRu)e<-%#Z! zn`8Et=!b8EJX>UYyole}JJ&2bq>@wJ_vWJxR;2Gc&xW2=@s{xN0Cb(^B9~vPbm+x! z?d{03?-V-5?d1GfRzz zmy(3xyG+g4JP!0~;@0we=1b*rncl_e)pAoXz$| zHDRiE>gSHJUGAFw56|96iH6w@pg=?f&Bs%nj9Ke!rN!fjx+rpTE81C<(&1ONa4 literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/b2f2.png b/demo/mask_detection/web/image/b2f2.png new file mode 100644 index 0000000000000000000000000000000000000000..5b48d035a3bad3de8745748fc39805bb04df7261 GIT binary patch literal 205470 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

    BaPYLw_GjcsIw5h2WbCyHjYqL$9p%LsQ9 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

    <6NJ#GEewmG;D*Ze#r z5Hd%-`GmU}5n{P|Lp(hdksoY`NPtHja(%g~sFOU7^(eTNODEl42rd)Gr4ss}^DQ!A z?JR%t`%L+gb^V-yj+nL#y4(B+^XL(88?{ST;r1&NY6yvYz#8s{W5>&k!BI(31Ua+? zBUW`Fn1RvVW#SMWE0>*?j2qogW?rh_Yy9%9ax}>*gH~RN1sAn04lNX#79HD&e5ZB-zavP&~5#d z(E#|dQ@7Ef0%}Wz$I?ZCPYPQ-TsaNa{KnxUF}VWS(aF3fcC$ z$5UO=bYw*s*&UQAC%qV_opkTKa0rujK_SiUg74U0{pMJIZQ)2WwYu;`O9@EG)oEO* zLeIdbI;YX5x+@Dcs)vDT2UicmDrs5y@XOo?b?XM~s_H~nHaexGz}#N7inRAGP+lVq zxW=F^yh$f$%^zbDR-3tID7u`f=#11j%E2vtv*`%zab64kCSkj*}lJZc8vh7hY;(UEhk<-3_bq zF?bFf@q}mTwm55uAl?)irAWwI5T$Z2G@Zndwyi*>!3jW)RM<%LKjUaD*B@I9IpuB> zmt>@&6vahbJBAFFj-6j{Pj-8c$7$I8J#*OgYfCVFOnn$i1@ay!Gi@gi*On5R!IssL zoJ&@ar3!kxRA%1K2<%6sSpz(KCAK%KwSz>!czBm{_7yh)#EV_mn|I_>KZXf2pg4AY zbwQ+0{W)9aH2iG#47d;mFE(t7-OtP>Xt3EoXe3O4n1M+W<*K!k;_wC4MKC^m2BDrQ z{>2V)uC8;F2lFC$Pv@k*!wGhhM^%3mAP{b7_XcS%smJ@TLnWj72c-exr=z6!bLXTZ z*ff3*M8(&of?Ha2s5Lh?lAE4B^#SwJs%~&Tyoc;SDoHw!P(2-7^w46|vs|<2P80>E zjdDHyP~jHJUaoLxbJNty5p7vhhk%~Rn}C7j57rAQ(6uN#83N6Mb9>-+3s7Q4jF8Zf zDP90_y+5`QAYWDzCbt`Fv1`Licy?Q}eseGrEc8j|{S6+f9<_hR4>oxx0K!@fi?Xb` zNSC14w6Xw{2eHzZ(Up;8rSQDF<+1nobymsarVlyJPh@ap?xK1i?ksCxqEHDp!fsZCsXFkpEl_gI#b=Q^v+6gz&uU zO%2kcPC^XKH1ct;^ev?3_b2s5tVwXCj4G2Y@bG2x?+ufQB_IsBx-KGwjs2k)nBq6& z8tG(mBKayG)mpqlVzS@sq}oUE;A2N~Nk@@k`Hi(quDOAX+UYMkkV5>Jl9xXE4E9yQ zg`&@3!V@NhLdS#+ z5{@pLcbrSk+FT1PpCP7A7v1}ovhP+-ECkD)$h;{>47Px8C0^KXdV_eZISRHaP43a; z?;WI{j46{644&>pwTXJ!HA|`{E_Bwo46d4;tJeDa5+crIxNDPh=4fuQKuuG(pEH}> z1L$Y~$Bd~zi9{i-UYUg@m^~ov7iql+>vp4B{S&15W-=u=!+UI76Zc+7Zs1o9L6yfB z;#qRz->4aypP?ove5J+$jZ3(Km;N)ei}Hw7)ajuk{@Gn-axG$Lr(g%YoUR*&ERkc? z>kk+{KD1IgYN)5Q2%@eJGV9Vu!edjC#*Fo6Pspp%_e@`tS`(2??#|2YtD#M@O!Ev!esVv@`MSB6E#sT&HekF-95AtcC zLfYPnYC9U$FO;R}cjPLu=Tpk?thxLdVtOc`^t=svwBg%DBu;_AEqAVa5R?^87kA>L z-H13P%y4m#k3J6#r*P##oMJcLeu3^nVdgX44-5R4Y!LPh4Tz0PtsPvu#kH{2ybI3N zc?`X2bw&bR4>!kj9U9N#F(etl*ጇiEi#ZS>$$DrNqXC#>S8AH61sQ33RL2FXt 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

  1. ^4i<( zL*QFiW6o9*I18r}qn}3C9U-1L1&MoJ2EXSqy7qcH`b64Vg4pRd(>=XOSF)UpgtPRF zwat$LYqz8R__@H`FXFA+?tLmikiM2g#f-zXp8;{nVnC*k&& zHp7ja#8+0;BH+>RL0<+d>fHE9y@JJ$ZN;(YxbgY9W%$Rz2(FnP#PV7%*lriPNxO?K zBb$dac=GTBPHL*aB~t^q%!Ni|pDi(}X&%3Qm2$S7Udst(n&nHx?y z$@YZ@W!qB^y-lD@T_S%Ip{7C7n0vbKl|xGJHZi=P_OB}!DWAZ@dp;wXeJuH;baY8t zG-OParcd-ND-~7Y~LA9Al zbFcZ;5hFuQyLY^y31`qOYq<0lV2L7_N1ZYW@#`*t=aQR%f7}k=`d#Q+ItO*1x(RO4 zyJpogc)#&$wEpsIL_B9hl$>ySg-PcRkM_#`W$sUW3;5P$@I3hn#{RGrc>P=8huXnP zNRoVX8RD#l7;l934LT-4rikGekgo0|29C=0NVY=V(Fxr9EbwoUXI^Dw!;7*O;W!fw z5=V^V>t*q2hQ51ojAZ{_*-1^HWJ9qHDWiD2h6w%5u_d z&$A>ph@zob3TJIh=*zxNB@UR-aL4u`d~RkKe>yOZ+xBpr*F79 z^tHqI@{}-E5=we&TQBAkK|zb-TMNtawY^03n~tDnb|v}}h6pEU?j~*;B8`v8sP5Gg z_;PA1rcWG3$5>uO8RYTwLVOZJ!~$9oJ@>N(!YnShXh^2=}p&=#`TewyPFX2RhU$9HlA4fNx3?1 zC(YgQEmxtr>{7h7Zx!Y@-AIhxfmb#@hALN{Im4t-OGyw^k?eY(O><=>+;M1b z$zf-<#5Qj9vt*WdH@7Wd;OZXOt*i8;hIH8g_EndW^-6^F)?di>Be8wVY`Cu@27hcV z@bXoNj_%fN)%I@S{ADC&4vtpd>T|?kQ)!!Mw4mnVb#_;QOrWFxn~2SONG|uc9)r;b3GzR92%--_sO)6) zjf~4WHLqL(Aq*ykjA-Z>5ultjS2ae(T2u;0bs`}hgWbn`1kszWq-$=4_krgy`?Q6N zckkNWnIXH&pCtH4;y)l_q1}h^>0fNsyZD7jy?KfH4;;XpsrC5%9u>cTza6sZn2f*o z4ks{gMhM$S(m4O=9=#`;U%@ZlB?>Q3Nk+YORv5R;(N~K&nds{54H@)_dlm3dc&O+- z)x)rSYAvcr^@T|I45dAIad-mzHV?~&hm#Zy9p!{~MVh3&kGjboY;?PDWZyV$JnQ() zOHzvtJ-TP}g<>flmx(U3C7u~>#Ge(NanhP|-v65_%PDZ}R}AR9{NQ zRvO1o{R57SJ|(rdSdmAh%=?vE)K#2<=E~2Yweo62`3{m-k4XoX5Eeqv>?4xmWKR#! zc$d%pDdI;yz|HS6Oq)XHF`aLD_&VC*T|DykY=mi!6wQmce*-+JDmrh%p&H9g_vJ#M zq#v)1e7E(O`cxMIuW&r2dDnL(JNf;mzLD8K^2VWI(QSPQJVZ(>z%c9XL+FmAQKE8( zVh{6r==mfPW^#Bjo0dJAgWXbS!W^<0OlfhPTbpD$0eEvttjp{ZXm4JGYgsG$7A{vp zD{muBwx5K48C;7_hPIio(&z>{cpfp#*`zh!M(o~y(f1v+&s5s?3}UXdT<$MQTgo-z zQJ)}I6EI#Rl=RRqMC=5c@zXEJi}$c+Xx~?nn06u5{X<3*Wmez=WJXX+k%j@G)&pa* zrBa4Kx~NUlh_R>T0$*9Us^xr>jY6XnmK45`|3}$-z{gcx+r#VJd#5+`YDt#6jVl;z zY{2v$T6ly2DL_IB@KOj#APFdibdo?I1@hqKLFmN>Q|y4L#<=0$WJ^}>(u}6h-1hBr z?ns&$jmZDQKOt!}bIZAB@4a?gTM_h3I{DP3e0Iihgx=XezCFHp2^wD7dQ#_S&vTM7 zdw%GXHdGvIgUSi<>t~Ypq2NTjiU>)-QG?Tdw&Gwr?ZjD&$lMqcWlFU3_YaW(@?3ks zZaJ9za=1?yA>3K*!M*JU-sv61ySySqBC}HJMHNZYp({!WzN)DA+ra+Og|FAzaKl0e zendX}cb2(v@}^d_EU(5J#k0}*(IzrmRTEfrQV|QmdXkv#{$i~5?lhYdr>#x9cSGKP zwad2Tg$sF*UdjZ%#%5c)No%J`SG1D#u9-E7e{X!#aM;Vo?B06G1|01B3i|pw(K_%T zdf67l)7!D>@IFKcI*SQC1c$0gnH(MXE&3zR3M{?l_=mJy$52g{+DKTQMh^+}IVb!A z3zj8u@77=7!t3usOUEXx-MtnomRd1L#c&z*{@u9$e%ep9y}bT`5DEDM_Av)Ce{e)b z)YJ4Fyv?i7(6I_^39vVg?_KD9?y6rOIQVi~rYc9w{XR+xs2p?2*BH^VC#vMpX<_PG z{p|9BNwp@da7Wq1=kjSEvSGdXDajEw5pmBZYY5J$5`P@3uf~^I2}Wwq|a9(8&D^QBe#Bq6psc$@ToWiHKL?8#BIWrSb_Lq~D z8C2;w2T*rI6Nb-PM1JsRa2)Gl{O;i`#{Q#t^++$0!5F++jPVH-=A{9QBuxw_b<8eO zu&r+vRy??eu&c#tIu47osY$df-Xd-VG?!H#MzH%`g6+bp`{}L%ZuDthywsXRE1ff{ zxG~)=;S28#;n|=A7nUk`cS@j_EV5D2Y zFXwj*-hJHl@Mp$!k9Wt%qkC@|Z8aaM@H<7rJ{ub#Ah^ubd5KjgoW8VW^wHVnw#*E# zypiO*!Gk9me6HyzvRzI3?2m%hZfIz`Xtj)zU~|yN=h=s27TDzQUAkzb{-k$ zx-XcpeCHU+=gji!P(jMh>-q(TBl~fDosn^cm$DmnjBHBH09hnJn+Hs1vkudqz9v_&om9wM(4Wh1?G+oxPM}zG*^OW8Cw%Yb-ZiwdHLJkI;pDp+SJpXk({vl&pwm6lo4``P zi4$uGXsDXC$Z{5so5BNeZUlq8DL;ir>i4dHJvn0sSFjVQQu4*@gNFz%AL6GNYl)P` zQuR_l!s&MpoZIk!-*~O#i9?@9+$wxTIG6%&oL7qa=zld2U`9 z!_T3RAeS@CLXT&4GQOCKomMn#ZQ0NIJGm=A~W>J8SJs5M0L_tEilLWhkL-bC(JdD3wTJFNI>=MauzE&y8jg;c2Mfd#v=Vy%G z`;#N|!2oSUvf!Q9*bGkOMA;M z*h-zQBuWEwVB-@$>Gz5xQnkfDe?F;RiP~u))c=0x<leu!DVM~ zOJ-i6JeP_5n3tD}*z@9LX5k5fEX&s(6WR<*j+q@W%g=P1xepO2Mm|JXD?d;wWr z9@FMz!zQT(I#Mtt=n*&+=2o36|CuCSvar0WD2efj&T2MZIn4_3N#$8zb4tnrGv~ci zP56{WDKZc1#R)eI;pNBfX^Jmsz<=HUCOXH8@7V;UFeldgFy_YgvyU{L+;(CU9HiL; zJPpR_(P)i$#9z%$R&rio&ZOcNrK5u*9Flj#{8CjDr*gXUkz-bIOMaU`B!Oq5zMpQA zp26ZkDgI5?;`7>tO+w+8@v00uZzzNf9QX|Ig(X<-Dz&7HC9v8y61li0wS8f#^Zh@h zPQhY2x1ToLh`$s+CS-8iX^Sy%U~*^aXw2FSey24lGm;46&eKh_^$p=Cmp}8frw+3w zp3>r|lN+=!?foh`?X1dw|LlbquQw`6XA$bX9I2xk39>d0-8D&pi`8K7(eDdy#F3{{ z?3vPe{?*xH&GLGG_^}zAwm;@g3?cc~$8KaiToI0wLo)(L?QHB)^-ct;W~0U*p`~EU z;38}Ni%kU0L-^X;0n4ul(E&>{jESUS9CbdVIAw7WDa04(@7#p*p&OO-)e%PH(n{FL z=RU%@`kk3^p~AbdxR&|2OP0lSCFKkb0NNdP9NW^2gFOG2KO%@_S?N5XHuG3ra>k*v zJU*APY8}(eY4yyW&7ECaKAs92bQ$@)jf6;Kku36%sP1=}iEAI;hScY-!CY2~u-T6K zp%L;%y6=6UuCpBHT$Las6Z+J4<5QAAD5t%!t z7a0~fZZ)}I-X!C{x(@5m|5;B*Y4Ze;lFX&ptPb? z?i=at2;NdRAHZyv7ytF#LBfo0Vd=Fe(q4_=>UTTw{n>ShYA0fZWFSNe z>edU}P*m#0!|#{DM>ksRnU7y@X88I-LSXtR&YITK^qq%myesC_MkUjRovm%|`)+EE zAD3Ssc%Ou9kCRpI7cE{USv!+uI629=HcY!P5u&U<>!ES~+UK{p+PK0Ha{U{CDZI_Jm#XLlJ9%S|YHcx|7v*7k z+LNgbHZfTQvp13nm#t(zcWHP*{oW9MdFvuUD0bCrq+yo0CQs{QEU#?E%<1&oMp|mv zY0sqM#&XtK!ka%PJ#R7%o07zm<;^}fC*`=aeeOviHtusP!SrMsNE^sYz>M@7e7{+L z&cI32tBQw12wg;D#5bj@c0-sauWj68!;+a0U1I! z`FbzdDPcJ|s7h%$nY}mhOI~S07QMRf?^x=s!lKGz>>G@XZ;)#H2k=*$IJk}BTNjTY z;#!ZM!S}(O^MvnhHFcOGy8TY)85nAthRe=*m>0@L4W-*!OB>>LR|4Jr?_>F*>!6E1 z@f38!4zHc%rlMFc&Rul}Sv{wCrY4;v5|{-^$(l)%Fh|%JlbAO#+a6q{q825R^5vOt#dD3{*V{b3_iW)71Vjp!%+GIl-e#8 z5gx^p5^jJ&YgOTC!SHA!UO93v9cVPuyklCyNKybpo+MZ-i$AGQTYh#gw>jkucxl21XIWEi^GF&d1)s;FaDQ2$U#1_Ce>msu7BqRspLRm_ADJ)i?BUzfF(ccn@A`-YG z1eOoex#!a>hv>C>I`(4vIXcb`{hv6$Ci6^Aw)Cc$|5+j`$1=anC6GWTq(r|WL0ADo@qpYM9ueT3kLtigkesVLI0-biyjG>R=YMcu#oy=NX z8Ja@t+S7q!D=xy*f8B@Qy4&HOwG=PuRY($y@BYqWL^=oIi*q+GDl+tqPGc1T(eoF| zHZ4SpX(wIiG{;6s8z@oJ#xQNzR!y=?vedM7`yp&?_KEh;>LM>}96LG)4*UIZyB)c+ z6Ea`n=stYo!Z*-0vI$ZtCyK0_gp&B4aoJ|0%s&G!zkLb5dC9%>T8w;g6*DXB*u3wj zPwSYZ2;%7;Le43)92pm8Df(YW(G+JYhcu^m3 z1KoFc2VU9uS71R}L|w*PXldPagA=saa(i9P$qD|+0})MZ_u4S%uuXOVO*UzE#Y8?l z1Ix4O|5+9-v6+|N${}k&A$FhaD)YQN_ujYenH0a06#2J9@mtNb&z(5sj5SU8!RLU# zt>v}hQEpC@x*C`R2{D6d%wA1StQY3fD$L2n=YYKf=T+Z;qv;i-7GDVWbw44sUW@oI z?xZuWw7P8a?Do`Qx57-~W1!qY&^1PGMahpI?x^lO0(SL%`0s(es3J{%g2Tv}Prbxu z(z`h=v5aXfA-K?%C`^P1RZ~U4CBb7$lOa$ueiIY8K$rM%T2flFhRPx*Dx7Zk$#E?q zi#*8dyhoEc8{({D{oEC=I8Vd;McA*UmCPWtoc~(H1W{-All=7=E#$954o2Gaq0yuG#zlX@aBK@SElO6t+;%t&<@bcL zE6L6Na+Qf$wGp^vA2uB&L_<2YArqwIJv!u8<48OA5tGPiDCbuR$kzr`{_ZvdzBwj%FN?2%kzP=w5FMp!on2&++#5!sepShQL>tAwsXlE z1c#cdYbfiXWGZYVIbIqHVWg@UPOQ=K&(~#Kc?N8MuO>ICTC5tASpu>)W=>{D z>l2JCJmBT+z*%Y(a^lDdqd82zV8hL2B&nn<9q^?9H${`r| z{~9X$K2ASP)W{##vKEyShV_uy3shRpY;_vnju8y^r<(F!}ndf7t!^90{EoP1IUXEI_vWA$*+3S-Q`q!nHXR+s_CVpR$WC!f#Jh=7q&{{S3 zN4z9-kf1xCr_nreFZzd$p(3zY&>(Zm&4;yc&qkb2vIrnBzF)J7&PmZOsqtcjk0=qn zs9AN~kedeEDTZviqV)X4;CCmgz zGp0yD6)I+zGh3SF#K4(|UGG6)^B!Ps12pg5P>dIWKYtJML(hqVRwm|y8JSP%qQ!&> zKV8dGC@e3Ak$rVGx_UnDXdOx(f2AA0ee_ZG_;dKl@XpJBer$O;Jf-F98}}V~%0%0E zdtTa$$o8<)f_Ba9S^d_6QuIl&ODOML%YZtBFIx$u711|ruP*sJ^#5#&-p!$ zf#1-v`6GhMsf+r~b7kE2`wtt+P!+KvPf#W(m-3rIL?T+Y{KfJTI&O*8GHTBvT6DNA zG6oEr}NqmFXE9Z@c614BCF`LCJGBq z2{Y56VPra3jV$DvH?kbY2RQ}g)M ztn+H+cIaQ*_PJuhX)$!ec;KQDMUp0K8=ik%z?_IYcoU5IGj>Ftp1aa_+eSLoc|0>q z2bITrOIemkPi`I0wm%Xr)gd4ws46`eeM&QktUykLp!0StK394?ziwF9k%*z#mq4&5WfhC^8q>xG{7kNFdRafv zP{lgyc`_&j;t{6N5IAmVJ|r@xp#fX!CxbD)=!aQHfh`xgPnzw%SO;ybOXA>ALGE_9fa3@iqluziwE9eO_x`N|NQ2F|90M?#s`AL z335CAB)FuM+S`EX)2!0jp#l0E?R{PZ!^>W|E^P0m@ATU0OH&6b%F~7v>nJ;NysLWu zC~wADiRAnH$@i)tO-I5SiCM~3ET<|yXeW#AHY}s}uSyxi_wU2rxjx8a^mJSUO1fpC z9jsdOnHOj-79_{YR6UZ*aLOO1hcP=A#3{1r*`b)qrknt9=9wSs59bxJcMUBq22z_}77e5>7=6K9UwLyummk-E3$YP8Q?>rYQF` z#W-Bisbs^1rO8WN92JxgzPo+^b89oyP21tR>wD0CwGqZgdj*4v zOy|>a0QOba!JBA=zJCPDXBPk`&xii6w~_kf8Th{WTi}ycBtCwNj@Bqd*vwKg6Dmg% z{}gP%jyV?}SbqOY&$G1~ae2qb*F9Q((HxlFh$%jljkaLOh|&YR{6z6!-6Y7KN~@Gn zR4$Pzk(`-bEn#eatua2lAoHC|M^F`lUY8l>*Ev7}7N*Znn}gqnW?c+j-gaIjj4nfM zKtm~pIL6Hx+gPZ*FvA|0NsEX&d>#nu$qWtT3f)cL%Vp8|5$sCh4;R-X8cSh+M8|WS zq%7)3Ptnr4p`E_YQQFuSefDZBt9Txd4>Ms=c|d0)D>PfBUK> zRtbMBGrxiR)N#7LvljgNlXqV0dL`<4NDKi?kgltmZgHA(pF2X|FPsHz?oFbmxB@+W zqcHzA8*e|q1AT4lpk4oYeEA+iiAU*V6%2Fd)uV4TiBZnDteFTCyx8uL(d;%c@@Er! zW_!j3PPW<5)!K$xy(Q2T11YyTyY>xfIz7$l+*r*gbJliZu)O9$xW2v`?sG3{IfD?< zru;S8K}yM7XX1l@zL=@fG$#e~`2Vz8JAA)wMSmq3$dH;97GTf=5*+;rIA@Y|5BSg@ zY(A{$^h3@#6qY*&Ng*#gv|_=CYwL?8CQcD$CkBV4q`HLPoz=P~6)Z!6Pz+JLj==rf zAf0ovmF@oCgJ9RJf&J}20iV4Kin$I(&2_MCewM6Et@W{c9s%YxK)LP$U_UuoPi%mE z+ZAwM^N=;)>D`?$&w5%Eze3DEF(;2!5r1jHo(pa{uzbTK&olmDe)-b%>l&__jo~&S zAdN~G$A8cq3#EVJI%#S-Q*fn zNfxRepaU&cf4M)VYWLl8Vnex_izTRw8H{fT-bN=BD4qR;m)sJNRN~hbnsVb z3!CUoxS@@54Zt$4jf^9_Bu+7{n2N07$18lT&oJF+k<;4}8~&=sfbsowg}v&>Sb zY78f#R2M-a{KNRH)!tDc;{#7k{-apIw%%W}3BLlmSqCbm3;Gg<{gxurCKQ1iAN5_LW{lsG2 zxISo^vT?d%6rd3{Ck(kcFFLy&=h8Md;x=leJo}#C%{RPTkJ!UT&iFqikErT z=Z;gL`<)nhr32dLAi0J%dX#Aq-w1WMv8yf)n`CBnUro>~k%NSG+W>0QrF3kK4}ph2 z=E4#E*uSIqR&HL{96;mo8+QKc$tT&}H{WK);-fhNvUgw?_I_nOTEctsQf5;SKJbBN z)lNh|_iv0`=@(T#qN}gO7T}G}31t)>Kf_?uuq%g?qxet%jdXVIBauAIH~czh0fX+j zR&?F4JPTQfeAoJ!Hk|!RBsac-bjhE@262$Dto~s)iRBU6W~*pTK7x~cdJf0aFWe_o zg^ZJEGX|l)_zQw7GwHP&q_%woW7|LIZ}aGHA$onf=;wdX z+$l%vu<#^&Wu8kcUky2NPraDJMvJ~5}=$IN2wA5|^WL8hyg zpuEqXc~6NQU)mML+WD}0z6UHrFSGoT8)>40V^W&K%#X;3$OS*ilWj4pe?F>X`w(3N zJ=pFT6U+ypkr@8kp0>;-zn~HqZ9pcbW~y39_^tCQzbcN`8~G~+hAr1~V`39VN#9k~ z0Ov0JIYN;SBS@tB$Qy7VoZc&FjpkPYhxnXBQYy6p z(FkV+`vtvHd3bO4cVR5S?201Hjz%(nvstb3Uh?_v^cl0}PhaGWEt^L-AUgc-9bc|B zn;!09O_ii0hm;3ji2Fl0?cSppnsW#wvzJE(Bg<^zuB4{XhF8MQ=&a#gN=s)w4D%`4uu;t@X*lJ9Ke7Ih&wIw8#L&#D;U<%hC?Qo|-aOK#sNPls_ooRLeU_NU-k;wz6Nb@W$^;({mV;F&wp=4U(3 zCFD^#-qqC~>%)tmeGAQfTOk)aCkj;Z@Mj?gRI{9R{>pjq^MOGM?WHPrWfvJSm#>nP zaVJWbFN-R5ci%FlP>*e~@-qL(F!PTFwM1Xa?}PG>H?3l1X5=$H6(m{^8#f&iGrkq_ zk9i9RCz+K|MZedHN;IdK>lLMU&WD=>*AyxsB~oDu3ASY-Ii*8|5OPxtB&-yufQ<__ zn>1*H^RgsS3+J!@7(~%!=nRj10ykUEUh2m66;2fME`<~PSl1T;do_f=%u(=WuO{Gh z4oo)l=3kFTM43qR3p}&UvTBzsF;VKf6~_ktg5kKBV=rD; z1!UJ9MedTcR~vzimc)^=rg9DtO6cXmGN)B*QjuX>nMr@!9erbY!eq5yt2diiz)Bd{ zNcrr1^d7iREk!IGn|ba{WOTke!znIstB$uh*+eLd*6MG6-#UXaudFf0ArkTN_OjzyihDf>6Z;Z05 z%V;amo+QJNn66=ZtaNGJE5=f!R5Z4xam3uY;}PY7^?C-V$+R~N(s)N>`zQIFrPm9%+rv>D9E)qvW%c@Oik!o+FCJi3PHg;{_+t60~d|`lG^9 zutn7gYsGSlI`iwe&79Vc?9@~$^Qx4wtV+i6x-w;`nLNgLub7sTXfws{V{U*kMOWCE zs5|H=C!+tZAF4R=1M=O;S?8?!Z4&-9kPsaW6#*x0q6h|)c6{^AVWGG@UI{UlAt5X{ zZ8OWFhE$x|XvgoC2k`h%5?|joii>BIkyf+|;ojJ%;yO-QDF+`l`|fupF0TZuNS@D+PKGIiq0D&)1Sfp z^In4fd=6aYjO#HJ*#MvGWNd4HOpM{>f;^W{#*q-JRh50~v!&((+_&dDAbnu~@^mkh z;?nNd?s&k@{!~nG-wykJ6|=AWOeCF3AyTg}N5Ev!K+@>)#oQ6qh#U1D&WFg12xDrc z-H--3CqWvewLYZFtjEo-*QWDkD4q_}Cb~d49M`zzmZ4YJf>J3Xbex7t3ziCy*(sJu ziIJ@EX;!4@c}vx3ee!VM(H4}NUNIP~>uXgoNs-TsS6c1SS(QJN^W9mguWU`g>9{VM zj-fMMaNXBjD;l+;E|FU9QzPBVgt=vtD!_6J6fA$!=5`7gV5uMZKa_#y=JD91ke4}L zS3XYAKB@Q1%wcCSCsmObI)AqBt%)QYAC^lhTSu@}=Oo%CI{8s_A8|v%0B!y%HBPtG zjA{?L8;Ll&IWFXp8Iet3m~y&=Yzg5*y-BQWw+UXgOXt|JyevaDM(229Uj#$L^avAv zC|=7lM0rYx1CgPn1u2mfx6n^wcl!-k+Q3Km978DjHp29JU-%6i z@Bb%0YF;l07xX+XM`V>%a`o9m;N#kr&!XIWItlkRq+e&_6B2HoRpdMiyybLu5qK28 z_^Hh&d{&naz8EV7PAhs7X?s7I*C{8-XxPcu*E?f~(>hcgEnZ~vzPTtyiX zn2B)6gRURHNWVMA&4-Wna&WF4qq1s^S`kYtAuQ1eB^TT&H&m8Y;YM1CKRQ!4C2j*! zB-m+E0Lexh!u=yi_Qc3{cfe@nRNy))@7(cO>8>SDvE7MI-ZyLGML_Yfj8jH6*SgBh z3j1fwGDl4JkV&;m(CtiClH?L-bROEPhRmz|OiA-gK1}m$#;(D=eBOIv&xkWP!v`(g z54l!`QR|5)`5hcnS#M!bTu$tLdK0`2C6>{$an>~6#wiQHED0Mg379NpDuMDU5es&C z6{;$msw+FcWu8qcTq$hBMdF~6;AnV+R=WlxYS1znLI7>(6Zw@SdgKf%f!&oE3B*uv zRPI>Nk(-dPia#zZ#%CMcXxtx0Pu#EqSWykNWFc-}Rf2eM1aFL*B4a<8iOY>A8@Qw# zkKrFzREg7kxzUBaAq%aXUFE>0_LvpTGRKGj43u-&%*GPXnG#^rqL=cTX1d0u;8D88 zCQ>xZ$nPKEhf6BxOT=9B0#ZmPtHX=gQgn-au0wC^ah$pMBG_3G_6|NRps}7IHIY45 zXI5ll{=0Asrju~Jvik;+k>ghUj%QE8f?BK9{HL#6jHPu1DvC3J0$Fnt8UIfqZ$r0+ z_tEEPk^a%Mn@mgx;|pmTP09u$l&yxTP(k@7N0q7B6?Cznm0 zR{=)CX*y+SgnE*09SUcXFf66tJla8z+YVQC5h)IfhDIlt;*cGvmjdLpXc$AnZq0!K zC4@M^ZBC<|&YI|)U4+GVy z|9hMHY|HDDglkPLo#%mD-6*G{x_WqOwlZ5RLRD#v~2R9Bxm zXM-cr4wF~&=nP%T2u!;<&XYI6t!GYMk>DT!V9`TR4-{p1%@kVWRspkJqN$Uc5zfQ1 zkbnsHucMQMb8>S@q0a2dAuLv)0?sTDOJ)VS&Bkl*`0D87sMze*2n$~AHCBxvX1zMb ztu2gno|R;ieQq<;=sV4YZ*1(xH+FO0APwb>ZqA7)BAI+v)wPWzJZ=YmHe$yhuP~A< z!Aa_*{>PL_g9~5zU<55;gWO{s5xUlWBWY}EOIX@n%HTv^9;SFO7-AM{h-#a-HeN#M zaAIH7Iqx=C@?9hpEZGpTs!|dR*PS#pde5Z`d;jrd4?MPd)GP;v$wFUo`Z~CAnbnSo zH_^K1X~CevRR?cwMwD|XMAJLcd_Zv zAA|>_>3JLmhM5SFq{_U*k`HYmrBO`6-Q2$eNq(C#o~Q0c9qHm^$SU09j4eF$zzHDi za&>r zPykCnw7){6c1iQ-f+0&P*zROzrNs!~lU3y*-cbbH6`1|#6-YM^K=zXtPm8qs^G~4c z_#zxT|4*mPd+;WHQET}#bCZVD8a>#@?rAC_nZenloQBgmsY8r08yS{G&}j370urWu z*nr6Xus^t@2h}`9UG76_S0AR|zIecVbTmu2&B<;WUO?~?AEc60IhnR+X{w_rtzHx{tN|(j(x*C?@Y2= zO@DtQgc_$}_K?48&@m))qHMIvC8Li(#ji+7px!O$lOO+J$YMloa9c$~JlU+ear)@q zt#?=UZ#eE6E@Dc;N}bR>={ALov)?tlp{4tcz%pFAkJGKuCI8=>m!mvz5?RM1(80{Olw6#dZ?#kOYrU8 zf7JQtADgWba%w5cX1#S|NtxatD$#f;J$WYKQmZ13_st9>dlxz+ygnf2DY_=;hxk8} zO$=Yv^D6vE2}lk(QS0qiCcAoO)^B5}uRN>GvYI(~WL@TgP;v;$&YTH!gb-ZU z4Cl;Z6prTA8F7!+$r|LzmOE$ua^7CHb9glpo+z>) zSZ?bN-)HB-LKh)LQ*e&NuxFNM!I}Fa*Qk>ln?410V^VDyD*(+4$L1%Oz?yl}q*;D% zT#iP_D);2io~N}m6D#T!jF9O)%1uVh%3+U3%~=-1J~DHr{Pf|lj8=l_GWphme~2v0 ziVu=lWzxENecZQn^G#-xCO`xKy>B3e^_NtTkSi#mo%`3rahz3c$3?YH{OFS~e)$gP z*7ga1FyOGIrdN0kH696@4$&wL$w>+$9fd6w4C>YOm9D;_$`fW(AH25MZV#n2$Jx`1 zgZ~|DM$(vu8S?`uc2zpI?EtFC!-^3!KhU*P1nDL05<>|}GII}j=N2zjkCW9dBbe)9kdbqsWK0hh9g?>|)v)b)vCj>fHC_4q)~l2HLT_2)sEd zGLJkzf6OD|X$zYn8ly#oh86Bp;}E$!iG?!=CS6SM=!q_vUzmoQH;>@4_K<+zR>(KY z8c12%orivF-I)1WA6eW0JT*@E>Ggx{NgNCXEyuD?6=YipvKGuRa_WP_DJC*-5%K|V zn&n1U+(JDg97WhOlQ85U))y~3V|};%4AH_UWzuF&K0>73!uu-u0nP-ku)7MQnxIc! zv3EDNrp|79gA~-TAr5m_>3TVC2ge@_hd}TWF__ zg|oa*n>pMsn8MRg3*h%WE@++$_Q^u9Em&>f`PMkDCm;H;?ZMoGgBjM48khB@ zXJ|vy;Y^7nn`lksb8H<^%bkb~A^e$Q_-rz+CuslF&NLQHH=4t;ZWY9d?#4REMknG) z>lS#%jnBrbD!B%oq35u&?)P|e-}g{KRy!eCJ=c5?DZfWPaAi)Fg6^<}#?o5U>D@Te z_lcO<{q6I=g`LMAz=nOBamsY-_68z?nqBA}5%`yFPM^c4n$d{3O%A_BwZ0H;(oyvO z3r`s2RX>QU9e8nn1Nyc9tF5;EpgYWdBN%r_i;m)^yLVw=&Vea6*f>k5s1nu@2@PS@ zYj-2rJdEh}4mAAuT-a*-*vRgL+)0+TGD9RM9;+dmesqFY>h6IIDVUyR4tR>pM#9um zD#I9B@bz=aXHS`>eH#38J!T!k64FNpU>xO@nn`$iYoK{OPz*NKU73SD zctA1L9)seuq59ivptcObF~1zL%Rz#kM(<<0k!Xv-Im;`emod(_$wS(M1_EVe7)T{z zik7xoK27Ap@3F@32~OnfhVU$cxQxH*kYv)@gK&AB7!T);H*%PhR=qF>T3-7b*c83r zY!Y>G_Gb$#2R6C03RyQjCa@gG5S(Vu^xzlse7J0`mln#vJA*09_suTL9Xm5m^h#ra zxr_qg@Z95s$pa%i7{g81uoM4P^hx`uc23I8cQ8pAuUQ$}OhRz^IXs+ZSGSH=kqMS@ zY|9&yb5O%r7nzh5Md!^VifD`SKi3Oyu>(;qO|@loI1@f*3AZd2K{6_ns@BP4QUb7W zftp`)9#+qO7K!u&q^zs3cK7#$x8cmB`nfLQ0WV%{cJYz~M&r#mI`k-fN*zv~aUue) zIat5DmX32XK7Z={=p1<&)q!)!+WN_(3E-vOoHvg5XDFt@hdnS0c-Z9eW;fmjD&YLq z?yo_O81Q&b5dAQ!n$S{cg(vw968Jx1G|)*_a&WQ{$fo|ytQG&peOIAq9^Vcn;K1;^ zEwDEf!6cMa`}t+)eR>ayYHA6IWa`l9X0-^pS3@d{rlqe0=an5v4u>6_WyiGE%uL17 zMRoJ$ALlWd(4C(^t+PY*IFP0jiab0aM58wj&E`V=t*0Xvj=)92A9Sg(b;arVD;Vqy z!>mHWRuZr@8ymx$I*QMkj_A9sX#3-b0%>r;cGeal(G`VzZt=LgA#PJ4brUA!utb9H zB;!H*SedF{&ouM6W!OZ9J-fNYE-5&g3c~4iP8`Fn6pStw7QB4X%@tmA3gU%AmOG!~ zDf=7}XRcQ><6CpIO4d<0TvsjV{^LypC@108=qbJ4%^5WvnSff>33%ZNx1_^e!l85$ zU`Yzz-!!M5Bq28~zTf^%K|6dxoqzbIr#`?-?s}{V5X6$`M5(MRRWjG&vE?EQE&+O0 z9ww*vYK)ds&Rk135FiD`l8APjm`!N?C~c}fZ`^h$5`p6cej0*!MvQS-&1sytFWfi{ zXbt@v?yj@Y7kXDvjd56RXxYU~7BxDbQoF0;hv*%-A2TW+KxgnVQUV(3#VU)QOdCQ^ z=nbgp5%Iohfs4^le!Z~xf;d673Xiz|&Giy5S9Lk9s5ob0t|WuBx#cAh_pB*f3r6=) zQM9Z`m7RizcB#_QIfc#o%7($I#U?KJmUie6lO%G)$+}XdrxF(=Vy*m~V62UO(=( zc%sIsg?SA)hwBIWG5zK<(fH73cp-o&#oNC40ceh5=!0R*fBqVbt~((0ZrleqXE;id z8%e&AcX=5`-|9in+Q;E0+duIB5y6JQQ_Up{s|AK&+60P}nJlX4Y-<`itDYFlq9etW z6e;6$F^a7Ks%oJSohsQYa8-PAY4e zX#8Y3#V4*TnP8KN5P|h5&xBGlP}N7)SmZL2?vhgtH!H^tUWo zX|7jV-bHztbviy%EHjyC958TFQT}+hw%iXs$vCEdOZej*LwoT0-XCC5T_u_a*J1Oq zbtv*$aQnmNr{Hzoz(J8<7&dsCN^sEWq7df%h2KPP_%A36d=A|M&tl(EU`hQVePDFo zhmXF7IV=xd9Kj>~aGzR%_`Vj@NlVUlE|{??O$+LKC43U+EU;^eu-M{~2}ybD zz3|9BQRVGdiYjP#+IsSraBONPLysSHJrVO7c2(Zh<9=HPYTV1H~PC|FZUZ{^RFH+w9!^4h`zkWNd=R<=a&zUx*njhBY3(A>Gqw_)*m1-_M>O}C(gFN?Sxha=W1;pYzv$SX(4g`@x7^A z3Q62r4uYa{I}NyWo1l~Cm29bZgYaE6BfRLb%hu`rR#l}UUGdX`99Y@)>%t`>*rMj_ zu?%EZwVe4znd$~s$l6Y>HP6LQYa5gt*1Q~ywSH<7uEUfFgXLQD@y;j(&^ud%nev zTC1nElMEHboB}U#j8FD3`GArOt1p1dH4_fG0$W;|P|Ag}XH~za?}Q*rc5>coxV7qJ ziF(kh`nJ}jGdeAUt_A&fW}v3fQ+!64&|i|}%a7Md*sR;)8$Ycj$-j;Ygun{{-#_wM zl(4Br#jgc(_WB_?HlVdy%YNf_GZ;ygve;MufG-8`aJ^JM?p%{=f zvI4565Jbb&6*Fpz$Ci`x;i$-=lZCYj!Crm;=W)UpFM#OEd1n-Noc$T;g7178F+G*^ zy&i)R=1C35WbmA4gKV^bDVvVCi;zdijf6~oc+w{7*S23}`@@X3DAZ`&;$mP6tFwrZ zFj3!a7MMoJrWhe$<}xyx4#k|P7tg=GLd>Q416o*4(F!X7@e8NM%mN8D>lL}EIBTYj zS=hSsAXb96NvmS|#NO_t7{5C{1yaxYh!}EB56VG1F;FJ{7UH{lIDl{toi5?Of1#cLBHXW4p`d&fHjDF*eI?UdbCjIX-~OzzE;)?h0IUQ7M59 z39k+(FdPm*a*r4ZJHhgZ<@!lD=;VZ-C)d46oBTL!@oMaMG@*qqr#yD{-<>n|85$d+ zTO?@ejlkV<2jVr?G#P4MWnh*E!LOLNX!7YuydQ~2zj;5mo>eQP%Y3d_O&}R7kLsyG z^waT<48KHwe@O(^s*9|d0Tr|!M@cvSYa_eEbmRWZ=9q{G3TU26^TK)cOxQ(*3_V?+ z9g(+MV*9WMb>5R94d}cYmCi3s7^)cAJHL$M$^Ko@EyG&@3v9Lp~u|Wybqoa#rcI!qZGs8}rG_&&IW=`#ttV)Q6qJ)U% zV&v5pZ29PapeM+}le@O!#>--<-Y`r;0*Y=I3R8ud#jrd0Qr zRISE7<$by3E@oDPN&Wyp@$OJ`Y&Ytb^J3;!&y96iaRGN{es*M~np88ZA}8aB@)9oo zJsHpBiTL~*E4=*1*(GQv-}3A4kjW`m1V$BkZC*YakHF+j0U}xzu}HSLsWTH6dMItM za!=zzU7)x&o5+D>DJvca=nvsns{)u2aN;{#Bly$)VMsHQlA4MOpEs3W2D?bciM7s#uEOQ0MX&yCR8-Eu`!5VOops9XjwLJpd>2onL7Pa~^Kt|Z zI(GEJcfR-btNlK_U{k$TF_nvdIbe5MLyA<74W+NePp+$82wRVi3U3)HusFhd`^c8N zkVG66b#-7)1&0?#*Hs;n(7#Z^iM`5gv50Fh^nN##QV)l?%vI#kwblW7Mn#n?;z{b| zd()-iR|c+&PbWojtXoW)%k+!Uzc`eW2;QfyEoCtiO}GR6UPAl3aLFfk!@IN&;rEWi zf9iCgGl^}FuTLG@eSqYYJa*DvJhHE6I^?D#qZ=zpC6_^CnrKMT3GLVjLZusRDMkj# zR_V!VOHFIQrxbDKvxrXBSdtUS()27l%|5mMd#ZSziBF&Tl{-T$*Go4iozWCoNpOlC z=B|gwYpGUI03usVfNC@^RW`*HkDCJBqA$+B0m_ z6Ko%ZoJ^F#pvcTfxTL&{Yu!c{6p-u>Yy@1GE9IYuDWHpgj`n{6t&wTjcjR5QkGjHL!gcb3)U zhXk^W!WdfRlq@c?I$_V8g(Uf()oT_b_*@&%l0?<~Vw?NYB9-k9FHXL>yNvKt*^G1Q z5q^6RHd4Z&!4A~VuY>Jv6$8!`)MN{Ra~<-@UNoL_Dn<@=Lm~wne6I_o=g!9Q9edyi zNdk#!MqbTi+JL*R99=K&fqU&CsIe4+JKNwNCX1eqD>4sO$nrQXIAaBqOp`0j467eu zOz(526N>{K>YZD147I{@bd0enTPJg>z$OhKEAScqHxCcJB(q|d`GRRqX_f!eR1sEi z+9xX*fzMuQZ3zick&c<|y?fm~v6UV(5zrpbPDAp{ClGbyn497Wt|Hk&NBYEeeacDYv28<8X1KBVov&ha z{b3kB1+h(?NHoWh^w?GOkmjm%?NuD!tA0Pz}CY1#HESHYZfkzW;v9|8O4!dWaSTU6eI92Th?y!p4_ZJ zqB50`7K&6emLH_RByvS&6}>QIag$GY(d<+5-T&|ZnfUYpg2+jsnW7!FtE>{{0uR`` z$3C3ao%m4KIh&Y-AYs7OEt_z7=2cB1d~BriT09G!NzB_JlM-pRim=5P-K2%qc(13| zj$leB*V?e?O0ujS-=DoCgae|x%Rnog^7TH(V_tZlcdGFu@|a`G@=3w-*-^7$x|K8@ z`uu42ne;Kd_B65JVeOR>Ci7b&IRqts%m3?s0hEMiK5N#fTt&wh|HC`JrQzIpkcR`HYp(29IJlNOw_zpPhibdgydqxS0 z5kT4>g_2SrccxKv_B0p->-(SH0pH>(n2H2HAuc;OcZ&nEo0oe^1Ue#CaE*5m^On|_ zj(R#;-3@1<;@U;DrX=v2hp?-+MGp~bHq*A;5^vd35-c-i)C?2&roE(aiY{}k5z1=y z<^Hy$@}_Gy!bbdvBxWd2>=6Zw{r?uIsRVvJ11L%6nBA8$f@~J_q6XYIxM&4spOW~`>}Kw7^P+4~ zV3M{v$)Xz8Eb!yK-W1;IRgq!^$Q`&M7#%`|!doR&eCyRN2$Lvrjx(+d)C`4kVsa1p zSh-a`Gt5|cHj#u>QwO7d7Qy?7Xg;VSThZez!v0_>nVU)s5!e{!3@U1ILbU~vj##(A zLk%Bn-HqO|OX&8Cu{r$|uRrGiK%~0D!$4VeE`Tr#P^wQ1$&^JUN0fJxkq=!$y0FB1 z9&Px4qiaM&&l#Vhd+R?K7FS(|k=TaZJ;f%*<1mJtshKYFwdFwxsoI1vDn>^Xo{leI z0ZG-~pFNCe%3NS|DfV9el!$(pp3;B-31nAG7v?n9esx*RJZ$*C4M;91hAXb&;Mdkc zB|lgnA=^*ti8qwQrWqJ5(I7=a7;P|6JeWlDSJrYmCv-owgS_n+>d*jZJ>6JGCXGf0 zLn0xJwhVA0O8Cg4ClMse8o{zv(_ufm0X%reD+c3#_++Asc)S&s)`bj1j8FnEwBfC( zZr-Wm<0&sA(~6vVKPM06@ej_MN8)W%x(2grcdUX-w=*v?$0if9iO0n9Xjbz|v$KAe zd~Qx`o|y=e9sSPrkqi6cg@+pCR;?AvjZf7~qKo;X@rp7WK8-BH%G1H#+lJcX%~;TX z7)hH8el5W)0ZnHL8Q9cgGsX^VWT3N=nMN^^#JUTsa9M*3Y+XNQcqRO$HEETNPBi~o zS4gi}@xDSyD+>hB;J+eaut#RKgpi3mEcHRpvcid;I8svfH-Gbb98##lfdtPT#hhWFNe zgpPYZz!(2`JBDTqSnunKA{~z6gja4^+j-d&S5&nxg56O?LdTHU7J+X@1z0Q&rPd9{ zJ*Oe@_%|I5iGmMYa8t}=Qe?h6BYxK&{c$lbPg*RnG zG8iWpTtU&Y21s489NAS^O3l^2S!oM1kEnbkdmaW3=!6jb~4Eo>HS z9LXQen{TnRtvYW}5;3cG~?v` ziHy(PPnLNmxsfM(R-@Rp8YA%!5l?)Cfcpw;?^z2@d&}dbjshSiyO$=LsD|sRfQv`a z-y=9a2R*@8VRzaD<#A_58SsXyW21jYseA_A1DSK(VzOXHDS_M~;jZxDnvbo-*2En6 zVlKL-yD+V%5&!zZBe?!Ix8P9Eak{q5KHeYNoxJB{{e$0rP+Wfg%(#)#7>Cg9iB5B% zb9A)4#CaX+>`ZbxM7Nbm&q|r+$;^8&MHWM&=jqy;#Q6h%5P9h%55A3~-`iuq1R2o_X8Kpo?eaB&VbY-USs1teFWtnu4v=jm|&5k4Ul)#riY>(S2ct z{u7jaJF7wmr6ZA2?>UV<(`fH$2{k9KrI;Rj;UrZ)FG2P^IySZFiQl~r!x}tWnD{8a zR5ZVA)SNV~mlcenvri#?Kn_AMMRJ!VM6DTmODe3%@7ei$Hd%=j4EGiC0n>&M?n}uk zJbEmK_sN2;97*G%Y6sr!h~=#Z?wm4A^OEQFXb|%QMe$+gMRzN~a?_gm)x{@aj?($d z=@tlx%qhJ9r%itod%J#(I?wHx-ndzu?yW;iz;>H`qAweh8w1C4-PY|Yq$d@98u|76 zyVv2P)^!3AaI{`Q{(G+^Sh~b#xBw5u-p90hiwJ_3_@`Mb-1c|TamZ3W`=mLd9o9j< z{8)G7w4UjB^oINJ#1}fycl;QRqS^A1htvC9sspwpJ^M7BNMo>V(~x{*8A_iuSZvi= zl-HFZka8jrbt2_7tn*6EG}>R>OqU&lzN=sKfkTjp>B4o2 zqDxR9&ZxZ*@o=oNxZjPzTi!%uSD)~^M}N8lF0%A%a3%(w3B(Vy!(2TVa~CZ8R|a+W|KKm=h#Fwq8#jaibh@#0o%VNuN_9WsZ4iYL31xPGA~yB}sI;Sbh3goMzDl zz^*`5tqs&HZCt__lFtj8)fyH^&@Wb~VTgHEEMY?$G3$!6Z<`tXjxmq3p2gc3&7p2S zyB&O$D#W4-Gb#I!WRO*2tF>(te_~wlIh(jx8CNJ&m1&5(`qh8A?nA>wl(yg;vl-EXmpUWm0fQdVoRzo zc|z>Jr?z@2)s37?Q&&G;g3nH{fm-^}*?&P_x&AIGUM;pI#J-+PZDJE*pX}4-gE3gk z4*kuYQG8*RALrD&u)4{EZR1(%C+BWxe303ogbo&OAKuR`A|_(^QAY+rC&iSbnf;tL z(!cCt@AC6%MMsTtSg3}^3W9cd7g-Uz$0;HydHSQshBF1 z?Mr~h7|dm8KrIpG`F^D^G;r`3TpO;$r*Izra@k!YkeKgI`{E2^5zL&+3C*lXqXpw{lI3*%(bYX_Yi4bM{Q`najC`-tdpx}I)o@U*-n z=H&^sl&R!p^w-n^eyNTuN~&%SbegOyt*VHImr|WJA9RuJ|Cr~COGr(f$Dkv z%D0lx9KZk4M)W0B{Om{$_i|xFj`ac#Q$d)DkRZ->Tp=^b6LTqt)+pWRg~M4)>ghjm zwUEI)Ziu+hk{rZvvR_j`;Qiq|dzO_jk)D*I`FiyA_lk+4GM%0N$45_uuP7b7Xn{tO zo84>$Exa#=bJ7I^SJkFJ+3nWc<8n`X&XTX?aua7^>(Huoau{cwe&P){WA>l$>~?|; z$ADW-|84i$$N$&(*jNrfzfHx18zoDk&VK&7zK@3328CjI#_}xOh?e(hp4N@gB+mTU zYN$8Vpb((wNO97MHfKIxgbN-Y^R(=q6%I@y5@7~?;bQSVPIh6k4C(dfvh4oI#pGok z6JaN6Pd)*3_XH*jleqG!Zz0v_L^D<4cKZ-HG6?Bd5>m(`Vsw>x@ryGbM|AHfLrhMb zF#Nyq!PRS(p?kLr}B!Xra+}AY0P`ahl4Y; zwoj5mlhc9G@wAvO(o|Paf|*v#?O27H{9-ui%(UcsT~ywLd@vu5lGn=RW`pHM&8L#^ z5;`Z?ad_?4x0shMheLzT9i1ObCe!1*5O6Wi!oRWOA?!N%5V+=rbO_1J^1~1B@5$j; zw-4ax;9C`GFKXrBSx_GLWT_@3CmT^y&*$VO;A&z}JnKUt!aS?X!S*v*%L|ZFD5SFU zCP+D%F|(6W(+cyz4&jCQ1Xz`S2$dk6%Ye$-eoK6^7!AaKS19I6B;MfT)Z$W_cfiRm zgvu_2GSe^AcarXcAo%eA@m_9TzRIxp$HBX8__5f1N^;t0i(90dlj$^SKerUQH@Xn) z3?mcJ?z2?9=xRoR+Z7a2So~O={xBo39NvC{kz|@mnc}9%KC`R6#)4;MO%8+@JhU-5 zr^nGXD;kzwIF8FOGH9Y2VrbZSZu2Bza zh`&hRGwZ5X>pG`4ctdxg^4bvgYudf|&WQmuJ~M<{7YA{ETMidK%JAlFj}A^!)UZY5 zU@>?1R0dt2Az0whBtl<0R=~@ny!X3NbC>0iz_i>cvFe5KuMFpwPa$@bhwbzp{Hi;S z&!5MP;B^)63{GLYl0u|@GsbdzAgd>}Pk1%$G~P@?isCL>>tAK>;!cW_?6O4}W6mFs zq${L2VrqxyO)2qc05xF`=C8(?*Dc@)MIZjay!L$dyLS#VU^9F-p7|BUYny+A&hV%B zqP>oNWedzU_y{^76~~pSNDH%*;c`@zQ&5m{3u&IMk50tMG%{CLk7-a@3K zC*1VP_}7VBhT^F#pz<0Pg%GMGyNd-3UPt!Ag;6yQE-g4$X+w-85tjYv3&w<`aa$^Y zw3HJ@9`U8omnNe$#KE?TRf}*U=jZ%x78et)u!W;(`wJ@ooJXv(IoDHjH(o)=@laW8#J0~kh#>zCu?I99DGODc3rna zt|SNvZ0q{=+_x(I)~Ysr<>C$&!#z79N>FV+2^)q~v5>^Dq~i7ATG&yxFnHdcxK%9N z!d@^ouC;w~q5_vd=65ro@uNk*xWl2lfwb8B$i9-XlFEOvuEh5;8MnNf!5O|hzPT-m z-ydSJUM7q-kA&^nFp=Zz>);zg>bLA-o$ukBgnTI`Ffq&oY7maZ9gKOx7yyl+|j{^6eL@_cn z&SK81@c7}zHM5pz*NBIVyfe(_=G9d8zEi_!bXO{YoaNiKd4piPHTnbXv4Qjp?qA*evO(~z@l z59Yt~l*d{T!3=XUD4l^SXFv*EJ0&mP2SsI5&OqbqAg5*^A9BKfT0o2vrV=$KqSQ+G zOUrFxyhVaN$1hOUQLe<8350_vf-6%xiKChHWU*sC?92!RV|B9lB2|= zCTs^SsYyY@`u+4OF6L&@N=lCFRPZZ6L%Bo}ao#b-K0u7CWsr(a93iB-0e=|wJ0Ip5 zknjf2l=Gw=TczaBgBlmJ!y}}cDyyHJPIOps(C4t5et0{({%Ub#5wo&DE{Q~%xt`HJ z&3HM}gnRLlW}46vPKo9aG|w!KJ3?7#G0fuZC%Te&V&4#MysRDnu*i!Q`<;mQ5uEK~ z9^|n$WUd^>K&}_FvYXfJrmNPJTFGH*S1_;NskF|R*Dvu%(15nw&BdK9r5V#H()m({(#;;9C?C*WEYmsRVcFOBTVXQbn+km=wot^YIpgwWj2V+JA1~HmaaOGc^AYUG>EPCjoth9J-|6ZWJx#(imvLZ=DEeb2LO=V_);N(URe$0&L zjUH9;v%g(fAH=%%Rx&8M0xoq~qj#>hA9^lXi=+@fw^>Xa zNp2a1|6}c_UEGM?-|qqzX}e#pKY{Q?9Vl>~1&gD{w;e&#nezqzU8<9<3DYVOpg@?s z)}L`8o=>|A8QG|tYRHL+%SLqEVEdMgNI;}nBzdlTsA zfhzCtqSSay*@+ZefI(6$4#yo@hAO6NUb>FMa^8*=)H3N@7AdQi!>XEQH{#r7Iax^M z$!cv{d?QFkHP7P-f}vvEc_5EFcQ71W(}c5~?%4;a8+|PP0 zyhVvze;G6!M~mh8-?g%jy5-o9a4g0-16A+V8xE!G^UAou_CJCmBgnBR$8R@7qsU>@6!rnOPLrR!4k-Y)iy zkFUa!G`@GD2Um0ku(HXG>o<<#5za|xv396N!N)pXSm;o2QHK|sN3)nC2PZP^(8qKEXV7dIInB5t{=sO{blwxOuwToz7iWr|gWWDfG!6ObpDz<(J-% z2cEp*;F_y7Z}7lt1lhD!IkV#<@X_CDv2UCA%oOs*Y8=r469~oZD1){hbRFwLduMap zCNNMvJixMMILme3!Eh=xrW(i;7#YeFFt>qXsVn^Cn8Bz7|tPl z-O0!X**&SRfwR^nK8*k7WyrA|$Fr;z?%!`j{pAZG%?xSc-S@vNU>k1>$PdMlA59=1 zO+y{Yz}@Ueq7c{MJP!}K)ODtS$rrj%yK;u;=&IpE|G3y*9f5gVK)J`mkg$|Mhk0Is zZ7%b}y~HWoyW=9vmMw-+_P)BAAVzO*Ejm$s!wH4CJH?<*Vd8?@ArVq#R_A{=wPuz{ z?wDd;`wMsC?D3w;mSjL1)MU^&P8Pi^jiGr9E@Q$|%YGTN{0_8vvbN$E{P=9SYR;I& zdMg{LH6<{K9|g;G28f}|NWUBJawRe2M;IF$&UHmWi|Na_6)u{BX#c^d-t>V zx@^r*f^AlPDU8>);q>}RT(uyKeF=h=U;y{^#PD$R>ARk9xSYYuI@~bch91W%Ohpq| z`SE^y>j8pm&wT*bpF-gd9sipCVI5(>m7S+cD|=DZWaR8$m+VFF@cW{JR*V+NeWT#@ z5j^|nF@}K0aO2+|Tab;GI`*_nSHs?W>nnKUnop9g!{bK8PUZM~uTXj0$0pYh-vse(b;MVf5@e zfH3?>E@aQ0REM3j?!!dyAe`(3oy&Z9|FqvCJ{Cod?1!?DIg3S0F#7afW*`~HfC&$;k(Z60PP6%Z?^sdPqdehn!HYC_3O+|w@ zUbA=NTBmELd)01G05k$#S7?c@v`GGLv9IR(>V40CRP`? z{EBvvi4d-v;l&pY=drbq;GHvOpqnlJ1q^|AJ8JRDJI(M6A7Jm_fVlq@QIqvMmmxNc zHMd^>13dZ8&Dh&_Gd_R*@tJ`MW>Ilj(>r&IW}FITR4Mk|xbhyHf6m_^%C5o6_H*&< z=64qbYg?Y-lz9d+FgBS)bBm^~>d?9{1nV~8#IpNe{MOc+R{k2J(LILMQ&;cD`scgg ztDVutBN#4|%shXAPfg05$h%=;W8L>>*DQQR`Zk`Q^r_1{BB5D!A{G@H9fovCaO5N? zyAr7HXhF@S3kgRGGEZ3bW)W&{LV<1C8D3f#bHE?2fh)pWJadqOPGq~1$i~vBnbjbM z3KouK;969}Jat6dz1T%cZk-g_AJ2>cg5l-JM%jjySCFS%k%!%n4BM0(#KvjrtU_|Y z$>ROV)59ZESG`~>XsZ8SwoPJ{;%9R!1~HWvi1GFMjC;kXtmG7GLsNyVoRS?=iI|4{ z=>ayX#Nre)5>aEUP4%IMzA>aq#BXM(eE?I)zo8J|Ay93!2oXQgXc5mI9)hDs@ ziJS*1^)F&T>4$kNCa;-R>{qxyNeJ z(s0TBk3IHv-2BN6`P!N=HgEYiFuQ=ujo-RGC``qWZwf7=9#=?B^m@HBrEpYosaU`H zPMm(q^+MNNRQNn8JoU(Cgz9~WPb5N1+Sq2$D5`#~Dzjn#WD`=(E=XzS?dt;UuZGzL z^j5Tls&*Pth9np)XI?()N~7b1CZyE_+zcT_+-bIf$*5f%LRQKnSLZ;?l}GK;0NWc? zWElLIpn-8Gn2_^;ep7g<>6TpDE9uVP*~_D`&{gH^U%zJVMiXv zLNQ}E1TmJJg^jtmM)@S9*)1PP;h=rhR%gz#F%zzbqm@xRM(=36QkD3d7?@iX1EV(V zF;w-)$IDxr4SITYmdg2daIei`ZT*-e*fx$(`&zd_H{1l<^_?>gO=R(p2NUQ|D@CzI zU5F!Ok{c0a3!{#^mTVZS7yI$M)9S z`&_d-Pjz@)HOi~oexAvxX%sRcggh(J&=AJNL?q^NozVh!!iCt}z8N*wIF26PrG#pm zMDrXcz??I0egDS33q=g?^srFLnTNycjTT6jT|O33dMXQ7p)oX(TX5qw+V10Xw;X-` zkFgzn4K0QGoOf96Q}M@7G~<$e?_j}W14zwDdfZx`xDu8TYPyw0ha_ogDPigpHJuTn z8Q6qdL4eOaXRnLMX^l^=O7Lg-#Q97)VO8J~%A5_SsHXVXIF&~@K!xfukd^gPk_nfJ zbcr%&-mI4(dLq~t^Zfm99~_cX#K12xiGWKVxCDYYJBs1c zn_h@&BZxTDgJ-inK8DWR?7duq?^!P~h{m%%#D}2Yg-uZjF^)Pnt(|6*`_K`Kee4+XFAAav1c9I{*1ltVW>G=_k9R}vK%)`^$ zeu=(>mOSI9&;KRt=XtYm$5=fuc#Jus1wbcH>eF#Vrw+m2sa5UxY_S?<8>84LoR>R! z`6EfPx9j%n|4VS^d;7bvY8B_^)M4{0F|@P>40#VT)wsY6Jj-cx+yDxWw99|w8Fy^~ zvB{tqcpqbzc+OuABQn>;rI=~C0%DG{`Fw7kgrbUO;JjSzWU(>3rnA&~WLZo>@|?lQ z;(IkHnl`c|Cv?oY(L0qOat^Ju>&-baC{Kyk%8;w1WJr0!sQ!1QY&a*jWZ3z87zF8v z)*|J|RjnRr8-xO1pA63(Cra{o;kc}DnV6t9)zxv!-j@(db4MjEpa%7p^6)havwV7K zN1GWSRV&fdrt_={GC>D+fP9d{*_+?gytJO3Q}X}Rz#1?m)L=i?n6t*X7oO}9y5-JX zj@@WdW_r~%6HKaXK{AM4Cs9nM5-i4!5Xs4`fBOLpxg8kdDd+kq)(^+=Tu(-uG1lqB z9JV_<$NJGV>vU#8Aq-^L-!yYs4)&TH+ce}Jw0eF1?g8N(9^(uBd+&ID!`-2L}I`1Wi$jB6LH zfcr<+tV5D5I6p2xVyY9JN$B_rB_qF$26{OLXP%Bu*L66oKC-4Ev5cdFHK$*oVBgyzguPi) z613vsh)w%p>6!6xAAWq(tLQ)TpaI4b^TOhJj@B9sZQKhUxds=sVWPW72o!U_ImYf> zZF@7EO>QV@6?rLBtdleNO|+Jdv{b0<>k@D6;51Z+f!Sw<{gycWEXnaw@lamTQ8O-1m=0>IT2;QD^6&}lk@t#XYzI6|xXu#>&PviB`r;fUOxcl5- zxAfS$HJ2r&hfj^WwA%NLm+;)(85m1+@%%V5c=r4laQ%h9L!1AL;!P z25(elgC#4j8TOkXdvn6D_4GQeEMhL}>AZHyz$f#XBr#8r@&4JMQ)}NW)ld1v5w7ME zY_15A*9$z9_o! zBHzTeGsae8hLlE+RD($tb0q{BG>Mnq*@4m69PFxJj1WH;jwIN>zC!LS2IbE`PeQVR zcv#$?n~-R_f03HrHA8Vt@R1)mCC%dB93t^OID7dw;P1E(sr(T&+~9kj?N86=_TJ)K z>X|z2*(V=gxp_{TpEottGAQ2M$rVz7gQI_oL)oX9=h}_Fsa|xj=STUZPIj5{htFQ$ z?znq%D!7h+EYW*RoL&ac=fkby`+FR>%gvlWl3e(!9I{K!Lq@~8vLXOCfFnlMsp_M&9`t&}`T=Q{c500bj z7jK|(`Rwv2-|8_XwYCfE*CEvrq$C>wgW|5Ga1oY-g8D-qBwN|;$0cEF9D?&pa=clD z2rK1v@mjVU?wOZKkaU6FYNd>1Y|n!f#Tv@>Z5tkVC1lWN(XG=IwQEmphWt^Jff5rv z#U6G~$3~|ne`_Yo%;tv8i5{EYGz?+qF$X0ukZg=HDMWZ--oSCsSz&a?3b>%fBks-n z6ItBz?xbK^h>{oQh>Ju^3e{(*=yqZy#co!PEhY!Pxg#MISqtpv%Q!Q&y%U>`X0hq5 zcMsg&H1^bUf%9|ysVGvl0sOmX7dE?Q;j?5rVxiU8o|+W3qgDs=@Vj#rdaEhe}!3u@WMH0Q-b>2rR%VDMl;bw0%BWy_?70gU%q0}36&oH==sGKgj!m~2qj30j^AM(s|B4txV0PCLaV0sotC_A?H!Xay4cnK z?vk-yXH@k|PA65k24P;2h(o4IIw$c)71`@id$F^5^>_Z^FZmC~G@_8r`~dxPG7O5M zMnX#2`<9eDiH?N^V}ig|#l<2|Y>lIjS6L-CL>PSy+I%bmeE*kG>^@%DEO5B;L*Eg ztAAM1*M>=F4j;6>k0%_9asHzRvGxilxb~k{&7xUK&W_5NmFuS>iyxVFB_0`MIC;h* zwnF*zJO^GH=j9jnHGBwMu*?yV#NUd<+|rr&&Za%{k@F%s=UxmXKfY+Z>4kGb^o4UA zxhuz>`*w21@(WyuIMSq(nBaXvcr)5!*T$x?OJyoK5@lao>(NXct`i0 z48&#Pt}y^pK%SYiRJ}adwLzlben)z?Bqo z2)+OMHVRWY4E}l-`+83_d9<=Ri8&=h zE8TU5d=;rsL`%ow+^3q13)x`uMSs#U$osyz9=lSIwB~ts6=c;ZR=Pu#8QSoGPUS?5 zUWpe>9T&PSQ#L2O3_9dgW6hXl*7RCU#?Gn_VXemWovo1*6G4UO*>bQ)4x|Ld_hfPQ zn{OHt7nS0z%K#m`Q2;e;^3jG7>JM0^-xumu(h@L72h*u~WXj+YW} z#3;K^eF_=1h2YZ>U94raijmL4Ce5(lddp(4)S|m<*770cou0$;pPUjz12c-`Q5Ao8 zQwMfUf(Ep`|B6;C&YCveA2 zEAaNNgQBTpt~-Y=k~eJn;k_fR@ozg0?y4k|tdl{4eG=o9B*=dpi6YNQTpz8t|le+*+$(}?iK-u%sf zf1v)xRzcLua5+ZinWzv7K{BgN{^ajd!#1sudm)Q%x~lpDy&dG*2tyBA%j;CfIBu(X z7^9!)Dk>=&^P{S6g-Bi}Mz9Yj|J@C!y>Nl{=Db~!8F0&Im!aYMlZzx1E@@0Kbnlx; z9-PGd|F{f2cfG~^rq%|kQo~I8O4b|Yo&kg2zlkGmup?rWDHF$)MN^q*PWI&q6!Shn zZBj!vK`Sx2McFdPOP4S+vc#-8YW?g^LX0r98vBgecxFrM=y4i)^pT4eV{g)+IP=(4 zZ^=5tGc?8!6Jb?@m3+JaN)gq;+IAxv>i$hNQ^pRqZcCoZ#X(l1lxFM$t zql(-z$`e{yig~nvEb|u|M$@3TEy01|1R5L#ERkXtcD_1y6=uu^<`uAEGJ*f#VRoy8 z?z5dByIr{X0~I$9FjNtC30?BLkE9S_?{k>#PQLtTa2VhLsGRyo;`*nrajuA;e;MG}l~< zp5&v5M7o3*H+PhoH|AJ7uyFn)a*HG7=i;A~g<%t7BrKVGx7ADm%~*_~hj${jrH6TC z6@g_f$R3Mg^35YS{KGd;fAL)S=7f;gH4LfF3x}Iv>a{}%p4p1TmI zNc2)mg4)m&V$#{<75cQh09VdjRihSPVQs-8mhsmzHOI}St}lH%8A!GA7Ol!Rt3D&6 zf=$SAl4;iVRx1?$7|)99k}Z~VDC?zFrYw|hj#N4_|0dwX*SAb+#BXjG{L5Qxiuba; zJnTTBpz1s|bb4p7)+woqCCr2DJCa66XY4TH?VCyhspk0@>)ws^pI?E=kt7z?QuyAk zTa#X}1pl;JMS)@ByIv3CV(g6OHXeO-CTad;np0#PGFBgYVa>fO>+qGj8DHJnM;c%G zToB9aw4~6}y=h$ar#=>odx~*eWy4JrJr93rif!zCf)Sqx^68WA!Q!@m6fc`dZpZI7 zog!K=`5w_{<$UE=xLu`pif|4%;b#z_3L*~mF9mMri>ohw_pRfas8 zby5zOvJS3l!`OrSSu{PwfOm};=Ud-C6NCS?TXcjSJ@jT#23Qutg#7!i``$p~vRUvh zsnN#x=yN{Q)PG?Ex%E!Z&gjdwq^nMq4U@s1T#&#uLWQ22-YJ=#AhBhhRL)kmH7FZh zK4P+VVrtDac=mE?o?49A%yOd^2?t|d0@HBI1r*<#$7!41VmD2y?B>+EX!J3-KGDJ7 z!^OKfcn5@3%rA!I$_IBqb8oyf;v!-iMWqF=lDM%*f6yWo)hT0NzZ)}~hwx@ZdM+-h z;@p?e1PY7JMAH+RM{?#fUs-nIa=g2YnXuD~8}`;RZyif+nsncHLnwgWLHTOmR(>vx z*zo1ku>S3X*c!`DqSe)S>(&YMvv9&gBpl!k(zCq+ft1}K&+6xMsHX~zs+x>Z4Ieki zzHhGs_6>d;hljrn&XyHQPxZ{Gn4umU18)EPdW58pi*tPHeS&R=G^sYijQ_>0pIKRO zz5DKh(1Rcaj{pnX4*wYg!vvElfp!sO8%P5~0S8C!#*x7X5l;;v!(PXgc!gw;r60lg z;8O02nzcqgCSX*Ng;EW_ER3b#Syqd7S3M~6+fzJ29d+6!$oG!CR#)~p zYPk4A6%_%kKR`uAnu?mpPbIo5DfZt}GpI97U)Jj)XeZ6CU5gXWakUa=5Mnz(v(jy8 z)kcynz1zB~Jt4GenqA*80u!`{g#v2ab#NRew>jx%Cw(Lgdv_j7HonF1B7{%^(Lp8) zTeR2@SI+jUl?&^je5raWGrROxs8BRwhi;^$q+=eGhVa>z);Nabs{CDTE$JO*SUHWiTlU?X=&Z%xcB}YeaA^1Mx8*xe z3ola>)FXRN|k{x;`CHO9ZRS!4qiX?jI;ei1!a2( zYT3sg7}G}ha%njpAJ1%L@gMWpb!>l$6`n&Rc@(mAR@4XVyaUJr-d#C7IcqMJ^ z+q4#x%!4bGIykqDgE&RwsiT;9Bf>5;br()L6Eivpu}vyD^5Qd5qOSt+Qzc1-=q$B}Kj@{I*=HpIk3$_CkINFfbB%R= zC6g%>S44?7%u5{(DLygeUR!tm5La30i)#`gor;)Gh8(HPgow!gmo6ON*s?woYI*VG z^xDh%=L`%}5386j-p_{)a2b?DAJ@lj8XoCjDUrq!KfC)jXPTh zZ!}T^(k5nPvqk4DutP;MqRSM1Zv})*Olfg)m|ffFw*0&B)J`|DQWp94#i0?EArOhsEDL@X*ikLGJ?ywyEfB;d{*p#_0i!WS?sdp zv706%6`yc;czdav?X6BrjB5TtTR#quhs$8_4@t~yL~4`Ww&|IK9od5#V71%fLR`tg znRddHcL?><(mObLb;7|%63g%=ouVd1bWKNkcjq3L;LJJN`7w;cEVUVtTqA%Uor2=E zkHLw-0U8tFGS&5P8wKC>ZJ*Ry-_~`5RXjK?mz$`mZPNJM{&gHX^{BF3n z4hps`YvFosWnsBwI_=+EW{Hj<_m`ba$BxCG(m(iLu=?<&tPt(Utx5 z!V2tK_!qi@hiWEz-Kt#m<7H0=PTcR&t*wgiiJ2Iq4_jrU$0KF3yO~Z(%rPs74OBO` ze}33BoBconyKK5$%FW!{Z6VQAl`n>sNo3;CTh52-k{G5sxh1t&+7PJKv@{ zb5;P~UasJ#AFcax=gAp7^p9u0u=;{6+lB{_%VsL$lG4oD{XQIV`gsGKf_klW8C+t17Sq^XR`D8F|$9>YUlItSnS?Q59VTwiGmC$QCsunbhw z>D;Ns^Q?$g65AYz{sZWz5SIoI*lnBKYp+>#7Mf=#G5hok7Mu*sSh;0+-|KDL!XF#7 z@DB-KJN(U6w<{3_jpj~@RQ56O_eG7w{IO6AlDu*>ndp=ZM0YggAktv;}4 zdLj&|>Vd2MTj@q41|os614&nSHEmdSRRyYRx~Jv<(B{#kCh(Yh8ODY)xb5l-&_5nA z(sT^hkbu}wd5yJsYT0Nj{mhj?_SSfknqpPsIdcKS7w@?kD=x}o_R;`0tgYMkz#TXe z9h$jeDo(KB=QZ$#64p8got|Y+F-=b7qsRYSqO+8N!!|XgZH5sSVBx*vgC^N zo=@LMQ1O}xJmOr+Ja^hKw4NLIH?BTkcyPN^Vug2Ow3ssY-{6_e5f#-#5?g{#`DOZc zcKx*=q*~&{Hm_ybq=*$T(2wlyuVmbYc+?09shK@SD+>-fPo-b*r8u)%#+z6GCb1!~ zP+J&ooDEJ4WvWt6fZD|K)v98K(q5_at(+Y~(@F0)qGumPpO10BbyE zin~5?fF^(WD3t69>L_-mti87wuB@4WYfW+BwoDv zVr=>Qlh8FB6>X;p|caa00n@i^d=2qm^XQ59qq9navM?_Pt3ySIU~xylA>(XBSi z0hKpxeUikw30wHnI{rMhoBvFRPM@q2Oi^=uRZ7xH#!vTA_WZ95%Z=qDSjUQ*_|>rJ zoK|$y?7W>BAnUuz?1u@MJ)F_|S5KH(X)jiJCSuB=A7?6 zzxVh4-rsw^peOz5Tb3?az63##rQ5c8?L-ia8bPp1Jsq&KF4)i${AI!SX7G1$BKZO) zmxa(GIQv+HZLv%?YbT2tk#w+`wHcgcEz$6`mtQLV;mZ&(qcBB)loH~HE7#e1^$M{N~yS-XVvfN)`SI3>c$&6TkE5DEZd zS$rnpP;5*b4?RS+(%_=tGu$Rx5i}wEXsXo$DTbdv!IQ&f5jNR5*@oLYI1orAJBN*% zNF;|11V?)ZN1{FWA=x@?L^qL8M`yyjKUN?cHzE?<>Gj#WTwq1D+Rx|5qeP-WAg~iS z*>SjRq639Off$aCwjjcmmlVfm9kvz%XWCsVD zr#;PM6Pe^ira6%)UXJfE{?=J%GR>3XU~lh9-sIun;7#^$vZs+9NhBwdm!pRx+2j4$ zZE-w4GcKIv5> zf+OIqhwWLY){DiBN@PWR#^uBkH2R`Zes{i2P9OiDv}l$7UuS*XZ7{r92{C3-XI^tepX7nocBR;ZD>eH~E z{xgO!m|&+w{D1N=PeAS-k{F;!K&9Lpk2nS^#74-+cKpwEMTQ;K1z7hYgJ2MTO%r}X zr9Uq?m60m^7%68c{%8l&)s&H=!aK^#&3o|39^=@XcN*C8k`lO{p%*NdthR1SlwNwq*XC@>Pr)KQtCNS{-Evxn>89XNtkzq=r0uF z4(Yt!t2n%RR{X8@krdTkB+R{UOOt?^!>K#G66w7n=Q1= z`i^{O1l^%M>*!3{{j z{o!zO@may%$XUF@g`=>0J-k1XcbbNC~3`lk+a?wrh0e< z%!Za5ImA~tZ0&IJh3_8AFO?e0a{*fHa9vYDW|A#lT)x)jDUTF7Io*0{KwGz zD+A7Ze4%W^d*Ag^V-0PM%;o?Gb`$zxvv~RAcvfAT<=H&%)FDhU56(Pzs6Kk11lZem z;(B#Km%pUH|+`Uvqb;^wZUQmKXo0lEK<@+zM0Z+ zFL^#|Zd|>AtS$N^vhWT`fkT+DSrUWS<%!N9&55u~Q@z)P(;ougF33<_pxD=^58xK8 zpiRY|3Pj&OOe(1>yVtn;b%VN?w?wo-N14bjm0MS|WWac0c+s0`zGxt*qT2#jpOH0M zp;5trp=uahEL&60@Ja|?Jo#dVqJDUV@0M*Of85_QWN0Sbod~>Ie?CErHYO}OY>O{= zLrNM+&Pr}RQl6D^Z)Xo?e}0F|76@1%vK!&*(8gL$-v%BC9)DB~t>n@K5qO2v|5>y&DWnNiY+m^}GDIkQnRLQ>&Ry9zJ)?K#NEGn9P zbc=Z#)YGr_sN6B_MeH0WJ>dum#hB!BzAy!J3q%Q{6+GG<7zVX@UkWkJGN>iGDATR+ zh3gp5629610hxSgc}Wr0p}jiarS(f({;r%(X$?Ng`vyB&(IIV!ov%;bKC=Lkk?<2LC?g7BFq1it&ti%(UIq zGMipO9oF+I@UR@pxza##_`cnd;#U-H`6N08+C^^}B)9uQ%<^NKi`>^=(=x3EW^kErQA*C9d+Jb*!}QF;*N` z2uf}29l@EQ6R{H~S1=T^Ft}9~8?R*`;l{jb23vY4Yn-R@&#%obxZ2uxiCvU`J}>Da zXq&;iM(9*tp7^cBC6?rH&TiTr_K0X6c$-`GlaKCjuA|%d&+NCn%XcWi3JhfvDP_go z1R0bJWqI}bq?b=`Gc%AZi7jnw1cm^XdcjRMWhj3hwzI)Q-HZ7Iw$1WP-Vr(mf|t#-V4h58n}!u$%bmy`qc7q^ zP{)~5Pp0AJ81ZJRlC$rY2iu!O!9)z_(?w~r19LyXV30~Wq+U5__*GUa8PhVcR&b72 z>t+ePc=lS`(PY zR;jFc*w|$I0fF#zqE4x-On!1ClfEGS`E9MA%aG_7&era7i$_aUlr9S?%4Re?r3cyI z&)@R{Qqb*E^7GgWjbo_%S96NKOrs~JWaqJ67Mkfij4R#O=V4(Wi3!fhQ;@-~9y)Qq zNDeb#z;~2i-*$9%t{*7mmB13x4+8EV@Sg;2ZAIAyTxT*Scyg_v=2f({G`<`Zwf^Qe zJ62upd`TA-?D~CZks^RCMbk$ae(LJBLQ)3>V}=&Zu!MPIh5@gphI?hAG$WJl3RvIe zlrwqeWH9T1b;gZPpT6W5^Gx{SH&H@5PiM*e;fI1sr@MQ!Qb!A@9c0Yhz9KWXM6D$u zV1l>EFaLf@a0g94=a%!uCvVqLiF_S+_K8dJ1n0u8)8E4m1P(vo)i{MoZazv{Dp?tb zdQGi>?MuwQpfF?;N++BT#qo7;_^*e?)%PfX#daW9bK{f*j21NhvLCZRMK@=I|Bz?y zvOp4lCXXs}H`z_bP$rh6l$oohVUlBMbc@s5TZ^5(s%`;U(~rHO3qzh5Ml{HrDOj;l zAX*kYgwsQd@7+=*U50FaoVh^ehN!;E2_*w*ie*&~CLP(}H-UyO3ll!0{@XUELBohA z3Ya^h;ZJ$lF!#!@JLD%z+nD>^;4Ct7INvEgmVxj7$)}tM%F@Iw7ui)#_Fq}LV8liv z(?X$)ucKpM4tiGFc5*BoAbHj{e4V$Of~A&BUXi(f=T>TxHg@RZj$sL6fUlXzQrA7Q zD3#IVCtIUc>VcisgeUAmljdxRXw_T@_=3Pt%Bf=$^z4*=P>8y!EmUF1zb>nCc~{;O zxI65tN~#Ct9RpY3%_B!T^iRxLtoM4UZC!BdhJk>LHA4**ch&b$Y_u8=EYF|1or?6*Lvb^_`c@0ZZEtwa(EK~ah)n8Or~d)$SmTjqaKW8;_Euf@z+&31FBxEo zz>B!ig262`B`8fEB&m|BoJyN=j6PACbgrYGlKIygyR~iq>sPSb3f>+gyFSqZchzC!7)yOLWer0$-~LzXkbl;q(0He z4E>^Nm&p&4I|juCH>tPhPo#4$Y2onV?#QC_m#eHrvvtRf=7Urrr(QjxFq9@ek@@|{ zC+)0(fsC32bwP@-LQf27iTARxcr6n?dD;AjD+o$|k;@hJbIBlX+&#oIUH5gs;LE5I zFfm30y`z8Zjj6w-FZD=&NN)YG67rmmd!^4wl!0qg&iqgj)YK01JkD@c-M_s;f&kl} zGT0CfXY<6EvFilB=XZ3(481L3?3)CVQp2GN&7SJixrM!{Zgt*pO8A1YnO3bZ`ff8zMR};% zmie_Bv4bc+%kZof8pFJa7vnYHgAQ^Y`t4!Iv7MBE?*eA zK%`7nU0wcoa_~qeO*!PvK1tEfujNhXe_`}I(vs!O%7*NqVHF7d zz=pa<9H)r2naStfc?B4`PJ5i~1q5wz_JZ{4ih^sQUoyAj|>kP~EpB;k*S16;q`T3G)% z1gsZB{_#hwk^g@V@5T7Pt^8M6|59Ip)~_1$&sG1w@ qWs|?Yv;Jk1f3{6T=-b^Q3=-5B@kJx2G_`6W7UUfx0tu1>0YnJ#D!Q!F zR?%7rgeqby3d#kPH=+VXk{B#c5nq_llvfi4L}0!Xly+wB+?h4&&dfh$u@?FE+55Nm z{_WrX4hxQNXKemp(XvGl1byJW#d8M)VKfk=tJK#6mbH5fJireV#EXgSZsT z9>EP`k-TF<*{mI`(1@f1Ei4xhu{UxT6Jc)K3WsxJtV2;B>%^E?5Dh^tZi%s>;ZZDv z6vkpla;WAbRdwd1$Ox*rzr!}0ZLuD#eUV#|<5)YB8N0%hqr#mc%-vi`E{QMzh+!e2 zq{NtL4i8SGnrm@k@EJ9e%}H7pB#LT2R}^#Gc9I7-jzw~?wzmqmv9%>pDAu+c94Hjq z^&~qRTRXB1_@-FdZh##qu-!(|yDxK)EiPg&yu)+TyIkNzHQ$FIu`rp;=ku-k_SW1u zHrdw6$qB`kz5W5MGOt&#v@d7Q0ZI?F|pgW z%>#3I?}!4FkrP8>$+p%uQrC=mTPFMV*B zUmg|*Y)l+j4fEJ755QKw_V%RjO6>Wy@8Ge4`01vxksQ&ho^5+9FVwrexzK9%wHLCw z;kKRr_s!pDXKgvMXW=K6G+EY-qV?C8hpzmLc?>zn2@9h6R_)&1{rR5p)a>r=?(?pN z#K<;L-+BA~R>kzB%Zkxy)#kSe{iVaaAl_aH!^+y40@0$|6+oxa$aDtnvw@<{n(1P`dB@q%{6c5a5NK^; ze!w7PxK9+Igtkw(SI9A>X4ov-_4cf+?v5UW5xRb-Nz;ck`=7?nZl>b|Iz=zCpLr4? zyC8*-0DWwQe1;Qz*?CK>OJm{pJj9UND8~yB0##u>T)5cK(}6?s=kW4*u;ADF48`EUE0P!SSrVah!e_9(BAca+1oqPggQfQ z(au^JS*!KT-3{PbGKaN)Yk_ppG#>SlU*2Eg{r#s2#Rp1 zs%!W1&BWPf<5Lq_b0(TxHU^KZQi{?x=|E-0Jd~i0q+mMez6cy3mCHHt2^i`C{0QQ6 zeNiS1Um1X{}_d1>*;Y~ck=>IKl|>VSQEiG>dz(CT)hPk&IQe0A@G zkI`OK)dDmjQ*i{_=Yy+<$t1L&j--`n6D1NnN{%2tXbU>qBDD@mQHZGc0kQ_SyII+( z1Lb!lG4R^RB?z?iV!(-8Z^Jg3tiWk26;yU4oqAuk;7v!;wfO^hBAGuV15OaZ^CVv; z6vtFd#my`@W#=Z=CZ>Vz1g0I6DZ_Qm`t-bU_CnBp>RdJMbJZ*{oNMH(xkeVCjfkc3 zwPZQj@e7&a+$jS{?*-kw7T=rlyze=rOb|)Ero1wBR`dWrRebHzp(WHs$-f?&sm912 zz>B-Tz5IvXX-iZo*1wQl{m}8-E`!T;AIg4?GI3_);n}RY7jDw6phSHEKu7$Z>~s7R9Z9#Rka4~e%E!0 z?_$*Ov8wtgYWS#5(sapkl9W8|D5&h5%$28|zOcyktAn6&Aeq)DWr!fTb29pax(8pN zWHJ?Vl;X8hx7JGG7K#J3rd7#@4=0XVKF>j3FG2kqi*(x=qrqwpCInm%V{J?={*(u%-bR&j&xA0_ zdU>!|gDYS+tb+_}@zioB3rN4643N&16#|lI*n=XPEc4E}*mtQ)BnzlZ)C?#@^uBNt z=HKL)xjITD2M12F2zB!DLbhlp6k$u_J03pb`a>TF3;dH!Ec>Jdx(59}QY9p1Oc7G7 zWg)2EXPh`P-}W3g=q`ka&Pk>D#hikvTZmvrPm#bbkyYJj^}#9c78&U$cUty=S@l)4 zL@BPk@EtyVRbzDa8G$xcoxnkF#05xXg}r`qZ~_HrKq>5$EC5;s)e|j=fE&$z|2L^@ z2%P5@N@K7dr6!5+)->5!Tjo}Y6fouo(=f!I0Rv&~3F664IcCk%GA-jpJXDGEaDZxY zf;|IWXxiJ?6Svf7C!I7LzcrgM^>a2Ox=V!oPPlm%QnKy!VL#A0`tku7=u$;JUH(*O zbkDG@U*$+5?r0!b!Tj(7v;cVg+dXfXL;OWzMf`9X4=*~~H-JT>nl_edy6tGes+22Q zJi}~q86MznM;DB)oyD7%Rgc22A^l?nv<@_xwem&Cr_aj}ad!N$bMN8bR*!dCPDil8 z3ZXCbdbk1|rOFg9qWoGePe0o+Y0Nf6js}AQSH2W7^b#C`U`$83q$a^y8S#u^fv%o5 zlh7zV?#p0bKuY~5$8H^A98GwG{eU?Dj}Ii^MO#k>`;PMl>wUnJQ(4+tn1l5)igWrA z#!SM5=LbNoBD+UVvGsNor*yHlZy`fkeb5x_CcK~v+({it)VD{1DI+Uzj~e;q0ZMFn zn?+2$ykB>Yr-r^EtT8+m^Xm9=ra}^eQirmR7sW-7wE&Yo%o^nlZqKXA5nq!&zRWJj z`zAN35CV<9Q-EIit+CHdF0(`jv;FB!>>XH=aX?`!rK@xS`_m)c>~~?R4uxLuB|sMiv2RM@ve?XgBdusoX3lcbb7g!LLuYVxCPD8inMS=8T;i zVU)keM?vi-PlS0S8|UcUm_FFM@p@Q(sd=^ty76kUMZG)QAuW_Si0bR35Z`1*tX}g^ z{UX7@#5c~Zli6-&=z}w*^7Itf7Ck!Kykg2;2h_kYDTjev?@SaeCMb#rovf%Q-jxx< z*I9ahh#@$_2$;#qwLp=>QHHOK`-5bKF%<=h<9;wo^4QQ8scsIqa({d7J6v?ntlfUV zK-SvTqcmVDkw|v(@Q8uzhdM`$F}$bh=Y{ovtwMvUB1CyVPXysbwQnB-+Z;bbm2H5Z zH?N&7AXQHF4AgM(^+iP@8=aV_EA=_Jw8Qgv9zCxyRTz}4NsH6Lit_uu$t`pQ6EbK$ z_b4)|K=<_IVL;vK6TtUq5jkfYYlAUG-&SnD=WY?O@seT? zwF((2yg{cPlP4wB@pf0$tNA?%hmFvc+bQwE5r!%l0eZP=hV~;*I z>Ma{gx&%Hl+)`RZ*Zkqw`eL-P%h$Z6?}71yyA=kzhK()6QME4^ovFjvr3|f-n3|SV zA6IpQu6@SZH91cWmwf-x zFsa-=M08ke)IV{>J?PUW7)Q6bX?9Vul`S5v^FPFPK3ueVR6*$B9X5JG_S-*3wGcl+ zuM({2$HX*#5pUmQsrS;`{C2e|yB>|LeRVR;UKAHNg4Ku1D($FjCvXoHi8^I1p#>gD zT`W-Ye!f?7uEGFInbDJOlL*8f?WUq!ClH>|GWm_O)5KXLP!PK79=Gm+j&4@8wyRU# zp@+*$J5BVT?YAIV1bJ9k^vCKH@jxGq*9XtX>)DOlThL@rM{9F)mpJO4FIKk!^ut+< zXtx78Sfby{8=7jFNr@zMAZ4eiQ!&!q_Bqfc;flIUQ{8OR94+D=&;xEGH#PS`^u*Uj zB&E%H-*$BvTG}f0GWbJ3*kEW1jfqlcX>x`P!0-MQu&$60#ZO6o?Wn6enG0fMr^tnh z0!clz35bE<2ag?U0$uFuT+*(#V}pCRw$0?2250>JC~-tH=mUn6!AV(3CG+))c!tO` z^%wA=o3|Gpo7lb9Gw!&Ntg-(@uLy%DRw}5E2jvwah@LUy_vT7Y`l*gd0-Gjl@UbXw zMXjlOa&rBh0omy5!SvVV44Ou|W#x}j7-KcF=Vm(?dZ=U5C3c4i^FpyRMo4HZ*6>8> z4&VAntpQAEV$(%-vAs=xYYxD22|Sal&PiX`ImrRfR+?=tWJ^q#1;sFkOPbu89HcNP ziW5y`q#7d4vd;#)!BOU~4Lk%>xv_eFHzhUeJ`@s60`hW`*iZCpUjQ|{7}`1L)NkT= z8y?^5sSjf(c{Tke%zFy7_@&lcrP(>@tVAPoEU^d?R&@c&jtv+MCY`V!O{<2WVdE1KZ^Tx&Zd*)eCk<||z;%J(PpbV_9T_`Hg5 zuY!GDS)1qZ*teQYKA>ZWDCOtcdDrZrTVt#FOpzI-_M^wI)M07&0kmsi59kKWyV|l{ zy^O8AgU^B1fVYFq`POB@%f>}RA^9GO{adA$Ir*PU`2cI_C%>?rbpdI;{_W}=?0t84 zGXU8hmEVt@45aCSwJ&O0%_!L`Jpig%iF4Z`<%uvrXhWw5lXC61zR-F*O?oFwV)a1Q z^2L`F-I9_|3Y{@PzRF6C%g-i&)2_$obFYX(y>g#oNy@KEv)k3+-2$}Y>_+W`8$+pg z7lK%!+eO6#38W9-Nnj*%Vvl+xe*?zi@h@qgO2G>Sm|uUddGx|yJnlQx?8z@wG|YML zi9{F{TOn&Y9E0EmxM(w3-Xx$U^x|(nLRX?~s0@fQD8*q>51W;*7c)MD9 zJ1ukZc&HvdW0}i(D&J9?^70dL-m^v^Mu((*$rM;?o46X{JN5GB=|fDqEPvB-dFfp( zvSrN~ah|eqA@FrxNd*@cAhk|@0XLoQ`Xxz8Yj+`0t8(UyeB5-I*+?T!NO&tfa59Zd z1p5|Nuo?fx)-{@>tk0i47^o$GCM|PH`1Xs=sn~R}Zfka&4(R*K*)_b`8&l003$er! zIVLaiuz0ErEHaq!uG+s|1@|X}-iYH-7%UM?-SeQu z$UJBkXC72O59(hz59(7f4>~vxYS{;8$Y&1+2L>VwAn;ZOIY9GL8KhK%oo#$P^ z`FEFpdI(?V|G$R!Wc=TD{)eppj$aGt_W}Lyvj3mg@CRA^(`WwQ%KC4`_@_+%qY(a- t3DC%&GSS}V|KPU%C(Gn=V;XiTbRi`Crr literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/mu.png b/demo/mask_detection/web/image/mu.png new file mode 100644 index 0000000000000000000000000000000000000000..c5142e76ae63ab89da3f66abe4921af7f312e6ad GIT binary patch literal 1614 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 I&MBb@0E_33bpQYW literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/nav1.png b/demo/mask_detection/web/image/nav1.png new file mode 100644 index 0000000000000000000000000000000000000000..1d6fc53cdc7bc5950f88f689c9114b8cd67ccc6e GIT binary patch literal 2275 zcmaJ@dpwi-AKy_zbde$*Ix|dl*q)iOtt7Uv!?YiBtGqJXGh5o8wLO~qDoR49tmq<@ zNJ?~ZJ&{YQQ#%f+Rup1MYjWu#<&-m>bbf#Q`aQ4L^L#I__xt_1z5jU97=B)JW-pnI zKp^JOys7@$)k6EC^k-?mzKJz7?P3nE4S@q7E-Ynta6JHvDi@{jEn#y`9fFJ@YQ-0lFxBP1rz81 zT|@zSeD63h7!c>jWXDCZNgR~hYUHXIvQ|I`(Rl8cTa}Me$%*M8;yJQYl7?$3WspERIAXO=&nfI%p9Nl2{?kig6H1tfv*I zpoA^vi(oz^L{2HPBA{s46{XGepArP3Z?Zzk*EVSzhK*r~us94bRnjz&PXGT9URwsDwK#!5rZrk5;Gxa%XAkRJP3v)JV=D31Q3wH zd?5#tO1_}!bTUmSfmuQ}NTa%td~`Lt3O>2!w7Zjq1*f>CDK9;^hP` zZfN}gJpwul(h2=;`HJT|0rSwa7qOSd3f;34_m}<{F|q!nRhTD-2e^3~C-KsTlB*U> zaLi^+WT*6cSAL45Nm4RGJ2}s8R^A&X4b%?DcPq}MPQJ-|EFrZ@@)RF5y?3`3Rs^kW z87~VO{am-kM08@SMusmfiL#$OJ#;b9nto(^F>X)V+=j!~SKUc6o4{Vaj6p3-VEgQ@!{T?*$ZA}Om-?~Z%hHrJ`pdP)IJ!jyj-92fwFYW*~M9ZXmjJ%>NAE<(yiIS z>kSDOp4S=p#oK_@{S_Y%ez5x^GCAJ$&ig=_?kC>s_2sGjwTkz~)q493Gd2l@_OhII zMm%e5=wN5_cmY1MV|K!P1AJPqCTk*~!U~_#s?+x30>fS(JNMFZTi|Y>;iy5lZc`Nn zMvwSKZF76P>+BCfvl4hk6&qMxIo<`>}^G{i}&ZsMS z+t>KUC)WDR!limCMFW;yz16v&+;7TuijqI$oQ^Etb2~_&TWo65U4t7qQk(w9h|6yq z6pqOT!p{>2uRrzmT(b8g0U+t8o6FrqMU`Bp!-~@+C9k((1~6<7yfSKiFy>FFLxiF-vhnQq}*K)I|bNeP8bbbh&x41`8@gH=x zm+FvVK)!Kqo{qz=0o!qbjdO*5iC&Ngkd?do&(nm2PLv>e@VxrTd3jgmflFyewXpZU zjA?A|-S5aPe)~=b9d$fP1ME0IvXs68cWzND^Fj!f3Kq)^NMliqNQCpDFfv%S8W-psi(GQK3^G(qqj}Xkl z3f!#5MD@qT%G>2P-zLsXSaD9YFy`f)aNmnAVeLvz-27+j!+m~lKc>N7TO?Pyo=si) z`0U=N&s&PC#&cJ`P{;+h5_*o8jc;DR>QDzmSwb#8MX{*OoPQWI(kA?gd#mX+vng)T z(4g@v|A)JpaS>JfiSg+j&NtV^aIZJel=Wyqi&;Ts(W8~~TENoM;+kUC-JpcB79Y6i zS$W2Z!ur6!{xrz5#?Z{r(2!r>Xr$<&PZ)Iq%B9fCt)LOk1PbIj%6gkVW$nsuI`Mw{!XtL~iij^;cA+cdQ_;l?og^RaC_J7U{|@!_MR zGR2mm?~i6)yfU8?FTVxfBHfg5V0EK258Q*2vY(LT$5!^x-1)r0Yy(+0CJp`VX8 lP})*k@+UUzFQ3$1jIg@z(TAG*AbaY!gSOU>TIvzL^Kaa_)wuuw literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/nav2.png b/demo/mask_detection/web/image/nav2.png new file mode 100644 index 0000000000000000000000000000000000000000..76e46557a40a7b10684f21cb803404a3fad7f5a1 GIT binary patch literal 1782 zcmeAS@N?(olHy`uVBq!ia0vp^@<1%X!3HFmR;x7vDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49p6dArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XP}#GU}m6TW~gUq zY+`P1uA^XNU}&IkV5Dzoq-$tyWo%?+V4wg6Nh+i#(Mch>H3D2mX;thjEr=FDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yc06!V;*iRM zRQ;gT;{4L0WMIUlDTAykuyQU+O)SYT3dzsUfrVl~Mt(_taYlZDf^)E`LU?9gN`84U zShcUOm1kaYNn&1ds;7&s5>UThW@d_&g^Q7sv8$`GrJ1Rvp`ojVg@Lo7n~SN5iLs%X ztEsC2Os`9Ra%paAUI|QZ3PP_5PQ9RnkXrz>*(J3ovn(~mttdZN0qkL`Ox$iU#AzN> zZwhX=7~#~b4|I$^C|Z%C872fwJ0K=J(E>T}WS^P`OzTC!M7_4N;Vdw(Io9ICKn%RHBFe%a5C}fT-A$h5`x9)iJ9%J zpF}-Oj^#H@xN+BX-TvC$#`$IU9zNVvpH}woPg>ctsjqJ`*P_?hXWWu_e#O&g_{LJEd2;96ZtOq!^X8_b?)Z?SK_6rcFH=6Udm<-QVISm#Z1+qq_vS8C!W zt(Y6EkGb@0j@C5&RDWi@;|s%=>kG~o1*tioGg#~RQZbtGsCnUg-Hf+7`jgHD&1)#v zYCAGbC*ddWms*Y+2aa;jkxlr^S}gy3?w4f~1GX4)6!vpZQws0XmS(KHaH89*{%PvX*{KH6GTN7gt}VY2%E`I(z?uA{y{#87 zd2N}V#3OlQx#qc3scUCE4p&t<=B067;L5b$S9Gj;PfeerX`J-R(_1@$9mNk|#^Fzd1~)y8q&_l}Xd2 zJeRnmHq}DUDmN(hbot8MJ*i?|)5~_;+}KVs_(ea{$1JYRXIX#$Oqm>T-?-QP;JZ8W z98%ihIg@90c`TNS+V@{2)hI`1N_+o~#JMUzKPRZ@Sbck2d@^NLtzs|B*SZKb?cJQS zKD@M1j;r|GQ{rg&bdvUhzZNI=eSY+}uxQ(F{{}{eH5a||nl=eO0M$gEu6{1-oD!M< D?Rm$G literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/nav3.png b/demo/mask_detection/web/image/nav3.png new file mode 100644 index 0000000000000000000000000000000000000000..4686a0ee6d4e69c5f4fc84ec6059b2bab7f58310 GIT binary patch literal 1724 zcmaJ?Yfuws6b%pq#$aKzJf&S1K@`c8hY3kFumPe35fCCGBqR$2Om;~Y5G#(CtrSi1o zdoY(kFaZ={VoWRwuRcgRcbxIUx6A0W*I#eo4f-xW#j#sF7;On|Z5Kzc@V1$Q= zE<%0b1Vuo)8V*el3X`QL$=Gsm(-#0&$H4`ZFeU|b$~`I#N5=zabvgLluuTJjSqPTI z1OHA+ED8pE5j6~WQ0ZAwR4t2&sN-o2Hk)nGU^3lsgqtQ!g-La8Dvjg30t9Ph zY6XfZ5EWohl*S?{7!SlV{ksGux*)64%pDVcU^JZ+r7@^Mk?8-SO63AtgN4BV zC{%Jp ztC>ZML>!??gGp5~SP1bzoKICK8R&2i<6=E4^&%BA7S z&v3$}+H7ADyM4WbVev{&$^mxr zQHdoWG&6o@>Kffd-glEsjEzu=D~wH+=WIUeRDUGv=d3liMyxG}+0Ohu%)kuqE>_pF ziH2zv;$70w)zx|HY1g6C@0K|A(KSL{QG?696Enr9s(j0*9PUQOl=xlFbk5vm*-QKN ztowK$F;X99B0AE$vQON2d;lftPc6p+C|1`(?d?bP{s-F8nP|$9hW_04ZU*HhoYUpp z62sWBzW*7PU0U%-`C|356QxrRyJMYo`m&)1Y;Gdi#mUPG)NH@1Z94aq7^I~H#6*v! zZLaDb&zNk>+8o+oSQBxOc$05h`&qLw$+1>*7%lqzNyR>u z&$mO9xep>)^_KRb7s#Vl@zz!PC(ssTsK&L!e0aJ)tEZ%@=HTA^EtS>8t5uZ(%O^h` zkenSHyWu^0-tPFv2pgkp|E{t-d7~$z-?-e4{AS`xYF+21&V9fQ|M2O}ltddLWO7f8 z%1bP!f_=g(*N;Ju>zEVQP3+rJpkLs_c~Upq0dRWcbo<4%69dBEl#?IxBtFjStV_e! zPLjYA=RS12eJOwaLu<`CawB9H76_z9U9fTDWN(*^ZH%DI=qntT6v{RVwALL|b3$5K zj**debzozZ>D`Og^7od-GIRUdmcaVNvpbFU$7th5F4aHYI`CG!iPhR%#N<0P6xw~d zYDlY}O3}TaI^$jqR<9^2q?GQ8NzLCqdf2qCwP)}v<~ZNZJJSF9Q?zHiHk9obQ1D%0 z|26Ap&jo{}+>X-MQT^MB5-c2FK#cpHj%ICn-udNNaqWgoq%^bT80in!6}@ka@{&9R z&dfgWOb=APTamePG70=r;gd;R{!q`I)GsZSpm1|TvjuN$hqyejB1%$U_UdI4iIH2x zv0U@#%M1DblVu5qp4)M4In_<)T~;N<75S`ohm_;%CPlSRXsN6@A{TDw#ny>%> literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/point1.png b/demo/mask_detection/web/image/point1.png new file mode 100644 index 0000000000000000000000000000000000000000..20a9cd5deec1af3909770d80d7c92879e8e18d7f GIT binary patch literal 1141 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~Nv<8MrwbJ6c*gTbP;}8oF9II-8n0Iy)OX8W#O)SyoaRCG zrr>sq1x~&CK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk)_ZIYv;(umOHUWakcwMd zrW$g!7znsdz7iI_{1Zdd+}^KpE+RHv*FT6w>o?6c-*8Jh;`AFH$#P?j-E5EA*(X`> zyH8%h=pcJUseFk`k;>DLk~1f$e{zW1?Il!|vBZt-$Na|kSN9#Bes==jq05D91zyd~ ziDjI{rf`~J(hP{44h^_ht85!uD)7-ju9qsl%y#@mb`}ww(P& zdrV?(g|WI{o6>fD=4p#I?o?ktUH$p&%k(908C|W}EFo&ywtceqtTySCvpE&{yF^@f z1YGmEIQ^_DxAm`UyPp(v)YZ6JCzQU4KM>u($Z+MSQ`=D?4p5=O;OXk;vd$@?2>@RJ BfQbMA literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/point2.png b/demo/mask_detection/web/image/point2.png new file mode 100644 index 0000000000000000000000000000000000000000..24b156f657e80ab8e81714fb174b55014f900fb1 GIT binary patch literal 961 zcmaJ=O^ee&7><<6valWnzhIb!#f5D?`VpJZxNVZwjciJ3E8C-KGHpXQnV3v%+LL(F zgP#2X9z2NP*~1nQK@hxq_vAr;zzR;fZP$a{kYql1p67k%eV=*WsNdV#yuQgW%$9MW zH|dy8zKzTD{{rv)pu;s%?T{Akk+BsbrsCi(0)}VxQ4?9tuU>9QHXulB7f7ldlDs1|cIP1JZbSIw(BzvSxJ z9(l+oORjUyRo8M8D|i8otfSCtnw87^t;KaE~) zQTHU%m2K%_WqjmQw};f$yDzo-^hy*Az0!`qcTc~~W}j!XS^Cq>@@eYX$@_A;{OVFI sS9t(ZS9ac9b$+K_|G9CP{(AU?Ningtacl4G&yUHaGOBg`o%-c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L$o& z6x?pH#Hm*w=oo!av?4__ObD2EKuma|1#;lYJ~a=R){B6Nx*+&dB?ANFK2I0NkcwMd zrrCQlI|>}l_ZKqMbn#4`<-m3MMnuPiQ*Inf#Q(6o)Xn+BA$FZLTTn1MH#t?XNt3B* zYQkhCB^4n9v1c{fn+m zy})wU!d6XzX{ku9(yvyf9lduSGn>SmWzkL+EIBZ5+8^N;&5|0;%o`5AJAcq{$4AY@ z^Df%1P^~#ElhJ5c{Z0DKu4x-rO3r0Y6wGf{y!<6cYU_(ENzUWnH}F66xxHa#=+-q^ zcIrGa#&4ItygA`lhkTp(`FA^$UhjH&aDr5rtNjQ5bt`Y23A<4@?O;zfOKsY!n=Nlo zOP<;BZ0;|;t2qb0ZAvVjm)4&1Hz)g*>8w(%C^_{)(LIK5S9;HP^)Xo1R%)1SeD{jk zjH`=WoI{UJkh(S{F#7d*w5%2Wt*p~pUXO@geCw2(d&@_ literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/t1.png b/demo/mask_detection/web/image/t1.png new file mode 100644 index 0000000000000000000000000000000000000000..ce8475af2b169bf3611914956e0700bdb1d930d4 GIT binary patch literal 1733 zcmeAS@N?(olHy`uVBq!ia0vp^ia;#K!3HE3ohTOvQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?>3@Ln2Bde0{8v^Ko2Tt~skz|cV7z)0WFNY~KZ%Gk)tz(4^Clz_GsrKDK}xwt{?0`hE?GD=Dctn~HE z%ggo3jrH=2()A53EiFN27#ZmTRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1?ON>h49S0l>G8y zuxejlE6=>*lEl2^R8JRMC7^!2%*+%kOE+^z7b9aAOEWWbLqk^!OEUvAH)BgD6JsYw z3kzpwm|mCsATTyzVw=XlC{M-Ou+FpSS#Oldm`Z z^9~Vx3&v-S>I-Cg8r?2%Z(|If{VPVwfcXtm|ABl17Q1GVAFOiCa}##0-d^;xWBg)o&eO7GgYp&?tcM*=LWc11SYk zKMvMbdG%>>ME#g!^M6A1)~v0a>N+wEnj2(8GM=>_eW0>~>08t32O`HyUpFVPf4`eQ zce|cngG$GZoMl3+#~m!|#l=4Ow6v`WI$k>~*@FEScgJ#Z1!l7k+t)Xw|Jqr9NJO}h zZHDyD2St0|$p60Y7BN4cA(YSU$lIP3EQw+=q1$e`eckW6rt!(^mL=r}Hm#dprB!-! zBMVPP(@SBCY~hT#3%d62`l)kciKIM>cWI+!dSPIy&v|HbJDuKx0?RjLEBZ-qEzE<#W{3oc%;vRJmyR8CGL&!z9*Tjj%~;c;7DLIVo*8 z`)izT5aX^-tD6@|9lpaawzbUn;w-1V^}QX%A9rlp&>6mU&Cj%eD{m5xXtOO3mpuO| ztar8B5tEr0PtCq`_})RkbyCkRJ>cG~lQ&(_&Nv8*$=^|d; zku%ZlPs*BD=GQ)MQ#LjS^=70*ecM>*DJ^ogsDsn+ky^7&hN06Jwj&*^I$H8mS#`Z^ zEIh9)j5sO#QEX4z-ILuS2i`BbpDxUwYt!ZQWLjdL%g(_346h$9dp~5pW99b1xGN?w#cP>@ctkKdqIFZ2C?-G+9r z-LhHDS__$iOyrl?)+GKkvvkQnex$?F=ir1(GfE;)ZTCFHn$qrWIZ3U`aZ}c|6H_V+Po~;1Ffc1*hD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo`G(%fti7VnW3Jc zv5C34xsHO7fuVuEfswwUk*=Y+m9dePfq?=PC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3Uk4Ff!5ws?aU2%qvN((9J7WhMC}!TAW;zSx}OhpQivaF)=B> zw8T~k=u(Imatq+b<`qMO2^e7d6^RA|Gy9x$yJ0TcBtn`;vp7?{*OT^vIy zZmpT->k$$ta{Rr`{CM9Hqlh{qY zj*Pq8d;{|Cuqr-EH=c6DB;Gg6?!Wqfas9(*ti#_N$bWFJ{9gSz%kOu7=Lxu8^!*^1 z;;3ge`|ans@(+w9czO(#AMi`CmLHUPu_8&*hJEh2JG>hh@){EZ*qjyXemPoKa7a1u zS8$s-T%2=5_5-8M(;c(-9pZT&jx>@xDSIwh4HW`!I zr#m$I`8&iOZKmTDPkv?x1YC=;l9VS2peW`zo_3GJTI|u=`0R4x6ZFvyJavd$odd*=iPZ(}NSX zzI=Fc?&DRrf?Z#2ef6WBHF?f?W8ZA`-!kUQMDH!=I=6P!3Co=mc^RGant3#??C6wj d+M3MB#xUj0mkE0Wo=yc7qMojPF6*2UngD3_CQ$$Y literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/t3.png b/demo/mask_detection/web/image/t3.png new file mode 100644 index 0000000000000000000000000000000000000000..8d17abecaa113d58c0d821472ad76732835cdb53 GIT binary patch literal 1317 zcmeAS@N?(olHy`uVBq!ia0vp^@*p+`8;}g#uyrMnk}PqJC<)F_D=AMbN@Z|N$xljE z@XSq2PYp^XQ2>tmIipR1P$QlnRqTL9F}z+huvQIMFNom!%h zl$xHIXRGvn_kJaX%oJOta8q9c-vZ~}1OnC3`ysn+hwS0lBFq zi3%0DIeEoa6}C!XbFF}Ekg&dz0$52&wyhGxQ4ziY3eNdOsS2ig2D-@xW(EpohI)p^ zCg$emItoSxh6efuM*4KTB%1XJkii(hGOE?jkSNl+@ny;uz{4yi0i z)elN7&Mz%W21Z<(GRUd|E9aur#FG4?ko^1{SSSW$3z zx|tio^t$9Hm*%GCmB93-AoRN6)C)=oxdlL*T~doO%TiO^it=+6z#g{B#O)SGoaRCG zrr>sq6HdMQK*#8Vq7^BcVM4&P17gAxEsz6G_NjTmv|a>E)CKu*`6+rAr-gQ zTsfd%Z)?NX*2>q-fB*dZ&p#y>GeW-mvwe9aBN%dg_xJt$ zW{3NgcWh|+Cx0!x~13Q3<{#XD3&* zi1SKJwG=ihY*r{UXf2a4{q4Ns@9VQ`XE@u{d{FW>`tYm0c-cp}_qm@R9GrZ|ig~Vv z?}o5BH-2XZ$-X0#-7wJqW>nfkJNKSRbiMqupX0lb0-`8A{d)6Mj z%KVzdAtS%!GcT7iXI;?wJMVYo$@tp(R)KS=|2x0z@a{f(kBAS3j3^P6XQ2>tmIipR1P$QlnRqTL9F}z+huvQIMFNom!%h zl$xHIXRGvn_kJaX%oJOta8q9c-vZ~}1OnC3`ysn+hwS0lBFq zi3%0DIeEoa6}C!XbFF}Ekg&dz0$52&wyhGxQ4ziY3eNdOsS2ig2D-@xW(EpohI)p^ zCg$emItoSxh6efuM*4KTB%1XJkii(hGOE?jkSNl+@ny;uz{4yi0i z)elN7&Mz%W21Z<(GRUd|E9aur#FG4?ko^1{SSSW$sq3r@ZIK*#8Vq7^BcVM4&P17gAxEsz6G_NjTmv|a>E)K6COr!z1x=6Jd|hE&{I zbNRgX;X;|?ANj?Sg1l3XX5GBvB~!Lw${HEjId`t{O^a-7xu zCu(QLvZ)jPE~wo1b&~6=-Jez--~Qfi{`ucu?|%RMw5;+)nY0Nx3_Pg$f$?q*eC6TAApUXO@geCwz3D0x@ literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/t5.png b/demo/mask_detection/web/image/t5.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd42b597eafa36fc34fb3a1c5e16be197f6588c GIT binary patch literal 1439 zcmeAS@N?(olHy`uVBq!ia0vp^3LrKI8<0HVks|}7BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFe_w+M3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWfo`&anSp|tp`M|! ziMhGCj)IYap@F`Ek-njkuA#Y=v5}R5fdUjL0c|TvNwW%aaf8|g1^l#~=$>Fbx5 zm+O@q>*W`v>l<2HT7t|lGSUUA&@HaaD@m--%_~-hnc$LIoLrPyP?DLSrvNfBF)6>a z#8wIDQivCF3*g4)6+?pw7-0Gpi3R$GdIlgb!4&%X;#ZoR3s+rS5|oN?FIIz#Ln;eW z^@CE2^Gl18ff1Lc46>@g%DE^tu_V7JBtJg~7K#BG`6cd1|nJHE-rbdRArp}g@W@hGwhOQQl&Sq{dW)?;U7S0C7 zhDJs(y)OC5rManjB{01y2)&Lt^@0*YZUN9{m(-%nveXo}qWoM1u!pTOal6GFr+HAl zDY)HYfm5$O&@uX;Xhn)3muH=xzL>u z=<+3rZDLbnz=K1rO|vE}Fq&o%G;LDmsd>qm3`_Mfh3Ec_9`#=q`e>c-=Xe)Lalh%!-@myK}K>U()J{LYP}wc_VD zw5_Vw{am<3u|<+4pm+O@b}1DF_C%8%*M5HxQU1}oXRg+S-o+lydU-4N$ZzP#WBI`5 zsI%i*{E_0CW7es0?UEsj#MdV?e|W66?lDu4z%ijqh2l#qI>c-))`+$jNU@$cB+*u) zQWlcFvGIFF=l+cCEQ=XKG!|QaNni-BXzABDC@-SaQg`OD5MTCT%dd_RC#Pt3g#Qo= zmfTGunBJl-$l3ov%Ut=u^ z{-x6};nc;QuJR=dPkueKDxjB>C%J64oYtkt^wmywp(lm9R_qsBW1M@(QQ)gaYk2JK zN{9NOZRx9Dn~B_RU&~aM_dL`|`@Q5Gr%jt=9fj)Nf7mauTxajD`<_|nLjKMRFxG$h zSJX6bFKa>kQmHFDeOFw3v+D1K)4O{`a$mey{BhQDO$+zGk1pCcn=iJg;(oK|)Z4~c zN6zU6&sKf+>0@fDysUK9vlUX>hLP)!uG#p#X*LrNgLeIvH5p>lUxA8DPgg&ebxsLQ E0B=|n761SM literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/t6.png b/demo/mask_detection/web/image/t6.png new file mode 100644 index 0000000000000000000000000000000000000000..cc8bbab9bc9a95245300f17ec39fd8f5783ccf62 GIT binary patch literal 1456 zcmeAS@N?(olHy`uVBq!ia0vp^!ayv~!3HE*Cw|6H_V+Po~;1Ffc1*hD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo`G(%fti7VnW3Jc zv5C34xsHO7fuVuEfswwUk*=Y+m9dePfq?=PC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3Uk4Ff!5ws?aU2%qvN((9J7WhMC}!TAW;zSx}OhpQivaF)=B> zw8T~k=u(Imatq+b<`qMO2^e7d6^RA=f$KS3=B+ao-U3d z6}Q$*JL?@1C~@rkor8{1kz9&9Wn(%P8a1iJY*8$Km-F=2f-=Y4TU&A;Zu{3zl)961 zlW&V}z&oMx%|cQJOZcbSIe6ypFR$s7)l0r(eYsKI`18E)l@{-9pYJJ;nWXZ01K;Wo zjCD?;ckDZ+rvKDmGXJ~q{zS&KFF$3|&Kt~Xv)v*2WVYS5lT0~Fk8BpwImCMO+(FwP z3$qTzTo$i+z^Jn{ETC=r2kw2Rp4f&2ReE2tmX~OaeUTM-O?7Hep5b-XyBQg2OW(by z+#%!Ron9rrb8_R_YSxXX&68gG)Mq^tnR6!7OmptEFXbnvC)%ga{C#QXhnbQ~pQL5=YujXmwH>I4OmSr&Q;FsTRNM|{DIb*o!^el`f}E&dsp&d zOYbi{-tk-HAAh*{eTkWdhkagZ*u$;wJ#%|peq}A07g9X8H|lcxQ`3Y+XN7E+6;pKM<5zA$_OGJnFC7ozOoHmD-nP d+Wk{Lz_5_@@b8}|4m5+xP)}Dsmvv4FO#trlFS`H$ literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/t7.png b/demo/mask_detection/web/image/t7.png new file mode 100644 index 0000000000000000000000000000000000000000..b89f96a372c6140fb1757d38503e53d53b15fb15 GIT binary patch literal 1334 zcmeAS@N?(olHy`uVBq!ia0vp^GC(ZE!3HEf*!MjFQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?>3@Ln2Bde0{8v^Ko2Tt~skz|cV7z)0WFNY~KZ%Gk)tz(4^Clz_GsrKDK}xwt{?0`hE?GD=Dctn~HE z%ggo3jrH=2()A53EiFN27#ZmTRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1?ON>h49S0l>G8y zuxejlE6=>*lEl2^R8JRMC7^!2%*+%kS4&4@7h?lUOEWWbLqk^!3sVATTy{uS&c z({XanG*y))DaDC#_m|h@U%R|}>!)`s&%dhuw`c$N?|b$?pL^JV$9>+`hn&itjz>3r*4q zjgQ&(O`^_rK^6P!PZQss+0dKUovU|z+nU!`kA)l%bGexMZT9gbQQeGVwQXHKS=aA! zD09sZS#|GDk=y@Se{yXWSRH>A61n!oHTErwJj*p_9{tMGJma|fsm*gN`Txvtb=lOF zIy3)-WywoPwVpe-#J?F#dF&^1!m3oPHtqj<24;rBrbPn&)(#1vlFZZ9&t;ucLK6UU C((&8? literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/zoom.png b/demo/mask_detection/web/image/zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..b642f38e12608b2130a1c098182c95921e92790b GIT binary patch literal 1737 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6H!3HD+Ytl-Alw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#24;oKkcg59UmvUF{9L_6kQ%*;+ybC(1_m4Zih{)C?9>v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gtf;oFf&jvGt@IQ zHZeCh*HJJsFf`CNFw!?P(ls=L_wNeO;8xj3|-LMdDLlq&i((CU(nBCq_baS745yqzFso1*e7Di4&eIS|BFa zqPNBS2D3^{sDz7)W{D<~>curaOPy9~6#kl9xUT=tJJ-dHpXXN2`E38+vN+8yw} zZAoY_*D8^d#-~!UmrlOGWqT~f{1e0dwp*_rC5kS5x&NT{Dks|_-)$2k||F8Z?N zT9o!j=l>~xjfxqYd|X)9ugE!b=%HNfe&)9>d4elscQal)a!-G^W0&N+ZU3V7rp5$F zYrOl)QhvZ+V*Q~V^H&=6$gkGujeWK_PrycUzu=$pSRRqD=a|_oEJ!^%J z?xI4olPk;$wk?Qv&QafYKlN<7az<<~#|MD}tlg~B*e>_4sQuA(KCP_KY>$|+;a0<` zU#rrRQl&Kh^QwcNTEChoJAZeL+8i;)i0&mft>#|7QD(U+ z<{e}7UnNG109noV6MTxFr+fZ<@g*WC>Zyy3pX@WCy%VR&Oz)icGFReqlDzU#{zDg@ zKRv>??@YhvPb6JmX>9$n^j^Td>Ano}%U`Z-JaNRQ^}sGEQKc*)MXMW0w}cwZAKYi#IF+TM z?Z4`J_3QcbV^W{+tMp$eT#|Xvbtdc7&sxoyvJ3wH_?PyJW6kcp^(UQ?sE@);A!K0c>3|b`KSI? zPGO!}#dl$U|GR`aj{Egx9Nd373aiK+{=4RR^JLabR$o+#=g+Ke^wfTA-SDR<)63P? z$!LO|in-E{{U#hY83ax=)Sg)WFM0D$Gp%r~eg^G-90m*yx4XXU%sBoBRJnM%`njxg HN@xNA3?H8K literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/index.php b/demo/mask_detection/web/index.php new file mode 100644 index 00000000..41c17aa7 --- /dev/null +++ b/demo/mask_detection/web/index.php @@ -0,0 +1,241 @@ + + + + + + + + + + + + + + + + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    摄像头分组显示 + +
    + 摄像头_1
    +
    +
    +
    +
    + + + + + + + + +

    + + + +
    + + +
    +
    + +

    无口罩

    +





    +

    有口罩

    +

    +
    + +
    +
    deg);"> " height="" /> + +
    +
    px;top: px;">
    +
    + +
    +
    +
    +
    +
    +
    + + + + diff --git a/demo/mask_detection/web/js/ckplayer/ckplayer.js b/demo/mask_detection/web/js/ckplayer/ckplayer.js new file mode 100644 index 00000000..6f91adc3 --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/ckplayer.js @@ -0,0 +1,8182 @@ +/* + 软件名称:ckplayer + 软件版本:X1 + 软件作者:http://www.ckplayer.com + -------------------------------------------------------------------------------------------------------------------- + 开发说明: + 使用的主要程序语言:javascript(js)及actionscript3.0(as3.0)(as3.0主要用于flashplayer部分的开发,不在该页面呈现) + 功能:播放视频 + 特点:兼容HTML5-VIDEO(优先)以及FlashPlayer + ===================================================================================================================== +*/ +function ckplayerConfig() { + return { + flashvars: {},//用来补充flashvars里的对象 + languagePath: '',//语言包文件地址 + stylePath: '',//风格包文件地址 + config: { + fullInteractive: true,//是否开启交互功能 + delay: 30,//延迟加载视频,单位:毫秒 + timeFrequency: 100,//计算当前播放时间和加载量的时间频率,单位:毫秒 + autoLoad: true,//视频是否自动加载 + loadNext: 0,//多段视频预加载的段数,设置成0则全部加载 + definition: true,//是否使用清晰度组件 + smartRemove: true,//是否使用智能清理,使用该功能则在多段时当前播放段之前的段都会被清除出内存,减少对内存的使用 + bufferTime: 200,//缓存区的长度,单位:毫秒,不要小于10 + click: true,//是否支持屏幕单击暂停 + doubleClick: true,//是否支持屏幕双击全屏 + doubleClickInterval: 200,//判断双击的标准,即二次单击间隔的时间差之内判断为是双击,单位:毫秒 + keyDown: { + space: true,//是否启用空格键切换播放/暂停 + left: true,//是否启用左方向键快退 + right: true,//是否启用右方向键快进 + up: true,//是否支持上方向键增加音量 + down: true //是否支持下方向键减少音量 + }, + timeJump: 10,//快进快退时的秒数 + volumeJump: 0.1,//音量调整的数量,大于0小于1的小数 + timeScheduleAdjust: 1,//是否可调节调节栏,0不启用,1是启用,2是只能前进(向右拖动),3是只能后退,4是只能前进但能回到第一次拖动时的位置,5是看过的地方可以随意拖动 + previewDefaultLoad: true,//预览图片是否默认加载,优点是鼠标第一次经过进度条即可显示预览图片 + promptSpotTime: false,//提示点文字是否在前面加上对应时间 + buttonMode: { + player: false,//鼠标在播放器上是否显示可点击形态 + controlBar: false,//鼠标在控制栏上是否显示可点击形态 + timeSchedule: true,//鼠标在时间进度条上是否显示可点击形态 + volumeSchedule: true //鼠标在音量调节栏上是否显示可点击形态 + }, + liveAndVod: { //直播+点播=回播功能 + open: false,//是否开启,开启该功能需要设置flashvars里live=true + vodTime: 2,//可以回看的整点数 + start: 'start' //回看请求参数 + }, + errorNum: 3,//错误重连次数 + playCorrect: false,//是否需要错误修正,这是针对rtmp的 + timeCorrect: true,//http视频播放时间错误纠正,有些因为视频格式的问题导致视频没有实际播放结束视频文件就返回了stop命令 + m3u8Definition: { //m3u8自动清晰度时按关键字来进行判断 + //tags:['200k','110k','400k','600k','1000k'] + }, + m3u8MaxBufferLength: 30,//m3u8每次缓冲时间,单位:秒数 + split: '|',//当视频地址采用字符形式并且需要使用逗号或其它符号来切割数组里定义 + timeStamp: '',//一个地址,用来请求当前时间戳,用于播放器内部时间效准 + mobileVolumeBarShow: false,//在移动端是否显示音量调节按钮 + addCallback: 'adPlay,adPause,playOrPause,videoPlay,videoPause,videoMute,videoEscMute,videoClear,changeVolume,fastBack,fastNext,videoSeek,newVideo,getMetaDate,videoRotation,videoBrightness,videoContrast,videoSaturation,videoHue,videoZoom,videoProportion,videoError,addListener,removeListener,addElement,getElement,deleteElement,elementShow,animate,animateResume,animatePause,deleteAnimate,changeConfig,getConfig,openUrl,fullScreen,quitFullScreen,switchFull,screenshot,custom,changeControlBarShow,getCurrentSrc,changeDefinition'//需要支持的事件 + }, + menu: { //版权名称支持 + ckkey: '', + name: '', + link: '', + version: '', + domain: '', + more: [] + }, + style: { //风格部分内容配置,这里主要配置loading和logo以及广告的部分内容 + loading: { //视频加载前显示在播放器中间的图片,如果不需要可以删除该属性 + file: 'data:image/swf;base64,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', + align: 'center', + vAlign: 'middle', + offsetX: -100, + offsetY: -40 + }, + logo: { //显示在右上角的logo图片,如果不需要可以删除该属性 + file: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAUCAYAAAD4BKGuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAVTSURBVHja1Fl/aJVVGP4cw/mH5tUWi3I53cA0WbeIzMgaq6lQoVawm0S6glHhIKM/TELICotqCxMSGWQRdFfRLEhc9mMxqA0rbdS2wsV0GkZXuaKUWlHvgeeNh7f3u1du3Ft74eGcnXu+c873vD/Pt0nZbDZyZL2gWZAQTBH8IjggeEjgPZASPIB+g/P7EsGT6J/BfHfjHFIv2Jpjj/+dlDskvCm42Jk7X3C7YJOgw/z2oOBGwdEYRW0RVAjOCZ4ugNggqwU3CTLRBJFyQ+xuwVRY14igB78tE9QKpgmeEHwkGKRnq9AeMesHRWwEsYGUxwSdBZ51ecweE4Lct0DsOVjaZvptA8jfC4JfghWpXIJ2jMY+EDShf1pwh6DvX5x1GtpDE43cNFlfhyFWpQ9xd5FgFo3fRi++C+2nCBNBRgU3O6RsEyyEQv4QLMb4CcE9RlFBLqS1WZ6BZ83A35ofVhuvfE5QJrjWebdgCJOx51qM1QgewbMzsO57MDQrB9DeC8ObHd5Xyb2eiNiQQxmtgkZBr+OuZwV7BIcF1RgbF1wTE2MbEccX48VY9sMzBilhTke/m+b1Q9lefpgruI7OsYhIGzPJuAnn3+6EM7vu1YKl5vkrYRSfCGZivCxoMklk7M5j6eFlXyRNRSAvAoFf0Fo/CC7LkbwuQjsZsf0qwbuI9wlYgIqGl6NEzDYibJ/gbmAfxpKoMDRcaSK8xZzjZbK+NMhSYoNSngV5e+ksKXp+JdqZwDDmdpSbsqa9gNAyi5JalSGv3iQ+dtNK9HvI+sNBh2AhvNYVaH+msRtAdsa4ehoKCuQsoP2PY8+kCSkJ5IRWjD2FZ4/BOFSWYv9KhI40eUKQ31CqdnLM1c1OOnHufKSS+iEZvgHNhji8g1yT5VZKdCnHO+ajvrYK/I7GkuSWjwvq8Mzl5M79NF89aCHaBNXmWv0sQVUUZEDwsDnbr2i9s31lKyGuFs7kITEBC+snJaToRYIFrRN0CeYgoSUxJ23WUm85eB41b4IUuIvGtyIMVMY8lzHGMoYworF7J/onKYk10/wVQL6zXYr+Zq9aOEhuXZPDel8Q3If+HMzTeHPKlForEK+mws3SMfH2UMxNLIJbasKsoIQZwVLbKFkN4T1C3HxUMM+EkCAfgjwNV40Y304KriOP+jIHqa+jvYsqnH/kqzKaGCFZxWnoTqooxky8+dHUsOGwr6Jfi9jmlVVTHGLnot9L3qGWqCToWYYRF5fDa96mtb93yI2g8B0IWxlTHWmi/hOG00D4mEJfJ5WhQX7ySCsDUaNkJeud6+sgXCgs3OLEG2/xdZSh10JBeiB1zQU0HuQdSib60rOdm9kFToIL8hmFiRHzm1YM0ylet5k579OFpcUk4I0oD0/QuJ7tcBy5ERY6ixdrh5uNwN3bUV7pd4E+J958HmPxbRRydqK/in6vxj5aH9din/udEPKtuU1GqBL24xJwBInQWiHLcbQVKBXTzkVpHP0tWHsIpZUqPeWcrScXuX2ImRkqlufBhdQl15ig3WLKH0/SeAmtD+uprBqGx1ThhlWN5LKG4lcNKbDblFDjVDU0wWK7yLLqnPNk6cKzKsfXt1GQmQQXSuwymhd3tr9lkvPJMUV152kc2PsmUEMxtzdPRk2SNX2DQ3Vhr02Is18LXjHVAz/bG0NEK8johus3UBiwyfkYlDkQUyLaWrwZBrbHMaB8Z3PJLaYk8IIVKKPSJdxbv3ecynNzLNr33GKLV1YVW4IyfycXfq0UxP4X5HJdXCqX4Wv0AKqYkkipw4LG6WxMNi+GhAtH+M/K8wVe7wuWvwQYAFT+UsGCXmX3AAAAAElFTkSuQmCC', + align: 'right', + vAlign: 'top', + offsetX: -100, + offsetY: 10 + }, + advertisement: { //广告相关的配置 + time: 5,//广告默认播放时长以及多个广告时每个广告默认播放时间,单位:秒 + method: 'get',//广告监测地址默认请求方式,get/post + videoForce: false,//视频广告是否强制播放结束 + videoVolume: 0.8,//视频音量 + skipButtonShow: true,//是否显示跳过广告按钮 + linkButtonShow: true,//是否显示广告链接按钮,如果选择显示,只有在提供了广告链接地址时才会显示 + muteButtonShow: true,//是否在视频广告时显示静音按钮 + closeButtonShow: true,//暂停时是否显示关闭广告按钮 + closeOtherButtonShow: true,//其它广告是否需要关闭广告按钮 + frontSkipButtonDelay: 1,//前置广告跳过广告按钮延时显示的时间,单位:秒 + insertSkipButtonDelay: 0,//插入广告跳过广告按钮延时显示的时间,单位:秒 + endSkipButtonDelay: 0,//后置广告跳过广告按钮延时显示的时间,单位:秒 + frontStretched: 2,//前置广告拉伸方式,0=原始大小,1=自动缩放,2=只有当广告的宽或高大于播放器宽高时才进行缩放,3=参考播放器宽高,4=宽度参考播放器宽、高度自动,5=高度参考播放器高、宽度自动 + insertStretched: 2,//插入广告拉伸方式,0=原始大小,1=自动缩放,2=只有当广告的宽或高大于播放器宽高时才进行缩放,3=参考播放器宽高,4=宽度参考播放器宽、高度自动,5=高度参考播放器高、宽度自动 + pauseStretched: 2,//暂停广告拉伸方式,0=原始大小,1=自动缩放,2=只有当广告的宽或高大于播放器宽高时才进行缩放,3=参考播放器宽高,4=宽度参考播放器宽、高度自动,5=高度参考播放器高、宽度自动 + endStretched: 2 //结束广告拉伸方式,0=原始大小,1=自动缩放,2=只有当广告的宽或高大于播放器宽高时才进行缩放,3=参考播放器宽高,4=宽度参考播放器宽、高度自动,5=高度参考播放器高、宽度自动 + }, + video: { //视频的默认比例,当视频元数据里没有宽和高属性时默认使用该宽高 + defaultWidth: 4,//宽度 + defaultHeight: 3 //高度 + } + } + }; +} +! (function() { + var javascriptPath = ''; + !function() { + var scriptList = document.scripts, + thisPath = scriptList[scriptList.length - 1].src; + javascriptPath = thisPath.substring(0, thisPath.lastIndexOf('/') + 1); + } (); + var ckplayer = function(obj) { + /* + javascript部分开发所用的注释说明: + 1:初始化-程序调用时即运行的代码部分 + 2:定义样式-定义容器(div,p,canvas等)的样式表,即css + 3:监听动作-监听元素节点(单击-click,鼠标进入-mouseover,鼠标离开-mouseout,鼠标移动-mousemove等)事件 + 4:监听事件-监听视频的状态(播放,暂停,全屏,音量调节等)事件 + 5:共用函数-这类函数在外部也可以使用 + 6:全局变量-定义成全局使用的变量 + 7:其它相关注释 + 全局变量说明: + 在本软件中所使用到的全局变量(变量(类型)包括Boolean,String,Int,Object(包含元素对象和变量对象),Array,Function等) + 下面列出重要的全局变量: + V:Object:视频对象 + VA:Array:视频列表(包括视频地址,类型,清晰度说明) + ID:String:视频ID + CB:Object:控制栏各元素的集合对象 + PD:Object:内部视频容器对象 + --------------------------------------------------------------------------------------------- + 程序开始 + 下面为需要初始化配置的全局变量 + 初始化配置 + config:全局变量定义一些基本配置 + */ + this.config = { + videoDbClick: true,//是否支持双击全屏/退出全屏动作 + errorTime: 100,//延迟判断失败的时间,单位:毫秒 + videoDrawImage: false,//是否使用视频drawImage功能,注意,该功能在移动端表现不了 + adSkipClick: 'javaScript->adjump' //h5环境中点击跳过广告按钮触发的功能 + }; + //全局变量:播放器默认配置,在外部传递过来相应配置后,则进行相关替换 + this.varsConfig = { + playerID: '',//播放器ID + container: '',//视频容器的ID + variable: 'ckplayer',//播放函数(变量)名称 + volume: 0.8,//默认音量,范围0-1 + poster: '',//封面图片地址 + autoplay: false,//是否自动播放 + loop: false,//是否需要循环播放 + live: false,//是否是直播 + duration: 0,//指定总时间 + seek: 0,//默认需要跳转的秒数 + drag: '',//拖动时支持的前置参数 + front: '',//前一集按钮动作 + next: '',//下一集按钮动作 + loaded: '',//加载播放器后调用的函数 + flashplayer: false,//设置成true则强制使用flashplayer + html5m3u8: false,//PC平台上是否使用h5播放器播放m3u8 + track: null,//字幕轨道 + cktrack: null,//ck字幕 + preview: null,//预览图片对象 + prompt: null,//提示点功能 + video: null,//视频地址 + config: '',//调用配置函数名称 + type: '',//视频格式 + crossorigin: '',//设置html5视频的crossOrigin属性 + crossdomain: '',//安全策略文件地址 + unescape: false,//默认flashplayer里需要解码 + mobileCkControls: false,//移动端h5显示控制栏 + mobileAutoFull: true,//移动端是否默认全屏播放 + playbackrate: 1,//默认倍速 + h5container: '',//h5环境中使用自定义容器 + debug: false,//是否开启调试模式 + //以下为广告相关配置 + adfront: '', + adfronttime: '', + adfrontlink: '', + adpause: '', + adpausetime: '', + adpauselink: '', + adinsert: '', + adinserttime: '', + adinsertlink: '', + inserttime: '', + adend: '', + adendtime: '', + adendlink: '', + advertisements: '' + }; + this.vars = {};//全局变量:语言配置 + this.language = { + volume: '音量:', + play: '点击播放', + pause: '点击暂停', + full: '点击全屏', + escFull: '退出全屏', + mute: '点击静音', + escMute: '取消静音', + front: '上一集', + next: '下一集', + definition: '点击选择清晰度', + playbackRate: '点击选择速度', + error: '加载出错', + adTime: '广告{$second}秒', + skipAd: '跳过广告', + skipAdTime: '{$second}秒后可跳过广告', + adLink: '查看详情' + }; + //全局变量:右键菜单:[菜单标题,类型(link:链接,default:灰色,function:调用函数,javascript:调用js函数),执行内容(包含链接地址,函数名称),[line(间隔线)]] + this.contextMenu = [['ckplayer', 'link', 'http://www.ckplayer.com', '_blank'], ['version:X1', 'default', 'line']]; + //全局变量:错误提示列表 + this.errorList = [['000', 'Object does not exist'], ['001', 'Variables type is not a object'], ['002', 'Video object does not exist'], ['003', 'Video object format error'], ['004', 'Video object format error'], ['005', 'Video object format error'], ['006', '[error] does not exist '], ['007', 'Ajax error'], ['008', 'Ajax error'], ['009', 'Ajax object format error'], ['010', 'Ajax.status:[error]']]; + //全局变量:HTML5变速播放的值数组/如果不需要可以设置成null + this.playbackRateArr = [[0.5, '0.5倍'], [1, '正常'], [1.25, '1.25倍'], [1.5, '1.5倍'], [2, '2倍速'], [4, '4倍速']]; + //全局变量:HTML5默认变速播放的值 + this.playbackRateDefault = 1; + //全局变量:定义logo + this.logo = ''; + //全局变量:是否加载了播放器 + this.loaded = false; + //全局变量:计时器,监听视频加载出错的状态 + this.timerError = null; + //全局变量:是否出错 + this.error = false; + //全局变量:出错地址的数组 + this.errorUrl = []; + //全局变量:计时器,监听全屏与非全屏状态 + this.timerFull = null; + //全局变量:是否全屏状态 + this.full = false; + //全局变量:计时器,监听当前的月/日 时=分=秒 + this.timerTime = null; + //全局变量:计时器,监听视频加载 + this.timerBuffer = null; + //全局变量:设置进度按钮及进度条是否跟着时间变化,该属性主要用来在按下进度按钮时暂停进度按钮移动和进度条的长度变化 + this.isTimeButtonMove = true; + //全局变量:进度栏是否有效,如果是直播,则不需要监听时间让进度按钮和进度条变化 + this.isTimeButtonDown = false; + //全局变量:用来模拟双击功能的判断 + this.isClick = false; + //全局变量:计时器,用来模拟双击功能的计时器 + this.timerClick = null; + //全局变量:计时器,旋转loading + this.timerLoading = null; + //全局变量:计时器,监听鼠标在视频上移动显示控制栏 + this.timerCBar = null; + //全局变量:播放视频时如果该变量的值大于0,则进行跳转后设置该值为0 + this.needSeek = 0; + //全局变量:当前音量 + this.volume = 0; + //全局变量:静音时保存临时音量 + this.volumeTemp = 0; + //全局变量/变量类型:Number/功能:当前播放时间 + this.time = 0; + //全局变量:定义首次调用 + this.isFirst = true; + //全局变量:是否使用HTML5-VIDEO播放 + this.html5Video = true; + //全局变量记录视频容器节点的x;y + this.pdCoor = { + x: 0, + y: 0 + }; + //全局变量:判断当前使用的播放器类型,html5video或flashplayer + this.playerType = ''; + //全局变量:加载进度条的长度 + this.loadTime = 0; + //全局变量:body对象 + this.body = document.body || document.documentElement; + //全局变量:播放器 + this.V = null; + //全局变量:保存外部js监听事件数组 + this.listenerJsArr = []; + //全局变量:保存控制栏显示元素的总宽度 + this.buttonLen = 0; + //全局变量:保存控制栏显示元素的数组 + this.buttonArr = []; + //全局变量:保存按钮元素的宽 + this.buttonWidth = {}; + //全局变量:保存播放器上新增元件的数组 + this.elementArr = []; + //全局变量:保存播放器上弹幕的临时数组 + this.elementTempArr = []; + //全局变量:字幕内容 + this.track = []; + //全局变量:字幕索引 + this.trackIndex = 0; + //全局变量:当前显示的字幕内容 + this.nowTrackShow = { + sn: '' + }; + //全局变量:保存字幕元件数组 + this.trackElement = []; + //全局变量:将视频转换为图片 + this.timerVCanvas = null; + //全局变量:animate,缓动对象数组 + this.animateArray = []; + //全局变量:保存animate的元件 + this.animateElementArray = []; + //全局变量:保存需要在暂停时停止缓动的数组 + this.animatePauseArray = []; + //全局变量:预览图片加载状态/0=没有加载,1=正在加载,2=加载完成 + this.previewStart = 0; + //全局变量:预览图片容器 + this.previewDiv = null; + //全局变量:预览框 + this.previewTop = null; + //全局变量:预览框的宽 + this.previewWidth = 120; + //全局变量:预览图片容器缓动函数 + this.previewTween = null; + //全局变量:是否是m3u8格式,是的话则可以加载hls.js + this.isM3u8 = false; + //全局变量:保存提示点数组 + this.promptArr = []; + //全局变量:显示提示点文件的容器 + this.promptElement = null; + //全局变量:配置文件函数 + this.ckplayerConfig = {}; + //全局变量:控制栏是否显示 + this.showFace = true; + //全局变量:是否监听过h5的错误 + this.errorAdd = false; + //全局变量:是否发送了错误 + this.errorSend = false; + //全局变量:控制栏是否隐藏 + this.controlBarIsShow = true; + //全局变量,保存当前缩放比例 + this.videoScale = 1; + //全局变量:设置字体 + this.fontFamily = '"Microsoft YaHei"; YaHei; "\5FAE\8F6F\96C5\9ED1"; SimHei; "\9ED1\4F53";Arial'; + //全局变量:记录第一次拖动进度按钮时的位置 + this.timeSliderLeftTemp = 0; + //全局变量:判断是否记录了总时间 + this.durationSendJS = false; + //全局变量:初始化广告分析是否结束设置 + this.adAnalysisEnd = false; + //全局变量:广告变量 + this.advertisements = {}; + //全局变量:是否是第一次播放视频 + this.isFirstTimePlay = true; + //全局变量:当前需要播放的广告类型 + this.adType = ''; + //全局变量:播放广告计数 + this.adI = 0; + //全局变量:要播放的临时地址 + this.videoTemp = { + src: '', + source: '', + currentSrc: '', + loop: false + }; + //全局变量:当前要播放的广告组总时间 + this.adTimeAllTotal = 0; + //全局变量:肖前要播放的广告时间 + this.adTimeTotal = 0; + //全局变量:用来做倒计时 + this.adCountDownObj = null; + //全局变量:前置,中插,结尾广告是否已开始运行 + this.adPlayStart = false; + //全局变量:目前是否在播放广告 + this.adPlayerPlay = false; + //全局变量:当前广告是否暂停 + this.adIsPause = false; + //全局变量:视频广告是否静音 + this.adVideoMute = false; + //全局变量:是否需要记录当前播放的时间供广告播放结束后进行跳转 + this.adIsVideoTime = false; + //全局变量:后置广告是否播放 + this.endAdPlay = false; + //全局变量:暂停广告是否在显示 + this.adPauseShow = false; + //全局变量:是否需要重置广告以实现重新播放时再播放一次 + this.adReset = false; + //全局变量:是否在播放广告时播放过视频广告 + this.adVideoPlay = false; + if (obj) { + this.embed(obj); + } + }; + ckplayer.prototype = { + /* + 主要函数部分开始 + 主接口函数: + 调用播放器需初始化该函数 + */ + embed: function(c) { + //c:Object:是调用接口传递的属性对象 + if (window.location.href.substr(0, 7) == 'file://') {//如果是使用的file协议打网页则弹出提示 + alert('Please use the HTTP protocol to open the page'); + return; + } + if (c == undefined || !c) { + this.eject(this.errorList[0]); + return; + } + if (typeof(c) != 'object') { + this.eject(this.errorList[1]); + } + this.vars = this.standardization(this.varsConfig, c); + if (!this.vars['mobileCkControls'] && this.isMobile()) { + this.vars['flashplayer'] = false; + this.showFace = false; + } + var videoString = this.vars['video']; + if (!videoString) { + this.eject(this.errorList[2]); + return; + } + if (typeof(videoString) == 'string') { + if (videoString.substr(0, 3) == 'CK:' || videoString.substr(0, 3) == 'CE:' || videoString.substr(8, 3) == 'CK:' || videoString.substr(8, 3) == 'CE:') { + this.vars['flashplayer'] = true; + } + } + if (typeof(videoString) == 'object') { + if (videoString.length > 1) { + if (videoString[0][0].substr(0, 3) == 'CK:' || videoString[0][0].substr(0, 3) == 'CE:' || videoString[0][0].substr(8, 3) == 'CK:' || videoString[0][0].substr(8, 3) == 'CE:') { + this.vars['flashplayer'] = true; + } + } + } + if (this.vars['config']) { + this.ckplayerConfig = eval(this.vars['config'] + '()'); + } else { + this.ckplayerConfig = ckplayerConfig(); + } + if ((!this.supportVideo() && this.vars['flashplayer'] != '') || (this.vars['flashplayer'] && this.uploadFlash()) || !this.isMsie()) { + this.html5Video = false; + this.getVideo(); + } else if (videoString) { + //判断视频数据类型 + this.analysedVideoUrl(videoString); + return this; + } else { + this.eject(this.errorList[2]); + } + }, + /* + 内部函数 + 根据外部传递过来的video开始分析视频地址 + */ + analysedVideoUrl: function(video) { + var i = 0, + y = 0; + var thisTemp = this; + this.VA = [];//定义全局变量VA:视频列表(包括视频地址,类型,清晰度说明) + if (typeof(video) == 'string') { //如果是字符形式的则判断后缀进行填充 + if (video.substr(0, 8) != 'website:') { + this.VA = [[video, '', '', 0]]; + var fileExt = this.getFileExt(video); + switch (fileExt) { + case '.mp4': + this.VA[0][1] = 'video/mp4'; + break; + case '.ogg': + this.VA[0][1] = 'video/ogg'; + break; + case '.webm': + this.VA[0][1] = 'video/webm'; + break; + default: + break; + } + this.getVideo(); + } else { + if (this.html5Video) { + var ajaxObj = { + url: video.substr(8), + success: function(data) { + if (data) { + thisTemp.analysedUrl(data); + } else { + thisTemp.eject(thisTemp.errorList[5]); + this.VA = video; + thisTemp.getVideo(); + } + } + }; + this.ajax(ajaxObj); + } else { + this.VA = video; + this.getVideo(); + } + + } + } else if (typeof(video) == 'object') { //如果视频地址是对象或数组 + if (!this.isUndefined(typeof(video.length))) { //如果视频地址是数组 + if (!this.isUndefined(typeof(video[0].length))) { //如果视频地址是二维数组 + this.VA = video; + } + this.getVideo(); + } else { + /* + 如果video格式是对象形式,则分二种 + 如果video对象里包含type,则直接播放 + */ + if (!this.isUndefined(video['type'])) { + this.VA.push([video['file'], video['type'], '', 0]); + this.getVideo(); + } else { + this.eject(this.errorList[5]); + } + } + } else { + this.eject(this.errorList[4]); + } + }, + /* + 对请求到的视频地址进行重新分析 + */ + analysedUrl: function(data) { + this.vars = this.standardization(this.vars, data); + if (!this.isUndefined(data['video'])) { + this.vars['video'] = data['video']; + } + this.analysedVideoUrl(this.vars['video']); + }, + /* + 内部函数 + 检查浏览器支持的视频格式,如果是则将支持的视频格式重新分组给播放列表 + */ + getHtml5Video: function() { + var va = this.VA; + var nva = []; + var mobile = false; + var video = document.createElement('video'); + var codecs = function(type) { + var cod = ''; + switch (type) { + case 'video/mp4': + cod = 'avc1.4D401E, mp4a.40.2'; + break; + case 'video/ogg': + cod = 'theora, vorbis'; + break; + case 'video/webm': + cod = 'vp8.0, vorbis'; + break; + default: + break; + } + return cod; + }; + var supportType = function(vidType, codType) { + if (!video.canPlayType) { + this.html5Video = false; + return; + } + var isSupp = video.canPlayType(vidType + ';codecs="' + codType + '"'); + if (isSupp == '') { + return false + } + return true; + }; + if (this.vars['flashplayer'] || !this.isMsie()) { + this.html5Video = false; + return; + } + if (this.isMobile()) { + mobile = true; + } + for (var i = 0; i < va.length; i++) { + var v = va[i]; + if (v) { + if (v[1] != '' && !mobile && supportType(v[1], codecs(v[1])) && v[0].substr(0, 4) != 'rtmp') { + nva.push(v); + } + if ((this.getFileExt(v[0]) == '.m3u8' || this.vars['type'] == 'video/m3u8' || this.vars['type'] == 'm3u8' || v[1] == 'video/m3u8' || v[1] == 'm3u8') && this.vars['html5m3u8']) { + this.isM3u8 = true; + nva.push(v); + } + } + } + if (nva.length > 0) { + this.VA = nva; + } else { + if (!mobile) { + this.html5Video = false; + } + } + }, + /* + 内部函数 + 根据视频地址开始构建播放器 + */ + getVideo: function() { + var thisTemp = this; + var v = this.vars; + //如果存在广告字段则开始分析广告 + if (!this.adAnalysisEnd && (v['adfront'] != '' || v['adpause'] != '' || v['adinsert'] != '' || v['adend'] != '' || v['advertisements'] != '')) { + this.adAnalysisEnd = true; + this.adAnalysis(); + return; + } + //如果存在字幕则加载 + if (this.V) { //如果播放器已存在,则认为是从newVideo函数发送过来的请求 + this.changeVideo(); + return; + } + if (this.vars['cktrack']) { + this.loadTrack(); + } + if (this.supportVideo() && !this.vars['flashplayer']) { + this.getHtml5Video(); //判断浏览器支持的视频格式 + } + var src = '', + source = '', + poster = '', + loop = '', + autoplay = '', + track = ''; + var video = v['video']; + var i = 0; + this.CD = this.getByElement(v['container']); + volume = v['volume']; + if (!this.CD) { + this.eject(this.errorList[6], v['container']); + return false; + } + //开始构建播放器容器 + this.V = undefined; + var thisPd = null; + if (v['h5container'] != '') { + thisPd = this.getByElement(v['h5container']); + if (this.isUndefined(thisPd)) { + thisPd = null; + } + } + var isVideoH5 = null; //isUndefined thisPd + if (v['playerID'] != '') { + isVideoH5 = this.getByElement('#' + v['playerID']); + if (this.isUndefined(isVideoH5)) { + isVideoH5 = null; + } + } + if (thisPd != null && isVideoH5 != null) { + this.PD = thisPd; //PD:定义播放器容器对象全局变量 + } else { + var playerID = 'ckplayer' + this.randomString(); + var playerDiv = document.createElement('div'); + playerDiv.className = playerID; + this.CD.innerHTML = ''; + this.CD.appendChild(playerDiv); + this.PD = this.getByElement(playerID); //PD:定义播放器容器对象全局变量 + } + this.css(this.CD, { + backgroundColor: '#000000', + overflow: 'hidden', + position: 'relative' + }); + this.css(this.PD, { + backgroundColor: '#000000', + width: '100%', + height: '100%', + fontFamily: this.fontFamily + }); + if (this.html5Video) { //如果支持HTML5-VIDEO则默认使用HTML5-VIDEO播放器 + //禁止播放器容器上鼠标选择文本 + this.PD.onselectstart = this.PD.ondrag = function() { + return false; + }; + //播放器容器构建完成并且设置好样式 + //构建播放器 + if (this.VA.length == 1) { + this.videoTemp['src'] = decodeURIComponent(this.VA[0][0]); + src = ' src="' + this.videoTemp['src'] + '"'; + + } else { + var videoArr = this.VA.slice(0); + videoArr = this.arrSort(videoArr); + for (i = 0; i < videoArr.length; i++) { + var type = ''; + var va = videoArr[i]; + if (va[1]) { + type = ' type="' + va[1] + '"'; + if (type == ' type="video/m3u8"' || type == ' type="m3u8"') { + type = ''; + } + } + source += ''; + } + this.videoTemp['source'] = source; + } + //分析视频地址结束 + if (v['autoplay']) { + autoplay = ' autoplay="autoplay"'; + } + if (v['poster']) { + poster = ' poster="' + v['poster'] + '"'; + } + if (v['loop']) { + loop = ' loop="loop"'; + } + if (v['seek'] > 0) { + this.needSeek = v['seek']; + } + if (v['track'] != null && v['cktrack'] == null) { + var trackArr = v['track']; + var trackDefault = ''; + var defaultHave = false; + for (i = 0; i < trackArr.length; i++) { + var trackObj = trackArr[i]; + if (trackObj['default'] && !defaultHave) { + trackDefault = ' default'; + defaultHave = true; + } else { + trackDefault = ''; + } + track += ''; + } + } + var autoLoad = this.ckplayerConfig['config']['autoLoad']; + var preload = ''; + if (!autoLoad) { + preload = ' preload="meta"'; + } + var vid = this.randomString(); + var controls = ''; + if (!this.showFace) { + controls = ' controls="controls"'; + } + var mobileAutoFull = v['mobileAutoFull']; + var mobileautofull = ''; + if (!mobileAutoFull) { + mobileautofull = ' x-webkit-airplay="true" playsinline webkit-playsinline="true" x5-video-player-type="h5"'; + } + if (isVideoH5 != null && thisPd != null) { + this.V = isVideoH5; + if (v['poster']) { + this.V.poster = v['poster']; + } + } else { + var html = ''; + if (!this.isM3u8) { + html = ''; + } else { + html = ''; + } + this.PD.innerHTML = html; + this.V = this.getByElement('#' + vid); //V:定义播放器对象全局变量 + } + if (this.vars['crossorigin']) { + this.V.crossOrigin = this.vars['crossorigin']; + } + try { + this.V.volume = volume; //定义音量 + if (this.playbackRateArr && this.vars['playbackrate'] > -1) { + if (this.vars['playbackrate'] < this.playbackRateArr.length) { + this.playbackRateDefault = this.vars['playbackrate']; + } + this.V.playbackRate = this.playbackRateArr[this.playbackRateDefault][0]; //定义倍速 + } + } catch(error) {} + this.css(this.V, { + width: '100%', + height: '100%' + }); + if (this.isM3u8) { + var loadJsHandler = function() { + thisTemp.embedHls(thisTemp.VA[0][0], v['autoplay']); + }; + this.loadJs(javascriptPath + 'hls/hls.min.js', loadJsHandler); + } + this.css(this.V, 'backgroundColor', '#000000'); + //创建一个画布容器 + if (this.config['videoDrawImage']) { + var canvasID = 'vcanvas' + this.randomString(); + var canvasDiv = document.createElement('div'); + canvasDiv.className = canvasID; + this.PD.appendChild(canvasDiv); + this.MD = this.getByElement(canvasID); //定义画布存储容器 + this.css(this.MD, { + backgroundColor: '#000000', + width: '100%', + height: '100%', + position: 'absolute', + display: 'none', + cursor: 'pointer', + left: '0px', + top: '0px', + zIndex: '10' + }); + var cvid = 'ccanvas' + this.randomString(); + this.MD.innerHTML = this.newCanvas(cvid, this.PD.offsetWidth, this.PD.offsetHeight); + this.MDC = this.getByElement(cvid + '-canvas'); + this.MDCX = this.MDC.getContext('2d'); + } + this.playerType = 'html5video'; + //播放器构建完成并且设置好样式 + //建立播放器的监听函数,包含操作监听及事件监听 + this.addVEvent(); + //根据清晰度的值构建清晰度切换按钮 + if (this.showFace) { + this.definition(); + if (!this.vars['live'] && this.playbackRateArr && this.vars['playbackrate'] > -1) { + this.playbackRate(); + } + if (v['autoplay']) { + this.loadingStart(true); + } + } + this.playerLoad(); + } else { //如果不支持HTML5-VIDEO则调用flashplayer + this.embedSWF(); + } + }, + /* + 分析广告数据 + */ + adAnalysis: function() { + var thisTemp = this; + var v = this.vars; + var isAdvShow = []; + var i = 0; + if (v['advertisements'] != '' && v['advertisements'].substr(0, 8) == 'website:') { + var ajaxObj = { + url: v['advertisements'].substr(8), + success: function(data) { + if (data) { + var newData = {}; + var val = null; + //对广告进行分析 + try { + if (!thisTemp.isUndefined(data['front'])) { + val = thisTemp.arrayDel(data['front']); + if (!thisTemp.isUndefined(val)) { + newData['front'] = val; + } + val = thisTemp.arrayDel(data['pause']); + if (!thisTemp.isUndefined(val)) { + newData['pause'] = val; + } + val = thisTemp.arrayDel(data['insert']); + if (!thisTemp.isUndefined(val)) { + newData['insert'] = val; + if (!thisTemp.isUndefined(data['inserttime'])) { + newData['inserttime'] = thisTemp.arrayInt(data['inserttime']); + isAdvShow = []; + for (i = 0; i < newData['inserttime'].length; i++) { + isAdvShow.push(false); + } + newData['insertPlay'] = isAdvShow; + } + } + val = thisTemp.arrayDel(data['end']); + if (!thisTemp.isUndefined(val)) { + newData['end'] = val; + } + val = thisTemp.arrayDel(data['other']); + if (!thisTemp.isUndefined(val)) { + newData['other'] = val; + isAdvShow = []; + var arrTemp = []; + for (i = 0; i < val.length; i++) { + isAdvShow.push(false); + arrTemp.push(parseInt('0' + val[i]['startTime'])); + } + newData['othertime'] = arrTemp; + newData['otherPlay'] = isAdvShow; + } + } + } catch(event) { + thisTemp.log(event) + } + thisTemp.advertisements = newData; + //对广告进行分析结束 + } + thisTemp.getVideo(); + } + }; + this.ajax(ajaxObj); + } else { + //根据广告分析 + this.adAnalysisOne('front', 'adfront', 'adfronttime', 'adfrontlink', 'adfronttype'); + this.adAnalysisOne('pause', 'adpause', 'adpausetime', 'adpauselink', 'adpausetype'); + this.adAnalysisOne('insert', 'adinsert', 'adinserttime', 'adinsertlink', 'adinserttype'); + this.adAnalysisOne('end', 'adend', 'adendtime', 'adendlink', 'adendtype'); + if (!this.isUndefined(this.advertisements['insert'])) { + if (!this.isUndefined(v['inserttime'])) { + thisTemp.advertisements['inserttime'] = v['inserttime']; + } + } + if (!this.isUndefined(thisTemp.advertisements['inserttime'])) { + thisTemp.advertisements['inserttime'] = thisTemp.arrayInt(thisTemp.advertisements['inserttime']); + isInsert = []; + for (i = 0; i < thisTemp.advertisements['inserttime'].length; i++) { + isInsert.push(false); + } + thisTemp.advertisements['insertPlay'] = isInsert; + } + thisTemp.getVideo(); + } + }, + /* + 将广告数组数据里不是视频和图片的去除 + */ + arrayDel: function(arr) { + if (arr.length == 0) { + return null; + } + var newArr = []; + for (var i = 0; i < arr.length; i++) { + var type = arr[i]['type']; + if (type == 'mp4' || type == 'mov' || this.isStrImage(type)) { + newArr.push(arr[i]); + } + } + if (newArr.length > 0) { + return newArr; + } + return null; + }, + /*分析单个类型的广告*/ + adAnalysisOne: function(adType, adName, adTime, adLink, adStype) { + var v = this.vars; + if (this.isUndefined(v[adName])) { + v[adName] = ''; + } + if (this.isUndefined(v[adTime])) { + v[adTime] = ''; + } + if (this.isUndefined(v[adLink])) { + v[adLink] = ''; + } + if (this.isUndefined(v[adStype])) { + v[adStype] = ''; + } + if (v[adName] != '') { + var adList = []; + var ad = v[adName].split(','); + var adtime = v[adTime].split(','); + var adlink = v[adLink].split(','); + var adstype = v[adStype].split(','); + var i = 0; + if (ad.length > 0) { + var adLinkLen = adlink.length, + adTimeLen = adtime.length; + if (v[adLink] == '') { + adLinkLen = 0; + adlink = []; + } + if (v[adTime] == '') { + adTimeLen = 0; + adtime = []; + } + if (adLinkLen < ad.length) { + for (i = adLinkLen; i < ad.length; i++) { + adlink.push(''); + } + } + if (adTimeLen < ad.length) { + for (i = adTimeLen; i < ad.length; i++) { + adtime.push(''); + } + } + var adstypeLen = adstype.length; + if (v[adStype] == '') { + adstypeLen = 0; + adstype = []; + } + if (adstypeLen < ad.length) { + for (i = adstypeLen; i < ad.length; i++) { + adstype.push(this.getFileExt(ad[i]).replace('.', '')); + } + } + for (i = 0; i < ad.length; i++) { + var type = adstype[i]; + if (type == 'mp4' || type == 'mov' || this.isStrImage(type)) { + var obj = { + file: ad[i], + type: type, + time: parseInt(adtime[i]) > 0 ? parseInt(adtime[i]) : this.ckplayerConfig['style']['advertisement']['time'], + link: adlink[i] + }; + adList.push(obj); + } + + } + if (this.isUndefined(this.advertisements)) { + this.advertisements = {}; + } + if (adList.length > 0) { + this.advertisements[adType] = adList; + } + } + } + }, + /* + 内部函数 + 发送播放器加载成功的消息 + */ + playerLoad: function() { + var thisTemp = this; + if (this.isFirst) { + this.isFirst = false; + setTimeout(function() { + thisTemp.loadedHandler(); + },1); + } + }, + /* + 内部函数 + 建立播放器的监听函数,包含操作监听及事件监听 + */ + addVEvent: function() { + var thisTemp = this; + //监听视频单击事件 + var eventVideoClick = function(event) { + thisTemp.videoClick(); + }; + this.addListenerInside('click', eventVideoClick); + this.addListenerInside('click', eventVideoClick, this.MDC); + //延迟计算加载失败事件 + this.timerErrorFun(); + //监听视频加载到元数据事件 + var eventJudgeIsLive = function(event) { + thisTemp.sendJS('loadedmetadata'); + if (typeof(thisTemp.V.duration) == 'number' && thisTemp.V.duration > 1) { + thisTemp.sendJS('duration', thisTemp.V.duration); + thisTemp.formatInserttime(thisTemp.V.duration); + if (thisTemp.adPlayerPlay) { + thisTemp.advertisementsTime(thisTemp.V.duration + 1); + } + thisTemp.durationSendJS = true; + } + thisTemp.judgeIsLive(); + }; + this.addListenerInside('loadedmetadata', eventJudgeIsLive); + //监听视频播放事件 + var eventPlaying = function(event) { + thisTemp.playingHandler(); + thisTemp.sendJS('play'); + thisTemp.sendJS('paused', false); + if (!thisTemp.durationSendJS && typeof(thisTemp.V.duration) == 'number' && thisTemp.V.duration > 0) { + thisTemp.durationSendJS = true; + thisTemp.sendJS('duration', thisTemp.V.duration); + thisTemp.formatInserttime(thisTemp.V.duration); + } + }; + this.addListenerInside('playing', eventPlaying); + //监听视频暂停事件 + var eventPause = function(event) { + thisTemp.pauseHandler(); + thisTemp.sendJS('pause'); + thisTemp.sendJS('paused', true); + }; + this.addListenerInside('pause', eventPause); + //监听视频播放结束事件 + var eventEnded = function(event) { + thisTemp.endedHandler(); + }; + this.addListenerInside('ended', eventEnded); + //监听视频播放时间事件 + var eventTimeupdate = function(event) { + if (thisTemp.timerLoading != null) { + thisTemp.loadingStart(false); + } + if (thisTemp.time) { + if (!thisTemp.adPlayerPlay) { + thisTemp.sendJS('time', thisTemp.time); + //监听中间插入广告是否需要播放 + if (!thisTemp.isUndefined(thisTemp.advertisements['insert'])) { + thisTemp.checkAdInsert(thisTemp.time); + } + //监听其它广告 + if (!thisTemp.isUndefined(thisTemp.advertisements['other'])) { + thisTemp.checkAdOther(thisTemp.time); + } + if (thisTemp.time < 3 && thisTemp.adReset) { + thisTemp.adReset = false; + thisTemp.endedAdReset(); + } + } else { //如果是广告则进行广告倒计时 + thisTemp.adPlayerTimeHandler(thisTemp.time); + } + + } + }; + this.addListenerInside('timeupdate', eventTimeupdate); + //监听视频缓冲事件 + var eventWaiting = function(event) { + thisTemp.loadingStart(true); + }; + this.addListenerInside('waiting', eventWaiting); + //监听视频seek开始事件 + var eventSeeking = function(event) { + thisTemp.sendJS('seek', 'start'); + }; + this.addListenerInside('seeking', eventSeeking); + //监听视频seek结束事件 + var eventSeeked = function(event) { + thisTemp.seekedHandler(); + thisTemp.sendJS('seek', 'ended'); + }; + this.addListenerInside('seeked', eventSeeked); + //监听视频音量 + var eventVolumeChange = function(event) { + try { + thisTemp.volumechangeHandler(); + thisTemp.sendJS('volume', thisTemp.volume || thisTemp.V.volume); + } catch(event) {} + }; + this.addListenerInside('volumechange', eventVolumeChange); + //监听全屏事件 + var eventFullChange = function(event) { + var fullState = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen; + thisTemp.sendJS('full', fullState); + }; + this.addListenerInside('fullscreenchange', eventFullChange); + this.addListenerInside('webkitfullscreenchange', eventFullChange); + this.addListenerInside('mozfullscreenchange', eventFullChange); + //建立界面 + if (this.showFace) { + this.interFace(); + } + }, + /* + 内部函数 + 重置界面元素 + */ + resetPlayer: function() { + this.timeTextHandler(); + if (this.showFace) { + this.timeProgress(0, 1); //改变时间进度条宽 + this.changeLoad(0); + this.initPlayPause(); //判断显示播放或暂停按钮 + this.definition(); //构建清晰度按钮 + this.showFrontNext(); //构建上一集下一集按钮 + this.deletePrompt(); //删除提示点 + this.deletePreview(); //删除预览图 + this.trackHide(); //重置字幕 + this.resetTrack(); + this.trackElement = []; + this.track = []; + } + }, + /* + 内部函数 + 构建界面元素 + */ + interFace: function() { + this.showFace = true; + var thisTemp = this; + var html = ''; //控制栏内容 + var i = 0; + var bWidth = 38,//按钮的宽 + bHeight = 38; //按钮的高 + var bBgColor = '#FFFFFF',//按钮元素默认颜色 + bOverColor = '#0782F5'; //按钮元素鼠标经过时的颜色 + var timeInto = this.formatTime(0) + ' / ' + this.formatTime(this.vars['duration']); //时间显示框默认显示内容 + var randomS = this.randomString(10); //获取一个随机字符串 + /* + 以下定义界面各元素的ID,统一以ID结束 + */ + var controlBarBgID = 'controlbgbar' + randomS,//控制栏背景 + controlBarID = 'controlbar' + randomS,//控制栏容器 + timeProgressBgID = 'timeprogressbg' + randomS,//播放进度条背景 + loadProgressID = 'loadprogress' + randomS,//加载进度条 + timeProgressID = 'timeprogress' + randomS,//播放进度条 + timeBOBGID = 'timebobg' + randomS,//播放进度按钮容器,该元素为一个透明覆盖在播放进度条上 + timeBOID = 'timebo' + randomS,//播放进度可拖动按钮外框 + timeBWID = 'timebw' + randomS,//播放进度可拖动按钮内框 + timeTextID = 'timetext' + randomS,//时间文本框 + playID = 'play' + randomS,//播放按钮 + pauseID = 'pause' + randomS,//暂停按钮 + frontID = 'front' + randomS,//前一集按钮 + nextID = 'next' + randomS,//下一集按钮 + fullID = 'full' + randomS,//全屏按钮 + escFullID = 'escfull' + randomS,//退出全屏按钮 + muteID = 'mute' + randomS,//静音按钮 + escMuteID = 'escmute' + randomS,//取消静音按钮 + volumeID = 'volume' + randomS,//音量调节框容器 + volumeDbgID = 'volumedbg' + randomS,//音量调节框容器背景 + volumeBgID = 'volumebg' + randomS,//音量调节框背景层 + volumeUpID = 'volumeup' + randomS,//音量调节框可变宽度层 + volumeBOID = 'volumebo' + randomS,//音量调节按钮外框 + volumeBWID = 'volumebw' + randomS,//音量调节按钮内框 + definitionID = 'definition' + randomS,//清晰度容器 + definitionPID = 'definitionp' + randomS,//清晰度列表容器 + playbackRateID = 'playbackrate' + randomS,//清晰度容器 + playbackRatePID = 'playbackratep' + randomS,//清晰度列表容器 + promptBgID = 'promptbg' + randomS,//提示框背景 + promptID = 'prompt' + randomS,//提示框 + dlineID = 'dline' + randomS,//分隔线共用前缀 + menuID = 'menu' + randomS,//右键容器 + pauseCenterID = 'pausecenter' + randomS,//中间暂停按钮 + loadingID = 'loading' + randomS,//缓冲 + errorTextID = 'errortext' + randomS,//错误文本框 + logoID = 'logo' + randomS,//logo + adBackgroundID = 'background' + randomS,//广告背景图片 + adElementID = 'adelement' + randomS,//广告容器 + adBarID = 'adBar' + randomS,//广告顶部倒计时,跳过广告,静音按钮容器 + adSkipID = 'adskip' + randomS,//跳过广告按钮 + adTimeID = 'adtime' + randomS,//倒计时按钮 + adLinkID = 'adlink' + randomS,//广告链接按钮 + adMuteID = 'admute' + randomS,//广告静音按钮 + adEscMuteID = 'adescmute' + randomS,//广告取消静音按钮 + adPauseCloseID = 'adpauseclose' + randomS; //暂停广场的关闭按钮 + /* + 构建一些PD(播放器容器)里使用的元素 + */ + var controlBarBg = document.createElement('div'), + controlBar = document.createElement('div'), + timeProgressBg = document.createElement('div'), + timeBoBg = document.createElement('div'), + pauseCenter = document.createElement('div'), + errorText = document.createElement('div'), + promptBg = document.createElement('div'), + prompt = document.createElement('div'), + menuDiv = document.createElement('div'), + definitionP = document.createElement('div'), + playbackrateP = document.createElement('div'), + loading = document.createElement('div'), + logo = document.createElement('div'), + adBackground = document.createElement('div'), + adElement = document.createElement('div'), + adBar = document.createElement('div'), + adLink = document.createElement('div'), + adPauseClose = document.createElement('div'); + /* + 定义各节点的样式 + */ + controlBarBg.className = controlBarBgID; + controlBar.className = controlBarID; + timeProgressBg.className = timeProgressBgID; + timeBoBg.className = timeBOBGID; + promptBg.className = promptBgID; + prompt.className = promptID; + menuDiv.className = menuID; + definitionP.className = definitionPID; + playbackrateP.className = playbackRatePID; + pauseCenter.className = pauseCenterID; + loading.className = loadingID; + logo.className = logoID; + errorText.className = errorTextID; + adBackground.className = adBackgroundID; + adElement.className = adElementID; + adBar.className = adBarID; + adLink.className = adLinkID; + adPauseClose.className = adPauseCloseID; + /* + 加载节点到播放器容器中 + */ + this.PD.appendChild(controlBarBg); + this.PD.appendChild(controlBar); + this.PD.appendChild(timeProgressBg); + this.PD.appendChild(timeBoBg); + this.PD.appendChild(promptBg); + this.PD.appendChild(prompt); + this.PD.appendChild(definitionP); + this.PD.appendChild(playbackrateP); + this.PD.appendChild(pauseCenter); + this.PD.appendChild(loading); + this.PD.appendChild(errorText); + this.PD.appendChild(logo); + this.PD.appendChild(adBackground); + this.PD.appendChild(adElement); + this.PD.appendChild(adBar); + this.PD.appendChild(adLink); + this.PD.appendChild(adPauseClose); + this.body.appendChild(menuDiv); + if (this.vars['live']) { //如果是直播,时间显示文本框里显示当前系统时间 + timeInto = this.getNowDate(); + } + /* + 构建控制栏的内容 + */ + html += '
    ' + this.newCanvas(playID, bWidth, bHeight) + '
    '; //播放按钮 + html += '
    ' + this.newCanvas(pauseID, bWidth, bHeight) + '
    '; //暂停按钮 + html += '
    '; //分隔线 + html += '
    ' + this.newCanvas(frontID, bWidth, bHeight) + '
    '; //前一集按钮 + html += '
    '; //分隔线 + html += '
    ' + this.newCanvas(nextID, bWidth, bHeight) + '
    '; //下一集按钮 + html += '
    '; //分隔线 + html += '
    ' + timeInto + '
    '; //时间文本 + html += '
    ' + this.newCanvas(fullID, bWidth, bHeight) + '
    '; //全屏按钮 + html += '
    ' + this.newCanvas(escFullID, bWidth, bHeight) + '
    '; //退出全屏按钮 + html += '
    '; //分隔线 + html += '
    '; //清晰度容器 + html += '
    '; //分隔线 + html += '
    '; //倍速 + html += '
    '; //分隔线 + html += '
    '; //音量调节框,音量调节按钮 + html += '
    ' + this.newCanvas(muteID, bWidth, bHeight) + '
    '; //静音按钮 + html += '
    ' + this.newCanvas(escMuteID, bWidth, bHeight) + '
    '; //退出静音按钮 + html += '
    '; //分隔线 + this.getByElement(controlBarID).innerHTML = html; + //构建进度条内容 + this.getByElement(timeProgressBgID).innerHTML = '
    '; + this.getByElement(timeBOBGID).innerHTML = '
    '; + //构建进度条内容结束 + this.getByElement(pauseCenterID).innerHTML = this.newCanvas(pauseCenterID, 80, 80); //构建中间暂停按钮 + this.getByElement(loadingID).innerHTML = this.newCanvas(loadingID, 60, 60); //构建中间缓冲时显示的图标 + this.getByElement(errorTextID).innerHTML = this.language['error']; //构建错误时显示的文本框 + //构建广告相关 + html = '
    ' + this.language['adTime'].replace('{$second}', 0) + '
    '; + html += '
    ' + this.newCanvas(adMuteID, 30, 30) + '
    '; + html += '
    ' + this.newCanvas(adEscMuteID, 30, 30) + '
    '; + html += '
    '; + this.getByElement(adBarID).innerHTML = html; + this.getByElement(adLinkID).innerHTML = this.language['adLink']; + this.getByElement(adPauseCloseID).innerHTML = this.newCanvas(adPauseCloseID, 20, 20); + if (this.ckplayerConfig['style']['logo']) { + if (this.ckplayerConfig['style']['logo']['file']) { + var logoFile = this.ckplayerConfig['style']['logo']['file']; + if (logoFile.substr(0, 15) == 'data:image/png;' || logoFile.substr(0, 15) == 'data:image/jpg;' || logoFile.substr(0, 16) == 'data:image/jpeg;') { + this.getByElement(logoID).innerHTML = ''; //构建logo + } + } + } else { + this.getByElement(logoID).innerHTML = this.vars['logo'] || this.logo || ''; //构建logo + } + var pd = this.PD; + //CB:Object:全局变量,将一些全局需要用到的元素统一放在CB对象里 + this.CB = { + controlBarBg: this.getByElement(controlBarBgID, pd), + controlBar: this.getByElement(controlBarID, pd), + promptBg: this.getByElement(promptBgID, pd), + prompt: this.getByElement(promptID, pd), + timeProgressBg: this.getByElement(timeProgressBgID, pd), + loadProgress: this.getByElement(loadProgressID, pd), + timeProgress: this.getByElement(timeProgressID, pd), + timeBoBg: this.getByElement(timeBOBGID, pd), + timeButton: this.getByElement(timeBOID, pd), + timeText: this.getByElement(timeTextID, pd), + play: this.getByElement(playID, pd), + front: this.getByElement(frontID, pd), + next: this.getByElement(nextID, pd), + pause: this.getByElement(pauseID, pd), + definition: this.getByElement(definitionID, pd), + definitionP: this.getByElement(definitionPID, pd), + definitionLine: this.getByElement(dlineID + '-rb', pd), + playbackrate: this.getByElement(playbackRateID, pd), + playbackrateP: this.getByElement(playbackRatePID, pd), + playbackrateLine: this.getByElement(dlineID + '-rc', pd), + full: this.getByElement(fullID, pd), + escFull: this.getByElement(escFullID, pd), + mute: this.getByElement(muteID, pd), + escMute: this.getByElement(escMuteID, pd), + volume: this.getByElement(volumeID, pd), + volumeBg: this.getByElement(volumeBgID, pd), + volumeUp: this.getByElement(volumeUpID, pd), + volumeBO: this.getByElement(volumeBOID, pd), + pauseCenter: this.getByElement(pauseCenterID, pd), + menu: this.getByElement(menuID), + loading: this.getByElement(loadingID, pd), + loadingCanvas: this.getByElement(loadingID + '-canvas', pd), + errorText: this.getByElement(errorTextID, pd), + logo: this.getByElement(logoID, pd), + playLine: this.getByElement(dlineID + '-la', pd), + frontLine: this.getByElement(dlineID + '-lb', pd), + nextLine: this.getByElement(dlineID + '-lc', pd), + fullLine: this.getByElement(dlineID + '-ra'), + definitionLine: this.getByElement(dlineID + '-rb', pd), + muteLine: this.getByElement(dlineID + '-rd', pd), + adBackground: this.getByElement(adBackgroundID, pd), + adElement: this.getByElement(adElementID, pd), + adBar: this.getByElement(adBarID, pd), + adSkip: this.getByElement(adSkipID, pd), + adTime: this.getByElement(adTimeID, pd), + adLink: this.getByElement(adLinkID, pd), + adMute: this.getByElement(adMuteID, pd), + adEscMute: this.getByElement(adEscMuteID, pd), + adPauseClose: this.getByElement(adPauseCloseID, pd) + }; + this.buttonWidth = { + play: bWidth, + full: bWidth, + front: bWidth, + next: bWidth, + mute: bWidth + }; + //定义界面元素的样式 + //控制栏背景 + this.css(controlBarBgID, { + width: '100%', + height: bHeight + 'px', + backgroundColor: '#000000', + position: 'absolute', + bottom: '0px', + filter: 'alpha(opacity:0.8)', + opacity: '0.8', + zIndex: '990' + }); + //控制栏容器 + this.css(controlBarID, { + width: '100%', + height: bHeight + 'px', + position: 'absolute', + bottom: '0px', + zIndex: '990' + }); + //中间暂停按钮 + this.css(pauseCenterID, { + width: '80px', + height: '80px', + borderRadius: '50%', + position: 'absolute', + display: 'none', + cursor: 'pointer', + zIndex: '996' + }); + //loading + this.css(loadingID, { + width: '60px', + height: '60px', + position: 'absolute', + display: 'none', + zIndex: '996' + }); + //出错文本框 + this.css(errorTextID, { + width: '120px', + height: '30px', + lineHeight: '30px', + color: '#FFFFFF', + fontSize: '14px', + textAlign: 'center', + position: 'absolute', + display: 'none', + zIndex: '101', + cursor: 'default', + zIndex: '996' + }); + //定义logo文字的样式 + this.css(logoID, { + height: '30px', + lineHeight: '30px', + color: '#FFFFFF', + fontFamily: 'Arial', + fontSize: '28px', + textAlign: 'center', + position: 'absolute', + float: 'left', + left: '-1000px', + top: '20px', + zIndex: '996', + filter: 'alpha(opacity:0.8)', + opacity: '0.8', + cursor: 'default' + }); + + this.css(this.CB['loadingCanvas'], { + transform: 'rotate(0deg)', + msTransform: 'rotate(0deg)', + mozTransform: 'rotate(0deg)', + webkitTransform: 'rotate(0deg)', + oTransform: 'rotate(0deg)' + }); + //定义提示语的样式 + this.css([promptBgID, promptID], { + height: '30px', + lineHeight: '30px', + color: '#FFFFFF', + fontSize: '14px', + textAlign: 'center', + position: 'absolute', + borderRadius: '5px', + paddingLeft: '5px', + paddingRight: '5px', + bottom: '0px', + display: 'none', + zIndex: '995' + }); + this.css(promptBgID, { + backgroundColor: '#000000', + filter: 'alpha(opacity:0.5)', + opacity: '0.5' + }); + //时间进度条背景容器 + this.css(timeProgressBgID, { + width: '100%', + height: '6px', + backgroundColor: '#3F3F3F', + overflow: 'hidden', + position: 'absolute', + bottom: '38px', + zIndex: '888' + }); + //加载进度和时间进度 + this.css([loadProgressID, timeProgressID], { + width: '1px', + height: '6px', + position: 'absolute', + bottom: '38px', + top: '0px', + zIndex: '991' + }); + this.css(loadProgressID, 'backgroundColor', '#6F6F6F'); + this.css(timeProgressID, 'backgroundColor', bOverColor); + //时间进度按钮 + this.css(timeBOBGID, { + width: '100%', + height: '14px', + overflow: 'hidden', + position: 'absolute', + bottom: '34px', + cursor: 'pointer', + zIndex: '992' + }); + this.css(timeBOID, { + width: '14px', + height: '14px', + overflow: 'hidden', + borderRadius: '50%', + backgroundColor: bBgColor, + cursor: 'pointer', + position: 'absolute', + top: '0px', + zIndex: '200' + }); + this.css(timeBWID, { + width: '8px', + height: '8px', + overflow: 'hidden', + borderRadius: '50%', + position: 'absolute', + backgroundColor: bOverColor, + left: '3px', + top: '3px' + }); + this.css(timeTextID, { + lineHeight: bHeight + 'px', + color: '#FFFFFF', + fontFamily: 'arial', + fontSize: '16px', + paddingLeft: '10px', + float: 'left', + overflow: 'hidden', + cursor: 'default' + }); + //分隔线 + this.css([dlineID + '-la', dlineID + '-lb', dlineID + '-lc', dlineID + '-ra', dlineID + '-rb', dlineID + '-rc', dlineID + '-rd'], { + width: '0px', + height: bHeight + 'px', + overflow: 'hidden', + borderLeft: '1px solid #303030', + borderRight: '1px solid #151515', + filter: 'alpha(opacity:0.9)', + opacity: '0.9' + }); + this.css([dlineID + '-la', dlineID + '-lb', dlineID + '-lc'], 'float', 'left'); + this.css([dlineID + '-ra', dlineID + '-rb', dlineID + '-rc', dlineID + '-rd'], 'float', 'right'); + this.css([dlineID + '-lb', dlineID + '-lc', dlineID + '-rb', dlineID + '-rc'], 'display', 'none'); + //播放/暂停/上一集/下一集按钮 + this.css([playID, pauseID, frontID, nextID], { + width: bWidth + 'px', + height: bHeight + 'px', + float: 'left', + overflow: 'hidden', + cursor: 'pointer' + }); + this.css([frontID, nextID], 'display', 'none'); + //初始化判断播放/暂停按钮隐藏项 + this.initPlayPause(); + + //设置静音/取消静音的按钮样式 + this.css([muteID, escMuteID], { + width: bWidth + 'px', + height: bHeight + 'px', + float: 'right', + overflow: 'hidden', + cursor: 'pointer' + }); + if (this.vars['volume'] > 0) { + this.css(escMuteID, 'display', 'none'); + } else { + this.css(muteID, 'display', 'none'); + } + if (!this.ckplayerConfig['config']['mobileVolumeBarShow'] && this.isMobile()) { + this.css([muteID, escMuteID, volumeID, volumeDbgID, dlineID + '-rd'], { + display: 'none' + }); + } + //音量调节框 + this.css([volumeID, volumeDbgID], { + width: '110px', + height: bHeight + 'px', + overflow: 'hidden', + float: 'right' + }); + this.css(volumeDbgID, { + position: 'absolute' + }); + this.css([volumeBgID, volumeUpID], { + width: '100px', + height: '6px', + overflow: 'hidden', + borderRadius: '5px', + cursor: 'pointer' + }); + this.css(volumeBgID, { + position: 'absolute', + top: '16px' + }); + this.css(volumeBgID, 'backgroundColor', '#666666'); + this.css(volumeUpID, 'backgroundColor', bOverColor); + this.buttonWidth['volume'] = 100; + //音量调节按钮 + this.css(volumeBOID, { + width: '12px', + height: '12px', + overflow: 'hidden', + borderRadius: '50%', + position: 'absolute', + backgroundColor: bBgColor, + top: '13px', + left: '0px', + cursor: 'pointer' + }); + this.css(volumeBWID, { + width: '6px', + height: '6px', + overflow: 'hidden', + borderRadius: '50%', + position: 'absolute', + backgroundColor: bOverColor, + left: '3px', + top: '3px' + }); + //清晰度容器 + this.css(definitionID, { + lineHeight: bHeight + 'px', + color: '#FFFFFF', + float: 'right', + fontSize: '14px', + textAlign: 'center', + overflow: 'hidden', + display: 'none', + cursor: 'pointer' + }); + this.css(definitionPID, { + lineHeight: (bHeight - 8) + 'px', + color: '#FFFFFF', + overflow: 'hidden', + position: 'absolute', + bottom: '4px', + backgroundColor: '#000000', + textAlign: 'center', + zIndex: '995', + cursor: 'pointer', + display: 'none' + }); + //倍速容器 + this.css(playbackRateID, { + lineHeight: bHeight + 'px', + color: '#FFFFFF', + float: 'right', + fontSize: '14px', + textAlign: 'center', + overflow: 'hidden', + display: 'none', + cursor: 'pointer' + }); + this.css(playbackRatePID, { + lineHeight: (bHeight - 8) + 'px', + color: '#FFFFFF', + overflow: 'hidden', + position: 'absolute', + bottom: '4px', + backgroundColor: '#000000', + textAlign: 'center', + zIndex: '995', + cursor: 'pointer', + display: 'none' + }); + //设置全屏/退出全屏按钮样式 + this.css([fullID, escFullID], { + width: bWidth + 'px', + height: bHeight + 'px', + float: 'right', + overflow: 'hidden', + cursor: 'pointer' + }); + this.css(escFullID, 'display', 'none'); + //设置广告背景层样式 + this.css(adBackgroundID, { + width: '100%', + height: '100%', + backgroundColor: '#000000', + position: 'absolute', + top: '0px', + zIndex: '997', + display: 'none' + }); + this.css(adElementID, { + position: 'absolute', + overflow: 'hidden', + top: '0px', + zIndex: '998', + float: 'center', + display: 'none' + }); + this.css(adBarID, { + position: 'absolute', + overflow: 'hidden', + top: '10px', + right: '10px', + zIndex: '999', + textAlign: 'right', + display: 'none' + }); + this.css(adTimeID, { + backgroundColor: '#000000', + color: '#FF0000', + paddingLeft: '10px', + paddingRight: '10px', + lineHeight: (bHeight - 8) + 'px', + marginLeft: '5px', + float: 'right', + cursor: 'pointer' + }); + this.css([adMuteID, adEscMuteID], { + backgroundColor: '#000000', + width: '30px', + height: '30px', + marginLeft: '5px', + float: 'right', + display: 'none', + cursor: 'pointer' + }); + this.css(adSkipID, { + backgroundColor: '#000000', + lineHeight: (bHeight - 8) + 'px', + color: '#FFFFFF', + paddingLeft: '10px', + paddingRight: '10px', + float: 'right', + display: 'none', + cursor: 'pointer' + }); + this.css(adLinkID, { + backgroundColor: '#ea5503', + lineHeight: (bHeight - 8) + 'px', + color: '#FFFFFF', + paddingLeft: '10px', + paddingRight: '10px', + position: 'absolute', + overflow: 'hidden', + bottom: '10px', + right: '10px', + zIndex: '999', + display: 'none' + }); + this.css(adPauseCloseID, { + backgroundColor: '#f7f7f7', + //f8f7f7 + widht: '20px', + height: '20px', + position: 'absolute', + overflow: 'hidden', + zIndex: '999', + top: '60px', + left: '30px', + borderRadius: '20px', + display: 'none', + cursor: 'pointer' + }); + //构建各按钮的形状 + //播放按钮 + var cPlay = this.getByElement(playID + '-canvas').getContext('2d'); + var cPlayFillRect = function() { + thisTemp.canvasFill(cPlay, [[12, 10], [29, 19], [12, 28]]); + }; + cPlay.fillStyle = bBgColor; + cPlayFillRect(); + var cPlayOver = function(event) { + cPlay.clearRect(0, 0, bWidth, bHeight); + cPlay.fillStyle = bOverColor; + cPlayFillRect(); + }; + var cPlayOut = function(event) { + cPlay.clearRect(0, 0, bWidth, bHeight); + cPlay.fillStyle = bBgColor; + cPlayFillRect(); + }; + + this.addListenerInside('mouseover', cPlayOver, this.getByElement(playID + '-canvas')); + this.addListenerInside('mouseout', cPlayOut, this.getByElement(playID + '-canvas')); + //暂停按钮 + var cPause = this.getByElement(pauseID + '-canvas').getContext('2d'); + var cPauseFillRect = function() { + thisTemp.canvasFillRect(cPause, [[10, 10, 5, 18], [22, 10, 5, 18]]); + }; + cPause.fillStyle = bBgColor; + cPauseFillRect(); + var cPauseOver = function(event) { + cPause.clearRect(0, 0, bWidth, bHeight); + cPause.fillStyle = bOverColor; + cPauseFillRect(); + }; + var cPauseOut = function(event) { + cPause.clearRect(0, 0, bWidth, bHeight); + cPause.fillStyle = bBgColor; + cPauseFillRect(); + }; + this.addListenerInside('mouseover', cPauseOver, this.getByElement(pauseID + '-canvas')); + this.addListenerInside('mouseout', cPauseOut, this.getByElement(pauseID + '-canvas')); + //前一集按钮 + var cFront = this.getByElement(frontID + '-canvas').getContext('2d'); + var cFrontFillRect = function() { + thisTemp.canvasFill(cFront, [[16, 19], [30, 10], [30, 28]]); + thisTemp.canvasFillRect(cFront, [[8, 10, 5, 18]]); + }; + cFront.fillStyle = bBgColor; + cFrontFillRect(); + var cFrontOver = function(event) { + cFront.clearRect(0, 0, bWidth, bHeight); + cFront.fillStyle = bOverColor; + cFrontFillRect(); + }; + var cFrontOut = function(event) { + cFront.clearRect(0, 0, bWidth, bHeight); + cFront.fillStyle = bBgColor; + cFrontFillRect(); + }; + + this.addListenerInside('mouseover', cFrontOver, this.getByElement(frontID + '-canvas')); + this.addListenerInside('mouseout', cFrontOut, this.getByElement(frontID + '-canvas')); + //下一集按钮 + var cNext = this.getByElement(nextID + '-canvas').getContext('2d'); + var cNextFillRect = function() { + thisTemp.canvasFill(cNext, [[8, 10], [22, 19], [8, 28]]); + thisTemp.canvasFillRect(cNext, [[25, 10, 5, 18]]); + }; + cNext.fillStyle = bBgColor; + cNextFillRect(); + var cNextOver = function(event) { + cNext.clearRect(0, 0, bWidth, bHeight); + cNext.fillStyle = bOverColor; + cNextFillRect(); + }; + var cNextOut = function(event) { + cNext.clearRect(0, 0, bWidth, bHeight); + cNext.fillStyle = bBgColor; + cNextFillRect(); + }; + this.addListenerInside('mouseover', cNextOver, this.getByElement(nextID + '-canvas')); + this.addListenerInside('mouseout', cNextOut, this.getByElement(nextID + '-canvas')); + //全屏按钮 + var cFull = this.getByElement(fullID + '-canvas').getContext('2d'); + var cFullFillRect = function() { + thisTemp.canvasFillRect(cFull, [[19, 10, 9, 3], [25, 13, 3, 6], [10, 19, 3, 9], [13, 25, 6, 3]]); + }; + cFull.fillStyle = bBgColor; + cFullFillRect(); + var cFullOver = function() { + cFull.clearRect(0, 0, bWidth, bHeight); + cFull.fillStyle = bOverColor; + cFullFillRect(); + }; + var cFullOut = function() { + cFull.clearRect(0, 0, bWidth, bHeight); + cFull.fillStyle = bBgColor; + cFullFillRect(); + }; + this.addListenerInside('mouseover', cFullOver, this.getByElement(fullID + '-canvas')); + this.addListenerInside('mouseout', cFullOut, this.getByElement(fullID + '-canvas')); + //定义退出全屏按钮样式 + var cEscFull = this.getByElement(escFullID + '-canvas').getContext('2d'); + var cEscFullFillRect = function() { + thisTemp.canvasFillRect(cEscFull, [[20, 9, 3, 9], [23, 15, 6, 3], [9, 20, 9, 3], [15, 23, 3, 6]]); + }; + cEscFull.fillStyle = bBgColor; + cEscFullFillRect(); + var cEscFullOver = function() { + cEscFull.clearRect(0, 0, bWidth, bHeight); + cEscFull.fillStyle = bOverColor; + cEscFullFillRect(); + }; + var cEscFullOut = function() { + cEscFull.clearRect(0, 0, bWidth, bHeight); + cEscFull.fillStyle = bBgColor; + cEscFullFillRect(); + }; + this.addListenerInside('mouseover', cEscFullOver, this.getByElement(escFullID + '-canvas')); + this.addListenerInside('mouseout', cEscFullOut, this.getByElement(escFullID + '-canvas')); + //定义静音按钮的样式 + var cMute = this.getByElement(muteID + '-canvas').getContext('2d'); + var cMuteFillRect = function() { + thisTemp.canvasFill(cMute, [[10, 15], [15, 15], [21, 10], [21, 28], [15, 23], [10, 23]]); + thisTemp.canvasFillRect(cMute, [[23, 15, 2, 8], [27, 10, 2, 18]]); + }; + cMute.fillStyle = bBgColor; + cMuteFillRect(); + var cMuteOver = function() { + cMute.clearRect(0, 0, bWidth, bHeight); + cMute.fillStyle = bOverColor; + cMuteFillRect(); + }; + var cMuteOut = function() { + cMute.clearRect(0, 0, bWidth, bHeight); + cMute.fillStyle = bBgColor; + cMuteFillRect(); + }; + this.addListenerInside('mouseover', cMuteOver, this.getByElement(muteID + '-canvas')); + this.addListenerInside('mouseout', cMuteOut, this.getByElement(muteID + '-canvas')); + //定义取消广告静音按钮样式 + var cEscMute = this.getByElement(escMuteID + '-canvas').getContext('2d'); + var cEscMuteFillRect = function() { + thisTemp.canvasFill(cEscMute, [[10, 15], [15, 15], [21, 10], [21, 28], [15, 23], [10, 23]]); + thisTemp.canvasFill(cEscMute, [[23, 13], [24, 13], [33, 25], [32, 25]]); + thisTemp.canvasFill(cEscMute, [[32, 13], [33, 13], [24, 25], [23, 25]]); + }; + cEscMute.fillStyle = bBgColor; + cEscMuteFillRect(); + var cEscMuteOver = function() { + cEscMute.clearRect(0, 0, bWidth, bHeight); + cEscMute.fillStyle = bOverColor; + cEscMuteFillRect(); + }; + var cEscMuteOut = function() { + cEscMute.clearRect(0, 0, bWidth, bHeight); + cEscMute.fillStyle = bBgColor; + cEscMuteFillRect(); + }; + this.addListenerInside('mouseover', cEscMuteOver, this.getByElement(escMuteID + '-canvas')); + this.addListenerInside('mouseout', cEscMuteOut, this.getByElement(escMuteID + '-canvas')); + //定义广告静音按钮的样式 + var cAdMute = this.getByElement(adMuteID + '-canvas').getContext('2d'); + var cAdMuteFillRect = function() { + thisTemp.canvasFill(cAdMute, [[8, 12], [12, 12], [16, 8], [16, 21], [12, 18], [8, 18]]); + thisTemp.canvasFillRect(cAdMute, [[18, 12, 2, 6], [21, 8, 2, 14]]); + }; + cAdMute.fillStyle = bBgColor; + cAdMuteFillRect(); + var cAdMuteOver = function() { + cAdMute.clearRect(0, 0, bWidth, bHeight); + cAdMute.fillStyle = bOverColor; + cAdMuteFillRect(); + }; + var cAdMuteOut = function() { + cAdMute.clearRect(0, 0, bWidth, bHeight); + cAdMute.fillStyle = bBgColor; + cAdMuteFillRect(); + }; + this.addListenerInside('mouseover', cAdMuteOver, this.getByElement(adMuteID + '-canvas')); + this.addListenerInside('mouseout', cAdMuteOut, this.getByElement(adMuteID + '-canvas')); + //定义取消静音广告按钮样式 + var cAdEscMute = this.getByElement(adEscMuteID + '-canvas').getContext('2d'); + var cAdEscMuteFillRect = function() { + thisTemp.canvasFill(cAdEscMute, [[8, 12], [12, 12], [16, 8], [16, 21], [12, 18], [8, 18]]); + thisTemp.canvasFill(cAdEscMute, [[18, 10], [20, 10], [26, 20], [24, 20]]); + thisTemp.canvasFill(cAdEscMute, [[25, 10], [27, 10], [20, 20], [18, 20]]); + }; + cAdEscMute.fillStyle = bBgColor; + cAdEscMuteFillRect(); + var cAdEscMuteOver = function() { + cAdEscMute.clearRect(0, 0, bWidth, bHeight); + cAdEscMute.fillStyle = bOverColor; + cAdEscMuteFillRect(); + }; + var cAdEscMuteOut = function() { + cAdEscMute.clearRect(0, 0, bWidth, bHeight); + cAdEscMute.fillStyle = bBgColor; + cAdEscMuteFillRect(); + }; + this.addListenerInside('mouseover', cAdEscMuteOver, this.getByElement(adEscMuteID + '-canvas')); + this.addListenerInside('mouseout', cAdEscMuteOut, this.getByElement(adEscMuteID + '-canvas')); + //定义暂停广告关闭按钮 + var adPauseClose = this.getByElement(adPauseCloseID + '-canvas').getContext('2d'); + var adPauseCloseFillRect = function() { + thisTemp.canvasFill(adPauseClose, [[4, 6], [6, 6], [16, 15], [14, 15]]); + thisTemp.canvasFill(adPauseClose, [[14, 6], [16, 6], [6, 15], [4, 15]]); + }; + adPauseClose.fillStyle = '#404856'; + adPauseCloseFillRect(); + var adPauseCloseOver = function() { + adPauseClose.clearRect(0, 0, bWidth, bHeight); + adPauseClose.fillStyle = bOverColor; + adPauseCloseFillRect(); + }; + var adPauseCloseOut = function() { + adPauseClose.clearRect(0, 0, bWidth, bHeight); + adPauseClose.fillStyle = '#404856'; + adPauseCloseFillRect(); + }; + this.addListenerInside('mouseover', adPauseCloseOver, this.getByElement(adPauseCloseID + '-canvas')); + this.addListenerInside('mouseout', adPauseCloseOut, this.getByElement(adPauseCloseID + '-canvas')); + //定义loading样式 + var cLoading = this.getByElement(loadingID + '-canvas').getContext('2d'); + var cLoadingFillRect = function() { + cLoading.save(); + var grad = cLoading.createLinearGradient(0, 0, 60, 60); + grad.addColorStop(0, bBgColor); + var grad2 = cLoading.createLinearGradient(0, 0, 80, 60); + grad2.addColorStop(1, bOverColor); + var grad3 = cLoading.createLinearGradient(0, 0, 80, 60); + grad3.addColorStop(1, '#FF9900'); + var grad4 = cLoading.createLinearGradient(0, 0, 80, 60); + grad4.addColorStop(1, '#CC3300'); + cLoading.strokeStyle = grad; //设置描边样式 + cLoading.lineWidth = 8; //设置线宽 + cLoading.beginPath(); //路径开始 + cLoading.arc(30, 30, 25, 0, 0.4 * Math.PI, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针) + cLoading.stroke(); //绘制 + cLoading.closePath(); //路径结束 + cLoading.beginPath(); //路径开始 + cLoading.strokeStyle = grad2; //设置描边样式 + cLoading.arc(30, 30, 25, 0.5 * Math.PI, 0.9 * Math.PI, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针) + cLoading.stroke(); //绘制 + cLoading.beginPath(); //路径开始 + cLoading.strokeStyle = grad3; //设置描边样式 + cLoading.arc(30, 30, 25, Math.PI, 1.4 * Math.PI, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针) + cLoading.stroke(); //绘制 + cLoading.beginPath(); //路径开始 + cLoading.strokeStyle = grad4; //设置描边样式 + cLoading.arc(30, 30, 25, 1.5 * Math.PI, 1.9 * Math.PI, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针) + cLoading.stroke(); //绘制 + cLoading.closePath(); //路径结束 + cLoading.restore(); + }; + cLoading.fillStyle = bBgColor; + cLoadingFillRect(); + //定义中间暂停按钮的样式 + var cPauseCenter = this.getByElement(pauseCenterID + '-canvas').getContext('2d'); + var cPauseCenterFillRect = function() { + thisTemp.canvasFill(cPauseCenter, [[28, 22], [59, 38], [28, 58]]); + /* 指定几个颜色 */ + cPauseCenter.save(); + cPauseCenter.lineWidth = 5; //设置线宽 + cPauseCenter.beginPath(); //路径开始 + cPauseCenter.arc(40, 40, 35, 0, 2 * Math.PI, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针) + cPauseCenter.stroke(); //绘制 + cPauseCenter.closePath(); //路径结束 + cPauseCenter.restore(); + }; + cPauseCenter.fillStyle = bBgColor; + cPauseCenter.strokeStyle = bBgColor; + cPauseCenterFillRect(); + var cPauseCenterOver = function() { + cPauseCenter.clearRect(0, 0, 80, 80); + cPauseCenter.fillStyle = bOverColor; + cPauseCenter.strokeStyle = bOverColor; + cPauseCenterFillRect(); + }; + var cPauseCenterOut = function() { + cPauseCenter.clearRect(0, 0, 80, 80); + cPauseCenter.fillStyle = bBgColor; + cPauseCenter.strokeStyle = bBgColor; + cPauseCenterFillRect(); + }; + this.addListenerInside('mouseover', cPauseCenterOver, this.getByElement(pauseCenterID + '-canvas')); + this.addListenerInside('mouseout', cPauseCenterOut, this.getByElement(pauseCenterID + '-canvas')); + + //鼠标经过/离开音量调节按钮 + var volumeBOOver = function() { + thisTemp.css(volumeBOID, 'backgroundColor', bOverColor); + thisTemp.css(volumeBWID, 'backgroundColor', bBgColor); + }; + var volumeBOOut = function() { + thisTemp.css(volumeBOID, 'backgroundColor', bBgColor); + thisTemp.css(volumeBWID, 'backgroundColor', bOverColor); + }; + this.addListenerInside('mouseover', volumeBOOver, this.getByElement(volumeBOID)); + this.addListenerInside('mouseout', volumeBOOut, this.getByElement(volumeBOID)); + //鼠标经过/离开进度按钮 + var timeBOOver = function() { + thisTemp.css(timeBOID, 'backgroundColor', bOverColor); + thisTemp.css(timeBWID, 'backgroundColor', bBgColor); + }; + var timeBOOut = function() { + thisTemp.css(timeBOID, 'backgroundColor', bBgColor); + thisTemp.css(timeBWID, 'backgroundColor', bOverColor); + }; + this.addListenerInside('mouseover', timeBOOver, this.getByElement(timeBOID)); + this.addListenerInside('mouseout', timeBOOut, this.getByElement(timeBOID)); + + this.addButtonEvent(); //注册按钮及音量调节,进度操作事件 + this.newMenu(); //单独设置右键的样式和事件 + this.controlBarHide(); //单独注册控制栏隐藏事件 + this.keypress(); //单独注册键盘事件 + //初始化音量调节框 + this.changeVolume(this.vars['volume']); + //初始化判断是否需要显示上一集和下一集按钮 + this.showFrontNext(); + setTimeout(function() { + thisTemp.elementCoordinate(); //调整中间暂停按钮/loading的位置/error的位置 + }, + 100); + this.checkBarWidth(); + var resize = function() { + thisTemp.elementCoordinate(); + thisTemp.timeUpdateHandler(); + thisTemp.changeLoad(); + thisTemp.checkBarWidth(); + thisTemp.changeElementCoor(); //修改新加元件的坐标 + thisTemp.changePrompt(); + thisTemp.adPauseCoor(); + thisTemp.adOtherCoor(); + }; + this.addListenerInside('resize', resize, window); + }, + /* + 内部函数 + 创建按钮,使用canvas画布 + */ + newCanvas: function(id, width, height) { + return ''; + }, + /* + 内部函数 + 注册按钮,音量调节框,进度操作框事件 + */ + addButtonEvent: function() { + var thisTemp = this; + //定义按钮的单击事件 + var playClick = function(event) { + thisTemp.videoPlay(); + thisTemp.sendJS('clickEvent', 'actionScript->videoPlay'); + }; + this.addListenerInside('click', playClick, this.CB['play']); + this.addListenerInside('click', playClick, this.CB['pauseCenter']); + var pauseClick = function(event) { + thisTemp.videoPause(); + thisTemp.sendJS('clickEvent', 'actionScript->videoPause'); + }; + this.addListenerInside('click', pauseClick, this.CB['pause']); + var frontClick = function(event) { + if (thisTemp.vars['front']) { + eval(thisTemp.vars['front'] + '()'); + thisTemp.sendJS('clickEvent', 'actionScript->' + thisTemp.vars['front']); + } + }; + this.addListenerInside('click', frontClick, this.CB['front']); + var nextClick = function(event) { + if (thisTemp.vars['next']) { + eval(thisTemp.vars['next'] + '()'); + thisTemp.sendJS('clickEvent', 'actionScript->' + thisTemp.vars['next']); + } + }; + this.addListenerInside('click', nextClick, this.CB['next']); + var muteClick = function(event) { + thisTemp.videoMute(); + thisTemp.sendJS('clickEvent', 'actionScript->videoMute'); + }; + this.addListenerInside('click', muteClick, this.CB['mute']); + var escMuteClick = function(event) { + thisTemp.videoEscMute(); + thisTemp.sendJS('clickEvent', 'actionScript->videoEscMute'); + }; + this.addListenerInside('click', escMuteClick, this.CB['escMute']); + var fullClick = function(event) { + thisTemp.fullScreen(); + thisTemp.sendJS('clickEvent', 'actionScript->fullScreen'); + }; + this.addListenerInside('click', fullClick, this.CB['full']); + var escFullClick = function(event) { + thisTemp.quitFullScreen(); + thisTemp.sendJS('clickEvent', 'actionScript->quitFullScreen'); + }; + this.addListenerInside('click', escFullClick, this.CB['escFull']); + var adSkipClick = function(event) { + if (thisTemp.CB['adSkip'].innerHTML == thisTemp.language['skipAd']) { + thisTemp.runFunction(thisTemp.config['adSkipClick']); + } + }; + this.addListenerInside('click', adSkipClick, this.CB['adSkip']); + var adMuteClick = function(event) { + thisTemp.adMuteFunction(); + }; + this.addListenerInside('click', adMuteClick, this.CB['adMute']); + var adEscMuteClick = function(event) { + thisTemp.adEscMuteFunction(); + }; + this.addListenerInside('click', adEscMuteClick, this.CB['adEscMute']); + var adPauseCloseClick = function(event) { + thisTemp.adPauseCloseFunction(); + }; + this.addListenerInside('click', adPauseCloseClick, this.CB['adPauseClose']); + //定义各个按钮的鼠标经过/离开事件 + var promptHide = function(event) { + thisTemp.promptShow(false); + }; + var playOver = function(event) { + thisTemp.promptShow(thisTemp.CB['play']); + }; + this.addListenerInside('mouseover', playOver, this.CB['play']); + this.addListenerInside('mouseout', promptHide, this.CB['play']); + var pauseOver = function(event) { + thisTemp.promptShow(thisTemp.CB['pause']); + }; + this.addListenerInside('mouseover', pauseOver, this.CB['pause']); + this.addListenerInside('mouseout', promptHide, this.CB['pause']); + var frontOver = function(event) { + thisTemp.promptShow(thisTemp.CB['front']); + }; + this.addListenerInside('mouseover', frontOver, this.CB['front']); + this.addListenerInside('mouseout', promptHide, this.CB['front']); + var nextOver = function(event) { + thisTemp.promptShow(thisTemp.CB['next']); + }; + this.addListenerInside('mouseover', nextOver, this.CB['next']); + this.addListenerInside('mouseout', promptHide, this.CB['next']); + var muteOver = function(event) { + thisTemp.promptShow(thisTemp.CB['mute']); + }; + this.addListenerInside('mouseover', muteOver, this.CB['mute']); + this.addListenerInside('mouseout', promptHide, this.CB['mute']); + var escMuteOver = function(event) { + thisTemp.promptShow(thisTemp.CB['escMute']); + }; + this.addListenerInside('mouseover', escMuteOver, this.CB['escMute']); + this.addListenerInside('mouseout', promptHide, this.CB['escMute']); + var fullOver = function(event) { + thisTemp.promptShow(thisTemp.CB['full']); + }; + this.addListenerInside('mouseover', fullOver, this.CB['full']); + this.addListenerInside('mouseout', promptHide, this.CB['full']); + var escFullOver = function(event) { + thisTemp.promptShow(thisTemp.CB['escFull']); + }; + this.addListenerInside('mouseover', escFullOver, this.CB['escFull']); + this.addListenerInside('mouseout', promptHide, this.CB['escFull']); + var definitionOver = function(event) { + thisTemp.promptShow(thisTemp.CB['definition']); + }; + this.addListenerInside('mouseover', definitionOver, this.CB['definition']); + this.addListenerInside('mouseout', promptHide, this.CB['definition']); + var playbackrateOver = function(event) { + thisTemp.promptShow(thisTemp.CB['playbackrate']); + }; + this.addListenerInside('mouseover', playbackrateOver, this.CB['playbackrate']); + this.addListenerInside('mouseout', promptHide, this.CB['playbackrate']); + //定义音量和进度按钮的滑块事件 + var volumePrompt = function(vol) { + var volumeBOXY = thisTemp.getCoor(thisTemp.CB['volumeBO']); + var promptObj = { + title: thisTemp.language['volume'] + vol + '%', + x: volumeBOXY['x'] + thisTemp.CB['volumeBO'].offsetWidth * 0.5, + y: volumeBOXY['y'] + }; + thisTemp.promptShow(false, promptObj); + }; + var volumeObj = { + slider: this.CB['volumeBO'], + follow: this.CB['volumeUp'], + refer: this.CB['volumeBg'], + grossValue: 'volume', + pd: true, + startFun: function(vol) {}, + monitorFun: function(vol) { + thisTemp.changeVolume(vol * 0.01, false, false); + volumePrompt(vol); + }, + endFun: function(vol) {}, + overFun: function(vol) { + volumePrompt(vol); + } + }; + this.slider(volumeObj); + var volumeClickObj = { + refer: this.CB['volumeBg'], + grossValue: 'volume', + fun: function(vol) { + thisTemp.changeVolume(vol * 0.01, true, true); + } + }; + this.progressClick(volumeClickObj); + this.timeButtonMouseDown(); //用单击的函数来判断是否需要建立控制栏监听 + //鼠标经过/离开音量调节框时的 + var volumeBgMove = function(event) { + var volumeBgXY = thisTemp.getCoor(thisTemp.CB['volumeBg']); + var eventX = thisTemp.client(event)['x']; + var eventVolume = parseInt((eventX - volumeBgXY['x']) * 100 / thisTemp.CB['volumeBg'].offsetWidth); + var buttonPromptObj = { + title: thisTemp.language['volume'] + eventVolume + '%', + x: eventX, + y: volumeBgXY['y'] + }; + thisTemp.promptShow(false, buttonPromptObj); + }; + this.addListenerInside('mousemove', volumeBgMove, this.CB['volumeBg']); + this.addListenerInside('mouseout', promptHide, this.CB['volumeBg']); + this.addListenerInside('mouseout', promptHide, this.CB['volumeBO']); + //注册清晰度相关事件 + this.addDefListener(); + //注册倍速相关事件 + this.addPlaybackrate(); + }, + /* + 内部函数 + 注册单击视频动作 + */ + videoClick: function() { + var thisTemp = this; + var clearTimerClick = function() { + if (thisTemp.timerClick != null) { + if (thisTemp.timerClick.runing) { + thisTemp.timerClick.stop(); + } + thisTemp.timerClick = null; + } + }; + var timerClickFun = function() { + clearTimerClick(); + thisTemp.isClick = false; + if (thisTemp.adPlayerPlay) { + var ad = thisTemp.getNowAdvertisements(); + try { + if (ad['link'] != '') { + window.open(ad['link']); + } + thisTemp.ajaxSuccessNull(ad['clickMonitor']); + } catch(event) {} + } else { + if (thisTemp.ckplayerConfig['config']['click']) { + thisTemp.playOrPause(); + } + } + + }; + clearTimerClick(); + if (this.isClick) { + this.isClick = false; + if (thisTemp.ckplayerConfig['config']['doubleClick']) { + if (!this.full) { + thisTemp.fullScreen(); + } else { + thisTemp.quitFullScreen(); + } + } + + } else { + this.isClick = true; + this.timerClick = new this.timer(300, timerClickFun, 1) + //this.timerClick.start(); + } + + }, + /* + 内部函数 + 注册鼠标经过进度滑块的事件 + */ + timeButtonMouseDown: function() { + var thisTemp = this; + var timePrompt = function(time) { + if (isNaN(time)) { + time = 0; + } + var timeButtonXY = thisTemp.getCoor(thisTemp.CB['timeButton']); + var promptObj = { + title: thisTemp.formatTime(time), + x: timeButtonXY['x'] - thisTemp.pdCoor['x'] + thisTemp.CB['timeButton'].offsetWidth * 0.5, + y: timeButtonXY['y'] - thisTemp.pdCoor['y'] + }; + thisTemp.promptShow(false, promptObj); + }; + var timeObj = { + slider: this.CB['timeButton'], + follow: this.CB['timeProgress'], + refer: this.CB['timeBoBg'], + grossValue: 'time', + pd: false, + startFun: function(time) { + thisTemp.isTimeButtonMove = false; + }, + monitorFun: function(time) {}, + endFun: function(time) { + if (thisTemp.V) { + if (thisTemp.V.duration > 0) { + thisTemp.needSeek = 0; + thisTemp.videoSeek(parseInt(time)); + } + } + }, + overFun: function(time) { + timePrompt(time); + } + }; + var timeClickObj = { + refer: this.CB['timeBoBg'], + grossValue: 'time', + fun: function(time) { + if (thisTemp.V) { + if (thisTemp.V.duration > 0) { + thisTemp.needSeek = 0; + thisTemp.videoSeek(parseInt(time)); + } + } + } + }; + var timeBoBgmousemove = function(event) { + var timeBoBgXY = thisTemp.getCoor(thisTemp.CB['timeBoBg']); + var eventX = thisTemp.client(event)['x']; + var eventTime = parseInt((eventX - timeBoBgXY['x']) * thisTemp.V.duration / thisTemp.CB['timeBoBg'].offsetWidth); + var buttonPromptObj = { + title: thisTemp.formatTime(eventTime), + x: eventX, + y: timeBoBgXY['y'] + }; + thisTemp.promptShow(false, buttonPromptObj); + var def = false; + if (!thisTemp.isUndefined(thisTemp.CB['definitionP'])) { + if (thisTemp.css(thisTemp.CB['definitionP'], 'display') != 'block') { + def = true; + } + } + if (thisTemp.vars['preview'] != null && def) { + buttonPromptObj['time'] = eventTime; + thisTemp.preview(buttonPromptObj); + } + }; + var promptHide = function(event) { + thisTemp.promptShow(false); + if (thisTemp.previewDiv != null) { + thisTemp.css([thisTemp.previewDiv, thisTemp.previewTop], 'display', 'none'); + } + }; + if (!this.vars['live']) { //如果不是直播 + this.isTimeButtonDown = true; + this.addListenerInside('mousemove', timeBoBgmousemove, this.CB['timeBoBg']); + this.addListenerInside('mouseout', promptHide, this.CB['timeBoBg']); + } else { + this.isTimeButtonDown = false; + timeObj['removeListenerInside'] = true; + timeClickObj['removeListenerInside'] = true; + } + this.slider(timeObj); + this.progressClick(timeClickObj); + + }, + /* + 内部函数 + 注册调节框上单击事件,包含音量调节框和播放时度调节框 + */ + progressClick: function(obj) { + /* + refer:参考对象 + fun:返回函数 + refer:参考元素,即背景 + grossValue:调用的参考值类型 + pd: + */ + //建立参考元素的mouseClick事件,用来做为鼠标在其上按下时触发的状态 + var thisTemp = this; + var referMouseClick = function(event) { + var referX = thisTemp.client(event)['x'] - thisTemp.getCoor(obj['refer'])['x']; + var rWidth = obj['refer'].offsetWidth; + var grossValue = 0; + if (obj['grossValue'] == 'volume') { + grossValue = 100; + } else { + if (thisTemp.V) { + grossValue = thisTemp.V.duration; + } + } + var nowZ = parseInt(referX * grossValue / rWidth); + if (obj['fun']) { + if (obj['grossValue'] === 'time') { + var sliderXY = thisTemp.getCoor(thisTemp.CB['timeButton']); + sliderLeft = sliderXY['x']; + if (!thisTemp.checkSlideLeft(referX, sliderLeft, rWidth)) { + return; + } + var bimeButtonWB = thisTemp.CB['timeButton'].offsetWidth * 0.5; + thisTemp.css(thisTemp.CB['timeButton'], 'left', (referX - bimeButtonWB) + 'px'); + thisTemp.css(thisTemp.CB['timeProgress'], 'width', (referX) + 'px'); + } + obj['fun'](nowZ); + } + }; + if (this.isUndefined(obj['removeListenerInside'])) { + this.addListenerInside('click', referMouseClick, obj['refer']); + } else { + this.removeListenerInside('click', referMouseClick, obj['refer']); + } + + }, + + /* + 内部函数 + 共用的注册滑块事件 + */ + slider: function(obj) { + /* + obj={ + slider:滑块元素 + follow:跟随滑块的元素 + refer:参考元素,即背景 + grossValue:调用的参考值类型 + startFun:开始调用的元素 + monitorFun:监听函数 + endFun:结束调用的函数 + overFun:鼠标放上去后调用的函数 + pd:是否需要修正 + } + */ + var thisTemp = this; + var clientX = 0, + criterionWidth = 0, + sliderLeft = 0, + referLeft = 0; + var value = 0; + var calculation = function() { //根据滑块的left计算百分比 + var sLeft = parseInt(thisTemp.css(obj['slider'], 'left')); + var rWidth = obj['refer'].offsetWidth - obj['slider'].offsetWidth; + var grossValue = 0; + if (thisTemp.isUndefined(sLeft) || isNaN(sLeft)) { + sLeft = 0; + } + if (obj['grossValue'] == 'volume') { + grossValue = 100; + } else { + if (thisTemp.V) { + grossValue = thisTemp.V.duration; + } + } + return parseInt(sLeft * grossValue / rWidth); + }; + var mDown = function(event) { + thisTemp.addListenerInside('mousemove', mMove, document); + thisTemp.addListenerInside('mouseup', mUp, document); + var referXY = thisTemp.getCoor(obj['refer']); + var sliderXY = thisTemp.getCoor(obj['slider']); + clientX = thisTemp.client(event)['x']; + referLeft = referXY['x']; + sliderLeft = sliderXY['x']; + criterionWidth = clientX - sliderLeft; + if (obj['startFun']) { + obj['startFun'](calculation()); + } + }; + var mMove = function(event) { + clientX = thisTemp.client(event)['x']; + var newX = clientX - criterionWidth - referLeft; + if (newX < 0) { + newX = 0; + } + if (newX > obj['refer'].offsetWidth - obj['slider'].offsetWidth) { + newX = obj['refer'].offsetWidth - obj['slider'].offsetWidth; + } + if (obj['slider'] === thisTemp.CB['timeButton']) { + if (!thisTemp.checkSlideLeft(newX, sliderLeft, obj['refer'].offsetWidth)) { + return; + } + } + thisTemp.css(obj['slider'], 'left', newX + 'px'); + thisTemp.css(obj['follow'], 'width', (newX + obj['slider'].offsetWidth * 0.5) + 'px'); + var nowZ = calculation(); + if (obj['monitorFun']) { + obj['monitorFun'](nowZ); + } + }; + var mUp = function(event) { + thisTemp.removeListenerInside('mousemove', mMove, document); + thisTemp.removeListenerInside('mouseup', mUp, document); + if (obj['endFun']) { + obj['endFun'](calculation()); + } + }; + var mOver = function(event) { + if (obj['overFun']) { + obj['overFun'](calculation()); + } + + }; + if (this.isUndefined(obj['removeListenerInside'])) { + this.addListenerInside('mousedown', mDown, obj['slider']); + this.addListenerInside('mouseover', mOver, obj['slider']); + } else { + this.removeListenerInside('mousedown', mDown, obj['slider']); + this.removeListenerInside('mouseover', mOver, obj['slider']); + } + }, + /* + 内部函数 + 判断是否可以拖动进度按钮或点击进度栏 + */ + checkSlideLeft: function(newX, sliderLeft, refer) { + var timeSA = this.ckplayerConfig['config']['timeScheduleAdjust']; + switch (timeSA) { + case 0: + return false; + break; + case 2: + if (newX < sliderLeft) { + return false; + } + break; + case 3: + if (newX > sliderLeft) { + return false; + } + break; + case 4: + if (!this.timeSliderLeftTemp) { + this.timeSliderLeftTemp = sliderLeft / refer; + } + if (newX < this.timeSliderLeftTemp * refer) { + return false; + } + break; + case 5: + if (!this.timeSliderLeftTemp) { + this.timeSliderLeftTemp = sliderLeft / refer; + } else { + var timeSliderMax = sliderLeft / refer; + if (timeSliderMax > this.timeSliderLeftTemp) { + this.timeSliderLeftTemp = timeSliderMax; + } + } + if (newX > this.timeSliderLeftTemp * refer) { + return false; + } + break; + default: + return true; + break; + } + return true; + }, + /* + 内部函数 + 显示loading + */ + loadingStart: function(rot) { + var thisTemp = this; + if (this.isUndefined(rot)) { + rot = true; + } + if (this.showFace) { + this.css(thisTemp.CB['loading'], 'display', 'none'); + } + if (this.timerLoading != null) { + if (this.timerLoading.runing) { + this.timerLoading.stop(); + } + this.timerLoading = null; + } + var buffer = 0; + var loadingFun = function() { + var nowRotate = '0'; + try { + nowRotate = thisTemp.css(thisTemp.CB['loadingCanvas'], 'transform') || thisTemp.css(thisTemp.CB['loadingCanvas'], '-ms-transform') || thisTemp.css(thisTemp.CB['loadingCanvas'], '-moz-transform') || thisTemp.css(thisTemp.CB['loadingCanvas'], '-webkit-transform') || thisTemp.css(thisTemp.CB['loadingCanvas'], '-o-transform') || '0'; + } catch(event) {} + nowRotate = parseInt(nowRotate.replace('rotate(', '').replace('deg);', '')); + nowRotate += 4; + if (nowRotate > 360) { + nowRotate = 0; + } + if (thisTemp.showFace) { + thisTemp.css(thisTemp.CB['loadingCanvas'], { + transform: 'rotate(' + nowRotate + 'deg)', + msTransform: 'rotate(' + nowRotate + 'deg)', + mozTransform: 'rotate(' + nowRotate + 'deg)', + webkitTransform: 'rotate(' + nowRotate + 'deg)', + oTransform: 'rotate(' + nowRotate + 'deg)' + }); + } + buffer++; + if (buffer >= 99) { + buffer = 99; + } + thisTemp.sendJS('buffer', buffer); + }; + if (rot) { + this.timerLoading = new this.timer(10, loadingFun); + //this.timerLoading.start(); + if (this.showFace) { + this.css(thisTemp.CB['loading'], 'display', 'block'); + } + } else { + thisTemp.sendJS('buffer', 100); + } + }, + /* + 内部函数 + 判断是否需要显示上一集和下一集 + */ + showFrontNext: function() { + if (!this.showFace) { + return; + } + if (this.vars['front']) { + this.css([this.CB['front'], this.CB['frontLine']], 'display', 'block'); + } else { + this.css([this.CB['front'], this.CB['frontLine']], 'display', 'none'); + } + if (this.vars['next']) { + this.css([this.CB['next'], this.CB['nextLine']], 'display', 'block'); + } else { + this.css([this.CB['next'], this.CB['nextLine']], 'display', 'none'); + } + }, + /* + 内部函数 + 显示提示语 + */ + promptShow: function(ele, data) { + if (!this.showFace) { + return; + } + var obj = {}; + if (ele || data) { + if (!this.isUndefined(data)) { + obj = data; + } else { + var offsetCoor = this.getCoor(ele); + obj = { + title: this.getDataset(ele, 'title'), + x: offsetCoor['x'] + ele.offsetWidth * 0.5, + y: offsetCoor['y'] + }; + } + this.CB['prompt'].innerHTML = obj['title']; + this.css(this.CB['prompt'], 'display', 'block'); + var promoptWidth = this.getStringLen(obj['title']) * 10; + this.css(this.CB['promptBg'], 'width', promoptWidth + 'px'); + this.css(this.CB['prompt'], 'width', promoptWidth + 'px'); + promoptWidth += 10; + var x = obj['x'] - (promoptWidth * 0.5); + var y = this.PD.offsetHeight - obj['y'] + 8; + if (x < 0) { + x = 0; + } + if (x > this.PD.offsetWidth - promoptWidth) { + x = this.PD.offsetWidth - promoptWidth; + } + this.css([this.CB['promptBg'], this.CB['prompt']], { + display: 'block', + left: x + 'px', + bottom: y + 'px' + }); + } else { + this.css([this.CB['promptBg'], this.CB['prompt']], { + display: 'none' + }); + } + }, + /* + 内部函数 + 监听错误 + */ + timerErrorFun: function() { + var thisTemp = this; + this.errorSend = false; + var clearIntervalError = function(event) { + if (thisTemp.timerError != null) { + if (thisTemp.timerError.runing) { + thisTemp.timerError.stop(); + } + thisTemp.timerError = null; + } + }; + var errorFun = function(event) { + clearIntervalError(); + thisTemp.error = true; + //提取错误播放地址 + thisTemp.errorUrl = thisTemp.getVideoUrl(); + //提取错误播放地址结束 + if (!thisTemp.errorSend) { + thisTemp.errorSend = true; + thisTemp.sendJS('error'); + } + if (thisTemp.showFace) { + thisTemp.css(thisTemp.CB['errorText'], 'display', 'block'); + thisTemp.css(thisTemp.CB['pauseCenter'], 'display', 'none'); + thisTemp.css(thisTemp.CB['loading'], 'display', 'none'); + } + thisTemp.V.removeAttribute('poster'); + thisTemp.resetPlayer(); + }; + var errorListenerFun = function(event) { + setTimeout(function() { + if (isNaN(thisTemp.V.duration)) { + errorFun(event); + } + }, + 500); + + }; + if (!this.errorAdd) { + this.errorAdd = true; + this.addListenerInside('error', errorListenerFun, this.V); + } + clearIntervalError(); + var timerErrorFun = function() { + if (thisTemp.V && parseInt(thisTemp.V.networkState) == 3) { + errorFun(); + } + }; + this.timerError = new this.timer(this.config['errorTime'], timerErrorFun); + //this.timerError.start(); + }, + /* + 内部函数 + 构建判断全屏还是非全屏的判断 + */ + judgeFullScreen: function() { + var thisTemp = this; + if (this.timerFull != null) { + if (this.timerFull.runing) { + this.timerFull.stop(); + } + this.timerFull = null; + } + var fullFun = function() { + thisTemp.isFullScreen(); + }; + this.timerFull = new this.timer(20, fullFun); + }, + /* + 内部函数 + 判断是否是全屏 + */ + isFullScreen: function() { + if (!this.showFace) { + return; + } + var fullState = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement; + if (fullState && !this.full) { + this.full = true; + this.sendJS('full', true); + this.elementCoordinate(); + this.css(this.CB['full'], 'display', 'none'); + this.css(this.CB['escFull'], 'display', 'block'); + if (this.vars['live'] == 0) { + this.timeUpdateHandler(); + } + this.PD.appendChild(this.CB['menu']); + } + if (!fullState && this.full) { + this.full = false; + this.sendJS('full', false); + this.elementCoordinate(); + this.css(this.CB['full'], 'display', 'block'); + this.css(this.CB['escFull'], 'display', 'none'); + if (this.timerFull != null) { + if (this.timerFull.runing) { + this.timerFull.stop(); + } + this.timerFull = null; + } + if (this.vars['live'] == 0) { + this.timeUpdateHandler(); + } + this.body.appendChild(this.CB['menu']); + } + }, + /* + 内部函数 + 构建右键内容及注册相关动作事件 + */ + newMenu: function() { + var thisTemp = this; + var i = 0; + this.css(this.CB['menu'], { + backgroundColor: '#FFFFFF', + padding: '5px', + position: 'absolute', + left: '10px', + top: '20px', + display: 'none', + zIndex: '999', + color: '#A1A9BE', + boxShadow: '2px 2px 3px #AAAAAA' + }); + var mArr = this.contextMenu; + var cMenu = this.ckplayerConfig['menu']; + if (cMenu['name']) { + if (cMenu['link']) { + mArr[0] = [cMenu['name'], 'link', cMenu['link']]; + } else { + mArr[0] = [cMenu['name'], 'default']; + } + } + if (cMenu['version']) { + mArr[1] = [cMenu['version'], 'default', 'line']; + } + if (cMenu['more']) { + if (typeof(cMenu['more']) == 'object') { + if (cMenu['more'].length > 0) { + var moreArr = cMenu['more']; + for (i = 0; i < moreArr.length; i++) { + var mTemp = moreArr[i]; + var arrTemp = []; + if (mTemp['name']) { + arrTemp.push(mTemp['name']); + } + if (mTemp['clickEvent'] && mTemp['clickEvent'] != 'none') { + var eveObj = this.clickEvent(mTemp['clickEvent']); + arrTemp.push(eveObj['type']); + if (eveObj['fun']) { + arrTemp.push(eveObj['fun']); + } + if (eveObj['link']) { + arrTemp.push(eveObj['link']); + } + if (eveObj['target']) { + arrTemp.push(' target="' + eveObj['target'] + '"'); + } + } + if (mTemp['separatorBefore']) { + arrTemp.push('line'); + } + mArr.push(arrTemp); + } + } + } + } + var html = ''; + for (i = 0; i < mArr.length; i++) { + var me = mArr[i]; + switch (me[1]) { + case 'default': + html += '

    ' + me[0] + '

    '; + break; + case 'link': + if (me[3]) { + me[3] = 'target="' + me[3] + '"'; + } + html += '

    ' + me[0] + '

    '; + break; + case 'javaScript': + html += '

    ' + me[0] + '

    '; + break; + case 'actionScript': + html += '

    ' + me[0] + '

    '; + break; + default: + break; + } + } + this.CB['menu'].innerHTML = html; + var pArr = this.CB['menu'].childNodes; + for (i = 0; i < pArr.length; i++) { + this.css(pArr[i], { + height: '30px', + lineHeight: '30px', + margin: '0px', + fontFamily: this.fontFamily, + fontSize: '12px', + paddingLeft: '10px', + paddingRight: '30px' + }); + if (mArr[i][mArr[i].length - 1] == 'line') { + this.css(pArr[i], 'borderBottom', '1px solid #e9e9e9'); + } + var aArr = pArr[i].childNodes; + for (var n = 0; n < aArr.length; n++) { + if (aArr[n].localName == 'a') { + this.css(aArr[n], { + color: '#000000', + textDecoration: 'none' + }); + } + } + } + this.PD.oncontextmenu = function(event) { + var eve = event || window.event; + var client = thisTemp.client(event); + if (eve.button == 2) { + eve.returnvalue = false; + var x = client['x'] + thisTemp.pdCoor['x'] - 2; + var y = client['y'] + thisTemp.pdCoor['y'] - 2; + thisTemp.css(thisTemp.CB['menu'], { + display: 'block', + left: x + 'px', + top: y + 'px' + }); + return false; + } + return true; + }; + var setTimeOutPClose = function() { + if (setTimeOutP) { + window.clearTimeout(setTimeOutP); + setTimeOutP = null; + } + }; + var setTimeOutP = null; + var mouseOut = function(event) { + setTimeOutPClose(); + setTimeOutP = setTimeout(function(event) { + thisTemp.css(thisTemp.CB['menu'], 'display', 'none'); + }, + 500); + }; + this.addListenerInside('mouseout', mouseOut, thisTemp.CB['menu']); + var mouseOver = function(event) { + setTimeOutPClose(); + }; + this.addListenerInside('mouseover', mouseOver, thisTemp.CB['menu']); + + }, + /* + 内部函数 + 构建控制栏隐藏事件 + */ + controlBarHide: function(hide) { + var thisTemp = this; + var client = { + x: 0, + y: 0 + }, + oldClient = { + x: 0, + y: 0 + }; + var cShow = true, + force = false; + var oldCoor = [0, 0]; + var controlBarShow = function(show) { + if (show && !cShow && thisTemp.controlBarIsShow) { + cShow = true; + thisTemp.sendJS('controlBar', true); + thisTemp.css(thisTemp.CB['controlBarBg'], 'display', 'block'); + thisTemp.css(thisTemp.CB['controlBar'], 'display', 'block'); + thisTemp.css(thisTemp.CB['timeProgressBg'], 'display', 'block'); + thisTemp.css(thisTemp.CB['timeBoBg'], 'display', 'block'); + thisTemp.changeVolume(thisTemp.volume); + thisTemp.changeLoad(); + if (!thisTemp.timerBuffer) { + thisTemp.bufferEdHandler(); + } + } else { + if (cShow) { + cShow = false; + var paused = thisTemp.getMetaDate()['paused']; + if (force) { + paused = false; + } + if (!paused) { + thisTemp.sendJS('controlBar', false); + thisTemp.css(thisTemp.CB['controlBarBg'], 'display', 'none'); + thisTemp.css(thisTemp.CB['controlBar'], 'display', 'none'); + thisTemp.css(thisTemp.CB['timeProgressBg'], 'display', 'none'); + thisTemp.css(thisTemp.CB['timeBoBg'], 'display', 'none'); + thisTemp.promptShow(false); + + } + } + } + }; + var cbarFun = function(event) { + if (client['x'] == oldClient['x'] && client['y'] == oldClient['y']) { + var cdH = parseInt(thisTemp.CD.offsetHeight); + if ((client['y'] < cdH - 50 || client['y'] > cdH - 2) && cShow && !thisTemp.getMetaDate()['paused']) { + controlBarShow(false); + } + } else { + if (!cShow) { + controlBarShow(true); + } + } + oldClient = { + x: client['x'], + y: client['y'] + } + }; + this.timerCBar = new this.timer(2000, cbarFun); + var cdMove = function(event) { + var getClient = thisTemp.client(event); + client['x'] = getClient['x']; + client['y'] = getClient['y']; + if (!cShow) { + controlBarShow(true); + } + }; + this.addListenerInside('mousemove', cdMove, thisTemp.CD); + this.addListenerInside('ended', cdMove); + this.addListenerInside('resize', cdMove, window); + if (hide === true) { + cShow = true; + force = true; + controlBarShow(false); + } + if (hide === false) { + cShow = false; + force = true; + controlBarShow(true); + } + }, + + /* + 内部函数 + 注册键盘按键事件 + */ + keypress: function() { + var thisTemp = this; + var keyDown = function(eve) { + var keycode = eve.keyCode || eve.which; + if (this.adPlayerPlay) { + return; + } + switch (keycode) { + case 32: + thisTemp.playOrPause(); + break; + case 37: + thisTemp.fastBack(); + break; + case 39: + thisTemp.fastNext(); + break; + case 38: + now = thisTemp.volume + thisTemp.ckplayerConfig['config']['volumeJump']; + thisTemp.changeVolume(now > 1 ? 1 : now); + break; + case 40: + now = thisTemp.volume - thisTemp.ckplayerConfig['config']['volumeJump']; + thisTemp.changeVolume(now < 0 ? 0 : now); + break; + default: + break; + } + }; + this.addListenerInside('keydown', keyDown, window || document); + }, + /* + 内部函数 + 注册倍速相关 + */ + playbackRate: function() { + if (!this.showFace) { + return; + } + var thisTemp = this; + var vArr = this.playbackRateArr; + var html = ''; + var nowD = ''; //当前的清晰度 + var i = 0; + if (!nowD) { + nowD = vArr[this.playbackRateDefault][1]; + } + if (vArr.length > 1) { + var zlen = 0; + for (i = 0; i < vArr.length; i++) { + html = '

    ' + vArr[i][1] + '

    ' + html; + var dlen = this.getStringLen(vArr[i][1]); + if (dlen > zlen) { + zlen = dlen; + } + } + if (html) { + html += '

    ' + nowD + '

    '; + } + this.CB['playbackrate'].innerHTML = nowD; + this.CB['playbackrateP'].innerHTML = html; + this.css([this.CB['playbackrate'], this.CB['playbackrateLine']], 'display', 'block'); + var pArr = this.CB['playbackrateP'].childNodes; + for (var i = 0; i < pArr.length; i++) { + var fontColor = '#FFFFFF'; + if (pArr[i].innerHTML == nowD) { + fontColor = '#0782F5'; + } + this.css(pArr[i], { + color: fontColor, + margin: '0px', + padding: '0px', + fontSize: '14px' + }); + if (i < pArr.length - 1) { + this.css(pArr[i], 'borderBottom', '1px solid #282828') + } + var defClick = function(event) { + if (nowD != this.innerHTML) { + thisTemp.css(thisTemp.CB['playbackrateP'], 'display', 'none'); + thisTemp.newPlaybackrate(this.innerHTML); + thisTemp.sendJS('clickEvent', 'actionScript->newPlaybackrate'); + } + }; + this.addListenerInside('click', defClick, pArr[i]); + + } + var pW = (zlen * 10) + 20; + this.css(this.CB['playbackrateP'], { + width: pW + 'px' + }); + this.css(this.CB['playbackrate'], { + width: pW + 'px' + }); + this.buttonWidth['playbackrate'] = this.CB['playbackrate'].offsetWidth; + } else { + this.CB['playbackrate'].innerHTML = ''; + this.CB['playbackrateP'].innerHTML = ''; + this.css([this.CB['playbackrate'], this.CB['playbackrateLine']], 'display', 'none'); + } + }, + /* + 内部函数 + 注册切换倍速播放相关事件 + */ + addPlaybackrate: function() { + var thisTemp = this; + var setTimeOutP = null; + var defClick = function(event) { + thisTemp.css(thisTemp.CB['playbackrateP'], { + left: thisTemp.getCoor(thisTemp.CB['playbackrate'])['x'] + 'px', + display: 'block' + }); + }; + this.addListenerInside('click', defClick, this.CB['playbackrate']); + var defMouseOut = function(event) { + if (setTimeOutP) { + window.clearTimeout(setTimeOutP); + setTimeOutP = null; + } + setTimeOutP = setTimeout(function(event) { + thisTemp.css(thisTemp.CB['playbackrateP'], 'display', 'none'); + }, + 500); + }; + this.addListenerInside('mouseout', defMouseOut, thisTemp.CB['playbackrateP']); + var defMouseOver = function(event) { + if (setTimeOutP) { + window.clearTimeout(setTimeOutP); + setTimeOutP = null; + } + }; + this.addListenerInside('mouseover', defMouseOver, thisTemp.CB['playbackrateP']); + }, + /* + 内部函数 + 切换倍速后发生的动作 + */ + newPlaybackrate: function(title) { + var vArr = this.playbackRateArr; + var nVArr = []; + var i = 0; + for (i = 0; i < vArr.length; i++) { + var v = vArr[i]; + if (v[1] == title) { + this.playbackRateDefault = i; + this.V.playbackRate = v[0]; + if (this.showFace) { + this.CB['playbackrate'].innerHTML = v[1]; + this.playbackRate(); + } + this.sendJS('playbackRate', v); + } + } + }, + + /* + 内部函数 + 构建清晰度按钮及切换事件(Click事件) + */ + definition: function() { + if (!this.showFace) { + return; + } + var thisTemp = this; + var vArr = this.VA; + var dArr = []; + var html = ''; + var nowD = ''; //当前的清晰度 + var i = 0; + for (i = 0; i < vArr.length; i++) { + var d = vArr[i][2]; + if (dArr.indexOf(d) == -1) { + dArr.push(d); + } + if (this.V) { + if (vArr[i][0] == this.V.currentSrc) { + nowD = d; + } + } + } + if (!nowD) { + nowD = dArr[0]; + } + if (dArr.length > 1) { + var zlen = 0; + for (i = dArr.length - 1; i > -1; i--) { + html = '

    ' + dArr[i] + '

    ' + html; + var dlen = this.getStringLen(dArr[i]); + if (dlen > zlen) { + zlen = dlen; + } + } + if (html) { + html += '

    ' + nowD + '

    '; + } + this.CB['definition'].innerHTML = nowD; + this.CB['definitionP'].innerHTML = html; + this.css([this.CB['definition'], this.CB['definitionLine']], 'display', 'block'); + var pArr = this.CB['definitionP'].childNodes; + for (var i = 0; i < pArr.length; i++) { + var fontColor = '#FFFFFF'; + if (pArr[i].innerHTML == nowD) { + fontColor = '#0782F5'; + } + this.css(pArr[i], { + color: fontColor, + margin: '0px', + padding: '0px', + fontSize: '14px' + }); + if (i < pArr.length - 1) { + this.css(pArr[i], 'borderBottom', '1px solid #282828') + } + var defClick = function() { + if (nowD != this.innerHTML) { + thisTemp.css(thisTemp.CB['definitionP'], 'display', 'none'); + thisTemp.newDefinition(this.innerHTML); + } + }; + this.addListenerInside('click', defClick, pArr[i]); + + } + var pW = (zlen * 10) + 20; + this.css(this.CB['definitionP'], { + width: pW + 'px' + }); + this.css(this.CB['definition'], { + width: pW + 'px' + }); + this.buttonWidth['definition'] = this.CB['definition'].offsetWidth; + } else { + this.CB['definition'].innerHTML = ''; + this.CB['definitionP'].innerHTML = ''; + this.css([this.CB['definition'], this.CB['definitionLine']], 'display', 'none'); + } + }, + /* + 内部函数 + 注册清晰度相关事件 + */ + addDefListener: function() { + var thisTemp = this; + var setTimeOutP = null; + var defClick = function(event) { + thisTemp.css(thisTemp.CB['definitionP'], { + left: thisTemp.getCoor(thisTemp.CB['definition'])['x'] + 'px', + display: 'block' + }); + }; + this.addListenerInside('click', defClick, this.CB['definition']); + var defMouseOut = function(event) { + if (setTimeOutP) { + window.clearTimeout(setTimeOutP); + setTimeOutP = null; + } + setTimeOutP = setTimeout(function(event) { + thisTemp.css(thisTemp.CB['definitionP'], 'display', 'none'); + }, + 500); + }; + this.addListenerInside('mouseout', defMouseOut, thisTemp.CB['definitionP']); + var defMouseOver = function(event) { + if (setTimeOutP) { + window.clearTimeout(setTimeOutP); + setTimeOutP = null; + } + }; + this.addListenerInside('mouseover', defMouseOver, thisTemp.CB['definitionP']); + }, + /* + 接口函数 + 提供给外部api + */ + changeDefinition: function(n) { + if (!this.loaded || n < 0) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.changeDefinition(n); + return; + } + if (this.VA.length > n) { + var arr = this.VA[n]; + if (arr.length > 3) { + var title = arr[2]; + if (title) { + this.newDefinition(title); + } + } + } + }, + /* + 内部函数 + 切换清晰度后发生的动作 + */ + newDefinition: function(title) { + var vArr = this.VA; + var nVArr = []; + var i = 0; + for (i = 0; i < vArr.length; i++) { + var v = vArr[i]; + if (v[2] == title) { + nVArr.push(v); + this.sendJS('definitionChange', i + ''); + } + } + if (nVArr.length < 1) { + return; + } + if (this.V != null && this.needSeek == 0) { + this.needSeek = this.V.currentTime; + } + if (this.getFileExt(nVArr[0][0]) != '.m3u8') { + this.isM3u8 = false; + } + if (!this.isM3u8) { + if (nVArr.length == 1) { + this.V.innerHTML = ''; + this.V.src = nVArr[0][0]; + this.V.currentSrc = nVArr[0][0]; + } else { + var source = ''; + nVArr = this.arrSort(nVArr); + for (i = 0; i < nVArr.length; i++) { + var type = ''; + var va = nVArr[i]; + if (va[1]) { + type = ' type="' + va[1] + '"'; + } + source += ''; + } + this.V.removeAttribute('src'); + this.V.innerHTML = source; + this.V.currentSrc = nVArr[0][0]; + } + } else { + this.embedHls(vArr[0][0], this.vars['autoplay']); + } + this.V.autoplay = 'autoplay'; + this.V.load(); + this.timerErrorFun(); + }, + /* + 内置函数 + 播放hls + */ + embedHls: function(url, autoplay) { + var thisTemp = this; + if (Hls.isSupported()) { + var hls = new Hls(); + hls.loadSource(url); + hls.attachMedia(this.V); + hls.on(Hls.Events.MANIFEST_PARSED, + function() { + thisTemp.playerLoad(); + if (autoplay) { + thisTemp.videoPlay(); + } + }); + } + }, + /* + 内部函数 + 构建提示点 + */ + prompt: function() { + if (!this.showFace) { + return; + } + var thisTemp = this; + var prompt = this.vars['promptSpot']; + if (prompt == null || this.promptArr.length > 0) { + return; + } + var showPrompt = function(event) { + if (thisTemp.promptElement == null) { + var random2 = 'prompte' + thisTemp.randomString(5); + var ele2 = document.createElement('div'); + ele2.className = random2; + thisTemp.PD.appendChild(ele2); + thisTemp.promptElement = thisTemp.getByElement(random2); + thisTemp.css(thisTemp.promptElement, { + overflowX: 'hidden', + lineHeight: '22px', + fontSize: '14px', + color: '#FFFFFF', + position: 'absolute', + display: 'block', + zIndex: '90' + }); + } + var pcon = thisTemp.getPromptTest(); + var pW = pcon['pW'], + pT = pcon['pT'], + pL = parseInt(thisTemp.css(this, 'left')) - parseInt(pW * 0.5); + if (pcon['pL'] > 10) { + pL = pcon['pL']; + } + if (pL < 0) { + pL = 0; + } + thisTemp.css(thisTemp.promptElement, { + width: pW + 'px', + left: ( - pW - 10) + 'px', + display: 'block' + }); + thisTemp.promptElement.innerHTML = thisTemp.getDataset(this, 'words'); + thisTemp.css(thisTemp.promptElement, { + left: pL + 'px', + top: (pT - thisTemp.promptElement.offsetHeight - 10) + 'px' + }); + }; + var hidePrompt = function(event) { + if (thisTemp.promptElement != null) { + thisTemp.css(thisTemp.promptElement, { + display: 'none' + }); + } + }; + var i = 0; + for (i = 0; i < prompt.length; i++) { + var pr = prompt[i]; + var words = pr['words']; + var time = pr['time']; + var random = 'prompt' + this.randomString(5); + var ele = document.createElement('div'); + ele.className = random; + this.CB['timeBoBg'].appendChild(ele); + var div = this.getByElement(random); + div.setAttribute('data-time', time); + div.setAttribute('data-words', words); + this.css(div, { + width: '6px', + height: '6px', + backgroundColor: '#FFFFFF', + position: 'absolute', + top: '4px', + left: '-100px', + display: 'none', + zIndex: '1', + borderRadius: '6px' + }); + + this.addListenerInside('mouseover', showPrompt, div); + this.addListenerInside('mouseout', hidePrompt, div); + this.promptArr.push(div); + } + this.changePrompt(); + }, + /* + 内部函数 + 计算提示文本的位置 + */ + getPromptTest: function() { + var pW = this.previewWidth, + pT = this.getCoor(this.CB['timeButton'])['y'], + pL = 0; + if (this.previewTop != null) { + pT -= parseInt(this.css(this.previewTop, 'height')); + pL = parseInt(this.css(this.previewTop, 'left')); + } else { + pT -= 35; + } + pL += 2; + if (pL < 0) { + pL = 0; + } + if (pL > this.PD.offsetWidth - pW) { + pL = this.PD.offsetWidth - pW; + } + return { + pW: pW, + pT: pT, + pL: pL + }; + }, + /* + 内部函数 + 删除提示点 + */ + deletePrompt: function() { + var arr = this.promptArr; + if (arr.length > 0) { + for (var i = 0; i < arr.length; i++) { + if (arr[i]) { + this.deleteChild(arr[i]); + } + } + } + this.promptArr = []; + }, + /* + 内部函数 + 计算提示点坐标 + */ + changePrompt: function() { + if (this.promptArr.length == 0) { + return; + } + var arr = this.promptArr; + var duration = this.getMetaDate()['duration']; + var bw = this.CB['timeBoBg'].offsetWidth; + for (var i = 0; i < arr.length; i++) { + var time = parseInt(this.getDataset(arr[i], 'time')); + var left = parseInt(time * bw / duration) - parseInt(arr[i].offsetWidth * 0.5); + if (left < 0) { + left = 0; + } + if (left > bw - parseInt(arr[i].offsetWidth * 0.5)) { + left = bw - parseInt(arr[i].offsetWidth * 0.5); + } + this.css(arr[i], { + left: left + 'px', + display: 'block' + }); + } + }, + /* + 内部函数 + 构建预览图片效果 + */ + preview: function(obj) { + var thisTemp = this; + var preview = { + file: null, + scale: 0 + }; + preview = this.standardization(preview, this.vars['preview']); + if (preview['file'] == null || preview['scale'] <= 0) { + return; + } + var srcArr = preview['file']; + if (this.previewStart == 0) { //如果还没有构建,则先进行构建 + this.previewStart = 1; + if (srcArr.length > 0) { + var i = 0; + var imgW = 0, + imgH = 0; + var random = thisTemp.randomString(10); + var loadNum = 0; + var loadImg = function(i) { + srcArr[i] = thisTemp.getNewUrl(srcArr[i]); + var n = 0; + var img = new Image(); + img.src = srcArr[i]; + img.className = random + i; + img.onload = function(event) { + loadNum++; + if (thisTemp.previewDiv == null) { //如果没有建立DIV,则建 + imgW = img.width; + imgH = img.height; + thisTemp.previewWidth = parseInt(imgW * 0.1); + var ele = document.createElement('div'); + ele.className = random; + thisTemp.PD.appendChild(ele); + thisTemp.previewDiv = thisTemp.getByElement(random); + var eleTop = (obj['y'] - parseInt(imgH * 0.1) + 2); + thisTemp.css(thisTemp.previewDiv, { + width: srcArr.length * imgW * 10 + 'px', + height: parseInt(imgH * 0.1) + 'px', + backgroundColor: '#000000', + position: 'absolute', + left: '0px', + top: eleTop + 'px', + display: 'none', + zIndex: '80' + }); + ele.setAttribute('data-x', '0'); + ele.setAttribute('data-y', eleTop); + var ele2 = document.createElement('div'); + ele2.className = random + 'd2'; + thisTemp.PD.appendChild(ele2); + thisTemp.previewTop = thisTemp.getByElement(ele2.className); + thisTemp.css(thisTemp.previewTop, { + width: parseInt(imgW * 0.1) + 'px', + height: parseInt(imgH * 0.1) + 'px', + position: 'absolute', + border: '5px solid ' + thisTemp.css(thisTemp.CB['timeProgress'], 'backgroundColor'), + left: '0px', + top: (obj['y'] - parseInt(imgH * 0.1) + 2) + 'px', + display: 'none', + zIndex: '81' + }); + var html = ''; + for (n = 0; n < srcArr.length; n++) { + html += thisTemp.newCanvas(random + n, imgW * 10, parseInt(imgH * 0.1)) + } + thisTemp.previewDiv.innerHTML = html; + } + thisTemp.previewDiv.appendChild(img); + var cimg = thisTemp.getByElement(img.className); + var canvas = thisTemp.getByElement(img.className + '-canvas'); + var context = canvas.getContext('2d'); + var sx = 0, + sy = 0, + x = 0, + h = parseInt(imgH * 0.1); + for (n = 0; n < 100; n++) { + x = parseInt(n * imgW * 0.1); + context.drawImage(cimg, sx, sy, parseInt(imgW * 0.1), h, x, 0, parseInt(imgW * 0.1), h); + sx += parseInt(imgW * 0.1); + if (sx >= imgW) { + sx = 0; + sy += h; + } + thisTemp.css(cimg, 'display', 'none'); + } + if (loadNum == srcArr.length) { + thisTemp.previewStart = 2; + } else { + i++; + loadImg(i); + } + }; + }; + } + loadImg(i); + return; + } + if (this.previewStart == 2) { + var isTween = true; + var nowNum = parseInt(obj['time'] / this.vars['preview']['scale']); + var numTotal = parseInt(thisTemp.getMetaDate()['duration'] / this.vars['preview']['scale']); + if (thisTemp.css(thisTemp.previewDiv, 'display') == 'none') { + isTween = false; + } + thisTemp.css(thisTemp.previewDiv, 'display', 'block'); + var imgWidth = thisTemp.previewDiv.offsetWidth * 0.01 / srcArr.length; + var left = (imgWidth * nowNum) - obj['x'] + parseInt(imgWidth * 0.5), + top = obj['y'] - thisTemp.previewDiv.offsetHeight; + thisTemp.css(thisTemp.previewDiv, 'top', top + 2 + 'px'); + var topLeft = obj['x'] - parseInt(imgWidth * 0.5); + var timepieces = 0; + if (topLeft < 0) { + topLeft = 0; + timepieces = obj['x'] - topLeft - imgWidth * 0.5; + } + if (topLeft > thisTemp.PD.offsetWidth - imgWidth) { + topLeft = thisTemp.PD.offsetWidth - imgWidth; + timepieces = obj['x'] - topLeft - imgWidth * 0.5; + } + if (left < 0) { + left = 0; + } + if (left > numTotal * imgWidth - thisTemp.PD.offsetWidth) { + left = numTotal * imgWidth - thisTemp.PD.offsetWidth; + } + thisTemp.css(thisTemp.previewTop, { + left: topLeft + 'px', + top: top + 2 + 'px', + display: 'block' + }); + if (thisTemp.previewTop.offsetHeight > thisTemp.previewDiv.offsetHeight) { + thisTemp.css(thisTemp.previewTop, { + height: thisTemp.previewDiv.offsetHeight - (thisTemp.previewTop.offsetHeight - thisTemp.previewDiv.offsetHeight) + 'px' + }); + } + if (this.previewTween != null) { + this.animatePause(this.previewTween); + this.previewTween = null + } + var nowLeft = parseInt(thisTemp.css(thisTemp.previewDiv, 'left')); + var leftC = nowLeft + left; + if (nowLeft == -(left + timepieces)) { + return; + } + if (isTween) { + var obj = { + element: thisTemp.previewDiv, + start: null, + end: -(left + timepieces), + speed: 0.3 + }; + this.previewTween = this.animate(obj); + } else { + thisTemp.css(thisTemp.previewDiv, 'left', -(left + timepieces) + 'px') + } + } + }, + /* + 内部函数 + 删除预览图节点 + */ + deletePreview: function() { + if (this.previewDiv != null) { + this.deleteChild(this.previewDiv); + this.previewDiv = null; + this.previewStart = 0; + } + }, + /* + 内部函数 + 修改视频地址,属性 + */ + changeVideo: function() { + if (!this.html5Video) { + this.getVarsObject(); + this.V.newVideo(this.vars); + return; + } + var vArr = this.VA; + var v = this.vars; + var i = 0; + if (vArr.length < 1) { + return; + } + if (this.V != null && this.needSeek == 0) { + this.needSeek = this.V.currentTime; + } + if (v['poster']) { + this.V.poster = v['poster']; + } else { + this.V.removeAttribute('poster'); + } + if (v['loop']) { + this.V.loop = 'loop'; + } else { + this.V.removeAttribute('loop'); + } + if (v['seek'] > 0) { + this.needSeek = v['seek']; + } else { + this.needSeek = 0; + } + if (this.getFileExt(vArr[0][0]) != '.m3u8') { + this.isM3u8 = false; + } + if (!this.isM3u8) { + if (vArr.length == 1) { + this.V.innerHTML = ''; + this.V.src = vArr[0][0]; + } else { + var source = ''; + vArr = this.arrSort(vArr); + for (i = 0; i < vArr.length; i++) { + var type = ''; + var va = vArr[i]; + if (va[1]) { + type = ' type="' + va[1] + '"'; + } + source += ''; + } + this.V.removeAttribute('src'); + this.V.innerHTML = source; + } + //分析视频地址结束 + if (v['autoplay']) { + this.V.autoplay = 'autoplay'; + } else { + this.V.removeAttribute('autoplay'); + } + this.V.load(); + } else { + this.embedHls(vArr[0][0], v['autoplay']); + } + if (!this.isUndefined(v['volume'])) { + this.changeVolume(v['volume']); + } + this.resetPlayer(); //重置界面元素 + this.timerErrorFun(); + //如果存在字幕则加载 + if (this.vars['cktrack']) { + this.loadTrack(); + } + }, + /* + 内部函数 + 调整中间暂停按钮,缓冲loading,错误提示文本框的位置 + */ + elementCoordinate: function() { + this.pdCoor = this.getXY(this.PD); + try { + this.css(this.CB['pauseCenter'], { + left: parseInt((this.PD.offsetWidth - 80) * 0.5) + 'px', + top: parseInt((this.PD.offsetHeight - 80) * 0.5) + 'px' + }); + } catch(event) {} + try { + this.css(this.CB['loading'], { + left: parseInt((this.PD.offsetWidth - 60) * 0.5) + 'px', + top: parseInt((this.PD.offsetHeight - 60) * 0.5) + 'px' + }); + } catch(event) {} + try { + this.css(this.CB['errorText'], { + left: parseInt((this.PD.offsetWidth - 120) * 0.5) + 'px', + top: parseInt((this.PD.offsetHeight - 30) * 0.5) + 'px' + }); + } catch(event) {} + try { + this.css(this.CB['logo'], { + left: parseInt(this.PD.offsetWidth - this.CB['logo'].offsetWidth - 20) + 'px', + top: '20px' + }); + } catch(event) {} + this.checkBarWidth(); + }, + /* + 内部函数 + 当播放器尺寸变化时,显示和隐藏相关节点 + */ + checkBarWidth: function() { + if (!this.showFace) { + return; + } + var controlBarW = this.CB['controlBar'].offsetWidth; + var ele = []; + ele.push([[this.CB['full'], this.CB['escFull'], this.CB['fullLine']], this.buttonWidth['full'] + 2, 'full']); + if (this.vars['front'] != '') { + ele.push([[this.CB['front'], this.CB['frontLine']], this.buttonWidth['front'] + 2]); + } + if (this.vars['next'] != '') { + ele.push([[this.CB['next'], this.CB['nextLine']], this.buttonWidth['next'] + 2]); + } + if (this.CB['definition'].innerHTML != '') { + ele.push([[this.CB['definition'], this.CB['definitionLine']], this.buttonWidth['definition'] + 2]); + } + if ((this.ckplayerConfig['config']['mobileVolumeBarShow'] || !this.isMobile()) && this.css(this.CB['volume'], 'display') == 'block') { + ele.push([[this.CB['volume']], this.buttonWidth['volume']]); + ele.push([[this.CB['mute'], this.CB['escMute'], this.CB['muteLine']], this.buttonWidth['mute'] + 2, 'mute']); + } + ele.push([[this.CB['timeText']], this.buttonWidth['timeText']]); + ele.push([[this.CB['play'], this.CB['pause'], this.CB['playLine']], this.buttonWidth['play'] + 2, 'play']); + + var i = 0; + var len = 0; + var isc = true; + //计算所有要显示的节点的总宽度 + for (var i = 0; i < ele.length; i++) { + var nlen = ele[i][1]; + if (nlen > 2) { + len += nlen; + } else { + isc = false; + } + } + if (isc) { + this.buttonLen = len; + this.buttonArr = ele; + } + len = this.buttonLen; + ele = this.buttonArr; + for (var i = 0; i < ele.length; i++) { + if (len > controlBarW) { + len -= ele[i][1]; + this.css(ele[i][0], 'display', 'none'); + } else { + this.css(ele[i][0], 'display', 'block'); + if (ele[i].length == 3) { + var name = ele[i][2]; + switch (name) { + case 'mute': + if (this.volume == 0) { + this.css(this.CB['mute'], 'display', 'none'); + } else { + this.css(this.CB['escMute'], 'display', 'none'); + } + break; + case 'play': + this.playShow(this.V.paused ? false: true); + break; + case 'full': + if (this.full) { + this.css(this.CB['full'], 'display', 'none'); + } else { + this.css(this.CB['escFull'], 'display', 'none'); + } + break; + } + } + } + } + }, + /* + 内部函数 + 初始化暂停或播放按钮 + */ + initPlayPause: function() { + if (!this.showFace) { + return; + } + if (this.vars['autoplay']) { + this.css([this.CB['play'], this.CB['pauseCenter']], 'display', 'none'); + this.css(this.CB['pause'], 'display', 'block'); + } else { + this.css(this.CB['play'], 'display', 'block'); + if (this.css(this.CB['errorText'], 'display') == 'none') { + this.css(this.CB['pauseCenter'], 'display', 'block'); + } + this.css(this.CB['pause'], 'display', 'none'); + } + }, + + /* + 下面为监听事件 + 内部函数 + 监听元数据已加载 + */ + loadedHandler: function() { + this.loaded = true; + if (this.vars['loaded'] != '') { + try { + eval(this.vars['loaded'] + '()'); + } catch(event) { + this.log(event); + } + } + }, + /* + 内部函数 + 监听播放 + */ + playingHandler: function() { + this.playShow(true); + //如果是第一次播放 + if (this.isFirstTimePlay && !this.isUndefined(this.advertisements['front'])) { + this.isFirstTimePlay = false; + //调用播放前置广告组件 + this.adI = 0; + this.adType = 'front'; + this.adMuteInto(); + this.adIsVideoTime = true; + this.adPlayStart = true; + this.adVideoPlay = false; + this.videoPause(); + this.advertisementsTime(); + this.advertisementsPlay(); + this.adSkipButtonShow(); + //调用播放前置广告组件结束 + return; + } + if (this.adPlayerPlay) { + return; + } + //判断第一次播放结束 + if (this.needSeek > 0) { + this.videoSeek(this.needSeek); + this.needSeek = 0; + } + if (this.animatePauseArray.length > 0) { + this.animateResume('pause'); + } + if (this.playerType == 'html5video' && this.V != null && this.config['videoDrawImage']) { + this.sendVCanvas(); + } + if (!this.isUndefined(this.advertisements['pause']) && !this.adPlayStart) { //如果存在暂停广告 + this.adPauseCloseFunction(); + } + }, + /*暂停时播放暂停广告*/ + adPausePlayer: function() { + this.adI = 0; + this.adType = 'pause'; + this.adPauseShow = true; + this.loadAdPause(); + }, + loadAdPause: function() { + var ad = this.getNowAdvertisements(); + var type = ad['type']; + var thisTemp = this; + var width = this.PD.offsetWidth, + height = this.PD.offsetHeight; + if (this.isStrImage(type) && this.adPauseShow) { + this.css(this.CB['adElement'], 'display', 'block'); + var imgClass = 'adimg' + this.randomString(10); + var imgHtml = ''; + if (ad['link']) { + imgHtml = '' + imgHtml + ''; + } + this.CB['adElement'].innerHTML = imgHtml; + this.addListenerInside('load', + function() { + var imgObj = new Image(); + imgObj.src = this.src; + var imgWH = thisTemp.adjustmentWH(imgObj.width, imgObj.height); + thisTemp.css([thisTemp.getByElement(imgClass), thisTemp.CB['adElement']], { + width: imgWH['width'] + 'px', + height: imgWH['height'] + 'px', + border: '0px' + }); + if (thisTemp.ckplayerConfig['style']['advertisement']['closeButtonShow'] && thisTemp.adPauseShow) { + thisTemp.css(thisTemp.CB['adPauseClose'], { + display: 'block' + }); + } + thisTemp.ajaxSuccessNull(ad['exhibitionMonitor']); + thisTemp.adPauseCoor(); + }, + this.getByElement(imgClass)); + this.addListenerInside('click', + function() { + thisTemp.ajaxSuccessNull(ad['clickMonitor']); + }, + this.CB['adElement']); + var newI = this.adI; + if (this.adI < this.advertisements['pause'].length - 1) { + newI++; + } else { + newI = 0; + } + if (ad['time'] > 0) { + setTimeout(function() { + if (thisTemp.adPauseShow) { + thisTemp.adI = newI; + thisTemp.loadAdPause(); + } + }, + ad['time'] * 1000); + } + } + }, + /*调整暂停广告的位置*/ + adPauseCoor: function() { + if (this.css(this.CB['adElement'], 'display') == 'block') { + var w = this.CB['adElement'].offsetWidth, + h = this.CB['adElement'].offsetHeight; + var pw = this.PD.offsetWidth, + ph = this.PD.offsetHeight; + this.css(this.CB['adElement'], { + top: (ph - h) * 0.5 + 'px', + left: (pw - w) * 0.5 + 'px' + }); + if (this.css(this.CB['adPauseClose'], 'display') == 'block') { + this.css(this.CB['adPauseClose'], { + top: (ph - h) * 0.5 - 10 + 'px', + left: (pw - w) * 0.5 + w - 10 + 'px', + }); + } + } + }, + /* + 关闭暂停广告 + */ + adPauseCloseFunction: function() { + this.CB['adElement'].innerHTML = ''; + this.css([this.CB['adElement'], this.CB['adPauseClose']], 'display', 'none'); + this.adPauseShow = false; + }, + /*计算广告时间*/ + advertisementsTime: function(nt) { + if (this.isUndefined(nt)) { + nt = 0; + } + var ad = this.advertisements[this.adType]; + if (nt > 0) { + ad[this.adI]['time'] = Math.ceil(nt); + } + this.adTimeAllTotal = 0; + for (var i = this.adI; i < ad.length; i++) { + if (!this.isUndefined(ad[i]['time'])) { + this.adTimeAllTotal += Math.ceil(ad[i]['time']); + } + } + if (this.adTimeAllTotal > 0) { + this.CB['adTime'].innerHTML = this.language['adTime'].replace('{$second}', this.adTimeAllTotal > 9 ? this.adTimeAllTotal: '0' + this.adTimeAllTotal); + } + if (this.adPauseShow) { + this.adPauseCloseFunction(); + } + this.adOtherCloseAll(); + this.adTimeTotal = -1; + }, + /*判断是否需要显示跳过广告按钮*/ + adSkipButtonShow: function() { + var thisTemp = this; + var skipConfig = this.ckplayerConfig['style']['advertisement']; + var delayTimeTemp = skipConfig[this.adType + 'SkipButtonDelay']; + var timeFun = function() { + if (delayTimeTemp >= 0) { + thisTemp.CB['adSkip'].innerHTML = thisTemp.language['skipAdTime'].replace('{$second}', delayTimeTemp > 9 ? delayTimeTemp: '0' + delayTimeTemp); + setTimeout(timeFun, 1000); + } else { + thisTemp.CB['adSkip'].innerHTML = thisTemp.language['skipAd']; + } + delayTimeTemp--; + }; + if (skipConfig['skipButtonShow']) { + this.css(thisTemp.CB['adSkip'], 'display', 'block'); + if (skipConfig[this.adType + 'SkipButtonDelay'] > 0 && this.isUndefined(this.adSkipButtonTime)) { + timeFun(); + } else { + thisTemp.css(thisTemp.CB['adSkip'], 'display', 'block'); + thisTemp.CB['adSkip'].innerHTML = this.language['skipAd']; + } + } + }, + /*播放广告*/ + advertisementsPlay: function() { + this.css([this.CB['adBackground'], this.CB['adElement'], this.CB['adBar'], this.CB['adLink']], 'display', 'none'); + this.adPlayerPlay = false; + var ad = this.advertisements[this.adType]; + if (this.adI == 0 && (this.adType == 'front' || this.adType == 'insert' || this.adType == 'end')) { + this.sendJS('process', this.adType + ' ad play') + } + this.trackHide(); + if (this.adI < ad.length) { + if (!this.isUndefined(ad[this.adI]['time'])) { + this.adTimeTotal = parseInt(ad[this.adI]['time']); + } + this.loadAdvertisements(); + } else { + this.adEnded(); + } + }, + /*清除当前所有广告*/ + eliminateAd: function() { + if (this.adType) { + var ad = this.advertisements[this.adType]; + this.adI = ad.length; + this.advertisementsPlay(); + } + + }, + /*广告播放结束*/ + adEnded: function() { + var thisTemp = this; + this.adPlayStart = false; + this.adPlayerPlay = false; + if (this.adVideoPlay) { + if (this.videoTemp['src'] != '') { + this.V.src = this.videoTemp['src']; + } else { + if (this.V.src) { + this.V.removeAttribute('src'); + } + } + if (this.videoTemp['source'] != '') { + this.V.innerHTML = this.videoTemp['source']; + } + if (this.videoTemp['currentSrc'] != '') { + this.V.src = this.videoTemp['currentSrc']; + this.V.currentSrc = this.videoTemp['currentSrc']; + } + if (this.videoTemp['loop']) { + this.V.loop = true; + this.videoTemp['loop'] = false; + } + if (this.adType == 'end') { + this.endedHandler(); + } else { + this.videoPlay(); + } + } else { + this.videoPlay(); + } + this.changeVolume(this.vars['volume']); + this.sendJS('process', this.adType + ' ad ended'); + this.changeControlBarShow(true); + }, + /*加载广告*/ + loadAdvertisements: function() { + //this.videoTemp + var ad = this.getNowAdvertisements(); + var type = ad['type']; + var thisTemp = this; + var width = this.PD.offsetWidth, + height = this.PD.offsetHeight; + this.changeControlBarShow(false); + this.adPlayerPlay = true; + if (this.isStrImage(type)) { + this.css([this.CB['adBackground'], this.CB['adElement'], this.CB['adBar']], 'display', 'block'); + this.css([this.CB['adMute'], this.CB['adEscMute']], 'display', 'none'); + var imgClass = 'adimg' + this.randomString(10); + var imgHtml = ''; + if (ad['link']) { + imgHtml = '' + imgHtml + ''; + } + this.CB['adElement'].innerHTML = imgHtml; + this.addListenerInside('load', + function() { + var imgObj = new Image(); + imgObj.src = this.src; + var imgWH = thisTemp.adjustmentWH(imgObj.width, imgObj.height); + thisTemp.css(thisTemp.getByElement(imgClass), { + width: imgWH['width'] + 'px', + height: imgWH['height'] + 'px', + border: '0px' + }); + thisTemp.css(thisTemp.CB['adElement'], { + width: imgWH['width'] + 'px', + height: imgWH['height'] + 'px', + top: (height - imgWH['height']) * 0.5 + 'px', + left: (width - imgWH['width']) * 0.5 + 'px', + }); + thisTemp.ajaxSuccessNull(ad['exhibitionMonitor']); + }, + this.getByElement(imgClass)); + this.addListenerInside('click', + function() { + thisTemp.ajaxSuccessNull(ad['clickMonitor']); + }, + this.CB['adElement']); + if (!this.isUndefined(ad['time'])) { + this.adCountDown(); + } + } else { + this.css(this.CB['adBar'], 'display', 'block'); + //判断是否静音 + if (this.adVideoMute) { + this.css(this.CB['adEscMute'], 'display', 'block'); + this.css(this.CB['adMute'], 'display', 'none'); + } else { + this.css(this.CB['adEscMute'], 'display', 'none'); + this.css(this.CB['adMute'], 'display', 'block'); + } + this.CB['adElement'].innerHTML = ''; + if (this.videoTemp['currentSrc'] == '') { + this.videoTemp['currentSrc'] = this.getCurrentSrc(); + } + if (this.V.loop) { + this.videoTemp['loop'] = true; + this.V.loop = false; + } + if (this.V != null && this.V.currentTime > 0 && this.adIsVideoTime) { //当有视频广告时而又没有记录下已播放的时间则进行记录 + this.adIsVideoTime = false; + this.needSeek = this.V.currentTime; + } + this.V.src = ad['file']; + this.V.currentSrc = ad['file']; + this.V.innerHTML = ''; + this.V.play(); + this.adVideoPlay = true; + this.ajaxSuccessNull(ad['exhibitionMonitor']); + if (!this.adVideoMute) { + this.adEscMuteFunction(); + } + } + if (ad['link']) { + this.css(this.CB['adLink'], 'display', 'block'); + var link = '' + this.language['adLink'] + ''; + this.CB['adLink'].innerHTML = link; + this.css(this.getByElement('ckadmorelink'), { + color: '#FFFFFF', + textDecoration: 'none' + }); + this.addListenerInside('click', + function() { + thisTemp.ajaxSuccessNull(ad['clickMonitor']); + }, + this.CB['adLink']); + } else { + this.css(this.CB['adLink'], 'display', 'none'); + } + + }, + /*普通广告倒计时*/ + adCountDown: function() { + var thisTemp = this; + if (this.adTimeTotal > 0) { + if (!this.adIsPause) { + this.adTimeTotal--; + this.showAdTime(); + this.adCountDownObj = null; + this.adCountDownObj = setTimeout(function() { + thisTemp.adCountDown(); + }, + 1000); + } + } else { + this.adI++; + this.advertisementsPlay(); + } + }, + /*视频广告倒计时*/ + adPlayerTimeHandler: function(time) { + var ad = this.getNowAdvertisements(); + var type = ad['type']; + if (this.isStrImage(type)) { + return; + } + if (this.adTimeTotal != parseInt(time)) { + this.adTimeTotal = parseInt(time); + this.showAdTime(); + } + }, + /*格式化广告倒计时显示*/ + showAdTime: function() { + this.adTimeAllTotal--; + var n = this.adTimeAllTotal; + if (n < 0) { + n = 0; + } + this.CB['adTime'].innerHTML = this.language['adTime'].replace('{$second}', n < 10 ? '0' + n: n); + }, + /* + 单独监听其它广告 + */ + checkAdOther: function(t) { + if (this.adPlayerPlay) { + return; + } + var adTime = this.advertisements['othertime']; + var adPlay = this.advertisements['otherPlay']; + for (var i = 0; i < adTime.length; i++) { + if (t >= adTime[i] && !adPlay[i]) { //如果播放时间大于广告时间而该广告还没有播放,则开始播放 + adPlay[i] = true; + this.newAdOther(i); + } + } + }, + /* + 新建其它广告 + */ + newAdOther: function(i) { + var thisTemp = this; + var ad = this.advertisements['other'][i]; + var randomS = this.randomString(10); //获取一个随机字符串 + var adDivID = 'adother' + randomS; //广告容器 + imgClassName = 'adimgother' + randomS; + var adDiv = document.createElement('div'); + adDiv.className = adDivID; + this.PD.appendChild(adDiv); + ad['div'] = adDivID; + ad['element'] = imgClassName; + this.getByElement(adDivID).innerHTML = ''; + this.css(adDivID, { + position: 'absolute', + overflow: 'hidden', + zIndex: '996', + top: '60px', + left: '30px', + cursor: 'pointer' + }); + if (this.ckplayerConfig['style']['advertisement']['closeOtherButtonShow']) { + var closeAdDivID = 'adotherclose' + randomS; //广告容器 + var closeAdDiv = document.createElement('div'); + closeAdDiv.className = closeAdDivID; + this.PD.appendChild(closeAdDiv); + this.getByElement(closeAdDivID).innerHTML = this.newCanvas(closeAdDivID, 20, 20); + ad['closeDiv'] = closeAdDivID; + ad['close'] = false; + this.css(closeAdDivID, { + backgroundColor: '#f7f7f7', + //f8f7f7 + widht: '20px', + height: '20px', + position: 'absolute', + overflow: 'hidden', + zIndex: '997', + top: '60px', + left: '30px', + borderRadius: '20px', + cursor: 'pointer' + }); + var adOtherClose = this.getByElement(closeAdDivID + '-canvas').getContext('2d'); + var adOtherCloseFillRect = function() { + thisTemp.canvasFill(adOtherClose, [[4, 6], [6, 6], [16, 15], [14, 15]]); + thisTemp.canvasFill(adOtherClose, [[14, 6], [16, 6], [6, 15], [4, 15]]); + }; + adOtherClose.fillStyle = '#404856'; + adOtherCloseFillRect(); + var adOtherCloseOver = function() { + adOtherClose.clearRect(0, 0, 20, 20); + adOtherClose.fillStyle = '#0782F5'; + adOtherCloseFillRect(); + }; + var adOtherCloseOut = function() { + adOtherClose.clearRect(0, 0, 20, 20); + adOtherClose.fillStyle = '#404856'; + adOtherCloseFillRect(); + }; + this.addListenerInside('mouseover', adOtherCloseOver, this.getByElement(closeAdDivID + '-canvas')); + this.addListenerInside('mouseout', adOtherCloseOut, this.getByElement(closeAdDivID + '-canvas')); + } + this.addListenerInside('load', + function() { + var imgObj = new Image(); + imgObj.src = this.src; + var imgWH = thisTemp.adjustmentWH(imgObj.width, imgObj.height); + thisTemp.css([thisTemp.getByElement(imgClassName), thisTemp.getByElement(adDivID)], { + width: imgWH['width'] + 'px', + height: imgWH['height'] + 'px', + border: '0px' + }); + thisTemp.advertisements['other'][i] = ad; + thisTemp.ajaxSuccessNull(ad['exhibitionMonitor']); + thisTemp.adOtherCoor(); + }, + this.getByElement(imgClassName)); + this.addListenerInside('click', + function() { + thisTemp.adOtherClose(i); + }, + this.getByElement(closeAdDivID)); + this.addListenerInside('click', + function() { + thisTemp.ajaxSuccessNull(ad['clickMonitor']); + }, + this.getByElement(imgClassName)); + if (ad['time'] > 0) { + setTimeout(function() { + thisTemp.adOtherClose(i); + }, + ad['time'] * 1000); + } + }, + /* + 关闭其它广告 + */ + adOtherClose: function(i) { + var ad = this.advertisements['other'][i]; + if (!this.isUndefined(ad['close'])) { + if (!ad['close']) { + ad['close'] = true; + this.PD.removeChild(this.getByElement(ad['div'])); + this.PD.removeChild(this.getByElement(ad['closeDiv'])); + } + } + }, + adOtherCloseAll: function() { + if (!this.isUndefined(this.advertisements['other'])) { + var ad = this.advertisements['other']; + for (var i = 0; i < ad.length; i++) { + this.adOtherClose(i); + } + } + }, + /* + 计算其它广告的坐标 + */ + adOtherCoor: function() { + if (!this.isUndefined(this.advertisements['other'])) { + var arr = this.advertisements['other']; + for (var i = 0; i < arr.length; i++) { + var ad = arr[i]; + if (!this.isUndefined(ad['close'])) { + if (!ad['close']) { + var coor = this.getPosition(ad); + var x = coor['x'], + y = coor['y'], + cx = x + this.getByElement(ad['div']).offsetWidth - 10, + cy = y - 10; + this.css(this.getByElement(ad['div']), { + left: x + 'px', + top: y + 'px' + }); + if (!this.isUndefined(ad['closeDiv'])) { + this.css(this.getByElement(ad['closeDiv']), { + left: cx + 'px', + top: cy + 'px' + }); + } + } + } + } + } + }, + /* + 单独监听中间插入广告 + */ + checkAdInsert: function(t) { + if (this.adPlayerPlay) { + return; + } + var adTime = this.advertisements['inserttime']; + var adPlay = this.advertisements['insertPlay']; + var duration = this.getMetaDate()['duration']; + for (var i = adTime.length - 1; i > -1; i--) { + if (t >= adTime[i] && t < duration - 2 && t > 1 && !adPlay[i]) { //如果播放时间大于广告时间而该广告还没有播放,则开始播放 + this.adI = 0; + this.adType = 'insert'; + this.adMuteInto(); + this.adIsVideoTime = true; + this.adPlayStart = true; + this.adVideoPlay = false; + this.videoPause(); + this.advertisementsTime(); + this.advertisementsPlay(); + this.adSkipButtonShow(); + adPlay[i] = true; + for (var n = 0; n < i + 1; n++) { + adPlay[n] = true; + } + break; + } + } + }, + /*格式化中间插入广告的播放时间*/ + formatInserttime: function(duration) { + if (!this.isUndefined(this.advertisements['inserttime'])) { + var arr = this.advertisements['inserttime']; + var newArr = []; + for (var i = 0; i < arr.length; i++) { + if (arr[i].toString().substr( - 1) == '%') { + newArr.push(parseInt(duration * parseInt(arr[i]) * 0.01)); + } else { + newArr.push(parseInt(arr[i])); + } + } + this.advertisements['inserttime'] = newArr; + } + }, + /*获取当前的广告*/ + getNowAdvertisements: function() { + if (this.adI == -1) { + return { + file: '', + time: 0, + link: '' + }; + } + return this.advertisements[this.adType][this.adI]; + }, + /*根据元件尺寸和播放器尺寸调整大小*/ + adjustmentWH: function(w, h) { + var width = this.PD.offsetWidth, + height = this.PD.offsetHeight; + var nw = 0, + nh = 0; + if (w >= width || h >= height) { + if (width / w > height / h) { + nh = height - 20; + nw = w * nh / h; + } else { + nw = width - 20; + nh = h * nw / w; + } + } else { + nw = w; + nh = h; + } + return { + width: nw, + height: nh + } + }, + /*单独请求一次地址,但不处理返回的数据*/ + ajaxSuccessNull: function(url) { + if (!this.isUndefined(url)) { + var ajaxObj = { + url: url, + success: function(data) {} + }; + this.ajax(ajaxObj); + } + }, + /* + 内部函数 + 运行指定函数 + */ + runFunction: function(s) { + try { + var arr = s.split('->'); + switch (arr[0]) { + case 'javaScript': + eval(arr[1] + '()'); + break; + case 'actionScript': + eval('this.' + arr[1] + '()'); + break; + } + } catch(event) {} + }, + /* + 内部函数 + 使用画布附加视频 + */ + sendVCanvas: function() { + if (this.timerVCanvas == null) { + this.css(this.V, 'display', 'none'); + this.css(this.MD, 'display', 'block'); + var thisTemp = this; + var videoCanvas = function() { + if (thisTemp.MDCX.width != thisTemp.PD.offsetWidth) { + thisTemp.MDC.width = thisTemp.PD.offsetWidth; + } + if (thisTemp.MDCX.height != thisTemp.PD.offsetHeight) { + thisTemp.MDC.height = thisTemp.PD.offsetHeight; + } + thisTemp.MDCX.clearRect(0, 0, thisTemp.MDCX.width, thisTemp.MDCX.height); + var coor = thisTemp.getProportionCoor(thisTemp.PD.offsetWidth, thisTemp.PD.offsetHeight, thisTemp.V.videoWidth, thisTemp.V.videoHeight); + thisTemp.MDCX.drawImage(thisTemp.V, 0, 0, thisTemp.V.videoWidth, thisTemp.V.videoHeight, coor['x'], coor['y'], coor['width'], coor['height']); + }; + this.timerVCanvas = new this.timer(0, videoCanvas); + } + }, + /* + 内部函数 + 监听暂停 + */ + pauseHandler: function() { + var thisTemp = this; + this.playShow(false); + if (this.animatePauseArray.length > 0) { + this.animatePause('pause'); + } + if (this.playerType == 'html5video' && this.V != null && this.config['videoDrawImage']) { + this.stopVCanvas(); + } + if (!this.isUndefined(this.advertisements['pause']) && !this.adPlayStart && !this.adPauseShow) { //如果存在暂停广告 + setTimeout(function() { + if (!thisTemp.isUndefined(thisTemp.advertisements['pause']) && !thisTemp.adPlayStart && !thisTemp.adPauseShow && thisTemp.time > 1) { //如果存在暂停广告 + thisTemp.adPausePlayer(); + } + }, + 300); + } + }, + /* + 内部函数 + 停止画布 + */ + stopVCanvas: function() { + if (this.timerVCanvas != null) { + this.css(this.V, 'display', 'block'); + this.css(this.MD, 'display', 'none'); + if (this.timerVCanvas.runing) { + this.timerVCanvas.stop(); + } + this.timerVCanvas = null; + } + }, + /* + 内部函数 + 根据当前播放还是暂停确认图标显示 + */ + playShow: function(b) { + if (!this.showFace) { + return; + } + if (b) { + this.css(this.CB['play'], 'display', 'none'); + this.css(this.CB['pauseCenter'], 'display', 'none'); + this.css(this.CB['pause'], 'display', 'block'); + } else { + this.css(this.CB['play'], 'display', 'block'); + if (this.css(this.CB['errorText'], 'display') == 'none') { + if (!this.adPlayerPlay) { + this.css(this.CB['pauseCenter'], 'display', 'block'); + } + + } else { + this.css(this.CB['pauseCenter'], 'display', 'none'); + } + this.css(this.CB['pause'], 'display', 'none'); + } + }, + /* + 内部函数 + 监听seek结束 + */ + seekedHandler: function() { + this.resetTrack(); + this.isTimeButtonMove = true; + if (this.V.paused) { + this.videoPlay(); + } + }, + /* + 内部函数 + 监听播放结束 + */ + endedHandler: function() { + if (this.adPlayerPlay) { + this.adI++; + this.advertisementsPlay(); + return; + } + if (!this.endAdPlay && !this.isUndefined(this.advertisements['end'])) { + this.endAdPlay = true; + this.adI = 0; + this.adType = 'end'; + this.adMuteInto(); + this.adIsVideoTime = true; + this.adPlayStart = true; + this.adVideoPlay = false; + this.videoPause(); + this.advertisementsTime(); + this.advertisementsPlay(); + this.adSkipButtonShow(); + this.adReset = true; + return; + } + this.sendJS('ended'); + this.endedAdReset(); + if (!this.vars['loop']) { + this.videoSeek(0); + } + }, + /* + 重置结束后相关的设置 + */ + endedAdReset: function() { + var arr = []; + var i = 0; + if (!this.isUndefined(this.advertisements['insertPlay'])) { + arr = this.advertisements['insertPlay']; + for (i = 0; i < arr.length; i++) { + this.advertisements['insertPlay'][i] = false; + } + } + if (!this.isUndefined(this.advertisements['otherPlay'])) { + arr = this.advertisements['otherPlay']; + for (i = 0; i < arr.length; i++) { + this.advertisements['otherPlay'][i] = false; + } + } + //this.endAdPlay=false; + }, + /* + 内部函数 + 监听音量改变 + */ + volumechangeHandler: function() { + if (!this.showFace) { + return; + } + if ((this.ckplayerConfig['config']['mobileVolumeBarShow'] || !this.isMobile()) && this.css(this.CB['volume'], 'display') == 'block') { + try { + if (this.V.volume > 0) { + this.css(this.CB['mute'], 'display', 'block'); + this.css(this.CB['escMute'], 'display', 'none'); + } else { + this.css(this.CB['mute'], 'display', 'none'); + this.css(this.CB['escMute'], 'display', 'block'); + } + } catch(event) {} + } + }, + /* + 内部函数 + 监听播放时间调节进度条 + */ + timeUpdateHandler: function() { + var duration = 0; + if (this.playerType == 'html5video') { + try { + duration = this.V.duration; + } catch(event) {} + } + if (duration > 0) { + this.time = this.V.currentTime; + this.timeTextHandler(); + this.trackShowHandler(); + if (this.isTimeButtonMove) { + this.timeProgress(this.time, duration); + } + } + }, + /* + 内部函数 + 按时间改变进度条 + */ + timeProgress: function(time, duration) { + if (!this.showFace) { + return; + } + var timeProgressBgW = this.CB['timeProgressBg'].offsetWidth; + var timeBOW = parseInt((time * timeProgressBgW / duration) - (this.CB['timeButton'].offsetWidth * 0.5)); + if (timeBOW > timeProgressBgW - this.CB['timeButton'].offsetWidth) { + timeBOW = timeProgressBgW - this.CB['timeButton'].offsetWidth; + } + if (timeBOW < 0) { + timeBOW = 0; + } + this.css(this.CB['timeProgress'], 'width', timeBOW + 'px'); + this.css(this.CB['timeButton'], 'left', parseInt(timeBOW) + 'px'); + }, + /* + 内部函数 + 监听播放时间改变时间显示文本框 + */ + timeTextHandler: function() { //显示时间/总时间 + if (!this.showFace) { + return; + } + var duration = this.V.duration; + var time = this.V.currentTime; + if (isNaN(duration) || parseInt(duration) < 0.2) { + duration = this.vars['duration']; + } + this.CB['timeText'].innerHTML = this.formatTime(time) + ' / ' + this.formatTime(duration); + if (this.CB['timeText'].offsetWidth > 0) { + this.buttonWidth['timeText'] = this.CB['timeText'].offsetWidth; + } + }, + /* + 内部函数 + 监听是否是缓冲状态 + */ + bufferEdHandler: function() { + if (!this.showFace || this.playerType == 'flashplayer') { + return; + } + var thisTemp = this; + var clearTimerBuffer = function() { + if (thisTemp.timerBuffer != null) { + if (thisTemp.timerBuffer.runing) { + thisTemp.sendJS('buffer', 100); + thisTemp.timerBuffer.stop(); + } + thisTemp.timerBuffer = null; + } + }; + clearTimerBuffer(); + var bufferFun = function() { + if (!thisTemp.isUndefined(thisTemp.V) && thisTemp.V.buffered.length > 0) { + var duration = thisTemp.V.duration; + var len = thisTemp.V.buffered.length; + var bufferStart = thisTemp.V.buffered.start(len - 1); + var bufferEnd = thisTemp.V.buffered.end(len - 1); + var loadTime = bufferStart + bufferEnd; + var loadProgressBgW = thisTemp.CB['timeProgressBg'].offsetWidth; + var timeButtonW = thisTemp.CB['timeButton'].offsetWidth; + var loadW = parseInt((loadTime * loadProgressBgW / duration) + timeButtonW); + if (loadW >= loadProgressBgW) { + loadW = loadProgressBgW; + clearTimerBuffer(); + } + thisTemp.changeLoad(loadTime); + } + }; + this.timerBuffer = new this.timer(200, bufferFun); + }, + /* + 内部函数 + 单独计算加载进度 + */ + changeLoad: function(loadTime) { + if (this.V == null) { + return; + } + if (!this.showFace) { + return; + } + var loadProgressBgW = this.CB['timeProgressBg'].offsetWidth; + var timeButtonW = this.CB['timeButton'].offsetWidth; + var duration = this.V.duration; + if (this.isUndefined(loadTime)) { + loadTime = this.loadTime; + } else { + this.loadTime = loadTime; + } + var loadW = parseInt((loadTime * loadProgressBgW / duration) + timeButtonW); + this.css(this.CB['loadProgress'], 'width', loadW + 'px'); + }, + /* + 内部函数 + 判断是否是直播 + */ + judgeIsLive: function() { + var thisTemp = this; + if (this.timerError != null) { + if (this.timerError.runing) { + this.timerError.stop(); + } + this.timerError = null; + } + this.error = false; + if (this.showFace) { + this.css(this.CB['errorText'], 'display', 'none'); + } + var timeupdate = function(event) { + thisTemp.timeUpdateHandler(); + }; + if (!this.vars['live']) { + if (this.V != null && this.playerType == 'html5video') { + this.addListenerInside('timeupdate', timeupdate); + thisTemp.timeTextHandler(); + thisTemp.prompt(); //添加提示点 + setTimeout(function() { + thisTemp.bufferEdHandler(); + }, + 200); + } + } else { + this.removeListenerInside('timeupdate', timeupdate); + if (this.timerTime != null) { + window.clearInterval(this.timerTime); + timerTime = null; + } + if (this.timerTime != null) { + if (this.timerTime.runing) { + this.timerTime.stop(); + } + this.timerTime = null; + } + var timeFun = function() { + if (thisTemp.V != null && !thisTemp.V.paused && thisTemp.showFace) { + thisTemp.CB['timeText'].innerHTML = thisTemp.getNowDate(); + } + }; + this.timerTime = new this.timer(1000, timeFun); + //timerTime.start(); + } + this.definition(); + }, + /* + 内部函数 + 加载字幕 + */ + loadTrack: function() { + if (this.playerType == 'flashplayer' || this.vars['flashplayer'] == true) { + return; + } + var thisTemp = this; + var track = this.vars['cktrack']; + var obj = { + method: 'get', + dataType: 'text', + url: track, + charset: 'utf-8', + success: function(data) { + thisTemp.track = thisTemp.parseSrtSubtitles(data); + thisTemp.trackIndex = 0; + thisTemp.nowTrackShow = { + sn: '' + }; + } + }; + this.ajax(obj); + }, + /* + 内部函数 + 重置字幕 + */ + resetTrack: function() { + this.trackIndex = 0; + this.nowTrackShow = { + sn: '' + }; + }, + /* + 内部函数 + 根据时间改变读取显示字幕 + */ + trackShowHandler: function() { + if (!this.showFace || this.adPlayerPlay) { + return; + } + if (this.track.length < 1) { + return; + } + if (this.trackIndex >= this.track.length) { + this.trackIndex = 0; + } + var nowTrack = this.track[this.trackIndex]; //当前编号对应的字幕内容 + /* + this.nowTrackShow=当前显示在界面上的内容 + 如果当前时间正好在nowTrack时间内,则需要判断 + */ + if (this.time >= nowTrack['startTime'] && this.time <= nowTrack['endTime']) { + /* + 如果当前显示的内容不等于当前需要显示的内容时,则需要显示正确的内容 + */ + var nowShow = this.nowTrackShow; + if (nowShow['sn'] != nowTrack['sn']) { + this.trackHide(); + this.trackShow(nowTrack); + } + } else { + /* + * 如果当前播放时间不在当前编号字幕内,则需要先清空当前的字幕内容,再显示新的字幕内容 + */ + this.trackHide(); + this.checkTrack(); + } + }, + /* + 内部函数 + 显示字幕内容 + */ + trackShow: function(track) { + this.nowTrackShow = track; + var arr = track['content']; + for (var i = 0; i < arr.length; i++) { + var obj = { + list: [{ + type: 'text', + text: arr[i], + color: '#FFFFFF', + size: 16, + font: this.fontFamily, + lineHeight: 30 + }], + position: [1, 2, null, -(arr.length - i) * 30 - 50] + }; + var ele = this.addElement(obj); + this.trackElement.push(ele); + } + }, + /* + 内部函数 + 隐藏字字幕内容 + */ + trackHide: function() { + for (var i = 0; i < this.trackElement.length; i++) { + this.deleteElement(this.trackElement[i]); + } + this.trackElement = []; + }, + /* + 内部函数 + 重新计算字幕的编号 + */ + checkTrack: function() { + var num = this.trackIndex; + var arr = this.track; + var i = 0; + for (i = num; i < arr.length; i++) { + if (this.time >= arr[i]['startTime'] && this.time <= arr[i]['endTime']) { + this.trackIndex = i; + break; + } + } + }, + /* + -----------------------------------------------------------------------------接口函数开始 + 接口函数 + 在播放和暂停之间切换 + */ + playOrPause: function() { + if (!this.loaded) { + return; + } + if (this.V == null) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.playOrPause(); + return; + } + if (this.V.paused) { + this.videoPlay(); + } else { + this.videoPause(); + } + }, + /* + 接口函数 + 播放动作 + */ + videoPlay: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoPlay(); + return; + } + if (this.adPlayerPlay) { + this.eliminateAd(); //清除广告 + return; + } + try { + if (this.V.currentSrc) { + this.V.play(); + } + } catch(event) {} + }, + /* + 接口函数 + 暂停动作 + */ + videoPause: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoPause(); + return; + } + try { + this.V.pause(); + } catch(event) {} + }, + /* + 接口函数 + 跳转时间动作 + */ + videoSeek: function(time) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoSeek(time); + return; + } + var duration = this.getMetaDate()['duration']; + if (duration > 0 && time > duration) { + time = duration; + } + if (time >= 0) { + this.V.currentTime = time; + this.sendJS('seekTime', time); + } + }, + /* + 接口函数 + 调节音量/获取音量 + */ + changeVolume: function(vol, bg, button) { + if (this.loaded) { + if (this.playerType == 'flashplayer') { + this.V.changeVolume(time); + return; + } + } + if (isNaN(vol) || this.isUndefined(vol)) { + vol = 0; + } + if (!this.loaded) { + this.vars['volume'] = vol; + } + if (!this.html5Video) { + this.V.changeVolume(vol); + return; + } + try { + if (this.isUndefined(bg)) { + bg = true; + } + } catch(e) {} + try { + if (this.isUndefined(button)) { + button = true; + } + } catch(e) {} + if (!vol) { + vol = 0; + } + if (vol < 0) { + vol = 0; + } + if (vol > 1) { + vol = 1; + } + try { + this.V.volume = vol; + } catch(error) {} + this.volume = vol; + if (bg && this.showFace) { + var bgW = vol * this.CB['volumeBg'].offsetWidth; + if (bgW < 0) { + bgW = 0; + } + if (bgW > this.CB['volumeBg'].offsetWidth) { + bgW = this.CB['volumeBg'].offsetWidth; + } + this.css(this.CB['volumeUp'], 'width', bgW + 'px'); + } + + if (button && this.showFace) { + var buLeft = parseInt(this.CB['volumeUp'].offsetWidth - (this.CB['volumeBO'].offsetWidth * 0.5)); + if (buLeft > this.CB['volumeBg'].offsetWidth - this.CB['volumeBO'].offsetWidth) { + buLeft = this.CB['volumeBg'].offsetWidth - this.CB['volumeBO'].offsetWidth + } + if (buLeft < 0) { + buLeft = 0; + } + this.css(this.CB['volumeBO'], 'left', buLeft + 'px'); + } + }, + /* + 接口函数 + 静音 + */ + videoMute: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoMute(); + return; + } + this.volumeTemp = this.V ? (this.V.volume > 0 ? this.V.volume: this.vars['volume']) : this.vars['volume']; + this.changeVolume(0); + }, + /* + 接口函数 + 取消静音 + */ + videoEscMute: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoEscMute(); + return; + } + this.changeVolume(this.volumeTemp > 0 ? this.volumeTemp: this.vars['volume']); + }, + /* + 接口函数 + 视频广告静音 + */ + adMuteFunction: function() { + if (!this.loaded) { + return; + } + this.changeVolume(0); + this.adVideoMute = true; + this.css(this.CB['adEscMute'], 'display', 'block'); + this.css(this.CB['adMute'], 'display', 'none'); + }, + /* + 接口函数 + 视频广告取消静音 + */ + adEscMuteFunction: function() { + if (!this.loaded) { + return; + } + var v = this.ckplayerConfig['style']['advertisement']['videoVolume']; + this.changeVolume(v); + this.adMuteInto(); + }, + /* + 初始化广告的音量按钮 + */ + adMuteInto: function() { + this.adVideoMute = false; + this.css(this.CB['adEscMute'], 'display', 'none'); + this.css(this.CB['adMute'], 'display', 'block'); + }, + /* + 接口函数 + 快退 + */ + fastBack: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.fastBack(); + return; + } + var time = this.time - this.ckplayerConfig['config']['timeJump']; + if (time < 0) { + time = 0; + } + this.videoSeek(time); + }, + /* + 接口函数 + 快进 + */ + fastNext: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.fastNext(); + return; + } + var time = this.time + this.ckplayerConfig['config']['timeJump']; + if (time > this.V.duration) { + time = this.V.duration; + } + this.videoSeek(time); + }, + /* + 接口函数 + 获取当前播放的地址 + */ + getCurrentSrc: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + return this.V.getCurrentSrc(); + } + return this.V.currentSrc; + }, + /* + 内置函数 + 全屏/退出全屏动作,该动作只能是用户操作才可以触发,比如用户点击按钮触发该事件 + */ + switchFull: function() { + if (this.full) { + this.quitFullScreen(); + } else { + this.fullScreen(); + } + }, + /* + 内置函数 + 全屏动作,该动作只能是用户操作才可以触发,比如用户点击按钮触发该事件 + */ + fullScreen: function() { + if (this.html5Video && this.playerType == 'html5video') { + var element = this.PD; + if (element.requestFullscreen) { + element.requestFullscreen(); + } else if (element.mozRequestFullScreen) { + element.mozRequestFullScreen(); + } else if (element.webkitRequestFullscreen) { + element.webkitRequestFullscreen(); + } else if (element.msRequestFullscreen) { + element.msRequestFullscreen(); + } else if (element.oRequestFullscreen) { + element.oRequestFullscreen(); + } + this.judgeFullScreen(); + } else { + //this.V.fullScreen(); + } + }, + /* + 接口函数 + 退出全屏动作 + */ + quitFullScreen: function() { + if (this.html5Video && this.playerType == 'html5video') { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.msExitFullscreen) { + document.msExitFullscreen(); + } else if (document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + } else if (document.oRequestFullscreen) { + document.oCancelFullScreen(); + } else if (document.requestFullscreen) { + document.requestFullscreen(); + } else if (document.webkitExitFullscreen) { + document.webkitExitFullscreen(); + } else { + this.css(document.documentElement, 'cssText', ''); + this.css(document.document.body, 'cssText', ''); + this.css(this.PD, 'cssText', ''); + } + this.judgeFullScreen(); + } + }, + /* + 下面列出只有flashplayer里支持的 + */ + videoRotation: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoRotation(n); + return; + } + if (this.isUndefined(n)) { + n = 0; + } + var tf = this.css(this.V, 'transform'); + if (this.isUndefined(tf) && !tf) { + tf = 'rotate(0deg)'; + } + var reg = tf.match(/rotate\([^)]+\)/); + reg = reg ? reg[0].replace('rotate(', '').replace('deg)', '') : ''; + if (reg == '') { + reg = 0; + } else { + reg = parseInt(reg); + } + if (n == -1) { + reg -= 90; + } else if (n == 1) { + reg += 90; + } else { + if (n != 90 && n != 180 && n != 270 && n != -90 && n != -180 && n != -270) { + reg = 0; + } else { + reg = n; + } + } + n = reg; + var y90 = n % 90, + y180 = n % 180, + y270 = n % 270; + var ys = false; + if (y90 == 0 && y180 == 90 && y270 == 90) { + ys = true; + } + if (y90 == 0 && y180 == 90 && y270 == 0) { + ys = true; + } + if (y90 == -0 && y180 == -90 && y270 == -90) { + ys = true; + } + if (y90 == -0 && y180 == -90 && y270 == -0) { + ys = true; + } + tf = tf.replace(/rotate\([^)]+\)/, '').replace(/scale\([^)]+\)/, '') + ' rotate(' + n + 'deg)'; + var cdW = this.CD.offsetWidth, + cdH = this.CD.offsetHeight, + vW = this.V.videoWidth, + vH = this.V.videoHeight; + if (vW > 0 && vH > 0) { + if (ys) { + if (cdW / cdH > vH / vW) { + nH = cdH; + nW = vH * nH / vW; + } else { + nW = cdW; + nH = vW * nW / vH; + } + this.css(this.V, 'transform', 'rotate(0deg)'); + this.css(this.V, 'transform', 'scale(' + nH / cdW + ',' + nW / cdH + ')' + tf); + } else { + this.css(this.V, 'transform', tf); + } + } else { + this.css(this.V, 'transform', tf); + } + return; + }, + videoBrightness: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoBrightness(n); + return; + } + }, + videoContrast: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoContrast(n); + return; + } + }, + videoSaturation: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoSaturation(n); + return; + } + }, + videoHue: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoHue(n); + return; + } + }, + videoZoom: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoZoom(n); + return; + } + if (this.isUndefined(n)) { + n = 1; + } + if (n < 0) { + n = 0; + } + if (n > 2) { + n = 2; + } + var tf = this.css(this.V, 'transform'); + tf = tf.replace(/scale\([^)]+\)/, '') + ' scale(' + n + ')'; + this.videoScale = n; + this.css(this.V, 'transform', tf); + return; + }, + videoProportion: function(w, h) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoProportion(w, h); + return; + } + }, + adPlay: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.adPlay(); + return; + } + if (this.adPlayerPlay) { + this.adIsPause = false; + if (this.adPlayerPlay) { + var ad = this.getNowAdvertisements(); + var type = ad['type']; + if (this.isStrImage(type)) { + this.adCountDown(); + } else { + this.V.play(); + } + } + } + }, + adPause: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.adPause(); + return; + } + if (this.adPlayerPlay) { + this.adIsPause = true; + var ad = this.getNowAdvertisements(); + var type = ad['type']; + if (type != 'jpg' && type != 'jpeg' && type != 'png' && type != 'svg' && type != 'gif') { + this.videoPause(); + } + } + }, + videoError: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoError(n); + return; + } + }, + changeConfig: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.changeConfig(arguments); + return; + } + var obj = this.ckplayerConfig; + var arg = arguments; + for (var i = 0; i < arg.length - 1; i++) { + if (obj.hasOwnProperty(arg[i])) { + obj = obj[arg[i]]; + } else { + return; + } + } + var val = arg[arg.length - 1]; + switch (arg.length) { + case 2: + this.ckplayerConfig[arg[0]] = val; + break; + case 3: + this.ckplayerConfig[arg[0]][arg[1]] = val; + break; + case 4: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]] = val; + break; + case 5: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]] = val; + break; + case 6: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]][arg[4]] = val; + break; + case 7: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]][arg[4]][arg[5]] = val; + break; + case 8: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]][arg[4]][arg[5]][arg[6]] = val; + break; + case 9: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]][arg[4]][arg[5]][arg[6]][arg[7]] = val; + break; + case 10: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]][arg[4]][arg[5]][arg[6]][arg[7]][arg[8]] = val; + break; + default: + return; + break; + } + this.sendJS('configChange', this.ckplayerConfig); + }, + custom: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.custom(arguments); + return; + } + }, + getConfig: function() { + if (!this.loaded) { + return null; + } + if (this.playerType == 'flashplayer') { + return this.V.getConfig(arguments); + } + }, + openUrl: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.openUrl(n); + return; + } + }, + /* + 接口函数 + 清除视频 + */ + videoClear: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoClear(); + return; + } + }, + /* + 接口函数 + 向播放器传递新的视频地址 + */ + newVideo: function(c) { + if (this.playerType == 'flashplayer') { + this.V.newVideo(c); + return; + } else { + this.embed(c); + } + }, + /* + 接口函数 + 截图 + */ + screenshot: function(obj, save, name) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + try { + this.V.screenshot(obj, save, name); + } catch(error) { + this.log(error); + } + return; + } + if (obj == 'video') { + var newCanvas = document.createElement('canvas'); + newCanvas.width = this.V.videoWidth; + newCanvas.height = this.V.videoHeight; + newCanvas.getContext('2d').drawImage(this.V, 0, 0, this.V.videoWidth, this.V.videoHeight); + try { + var base64 = newCanvas.toDataURL('image/jpeg'); + this.sendJS('screenshot', { + object: obj, + save: save, + name: name, + base64: base64 + }); + } catch(error) { + this.log(error); + } + } + }, + /* + 接口函数 + 改变播放器尺寸 + */ + changeSize: function(w, h) { + if (this.isUndefined(w)) { + w = 0; + } + if (this.isUndefined(h)) { + h = 0; + } + if (w > 0) { + this.css(this.CD, 'width', w + 'px'); + } + if (h > 0) { + this.css(this.CD, 'height', h + 'px'); + } + if (this.html5Video) { + this.elementCoordinate(); + } + }, + /* + 接口函数 + 改变视频播放速度 + */ + changePlaybackRate: function(n) { + if (this.html5Video) { + var arr = this.playbackRateArr; + n = parseInt(n); + if (n < arr.length) { + this.newPlaybackrate(arr[n][1]); + } + } + }, + /* + 内部函数 + 注册控制控制栏显示与隐藏函数 + */ + changeControlBarShow: function(show) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.changeControlBarShow(show); + return; + } + if (show) { + this.controlBarIsShow = true; + this.controlBarHide(false); + } else { + this.controlBarIsShow = false; + this.controlBarHide(true); + } + }, + /* + ----------------------------------------------------------------------- + 调用flashplayer + */ + embedSWF: function() { + var vid = this.randomString(); + var flashvars = this.getFlashVars(); + var param = this.getFlashplayerParam(); + var flashplayerUrl = 'http://www.macromedia.com/go/getflashplayer'; + var html = '', + src = javascriptPath + 'ckplayer.swf'; + id = 'id="' + vid + '" name="' + vid + '" '; + html += ''; + html += param['v']; + html += ''; + html += ''; + html += ' '; + html += ''; + html += ''; + this.PD.innerHTML = html; + this.V = this.getObjectById(vid); //V:定义播放器对象全局变量 + this.playerType = 'flashplayer'; + //this.loaded=true; + }, + /* + 内置函数 + 将vars对象转换成字符 + */ + getFlashVars: function() { + this.getVarsObject(); + var v = this.vars; + var z = ''; + for (k in v) { + if (k != 'flashplayer' && k != 'container' && v[k] != '') { + if (z != '') { + z += '&'; + } + var vk = v[k]; + if (vk == true) { + vk = 1; + } + if (vk == false) { + vk = 0; + } + z += k + '=' + vk; + } + + } + if (!v.hasOwnProperty('volume') || !v['volume']) { + if (z != '') { + z += '&'; + } + z += 'volume=0'; + } + return z; + }, + /*判断字符串是否是图片*/ + isStrImage: function(s) { + if (s == 'jpg' || s == 'jpeg' || s == 'png' || s == 'svg' || s == 'gif') { + return true; + } + return false; + }, + /* + 内置函数 + 将vars格式化成flash能接受的对象。再由getFlashVars函数转化成字符串或由newVideo直接使用 + */ + getVarsObject: function() { + var v = this.vars; + var f = '', + d = '', + w = ''; //f=视频地址,d=清晰度地址,w=权重,z=最终地址 + var arr = this.VA; + var prompt = v['promptSpot']; + var i = 0; + var video = this.vars['video']; + if (typeof(video) == 'object') { //对象或数组 + if (!this.isUndefined(typeof(video.length))) { //说明是数组 + var arr = video; + for (i = 0; i < arr.length; i++) { + var arr2 = arr[i]; + if (arr2) { + if (f != '') { + f += this.ckplayerConfig['config']['split']; + d += ','; + w += ','; + v['type'] += this.ckplayerConfig['config']['split']; + } + f += encodeURIComponent(decodeURIComponent(arr2[0])); + d += arr2[2]; + w += arr2[3]; + v['type'] += arr2[1].replace('video/', ''); + } + } + } else { + f = encodeURIComponent(decodeURIComponent(video['file'])); + if (!this.isUndefined(video['type'])) { + v['type'] = video['type']; + } + d = ''; + w = ''; + } + } else { + f = encodeURIComponent(decodeURIComponent(video)); + } + if (v['preview'] != null) { + v['previewscale'] = v['preview']['scale']; + v['preview'] = v['preview']['file'].join(','); + + } + if (prompt != null) { + v['promptspot'] = ''; + v['promptspottime'] = ''; + for (i = 0; i < prompt.length; i++) { + if (v['promptspot'] != '') { + v['promptspot'] += ','; + v['promptspottime'] += ','; + } + v['promptspot'] += prompt[i]['words']; + v['promptspottime'] += prompt[i]['time']; + } + + } + if (f != '') { + v['video'] = f; + v['definition'] = d; + v['weight'] = w; + } + if (!v['volume']) { + v['volume'] = 0; + } + var newV = {}; + + for (var k in v) { + if (v[k] != null) { + newV[k] = v[k]; + } + if (k == 'type') { + newV[k] = v[k].replace('video/m3u8', 'm3u8'); + } + } + + this.vars = newV; + }, + /* + 内置函数 + 将embedSWF里的param的对象进行转换 + */ + getFlashplayerParam: function() { + var w = '', + v = '', + o = { + allowScriptAccess: 'always', + allowFullScreen: true, + quality: 'high', + bgcolor: '#000' + }; + for (var e in o) { + w += e + '="' + o[e] + '" '; + v += ''; + } + w = w.replace('movie=', 'src='); + return { + w: w, + v: v + }; + }, + + /* + 操作动作结束 + ----------------------------------------------------------------------- + + 接口函数 + 获取元数据部分 + */ + getMetaDate: function() { + if (!this.loaded || this.V == null) { + return false; + } + if (this.playerType == 'html5video') { + var duration = 0; + try { + duration = !isNaN(this.V.duration) ? this.V.duration: 0; + } catch(event) { + this.log(event); + } + var data = { + duration: duration, + volume: this.V.volume, + playbackRate: this.V.playbackRate, + width: this.PD.offsetWidth || this.V.offsetWidth || this.V.width, + height: this.PD.offsetHeight || this.V.offsetHeight || this.V.height, + streamWidth: this.V.videoWidth, + streamHeight: this.V.videoHeight, + videoWidth: this.V.offsetWidth, + videoHeight: this.V.offsetHeight, + paused: this.V.paused + }; + return data; + } else { + try { + return this.V.getMetaDate(); + } catch(event) { + this.log(event); + } + } + return false; + }, + /* + 接口函数 + 取当前提供给播放器播放的视频列表 + */ + getVideoUrl: function() { + if (this.playerType == 'flashplayer') { + return this.V.getVideoUrl(); + } + var arr = []; + if (this.V.src) { + arr.push(this.V.src); + } else { + var uArr = this.V.childNodes; + for (var i = 0; i < uArr.length; i++) { + arr.push(uArr[i].src); + } + } + return arr; + }, + /* + 内置函数 + 格式化函数 + */ + clickEvent: function(call) { + if (call == 'none' || call == '' || call == null) { + return { + type: 'none' + }; + } + var callArr = call.split('->'); + var type = '', + fun = '', + link = '', + target = ''; + if (callArr.length == 2) { + var callM = callArr[0]; + var callE = callArr[1]; + if (!callE) { + return { + type: 'none' + }; + } + var val = ''; + var eArr = []; + type = callM; + switch (callM) { + case 'actionScript': + //trace(THIS.hasOwnProperty(callE)); + if (callE.indexOf('(') > -1) { + eArr = callE.split('('); + callE = eArr[0]; + val = eArr[1].replace(')', ''); + } + if (val == '') { + fun = 'thisTemp.' + callE + '()'; + } else { + fun = 'thisTemp.' + callE + '(' + val + ')'; + } + break; + case 'javaScript': + if (callE.substr(0, 11) == '[flashvars]') { + callE = callE.substr(11); + if (this.vars.hasOwnProperty(callE)) { + callE = this.vars[callE]; + } else { + break; + } + + } + if (callE.indexOf('(') > -1) { + eArr = callE.split('('); + callE = eArr[0]; + val = eArr[1].replace(')', ''); + } + if (val == '') { + fun = callE + '()'; + } else { + fun = callE + '(' + val + ')'; + } + break; + case "link": + var callLink = (callE + ',').split(','); + if (callLink[0].substr(0, 11) == '[flashvars]') { + var fl = callLink[0].replace('[flashvars]', ''); + if (this.vars.hasOwnProperty(fl)) { + callLink[0] = this.vars[fl]; + } else { + break; + } + } + if (!callLink[1]) { + callLink[1] = '_blank'; + } + link = callLink[0]; + target = callLink[1]; + break; + } + } + return { + type: type, + fun: fun, + link: link, + target: target + } + }, + /* + 内置函数 + 根据指定的align,valign,offsetX,offsetY计算坐标 + */ + getPosition: function(obj) { + /* + { + "align": "right", + "vAlign": "right", + "offsetX": -60, + "offsetY": -60 + } + */ + var pw = this.PD.offsetWidth, + ph = this.PD.offsetHeight; + var x = 0, + y = 0; + switch (obj['align']) { + case 'left': + x = obj['offsetX']; + break; + case 'center': + x = pw * 0.5 + obj['offsetX']; + break; + case 'right': + x = pw + obj['offsetX']; + break; + } + switch (obj['vAlign']) { + case 'top': + y = obj['offsetY']; + break; + case 'middle': + y = ph * 0.5 + obj['offsetY']; + break; + case 'bottom': + y = ph + obj['offsetY']; + break; + } + return { + x: x, + y: y + }; + }, + /* + 内置函数 + 向播放器界面添加一个文本 + */ + addElement: function(attribute) { + var thisTemp = this; + if (this.playerType == 'flashplayer') { + return this.V.addElement(attribute); + } + var i = 0; + var obj = { + list: null, + x: '100%', + y: "50%", + position: null, + alpha: 1, + backgroundColor: '', + backAlpha: 1, + backRadius: 0, + clickEvent: '' + }; + obj = this.standardization(obj, attribute); + var list = obj['list']; + if (list == null) { + return ''; + } + var id = 'element' + this.randomString(10); + var ele = document.createElement('div'); + ele.className = id; + if (obj['x']) { + ele.setAttribute('data-x', obj['x']); + } + if (obj['y']) { + ele.setAttribute('data-y', obj['y']); + } + if (obj['position'] != null) { + ele.setAttribute('data-position', obj['position'].join(',')); + } + + this.PD.appendChild(ele); + var eid = this.getByElement(id); + this.css(eid, { + position: 'absolute', + filter: 'alpha(opacity:' + obj['alpha'] + ')', + opacity: obj['alpha'].toString(), + width: '800px', + zIndex: '20' + }); + var bgid = 'elementbg' + this.randomString(10); + var bgAlpha = obj['alpha'].toString(); + var bgColor = obj['backgroundColor'].replace('0x', '#'); + var html = ''; + var idArr = []; + var clickArr = []; + if (!this.isUndefined(list) && list.length > 0) { + var textObj, returnObj, clickEvent; + for (i = 0; i < list.length; i++) { + var newEleid = 'elementnew' + this.randomString(10); + switch (list[i]['type']) { + case 'image': + case 'png': + case 'jpg': + case 'jpeg': + case 'gif': + textObj = { + type: 'image', + file: '', + radius: 0, + //圆角弧度 + width: 30, + //定义宽,必需要定义 + height: 30, + //定义高,必需要定义 + alpha: 1, + //透明度 + paddingLeft: 0, + //左边距离 + paddingRight: 0, + //右边距离 + paddingTop: 0, + paddingBottom: 0, + marginLeft: 0, + marginRight: 0, + marginTop: 0, + marginBottom: 0, + backgroundColor: '', + clickEvent: '' + }; + + list[i] = this.standardization(textObj, list[i]); + clickEvent = this.clickEvent(list[i]['clickEvent']); + clickArr.push(clickEvent); + if (clickEvent['type'] == 'link') { + html += '
    '; + } else { + html += '
    '; + } + break; + case 'text': + textObj = { + type: 'text', + //说明是文本 + text: '', + //文本内容 + color: '0xFFFFFF', + size: 14, + font: this.fontFamily, + leading: 0, + alpha: 1, + //透明度 + paddingLeft: 0, + //左边距离 + paddingRight: 0, + //右边距离 + paddingTop: 0, + paddingBottom: 0, + marginLeft: 0, + marginRight: 0, + marginTop: 0, + marginBottom: 0, + backgroundColor: '', + backAlpha: 1, + backRadius: 0, + //背景圆角弧度,支持数字统一设置,也支持分开设置[30,20,20,50],对应上左,上右,下右,下左 + clickEvent: '' + }; + list[i] = this.standardization(textObj, list[i]); + clickEvent = this.clickEvent(list[i]['clickEvent']); + clickArr.push(clickEvent); + if (clickEvent['type'] == 'link') { + html += ''; + } else { + html += '
    ' + list[i]['text'] + '
    '; + } + break; + default: + break; + } + idArr.push(newEleid); + } + } + var objClickEvent = this.clickEvent(obj['clickEvent']); + /*if(objClickEvent['type']=='link'){ + html = '' + html + ''; + }*/ + eid.innerHTML = '
    ' + html + '
    '; + if (objClickEvent['type'] == 'javaScript' || objClickEvent['type'] == 'actionScript') { + var objClickHandler = function() { + eval(objClickEvent['fun']); + thisTemp.sendJS('clickEvent', clk['type'] + '->' + clk['fun'].replace('thisTemp.', '').replace('()', '')); + }; + this.addListenerInside('click', objClickHandler, this.getByElement(bgid + '_c')) + } + this.css(bgid + '_c', { + position: 'absolute', + zIndex: '2' + }); + for (i = 0; i < idArr.length; i++) { + var clk = clickArr[i]; + + if (clk['type'] == 'javaScript' || clk['type'] == 'actionScript') { + var clickHandler = function() { + clk = clickArr[this.getAttribute('data-i')]; + eval(clk['fun']); + thisTemp.sendJS('clickEvent', clk['type'] + '->' + clk['fun'].replace('thisTemp.', '').replace('()', '')); + }; + this.addListenerInside('click', clickHandler, this.getByElement(idArr[i])) + } + switch (list[i]['type']) { + case 'image': + case 'png': + case 'jpg': + case 'jpeg': + case 'gif': + this.css(idArr[i], { + float: 'left', + width: list[i]['width'] + 'px', + height: list[i]['height'] + 'px', + filter: 'alpha(opacity:' + list[i]['alpha'] + ')', + opacity: list[i]['alpha'].toString(), + marginLeft: list[i]['marginLeft'] + 'px', + marginRight: list[i]['marginRight'] + 'px', + marginTop: list[i]['marginTop'] + 'px', + marginBottom: list[i]['marginBottom'] + 'px', + borderRadius: list[i]['radius'] + 'px', + cursor: 'pointer' + }); + this.css(idArr[i] + '_image', { + width: list[i]['width'] + 'px', + height: list[i]['height'] + 'px', + borderRadius: list[i]['radius'] + 'px' + }); + break; + case 'text': + this.css(idArr[i] + '_text', { + filter: 'alpha(opacity:' + list[i]['alpha'] + ')', + opacity: list[i]['alpha'].toString(), + borderRadius: list[i]['radius'] + 'px', + fontFamily: list[i]['font'], + fontSize: list[i]['size'] + 'px', + color: list[i]['color'].replace('0x', '#'), + lineHeight: list[i]['leading'] > 0 ? list[i]['leading'] + 'px': '', + paddingLeft: list[i]['paddingLeft'] + 'px', + paddingRight: list[i]['paddingRight'] + 'px', + paddingTop: list[i]['paddingTop'] + 'px', + paddingBottom: list[i]['paddingBottom'] + 'px', + whiteSpace: 'nowrap', + position: 'absolute', + zIndex: '3', + cursor: 'pointer' + }); + this.css(idArr[i], { + float: 'left', + width: this.getByElement(idArr[i] + '_text').offsetWidth + 'px', + height: this.getByElement(idArr[i] + '_text').offsetHeight + 'px', + marginLeft: list[i]['marginLeft'] + 'px', + marginRight: list[i]['marginRight'] + 'px', + marginTop: list[i]['marginTop'] + 'px', + marginBottom: list[i]['marginBottom'] + 'px' + }); + this.css(idArr[i] + '_bg', { + width: this.getByElement(idArr[i] + '_text').offsetWidth + 'px', + height: this.getByElement(idArr[i] + '_text').offsetHeight + 'px', + filter: 'alpha(opacity:' + list[i]['backAlpha'] + ')', + opacity: list[i]['backAlpha'].toString(), + borderRadius: list[i]['backRadius'] + 'px', + backgroundColor: list[i]['backgroundColor'].replace('0x', '#'), + position: 'absolute', + zIndex: '2' + }); + break; + default: + break; + } + } + this.css(bgid, { + width: this.getByElement(bgid + '_c').offsetWidth + 'px', + height: this.getByElement(bgid + '_c').offsetHeight + 'px', + position: 'absolute', + filter: 'alpha(opacity:' + bgAlpha + ')', + opacity: bgAlpha, + backgroundColor: bgColor.replace('0x', '#'), + borderRadius: obj['backRadius'] + 'px', + zIndex: '1' + }); + this.css(eid, { + width: this.getByElement(bgid).offsetWidth + 'px', + height: this.getByElement(bgid).offsetHeight + 'px' + }); + var eidCoor = this.calculationCoor(eid); + this.css(eid, { + left: eidCoor['x'] + 'px', + top: eidCoor['y'] + 'px' + }); + + this.elementArr.push(eid.className); + return eid; + }, + /* + 内置函数 + 获取元件的属性,包括x,y,width,height,alpha + */ + getElement: function(element) { + if (this.playerType == 'flashplayer') { + return this.V.getElement(element); + } + var ele = element; + if (typeof(element) == 'string') { + ele = this.getByElement(element); + } + var coor = this.getCoor(ele); + return { + x: coor['x'], + y: coor['y'], + width: ele.offsetWidth, + height: ele.offsetHeight, + alpha: !this.isUndefined(this.css(ele, 'opacity')) ? parseFloat(this.css(ele, 'opacity')) : 1, + show: this.css(ele, 'display') == 'none' ? false: true + }; + }, + /* + 内置函数 + 控制元件显示和隐藏 + */ + elementShow: function(element, show) { + if (this.playerType == 'flashplayer') { + this.V.elementShow(element, show); + return; + } + if (typeof(element) == 'string') { + if (element) { + this.css(ele, 'display', show == true ? 'block': 'none'); + } else { + var arr = this.elementTempArr; + for (var i = 0; i < arr.length; i++) { + this.css(arr[i], 'display', show == true ? 'block': 'none'); + } + } + } + + }, + /* + 内置函数 + 根据节点的x,y计算在播放器里的坐标 + */ + calculationCoor: function(ele) { + if (this.playerType == 'flashplayer') { + return this.V.calculationCoor(ele); + } + if (ele == []) { + return; + } + var x, y, position = []; + var w = this.PD.offsetWidth, + h = this.PD.offsetHeight; + var ew = ele.offsetWidth, + eh = ele.offsetHeight; + if (!this.isUndefined(this.getDataset(ele, 'x'))) { + x = this.getDataset(ele, 'x'); + } + if (!this.isUndefined(this.getDataset(ele, 'y'))) { + y = this.getDataset(ele, 'y'); + } + if (!this.isUndefined(this.getDataset(ele, 'position'))) { + try { + position = this.getDataset(ele, 'position').toString().split(','); + } catch(event) {} + } + if (position.length > 0) { + position.push(null, null, null, null); + var i = 0; + for (i = 0; i < position.length; i++) { + if (this.isUndefined(position[i]) || position[i] == null || position[i] == 'null' || position[i] == '') { + position[i] = null; + } else { + position[i] = parseFloat(position[i]); + } + } + + if (position[2] == null) { + switch (position[0]) { + case 0: + x = 0; + break; + case 1: + x = parseInt((w - ew) * 0.5); + break; + default: + x = w - ew; + break; + } + } else { + switch (position[0]) { + case 0: + x = position[2]; + break; + case 1: + x = parseInt(w * 0.5) + position[2]; + break; + default: + x = w + position[2]; + break; + } + } + if (position[3] == null) { + switch (position[1]) { + case 0: + y = 0; + break; + case 1: + y = parseInt((h - eh) * 0.5); + break; + default: + y = h - eh; + break; + } + } else { + switch (position[1]) { + case 0: + y = position[3]; + break; + case 1: + y = parseInt(h * 0.5) + position[3]; + break; + default: + y = h + position[3]; + break; + } + } + } else { + if (x.substring(x.length - 1, x.length) == '%') { + x = Math.floor(parseInt(x.substring(0, x.length - 1)) * w * 0.01); + } + if (y.substring(y.length - 1, y.length) == '%') { + y = Math.floor(parseInt(y.substring(0, y.length - 1)) * h * 0.01); + } + } + return { + x: x, + y: y + } + + }, + /* + 内置函数 + 修改新增元件的坐标 + */ + changeElementCoor: function() { + for (var i = 0; i < this.elementArr.length; i++) { + if (this.getByElement(this.elementArr[i]) != []) { + var c = this.calculationCoor(this.getByElement(this.elementArr[i])); + if (c['x'] && c['y']) { + this.css(this.elementArr[i], { + top: c['y'] + 'px', + left: c['x'] + 'px' + }); + } + } + } + }, + /* + 内置函数 + 缓动效果集 + */ + tween: function() { + var Tween = { + None: { //均速运动 + easeIn: function(t, b, c, d) { + return c * t / d + b; + }, + easeOut: function(t, b, c, d) { + return c * t / d + b; + }, + easeInOut: function(t, b, c, d) { + return c * t / d + b; + } + }, + Quadratic: { + easeIn: function(t, b, c, d) { + return c * (t /= d) * t + b; + }, + easeOut: function(t, b, c, d) { + return - c * (t /= d) * (t - 2) + b; + }, + easeInOut: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t + b; + return - c / 2 * ((--t) * (t - 2) - 1) + b; + } + }, + Cubic: { + easeIn: function(t, b, c, d) { + return c * (t /= d) * t * t + b; + }, + easeOut: function(t, b, c, d) { + return c * ((t = t / d - 1) * t * t + 1) + b; + }, + easeInOut: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t * t + b; + return c / 2 * ((t -= 2) * t * t + 2) + b; + } + }, + Quartic: { + easeIn: function(t, b, c, d) { + return c * (t /= d) * t * t * t + b; + }, + easeOut: function(t, b, c, d) { + return - c * ((t = t / d - 1) * t * t * t - 1) + b; + }, + easeInOut: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b; + return - c / 2 * ((t -= 2) * t * t * t - 2) + b; + } + }, + Quintic: { + easeIn: function(t, b, c, d) { + return c * (t /= d) * t * t * t * t + b; + }, + easeOut: function(t, b, c, d) { + return c * ((t = t / d - 1) * t * t * t * t + 1) + b; + }, + easeInOut: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b; + return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; + } + }, + Sine: { + easeIn: function(t, b, c, d) { + return - c * Math.cos(t / d * (Math.PI / 2)) + c + b; + }, + easeOut: function(t, b, c, d) { + return c * Math.sin(t / d * (Math.PI / 2)) + b; + }, + easeInOut: function(t, b, c, d) { + return - c / 2 * (Math.cos(Math.PI * t / d) - 1) + b; + } + }, + Exponential: { + easeIn: function(t, b, c, d) { + return (t == 0) ? b: c * Math.pow(2, 10 * (t / d - 1)) + b; + }, + easeOut: function(t, b, c, d) { + return (t == d) ? b + c: c * ( - Math.pow(2, -10 * t / d) + 1) + b; + }, + easeInOut: function(t, b, c, d) { + if (t == 0) return b; + if (t == d) return b + c; + if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + return c / 2 * ( - Math.pow(2, -10 * --t) + 2) + b; + } + }, + Circular: { + easeIn: function(t, b, c, d) { + return - c * (Math.sqrt(1 - (t /= d) * t) - 1) + b; + }, + easeOut: function(t, b, c, d) { + return c * Math.sqrt(1 - (t = t / d - 1) * t) + b; + }, + easeInOut: function(t, b, c, d) { + if ((t /= d / 2) < 1) return - c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; + } + }, + Elastic: { + easeIn: function(t, b, c, d, a, p) { + if (t == 0) return b; + if ((t /= d) == 1) return b + c; + if (!p) p = d * .3; + if (!a || a < Math.abs(c)) { + a = c; + var s = p / 4; + } else var s = p / (2 * Math.PI) * Math.asin(c / a); + return - (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; + }, + easeOut: function(t, b, c, d, a, p) { + if (t == 0) return b; + if ((t /= d) == 1) return b + c; + if (!p) p = d * .3; + if (!a || a < Math.abs(c)) { + a = c; + var s = p / 4; + } else var s = p / (2 * Math.PI) * Math.asin(c / a); + return (a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b); + }, + easeInOut: function(t, b, c, d, a, p) { + if (t == 0) return b; + if ((t /= d / 2) == 2) return b + c; + if (!p) p = d * (.3 * 1.5); + if (!a || a < Math.abs(c)) { + a = c; + var s = p / 4; + } else var s = p / (2 * Math.PI) * Math.asin(c / a); + if (t < 1) return - .5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; + return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b; + } + }, + Back: { + easeIn: function(t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c * (t /= d) * t * ((s + 1) * t - s) + b; + }, + easeOut: function(t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; + }, + easeInOut: function(t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; + return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b; + } + }, + Bounce: { + easeIn: function(t, b, c, d) { + return c - Tween.Bounce.easeOut(d - t, 0, c, d) + b; + }, + easeOut: function(t, b, c, d) { + if ((t /= d) < (1 / 2.75)) { + return c * (7.5625 * t * t) + b; + } else if (t < (2 / 2.75)) { + return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b; + } else if (t < (2.5 / 2.75)) { + return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b; + } else { + return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b; + } + }, + easeInOut: function(t, b, c, d) { + if (t < d / 2) return Tween.Bounce.easeIn(t * 2, 0, c, d) * .5 + b; + else return Tween.Bounce.easeOut(t * 2 - d, 0, c, d) * .5 + c * .5 + b; + } + } + }; + return Tween; + }, + /* + 接口函数 + 缓动效果 + ele:Object=需要缓动的对象, + parameter:String=需要改变的属性:x,y,width,height,alpha, + effect:String=效果名称, + start:Int=起始值, + end:Int=结束值, + speed:Number=运动的总秒数,支持小数 + */ + animate: function(attribute) { + if (this.playerType == 'flashplayer') { + return this.V.animate(attribute); + } + var thisTemp = this; + var animateId = 'animate_' + this.randomString(); + var obj = { + element: null, + parameter: 'x', + static: false, + effect: 'None.easeIn', + start: null, + end: null, + speed: 0, + overStop: false, + pauseStop: false, + //暂停播放时缓动是否暂停 + callBack: null + }; + obj = this.standardization(obj, attribute); + if (obj['element'] == null || obj['speed'] == 0) { + return false; + } + var w = this.PD.offsetWidth, + h = this.PD.offsetHeight; + var effArr = (obj['effect'] + '.').split('.'); + var tweenFun = this.tween()[effArr[0]][effArr[1]]; + var eleCoor = { + x: 0, + y: 0 + }; + if (this.isUndefined(tweenFun)) { + return false; + } + //先将该元件从元件数组里删除,让其不再跟随播放器的尺寸改变而改变位置 + var def = this.arrIndexOf(this.elementArr, obj['element'].className); + if (def > -1) { + this.elementTempArr.push(obj['element'].className); + this.elementArr.splice(def, 1); + } + //var run = true; + var css = {}; + //对传递的参数进行转化,x和y转化成left,top + var pm = this.getElement(obj['element']); //包含x,y,width,height,alpha属性 + var t = 0; //当前时间 + var b = 0; //初始值 + var c = 0; //变化量 + var d = obj['speed'] * 1000; //持续时间 + var timerTween = null; + var tweenObj = null; + var start = obj['start'] == null ? '': obj['start'].toString(); + var end = obj['end'] == null ? '': obj['end'].toString(); + switch (obj['parameter']) { + case 'x': + if (obj['start'] == null) { + b = pm['x']; + } else { + if (start.substring(start.length - 1, start.length) == '%') { + b = parseInt(start) * w * 0.01; + } else { + b = parseInt(start); + } + + } + if (obj['end'] == null) { + c = pm['x'] - b; + } else { + if (end.substring(end.length - 1, end.length) == '%') { + c = parseInt(end) * w * 0.01 - b; + } else if (end.substring(0, 1) == '-' || end.substring(0, 1) == '+') { + if (typeof(obj['end']) == 'number') { + c = parseInt(obj['end']) - b; + } else { + c = parseInt(end); + } + + } else { + c = parseInt(end) - b; + } + } + break; + case 'y': + if (obj['start'] == null) { + b = pm['y']; + } else { + if (start.substring(start.length - 1, start.length) == '%') { + b = parseInt(start) * h * 0.01; + } else { + b = parseInt(start); + } + + } + if (obj['end'] == null) { + c = pm['y'] - b; + } else { + if (end.substring(end.length - 1, end.length) == '%') { + c = parseInt(end) * h * 0.01 - b; + } else if (end.substring(0, 1) == '-' || end.substring(0, 1) == '+') { + if (typeof(obj['end']) == 'number') { + c = parseInt(obj['end']) - b; + } else { + c = parseInt(end); + } + } else { + c = parseInt(end) - b; + } + } + break; + case 'alpha': + if (obj['start'] == null) { + b = pm['alpha'] * 100; + } else { + if (start.substring(start.length - 1, start.length) == '%') { + b = parseInt(obj['start']); + } else { + b = parseInt(obj['start'] * 100); + } + + } + if (obj['end'] == null) { + c = pm['alpha'] * 100 - b; + } else { + if (end.substring(end.length - 1, end.length) == '%') { + c = parseInt(end) - b; + } else if (end.substring(0, 1) == '-' || end.substring(0, 1) == '+') { + if (typeof(obj['end']) == 'number') { + c = parseInt(obj['end']) * 100 - b; + } else { + c = parseInt(obj['end']) * 100; + } + } else { + c = parseInt(obj['end']) * 100 - b; + } + } + break; + } + var callBack = function() { + var index = thisTemp.arrIndexOf(thisTemp.animateElementArray, animateId); + if (index > -1) { + thisTemp.animateArray.splice(index, 1); + thisTemp.animateElementArray.splice(index, 1); + } + index = thisTemp.arrIndexOf(thisTemp.animatePauseArray, animateId); + if (index > -1) { + thisTemp.animatePauseArray.splice(index, 1); + } + if (obj['callBack'] != null && obj['element'] && obj['callBack'] != 'callBack' && obj['callBack'] != 'tweenX' && obj['tweenY'] != 'callBack' && obj['callBack'] != 'tweenAlpha') { + var cb = eval(obj['callBack']); + cb(obj['element']); + obj['callBack'] = null; + } + }; + var stopTween = function() { + if (timerTween != null) { + if (timerTween.runing) { + timerTween.stop(); + } + timerTween = null; + } + }; + var tweenX = function() { + if (t < d) { + t += 10; + css = { + left: Math.ceil(tweenFun(t, b, c, d)) + 'px' + }; + if (obj['static']) { + eleCoor = thisTemp.calculationCoor(obj['element']); + css['top'] = eleCoor['y'] + 'px'; + } + thisTemp.css(obj['element'], css); + + } else { + stopTween(); + try { + var defX = this.arrIndexOf(this.elementTempArr, obj['element'].className); + if (defX > -1) { + this.elementTempArr.splice(defX, 1); + } + } catch(event) {} + thisTemp.elementArr.push(obj['element'].className); + callBack(); + } + }; + var tweenY = function() { + if (t < d) { + t += 10; + css = { + top: Math.ceil(tweenFun(t, b, c, d)) + 'px' + }; + if (obj['static']) { + eleCoor = thisTemp.calculationCoor(obj['element']); + css['left'] = eleCoor['x'] + 'px'; + } + thisTemp.css(obj['element'], css); + } else { + stopTween(); + try { + var defY = this.arrIndexOf(this.elementTempArr, obj['element'].className); + if (defY > -1) { + this.elementTempArr.splice(defY, 1); + } + } catch(event) {} + thisTemp.elementArr.push(obj['element'].className); + callBack(); + } + }; + var tweenAlpha = function() { + if (t < d) { + t += 10; + eleCoor = thisTemp.calculationCoor(obj['element']); + var ap = Math.ceil(tweenFun(t, b, c, d)) * 0.01; + css = { + filter: 'alpha(opacity:' + ap + ')', + opacity: ap.toString() + }; + if (obj['static']) { + eleCoor = thisTemp.calculationCoor(obj['element']); + css['top'] = eleCoor['y'] + 'px'; + css['left'] = eleCoor['x'] + 'px'; + } + thisTemp.css(obj['element'], css); + } else { + stopTween(); + try { + var defA = this.arrIndexOf(this.elementTempArr, obj['element'].className); + if (defA > -1) { + this.elementTempArr.splice(defA, 1); + } + } catch(event) {} + thisTemp.elementArr.push(obj['element'].className); + callBack(); + } + }; + switch (obj['parameter']) { + case 'x': + tweenObj = tweenX; + break; + case 'y': + tweenObj = tweenY; + break; + case 'alpha': + tweenObj = tweenAlpha; + break; + default: + break; + } + timerTween = new thisTemp.timer(10, tweenObj); + timerTween.callBackFunction = callBack; + if (obj['overStop']) { + var mouseOver = function() { + if (timerTween != null && timerTween.runing) { + timerTween.stop(); + } + }; + this.addListenerInside('mouseover', mouseOver, obj['element']); + var mouseOut = function() { + var start = true; + if (obj['pauseStop'] && thisTemp.getMetaDate()['paused']) { + start = false; + } + if (timerTween != null && !timerTween.runing && start) { + timerTween.start(); + } + }; + this.addListenerInside('mouseout', mouseOut, obj['element']); + } + + this.animateArray.push(timerTween); + this.animateElementArray.push(animateId); + if (obj['pauseStop']) { + this.animatePauseArray.push(animateId); + } + return animateId; + }, + /* + 接口函数函数 + 继续运行animate + */ + animateResume: function(id) { + if (this.playerType == 'flashplayer') { + this.V.animateResume(this.isUndefined(id) ? '': id); + return; + } + var arr = []; + if (id != '' && !this.isUndefined(id) && id != 'pause') { + arr.push(id); + } else { + if (id === 'pause') { + arr = this.animatePauseArray; + } else { + arr = this.animateElementArray; + } + } + for (var i = 0; i < arr.length; i++) { + var index = this.arrIndexOf(this.animateElementArray, arr[i]); + if (index > -1) { + this.animateArray[index].start(); + } + } + + }, + /* + 接口函数 + 暂停运行animate + */ + animatePause: function(id) { + if (this.playerType == 'flashplayer') { + this.V.animatePause(this.isUndefined(id) ? '': id); + return; + } + var arr = []; + if (id != '' && !this.isUndefined(id) && id != 'pause') { + arr.push(id); + } else { + if (id === 'pause') { + arr = this.animatePauseArray; + } else { + arr = this.animateElementArray; + } + } + for (var i = 0; i < arr.length; i++) { + var index = this.arrIndexOf(this.animateElementArray, arr[i]); + if (index > -1) { + this.animateArray[index].stop(); + } + } + }, + /* + 内置函数 + 根据ID删除数组里对应的内容 + */ + deleteAnimate: function(id) { + if (this.playerType == 'flashplayer' && this.V) { + try { + this.V.deleteAnimate(id); + } catch(event) { + this.log(event); + } + return; + } + var index = this.arrIndexOf(this.animateElementArray, id); + if (index > -1) { + this.animateArray[index].callBackFunction(); + this.animateArray.splice(index, 1); + this.animateElementArray.splice(index, 1); + } + }, + /* + 内置函数 + 删除外部新建的元件 + */ + deleteElement: function(ele) { + if (this.playerType == 'flashplayer' && this.V) { + try { + this.V.deleteElement(ele); + } catch(event) {} + return; + } + //先将该元件从元件数组里删除,让其不再跟随播放器的尺寸改变而改变位置 + var def = this.arrIndexOf(this.elementArr, ele.className); + if (def > -1) { + this.elementArr.splice(def, 1); + } + try { + def = this.arrIndexOf(this.elementTempArr, ele.className); + if (def > -1) { + this.elementTempArr.splice(def, 1); + } + } catch(event) {} + this.deleteAnimate(ele); + this.deleteChild(ele); + }, + /* + -------------------------------------------------------------- + 共用函数部分 + 以下函数并非只能在本程序中使用,也可以在页面其它项目中使用 + 根据ID获取元素对象 + */ + getByElement: function(obj, parent) { + if (this.isUndefined(parent)) { + parent = document; + } + var num = obj.substr(0, 1); + var res = []; + if (num != '#') { + if (num == '.') { + obj = obj.substr(1, obj.length); + } + if (parent.getElementsByClassName) { + res = parent.getElementsByClassName(obj); + } else { + var reg = new RegExp(' ' + obj + ' ', 'i'); + var ele = parent.getElementsByTagName('*'); + + for (var i = 0; i < ele.length; i++) { + if (reg.test(' ' + ele[i].className + ' ')) { + res.push(ele[i]); + } + } + } + + if (res.length > 0) { + return res[0]; + } else { + return res; + } + } else { + if (num == '#') { + obj = obj.substr(1, obj.length); + } + return document.getElementById(obj); + } + }, + /* + 共用函数 + 功能:修改样式或获取指定样式的值, + elem:ID对象或ID对应的字符,如果多个对象一起设置,则可以使用数组 + attribute:样式名称或对象,如果是对象,则省略掉value值 + value:attribute为样式名称时,定义的样式值 + 示例一: + this.css(ID,'width','100px'); + 示例二: + this.css('id','width','100px'); + 示例三: + this.css([ID1,ID2,ID3],'width','100px'); + 示例四: + this.css(ID,{ + width:'100px', + height:'100px' + }); + 示例五(获取宽度): + var width=this.css(ID,'width'); + */ + css: function(elem, attribute, value) { + var i = 0; + var k = ''; + if (typeof(elem) == 'object') { //对象或数组 + if (!this.isUndefined(typeof(elem.length))) { //说明是数组 + for (i = 0; i < elem.length; i++) { + var el; + if (typeof(elem[i]) == 'string') { + el = this.getByElement(elem[i]) + } else { + el = elem[i]; + } + if (typeof(attribute) != 'object') { + if (!this.isUndefined(value)) { + el.style[attribute] = value; + } + } else { + for (k in attribute) { + if (!this.isUndefined(attribute[k])) { + try { + el.style[k] = attribute[k]; + } catch(event) { + this.log(event); + } + } + } + } + } + return; + } + + } + if (typeof(elem) == 'string') { + elem = this.getByElement(elem); + } + if (typeof(attribute) != 'object') { + if (!this.isUndefined(value)) { + elem.style[attribute] = value; + } else { + if (!this.isUndefined(this.getStyle(elem, attribute))) { + return this.getStyle(elem, attribute); + } else { + return false; + } + } + } else { + for (k in attribute) { + if (!this.isUndefined(attribute[k])) { + elem.style[k] = attribute[k]; + } + } + } + + }, + /* + 内置函数 + 兼容型获取style + */ + getStyle: function(obj, attr) { + if (!this.isUndefined(obj.style[attr])) { + return obj.style[attr]; + } else { + if (obj.currentStyle) { + return obj.currentStyle[attr]; + } else { + return getComputedStyle(obj, false)[attr]; + } + } + }, + /* + 共用函数 + 判断变量是否存在或值是否为undefined + */ + isUndefined: function(value) { + try { + if (value == 'undefined' || value == undefined || value == null) { + return true; + } + } catch(event) { + this.log(event); + } + return false; + }, + /* + 共用函数 + 外部监听函数 + */ + addListener: function(name, funName) { + if (name && funName) { + if (this.playerType == 'flashplayer') { + var ff = ''; //定义用来向flashplayer传递的函数字符 + if (typeof(funName) == 'function') { + ff = this.getParameterNames(funName); + } + this.V.addListener(name, ff); + return; + } + var have = false; + for (var i = 0; i < this.listenerJsArr.length; i++) { + var arr = this.listenerJsArr[i]; + if (arr[0] == name && arr[1] == funName) { + have = true; + break; + } + } + if (!have) { + this.listenerJsArr.push([name, funName]); + } + } + }, + /* + 共用函数 + 外部删除监听函数 + */ + removeListener: function(name, funName) { + if (name && funName) { + if (this.playerType == 'flashplayer') { + var ff = ''; //定义用来向flashplayer传递的函数字符 + if (typeof(funName) == 'function') { + ff = this.getParameterNames(funName); + } + this.V.removeListener(name, ff); + return; + } + for (var i = 0; i < this.listenerJsArr.length; i++) { + var arr = this.listenerJsArr[i]; + if (arr[0] == name && arr[1] == funName) { + this.listenerJsArr.splice(i, 1); + break; + } + } + } + }, + /* + 内部监听函数,调用方式: + this.addListenerInside('click',function(event){},[ID]); + d值为空时,则表示监听当前的视频播放器 + */ + addListenerInside: function(e, f, d, t) { + if (this.isUndefined(t)) { + t = false; + } + var o = this.V; + if (!this.isUndefined(d)) { + o = d; + } + if (o.addEventListener) { + try { + o.addEventListener(e, f, t); + } catch(event) {} + } else if (o.attachEvent) { + try { + o.attachEvent('on' + e, f); + } catch(event) {} + } else { + o['on' + e] = f; + } + }, + /* + 删除内部监听函数,调用方式: + this.removeListenerInside('click',function(event){}[,ID]); + d值为空时,则表示监听当前的视频播放器 + */ + removeListenerInside: function(e, f, d, t) { + /*if(this.playerType=='flashplayer' && this.getParameterNames(f) && this.isUndefined(d)) { + return; + }*/ + if (this.isUndefined(t)) { + t = false; + } + var o = this.V; + if (!this.isUndefined(d)) { + o = d; + } + if (o.removeEventListener) { + try { + this.addNum--; + o.removeEventListener(e, f, t); + } catch(e) {} + } else if (o.detachEvent) { + try { + o.detachEvent('on' + e, f); + } catch(e) {} + } else { + o['on' + e] = null; + } + }, + /* + 共用函数 + 统一分配监听,以达到跟as3同样效果 + */ + sendJS: function(name, val) { + if (this.adPlayerPlay && name.substr( - 2) != 'Ad') { + return; + } + var list = this.listenerJsArr; + var obj = { + variable: this.vars['variable'] + }; + if (this.vars['playerID']) { + obj['playerID'] = this.vars['playerID']; + } + for (var i = 0; i < list.length; i++) { + var arr = list[i]; + if (arr[0] == name) { + if (val) { + switch (arr[1].length) { + case 1: + arr[1](val); + break; + case 2: + arr[1](val, obj); + break; + default: + arr[1](); + break; + } + + } else { + switch (arr[1].length) { + case 1: + if (typeof(val) == 'boolean') { + arr[1](false); + } else { + arr[1](obj); + } + break; + default: + arr[1](); + break; + } + + } + } + } + }, + /* + 共用函数 + 获取函数名称,如 function ckplayer(){} var fun=ckplayer,则getParameterNames(fun)=ckplayer + */ + getParameterNames: function(fn) { + if (typeof(fn) !== 'function') { + return false; + } + var COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; + var code = fn.toString().replace(COMMENTS, ''); + var result = code.slice(code.indexOf(' ') + 1, code.indexOf('(')); + return result === null ? false: result; + }, + /* + 共用函数 + 获取当前本地时间 + */ + getNowDate: function() { + var nowDate = new Date(); + var month = nowDate.getMonth() + 1; + var date = nowDate.getDate(); + var hours = nowDate.getHours(); + var minutes = nowDate.getMinutes(); + var seconds = nowDate.getSeconds(); + var tMonth = '', + tDate = '', + tHours = '', + tMinutes = '', + tSeconds = '', + tSeconds = (seconds < 10) ? '0' + seconds: seconds + '', + tMinutes = (minutes < 10) ? '0' + minutes: minutes + '', + tHours = (hours < 10) ? '0' + hours: hours + '', + tDate = (date < 10) ? '0' + date: date + '', + tMonth = (month < 10) ? '0' + month: month + ''; + return tMonth + '/' + tDate + ' ' + tHours + ':' + tMinutes + ':' + tSeconds; + }, + /* + 共用函数 + 格式化时分秒 + seconds:Int:秒数 + ishours:Boolean:是否显示小时,如果设置成false,则会显示如80:20,表示1小时20分钟20秒 + */ + formatTime: function(seconds, ishours) { + var tSeconds = '', + tMinutes = '', + tHours = ''; + if (isNaN(seconds)) { + seconds = 0; + } + var s = Math.floor(seconds % 60), + m = 0, + h = 0; + if (ishours) { + m = Math.floor(seconds / 60) % 60; + h = Math.floor(seconds / 3600); + } else { + m = Math.floor(seconds / 60); + } + tSeconds = (s < 10) ? '0' + s: s + ''; + tMinutes = (m > 0) ? ((m < 10) ? '0' + m + ':': m + ':') : '00:'; + tHours = (h > 0) ? ((h < 10) ? '0' + h + ':': h + ':') : ''; + if (ishours) { + return tHours + tMinutes + tSeconds; + } else { + return tMinutes + tSeconds; + } + }, + /* + 共用函数 + 获取一个随机字符 + len:随机字符长度 + */ + randomString: function(len) { + len = len || 16; + var chars = 'abcdefghijklmnopqrstuvwxyz'; + var maxPos = chars.length; + var val = ''; + for (i = 0; i < len; i++) { + val += chars.charAt(Math.floor(Math.random() * maxPos)); + } + return 'ch' + val; + }, + /* + 共用函数 + 获取字符串长度,中文算两,英文数字算1 + */ + getStringLen: function(str) { + var len = 0; + for (var i = 0; i < str.length; i++) { + if (str.charCodeAt(i) > 127 || str.charCodeAt(i) == 94) { + len += 2; + } else { + len++; + } + } + return len; + }, + /* + 内部函数 + 用来为ajax提供支持 + */ + createXHR: function() { + if (window.XMLHttpRequest) { + //IE7+、Firefox、Opera、Chrome 和Safari + return new XMLHttpRequest(); + } else if (window.ActiveXObject) { + //IE6 及以下 + try { + return new ActiveXObject('Microsoft.XMLHTTP'); + } catch(event) { + try { + return new ActiveXObject('Msxml2.XMLHTTP'); + } catch(event) { + this.eject(this.errorList[7]); + } + } + } else { + this.eject(this.errorList[8]); + } + }, + /* + 共用函数 + ajax调用 + */ + ajax: function(cObj) { + var thisTemp = this; + var callback = null; + var obj = { + method: 'get', + //请求类型 + dataType: 'json', + //请求的数据类型 + charset: 'utf-8', + async: false, + //true表示异步,false表示同步 + url: '', + data: null, + success: null + }; + if (typeof(cObj) != 'object') { + this.eject(this.errorList[9]); + return; + } + obj = this.standardization(obj, cObj); + if (obj.dataType === 'json' || obj.dataType === 'text' || obj.dataType === 'html') { + var xhr = this.createXHR(); + callback = function() { + //判断http的交互是否成功 + if (xhr.status == 200) { + if (thisTemp.isUndefined(obj.success)) { + return; + } + if (obj.dataType === 'json') { + try { + obj.success(eval('(' + xhr.responseText + ')')); //回调传递参数 + } catch(event) { + obj.success(null); + } + } else { + obj.success(xhr.responseText); //回调传递参数 + } + } else { + thisTemp.eject(thisTemp.errorList[10], 'Ajax.status:' + xhr.status); + } + }; + obj.url = obj.url.indexOf('?') == -1 ? obj.url + '?rand=' + this.randomString(6) : obj.url; + obj.data = this.formatParams(obj.data); //通过params()将名值对转换成字符串 + if (obj.method === 'get' && !this.isUndefined(obj.data)) { + if (obj.data != '') { + if (obj.url.indexOf('?') == -1) { + obj.url += '?' + obj.data + } else { + obj.url += '&' + obj.data; + } + } + } + if (obj.async === true) { //true表示异步,false表示同步 + xhr.onreadystatechange = function() { + if (xhr.readyState == 4 && callback != null) { //判断对象的状态是否交互完成 + callback(); //回调 + } + }; + } + xhr.open(obj.method, obj.url, obj.async); + if (obj.method === 'post') { + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('charset', obj['charset']); + xhr.send(obj.data); + } else { + xhr.send(null); //get方式则填null + } + if (obj.async === false) { //同步 + callback(); + } + + } else if (obj.dataType === 'jsonp') { + var oHead = document.getElementsByTagName('head')[0]; + var oScript = document.createElement('script'); + var callbackName = 'callback' + new Date().getTime(); + var params = this.formatParams(obj.data) + '&callback=' + callbackName; //按时间戳拼接字符串 + callback = obj.success; + //拼接好src + oScript.src = obj.url.split('?') + '?' + params; + //插入script标签 + oHead.insertBefore(oScript, oHead.firstChild); + //jsonp的回调函数 + window[callbackName] = function(json) { + callback(json); + oHead.removeChild(oScript); + }; + } + }, + /* + 内置函数 + 动态加载js + */ + loadJs: function(path, success) { + var oHead = document.getElementsByTagName('HEAD').item(0); + var oScript = document.createElement('script'); + oScript.type = 'text/javascript'; + oScript.src = this.getNewUrl(path); + oHead.appendChild(oScript); + oScript.onload = function() { + success(); + } + }, + /* + 共用函数 + 排除IE6-9 + */ + isMsie: function() { + var browser = navigator.appName; + var b_version = navigator.appVersion; + var version = b_version.split(';'); + var trim_Version = ''; + if (version.length > 1) { + trim_Version = version[1].replace(/[ ]/g, ''); + } + if (browser == 'Microsoft Internet Explorer' && (trim_Version == 'MSIE6.0' || trim_Version == 'MSIE7.0' || trim_Version == 'MSIE8.0' || trim_Version == 'MSIE9.0' || trim_Version == 'MSIE10.0')) { + return false; + } + return true; + }, + /* + 共用函数 + 判断是否安装了flashplayer + */ + uploadFlash: function() { + var swf; + if (navigator.userAgent.indexOf('MSIE') > 0) { + try { + var swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); + return true; + } catch(e) { + return false; + } + } + if (navigator.userAgent.indexOf('Firefox') > 0) { + swf = navigator.plugins['Shockwave Flash']; + if (swf) { + return true + } else { + return false; + } + } + return true; + }, + /* + 共用函数 + 检测浏览器是否支持HTML5-Video + */ + supportVideo: function() { + if (!this.isMsie()) { + return false; + } + if ( !! document.createElement('video').canPlayType) { + var vidTest = document.createElement('video'); + var oggTest; + try { + oggTest = vidTest.canPlayType('video/ogg; codecs="theora, vorbis"'); + } catch(error) { + oggTest = false; + } + if (!oggTest) { + var h264Test; + try { + h264Test = vidTest.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"'); + } catch(error) { + h264Test = false; + } + if (!h264Test) { + return false; + } else { + if (h264Test == "probably") { + return true; + } else { + return false; + } + } + } else { + if (oggTest == "probably") { + return true; + } else { + return false; + } + } + } else { + return false; + } + }, + /* + 共用函数 + 获取属性值 + */ + getDataset: function(ele, z) { + try { + return ele.dataset[z]; + } catch(error) { + try { + return ele.getAttribute('data-' + z) + } catch(error) { + return false; + } + } + }, + /* + 共用函数 + 返回flashplayer的对象 + */ + getObjectById: function(id) { + var x = null; + var y = this.getByElement('#' + id); + var r = 'embed'; + if (y && y.nodeName == 'OBJECT') { + if (typeof(y.SetVariable) != 'undefined') { + x = y; + } else { + var z = y.getElementsByTagName(r)[0]; + if (z) { + x = z; + } + } + } + return x; + }, + /* + 共用函数 + 对象转地址字符串 + */ + formatParams: function(data) { + var arr = []; + for (var i in data) { + arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i])); + } + return arr.join('&'); + }, + /* + 内置函数 + 对地址进行冒泡排序 + */ + arrSort: function(arr) { + var temp = []; + for (var i = 0; i < arr.length; i++) { + for (var j = 0; j < arr.length - i; j++) { + if (!this.isUndefined(arr[j + 1]) && arr[j][3] < arr[j + 1][3]) { + temp = arr[j + 1]; + arr[j + 1] = arr[j]; + arr[j] = temp; + } + } + } + return arr; + }, + /* + 内置函数 + 判断文件后缀 + */ + getFileExt: function(filepath) { + if (filepath != '' && !this.isUndefined(filepath)) { + if (filepath.indexOf('?') > -1) { + filepath = filepath.split('?')[0]; + } + var pos = '.' + filepath.replace(/.+\./, ''); + return pos.toLowerCase(); + } + return ''; + }, + /* + 内置函数 + 判断是否是移动端 + */ + isMobile: function() { + if (navigator.userAgent.match(/(iPhone|iPad|iPod|Android|ios)/i)) { + return true; + } + return false; + }, + /* + 内置函数 + 搜索字符串str是否包含key + */ + isContains: function(str, key) { + return str.indexOf(key) > -1; + }, + /* + 内置函数 + 给地址添加随机数 + */ + getNewUrl: function(url) { + if (this.isContains(url, '?')) { + return url += '&' + this.randomString(8) + '=' + this.randomString(8); + } else { + return url += '?' + this.randomString(8) + '=' + this.randomString(8); + } + }, + /* + 共用函数 + 获取clientX和clientY + */ + client: function(event) { + var eve = event || window.event; + if (this.isUndefined(eve)) { + eve = { + clientX: 0, + clientY: 0 + }; + } + return { + x: eve.clientX + (document.documentElement.scrollLeft || this.body.scrollLeft) - this.pdCoor['x'], + y: eve.clientY + (document.documentElement.scrollTop || this.body.scrollTop) - this.pdCoor['y'] + } + }, + /* + 内置函数 + 获取节点的绝对坐标 + */ + getCoor: function(obj) { + var coor = this.getXY(obj); + return { + x: coor['x'] - this.pdCoor['x'], + y: coor['y'] - this.pdCoor['y'] + }; + }, + getXY: function(obj) { + var parObj = obj; + var left = obj.offsetLeft; + var top = obj.offsetTop; + while (parObj = parObj.offsetParent) { + left += parObj.offsetLeft; + top += parObj.offsetTop; + } + return { + x: left, + y: top + }; + }, + /* + 内置函数 + 删除本对象的所有属性 + */ + removeChild: function() { + if (this.playerType == 'html5video') { + //删除计时器 + var i = 0; + var timerArr = [this.timerError, this.timerFull, this.timerTime, this.timerBuffer, this.timerClick, this.timerLoading, this.timerCBar, this.timerVCanvas]; + for (i = 0; i < timerArr.length; i++) { + if (timerArr[i] != null) { + if (timerArr[i].runing) { + timerArr[i].stop(); + } + timerArr[i] = null; + } + } + //删除事件监听 + var ltArr = this.listenerJsArr; + for (i = 0; i < ltArr.length; i++) { + this.removeListener(ltArr[i][0], ltArr[i][1]); + } + } + this.playerType == ''; + this.V = null; + if (this.showFace) { + this.deleteChild(this.CB['menu']); + } + this.deleteChild(this.PD); + this.CD.innerHTML = ''; + }, + /* + 内置函数 + 画封闭的图形 + */ + canvasFill: function(name, path) { + name.beginPath(); + for (var i = 0; i < path.length; i++) { + var d = path[i]; + if (i > 0) { + name.lineTo(d[0], d[1]); + } else { + name.moveTo(d[0], d[1]); + } + } + name.closePath(); + name.fill(); + }, + /* + 内置函数 + 画矩形 + */ + canvasFillRect: function(name, path) { + for (var i = 0; i < path.length; i++) { + var d = path[i]; + name.fillRect(d[0], d[1], d[2], d[3]); + } + }, + /* + 共用函数 + 删除容器节点 + */ + deleteChild: function(f) { + var def = this.arrIndexOf(this.elementArr, f.className); + if (def > -1) { + this.elementArr.splice(def, 1); + } + var childs = f.childNodes; + for (var i = childs.length - 1; i >= 0; i--) { + f.removeChild(childs[i]); + } + + if (f && f != null && f.parentNode) { + try { + if (f.parentNode) { + f.parentNode.removeChild(f); + + } + + } catch(event) {} + } + }, + /* + 内置函数 + 根据容器的宽高,内部节点的宽高计算出内部节点的宽高及坐标 + */ + getProportionCoor: function(stageW, stageH, vw, vh) { + var w = 0, + h = 0, + x = 0, + y = 0; + if (stageW / stageH < vw / vh) { + w = stageW; + h = w * vh / vw; + } else { + h = stageH; + w = h * vw / vh; + } + x = (stageW - w) * 0.5; + y = (stageH - h) * 0.5; + return { + width: parseInt(w), + height: parseInt(h), + x: parseInt(x), + y: parseInt(y) + }; + }, + /* + 共用函数 + 将字幕文件内容转换成数组 + */ + parseSrtSubtitles: function(srt) { + var subtitles = []; + var textSubtitles = []; + var i = 0; + var arrs = srt.split('\n'); + var arr = []; + var delHtmlTag = function(str) { + return str.replace(/<[^>]+>/g, ''); //去掉所有的html标记 + }; + for (i = 0; i < arrs.length; i++) { + if (arrs[i].replace(/\s/g, '').length > 0) { + arr.push(arrs[i]); + } else { + if (arr.length > 0) { + textSubtitles.push(arr); + } + arr = []; + } + } + for (i = 0; i < textSubtitles.length; ++i) { + var textSubtitle = textSubtitles[i]; + if (textSubtitle.length >= 2) { + var sn = textSubtitle[0]; // 字幕的序号 + var startTime = this.toSeconds(this.trim(textSubtitle[1].split(' --> ')[0])); // 字幕的开始时间 + var endTime = this.toSeconds(this.trim(textSubtitle[1].split(' --> ')[1])); // 字幕的结束时间 + var content = [delHtmlTag(textSubtitle[2])]; // 字幕的内容 + // 字幕可能有多行 + if (textSubtitle.length > 2) { + for (var j = 3; j < textSubtitle.length; j++) { + content.push(delHtmlTag(textSubtitle[j])); + } + } + // 字幕对象 + var subtitle = { + sn: sn, + startTime: startTime, + endTime: endTime, + content: content + }; + subtitles.push(subtitle); + } + } + return subtitles; + }, + /* + 共用函数 + 计时器,该函数模拟as3中的timer原理 + time:计时时间,单位:毫秒 + fun:接受函数 + number:运行次数,不设置则无限运行 + */ + timer: function(time, fun, number) { + var thisTemp = this; + this.time = 10; //运行间隔 + this.fun = null; //监听函数 + this.timeObj = null; //setInterval对象 + this.number = 0; //已运行次数 + this.numberTotal = null; //总至需要次数 + this.runing = false; //当前状态 + this.startFun = function() { + thisTemp.number++; + thisTemp.fun(); + if (thisTemp.numberTotal != null && thisTemp.number >= thisTemp.numberTotal) { + thisTemp.stop(); + } + }; + this.start = function() { + if (!thisTemp.runing) { + thisTemp.runing = true; + thisTemp.timeObj = window.setInterval(thisTemp.startFun, time); + } + }; + this.stop = function() { + if (thisTemp.runing) { + thisTemp.runing = false; + window.clearInterval(thisTemp.timeObj); + thisTemp.timeObj = null; + } + }; + if (time) { + this.time = time; + } + if (fun) { + this.fun = fun; + } + if (number) { + this.numberTotal = number; + } + this.start(); + }, + /* + 共用函数 + 将时分秒转换成秒 + */ + toSeconds: function(t) { + var s = 0.0; + if (t) { + var p = t.split(':'); + for (i = 0; i < p.length; i++) { + s = s * 60 + parseFloat(p[i].replace(',', '.')); + } + } + return s; + }, + /*将字符变成数字形式的数组*/ + arrayInt: function(str) { + var a = str.split(','); + var b = []; + for (var i = 0; i < a.length; i++) { + if (this.isUndefined(a[i])) { + a[i] = 0; + } + if (a[i].substr( - 1) != '%') { + a[i] = parseInt(a[i]); + } + b.push(a[i]); + } + return b; + }, + /* + 共用函数 + 将对象Object标准化 + */ + standardization: function(o, n) { //n替换进o + var h = {}; + var k; + for (k in o) { + h[k] = o[k]; + } + for (k in n) { + var type = typeof(h[k]); + switch (type) { + case 'number': + h[k] = parseFloat(n[k]); + break; + default: + h[k] = n[k]; + break; + } + + } + return h; + }, + /* + 共用函数 + 搜索数组 + */ + arrIndexOf: function(arr, key) { + var re = new RegExp(key, ['']); + return (arr.toString().replace(re, '┢').replace(/[^,┢]/g, '')).indexOf('┢'); + }, + /* + 共用函数 + 去掉空格 + */ + trim: function(str) { + if (str != '') { + return str.replace(/(^\s*)|(\s*$)/g, ''); + } + return ''; + }, + /* + 共用函数 + 输出内容到控制台 + */ + log: function(val) { + try { + console.log(val); + } catch(e) {} + }, + /* + 共用函数 + 弹出提示 + */ + eject: function(er, val) { + if (!this.vars['debug']) { + return; + } + var errorVal = er[1]; + if (!this.isUndefined(val)) { + errorVal = errorVal.replace('[error]', val); + } + var value = 'error ' + er[0] + ':' + errorVal; + try { + this.log(value); + } catch(e) {} + } + }; + window.ckplayer = ckplayer; +})(); diff --git a/demo/mask_detection/web/js/ckplayer/ckplayer.min.js b/demo/mask_detection/web/js/ckplayer/ckplayer.min.js new file mode 100644 index 00000000..c9a33a83 --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/ckplayer.min.js @@ -0,0 +1,110 @@ +/* + 软件名称:ckplayer + 软件版本:X + 软件作者:http://www.ckplayer.com + --------------------------------------------------------------------------------------------- + 开发说明: + 使用的主要程序语言:javascript(js)及actionscript3.0(as3.0)(as3.0主要用于flashplayer部分的开发,不在该页面呈现) + 功能:播放视频 + 特点:兼容HTML5-VIDEO(优先)以及FlashPlayer + ===================================================================================================================== +*/ +function ckplayerConfig() { + return { + flashvars: {}, + languagePath: '', + stylePath: '', + config: { + fullInteractive: true, + delay: 30, + timeFrequency: 100, + autoLoad: true, + loadNext: 0, + definition: true, + smartRemove: true, + bufferTime: 200, + click: true, + doubleClick: true, + doubleClickInterval: 200, + keyDown: { + space: true, + left: true, + right: true, + up: true, + down: true + }, + timeJump: 10, + volumeJump: 0.1, + timeScheduleAdjust: 1, + previewDefaultLoad: true, + promptSpotTime: false, + buttonMode: { + player: false, + controlBar: false, + timeSchedule: true, + volumeSchedule: true + }, + liveAndVod: { + open: false, + vodTime: 2, + start: 'start' + }, + errorNum: 3, + playCorrect: false, + timeCorrect: true, + m3u8Definition: {}, + m3u8MaxBufferLength: 30, + split: '|', + timeStamp: '', + mobileVolumeBarShow: false, + addCallback: 'adPlay,adPause,playOrPause,videoPlay,videoPause,videoMute,videoEscMute,videoClear,changeVolume,fastBack,fastNext,videoSeek,newVideo,getMetaDate,videoRotation,videoBrightness,videoContrast,videoSaturation,videoHue,videoZoom,videoProportion,videoError,addListener,removeListener,addElement,getElement,deleteElement,elementShow,animate,animateResume,animatePause,deleteAnimate,changeConfig,getConfig,openUrl,fullScreen,quitFullScreen,switchFull,screenshot,custom,changeControlBarShow,getCurrentSrc,changeDefinition' + }, + menu: { + ckkey: '', + name: '', + link: '', + version: '', + domain: '', + more: [] + }, + style: { + loading: { + file: 'data:image/swf;base64,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', + align: 'center', + vAlign: 'middle', + offsetX: -100, + offsetY: -40 + }, + logo: { + file: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAUCAYAAAD4BKGuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAVTSURBVHja1Fl/aJVVGP4cw/mH5tUWi3I53cA0WbeIzMgaq6lQoVawm0S6glHhIKM/TELICotqCxMSGWQRdFfRLEhc9mMxqA0rbdS2wsV0GkZXuaKUWlHvgeeNh7f3u1du3Ft74eGcnXu+c873vD/Pt0nZbDZyZL2gWZAQTBH8IjggeEjgPZASPIB+g/P7EsGT6J/BfHfjHFIv2Jpjj/+dlDskvCm42Jk7X3C7YJOgw/z2oOBGwdEYRW0RVAjOCZ4ugNggqwU3CTLRBJFyQ+xuwVRY14igB78tE9QKpgmeEHwkGKRnq9AeMesHRWwEsYGUxwSdBZ51ecweE4Lct0DsOVjaZvptA8jfC4JfghWpXIJ2jMY+EDShf1pwh6DvX5x1GtpDE43cNFlfhyFWpQ9xd5FgFo3fRi++C+2nCBNBRgU3O6RsEyyEQv4QLMb4CcE9RlFBLqS1WZ6BZ83A35ofVhuvfE5QJrjWebdgCJOx51qM1QgewbMzsO57MDQrB9DeC8ObHd5Xyb2eiNiQQxmtgkZBr+OuZwV7BIcF1RgbF1wTE2MbEccX48VY9sMzBilhTke/m+b1Q9lefpgruI7OsYhIGzPJuAnn3+6EM7vu1YKl5vkrYRSfCGZivCxoMklk7M5j6eFlXyRNRSAvAoFf0Fo/CC7LkbwuQjsZsf0qwbuI9wlYgIqGl6NEzDYibJ/gbmAfxpKoMDRcaSK8xZzjZbK+NMhSYoNSngV5e+ksKXp+JdqZwDDmdpSbsqa9gNAyi5JalSGv3iQ+dtNK9HvI+sNBh2AhvNYVaH+msRtAdsa4ehoKCuQsoP2PY8+kCSkJ5IRWjD2FZ4/BOFSWYv9KhI40eUKQ31CqdnLM1c1OOnHufKSS+iEZvgHNhji8g1yT5VZKdCnHO+ajvrYK/I7GkuSWjwvq8Mzl5M79NF89aCHaBNXmWv0sQVUUZEDwsDnbr2i9s31lKyGuFs7kITEBC+snJaToRYIFrRN0CeYgoSUxJ23WUm85eB41b4IUuIvGtyIMVMY8lzHGMoYworF7J/onKYk10/wVQL6zXYr+Zq9aOEhuXZPDel8Q3If+HMzTeHPKlForEK+mws3SMfH2UMxNLIJbasKsoIQZwVLbKFkN4T1C3HxUMM+EkCAfgjwNV40Y304KriOP+jIHqa+jvYsqnH/kqzKaGCFZxWnoTqooxky8+dHUsOGwr6Jfi9jmlVVTHGLnot9L3qGWqCToWYYRF5fDa96mtb93yI2g8B0IWxlTHWmi/hOG00D4mEJfJ5WhQX7ySCsDUaNkJeud6+sgXCgs3OLEG2/xdZSh10JBeiB1zQU0HuQdSib60rOdm9kFToIL8hmFiRHzm1YM0ylet5k579OFpcUk4I0oD0/QuJ7tcBy5ERY6ixdrh5uNwN3bUV7pd4E+J958HmPxbRRydqK/in6vxj5aH9din/udEPKtuU1GqBL24xJwBInQWiHLcbQVKBXTzkVpHP0tWHsIpZUqPeWcrScXuX2ImRkqlufBhdQl15ig3WLKH0/SeAmtD+uprBqGx1ThhlWN5LKG4lcNKbDblFDjVDU0wWK7yLLqnPNk6cKzKsfXt1GQmQQXSuwymhd3tr9lkvPJMUV152kc2PsmUEMxtzdPRk2SNX2DQ3Vhr02Is18LXjHVAz/bG0NEK8johus3UBiwyfkYlDkQUyLaWrwZBrbHMaB8Z3PJLaYk8IIVKKPSJdxbv3ecynNzLNr33GKLV1YVW4IyfycXfq0UxP4X5HJdXCqX4Wv0AKqYkkipw4LG6WxMNi+GhAtH+M/K8wVe7wuWvwQYAFT+UsGCXmX3AAAAAElFTkSuQmCC', + align: 'right', + vAlign: 'top', + offsetX: -100, + offsetY: 10 + }, + advertisement: { + time: 5, + method: 'get', + videoForce: false, + videoVolume: 0.8, + skipButtonShow: true, + linkButtonShow: true, + muteButtonShow: true, + closeButtonShow: true, + closeOtherButtonShow: true, + frontSkipButtonDelay: 1, + insertSkipButtonDelay: 0, + endSkipButtonDelay: 0, + frontStretched: 2, + insertStretched: 2, + pauseStretched: 2, + endStretched: 2 + }, + video: { + defaultWidth: 4, + defaultHeight: 3 + } + } + } +} +!(function(){var javascriptPath='';!function(){var scriptList=document.scripts,thisPath=scriptList[scriptList.length-1].src;javascriptPath=thisPath.substring(0,thisPath.lastIndexOf('/')+1)}();var ckplayer=function(obj){this.config={videoDbClick:true,errorTime:100,videoDrawImage:false,adSkipClick:'javaScript->adjump'};this.varsConfig={playerID:'',container:'',variable:'ckplayer',volume:0.8,poster:'',autoplay:false,loop:false,live:false,duration:0,seek:0,drag:'',front:'',next:'',loaded:'',flashplayer:false,html5m3u8:false,track:null,cktrack:null,preview:null,prompt:null,video:null,config:'',type:'',crossorigin:'',crossdomain:'',unescape:false,mobileCkControls:false,mobileAutoFull:false,playbackrate:1,h5container:'',debug:false,adfront:'',adfronttime:'',adfrontlink:'',adpause:'',adpausetime:'',adpauselink:'',adinsert:'',adinserttime:'',adinsertlink:'',inserttime:'',adend:'',adendtime:'',adendlink:'',advertisements:''};this.vars={};this.language={volume:'音量:',play:'点击播放',pause:'点击暂停',full:'点击全屏',escFull:'退出全屏',mute:'点击静音',escMute:'取消静音',front:'上一集',next:'下一集',definition:'点击选择清晰度',playbackRate:'点击选择速度',error:'加载出错',adTime:'广告{$second}秒',skipAd:'跳过广告',skipAdTime:'{$second}秒后可跳过广告',adLink:'查看详情'};this.contextMenu=[['ckplayer','link','http://www.ckplayer.com','_blank'],['version:X','default','line']];this.errorList=[['000','Object does not exist'],['001','Variables type is not a object'],['002','Video object does not exist'],['003','Video object format error'],['004','Video object format error'],['005','Video object format error'],['006','[error] does not exist '],['007','Ajax error'],['008','Ajax error'],['009','Ajax object format error'],['010','Ajax.status:[error]']];this.playbackRateArr=[[0.5,'0.5倍'],[1,'正常'],[1.25,'1.25倍'],[1.5,'1.5倍'],[2,'2倍速'],[4,'4倍速']];this.playbackRateDefault=1;this.logo='';this.loaded=false;this.timerError=null;this.error=false;this.errorUrl=[];this.timerFull=null;this.full=false;this.timerTime=null;this.timerBuffer=null;this.isTimeButtonMove=true;this.isTimeButtonDown=false;this.isClick=false;this.timerClick=null;this.timerLoading=null;this.timerCBar=null;this.needSeek=0;this.volume=0;this.volumeTemp=0;this.time=0;this.isFirst=true;this.html5Video=true;this.pdCoor={x:0,y:0};this.playerType='';this.loadTime=0;this.body=document.body||document.documentElement;this.V=null;this.listenerJsArr=[];this.buttonLen=0;this.buttonArr=[];this.buttonWidth={};this.elementArr=[];this.elementTempArr=[];this.track=[];this.trackIndex=0;this.nowTrackShow={sn:''};this.trackElement=[];this.timerVCanvas=null;this.animateArray=[];this.animateElementArray=[];this.animatePauseArray=[];this.previewStart=0;this.previewDiv=null;this.previewTop=null;this.previewWidth=120;this.previewTween=null;this.isM3u8=false;this.promptArr=[];this.promptElement=null;this.ckplayerConfig={};this.showFace=true;this.errorAdd=false;this.errorSend=false;this.controlBarIsShow=true;this.videoScale=1;this.fontFamily='"Microsoft YaHei"; YaHei; "\5FAE\8F6F\96C5\9ED1"; SimHei; "\9ED1\4F53";Arial';this.timeSliderLeftTemp=0;this.durationSendJS=false;this.adAnalysisEnd=false;this.advertisements={};this.isFirstTimePlay=true;this.adType='';this.adI=0;this.videoTemp={src:'',source:'',currentSrc:'',loop:false};this.adTimeAllTotal=0;this.adTimeTotal=0;this.adCountDownObj=null;this.adPlayStart=false;this.adPlayerPlay=false;this.adIsPause=false;this.adVideoMute=false;this.adIsVideoTime=false;this.endAdPlay=false;this.adPauseShow=false;this.adReset=false;this.adVideoPlay=false;if(obj){this.embed(obj)}};ckplayer.prototype={embed:function(c){if(window.location.href.substr(0,7)=='file://'){alert('Please use the HTTP protocol to open the page');return}if(c==undefined||!c){this.eject(this.errorList[0]);return}if(typeof(c)!='object'){this.eject(this.errorList[1])}this.vars=this.standardization(this.varsConfig,c);if(!this.vars['mobileCkControls']&&this.isMobile()){this.vars['flashplayer']=false;this.showFace=false}var videoString=this.vars['video'];if(!videoString){this.eject(this.errorList[2]);return}if(typeof(videoString)=='string'){if(videoString.substr(0,3)=='CK:'||videoString.substr(0,3)=='CE:'||videoString.substr(8,3)=='CK:'||videoString.substr(8,3)=='CE:'){this.vars['flashplayer']=true}}if(typeof(videoString)=='object'){if(videoString.length>1){if(videoString[0][0].substr(0,3)=='CK:'||videoString[0][0].substr(0,3)=='CE:'||videoString[0][0].substr(8,3)=='CK:'||videoString[0][0].substr(8,3)=='CE:'){this.vars['flashplayer']=true}}}if(this.vars['config']){this.ckplayerConfig=eval(this.vars['config']+'()')}else{this.ckplayerConfig=ckplayerConfig()}if((!this.supportVideo()&&this.vars['flashplayer']!='')||(this.vars['flashplayer']&&this.uploadFlash())||!this.isMsie()){this.html5Video=false;this.getVideo()}else if(videoString){this.analysedVideoUrl(videoString);return this}else{this.eject(this.errorList[2])}},analysedVideoUrl:function(video){var i=0,y=0;var thisTemp=this;this.VA=[];if(typeof(video)=='string'){if(video.substr(0,8)!='website:'){this.VA=[[video,'','',0]];var fileExt=this.getFileExt(video);switch(fileExt){case'.mp4':this.VA[0][1]='video/mp4';break;case'.ogg':this.VA[0][1]='video/ogg';break;case'.webm':this.VA[0][1]='video/webm';break;default:break}this.getVideo()}else{if(this.html5Video){var ajaxObj={url:video.substr(8),success:function(data){if(data){thisTemp.analysedUrl(data)}else{thisTemp.eject(thisTemp.errorList[5]);this.VA=video;thisTemp.getVideo()}}};this.ajax(ajaxObj)}else{this.VA=video;this.getVideo()}}}else if(typeof(video)=='object'){if(!this.isUndefined(typeof(video.length))){if(!this.isUndefined(typeof(video[0].length))){this.VA=video}this.getVideo()}else{if(!this.isUndefined(video['type'])){this.VA.push([video['file'],video['type'],'',0]);this.getVideo()}else{this.eject(this.errorList[5])}}}else{this.eject(this.errorList[4])}},analysedUrl:function(data){this.vars=this.standardization(this.vars,data);if(!this.isUndefined(data['video'])){this.vars['video']=data['video']}this.analysedVideoUrl(this.vars['video'])},getHtml5Video:function(){var va=this.VA;var nva=[];var mobile=false;var video=document.createElement('video');var codecs=function(type){var cod='';switch(type){case'video/mp4':cod='avc1.4D401E, mp4a.40.2';break;case'video/ogg':cod='theora, vorbis';break;case'video/webm':cod='vp8.0, vorbis';break;default:break}return cod};var supportType=function(vidType,codType){if(!video.canPlayType){this.html5Video=false;return}var isSupp=video.canPlayType(vidType+';codecs="'+codType+'"');if(isSupp==''){return false}return true};if(this.vars['flashplayer']||!this.isMsie()){this.html5Video=false;return}if(this.isMobile()){mobile=true}for(var i=0;i0){this.VA=nva}else{if(!mobile){this.html5Video=false}}},getVideo:function(){var thisTemp=this;var v=this.vars;if(!this.adAnalysisEnd&&(v['adfront']!=''||v['adpause']!=''||v['adinsert']!=''||v['adend']!=''||v['advertisements']!='')){this.adAnalysisEnd=true;this.adAnalysis();return}if(this.V){this.changeVideo();return}if(this.vars['cktrack']){this.loadTrack()}if(this.supportVideo()&&!this.vars['flashplayer']){this.getHtml5Video()}var src='',source='',poster='',loop='',autoplay='',track='';var video=v['video'];var i=0;this.CD=this.getByElement(v['container']);volume=v['volume'];if(!this.CD){this.eject(this.errorList[6],v['container']);return false}this.V=undefined;var thisPd=null;if(v['h5container']!=''){thisPd=this.getByElement(v['h5container']);if(this.isUndefined(thisPd)){thisPd=null}}var isVideoH5=null;if(v['playerID']!=''){isVideoH5=this.getByElement('#'+v['playerID']);if(this.isUndefined(isVideoH5)){isVideoH5=null}}if(thisPd!=null&&isVideoH5!=null){this.PD=thisPd}else{var playerID='ckplayer'+this.randomString();var playerDiv=document.createElement('div');playerDiv.className=playerID;this.CD.innerHTML='';this.CD.appendChild(playerDiv);this.PD=this.getByElement(playerID)}this.css(this.CD,{backgroundColor:'#000000',overflow:'hidden',position:'relative'});this.css(this.PD,{backgroundColor:'#000000',width:'100%',height:'100%',fontFamily:this.fontFamily});if(this.html5Video){this.PD.onselectstart=this.PD.ondrag=function(){return false};if(this.VA.length==1){this.videoTemp['src']=decodeURIComponent(this.VA[0][0]);src=' src="'+this.videoTemp['src']+'"'}else{var videoArr=this.VA.slice(0);videoArr=this.arrSort(videoArr);for(i=0;i'}this.videoTemp['source']=source}if(v['autoplay']){autoplay=' autoplay="autoplay"'}if(v['poster']){poster=' poster="'+v['poster']+'"'}if(v['loop']){loop=' loop="loop"'}if(v['seek']>0){this.needSeek=v['seek']}if(v['track']!=null&&v['cktrack']==null){var trackArr=v['track'];var trackDefault='';var defaultHave=false;for(i=0;i'}}var autoLoad=this.ckplayerConfig['config']['autoLoad'];var preload='';if(!autoLoad){preload=' preload="meta"'}var vid=this.randomString();var controls='';if(!this.showFace){controls=' controls="controls"'}var mobileAutoFull=v['mobileAutoFull'];var mobileautofull='';if(!mobileAutoFull){mobileautofull=' x-webkit-airplay="true" playsinline webkit-playsinline="true" x5-video-player-type="h5"'}if(isVideoH5!=null&&thisPd!=null){this.V=isVideoH5;if(v['poster']){this.V.poster=v['poster']}}else{var html='';if(!this.isM3u8){html=''}else{html=''}this.PD.innerHTML=html;this.V=this.getByElement('#'+vid)}if(this.vars['crossorigin']){this.V.crossOrigin=this.vars['crossorigin']}try{this.V.volume=volume;if(this.playbackRateArr&&this.vars['playbackrate']>-1){if(this.vars['playbackrate']-1){this.playbackRate()}if(v['autoplay']){this.loadingStart(true)}}this.playerLoad()}else{this.embedSWF()}},arrayDel:function(arr){if(arr.length==0){return null}var newArr=[];for(var i=0;i0){return newArr}return null},adAnalysis:function(){var thisTemp=this;var v=this.vars;var isAdvShow=[];var i=0;if(v['advertisements']!=''&&v['advertisements'].substr(0,8)=='website:'){var ajaxObj={url:v['advertisements'].substr(8),success:function(data){if(data){var newData={};var val=null;try{if(!thisTemp.isUndefined(data['front'])){val=thisTemp.arrayDel(data['front']);if(!thisTemp.isUndefined(val)){newData['front']=val}val=thisTemp.arrayDel(data['pause']);if(!thisTemp.isUndefined(val)){newData['pause']=val}val=thisTemp.arrayDel(data['insert']);if(!thisTemp.isUndefined(val)){newData['insert']=val;if(!thisTemp.isUndefined(data['inserttime'])){newData['inserttime']=thisTemp.arrayInt(data['inserttime']);isAdvShow=[];for(i=0;i0){var adLinkLen=adlink.length,adTimeLen=adtime.length;if(v[adLink]==''){adLinkLen=0;adlink=[]}if(v[adTime]==''){adTimeLen=0;adtime=[]}if(adLinkLen0?parseInt(adtime[i]):this.ckplayerConfig['style']['advertisement']['time'],link:adlink[i]};adList.push(obj)}}if(this.isUndefined(this.advertisements)){this.advertisements={}}if(adList.length>0){this.advertisements[adType]=adList}}}},playerLoad:function(){var thisTemp=this;if(this.isFirst){this.isFirst=false;setTimeout(function(){thisTemp.loadedHandler()},1)}},addVEvent:function(){var thisTemp=this;var eventVideoClick=function(event){thisTemp.videoClick()};this.addListenerInside('click',eventVideoClick);this.addListenerInside('click',eventVideoClick,this.MDC);this.timerErrorFun();var eventJudgeIsLive=function(event){thisTemp.sendJS('loadedmetadata');if(typeof(thisTemp.V.duration)=='number'&&thisTemp.V.duration>1){thisTemp.sendJS('duration',thisTemp.V.duration);thisTemp.formatInserttime(thisTemp.V.duration);if(thisTemp.adPlayerPlay){thisTemp.advertisementsTime(thisTemp.V.duration+1)}thisTemp.durationSendJS=true}thisTemp.judgeIsLive()};this.addListenerInside('loadedmetadata',eventJudgeIsLive);var eventPlaying=function(event){thisTemp.playingHandler();thisTemp.sendJS('play');thisTemp.sendJS('paused',false);if(!thisTemp.durationSendJS&&typeof(thisTemp.V.duration)=='number'&&thisTemp.V.duration>0){thisTemp.durationSendJS=true;thisTemp.sendJS('duration',thisTemp.V.duration);thisTemp.formatInserttime(thisTemp.V.duration)}};this.addListenerInside('playing',eventPlaying);var eventPause=function(event){thisTemp.pauseHandler();thisTemp.sendJS('pause');thisTemp.sendJS('paused',true)};this.addListenerInside('pause',eventPause);var eventEnded=function(event){thisTemp.endedHandler()};this.addListenerInside('ended',eventEnded);var eventTimeupdate=function(event){if(thisTemp.timerLoading!=null){thisTemp.loadingStart(false)}if(thisTemp.time){if(!thisTemp.adPlayerPlay){thisTemp.sendJS('time',thisTemp.time);if(!thisTemp.isUndefined(thisTemp.advertisements['insert'])){thisTemp.checkAdInsert(thisTemp.time)}if(!thisTemp.isUndefined(thisTemp.advertisements['other'])){thisTemp.checkAdOther(thisTemp.time)}if(thisTemp.time<3&&thisTemp.adReset){thisTemp.adReset=false;thisTemp.endedAdReset()}}else{thisTemp.adPlayerTimeHandler(thisTemp.time)}}};this.addListenerInside('timeupdate',eventTimeupdate);var eventWaiting=function(event){thisTemp.loadingStart(true)};this.addListenerInside('waiting',eventWaiting);var eventSeeking=function(event){thisTemp.sendJS('seek','start')};this.addListenerInside('seeking',eventSeeking);var eventSeeked=function(event){thisTemp.seekedHandler();thisTemp.sendJS('seek','ended')};this.addListenerInside('seeked',eventSeeked);var eventVolumeChange=function(event){try{thisTemp.volumechangeHandler();thisTemp.sendJS('volume',thisTemp.volume||thisTemp.V.volume)}catch(event){}};this.addListenerInside('volumechange',eventVolumeChange);var eventFullChange=function(event){var fullState=document.fullScreen||document.mozFullScreen||document.webkitIsFullScreen;thisTemp.sendJS('full',fullState)};this.addListenerInside('fullscreenchange',eventFullChange);this.addListenerInside('webkitfullscreenchange',eventFullChange);this.addListenerInside('mozfullscreenchange',eventFullChange);if(this.showFace){this.interFace()}},resetPlayer:function(){this.timeTextHandler();if(this.showFace){this.timeProgress(0,1);this.changeLoad(0);this.initPlayPause();this.definition();this.showFrontNext();this.deletePrompt();this.deletePreview();this.trackHide();this.resetTrack();this.trackElement=[];this.track=[]}},interFace:function(){this.showFace=true;var thisTemp=this;var html='';var i=0;var bWidth=38,bHeight=38;var bBgColor='#FFFFFF',bOverColor='#0782F5';var timeInto=this.formatTime(0)+' / '+this.formatTime(this.vars['duration']);var randomS=this.randomString(10);var controlBarBgID='controlbgbar'+randomS,controlBarID='controlbar'+randomS,timeProgressBgID='timeprogressbg'+randomS,loadProgressID='loadprogress'+randomS,timeProgressID='timeprogress'+randomS,timeBOBGID='timebobg'+randomS,timeBOID='timebo'+randomS,timeBWID='timebw'+randomS,timeTextID='timetext'+randomS,playID='play'+randomS,pauseID='pause'+randomS,frontID='front'+randomS,nextID='next'+randomS,fullID='full'+randomS,escFullID='escfull'+randomS,muteID='mute'+randomS,escMuteID='escmute'+randomS,volumeID='volume'+randomS,volumeDbgID='volumedbg'+randomS,volumeBgID='volumebg'+randomS,volumeUpID='volumeup'+randomS,volumeBOID='volumebo'+randomS,volumeBWID='volumebw'+randomS,definitionID='definition'+randomS,definitionPID='definitionp'+randomS,playbackRateID='playbackrate'+randomS,playbackRatePID='playbackratep'+randomS,promptBgID='promptbg'+randomS,promptID='prompt'+randomS,dlineID='dline'+randomS,menuID='menu'+randomS,pauseCenterID='pausecenter'+randomS,loadingID='loading'+randomS,errorTextID='errortext'+randomS,logoID='logo'+randomS,adBackgroundID='background'+randomS,adElementID='adelement'+randomS,adBarID='adBar'+randomS,adSkipID='adskip'+randomS,adTimeID='adtime'+randomS,adLinkID='adlink'+randomS,adMuteID='admute'+randomS,adEscMuteID='adescmute'+randomS,adPauseCloseID='adpauseclose'+randomS;var controlBarBg=document.createElement('div'),controlBar=document.createElement('div'),timeProgressBg=document.createElement('div'),timeBoBg=document.createElement('div'),pauseCenter=document.createElement('div'),errorText=document.createElement('div'),promptBg=document.createElement('div'),prompt=document.createElement('div'),menuDiv=document.createElement('div'),definitionP=document.createElement('div'),playbackrateP=document.createElement('div'),loading=document.createElement('div'),logo=document.createElement('div'),adBackground=document.createElement('div'),adElement=document.createElement('div'),adBar=document.createElement('div'),adLink=document.createElement('div'),adPauseClose=document.createElement('div');controlBarBg.className=controlBarBgID;controlBar.className=controlBarID;timeProgressBg.className=timeProgressBgID;timeBoBg.className=timeBOBGID;promptBg.className=promptBgID;prompt.className=promptID;menuDiv.className=menuID;definitionP.className=definitionPID;playbackrateP.className=playbackRatePID;pauseCenter.className=pauseCenterID;loading.className=loadingID;logo.className=logoID;errorText.className=errorTextID;adBackground.className=adBackgroundID;adElement.className=adElementID;adBar.className=adBarID;adLink.className=adLinkID;adPauseClose.className=adPauseCloseID;this.PD.appendChild(controlBarBg);this.PD.appendChild(controlBar);this.PD.appendChild(timeProgressBg);this.PD.appendChild(timeBoBg);this.PD.appendChild(promptBg);this.PD.appendChild(prompt);this.PD.appendChild(definitionP);this.PD.appendChild(playbackrateP);this.PD.appendChild(pauseCenter);this.PD.appendChild(loading);this.PD.appendChild(errorText);this.PD.appendChild(logo);this.PD.appendChild(adBackground);this.PD.appendChild(adElement);this.PD.appendChild(adBar);this.PD.appendChild(adLink);this.PD.appendChild(adPauseClose);this.body.appendChild(menuDiv);if(this.vars['live']){timeInto=this.getNowDate()}html+='
    '+this.newCanvas(playID,bWidth,bHeight)+'
    ';html+='
    '+this.newCanvas(pauseID,bWidth,bHeight)+'
    ';html+='
    ';html+='
    '+this.newCanvas(frontID,bWidth,bHeight)+'
    ';html+='
    ';html+='
    '+this.newCanvas(nextID,bWidth,bHeight)+'
    ';html+='
    ';html+='
    '+timeInto+'
    ';html+='
    '+this.newCanvas(fullID,bWidth,bHeight)+'
    ';html+='
    '+this.newCanvas(escFullID,bWidth,bHeight)+'
    ';html+='
    ';html+='
    ';html+='
    ';html+='
    ';html+='
    ';html+='
    ';html+='
    '+this.newCanvas(muteID,bWidth,bHeight)+'
    ';html+='
    '+this.newCanvas(escMuteID,bWidth,bHeight)+'
    ';html+='
    ';this.getByElement(controlBarID).innerHTML=html;this.getByElement(timeProgressBgID).innerHTML='
    ';this.getByElement(timeBOBGID).innerHTML='
    ';this.getByElement(pauseCenterID).innerHTML=this.newCanvas(pauseCenterID,80,80);this.getByElement(loadingID).innerHTML=this.newCanvas(loadingID,60,60);this.getByElement(errorTextID).innerHTML=this.language['error'];html='
    '+this.language['adTime'].replace('{$second}',0)+'
    ';html+='
    '+this.newCanvas(adMuteID,30,30)+'
    ';html+='
    '+this.newCanvas(adEscMuteID,30,30)+'
    ';html+='
    ';this.getByElement(adBarID).innerHTML=html;this.getByElement(adLinkID).innerHTML=this.language['adLink'];this.getByElement(adPauseCloseID).innerHTML=this.newCanvas(adPauseCloseID,20,20);if(this.ckplayerConfig['style']['logo']){if(this.ckplayerConfig['style']['logo']['file']){var logoFile=this.ckplayerConfig['style']['logo']['file'];if(logoFile.substr(0,15)=='data:image/png;'||logoFile.substr(0,15)=='data:image/jpg;'||logoFile.substr(0,16)=='data:image/jpeg;'){this.getByElement(logoID).innerHTML=''}}}else{this.getByElement(logoID).innerHTML=this.vars['logo']||this.logo||''}var pd=this.PD;this.CB={controlBarBg:this.getByElement(controlBarBgID,pd),controlBar:this.getByElement(controlBarID,pd),promptBg:this.getByElement(promptBgID,pd),prompt:this.getByElement(promptID,pd),timeProgressBg:this.getByElement(timeProgressBgID,pd),loadProgress:this.getByElement(loadProgressID,pd),timeProgress:this.getByElement(timeProgressID,pd),timeBoBg:this.getByElement(timeBOBGID,pd),timeButton:this.getByElement(timeBOID,pd),timeText:this.getByElement(timeTextID,pd),play:this.getByElement(playID,pd),front:this.getByElement(frontID,pd),next:this.getByElement(nextID,pd),pause:this.getByElement(pauseID,pd),definition:this.getByElement(definitionID,pd),definitionP:this.getByElement(definitionPID,pd),definitionLine:this.getByElement(dlineID+'-rb',pd),playbackrate:this.getByElement(playbackRateID,pd),playbackrateP:this.getByElement(playbackRatePID,pd),playbackrateLine:this.getByElement(dlineID+'-rc',pd),full:this.getByElement(fullID,pd),escFull:this.getByElement(escFullID,pd),mute:this.getByElement(muteID,pd),escMute:this.getByElement(escMuteID,pd),volume:this.getByElement(volumeID,pd),volumeBg:this.getByElement(volumeBgID,pd),volumeUp:this.getByElement(volumeUpID,pd),volumeBO:this.getByElement(volumeBOID,pd),pauseCenter:this.getByElement(pauseCenterID,pd),menu:this.getByElement(menuID),loading:this.getByElement(loadingID,pd),loadingCanvas:this.getByElement(loadingID+'-canvas',pd),errorText:this.getByElement(errorTextID,pd),logo:this.getByElement(logoID,pd),playLine:this.getByElement(dlineID+'-la',pd),frontLine:this.getByElement(dlineID+'-lb',pd),nextLine:this.getByElement(dlineID+'-lc',pd),fullLine:this.getByElement(dlineID+'-ra'),definitionLine:this.getByElement(dlineID+'-rb',pd),muteLine:this.getByElement(dlineID+'-rd',pd),adBackground:this.getByElement(adBackgroundID,pd),adElement:this.getByElement(adElementID,pd),adBar:this.getByElement(adBarID,pd),adSkip:this.getByElement(adSkipID,pd),adTime:this.getByElement(adTimeID,pd),adLink:this.getByElement(adLinkID,pd),adMute:this.getByElement(adMuteID,pd),adEscMute:this.getByElement(adEscMuteID,pd),adPauseClose:this.getByElement(adPauseCloseID,pd)};this.buttonWidth={play:bWidth,full:bWidth,front:bWidth,next:bWidth,mute:bWidth};this.css(controlBarBgID,{width:'100%',height:bHeight+'px',backgroundColor:'#000000',position:'absolute',bottom:'0px',filter:'alpha(opacity:0.8)',opacity:'0.8',zIndex:'990'});this.css(controlBarID,{width:'100%',height:bHeight+'px',position:'absolute',bottom:'0px',zIndex:'990'});this.css(pauseCenterID,{width:'80px',height:'80px',borderRadius:'50%',position:'absolute',display:'none',cursor:'pointer',zIndex:'996'});this.css(loadingID,{width:'60px',height:'60px',position:'absolute',display:'none',zIndex:'996'});this.css(errorTextID,{width:'120px',height:'30px',lineHeight:'30px',color:'#FFFFFF',fontSize:'14px',textAlign:'center',position:'absolute',display:'none',zIndex:'101',cursor:'default',zIndex:'996'});this.css(logoID,{height:'30px',lineHeight:'30px',color:'#FFFFFF',fontFamily:'Arial',fontSize:'28px',textAlign:'center',position:'absolute',float:'left',left:'-1000px',top:'20px',zIndex:'996',filter:'alpha(opacity:0.8)',opacity:'0.8',cursor:'default'});this.css(this.CB['loadingCanvas'],{transform:'rotate(0deg)',msTransform:'rotate(0deg)',mozTransform:'rotate(0deg)',webkitTransform:'rotate(0deg)',oTransform:'rotate(0deg)'});this.css([promptBgID,promptID],{height:'30px',lineHeight:'30px',color:'#FFFFFF',fontSize:'14px',textAlign:'center',position:'absolute',borderRadius:'5px',paddingLeft:'5px',paddingRight:'5px',bottom:'0px',display:'none',zIndex:'995'});this.css(promptBgID,{backgroundColor:'#000000',filter:'alpha(opacity:0.5)',opacity:'0.5'});this.css(timeProgressBgID,{width:'100%',height:'6px',backgroundColor:'#3F3F3F',overflow:'hidden',position:'absolute',bottom:'38px',zIndex:'888'});this.css([loadProgressID,timeProgressID],{width:'1px',height:'6px',position:'absolute',bottom:'38px',top:'0px',zIndex:'991'});this.css(loadProgressID,'backgroundColor','#6F6F6F');this.css(timeProgressID,'backgroundColor',bOverColor);this.css(timeBOBGID,{width:'100%',height:'14px',overflow:'hidden',position:'absolute',bottom:'34px',cursor:'pointer',zIndex:'992'});this.css(timeBOID,{width:'14px',height:'14px',overflow:'hidden',borderRadius:'50%',backgroundColor:bBgColor,cursor:'pointer',position:'absolute',top:'0px',zIndex:'200'});this.css(timeBWID,{width:'8px',height:'8px',overflow:'hidden',borderRadius:'50%',position:'absolute',backgroundColor:bOverColor,left:'3px',top:'3px'});this.css(timeTextID,{lineHeight:bHeight+'px',color:'#FFFFFF',fontFamily:'arial',fontSize:'16px',paddingLeft:'10px',float:'left',overflow:'hidden',cursor:'default'});this.css([dlineID+'-la',dlineID+'-lb',dlineID+'-lc',dlineID+'-ra',dlineID+'-rb',dlineID+'-rc',dlineID+'-rd'],{width:'0px',height:bHeight+'px',overflow:'hidden',borderLeft:'1px solid #303030',borderRight:'1px solid #151515',filter:'alpha(opacity:0.9)',opacity:'0.9'});this.css([dlineID+'-la',dlineID+'-lb',dlineID+'-lc'],'float','left');this.css([dlineID+'-ra',dlineID+'-rb',dlineID+'-rc',dlineID+'-rd'],'float','right');this.css([dlineID+'-lb',dlineID+'-lc',dlineID+'-rb',dlineID+'-rc'],'display','none');this.css([playID,pauseID,frontID,nextID],{width:bWidth+'px',height:bHeight+'px',float:'left',overflow:'hidden',cursor:'pointer'});this.css([frontID,nextID],'display','none');this.initPlayPause();this.css([muteID,escMuteID],{width:bWidth+'px',height:bHeight+'px',float:'right',overflow:'hidden',cursor:'pointer'});if(this.vars['volume']>0){this.css(escMuteID,'display','none')}else{this.css(muteID,'display','none')}if(!this.ckplayerConfig['config']['mobileVolumeBarShow']&&this.isMobile()){this.css([muteID,escMuteID,volumeID,volumeDbgID,dlineID+'-rd'],{display:'none'})}this.css([volumeID,volumeDbgID],{width:'110px',height:bHeight+'px',overflow:'hidden',float:'right'});this.css(volumeDbgID,{position:'absolute'});this.css([volumeBgID,volumeUpID],{width:'100px',height:'6px',overflow:'hidden',borderRadius:'5px',cursor:'pointer'});this.css(volumeBgID,{position:'absolute',top:'16px'});this.css(volumeBgID,'backgroundColor','#666666');this.css(volumeUpID,'backgroundColor',bOverColor);this.buttonWidth['volume']=100;this.css(volumeBOID,{width:'12px',height:'12px',overflow:'hidden',borderRadius:'50%',position:'absolute',backgroundColor:bBgColor,top:'13px',left:'0px',cursor:'pointer'});this.css(volumeBWID,{width:'6px',height:'6px',overflow:'hidden',borderRadius:'50%',position:'absolute',backgroundColor:bOverColor,left:'3px',top:'3px'});this.css(definitionID,{lineHeight:bHeight+'px',color:'#FFFFFF',float:'right',fontSize:'14px',textAlign:'center',overflow:'hidden',display:'none',cursor:'pointer'});this.css(definitionPID,{lineHeight:(bHeight-8)+'px',color:'#FFFFFF',overflow:'hidden',position:'absolute',bottom:'4px',backgroundColor:'#000000',textAlign:'center',zIndex:'995',cursor:'pointer',display:'none'});this.css(playbackRateID,{lineHeight:bHeight+'px',color:'#FFFFFF',float:'right',fontSize:'14px',textAlign:'center',overflow:'hidden',display:'none',cursor:'pointer'});this.css(playbackRatePID,{lineHeight:(bHeight-8)+'px',color:'#FFFFFF',overflow:'hidden',position:'absolute',bottom:'4px',backgroundColor:'#000000',textAlign:'center',zIndex:'995',cursor:'pointer',display:'none'});this.css([fullID,escFullID],{width:bWidth+'px',height:bHeight+'px',float:'right',overflow:'hidden',cursor:'pointer'});this.css(escFullID,'display','none');this.css(adBackgroundID,{width:'100%',height:'100%',backgroundColor:'#000000',position:'absolute',top:'0px',zIndex:'997',display:'none'});this.css(adElementID,{position:'absolute',overflow:'hidden',top:'0px',zIndex:'998',float:'center',display:'none'});this.css(adBarID,{position:'absolute',overflow:'hidden',top:'10px',right:'10px',zIndex:'999',textAlign:'right',display:'none'});this.css(adTimeID,{backgroundColor:'#000000',color:'#FF0000',paddingLeft:'10px',paddingRight:'10px',lineHeight:(bHeight-8)+'px',marginLeft:'5px',float:'right',cursor:'pointer'});this.css([adMuteID,adEscMuteID],{backgroundColor:'#000000',width:'30px',height:'30px',marginLeft:'5px',float:'right',display:'none',cursor:'pointer'});this.css(adSkipID,{backgroundColor:'#000000',lineHeight:(bHeight-8)+'px',color:'#FFFFFF',paddingLeft:'10px',paddingRight:'10px',float:'right',display:'none',cursor:'pointer'});this.css(adLinkID,{backgroundColor:'#ea5503',lineHeight:(bHeight-8)+'px',color:'#FFFFFF',paddingLeft:'10px',paddingRight:'10px',position:'absolute',overflow:'hidden',bottom:'10px',right:'10px',zIndex:'999',display:'none'});this.css(adPauseCloseID,{backgroundColor:'#f7f7f7',widht:'20px',height:'20px',position:'absolute',overflow:'hidden',zIndex:'999',top:'60px',left:'30px',borderRadius:'20px',display:'none',cursor:'pointer'});var cPlay=this.getByElement(playID+'-canvas').getContext('2d');var cPlayFillRect=function(){thisTemp.canvasFill(cPlay,[[12,10],[29,19],[12,28]])};cPlay.fillStyle=bBgColor;cPlayFillRect();var cPlayOver=function(event){cPlay.clearRect(0,0,bWidth,bHeight);cPlay.fillStyle=bOverColor;cPlayFillRect()};var cPlayOut=function(event){cPlay.clearRect(0,0,bWidth,bHeight);cPlay.fillStyle=bBgColor;cPlayFillRect()};this.addListenerInside('mouseover',cPlayOver,this.getByElement(playID+'-canvas'));this.addListenerInside('mouseout',cPlayOut,this.getByElement(playID+'-canvas'));var cPause=this.getByElement(pauseID+'-canvas').getContext('2d');var cPauseFillRect=function(){thisTemp.canvasFillRect(cPause,[[10,10,5,18],[22,10,5,18]])};cPause.fillStyle=bBgColor;cPauseFillRect();var cPauseOver=function(event){cPause.clearRect(0,0,bWidth,bHeight);cPause.fillStyle=bOverColor;cPauseFillRect()};var cPauseOut=function(event){cPause.clearRect(0,0,bWidth,bHeight);cPause.fillStyle=bBgColor;cPauseFillRect()};this.addListenerInside('mouseover',cPauseOver,this.getByElement(pauseID+'-canvas'));this.addListenerInside('mouseout',cPauseOut,this.getByElement(pauseID+'-canvas'));var cFront=this.getByElement(frontID+'-canvas').getContext('2d');var cFrontFillRect=function(){thisTemp.canvasFill(cFront,[[16,19],[30,10],[30,28]]);thisTemp.canvasFillRect(cFront,[[8,10,5,18]])};cFront.fillStyle=bBgColor;cFrontFillRect();var cFrontOver=function(event){cFront.clearRect(0,0,bWidth,bHeight);cFront.fillStyle=bOverColor;cFrontFillRect()};var cFrontOut=function(event){cFront.clearRect(0,0,bWidth,bHeight);cFront.fillStyle=bBgColor;cFrontFillRect()};this.addListenerInside('mouseover',cFrontOver,this.getByElement(frontID+'-canvas'));this.addListenerInside('mouseout',cFrontOut,this.getByElement(frontID+'-canvas'));var cNext=this.getByElement(nextID+'-canvas').getContext('2d');var cNextFillRect=function(){thisTemp.canvasFill(cNext,[[8,10],[22,19],[8,28]]);thisTemp.canvasFillRect(cNext,[[25,10,5,18]])};cNext.fillStyle=bBgColor;cNextFillRect();var cNextOver=function(event){cNext.clearRect(0,0,bWidth,bHeight);cNext.fillStyle=bOverColor;cNextFillRect()};var cNextOut=function(event){cNext.clearRect(0,0,bWidth,bHeight);cNext.fillStyle=bBgColor;cNextFillRect()};this.addListenerInside('mouseover',cNextOver,this.getByElement(nextID+'-canvas'));this.addListenerInside('mouseout',cNextOut,this.getByElement(nextID+'-canvas'));var cFull=this.getByElement(fullID+'-canvas').getContext('2d');var cFullFillRect=function(){thisTemp.canvasFillRect(cFull,[[19,10,9,3],[25,13,3,6],[10,19,3,9],[13,25,6,3]])};cFull.fillStyle=bBgColor;cFullFillRect();var cFullOver=function(){cFull.clearRect(0,0,bWidth,bHeight);cFull.fillStyle=bOverColor;cFullFillRect()};var cFullOut=function(){cFull.clearRect(0,0,bWidth,bHeight);cFull.fillStyle=bBgColor;cFullFillRect()};this.addListenerInside('mouseover',cFullOver,this.getByElement(fullID+'-canvas'));this.addListenerInside('mouseout',cFullOut,this.getByElement(fullID+'-canvas'));var cEscFull=this.getByElement(escFullID+'-canvas').getContext('2d');var cEscFullFillRect=function(){thisTemp.canvasFillRect(cEscFull,[[20,9,3,9],[23,15,6,3],[9,20,9,3],[15,23,3,6]])};cEscFull.fillStyle=bBgColor;cEscFullFillRect();var cEscFullOver=function(){cEscFull.clearRect(0,0,bWidth,bHeight);cEscFull.fillStyle=bOverColor;cEscFullFillRect()};var cEscFullOut=function(){cEscFull.clearRect(0,0,bWidth,bHeight);cEscFull.fillStyle=bBgColor;cEscFullFillRect()};this.addListenerInside('mouseover',cEscFullOver,this.getByElement(escFullID+'-canvas'));this.addListenerInside('mouseout',cEscFullOut,this.getByElement(escFullID+'-canvas'));var cMute=this.getByElement(muteID+'-canvas').getContext('2d');var cMuteFillRect=function(){thisTemp.canvasFill(cMute,[[10,15],[15,15],[21,10],[21,28],[15,23],[10,23]]);thisTemp.canvasFillRect(cMute,[[23,15,2,8],[27,10,2,18]])};cMute.fillStyle=bBgColor;cMuteFillRect();var cMuteOver=function(){cMute.clearRect(0,0,bWidth,bHeight);cMute.fillStyle=bOverColor;cMuteFillRect()};var cMuteOut=function(){cMute.clearRect(0,0,bWidth,bHeight);cMute.fillStyle=bBgColor;cMuteFillRect()};this.addListenerInside('mouseover',cMuteOver,this.getByElement(muteID+'-canvas'));this.addListenerInside('mouseout',cMuteOut,this.getByElement(muteID+'-canvas'));var cEscMute=this.getByElement(escMuteID+'-canvas').getContext('2d');var cEscMuteFillRect=function(){thisTemp.canvasFill(cEscMute,[[10,15],[15,15],[21,10],[21,28],[15,23],[10,23]]);thisTemp.canvasFill(cEscMute,[[23,13],[24,13],[33,25],[32,25]]);thisTemp.canvasFill(cEscMute,[[32,13],[33,13],[24,25],[23,25]])};cEscMute.fillStyle=bBgColor;cEscMuteFillRect();var cEscMuteOver=function(){cEscMute.clearRect(0,0,bWidth,bHeight);cEscMute.fillStyle=bOverColor;cEscMuteFillRect()};var cEscMuteOut=function(){cEscMute.clearRect(0,0,bWidth,bHeight);cEscMute.fillStyle=bBgColor;cEscMuteFillRect()};this.addListenerInside('mouseover',cEscMuteOver,this.getByElement(escMuteID+'-canvas'));this.addListenerInside('mouseout',cEscMuteOut,this.getByElement(escMuteID+'-canvas'));var cAdMute=this.getByElement(adMuteID+'-canvas').getContext('2d');var cAdMuteFillRect=function(){thisTemp.canvasFill(cAdMute,[[8,12],[12,12],[16,8],[16,21],[12,18],[8,18]]);thisTemp.canvasFillRect(cAdMute,[[18,12,2,6],[21,8,2,14]])};cAdMute.fillStyle=bBgColor;cAdMuteFillRect();var cAdMuteOver=function(){cAdMute.clearRect(0,0,bWidth,bHeight);cAdMute.fillStyle=bOverColor;cAdMuteFillRect()};var cAdMuteOut=function(){cAdMute.clearRect(0,0,bWidth,bHeight);cAdMute.fillStyle=bBgColor;cAdMuteFillRect()};this.addListenerInside('mouseover',cAdMuteOver,this.getByElement(adMuteID+'-canvas'));this.addListenerInside('mouseout',cAdMuteOut,this.getByElement(adMuteID+'-canvas'));var cAdEscMute=this.getByElement(adEscMuteID+'-canvas').getContext('2d');var cAdEscMuteFillRect=function(){thisTemp.canvasFill(cAdEscMute,[[8,12],[12,12],[16,8],[16,21],[12,18],[8,18]]);thisTemp.canvasFill(cAdEscMute,[[18,10],[20,10],[26,20],[24,20]]);thisTemp.canvasFill(cAdEscMute,[[25,10],[27,10],[20,20],[18,20]])};cAdEscMute.fillStyle=bBgColor;cAdEscMuteFillRect();var cAdEscMuteOver=function(){cAdEscMute.clearRect(0,0,bWidth,bHeight);cAdEscMute.fillStyle=bOverColor;cAdEscMuteFillRect()};var cAdEscMuteOut=function(){cAdEscMute.clearRect(0,0,bWidth,bHeight);cAdEscMute.fillStyle=bBgColor;cAdEscMuteFillRect()};this.addListenerInside('mouseover',cAdEscMuteOver,this.getByElement(adEscMuteID+'-canvas'));this.addListenerInside('mouseout',cAdEscMuteOut,this.getByElement(adEscMuteID+'-canvas'));var adPauseClose=this.getByElement(adPauseCloseID+'-canvas').getContext('2d');var adPauseCloseFillRect=function(){thisTemp.canvasFill(adPauseClose,[[4,6],[6,6],[16,15],[14,15]]);thisTemp.canvasFill(adPauseClose,[[14,6],[16,6],[6,15],[4,15]])};adPauseClose.fillStyle='#404856';adPauseCloseFillRect();var adPauseCloseOver=function(){adPauseClose.clearRect(0,0,bWidth,bHeight);adPauseClose.fillStyle=bOverColor;adPauseCloseFillRect()};var adPauseCloseOut=function(){adPauseClose.clearRect(0,0,bWidth,bHeight);adPauseClose.fillStyle='#404856';adPauseCloseFillRect()};this.addListenerInside('mouseover',adPauseCloseOver,this.getByElement(adPauseCloseID+'-canvas'));this.addListenerInside('mouseout',adPauseCloseOut,this.getByElement(adPauseCloseID+'-canvas'));var cLoading=this.getByElement(loadingID+'-canvas').getContext('2d');var cLoadingFillRect=function(){cLoading.save();var grad=cLoading.createLinearGradient(0,0,60,60);grad.addColorStop(0,bBgColor);var grad2=cLoading.createLinearGradient(0,0,80,60);grad2.addColorStop(1,bOverColor);var grad3=cLoading.createLinearGradient(0,0,80,60);grad3.addColorStop(1,'#FF9900');var grad4=cLoading.createLinearGradient(0,0,80,60);grad4.addColorStop(1,'#CC3300');cLoading.strokeStyle=grad;cLoading.lineWidth=8;cLoading.beginPath();cLoading.arc(30,30,25,0,0.4*Math.PI,false);cLoading.stroke();cLoading.closePath();cLoading.beginPath();cLoading.strokeStyle=grad2;cLoading.arc(30,30,25,0.5*Math.PI,0.9*Math.PI,false);cLoading.stroke();cLoading.beginPath();cLoading.strokeStyle=grad3;cLoading.arc(30,30,25,Math.PI,1.4*Math.PI,false);cLoading.stroke();cLoading.beginPath();cLoading.strokeStyle=grad4;cLoading.arc(30,30,25,1.5*Math.PI,1.9*Math.PI,false);cLoading.stroke();cLoading.closePath();cLoading.restore()};cLoading.fillStyle=bBgColor;cLoadingFillRect();var cPauseCenter=this.getByElement(pauseCenterID+'-canvas').getContext('2d');var cPauseCenterFillRect=function(){thisTemp.canvasFill(cPauseCenter,[[28,22],[59,38],[28,58]]);cPauseCenter.save();cPauseCenter.lineWidth=5;cPauseCenter.beginPath();cPauseCenter.arc(40,40,35,0,2*Math.PI,false);cPauseCenter.stroke();cPauseCenter.closePath();cPauseCenter.restore()};cPauseCenter.fillStyle=bBgColor;cPauseCenter.strokeStyle=bBgColor;cPauseCenterFillRect();var cPauseCenterOver=function(){cPauseCenter.clearRect(0,0,80,80);cPauseCenter.fillStyle=bOverColor;cPauseCenter.strokeStyle=bOverColor;cPauseCenterFillRect()};var cPauseCenterOut=function(){cPauseCenter.clearRect(0,0,80,80);cPauseCenter.fillStyle=bBgColor;cPauseCenter.strokeStyle=bBgColor;cPauseCenterFillRect()};this.addListenerInside('mouseover',cPauseCenterOver,this.getByElement(pauseCenterID+'-canvas'));this.addListenerInside('mouseout',cPauseCenterOut,this.getByElement(pauseCenterID+'-canvas'));var volumeBOOver=function(){thisTemp.css(volumeBOID,'backgroundColor',bOverColor);thisTemp.css(volumeBWID,'backgroundColor',bBgColor)};var volumeBOOut=function(){thisTemp.css(volumeBOID,'backgroundColor',bBgColor);thisTemp.css(volumeBWID,'backgroundColor',bOverColor)};this.addListenerInside('mouseover',volumeBOOver,this.getByElement(volumeBOID));this.addListenerInside('mouseout',volumeBOOut,this.getByElement(volumeBOID));var timeBOOver=function(){thisTemp.css(timeBOID,'backgroundColor',bOverColor);thisTemp.css(timeBWID,'backgroundColor',bBgColor)};var timeBOOut=function(){thisTemp.css(timeBOID,'backgroundColor',bBgColor);thisTemp.css(timeBWID,'backgroundColor',bOverColor)};this.addListenerInside('mouseover',timeBOOver,this.getByElement(timeBOID));this.addListenerInside('mouseout',timeBOOut,this.getByElement(timeBOID));this.addButtonEvent();this.newMenu();this.controlBarHide();this.keypress();this.changeVolume(this.vars['volume']);this.showFrontNext();setTimeout(function(){thisTemp.elementCoordinate()},100);this.checkBarWidth();var resize=function(){thisTemp.elementCoordinate();thisTemp.timeUpdateHandler();thisTemp.changeLoad();thisTemp.checkBarWidth();thisTemp.changeElementCoor();thisTemp.changePrompt();thisTemp.adPauseCoor();thisTemp.adOtherCoor()};this.addListenerInside('resize',resize,window)},newCanvas:function(id,width,height){return''},addButtonEvent:function(){var thisTemp=this;var playClick=function(event){thisTemp.videoPlay();thisTemp.sendJS('clickEvent','actionScript->videoPlay')};this.addListenerInside('click',playClick,this.CB['play']);this.addListenerInside('click',playClick,this.CB['pauseCenter']);var pauseClick=function(event){thisTemp.videoPause();thisTemp.sendJS('clickEvent','actionScript->videoPause')};this.addListenerInside('click',pauseClick,this.CB['pause']);var frontClick=function(event){if(thisTemp.vars['front']){eval(thisTemp.vars['front']+'()');thisTemp.sendJS('clickEvent','actionScript->'+thisTemp.vars['front'])}};this.addListenerInside('click',frontClick,this.CB['front']);var nextClick=function(event){if(thisTemp.vars['next']){eval(thisTemp.vars['next']+'()');thisTemp.sendJS('clickEvent','actionScript->'+thisTemp.vars['next'])}};this.addListenerInside('click',nextClick,this.CB['next']);var muteClick=function(event){thisTemp.videoMute();thisTemp.sendJS('clickEvent','actionScript->videoMute')};this.addListenerInside('click',muteClick,this.CB['mute']);var escMuteClick=function(event){thisTemp.videoEscMute();thisTemp.sendJS('clickEvent','actionScript->videoEscMute')};this.addListenerInside('click',escMuteClick,this.CB['escMute']);var fullClick=function(event){thisTemp.fullScreen();thisTemp.sendJS('clickEvent','actionScript->fullScreen')};this.addListenerInside('click',fullClick,this.CB['full']);var escFullClick=function(event){thisTemp.quitFullScreen();thisTemp.sendJS('clickEvent','actionScript->quitFullScreen')};this.addListenerInside('click',escFullClick,this.CB['escFull']);var adSkipClick=function(event){if(thisTemp.CB['adSkip'].innerHTML==thisTemp.language['skipAd']){thisTemp.runFunction(thisTemp.config['adSkipClick'])}};this.addListenerInside('click',adSkipClick,this.CB['adSkip']);var adMuteClick=function(event){thisTemp.adMuteFunction()};this.addListenerInside('click',adMuteClick,this.CB['adMute']);var adEscMuteClick=function(event){thisTemp.adEscMuteFunction()};this.addListenerInside('click',adEscMuteClick,this.CB['adEscMute']);var adPauseCloseClick=function(event){thisTemp.adPauseCloseFunction()};this.addListenerInside('click',adPauseCloseClick,this.CB['adPauseClose']);var promptHide=function(event){thisTemp.promptShow(false)};var playOver=function(event){thisTemp.promptShow(thisTemp.CB['play'])};this.addListenerInside('mouseover',playOver,this.CB['play']);this.addListenerInside('mouseout',promptHide,this.CB['play']);var pauseOver=function(event){thisTemp.promptShow(thisTemp.CB['pause'])};this.addListenerInside('mouseover',pauseOver,this.CB['pause']);this.addListenerInside('mouseout',promptHide,this.CB['pause']);var frontOver=function(event){thisTemp.promptShow(thisTemp.CB['front'])};this.addListenerInside('mouseover',frontOver,this.CB['front']);this.addListenerInside('mouseout',promptHide,this.CB['front']);var nextOver=function(event){thisTemp.promptShow(thisTemp.CB['next'])};this.addListenerInside('mouseover',nextOver,this.CB['next']);this.addListenerInside('mouseout',promptHide,this.CB['next']);var muteOver=function(event){thisTemp.promptShow(thisTemp.CB['mute'])};this.addListenerInside('mouseover',muteOver,this.CB['mute']);this.addListenerInside('mouseout',promptHide,this.CB['mute']);var escMuteOver=function(event){thisTemp.promptShow(thisTemp.CB['escMute'])};this.addListenerInside('mouseover',escMuteOver,this.CB['escMute']);this.addListenerInside('mouseout',promptHide,this.CB['escMute']);var fullOver=function(event){thisTemp.promptShow(thisTemp.CB['full'])};this.addListenerInside('mouseover',fullOver,this.CB['full']);this.addListenerInside('mouseout',promptHide,this.CB['full']);var escFullOver=function(event){thisTemp.promptShow(thisTemp.CB['escFull'])};this.addListenerInside('mouseover',escFullOver,this.CB['escFull']);this.addListenerInside('mouseout',promptHide,this.CB['escFull']);var definitionOver=function(event){thisTemp.promptShow(thisTemp.CB['definition'])};this.addListenerInside('mouseover',definitionOver,this.CB['definition']);this.addListenerInside('mouseout',promptHide,this.CB['definition']);var playbackrateOver=function(event){thisTemp.promptShow(thisTemp.CB['playbackrate'])};this.addListenerInside('mouseover',playbackrateOver,this.CB['playbackrate']);this.addListenerInside('mouseout',promptHide,this.CB['playbackrate']);var volumePrompt=function(vol){var volumeBOXY=thisTemp.getCoor(thisTemp.CB['volumeBO']);var promptObj={title:thisTemp.language['volume']+vol+'%',x:volumeBOXY['x']+thisTemp.CB['volumeBO'].offsetWidth*0.5,y:volumeBOXY['y']};thisTemp.promptShow(false,promptObj)};var volumeObj={slider:this.CB['volumeBO'],follow:this.CB['volumeUp'],refer:this.CB['volumeBg'],grossValue:'volume',pd:true,startFun:function(vol){},monitorFun:function(vol){thisTemp.changeVolume(vol*0.01,false,false);volumePrompt(vol)},endFun:function(vol){},overFun:function(vol){volumePrompt(vol)}};this.slider(volumeObj);var volumeClickObj={refer:this.CB['volumeBg'],grossValue:'volume',fun:function(vol){thisTemp.changeVolume(vol*0.01,true,true)}};this.progressClick(volumeClickObj);this.timeButtonMouseDown();var volumeBgMove=function(event){var volumeBgXY=thisTemp.getCoor(thisTemp.CB['volumeBg']);var eventX=thisTemp.client(event)['x'];var eventVolume=parseInt((eventX-volumeBgXY['x'])*100/thisTemp.CB['volumeBg'].offsetWidth);var buttonPromptObj={title:thisTemp.language['volume']+eventVolume+'%',x:eventX,y:volumeBgXY['y']};thisTemp.promptShow(false,buttonPromptObj)};this.addListenerInside('mousemove',volumeBgMove,this.CB['volumeBg']);this.addListenerInside('mouseout',promptHide,this.CB['volumeBg']);this.addListenerInside('mouseout',promptHide,this.CB['volumeBO']);this.addDefListener();this.addPlaybackrate()},videoClick:function(){var thisTemp=this;var clearTimerClick=function(){if(thisTemp.timerClick!=null){if(thisTemp.timerClick.runing){thisTemp.timerClick.stop()}thisTemp.timerClick=null}};var timerClickFun=function(){clearTimerClick();thisTemp.isClick=false;if(thisTemp.adPlayerPlay){var ad=thisTemp.getNowAdvertisements();try{if(ad['link']!=''){window.open(ad['link'])}thisTemp.ajaxSuccessNull(ad['clickMonitor'])}catch(event){}}else{if(thisTemp.ckplayerConfig['config']['click']){thisTemp.playOrPause()}}};clearTimerClick();if(this.isClick){this.isClick=false;if(thisTemp.ckplayerConfig['config']['doubleClick']){if(!this.full){thisTemp.fullScreen()}else{thisTemp.quitFullScreen()}}}else{this.isClick=true;this.timerClick=new this.timer(300,timerClickFun,1)}},timeButtonMouseDown:function(){var thisTemp=this;var timePrompt=function(time){if(isNaN(time)){time=0}var timeButtonXY=thisTemp.getCoor(thisTemp.CB['timeButton']);var promptObj={title:thisTemp.formatTime(time),x:timeButtonXY['x']-thisTemp.pdCoor['x']+thisTemp.CB['timeButton'].offsetWidth*0.5,y:timeButtonXY['y']-thisTemp.pdCoor['y']};thisTemp.promptShow(false,promptObj)};var timeObj={slider:this.CB['timeButton'],follow:this.CB['timeProgress'],refer:this.CB['timeBoBg'],grossValue:'time',pd:false,startFun:function(time){thisTemp.isTimeButtonMove=false},monitorFun:function(time){},endFun:function(time){if(thisTemp.V){if(thisTemp.V.duration>0){thisTemp.needSeek=0;thisTemp.videoSeek(parseInt(time))}}},overFun:function(time){timePrompt(time)}};var timeClickObj={refer:this.CB['timeBoBg'],grossValue:'time',fun:function(time){if(thisTemp.V){if(thisTemp.V.duration>0){thisTemp.needSeek=0;thisTemp.videoSeek(parseInt(time))}}}};var timeBoBgmousemove=function(event){var timeBoBgXY=thisTemp.getCoor(thisTemp.CB['timeBoBg']);var eventX=thisTemp.client(event)['x'];var eventTime=parseInt((eventX-timeBoBgXY['x'])*thisTemp.V.duration/thisTemp.CB['timeBoBg'].offsetWidth);var buttonPromptObj={title:thisTemp.formatTime(eventTime),x:eventX,y:timeBoBgXY['y']};thisTemp.promptShow(false,buttonPromptObj);var def=false;if(!thisTemp.isUndefined(thisTemp.CB['definitionP'])){if(thisTemp.css(thisTemp.CB['definitionP'],'display')!='block'){def=true}}if(thisTemp.vars['preview']!=null&&def){buttonPromptObj['time']=eventTime;thisTemp.preview(buttonPromptObj)}};var promptHide=function(event){thisTemp.promptShow(false);if(thisTemp.previewDiv!=null){thisTemp.css([thisTemp.previewDiv,thisTemp.previewTop],'display','none')}};if(!this.vars['live']){this.isTimeButtonDown=true;this.addListenerInside('mousemove',timeBoBgmousemove,this.CB['timeBoBg']);this.addListenerInside('mouseout',promptHide,this.CB['timeBoBg'])}else{this.isTimeButtonDown=false;timeObj['removeListenerInside']=true;timeClickObj['removeListenerInside']=true}this.slider(timeObj);this.progressClick(timeClickObj)},progressClick:function(obj){var thisTemp=this;var referMouseClick=function(event){var referX=thisTemp.client(event)['x']-thisTemp.getCoor(obj['refer'])['x'];var rWidth=obj['refer'].offsetWidth;var grossValue=0;if(obj['grossValue']=='volume'){grossValue=100}else{if(thisTemp.V){grossValue=thisTemp.V.duration}}var nowZ=parseInt(referX*grossValue/rWidth);if(obj['fun']){if(obj['grossValue']==='time'){var sliderXY=thisTemp.getCoor(thisTemp.CB['timeButton']);sliderLeft=sliderXY['x'];if(!thisTemp.checkSlideLeft(referX,sliderLeft,rWidth)){return}var bimeButtonWB=thisTemp.CB['timeButton'].offsetWidth*0.5;thisTemp.css(thisTemp.CB['timeButton'],'left',(referX-bimeButtonWB)+'px');thisTemp.css(thisTemp.CB['timeProgress'],'width',(referX)+'px')}obj['fun'](nowZ)}};if(this.isUndefined(obj['removeListenerInside'])){this.addListenerInside('click',referMouseClick,obj['refer'])}else{this.removeListenerInside('click',referMouseClick,obj['refer'])}},slider:function(obj){var thisTemp=this;var clientX=0,criterionWidth=0,sliderLeft=0,referLeft=0;var value=0;var calculation=function(){var sLeft=parseInt(thisTemp.css(obj['slider'],'left'));var rWidth=obj['refer'].offsetWidth-obj['slider'].offsetWidth;var grossValue=0;if(thisTemp.isUndefined(sLeft)||isNaN(sLeft)){sLeft=0}if(obj['grossValue']=='volume'){grossValue=100}else{if(thisTemp.V){grossValue=thisTemp.V.duration}}return parseInt(sLeft*grossValue/rWidth)};var mDown=function(event){thisTemp.addListenerInside('mousemove',mMove,document);thisTemp.addListenerInside('mouseup',mUp,document);var referXY=thisTemp.getCoor(obj['refer']);var sliderXY=thisTemp.getCoor(obj['slider']);clientX=thisTemp.client(event)['x'];referLeft=referXY['x'];sliderLeft=sliderXY['x'];criterionWidth=clientX-sliderLeft;if(obj['startFun']){obj['startFun'](calculation())}};var mMove=function(event){clientX=thisTemp.client(event)['x'];var newX=clientX-criterionWidth-referLeft;if(newX<0){newX=0}if(newX>obj['refer'].offsetWidth-obj['slider'].offsetWidth){newX=obj['refer'].offsetWidth-obj['slider'].offsetWidth}if(obj['slider']===thisTemp.CB['timeButton']){if(!thisTemp.checkSlideLeft(newX,sliderLeft,obj['refer'].offsetWidth)){return}}thisTemp.css(obj['slider'],'left',newX+'px');thisTemp.css(obj['follow'],'width',(newX+obj['slider'].offsetWidth*0.5)+'px');var nowZ=calculation();if(obj['monitorFun']){obj['monitorFun'](nowZ)}};var mUp=function(event){thisTemp.removeListenerInside('mousemove',mMove,document);thisTemp.removeListenerInside('mouseup',mUp,document);if(obj['endFun']){obj['endFun'](calculation())}};var mOver=function(event){if(obj['overFun']){obj['overFun'](calculation())}};if(this.isUndefined(obj['removeListenerInside'])){this.addListenerInside('mousedown',mDown,obj['slider']);this.addListenerInside('mouseover',mOver,obj['slider'])}else{this.removeListenerInside('mousedown',mDown,obj['slider']);this.removeListenerInside('mouseover',mOver,obj['slider'])}},checkSlideLeft:function(newX,sliderLeft,refer){var timeSA=this.ckplayerConfig['config']['timeScheduleAdjust'];switch(timeSA){case 0:return false;break;case 2:if(newXsliderLeft){return false}break;case 4:if(!this.timeSliderLeftTemp){this.timeSliderLeftTemp=sliderLeft/refer}if(newXthis.timeSliderLeftTemp){this.timeSliderLeftTemp=timeSliderMax}}if(newX>this.timeSliderLeftTemp*refer){return false}break;default:return true;break}return true},loadingStart:function(rot){var thisTemp=this;if(this.isUndefined(rot)){rot=true}if(this.showFace){this.css(thisTemp.CB['loading'],'display','none')}if(this.timerLoading!=null){if(this.timerLoading.runing){this.timerLoading.stop()}this.timerLoading=null}var buffer=0;var loadingFun=function(){var nowRotate='0';try{nowRotate=thisTemp.css(thisTemp.CB['loadingCanvas'],'transform')||thisTemp.css(thisTemp.CB['loadingCanvas'],'-ms-transform')||thisTemp.css(thisTemp.CB['loadingCanvas'],'-moz-transform')||thisTemp.css(thisTemp.CB['loadingCanvas'],'-webkit-transform')||thisTemp.css(thisTemp.CB['loadingCanvas'],'-o-transform')||'0'}catch(event){}nowRotate=parseInt(nowRotate.replace('rotate(','').replace('deg);',''));nowRotate+=4;if(nowRotate>360){nowRotate=0}if(thisTemp.showFace){thisTemp.css(thisTemp.CB['loadingCanvas'],{transform:'rotate('+nowRotate+'deg)',msTransform:'rotate('+nowRotate+'deg)',mozTransform:'rotate('+nowRotate+'deg)',webkitTransform:'rotate('+nowRotate+'deg)',oTransform:'rotate('+nowRotate+'deg)'})}buffer++;if(buffer>=99){buffer=99}thisTemp.sendJS('buffer',buffer)};if(rot){this.timerLoading=new this.timer(10,loadingFun);if(this.showFace){this.css(thisTemp.CB['loading'],'display','block')}}else{thisTemp.sendJS('buffer',100)}},showFrontNext:function(){if(!this.showFace){return}if(this.vars['front']){this.css([this.CB['front'],this.CB['frontLine']],'display','block')}else{this.css([this.CB['front'],this.CB['frontLine']],'display','none')}if(this.vars['next']){this.css([this.CB['next'],this.CB['nextLine']],'display','block')}else{this.css([this.CB['next'],this.CB['nextLine']],'display','none')}},promptShow:function(ele,data){if(!this.showFace){return}var obj={};if(ele||data){if(!this.isUndefined(data)){obj=data}else{var offsetCoor=this.getCoor(ele);obj={title:this.getDataset(ele,'title'),x:offsetCoor['x']+ele.offsetWidth*0.5,y:offsetCoor['y']}}this.CB['prompt'].innerHTML=obj['title'];this.css(this.CB['prompt'],'display','block');var promoptWidth=this.getStringLen(obj['title'])*10;this.css(this.CB['promptBg'],'width',promoptWidth+'px');this.css(this.CB['prompt'],'width',promoptWidth+'px');promoptWidth+=10;var x=obj['x']-(promoptWidth*0.5);var y=this.PD.offsetHeight-obj['y']+8;if(x<0){x=0}if(x>this.PD.offsetWidth-promoptWidth){x=this.PD.offsetWidth-promoptWidth}this.css([this.CB['promptBg'],this.CB['prompt']],{display:'block',left:x+'px',bottom:y+'px'})}else{this.css([this.CB['promptBg'],this.CB['prompt']],{display:'none'})}},timerErrorFun:function(){var thisTemp=this;this.errorSend=false;var clearIntervalError=function(event){if(thisTemp.timerError!=null){if(thisTemp.timerError.runing){thisTemp.timerError.stop()}thisTemp.timerError=null}};var errorFun=function(event){clearIntervalError();thisTemp.error=true;thisTemp.errorUrl=thisTemp.getVideoUrl();if(!thisTemp.errorSend){thisTemp.errorSend=true;thisTemp.sendJS('error')}if(thisTemp.showFace){thisTemp.css(thisTemp.CB['errorText'],'display','block');thisTemp.css(thisTemp.CB['pauseCenter'],'display','none');thisTemp.css(thisTemp.CB['loading'],'display','none')}thisTemp.V.removeAttribute('poster');thisTemp.resetPlayer()};var errorListenerFun=function(event){setTimeout(function(){if(isNaN(thisTemp.V.duration)){errorFun(event)}},500)};if(!this.errorAdd){this.errorAdd=true;this.addListenerInside('error',errorListenerFun,this.V)}clearIntervalError();var timerErrorFun=function(){if(thisTemp.V&&parseInt(thisTemp.V.networkState)==3){errorFun()}};this.timerError=new this.timer(this.config['errorTime'],timerErrorFun)},judgeFullScreen:function(){var thisTemp=this;if(this.timerFull!=null){if(this.timerFull.runing){this.timerFull.stop()}this.timerFull=null}var fullFun=function(){thisTemp.isFullScreen()};this.timerFull=new this.timer(20,fullFun)},isFullScreen:function(){if(!this.showFace){return}var fullState=document.fullScreen||document.mozFullScreen||document.webkitIsFullScreen||document.msFullscreenElement;if(fullState&&!this.full){this.full=true;this.sendJS('full',true);this.elementCoordinate();this.css(this.CB['full'],'display','none');this.css(this.CB['escFull'],'display','block');if(this.vars['live']==0){this.timeUpdateHandler()}this.PD.appendChild(this.CB['menu'])}if(!fullState&&this.full){this.full=false;this.sendJS('full',false);this.elementCoordinate();this.css(this.CB['full'],'display','block');this.css(this.CB['escFull'],'display','none');if(this.timerFull!=null){if(this.timerFull.runing){this.timerFull.stop()}this.timerFull=null}if(this.vars['live']==0){this.timeUpdateHandler()}this.body.appendChild(this.CB['menu'])}},newMenu:function(){var thisTemp=this;var i=0;this.css(this.CB['menu'],{backgroundColor:'#FFFFFF',padding:'5px',position:'absolute',left:'10px',top:'20px',display:'none',zIndex:'999',color:'#A1A9BE',boxShadow:'2px 2px 3px #AAAAAA'});var mArr=this.contextMenu;var cMenu=this.ckplayerConfig['menu'];if(cMenu['name']){if(cMenu['link']){mArr[0]=[cMenu['name'],'link',cMenu['link']]}else{mArr[0]=[cMenu['name'],'default']}}if(cMenu['version']){mArr[1]=[cMenu['version'],'default','line']}if(cMenu['more']){if(typeof(cMenu['more'])=='object'){if(cMenu['more'].length>0){var moreArr=cMenu['more'];for(i=0;i'+me[0]+'

    ';break;case'link':if(me[3]){me[3]='target="'+me[3]+'"'}html+='

    '+me[0]+'

    ';break;case'javaScript':html+='

    '+me[0]+'

    ';break;case'actionScript':html+='

    '+me[0]+'

    ';break;default:break}}this.CB['menu'].innerHTML=html;var pArr=this.CB['menu'].childNodes;for(i=0;icdH-2)&&cShow&&!thisTemp.getMetaDate()['paused']){controlBarShow(false)}}else{if(!cShow){controlBarShow(true)}}oldClient={x:client['x'],y:client['y']}};this.timerCBar=new this.timer(2000,cbarFun);var cdMove=function(event){var getClient=thisTemp.client(event);client['x']=getClient['x'];client['y']=getClient['y'];if(!cShow){controlBarShow(true)}};this.addListenerInside('mousemove',cdMove,thisTemp.CD);this.addListenerInside('ended',cdMove);this.addListenerInside('resize',cdMove,window);if(hide===true){cShow=true;force=true;controlBarShow(false)}if(hide===false){cShow=false;force=true;controlBarShow(true)}},keypress:function(){var thisTemp=this;var keyDown=function(eve){var keycode=eve.keyCode||eve.which;if(this.adPlayerPlay){return}switch(keycode){case 32:thisTemp.playOrPause();break;case 37:thisTemp.fastBack();break;case 39:thisTemp.fastNext();break;case 38:now=thisTemp.volume+thisTemp.ckplayerConfig['config']['volumeJump'];thisTemp.changeVolume(now>1?1:now);break;case 40:now=thisTemp.volume-thisTemp.ckplayerConfig['config']['volumeJump'];thisTemp.changeVolume(now<0?0:now);break;default:break}};this.addListenerInside('keydown',keyDown,window||document)},playbackRate:function(){if(!this.showFace){return}var thisTemp=this;var vArr=this.playbackRateArr;var html='';var nowD='';var i=0;if(!nowD){nowD=vArr[this.playbackRateDefault][1]}if(vArr.length>1){var zlen=0;for(i=0;i'+vArr[i][1]+'

    '+html;var dlen=this.getStringLen(vArr[i][1]);if(dlen>zlen){zlen=dlen}}if(html){html+='

    '+nowD+'

    '}this.CB['playbackrate'].innerHTML=nowD;this.CB['playbackrateP'].innerHTML=html;this.css([this.CB['playbackrate'],this.CB['playbackrateLine']],'display','block');var pArr=this.CB['playbackrateP'].childNodes;for(var i=0;inewPlaybackrate')}};this.addListenerInside('click',defClick,pArr[i])}var pW=(zlen*10)+20;this.css(this.CB['playbackrateP'],{width:pW+'px'});this.css(this.CB['playbackrate'],{width:pW+'px'});this.buttonWidth['playbackrate']=this.CB['playbackrate'].offsetWidth}else{this.CB['playbackrate'].innerHTML='';this.CB['playbackrateP'].innerHTML='';this.css([this.CB['playbackrate'],this.CB['playbackrateLine']],'display','none')}},addPlaybackrate:function(){var thisTemp=this;var setTimeOutP=null;var defClick=function(event){thisTemp.css(thisTemp.CB['playbackrateP'],{left:thisTemp.getCoor(thisTemp.CB['playbackrate'])['x']+'px',display:'block'})};this.addListenerInside('click',defClick,this.CB['playbackrate']);var defMouseOut=function(event){if(setTimeOutP){window.clearTimeout(setTimeOutP);setTimeOutP=null}setTimeOutP=setTimeout(function(event){thisTemp.css(thisTemp.CB['playbackrateP'],'display','none')},500)};this.addListenerInside('mouseout',defMouseOut,thisTemp.CB['playbackrateP']);var defMouseOver=function(event){if(setTimeOutP){window.clearTimeout(setTimeOutP);setTimeOutP=null}};this.addListenerInside('mouseover',defMouseOver,thisTemp.CB['playbackrateP'])},newPlaybackrate:function(title){var vArr=this.playbackRateArr;var nVArr=[];var i=0;for(i=0;i1){var zlen=0;for(i=dArr.length-1;i>-1;i--){html='

    '+dArr[i]+'

    '+html;var dlen=this.getStringLen(dArr[i]);if(dlen>zlen){zlen=dlen}}if(html){html+='

    '+nowD+'

    '}this.CB['definition'].innerHTML=nowD;this.CB['definitionP'].innerHTML=html;this.css([this.CB['definition'],this.CB['definitionLine']],'display','block');var pArr=this.CB['definitionP'].childNodes;for(var i=0;in){var arr=this.VA[n];if(arr.length>3){var title=arr[2];if(title){this.newDefinition(title)}}}},newDefinition:function(title){var vArr=this.VA;var nVArr=[];var i=0;for(i=0;i'}this.V.removeAttribute('src');this.V.innerHTML=source;this.V.currentSrc=nVArr[0][0]}}else{this.embedHls(vArr[0][0],this.vars['autoplay'])}this.V.autoplay='autoplay';this.V.load();this.timerErrorFun()},embedHls:function(url,autoplay){var thisTemp=this;if(Hls.isSupported()){var hls=new Hls();hls.loadSource(url);hls.attachMedia(this.V);hls.on(Hls.Events.MANIFEST_PARSED,function(){thisTemp.playerLoad();if(autoplay){thisTemp.videoPlay()}})}},prompt:function(){if(!this.showFace){return}var thisTemp=this;var prompt=this.vars['promptSpot'];if(prompt==null||this.promptArr.length>0){return}var showPrompt=function(event){if(thisTemp.promptElement==null){var random2='prompte'+thisTemp.randomString(5);var ele2=document.createElement('div');ele2.className=random2;thisTemp.PD.appendChild(ele2);thisTemp.promptElement=thisTemp.getByElement(random2);thisTemp.css(thisTemp.promptElement,{overflowX:'hidden',lineHeight:'22px',fontSize:'14px',color:'#FFFFFF',position:'absolute',display:'block',zIndex:'90'})}var pcon=thisTemp.getPromptTest();var pW=pcon['pW'],pT=pcon['pT'],pL=parseInt(thisTemp.css(this,'left'))-parseInt(pW*0.5);if(pcon['pL']>10){pL=pcon['pL']}if(pL<0){pL=0}thisTemp.css(thisTemp.promptElement,{width:pW+'px',left:(-pW-10)+'px',display:'block'});thisTemp.promptElement.innerHTML=thisTemp.getDataset(this,'words');thisTemp.css(thisTemp.promptElement,{left:pL+'px',top:(pT-thisTemp.promptElement.offsetHeight-10)+'px'})};var hidePrompt=function(event){if(thisTemp.promptElement!=null){thisTemp.css(thisTemp.promptElement,{display:'none'})}};var i=0;for(i=0;ithis.PD.offsetWidth-pW){pL=this.PD.offsetWidth-pW}return{pW:pW,pT:pT,pL:pL}},deletePrompt:function(){var arr=this.promptArr;if(arr.length>0){for(var i=0;ibw-parseInt(arr[i].offsetWidth*0.5)){left=bw-parseInt(arr[i].offsetWidth*0.5)}this.css(arr[i],{left:left+'px',display:'block'})}},preview:function(obj){var thisTemp=this;var preview={file:null,scale:0};preview=this.standardization(preview,this.vars['preview']);if(preview['file']==null||preview['scale']<=0){return}var srcArr=preview['file'];if(this.previewStart==0){this.previewStart=1;if(srcArr.length>0){var i=0;var imgW=0,imgH=0;var random=thisTemp.randomString(10);var loadNum=0;var loadImg=function(i){srcArr[i]=thisTemp.getNewUrl(srcArr[i]);var n=0;var img=new Image();img.src=srcArr[i];img.className=random+i;img.onload=function(event){loadNum++;if(thisTemp.previewDiv==null){imgW=img.width;imgH=img.height;thisTemp.previewWidth=parseInt(imgW*0.1);var ele=document.createElement('div');ele.className=random;thisTemp.PD.appendChild(ele);thisTemp.previewDiv=thisTemp.getByElement(random);var eleTop=(obj['y']-parseInt(imgH*0.1)+2);thisTemp.css(thisTemp.previewDiv,{width:srcArr.length*imgW*10+'px',height:parseInt(imgH*0.1)+'px',backgroundColor:'#000000',position:'absolute',left:'0px',top:eleTop+'px',display:'none',zIndex:'80'});ele.setAttribute('data-x','0');ele.setAttribute('data-y',eleTop);var ele2=document.createElement('div');ele2.className=random+'d2';thisTemp.PD.appendChild(ele2);thisTemp.previewTop=thisTemp.getByElement(ele2.className);thisTemp.css(thisTemp.previewTop,{width:parseInt(imgW*0.1)+'px',height:parseInt(imgH*0.1)+'px',position:'absolute',border:'5px solid '+thisTemp.css(thisTemp.CB['timeProgress'],'backgroundColor'),left:'0px',top:(obj['y']-parseInt(imgH*0.1)+2)+'px',display:'none',zIndex:'81'});var html='';for(n=0;n=imgW){sx=0;sy+=h}thisTemp.css(cimg,'display','none')}if(loadNum==srcArr.length){thisTemp.previewStart=2}else{i++;loadImg(i)}}}}loadImg(i);return}if(this.previewStart==2){var isTween=true;var nowNum=parseInt(obj['time']/this.vars['preview']['scale']);var numTotal=parseInt(thisTemp.getMetaDate()['duration']/this.vars['preview']['scale']);if(thisTemp.css(thisTemp.previewDiv,'display')=='none'){isTween=false}thisTemp.css(thisTemp.previewDiv,'display','block');var imgWidth=thisTemp.previewDiv.offsetWidth*0.01/srcArr.length;var left=(imgWidth*nowNum)-obj['x']+parseInt(imgWidth*0.5),top=obj['y']-thisTemp.previewDiv.offsetHeight;thisTemp.css(thisTemp.previewDiv,'top',top+2+'px');var topLeft=obj['x']-parseInt(imgWidth*0.5);var timepieces=0;if(topLeft<0){topLeft=0;timepieces=obj['x']-topLeft-imgWidth*0.5}if(topLeft>thisTemp.PD.offsetWidth-imgWidth){topLeft=thisTemp.PD.offsetWidth-imgWidth;timepieces=obj['x']-topLeft-imgWidth*0.5}if(left<0){left=0}if(left>numTotal*imgWidth-thisTemp.PD.offsetWidth){left=numTotal*imgWidth-thisTemp.PD.offsetWidth}thisTemp.css(thisTemp.previewTop,{left:topLeft+'px',top:top+2+'px',display:'block'});if(thisTemp.previewTop.offsetHeight>thisTemp.previewDiv.offsetHeight){thisTemp.css(thisTemp.previewTop,{height:thisTemp.previewDiv.offsetHeight-(thisTemp.previewTop.offsetHeight-thisTemp.previewDiv.offsetHeight)+'px'})}if(this.previewTween!=null){this.animatePause(this.previewTween);this.previewTween=null}var nowLeft=parseInt(thisTemp.css(thisTemp.previewDiv,'left'));var leftC=nowLeft+left;if(nowLeft==-(left+timepieces)){return}if(isTween){var obj={element:thisTemp.previewDiv,start:null,end:-(left+timepieces),speed:0.3};this.previewTween=this.animate(obj)}else{thisTemp.css(thisTemp.previewDiv,'left',-(left+timepieces)+'px')}}},deletePreview:function(){if(this.previewDiv!=null){this.deleteChild(this.previewDiv);this.previewDiv=null;this.previewStart=0}},changeVideo:function(){if(!this.html5Video){this.getVarsObject();this.V.newVideo(this.vars);return}var vArr=this.VA;var v=this.vars;var i=0;if(vArr.length<1){return}if(this.V!=null&&this.needSeek==0){this.needSeek=this.V.currentTime}if(v['poster']){this.V.poster=v['poster']}else{this.V.removeAttribute('poster')}if(v['loop']){this.V.loop='loop'}else{this.V.removeAttribute('loop')}if(v['seek']>0){this.needSeek=v['seek']}else{this.needSeek=0}if(this.getFileExt(vArr[0][0])!='.m3u8'){this.isM3u8=false}if(!this.isM3u8){if(vArr.length==1){this.V.innerHTML='';this.V.src=vArr[0][0]}else{var source='';vArr=this.arrSort(vArr);for(i=0;i'}this.V.removeAttribute('src');this.V.innerHTML=source}if(v['autoplay']){this.V.autoplay='autoplay'}else{this.V.removeAttribute('autoplay')}this.V.load()}else{this.embedHls(vArr[0][0],v['autoplay'])}if(!this.isUndefined(v['volume'])){this.changeVolume(v['volume'])}this.resetPlayer();this.timerErrorFun();if(this.vars['cktrack']){this.loadTrack()}},elementCoordinate:function(){this.pdCoor=this.getXY(this.PD);try{this.css(this.CB['pauseCenter'],{left:parseInt((this.PD.offsetWidth-80)*0.5)+'px',top:parseInt((this.PD.offsetHeight-80)*0.5)+'px'})}catch(event){}try{this.css(this.CB['loading'],{left:parseInt((this.PD.offsetWidth-60)*0.5)+'px',top:parseInt((this.PD.offsetHeight-60)*0.5)+'px'})}catch(event){}try{this.css(this.CB['errorText'],{left:parseInt((this.PD.offsetWidth-120)*0.5)+'px',top:parseInt((this.PD.offsetHeight-30)*0.5)+'px'})}catch(event){}try{this.css(this.CB['logo'],{left:parseInt(this.PD.offsetWidth-this.CB['logo'].offsetWidth-20)+'px',top:'20px'})}catch(event){}this.checkBarWidth()},checkBarWidth:function(){if(!this.showFace){return}var controlBarW=this.CB['controlBar'].offsetWidth;var ele=[];ele.push([[this.CB['full'],this.CB['escFull'],this.CB['fullLine']],this.buttonWidth['full']+2,'full']);if(this.vars['front']!=''){ele.push([[this.CB['front'],this.CB['frontLine']],this.buttonWidth['front']+2])}if(this.vars['next']!=''){ele.push([[this.CB['next'],this.CB['nextLine']],this.buttonWidth['next']+2])}if(this.CB['definition'].innerHTML!=''){ele.push([[this.CB['definition'],this.CB['definitionLine']],this.buttonWidth['definition']+2])}if((this.ckplayerConfig['config']['mobileVolumeBarShow']||!this.isMobile())&&this.css(this.CB['volume'],'display')=='block'){ele.push([[this.CB['volume']],this.buttonWidth['volume']]);ele.push([[this.CB['mute'],this.CB['escMute'],this.CB['muteLine']],this.buttonWidth['mute']+2,'mute'])}ele.push([[this.CB['timeText']],this.buttonWidth['timeText']]);ele.push([[this.CB['play'],this.CB['pause'],this.CB['playLine']],this.buttonWidth['play']+2,'play']);var i=0;var len=0;var isc=true;for(var i=0;i2){len+=nlen}else{isc=false}}if(isc){this.buttonLen=len;this.buttonArr=ele}len=this.buttonLen;ele=this.buttonArr;for(var i=0;icontrolBarW){len-=ele[i][1];this.css(ele[i][0],'display','none')}else{this.css(ele[i][0],'display','block');if(ele[i].length==3){var name=ele[i][2];switch(name){case'mute':if(this.volume==0){this.css(this.CB['mute'],'display','none')}else{this.css(this.CB['escMute'],'display','none')}break;case'play':this.playShow(this.V.paused?false:true);break;case'full':if(this.full){this.css(this.CB['full'],'display','none')}else{this.css(this.CB['escFull'],'display','none')}break}}}}},initPlayPause:function(){if(!this.showFace){return}if(this.vars['autoplay']){this.css([this.CB['play'],this.CB['pauseCenter']],'display','none');this.css(this.CB['pause'],'display','block')}else{this.css(this.CB['play'],'display','block');if(this.css(this.CB['errorText'],'display')=='none'){this.css(this.CB['pauseCenter'],'display','block')}this.css(this.CB['pause'],'display','none')}},loadedHandler:function(){this.loaded=true;if(this.vars['loaded']!=''){try{eval(this.vars['loaded']+'()')}catch(event){this.log(event)}}},playingHandler:function(){this.playShow(true);if(this.isFirstTimePlay&&!this.isUndefined(this.advertisements['front'])){this.isFirstTimePlay=false;this.adI=0;this.adType='front';this.adMuteInto();this.adIsVideoTime=true;this.adPlayStart=true;this.adVideoPlay=false;this.videoPause();this.advertisementsTime();this.advertisementsPlay();this.adSkipButtonShow();return}if(this.adPlayerPlay){return}if(this.needSeek>0){this.videoSeek(this.needSeek);this.needSeek=0}if(this.animatePauseArray.length>0){this.animateResume('pause')}if(this.playerType=='html5video'&&this.V!=null&&this.config['videoDrawImage']){this.sendVCanvas()}if(!this.isUndefined(this.advertisements['pause'])&&!this.adPlayStart){this.adPauseCloseFunction()}},adPausePlayer:function(){this.adI=0;this.adType='pause';this.adPauseShow=true;this.loadAdPause()},loadAdPause:function(){var ad=this.getNowAdvertisements();var type=ad['type'];var thisTemp=this;var width=this.PD.offsetWidth,height=this.PD.offsetHeight;if(this.isStrImage(type)&&this.adPauseShow){this.css(this.CB['adElement'],'display','block');var imgClass='adimg'+this.randomString(10);var imgHtml='';if(ad['link']){imgHtml=''+imgHtml+''}this.CB['adElement'].innerHTML=imgHtml;this.addListenerInside('load',function(){var imgObj=new Image();imgObj.src=this.src;var imgWH=thisTemp.adjustmentWH(imgObj.width,imgObj.height);thisTemp.css([thisTemp.getByElement(imgClass),thisTemp.CB['adElement']],{width:imgWH['width']+'px',height:imgWH['height']+'px',border:'0px'});if(thisTemp.ckplayerConfig['style']['advertisement']['closeButtonShow']&&thisTemp.adPauseShow){thisTemp.css(thisTemp.CB['adPauseClose'],{display:'block'})}thisTemp.ajaxSuccessNull(ad['exhibitionMonitor']);thisTemp.adPauseCoor()},this.getByElement(imgClass));this.addListenerInside('click',function(){thisTemp.ajaxSuccessNull(ad['clickMonitor'])},this.CB['adElement']);var newI=this.adI;if(this.adI0){setTimeout(function(){if(thisTemp.adPauseShow){thisTemp.adI=newI;thisTemp.loadAdPause()}},ad['time']*1000)}}},adPauseCoor:function(){if(this.css(this.CB['adElement'],'display')=='block'){var w=this.CB['adElement'].offsetWidth,h=this.CB['adElement'].offsetHeight;var pw=this.PD.offsetWidth,ph=this.PD.offsetHeight;this.css(this.CB['adElement'],{top:(ph-h)*0.5+'px',left:(pw-w)*0.5+'px'});if(this.css(this.CB['adPauseClose'],'display')=='block'){this.css(this.CB['adPauseClose'],{top:(ph-h)*0.5-10+'px',left:(pw-w)*0.5+w-10+'px',})}}},adPauseCloseFunction:function(){this.CB['adElement'].innerHTML='';this.css([this.CB['adElement'],this.CB['adPauseClose']],'display','none');this.adPauseShow=false},advertisementsTime:function(nt){if(this.isUndefined(nt)){nt=0}var ad=this.advertisements[this.adType];if(nt>0){ad[this.adI]['time']=Math.ceil(nt)}this.adTimeAllTotal=0;for(var i=this.adI;i0){this.CB['adTime'].innerHTML=this.language['adTime'].replace('{$second}',this.adTimeAllTotal>9?this.adTimeAllTotal:'0'+this.adTimeAllTotal)}if(this.adPauseShow){this.adPauseCloseFunction()}this.adOtherCloseAll();this.adTimeTotal=-1},adSkipButtonShow:function(){var thisTemp=this;var skipConfig=this.ckplayerConfig['style']['advertisement'];var delayTimeTemp=skipConfig[this.adType+'SkipButtonDelay'];var timeFun=function(){if(delayTimeTemp>=0){thisTemp.CB['adSkip'].innerHTML=thisTemp.language['skipAdTime'].replace('{$second}',delayTimeTemp>9?delayTimeTemp:'0'+delayTimeTemp);setTimeout(timeFun,1000)}else{thisTemp.CB['adSkip'].innerHTML=thisTemp.language['skipAd']}delayTimeTemp--};if(skipConfig['skipButtonShow']){this.css(thisTemp.CB['adSkip'],'display','block');if(skipConfig[this.adType+'SkipButtonDelay']>0&&this.isUndefined(this.adSkipButtonTime)){timeFun()}else{thisTemp.css(thisTemp.CB['adSkip'],'display','block');thisTemp.CB['adSkip'].innerHTML=this.language['skipAd']}}},advertisementsPlay:function(){this.css([this.CB['adBackground'],this.CB['adElement'],this.CB['adBar'],this.CB['adLink']],'display','none');this.adPlayerPlay=false;var ad=this.advertisements[this.adType];if(this.adI==0&&(this.adType=='front'||this.adType=='insert'||this.adType=='end')){this.sendJS('process',this.adType+' ad play')}this.trackHide();if(this.adI';if(ad['link']){imgHtml=''+imgHtml+''}this.CB['adElement'].innerHTML=imgHtml;this.addListenerInside('load',function(){var imgObj=new Image();imgObj.src=this.src;var imgWH=thisTemp.adjustmentWH(imgObj.width,imgObj.height);thisTemp.css(thisTemp.getByElement(imgClass),{width:imgWH['width']+'px',height:imgWH['height']+'px',border:'0px'});thisTemp.css(thisTemp.CB['adElement'],{width:imgWH['width']+'px',height:imgWH['height']+'px',top:(height-imgWH['height'])*0.5+'px',left:(width-imgWH['width'])*0.5+'px',});thisTemp.ajaxSuccessNull(ad['exhibitionMonitor'])},this.getByElement(imgClass));this.addListenerInside('click',function(){thisTemp.ajaxSuccessNull(ad['clickMonitor'])},this.CB['adElement']);if(!this.isUndefined(ad['time'])){this.adCountDown()}}else{this.css(this.CB['adBar'],'display','block');if(this.adVideoMute){this.css(this.CB['adEscMute'],'display','block');this.css(this.CB['adMute'],'display','none')}else{this.css(this.CB['adEscMute'],'display','none');this.css(this.CB['adMute'],'display','block')}this.CB['adElement'].innerHTML='';if(this.videoTemp['currentSrc']==''){this.videoTemp['currentSrc']=this.getCurrentSrc()}if(this.V.loop){this.videoTemp['loop']=true;this.V.loop=false}if(this.V!=null&&this.V.currentTime>0&&this.adIsVideoTime){this.adIsVideoTime=false;this.needSeek=this.V.currentTime}this.V.src=ad['file'];this.V.currentSrc=ad['file'];this.V.innerHTML='';this.V.play();this.adVideoPlay=true;this.ajaxSuccessNull(ad['exhibitionMonitor']);if(!this.adVideoMute){this.adEscMuteFunction()}}if(ad['link']){this.css(this.CB['adLink'],'display','block');var link=''+this.language['adLink']+'';this.CB['adLink'].innerHTML=link;this.css(this.getByElement('ckadmorelink'),{color:'#FFFFFF',textDecoration:'none'});this.addListenerInside('click',function(){thisTemp.ajaxSuccessNull(ad['clickMonitor'])},this.CB['adLink'])}else{this.css(this.CB['adLink'],'display','none')}},adCountDown:function(){var thisTemp=this;if(this.adTimeTotal>0){if(!this.adIsPause){this.adTimeTotal--;this.showAdTime();this.adCountDownObj=null;this.adCountDownObj=setTimeout(function(){thisTemp.adCountDown()},1000)}}else{this.adI++;this.advertisementsPlay()}},adPlayerTimeHandler:function(time){var ad=this.getNowAdvertisements();var type=ad['type'];if(this.isStrImage(type)){return}if(this.adTimeTotal!=parseInt(time)){this.adTimeTotal=parseInt(time);this.showAdTime()}},showAdTime:function(){this.adTimeAllTotal--;var n=this.adTimeAllTotal;if(n<0){n=0}this.CB['adTime'].innerHTML=this.language['adTime'].replace('{$second}',n<10?'0'+n:n)},checkAdOther:function(t){if(this.adPlayerPlay){return}var adTime=this.advertisements['othertime'];var adPlay=this.advertisements['otherPlay'];for(var i=0;i=adTime[i]&&!adPlay[i]){adPlay[i]=true;this.newAdOther(i)}}},newAdOther:function(i){var thisTemp=this;var ad=this.advertisements['other'][i];var randomS=this.randomString(10);var adDivID='adother'+randomS;imgClassName='adimgother'+randomS;var adDiv=document.createElement('div');adDiv.className=adDivID;this.PD.appendChild(adDiv);ad['div']=adDivID;ad['element']=imgClassName;this.getByElement(adDivID).innerHTML='';this.css(adDivID,{position:'absolute',overflow:'hidden',zIndex:'996',top:'60px',left:'30px',cursor:'pointer'});if(this.ckplayerConfig['style']['advertisement']['closeOtherButtonShow']){var closeAdDivID='adotherclose'+randomS;var closeAdDiv=document.createElement('div');closeAdDiv.className=closeAdDivID;this.PD.appendChild(closeAdDiv);this.getByElement(closeAdDivID).innerHTML=this.newCanvas(closeAdDivID,20,20);ad['closeDiv']=closeAdDivID;ad['close']=false;this.css(closeAdDivID,{backgroundColor:'#f7f7f7',widht:'20px',height:'20px',position:'absolute',overflow:'hidden',zIndex:'997',top:'60px',left:'30px',borderRadius:'20px',cursor:'pointer'});var adOtherClose=this.getByElement(closeAdDivID+'-canvas').getContext('2d');var adOtherCloseFillRect=function(){thisTemp.canvasFill(adOtherClose,[[4,6],[6,6],[16,15],[14,15]]);thisTemp.canvasFill(adOtherClose,[[14,6],[16,6],[6,15],[4,15]])};adOtherClose.fillStyle='#404856';adOtherCloseFillRect();var adOtherCloseOver=function(){adOtherClose.clearRect(0,0,20,20);adOtherClose.fillStyle='#0782F5';adOtherCloseFillRect()};var adOtherCloseOut=function(){adOtherClose.clearRect(0,0,20,20);adOtherClose.fillStyle='#404856';adOtherCloseFillRect()};this.addListenerInside('mouseover',adOtherCloseOver,this.getByElement(closeAdDivID+'-canvas'));this.addListenerInside('mouseout',adOtherCloseOut,this.getByElement(closeAdDivID+'-canvas'))}this.addListenerInside('load',function(){var imgObj=new Image();imgObj.src=this.src;var imgWH=thisTemp.adjustmentWH(imgObj.width,imgObj.height);thisTemp.css([thisTemp.getByElement(imgClassName),thisTemp.getByElement(adDivID)],{width:imgWH['width']+'px',height:imgWH['height']+'px',border:'0px'});thisTemp.advertisements['other'][i]=ad;thisTemp.ajaxSuccessNull(ad['exhibitionMonitor']);thisTemp.adOtherCoor()},this.getByElement(imgClassName));this.addListenerInside('click',function(){thisTemp.adOtherClose(i)},this.getByElement(closeAdDivID));this.addListenerInside('click',function(){thisTemp.ajaxSuccessNull(ad['clickMonitor'])},this.getByElement(imgClassName));if(ad['time']>0){setTimeout(function(){thisTemp.adOtherClose(i)},ad['time']*1000)}},adOtherClose:function(i){var ad=this.advertisements['other'][i];if(!this.isUndefined(ad['close'])){if(!ad['close']){ad['close']=true;this.PD.removeChild(this.getByElement(ad['div']));this.PD.removeChild(this.getByElement(ad['closeDiv']))}}},adOtherCloseAll:function(){if(!this.isUndefined(this.advertisements['other'])){var ad=this.advertisements['other'];for(var i=0;i-1;i--){if(t>=adTime[i]&&t1&&!adPlay[i]){this.adI=0;this.adType='insert';this.adMuteInto();this.adIsVideoTime=true;this.adPlayStart=true;this.adVideoPlay=false;this.videoPause();this.advertisementsTime();this.advertisementsPlay();this.adSkipButtonShow();adPlay[i]=true;for(var n=0;n=width||h>=height){if(width/w>height/h){nh=height-20;nw=w*nh/h}else{nw=width-20;nh=h*nw/w}}else{nw=w;nh=h}return{width:nw,height:nh}},ajaxSuccessNull:function(url){if(!this.isUndefined(url)){var ajaxObj={url:url,success:function(data){}};this.ajax(ajaxObj)}},runFunction:function(s){try{var arr=s.split('->');switch(arr[0]){case'javaScript':eval(arr[1]+'()');break;case'actionScript':eval('this.'+arr[1]+'()');break}}catch(event){}},sendVCanvas:function(){if(this.timerVCanvas==null){this.css(this.V,'display','none');this.css(this.MD,'display','block');var thisTemp=this;var videoCanvas=function(){if(thisTemp.MDCX.width!=thisTemp.PD.offsetWidth){thisTemp.MDC.width=thisTemp.PD.offsetWidth}if(thisTemp.MDCX.height!=thisTemp.PD.offsetHeight){thisTemp.MDC.height=thisTemp.PD.offsetHeight}thisTemp.MDCX.clearRect(0,0,thisTemp.MDCX.width,thisTemp.MDCX.height);var coor=thisTemp.getProportionCoor(thisTemp.PD.offsetWidth,thisTemp.PD.offsetHeight,thisTemp.V.videoWidth,thisTemp.V.videoHeight);thisTemp.MDCX.drawImage(thisTemp.V,0,0,thisTemp.V.videoWidth,thisTemp.V.videoHeight,coor['x'],coor['y'],coor['width'],coor['height'])};this.timerVCanvas=new this.timer(0,videoCanvas)}},pauseHandler:function(){var thisTemp=this;this.playShow(false);if(this.animatePauseArray.length>0){this.animatePause('pause')}if(this.playerType=='html5video'&&this.V!=null&&this.config['videoDrawImage']){this.stopVCanvas()}if(!this.isUndefined(this.advertisements['pause'])&&!this.adPlayStart&&!this.adPauseShow){setTimeout(function(){if(!thisTemp.isUndefined(thisTemp.advertisements['pause'])&&!thisTemp.adPlayStart&&!thisTemp.adPauseShow&&thisTemp.time>1){thisTemp.adPausePlayer()}},300)}},stopVCanvas:function(){if(this.timerVCanvas!=null){this.css(this.V,'display','block');this.css(this.MD,'display','none');if(this.timerVCanvas.runing){this.timerVCanvas.stop()}this.timerVCanvas=null}},playShow:function(b){if(!this.showFace){return}if(b){this.css(this.CB['play'],'display','none');this.css(this.CB['pauseCenter'],'display','none');this.css(this.CB['pause'],'display','block')}else{this.css(this.CB['play'],'display','block');if(this.css(this.CB['errorText'],'display')=='none'){if(!this.adPlayerPlay){this.css(this.CB['pauseCenter'],'display','block')}}else{this.css(this.CB['pauseCenter'],'display','none')}this.css(this.CB['pause'],'display','none')}},seekedHandler:function(){this.resetTrack();this.isTimeButtonMove=true;if(this.V.paused){this.videoPlay()}},endedHandler:function(){if(this.adPlayerPlay){this.adI++;this.advertisementsPlay();return}if(!this.endAdPlay&&!this.isUndefined(this.advertisements['end'])){this.endAdPlay=true;this.adI=0;this.adType='end';this.adMuteInto();this.adIsVideoTime=true;this.adPlayStart=true;this.adVideoPlay=false;this.videoPause();this.advertisementsTime();this.advertisementsPlay();this.adSkipButtonShow();this.adReset=true;return}this.sendJS('ended');this.endedAdReset();if(!this.vars['loop']){this.videoSeek(0)}},endedAdReset:function(){var arr=[];var i=0;if(!this.isUndefined(this.advertisements['insertPlay'])){arr=this.advertisements['insertPlay'];for(i=0;i0){this.css(this.CB['mute'],'display','block');this.css(this.CB['escMute'],'display','none')}else{this.css(this.CB['mute'],'display','none');this.css(this.CB['escMute'],'display','block')}}catch(event){}}},timeUpdateHandler:function(){var duration=0;if(this.playerType=='html5video'){try{duration=this.V.duration}catch(event){}}if(duration>0){this.time=this.V.currentTime;this.timeTextHandler();this.trackShowHandler();if(this.isTimeButtonMove){this.timeProgress(this.time,duration)}}},timeProgress:function(time,duration){if(!this.showFace){return}var timeProgressBgW=this.CB['timeProgressBg'].offsetWidth;var timeBOW=parseInt((time*timeProgressBgW/duration)-(this.CB['timeButton'].offsetWidth*0.5));if(timeBOW>timeProgressBgW-this.CB['timeButton'].offsetWidth){timeBOW=timeProgressBgW-this.CB['timeButton'].offsetWidth}if(timeBOW<0){timeBOW=0}this.css(this.CB['timeProgress'],'width',timeBOW+'px');this.css(this.CB['timeButton'],'left',parseInt(timeBOW)+'px')},timeTextHandler:function(){if(!this.showFace){return}var duration=this.V.duration;var time=this.V.currentTime;if(isNaN(duration)||parseInt(duration)<0.2){duration=this.vars['duration']}this.CB['timeText'].innerHTML=this.formatTime(time)+' / '+this.formatTime(duration);if(this.CB['timeText'].offsetWidth>0){this.buttonWidth['timeText']=this.CB['timeText'].offsetWidth}},bufferEdHandler:function(){if(!this.showFace||this.playerType=='flashplayer'){return}var thisTemp=this;var clearTimerBuffer=function(){if(thisTemp.timerBuffer!=null){if(thisTemp.timerBuffer.runing){thisTemp.sendJS('buffer',100);thisTemp.timerBuffer.stop()}thisTemp.timerBuffer=null}};clearTimerBuffer();var bufferFun=function(){if(thisTemp.V.buffered.length>0){var duration=thisTemp.V.duration;var len=thisTemp.V.buffered.length;var bufferStart=thisTemp.V.buffered.start(len-1);var bufferEnd=thisTemp.V.buffered.end(len-1);var loadTime=bufferStart+bufferEnd;var loadProgressBgW=thisTemp.CB['timeProgressBg'].offsetWidth;var timeButtonW=thisTemp.CB['timeButton'].offsetWidth;var loadW=parseInt((loadTime*loadProgressBgW/duration)+timeButtonW);if(loadW>=loadProgressBgW){loadW=loadProgressBgW;clearTimerBuffer()}thisTemp.changeLoad(loadTime)}};this.timerBuffer=new this.timer(200,bufferFun)},changeLoad:function(loadTime){if(this.V==null){return}if(!this.showFace){return}var loadProgressBgW=this.CB['timeProgressBg'].offsetWidth;var timeButtonW=this.CB['timeButton'].offsetWidth;var duration=this.V.duration;if(this.isUndefined(loadTime)){loadTime=this.loadTime}else{this.loadTime=loadTime}var loadW=parseInt((loadTime*loadProgressBgW/duration)+timeButtonW);this.css(this.CB['loadProgress'],'width',loadW+'px')},judgeIsLive:function(){var thisTemp=this;if(this.timerError!=null){if(this.timerError.runing){this.timerError.stop()}this.timerError=null}this.error=false;if(this.showFace){this.css(this.CB['errorText'],'display','none')}var timeupdate=function(event){thisTemp.timeUpdateHandler()};if(!this.vars['live']){if(this.V!=null&&this.playerType=='html5video'){this.addListenerInside('timeupdate',timeupdate);thisTemp.timeTextHandler();thisTemp.prompt();setTimeout(function(){thisTemp.bufferEdHandler()},200)}}else{this.removeListenerInside('timeupdate',timeupdate);if(this.timerTime!=null){window.clearInterval(this.timerTime);timerTime=null}if(this.timerTime!=null){if(this.timerTime.runing){this.timerTime.stop()}this.timerTime=null}var timeFun=function(){if(thisTemp.V!=null&&!thisTemp.V.paused&&thisTemp.showFace){thisTemp.CB['timeText'].innerHTML=thisTemp.getNowDate()}};this.timerTime=new this.timer(1000,timeFun)}this.definition()},loadTrack:function(){if(this.playerType=='flashplayer'||this.vars['flashplayer']==true){return}var thisTemp=this;var track=this.vars['cktrack'];var obj={method:'get',dataType:'text',url:track,charset:'utf-8',success:function(data){thisTemp.track=thisTemp.parseSrtSubtitles(data);thisTemp.trackIndex=0;thisTemp.nowTrackShow={sn:''}}};this.ajax(obj)},resetTrack:function(){this.trackIndex=0;this.nowTrackShow={sn:''}},trackShowHandler:function(){if(!this.showFace||this.adPlayerPlay){return}if(this.track.length<1){return}if(this.trackIndex>=this.track.length){this.trackIndex=0}var nowTrack=this.track[this.trackIndex];if(this.time>=nowTrack['startTime']&&this.time<=nowTrack['endTime']){var nowShow=this.nowTrackShow;if(nowShow['sn']!=nowTrack['sn']){this.trackHide();this.trackShow(nowTrack)}}else{this.trackHide();this.checkTrack()}},trackShow:function(track){this.nowTrackShow=track;var arr=track['content'];for(var i=0;i=arr[i]['startTime']&&this.time<=arr[i]['endTime']){this.trackIndex=i;break}}},playOrPause:function(){if(!this.loaded){return}if(this.V==null){return}if(this.playerType=='flashplayer'){this.V.playOrPause();return}if(this.V.paused){this.videoPlay()}else{this.videoPause()}},videoPlay:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoPlay();return}if(this.adPlayerPlay){this.eliminateAd();return}try{if(this.V.currentSrc){this.V.play()}}catch(event){}},videoPause:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoPause();return}try{this.V.pause()}catch(event){}},videoSeek:function(time){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoSeek(time);return}var duration=this.getMetaDate()['duration'];if(duration>0&&time>duration){time=duration}if(time>=0){this.V.currentTime=time;this.sendJS('seekTime',time)}},changeVolume:function(vol,bg,button){if(this.loaded){if(this.playerType=='flashplayer'){this.V.changeVolume(time);return}}if(isNaN(vol)||this.isUndefined(vol)){vol=0}if(!this.loaded){this.vars['volume']=vol}if(!this.html5Video){this.V.changeVolume(vol);return}try{if(this.isUndefined(bg)){bg=true}}catch(e){}try{if(this.isUndefined(button)){button=true}}catch(e){}if(!vol){vol=0}if(vol<0){vol=0}if(vol>1){vol=1}try{this.V.volume=vol}catch(error){}this.volume=vol;if(bg&&this.showFace){var bgW=vol*this.CB['volumeBg'].offsetWidth;if(bgW<0){bgW=0}if(bgW>this.CB['volumeBg'].offsetWidth){bgW=this.CB['volumeBg'].offsetWidth}this.css(this.CB['volumeUp'],'width',bgW+'px')}if(button&&this.showFace){var buLeft=parseInt(this.CB['volumeUp'].offsetWidth-(this.CB['volumeBO'].offsetWidth*0.5));if(buLeft>this.CB['volumeBg'].offsetWidth-this.CB['volumeBO'].offsetWidth){buLeft=this.CB['volumeBg'].offsetWidth-this.CB['volumeBO'].offsetWidth}if(buLeft<0){buLeft=0}this.css(this.CB['volumeBO'],'left',buLeft+'px')}},videoMute:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoMute();return}this.volumeTemp=this.V?(this.V.volume>0?this.V.volume:this.vars['volume']):this.vars['volume'];this.changeVolume(0)},videoEscMute:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoEscMute();return}this.changeVolume(this.volumeTemp>0?this.volumeTemp:this.vars['volume'])},adMuteFunction:function(){if(!this.loaded){return}this.changeVolume(0);this.adVideoMute=true;this.css(this.CB['adEscMute'],'display','block');this.css(this.CB['adMute'],'display','none')},adEscMuteFunction:function(){if(!this.loaded){return}var v=this.ckplayerConfig['style']['advertisement']['videoVolume'];this.changeVolume(v);this.adMuteInto()},adMuteInto:function(){this.adVideoMute=false;this.css(this.CB['adEscMute'],'display','none');this.css(this.CB['adMute'],'display','block')},fastBack:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.fastBack();return}var time=this.time-this.ckplayerConfig['config']['timeJump'];if(time<0){time=0}this.videoSeek(time)},fastNext:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.fastNext();return}var time=this.time+this.ckplayerConfig['config']['timeJump'];if(time>this.V.duration){time=this.V.duration}this.videoSeek(time)},getCurrentSrc:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){return this.V.getCurrentSrc()}return this.V.currentSrc},switchFull:function(){if(this.full){this.quitFullScreen()}else{this.fullScreen()}},fullScreen:function(){if(this.html5Video&&this.playerType=='html5video'){var element=this.PD;if(element.requestFullscreen){element.requestFullscreen()}else if(element.mozRequestFullScreen){element.mozRequestFullScreen()}else if(element.webkitRequestFullscreen){element.webkitRequestFullscreen()}else if(element.msRequestFullscreen){element.msRequestFullscreen()}else if(element.oRequestFullscreen){element.oRequestFullscreen()}this.judgeFullScreen()}else{}},quitFullScreen:function(){if(this.html5Video&&this.playerType=='html5video'){if(document.exitFullscreen){document.exitFullscreen()}else if(document.msExitFullscreen){document.msExitFullscreen()}else if(document.mozCancelFullScreen){document.mozCancelFullScreen()}else if(document.oRequestFullscreen){document.oCancelFullScreen()}else if(document.requestFullscreen){document.requestFullscreen()}else if(document.webkitExitFullscreen){document.webkitExitFullscreen()}else{this.css(document.documentElement,'cssText','');this.css(document.document.body,'cssText','');this.css(this.PD,'cssText','')}this.judgeFullScreen()}},videoRotation:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoRotation(n);return}if(this.isUndefined(n)){n=0}var tf=this.css(this.V,'transform');if(this.isUndefined(tf)&&!tf){tf='rotate(0deg)'}var reg=tf.match(/rotate\([^)]+\)/);reg=reg?reg[0].replace('rotate(','').replace('deg)',''):'';if(reg==''){reg=0}else{reg=parseInt(reg)}if(n==-1){reg-=90}else if(n==1){reg+=90}else{if(n!=90&&n!=180&&n!=270&&n!=-90&&n!=-180&&n!=-270){reg=0}else{reg=n}}n=reg;var y90=n%90,y180=n%180,y270=n%270;var ys=false;if(y90==0&&y180==90&&y270==90){ys=true}if(y90==0&&y180==90&&y270==0){ys=true}if(y90==-0&&y180==-90&&y270==-90){ys=true}if(y90==-0&&y180==-90&&y270==-0){ys=true}tf=tf.replace(/rotate\([^)]+\)/,'').replace(/scale\([^)]+\)/,'')+' rotate('+n+'deg)';var cdW=this.CD.offsetWidth,cdH=this.CD.offsetHeight,vW=this.V.videoWidth,vH=this.V.videoHeight;if(vW>0&&vH>0){if(ys){if(cdW/cdH>vH/vW){nH=cdH;nW=vH*nH/vW}else{nW=cdW;nH=vW*nW/vH}this.css(this.V,'transform','rotate(0deg)');this.css(this.V,'transform','scale('+nH/cdW+','+nW/cdH+')'+tf)}else{this.css(this.V,'transform',tf)}}else{this.css(this.V,'transform',tf)}return},videoBrightness:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoBrightness(n);return}},videoContrast:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoContrast(n);return}},videoSaturation:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoSaturation(n);return}},videoHue:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoHue(n);return}},videoZoom:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoZoom(n);return}if(this.isUndefined(n)){n=1}if(n<0){n=0}if(n>2){n=2}var tf=this.css(this.V,'transform');tf=tf.replace(/scale\([^)]+\)/,'')+' scale('+n+')';this.videoScale=n;this.css(this.V,'transform',tf);return},videoProportion:function(w,h){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoProportion(w,h);return}},adPlay:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.adPlay();return}if(this.adPlayerPlay){this.adIsPause=false;if(this.adPlayerPlay){var ad=this.getNowAdvertisements();var type=ad['type'];if(this.isStrImage(type)){this.adCountDown()}else{this.V.play()}}}},adPause:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.adPause();return}if(this.adPlayerPlay){this.adIsPause=true;var ad=this.getNowAdvertisements();var type=ad['type'];if(type!='jpg'&&type!='jpeg'&&type!='png'&&type!='svg'&&type!='gif'){this.videoPause()}}},videoError:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoError(n);return}},changeConfig:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.changeConfig(arguments);return}var obj=this.ckplayerConfig;var arg=arguments;for(var i=0;i0){this.css(this.CD,'width',w+'px')}if(h>0){this.css(this.CD,'height',h+'px')}if(this.html5Video){this.elementCoordinate()}},changePlaybackRate:function(n){if(this.html5Video){var arr=this.playbackRateArr;n=parseInt(n);if(n';html+=param['v'];html+='';html+='';html+=' ';html+='';html+='';this.PD.innerHTML=html;this.V=this.getObjectById(vid);this.playerType='flashplayer'},getFlashVars:function(){this.getVarsObject();var v=this.vars;var z='';for(k in v){if(k!='flashplayer'&&k!='container'&&v[k]!=''){if(z!=''){z+='&'}var vk=v[k];if(vk==true){vk=1}if(vk==false){vk=0}z+=k+'='+vk}}if(!v.hasOwnProperty('volume')||!v['volume']){if(z!=''){z+='&'}z+='volume=0'}return z},isStrImage:function(s){if(s=='jpg'||s=='jpeg'||s=='png'||s=='svg'||s=='gif'){return true}return false},getVarsObject:function(){var v=this.vars;var f='',d='',w='';var arr=this.VA;var prompt=v['promptSpot'];var i=0;var video=this.vars['video'];if(typeof(video)=='object'){if(!this.isUndefined(typeof(video.length))){var arr=video;for(i=0;i'}w=w.replace('movie=','src=');return{w:w,v:v}},getMetaDate:function(){if(!this.loaded||this.V==null){return false}if(this.playerType=='html5video'){var duration=0;try{duration=!isNaN(this.V.duration)?this.V.duration:0}catch(event){this.log(event)}var data={duration:duration,volume:this.V.volume,playbackRate:this.V.playbackRate,width:this.PD.offsetWidth||this.V.offsetWidth||this.V.width,height:this.PD.offsetHeight||this.V.offsetHeight||this.V.height,streamWidth:this.V.videoWidth,streamHeight:this.V.videoHeight,videoWidth:this.V.offsetWidth,videoHeight:this.V.offsetHeight,paused:this.V.paused};return data}else{try{return this.V.getMetaDate()}catch(event){this.log(event)}}return false},getVideoUrl:function(){if(this.playerType=='flashplayer'){return this.V.getVideoUrl()}var arr=[];if(this.V.src){arr.push(this.V.src)}else{var uArr=this.V.childNodes;for(var i=0;i');var type='',fun='',link='',target='';if(callArr.length==2){var callM=callArr[0];var callE=callArr[1];if(!callE){return{type:'none'}}var val='';var eArr=[];type=callM;switch(callM){case'actionScript':if(callE.indexOf('(')>-1){eArr=callE.split('(');callE=eArr[0];val=eArr[1].replace(')','')}if(val==''){fun='thisTemp.'+callE+'()'}else{fun='thisTemp.'+callE+'('+val+')'}break;case'javaScript':if(callE.substr(0,11)=='[flashvars]'){callE=callE.substr(11);if(this.vars.hasOwnProperty(callE)){callE=this.vars[callE]}else{break}}if(callE.indexOf('(')>-1){eArr=callE.split('(');callE=eArr[0];val=eArr[1].replace(')','')}if(val==''){fun=callE+'()'}else{fun=callE+'('+val+')'}break;case"link":var callLink=(callE+',').split(',');if(callLink[0].substr(0,11)=='[flashvars]'){var fl=callLink[0].replace('[flashvars]','');if(this.vars.hasOwnProperty(fl)){callLink[0]=this.vars[fl]}else{break}}if(!callLink[1]){callLink[1]='_blank'}link=callLink[0];target=callLink[1];break}}return{type:type,fun:fun,link:link,target:target}},getPosition:function(obj){var pw=this.PD.offsetWidth,ph=this.PD.offsetHeight;var x=0,y=0;switch(obj['align']){case'left':x=obj['offsetX'];break;case'center':x=pw*0.5+obj['offsetX'];break;case'right':x=pw+obj['offsetX'];break}switch(obj['vAlign']){case'top':y=obj['offsetY'];break;case'middle':y=ph*0.5+obj['offsetY'];break;case'bottom':y=ph+obj['offsetY'];break}return{x:x,y:y}},addElement:function(attribute){var thisTemp=this;if(this.playerType=='flashplayer'){return this.V.addElement(attribute)}var i=0;var obj={list:null,x:'100%',y:"50%",position:null,alpha:1,backgroundColor:'',backAlpha:1,backRadius:0,clickEvent:''};obj=this.standardization(obj,attribute);var list=obj['list'];if(list==null){return''}var id='element'+this.randomString(10);var ele=document.createElement('div');ele.className=id;if(obj['x']){ele.setAttribute('data-x',obj['x'])}if(obj['y']){ele.setAttribute('data-y',obj['y'])}if(obj['position']!=null){ele.setAttribute('data-position',obj['position'].join(','))}this.PD.appendChild(ele);var eid=this.getByElement(id);this.css(eid,{position:'absolute',filter:'alpha(opacity:'+obj['alpha']+')',opacity:obj['alpha'].toString(),width:'800px',zIndex:'20'});var bgid='elementbg'+this.randomString(10);var bgAlpha=obj['alpha'].toString();var bgColor=obj['backgroundColor'].replace('0x','#');var html='';var idArr=[];var clickArr=[];if(!this.isUndefined(list)&&list.length>0){var textObj,returnObj,clickEvent;for(i=0;i'}else{html+='
    '}break;case'text':textObj={type:'text',text:'',color:'0xFFFFFF',size:14,font:this.fontFamily,leading:0,alpha:1,paddingLeft:0,paddingRight:0,paddingTop:0,paddingBottom:0,marginLeft:0,marginRight:0,marginTop:0,marginBottom:0,backgroundColor:'',backAlpha:1,backRadius:0,clickEvent:''};list[i]=this.standardization(textObj,list[i]);clickEvent=this.clickEvent(list[i]['clickEvent']);clickArr.push(clickEvent);if(clickEvent['type']=='link'){html+=''}else{html+='
    '+list[i]['text']+'
    '}break;default:break}idArr.push(newEleid)}}var objClickEvent=this.clickEvent(obj['clickEvent']);eid.innerHTML='
    '+html+'
    ';if(objClickEvent['type']=='javaScript'||objClickEvent['type']=='actionScript'){var objClickHandler=function(){eval(objClickEvent['fun']);thisTemp.sendJS('clickEvent',clk['type']+'->'+clk['fun'].replace('thisTemp.','').replace('()',''))};this.addListenerInside('click',objClickHandler,this.getByElement(bgid+'_c'))}this.css(bgid+'_c',{position:'absolute',zIndex:'2'});for(i=0;i'+clk['fun'].replace('thisTemp.','').replace('()',''))};this.addListenerInside('click',clickHandler,this.getByElement(idArr[i]))}switch(list[i]['type']){case'image':case'png':case'jpg':case'jpeg':case'gif':this.css(idArr[i],{float:'left',width:list[i]['width']+'px',height:list[i]['height']+'px',filter:'alpha(opacity:'+list[i]['alpha']+')',opacity:list[i]['alpha'].toString(),marginLeft:list[i]['marginLeft']+'px',marginRight:list[i]['marginRight']+'px',marginTop:list[i]['marginTop']+'px',marginBottom:list[i]['marginBottom']+'px',borderRadius:list[i]['radius']+'px',cursor:'pointer'});this.css(idArr[i]+'_image',{width:list[i]['width']+'px',height:list[i]['height']+'px',borderRadius:list[i]['radius']+'px'});break;case'text':this.css(idArr[i]+'_text',{filter:'alpha(opacity:'+list[i]['alpha']+')',opacity:list[i]['alpha'].toString(),borderRadius:list[i]['radius']+'px',fontFamily:list[i]['font'],fontSize:list[i]['size']+'px',color:list[i]['color'].replace('0x','#'),lineHeight:list[i]['leading']>0?list[i]['leading']+'px':'',paddingLeft:list[i]['paddingLeft']+'px',paddingRight:list[i]['paddingRight']+'px',paddingTop:list[i]['paddingTop']+'px',paddingBottom:list[i]['paddingBottom']+'px',whiteSpace:'nowrap',position:'absolute',zIndex:'3',cursor:'pointer'});this.css(idArr[i],{float:'left',width:this.getByElement(idArr[i]+'_text').offsetWidth+'px',height:this.getByElement(idArr[i]+'_text').offsetHeight+'px',marginLeft:list[i]['marginLeft']+'px',marginRight:list[i]['marginRight']+'px',marginTop:list[i]['marginTop']+'px',marginBottom:list[i]['marginBottom']+'px'});this.css(idArr[i]+'_bg',{width:this.getByElement(idArr[i]+'_text').offsetWidth+'px',height:this.getByElement(idArr[i]+'_text').offsetHeight+'px',filter:'alpha(opacity:'+list[i]['backAlpha']+')',opacity:list[i]['backAlpha'].toString(),borderRadius:list[i]['backRadius']+'px',backgroundColor:list[i]['backgroundColor'].replace('0x','#'),position:'absolute',zIndex:'2'});break;default:break}}this.css(bgid,{width:this.getByElement(bgid+'_c').offsetWidth+'px',height:this.getByElement(bgid+'_c').offsetHeight+'px',position:'absolute',filter:'alpha(opacity:'+bgAlpha+')',opacity:bgAlpha,backgroundColor:bgColor.replace('0x','#'),borderRadius:obj['backRadius']+'px',zIndex:'1'});this.css(eid,{width:this.getByElement(bgid).offsetWidth+'px',height:this.getByElement(bgid).offsetHeight+'px'});var eidCoor=this.calculationCoor(eid);this.css(eid,{left:eidCoor['x']+'px',top:eidCoor['y']+'px'});this.elementArr.push(eid.className);return eid},getElement:function(element){if(this.playerType=='flashplayer'){return this.V.getElement(element)}var ele=element;if(typeof(element)=='string'){ele=this.getByElement(element)}var coor=this.getCoor(ele);return{x:coor['x'],y:coor['y'],width:ele.offsetWidth,height:ele.offsetHeight,alpha:!this.isUndefined(this.css(ele,'opacity'))?parseFloat(this.css(ele,'opacity')):1,show:this.css(ele,'display')=='none'?false:true}},elementShow:function(element,show){if(this.playerType=='flashplayer'){this.V.elementShow(element,show);return}if(typeof(element)=='string'){if(element){this.css(ele,'display',show==true?'block':'none')}else{var arr=this.elementTempArr;for(var i=0;i0){position.push(null,null,null,null);var i=0;for(i=0;i-1){this.elementTempArr.push(obj['element'].className);this.elementArr.splice(def,1)}var css={};var pm=this.getElement(obj['element']);var t=0;var b=0;var c=0;var d=obj['speed']*1000;var timerTween=null;var tweenObj=null;var start=obj['start']==null?'':obj['start'].toString();var end=obj['end']==null?'':obj['end'].toString();switch(obj['parameter']){case'x':if(obj['start']==null){b=pm['x']}else{if(start.substring(start.length-1,start.length)=='%'){b=parseInt(start)*w*0.01}else{b=parseInt(start)}}if(obj['end']==null){c=pm['x']-b}else{if(end.substring(end.length-1,end.length)=='%'){c=parseInt(end)*w*0.01-b}else if(end.substring(0,1)=='-'||end.substring(0,1)=='+'){if(typeof(obj['end'])=='number'){c=parseInt(obj['end'])-b}else{c=parseInt(end)}}else{c=parseInt(end)-b}}break;case'y':if(obj['start']==null){b=pm['y']}else{if(start.substring(start.length-1,start.length)=='%'){b=parseInt(start)*h*0.01}else{b=parseInt(start)}}if(obj['end']==null){c=pm['y']-b}else{if(end.substring(end.length-1,end.length)=='%'){c=parseInt(end)*h*0.01-b}else if(end.substring(0,1)=='-'||end.substring(0,1)=='+'){if(typeof(obj['end'])=='number'){c=parseInt(obj['end'])-b}else{c=parseInt(end)}}else{c=parseInt(end)-b}}break;case'alpha':if(obj['start']==null){b=pm['alpha']*100}else{if(start.substring(start.length-1,start.length)=='%'){b=parseInt(obj['start'])}else{b=parseInt(obj['start']*100)}}if(obj['end']==null){c=pm['alpha']*100-b}else{if(end.substring(end.length-1,end.length)=='%'){c=parseInt(end)-b}else if(end.substring(0,1)=='-'||end.substring(0,1)=='+'){if(typeof(obj['end'])=='number'){c=parseInt(obj['end'])*100-b}else{c=parseInt(obj['end'])*100}}else{c=parseInt(obj['end'])*100-b}}break}var callBack=function(){var index=thisTemp.arrIndexOf(thisTemp.animateElementArray,animateId);if(index>-1){thisTemp.animateArray.splice(index,1);thisTemp.animateElementArray.splice(index,1)}index=thisTemp.arrIndexOf(thisTemp.animatePauseArray,animateId);if(index>-1){thisTemp.animatePauseArray.splice(index,1)}if(obj['callBack']!=null&&obj['element']&&obj['callBack']!='callBack'&&obj['callBack']!='tweenX'&&obj['tweenY']!='callBack'&&obj['callBack']!='tweenAlpha'){var cb=eval(obj['callBack']);cb(obj['element']);obj['callBack']=null}};var stopTween=function(){if(timerTween!=null){if(timerTween.runing){timerTween.stop()}timerTween=null}};var tweenX=function(){if(t-1){this.elementTempArr.splice(defX,1)}}catch(event){}thisTemp.elementArr.push(obj['element'].className);callBack()}};var tweenY=function(){if(t-1){this.elementTempArr.splice(defY,1)}}catch(event){}thisTemp.elementArr.push(obj['element'].className);callBack()}};var tweenAlpha=function(){if(t-1){this.elementTempArr.splice(defA,1)}}catch(event){}thisTemp.elementArr.push(obj['element'].className);callBack()}};switch(obj['parameter']){case'x':tweenObj=tweenX;break;case'y':tweenObj=tweenY;break;case'alpha':tweenObj=tweenAlpha;break;default:break}timerTween=new thisTemp.timer(10,tweenObj);timerTween.callBackFunction=callBack;if(obj['overStop']){var mouseOver=function(){if(timerTween!=null&&timerTween.runing){timerTween.stop()}};this.addListenerInside('mouseover',mouseOver,obj['element']);var mouseOut=function(){var start=true;if(obj['pauseStop']&&thisTemp.getMetaDate()['paused']){start=false}if(timerTween!=null&&!timerTween.runing&&start){timerTween.start()}};this.addListenerInside('mouseout',mouseOut,obj['element'])}this.animateArray.push(timerTween);this.animateElementArray.push(animateId);if(obj['pauseStop']){this.animatePauseArray.push(animateId)}return animateId},animateResume:function(id){if(this.playerType=='flashplayer'){this.V.animateResume(this.isUndefined(id)?'':id);return}var arr=[];if(id!=''&&!this.isUndefined(id)&&id!='pause'){arr.push(id)}else{if(id==='pause'){arr=this.animatePauseArray}else{arr=this.animateElementArray}}for(var i=0;i-1){this.animateArray[index].start()}}},animatePause:function(id){if(this.playerType=='flashplayer'){this.V.animatePause(this.isUndefined(id)?'':id);return}var arr=[];if(id!=''&&!this.isUndefined(id)&&id!='pause'){arr.push(id)}else{if(id==='pause'){arr=this.animatePauseArray}else{arr=this.animateElementArray}}for(var i=0;i-1){this.animateArray[index].stop()}}},deleteAnimate:function(id){if(this.playerType=='flashplayer'&&this.V){try{this.V.deleteAnimate(id)}catch(event){this.log(event)}return}var index=this.arrIndexOf(this.animateElementArray,id);if(index>-1){this.animateArray[index].callBackFunction();this.animateArray.splice(index,1);this.animateElementArray.splice(index,1)}},deleteElement:function(ele){if(this.playerType=='flashplayer'&&this.V){try{this.V.deleteElement(ele)}catch(event){}return}var def=this.arrIndexOf(this.elementArr,ele.className);if(def>-1){this.elementArr.splice(def,1)}try{def=this.arrIndexOf(this.elementTempArr,ele.className);if(def>-1){this.elementTempArr.splice(def,1)}}catch(event){}this.deleteAnimate(ele);this.deleteChild(ele)},getByElement:function(obj,parent){if(this.isUndefined(parent)){parent=document}var num=obj.substr(0,1);var res=[];if(num!='#'){if(num=='.'){obj=obj.substr(1,obj.length)}if(parent.getElementsByClassName){res=parent.getElementsByClassName(obj)}else{var reg=new RegExp(' '+obj+' ','i');var ele=parent.getElementsByTagName('*');for(var i=0;i0){return res[0]}else{return res}}else{if(num=='#'){obj=obj.substr(1,obj.length)}return document.getElementById(obj)}},css:function(elem,attribute,value){var i=0;var k='';if(typeof(elem)=='object'){if(!this.isUndefined(typeof(elem.length))){for(i=0;i0)?((m<10)?'0'+m+':':m+':'):'00:';tHours=(h>0)?((h<10)?'0'+h+':':h+':'):'';if(ishours){return tHours+tMinutes+tSeconds}else{return tMinutes+tSeconds}},randomString:function(len){len=len||16;var chars='abcdefghijklmnopqrstuvwxyz';var maxPos=chars.length;var val='';for(i=0;i127||str.charCodeAt(i)==94){len+=2}else{len++}}return len},createXHR:function(){if(window.XMLHttpRequest){return new XMLHttpRequest()}else if(window.ActiveXObject){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(event){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(event){this.eject(this.errorList[7])}}}else{this.eject(this.errorList[8])}},ajax:function(cObj){var thisTemp=this;var callback=null;var obj={method:'get',dataType:'json',charset:'utf-8',async:false,url:'',data:null,success:null};if(typeof(cObj)!='object'){this.eject(this.errorList[9]);return}obj=this.standardization(obj,cObj);if(obj.dataType==='json'||obj.dataType==='text'||obj.dataType==='html'){var xhr=this.createXHR();callback=function(){if(xhr.status==200){if(thisTemp.isUndefined(obj.success)){return}if(obj.dataType==='json'){try{obj.success(eval('('+xhr.responseText+')'))}catch(event){obj.success(null)}}else{obj.success(xhr.responseText)}}else{thisTemp.eject(thisTemp.errorList[10],'Ajax.status:'+xhr.status)}};obj.url=obj.url.indexOf('?')==-1?obj.url+'?rand='+this.randomString(6):obj.url;obj.data=this.formatParams(obj.data);if(obj.method==='get'&&!this.isUndefined(obj.data)){if(obj.data!=''){if(obj.url.indexOf('?')==-1){obj.url+='?'+obj.data}else{obj.url+='&'+obj.data}}}if(obj.async===true){xhr.onreadystatechange=function(){if(xhr.readyState==4&&callback!=null){callback()}}}xhr.open(obj.method,obj.url,obj.async);if(obj.method==='post'){xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');xhr.setRequestHeader('charset',obj['charset']);xhr.send(obj.data)}else{xhr.send(null)}if(obj.async===false){callback()}}else if(obj.dataType==='jsonp'){var oHead=document.getElementsByTagName('head')[0];var oScript=document.createElement('script');var callbackName='callback'+new Date().getTime();var params=this.formatParams(obj.data)+'&callback='+callbackName;callback=obj.success;oScript.src=obj.url.split('?')+'?'+params;oHead.insertBefore(oScript,oHead.firstChild);window[callbackName]=function(json){callback(json);oHead.removeChild(oScript)}}},loadJs:function(path,success){var oHead=document.getElementsByTagName('HEAD').item(0);var oScript=document.createElement('script');oScript.type='text/javascript';oScript.src=this.getNewUrl(path);oHead.appendChild(oScript);oScript.onload=function(){success()}},isMsie:function(){var browser=navigator.appName;var b_version=navigator.appVersion;var version=b_version.split(';');var trim_Version='';if(version.length>1){trim_Version=version[1].replace(/[ ]/g,'')}if(browser=='Microsoft Internet Explorer'&&(trim_Version=='MSIE6.0'||trim_Version=='MSIE7.0'||trim_Version=='MSIE8.0'||trim_Version=='MSIE9.0'||trim_Version=='MSIE10.0')){return false}return true},uploadFlash:function(){var swf;if(navigator.userAgent.indexOf('MSIE')>0){try{var swf=new ActiveXObject('ShockwaveFlash.ShockwaveFlash');return true}catch(e){return false}}if(navigator.userAgent.indexOf('Firefox')>0){swf=navigator.plugins['Shockwave Flash'];if(swf){return true}else{return false}}return true},supportVideo:function(){if(!this.isMsie()){return false}if(!!document.createElement('video').canPlayType){var vidTest=document.createElement('video');var oggTest;try{oggTest=vidTest.canPlayType('video/ogg; codecs="theora, vorbis"')}catch(error){oggTest=false}if(!oggTest){var h264Test;try{h264Test=vidTest.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')}catch(error){h264Test=false}if(!h264Test){return false}else{if(h264Test=="probably"){return true}else{return false}}}else{if(oggTest=="probably"){return true}else{return false}}}else{return false}},getDataset:function(ele,z){try{return ele.dataset[z]}catch(error){try{return ele.getAttribute('data-'+z)}catch(error){return false}}},getObjectById:function(id){var x=null;var y=this.getByElement('#'+id);var r='embed';if(y&&y.nodeName=='OBJECT'){if(typeof(y.SetVariable)!='undefined'){x=y}else{var z=y.getElementsByTagName(r)[0];if(z){x=z}}}return x},formatParams:function(data){var arr=[];for(var i in data){arr.push(encodeURIComponent(i)+'='+encodeURIComponent(data[i]))}return arr.join('&')},arrSort:function(arr){var temp=[];for(var i=0;i-1){filepath=filepath.split('?')[0]}var pos='.'+filepath.replace(/.+\./,'');return pos.toLowerCase()}return''},isMobile:function(){if(navigator.userAgent.match(/(iPhone|iPad|iPod|Android|ios)/i)){return true}return false},isContains:function(str,key){return str.indexOf(key)>-1},getNewUrl:function(url){if(this.isContains(url,'?')){return url+='&'+this.randomString(8)+'='+this.randomString(8)}else{return url+='?'+this.randomString(8)+'='+this.randomString(8)}},client:function(event){var eve=event||window.event;if(this.isUndefined(eve)){eve={clientX:0,clientY:0}}return{x:eve.clientX+(document.documentElement.scrollLeft||this.body.scrollLeft)-this.pdCoor['x'],y:eve.clientY+(document.documentElement.scrollTop||this.body.scrollTop)-this.pdCoor['y']}},getCoor:function(obj){var coor=this.getXY(obj);return{x:coor['x']-this.pdCoor['x'],y:coor['y']-this.pdCoor['y']}},getXY:function(obj){var parObj=obj;var left=obj.offsetLeft;var top=obj.offsetTop;while(parObj=parObj.offsetParent){left+=parObj.offsetLeft;top+=parObj.offsetTop}return{x:left,y:top}},removeChild:function(){if(this.playerType=='html5video'){var i=0;var timerArr=[this.timerError,this.timerFull,this.timerTime,this.timerBuffer,this.timerClick,this.timerLoading,this.timerCBar,this.timerVCanvas];for(i=0;i0){name.lineTo(d[0],d[1])}else{name.moveTo(d[0],d[1])}}name.closePath();name.fill()},canvasFillRect:function(name,path){for(var i=0;i-1){this.elementArr.splice(def,1)}var childs=f.childNodes;for(var i=childs.length-1;i>=0;i--){f.removeChild(childs[i])}if(f&&f!=null&&f.parentNode){try{if(f.parentNode){f.parentNode.removeChild(f)}}catch(event){}}},getProportionCoor:function(stageW,stageH,vw,vh){var w=0,h=0,x=0,y=0;if(stageW/stageH]+>/g,'')};for(i=0;i0){arr.push(arrs[i])}else{if(arr.length>0){textSubtitles.push(arr)}arr=[]}}for(i=0;i=2){var sn=textSubtitle[0];var startTime=this.toSeconds(this.trim(textSubtitle[1].split(' --> ')[0]));var endTime=this.toSeconds(this.trim(textSubtitle[1].split(' --> ')[1]));var content=[delHtmlTag(textSubtitle[2])];if(textSubtitle.length>2){for(var j=3;j=thisTemp.numberTotal){thisTemp.stop()}};this.start=function(){if(!thisTemp.runing){thisTemp.runing=true;thisTemp.timeObj=window.setInterval(thisTemp.startFun,time)}};this.stop=function(){if(thisTemp.runing){thisTemp.runing=false;window.clearInterval(thisTemp.timeObj);thisTemp.timeObj=null}};if(time){this.time=time}if(fun){this.fun=fun}if(number){this.numberTotal=number}this.start()},toSeconds:function(t){var s=0.0;if(t){var p=t.split(':');for(i=0;iX8( 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 LKmY&$&We_JWsbM5 literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/js/ckplayer/ckplayer.xml b/demo/mask_detection/web/js/ckplayer/ckplayer.xml new file mode 100644 index 00000000..b7d9beec --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/ckplayer.xml @@ -0,0 +1,106 @@ + + + + + true + 30 + 100 + true + 0 + true + true + 200 + true + true + 200 + + true + true + true + true + true + + 10 + 0.1 + 1 + true + false + + false + false + true + true + + + false + 2 + start + + 1 + false + true + + + + 30 + , + + adPlay,adPause,playOrPause,videoPlay,videoPause,videoMute,videoEscMute,videoClear,changeVolume,fastBack,fastNext,videoSeek,newVideo,getMetaDate,videoRotation,videoBrightness,videoContrast,videoSaturation,videoHue,videoZoom,videoProportion,videoError,addListener,removeListener,addElement,getElement,deleteElement,animate,animateResume,animatePause,deleteAnimate,changeConfig,getConfig,openUrl,fullScreen,quitFullScreen,switchFull,screenshot,custom,changeControlBarShow,getCurrentSrc + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demo/mask_detection/web/js/ckplayer/hls/LICENSE b/demo/mask_detection/web/js/ckplayer/hls/LICENSE new file mode 100644 index 00000000..8f263a03 --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/hls/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2017 Dailymotion (http://www.dailymotion.com) + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +src/remux/mp4-generator.js and src/demux/exp-golomb.js implementation in this project +are derived from the HLS library for video.js (https://github.com/videojs/videojs-contrib-hls) + +That work is also covered by the Apache 2 License, following copyright: +Copyright (c) 2013-2015 Brightcove + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/demo/mask_detection/web/js/ckplayer/hls/hls.js b/demo/mask_detection/web/js/ckplayer/hls/hls.js new file mode 100644 index 00000000..3a95d08e --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/hls/hls.js @@ -0,0 +1,7 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Hls=e()}}(function(){var e;return function e(t,r,i){function a(s,o){if(!r[s]){if(!t[s]){var l="function"==typeof require&&require;if(!o&&l)return l(s,!0);if(n)return n(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var d=r[s]={exports:{}};t[s][0].call(d.exports,function(e){var r=t[s][1][e];return a(r?r:e)},d,d.exports,e,t,r,i)}return r[s].exports}for(var n="function"==typeof require&&require,s=0;s0&&this._events[e].length>r&&(this._events[e].warned=!0,console.trace),this},i.prototype.on=i.prototype.addListener,i.prototype.once=function(e,t){function r(){this.removeListener(e,r),i||(i=!0,t.apply(this,arguments))}if(!a(t))throw TypeError("listener must be a function");var i=!1;return r.listener=t,this.on(e,r),this},i.prototype.removeListener=function(e,t){var r,i,n,o;if(!a(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],n=r.length,i=-1,r===t||a(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(r)){for(o=n;o-- >0;)if(r[o]===t||r[o].listener&&r[o].listener===t){i=o;break}if(i<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(i,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},i.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],a(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},i.prototype.listeners=function(e){return this._events&&this._events[e]?a(this._events[e])?[this._events[e]]:this._events[e].slice():[]},i.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(a(t))return 1;if(t)return t.length}return 0},i.listenerCount=function(e,t){return e.listenerCount(t)}},{}],2:[function(t,r,i){!function(t){var a=/^((?:[^\/;?#]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/,n=/^([^\/;?#]*)(.*)$/,s={buildAbsoluteURL:function(e,t,r){if(r=r||{},e=e.trim(),!(t=t.trim())){if(!r.alwaysNormalize)return e;var i=this.parseURL(e);if(!o)throw new Error("Error trying to parse base URL.");return i.path=s.normalizePath(i.path),s.buildURLFromParts(i)}var a=this.parseURL(t);if(!a)throw new Error("Error trying to parse relative URL.");if(a.scheme)return r.alwaysNormalize?(a.path=s.normalizePath(a.path),s.buildURLFromParts(a)):t;var o=this.parseURL(e);if(!o)throw new Error("Error trying to parse base URL.");if(!o.netLoc&&o.path&&"/"!==o.path[0]){var l=n.exec(o.path);o.netLoc=l[1],o.path=l[2]}o.netLoc&&!o.path&&(o.path="/");var u={scheme:o.scheme,netLoc:a.netLoc,path:null,params:a.params,query:a.query,fragment:a.fragment};if(!a.netLoc&&(u.netLoc=o.netLoc,"/"!==a.path[0]))if(a.path){var d=o.path,f=d.substring(0,d.lastIndexOf("/")+1)+a.path;u.path=s.normalizePath(f)}else u.path=o.path,a.params||(u.params=o.params,a.query||(u.query=o.query));return null===u.path&&(u.path=r.alwaysNormalize?s.normalizePath(a.path):a.path),s.buildURLFromParts(u)},parseURL:function(e){var t=a.exec(e);return t?{scheme:t[1]||"",netLoc:t[2]||"",path:t[3]||"",params:t[4]||"",query:t[5]||"",fragment:t[6]||""}:null},normalizePath:function(e){for(e=e.split("").reverse().join("").replace(/(?:\/|^)\.(?=\/)/g,"");e.length!==(e=e.replace(/(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g,"")).length;);return e.split("").reverse().join("")},buildURLFromParts:function(e){return e.scheme+e.netLoc+e.path+e.params+e.query+e.fragment}};"object"==typeof i&&"object"==typeof r?r.exports=s:"function"==typeof e&&e.amd?e([],function(){return s}):"object"==typeof i?i.URLToolkit=s:t.URLToolkit=s}(this)},{}],3:[function(e,t,r){var i=arguments[3],a=arguments[4],n=arguments[5],s=JSON.stringify;t.exports=function(e,t){function r(e){p[e]=!0;for(var t in a[e][1]){var i=a[e][1][t];p[i]||r(i)}}for(var o,l=Object.keys(n),u=0,d=l.length;u500*r.duration/o){var l=e.levels,d=Math.max(1,n.bw?n.bw/8:1e3*n.loaded/s),f=l[r.level],c=f.realBitrate?Math.max(f.realBitrate,f.bitrate):f.bitrate,g=n.total?n.total:Math.max(n.loaded,Math.round(r.duration*c/8)),p=t.currentTime,y=(g-n.loaded)/d,m=(h.default.bufferInfo(t,p,e.config.maxBufferHole).end-p)/o;if(m<2*r.duration/o&&y>m){var E=void 0,b=void 0;for(b=r.level-1;b>a;b--){var T=l[b].realBitrate?Math.max(l[b].realBitrate,l[b].bitrate):l[b].bitrate;if((E=r.duration*T/(6.4*d))=i;u--){var d=l[u],f=d.details,c=f?f.totalduration/f.fragments.length:t,h=!!f&&f.live,g=void 0;g=u<=e?s*r:o*r;var p=l[u].realBitrate?Math.max(l[u].realBitrate,l[u].bitrate):l[u].bitrate,y=p*c/g;if(v.logger.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: "+u+"/"+Math.round(g)+"/"+p+"/"+c+"/"+n+"/"+y),g>p&&(!y||h||y=0)return c;v.logger.trace("rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering");var g=o?Math.min(o,i.maxStarvationDelay):i.maxStarvationDelay,p=i.abrBandWidthFactor,y=i.abrBandWidthUpFactor;if(0===f){var m=this.bitrateTestDelay;if(m){g=(o?Math.min(o,i.maxLoadingDelay):i.maxLoadingDelay)-m,v.logger.trace("bitrate test took "+Math.round(1e3*m)+"ms, set first fragment max fetchDuration to "+Math.round(1e3*g)+" ms"),p=y=1}}return c=this._findBestLevel(s,o,d,a,t,f+g,p,y,r),Math.max(c,0)}}]),t}(f.default);r.default=m},{30:30,31:31,32:32,34:34,48:48,50:50}],6:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&e===-1?(k.logger.log("audio:override startPosition with lastCurrentTime @"+t.toFixed(3)),this.state=R.IDLE):(this.lastCurrentTime=this.startPosition?this.startPosition:e,this.state=R.STARTING),this.nextLoadPosition=this.startPosition=this.lastCurrentTime,this.tick()}else this.startPosition=e,this.state=R.STOPPED}},{key:"stopLoad",value:function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.STOPPED}},{key:"tick",value:function(){1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){var e,t,r,i=this.hls,a=i.config;switch(this.state){case R.ERROR:case R.PAUSED:case R.BUFFER_FLUSHING:break;case R.STARTING:this.state=R.WAITING_TRACK,this.loadedmetadata=!1;break;case R.IDLE:var n=this.tracks;if(!n)break;if(!this.media&&(this.startFragRequested||!a.startFragPrefetch))break;e=this.loadedmetadata?this.media.currentTime:this.nextLoadPosition;var s=this.mediaBuffer?this.mediaBuffer:this.media,o=f.default.bufferInfo(s,e,a.maxBufferHole),l=o.len,d=o.end,c=this.fragPrevious,h=a.maxMaxBufferLength,g=this.audioSwitch,p=this.trackId;if((lE||o.nextStart))return;k.logger.log("alt audio track ahead of main track, seek to start of alt audio track"),this.media.currentTime=E+.05}if(r.initSegment&&!r.initSegment.data)T=r.initSegment;else if(d<=E){if(T=y[0],r.live&&T.loadIdx&&T.loadIdx===this.fragLoadIdx){var A=o.nextStart?o.nextStart:E;return k.logger.log("no alt audio available @currentTime:"+this.media.currentTime+", seeking @"+(A+.05)),void(this.media.currentTime=A+.05)}}else{var S=void 0,L=a.maxFragLookUpTolerance,w=c?y[c.sn-y[0].sn+1]:void 0,D=function(e){var t=Math.min(L,e.duration);return e.start+e.duration-t<=d?1:e.start-t>d&&e.start?-1:0};db-L&&(L=0),S=w&&!D(w)?w:u.default.search(y,D)):S=y[m-1],S&&(T=S,E=S.start,c&&T.level===c.level&&T.sn===c.sn&&(T.snO&&Math.abs(this.fragLoadIdx-T.loadIdx)=P||C)&&(k.logger.log("audioStreamController: retryDate reached, switch back to IDLE state"),this.state=R.IDLE);break;case R.WAITING_INIT_PTS:case R.STOPPED:case R.FRAG_LOADING:case R.PARSING:case R.PARSED:case R.ENDED:}}},{key:"onMediaAttached",value:function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("ended",this.onvended);var r=this.config;this.tracks&&r.autoStartLoad&&this.startLoad(r.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(k.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.tracks;t&&t.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){this.state===R.ENDED&&(this.state=R.IDLE),this.media&&(this.lastCurrentTime=this.media.currentTime),void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold),this.tick()}},{key:"onMediaEnded",value:function(){this.startPosition=this.lastCurrentTime=0}},{key:"onAudioTracksUpdated",value:function(e){k.logger.log("audio tracks updated"),this.tracks=e.audioTracks}},{key:"onAudioTrackSwitching",value:function(e){var t=!!e.url;this.trackId=e.id,this.state=R.IDLE,this.fragCurrent=null,this.state=R.PAUSED,this.waitingFragment=null,t?this.timer||(this.timer=setInterval(this.ontick,100)):this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),t&&(this.audioSwitch=!0,this.state=R.IDLE,void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold)),this.tick()}},{key:"onAudioTrackLoaded",value:function(e){var t=e.details,r=e.id,i=this.tracks[r],a=t.totalduration,n=0;if(k.logger.log("track "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+a),t.live){var s=i.details;s&&t.fragments.length>0?(E.default.mergeDetails(s,t),n=t.fragments[0].start,t.PTSKnown?k.logger.log("live audio playlist sliding:"+n.toFixed(3)):k.logger.log("live audio playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,k.logger.log("live audio playlist - first load, unknown sliding"))}else t.PTSKnown=!1;if(i.details=t,!this.startFragRequested){if(this.startPosition===-1){var o=t.startTimeOffset;isNaN(o)?this.startPosition=0:(k.logger.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o)}this.nextLoadPosition=this.startPosition}this.state===R.WAITING_TRACK&&(this.state=R.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===R.KEY_LOADING&&(this.state=R.IDLE,this.tick())}},{key:"onFragLoaded",value:function(e){var t=this.fragCurrent,r=e.frag;if(this.state===R.FRAG_LOADING&&t&&"audio"===r.type&&r.level===t.level&&r.sn===t.sn){var i=this.tracks[this.trackId],a=i.details,n=a.totalduration,s=t.level,o=t.sn,l=t.cc,u=this.config.defaultAudioCodec||i.audioCodec||"mp4a.40.2",d=this.stats=e.stats;if("initSegment"===o)this.state=R.IDLE,d.tparsed=d.tbuffered=performance.now(),a.initSegment.data=e.payload,this.hls.trigger(v.default.FRAG_BUFFERED,{stats:d,frag:t,id:"audio"}),this.tick();else{this.state=R.PARSING,this.appended=!1,this.demuxer||(this.demuxer=new h.default(this.hls,"audio"));var f=this.initPTS[l],c=a.initSegment?a.initSegment.data:[];if(c||void 0!==f){this.pendingBuffering=!0,k.logger.log("Demuxing "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s);this.demuxer.push(e.payload,c,u,null,t,n,!1,f)}else k.logger.log("unknown video PTS for continuity counter "+l+", waiting for video PTS before demuxing audio frag "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s),this.waitingFragment=e,this.state=R.WAITING_INIT_PTS}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(e){var t=this.fragCurrent,r=e.frag;if(t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING){var i=e.tracks,a=void 0;if(i.video&&delete i.video,a=i.audio){a.levelCodec="mp4a.40.2",a.id=e.id,this.hls.trigger(v.default.BUFFER_CODECS,i),k.logger.log("audio track:audio,container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var n=a.initSegment;if(n){var s={type:"audio",data:n,parent:"audio",content:"initSegment"};this.audioSwitch?this.pendingData=[s]:(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(v.default.BUFFER_APPENDING,s))}this.tick()}}}},{key:"onFragParsingData",value:function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"audio"===e.id&&"audio"===e.type&&i.sn===r.sn&&i.level===r.level&&this.state===R.PARSING){var a=this.trackId,n=this.tracks[a],s=this.hls;isNaN(e.endPTS)&&(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),k.logger.log("parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb),E.default.updateFragPTSDTS(n.details,r.sn,e.startPTS,e.endPTS);var o=this.audioSwitch,l=this.media,u=!1;if(o&&l)if(l.readyState){var d=l.currentTime;k.logger.log("switching audio track : currentTime:"+d),d>=e.startPTS&&(k.logger.log("switching audio track : flushing all audio"),this.state=R.BUFFER_FLUSHING,s.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),u=!0,this.audioSwitch=!1,s.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:a}))}else this.audioSwitch=!1,s.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:a});var f=this.pendingData;this.audioSwitch||([e.data1,e.data2].forEach(function(t){t&&t.length&&f.push({type:e.type,data:t,parent:"audio",content:"data"})}),!u&&f.length&&(f.forEach(function(e){t.state===R.PARSING&&(t.pendingBuffering=!0,t.hls.trigger(v.default.BUFFER_APPENDING,e))}),this.pendingData=[],this.appended=!0)),this.tick()}}},{key:"onFragParsed",value:function(e){var t=this.fragCurrent,r=e.frag;t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING&&(this.stats.tparsed=performance.now(),this.state=R.PARSED,this._checkAppendedParsed())}},{key:"onBufferCreated",value:function(e){var t=e.tracks.audio;t&&(this.mediaBuffer=t.buffer,this.loadedmetadata=!0)}},{key:"onBufferAppended",value:function(e){if("audio"===e.parent){var t=this.state;t!==R.PARSING&&t!==R.PARSED||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}}},{key:"_checkAppendedParsed",value:function(){if(!(this.state!==R.PARSED||this.appended&&this.pendingBuffering)){var e=this.fragCurrent,t=this.stats,r=this.hls;if(e){this.fragPrevious=e,t.tbuffered=performance.now(),r.trigger(v.default.FRAG_BUFFERED,{stats:t,frag:e,id:"audio"});var i=this.mediaBuffer?this.mediaBuffer:this.media;k.logger.log("audio buffered : "+T.default.toString(i.buffered)),this.audioSwitch&&this.appended&&(this.audioSwitch=!1,r.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:this.trackId})),this.state=R.IDLE}this.tick()}}},{key:"onError",value:function(e){var t=e.frag;if(!t||"audio"===t.type)switch(e.details){case _.ErrorDetails.FRAG_LOAD_ERROR:case _.ErrorDetails.FRAG_LOAD_TIMEOUT:if(!e.fatal){var r=this.fragLoadError;r?r++:r=1;var i=this.config;if(r<=i.fragLoadingMaxRetry){this.fragLoadError=r,t.loadCounter=0;var a=Math.min(Math.pow(2,r-1)*i.fragLoadingRetryDelay,i.fragLoadingMaxRetryTimeout);k.logger.warn("audioStreamController: frag loading failed, retry in "+a+" ms"),this.retryDate=performance.now()+a,this.state=R.FRAG_LOADING_WAITING_RETRY}else k.logger.error("audioStreamController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=R.ERROR}break;case _.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case _.ErrorDetails.AUDIO_TRACK_LOAD_ERROR:case _.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:case _.ErrorDetails.KEY_LOAD_ERROR:case _.ErrorDetails.KEY_LOAD_TIMEOUT:this.state!==R.ERROR&&(this.state=e.fatal?R.ERROR:R.IDLE,k.logger.warn("audioStreamController: "+e.details+" while loading frag,switch to "+this.state+" state ..."));break;case _.ErrorDetails.BUFFER_FULL_ERROR:if("audio"===e.parent&&(this.state===R.PARSING||this.state===R.PARSED)){var n=this.mediaBuffer,s=this.media.currentTime;if(n&&f.default.isBuffered(n,s)&&f.default.isBuffered(n,s+.5)){var o=this.config;o.maxMaxBufferLength>=o.maxBufferLength&&(o.maxMaxBufferLength/=2,k.logger.warn("audio:reduce max buffer length to "+o.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*o.fragLoadingLoopThreshold),this.state=R.IDLE}else k.logger.warn("buffer full error also media.currentTime is not buffered, flush audio buffer"),this.fragCurrent=null,this.state=R.BUFFER_FLUSHING,this.hls.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"})}}}},{key:"onBufferFlushed",value:function(){var e=this,t=this.pendingData;t&&t.length?(k.logger.log("appending pending audio data on Buffer Flushed"),t.forEach(function(t){e.hls.trigger(v.default.BUFFER_APPENDING,t)}),this.appended=!0,this.pendingData=[],this.state=R.PARSED):(this.state=R.IDLE,this.fragPrevious=null,this.tick())}},{key:"state",set:function(e){if(this.state!==e){var t=this.state;this._state=e,k.logger.log("audio stream:"+t+"->"+e)}},get:function(){return this._state}}]),t}(y.default);r.default=A},{24:24,30:30,31:31,32:32,34:34,35:35,45:45,50:50,51:51}],7:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){this.updateTrack(this.trackId)}},{key:"onManifestLoading",value:function(){this.tracks=[],this.trackId=-1}},{key:"onManifestLoaded",value:function(e){var t=this,r=e.audioTracks||[],i=!1;this.tracks=r,this.hls.trigger(u.default.AUDIO_TRACKS_UPDATED,{audioTracks:r});var a=0;r.forEach(function(e){if(e.default)return t.audioTrack=a,void(i=!0);a++}),i===!1&&r.length&&(c.logger.log("no default audio track defined, use first audio track as default"),this.audioTrack=0)}},{key:"onAudioTrackLoaded",value:function(e){e.id=0&&e=0&&e.1){var a=i.updating;try{i.abort()}catch(e){a=!0,c.logger.warn("can not abort audio buffer: "+e)}a?this.audioTimestampOffset=e.start:(c.logger.warn("change mpeg audio timestamp offset from "+i.timestampOffset+" to "+e.start),i.timestampOffset=e.start)}}}},{key:"onManifestParsed",value:function(e){var t=e.audio,r=e.video,i=0;e.altAudio&&(t||r)&&(i=(t?1:0)+(r?1:0),c.logger.log(i+" sourceBuffer(s) expected")),this.sourceBufferNb=i}},{key:"onMediaAttaching",value:function(e){var t=this.media=e.media;if(t){var r=this.mediaSource=new MediaSource;this.onmso=this.onMediaSourceOpen.bind(this),this.onmse=this.onMediaSourceEnded.bind(this),this.onmsc=this.onMediaSourceClose.bind(this),r.addEventListener("sourceopen",this.onmso),r.addEventListener("sourceended",this.onmse),r.addEventListener("sourceclose",this.onmsc),t.src=URL.createObjectURL(r)}}},{key:"onMediaDetaching",value:function(){c.logger.log("media source detaching");var e=this.mediaSource;if(e){if("open"===e.readyState)try{e.endOfStream()}catch(e){c.logger.warn("onMediaDetaching:"+e.message+" while calling endOfStream")}e.removeEventListener("sourceopen",this.onmso),e.removeEventListener("sourceended",this.onmse),e.removeEventListener("sourceclose",this.onmsc),this.media&&(URL.revokeObjectURL(this.media.src),this.media.removeAttribute("src"),this.media.load()),this.mediaSource=null,this.media=null,this.pendingTracks={},this.tracks={},this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}this.onmso=this.onmse=this.onmsc=null,this.hls.trigger(u.default.MEDIA_DETACHED)}},{key:"onMediaSourceOpen",value:function(){c.logger.log("media source opened"),this.hls.trigger(u.default.MEDIA_ATTACHED,{media:this.media});var e=this.mediaSource;e&&e.removeEventListener("sourceopen",this.onmso),this.checkPendingTracks()}},{key:"checkPendingTracks",value:function(){var e=this.pendingTracks,t=Object.keys(e).length;t&&(this.sourceBufferNb<=t||0===this.sourceBufferNb)&&(this.createSourceBuffers(e),this.pendingTracks={},this.doAppending())}},{key:"onMediaSourceClose",value:function(){c.logger.log("media source closed")}},{key:"onMediaSourceEnded",value:function(){c.logger.log("media source ended")}},{key:"onSBUpdateEnd",value:function(){if(this.audioTimestampOffset){var e=this.sourceBuffer.audio;c.logger.warn("change mpeg audio timestamp offset from "+e.timestampOffset+" to "+this.audioTimestampOffset),e.timestampOffset=this.audioTimestampOffset,delete this.audioTimestampOffset}this._needsFlush&&this.doFlush(),this._needsEos&&this.checkEos(),this.appending=!1;var t=this.parent,r=this.segments.reduce(function(e,r){return r.parent===t?e+1:e},0);this.hls.trigger(u.default.BUFFER_APPENDED,{parent:t,pending:r}),this._needsFlush||this.doAppending(),this.updateMediaElementDuration()}},{key:"onSBUpdateError",value:function(e){c.logger.error("sourceBuffer error:",e),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1})}},{key:"onBufferReset",value:function(){var e=this.sourceBuffer;for(var t in e){var r=e[t];try{this.mediaSource.removeSourceBuffer(r),r.removeEventListener("updateend",this.onsbue),r.removeEventListener("error",this.onsbe)}catch(e){}}this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}},{key:"onBufferCodecs",value:function(e){if(0===Object.keys(this.sourceBuffer).length){for(var t in e)this.pendingTracks[t]=e[t];var r=this.mediaSource;r&&"open"===r.readyState&&this.checkPendingTracks()}}},{key:"createSourceBuffers",value:function(e){var t=this.sourceBuffer,r=this.mediaSource;for(var i in e)if(!t[i]){var a=e[i],n=a.levelCodec||a.codec,s=a.container+";codecs="+n;c.logger.log("creating sourceBuffer("+s+")");try{var o=t[i]=r.addSourceBuffer(s);o.addEventListener("updateend",this.onsbue),o.addEventListener("error",this.onsbe),this.tracks[i]={codec:n,container:a.container},a.buffer=o}catch(e){c.logger.error("error while trying to add sourceBuffer:"+e.message),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_ADD_CODEC_ERROR,fatal:!1,err:e,mimeType:s})}}this.hls.trigger(u.default.BUFFER_CREATED,{tracks:e})}},{key:"onBufferAppending",value:function(e){this._needsFlush||(this.segments?this.segments.push(e):this.segments=[e],this.doAppending())}},{key:"onBufferAppendFail",value:function(e){c.logger.error("sourceBuffer error:",e.event),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1})}},{key:"onBufferEos",value:function(e){var t=this.sourceBuffer,r=e.type;for(var i in t)r&&i!==r||t[i].ended||(t[i].ended=!0,c.logger.log(i+" sourceBuffer now EOS"));this.checkEos()}},{key:"checkEos",value:function(){var e=this.sourceBuffer,t=this.mediaSource;if(!t||"open"!==t.readyState)return void(this._needsEos=!1);for(var r in e){var i=e[r];if(!i.ended)return;if(i.updating)return void(this._needsEos=!0)}c.logger.log("all media data available, signal endOfStream() to MediaSource and stop loading fragment");try{t.endOfStream()}catch(e){c.logger.warn("exception while calling mediaSource.endOfStream()")}this._needsEos=!1}},{key:"onBufferFlushing",value:function(e){this.flushRange.push({start:e.startOffset,end:e.endOffset,type:e.type}),this.flushBufferCounter=0,this.doFlush()}},{key:"onLevelUpdated",value:function(e){var t=e.details;0!==t.fragments.length&&(this._levelDuration=t.totalduration+t.fragments[0].start,this.updateMediaElementDuration())}},{key:"updateMediaElementDuration",value:function(){var e=this.media,t=this.mediaSource,r=this.sourceBuffer,i=this._levelDuration;if(null!==i&&e&&t&&r&&0!==e.readyState&&"open"===t.readyState){for(var a in r)if(r[a].updating)return;null===this._msDuration&&(this._msDuration=t.duration);var n=e.duration;(i>this._msDuration&&i>n||n===1/0||isNaN(n))&&(c.logger.log("Updating mediasource duration to "+i.toFixed(3)),this._msDuration=t.duration=i)}}},{key:"doFlush",value:function(){for(;this.flushRange.length;){var e=this.flushRange[0];if(!this.flushBuffer(e.start,e.end,e.type))return void(this._needsFlush=!0);this.flushRange.shift(),this.flushBufferCounter=0}if(0===this.flushRange.length){this._needsFlush=!1;var t=0,r=this.sourceBuffer;try{for(var i in r)t+=r[i].buffered.length}catch(e){c.logger.error("error while accessing sourceBuffer.buffered")}this.appended=t,this.hls.trigger(u.default.BUFFER_FLUSHED)}}},{key:"doAppending",value:function(){var e=this.hls,t=this.sourceBuffer,r=this.segments;if(Object.keys(t).length){if(this.media.error)return this.segments=[],void c.logger.error("trying to append although a media error occured, flush segment and abort");if(this.appending)return;if(r&&r.length){var i=r.shift();try{var a=i.type,n=t[a];n?n.updating?r.unshift(i):(n.ended=!1,this.parent=i.parent,n.appendBuffer(i.data),this.appendError=0,this.appended++,this.appending=!0):this.onSBUpdateEnd()}catch(t){c.logger.error("error while trying to append buffer:"+t.message),r.unshift(i);var s={type:h.ErrorTypes.MEDIA_ERROR,parent:i.parent};if(22===t.code)return this.segments=[],s.details=h.ErrorDetails.BUFFER_FULL_ERROR,s.fatal=!1,void e.trigger(u.default.ERROR,s);if(this.appendError?this.appendError++:this.appendError=1,s.details=h.ErrorDetails.BUFFER_APPEND_ERROR,this.appendError>e.config.appendErrorMaxRetry)return c.logger.log("fail "+e.config.appendErrorMaxRetry+" times to append segment in sourceBuffer"),r=[],s.fatal=!0,void e.trigger(u.default.ERROR,s);s.fatal=!1,e.trigger(u.default.ERROR,s)}}}}},{key:"flushBuffer",value:function(e,t,r){var i,a,n,s,o,l,u=this.sourceBuffer;if(Object.keys(u).length){if(c.logger.log("flushBuffer,pos/start/end: "+this.media.currentTime.toFixed(3)+"/"+e+"/"+t),this.flushBufferCounter.5)return this.flushBufferCounter++,c.logger.log("flush "+d+" ["+o+","+l+"], of ["+n+","+s+"], pos:"+this.media.currentTime),i.remove(o,l),!1}catch(e){c.logger.warn("exception while accessing sourcebuffer, it might have been removed from MediaSource")}}}else c.logger.warn("abort flushing too many retries");c.logger.log("buffer flushed")}return!0}}]),t}(f.default);r.default=g},{30:30,31:31,32:32,50:50}],9:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;rthis.autoLevelCapping&&t.streamController.nextLevelSwitch(),this.autoLevelCapping=t.autoLevelCapping}}}},{key:"getMaxLevel",value:function(e){var t=0,r=void 0,i=void 0,a=this.mediaWidth,n=this.mediaHeight,s=0,o=0;for(r=0;r<=e&&(i=this.levels[r],!this.isLevelRestricted(r))&&(t=r,s=i.width,o=i.height,!(a<=s||n<=o));r++);return t}},{key:"isLevelRestricted",value:function(e){return!(!this.restrictedLevels||this.restrictedLevels.indexOf(e)===-1)}},{key:"contentScaleFactor",get:function(){var e=1;try{e=window.devicePixelRatio}catch(e){}return e}},{key:"mediaWidth",get:function(){var e=void 0,t=this.media;return t&&(e=t.width||t.clientWidth||t.offsetWidth,e*=this.contentScaleFactor),e}},{key:"mediaHeight",get:function(){var e=void 0,t=this.media;return t&&(e=t.height||t.clientHeight||t.offsetHeight,e*=this.contentScaleFactor),e}}]),t}(f.default);r.default=c},{31:31,32:32}],10:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&n>l.config.fpsDroppedMonitoringThreshold*s){var d=l.currentLevel;c.logger.warn("drop FPS ratio greater than max allowed value for currentLevel: "+d),d>0&&(l.autoLevelCapping===-1||l.autoLevelCapping>=d)&&(d-=1,l.trigger(u.default.FPS_DROP_LEVEL_CAPPING,{level:d,droppedLevel:l.currentLevel}),l.autoLevelCapping=d,l.streamController.nextLevelSwitch())}}this.lastTime=i,this.lastDroppedFrames=r,this.lastDecodedFrames=t}}},{key:"checkFPSInterval",value:function(){var e=this.video;if(e)if(this.isVideoPlaybackQualityAvailable){var t=e.getVideoPlaybackQuality();this.checkFPS(e,t.totalVideoFrames,t.droppedVideoFrames)}else this.checkFPS(e,e.webkitDecodedFrameCount,e.webkitDroppedFrameCount)}}]),t}(f.default);r.default=h},{31:31,32:32,50:50}],11:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0})}else o.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:o.url,reason:"no level with compatible codecs found in manifest"})}},{key:"setLevelInternal",value:function(e){var t=this._levels,r=this.hls;if(e>=0&&e1&&a.loadErrore&&(this._level===e&&void 0!==t[e].details||this.setLevelInternal(e))}},{key:"manualLevel",get:function(){return this._manualLevel},set:function(e){this._manualLevel=e,void 0===this._startLevel&&(this._startLevel=e),e!==-1&&(this.level=e)}},{key:"firstLevel",get:function(){return this._firstLevel},set:function(e){this._firstLevel=e}},{key:"startLevel",get:function(){if(void 0===this._startLevel){var e=this.hls.config.startLevel;return void 0!==e?e:this._firstLevel}return this._startLevel},set:function(e){this._startLevel=e}},{key:"nextLoadLevel",get:function(){return this._manualLevel!==-1?this._manualLevel:this.hls.nextAutoLevel},set:function(e){this.level=e,this._manualLevel===-1&&(this.hls.nextAutoLevel=e)}}]),t}(f.default);r.default=p},{30:30,31:31,32:32,34:34,50:50}],12:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&e===-1&&(k.logger.log("override startPosition with lastCurrentTime @"+t.toFixed(3)),e=t),this.state=R.IDLE,this.nextLoadPosition=this.startPosition=this.lastCurrentTime=e,this.tick()}else this.forceStartLoad=!0,this.state=R.STOPPED}},{key:"stopLoad",value:function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.STOPPED,this.forceStartLoad=!1}},{key:"tick",value:function(){1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){switch(this.state){case R.ERROR:break;case R.BUFFER_FLUSHING:this.fragLoadError=0;break;case R.IDLE:if(!this._doTickIdle())return;break;case R.WAITING_LEVEL:var e=this.levels[this.level];e&&e.details&&(this.state=R.IDLE);break;case R.FRAG_LOADING_WAITING_RETRY:var t=performance.now(),r=this.retryDate;(!r||t>=r||this.media&&this.media.seeking)&&(k.logger.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=R.IDLE);break;case R.ERROR:case R.STOPPED:case R.FRAG_LOADING:case R.PARSING:case R.PARSED:case R.ENDED:}this._checkBuffer(),this._checkFragmentChanged()}},{key:"_doTickIdle",value:function(){var e=this.hls,t=e.config,r=this.media;if(void 0!==this.levelLastLoaded&&!r&&(this.startFragRequested||!t.startFragPrefetch))return!0;var i=void 0;i=this.loadedmetadata?r.currentTime:this.nextLoadPosition;var a=e.nextLoadLevel,n=this.levels[a],s=n.bitrate,o=void 0;o=s?Math.max(8*t.maxBufferSize/s,t.maxBufferLength):t.maxBufferLength,o=Math.min(o,t.maxMaxBufferLength);var l=f.default.bufferInfo(this.mediaBuffer?this.mediaBuffer:r,i,t.maxBufferHole),u=l.len;if(u>=o)return!0;k.logger.trace("buffer length of "+u.toFixed(3)+" is below max of "+o.toFixed(3)+". checking for more payload ..."),this.level=e.nextLoadLevel=a;var d=n.details;if(void 0===d||d.live&&this.levelLastLoaded!==a)return this.state=R.WAITING_LEVEL,!0;var c=this.fragPrevious;if(!d.live&&c&&c.sn===d.endSN){if(Math.min(r.duration,c.start+c.duration)-Math.max(l.end,c.start)<=Math.max(.2,c.duration/2)){var h={};return this.altAudio&&(h.type="video"),this.hls.trigger(v.default.BUFFER_EOS,h),this.state=R.ENDED,!0}}return this._fetchPayloadOrEos(i,l,d)}},{key:"_fetchPayloadOrEos",value:function(e,t,r){var i=this.fragPrevious,a=this.level,n=r.fragments,s=n.length;if(0===s)return!1;var o=n[0].start,l=n[s-1].start+n[s-1].duration,u=t.end,d=void 0;if(r.initSegment&&!r.initSegment.data)d=r.initSegment;else if(r.live){var f=this.config.initialLiveManifestSize;if(sf&&(l.currentTime=f)}if(e.PTSKnown&&t>i&&l&&l.readyState)return null;if(this.startFragRequested&&!e.PTSKnown){if(a){var c=a.sn+1;c>=e.startSN&&c<=e.endSN&&(u=n[c-e.startSN],k.logger.log("live playlist, switching playlist, load frag with next SN: "+u.sn))}u||(u=n[Math.min(s-1,Math.round(s/2))],k.logger.log("live playlist, switching playlist, unknown, load middle frag : "+u.sn))}return u}},{key:"_findFragment",value:function(e,t,r,i,a,n,s){var o=this.hls.config,l=void 0,d=void 0,f=o.maxFragLookUpTolerance,c=t?i[t.sn-i[0].sn+1]:void 0,h=function(e){var t=Math.min(f,e.duration);return e.start+e.duration-t<=a?1:e.start-t>a&&e.start?-1:0};if(an-f&&(f=0),d=c&&!h(c)?c:u.default.search(i,h)):d=i[r-1],d){l=d;var g=l.sn-s.startSN,v=t&&l.level===t.level,p=i[g-1],y=i[g+1];if(v&&l.sn===t.sn)if(l.sno.maxBufferHole&&t.dropped&&g?(l=p,k.logger.warn("SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this"),t.loadCounter--):(l=y,k.logger.log("SN just loaded, load next one: "+l.sn)) +}else l=null;else l.dropped&&!v&&(y&&y.backtracked?(k.logger.warn("Already backtracked from fragment "+(g+1)+", will not backtrack to fragment "+g+". Loading fragment "+(g+1)),l=y):(k.logger.warn("Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe"),l.dropped=0,p?(p.loadCounter&&p.loadCounter--,l=p):l=null))}return l}},{key:"_loadFragmentOrKey",value:function(e,t,r,i,a){var n=this.hls,s=n.config;if(!e.decryptdata||null==e.decryptdata.uri||null!=e.decryptdata.key){if(k.logger.log("Loading "+e.sn+" of ["+r.startSN+" ,"+r.endSN+"],level "+t+", currentTime:"+i.toFixed(3)+",bufferEnd:"+a.toFixed(3)),void 0!==this.fragLoadIdx?this.fragLoadIdx++:this.fragLoadIdx=0,e.loadCounter){e.loadCounter++;var o=s.fragLoadingLoopThreshold;if(e.loadCounter>o&&Math.abs(this.fragLoadIdx-e.loadIdx)t.endPTS?1:0})}},{key:"followingBufferedFrag",value:function(e){return e?this.getBufferedFrag(e.endPTS+.5):null}},{key:"_checkFragmentChanged",value:function(){var e,t,r=this.media;if(r&&r.readyState&&r.seeking===!1&&(t=r.currentTime,t>r.playbackRate*this.lastCurrentTime&&(this.lastCurrentTime=t),f.default.isBuffered(r,t)?e=this.getBufferedFrag(t):f.default.isBuffered(r,t+.1)&&(e=this.getBufferedFrag(t+.1)),e)){var i=e;if(i!==this.fragPlaying){this.hls.trigger(v.default.FRAG_CHANGED,{frag:i});var a=i.level;this.fragPlaying&&this.fragPlaying.level===a||this.hls.trigger(v.default.LEVEL_SWITCHED,{level:a}),this.fragPlaying=i}}}},{key:"immediateLevelSwitch",value:function(){if(k.logger.log("immediateLevelSwitch"),!this.immediateSwitch){this.immediateSwitch=!0;var e=this.media,t=void 0;e?(t=e.paused,e.pause()):t=!0,this.previouslyPaused=t}var r=this.fragCurrent;r&&r.loader&&r.loader.abort(),this.fragCurrent=null,this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)}},{key:"immediateLevelSwitchEnd",value:function(){var e=this.media;e&&e.buffered.length&&(this.immediateSwitch=!1,f.default.isBuffered(e,e.currentTime)&&(e.currentTime-=1e-4),this.previouslyPaused||e.play())}},{key:"nextLevelSwitch",value:function(){var e=this.media;if(e&&e.readyState){var t=void 0,r=void 0,i=void 0;if(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,r=this.getBufferedFrag(e.currentTime),r&&r.startPTS>1&&this.flushMainBuffer(0,r.startPTS-1),e.paused)t=0;else{var a=this.hls.nextLoadLevel,n=this.levels[a],s=this.fragLastKbps;t=s&&this.fragCurrent?this.fragCurrent.duration*n.bitrate/(1e3*s)+1:0}if((i=this.getBufferedFrag(e.currentTime+t))&&(i=this.followingBufferedFrag(i))){var o=this.fragCurrent;o&&o.loader&&o.loader.abort(),this.fragCurrent=null,this.flushMainBuffer(i.startPTS,Number.POSITIVE_INFINITY)}}}},{key:"flushMainBuffer",value:function(e,t){this.state=R.BUFFER_FLUSHING;var r={startOffset:e,endOffset:t};this.altAudio&&(r.type="video"),this.hls.trigger(v.default.BUFFER_FLUSHING,r)}},{key:"onMediaAttached",value:function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("seeked",this.onvseeked),t.addEventListener("ended",this.onvended);var r=this.config;this.levels&&r.autoStartLoad&&this.hls.startLoad(r.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(k.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.levels;t&&t.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0,e.backtracked=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("seeked",this.onvseeked),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){var e=this.media,t=e?e.currentTime:void 0,r=this.config;if(k.logger.log("media seeking to "+t.toFixed(3)),this.state===R.FRAG_LOADING){var i=this.mediaBuffer?this.mediaBuffer:e,a=f.default.bufferInfo(i,t,this.config.maxBufferHole),n=this.fragCurrent;if(0===a.len&&n){var s=r.maxFragLookUpTolerance,o=n.start-s,l=n.start+n.duration+s;tl?(n.loader&&(k.logger.log("seeking outside of buffer while fragment load in progress, cancel fragment load"),n.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.state=R.IDLE):k.logger.log("seeking outside of buffer but within currently loaded fragment range")}}else this.state===R.ENDED&&(this.state=R.IDLE);e&&(this.lastCurrentTime=t),this.state!==R.FRAG_LOADING&&void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*r.fragLoadingLoopThreshold),this.loadedmetadata||(this.nextLoadPosition=this.startPosition=t),this.tick()}},{key:"onMediaSeeked",value:function(){k.logger.log("media seeked to "+this.media.currentTime.toFixed(3)),this.tick()}},{key:"onMediaEnded",value:function(){k.logger.log("media ended"),this.startPosition=this.lastCurrentTime=0}},{key:"onManifestLoading",value:function(){k.logger.log("trigger BUFFER_RESET"),this.hls.trigger(v.default.BUFFER_RESET),this._bufferedFrags=[],this.stalled=!1,this.startPosition=this.lastCurrentTime=0}},{key:"onManifestParsed",value:function(e){var t,r=!1,i=!1;e.levels.forEach(function(e){(t=e.audioCodec)&&(t.indexOf("mp4a.40.2")!==-1&&(r=!0),t.indexOf("mp4a.40.5")!==-1&&(i=!0))}),this.audioCodecSwitch=r&&i,this.audioCodecSwitch&&k.logger.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.levels=e.levels,this.startLevelLoaded=!1,this.startFragRequested=!1;var a=this.config;(a.autoStartLoad||this.forceStartLoad)&&this.hls.startLoad(a.startPosition)}},{key:"onLevelLoaded",value:function(e){var t=e.details,r=e.level,i=this.levels[r],a=t.totalduration,n=0;if(k.logger.log("level "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+a),this.levelLastLoaded=r,t.live){var s=i.details;s&&t.fragments.length>0?(E.default.mergeDetails(s,t),n=t.fragments[0].start,this.liveSyncPosition=this.computeLivePosition(n,s),t.PTSKnown?k.logger.log("live playlist sliding:"+n.toFixed(3)):k.logger.log("live playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,k.logger.log("live playlist - first load, unknown sliding"))}else t.PTSKnown=!1;if(i.details=t,this.hls.trigger(v.default.LEVEL_UPDATED,{details:t,level:r}),this.startFragRequested===!1){if(this.startPosition===-1||this.lastCurrentTime===-1){var o=t.startTimeOffset;isNaN(o)?t.live?(this.startPosition=this.computeLivePosition(n,t),k.logger.log("configure startPosition to "+this.startPosition)):this.startPosition=0:(o<0&&(k.logger.log("negative start time offset "+o+", count from end of last fragment"),o=n+a+o),k.logger.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o),this.lastCurrentTime=this.startPosition}this.nextLoadPosition=this.startPosition}this.state===R.WAITING_LEVEL&&(this.state=R.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===R.KEY_LOADING&&(this.state=R.IDLE,this.tick())}},{key:"onFragLoaded",value:function(e){var t=this.fragCurrent,r=e.frag;if(this.state===R.FRAG_LOADING&&t&&"main"===r.type&&r.level===t.level&&r.sn===t.sn){var i=e.stats,a=this.levels[t.level],n=a.details;if(k.logger.log("Loaded "+t.sn+" of ["+n.startSN+" ,"+n.endSN+"],level "+t.level),this.bitrateTest=!1,this.stats=i,r.bitrateTest===!0&&this.hls.nextLoadLevel)this.state=R.IDLE,this.startFragRequested=!1,i.tparsed=i.tbuffered=performance.now(),this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:t,id:"main"}),this.tick();else if("initSegment"===r.sn)this.state=R.IDLE,i.tparsed=i.tbuffered=performance.now(),n.initSegment.data=e.payload,this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:t,id:"main"}),this.tick();else{this.state=R.PARSING;var s=n.totalduration,o=t.level,l=t.sn,u=this.config.defaultAudioCodec||a.audioCodec;this.audioCodecSwap&&(k.logger.log("swapping playlist audio codec"),void 0===u&&(u=this.lastAudioCodec),u&&(u=u.indexOf("mp4a.40.5")!==-1?"mp4a.40.2":"mp4a.40.5")),this.pendingBuffering=!0,this.appended=!1,k.logger.log("Parsing "+l+" of ["+n.startSN+" ,"+n.endSN+"],level "+o+", cc "+t.cc);var d=this.demuxer;d||(d=this.demuxer=new h.default(this.hls,"main"));var f=this.media,c=f&&f.seeking,g=!c&&(n.PTSKnown||!n.live),p=n.initSegment?n.initSegment.data:[];d.push(e.payload,p,u,a.videoCodec,t,s,g,void 0)}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(e){var t=this.fragCurrent,r=e.frag;if(t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING){var i,a,n=e.tracks;if(n.audio&&this.altAudio&&delete n.audio,a=n.audio){var s=this.levels[this.level].audioCodec,o=navigator.userAgent.toLowerCase();s&&this.audioCodecSwap&&(k.logger.log("swapping playlist audio codec"),s=s.indexOf("mp4a.40.5")!==-1?"mp4a.40.2":"mp4a.40.5"),this.audioCodecSwitch&&1!==a.metadata.channelCount&&o.indexOf("firefox")===-1&&(s="mp4a.40.5"),o.indexOf("android")!==-1&&"audio/mpeg"!==a.container&&(s="mp4a.40.2",k.logger.log("Android: force audio codec to "+s)),a.levelCodec=s,a.id=e.id}a=n.video,a&&(a.levelCodec=this.levels[this.level].videoCodec,a.id=e.id),this.hls.trigger(v.default.BUFFER_CODECS,n);for(i in n){a=n[i],k.logger.log("main track:"+i+",container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var l=a.initSegment;l&&(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(v.default.BUFFER_APPENDING,{type:i,data:l,parent:"main",content:"initSegment"}))}this.tick()}}},{key:"onFragParsingData",value:function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"main"===e.id&&i.sn===r.sn&&i.level===r.level&&("audio"!==e.type||!this.altAudio)&&this.state===R.PARSING){var a=this.levels[this.level],n=r;if(isNaN(e.endPTS)&&(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),k.logger.log("Parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb+",dropped:"+(e.dropped||0)),"video"===e.type)if(n.dropped=e.dropped,n.dropped){if(!n.backtracked)return n.backtracked=!0,this.nextLoadPosition=e.startPTS,this.state=R.IDLE,void this.tick();k.logger.warn("Already backtracked on this fragment, appending with the gap")}else n.backtracked=!1;var s=E.default.updateFragPTSDTS(a.details,n.sn,e.startPTS,e.endPTS,e.startDTS,e.endDTS),o=this.hls;o.trigger(v.default.LEVEL_PTS_UPDATED,{details:a.details,level:this.level,drift:s,type:e.type,start:e.startPTS,end:e.endPTS}),[e.data1,e.data2].forEach(function(r){r&&r.length&&t.state===R.PARSING&&(t.appended=!0,t.pendingBuffering=!0,o.trigger(v.default.BUFFER_APPENDING,{type:e.type,data:r,parent:"main",content:"data"}))}),this.tick()}}},{key:"onFragParsed",value:function(e){var t=this.fragCurrent,r=e.frag;t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING&&(this.stats.tparsed=performance.now(),this.state=R.PARSED,this._checkAppendedParsed())}},{key:"onAudioTrackSwitching",value:function(e){var t=!!e.url,r=e.id;if(!t){if(this.mediaBuffer!==this.media){k.logger.log("switching on main audio, use media.buffered to schedule main fragment loading"),this.mediaBuffer=this.media;var i=this.fragCurrent;i.loader&&(k.logger.log("switching to main audio track, cancel main fragment load"),i.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.IDLE}var a=this.hls;a.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),a.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:r}),this.altAudio=!1}}},{key:"onAudioTrackSwitched",value:function(e){var t=e.id,r=!!this.hls.audioTracks[t].url;if(r){var i=this.videoBuffer;i&&this.mediaBuffer!==i&&(k.logger.log("switching on alternate audio, use video.buffered to schedule main fragment loading"),this.mediaBuffer=i)}this.altAudio=r,this.tick()}},{key:"onBufferCreated",value:function(e){var t=e.tracks,r=void 0,i=void 0,a=!1;for(var n in t){var s=t[n];"main"===s.id?(i=n,r=s,"video"===n&&(this.videoBuffer=t[n].buffer)):a=!0}a&&r?(k.logger.log("alternate track found, use "+i+".buffered to schedule main fragment loading"),this.mediaBuffer=r.buffer):this.mediaBuffer=this.media}},{key:"onBufferAppended",value:function(e){if("main"===e.parent){var t=this.state;t!==R.PARSING&&t!==R.PARSED||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}}},{key:"_checkAppendedParsed",value:function(){if(!(this.state!==R.PARSED||this.appended&&this.pendingBuffering)){var e=this.fragCurrent;if(e){var t=this.mediaBuffer?this.mediaBuffer:this.media;k.logger.log("main buffered : "+T.default.toString(t.buffered));var r=this._bufferedFrags.filter(function(e){return f.default.isBuffered(t,(e.startPTS+e.endPTS)/2)});r.push(e),this._bufferedFrags=r.sort(function(e,t){return e.startPTS-t.startPTS}),this.fragPrevious=e;var i=this.stats;i.tbuffered=performance.now(),this.fragLastKbps=Math.round(8*i.total/(i.tbuffered-i.tfirst)),this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:e,id:"main"}),this.state=R.IDLE}this.tick()}}},{key:"onError",value:function(e){var t=e.frag||this.fragCurrent;if(!t||"main"===t.type){var r=this.media,i=r&&f.default.isBuffered(r,r.currentTime)&&f.default.isBuffered(r,r.currentTime+.5);switch(e.details){case _.ErrorDetails.FRAG_LOAD_ERROR:case _.ErrorDetails.FRAG_LOAD_TIMEOUT:case _.ErrorDetails.KEY_LOAD_ERROR:case _.ErrorDetails.KEY_LOAD_TIMEOUT:if(!e.fatal){var a=this.fragLoadError;a?a++:a=1;var n=this.config;if(a<=n.fragLoadingMaxRetry||i||t.autoLevel&&t.level){this.fragLoadError=a,t.loadCounter=0;var s=Math.min(Math.pow(2,a-1)*n.fragLoadingRetryDelay,n.fragLoadingMaxRetryTimeout);k.logger.warn("mediaController: frag loading failed, retry in "+s+" ms"),this.retryDate=performance.now()+s,this.loadedmetadata||(this.startFragRequested=!1,this.nextLoadPosition=this.startPosition),this.state=R.FRAG_LOADING_WAITING_RETRY}else k.logger.error("mediaController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=R.ERROR}break;case _.ErrorDetails.FRAG_LOOP_LOADING_ERROR:e.fatal||(i?(this._reduceMaxBufferLength(t.duration),this.state=R.IDLE):t.autoLevel&&0!==t.level||(e.fatal=!0,this.state=R.ERROR));break;case _.ErrorDetails.LEVEL_LOAD_ERROR:case _.ErrorDetails.LEVEL_LOAD_TIMEOUT:this.state!==R.ERROR&&(e.fatal?(this.state=R.ERROR,k.logger.warn("streamController: "+e.details+",switch to "+this.state+" state ...")):this.state===R.WAITING_LEVEL&&(this.state=R.IDLE));break;case _.ErrorDetails.BUFFER_FULL_ERROR:"main"!==e.parent||this.state!==R.PARSING&&this.state!==R.PARSED||(i?(this._reduceMaxBufferLength(this.config.maxBufferLength),this.state=R.IDLE):(k.logger.warn("buffer full error also media.currentTime is not buffered, flush everything"),this.fragCurrent=null,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)))}}}},{key:"_reduceMaxBufferLength",value:function(e){var t=this.config;t.maxMaxBufferLength>=e&&(t.maxMaxBufferLength/=2,k.logger.warn("main:reduce max buffer length to "+t.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*t.fragLoadingLoopThreshold)}},{key:"_checkBuffer",value:function(){var e=this.media;if(e&&e.readyState){var t=e.currentTime,r=this.mediaBuffer?this.mediaBuffer:e,i=r.buffered;if(!this.loadedmetadata&&i.length){this.loadedmetadata=!0;var a=e.seeking?t:this.startPosition,n=f.default.isBuffered(r,a);t===a&&n||(k.logger.log("target start position:"+a),n||(a=i.start(0),k.logger.log("target start position not buffered, seek to buffered.start(0) "+a)),k.logger.log("adjust currentTime from "+t+" to "+a),e.currentTime=a)}else if(this.immediateSwitch)this.immediateLevelSwitchEnd();else{var s=f.default.bufferInfo(e,t,0),o=!(e.paused||e.ended||0===e.buffered.length),l=t!==this.lastCurrentTime,u=this.config;if(l)this.stallReported&&(k.logger.warn("playback not stuck anymore @"+t+", after "+Math.round(performance.now()-this.stalled)+"ms"),this.stallReported=!1),this.stalled=void 0,this.nudgeRetry=0;else if(o){var d=performance.now(),c=this.hls;if(this.stalled){var h=d-this.stalled,g=s.len,p=this.nudgeRetry||0;if(g<=.5&&h>1e3*u.lowBufferWatchdogPeriod){this.stallReported||(this.stallReported=!0,k.logger.warn("playback stalling in low buffer @"+t),c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1,buffer:g}));var y=s.nextStart,m=y-t;if(y&&m0){this.nudgeRetry=++p;var E=p*u.nudgeOffset;k.logger.log("adjust currentTime from "+e.currentTime+" to next buffered @ "+y+" + nudge "+E),e.currentTime=y+E,this.stalled=void 0,c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_SEEK_OVER_HOLE,fatal:!1,hole:y+E-t})}}else if(g>.5&&h>1e3*u.highBufferWatchdogPeriod)if(this.stallReported||(this.stallReported=!0,k.logger.warn("playback stalling in high buffer @"+t),c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1,buffer:g})),this.stalled=void 0,this.nudgeRetry=++p,p"+e),this.hls.trigger(v.default.STREAM_STATE_TRANSITION,{previousState:t,nextState:e})}},get:function(){return this._state}},{key:"currentLevel",get:function(){var e=this.media;if(e){var t=this.getBufferedFrag(e.currentTime);if(t)return t.level}return-1}},{key:"nextBufferedFrag",get:function(){var e=this.media;return e?this.followingBufferedFrag(this.getBufferedFrag(e.currentTime)):null}},{key:"nextLevel",get:function(){var e=this.nextBufferedFrag;return e?e.level:-1}},{key:"liveSyncPosition",get:function(){return this._liveSyncPosition},set:function(e){this._liveSyncPosition=e}}]),t}(y.default);r.default=A},{24:24,30:30,31:31,32:32,34:34,35:35,45:45,50:50,51:51}],13:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r-1&&this.vttFragQueues[this.currentTrackId].length){var e=this.currentlyProcessing=this.vttFragQueues[this.currentTrackId].shift();this.hls.trigger(u.default.FRAG_LOADING,{frag:e})}}},{key:"onSubtitleFragProcessed",value:function(e){e.success&&this.vttFragSNsProcessed[e.frag.trackId].push(e.frag.sn),this.currentlyProcessing=null,this.nextFrag()}},{key:"onError",value:function(e){var t=e.frag;t&&"subtitle"!==t.type||this.currentlyProcessing&&(this.currentlyProcessing=null,this.nextFrag())}},{key:"onSubtitleTracksUpdated",value:function(e){var t=this;c.logger.log("subtitle tracks updated"),this.tracks=e.subtitleTracks,this.clearVttFragQueues(),this.vttFragSNsProcessed={},this.tracks.forEach(function(e){t.vttFragSNsProcessed[e.id]=[]})}},{key:"onSubtitleTrackSwitch",value:function(e){this.currentTrackId=e.id,this.clearVttFragQueues()}},{key:"onSubtitleTrackLoaded",value:function(e){var t=this.vttFragSNsProcessed[e.id],r=this.vttFragQueues[e.id],i=this.currentlyProcessing?this.currentlyProcessing.sn:-1,a=function(e){return t.indexOf(e.sn)>-1},n=function(e){return r.some(function(t){return t.sn===e.sn})};e.details.fragments.forEach(function(t){a(t)||t.sn===i||n(t)||(t.trackId=e.id,r.push(t))}),this.nextFrag()}}]),t}(f.default);r.default=h},{31:31,32:32,50:50}],14:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r=0&&e0;)e.removeCue(e.cues[0])}function l(e,t){return e&&e.label===t.name&&!(e.textTrack1||e.textTrack2)}function u(e,t,r,i){return Math.min(t,i)-Math.max(e,r)}Object.defineProperty(r,"__esModule",{value:!0});var d=function(){function e(e,t){for(var r=0;r=0&&(o[0]=Math.min(o[0],t),o[1]=Math.max(o[1],r),n=!0,l/(r-t)>.5))return}n||a.push([t,r]),this.Cues.newCue(this[e],t,r,i)}},{key:"onInitPtsFound",value:function(e){var t=this;void 0===this.initPTS&&(this.initPTS=e.initPTS),this.unparsedVttFrags.length&&(this.unparsedVttFrags.forEach(function(e){t.onFragLoaded(e)}),this.unparsedVttFrags=[])}},{key:"getExistingTrack",value:function(e){var t=this.media;if(t)for(var r=0;r>>8^255&p^99,e[h]=p,t[p]=h;var y=c[h],m=c[y],E=c[m],b=257*c[p]^16843008*p;i[h]=b<<24|b>>>8,a[h]=b<<16|b>>>16,n[h]=b<<8|b>>>24,s[h]=b,b=16843009*E^65537*m^257*y^16843008*h,l[p]=b<<24|b>>>8,u[p]=b<<16|b>>>16,d[p]=b<<8|b>>>24,f[p]=b,h?(h=y^c[c[c[E^y]]],g^=c[c[g]]):h=g=1}}},{key:"expandKey",value:function(e){for(var t=this.uint8ArrayToUint32Array_(e),r=!0,i=0;i>8|e>>>24}},{key:"decrypt",value:function(e,t,r){for(var i,a,n=this.keySize+6,s=this.invKeySchedule,o=this.invSBox,l=this.invSubMix,u=l[0],d=l[1],f=l[2],c=l[3],h=this.uint8ArrayToUint32Array_(r),g=h[0],v=h[1],p=h[2],y=h[3],m=new Int32Array(e),E=new Int32Array(m.length),b=void 0,T=void 0,_=void 0,k=void 0,R=void 0,A=void 0,S=void 0,L=void 0,w=void 0,D=void 0,O=void 0,I=void 0,P=this.networkToHostOrderSwap;t>>24]^d[A>>16&255]^f[S>>8&255]^c[255&L]^s[i],T=u[A>>>24]^d[S>>16&255]^f[L>>8&255]^c[255&R]^s[i+1],_=u[S>>>24]^d[L>>16&255]^f[R>>8&255]^c[255&A]^s[i+2],k=u[L>>>24]^d[R>>16&255]^f[A>>8&255]^c[255&S]^s[i+3],R=b,A=T,S=_,L=k,i+=4;b=o[R>>>24]<<24^o[A>>16&255]<<16^o[S>>8&255]<<8^o[255&L]^s[i],T=o[A>>>24]<<24^o[S>>16&255]<<16^o[L>>8&255]<<8^o[255&R]^s[i+1],_=o[S>>>24]<<24^o[L>>16&255]<<16^o[R>>8&255]<<8^o[255&A]^s[i+2],k=o[L>>>24]<<24^o[R>>16&255]<<16^o[A>>8&255]<<8^o[255&S]^s[i+3],i+=3,E[t]=P(b^g),E[t+1]=P(k^v),E[t+2]=P(_^p),E[t+3]=P(T^y),g=w,v=D,p=O,y=I,t+=4}return E.buffer}},{key:"destroy",value:function(){this.key=void 0,this.keySize=void 0,this.ksRows=void 0,this.sBox=void 0,this.invSBox=void 0,this.subMix=void 0,this.invSubMix=void 0,this.keySchedule=void 0,this.invKeySchedule=void 0,this.rcon=void 0}}]),e}();r.default=n},{}],18:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r>>5,(s-=h)>0&&c+h+s<=v);)for(g=m+f*u,p={unit:e.subarray(c+h,c+h+s),pts:g,dts:g},a.samples.push(p),a.len+=s,c+=s+h,f++;c>>6),(o=(60&t[r+2])>>>2)>h.length-1?void e.trigger(Event.ERROR,{type:a.ErrorTypes.MEDIA_ERROR,details:a.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"invalid ADTS sampling index:"+o}):(u=(1&t[r+2])<<2,u|=(192&t[r+3])>>>6,i.logger.log("manifest codec:"+n+",ADTS data:type:"+s+",sampleingIndex:"+o+"["+h[o]+"Hz],channelConfig:"+u),/firefox/i.test(f)?o>=6?(s=5,d=new Array(4),l=o-3):(s=2,d=new Array(2),l=o):f.indexOf("android")!==-1?(s=2,d=new Array(2),l=o):(s=5,d=new Array(4),n&&(n.indexOf("mp4a.40.29")!==-1||n.indexOf("mp4a.40.5")!==-1)||!n&&o>=6?l=o-3:((n&&n.indexOf("mp4a.40.2")!==-1&&o>=6&&1===u||!n&&1===u)&&(s=2,d=new Array(2)),l=o)),d[0]=s<<3,d[0]|=(14&o)>>1,d[1]|=(1&o)<<7,d[1]|=u<<3,5===s&&(d[1]|=(14&l)>>1,d[2]=(1&l)<<7,d[2]|=8,d[3]=0),{config:d,samplerate:h[o],channelCount:u,codec:"mp4a.40."+s,manifestCodec:c})}};t.exports=n},{30:30,50:50}],22:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r0&&null!=t&&null!=t.key&&"AES-128"===t.method){var g=this.decrypter;null==g&&(g=this.decrypter=new d.default(this.observer,this.config));var v,p=this;try{v=performance.now()}catch(e){v=Date.now()}g.decrypt(e,t.key.buffer,t.iv.buffer,function(e){var d;try{d=performance.now()}catch(e){d=Date.now()}p.observer.trigger(o.default.FRAG_DECRYPTED,{stats:{tstart:v,tdecrypt:d}}),p.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),i,a,n,s,l,u,f,c,h)})}else this.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),i,a,n,s,l,u,f,c,h)}},{key:"pushDecrypted",value:function(e,t,r,i,a,n,s,u,d,f,h,v){var y=this.demuxer;if(!y||s&&!this.probe(e)){var E=this.observer,T=this.typeSupported,_=this.config,k=[{demux:p.default,remux:m.default},{demux:c.default,remux:m.default},{demux:g.default,remux:b.default}];for(var R in k){var A=k[R],S=A.demux.probe;if(S(e)){var L=this.remuxer=new A.remux(E,_,T,this.vendor);y=new A.demux(E,L,_,T),this.probe=S;break}}if(!y)return void E.trigger(o.default.ERROR,{type:l.ErrorTypes.MEDIA_ERROR,details:l.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"no demux matching with content found"});this.demuxer=y}var w=this.remuxer;(s||u)&&(y.resetInitSegment(r,i,a,f),w.resetInitSegment()),s&&(y.resetTimeStamp(),w.resetTimeStamp(v)),"function"==typeof y.setDecryptData&&y.setDecryptData(t),y.append(e,n,d,h)}}]),e}();r.default=T},{18:18,20:20,27:27,29:29,30:30,32:32,42:42,43:43}],23:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(r,"__esModule",{value:!0});var a=e(22),n=i(a),s=e(32),o=i(s),l=e(50),u=e(1),d=i(u),f=function(e){var t=new d.default;t.trigger=function(e){for(var r=arguments.length,i=Array(r>1?r-1:0),a=1;a1?r-1:0),a=1;a1?t-1:0),i=1;i1?t-1:0),i=1;ie?(this.word<<=e,this.bitsAvailable-=e):(e-=this.bitsAvailable,t=e>>3,e-=t>>3,this.bytesAvailable-=t,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}},{key:"readBits",value:function(e){var t=Math.min(this.bitsAvailable,e),r=this.word>>>32-t;return e>32&&n.logger.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=t,this.bitsAvailable>0?this.word<<=t:this.bytesAvailable>0&&this.loadWord(),t=e-t,t>0&&this.bitsAvailable?r<>>e))return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"skipEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBoolean",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"readUShort",value:function(){return this.readBits(16)}},{key:"readUInt",value:function(){return this.readBits(32)}},{key:"skipScalingList",value:function(e){var t,r,i=8,a=8;for(t=0;t=8){var r=e.bin2str(t.subarray(4,8));return["moof","ftyp","styp"].indexOf(r)>=0}return!1}},{key:"bin2str",value:function(e){return String.fromCharCode.apply(null,e)}},{key:"findBox",value:function(t,r){var i,a,n,s,o,l=[];if(!r.length)return null;for(i=0;i1?i+a:t.byteLength,n===r[0]&&(1===r.length?l.push(t.subarray(i+8,s)):(o=e.findBox(t.subarray(i+8,s),r.slice(1)),o.length&&(l=l.concat(o)))),i=s;return l}},{key:"parseInitSegment",value:function(t){var r=[];return e.findBox(t,["moov","trak"]).forEach(function(t){var i=e.findBox(t,["tkhd"])[0];if(i){var a=i[0],n=0===a?12:20,s=i[n]<<24|i[n+1]<<16|i[n+2]<<8|i[n+3];s=s<0?4294967296+s:s;var o=e.findBox(t,["mdia","mdhd"])[0];if(o){a=o[0],n=0===a?12:20;var l=o[n]<<24|o[n+1]<<16|o[n+2]<<8|o[n+3],u=e.findBox(t,["mdia","hdlr"])[0];if(u){var d=e.bin2str(u.subarray(8,12)),f={soun:"audio",vide:"video"}[d];f&&(r[s]={timescale:l,type:f},r[f]={timescale:l,id:s})}}}}),r}},{key:"startDTS",value:function(t,r){var i,a,n;return i=e.findBox(r,["moof","traf"]),a=[].concat.apply([],i.map(function(r){return e.findBox(r,["tfhd"]).map(function(i){var a,n,s;return a=i[4]<<24|i[5]<<16|i[6]<<8|i[7],n=t[a].timescale||9e4,s=e.findBox(r,["tfdt"]).map(function(e){var t,r;return t=e[0],r=e[4]<<24|e[5]<<16|e[6]<<8|e[7],1===t&&(r*=Math.pow(2,32),r+=e[8]<<24|e[9]<<16|e[10]<<8|e[11]),r})[0],(s=s||1/0)/n})})),n=Math.min.apply(null,a),isFinite(n)?n:0}}]),e}();r.default=o},{32:32}],28:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=e.length)return void r();if(!(e[t].unit.length<32)){var i=this.decrypter.isSync();if(this.decryptAacSample(e,t,r,i),!i)return}}}},{key:"getAvcEncryptedData",value:function(e){for(var t=16*Math.floor((e.length-48)/160)+16,r=new Int8Array(t),i=0,a=32;a<=e.length-16;a+=160,i+=16)r.set(e.subarray(a,a+16),i);return r}},{key:"getAvcDecryptedUnit",value:function(e,t){t=new Uint8Array(t);for(var r=0,i=32;i<=e.length-16;i+=160,r+=16)e.set(t.subarray(r,r+16),i);return e}},{key:"decryptAvcSample",value:function(e,t,r,i,a,n){var s=this.discardEPB(a.data),o=this.getAvcEncryptedData(s),l=this;this.decryptBuffer(o.buffer,function(o){a.data=l.getAvcDecryptedUnit(s,o),n||l.decryptAvcSamples(e,t,r+1,i)})}},{key:"decryptAvcSamples",value:function(e,t,r,i){for(;;t++,r=0){if(t>=e.length)return void i();for(var a=e[t].units;!(r>=a.length);r++){var n=a[r];if(!(n.length<=48||1!==n.type&&5!==n.type)){var s=this.decrypter.isSync();if(this.decryptAvcSample(e,t,r,i,n,s),!s)return}}}}}]),e}();r.default=o},{18:18}],29:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r>4>1){if((o=a+5+e[a+4])===a+188)continue}else o=a+4;switch(s){case m:n&&(_&&(l=L(_))&&w(l,!1),_={data:[],size:0}),_&&(_.data.push(e.subarray(o,a+188)),_.size+=a+188-o);break;case E:n&&(k&&(l=L(k))&&(p.isAAC?D(l):O(l)),k={data:[],size:0}),k&&(k.data.push(e.subarray(o,a+188)),k.size+=a+188-o);break;case b:n&&(R&&(l=L(R))&&I(l),R={data:[],size:0}),R&&(R.data.push(e.subarray(o,a+188)),R.size+=a+188-o);break;case 0:n&&(o+=e[o]+1),T=this._pmtId=A(e,o);break;case T:n&&(o+=e[o]+1);var P=S(e,o,this.typeSupported.mpeg===!0||this.typeSupported.mp3===!0,null!=this.sampleAes);m=P.avc,m>0&&(h.id=m),E=P.audio,E>0&&(p.id=E,p.isAAC=P.isAAC),b=P.id3,b>0&&(y.id=b),f&&!c&&(g.logger.log("reparse from beginning"),f=!1,a=-188),c=this.pmtParsed=!0;break;case 17:case 8191:break;default:f=!0}}else this.observer.trigger(u.default.ERROR,{type:v.ErrorTypes.MEDIA_ERROR,details:v.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"TS packet did not start with 0x47"});_&&(l=L(_))?(w(l,!0),h.pesData=null):h.pesData=_,k&&(l=L(k))?(p.isAAC?D(l):O(l),p.pesData=null):(k&&k.size&&g.logger.log("last AAC PES packet truncated,might overlap between fragments"),p.pesData=k),R&&(l=L(R))?(I(l),y.pesData=null):y.pesData=R,null==this.sampleAes?this.remuxer.remux(p,h,y,this._txtTrack,t,r,i):this.decryptAndRemux(p,h,y,this._txtTrack,t,r,i)}},{key:"decryptAndRemux",value:function(e,t,r,i,a,n,s){if(e.samples&&e.isAAC){var o=this;this.sampleAes.decryptAacSamples(e.samples,0,function(){o.decryptAndRemuxAvc(e,t,r,i,a,n,s)})}else this.decryptAndRemuxAvc(e,t,r,i,a,n,s)}},{key:"decryptAndRemuxAvc",value:function(e,t,r,i,a,n,s){if(t.samples){var o=this;this.sampleAes.decryptAvcSamples(t.samples,0,0,function(){o.remuxer.remux(e,t,r,i,a,n,s)})}else this.remuxer.remux(e,t,r,i,a,n,s)}},{key:"destroy",value:function(){this._initPTS=this._initDTS=void 0,this._duration=0}},{key:"_parsePAT",value:function(e,t){return(31&e[t+10])<<8|e[t+11]}},{key:"_parsePMT",value:function(e,t,r,i){var a,n,s,o,l={audio:-1,avc:-1,id3:-1,isAAC:!0};for(a=(15&e[t+1])<<8|e[t+2],n=t+3+a-4,s=(15&e[t+10])<<8|e[t+11],t+=12+s;t1;){var f=new Uint8Array(d[0].length+d[1].length);f.set(d[0]),f.set(d[1],d[0].length),d[0]=f,d.splice(1,1)}if(t=d[0],1===(t[0]<<16)+(t[1]<<8)+t[2]){if((i=(t[4]<<8)+t[5])&&i>e.size-6)return null;r=t[7],192&r&&(s=536870912*(14&t[9])+4194304*(255&t[10])+16384*(254&t[11])+128*(255&t[12])+(254&t[13])/2, +s>4294967295&&(s-=8589934592),64&r?(o=536870912*(14&t[14])+4194304*(255&t[15])+16384*(254&t[16])+128*(255&t[17])+(254&t[18])/2,o>4294967295&&(o-=8589934592),s-o>54e5&&(g.logger.warn(Math.round((s-o)/9e4)+"s delta between PTS and DTS, align them"),s=o)):o=s),a=t[8],l=a+9,e.size-=l,n=new Uint8Array(e.size);for(var c=0,h=d.length;cv){l-=v;continue}t=t.subarray(l),v-=l,l=0}n.set(t,u),u+=v}return i&&(i-=a+3),{data:n,pts:s,dts:o,len:i}}return null}},{key:"pushAccesUnit",value:function(e,t){if(e.units.length&&e.frame){var r=t.samples,i=r.length;!this.config.forceKeyFrameOnDiscontinuity||e.key===!0||t.sps&&(i||this.contiguous)?(e.id=i,r.push(e)):t.dropped++}e.debug.length&&g.logger.log(e.pts+"/"+e.dts+":"+e.debug)}},{key:"_parseAVCPES",value:function(e,t){var r,i,a,n=this,s=this._avcTrack,o=this._parseAVCNALu(e.data),l=this.avcSample;e.data=null,o.forEach(function(t){switch(t.type){case 1:i=!0,l.frame=!0;var o=t.data;if(o.length>4){var u=new f.default(o).readSliceType();2!==u&&4!==u&&7!==u&&9!==u||(l.key=!0)}break;case 5:i=!0,l||(l=n.avcSample=n._createAVCSample(!0,e.pts,e.dts,"")),l.key=!0,l.frame=!0;break;case 6:i=!0,r=new f.default(n.discardEPB(t.data)),r.readUByte();for(var d=0,c=0,h=!1,g=0;!h&&r.bytesAvailable>1;){d=0;do{g=r.readUByte(),d+=g}while(255===g);c=0;do{g=r.readUByte(),c+=g}while(255===g);if(4===d&&0!==r.bytesAvailable){h=!0;if(181===r.readUByte()){if(49===r.readUShort()){if(1195456820===r.readUInt()){if(3===r.readUByte()){var v=r.readUByte(),p=r.readUByte(),y=31&v,m=[v,p];for(a=0;a0){if(t.pts>=e[r-1].pts)e.push(t);else for(var i=r-1;i>=0;i--)if(t.pts=0)i={data:e.subarray(c,s-u-1),type:n},f.push(i);else{var h=this._getLastNalUnit();if(h&&(d&&s<=4-d&&h.state&&(h.data=h.data.subarray(0,h.data.byteLength-d)),(r=s-u-1)>0)){var g=new Uint8Array(h.data.byteLength+r);g.set(h.data,0),g.set(e.subarray(0,r),h.data.byteLength),h.data=g}}s=0&&u>=0&&(i={data:e.subarray(c,o),type:n,state:u},f.push(i)),0===f.length){var v=this._getLastNalUnit();if(v){var p=new Uint8Array(v.data.byteLength+e.byteLength);p.set(v.data,0),p.set(e,v.data.byteLength),v.data=p}}return l.naluState=u,f}},{key:"discardEPB",value:function(e){for(var t,r,i=e.byteLength,a=[],n=1;n1&&(g.logger.log("AAC: align PTS for overlapping frames by "+Math.round((k-p)/90)),p=k)}for(;n+5>>5,(r-=s)>0&&n+s+r<=d);)for(l=p+a*i,f={unit:h.subarray(n+s,n+s+r),pts:l,dts:l},c.samples.push(f),c.len+=r,n+=r+s,a++;n0;)s+=t}},{key:"_onMpegFrame",value:function(e,t,r,i,a,n){var s=1152/r*1e3,o=n+a*s,l=this._audioTrack;l.config=[],l.channelCount=i,l.samplerate=r,l.duration=this._duration,l.samples.push({unit:e,pts:o,dts:o}),l.len+=e.length}},{key:"_onMpegNoise",value:function(e){g.logger.warn("mpeg audio has noise: "+e.length+" bytes")}},{key:"_parseMpeg",value:function(e,t,r,i,a){var n=[32,64,96,128,160,192,224,256,288,320,352,384,416,448,32,48,56,64,80,96,112,128,160,192,224,256,320,384,32,40,48,56,64,80,96,112,128,160,192,224,256,320,32,48,56,64,80,96,112,128,144,160,176,192,224,256,8,16,24,32,40,48,56,64,80,96,112,128,144,160],s=[44100,48e3,32e3,22050,24e3,16e3,11025,12e3,8e3];if(t+2>r)return-1;if(255===e[t]||224==(224&e[t+1])){if(t+24>r)return-1;var o=e[t+1]>>3&3,l=e[t+1]>>1&3,u=e[t+2]>>4&15,d=e[t+2]>>2&3,f=!!(2&e[t+2]);if(1!==o&&0!==u&&15!==u&&3!==d){var c=3===o?3-l:3===l?3:4,h=1e3*n[14*c+u-1],g=3===o?0:2===o?1:2,v=s[3*g+d],p=f?1:0,y=e[t+3]>>6==3?1:2,m=3===l?(3===o?12:6)*h/v+p<<2:(3===o?144:72)*h/v+p|0;return t+m>r?-1:(this._onMpegFrame&&this._onMpegFrame(e.subarray(t,t+m),h,v,y,i,a),m)}}for(var E=t+2;E=564&&71===e[0]&&71===e[188]&&71===e[376]}}]),e}();r.default=p},{21:21,25:25,28:28,30:30,32:32,50:50}],30:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.ErrorTypes={NETWORK_ERROR:"networkError",MEDIA_ERROR:"mediaError",MUX_ERROR:"muxError",OTHER_ERROR:"otherError"},r.ErrorDetails={MANIFEST_LOAD_ERROR:"manifestLoadError",MANIFEST_LOAD_TIMEOUT:"manifestLoadTimeOut",MANIFEST_PARSING_ERROR:"manifestParsingError",MANIFEST_INCOMPATIBLE_CODECS_ERROR:"manifestIncompatibleCodecsError",LEVEL_LOAD_ERROR:"levelLoadError",LEVEL_LOAD_TIMEOUT:"levelLoadTimeOut",LEVEL_SWITCH_ERROR:"levelSwitchError",AUDIO_TRACK_LOAD_ERROR:"audioTrackLoadError",AUDIO_TRACK_LOAD_TIMEOUT:"audioTrackLoadTimeOut",FRAG_LOAD_ERROR:"fragLoadError",FRAG_LOOP_LOADING_ERROR:"fragLoopLoadingError",FRAG_LOAD_TIMEOUT:"fragLoadTimeOut",FRAG_DECRYPT_ERROR:"fragDecryptError",FRAG_PARSING_ERROR:"fragParsingError",REMUX_ALLOC_ERROR:"remuxAllocError",KEY_LOAD_ERROR:"keyLoadError",KEY_LOAD_TIMEOUT:"keyLoadTimeOut",BUFFER_ADD_CODEC_ERROR:"bufferAddCodecError",BUFFER_APPEND_ERROR:"bufferAppendError",BUFFER_APPENDING_ERROR:"bufferAppendingError",BUFFER_STALLED_ERROR:"bufferStalledError",BUFFER_FULL_ERROR:"bufferFullError",BUFFER_SEEK_OVER_HOLE:"bufferSeekOverHole",BUFFER_NUDGE_ON_STALL:"bufferNudgeOnStall",INTERNAL_EXCEPTION:"internalException",WEBVTT_EXCEPTION:"webVTTException"}},{}],31:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=function(){function e(e,t){for(var r=0;r1?r-1:0),n=1;n=r.start(i)&&t<=r.end(i))return!0;return!1},bufferInfo:function(e,t,r){if(e){var i,a=e.buffered,n=[];for(i=0;id&&(l[u-1].end=e[o].end):l.push(e[o])}else l.push(e[o])}for(o=0,i=0,a=n=t;o=f&&t=0&&oe.endSN)return 0;if(o=t-e.startSN,l=e.fragments,u=l[o],!isNaN(u.startPTS)){var f=Math.abs(u.startPTS-r);isNaN(u.deltaPTS)?u.deltaPTS=f:u.deltaPTS=Math.max(f,u.deltaPTS),r=Math.min(r,u.startPTS),i=Math.max(i,u.endPTS),n=Math.min(n,u.startDTS),s=Math.max(s,u.endDTS)}var c=r-u.start;for(u.start=u.startPTS=r,u.endPTS=i,u.startDTS=n,u.endDTS=s,u.duration=i-r,d=o;d>0;d--)a.updatePTS(l,d,d-1);for(d=o;dt?a.start+a.duration:a.start-n.duration:r>t?(a.duration=s-a.start,a.duration<0&&i.logger.warn("negative duration computed for frag "+a.sn+",level "+a.level+", there should be some duration drift between playlist and fragment!")):(n.duration=a.start-s,n.duration<0&&i.logger.warn("negative duration computed for frag "+n.sn+",level "+n.level+", there should be some duration drift between playlist and fragment!"))}};t.exports=a},{50:50}],36:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};a(this,e);var i=e.DefaultConfig;if((r.liveSyncDurationCount||r.liveMaxLatencyDurationCount)&&(r.liveSyncDuration||r.liveMaxLatencyDuration))throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");for(var n in i)n in r||(r[n]=i[n]);if(void 0!==r.liveMaxLatencyDurationCount&&r.liveMaxLatencyDurationCount<=r.liveSyncDurationCount)throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"');if(void 0!==r.liveMaxLatencyDuration&&(r.liveMaxLatencyDuration<=r.liveSyncDuration||void 0===r.liveSyncDuration))throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"');(0,T.enableLogs)(r.debug),this.config=r,this._autoLevelCapping=-1;var s=this.observer=new k.default;s.trigger=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),i=1;i1?t-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:-1;T.logger.log("startLoad("+e+")"),this.networkControllers.forEach(function(t){t.startLoad(e)})}},{key:"stopLoad",value:function(){T.logger.log("stopLoad"),this.networkControllers.forEach(function(e){e.stopLoad()})}},{key:"swapAudioCodec",value:function(){T.logger.log("swapAudioCodec"),this.streamController.swapAudioCodec()}},{key:"recoverMediaError",value:function(){T.logger.log("recoverMediaError");var e=this.media;this.detachMedia(),this.attachMedia(e)}},{key:"levels",get:function(){return this.levelController.levels}},{key:"currentLevel",get:function(){return this.streamController.currentLevel},set:function(e){T.logger.log("set currentLevel:"+e),this.loadLevel=e,this.streamController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.streamController.nextLevel},set:function(e){T.logger.log("set nextLevel:"+e),this.levelController.manualLevel=e,this.streamController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(e){T.logger.log("set loadLevel:"+e),this.levelController.manualLevel=e}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel},set:function(e){this.levelController.nextLoadLevel=e}},{key:"firstLevel",get:function(){return Math.max(this.levelController.firstLevel,this.minAutoLevel)},set:function(e){T.logger.log("set firstLevel:"+e),this.levelController.firstLevel=e}},{key:"startLevel",get:function(){return this.levelController.startLevel},set:function(e){T.logger.log("set startLevel:"+e);var t=this;e!==-1&&(e=Math.max(e,t.minAutoLevel)),t.levelController.startLevel=e}},{key:"autoLevelCapping",get:function(){return this._autoLevelCapping},set:function(e){T.logger.log("set autoLevelCapping:"+e),this._autoLevelCapping=e}},{key:"autoLevelEnabled",get:function(){return this.levelController.manualLevel===-1}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}},{key:"minAutoLevel",get:function(){for(var e=this,t=e.levels,r=e.config.minAutoBitrate,i=t?t.length:0,a=0;ar)return a}return 0}},{key:"maxAutoLevel",get:function(){var e=this,t=e.levels,r=e.autoLevelCapping;return r===-1&&t&&t.length?t.length-1:r}},{key:"nextAutoLevel",get:function(){var e=this;return Math.min(Math.max(e.abrController.nextAutoLevel,e.minAutoLevel),e.maxAutoLevel)},set:function(e){var t=this;t.abrController.nextAutoLevel=Math.max(t.minAutoLevel,e)}},{key:"audioTracks",get:function(){var e=this.audioTrackController;return e?e.audioTracks:[]}},{key:"audioTrack",get:function(){var e=this.audioTrackController;return e?e.audioTrack:-1},set:function(e){var t=this.audioTrackController;t&&(t.audioTrack=e)}},{key:"liveSyncPosition",get:function(){return this.streamController.liveSyncPosition}},{key:"subtitleTracks",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTracks:[]}},{key:"subtitleTrack",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTrack:-1},set:function(e){var t=this.subtitleTrackController;t&&(t.subtitleTrack=e)}}]),e}();r.default=A},{1:1,11:11,12:12,2:2,30:30,32:32,38:38,39:39,4:4,40:40,50:50}],37:[function(e,t,r){"use strict";t.exports=e(36).default},{36:36}],38:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r>8*(15-r)&255;return t}},{key:"fragmentDecryptdataFromLevelkey",value:function(e,t){var r=e;return e&&e.method&&e.uri&&!e.iv&&(r=new T,r.method=e.method,r.baseuri=e.baseuri,r.reluri=e.reluri,r.iv=this.createInitializationVector(t)),r}},{key:"cloneObj",value:function(e){return JSON.parse(JSON.stringify(e))}},{key:"url",get:function(){return!this._url&&this.relurl&&(this._url=u.default.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url},set:function(e){this._url=e}},{key:"programDateTime",get:function(){return!this._programDateTime&&this.rawProgramDateTime&&(this._programDateTime=new Date(Date.parse(this.rawProgramDateTime))),this._programDateTime}},{key:"byteRange",get:function(){if(!this._byteRange){var e=this._byteRange=[] +;if(this.rawByteRange){var t=this.rawByteRange.split("@",2);if(1===t.length){var r=this.lastByteRangeEndOffset;e[0]=r?r:0}else e[0]=parseInt(t[1]);e[1]=parseInt(t[0])+e[0]}}return this._byteRange}},{key:"byteRangeStartOffset",get:function(){return this.byteRange[0]}},{key:"byteRangeEndOffset",get:function(){return this.byteRange[1]}},{key:"decryptdata",get:function(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata}}]),e}(),k=function(e){function t(e){s(this,t);var r=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,f.default.MANIFEST_LOADING,f.default.LEVEL_LOADING,f.default.AUDIO_TRACK_LOADING,f.default.SUBTITLE_TRACK_LOADING));return r.loaders={},r}return n(t,e),o(t,[{key:"destroy",value:function(){for(var e in this.loaders){var t=this.loaders[e];t&&t.destroy()}this.loaders={},h.default.prototype.destroy.call(this)}},{key:"onManifestLoading",value:function(e){this.load(e.url,{type:"manifest"})}},{key:"onLevelLoading",value:function(e){this.load(e.url,{type:"level",level:e.level,id:e.id})}},{key:"onAudioTrackLoading",value:function(e){this.load(e.url,{type:"audioTrack",id:e.id})}},{key:"onSubtitleTrackLoading",value:function(e){this.load(e.url,{type:"subtitleTrack",id:e.id})}},{key:"load",value:function(e,t){var r=this.loaders[t.type];if(r){var i=r.context;if(i&&i.url===e)return void y.logger.trace("playlist request ongoing");y.logger.warn("abort previous loader for type:"+t.type),r.abort()}var a=this.hls.config,n=void 0,s=void 0,o=void 0,l=void 0;"manifest"===t.type?(n=a.manifestLoadingMaxRetry,s=a.manifestLoadingTimeOut,o=a.manifestLoadingRetryDelay,l=a.manifestLoadingMaxRetryTimeout):(n=a.levelLoadingMaxRetry,s=a.levelLoadingTimeOut,o=a.levelLoadingRetryDelay,l=a.levelLoadingMaxRetryTimeout,y.logger.log("loading playlist for "+t.type+" "+(t.level||t.id))),r=this.loaders[t.type]=t.loader=void 0!==a.pLoader?new a.pLoader(a):new a.loader(a),t.url=e,t.responseType="";var u=void 0,d=void 0;u={timeout:s,maxRetry:n,retryDelay:o,maxRetryDelay:l},d={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this)},r.load(t,u,d)}},{key:"resolve",value:function(e,t){return u.default.buildAbsoluteURL(t,e,{alwaysNormalize:!0})}},{key:"parseMasterPlaylist",value:function(e,t){var r=[],i=void 0;for(m.lastIndex=0;null!=(i=m.exec(e));){var a={},n=a.attrs=new p.default(i[1]);a.url=this.resolve(i[2],t);var s=n.decimalResolution("RESOLUTION");s&&(a.width=s.width,a.height=s.height),a.bitrate=n.decimalInteger("AVERAGE-BANDWIDTH")||n.decimalInteger("BANDWIDTH"),a.name=n.NAME;var o=n.CODECS;if(o){o=o.split(/[ ,]+/);for(var l=0;l2?(t=r.shift()+".",t+=parseInt(r.shift()).toString(16),t+=("000"+parseInt(r.shift()).toString(16)).substr(-4)):t=e,t}},{key:"parseLevelPlaylist",value:function(e,t,r,i){var a,n,s=0,o=0,l={type:null,version:null,url:t,fragments:[],live:!0,startSN:0},u=new T,d=0,f=null,c=new _;for(b.lastIndex=0;null!==(a=b.exec(e));){var h=a[1];if(h){c.duration=parseFloat(h);var g=(" "+a[2]).slice(1);c.title=g?g:null,c.tagList.push(g?["INF",h,g]:["INF",h])}else if(a[3]){if(!isNaN(c.duration)){var v=s++;c.type=i,c.start=o,c.levelkey=u,c.sn=v,c.level=r,c.cc=d,c.baseurl=t,c.relurl=(" "+a[3]).slice(1),l.fragments.push(c),f=c,o+=c.duration,c=new _}}else if(a[4]){if(c.rawByteRange=(" "+a[4]).slice(1),f){var m=f.byteRangeEndOffset;m&&(c.lastByteRangeEndOffset=m)}}else if(a[5])c.rawProgramDateTime=(" "+a[5]).slice(1),c.tagList.push(["PROGRAM-DATE-TIME",c.rawProgramDateTime]);else{for(a=a[0].match(/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/),n=1;n=0&&(u.method=S,u.baseuri=t,u.reluri=L,u.key=null,u.iv=w));break;case"START":var D=E,O=new p.default(D),I=O.decimalFloatingPoint("TIME-OFFSET");isNaN(I)||(l.startTimeOffset=I);break;case"MAP":var P=new p.default(E);c.relurl=P.URI,c.rawByteRange=P.BYTERANGE,c.baseurl=t,c.level=r,c.type=i,c.sn="initSegment",l.initSegment=c,c=new _;break;default:y.logger.warn("line parsed but not handled: "+a)}}}return c=f,c&&!c.relurl&&(l.fragments.pop(),o-=c.duration),l.totalduration=o,l.averagetargetduration=o/l.fragments.length,l.endSN=s-1,l}},{key:"loadsuccess",value:function(e,t,r){var i=e.data,a=e.url,n=r.type,s=r.id,o=r.level,l=this.hls;if(this.loaders[n]=void 0,void 0!==a&&0!==a.indexOf("data:")||(a=r.url),t.tload=performance.now(),0===i.indexOf("#EXTM3U"))if(i.indexOf("#EXTINF:")>0){var u="audioTrack"!==n&&"subtitleTrack"!==n,d=isNaN(o)?isNaN(s)?0:s:o,c=this.parseLevelPlaylist(i,a,d,"audioTrack"===n?"audio":"subtitleTrack"===n?"subtitle":"main");c.tload=t.tload,"manifest"===n&&l.trigger(f.default.MANIFEST_LOADED,{levels:[{url:a,details:c}],audioTracks:[],url:a,stats:t}),t.tparsed=performance.now(),c.targetduration?u?l.trigger(f.default.LEVEL_LOADED,{details:c,level:o||0,id:s||0,stats:t}):"audioTrack"===n?l.trigger(f.default.AUDIO_TRACK_LOADED,{details:c,id:s,stats:t}):"subtitleTrack"===n&&l.trigger(f.default.SUBTITLE_TRACK_LOADED,{details:c,id:s,stats:t}):l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"invalid targetduration"})}else{var h=this.parseMasterPlaylist(i,a);if(h.length){var v=this.parseMasterPlaylistMedia(i,a,"AUDIO"),p=this.parseMasterPlaylistMedia(i,a,"SUBTITLES");if(v.length){var m=!1;v.forEach(function(e){e.url||(m=!0)}),m===!1&&h[0].audioCodec&&!h[0].attrs.AUDIO&&(y.logger.log("audio codec signaled in quality level, but no embedded audio track signaled, create one"),v.unshift({type:"main",name:"main"}))}l.trigger(f.default.MANIFEST_LOADED,{levels:h,audioTracks:v,subtitles:p,url:a,stats:t})}else l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"no level found in manifest"})}else l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"no EXTM3U delimiter"})}},{key:"loaderror",value:function(e,t){var r,i,a=t.loader;switch(t.type){case"manifest":r=g.ErrorDetails.MANIFEST_LOAD_ERROR,i=!0;break;case"level":r=g.ErrorDetails.LEVEL_LOAD_ERROR,i=!1;break;case"audioTrack":r=g.ErrorDetails.AUDIO_TRACK_LOAD_ERROR,i=!1}a&&(a.abort(),this.loaders[t.type]=void 0),this.hls.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:a.url,loader:a,response:e,context:t})}},{key:"loadtimeout",value:function(e,t){var r,i,a=t.loader;switch(t.type){case"manifest":r=g.ErrorDetails.MANIFEST_LOAD_TIMEOUT,i=!0;break;case"level":r=g.ErrorDetails.LEVEL_LOAD_TIMEOUT,i=!1;break;case"audioTrack":r=g.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT,i=!1}a&&(a.abort(),this.loaders[t.type]=void 0),this.hls.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:a.url,loader:a,context:t})}}]),t}(h.default);r.default=k},{2:2,30:30,31:31,32:32,44:44,50:50}],41:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r>24&255,t[1]=i>>16&255,t[2]=i>>8&255,t[3]=255&i,t.set(e,4),a=0,i=8;a>24&255,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a,85,196,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.timescale,t.duration),e.hdlr(t.type),e.minf(t))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"minf",value:function(t){return"audio"===t.type?e.box(e.types.minf,e.box(e.types.smhd,e.SMHD),e.DINF,e.stbl(t)):e.box(e.types.minf,e.box(e.types.vmhd,e.VMHD),e.DINF,e.stbl(t))}},{key:"moof",value:function(t,r,i){return e.box(e.types.moof,e.mfhd(t),e.traf(i,r))}},{key:"moov",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trak(t[r]);return e.box.apply(null,[e.types.moov,e.mvhd(t[0].timescale,t[0].duration)].concat(i).concat(e.mvex(t)))}},{key:"mvex",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trex(t[r]);return e.box.apply(null,[e.types.mvex].concat(i))}},{key:"mvhd",value:function(t,r){r*=t;var i=Math.floor(r/(n+1)),a=Math.floor(r%(n+1)),s=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,t>>24&255,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return e.box(e.types.mvhd,s)}},{key:"sdtp",value:function(t){var r,i,a=t.samples||[],n=new Uint8Array(4+a.length);for(i=0;i>>8&255),n.push(255&a),n=n.concat(Array.prototype.slice.call(i));for(r=0;r>>8&255),s.push(255&a),s=s.concat(Array.prototype.slice.call(i));var o=e.box(e.types.avcC,new Uint8Array([1,n[3],n[4],n[5],255,224|t.sps.length].concat(n).concat([t.pps.length]).concat(s))),l=t.width,u=t.height,d=t.pixelRatio[0],f=t.pixelRatio[1];return e.box(e.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,l>>8&255,255&l,u>>8&255,255&u,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),o,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])),e.box(e.types.pasp,new Uint8Array([d>>24,d>>16&255,d>>8&255,255&d,f>>24,f>>16&255,f>>8&255,255&f])))}},{key:"esds",value:function(e){var t=e.config.length;return new Uint8Array([0,0,0,0,3,23+t,0,1,0,4,15+t,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([t]).concat(e.config).concat([6,1,2]))}},{key:"mp4a",value:function(t){var r=t.samplerate;return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]),e.box(e.types.esds,e.esds(t)))}},{key:"mp3",value:function(t){var r=t.samplerate;return e.box(e.types[".mp3"],new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]))}},{key:"stsd",value:function(t){return"audio"===t.type?t.isAAC||"mp3"!==t.codec?e.box(e.types.stsd,e.STSD,e.mp4a(t)):e.box(e.types.stsd,e.STSD,e.mp3(t)):e.box(e.types.stsd,e.STSD,e.avc1(t))}},{key:"tkhd",value:function(t){var r=t.id,i=t.duration*t.timescale,a=t.width,s=t.height,o=Math.floor(i/(n+1)),l=Math.floor(i%(n+1));return e.box(e.types.tkhd,new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,r>>24&255,r>>16&255,r>>8&255,255&r,0,0,0,0,o>>24,o>>16&255,o>>8&255,255&o,l>>24,l>>16&255,l>>8&255,255&l,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,a>>8&255,255&a,0,0,s>>8&255,255&s,0,0]))}},{key:"traf",value:function(t,r){var i=e.sdtp(t),a=t.id,s=Math.floor(r/(n+1)),o=Math.floor(r%(n+1));return e.box(e.types.traf,e.box(e.types.tfhd,new Uint8Array([0,0,0,0,a>>24,a>>16&255,a>>8&255,255&a])),e.box(e.types.tfdt,new Uint8Array([1,0,0,0,s>>24,s>>16&255,s>>8&255,255&s,o>>24,o>>16&255,o>>8&255,255&o])),e.trun(t,i.length+16+20+8+16+8+8),i)}},{key:"trak",value:function(t){return t.duration=t.duration||4294967295,e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"trex",value:function(t){var r=t.id;return e.box(e.types.trex,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trun",value:function(t,r){var i,a,n,s,o,l,u=t.samples||[],d=u.length,f=12+16*d,c=new Uint8Array(f);for(r+=8+f,c.set([0,0,15,1,d>>>24&255,d>>>16&255,d>>>8&255,255&d,r>>>24&255,r>>>16&255,r>>>8&255,255&r],0),i=0;i>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,o.isLeading<<2|o.dependsOn,o.isDependedOn<<6|o.hasRedundancy<<4|o.paddingValue<<1|o.isNonSync,61440&o.degradPrio,15&o.degradPrio,l>>>24&255,l>>>16&255,l>>>8&255,255&l],12+16*i);return e.box(e.types.trun,c)}},{key:"initSegment",value:function(t){e.types||e.init();var r,i=e.moov(t);return r=new Uint8Array(e.FTYP.byteLength+i.byteLength),r.set(e.FTYP),r.set(i,e.FTYP.byteLength),r}}]),e}();r.default=s},{}],42:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r-1&&s&&!s.match("CriOS"),this.ISGenerated=!1}return n(e,[{key:"destroy",value:function(){}},{key:"resetTimeStamp",value:function(e){this._initPTS=this._initDTS=e}},{key:"resetInitSegment",value:function(){this.ISGenerated=!1}},{key:"remux",value:function(e,t,r,i,a,n,s){if(this.ISGenerated||this.generateIS(e,t,a),this.ISGenerated)if(e.samples.length){var o=this.remuxAudio(e,a,n,s);if(t.samples.length){var l=void 0;o&&(l=o.endPTS-o.startPTS),this.remuxVideo(t,a,n,l)}}else{var d=void 0;t.samples.length&&(d=this.remuxVideo(t,a,n)),d&&e.codec&&this.remuxEmptyAudio(e,a,n,d)}r.samples.length&&this.remuxID3(r,a),i.samples.length&&this.remuxText(i,a),this.observer.trigger(u.default.FRAG_PARSED)}},{key:"generateIS",value:function(e,t,r){var i,a,n=this.observer,s=e.samples,o=t.samples,l=this.typeSupported,f="audio/mp4",g={},v={tracks:g},p=void 0===this._initPTS;if(p&&(i=a=1/0),e.config&&s.length&&(e.timescale=e.samplerate,d.logger.log("audio sampling rate : "+e.samplerate),e.isAAC||(l.mpeg?(f="audio/mpeg",e.codec=""):l.mp3&&(e.codec="mp3")),g.audio={container:f,codec:e.codec,initSegment:!e.isAAC&&l.mpeg?new Uint8Array:c.default.initSegment([e]),metadata:{channelCount:e.channelCount}},p&&(i=a=s[0].pts-e.inputTimeScale*r)),t.sps&&t.pps&&o.length){var y=t.inputTimeScale;t.timescale=y,g.video={container:"video/mp4",codec:t.codec,initSegment:c.default.initSegment([t]),metadata:{width:t.width,height:t.height}},p&&(i=Math.min(i,o[0].pts-y*r),a=Math.min(a,o[0].dts-y*r),this.observer.trigger(u.default.INIT_PTS_FOUND,{initPTS:i}))}Object.keys(g).length?(n.trigger(u.default.FRAG_PARSING_INIT_SEGMENT,v),this.ISGenerated=!0,p&&(this._initPTS=i,this._initDTS=a)):n.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"no audio/video samples found"})}},{key:"remuxVideo",value:function(e,t,r,i){var a,n,s,o,l,f,g,v=8,p=e.timescale,y=e.samples,m=[],E=y.length,b=this._PTSNormalize,T=this._initDTS;y.sort(function(e,t){var r=e.dts-t.dts,i=e.pts-t.pts;return r?r:i?i:e.id-t.id});var _=y.reduce(function(e,t){return Math.max(Math.min(e,t.pts-t.dts),-18e3)},0);if(_<0){d.logger.warn("PTS < DTS detected in video samples, shifting DTS by "+Math.round(_/90)+" ms to overcome this issue");for(var k=0;k1?d.logger.log("AVC:"+S+" ms hole between fragments detected,filling it"):S<-1&&d.logger.log("AVC:"+-S+" ms overlapping between fragments detected"),l=R,y[0].dts=l+T,o=Math.max(o-S,R),y[0].pts=o+T,d.logger.log("Video/PTS/DTS adjusted: "+Math.round(o/90)+"/"+Math.round(l/90)+",delta:"+S+" ms")),A=y[y.length-1],g=Math.max(b(A.dts-T,R),0),f=Math.max(b(A.pts-T,R),0),f=Math.max(f,g);var L=this.isSafari;L&&(a=Math.round((g-l)/(y.length-1)));for(var w=0,D=0,O=0;O0?U-1:U].dts;if(q.stretchShortVideoTrack){var Q=q.maxBufferHole,J=q.maxSeekHole,Z=Math.floor(Math.min(Q,J)*p),$=(i?o+i*p:this.nextAudioPts)-B.pts;$>Z?(a=$-z,a<0&&(a=z),d.logger.log("It is approximately "+$/90+" ms to the next segment; using duration "+a/90+" ms for the last video frame.")):a=z}else a=z}K=Math.round(B.pts-B.dts)}m.push({size:j,duration:a,cts:K,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:B.key?2:1,isNonSync:B.key?0:1}})}this.nextAvcDts=g+a;var ee=e.dropped;if(e.len=0,e.nbNalu=0,e.dropped=0,m.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var te=m[0].flags;te.dependsOn=2,te.isNonSync=0}e.samples=m,s=c.default.moof(e.sequenceNumber++,l,e),e.samples=[];var re={data1:s,data2:n,startPTS:o/p,endPTS:(f+a)/p,startDTS:l/p,endDTS:this.nextAvcDts/p,type:"video",nb:m.length,dropped:ee};return this.observer.trigger(u.default.FRAG_PARSING_DATA,re),re}},{key:"remuxAudio",value:function(e,t,r,i){var a,n,s,l,f,g,v,p,y,m,E,b,T,_,k,R,A=e.inputTimeScale,S=e.timescale,L=A/S,w=e.isAAC?1024:1152,D=w*L,O=this._PTSNormalize,I=this._initDTS,P=!e.isAAC&&this.typeSupported.mpeg,C=P?0:8,x=[],F=[];if(e.samples.sort(function(e,t){return e.pts-t.pts}),F=e.samples,R=this.nextAudioPts,r|=F.length&&R&&(Math.abs(t-R/A)<.1||Math.abs(F[0].pts-R-I)<20*D),r||(R=t*A),i&&e.isAAC)for(var M=0,N=R;M=D&&N){var j=Math.round(G/D);d.logger.warn("Injecting "+j+" audio frame @ "+(N/A).toFixed(3)+"s due to "+1e3*G/A+" ms gap.");for(var K=0;K0)Y=Math.round((b-R)/D),d.logger.log(V+" ms hole between AAC samples detected,filling it"),Y>0&&(_=o.default.getSilentFrame(e.manifestCodec||e.codec,e.channelCount),_||(_=l.subarray()),e.len+=Y*_.length);else if(V<-12){d.logger.log(-V+" ms overlapping between AAC samples detected, drop frame"),e.len-=l.byteLength;continue}b=T=R}if(v=Math.max(0,b),p=Math.max(0,T),!(e.len>0))return;var X=P?e.len:e.len+8;try{f=new Uint8Array(X)}catch(e){return void this.observer.trigger(u.default.ERROR,{type:h.ErrorTypes.MUX_ERROR,details:h.ErrorDetails.REMUX_ALLOC_ERROR,fatal:!1,bytes:X,reason:"fail allocating audio mdat "+X})}P||(a=new DataView(f.buffer),a.setUint32(0,X),f.set(c.default.types.mdat,4));for(var q=0;q=2&&(Q=x[J-2].duration,s.duration=Q),J){this.nextAudioPts=b+L*Q,e.len=0,e.samples=x,g=P?new Uint8Array:c.default.moof(e.sequenceNumber++,p/L,e),e.samples=[];var Z={data1:g,data2:f,startPTS:v/A,endPTS:this.nextAudioPts/A,startDTS:p/A,endDTS:(T+L*Q)/A,type:"audio",nb:J};return this.observer.trigger(u.default.FRAG_PARSING_DATA,Z),Z}return null}},{key:"remuxEmptyAudio",value:function(e,t,r,i){var a=e.inputTimeScale,n=e.samplerate?e.samplerate:a,s=a/n,l=this.nextAudioPts,u=(void 0!==l?l:i.startDTS*a)+this._initDTS,f=i.endDTS*a+this._initDTS,c=1024*s,h=Math.ceil((f-u)/c),g=o.default.getSilentFrame(e.manifestCodec||e.codec,e.channelCount);if(d.logger.warn("remux empty Audio"),!g)return void d.logger.trace("Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!");for(var v=[],p=0;p4294967296;)e+=r;return e}}]),e}();r.default=g},{30:30,32:32,33:33,41:41,50:50}],43:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;rNumber.MAX_SAFE_INTEGER?1/0:t}},{key:"hexadecimalInteger",value:function(e){if(this[e]){var t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;for(var r=new Uint8Array(t.length/2),i=0;iNumber.MAX_SAFE_INTEGER?1/0:t}},{key:"decimalFloatingPoint",value:function(e){return parseFloat(this[e])}},{key:"enumeratedString",value:function(e){return this[e]}},{key:"decimalResolution",value:function(e){var t=n.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}}}],[{key:"parseAttrList",value:function(e){var t,r={};for(s.lastIndex=0;null!==(t=s.exec(e));){var i=t[2];0===i.indexOf('"')&&i.lastIndexOf('"')===i.length-1&&(i=i.slice(1,-1)),r[t[1]]=i}return r}}]),e}();r.default=o},{}],45:[function(e,t,r){"use strict";var i={search:function(e,t){for(var r=0,i=e.length-1,a=null,n=null;r<=i;){a=(r+i)/2|0,n=e[a];var s=t(n);if(s>0)r=a+1;else{if(!(s<0))return n;i=a-1}}return null}};t.exports=i},{}],46:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;rl&&(g.log("ERROR","Too large cursor position "+this.pos),this.pos=l)}},{key:"moveCursor",value:function(e){var t=this.pos+e;if(e>1)for(var r=this.pos+1;r=144&&this.backSpace();var t=s(e);if(this.pos>=l)return void g.log("ERROR","Cannot insert "+e.toString(16)+" ("+t+") at position "+this.pos+". Skipping it!");this.chars[this.pos].setChar(t,this.currPenState),this.moveCursor(1)}},{key:"clearFromPos",value:function(e){var t;for(t=e;t0&&(r=e?"["+t.join(" | ")+"]":t.join("\n")),r}},{key:"getTextAndFormat",value:function(){return this.rows}}]),e}(),b=function(){function e(t,r){i(this,e),this.chNr=t,this.outputFilter=r,this.mode=null,this.verbose=0,this.displayedMemory=new E,this.nonDisplayedMemory=new E,this.lastOutputScreen=new E,this.currRollUpRow=this.displayedMemory.rows[o-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null}return a(e,[{key:"reset",value:function(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.currRollUpRow=this.displayedMemory.rows[o-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.lastCueEndTime=null}},{key:"getHandler",value:function(){return this.outputFilter}},{key:"setHandler",value:function(e){this.outputFilter=e}},{key:"setPAC",value:function(e){this.writeScreen.setPAC(e)}},{key:"setBkgData",value:function(e){this.writeScreen.setBkgData(e)}},{key:"setMode",value:function(e){e!==this.mode&&(this.mode=e,g.log("INFO","MODE="+e),"MODE_POP-ON"===this.mode?this.writeScreen=this.nonDisplayedMemory:(this.writeScreen=this.displayedMemory,this.writeScreen.reset()),"MODE_ROLL-UP"!==this.mode&&(this.displayedMemory.nrRollUpRows=null,this.nonDisplayedMemory.nrRollUpRows=null),this.mode=e)}},{key:"insertChars",value:function(e){for(var t=0;t=46,t.italics)t.foreground="white";else{var r=Math.floor(e/2)-16,i=["white","green","blue","cyan","red","yellow","magenta"];t.foreground=i[r]}g.log("INFO","MIDROW: "+JSON.stringify(t)),this.writeScreen.setPen(t)}},{key:"outputDataUpdate",value:function(){var e=g.time;null!==e&&this.outputFilter&&(this.outputFilter.updateData&&this.outputFilter.updateData(e,this.displayedMemory),null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.lastOutputScreen),this.cueStartTime=this.displayedMemory.isEmpty()?null:e):this.cueStartTime=e,this.lastOutputScreen.copy(this.displayedMemory))}},{key:"cueSplitAtTime",value:function(e){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.displayedMemory),this.cueStartTime=e))}}]),e}(),T=function(){function e(t,r,a){i(this,e),this.field=t||1,this.outputs=[r,a],this.channels=[new b(1,r),new b(2,a)],this.currChNr=-1,this.lastCmdA=null,this.lastCmdB=null,this.bufferedData=[],this.startTime=null,this.lastTime=null,this.dataCounters={padding:0,char:0,cmd:0,other:0}}return a(e,[{key:"getHandler",value:function(e){return this.channels[e].getHandler()}},{key:"setHandler",value:function(e,t){this.channels[e].setHandler(t)}},{key:"addData",value:function(e,t){var r,i,a,n=!1;this.lastTime=e,g.setTime(e);for(var s=0;s ("+v([i,a])+")"),r=this.parseCmd(i,a),r||(r=this.parseMidrow(i,a)),r||(r=this.parsePAC(i,a)),r||(r=this.parseBackgroundAttributes(i,a)),!r&&(n=this.parseChars(i,a)))if(this.currChNr&&this.currChNr>=0){var o=this.channels[this.currChNr-1];o.insertChars(n)}else g.log("WARNING","No channel found yet. TEXT-MODE?");r?this.dataCounters.cmd+=2:n?this.dataCounters.char+=2:(this.dataCounters.other+=2,g.log("WARNING","Couldn't parse cleaned data "+v([i,a])+" orig: "+v([t[s],t[s+1]])))}else this.dataCounters.padding+=2}},{key:"parseCmd",value:function(e,t){var r=null,i=(20===e||28===e)&&32<=t&&t<=47,a=(23===e||31===e)&&33<=t&&t<=35;if(!i&&!a)return!1;if(e===this.lastCmdA&&t===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,g.log("DEBUG","Repeated command ("+v([e,t])+") is dropped"),!0;r=20===e||23===e?1:2;var n=this.channels[r-1];return 20===e||28===e?32===t?n.ccRCL():33===t?n.ccBS():34===t?n.ccAOF():35===t?n.ccAON():36===t?n.ccDER():37===t?n.ccRU(2):38===t?n.ccRU(3):39===t?n.ccRU(4):40===t?n.ccFON():41===t?n.ccRDC():42===t?n.ccTR():43===t?n.ccRTD():44===t?n.ccEDM():45===t?n.ccCR():46===t?n.ccENM():47===t&&n.ccEOC():n.ccTO(t-32),this.lastCmdA=e,this.lastCmdB=t,this.currChNr=r,!0}},{key:"parseMidrow",value:function(e,t){var r=null;if((17===e||25===e)&&32<=t&&t<=47){if((r=17===e?1:2)!==this.currChNr)return g.log("ERROR","Mismatch channel in midrow parsing"),!1;return this.channels[r-1].ccMIDROW(t),g.log("DEBUG","MIDROW ("+v([e,t])+")"),!0}return!1}},{key:"parsePAC",value:function(e,t){var r=null,i=null,a=(17<=e&&e<=23||25<=e&&e<=31)&&64<=t&&t<=127,n=(16===e||24===e)&&64<=t&&t<=95;if(!a&&!n)return!1;if(e===this.lastCmdA&&t===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,!0;r=e<=23?1:2,i=64<=t&&t<=95?1===r?u[e]:f[e]:1===r?d[e]:c[e];var s=this.interpretPAC(i,t);return this.channels[r-1].setPAC(s),this.lastCmdA=e,this.lastCmdB=t,this.currChNr=r,!0}},{key:"interpretPAC",value:function(e,t){var r=t,i={color:null,italics:!1,indent:null,underline:!1,row:e};return r=t>95?t-96:t-64,i.underline=1==(1&r),r<=13?i.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(r/2)]:r<=15?(i.italics=!0,i.color="white"):i.indent=4*Math.floor((r-16)/2),i}},{key:"parseChars",value:function(e,t){var r=null,i=null,a=null;if(e>=25?(r=2,a=e-8):(r=1,a=e),17<=a&&a<=19){var n=t;n=17===a?t+80:18===a?t+112:t+144,g.log("INFO","Special char '"+s(n)+"' in channel "+r),i=[n]}else 32<=e&&e<=127&&(i=0===t?[e]:[e,t]);if(i){var o=v(i);g.log("DEBUG","Char codes = "+o.join(",")),this.lastCmdA=null,this.lastCmdB=null}return i}},{key:"parseBackgroundAttributes",value:function(e,t){var r,i,a,n,s=(16===e||24===e)&&32<=t&&t<=47,o=(23===e||31===e)&&45<=t&&t<=47;return!(!s&&!o)&&(r={},16===e||24===e?(i=Math.floor((t-32)/2),r.background=h[i],t%2==1&&(r.background=r.background+"_semi")):45===t?r.background="transparent":(r.foreground="black",47===t&&(r.underline=!0)),a=e<24?1:2,n=this.channels[a-1],n.setBkgData(r),this.lastCmdA=null,this.lastCmdB=null,!0)}},{key:"reset",value:function(){for(var e=0;e=16?l--:l++,navigator.userAgent.match(/Firefox\//)?s.line=f+1:s.line=f>7?f-2:f+1,s.align="left",s.position=Math.max(0,Math.min(100,l/32*100+(navigator.userAgent.match(/Firefox\//)?50:0))),e.addCue(s)}}};t.exports=a},{53:53}],48:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=this.minWeight_}},{key:"getEstimate",value:function(){return this.canEstimate()?Math.min(this.fast_.getEstimate(),this.slow_.getEstimate()):this.defaultEstimate_}},{key:"destroy",value:function(){}}]),e}();r.default=o},{49:49}],49:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r "+t}function n(e){var t=self.console[e];return t?function(){for(var r=arguments.length,i=Array(r),n=0;n1?t-1:0),i=1;i100)throw new Error("Position must be between 0 and 100.");b=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"positionAlign",r({},u,{get:function(){return T},set:function(e){var r=t(e);if(!r)throw new SyntaxError("An invalid or illegal string was specified.");T=r,this.hasBeenReset=!0}})),Object.defineProperty(o,"size",r({},u,{get:function(){return _},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");_=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"align",r({},u,{get:function(){return k},set:function(e){var r=t(e);if(!r)throw new SyntaxError("An invalid or illegal string was specified.");k=r,this.hasBeenReset=!0}})),o.displayState=void 0,l)return o}if("undefined"!=typeof window&&window.VTTCue)return window.VTTCue;var a="auto",n={"":!0,lr:!0,rl:!0},s={start:!0,middle:!0,end:!0,left:!0,right:!0};return i.prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)},i}()},{}],53:[function(e,t,r){"use strict";function i(){this.window=window,this.state="INITIAL",this.buffer="",this.decoder=new f,this.regionList=[]}function a(e){function t(e,t,r,i){return 3600*(0|e)+60*(0|t)+(0|r)+(0|i)/1e3}var r=e.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return r?r[3]?t(r[1],r[2],r[3].replace(":",""),r[4]):r[1]>59?t(r[1],r[2],0,r[4]):t(0,r[1],r[2],r[4]):null}function n(){this.values=Object.create(null)}function s(e,t,r,i){var a=i?e.split(i):[e];for(var n in a)if("string"==typeof a[n]){var s=a[n].split(r);if(2===s.length){var o=s[0],l=s[1];t(o,l)}}}function o(e,t,r){function i(){var t=a(e);if(null===t)throw new Error("Malformed timestamp: "+l);return e=e.replace(/^[^\sa-zA-Z-]+/,""),t}function o(){e=e.replace(/^\s+/,"")}var l=e;if(o(),t.startTime=i(),o(),"-->"!==e.substr(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '-->'): "+l);e=e.substr(3),o(),t.endTime=i(),o(),function(e,t){var i=new n;s(e,function(e,t){switch(e){case"region":for(var a=r.length-1;a>=0;a--)if(r[a].id===t){i.set(e,r[a].region);break}break;case"vertical":i.alt(e,t,["rl","lr"]);break;case"line":var n=t.split(","),s=n[0];i.integer(e,s),i.percent(e,s)&&i.set("snapToLines",!1),i.alt(e,s,["auto"]),2===n.length&&i.alt("lineAlign",n[1],["start",h,"end"]);break;case"position":n=t.split(","),i.percent(e,n[0]),2===n.length&&i.alt("positionAlign",n[1],["start",h,"end","line-left","line-right","auto"]);break;case"size":i.percent(e,t);break;case"align":i.alt(e,t,["start",h,"end","left","right"])}},/:/,/\s/),t.region=i.get("region",null),t.vertical=i.get("vertical","");var a=i.get("line","auto");"auto"===a&&c.line===-1&&(a=-1),t.line=a,t.lineAlign=i.get("lineAlign","start"),t.snapToLines=i.get("snapToLines",!0),t.size=i.get("size",100),t.align=i.get("align",h);var o=i.get("position","auto");"auto"===o&&50===c.position&&(o="start"===t.align||"left"===t.align?0:"end"===t.align||"right"===t.align?100:50),t.position=o}(e,t)}function l(e){return e.replace(//gi,"\n")}Object.defineProperty(r,"__esModule",{value:!0}),r.fixLineBreaks=void 0;var u=e(52),d=function(e){return e&&e.__esModule?e:{default:e}}(u),f=function(){return{decode:function(e){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))}}};n.prototype={set:function(e,t){this.get(e)||""===t||(this.values[e]=t)},get:function(e,t,r){return r?this.has(e)?this.values[e]:t[r]:this.has(e)?this.values[e]:t},has:function(e){return e in this.values},alt:function(e,t,r){for(var i=0;i=0&&t<=100)&&(this.set(e,t),!0)}};var c=new d.default(0,0,0),h="middle"===c.align?"middle":"center";i.prototype={parse:function(e){function t(){var e=r.buffer,t=0;for(e=l(e);t")===-1){r.cue.id=i;continue}case"CUE":try{o(i,r.cue,r.regionList)}catch(e){r.cue=null,r.state="BADCUE";continue}r.state="CUETEXT";continue;case"CUETEXT":var u=i.indexOf("-->")!==-1;if(!i||u&&(n=!0)){r.oncue&&r.oncue(r.cue),r.cue=null,r.state="ID";continue}r.cue.text&&(r.cue.text+="\n"),r.cue.text+=i;continue;case"BADCUE":i||(r.state="ID");continue}}}catch(e){"CUETEXT"===r.state&&r.cue&&r.oncue&&r.oncue(r.cue),r.cue=null,r.state="INITIAL"===r.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var e=this;try{if(e.buffer+=e.decoder.decode(),(e.cue||"HEADER"===e.state)&&(e.buffer+="\n\n",e.parse()),"INITIAL"===e.state)throw new Error("Malformed WebVTT signature.")}catch(e){throw e}return e.onflush&&e.onflush(),this}},r.fixLineBreaks=l,r.default=i},{52:52}],54:[function(e,t,r){"use strict";var i=e(53),a=function(e){return e&&e.__esModule?e:{default:e}}(i),n=function(e){var t=parseInt(e.substr(-3)),r=parseInt(e.substr(-6,2)),i=parseInt(e.substr(-9,2)),a=e.length>9?parseInt(e.substr(0,e.indexOf(":"))):0;return isNaN(t)||isNaN(r)||isNaN(i)||isNaN(a)?-1:(t+=1e3*r,t+=6e4*i,t+=36e5*a)},s=function(e,t,r){var i=e[t],a=e[i.prevCC];if(!a||!a.new&&i.new)return e.ccOffset=e.presentationOffset=i.start,void(i.new=!1);for(;a&&a.new;)e.ccOffset+=i.start-a.start,i.new=!1,i=a,a=e[i.prevCC];e.presentationOffset=r},o={parse:function(e,t,r,i,o,l){var u=String.fromCharCode.apply(null,new Uint8Array(e)).trim().replace(/\r\n|\n\r|\n|\r/g,"\n").split("\n"),d="00:00.000",f=0,c=0,h=0,g=[],v=void 0,p=!0,y=new a.default;y.oncue=function(e){var t=r[i],a=r.ccOffset;t&&t.new&&(c?a=r.ccOffset=t.start:s(r,i,h)),h&&!c&&(a=h+r.ccOffset-r.presentationOffset),e.startTime+=a-c,e.endTime+=a-c,e.text=decodeURIComponent(escape(e.text)),e.endTime>0&&g.push(e)},y.onparsingerror=function(e){v=e},y.onflush=function(){if(v&&l)return void l(v);o(g)},u.forEach(function(e){if(p){if(e.startsWith("X-TIMESTAMP-MAP=")){p=!1,e.substr(16).split(",").forEach(function(e){e.startsWith("LOCAL:")?d=e.substr(6):e.startsWith("MPEGTS:")&&(f=parseInt(e.substr(7)))});try{t=t<0?t+8589934592:t,f-=t,c=n(d)/1e3,h=f/9e4,c===-1&&(v=new Error("Malformed X-TIMESTAMP-MAP: "+e))}catch(t){v=new Error("Malformed X-TIMESTAMP-MAP: "+e)}return}""===e&&(p=!1)}y.parse(e+"\n")}),y.flush()}};t.exports=o},{53:53}],55:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=2)if(window.clearTimeout(this.requestTimeout),0===i.tfirst&&(i.tfirst=Math.max(performance.now(),i.trequest)),4===r){var o=t.status;if(o>=200&&o<300){i.tload=Math.max(i.tfirst,performance.now());var l=void 0,u=void 0;"arraybuffer"===a.responseType?(l=t.response,u=l.byteLength):(l=t.responseText,u=l.length),i.loaded=i.total=u;var d={url:t.responseURL,data:l};this.callbacks.onSuccess(d,i,a)}else i.retry>=s.maxRetry||o>=400&&o<499?(n.logger.error(o+" while loading "+a.url),this.callbacks.onError({code:o,text:t.statusText},a)):(n.logger.warn(o+" while loading "+a.url+", retrying in "+this.retryDelay+"..."),this.destroy(),this.retryTimeout=window.setTimeout(this.loadInternal.bind(this),this.retryDelay),this.retryDelay=Math.min(2*this.retryDelay,s.maxRetryDelay),i.retry++)}else this.requestTimeout=window.setTimeout(this.loadtimeout.bind(this),s.timeout)}},{key:"loadtimeout",value:function(){n.logger.warn("timeout while loading "+this.context.url),this.callbacks.onTimeout(this.stats,this.context)}},{key:"loadprogress",value:function(e){var t=this.stats;t.loaded=e.loaded,e.lengthComputable&&(t.total=e.total);var r=this.callbacks.onProgress;r&&r(t,this.context,null)}}]),e}();r.default=s},{50:50}]},{},[37])(37)}); diff --git a/demo/mask_detection/web/js/ckplayer/hls/hls.min.js b/demo/mask_detection/web/js/ckplayer/hls/hls.min.js new file mode 100644 index 00000000..3a95d08e --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/hls/hls.min.js @@ -0,0 +1,7 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Hls=e()}}(function(){var e;return function e(t,r,i){function a(s,o){if(!r[s]){if(!t[s]){var l="function"==typeof require&&require;if(!o&&l)return l(s,!0);if(n)return n(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var d=r[s]={exports:{}};t[s][0].call(d.exports,function(e){var r=t[s][1][e];return a(r?r:e)},d,d.exports,e,t,r,i)}return r[s].exports}for(var n="function"==typeof require&&require,s=0;s0&&this._events[e].length>r&&(this._events[e].warned=!0,console.trace),this},i.prototype.on=i.prototype.addListener,i.prototype.once=function(e,t){function r(){this.removeListener(e,r),i||(i=!0,t.apply(this,arguments))}if(!a(t))throw TypeError("listener must be a function");var i=!1;return r.listener=t,this.on(e,r),this},i.prototype.removeListener=function(e,t){var r,i,n,o;if(!a(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],n=r.length,i=-1,r===t||a(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(r)){for(o=n;o-- >0;)if(r[o]===t||r[o].listener&&r[o].listener===t){i=o;break}if(i<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(i,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},i.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],a(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},i.prototype.listeners=function(e){return this._events&&this._events[e]?a(this._events[e])?[this._events[e]]:this._events[e].slice():[]},i.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(a(t))return 1;if(t)return t.length}return 0},i.listenerCount=function(e,t){return e.listenerCount(t)}},{}],2:[function(t,r,i){!function(t){var a=/^((?:[^\/;?#]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/,n=/^([^\/;?#]*)(.*)$/,s={buildAbsoluteURL:function(e,t,r){if(r=r||{},e=e.trim(),!(t=t.trim())){if(!r.alwaysNormalize)return e;var i=this.parseURL(e);if(!o)throw new Error("Error trying to parse base URL.");return i.path=s.normalizePath(i.path),s.buildURLFromParts(i)}var a=this.parseURL(t);if(!a)throw new Error("Error trying to parse relative URL.");if(a.scheme)return r.alwaysNormalize?(a.path=s.normalizePath(a.path),s.buildURLFromParts(a)):t;var o=this.parseURL(e);if(!o)throw new Error("Error trying to parse base URL.");if(!o.netLoc&&o.path&&"/"!==o.path[0]){var l=n.exec(o.path);o.netLoc=l[1],o.path=l[2]}o.netLoc&&!o.path&&(o.path="/");var u={scheme:o.scheme,netLoc:a.netLoc,path:null,params:a.params,query:a.query,fragment:a.fragment};if(!a.netLoc&&(u.netLoc=o.netLoc,"/"!==a.path[0]))if(a.path){var d=o.path,f=d.substring(0,d.lastIndexOf("/")+1)+a.path;u.path=s.normalizePath(f)}else u.path=o.path,a.params||(u.params=o.params,a.query||(u.query=o.query));return null===u.path&&(u.path=r.alwaysNormalize?s.normalizePath(a.path):a.path),s.buildURLFromParts(u)},parseURL:function(e){var t=a.exec(e);return t?{scheme:t[1]||"",netLoc:t[2]||"",path:t[3]||"",params:t[4]||"",query:t[5]||"",fragment:t[6]||""}:null},normalizePath:function(e){for(e=e.split("").reverse().join("").replace(/(?:\/|^)\.(?=\/)/g,"");e.length!==(e=e.replace(/(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g,"")).length;);return e.split("").reverse().join("")},buildURLFromParts:function(e){return e.scheme+e.netLoc+e.path+e.params+e.query+e.fragment}};"object"==typeof i&&"object"==typeof r?r.exports=s:"function"==typeof e&&e.amd?e([],function(){return s}):"object"==typeof i?i.URLToolkit=s:t.URLToolkit=s}(this)},{}],3:[function(e,t,r){var i=arguments[3],a=arguments[4],n=arguments[5],s=JSON.stringify;t.exports=function(e,t){function r(e){p[e]=!0;for(var t in a[e][1]){var i=a[e][1][t];p[i]||r(i)}}for(var o,l=Object.keys(n),u=0,d=l.length;u500*r.duration/o){var l=e.levels,d=Math.max(1,n.bw?n.bw/8:1e3*n.loaded/s),f=l[r.level],c=f.realBitrate?Math.max(f.realBitrate,f.bitrate):f.bitrate,g=n.total?n.total:Math.max(n.loaded,Math.round(r.duration*c/8)),p=t.currentTime,y=(g-n.loaded)/d,m=(h.default.bufferInfo(t,p,e.config.maxBufferHole).end-p)/o;if(m<2*r.duration/o&&y>m){var E=void 0,b=void 0;for(b=r.level-1;b>a;b--){var T=l[b].realBitrate?Math.max(l[b].realBitrate,l[b].bitrate):l[b].bitrate;if((E=r.duration*T/(6.4*d))=i;u--){var d=l[u],f=d.details,c=f?f.totalduration/f.fragments.length:t,h=!!f&&f.live,g=void 0;g=u<=e?s*r:o*r;var p=l[u].realBitrate?Math.max(l[u].realBitrate,l[u].bitrate):l[u].bitrate,y=p*c/g;if(v.logger.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: "+u+"/"+Math.round(g)+"/"+p+"/"+c+"/"+n+"/"+y),g>p&&(!y||h||y=0)return c;v.logger.trace("rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering");var g=o?Math.min(o,i.maxStarvationDelay):i.maxStarvationDelay,p=i.abrBandWidthFactor,y=i.abrBandWidthUpFactor;if(0===f){var m=this.bitrateTestDelay;if(m){g=(o?Math.min(o,i.maxLoadingDelay):i.maxLoadingDelay)-m,v.logger.trace("bitrate test took "+Math.round(1e3*m)+"ms, set first fragment max fetchDuration to "+Math.round(1e3*g)+" ms"),p=y=1}}return c=this._findBestLevel(s,o,d,a,t,f+g,p,y,r),Math.max(c,0)}}]),t}(f.default);r.default=m},{30:30,31:31,32:32,34:34,48:48,50:50}],6:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&e===-1?(k.logger.log("audio:override startPosition with lastCurrentTime @"+t.toFixed(3)),this.state=R.IDLE):(this.lastCurrentTime=this.startPosition?this.startPosition:e,this.state=R.STARTING),this.nextLoadPosition=this.startPosition=this.lastCurrentTime,this.tick()}else this.startPosition=e,this.state=R.STOPPED}},{key:"stopLoad",value:function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.STOPPED}},{key:"tick",value:function(){1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){var e,t,r,i=this.hls,a=i.config;switch(this.state){case R.ERROR:case R.PAUSED:case R.BUFFER_FLUSHING:break;case R.STARTING:this.state=R.WAITING_TRACK,this.loadedmetadata=!1;break;case R.IDLE:var n=this.tracks;if(!n)break;if(!this.media&&(this.startFragRequested||!a.startFragPrefetch))break;e=this.loadedmetadata?this.media.currentTime:this.nextLoadPosition;var s=this.mediaBuffer?this.mediaBuffer:this.media,o=f.default.bufferInfo(s,e,a.maxBufferHole),l=o.len,d=o.end,c=this.fragPrevious,h=a.maxMaxBufferLength,g=this.audioSwitch,p=this.trackId;if((lE||o.nextStart))return;k.logger.log("alt audio track ahead of main track, seek to start of alt audio track"),this.media.currentTime=E+.05}if(r.initSegment&&!r.initSegment.data)T=r.initSegment;else if(d<=E){if(T=y[0],r.live&&T.loadIdx&&T.loadIdx===this.fragLoadIdx){var A=o.nextStart?o.nextStart:E;return k.logger.log("no alt audio available @currentTime:"+this.media.currentTime+", seeking @"+(A+.05)),void(this.media.currentTime=A+.05)}}else{var S=void 0,L=a.maxFragLookUpTolerance,w=c?y[c.sn-y[0].sn+1]:void 0,D=function(e){var t=Math.min(L,e.duration);return e.start+e.duration-t<=d?1:e.start-t>d&&e.start?-1:0};db-L&&(L=0),S=w&&!D(w)?w:u.default.search(y,D)):S=y[m-1],S&&(T=S,E=S.start,c&&T.level===c.level&&T.sn===c.sn&&(T.snO&&Math.abs(this.fragLoadIdx-T.loadIdx)=P||C)&&(k.logger.log("audioStreamController: retryDate reached, switch back to IDLE state"),this.state=R.IDLE);break;case R.WAITING_INIT_PTS:case R.STOPPED:case R.FRAG_LOADING:case R.PARSING:case R.PARSED:case R.ENDED:}}},{key:"onMediaAttached",value:function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("ended",this.onvended);var r=this.config;this.tracks&&r.autoStartLoad&&this.startLoad(r.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(k.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.tracks;t&&t.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){this.state===R.ENDED&&(this.state=R.IDLE),this.media&&(this.lastCurrentTime=this.media.currentTime),void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold),this.tick()}},{key:"onMediaEnded",value:function(){this.startPosition=this.lastCurrentTime=0}},{key:"onAudioTracksUpdated",value:function(e){k.logger.log("audio tracks updated"),this.tracks=e.audioTracks}},{key:"onAudioTrackSwitching",value:function(e){var t=!!e.url;this.trackId=e.id,this.state=R.IDLE,this.fragCurrent=null,this.state=R.PAUSED,this.waitingFragment=null,t?this.timer||(this.timer=setInterval(this.ontick,100)):this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),t&&(this.audioSwitch=!0,this.state=R.IDLE,void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold)),this.tick()}},{key:"onAudioTrackLoaded",value:function(e){var t=e.details,r=e.id,i=this.tracks[r],a=t.totalduration,n=0;if(k.logger.log("track "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+a),t.live){var s=i.details;s&&t.fragments.length>0?(E.default.mergeDetails(s,t),n=t.fragments[0].start,t.PTSKnown?k.logger.log("live audio playlist sliding:"+n.toFixed(3)):k.logger.log("live audio playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,k.logger.log("live audio playlist - first load, unknown sliding"))}else t.PTSKnown=!1;if(i.details=t,!this.startFragRequested){if(this.startPosition===-1){var o=t.startTimeOffset;isNaN(o)?this.startPosition=0:(k.logger.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o)}this.nextLoadPosition=this.startPosition}this.state===R.WAITING_TRACK&&(this.state=R.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===R.KEY_LOADING&&(this.state=R.IDLE,this.tick())}},{key:"onFragLoaded",value:function(e){var t=this.fragCurrent,r=e.frag;if(this.state===R.FRAG_LOADING&&t&&"audio"===r.type&&r.level===t.level&&r.sn===t.sn){var i=this.tracks[this.trackId],a=i.details,n=a.totalduration,s=t.level,o=t.sn,l=t.cc,u=this.config.defaultAudioCodec||i.audioCodec||"mp4a.40.2",d=this.stats=e.stats;if("initSegment"===o)this.state=R.IDLE,d.tparsed=d.tbuffered=performance.now(),a.initSegment.data=e.payload,this.hls.trigger(v.default.FRAG_BUFFERED,{stats:d,frag:t,id:"audio"}),this.tick();else{this.state=R.PARSING,this.appended=!1,this.demuxer||(this.demuxer=new h.default(this.hls,"audio"));var f=this.initPTS[l],c=a.initSegment?a.initSegment.data:[];if(c||void 0!==f){this.pendingBuffering=!0,k.logger.log("Demuxing "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s);this.demuxer.push(e.payload,c,u,null,t,n,!1,f)}else k.logger.log("unknown video PTS for continuity counter "+l+", waiting for video PTS before demuxing audio frag "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s),this.waitingFragment=e,this.state=R.WAITING_INIT_PTS}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(e){var t=this.fragCurrent,r=e.frag;if(t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING){var i=e.tracks,a=void 0;if(i.video&&delete i.video,a=i.audio){a.levelCodec="mp4a.40.2",a.id=e.id,this.hls.trigger(v.default.BUFFER_CODECS,i),k.logger.log("audio track:audio,container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var n=a.initSegment;if(n){var s={type:"audio",data:n,parent:"audio",content:"initSegment"};this.audioSwitch?this.pendingData=[s]:(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(v.default.BUFFER_APPENDING,s))}this.tick()}}}},{key:"onFragParsingData",value:function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"audio"===e.id&&"audio"===e.type&&i.sn===r.sn&&i.level===r.level&&this.state===R.PARSING){var a=this.trackId,n=this.tracks[a],s=this.hls;isNaN(e.endPTS)&&(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),k.logger.log("parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb),E.default.updateFragPTSDTS(n.details,r.sn,e.startPTS,e.endPTS);var o=this.audioSwitch,l=this.media,u=!1;if(o&&l)if(l.readyState){var d=l.currentTime;k.logger.log("switching audio track : currentTime:"+d),d>=e.startPTS&&(k.logger.log("switching audio track : flushing all audio"),this.state=R.BUFFER_FLUSHING,s.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),u=!0,this.audioSwitch=!1,s.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:a}))}else this.audioSwitch=!1,s.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:a});var f=this.pendingData;this.audioSwitch||([e.data1,e.data2].forEach(function(t){t&&t.length&&f.push({type:e.type,data:t,parent:"audio",content:"data"})}),!u&&f.length&&(f.forEach(function(e){t.state===R.PARSING&&(t.pendingBuffering=!0,t.hls.trigger(v.default.BUFFER_APPENDING,e))}),this.pendingData=[],this.appended=!0)),this.tick()}}},{key:"onFragParsed",value:function(e){var t=this.fragCurrent,r=e.frag;t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING&&(this.stats.tparsed=performance.now(),this.state=R.PARSED,this._checkAppendedParsed())}},{key:"onBufferCreated",value:function(e){var t=e.tracks.audio;t&&(this.mediaBuffer=t.buffer,this.loadedmetadata=!0)}},{key:"onBufferAppended",value:function(e){if("audio"===e.parent){var t=this.state;t!==R.PARSING&&t!==R.PARSED||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}}},{key:"_checkAppendedParsed",value:function(){if(!(this.state!==R.PARSED||this.appended&&this.pendingBuffering)){var e=this.fragCurrent,t=this.stats,r=this.hls;if(e){this.fragPrevious=e,t.tbuffered=performance.now(),r.trigger(v.default.FRAG_BUFFERED,{stats:t,frag:e,id:"audio"});var i=this.mediaBuffer?this.mediaBuffer:this.media;k.logger.log("audio buffered : "+T.default.toString(i.buffered)),this.audioSwitch&&this.appended&&(this.audioSwitch=!1,r.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:this.trackId})),this.state=R.IDLE}this.tick()}}},{key:"onError",value:function(e){var t=e.frag;if(!t||"audio"===t.type)switch(e.details){case _.ErrorDetails.FRAG_LOAD_ERROR:case _.ErrorDetails.FRAG_LOAD_TIMEOUT:if(!e.fatal){var r=this.fragLoadError;r?r++:r=1;var i=this.config;if(r<=i.fragLoadingMaxRetry){this.fragLoadError=r,t.loadCounter=0;var a=Math.min(Math.pow(2,r-1)*i.fragLoadingRetryDelay,i.fragLoadingMaxRetryTimeout);k.logger.warn("audioStreamController: frag loading failed, retry in "+a+" ms"),this.retryDate=performance.now()+a,this.state=R.FRAG_LOADING_WAITING_RETRY}else k.logger.error("audioStreamController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=R.ERROR}break;case _.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case _.ErrorDetails.AUDIO_TRACK_LOAD_ERROR:case _.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:case _.ErrorDetails.KEY_LOAD_ERROR:case _.ErrorDetails.KEY_LOAD_TIMEOUT:this.state!==R.ERROR&&(this.state=e.fatal?R.ERROR:R.IDLE,k.logger.warn("audioStreamController: "+e.details+" while loading frag,switch to "+this.state+" state ..."));break;case _.ErrorDetails.BUFFER_FULL_ERROR:if("audio"===e.parent&&(this.state===R.PARSING||this.state===R.PARSED)){var n=this.mediaBuffer,s=this.media.currentTime;if(n&&f.default.isBuffered(n,s)&&f.default.isBuffered(n,s+.5)){var o=this.config;o.maxMaxBufferLength>=o.maxBufferLength&&(o.maxMaxBufferLength/=2,k.logger.warn("audio:reduce max buffer length to "+o.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*o.fragLoadingLoopThreshold),this.state=R.IDLE}else k.logger.warn("buffer full error also media.currentTime is not buffered, flush audio buffer"),this.fragCurrent=null,this.state=R.BUFFER_FLUSHING,this.hls.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"})}}}},{key:"onBufferFlushed",value:function(){var e=this,t=this.pendingData;t&&t.length?(k.logger.log("appending pending audio data on Buffer Flushed"),t.forEach(function(t){e.hls.trigger(v.default.BUFFER_APPENDING,t)}),this.appended=!0,this.pendingData=[],this.state=R.PARSED):(this.state=R.IDLE,this.fragPrevious=null,this.tick())}},{key:"state",set:function(e){if(this.state!==e){var t=this.state;this._state=e,k.logger.log("audio stream:"+t+"->"+e)}},get:function(){return this._state}}]),t}(y.default);r.default=A},{24:24,30:30,31:31,32:32,34:34,35:35,45:45,50:50,51:51}],7:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){this.updateTrack(this.trackId)}},{key:"onManifestLoading",value:function(){this.tracks=[],this.trackId=-1}},{key:"onManifestLoaded",value:function(e){var t=this,r=e.audioTracks||[],i=!1;this.tracks=r,this.hls.trigger(u.default.AUDIO_TRACKS_UPDATED,{audioTracks:r});var a=0;r.forEach(function(e){if(e.default)return t.audioTrack=a,void(i=!0);a++}),i===!1&&r.length&&(c.logger.log("no default audio track defined, use first audio track as default"),this.audioTrack=0)}},{key:"onAudioTrackLoaded",value:function(e){e.id=0&&e=0&&e.1){var a=i.updating;try{i.abort()}catch(e){a=!0,c.logger.warn("can not abort audio buffer: "+e)}a?this.audioTimestampOffset=e.start:(c.logger.warn("change mpeg audio timestamp offset from "+i.timestampOffset+" to "+e.start),i.timestampOffset=e.start)}}}},{key:"onManifestParsed",value:function(e){var t=e.audio,r=e.video,i=0;e.altAudio&&(t||r)&&(i=(t?1:0)+(r?1:0),c.logger.log(i+" sourceBuffer(s) expected")),this.sourceBufferNb=i}},{key:"onMediaAttaching",value:function(e){var t=this.media=e.media;if(t){var r=this.mediaSource=new MediaSource;this.onmso=this.onMediaSourceOpen.bind(this),this.onmse=this.onMediaSourceEnded.bind(this),this.onmsc=this.onMediaSourceClose.bind(this),r.addEventListener("sourceopen",this.onmso),r.addEventListener("sourceended",this.onmse),r.addEventListener("sourceclose",this.onmsc),t.src=URL.createObjectURL(r)}}},{key:"onMediaDetaching",value:function(){c.logger.log("media source detaching");var e=this.mediaSource;if(e){if("open"===e.readyState)try{e.endOfStream()}catch(e){c.logger.warn("onMediaDetaching:"+e.message+" while calling endOfStream")}e.removeEventListener("sourceopen",this.onmso),e.removeEventListener("sourceended",this.onmse),e.removeEventListener("sourceclose",this.onmsc),this.media&&(URL.revokeObjectURL(this.media.src),this.media.removeAttribute("src"),this.media.load()),this.mediaSource=null,this.media=null,this.pendingTracks={},this.tracks={},this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}this.onmso=this.onmse=this.onmsc=null,this.hls.trigger(u.default.MEDIA_DETACHED)}},{key:"onMediaSourceOpen",value:function(){c.logger.log("media source opened"),this.hls.trigger(u.default.MEDIA_ATTACHED,{media:this.media});var e=this.mediaSource;e&&e.removeEventListener("sourceopen",this.onmso),this.checkPendingTracks()}},{key:"checkPendingTracks",value:function(){var e=this.pendingTracks,t=Object.keys(e).length;t&&(this.sourceBufferNb<=t||0===this.sourceBufferNb)&&(this.createSourceBuffers(e),this.pendingTracks={},this.doAppending())}},{key:"onMediaSourceClose",value:function(){c.logger.log("media source closed")}},{key:"onMediaSourceEnded",value:function(){c.logger.log("media source ended")}},{key:"onSBUpdateEnd",value:function(){if(this.audioTimestampOffset){var e=this.sourceBuffer.audio;c.logger.warn("change mpeg audio timestamp offset from "+e.timestampOffset+" to "+this.audioTimestampOffset),e.timestampOffset=this.audioTimestampOffset,delete this.audioTimestampOffset}this._needsFlush&&this.doFlush(),this._needsEos&&this.checkEos(),this.appending=!1;var t=this.parent,r=this.segments.reduce(function(e,r){return r.parent===t?e+1:e},0);this.hls.trigger(u.default.BUFFER_APPENDED,{parent:t,pending:r}),this._needsFlush||this.doAppending(),this.updateMediaElementDuration()}},{key:"onSBUpdateError",value:function(e){c.logger.error("sourceBuffer error:",e),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1})}},{key:"onBufferReset",value:function(){var e=this.sourceBuffer;for(var t in e){var r=e[t];try{this.mediaSource.removeSourceBuffer(r),r.removeEventListener("updateend",this.onsbue),r.removeEventListener("error",this.onsbe)}catch(e){}}this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}},{key:"onBufferCodecs",value:function(e){if(0===Object.keys(this.sourceBuffer).length){for(var t in e)this.pendingTracks[t]=e[t];var r=this.mediaSource;r&&"open"===r.readyState&&this.checkPendingTracks()}}},{key:"createSourceBuffers",value:function(e){var t=this.sourceBuffer,r=this.mediaSource;for(var i in e)if(!t[i]){var a=e[i],n=a.levelCodec||a.codec,s=a.container+";codecs="+n;c.logger.log("creating sourceBuffer("+s+")");try{var o=t[i]=r.addSourceBuffer(s);o.addEventListener("updateend",this.onsbue),o.addEventListener("error",this.onsbe),this.tracks[i]={codec:n,container:a.container},a.buffer=o}catch(e){c.logger.error("error while trying to add sourceBuffer:"+e.message),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_ADD_CODEC_ERROR,fatal:!1,err:e,mimeType:s})}}this.hls.trigger(u.default.BUFFER_CREATED,{tracks:e})}},{key:"onBufferAppending",value:function(e){this._needsFlush||(this.segments?this.segments.push(e):this.segments=[e],this.doAppending())}},{key:"onBufferAppendFail",value:function(e){c.logger.error("sourceBuffer error:",e.event),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1})}},{key:"onBufferEos",value:function(e){var t=this.sourceBuffer,r=e.type;for(var i in t)r&&i!==r||t[i].ended||(t[i].ended=!0,c.logger.log(i+" sourceBuffer now EOS"));this.checkEos()}},{key:"checkEos",value:function(){var e=this.sourceBuffer,t=this.mediaSource;if(!t||"open"!==t.readyState)return void(this._needsEos=!1);for(var r in e){var i=e[r];if(!i.ended)return;if(i.updating)return void(this._needsEos=!0)}c.logger.log("all media data available, signal endOfStream() to MediaSource and stop loading fragment");try{t.endOfStream()}catch(e){c.logger.warn("exception while calling mediaSource.endOfStream()")}this._needsEos=!1}},{key:"onBufferFlushing",value:function(e){this.flushRange.push({start:e.startOffset,end:e.endOffset,type:e.type}),this.flushBufferCounter=0,this.doFlush()}},{key:"onLevelUpdated",value:function(e){var t=e.details;0!==t.fragments.length&&(this._levelDuration=t.totalduration+t.fragments[0].start,this.updateMediaElementDuration())}},{key:"updateMediaElementDuration",value:function(){var e=this.media,t=this.mediaSource,r=this.sourceBuffer,i=this._levelDuration;if(null!==i&&e&&t&&r&&0!==e.readyState&&"open"===t.readyState){for(var a in r)if(r[a].updating)return;null===this._msDuration&&(this._msDuration=t.duration);var n=e.duration;(i>this._msDuration&&i>n||n===1/0||isNaN(n))&&(c.logger.log("Updating mediasource duration to "+i.toFixed(3)),this._msDuration=t.duration=i)}}},{key:"doFlush",value:function(){for(;this.flushRange.length;){var e=this.flushRange[0];if(!this.flushBuffer(e.start,e.end,e.type))return void(this._needsFlush=!0);this.flushRange.shift(),this.flushBufferCounter=0}if(0===this.flushRange.length){this._needsFlush=!1;var t=0,r=this.sourceBuffer;try{for(var i in r)t+=r[i].buffered.length}catch(e){c.logger.error("error while accessing sourceBuffer.buffered")}this.appended=t,this.hls.trigger(u.default.BUFFER_FLUSHED)}}},{key:"doAppending",value:function(){var e=this.hls,t=this.sourceBuffer,r=this.segments;if(Object.keys(t).length){if(this.media.error)return this.segments=[],void c.logger.error("trying to append although a media error occured, flush segment and abort");if(this.appending)return;if(r&&r.length){var i=r.shift();try{var a=i.type,n=t[a];n?n.updating?r.unshift(i):(n.ended=!1,this.parent=i.parent,n.appendBuffer(i.data),this.appendError=0,this.appended++,this.appending=!0):this.onSBUpdateEnd()}catch(t){c.logger.error("error while trying to append buffer:"+t.message),r.unshift(i);var s={type:h.ErrorTypes.MEDIA_ERROR,parent:i.parent};if(22===t.code)return this.segments=[],s.details=h.ErrorDetails.BUFFER_FULL_ERROR,s.fatal=!1,void e.trigger(u.default.ERROR,s);if(this.appendError?this.appendError++:this.appendError=1,s.details=h.ErrorDetails.BUFFER_APPEND_ERROR,this.appendError>e.config.appendErrorMaxRetry)return c.logger.log("fail "+e.config.appendErrorMaxRetry+" times to append segment in sourceBuffer"),r=[],s.fatal=!0,void e.trigger(u.default.ERROR,s);s.fatal=!1,e.trigger(u.default.ERROR,s)}}}}},{key:"flushBuffer",value:function(e,t,r){var i,a,n,s,o,l,u=this.sourceBuffer;if(Object.keys(u).length){if(c.logger.log("flushBuffer,pos/start/end: "+this.media.currentTime.toFixed(3)+"/"+e+"/"+t),this.flushBufferCounter.5)return this.flushBufferCounter++,c.logger.log("flush "+d+" ["+o+","+l+"], of ["+n+","+s+"], pos:"+this.media.currentTime),i.remove(o,l),!1}catch(e){c.logger.warn("exception while accessing sourcebuffer, it might have been removed from MediaSource")}}}else c.logger.warn("abort flushing too many retries");c.logger.log("buffer flushed")}return!0}}]),t}(f.default);r.default=g},{30:30,31:31,32:32,50:50}],9:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;rthis.autoLevelCapping&&t.streamController.nextLevelSwitch(),this.autoLevelCapping=t.autoLevelCapping}}}},{key:"getMaxLevel",value:function(e){var t=0,r=void 0,i=void 0,a=this.mediaWidth,n=this.mediaHeight,s=0,o=0;for(r=0;r<=e&&(i=this.levels[r],!this.isLevelRestricted(r))&&(t=r,s=i.width,o=i.height,!(a<=s||n<=o));r++);return t}},{key:"isLevelRestricted",value:function(e){return!(!this.restrictedLevels||this.restrictedLevels.indexOf(e)===-1)}},{key:"contentScaleFactor",get:function(){var e=1;try{e=window.devicePixelRatio}catch(e){}return e}},{key:"mediaWidth",get:function(){var e=void 0,t=this.media;return t&&(e=t.width||t.clientWidth||t.offsetWidth,e*=this.contentScaleFactor),e}},{key:"mediaHeight",get:function(){var e=void 0,t=this.media;return t&&(e=t.height||t.clientHeight||t.offsetHeight,e*=this.contentScaleFactor),e}}]),t}(f.default);r.default=c},{31:31,32:32}],10:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&n>l.config.fpsDroppedMonitoringThreshold*s){var d=l.currentLevel;c.logger.warn("drop FPS ratio greater than max allowed value for currentLevel: "+d),d>0&&(l.autoLevelCapping===-1||l.autoLevelCapping>=d)&&(d-=1,l.trigger(u.default.FPS_DROP_LEVEL_CAPPING,{level:d,droppedLevel:l.currentLevel}),l.autoLevelCapping=d,l.streamController.nextLevelSwitch())}}this.lastTime=i,this.lastDroppedFrames=r,this.lastDecodedFrames=t}}},{key:"checkFPSInterval",value:function(){var e=this.video;if(e)if(this.isVideoPlaybackQualityAvailable){var t=e.getVideoPlaybackQuality();this.checkFPS(e,t.totalVideoFrames,t.droppedVideoFrames)}else this.checkFPS(e,e.webkitDecodedFrameCount,e.webkitDroppedFrameCount)}}]),t}(f.default);r.default=h},{31:31,32:32,50:50}],11:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0})}else o.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:o.url,reason:"no level with compatible codecs found in manifest"})}},{key:"setLevelInternal",value:function(e){var t=this._levels,r=this.hls;if(e>=0&&e1&&a.loadErrore&&(this._level===e&&void 0!==t[e].details||this.setLevelInternal(e))}},{key:"manualLevel",get:function(){return this._manualLevel},set:function(e){this._manualLevel=e,void 0===this._startLevel&&(this._startLevel=e),e!==-1&&(this.level=e)}},{key:"firstLevel",get:function(){return this._firstLevel},set:function(e){this._firstLevel=e}},{key:"startLevel",get:function(){if(void 0===this._startLevel){var e=this.hls.config.startLevel;return void 0!==e?e:this._firstLevel}return this._startLevel},set:function(e){this._startLevel=e}},{key:"nextLoadLevel",get:function(){return this._manualLevel!==-1?this._manualLevel:this.hls.nextAutoLevel},set:function(e){this.level=e,this._manualLevel===-1&&(this.hls.nextAutoLevel=e)}}]),t}(f.default);r.default=p},{30:30,31:31,32:32,34:34,50:50}],12:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&e===-1&&(k.logger.log("override startPosition with lastCurrentTime @"+t.toFixed(3)),e=t),this.state=R.IDLE,this.nextLoadPosition=this.startPosition=this.lastCurrentTime=e,this.tick()}else this.forceStartLoad=!0,this.state=R.STOPPED}},{key:"stopLoad",value:function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.STOPPED,this.forceStartLoad=!1}},{key:"tick",value:function(){1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){switch(this.state){case R.ERROR:break;case R.BUFFER_FLUSHING:this.fragLoadError=0;break;case R.IDLE:if(!this._doTickIdle())return;break;case R.WAITING_LEVEL:var e=this.levels[this.level];e&&e.details&&(this.state=R.IDLE);break;case R.FRAG_LOADING_WAITING_RETRY:var t=performance.now(),r=this.retryDate;(!r||t>=r||this.media&&this.media.seeking)&&(k.logger.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=R.IDLE);break;case R.ERROR:case R.STOPPED:case R.FRAG_LOADING:case R.PARSING:case R.PARSED:case R.ENDED:}this._checkBuffer(),this._checkFragmentChanged()}},{key:"_doTickIdle",value:function(){var e=this.hls,t=e.config,r=this.media;if(void 0!==this.levelLastLoaded&&!r&&(this.startFragRequested||!t.startFragPrefetch))return!0;var i=void 0;i=this.loadedmetadata?r.currentTime:this.nextLoadPosition;var a=e.nextLoadLevel,n=this.levels[a],s=n.bitrate,o=void 0;o=s?Math.max(8*t.maxBufferSize/s,t.maxBufferLength):t.maxBufferLength,o=Math.min(o,t.maxMaxBufferLength);var l=f.default.bufferInfo(this.mediaBuffer?this.mediaBuffer:r,i,t.maxBufferHole),u=l.len;if(u>=o)return!0;k.logger.trace("buffer length of "+u.toFixed(3)+" is below max of "+o.toFixed(3)+". checking for more payload ..."),this.level=e.nextLoadLevel=a;var d=n.details;if(void 0===d||d.live&&this.levelLastLoaded!==a)return this.state=R.WAITING_LEVEL,!0;var c=this.fragPrevious;if(!d.live&&c&&c.sn===d.endSN){if(Math.min(r.duration,c.start+c.duration)-Math.max(l.end,c.start)<=Math.max(.2,c.duration/2)){var h={};return this.altAudio&&(h.type="video"),this.hls.trigger(v.default.BUFFER_EOS,h),this.state=R.ENDED,!0}}return this._fetchPayloadOrEos(i,l,d)}},{key:"_fetchPayloadOrEos",value:function(e,t,r){var i=this.fragPrevious,a=this.level,n=r.fragments,s=n.length;if(0===s)return!1;var o=n[0].start,l=n[s-1].start+n[s-1].duration,u=t.end,d=void 0;if(r.initSegment&&!r.initSegment.data)d=r.initSegment;else if(r.live){var f=this.config.initialLiveManifestSize;if(sf&&(l.currentTime=f)}if(e.PTSKnown&&t>i&&l&&l.readyState)return null;if(this.startFragRequested&&!e.PTSKnown){if(a){var c=a.sn+1;c>=e.startSN&&c<=e.endSN&&(u=n[c-e.startSN],k.logger.log("live playlist, switching playlist, load frag with next SN: "+u.sn))}u||(u=n[Math.min(s-1,Math.round(s/2))],k.logger.log("live playlist, switching playlist, unknown, load middle frag : "+u.sn))}return u}},{key:"_findFragment",value:function(e,t,r,i,a,n,s){var o=this.hls.config,l=void 0,d=void 0,f=o.maxFragLookUpTolerance,c=t?i[t.sn-i[0].sn+1]:void 0,h=function(e){var t=Math.min(f,e.duration);return e.start+e.duration-t<=a?1:e.start-t>a&&e.start?-1:0};if(an-f&&(f=0),d=c&&!h(c)?c:u.default.search(i,h)):d=i[r-1],d){l=d;var g=l.sn-s.startSN,v=t&&l.level===t.level,p=i[g-1],y=i[g+1];if(v&&l.sn===t.sn)if(l.sno.maxBufferHole&&t.dropped&&g?(l=p,k.logger.warn("SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this"),t.loadCounter--):(l=y,k.logger.log("SN just loaded, load next one: "+l.sn)) +}else l=null;else l.dropped&&!v&&(y&&y.backtracked?(k.logger.warn("Already backtracked from fragment "+(g+1)+", will not backtrack to fragment "+g+". Loading fragment "+(g+1)),l=y):(k.logger.warn("Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe"),l.dropped=0,p?(p.loadCounter&&p.loadCounter--,l=p):l=null))}return l}},{key:"_loadFragmentOrKey",value:function(e,t,r,i,a){var n=this.hls,s=n.config;if(!e.decryptdata||null==e.decryptdata.uri||null!=e.decryptdata.key){if(k.logger.log("Loading "+e.sn+" of ["+r.startSN+" ,"+r.endSN+"],level "+t+", currentTime:"+i.toFixed(3)+",bufferEnd:"+a.toFixed(3)),void 0!==this.fragLoadIdx?this.fragLoadIdx++:this.fragLoadIdx=0,e.loadCounter){e.loadCounter++;var o=s.fragLoadingLoopThreshold;if(e.loadCounter>o&&Math.abs(this.fragLoadIdx-e.loadIdx)t.endPTS?1:0})}},{key:"followingBufferedFrag",value:function(e){return e?this.getBufferedFrag(e.endPTS+.5):null}},{key:"_checkFragmentChanged",value:function(){var e,t,r=this.media;if(r&&r.readyState&&r.seeking===!1&&(t=r.currentTime,t>r.playbackRate*this.lastCurrentTime&&(this.lastCurrentTime=t),f.default.isBuffered(r,t)?e=this.getBufferedFrag(t):f.default.isBuffered(r,t+.1)&&(e=this.getBufferedFrag(t+.1)),e)){var i=e;if(i!==this.fragPlaying){this.hls.trigger(v.default.FRAG_CHANGED,{frag:i});var a=i.level;this.fragPlaying&&this.fragPlaying.level===a||this.hls.trigger(v.default.LEVEL_SWITCHED,{level:a}),this.fragPlaying=i}}}},{key:"immediateLevelSwitch",value:function(){if(k.logger.log("immediateLevelSwitch"),!this.immediateSwitch){this.immediateSwitch=!0;var e=this.media,t=void 0;e?(t=e.paused,e.pause()):t=!0,this.previouslyPaused=t}var r=this.fragCurrent;r&&r.loader&&r.loader.abort(),this.fragCurrent=null,this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)}},{key:"immediateLevelSwitchEnd",value:function(){var e=this.media;e&&e.buffered.length&&(this.immediateSwitch=!1,f.default.isBuffered(e,e.currentTime)&&(e.currentTime-=1e-4),this.previouslyPaused||e.play())}},{key:"nextLevelSwitch",value:function(){var e=this.media;if(e&&e.readyState){var t=void 0,r=void 0,i=void 0;if(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,r=this.getBufferedFrag(e.currentTime),r&&r.startPTS>1&&this.flushMainBuffer(0,r.startPTS-1),e.paused)t=0;else{var a=this.hls.nextLoadLevel,n=this.levels[a],s=this.fragLastKbps;t=s&&this.fragCurrent?this.fragCurrent.duration*n.bitrate/(1e3*s)+1:0}if((i=this.getBufferedFrag(e.currentTime+t))&&(i=this.followingBufferedFrag(i))){var o=this.fragCurrent;o&&o.loader&&o.loader.abort(),this.fragCurrent=null,this.flushMainBuffer(i.startPTS,Number.POSITIVE_INFINITY)}}}},{key:"flushMainBuffer",value:function(e,t){this.state=R.BUFFER_FLUSHING;var r={startOffset:e,endOffset:t};this.altAudio&&(r.type="video"),this.hls.trigger(v.default.BUFFER_FLUSHING,r)}},{key:"onMediaAttached",value:function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("seeked",this.onvseeked),t.addEventListener("ended",this.onvended);var r=this.config;this.levels&&r.autoStartLoad&&this.hls.startLoad(r.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(k.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.levels;t&&t.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0,e.backtracked=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("seeked",this.onvseeked),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){var e=this.media,t=e?e.currentTime:void 0,r=this.config;if(k.logger.log("media seeking to "+t.toFixed(3)),this.state===R.FRAG_LOADING){var i=this.mediaBuffer?this.mediaBuffer:e,a=f.default.bufferInfo(i,t,this.config.maxBufferHole),n=this.fragCurrent;if(0===a.len&&n){var s=r.maxFragLookUpTolerance,o=n.start-s,l=n.start+n.duration+s;tl?(n.loader&&(k.logger.log("seeking outside of buffer while fragment load in progress, cancel fragment load"),n.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.state=R.IDLE):k.logger.log("seeking outside of buffer but within currently loaded fragment range")}}else this.state===R.ENDED&&(this.state=R.IDLE);e&&(this.lastCurrentTime=t),this.state!==R.FRAG_LOADING&&void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*r.fragLoadingLoopThreshold),this.loadedmetadata||(this.nextLoadPosition=this.startPosition=t),this.tick()}},{key:"onMediaSeeked",value:function(){k.logger.log("media seeked to "+this.media.currentTime.toFixed(3)),this.tick()}},{key:"onMediaEnded",value:function(){k.logger.log("media ended"),this.startPosition=this.lastCurrentTime=0}},{key:"onManifestLoading",value:function(){k.logger.log("trigger BUFFER_RESET"),this.hls.trigger(v.default.BUFFER_RESET),this._bufferedFrags=[],this.stalled=!1,this.startPosition=this.lastCurrentTime=0}},{key:"onManifestParsed",value:function(e){var t,r=!1,i=!1;e.levels.forEach(function(e){(t=e.audioCodec)&&(t.indexOf("mp4a.40.2")!==-1&&(r=!0),t.indexOf("mp4a.40.5")!==-1&&(i=!0))}),this.audioCodecSwitch=r&&i,this.audioCodecSwitch&&k.logger.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.levels=e.levels,this.startLevelLoaded=!1,this.startFragRequested=!1;var a=this.config;(a.autoStartLoad||this.forceStartLoad)&&this.hls.startLoad(a.startPosition)}},{key:"onLevelLoaded",value:function(e){var t=e.details,r=e.level,i=this.levels[r],a=t.totalduration,n=0;if(k.logger.log("level "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+a),this.levelLastLoaded=r,t.live){var s=i.details;s&&t.fragments.length>0?(E.default.mergeDetails(s,t),n=t.fragments[0].start,this.liveSyncPosition=this.computeLivePosition(n,s),t.PTSKnown?k.logger.log("live playlist sliding:"+n.toFixed(3)):k.logger.log("live playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,k.logger.log("live playlist - first load, unknown sliding"))}else t.PTSKnown=!1;if(i.details=t,this.hls.trigger(v.default.LEVEL_UPDATED,{details:t,level:r}),this.startFragRequested===!1){if(this.startPosition===-1||this.lastCurrentTime===-1){var o=t.startTimeOffset;isNaN(o)?t.live?(this.startPosition=this.computeLivePosition(n,t),k.logger.log("configure startPosition to "+this.startPosition)):this.startPosition=0:(o<0&&(k.logger.log("negative start time offset "+o+", count from end of last fragment"),o=n+a+o),k.logger.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o),this.lastCurrentTime=this.startPosition}this.nextLoadPosition=this.startPosition}this.state===R.WAITING_LEVEL&&(this.state=R.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===R.KEY_LOADING&&(this.state=R.IDLE,this.tick())}},{key:"onFragLoaded",value:function(e){var t=this.fragCurrent,r=e.frag;if(this.state===R.FRAG_LOADING&&t&&"main"===r.type&&r.level===t.level&&r.sn===t.sn){var i=e.stats,a=this.levels[t.level],n=a.details;if(k.logger.log("Loaded "+t.sn+" of ["+n.startSN+" ,"+n.endSN+"],level "+t.level),this.bitrateTest=!1,this.stats=i,r.bitrateTest===!0&&this.hls.nextLoadLevel)this.state=R.IDLE,this.startFragRequested=!1,i.tparsed=i.tbuffered=performance.now(),this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:t,id:"main"}),this.tick();else if("initSegment"===r.sn)this.state=R.IDLE,i.tparsed=i.tbuffered=performance.now(),n.initSegment.data=e.payload,this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:t,id:"main"}),this.tick();else{this.state=R.PARSING;var s=n.totalduration,o=t.level,l=t.sn,u=this.config.defaultAudioCodec||a.audioCodec;this.audioCodecSwap&&(k.logger.log("swapping playlist audio codec"),void 0===u&&(u=this.lastAudioCodec),u&&(u=u.indexOf("mp4a.40.5")!==-1?"mp4a.40.2":"mp4a.40.5")),this.pendingBuffering=!0,this.appended=!1,k.logger.log("Parsing "+l+" of ["+n.startSN+" ,"+n.endSN+"],level "+o+", cc "+t.cc);var d=this.demuxer;d||(d=this.demuxer=new h.default(this.hls,"main"));var f=this.media,c=f&&f.seeking,g=!c&&(n.PTSKnown||!n.live),p=n.initSegment?n.initSegment.data:[];d.push(e.payload,p,u,a.videoCodec,t,s,g,void 0)}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(e){var t=this.fragCurrent,r=e.frag;if(t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING){var i,a,n=e.tracks;if(n.audio&&this.altAudio&&delete n.audio,a=n.audio){var s=this.levels[this.level].audioCodec,o=navigator.userAgent.toLowerCase();s&&this.audioCodecSwap&&(k.logger.log("swapping playlist audio codec"),s=s.indexOf("mp4a.40.5")!==-1?"mp4a.40.2":"mp4a.40.5"),this.audioCodecSwitch&&1!==a.metadata.channelCount&&o.indexOf("firefox")===-1&&(s="mp4a.40.5"),o.indexOf("android")!==-1&&"audio/mpeg"!==a.container&&(s="mp4a.40.2",k.logger.log("Android: force audio codec to "+s)),a.levelCodec=s,a.id=e.id}a=n.video,a&&(a.levelCodec=this.levels[this.level].videoCodec,a.id=e.id),this.hls.trigger(v.default.BUFFER_CODECS,n);for(i in n){a=n[i],k.logger.log("main track:"+i+",container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var l=a.initSegment;l&&(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(v.default.BUFFER_APPENDING,{type:i,data:l,parent:"main",content:"initSegment"}))}this.tick()}}},{key:"onFragParsingData",value:function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"main"===e.id&&i.sn===r.sn&&i.level===r.level&&("audio"!==e.type||!this.altAudio)&&this.state===R.PARSING){var a=this.levels[this.level],n=r;if(isNaN(e.endPTS)&&(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),k.logger.log("Parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb+",dropped:"+(e.dropped||0)),"video"===e.type)if(n.dropped=e.dropped,n.dropped){if(!n.backtracked)return n.backtracked=!0,this.nextLoadPosition=e.startPTS,this.state=R.IDLE,void this.tick();k.logger.warn("Already backtracked on this fragment, appending with the gap")}else n.backtracked=!1;var s=E.default.updateFragPTSDTS(a.details,n.sn,e.startPTS,e.endPTS,e.startDTS,e.endDTS),o=this.hls;o.trigger(v.default.LEVEL_PTS_UPDATED,{details:a.details,level:this.level,drift:s,type:e.type,start:e.startPTS,end:e.endPTS}),[e.data1,e.data2].forEach(function(r){r&&r.length&&t.state===R.PARSING&&(t.appended=!0,t.pendingBuffering=!0,o.trigger(v.default.BUFFER_APPENDING,{type:e.type,data:r,parent:"main",content:"data"}))}),this.tick()}}},{key:"onFragParsed",value:function(e){var t=this.fragCurrent,r=e.frag;t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING&&(this.stats.tparsed=performance.now(),this.state=R.PARSED,this._checkAppendedParsed())}},{key:"onAudioTrackSwitching",value:function(e){var t=!!e.url,r=e.id;if(!t){if(this.mediaBuffer!==this.media){k.logger.log("switching on main audio, use media.buffered to schedule main fragment loading"),this.mediaBuffer=this.media;var i=this.fragCurrent;i.loader&&(k.logger.log("switching to main audio track, cancel main fragment load"),i.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.IDLE}var a=this.hls;a.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),a.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:r}),this.altAudio=!1}}},{key:"onAudioTrackSwitched",value:function(e){var t=e.id,r=!!this.hls.audioTracks[t].url;if(r){var i=this.videoBuffer;i&&this.mediaBuffer!==i&&(k.logger.log("switching on alternate audio, use video.buffered to schedule main fragment loading"),this.mediaBuffer=i)}this.altAudio=r,this.tick()}},{key:"onBufferCreated",value:function(e){var t=e.tracks,r=void 0,i=void 0,a=!1;for(var n in t){var s=t[n];"main"===s.id?(i=n,r=s,"video"===n&&(this.videoBuffer=t[n].buffer)):a=!0}a&&r?(k.logger.log("alternate track found, use "+i+".buffered to schedule main fragment loading"),this.mediaBuffer=r.buffer):this.mediaBuffer=this.media}},{key:"onBufferAppended",value:function(e){if("main"===e.parent){var t=this.state;t!==R.PARSING&&t!==R.PARSED||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}}},{key:"_checkAppendedParsed",value:function(){if(!(this.state!==R.PARSED||this.appended&&this.pendingBuffering)){var e=this.fragCurrent;if(e){var t=this.mediaBuffer?this.mediaBuffer:this.media;k.logger.log("main buffered : "+T.default.toString(t.buffered));var r=this._bufferedFrags.filter(function(e){return f.default.isBuffered(t,(e.startPTS+e.endPTS)/2)});r.push(e),this._bufferedFrags=r.sort(function(e,t){return e.startPTS-t.startPTS}),this.fragPrevious=e;var i=this.stats;i.tbuffered=performance.now(),this.fragLastKbps=Math.round(8*i.total/(i.tbuffered-i.tfirst)),this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:e,id:"main"}),this.state=R.IDLE}this.tick()}}},{key:"onError",value:function(e){var t=e.frag||this.fragCurrent;if(!t||"main"===t.type){var r=this.media,i=r&&f.default.isBuffered(r,r.currentTime)&&f.default.isBuffered(r,r.currentTime+.5);switch(e.details){case _.ErrorDetails.FRAG_LOAD_ERROR:case _.ErrorDetails.FRAG_LOAD_TIMEOUT:case _.ErrorDetails.KEY_LOAD_ERROR:case _.ErrorDetails.KEY_LOAD_TIMEOUT:if(!e.fatal){var a=this.fragLoadError;a?a++:a=1;var n=this.config;if(a<=n.fragLoadingMaxRetry||i||t.autoLevel&&t.level){this.fragLoadError=a,t.loadCounter=0;var s=Math.min(Math.pow(2,a-1)*n.fragLoadingRetryDelay,n.fragLoadingMaxRetryTimeout);k.logger.warn("mediaController: frag loading failed, retry in "+s+" ms"),this.retryDate=performance.now()+s,this.loadedmetadata||(this.startFragRequested=!1,this.nextLoadPosition=this.startPosition),this.state=R.FRAG_LOADING_WAITING_RETRY}else k.logger.error("mediaController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=R.ERROR}break;case _.ErrorDetails.FRAG_LOOP_LOADING_ERROR:e.fatal||(i?(this._reduceMaxBufferLength(t.duration),this.state=R.IDLE):t.autoLevel&&0!==t.level||(e.fatal=!0,this.state=R.ERROR));break;case _.ErrorDetails.LEVEL_LOAD_ERROR:case _.ErrorDetails.LEVEL_LOAD_TIMEOUT:this.state!==R.ERROR&&(e.fatal?(this.state=R.ERROR,k.logger.warn("streamController: "+e.details+",switch to "+this.state+" state ...")):this.state===R.WAITING_LEVEL&&(this.state=R.IDLE));break;case _.ErrorDetails.BUFFER_FULL_ERROR:"main"!==e.parent||this.state!==R.PARSING&&this.state!==R.PARSED||(i?(this._reduceMaxBufferLength(this.config.maxBufferLength),this.state=R.IDLE):(k.logger.warn("buffer full error also media.currentTime is not buffered, flush everything"),this.fragCurrent=null,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)))}}}},{key:"_reduceMaxBufferLength",value:function(e){var t=this.config;t.maxMaxBufferLength>=e&&(t.maxMaxBufferLength/=2,k.logger.warn("main:reduce max buffer length to "+t.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*t.fragLoadingLoopThreshold)}},{key:"_checkBuffer",value:function(){var e=this.media;if(e&&e.readyState){var t=e.currentTime,r=this.mediaBuffer?this.mediaBuffer:e,i=r.buffered;if(!this.loadedmetadata&&i.length){this.loadedmetadata=!0;var a=e.seeking?t:this.startPosition,n=f.default.isBuffered(r,a);t===a&&n||(k.logger.log("target start position:"+a),n||(a=i.start(0),k.logger.log("target start position not buffered, seek to buffered.start(0) "+a)),k.logger.log("adjust currentTime from "+t+" to "+a),e.currentTime=a)}else if(this.immediateSwitch)this.immediateLevelSwitchEnd();else{var s=f.default.bufferInfo(e,t,0),o=!(e.paused||e.ended||0===e.buffered.length),l=t!==this.lastCurrentTime,u=this.config;if(l)this.stallReported&&(k.logger.warn("playback not stuck anymore @"+t+", after "+Math.round(performance.now()-this.stalled)+"ms"),this.stallReported=!1),this.stalled=void 0,this.nudgeRetry=0;else if(o){var d=performance.now(),c=this.hls;if(this.stalled){var h=d-this.stalled,g=s.len,p=this.nudgeRetry||0;if(g<=.5&&h>1e3*u.lowBufferWatchdogPeriod){this.stallReported||(this.stallReported=!0,k.logger.warn("playback stalling in low buffer @"+t),c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1,buffer:g}));var y=s.nextStart,m=y-t;if(y&&m0){this.nudgeRetry=++p;var E=p*u.nudgeOffset;k.logger.log("adjust currentTime from "+e.currentTime+" to next buffered @ "+y+" + nudge "+E),e.currentTime=y+E,this.stalled=void 0,c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_SEEK_OVER_HOLE,fatal:!1,hole:y+E-t})}}else if(g>.5&&h>1e3*u.highBufferWatchdogPeriod)if(this.stallReported||(this.stallReported=!0,k.logger.warn("playback stalling in high buffer @"+t),c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1,buffer:g})),this.stalled=void 0,this.nudgeRetry=++p,p"+e),this.hls.trigger(v.default.STREAM_STATE_TRANSITION,{previousState:t,nextState:e})}},get:function(){return this._state}},{key:"currentLevel",get:function(){var e=this.media;if(e){var t=this.getBufferedFrag(e.currentTime);if(t)return t.level}return-1}},{key:"nextBufferedFrag",get:function(){var e=this.media;return e?this.followingBufferedFrag(this.getBufferedFrag(e.currentTime)):null}},{key:"nextLevel",get:function(){var e=this.nextBufferedFrag;return e?e.level:-1}},{key:"liveSyncPosition",get:function(){return this._liveSyncPosition},set:function(e){this._liveSyncPosition=e}}]),t}(y.default);r.default=A},{24:24,30:30,31:31,32:32,34:34,35:35,45:45,50:50,51:51}],13:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r-1&&this.vttFragQueues[this.currentTrackId].length){var e=this.currentlyProcessing=this.vttFragQueues[this.currentTrackId].shift();this.hls.trigger(u.default.FRAG_LOADING,{frag:e})}}},{key:"onSubtitleFragProcessed",value:function(e){e.success&&this.vttFragSNsProcessed[e.frag.trackId].push(e.frag.sn),this.currentlyProcessing=null,this.nextFrag()}},{key:"onError",value:function(e){var t=e.frag;t&&"subtitle"!==t.type||this.currentlyProcessing&&(this.currentlyProcessing=null,this.nextFrag())}},{key:"onSubtitleTracksUpdated",value:function(e){var t=this;c.logger.log("subtitle tracks updated"),this.tracks=e.subtitleTracks,this.clearVttFragQueues(),this.vttFragSNsProcessed={},this.tracks.forEach(function(e){t.vttFragSNsProcessed[e.id]=[]})}},{key:"onSubtitleTrackSwitch",value:function(e){this.currentTrackId=e.id,this.clearVttFragQueues()}},{key:"onSubtitleTrackLoaded",value:function(e){var t=this.vttFragSNsProcessed[e.id],r=this.vttFragQueues[e.id],i=this.currentlyProcessing?this.currentlyProcessing.sn:-1,a=function(e){return t.indexOf(e.sn)>-1},n=function(e){return r.some(function(t){return t.sn===e.sn})};e.details.fragments.forEach(function(t){a(t)||t.sn===i||n(t)||(t.trackId=e.id,r.push(t))}),this.nextFrag()}}]),t}(f.default);r.default=h},{31:31,32:32,50:50}],14:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r=0&&e0;)e.removeCue(e.cues[0])}function l(e,t){return e&&e.label===t.name&&!(e.textTrack1||e.textTrack2)}function u(e,t,r,i){return Math.min(t,i)-Math.max(e,r)}Object.defineProperty(r,"__esModule",{value:!0});var d=function(){function e(e,t){for(var r=0;r=0&&(o[0]=Math.min(o[0],t),o[1]=Math.max(o[1],r),n=!0,l/(r-t)>.5))return}n||a.push([t,r]),this.Cues.newCue(this[e],t,r,i)}},{key:"onInitPtsFound",value:function(e){var t=this;void 0===this.initPTS&&(this.initPTS=e.initPTS),this.unparsedVttFrags.length&&(this.unparsedVttFrags.forEach(function(e){t.onFragLoaded(e)}),this.unparsedVttFrags=[])}},{key:"getExistingTrack",value:function(e){var t=this.media;if(t)for(var r=0;r>>8^255&p^99,e[h]=p,t[p]=h;var y=c[h],m=c[y],E=c[m],b=257*c[p]^16843008*p;i[h]=b<<24|b>>>8,a[h]=b<<16|b>>>16,n[h]=b<<8|b>>>24,s[h]=b,b=16843009*E^65537*m^257*y^16843008*h,l[p]=b<<24|b>>>8,u[p]=b<<16|b>>>16,d[p]=b<<8|b>>>24,f[p]=b,h?(h=y^c[c[c[E^y]]],g^=c[c[g]]):h=g=1}}},{key:"expandKey",value:function(e){for(var t=this.uint8ArrayToUint32Array_(e),r=!0,i=0;i>8|e>>>24}},{key:"decrypt",value:function(e,t,r){for(var i,a,n=this.keySize+6,s=this.invKeySchedule,o=this.invSBox,l=this.invSubMix,u=l[0],d=l[1],f=l[2],c=l[3],h=this.uint8ArrayToUint32Array_(r),g=h[0],v=h[1],p=h[2],y=h[3],m=new Int32Array(e),E=new Int32Array(m.length),b=void 0,T=void 0,_=void 0,k=void 0,R=void 0,A=void 0,S=void 0,L=void 0,w=void 0,D=void 0,O=void 0,I=void 0,P=this.networkToHostOrderSwap;t>>24]^d[A>>16&255]^f[S>>8&255]^c[255&L]^s[i],T=u[A>>>24]^d[S>>16&255]^f[L>>8&255]^c[255&R]^s[i+1],_=u[S>>>24]^d[L>>16&255]^f[R>>8&255]^c[255&A]^s[i+2],k=u[L>>>24]^d[R>>16&255]^f[A>>8&255]^c[255&S]^s[i+3],R=b,A=T,S=_,L=k,i+=4;b=o[R>>>24]<<24^o[A>>16&255]<<16^o[S>>8&255]<<8^o[255&L]^s[i],T=o[A>>>24]<<24^o[S>>16&255]<<16^o[L>>8&255]<<8^o[255&R]^s[i+1],_=o[S>>>24]<<24^o[L>>16&255]<<16^o[R>>8&255]<<8^o[255&A]^s[i+2],k=o[L>>>24]<<24^o[R>>16&255]<<16^o[A>>8&255]<<8^o[255&S]^s[i+3],i+=3,E[t]=P(b^g),E[t+1]=P(k^v),E[t+2]=P(_^p),E[t+3]=P(T^y),g=w,v=D,p=O,y=I,t+=4}return E.buffer}},{key:"destroy",value:function(){this.key=void 0,this.keySize=void 0,this.ksRows=void 0,this.sBox=void 0,this.invSBox=void 0,this.subMix=void 0,this.invSubMix=void 0,this.keySchedule=void 0,this.invKeySchedule=void 0,this.rcon=void 0}}]),e}();r.default=n},{}],18:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r>>5,(s-=h)>0&&c+h+s<=v);)for(g=m+f*u,p={unit:e.subarray(c+h,c+h+s),pts:g,dts:g},a.samples.push(p),a.len+=s,c+=s+h,f++;c>>6),(o=(60&t[r+2])>>>2)>h.length-1?void e.trigger(Event.ERROR,{type:a.ErrorTypes.MEDIA_ERROR,details:a.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"invalid ADTS sampling index:"+o}):(u=(1&t[r+2])<<2,u|=(192&t[r+3])>>>6,i.logger.log("manifest codec:"+n+",ADTS data:type:"+s+",sampleingIndex:"+o+"["+h[o]+"Hz],channelConfig:"+u),/firefox/i.test(f)?o>=6?(s=5,d=new Array(4),l=o-3):(s=2,d=new Array(2),l=o):f.indexOf("android")!==-1?(s=2,d=new Array(2),l=o):(s=5,d=new Array(4),n&&(n.indexOf("mp4a.40.29")!==-1||n.indexOf("mp4a.40.5")!==-1)||!n&&o>=6?l=o-3:((n&&n.indexOf("mp4a.40.2")!==-1&&o>=6&&1===u||!n&&1===u)&&(s=2,d=new Array(2)),l=o)),d[0]=s<<3,d[0]|=(14&o)>>1,d[1]|=(1&o)<<7,d[1]|=u<<3,5===s&&(d[1]|=(14&l)>>1,d[2]=(1&l)<<7,d[2]|=8,d[3]=0),{config:d,samplerate:h[o],channelCount:u,codec:"mp4a.40."+s,manifestCodec:c})}};t.exports=n},{30:30,50:50}],22:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r0&&null!=t&&null!=t.key&&"AES-128"===t.method){var g=this.decrypter;null==g&&(g=this.decrypter=new d.default(this.observer,this.config));var v,p=this;try{v=performance.now()}catch(e){v=Date.now()}g.decrypt(e,t.key.buffer,t.iv.buffer,function(e){var d;try{d=performance.now()}catch(e){d=Date.now()}p.observer.trigger(o.default.FRAG_DECRYPTED,{stats:{tstart:v,tdecrypt:d}}),p.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),i,a,n,s,l,u,f,c,h)})}else this.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),i,a,n,s,l,u,f,c,h)}},{key:"pushDecrypted",value:function(e,t,r,i,a,n,s,u,d,f,h,v){var y=this.demuxer;if(!y||s&&!this.probe(e)){var E=this.observer,T=this.typeSupported,_=this.config,k=[{demux:p.default,remux:m.default},{demux:c.default,remux:m.default},{demux:g.default,remux:b.default}];for(var R in k){var A=k[R],S=A.demux.probe;if(S(e)){var L=this.remuxer=new A.remux(E,_,T,this.vendor);y=new A.demux(E,L,_,T),this.probe=S;break}}if(!y)return void E.trigger(o.default.ERROR,{type:l.ErrorTypes.MEDIA_ERROR,details:l.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"no demux matching with content found"});this.demuxer=y}var w=this.remuxer;(s||u)&&(y.resetInitSegment(r,i,a,f),w.resetInitSegment()),s&&(y.resetTimeStamp(),w.resetTimeStamp(v)),"function"==typeof y.setDecryptData&&y.setDecryptData(t),y.append(e,n,d,h)}}]),e}();r.default=T},{18:18,20:20,27:27,29:29,30:30,32:32,42:42,43:43}],23:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(r,"__esModule",{value:!0});var a=e(22),n=i(a),s=e(32),o=i(s),l=e(50),u=e(1),d=i(u),f=function(e){var t=new d.default;t.trigger=function(e){for(var r=arguments.length,i=Array(r>1?r-1:0),a=1;a1?r-1:0),a=1;a1?t-1:0),i=1;i1?t-1:0),i=1;ie?(this.word<<=e,this.bitsAvailable-=e):(e-=this.bitsAvailable,t=e>>3,e-=t>>3,this.bytesAvailable-=t,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}},{key:"readBits",value:function(e){var t=Math.min(this.bitsAvailable,e),r=this.word>>>32-t;return e>32&&n.logger.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=t,this.bitsAvailable>0?this.word<<=t:this.bytesAvailable>0&&this.loadWord(),t=e-t,t>0&&this.bitsAvailable?r<>>e))return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"skipEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBoolean",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"readUShort",value:function(){return this.readBits(16)}},{key:"readUInt",value:function(){return this.readBits(32)}},{key:"skipScalingList",value:function(e){var t,r,i=8,a=8;for(t=0;t=8){var r=e.bin2str(t.subarray(4,8));return["moof","ftyp","styp"].indexOf(r)>=0}return!1}},{key:"bin2str",value:function(e){return String.fromCharCode.apply(null,e)}},{key:"findBox",value:function(t,r){var i,a,n,s,o,l=[];if(!r.length)return null;for(i=0;i1?i+a:t.byteLength,n===r[0]&&(1===r.length?l.push(t.subarray(i+8,s)):(o=e.findBox(t.subarray(i+8,s),r.slice(1)),o.length&&(l=l.concat(o)))),i=s;return l}},{key:"parseInitSegment",value:function(t){var r=[];return e.findBox(t,["moov","trak"]).forEach(function(t){var i=e.findBox(t,["tkhd"])[0];if(i){var a=i[0],n=0===a?12:20,s=i[n]<<24|i[n+1]<<16|i[n+2]<<8|i[n+3];s=s<0?4294967296+s:s;var o=e.findBox(t,["mdia","mdhd"])[0];if(o){a=o[0],n=0===a?12:20;var l=o[n]<<24|o[n+1]<<16|o[n+2]<<8|o[n+3],u=e.findBox(t,["mdia","hdlr"])[0];if(u){var d=e.bin2str(u.subarray(8,12)),f={soun:"audio",vide:"video"}[d];f&&(r[s]={timescale:l,type:f},r[f]={timescale:l,id:s})}}}}),r}},{key:"startDTS",value:function(t,r){var i,a,n;return i=e.findBox(r,["moof","traf"]),a=[].concat.apply([],i.map(function(r){return e.findBox(r,["tfhd"]).map(function(i){var a,n,s;return a=i[4]<<24|i[5]<<16|i[6]<<8|i[7],n=t[a].timescale||9e4,s=e.findBox(r,["tfdt"]).map(function(e){var t,r;return t=e[0],r=e[4]<<24|e[5]<<16|e[6]<<8|e[7],1===t&&(r*=Math.pow(2,32),r+=e[8]<<24|e[9]<<16|e[10]<<8|e[11]),r})[0],(s=s||1/0)/n})})),n=Math.min.apply(null,a),isFinite(n)?n:0}}]),e}();r.default=o},{32:32}],28:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=e.length)return void r();if(!(e[t].unit.length<32)){var i=this.decrypter.isSync();if(this.decryptAacSample(e,t,r,i),!i)return}}}},{key:"getAvcEncryptedData",value:function(e){for(var t=16*Math.floor((e.length-48)/160)+16,r=new Int8Array(t),i=0,a=32;a<=e.length-16;a+=160,i+=16)r.set(e.subarray(a,a+16),i);return r}},{key:"getAvcDecryptedUnit",value:function(e,t){t=new Uint8Array(t);for(var r=0,i=32;i<=e.length-16;i+=160,r+=16)e.set(t.subarray(r,r+16),i);return e}},{key:"decryptAvcSample",value:function(e,t,r,i,a,n){var s=this.discardEPB(a.data),o=this.getAvcEncryptedData(s),l=this;this.decryptBuffer(o.buffer,function(o){a.data=l.getAvcDecryptedUnit(s,o),n||l.decryptAvcSamples(e,t,r+1,i)})}},{key:"decryptAvcSamples",value:function(e,t,r,i){for(;;t++,r=0){if(t>=e.length)return void i();for(var a=e[t].units;!(r>=a.length);r++){var n=a[r];if(!(n.length<=48||1!==n.type&&5!==n.type)){var s=this.decrypter.isSync();if(this.decryptAvcSample(e,t,r,i,n,s),!s)return}}}}}]),e}();r.default=o},{18:18}],29:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r>4>1){if((o=a+5+e[a+4])===a+188)continue}else o=a+4;switch(s){case m:n&&(_&&(l=L(_))&&w(l,!1),_={data:[],size:0}),_&&(_.data.push(e.subarray(o,a+188)),_.size+=a+188-o);break;case E:n&&(k&&(l=L(k))&&(p.isAAC?D(l):O(l)),k={data:[],size:0}),k&&(k.data.push(e.subarray(o,a+188)),k.size+=a+188-o);break;case b:n&&(R&&(l=L(R))&&I(l),R={data:[],size:0}),R&&(R.data.push(e.subarray(o,a+188)),R.size+=a+188-o);break;case 0:n&&(o+=e[o]+1),T=this._pmtId=A(e,o);break;case T:n&&(o+=e[o]+1);var P=S(e,o,this.typeSupported.mpeg===!0||this.typeSupported.mp3===!0,null!=this.sampleAes);m=P.avc,m>0&&(h.id=m),E=P.audio,E>0&&(p.id=E,p.isAAC=P.isAAC),b=P.id3,b>0&&(y.id=b),f&&!c&&(g.logger.log("reparse from beginning"),f=!1,a=-188),c=this.pmtParsed=!0;break;case 17:case 8191:break;default:f=!0}}else this.observer.trigger(u.default.ERROR,{type:v.ErrorTypes.MEDIA_ERROR,details:v.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"TS packet did not start with 0x47"});_&&(l=L(_))?(w(l,!0),h.pesData=null):h.pesData=_,k&&(l=L(k))?(p.isAAC?D(l):O(l),p.pesData=null):(k&&k.size&&g.logger.log("last AAC PES packet truncated,might overlap between fragments"),p.pesData=k),R&&(l=L(R))?(I(l),y.pesData=null):y.pesData=R,null==this.sampleAes?this.remuxer.remux(p,h,y,this._txtTrack,t,r,i):this.decryptAndRemux(p,h,y,this._txtTrack,t,r,i)}},{key:"decryptAndRemux",value:function(e,t,r,i,a,n,s){if(e.samples&&e.isAAC){var o=this;this.sampleAes.decryptAacSamples(e.samples,0,function(){o.decryptAndRemuxAvc(e,t,r,i,a,n,s)})}else this.decryptAndRemuxAvc(e,t,r,i,a,n,s)}},{key:"decryptAndRemuxAvc",value:function(e,t,r,i,a,n,s){if(t.samples){var o=this;this.sampleAes.decryptAvcSamples(t.samples,0,0,function(){o.remuxer.remux(e,t,r,i,a,n,s)})}else this.remuxer.remux(e,t,r,i,a,n,s)}},{key:"destroy",value:function(){this._initPTS=this._initDTS=void 0,this._duration=0}},{key:"_parsePAT",value:function(e,t){return(31&e[t+10])<<8|e[t+11]}},{key:"_parsePMT",value:function(e,t,r,i){var a,n,s,o,l={audio:-1,avc:-1,id3:-1,isAAC:!0};for(a=(15&e[t+1])<<8|e[t+2],n=t+3+a-4,s=(15&e[t+10])<<8|e[t+11],t+=12+s;t1;){var f=new Uint8Array(d[0].length+d[1].length);f.set(d[0]),f.set(d[1],d[0].length),d[0]=f,d.splice(1,1)}if(t=d[0],1===(t[0]<<16)+(t[1]<<8)+t[2]){if((i=(t[4]<<8)+t[5])&&i>e.size-6)return null;r=t[7],192&r&&(s=536870912*(14&t[9])+4194304*(255&t[10])+16384*(254&t[11])+128*(255&t[12])+(254&t[13])/2, +s>4294967295&&(s-=8589934592),64&r?(o=536870912*(14&t[14])+4194304*(255&t[15])+16384*(254&t[16])+128*(255&t[17])+(254&t[18])/2,o>4294967295&&(o-=8589934592),s-o>54e5&&(g.logger.warn(Math.round((s-o)/9e4)+"s delta between PTS and DTS, align them"),s=o)):o=s),a=t[8],l=a+9,e.size-=l,n=new Uint8Array(e.size);for(var c=0,h=d.length;cv){l-=v;continue}t=t.subarray(l),v-=l,l=0}n.set(t,u),u+=v}return i&&(i-=a+3),{data:n,pts:s,dts:o,len:i}}return null}},{key:"pushAccesUnit",value:function(e,t){if(e.units.length&&e.frame){var r=t.samples,i=r.length;!this.config.forceKeyFrameOnDiscontinuity||e.key===!0||t.sps&&(i||this.contiguous)?(e.id=i,r.push(e)):t.dropped++}e.debug.length&&g.logger.log(e.pts+"/"+e.dts+":"+e.debug)}},{key:"_parseAVCPES",value:function(e,t){var r,i,a,n=this,s=this._avcTrack,o=this._parseAVCNALu(e.data),l=this.avcSample;e.data=null,o.forEach(function(t){switch(t.type){case 1:i=!0,l.frame=!0;var o=t.data;if(o.length>4){var u=new f.default(o).readSliceType();2!==u&&4!==u&&7!==u&&9!==u||(l.key=!0)}break;case 5:i=!0,l||(l=n.avcSample=n._createAVCSample(!0,e.pts,e.dts,"")),l.key=!0,l.frame=!0;break;case 6:i=!0,r=new f.default(n.discardEPB(t.data)),r.readUByte();for(var d=0,c=0,h=!1,g=0;!h&&r.bytesAvailable>1;){d=0;do{g=r.readUByte(),d+=g}while(255===g);c=0;do{g=r.readUByte(),c+=g}while(255===g);if(4===d&&0!==r.bytesAvailable){h=!0;if(181===r.readUByte()){if(49===r.readUShort()){if(1195456820===r.readUInt()){if(3===r.readUByte()){var v=r.readUByte(),p=r.readUByte(),y=31&v,m=[v,p];for(a=0;a0){if(t.pts>=e[r-1].pts)e.push(t);else for(var i=r-1;i>=0;i--)if(t.pts=0)i={data:e.subarray(c,s-u-1),type:n},f.push(i);else{var h=this._getLastNalUnit();if(h&&(d&&s<=4-d&&h.state&&(h.data=h.data.subarray(0,h.data.byteLength-d)),(r=s-u-1)>0)){var g=new Uint8Array(h.data.byteLength+r);g.set(h.data,0),g.set(e.subarray(0,r),h.data.byteLength),h.data=g}}s=0&&u>=0&&(i={data:e.subarray(c,o),type:n,state:u},f.push(i)),0===f.length){var v=this._getLastNalUnit();if(v){var p=new Uint8Array(v.data.byteLength+e.byteLength);p.set(v.data,0),p.set(e,v.data.byteLength),v.data=p}}return l.naluState=u,f}},{key:"discardEPB",value:function(e){for(var t,r,i=e.byteLength,a=[],n=1;n1&&(g.logger.log("AAC: align PTS for overlapping frames by "+Math.round((k-p)/90)),p=k)}for(;n+5>>5,(r-=s)>0&&n+s+r<=d);)for(l=p+a*i,f={unit:h.subarray(n+s,n+s+r),pts:l,dts:l},c.samples.push(f),c.len+=r,n+=r+s,a++;n0;)s+=t}},{key:"_onMpegFrame",value:function(e,t,r,i,a,n){var s=1152/r*1e3,o=n+a*s,l=this._audioTrack;l.config=[],l.channelCount=i,l.samplerate=r,l.duration=this._duration,l.samples.push({unit:e,pts:o,dts:o}),l.len+=e.length}},{key:"_onMpegNoise",value:function(e){g.logger.warn("mpeg audio has noise: "+e.length+" bytes")}},{key:"_parseMpeg",value:function(e,t,r,i,a){var n=[32,64,96,128,160,192,224,256,288,320,352,384,416,448,32,48,56,64,80,96,112,128,160,192,224,256,320,384,32,40,48,56,64,80,96,112,128,160,192,224,256,320,32,48,56,64,80,96,112,128,144,160,176,192,224,256,8,16,24,32,40,48,56,64,80,96,112,128,144,160],s=[44100,48e3,32e3,22050,24e3,16e3,11025,12e3,8e3];if(t+2>r)return-1;if(255===e[t]||224==(224&e[t+1])){if(t+24>r)return-1;var o=e[t+1]>>3&3,l=e[t+1]>>1&3,u=e[t+2]>>4&15,d=e[t+2]>>2&3,f=!!(2&e[t+2]);if(1!==o&&0!==u&&15!==u&&3!==d){var c=3===o?3-l:3===l?3:4,h=1e3*n[14*c+u-1],g=3===o?0:2===o?1:2,v=s[3*g+d],p=f?1:0,y=e[t+3]>>6==3?1:2,m=3===l?(3===o?12:6)*h/v+p<<2:(3===o?144:72)*h/v+p|0;return t+m>r?-1:(this._onMpegFrame&&this._onMpegFrame(e.subarray(t,t+m),h,v,y,i,a),m)}}for(var E=t+2;E=564&&71===e[0]&&71===e[188]&&71===e[376]}}]),e}();r.default=p},{21:21,25:25,28:28,30:30,32:32,50:50}],30:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.ErrorTypes={NETWORK_ERROR:"networkError",MEDIA_ERROR:"mediaError",MUX_ERROR:"muxError",OTHER_ERROR:"otherError"},r.ErrorDetails={MANIFEST_LOAD_ERROR:"manifestLoadError",MANIFEST_LOAD_TIMEOUT:"manifestLoadTimeOut",MANIFEST_PARSING_ERROR:"manifestParsingError",MANIFEST_INCOMPATIBLE_CODECS_ERROR:"manifestIncompatibleCodecsError",LEVEL_LOAD_ERROR:"levelLoadError",LEVEL_LOAD_TIMEOUT:"levelLoadTimeOut",LEVEL_SWITCH_ERROR:"levelSwitchError",AUDIO_TRACK_LOAD_ERROR:"audioTrackLoadError",AUDIO_TRACK_LOAD_TIMEOUT:"audioTrackLoadTimeOut",FRAG_LOAD_ERROR:"fragLoadError",FRAG_LOOP_LOADING_ERROR:"fragLoopLoadingError",FRAG_LOAD_TIMEOUT:"fragLoadTimeOut",FRAG_DECRYPT_ERROR:"fragDecryptError",FRAG_PARSING_ERROR:"fragParsingError",REMUX_ALLOC_ERROR:"remuxAllocError",KEY_LOAD_ERROR:"keyLoadError",KEY_LOAD_TIMEOUT:"keyLoadTimeOut",BUFFER_ADD_CODEC_ERROR:"bufferAddCodecError",BUFFER_APPEND_ERROR:"bufferAppendError",BUFFER_APPENDING_ERROR:"bufferAppendingError",BUFFER_STALLED_ERROR:"bufferStalledError",BUFFER_FULL_ERROR:"bufferFullError",BUFFER_SEEK_OVER_HOLE:"bufferSeekOverHole",BUFFER_NUDGE_ON_STALL:"bufferNudgeOnStall",INTERNAL_EXCEPTION:"internalException",WEBVTT_EXCEPTION:"webVTTException"}},{}],31:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=function(){function e(e,t){for(var r=0;r1?r-1:0),n=1;n=r.start(i)&&t<=r.end(i))return!0;return!1},bufferInfo:function(e,t,r){if(e){var i,a=e.buffered,n=[];for(i=0;id&&(l[u-1].end=e[o].end):l.push(e[o])}else l.push(e[o])}for(o=0,i=0,a=n=t;o=f&&t=0&&oe.endSN)return 0;if(o=t-e.startSN,l=e.fragments,u=l[o],!isNaN(u.startPTS)){var f=Math.abs(u.startPTS-r);isNaN(u.deltaPTS)?u.deltaPTS=f:u.deltaPTS=Math.max(f,u.deltaPTS),r=Math.min(r,u.startPTS),i=Math.max(i,u.endPTS),n=Math.min(n,u.startDTS),s=Math.max(s,u.endDTS)}var c=r-u.start;for(u.start=u.startPTS=r,u.endPTS=i,u.startDTS=n,u.endDTS=s,u.duration=i-r,d=o;d>0;d--)a.updatePTS(l,d,d-1);for(d=o;dt?a.start+a.duration:a.start-n.duration:r>t?(a.duration=s-a.start,a.duration<0&&i.logger.warn("negative duration computed for frag "+a.sn+",level "+a.level+", there should be some duration drift between playlist and fragment!")):(n.duration=a.start-s,n.duration<0&&i.logger.warn("negative duration computed for frag "+n.sn+",level "+n.level+", there should be some duration drift between playlist and fragment!"))}};t.exports=a},{50:50}],36:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};a(this,e);var i=e.DefaultConfig;if((r.liveSyncDurationCount||r.liveMaxLatencyDurationCount)&&(r.liveSyncDuration||r.liveMaxLatencyDuration))throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");for(var n in i)n in r||(r[n]=i[n]);if(void 0!==r.liveMaxLatencyDurationCount&&r.liveMaxLatencyDurationCount<=r.liveSyncDurationCount)throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"');if(void 0!==r.liveMaxLatencyDuration&&(r.liveMaxLatencyDuration<=r.liveSyncDuration||void 0===r.liveSyncDuration))throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"');(0,T.enableLogs)(r.debug),this.config=r,this._autoLevelCapping=-1;var s=this.observer=new k.default;s.trigger=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),i=1;i1?t-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:-1;T.logger.log("startLoad("+e+")"),this.networkControllers.forEach(function(t){t.startLoad(e)})}},{key:"stopLoad",value:function(){T.logger.log("stopLoad"),this.networkControllers.forEach(function(e){e.stopLoad()})}},{key:"swapAudioCodec",value:function(){T.logger.log("swapAudioCodec"),this.streamController.swapAudioCodec()}},{key:"recoverMediaError",value:function(){T.logger.log("recoverMediaError");var e=this.media;this.detachMedia(),this.attachMedia(e)}},{key:"levels",get:function(){return this.levelController.levels}},{key:"currentLevel",get:function(){return this.streamController.currentLevel},set:function(e){T.logger.log("set currentLevel:"+e),this.loadLevel=e,this.streamController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.streamController.nextLevel},set:function(e){T.logger.log("set nextLevel:"+e),this.levelController.manualLevel=e,this.streamController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(e){T.logger.log("set loadLevel:"+e),this.levelController.manualLevel=e}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel},set:function(e){this.levelController.nextLoadLevel=e}},{key:"firstLevel",get:function(){return Math.max(this.levelController.firstLevel,this.minAutoLevel)},set:function(e){T.logger.log("set firstLevel:"+e),this.levelController.firstLevel=e}},{key:"startLevel",get:function(){return this.levelController.startLevel},set:function(e){T.logger.log("set startLevel:"+e);var t=this;e!==-1&&(e=Math.max(e,t.minAutoLevel)),t.levelController.startLevel=e}},{key:"autoLevelCapping",get:function(){return this._autoLevelCapping},set:function(e){T.logger.log("set autoLevelCapping:"+e),this._autoLevelCapping=e}},{key:"autoLevelEnabled",get:function(){return this.levelController.manualLevel===-1}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}},{key:"minAutoLevel",get:function(){for(var e=this,t=e.levels,r=e.config.minAutoBitrate,i=t?t.length:0,a=0;ar)return a}return 0}},{key:"maxAutoLevel",get:function(){var e=this,t=e.levels,r=e.autoLevelCapping;return r===-1&&t&&t.length?t.length-1:r}},{key:"nextAutoLevel",get:function(){var e=this;return Math.min(Math.max(e.abrController.nextAutoLevel,e.minAutoLevel),e.maxAutoLevel)},set:function(e){var t=this;t.abrController.nextAutoLevel=Math.max(t.minAutoLevel,e)}},{key:"audioTracks",get:function(){var e=this.audioTrackController;return e?e.audioTracks:[]}},{key:"audioTrack",get:function(){var e=this.audioTrackController;return e?e.audioTrack:-1},set:function(e){var t=this.audioTrackController;t&&(t.audioTrack=e)}},{key:"liveSyncPosition",get:function(){return this.streamController.liveSyncPosition}},{key:"subtitleTracks",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTracks:[]}},{key:"subtitleTrack",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTrack:-1},set:function(e){var t=this.subtitleTrackController;t&&(t.subtitleTrack=e)}}]),e}();r.default=A},{1:1,11:11,12:12,2:2,30:30,32:32,38:38,39:39,4:4,40:40,50:50}],37:[function(e,t,r){"use strict";t.exports=e(36).default},{36:36}],38:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r>8*(15-r)&255;return t}},{key:"fragmentDecryptdataFromLevelkey",value:function(e,t){var r=e;return e&&e.method&&e.uri&&!e.iv&&(r=new T,r.method=e.method,r.baseuri=e.baseuri,r.reluri=e.reluri,r.iv=this.createInitializationVector(t)),r}},{key:"cloneObj",value:function(e){return JSON.parse(JSON.stringify(e))}},{key:"url",get:function(){return!this._url&&this.relurl&&(this._url=u.default.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url},set:function(e){this._url=e}},{key:"programDateTime",get:function(){return!this._programDateTime&&this.rawProgramDateTime&&(this._programDateTime=new Date(Date.parse(this.rawProgramDateTime))),this._programDateTime}},{key:"byteRange",get:function(){if(!this._byteRange){var e=this._byteRange=[] +;if(this.rawByteRange){var t=this.rawByteRange.split("@",2);if(1===t.length){var r=this.lastByteRangeEndOffset;e[0]=r?r:0}else e[0]=parseInt(t[1]);e[1]=parseInt(t[0])+e[0]}}return this._byteRange}},{key:"byteRangeStartOffset",get:function(){return this.byteRange[0]}},{key:"byteRangeEndOffset",get:function(){return this.byteRange[1]}},{key:"decryptdata",get:function(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata}}]),e}(),k=function(e){function t(e){s(this,t);var r=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,f.default.MANIFEST_LOADING,f.default.LEVEL_LOADING,f.default.AUDIO_TRACK_LOADING,f.default.SUBTITLE_TRACK_LOADING));return r.loaders={},r}return n(t,e),o(t,[{key:"destroy",value:function(){for(var e in this.loaders){var t=this.loaders[e];t&&t.destroy()}this.loaders={},h.default.prototype.destroy.call(this)}},{key:"onManifestLoading",value:function(e){this.load(e.url,{type:"manifest"})}},{key:"onLevelLoading",value:function(e){this.load(e.url,{type:"level",level:e.level,id:e.id})}},{key:"onAudioTrackLoading",value:function(e){this.load(e.url,{type:"audioTrack",id:e.id})}},{key:"onSubtitleTrackLoading",value:function(e){this.load(e.url,{type:"subtitleTrack",id:e.id})}},{key:"load",value:function(e,t){var r=this.loaders[t.type];if(r){var i=r.context;if(i&&i.url===e)return void y.logger.trace("playlist request ongoing");y.logger.warn("abort previous loader for type:"+t.type),r.abort()}var a=this.hls.config,n=void 0,s=void 0,o=void 0,l=void 0;"manifest"===t.type?(n=a.manifestLoadingMaxRetry,s=a.manifestLoadingTimeOut,o=a.manifestLoadingRetryDelay,l=a.manifestLoadingMaxRetryTimeout):(n=a.levelLoadingMaxRetry,s=a.levelLoadingTimeOut,o=a.levelLoadingRetryDelay,l=a.levelLoadingMaxRetryTimeout,y.logger.log("loading playlist for "+t.type+" "+(t.level||t.id))),r=this.loaders[t.type]=t.loader=void 0!==a.pLoader?new a.pLoader(a):new a.loader(a),t.url=e,t.responseType="";var u=void 0,d=void 0;u={timeout:s,maxRetry:n,retryDelay:o,maxRetryDelay:l},d={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this)},r.load(t,u,d)}},{key:"resolve",value:function(e,t){return u.default.buildAbsoluteURL(t,e,{alwaysNormalize:!0})}},{key:"parseMasterPlaylist",value:function(e,t){var r=[],i=void 0;for(m.lastIndex=0;null!=(i=m.exec(e));){var a={},n=a.attrs=new p.default(i[1]);a.url=this.resolve(i[2],t);var s=n.decimalResolution("RESOLUTION");s&&(a.width=s.width,a.height=s.height),a.bitrate=n.decimalInteger("AVERAGE-BANDWIDTH")||n.decimalInteger("BANDWIDTH"),a.name=n.NAME;var o=n.CODECS;if(o){o=o.split(/[ ,]+/);for(var l=0;l2?(t=r.shift()+".",t+=parseInt(r.shift()).toString(16),t+=("000"+parseInt(r.shift()).toString(16)).substr(-4)):t=e,t}},{key:"parseLevelPlaylist",value:function(e,t,r,i){var a,n,s=0,o=0,l={type:null,version:null,url:t,fragments:[],live:!0,startSN:0},u=new T,d=0,f=null,c=new _;for(b.lastIndex=0;null!==(a=b.exec(e));){var h=a[1];if(h){c.duration=parseFloat(h);var g=(" "+a[2]).slice(1);c.title=g?g:null,c.tagList.push(g?["INF",h,g]:["INF",h])}else if(a[3]){if(!isNaN(c.duration)){var v=s++;c.type=i,c.start=o,c.levelkey=u,c.sn=v,c.level=r,c.cc=d,c.baseurl=t,c.relurl=(" "+a[3]).slice(1),l.fragments.push(c),f=c,o+=c.duration,c=new _}}else if(a[4]){if(c.rawByteRange=(" "+a[4]).slice(1),f){var m=f.byteRangeEndOffset;m&&(c.lastByteRangeEndOffset=m)}}else if(a[5])c.rawProgramDateTime=(" "+a[5]).slice(1),c.tagList.push(["PROGRAM-DATE-TIME",c.rawProgramDateTime]);else{for(a=a[0].match(/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/),n=1;n=0&&(u.method=S,u.baseuri=t,u.reluri=L,u.key=null,u.iv=w));break;case"START":var D=E,O=new p.default(D),I=O.decimalFloatingPoint("TIME-OFFSET");isNaN(I)||(l.startTimeOffset=I);break;case"MAP":var P=new p.default(E);c.relurl=P.URI,c.rawByteRange=P.BYTERANGE,c.baseurl=t,c.level=r,c.type=i,c.sn="initSegment",l.initSegment=c,c=new _;break;default:y.logger.warn("line parsed but not handled: "+a)}}}return c=f,c&&!c.relurl&&(l.fragments.pop(),o-=c.duration),l.totalduration=o,l.averagetargetduration=o/l.fragments.length,l.endSN=s-1,l}},{key:"loadsuccess",value:function(e,t,r){var i=e.data,a=e.url,n=r.type,s=r.id,o=r.level,l=this.hls;if(this.loaders[n]=void 0,void 0!==a&&0!==a.indexOf("data:")||(a=r.url),t.tload=performance.now(),0===i.indexOf("#EXTM3U"))if(i.indexOf("#EXTINF:")>0){var u="audioTrack"!==n&&"subtitleTrack"!==n,d=isNaN(o)?isNaN(s)?0:s:o,c=this.parseLevelPlaylist(i,a,d,"audioTrack"===n?"audio":"subtitleTrack"===n?"subtitle":"main");c.tload=t.tload,"manifest"===n&&l.trigger(f.default.MANIFEST_LOADED,{levels:[{url:a,details:c}],audioTracks:[],url:a,stats:t}),t.tparsed=performance.now(),c.targetduration?u?l.trigger(f.default.LEVEL_LOADED,{details:c,level:o||0,id:s||0,stats:t}):"audioTrack"===n?l.trigger(f.default.AUDIO_TRACK_LOADED,{details:c,id:s,stats:t}):"subtitleTrack"===n&&l.trigger(f.default.SUBTITLE_TRACK_LOADED,{details:c,id:s,stats:t}):l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"invalid targetduration"})}else{var h=this.parseMasterPlaylist(i,a);if(h.length){var v=this.parseMasterPlaylistMedia(i,a,"AUDIO"),p=this.parseMasterPlaylistMedia(i,a,"SUBTITLES");if(v.length){var m=!1;v.forEach(function(e){e.url||(m=!0)}),m===!1&&h[0].audioCodec&&!h[0].attrs.AUDIO&&(y.logger.log("audio codec signaled in quality level, but no embedded audio track signaled, create one"),v.unshift({type:"main",name:"main"}))}l.trigger(f.default.MANIFEST_LOADED,{levels:h,audioTracks:v,subtitles:p,url:a,stats:t})}else l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"no level found in manifest"})}else l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"no EXTM3U delimiter"})}},{key:"loaderror",value:function(e,t){var r,i,a=t.loader;switch(t.type){case"manifest":r=g.ErrorDetails.MANIFEST_LOAD_ERROR,i=!0;break;case"level":r=g.ErrorDetails.LEVEL_LOAD_ERROR,i=!1;break;case"audioTrack":r=g.ErrorDetails.AUDIO_TRACK_LOAD_ERROR,i=!1}a&&(a.abort(),this.loaders[t.type]=void 0),this.hls.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:a.url,loader:a,response:e,context:t})}},{key:"loadtimeout",value:function(e,t){var r,i,a=t.loader;switch(t.type){case"manifest":r=g.ErrorDetails.MANIFEST_LOAD_TIMEOUT,i=!0;break;case"level":r=g.ErrorDetails.LEVEL_LOAD_TIMEOUT,i=!1;break;case"audioTrack":r=g.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT,i=!1}a&&(a.abort(),this.loaders[t.type]=void 0),this.hls.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:a.url,loader:a,context:t})}}]),t}(h.default);r.default=k},{2:2,30:30,31:31,32:32,44:44,50:50}],41:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r>24&255,t[1]=i>>16&255,t[2]=i>>8&255,t[3]=255&i,t.set(e,4),a=0,i=8;a>24&255,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a,85,196,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.timescale,t.duration),e.hdlr(t.type),e.minf(t))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"minf",value:function(t){return"audio"===t.type?e.box(e.types.minf,e.box(e.types.smhd,e.SMHD),e.DINF,e.stbl(t)):e.box(e.types.minf,e.box(e.types.vmhd,e.VMHD),e.DINF,e.stbl(t))}},{key:"moof",value:function(t,r,i){return e.box(e.types.moof,e.mfhd(t),e.traf(i,r))}},{key:"moov",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trak(t[r]);return e.box.apply(null,[e.types.moov,e.mvhd(t[0].timescale,t[0].duration)].concat(i).concat(e.mvex(t)))}},{key:"mvex",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trex(t[r]);return e.box.apply(null,[e.types.mvex].concat(i))}},{key:"mvhd",value:function(t,r){r*=t;var i=Math.floor(r/(n+1)),a=Math.floor(r%(n+1)),s=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,t>>24&255,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return e.box(e.types.mvhd,s)}},{key:"sdtp",value:function(t){var r,i,a=t.samples||[],n=new Uint8Array(4+a.length);for(i=0;i>>8&255),n.push(255&a),n=n.concat(Array.prototype.slice.call(i));for(r=0;r>>8&255),s.push(255&a),s=s.concat(Array.prototype.slice.call(i));var o=e.box(e.types.avcC,new Uint8Array([1,n[3],n[4],n[5],255,224|t.sps.length].concat(n).concat([t.pps.length]).concat(s))),l=t.width,u=t.height,d=t.pixelRatio[0],f=t.pixelRatio[1];return e.box(e.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,l>>8&255,255&l,u>>8&255,255&u,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),o,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])),e.box(e.types.pasp,new Uint8Array([d>>24,d>>16&255,d>>8&255,255&d,f>>24,f>>16&255,f>>8&255,255&f])))}},{key:"esds",value:function(e){var t=e.config.length;return new Uint8Array([0,0,0,0,3,23+t,0,1,0,4,15+t,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([t]).concat(e.config).concat([6,1,2]))}},{key:"mp4a",value:function(t){var r=t.samplerate;return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]),e.box(e.types.esds,e.esds(t)))}},{key:"mp3",value:function(t){var r=t.samplerate;return e.box(e.types[".mp3"],new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]))}},{key:"stsd",value:function(t){return"audio"===t.type?t.isAAC||"mp3"!==t.codec?e.box(e.types.stsd,e.STSD,e.mp4a(t)):e.box(e.types.stsd,e.STSD,e.mp3(t)):e.box(e.types.stsd,e.STSD,e.avc1(t))}},{key:"tkhd",value:function(t){var r=t.id,i=t.duration*t.timescale,a=t.width,s=t.height,o=Math.floor(i/(n+1)),l=Math.floor(i%(n+1));return e.box(e.types.tkhd,new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,r>>24&255,r>>16&255,r>>8&255,255&r,0,0,0,0,o>>24,o>>16&255,o>>8&255,255&o,l>>24,l>>16&255,l>>8&255,255&l,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,a>>8&255,255&a,0,0,s>>8&255,255&s,0,0]))}},{key:"traf",value:function(t,r){var i=e.sdtp(t),a=t.id,s=Math.floor(r/(n+1)),o=Math.floor(r%(n+1));return e.box(e.types.traf,e.box(e.types.tfhd,new Uint8Array([0,0,0,0,a>>24,a>>16&255,a>>8&255,255&a])),e.box(e.types.tfdt,new Uint8Array([1,0,0,0,s>>24,s>>16&255,s>>8&255,255&s,o>>24,o>>16&255,o>>8&255,255&o])),e.trun(t,i.length+16+20+8+16+8+8),i)}},{key:"trak",value:function(t){return t.duration=t.duration||4294967295,e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"trex",value:function(t){var r=t.id;return e.box(e.types.trex,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trun",value:function(t,r){var i,a,n,s,o,l,u=t.samples||[],d=u.length,f=12+16*d,c=new Uint8Array(f);for(r+=8+f,c.set([0,0,15,1,d>>>24&255,d>>>16&255,d>>>8&255,255&d,r>>>24&255,r>>>16&255,r>>>8&255,255&r],0),i=0;i>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,o.isLeading<<2|o.dependsOn,o.isDependedOn<<6|o.hasRedundancy<<4|o.paddingValue<<1|o.isNonSync,61440&o.degradPrio,15&o.degradPrio,l>>>24&255,l>>>16&255,l>>>8&255,255&l],12+16*i);return e.box(e.types.trun,c)}},{key:"initSegment",value:function(t){e.types||e.init();var r,i=e.moov(t);return r=new Uint8Array(e.FTYP.byteLength+i.byteLength),r.set(e.FTYP),r.set(i,e.FTYP.byteLength),r}}]),e}();r.default=s},{}],42:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r-1&&s&&!s.match("CriOS"),this.ISGenerated=!1}return n(e,[{key:"destroy",value:function(){}},{key:"resetTimeStamp",value:function(e){this._initPTS=this._initDTS=e}},{key:"resetInitSegment",value:function(){this.ISGenerated=!1}},{key:"remux",value:function(e,t,r,i,a,n,s){if(this.ISGenerated||this.generateIS(e,t,a),this.ISGenerated)if(e.samples.length){var o=this.remuxAudio(e,a,n,s);if(t.samples.length){var l=void 0;o&&(l=o.endPTS-o.startPTS),this.remuxVideo(t,a,n,l)}}else{var d=void 0;t.samples.length&&(d=this.remuxVideo(t,a,n)),d&&e.codec&&this.remuxEmptyAudio(e,a,n,d)}r.samples.length&&this.remuxID3(r,a),i.samples.length&&this.remuxText(i,a),this.observer.trigger(u.default.FRAG_PARSED)}},{key:"generateIS",value:function(e,t,r){var i,a,n=this.observer,s=e.samples,o=t.samples,l=this.typeSupported,f="audio/mp4",g={},v={tracks:g},p=void 0===this._initPTS;if(p&&(i=a=1/0),e.config&&s.length&&(e.timescale=e.samplerate,d.logger.log("audio sampling rate : "+e.samplerate),e.isAAC||(l.mpeg?(f="audio/mpeg",e.codec=""):l.mp3&&(e.codec="mp3")),g.audio={container:f,codec:e.codec,initSegment:!e.isAAC&&l.mpeg?new Uint8Array:c.default.initSegment([e]),metadata:{channelCount:e.channelCount}},p&&(i=a=s[0].pts-e.inputTimeScale*r)),t.sps&&t.pps&&o.length){var y=t.inputTimeScale;t.timescale=y,g.video={container:"video/mp4",codec:t.codec,initSegment:c.default.initSegment([t]),metadata:{width:t.width,height:t.height}},p&&(i=Math.min(i,o[0].pts-y*r),a=Math.min(a,o[0].dts-y*r),this.observer.trigger(u.default.INIT_PTS_FOUND,{initPTS:i}))}Object.keys(g).length?(n.trigger(u.default.FRAG_PARSING_INIT_SEGMENT,v),this.ISGenerated=!0,p&&(this._initPTS=i,this._initDTS=a)):n.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"no audio/video samples found"})}},{key:"remuxVideo",value:function(e,t,r,i){var a,n,s,o,l,f,g,v=8,p=e.timescale,y=e.samples,m=[],E=y.length,b=this._PTSNormalize,T=this._initDTS;y.sort(function(e,t){var r=e.dts-t.dts,i=e.pts-t.pts;return r?r:i?i:e.id-t.id});var _=y.reduce(function(e,t){return Math.max(Math.min(e,t.pts-t.dts),-18e3)},0);if(_<0){d.logger.warn("PTS < DTS detected in video samples, shifting DTS by "+Math.round(_/90)+" ms to overcome this issue");for(var k=0;k1?d.logger.log("AVC:"+S+" ms hole between fragments detected,filling it"):S<-1&&d.logger.log("AVC:"+-S+" ms overlapping between fragments detected"),l=R,y[0].dts=l+T,o=Math.max(o-S,R),y[0].pts=o+T,d.logger.log("Video/PTS/DTS adjusted: "+Math.round(o/90)+"/"+Math.round(l/90)+",delta:"+S+" ms")),A=y[y.length-1],g=Math.max(b(A.dts-T,R),0),f=Math.max(b(A.pts-T,R),0),f=Math.max(f,g);var L=this.isSafari;L&&(a=Math.round((g-l)/(y.length-1)));for(var w=0,D=0,O=0;O0?U-1:U].dts;if(q.stretchShortVideoTrack){var Q=q.maxBufferHole,J=q.maxSeekHole,Z=Math.floor(Math.min(Q,J)*p),$=(i?o+i*p:this.nextAudioPts)-B.pts;$>Z?(a=$-z,a<0&&(a=z),d.logger.log("It is approximately "+$/90+" ms to the next segment; using duration "+a/90+" ms for the last video frame.")):a=z}else a=z}K=Math.round(B.pts-B.dts)}m.push({size:j,duration:a,cts:K,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:B.key?2:1,isNonSync:B.key?0:1}})}this.nextAvcDts=g+a;var ee=e.dropped;if(e.len=0,e.nbNalu=0,e.dropped=0,m.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var te=m[0].flags;te.dependsOn=2,te.isNonSync=0}e.samples=m,s=c.default.moof(e.sequenceNumber++,l,e),e.samples=[];var re={data1:s,data2:n,startPTS:o/p,endPTS:(f+a)/p,startDTS:l/p,endDTS:this.nextAvcDts/p,type:"video",nb:m.length,dropped:ee};return this.observer.trigger(u.default.FRAG_PARSING_DATA,re),re}},{key:"remuxAudio",value:function(e,t,r,i){var a,n,s,l,f,g,v,p,y,m,E,b,T,_,k,R,A=e.inputTimeScale,S=e.timescale,L=A/S,w=e.isAAC?1024:1152,D=w*L,O=this._PTSNormalize,I=this._initDTS,P=!e.isAAC&&this.typeSupported.mpeg,C=P?0:8,x=[],F=[];if(e.samples.sort(function(e,t){return e.pts-t.pts}),F=e.samples,R=this.nextAudioPts,r|=F.length&&R&&(Math.abs(t-R/A)<.1||Math.abs(F[0].pts-R-I)<20*D),r||(R=t*A),i&&e.isAAC)for(var M=0,N=R;M=D&&N){var j=Math.round(G/D);d.logger.warn("Injecting "+j+" audio frame @ "+(N/A).toFixed(3)+"s due to "+1e3*G/A+" ms gap.");for(var K=0;K0)Y=Math.round((b-R)/D),d.logger.log(V+" ms hole between AAC samples detected,filling it"),Y>0&&(_=o.default.getSilentFrame(e.manifestCodec||e.codec,e.channelCount),_||(_=l.subarray()),e.len+=Y*_.length);else if(V<-12){d.logger.log(-V+" ms overlapping between AAC samples detected, drop frame"),e.len-=l.byteLength;continue}b=T=R}if(v=Math.max(0,b),p=Math.max(0,T),!(e.len>0))return;var X=P?e.len:e.len+8;try{f=new Uint8Array(X)}catch(e){return void this.observer.trigger(u.default.ERROR,{type:h.ErrorTypes.MUX_ERROR,details:h.ErrorDetails.REMUX_ALLOC_ERROR,fatal:!1,bytes:X,reason:"fail allocating audio mdat "+X})}P||(a=new DataView(f.buffer),a.setUint32(0,X),f.set(c.default.types.mdat,4));for(var q=0;q=2&&(Q=x[J-2].duration,s.duration=Q),J){this.nextAudioPts=b+L*Q,e.len=0,e.samples=x,g=P?new Uint8Array:c.default.moof(e.sequenceNumber++,p/L,e),e.samples=[];var Z={data1:g,data2:f,startPTS:v/A,endPTS:this.nextAudioPts/A,startDTS:p/A,endDTS:(T+L*Q)/A,type:"audio",nb:J};return this.observer.trigger(u.default.FRAG_PARSING_DATA,Z),Z}return null}},{key:"remuxEmptyAudio",value:function(e,t,r,i){var a=e.inputTimeScale,n=e.samplerate?e.samplerate:a,s=a/n,l=this.nextAudioPts,u=(void 0!==l?l:i.startDTS*a)+this._initDTS,f=i.endDTS*a+this._initDTS,c=1024*s,h=Math.ceil((f-u)/c),g=o.default.getSilentFrame(e.manifestCodec||e.codec,e.channelCount);if(d.logger.warn("remux empty Audio"),!g)return void d.logger.trace("Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!");for(var v=[],p=0;p4294967296;)e+=r;return e}}]),e}();r.default=g},{30:30,32:32,33:33,41:41,50:50}],43:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;rNumber.MAX_SAFE_INTEGER?1/0:t}},{key:"hexadecimalInteger",value:function(e){if(this[e]){var t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;for(var r=new Uint8Array(t.length/2),i=0;iNumber.MAX_SAFE_INTEGER?1/0:t}},{key:"decimalFloatingPoint",value:function(e){return parseFloat(this[e])}},{key:"enumeratedString",value:function(e){return this[e]}},{key:"decimalResolution",value:function(e){var t=n.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}}}],[{key:"parseAttrList",value:function(e){var t,r={};for(s.lastIndex=0;null!==(t=s.exec(e));){var i=t[2];0===i.indexOf('"')&&i.lastIndexOf('"')===i.length-1&&(i=i.slice(1,-1)),r[t[1]]=i}return r}}]),e}();r.default=o},{}],45:[function(e,t,r){"use strict";var i={search:function(e,t){for(var r=0,i=e.length-1,a=null,n=null;r<=i;){a=(r+i)/2|0,n=e[a];var s=t(n);if(s>0)r=a+1;else{if(!(s<0))return n;i=a-1}}return null}};t.exports=i},{}],46:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;rl&&(g.log("ERROR","Too large cursor position "+this.pos),this.pos=l)}},{key:"moveCursor",value:function(e){var t=this.pos+e;if(e>1)for(var r=this.pos+1;r=144&&this.backSpace();var t=s(e);if(this.pos>=l)return void g.log("ERROR","Cannot insert "+e.toString(16)+" ("+t+") at position "+this.pos+". Skipping it!");this.chars[this.pos].setChar(t,this.currPenState),this.moveCursor(1)}},{key:"clearFromPos",value:function(e){var t;for(t=e;t0&&(r=e?"["+t.join(" | ")+"]":t.join("\n")),r}},{key:"getTextAndFormat",value:function(){return this.rows}}]),e}(),b=function(){function e(t,r){i(this,e),this.chNr=t,this.outputFilter=r,this.mode=null,this.verbose=0,this.displayedMemory=new E,this.nonDisplayedMemory=new E,this.lastOutputScreen=new E,this.currRollUpRow=this.displayedMemory.rows[o-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null}return a(e,[{key:"reset",value:function(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.currRollUpRow=this.displayedMemory.rows[o-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.lastCueEndTime=null}},{key:"getHandler",value:function(){return this.outputFilter}},{key:"setHandler",value:function(e){this.outputFilter=e}},{key:"setPAC",value:function(e){this.writeScreen.setPAC(e)}},{key:"setBkgData",value:function(e){this.writeScreen.setBkgData(e)}},{key:"setMode",value:function(e){e!==this.mode&&(this.mode=e,g.log("INFO","MODE="+e),"MODE_POP-ON"===this.mode?this.writeScreen=this.nonDisplayedMemory:(this.writeScreen=this.displayedMemory,this.writeScreen.reset()),"MODE_ROLL-UP"!==this.mode&&(this.displayedMemory.nrRollUpRows=null,this.nonDisplayedMemory.nrRollUpRows=null),this.mode=e)}},{key:"insertChars",value:function(e){for(var t=0;t=46,t.italics)t.foreground="white";else{var r=Math.floor(e/2)-16,i=["white","green","blue","cyan","red","yellow","magenta"];t.foreground=i[r]}g.log("INFO","MIDROW: "+JSON.stringify(t)),this.writeScreen.setPen(t)}},{key:"outputDataUpdate",value:function(){var e=g.time;null!==e&&this.outputFilter&&(this.outputFilter.updateData&&this.outputFilter.updateData(e,this.displayedMemory),null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.lastOutputScreen),this.cueStartTime=this.displayedMemory.isEmpty()?null:e):this.cueStartTime=e,this.lastOutputScreen.copy(this.displayedMemory))}},{key:"cueSplitAtTime",value:function(e){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.displayedMemory),this.cueStartTime=e))}}]),e}(),T=function(){function e(t,r,a){i(this,e),this.field=t||1,this.outputs=[r,a],this.channels=[new b(1,r),new b(2,a)],this.currChNr=-1,this.lastCmdA=null,this.lastCmdB=null,this.bufferedData=[],this.startTime=null,this.lastTime=null,this.dataCounters={padding:0,char:0,cmd:0,other:0}}return a(e,[{key:"getHandler",value:function(e){return this.channels[e].getHandler()}},{key:"setHandler",value:function(e,t){this.channels[e].setHandler(t)}},{key:"addData",value:function(e,t){var r,i,a,n=!1;this.lastTime=e,g.setTime(e);for(var s=0;s ("+v([i,a])+")"),r=this.parseCmd(i,a),r||(r=this.parseMidrow(i,a)),r||(r=this.parsePAC(i,a)),r||(r=this.parseBackgroundAttributes(i,a)),!r&&(n=this.parseChars(i,a)))if(this.currChNr&&this.currChNr>=0){var o=this.channels[this.currChNr-1];o.insertChars(n)}else g.log("WARNING","No channel found yet. TEXT-MODE?");r?this.dataCounters.cmd+=2:n?this.dataCounters.char+=2:(this.dataCounters.other+=2,g.log("WARNING","Couldn't parse cleaned data "+v([i,a])+" orig: "+v([t[s],t[s+1]])))}else this.dataCounters.padding+=2}},{key:"parseCmd",value:function(e,t){var r=null,i=(20===e||28===e)&&32<=t&&t<=47,a=(23===e||31===e)&&33<=t&&t<=35;if(!i&&!a)return!1;if(e===this.lastCmdA&&t===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,g.log("DEBUG","Repeated command ("+v([e,t])+") is dropped"),!0;r=20===e||23===e?1:2;var n=this.channels[r-1];return 20===e||28===e?32===t?n.ccRCL():33===t?n.ccBS():34===t?n.ccAOF():35===t?n.ccAON():36===t?n.ccDER():37===t?n.ccRU(2):38===t?n.ccRU(3):39===t?n.ccRU(4):40===t?n.ccFON():41===t?n.ccRDC():42===t?n.ccTR():43===t?n.ccRTD():44===t?n.ccEDM():45===t?n.ccCR():46===t?n.ccENM():47===t&&n.ccEOC():n.ccTO(t-32),this.lastCmdA=e,this.lastCmdB=t,this.currChNr=r,!0}},{key:"parseMidrow",value:function(e,t){var r=null;if((17===e||25===e)&&32<=t&&t<=47){if((r=17===e?1:2)!==this.currChNr)return g.log("ERROR","Mismatch channel in midrow parsing"),!1;return this.channels[r-1].ccMIDROW(t),g.log("DEBUG","MIDROW ("+v([e,t])+")"),!0}return!1}},{key:"parsePAC",value:function(e,t){var r=null,i=null,a=(17<=e&&e<=23||25<=e&&e<=31)&&64<=t&&t<=127,n=(16===e||24===e)&&64<=t&&t<=95;if(!a&&!n)return!1;if(e===this.lastCmdA&&t===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,!0;r=e<=23?1:2,i=64<=t&&t<=95?1===r?u[e]:f[e]:1===r?d[e]:c[e];var s=this.interpretPAC(i,t);return this.channels[r-1].setPAC(s),this.lastCmdA=e,this.lastCmdB=t,this.currChNr=r,!0}},{key:"interpretPAC",value:function(e,t){var r=t,i={color:null,italics:!1,indent:null,underline:!1,row:e};return r=t>95?t-96:t-64,i.underline=1==(1&r),r<=13?i.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(r/2)]:r<=15?(i.italics=!0,i.color="white"):i.indent=4*Math.floor((r-16)/2),i}},{key:"parseChars",value:function(e,t){var r=null,i=null,a=null;if(e>=25?(r=2,a=e-8):(r=1,a=e),17<=a&&a<=19){var n=t;n=17===a?t+80:18===a?t+112:t+144,g.log("INFO","Special char '"+s(n)+"' in channel "+r),i=[n]}else 32<=e&&e<=127&&(i=0===t?[e]:[e,t]);if(i){var o=v(i);g.log("DEBUG","Char codes = "+o.join(",")),this.lastCmdA=null,this.lastCmdB=null}return i}},{key:"parseBackgroundAttributes",value:function(e,t){var r,i,a,n,s=(16===e||24===e)&&32<=t&&t<=47,o=(23===e||31===e)&&45<=t&&t<=47;return!(!s&&!o)&&(r={},16===e||24===e?(i=Math.floor((t-32)/2),r.background=h[i],t%2==1&&(r.background=r.background+"_semi")):45===t?r.background="transparent":(r.foreground="black",47===t&&(r.underline=!0)),a=e<24?1:2,n=this.channels[a-1],n.setBkgData(r),this.lastCmdA=null,this.lastCmdB=null,!0)}},{key:"reset",value:function(){for(var e=0;e=16?l--:l++,navigator.userAgent.match(/Firefox\//)?s.line=f+1:s.line=f>7?f-2:f+1,s.align="left",s.position=Math.max(0,Math.min(100,l/32*100+(navigator.userAgent.match(/Firefox\//)?50:0))),e.addCue(s)}}};t.exports=a},{53:53}],48:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=this.minWeight_}},{key:"getEstimate",value:function(){return this.canEstimate()?Math.min(this.fast_.getEstimate(),this.slow_.getEstimate()):this.defaultEstimate_}},{key:"destroy",value:function(){}}]),e}();r.default=o},{49:49}],49:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r "+t}function n(e){var t=self.console[e];return t?function(){for(var r=arguments.length,i=Array(r),n=0;n1?t-1:0),i=1;i100)throw new Error("Position must be between 0 and 100.");b=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"positionAlign",r({},u,{get:function(){return T},set:function(e){var r=t(e);if(!r)throw new SyntaxError("An invalid or illegal string was specified.");T=r,this.hasBeenReset=!0}})),Object.defineProperty(o,"size",r({},u,{get:function(){return _},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");_=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"align",r({},u,{get:function(){return k},set:function(e){var r=t(e);if(!r)throw new SyntaxError("An invalid or illegal string was specified.");k=r,this.hasBeenReset=!0}})),o.displayState=void 0,l)return o}if("undefined"!=typeof window&&window.VTTCue)return window.VTTCue;var a="auto",n={"":!0,lr:!0,rl:!0},s={start:!0,middle:!0,end:!0,left:!0,right:!0};return i.prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)},i}()},{}],53:[function(e,t,r){"use strict";function i(){this.window=window,this.state="INITIAL",this.buffer="",this.decoder=new f,this.regionList=[]}function a(e){function t(e,t,r,i){return 3600*(0|e)+60*(0|t)+(0|r)+(0|i)/1e3}var r=e.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return r?r[3]?t(r[1],r[2],r[3].replace(":",""),r[4]):r[1]>59?t(r[1],r[2],0,r[4]):t(0,r[1],r[2],r[4]):null}function n(){this.values=Object.create(null)}function s(e,t,r,i){var a=i?e.split(i):[e];for(var n in a)if("string"==typeof a[n]){var s=a[n].split(r);if(2===s.length){var o=s[0],l=s[1];t(o,l)}}}function o(e,t,r){function i(){var t=a(e);if(null===t)throw new Error("Malformed timestamp: "+l);return e=e.replace(/^[^\sa-zA-Z-]+/,""),t}function o(){e=e.replace(/^\s+/,"")}var l=e;if(o(),t.startTime=i(),o(),"-->"!==e.substr(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '-->'): "+l);e=e.substr(3),o(),t.endTime=i(),o(),function(e,t){var i=new n;s(e,function(e,t){switch(e){case"region":for(var a=r.length-1;a>=0;a--)if(r[a].id===t){i.set(e,r[a].region);break}break;case"vertical":i.alt(e,t,["rl","lr"]);break;case"line":var n=t.split(","),s=n[0];i.integer(e,s),i.percent(e,s)&&i.set("snapToLines",!1),i.alt(e,s,["auto"]),2===n.length&&i.alt("lineAlign",n[1],["start",h,"end"]);break;case"position":n=t.split(","),i.percent(e,n[0]),2===n.length&&i.alt("positionAlign",n[1],["start",h,"end","line-left","line-right","auto"]);break;case"size":i.percent(e,t);break;case"align":i.alt(e,t,["start",h,"end","left","right"])}},/:/,/\s/),t.region=i.get("region",null),t.vertical=i.get("vertical","");var a=i.get("line","auto");"auto"===a&&c.line===-1&&(a=-1),t.line=a,t.lineAlign=i.get("lineAlign","start"),t.snapToLines=i.get("snapToLines",!0),t.size=i.get("size",100),t.align=i.get("align",h);var o=i.get("position","auto");"auto"===o&&50===c.position&&(o="start"===t.align||"left"===t.align?0:"end"===t.align||"right"===t.align?100:50),t.position=o}(e,t)}function l(e){return e.replace(//gi,"\n")}Object.defineProperty(r,"__esModule",{value:!0}),r.fixLineBreaks=void 0;var u=e(52),d=function(e){return e&&e.__esModule?e:{default:e}}(u),f=function(){return{decode:function(e){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))}}};n.prototype={set:function(e,t){this.get(e)||""===t||(this.values[e]=t)},get:function(e,t,r){return r?this.has(e)?this.values[e]:t[r]:this.has(e)?this.values[e]:t},has:function(e){return e in this.values},alt:function(e,t,r){for(var i=0;i=0&&t<=100)&&(this.set(e,t),!0)}};var c=new d.default(0,0,0),h="middle"===c.align?"middle":"center";i.prototype={parse:function(e){function t(){var e=r.buffer,t=0;for(e=l(e);t")===-1){r.cue.id=i;continue}case"CUE":try{o(i,r.cue,r.regionList)}catch(e){r.cue=null,r.state="BADCUE";continue}r.state="CUETEXT";continue;case"CUETEXT":var u=i.indexOf("-->")!==-1;if(!i||u&&(n=!0)){r.oncue&&r.oncue(r.cue),r.cue=null,r.state="ID";continue}r.cue.text&&(r.cue.text+="\n"),r.cue.text+=i;continue;case"BADCUE":i||(r.state="ID");continue}}}catch(e){"CUETEXT"===r.state&&r.cue&&r.oncue&&r.oncue(r.cue),r.cue=null,r.state="INITIAL"===r.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var e=this;try{if(e.buffer+=e.decoder.decode(),(e.cue||"HEADER"===e.state)&&(e.buffer+="\n\n",e.parse()),"INITIAL"===e.state)throw new Error("Malformed WebVTT signature.")}catch(e){throw e}return e.onflush&&e.onflush(),this}},r.fixLineBreaks=l,r.default=i},{52:52}],54:[function(e,t,r){"use strict";var i=e(53),a=function(e){return e&&e.__esModule?e:{default:e}}(i),n=function(e){var t=parseInt(e.substr(-3)),r=parseInt(e.substr(-6,2)),i=parseInt(e.substr(-9,2)),a=e.length>9?parseInt(e.substr(0,e.indexOf(":"))):0;return isNaN(t)||isNaN(r)||isNaN(i)||isNaN(a)?-1:(t+=1e3*r,t+=6e4*i,t+=36e5*a)},s=function(e,t,r){var i=e[t],a=e[i.prevCC];if(!a||!a.new&&i.new)return e.ccOffset=e.presentationOffset=i.start,void(i.new=!1);for(;a&&a.new;)e.ccOffset+=i.start-a.start,i.new=!1,i=a,a=e[i.prevCC];e.presentationOffset=r},o={parse:function(e,t,r,i,o,l){var u=String.fromCharCode.apply(null,new Uint8Array(e)).trim().replace(/\r\n|\n\r|\n|\r/g,"\n").split("\n"),d="00:00.000",f=0,c=0,h=0,g=[],v=void 0,p=!0,y=new a.default;y.oncue=function(e){var t=r[i],a=r.ccOffset;t&&t.new&&(c?a=r.ccOffset=t.start:s(r,i,h)),h&&!c&&(a=h+r.ccOffset-r.presentationOffset),e.startTime+=a-c,e.endTime+=a-c,e.text=decodeURIComponent(escape(e.text)),e.endTime>0&&g.push(e)},y.onparsingerror=function(e){v=e},y.onflush=function(){if(v&&l)return void l(v);o(g)},u.forEach(function(e){if(p){if(e.startsWith("X-TIMESTAMP-MAP=")){p=!1,e.substr(16).split(",").forEach(function(e){e.startsWith("LOCAL:")?d=e.substr(6):e.startsWith("MPEGTS:")&&(f=parseInt(e.substr(7)))});try{t=t<0?t+8589934592:t,f-=t,c=n(d)/1e3,h=f/9e4,c===-1&&(v=new Error("Malformed X-TIMESTAMP-MAP: "+e))}catch(t){v=new Error("Malformed X-TIMESTAMP-MAP: "+e)}return}""===e&&(p=!1)}y.parse(e+"\n")}),y.flush()}};t.exports=o},{53:53}],55:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=2)if(window.clearTimeout(this.requestTimeout),0===i.tfirst&&(i.tfirst=Math.max(performance.now(),i.trequest)),4===r){var o=t.status;if(o>=200&&o<300){i.tload=Math.max(i.tfirst,performance.now());var l=void 0,u=void 0;"arraybuffer"===a.responseType?(l=t.response,u=l.byteLength):(l=t.responseText,u=l.length),i.loaded=i.total=u;var d={url:t.responseURL,data:l};this.callbacks.onSuccess(d,i,a)}else i.retry>=s.maxRetry||o>=400&&o<499?(n.logger.error(o+" while loading "+a.url),this.callbacks.onError({code:o,text:t.statusText},a)):(n.logger.warn(o+" while loading "+a.url+", retrying in "+this.retryDelay+"..."),this.destroy(),this.retryTimeout=window.setTimeout(this.loadInternal.bind(this),this.retryDelay),this.retryDelay=Math.min(2*this.retryDelay,s.maxRetryDelay),i.retry++)}else this.requestTimeout=window.setTimeout(this.loadtimeout.bind(this),s.timeout)}},{key:"loadtimeout",value:function(){n.logger.warn("timeout while loading "+this.context.url),this.callbacks.onTimeout(this.stats,this.context)}},{key:"loadprogress",value:function(e){var t=this.stats;t.loaded=e.loaded,e.lengthComputable&&(t.total=e.total);var r=this.callbacks.onProgress;r&&r(t,this.context,null)}}]),e}();r.default=s},{50:50}]},{},[37])(37)}); diff --git a/demo/mask_detection/web/js/ckplayer/language.xml b/demo/mask_detection/web/js/ckplayer/language.xml new file mode 100644 index 00000000..6b873037 --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/language.xml @@ -0,0 +1,44 @@ + + + [$second] + [$second] + + 点击播放 + 暂停播放 + 静音 + 恢复音量 + 全屏 + 退出全屏 + 上一集 + 下一集 + 点击选择清晰度 + + + 音量:[$volume]% + + [$percentage]% + + [$timeh]:[$timei]:[$times] + + + [$timeh]:[$timei]:[$times] + + + 直播中 [$liveTimeY]-[$liveTimem]-[$liveTimed] [$liveTimeh]:[$liveTimei]:[$liveTimes] + + + 流畅 + 低清 + 标清 + 高清 + 超清 + 蓝光 + 未知 + + + 视频地址不存在 + 加载失败 + 视频格式错误 + + 自动 + \ No newline at end of file diff --git a/demo/mask_detection/web/js/ckplayer/style.xml b/demo/mask_detection/web/js/ckplayer/style.xml new file mode 100644 index 00000000..ddedc15f --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/style.xml @@ -0,0 +1,640 @@ + + + + + 0x000000 + + 0.5 + 3 + center + middle + 0 + 0 + 0 + 0 + + + + left + bottom + 100% + 38 + 0 + -38 + + + all + 1000 + alpha + 0.8 + all + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAIAAACUgoPjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE5QTRFQjlCN0NDMzExRTdCOEU1OEZDRkMwNUMxRjkyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE5QTRFQjlDN0NDMzExRTdCOEU1OEZDRkMwNUMxRjkyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTlBNEVCOTk3Q0MzMTFFN0I4RTU4RkNGQzA1QzFGOTIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTlBNEVCOUE3Q0MzMTFFN0I4RTU4RkNGQzA1QzFGOTIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ey3YCAAAAEUlEQVR42mL0z61iAAOAAAMACZkBOI+IklEAAAAASUVORK5CYII= + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAIAAACUgoPjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIyMUM5N0M3N0NDMzExRTdCODNCQzc4NEQ0NDdCQUZGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIyMUM5N0M4N0NDMzExRTdCODNCQzc4NEQ0NDdCQUZGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjIxQzk3QzU3Q0MzMTFFN0I4M0JDNzg0RDQ0N0JBRkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjIxQzk3QzY3Q0MzMTFFN0I4M0JDNzg0RDQ0N0JBRkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4rS13VAAAAEUlEQVR42mK8ePEiAxgABBgAE6wCdf2yccQAAAAASUVORK5CYII= + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERDI3MTY5QTJDNjExRTdCNTdGQjE2MTZDNkNCMzA1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERDI3MTZBQTJDNjExRTdCNTdGQjE2MTZDNkNCMzA1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkREMjcxNjdBMkM2MTFFN0I1N0ZCMTYxNkM2Q0IzMDUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkREMjcxNjhBMkM2MTFFN0I1N0ZCMTYxNkM2Q0IzMDUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5MLZi3AAAADklEQVR42mJgb/oKEGAAAhIBf+DIxYEAAAAASUVORK5CYII= + 100% + left + bottom + 0 + -2 + + + + + 0x000000 + + 0.6 + + + + + + + 0x333333 + 0x0787FF + 0.8 + 0 + 0x333333 + 6 + 70 + 27 + center + 5 + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 0xFFFFFF + false + 1 + + + 0x333333 + 0.8 + 0 + 0x333333 + 10 + 15 + 10 + 15 + 10 + 15 + 10 + 0x333333 + 0 + 0xFFFFFF + 0.8 + 0 + 0 + + + + 0x005CB2 + 0x0787FF + 0.8 + 0 + 0x333333 + 6 + 70 + 27 + center + 5 + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 0xFFFFFF + false + 1 + + + 5 + 5 + 5 + 5 + 0xFFFFFF + 0 + 1 + + + right + top + -119 + 6 + + + right + bottom + -130 + -35 + true + + click + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAFCAYAAAAZiY8XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5RUEzNjQ1MDMxRDExRTY5OERCOEQ3NUNBQzJDMDlCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY5RUEzNjQ2MDMxRDExRTY5OERCOEQ3NUNBQzJDMDlCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjlFQTM2NDMwMzFEMTFFNjk4REI4RDc1Q0FDMkMwOUIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjlFQTM2NDQwMzFEMTFFNjk4REI4RDc1Q0FDMkMwOUIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ONxAiAAAAT0lEQVR42mL8//+/HAMDwxwgtgdiNobhCX4B8UEgTmEEeng3kOHCMDLAAZCHPwMZPCPEw7+YgMQJhpEDjoE8nAzEe6DpfLiC31A/JgAEGAAcdRWT+8TTHQAAAABJRU5ErkJggg== + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAFCAYAAAAZiY8XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcyRTE1NTk1MDMxRDExRTY4QTQ1Qzg3RjhDMENCNDU5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcyRTE1NTk2MDMxRDExRTY4QTQ1Qzg3RjhDMENCNDU5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NzJFMTU1OTMwMzFEMTFFNjhBNDVDODdGOEMwQ0I0NTkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NzJFMTU1OTQwMzFEMTFFNjhBNDVDODdGOEMwQ0I0NTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5HSf2sAAAATElEQVR42mJkb/8vx8DAMAeI7YGYjWF4gl9AfBCIUxiBHt4NZLgwjAxwgAlIWDCMHGAF8vCJEeThYyAPJwPxHmg6H67gN9SPCQABBgDwKw4wg3IbiQAAAABJRU5ErkJggg== + right + top + -200 + 14 + + + + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc4ODQ4MDY0QTAzMjExRTc4MEExRkVEMDk5Qzg3QzNBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjc4ODQ4MDY1QTAzMjExRTc4MEExRkVEMDk5Qzg3QzNBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Nzg4NDgwNjJBMDMyMTFFNzgwQTFGRUQwOTlDODdDM0EiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Nzg4NDgwNjNBMDMyMTFFNzgwQTFGRUQwOTlDODdDM0EiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5pDHWjAAAAFUlEQVR42mKwt7c/w8QABNgIgAADACoYAZS6ywKEAAAAAElFTkSuQmCC + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDQTMyRjExQTAzMjExRTdCMTcxQzJFNzY0M0U0MzRGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDQTMyRjEyQTAzMjExRTdCMTcxQzJFNzY0M0U0MzRGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OENBMzJGMEZBMDMyMTFFN0IxNzFDMkU3NjQzRTQzNEYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OENBMzJGMTBBMDMyMTFFN0IxNzFDMkU3NjQzRTQzNEYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6fRHO8AAAAFUlEQVR42mLKz88/w8QABNgIgAADADoUAiYYttFgAAAAAElFTkSuQmCC + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAIAAACNcmNmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEwNUQyNkVGQTAzMjExRTdCQUQwRDkyQUU5RjZBRkQwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEwNUQyNkYwQTAzMjExRTdCQUQwRDkyQUU5RjZBRkQwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTA1RDI2RURBMDMyMTFFN0JBRDBEOTJBRTlGNkFGRDAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTA1RDI2RUVBMDMyMTFFN0JBRDBEOTJBRTlGNkFGRDAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5DgcOwAAAAFElEQVR42mJgb/rKxMDAgI4BAgwAIHYBiWQRRygAAAAASUVORK5CYII= + 100% + left + top + 0 + -9 + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAIAAACUgoPjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE5QTRFQjlCN0NDMzExRTdCOEU1OEZDRkMwNUMxRjkyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE5QTRFQjlDN0NDMzExRTdCOEU1OEZDRkMwNUMxRjkyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTlBNEVCOTk3Q0MzMTFFN0I4RTU4RkNGQzA1QzFGOTIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTlBNEVCOUE3Q0MzMTFFN0I4RTU4RkNGQzA1QzFGOTIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ey3YCAAAAEUlEQVR42mL0z61iAAOAAAMACZkBOI+IklEAAAAASUVORK5CYII= + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAIAAACUgoPjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIyMUM5N0M3N0NDMzExRTdCODNCQzc4NEQ0NDdCQUZGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIyMUM5N0M4N0NDMzExRTdCODNCQzc4NEQ0NDdCQUZGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjIxQzk3QzU3Q0MzMTFFN0I4M0JDNzg0RDQ0N0JBRkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjIxQzk3QzY3Q0MzMTFFN0I4M0JDNzg0RDQ0N0JBRkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4rS13VAAAAEUlEQVR42mK8ePEiAxgABBgAE6wCdf2yccQAAAAASUVORK5CYII= + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERDI3MTY5QTJDNjExRTdCNTdGQjE2MTZDNkNCMzA1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERDI3MTZBQTJDNjExRTdCNTdGQjE2MTZDNkNCMzA1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkREMjcxNjdBMkM2MTFFN0I1N0ZCMTYxNkM2Q0IzMDUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkREMjcxNjhBMkM2MTFFN0I1N0ZCMTYxNkM2Q0IzMDUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5MLZi3AAAADklEQVR42mJgb/oKEGAAAhIBf+DIxYEAAAAASUVORK5CYII= + 100% + left + top + 0 + -1 + + + + 0.3 + 0.3 + 0.3 + 0.3 + + + + + + [$timeh]:[$timei]:[$times] / [$durationh]:[$durationi]:[$durations] + left + top + 45 + 7 + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 0.5 + false + + + [$liveLanguage] + left + top + 45 + 7 + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 1 + false + + + + + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAmCAYAAAAFvPEHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QUY5QzVEQTAzMTExRTdCQjA1QzM3RDE5N0NCNEEyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA4QUY5QzVFQTAzMTExRTdCQjA1QzM3RDE5N0NCNEEyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDhBRjlDNUJBMDMxMTFFN0JCMDVDMzdEMTk3Q0I0QTIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDhBRjlDNUNBMDMxMTFFN0JCMDVDMzdEMTk3Q0I0QTIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5OVecRAAAAFUlEQVR42mJISEg4w8QABEORAAgwAIP7AjcGIX7gAAAAAElFTkSuQmCC + right + top + -130 + 0 + + + + + + + + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkFDRDQ4ODE2QTk2QjExRTdBQkMyQ0IzM0IyRjZFNUUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkFDRDQ4ODE3QTk2QjExRTdBQkMyQ0IzM0IyRjZFNUUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QUNENDg4MTRBOTZCMTFFN0FCQzJDQjMzQjJGNkU1RTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QUNENDg4MTVBOTZCMTFFN0FCQzJDQjMzQjJGNkU1RTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6JjFkJAAAGwElEQVR42uyd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 + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREI4MTY4QTk2QzExRTdBQTFEQ0Q2Nzk2NkRCRjk1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREI4MTY5QTk2QzExRTdBQTFEQ0Q2Nzk2NkRCRjk1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkFEQjgxNjZBOTZDMTFFN0FBMURDRDY3OTY2REJGOTUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkFEQjgxNjdBOTZDMTFFN0FBMURDRDY3OTY2REJGOTUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6vwz5dAAALgUlEQVR42uxd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 + center + middle + -40 + -40 + actionScript->videoPlay + + + + data:image/swf;base64,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 + center + middle + -30 + -30 + + center + middle + -30 + -12 + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 1 + false + 60 + center + + + + + + + + + + + + + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 1 + false + 120 + center + center + middle + -60 + 30 + + + + + + 0x000000 + 1 + + + + 30 + 0 + 30 + 0 + center + middle + + + + 0xFF0000 + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAYAAAAUhR0LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBCN0E2RjdCODNDODExRTdBODQ3QUZBODc1OTA0QjcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjBCN0E2RjdDODNDODExRTdBODQ3QUZBODc1OTA0QjcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEI3QTZGNzk4M0M4MTFFN0E4NDdBRkE4NzU5MDRCNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MEI3QTZGN0E4M0M4MTFFN0E4NDdBRkE4NzU5MDRCNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7cIKAYAAADQElEQVR42mKUEhf/xDAKaA6YRoNgNKBHA3oUjAb0aECPBvQoGA3o0YAeBaMBPRrQowE9CoZMQLOz6bJO3X2cuzuLm5OQ2rpVx7lXdUdy4eIPJOB2L+TYffIk98EdU7h1WNlYYeLRveu5KHUjCzUc+PPX5d/lm06y7IpfwOQ7N5Z9888fP7GpAznYQx4Yt/IFjMdOFnDDJdD5QHB0odO/0mlfv9M6cDnZ/dkXHKpikQXzHjG029n/weV+SgAjOaN3PLkTOHfFWBKZG74wLK/1+TtfvZ1xV4w0U7tdLIpHQCla5+Gk/2Gly78NZGoGBfiuh2VsXfLOv0DuA+XSvq2z2L6td/l3QXkJo/+/VQwbmcIYsm3+MKL7gaYpWl7wOZO7dtiPK79//SZKw64CBqvJQ6dMZXF0YVbje8Iwae7ff3xtDMwgsaXFgd+UgQmjZEEpy+bI5p90LzqIKfs2NEUwc+OMNcyig17FB7Lb5IGw8tBBlkqGRyxLlzz9x3bvEgMo5UYzMMDL586YtF/8q1tYc904OSbv+v5jUAX01539P1x39g/KlAtzG6j+6JL/w3DW1YupDijetOMm08ujhX+x1UfF/v6/Sc4h5Drwzr0n/8gt258+efIfn7r/99Yw0LPMBpXHVnoSjAwMigxBt04zSLfvYvjNfPXf4d0b/mGr0EHlNanuIyug/RXkGRnen2MgunxGK9vTbCJxlu3gyhEY1vRM1azpySzOX18y3WP4x9At3/Ur+lAMyxI7b5QK786jt/9AxUwCsDKcZLf+D83b0bDYf/nkzn+GYQBArY25MbpM1/Y/geQmhp0M4eahX5EDGVQJtt7SZtjQ5MO8qTbuLznNP5IDGlIbf2PAlq2GZI/NQYnx0dYp/6Jn7P6FS41nUS/HgjQlpknAVE5KBUh20QFKzV0lYcxs97YxkGshA58FQ/2K5aBeFyt2Bc/+0zOrgCrD0p2QlI0tgJOsFZhuH5j5LzR4F0V1BgvpqfkJQ49P9x9yLbxzYc2/xoii34OpjIZH8cNn/+7+Vfo7cW0zlxSQT40ApqhnOAoGaFBpFIwG9GhAjwb0KBgN6NGAHgWjAT0a0KMBPQpGA3oIA4AAAwAUEGI5e2B1agAAAABJRU5ErkJggg== + 1 + 0 + 35 + 90 + right + top + -100 + 5 + + + + 16 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFF0000 + 1 + false + 25 + center + right + top + -59 + 10 + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAjCAYAAAD8BaggAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDQTJFQTNGODNEMzExRTdBREE3RTJBMzExNUY5NTk0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDQTJFQTQwODNEMzExRTdBREE3RTJBMzExNUY5NTk0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OENBMkVBM0Q4M0QzMTFFN0FEQTdFMkEzMTE1Rjk1OTQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OENBMkVBM0U4M0QzMTFFN0FEQTdFMkEzMTE1Rjk1OTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz49j/97AAAF2ElEQVR42uxX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 + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAjCAYAAAD8BaggAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE4MUYxRTdGODNEMzExRTc4ODY3RkE2Njc3MTQwREZEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE4MUYxRTgwODNEMzExRTc4ODY3RkE2Njc3MTQwREZEIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxRjFFN0Q4M0QzMTFFNzg4NjdGQTY2NzcxNDBERkQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTgxRjFFN0U4M0QzMTFFNzg4NjdGQTY2NzcxNDBERkQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5LQREtAAAFRElEQVR42uxXaWhcVRid+/Y3WyZptjYhS2NNQQW1roi41BWKtNQNkWBKK9jiQitK+ssFFKVYg0ttFYJiiz8UQlsoRUWtiIiiggtt05LGtM3SNLPmzduv55uslGkmL+2P/MiDgcm7894993znnO8LW1ZTkwktoEsILbBrEdAioEu9pKAP6AJnd8Zt8e64LV0XccVa2WeKwEOOHwoNOiL/Oy9536YV97uM4mU9xoO+n83V9io23ViVV9qr88pSgKB7Q47AT9uin/cZVxln9arHsFZg/RzWPh/R7N3DYScIsDkBuhZMvN2QVa/SXXEAG316TreJhROm6NucTdONr82qJ9wB9jZU5eVGfD+J33T0x8yfsrJ3WQBRefYsz+gRlGrnQNjagxNn5nBiEeCerjaUjmVjKv295VQ8fyCpupckamLmY4Dh2L7tZFl+x0DELgWmQvLZoZXJ8NVgc9dQ2H6kJ2GcdwX+flNGB3PivAGViZx90JTRNDCzqTeepxKV0hiVaxSbExNdLWk9IXH2S0722nEYlzPe2ZjVayb0FxjQllpDacIG76JMR+CYUierwAG+vDIVvr/Mkj4EM0fhtlfqcoVy/WlI3utnIlYVwGyvGy9hIEDVePApiLLPEv33BsN2MevTOrFCTNKHxP4GNn2nMatR2V76L2rdC3AtmlfYA0Zw/gKwdeWmPHlvzoAeTFgSibgLL5npIrood/Zekda3LjVUG+zfHHXE/a3JMIH6alRz/jBk7wWwS3Hw65jsPb7ElOk5Et4nw7pDYl9bbkqBAMFZEnIuRLq5p8yWHq4wZfq0gZXu1lSYQJC46eXf4DdnsHnHRCmoXPQ8HYO0dFtsWsg/ZBXXwiFujzlSoKRuBaWDtuBTGfauSKsNSnGKaVMCvmMgbO9uzmi6EGG/5SSPYYH09zsYelEylBjYo3CksOyFDCifAjFEGhhCG6AEtv3SYXYsL/kOSgsQjEqchNPqFY8NAwCBjovTSTHiCn5M5MFdFqQJ+TMYm2KPTd8P8t6igJKewMlpyCDkS2lArbonyMhLuJLLjDLMZ/34TgbwgQB6m/rtEskXjFmiqKiGevKifxfEjBATtvdHrQpx/A0UapRP5KiZp91WO6Z8j6waQ4lvheDpHmllPYyQgnYmmytJYTn08y8yKhCgI1nFWw1AGDFEsv7MNYwV7q7mTCGFXWxD7qNcea4vZtD65hpDwfOFVF9Tbkk/Z6dDFe4SifUfZ2m0RQtyMKk6Jkhpx7ghXcAuTuevP54w9o1oDgUjtYZ1+JuE/BAArAJDSHcbohYoHr44r00daCNGF9JV96jmBAI0SHbHLEMn34SOfeE6nMLfOhuxKBj7kUE0F92IzXcipbf1xUxqpm825NSv06rbg/GDnnkMAXl9xBGRTc7xiXuBXNaJlnEWWfQyxocbIo5YyokGdLK5N2YeSqkumJVpdnrtdMSitZW6K7xan1PT+A3aiz2v5kqnfL4vbnKYuaslo98SdWYdHf5BKQ+DkQfQdugQG9Dh6R3XhF3hM3R+CsetYI9ayqxzVCwa7bjYIsrBj5njbnkUlBtcCNHM7PGL21bFEukGv/OfrDTlj2CACokLVMrupFZyQJsVEF0nTAlNUvFuAkNryy15TcIqNMsU0h8fXqyfrMJg19mU1Z6oNBVqF8+eipv75zAtBhryEf/sGVi6rTIvk+XpHs3LJOocgi+CdlAHZ62AEWgR9zgxReMLmeCy/9cxeZUj3Fajm9+XsCUIV6Cwo3SmTKJp8SgYpSnhcEpxgwCZN6DFf6UXAS10QP8LMAAhFMkddrJ6ggAAAABJRU5ErkJggg== + right + top + -138 + 5 + actionScript->adMute + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAjCAYAAAD8BaggAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkRBNUNDQUE4ODNEMzExRTdBNTJEOTExOTE3MkRDMjQ5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkRBNUNDQUE5ODNEMzExRTdBNTJEOTExOTE3MkRDMjQ5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6REE1Q0NBQTY4M0QzMTFFN0E1MkQ5MTE5MTcyREMyNDkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6REE1Q0NBQTc4M0QzMTFFN0E1MkQ5MTE5MTcyREMyNDkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4hmF1qAAAGW0lEQVR42uxX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 + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAjCAYAAAD8BaggAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDOUJGRDQzODNEMzExRTc5RTRDQjhDNjREMkMwNDdCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDOUJGRDQ0ODNEMzExRTc5RTRDQjhDNjREMkMwNDdCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Q0M5QkZENDE4M0QzMTFFNzlFNENCOEM2NEQyQzA0N0IiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Q0M5QkZENDI4M0QzMTFFNzlFNENCOEM2NEQyQzA0N0IiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5MlMisAAAF2UlEQVR42uxX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 + right + top + -138 + 5 + actionScript->escAdMute + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAYAAAAUhR0LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjRBMEFFNEU2ODNDODExRTc5ODQyQzk4N0I2NDlEOTFBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjRBMEFFNEU3ODNDODExRTc5ODQyQzk4N0I2NDlEOTFBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEEwQUU0RTQ4M0M4MTFFNzk4NDJDOTg3QjY0OUQ5MUEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NEEwQUU0RTU4M0M4MTFFNzk4NDJDOTg3QjY0OUQ5MUEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7O8tDHAAAEmElEQVR42uyafUxbVRjGT8/t991IjJkbE+mAacgUE5cpW3VlioVFZbhZqugQEhNMYJg5LFs1NNoZpysW4gZRsk2ZkmaFZKDbMlpZVzZAgvtjc8YvxuyyDCMRkialH7f3XO/pqBRoK5giLDlP0qTnns/8znue+56mgtUrV7oB0YILEgQENAFNREAT0AQ0EQFNQBMR0AQ0AU10x4CWiLNEjfZ+um9gYPLTTVflyaS4zmDtp62mYvmyqgaZ8+xh+iGRWBTuR+e/KT3ZWS+PfBZrbFMFLfu3dUSbI5rwvPaBNrpAIpVEKy/piE5WIHhJnQefVQ9CVvEgLN5/nsKAcd3D96+iRJmPCtemp8AwfAzO01Xvax9aAxqP7xXHHzttTutkPjsa/CtdAw0fvBATtExSKDlmfImiQSrQ9ziFODDsfHmdYjMMl8OfuWzaXCVcmP1zgz9GgvDxkl0geTgNgD+natQNDmkuewblNHm8uNyuNzDr294XVeXlSzN171KPJM1mqkgCYFXpOdhXCmhm+BTIKd7vwZFuPt0sntV+3IWAaregb2A3PW0T+H55pR2BulP7hIKeBk6ps0xERvilFg08oMoNfuP3+ReCSAJBZ4Adv/4CdvDfXK4fkaPpIDtCY3CuqZOTtBE8n9GOKgs+CoR7+QM/MNWFhUyoYOuKah2Wq3bptZankG5ycyIjvbchIzjzeTxVqjcxi+HRCQN9/aezbGfTZaQ/lCMqf0IbuMoEGAwO28TLYWNwfwcqC/bcrpu0kK0KvAc3wAFVSfBbkA8arVsos2YvE26TSE3NN1tjLoCwdehnMGHGB6eteVFB347KMgYfQX28hnxEYz/mj35o0UbtJo+J90ybqya0FV5/p797qEyOPVarsyQcNJ7PuEhZR0JAY8AdRiX1laGPxTCbL14Q97Z8KJRvr4HYQ0e/P8a30oQi+vSt9ZzTUktjn402FvZsJe+9poqvZfOxhPlkSNjb73Hf4uK1uzcFCfApS5RnJ8w67lOshhsycyCG2aa+CTfad4HfTPVcf0k5eCyi3Zl9LzLSVicP0hwVJD4dNXVW6vOiCv6Mm2KnS4J0uCLJDRxDiJt/hpQGrzU8HdPbJ1+OoiUX0bP1DihT+YNePhpO6F6nR8/xjx6YfoTj9cZpn7ZrehZzYwZQqvxJSLkuo9+dHAfuACX0ZuhP5dix8WRUZLch42sUfKbaLA1cOY8MTV4f8/NgMNqFAW5JF6yIMtYrH5+U41zWceGI+O5hG3I4WDayfs/mbMgMXwELlY4tOY/GnnfwLS015oIoFVmBMtviCd/SbNosylL7HIvf2Msm51LLZNIvtmnAurtGwVpzt1i/wYcsnw4G9T1fCoGq5B9wrdXbJ1rj3AC3KiaApbaO/a/rXpN7XNCWC+Sx6pcvNdDYU2fmpqGr9c4siCEfsnl9+Bnb7EAXd76Nox0U8eXezhPccsUbgt6Wbeg93ivr+vkXapT0atbtj794dFPZ4GbPJ1x47PlqxHUdTXS/ysXz6I4UpSCRoAXkfx3k1zsCmoiAJqAJaCICmoAmIqAJaAKa6P/Q3wIMAHa1AtuR4kGHAAAAAElFTkSuQmCC + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAYAAAAUhR0LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY0MzIwNzgwODNDODExRTdBQ0ZBRDJGOUVBRjgzMzYzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY0MzIwNzgxODNDODExRTdBQ0ZBRDJGOUVBRjgzMzYzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjQzMjA3N0U4M0M4MTFFN0FDRkFEMkY5RUFGODMzNjMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjQzMjA3N0Y4M0M4MTFFN0FDRkFEMkY5RUFGODMzNjMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7VRqLVAAAEpUlEQVR42uyaa0ybVRjHn/f0QmmlpC7EZFBKwC1syTLEuaDMZdyULM4ljLEMuQV0UwcLSLIvShmt24IJjmRgglzkGjLHtkQYKjdpgNmQfVi8FIcWVLqQ2RhCHdj1cl7fA62U0iIsRVhy/kmTnst7zunvPOf/PofAQGScCag2XIgioKApaCoKmoKmoKkoaAqaioKmoCloqicGtIwNEXRcb5Hoe9ocnxpJSeyMiLRV17ZIvimJEStyivzHrhZJ9rPzAudzIQfSRMMtBWLXOm9jN2T96f9f6/A0hyeReb/ruSh5A5v8PJW3dESHhJjR3YRD6PWEEQTyHSintJtHAJO258MDeU89u5sfGRaEnPAJOMPw5+YOfRg0fZonXH3s4DWt0/TZNdts2BFUroz3CvoZ/KJfq/IoTwIKUPV18klgaLjyHnkMcpadn7Vs2lrF35j9M4Hx/jw6lJ4HoRPBAH8stRy/0CaKx914V/O2v0m5qfSyNbq1WFAS+4No73vneM8FrGQaLgUIyvgK6TNAYpnsgl2n2+dIpNfeuCRc0X92GsPLBYy+p0DiWk2ee+nUkKX65rt8dugKG6HWzrtGuK42CSkTT9jakPTRsvEYMWwx0BGQMn4PUrhvE1M/41t1VXaDlICbXjo50hh4bUcnzk6rtzh/wAxjsGZlFlkXCiOZHq3jy9Fmka41Gec6Nsc10jXVe23u9V7FAKQey7Ruhkf7DPT4+KC9veYnrK6IEpxMKrSMMmIrAUdsItM5i0kL2WkXFtscFpKsIHvwGygT82198CrUte3jqTPKrc4+vtTSfCtlnAJMrEPlxsQyc2fZmjcV9GJUqqzkCKpX68hFNPFj7ugvLPrMW5lzxDNv38td8OgH6NtH/fpUMfHYOLXW56DJfI/1oA/swyegCeBuZRSvXnXXTmC2994Ualo/5kuPFiLiocbRBq5X6kJEd03vY8dqQEJ81tNYxLMPcN7bkHXLf82WsM4MiXj7038Z2VUzmO1mhpyyFZ692dYRJg9CB8OjEIF5I8GAXug/BWMVV9iRjDch1qXftdJ3rOK66xzIKo8gyekovNzJazl2GkFzh9f5hKwcBUlNMKlH7PozpGCkqz7s1dsdL0eBLzd4g7KO9+FEYoDtARcNg8V5EmMvV7XT/Qhv8/o0SfvihpdnMe5ARbkxCKZ0eGKIxz4J1y6fLvFhuJ/dOKvAKf2D+FKOFaW/XSya+/E2PtskMz/8RWfzdGEQHJQzQR7GKjxfISa57J3ecmHgrxr89bCf3bX9XGw0skx+D7462ls+6yCeV1l0hGecQjjUXg8Rr2jnFm9pH/oPpOzkNZZ9YB9lZFaFY67jeEbUmJwEewKNEHXxqlC1H+PGep1N1VfFh8T8f8FVni+er/TyQiI3wGTFPDSWfcLBlz2e1cU3MQPx4PUtF7DVQBNPdc9NScR2pkeixrI0u3pEZiZ15gYt1qTnk2hfyLUHu75gxaFnGE3rYXyW88qPtNwL1UN65S5y8RhA0fD7UDXrHHu9MhjuY9NANruaR3dvj2J8CZqh/9dB/3pHQVNR0BQ0BU1FQVPQVBQ0BU1BU/0f+keAAQCcB/OKy1CfxwAAAABJRU5ErkJggg== + right + top + -230 + 5 + javaScript->adjump + + + + 0xFF0000 + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAjCAYAAAB2BvMkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY0MUIzQkU3ODNDODExRTdCNEQwRjdCMUM4NjE2MERFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY0MUIzQkU4ODNDODExRTdCNEQwRjdCMUM4NjE2MERFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjQxQjNCRTU4M0M4MTFFN0I0RDBGN0IxQzg2MTYwREUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjQxQjNCRTY4M0M4MTFFN0I0RDBGN0IxQzg2MTYwREUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6nC8/UAAAGy0lEQVR42uxb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 + 1 + 0 + 35 + 150 + right + top + -290 + 5 + + + + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 1 + false + 25 + right + right + top + -278 + 10 + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAYAAAAUhR0LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTJBMDMyQzI4M0Q1MTFFN0FDNEZDMjY4QjhBQ0U3QUIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTJBMDMyQzE4M0Q1MTFFN0FDNEZDMjY4QjhBQ0U3QUIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkFDRkEwOTM4M0QxMTFFN0I5NUREQzc5ODU5RkJCNjkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkFDRkEwOTQ4M0QxMTFFN0I5NUREQzc5ODU5RkJCNjkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4eBamxAAAEPklEQVR42uxYW0gUURj+193cVEQUAy3zIc1CukEPZlJRUBk9dAGD8EkiulIUCFmIUZQEXSgwKR8s6E4FFT3UgxkmIRF0v98vUGmara661/5zbKad2ZkzM+6Z7cHzwcfqmdk5O998/3f+M44fZc4wCMSCx8gSpId1UoLQKWZMRq42OkkIzQdbkNlCaPuRg9wshI4P1iILhdD2Iw1ZKYSOD8qRs7kJnV7bBhkHHwlZozECuQ3pUB9w/c9flbJyN7iLyxRjIc9P+LWjhNscGYefQainS/OaaduvgzNzLHivHoD+5pO8plyEXI68FDno0NuwpG5ohBETioc0U/DrS+jet4TeJDjYRTPQeh56z9dEjY+cWwFJpesh8OEBeOpXK6rJ4U6KEkca79w6RVdord/jzMqH4Lc3vB/2PeQcZJ+h0HoOTF5WpRjzXtqjKZTRNfpvNSoE1BR6wVpwpKTJDy5SPAgGZLHl/68dAgiHFA9AEjr8u0NxDYJRFwL003N0FU9HS1iPrLcsdOrGE5CQPhoCr+5C4rRS6p6Be1fAlV8EoR/vwXNsjWaWE6GsQO0mqbz9b+8zK4w4k1YTujPywRChndkF9G/fgxt4Xp6ho/WqzCLeIYuQHaYyWio3/9Pb0L17AR0jQhP0nq2WH0LGkRcAAZ+idLuqiqIyMXHaQktV0L13sX4/9fd6BO0rXFHR58qdpMq0AHRumqh8iCi093KtHY4eh9yI3Ml0tCRw8Pt7SJw6H3yPm5hXTZw8758zUPDwQJ9lN8vA74PTJeepOjrMCC3FAoH/dRv4nzTR6ouqhFG5mvNzWiCJm2cg3+o6unNzoXwztJxaTutOTPKUCM1aRKQcVS9WLJDrpq5roEKzoog8YFpREaUfwKhx5U2Xx6TqizMykVuRG0y3d+5Z5ZRD7btpdXR9g7Tqm/o5m57FdJJWFOmVvntmGfju4/HR46M6qWD7J+ZvsGIGE6hAnjAttBlHsyLIKAupaDmF3O5Oqkg6v2rx01vsqCH4IwlZY9uGhYifvLSSxkWw4zO9wViqYtC9eZrHkpdXUZrNWFdBsWZlhbzd4HQn2SFHsW3RIYlMytBMzkvnWOk+hto1kBY1jo4mOGVK6OCXZ4bR4czM0SxdnjkfDgW4bM/j7GiyO7xgKDSrj5VAdnmEseS8lqOdWeMGP8dMGHTi8xYudx5nR5OJWl0sB8XSB2ut3FYdnZCRQ1s3Pwqst10n1cYLjuRUGncc8Z24mbkzVLdSscIofoij1aJ56ipirjatnlurK5KP4waNE8hGcD/yo+WXSgKW3+CRnreH6ejILexwhXpbb7XTkERmCh3jJMMdJJfrFOuN0MQWnCNxL4S2Fw3IqF5VCM0XvcjjSJ8Q2l6cQT7U3BMIbbiBvDTfhfQLoe3FNeQX3V2u0IcL7iBrma8ThEbc2rlOIbS9aEZeNDrpjwADAAupBWlakPJjAAAAAElFTkSuQmCC + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAYAAAAUhR0LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUQ5RTU4QjA4M0Q1MTFFNzkwMzlDMkFBN0E4NjI2NjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUQ5RTU4QUY4M0Q1MTFFNzkwMzlDMkFBN0E4NjI2NjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RDU0NTExOEM4M0QxMTFFNzgxODhCOTA0RkI1RDY2QzIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDU0NTExOEQ4M0QxMTFFNzgxODhCOTA0RkI1RDY2QzIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7zYQ9GAAAEPUlEQVR42uxYXUgUURQ+s6NZYZZlkD9FGRGaUSSUP2A/RBRhUPQQ9pKEphVEUSQ+pAhlDxG9hGVUFiEi9ZIp0UtGGUoEWWIUaWlJCWplpvgzM507u7M6uzN3Z9w724P3g4M4e+feme9+57vnjDB+fpYCHMHgHUZmWPHoH9ogF+cpaKzFyAs0iBPNBicnLkTEcqKdRwLGCU50aFCAqk7mRDuP+RhnONGhwUFUdRYzosXclyDmv+G0+iMcowjJFnx/CPufT+XaUgZC0n79xeE+kO5kMVtDLGgDGBkwnFM8UAcQtRSU5ssgv73LasldGPswHky9KJg1LGL2TTxL06e3VP8HkGr3ul9SoCeN0l4L8rNS/01YdwiE1AJQeltBrj+iyyYIn+tHjnZdqlxvSrTR8wjRK0H52cF6s19hbMYmZiQg0WYKdGWc1V2Tm8oNiQo0h9xapSPQkOgN+QCzF3g3TkeePOEl2/t/yxXcOVm/AR6iYaRfN4eazsWj7nd4lMdS0RqO4vwVtokW99wCiIwDpacZhMQdblV9fAhC3EZQfn0GuaHQ0MtVouzAR01aesP319QMI8pUM4Soc8rGEKKFhavcv3U+AfCMoynaLMtsohNjE5LdZ8mjtXRTup6BXL3TfY0QTZTQeM67CWJhO4A0pktd6XaGnyeSTbKTBVJNtvmzeeYjwAPI3/oWr9HfgKqXKpL1m0iIbrrohKITMY5jlNI9WvMzVKuwYjsoX55SZxWWb51UBhIO48P21exlF+93hU36qY91WCFaswVVoT0tKJRGNfv8q99lhuszOiCJmtPwWTpMFS1dS5ncdfKwbdWmC6t+ikTTDhHNR30PK6qf47yu3ddBQaJpVkQ2WM2oKamvoNUIsamTYvZkX4gRg3EK45jl8k5IyQERY7p1t6rOoR8g5jw2Hxi5hKokIysyS30Ry0blUwOAx591ldTvbuoz2BGDBeRitlVZJtqSoikWRA4dmeKFqg3EJAGrj+PejCTr+xx+sslhpwqCPeZglDjWsKjkp59W7QIGv6rKCyorPOo1zLbMIhAxrHqsEJ9mnFmjg2o15QDSHbMOjWSShlZ8Xhtjp/qYbtVAStQQKprgniWilb73Aa0DohIMU5epz5ONY9Ceh1jRpDusDUg0rY71nujY5QGJIHzeUNHRie6/i1a77+9+zuTNQ6zoEizvmsKoCgqiDjY6uW3bz7x4tXQjBJu16yTbmCEiyn2msEMvUTO1M/QtpYJWUQD7IYr2JU2qOxx0thnV3IaNmQZs0Fi9MsYlVHOX7Y9KHLa/4G1Dooeoip7aws5U+Lb1tisND8lUooNcZKaD+PJVXWXGOXEENahmiRPtLG5g1Pv1GpwXpviLUYlqHuNEO4tqjFbD7plzwwzko3kZqnmcE+0s6pDkb2Y/cqLZ4AVGOW0AJ5pdOTfAiXYWjRj3Aw36J8AA+lUMlmbVgFMAAAAASUVORK5CYII= + right + bottom + -100 + -40 + actionScript->openAdLink + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkI5QTZDNTc2NEQ3MDExRTJCOEM3ODA5RkNGRkIzNzYyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkI5QTZDNTc3NEQ3MDExRTJCOEM3ODA5RkNGRkIzNzYyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjlBNkM1NzQ0RDcwMTFFMkI4Qzc4MDlGQ0ZGQjM3NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjlBNkM1NzU0RDcwMTFFMkI4Qzc4MDlGQ0ZGQjM3NjIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz530M3/AAAEX0lEQVR42lRUXWyTVRh++n1fu/6u/+vWjbIVcT8MUOZkkDKNY4JMQwh6IRdEbzQmXmm8IUYvyIxonEE0LGbBhGBM8EajMwYMGqeyCyOD1jE7Nh2ydevvyvqztl9b3/dYFznJm3NyzvM+7+95NadHRsCrWq2KXSNJUBTFaTAaH3W73U+6XK7tZrPZy2+ZTCYSj8dvxGKxr9fz+R/UUilRLpeh0WiE8FJQW0xYqVR09SbTwfva21/r6uoKEOEGsLaaCLcrHos9d3N6+qdwOPxuOp3+Vpak4j2ENTKDu6Hh1cC+fSfa/H4D39Md2IMN70lJoggIxxLY5PP1TExMvBWLRt+jtzy/KzVFxeV2vzQwOHjS6/WiWCxClmUhJTr/fyl6vTDCwobr9PqT3126lEvE4x8QXpUYZDQa9z7U2/s6k+VyOWi1CqLRGP4Iz0JSFJTZUxI+8x2/MYaxrMO6zMFckkaWTc0tLcf9fr89k80Kr1ZX0zhzdgwn3hjGjWCIDBqE8Jnv+C1NGMayDusyB3PJR48c6ejs7HyHQjZUqxUkEkmc/mgMV38NIldQcevWPDratyCRTOL9D8cQWUnhTiSKhdu30d25FQZKgcSpKZX8lMsvFMp0j9PptOfyeXJXIwqgaHWw1NtgdzqRJKIzo+e5dEimc/C1+ZFKpUC5E9iSWkKhVAJx2AjUI12bmvJbbTasr69zn5HFOrz4/DEM9PehSnlzUUXjq1khDlcDtwQOPLYXLxCmjrCZTFboWq1WMJdCidULS1RN3tfImslgwLGnD1EoEn4LzcLusDMPCusF7OndgWcOPw5qakEmmppby2jkIuklin2tQGTcBmyJe0+l88LC36BfITwqV8Umwl5cWsLc3DzhKwLLOqzLHMylEGCGeghmi0U8MtmPv0ziy2+uEKiKeocDWkUWPVgoaBCanhOFOnxoALse2C5IdTodmIO5pGAweO361NSsyWwmRQWrlPDLVyYQja9CbzJDph918JGHhVAGYDBbEE2mcfn7CaSSKaHDulPEwVwy/YoMReMa3L+/nwdDlTxs3eyjiq4hm83hCSrAg91b4aYi6rRazITn0erz4uhTB+Cw1Qsy9nJkZOQskX4lUyHKkaWlCP3N/kAg4OGwzSYD3C4HfM0e7OzagjVKfp7uW5rcVE0Ldmy7H5tbGkXreDwefHrhQvCTc+fepKKsyPzZqQfjv4dCd5i0d/fu+kqlDH2dFh4izdL3UtVyrVgqNnkbYbOaYaGcO2kafX7x4uLw8PArK9Hoz9zH8n9jJ333bnhycvJmuVjs2dbd7fI0NdFs1BBRVUwYLYWr1xtgtdtEb2bWMvh4dHTm7VOnXl6KRMZF+/w7T8V8EB7w2WG3dxDh8aGhoWf7+vpaGxsbQQMWtQGL5eVlkOG/xsfHP6OozidTqRmhW3PsHkKa1EKZ2kBbVtU2h9O5p7m5eSfdOWuEicXFxevJROKqrCh/UkFLbERV1Q3CfwQYAGpDTIdVyPxeAAAAAElFTkSuQmCC + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAQXSURBVHjadFTfa1t1FD/3e+9Nc5OY3Pxq2mRJY2yZtMqoXV0dRWqZc6Vl/sIHX4Z/wJ6EvQk+SKEyEPogynQOimNupfowC4oP+uCwUKHpam1NN+zmkjTNj+Y2P5t7k3jOt0lRxg4c8r3nez6fc3LO+R7hk9lZIGk2m/yXCQJIkuS2KMqY1+ud8ng8z9tsNj/dFYvFZCaTuZtOp7+vVKu/6IaRrdfrICCGlESClhBho9EwWe32c8d7ey/19/ePIuGRY0u60e+FdCbz3p8bG7/GYrHLmqb9wESx1vYTX5uYaJMpnV7vpVfGxmYHBwefsVqt3E4ZkOI9/yYgZgzhnp6Q0+l8I5vJNDDzZYExg+44ITpLXo/n4tkzZ2ZCoZBcq9UOo4ki1HSdE/GgqLIs8wCGYQCWQ8YkxndSqVypXF5mjDUYAS0Wy+nhkyc/8Pv9UC6XsYYypNO7sBX7CyTGoEEZotKZbHRHPuRLGMISB++BKAjWY4HAhUgk4iwVizyr7ZQGr37TDe/cDsGnPyVAUSxc6Uw2uvsnvc99CUNY4iAuZrZYIsFg8C0qKVYIlu/l4fWbKsjVFDB9H76M9cD8nUdc6Uw2upu64YDl+xo0qcOIDQWDbyvIJeHHkNvtdlYwfSwsGI3Ddupm31FrP/r92NH5v3aqq17TQW8eAHKoaBpi0ZWViOpwQLVapTmDTrsMn51NgUUow5PELhTg6sQuqBYZSqUixzqQg7gYFtZMkaib1DmloUGvR4AvzlfBJhQfI3OLebj6pgFBRxNsoHFMexKIi+m6XqgdHPBRoEg0b9t7AD+u70OxaXuMMFtX4faqBg80gfsShrDEQVwsEY9vZrJZMJlM3KGOES//bMDcvfAT//Lc/TD3aQ88YYmDuNja2tpKdHV1y4YvQ8Kh3cvnIVb1g6TnjwhOOR5ybYtUO/TJ7eU4hrDRaHSLuFg+n3/43cLCLXzsYO7oAAUvx70PwJBVDu4zJ2GqX+JKZxLDpHIfi9XGMZVKBb5dWLhJXCIWs55IJpP4hF4eHR31UU0EhjvjIA9Sowrnj+vQi0TUWfUpBXbzFRhwZOF0mEHYxcDn88HX16+vfXXt2ofYlJSI7w9wBjN/rK8/ItJTw8N2b0cVTrgKMN5TBrWZw1oZvFadphKc6zPgxW4d+nwd4PW44db8fHx6evr93VTqDs2x2F47+5oWW1pa2qjV60PPDQx4/F1duBvxHTcbQEFpKSiKGZwOFTAwFIoF+PzKlc2PZ2YuJhOJRc5Dr4acSSgDOjtdrmeR8MLk5OS7IyMj4S4kpnXVWrCws7MDGHh7cXHxBv6rub1cbpOwQovnf4S4qTkYx0A26vWn3S7XS4FA4ATa3C3CbDweX83mcr9Jovg3rjmdgtBwtwn/FWAADXMqetJXpdYAAAAASUVORK5CYII= + right + top + -10 + -10 + actionScript->closePauseAd + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA0M0ZFMTZDOEI5NjExRTc5QzI5RDZBNTdDQzBCOUE0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA0M0ZFMTZEOEI5NjExRTc5QzI5RDZBNTdDQzBCOUE0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDQzRkUxNkE4Qjk2MTFFNzlDMjlENkE1N0NDMEI5QTQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDQzRkUxNkI4Qjk2MTFFNzlDMjlENkE1N0NDMEI5QTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz63VRFqAAAAjElEQVR42mI8yEBbwMQwPC2wunkTvwimAlyAEVccAI04pq6OycZUgGkZsmJGqkcymmtYiAkfTKehmYLVizgtIFInkYCFwtBAY2O6hoXU9INsBP5UgN0CNHXEBBH+JMtEMD3g10/QBUwEdeKxgxj/MRGjE5cduDIa4UjGdBfcDqxSeCKDcbS4JgQAAgwABj9c9c65XkcAAAAASUVORK5CYII= + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE1RkZBNjNGOEI5NjExRTdBNUVBQTkyQ0NFRjA4QURGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE1RkZBNjQwOEI5NjExRTdBNUVBQTkyQ0NFRjA4QURGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTVGRkE2M0Q4Qjk2MTFFN0E1RUFBOTJDQ0VGMDhBREYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTVGRkE2M0U4Qjk2MTFFN0E1RUFBOTJDQ0VGMDhBREYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz766zIBAAAAjElEQVR42uxUSQ6AIAykDY/hk3rhkzxHT4Z0uhklXpxTA21nugDtRGUluCzGRwTbGP4JOlggawZnit4a2uiAZLMzvT5koaZm+oPSRBa1RJMgGZlEfdgNYaOaend/5hT+FugEwi/TIn9lOdwHPz5UwGGkw5GpjzORFof10OIho66LQ71yhkH/dx3hEGAA31RctLVYOx4AAAAASUVORK5CYII= + right + top + -32 + 0 + + + + + + + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + false + 0.8 + 0x333333 + 0.8 + 0 + 0x333333 + 3 + 15 + 2 + 15 + 4 + 5 + 15 + 10 + 0x333333 + 0 + 0xFFFFFF + 0.8 + 0 + 0 + + + + 0xFFFFFF + 1 + 5 + 5 + 5 + + + + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + false + 1 + 0x000000 + 0.8 + 0 + 0x333333 + 0 + 15 + 2 + 15 + 4 + 0 + 150 + 0 + + + + 6 + 0x004eff + 1 + 39 + + + + 16 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + true + 1 + 30 + 50 + + \ No newline at end of file diff --git a/demo/mask_detection/web/js/jquery.js b/demo/mask_detection/web/js/jquery.js new file mode 100644 index 00000000..4603d460 --- /dev/null +++ b/demo/mask_detection/web/js/jquery.js @@ -0,0 +1,12 @@ + /*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license +*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
    a",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="
    t
    ",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
    ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; +return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="
    ",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:b.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) +}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("
  2. iB9ifa5D#2 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 literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/cam1.png b/demo/mask_detection/web/image/cam1.png new file mode 100644 index 0000000000000000000000000000000000000000..c17ced6cde51b1a0820f55130e1b30d857d54ebb GIT binary patch literal 1406 zcmeAS@N?(olHy`uVBq!ia0vp^qChOp!3HFs+-I2!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1Ffc1+hD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb5uTZsl3!k| z30CjxYvq|&T#}fVoa*Ufs{}MbFEca6%E;K+(a^xz$l1cw($LV=!pYRt%+kQf)XCY^ z#Msc>5~kNBKe;qFHLnDwHwB^B7^hxPQpha;+U$~Alv$RV;#QQOs{r=0RVHq?7~nJy zsy79oHv5LoO`FmWA8MOBWl@ff zi(Qgppt8}-)@43|^TN+xoNN5t;BfH%cYEJg-+O+q_^J&Hsp5~SEI*nr2-``>tesD>$B)hroU}9I>BC`UPwmAoNj{g)`K4o3e0jUX^ z>#gT+Vbl2^An{DNRk!kEmcii z$2)A|z8kOiuKAN>mErNOLGqpn%e(`c{ffuZE&Q%8P?6^CwA}YYVFuI9p7hUFC;rS? zxb5QE?@PQ*zs`7ixF_@R9IfKbs&lGX3+IVP`Gne>`^c%Qwk%LrBlydwKL?UlJ&HTN zI4YwWJW9Gosw^RN^j+~?53l?RC%a^(gw|?#XId5rt z@YF5g))m3o|9QVeE}PZ0B(K4a^LHjoN%LqAt7qV|>ZsUrX+v6kEZxb^-I1kNQzOpSFsAJ+S|k;CB0$bIMI01UE1; Y*euKw_#dX-1}YIfUHx3vIVCg!0O)WCe*gdg literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/cp.png b/demo/mask_detection/web/image/cp.png new file mode 100644 index 0000000000000000000000000000000000000000..23e6df3b23c795e5fc888c876153abfc35cf994c GIT binary patch literal 3722 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 brU;iiO->mo$aB_M`8y;LT?m!<1M&X>5M^m3 literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/df.jpg b/demo/mask_detection/web/image/df.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81ee01c892c6fa3ea879ed75e0711ff71e49380e GIT binary patch literal 25824 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 Icc=gV1G@?&Jn!?q-}_z9 zq)&Hu^mGse(Jc>2Sv>E?WB=ZE{AX7-Ht}=>B?>49$52JF0TI*SC?I7+DS|9ew5iG0 zAVLtkNIhRbh19U1Lc_0k7{6;+m`xCoLDy2$ae&BCP}I#R_4Ub9iqy3zH8PN5QkDox z`p~oua?|O&Iz6t2HEQrA8F2+HU;w0$t}$Ucf*Yl3x&mH%$23LOAZR>FZJR2jGNcG? zKo0mBpUUtI$+Lbo&>sv2PmmnLGBm@{Eazi`LVyz(hOB=Sj%I6PLRL!FW8qztDj{SE zG+n7w{FQ(o+C`cThr^x*$N4bA=S-PMaeb!K+fa~zquRQKbZC;EqB080C`w_c+bI}U zQ`U6qWx@rcUB#kVKjWp;0H#v^hZ;r`?Vv2!@%v9GIhVSP?p#;aX!3I}?YS{oLYH+n3Zn7oUYXrl>ktJa37lD?vp+VLX7WCF$ z#Flz>uGZR%)RIeMGqiWDe_eCq2=|V+Y&I?4G}|7SxYupm)CayCeuN)HRhD9TcOBhY z?!J1eOEg}#5AW$*%e>u)%&k4^Vh#oFeQf)%b$99D(d7q``OU{aW{zp>`{kv5yK05@Ua$TfmJ2H{-dvgdG&h^A_HCU_$6^b)Z|7ni@x^No-(9*P{*s^HPuyO;*~1+# ho7L~H`hG8*Z|fq81iv~nd*`$FGUY^CT8v+~{0F!XPO|_2 literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/icon1.png b/demo/mask_detection/web/image/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..15c0d9a95d6a40435003ce12c674524aeb3edcd1 GIT binary patch literal 1353 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1|*Ak?@s|zk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m=!WZB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L$o& z6x?nx#Hm*w=oo!av?4__ObD2EKuma|1#;lYJ~a=R){B6NS|HK(1_J}*eoq(2kcwMJ zrfu{->>zT?KUk~jkru};4c&E4jsje)3l&6+N{fobmi!aE8^gk0ZoY8x|HkeMk3=#H zgETl|b#%Ed71gb`F+5g%QnmMMv%Jdm-QOqOxm)g^xz_e?bbf;Tik2ysZUJ#_np=70 z4y^rk&HBZPCyOekCtSR~&HUuinfl9qNJVS3&kHx6mg~g6;{lh+!H&$L*{5q4wXT{V4em)$6y zyvBYitK5w_MUHmOx*r6$dc`^$NnPRQyvNPfcFi*E$+i_N?~W_*o3VU<`C+roci!$) zpB>3RcG=y&d*MR;iSxhOT6P~ix6HDJRl9MU9ebQ`U8cB>c)$Zgkcm9kG~qe9QhTNb`y2Co?{nEKYQ zKb*_#{9nCqYS-4g#v9kZjX$&7;_%~@8O02{Gvy9Q>hT^r)y%ddF{an^LB{Ts5AwcVS literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/icon2.png b/demo/mask_detection/web/image/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..6e5067406fa028d5c1f25d70476a83350a30076a GIT binary patch literal 1274 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)v!3HFMw%@G8U}fi7AzZCsS=07?>3@Ln2Bde0{8v^Ko2Tt~skz|cV7z)0WFNY~KZ%Gk)tz(4^Clz_GsrKDK}xwt{?0`hE?GD=Dctn~HE z%ggo3jrH=2()A53EiFN27#ZmTRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1?ON>h49S0l>G8y zuxejlE6=>*lEl2^R8JRMC7^!2%*+%k7b8;_Lo)+&OEVJ-Lqk^!3rBNTM@MG^Cl^OE zGe=WHm|mCsATTyALtl;P_!aNGfW7Wc0f#cq6Ko`$v!m?nAVGci8>`KBaVTAvB1;CF{I*F z(x3nT?U^MTI6MANT-7M@fZ>RL!w+)-eWs+aMWszOE=+Zw*MPH{w)|X5%UntP$Jj$lKn?BlJnaI?7<$!_6n;JRe#sq^TM@iz~mp z->-l8mD0xV&fQW$2lQmp5+hWaj?{U%CH@xZ)a{88d!*g;Z(`y_brU=DolDJcCR|w* z*j*5H#Dl-v!P2t()U)k}WzILHoV43A>7ZPPdO$`X+mv%jETPvg6#2Ha1)4C6lqi~P zV|im7a6xu~`>JG>g`Q`)kDQ4(vR^24?u3AqxyLVlGF)EfU1}+|G1{S~Pb@b-AoMTW ktv|QekDNO4ij~8F!APvUY3Ib=v!K$*)78&qol`;+0G+$9>i_@% literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/icon3.png b/demo/mask_detection/web/image/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..1e08e6b8a7257c9ee92d293d35438ea702b10ba3 GIT binary patch literal 1620 zcmaJ>drT8|96zfRL{K*+C<}5eZc}NmFG}f^+PBb+LM?1Cwkf5((ym)MUfKoF+ zn8v^+nXdsZpe{bpg{^{2W1KoN9gta-Fr$kYbqJzC5OG%o+#h3?-2EQ;d_LdTCs(OW zOAZf>3IzZlT%DrSk!wWY4WW|XLy_NoO)kp`RW^}y+!JVv#2?-AoWT%wjp6PRPlFFnd0WBNPe)8eA@uL@*t08=-eGZI0M!1tsDz*ey6= z!E9haQJ;qu5@I@;>8lb@d`8yhm}(Q*FqTV?vp5htP|`F|qxpX*iq4=NgbsO~?|%wA zGTk`B(jgA4&~6|HXNnDk!eNCS(G!?G6T=FoyQno|1m-YfIH<_rgIN}v5py~w(Hae` zwmAsB&48$tVmir(EEXfo;d2t@N+DmEz~^%~s>DRLYMoG^5XzMbAy=kUO>>o)p%6uE z#5C9Vnwu~yH(&%5CnGBnyXAAlxXzBD;AFwDW%gWnv+7N8jkD(xKP#6-Cc_Gh^U=`$p}REmhHG z%F5#r^WtfY?dQi;t?&f1o~fV!U)M6x6W9pRjA_DxY{MgE&u=B)7nBumd;k4K93IQ4k#^ z{_)eBV+?m9aMg70n(FG_0pW=LBx=6RKTOFb-yLC zcJ&@B+?>9Om)>|u*2x~E_>Z!{{mrr^rwrWDNV!xzk^3H%!K)uIc~7+v`_Wq3&+uSh g&5O2|&83tuz#SAbwug0QH1MBStJ0K5<+)}509M;*$N&HU literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/icon4.png b/demo/mask_detection/web/image/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e55d4481c25abc11ce44691056d0f35119ee9c GIT binary patch literal 1671 zcmaJ?c~BE)99^^{R#0n&G8%<#@MslsLP8=Db3z6}AsopRp@d`uYsl`JY#<<2T9lNk z1;+~%5kx_yK|Jb=Akd-}I)LC%QxL77R>T7@s-U3VAYlI}-I?9*nD^fAdNZ3778*Ev z*1}l;0L+#KiR8rUO1y3}XAs{zH$ON)EDLb45|2Q&c&f?(0elUb0D)4yDiM-HDoxt@ z-ynYgm=3~`N?a)m;i^$RMPk8B?is5Dq3li7>(=Kdz}KgRq82R`|+j zGE4|1!9nQ;C?Y*HQk||-b2Q|D)u6wbO9<#8Tm_o-$%v6_=8?yAxy0UnO(lb45M0M2 zze`Ff3j>9y0Rnv~G;cMHMFUxM3Z3c0X0yFO28~Xm(il`a!<)|LG8tSN4IF>SL^Oj& z%aw~HjDLIb42Q9~q(CQo!RED6O?V-kvi!U$hb0V5hT)i{Qh z$+%L)h^r7aBo*<<1fK%K8ZLwGBM?jcXdITWFP$#-cUy22-=(ond1?L%w*(hB zV99Ljck2>W;`T$Ih>PXnx|lObp82ok2Dj1a-s^PTU=Zf%5?%MQ#bej#p?f7x^NaF) zzP?;*?7LiB_YJeJv2eJE$?PjydF0vo9Ltu?U5p2L%ua+{m_4V2U98yQRw5lt913;s ze@Gkt^vJWddZJs8+wOu+Goe|~H=5YLyaNo(9CzM4UmVzA*)%}AX zRX;vE5dUZHsMCFqzCmCi<6Lw6qK=Ra9W5iw^9k;@Rm)F@4>8WQd}fi{h;d$3e?6|d zVt@5gMWWaCiy_$nY4aa7$vupuQfF&r?%~|N@amsJkI^}WF1u@Hcn_L3pJ=l7j}8~s zl{^x9fr<;?$D1lCaX~=oul4l!NK0$krJpOhcz3EVzTsPg`FzEah^<%V#e}RKigO8GQ-QX+klKsoE8(X%8-`)!z!TT9 z2(tFWzd>8g6IS%NP{ zhqH1FakluFa9igZxHGVzP3psZP8o2#yL6CrZOg`a7E)7;T(QaI8GB%{?$)c%dr}0t zmfw-}z2zkBqI6k8z!#+Jn6(X|#a=y;Vr1@Uaaij3*NXC{44FghgXe&2WiMkS@of8Z zUevc|7h6X%znWHc>e#`C*Eug7@_8)3eaY1T$zOZ;@zrcm>A=fkmT93F@hQj(-oC%} z?jsv1wls&Ib;v#M=$Qu6X@{!(LARZAwR@}P4#kUK-rl;{I)l@k?R0PXt@@)~tz`%J s*%j^747aBRwik{vto-fAmbcTKf!unAdu@`VoBh`y6^Du{1@Yhh1N(-Yf&c&j literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/icon5.png b/demo/mask_detection/web/image/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..44f6dd13003dc13063d688674ca8492fad510e5c GIT binary patch literal 1283 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%nF$y5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8Mv>2~2MaLa#GUy`Y4UTL84#CABECEH%ZgC_h&L>|v`++-|YNX&zK> z3U0SJ;?%1Tbc{YIT9Kj|CIn17ASOJ~0y*$xpPC0u>qWpsy_EYa3j+gVrKgKyNX4y| z5L<5+LxH*C!CkGr3O6_oiH3Llt6#H4X!T|1Eu!m$k34%&P;)cK%y_f*vlG5$llD}8 z7PZ;GC$8f}l&jGazICjVw?q|M$EvfR^IcSQRG z(S-j`jb)E&pHU#R69-a27^OL){@fu#AlzA6j|FR!tF8?m| zZR@U^8ox7EY~(2ql=QBgJb}x^Aev{bg@M$Er-nVrr@ULVbd<}v*V(4T@g4pyDQ><( z)PB>u-;rq!^ClPm>ax~;-Uxq0Nwx7nTXg_%p29#K#;o3>Xf;_X|JOn*P6PaB>+T&2*U@b!axMb7l;_>p>s`WK)_?5*OS=< zw%7xV7I-B|zH^SZG_`;bgt>rB7%P&}WDN9YU7C76yNyQ!pCNDz z1N~1@L2Q4(1CoFM8ArfI5}XKt6A?!wIZ`MTd%%G}B;W}Sc%lQANTHD&XaoZAIL3@ega%_%TJ zX{1CTh6Ruam{sIPKyfewt)td0v^qsNF)%5R0`F}gFqy*oZXx}-KZ=_0);|g zGRdB-IW7~5j1z()c#g~am+SmZ?yM1nVs&IDC=tYiJWmNE1U?r`6MQ=t@;CLqaCzU( z#p#<|ygC{DY+L`U&2w97@61lWnpVB|YI{(m_PRuE>Vr75Hwc7Qr8mR*RfRKwd)?<}cVV(4EQ@BWH!^RY z2@hGgW=;PFFXD>gobH_B14y@uF?Ru~wtC?Bz-3y`I}(Y{Pr$sp)Xbjbr#AjUl0I)! zow3o$AR#(6mC*CG@HSU(}QEVBN~^hghF1@Qe!A~bNYBe&=@ z_W8Ymmf&_c^+thWRY6MWBz=qh?^~yhMy&E{-WmsJ*R*d99xGX#9qTqw@YhzKKU@cUvAc z$E^LPaZ=&+-SsXz&!@YV?$(debu1 zb6G!TnfS#hZk3UJ`AlVj|MlC-mxhX8r*e!=v{H;?#6kcAG^oW1ddHjp396#qZ(|K?vmHWT~Sxo*KGb_ch%7& zcZV8osK_mqM>;g`@zzeTe1np*9wXJT|bsgH4};lm=K zdrigS38|KA)Xp^1X_qXY1qaGE^W~6Rou0&Mb=IHRAxROb&-3lG^2@bHw)>EV5NX`7 zvk^~=0r*)WBLQxgAjjBC?N-d={ZSCEj z+()Pr7Y+5b3BqdajqbFj<`-2Ogc_%;N$MMmI`QWR{#04CX-Y9@sC%hosw4n;V{nac z?UtFtLW99|M;ygr6T_!{h>Q3AfP7Z^+Y3x6K15DsgjV$%zpb#j_tDEBvV=X%`vaG= zm$~alS9(x(%gOAQoFRO8qxZIA+rD-| zPwZP49S%Vi8&bf>uKEzu64nx*`ToK5!U$#VBpwarBnk1X1{cq1v%;6L3glMV`Kee1>!%E%4uLF=q9u zwqkPCv!xdXVCR*jW0%kFIz0HRcva_&Lb?d`iKAWaUB(I&+&X#i_!zq`WtpMGa#ySJ zO|9ido#42db>k&=@w(%c4+><;>tiq-l!%Kb>1xNZGX|^=SgucU!NR%iuDH-vsXg@8p}uYA2zE(f2_a`uF)?;2DPb|Nq?DAHAiKDzn7D}O^(7@F28KvVLByrm|9x;? zd-H?4Kw#>c|Mqn~Q{Y7U`};sdM1q2Xgo7l6z5QH8#AIb<|7eJd3tc0GP{CgQj%Xn- z)SbT-)Db9WKQ|wLH*YWYKZ=e{-U0p!oY#^5D+N!V|Hyiw{#~Z)f{CCVeMH2BMgOGq zH&9>y|A%^d{s)cnhavtO@Bb-`G7a`Yh`xFZ<^T(ABM9mN3=h10E zcNLA0-u~Vwq_+>dnu!!UpM{$j+&c)x{}*0g9|HA4`8#?!BcSREoYxA%ZfF4dq{#VKnw||aB>>u_1&4vGSEaLyj6}b*Z&br_AK`V~?S9v7{iDLi5dfh32~}4yMbB>8lAvjNXo_NYlGX8|IZFsSb$~PvV1&U) zn)1l9y2R*`svfOURUn2FMhNUgzIM`}7J6e@70qW(5v@v-UB;d$g+$+pmEP0SUISl+ zAHl`n%7t#vKMnm>v@K`v7v%cqyp&y2a&<9DPD$y3a*~ys=QW#cr2DtJd<-i{qVZI)$m}_8F}eiZk1Ud--wmoV9^LwzG7x3>syDH|gn3Zubhso7+;QGVXYX$$)7~ zYl`=nB65oQ%ouFH+02cX)rx|~!td>ma!&cfrE{8ReJ(4p>)nKXU(qM--v}RS?Us@# zuXfU`iPJ9*t+-)gvOP^y=G1kJTiNS6T+U7yL*BnR&{|X&DQOn!+FTI&UBim7%Z3;+ zlu&61$G8UC-M&M0?<01Dg=3QfAdCjWBbxPa;e3!f#%jVr}Gun)xPEBD1(xFvzqo(3gq7xShdflP@8vQ70Q4gc! zDC#cU4=WxmH`?1#GR~vpKkLgH`f&A~<8bGP%1=$X^L02Nkl3ptvDU^D9I0TB|3z21 zROUbzfwD^bLT$;IC@0FzqtQ8V=o74sPW(3_D`8o^#c+F=sJlc$!Lh^%Jf;S*L&4G&QxSr5DAyej@c zDqz?`f1`yJ!6@b&9sPcpEIuiX;<(7s>d*=u$Ys&xZcf%MNN7kjozT4;KEA}*8yWC+ zxt;JfmM(#JKe0Grh-{xZe~a0!8HRcwd^j<&b(V_c84MQAy;qgZQj*Q^Qr5z=KB8>g z7FL`$3z(xtZeUICKgkI72h$8|PCS9VElIOYALdUlq=x?7*uNBjeqHn%$|yHio{_H) zd-bjGL)M{CIvWH1PFt{J4-mr-wDWHI1_^GIuJ)YqP0J1&XWPp`dFRd+T(G*F=-tw3 z;~biEVA#ObY<4$or5m%xd?_1yQDH-rQj=flK`FQs?!&MUiI~GX`>{>2@_0Z+_FbH= zwARLU#eBxTJgI<2&g)Mv3~vAvDRpkk^$QPO1MKh+$lS8y~ByexM z@dqd?ciG^4N~za)h(T^p+Ar&PxgMDr?2YNREtE2?O;U9EJ< zrr9VO!^5%p?&dRIlE=K}WUSk+pTs+2+cNZXr%Lu|?|N?a68);FbUfqHe7O!UtnJ7c zzYF$Xu6xCzaAW&zl2##K`vI*_8M__XA=uYRTWv6G#;=y{Wc?jAwt$F&YqnAfGO12_ z+e_7Ecg$n)gx(b2cSQ?ZIE13P?6BRyGor2E$E(hT*!qU)N43b|eq?>&4QLt910GtF znx-a+ye0@408P(1J52PE(-X-%uXAHE0PhP_4s`+RG8m@ia`#4>;)b+I{d6OJ)uL(DNwUh>gS zMg4U5l*!1dT0GF0V-Heb4%NCn{p{`<_R4<3=e?J2tlf2q`T#~Q;y5|-%}SEHYc$t+ z$sduAgla%3-iXU+2(wVIA)OsdZ`WwcUeZXGyv(ZZ_wF}3z4L164dc)o7S|o4we6iV z-kl~X+G!?Y!)V5}{3Zy20G`5wF1w~uIg zzB6j?FZ?YZdnM5`_Wbz%(rhs~V_M?iGuJLB?{7fe_Wj3&nj-wR+Gj|GQh*L2hvQi$QKO9#>Y8(A|` z?i4R}ezJ==t%o3snlyP=(7oh^o&?%pMse71INvq(OW6p_zFXNh%TOKJo}3gPY?nP~ zXA(C%s+=KSc`=iV6JCVQXA>N*_r)FSQmF)<01o9TFW<-fR2-nYUoWIm$P%oNzcmiH zLimPL<(<@b&T5N|XA0i6CFZgUIEt*ksr8ZM`aQ*5`zw5>Q98t+rX?E_)r=Z=h^#ns z9=WW>3!_Y@cu0yBJj=N?;>#C9%W7A?3^jk-m_V8rR-9~P&d`?PPVFFad!E5Z<5ltF z$hJ4w;qozHyR&+Jk*+7(+Gg_JO4H%^O_DA3r~(qYh~{DEDRJK7nPNWM&YYd2y#a5}0i{&CTKf&U;1E(|`~ z&MV`RzQP+=QvqJ^I*o(8lgHY{rWZT?43S*;dQ5i?4t_(=#M%IBWRqb z)ZqoydSOq$lFN?AT|y%Z;ifWhP6HD@0XKNWPr!olG;XlPkk8?{N35$lpR*cGd*A?H z-e{5CNSNXm{SMW0LBi?8?oi@i4LYHZYbp4Amh=`&tq}SQ^rKvC#8^@Z`50AjbtQ6Z z*gdjvpa&%IK{v5?^Nx;7X(isGYgxKL#CevJ><@UAAURy&r{CLI96uJ~^s~ z^<$);$JBq!BsXqER`3n_b{JE`f;Mjj50hvIR2Gf|ysu%YpljHGZY7EL(_ ziJbvHz0g-tWH2<0^72!^rFLeDR?hI{QJK>dlCV<_vX9Gx8;-=tJ2Tm$2{n;DpBtJwppVC!v?lHeu{CW<}hQFuoBJ40kookm4_u0jh z*DUWX#59Of;2T8k6c2VP#DGZYFOfI5CNv%l0Ci`(Qs&WG>n61J)TON`>(cRi3GwpQ z>k^+lPPS>v1QC#K1Vtdcknh5mX=80I_Q#L++*r1l7k9ot>k7Mw#eDK)pyHXR<;8{O z10j{NAjT&p-wAYw{CB~vuTFhQ$DxV#^%tUDUXgQfP2LgZS-O&PVtt>|FURgSL(tw~ z#CAOHoYr!X$sx%D565QuiepUf6o0e8QyqEYYyR&4 zZ~n~!E+v%gEvqHFmva@}YF0EOa&=bKM-Q>ZGsxR}lOYlUtI&bvLmtawCBy00_Zxd} zPZz&O-4W3%EMG;JkCwlvOsZ`GLdukD>8Y#5ocF`eBrzM7WLP#QoZH=edQ)y@C3Jd1-Jf1fLo?YqV#q8IG@=5(yP^@?qYVHy>8k-bpDB~83$%KwNFT`DAr=rHGt z*2(p!B$RIu59zg{vz1m!d=+ku|F;iN37P(=`ZS(9d|ol4l(RlX{qk{{{3={^B4u;2gf&EpFK+}lhB)#9di zQzIg6AWx11s#9jnz>YJP$akaWo3}e@W10q^O4R8Q!+L}KVE)F11HmxLOuij{V|t;R zB%|UJ`LQB|=z@!$F)08OKOhexq{7lISy3Jts0_$Cn!RMe@6EUHiv`L`_5-mV6B(u> zfCCaWg|3T_2PUc=l>w!EOz)Yw4pesTba@FqM(RphCe)QuKdk6edFL?O>Gx`?ivaI% zw@X2*puyf6>bo1w-2L9XYD?-?#ui>_#xTOo66ng*GiQ#wvm$$xZ9E0;3Sw)(UD{jb zS$tS;F214OBQvmGNfL&QLuL=eDF)nc?}Qm?G@$8M`b}cPz+Zf9g*Ssh{c*>*h3`Tnj_!F(Yft0P?3ghHNq{Po^R zVb**DqX@@*aTRt`{#7fo{}a(G#gMDFPV0x>Nuv@oBB}$k&A~+XpH}1FLQ+*Re_ay| z-pO+flU1?gjjP9d79~z^+Z`3=KyYNazWgLo%7HZ`T9+@>->TA!XL|xB0F*H9rlDLojZiwFOHbI z0}Oie(oOqD3$9G`o7!>%LhVsouZ34a`Rw6V4rp^i*rwJFH_d7D7#AiXd*AC|w>{*> zjt1S+8rC$h%~d@5>K@s5f zpB`Htp821%bXJcFN3WS#@5ena#=l#zFm;N~5Tg1&M;veKPd4R%-drR$v&Vamz0hnuQ>M;kXR1*(thc0heAxep?`g!;QB3{Iip0d&qBhx%{HU?$f#0+&mJ{6k#y!T+qb&i^XH$6Y57$xHx>b|b`?&rtI9Y81{-(VH z7%_aiLL#f`=hW@eCfadOfUbT7{`N%XGsXF%WVC0hKx71m&ZBcJYt}34;wdJMEv4dB zt#zP%N}dc`b@+>s2#jlbDS5slUZ^XX(p8zyt<_PSl;&fLXXWv;y2oc9qb#%{pxH&p zIwp2_R`MkEwwDYboEoAI)9EnLajggj=7cd%86R8MPl2Z0IETn`*Ulf-nU%GAOe*f4 zKKSAy^>~bQ$NwNpA=S=5wo040cGCGB4>#wQX}?cM0NWDduxN5EH)&-*XLi9u^6uEG z{GwMKnUre}OjjG7kh9;9$1cc{*FIFe{luRV?T3k=+NrC=|I|fOGbC>4e6uQeC4sb% zZxFC0CE+~5;Laoj`XCo~Hhx5n=78rLIf$+oMC?)XJuA-#mL$h1ipY@_Y^9;wy?J(9 zNp}wE<_9EpB5ifq)@q)=W6G*nu$!)tnR(d5)12r~yKInf{;Bx+(jL;aIby zmaO$V5_3@=m=jVlZW5;0eIM2f6$0D1-f2G!kJ4zZ;8Sgv&`!UAVKQQO<;yD6QmC|Q zE!%ErqJ@Xvu;tD!7^S1OAf@f|CL0VeSH82V4BG_fr0pxF`XAMq!gX@90)4kJ&e?u7 z+Jg?it-kw3XpJ5%DXuQpXGNm#1IX4U0LltqeY{w(&lzzj@S$tTw+ZD%I1%1sNd9-@ znknj%mKh^qlMQt>e8EWqY0vLk;P9tw7G@h4G9ShrdUan9r9-nI$pOTLf~oip-qGyR zeIU&1<#N>5pL^}g(AwQCs8ZsNP1DG*d_PN8^9{!Itw5;EVr_qg_scN1TCLke+>SPd z>`@OKP1b=ibz9sCz8(}bueb51izl<0h7KDtn?LWdp0S^ zF3kO3g?~pP+UB$FjV(15f;N3$4n*!nkE3jcMh7cUTLP{QN*WvY2iYg24ItA9*c2@< z_h_8Y>Xte%;Pch~TS@SPDe$*9qu#YU9+4@t50kl|WVw!&BHtC9TI zAJQB`BqL1uqB)XN_5!NKx4*dUp0gCyzTkPLoOcvT=)^$yu~r6|>8Y&peiJ;GR3oK7 zS7{Y9#dP>JMap^}cGF5bMhG7TO=7bm(aYzFwyx*oaU$7DAIWp$OS*z}hd;?ybBlkA zU+rpLS_~JXW07NFU~6zb3k1OHwF3KZ8wc9bMgd4F@Sd2HZjs>nfRWq4lKI#L&m0G? zu>AD}`b0&Fd49wcr&En}Lq!%}TYHMc$U8OM(|Jn!%0>!YBlGZ%8s&U>vhc@5OgUWk zqVJ*Ofx_iw;*pBV^KN5g_fP|1yn}7o>V1l-N?6FE?F0ohNo$7mnb3`h4BjREW5Pf! zD19X5C=m_T`w2B8!Vqr{(6wCt11{DCEp$N(L%3TwES z&?<+=4m7zt;_m7>#ZA71FtIWsk_(yyorFk0aT7lS?`Ras$-J zTW+#F%Q9*nj~5-%W!W??KuLn)TV=vPLZZqKo^GW;p*k=F0tZ7K*rP|+d*@LK{C`;t dPKp8efG`K{Hh!# literal 0 HcmV?d00001 diff --git a/demo/mask_detection/web/image/map.png b/demo/mask_detection/web/image/map.png new file mode 100644 index 0000000000000000000000000000000000000000..6319bf6b73640b69902df8eb83a8681b60b72ae5 GIT binary patch literal 57094 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