浏览代码

面容认证

zouling 4 月之前
父节点
当前提交
f6a5f19506

+ 17 - 3
a/code.vue

@@ -77,6 +77,12 @@
 							<view class="tit"><text>补充事由</text>:</view>
 							<view class="txt">{{datainfo.visitRemark||''}}</view>
 						</view>
+						<view class="ctlist" v-if="datainfo.humanFaceData">
+							<view class="tit"><text>人脸信息</text>:</view>
+							<view class="imgs">
+								<image class="faceimg" @click="getPreview(datainfo.humanFaceData,'face')" :src="baseUrl+datainfo.humanFaceData"></image>
+							</view>
+						</view>
 					</view>
 				</view> 
 			</view>
@@ -107,6 +113,7 @@
 	  components:{popUp,navBar,stepBar},
 	data(){
 		return{
+			baseUrl:config.baseUrl,
 			adrlist:[],
 			codeimg:require('@/static/images/order/comes/code.png'),
 			useimg:require('@/static/images/order/comes/use.png'),
@@ -182,9 +189,14 @@
 			});
 			
 		},
-		getPreview() {
+		getPreview(ite,type) {
 			var newArr=[];
-			var url=this.yy_code
+			var url='';
+			if(type=='face'){
+				url=this.baseUrl+ite
+			}else{
+				url=this.yy_code
+			}
 			newArr.push(url)
 			uni.previewImage({
 				urls: newArr,
@@ -295,6 +307,8 @@ color: $com-cd3;margin-bottom: 16rpx;}
 
 }
 
-
+.imgs{flex: 1;display: flex;justify-content: flex-end;
+	.faceimg{width: 100rpx;height: 100rpx;}
+}
 
 </style>

+ 2 - 2
config.js

@@ -3,9 +3,9 @@ module.exports = {
   // baseUrl: 'https://zxyyq.qs163.cn/prod-api',
   
   // baseUrl: 'https://zxyclmjy.qs163.cn/prod-api',
-  baseUrl: 'http://47.99.82.249:5010/prod-api',
+  // baseUrl: 'http://47.99.82.249:5010/prod-api',
   // baseUrl: 'http://192.168.101.168:8065',
-  // baseUrl: 'http://192.168.101.245:8065',
+  baseUrl: 'http://10.90.90.53:8065',
   // baseUrlimg: 'http://114.99.127.243:2001',
   Clientid:'428a8310cd442757ae699df5d894f051',//
  // https://xygl.cnzxy.cn h5链接地址

+ 39 - 8
pages/order/come.vue

@@ -129,12 +129,15 @@
 								<textarea placeholder="可补充填写"  v-model="datainfo.visitRemark" placeholder-style="color:#aaa;" :auto-height="autoHeight"  ></textarea>
 							</uni-forms-item>
 						</view>
+						<!-- v-if="ite.val==1&&datainfo.visitName" -->
 						<view class="pt12 pb18"  v-if="ite.val==2">
 							<view class="facea flexccc" @click="getFaceFn">
-								<image :src="faceimg"></image>
+								
+								<image :src="faceimg" class="addimg"></image>
 								<view>点击进行面容认证</view>
+								<image v-if="datainfo.humanFaceData" :src="baseUrl+datainfo.humanFaceData" class="faceb"></image>
 							</view>
-							<view class="facetip">面容认证仅能由<text>林涵宇</text>本人完成</view>
+							<view class="facetip">面容认证仅能由<text>{{datainfo.visitName}}</text>本人完成</view>
 							<view class="flexcc">
 								<view class="flexccc facetips">
 									<image :src="ftipa"></image>
@@ -165,6 +168,8 @@
 </template>
 
 <script>
+	import { uploadPhoto } from '@/api/system/user.js';
+	import config from '@/config.js';
 	import navBar from "@/components/toptab/navbar.vue"
 	import stepBar from "@/components/order/stepbar.vue"
 	import luncCalendar from "@/components/lunc-calendar/lunc-calendar.vue"
@@ -174,7 +179,7 @@
 	  components:{stepBar,luncCalendar,navBar},
 	data(){
 		return{
-			
+			baseUrl:config.baseUrl,
 			tipimg:require('@/static/images/order/come/tip.png'),
 			rowline:require('@/static/images/order/come/rowline.png'),
 			faceimg:require('@/static/images/order/come/faceimg.png'),
@@ -195,7 +200,7 @@
 			timeid:'',
 			//status:  填写状态  0:未填   1:在填  2:填完 {tit:'面容认证',status:0,val:2}
 			barsteps:[{tit:'信息填写',status:1,val:0},{tit:'等待审核',status:0,val:1},{tit:'审核成功',status:0,val:2},{tit:'已完成',status:0,val:3}],
-			steps:[{tit:'预约日期',status:1,val:0},{tit:'信息填写',status:0,val:1}],
+			steps:[{tit:'预约日期',status:1,val:0},{tit:'信息填写',status:0,val:1},{tit:'面容认证',status:0,val:2}],
 			fixedflag:true,
 			rules: {
 				// visitPhone: {rules: [{required: true,errorMessage: '请输入联系电话'},{pattern:"^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$",errorMessage: '请输入正确的联系方式'}]},
@@ -204,7 +209,9 @@
 			disabled:false,
 			
 			intype:0,
-			datainfo:{},
+			datainfo:{
+				humanFaceData:'',
+			},
 			inputValue:1,
 			step:1,
 			min:1,
@@ -251,6 +258,9 @@
 		this.init()
 		this.getReservatTime();
 		// this.getConfigList()
+		uni.$on('refreshFace',(e) => {
+			this.datainfo.humanFaceData=e
+		})
 	},
 	methods:{
 		bindTimeChangea(e){
@@ -262,6 +272,20 @@
 			this.$tab.navigateTo('/pages/order/search')
 		},
 		getFaceFn(){
+			var that = this;
+			// uni.chooseImage({
+			// 	count: 1, //默认9
+			// 	sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+			// 	sourceType: ['camera'], 
+			// 	success: function(res) {
+			// 		const tempFilePaths = res.tempFilePaths;
+			// 		// 文件上传
+			// 		let data = { name: 'file', filePath: res.tempFilePaths[0] };
+			// 		uploadPhoto(data).then(response => {
+			// 			that.datainfo.humanFaceData =  response.fileName;
+			// 		});
+			// 	}
+			// });
 			this.$tab.navigateTo('/pages/order/face')
 		},
 		init(){
@@ -403,6 +427,10 @@
 				this.$toast('请输入来访事由')
 				return
 			}
+			if(this.datainfo.visitName&&!this.datainfo.humanFaceData){
+				this.$toast('请进行面容识别')
+				return
+			}
 			// that.clearboth()
 			// console.log(this.datainfo)
 			// return
@@ -654,9 +682,12 @@ color: #161616;display: flex;align-items: center;padding: 0rpx 26rpx;box-sizing:
 .pickbox{flex: 1;text-align: right;font-weight: 500;font-size: 28rpx;color: #161616;}
 
 // 面容
-.facea{width: 100%;height: 174rpx;background: #FFFFFF;border-radius: 14rpx;border: 2rpx dashed #DADADA;margin-bottom: 46rpx;
-	image{width: 64rpx;height: 64rpx;margin-bottom: 14rpx;}
-	view{font-weight: 500;color: #AAAAAA;font-size: 26rpx;}
+.facea{width: 100%;height: 174rpx;background: #FFFFFF;border-radius: 14rpx;border: 2rpx dashed #DADADA;margin-bottom: 46rpx;position: relative;overflow: hidden;
+	.addimg{width: 64rpx;height: 64rpx;margin-bottom: 14rpx;z-index: 1;}
+	view{font-weight: 500;color: #AAAAAA;font-size: 26rpx;z-index: 1;}
+	.faceb{
+		width: 624rpx;height: 170rpx;position: absolute;
+	}
 }
 .facetip{text-align: center;font-weight: 500;font-size: 22rpx;color: #666666;margin-bottom: 50rpx;
 	text{color: $com-cd3;font-weight: 500;padding: 0 4rpx;}

+ 623 - 3
pages/order/face.vue

@@ -1,30 +1,650 @@
 <template>
 	<view class="facebox">
 		<view class="flex1">
-			
+			<view class="errortext"><text v-if="errortext != ''">{{ errortext }}</text></view>
+			<view class="faces" id="show-content">
+				<image :src="lines" class="lines"></image>
+				<video class="facevideo"
+						src=""
+				        id="video"
+				        :style="{ width: vwidth + 'px',height: vheight + 'px', display:showVideo}"
+				
+				        playsinline
+				
+				        webkit-playsinline
+						
+						autoplay = true
+						
+						muted = true
+						
+						loop = true
+						
+						controls = false
+						show-center-play-btn = false 
+						object-fit = fill
+				      ></video> 
+				<!-- <view class="tit">请保持不动</view> -->
+			</view>
+			<!-- <video></video> -->
 		</view>
 		<view class='photitp flexccc'>
 			<view >请把脸移入框内并保持不动</view>
 			<image :src="phoimg"></image>
 		</view>
-		
+		<!-- 640 488 -->
+		<view class="button-view" :style="{ display:(openCamera == true?'flex':'none')}">
+						
+						<view class="click-button"  v-if="startVideoStatus == false">
+							<view class="button-btn button-btn2"  style="background-color: #0b4da2;" @tap.bind="startVideo">同意协议,开始拍摄</view>
+						</view>
+					
+					</view>
 	</view>
 </template>
 
 <script>
+	import { uploadPhoto } from '@/api/system/user.js';
+	import $ from "@/static/collect_face/jquery2.3.js";
+	import faceFilter from "@/static/neuralNets/jeelizFaceFilter.module.js"; 
+	import JeelizCanvas2DHelper from "@/static/neuralNets/JeelizCanvas2DHelper.js";
+	// 引入uni.webview.1.5.2.js
+	import '@/static/js/uni.webview.1.5.4.js'
+	let VIDEOELEMENT = null;
+	var  CVD = null; // return of Canvas2DDisplay
 	export default{
 		data(){
 			return{
 				phoimg:require('@/static/images/order/come/phoimg.png'),
+				lines:require('@/static/images/order/come/faceline.png'),
+				vwidth:215,//215 215
+				vheight:215,
+				isTest:false,
+				againCount:0,
+				showUserName:'',
+				openCamera:false,
+				screenSize:{
+					width: window.screen.width,
+					height: window.screen.height,
+				},
+				scanTip:'',
+				// errortext:'点击同意按钮开始拍摄',
+				errortext:'请保持不动',
+				uploadHeadImg:'',
+				imgUrl:'',
+				pauseStatus:false,
+				startCut:false,
+				faceCoo:null,
+				detectState:null,
+				showVideo:'block',
+				appendCss:false,
+				bgImgClass:'home_wai',
+				bgImgClass2:'home_nei',
+				mediaStreamTrack:null,
+				startVideoStatus:false,
+				useCamera:'qian', //qian代表前置摄像头 hou代表后置摄像头
+			}
+		},
+		onLoad(params) {
+			if(params.username)
+			{
+				this.showUserName = params.username;
+			}
+			if(faceFilter && typeof faceFilter.toggle_pause == 'function')
+			{
+				faceFilter.destroy();
 			}
+			var that = this;//a
+			setTimeout(function(){
+				//初始化的时候给追加上canvas用作载体
+				if($('#jeeFaceFilterCanvas').html() == undefined)
+				{
+					$('#show-content').append('<canvas class="appendcanvas" width="'+that.vwidth+'" height="'+that.vheight+'" id="jeeFaceFilterCanvas"></canvas>');
+				}
+				if($('#jeeFaceFilterCanvas2').html() == undefined)
+				{
+					$('#show-content').append('<canvas class="appendcanvas appendcanvas2"  width="'+that.vwidth+'" height="'+that.vheight+'" id="jeeFaceFilterCanvas2"></canvas>');
+				}
+				if(that.appendCss == false)
+				{
+					$('uni-page-body').append(`<style>
+					#jeeFaceFilterCanvas{
+						display:none;
+					}
+					#jeeFaceFilterCanvas2{
+						display:none;
+						border-radius:50%
+					}
+					.uni-video-bar{
+						display:none !important; //去除底部菜单栏
+					}
+					.uni-video-cover{
+						display:none !important; //去除中间播放按钮
+					}
+					video{
+						transform: rotateY(180deg);
+						-webkit-transform: rotateY(180deg);    /* Safari 和 Chrome */
+						-moz-transform: rotateY(180deg);
+						border-radius:50% !important;
+					}
+					.uni-video-container{border-radius:50% !important;}
+					.uni-video-video{border-radius:50% !important;}
+					</style>`);
+					that.appendCss  = true;
+				}
+				//uniapp编译过后无法获取video的dom,此处追加id
+				$('#video').find('video').prop('id','myVideo');
+				//$('#refCanvas').find('canvas').prop('id','jeeFaceFilterCanvas');
+				if(that.isTest == true)
+				{
+					//是否是测试环境 测试环境直接调用视频
+					that.openCamera = true;
+					that.main();
+				}else{
+					that.openCamera = true;
+					that.bgImgClass = 'home_wai remove_animation';
+					that.bgImgClass2 = 'home_nei remove_animation';
+					that.errortext = '点击同意按钮开始拍摄';
+				}
+			},100)
+			// this.startVideo()
+		}, 
+	 
+		 
+		onUnload(){
+			
+			this.closeVideo();
+			
+		},
+		methods: {
+			closeVideo(){
+				try{
+					//页面卸载的时候关闭视频播放
+					if(this.mediaStreamTrack)
+					{
+						this.mediaStreamTrack.getTracks()[0].stop();
+					}
+				}catch{
+					console.log('close mediaStreamTrack error')
+				}
+				try{
+					const video = document.getElementsByClassName('uni-video-video')[0];
+					video.srcObject = null;
+				}catch{
+					console.log('close video.srcObject error')
+				}
+				try{
+					faceFilter.toggle_pause(true);
+					faceFilter.destroy(); //销毁注册对象
+				}catch{
+					console.log('close faceFilter toggle_pause error')
+				}
+			},
+			changeUserCamera(type){
+				this.useCamera = type;
+				if(type == 'hou')
+				{
+					$('uni-page-body').append(`<style>
+					video{
+						transform: rotateY(0deg);
+						-webkit-transform: rotateY(0deg);    /* Safari 和 Chrome */
+						-moz-transform: rotateY(0deg);
+						border-radius:50% !important;
+					}
+					</style>`);
+				}else{
+					$('uni-page-body').append(`<style>
+					video{
+						transform: rotateY(180deg);
+						-webkit-transform: rotateY(180deg);    /* Safari 和 Chrome */
+						-moz-transform: rotateY(180deg);
+						border-radius:50% !important;
+					}
+					</style>`);
+				}
+				this.playVideo();
+			},
+			startVideo(){
+				// var imgsur='/profile/upload/2025/03/20/1742462163358_20250320171603A001.jpeg'
+				// uni.$emit('refreshFace',imgsur)
+				// uni.navigateBack({
+				// 	delta:1
+				// })
+				// // http://10.90.90.53:8065/profile/upload/2025/03/20/1742462163358_20250320171603A001.jpeg
+				// return
+				if(this.startVideoStatus == false)
+				{
+					
+					this.playVideo();
+					//faceFilter.toggle_pause(false); //取消暂停
+				}else{
+					if(this.pauseStatus == false)
+					{
+						this.$api.msg('当前正在拍照');
+						return;
+					}
+					this.savePause(false)
+				}
+			},
+			savePause(status){
+				this.uploadHeadImg = '';
+				this.imgUrl = '';
+				this.pauseStatus = status;
+				if(status == false)
+				{
+					this.startCut = false;
+					this.bgImgClass = 'home_wai';
+					this.bgImgClass2 = 'home_nei';
+					this.showVideo = 'none';
+					//$('#jeeFaceFilterCanvas').hide();
+					$('#jeeFaceFilterCanvas2').hide();
+				}else{
+					this.showVideo = 'block';
+					//$('#jeeFaceFilterCanvas').show();
+					$('#jeeFaceFilterCanvas2').hide();
+				}
+				//console.log(status)
+				//true 暂停  false 继续执行
+				faceFilter.toggle_pause(status);
+			},
+			playVideo() {
+				var that = this;
+				that.uploadHeadImg = '';
+				that.imgUrl = '';
+				that.startVideoStatus = true;
+				that.startCut = false;
+				var thatUseCamera = that.useCamera;
+				if( thatUseCamera == 'qian')
+				{
+					var facingMode = 'user';
+				}else if(thatUseCamera == 'hou'){
+					var facingMode = { exact: "environment" };
+				}
+				if(faceFilter && typeof faceFilter.toggle_pause == 'function')
+				{
+					faceFilter.destroy();
+				}
+				setTimeout(function(){
+					that.getUserMedia(
+						{
+							//摄像头拍摄的区域
+							video: {
+								width: 500,
+								height: 500,
+								facingMode: facingMode,
+							}, /* 前置优先 */
+						},
+						that.success,
+						that.error
+					);
+				},100)
+			},
+			// 访问用户媒体设备
+			getUserMedia(constrains, success, error) {
+				//this.success('11111')
+				if(navigator.mediaDevices.getUserMedia){
+					navigator.mediaDevices.getUserMedia(constrains).then(success).catch(error);//最新标准API
+				}else if(navigator.webkitGetUserMedia){
+					navigator.webkitGetUserMedia(constrains).then(success).catch(error);//webkit内核浏览器
+				}else if(navigator.mozGetUserMedia){
+					navagator.mozGetUserMedia(constrains).then(success).catch(error);//Firefox浏览器
+				}else if(navigator.getUserMedia){
+					navigator.getUserMedia(constrains).then(success).catch(error);//旧版API
+				}else{
+					this.errortext = "你的浏览器不支持访问用户媒体设备";
+				}
+			},
+			success(stream){
+				var that = this;
+				that.bgImgClass = 'home_wai';
+				that.bgImgClass2 = 'home_nei';
+				that.openCamera = true;
+				that.errortext = '请把人脸放在圆圈内拍摄脸部';
+				that.mediaStreamTrack = stream;
+				const video = document.getElementsByClassName('uni-video-video')[0];
+				try{
+					video.srcObject = stream;
+				}catch{
+					this.URL = window.URL || window.webkitURL;
+					video.src = this.URL.createObjectURL(stream);
+				}
+				// webkit内核浏览器
+				//苹果手机的系统弹框会阻止js的线程的继续执行 手动0.1秒之后自动执行代码
+				setTimeout(() => {
+			    	try{
+						video.play();
+					}catch{
+						that.errortext = '视频流播放失败';
+					}
+			        that.main();
+			    }, 100);
+				
+			},
+			error(e){
+				var that = this;
+				that.startVideoStatus = false;
+				that.bgImgClass = 'home_wai remove_animation';
+				that.bgImgClass2 = 'home_nei remove_animation';
+				if(this.useCamera == 'hou')
+				{
+					that.errortext = "调用后置摄像头失败:"+(e.name?e.name:'')+(e.message?e.message:'');
+				}else{
+					that.errortext = "调用前置摄像头失败:"+(e.name?e.name:'')+(e.message?e.message:'');
+				}
+				
+			},
+			main(){ // entry point
+				var that = this;
+				VIDEOELEMENT = document.getElementById('myVideo');
+			    //that.errortext = '请将完整脸部对准屏幕中央';
+				  if (VIDEOELEMENT['currentTime'] && VIDEOELEMENT['videoWidth'] && VIDEOELEMENT['videoHeight']){
+						//console.log(VIDEOELEMENT)
+						that.start();
+				  } else {
+					setTimeout(function(){
+						that.main();
+					}, 100);
+					//VIDEOELEMENT['play']();
+				  }
+			},
+			start(){ // launched when the video is loaded
+			  
+			  var that = this;
+			  faceFilter.init({
+			    canvasId: 'jeeFaceFilterCanvas',
+			    videoSettings: {
+			      videoElement: VIDEOELEMENT
+			    },
+				rotate:-90,
+			    NNCPath: '../../../static/neuralNets/', // root of NN_DEFAULT.json file
+			    callbackReady: function(errCode, spec){
+			      if (errCode){
+					//
+					that.errortext = '人脸初始化出错'+  errCode;
+					that.startVideoStatus = false;
+			        console.log('AN ERROR HAPPENS. SORRY BRO :( . ERR =', errCode);
+			        return;
+			      }
+			      CVD = JeelizCanvas2DHelper(spec);
+			      CVD.ctx.strokeStyle = 'yellow';
+				  //that.errortext = '初始化成功';
+			    },
+			    // called at each render iteration (drawing loop):
+			    callbackTrack: function(detectState){
+					//console.log(detectState.detected)
+				  that.detectState = '';
+				  that.faceCoo = ''; 
+				  //console.log(detectState)
+			      if (detectState.detected>0.9){
+						
+						that.detectState = detectState;
+						that.showVideo = 'block'; 
+						$('#jeeFaceFilterCanvas2').hide();
+						var faceCoo = CVD.getCoordinates(detectState);
+						that.faceCoo = faceCoo;
+						CVD.ctx.clearRect(0,0,CVD.canvas.width, CVD.canvas.height);
+						CVD.update_canvasTexture();
+						CVD.draw();
+						var check = that.checkTrue();
+						if(check)
+						{
+							that.errortext = '请保持不动,即将拍照';
+							if( that.startCut == false)
+							{
+								//console.log('start setTimeout')
+								that.startCut = true;
+								setTimeout(function(){
+									//console.log('setTimeout')
+									that.savePause(true);
+									that.cutPhoto();
+								},1000)
+							}
+						}
+						//that.savePause(true)
+			      }else{
+					  that.showVideo = 'block';
+					  $('#jeeFaceFilterCanvas2').hide();
+					  //that.$api.loadingMsg('请将人脸放置框中')
+					  that.errortext = '请将完整脸部对准屏幕中央';
+				  }
+			      
+			    }
+			  }); //end JEELIZFACEFILTER.init call
+			},
+			checkTrue(dump){
+				//return true;
+				var that = this;
+				var faceCoo = that.faceCoo;
+				var faceCooStr = JSON.stringify(faceCoo);
+				var detectState  = that.detectState;
+				if(!faceCoo || !detectState || detectState == '' || faceCoo == '')
+				{
+					return false;
+				}
+				var x = parseFloat(faceCoo.x).toFixed(2);
+				var y = parseFloat(faceCoo.y).toFixed(2);
+				var w = parseFloat(faceCoo.w).toFixed(2);
+				var h = parseFloat(faceCoo.h).toFixed(2);
+				var cw = parseFloat(CVD.canvas.width).toFixed(2);
+				var ch = parseFloat(CVD.canvas.height).toFixed(2);
+				var xcw = x/cw;
+				var ycw = y/ch;
+				if(xcw < 0.25 || xcw  > 0.5 || ycw > 0.45 || ycw < 0.1)
+				{
+					that.errortext = '请将完整脸部对准屏幕中央';
+				}else{
+					that.errortext = '';
+				}
+				if(that.errortext && that.errortext != '')
+				{
+					return false;
+				}
+				var faceMj = w * h  ;
+				var allMj = cw * ch;
+				var zhanbi = faceMj / allMj;
+				var mianjiObj = {
+					faceMj:faceMj,
+					zhanbi:zhanbi
+				}
+				var mianjiobj2 = {
+					cw:cw,
+					ch:ch,
+					allMj:allMj,
+				}
+				var mianjiStr = JSON.stringify(mianjiObj);
+				var mianjiStr2 = JSON.stringify(mianjiobj2);
+				if(zhanbi < 0.18)
+				{
+					that.errortext = '请离脸部近一点'
+				}else if(zhanbi > 0.28 )
+				{
+					that.errortext = '请离脸部远一点'
+				}else{
+					return true;
+				} 
+				return false;
+			},
+			cutPhoto(rectparams){
+				var that = this;
+				var check = that.checkTrue(true);
+				if(check == false)
+				{
+					that.savePause(false);
+					return ;
+				}
+				that.errortext = '拍照成功';
+				that.bgImgClass = 'home_wai remove_animation';
+				that.bgImgClass2 = 'home_nei remove_animation';
+				
+				that.showVideo = 'none';
+				//$('#jeeFaceFilterCanvas').hide();
+				$('#jeeFaceFilterCanvas2').show();
+				CVD.ctx.clearRect(0,0,CVD.canvas.width, CVD.canvas.height);
+				CVD.draw();
+				/* console.log('oldrect',JSON.stringify(rectparams))
+				var rectnew = this.opeRect(rectparams,'canvas',0.5);
+				console.log('cutPhoto',JSON.stringify(rectnew)) */
+				var clip = $('#jeeFaceFilterCanvas2')[0];
+				var context_clip = clip.getContext('2d');
+				/* var maxwidth = clip.width;
+				var ratio = parseFloat(maxwidth/this.vwidth).toFixed(3);
+				console.log(maxwidth,this.vwidth,ratio)
+				var rect = this.opeRect(rect,'clipImage',ratio);
+				console.log(rect); */
+				context_clip.drawImage(
+					$('#jeeFaceFilterCanvas')[0], //规定要使用的图像、画布或视频。
+					0,0, //开始剪切的 x 坐标位置。
+					CVD.canvas.width, CVD.canvas.height,  //被剪切图像的高度。
+					0, 0,//在画布上放置图像的 x 、y坐标位置。
+					this.vwidth,this.vwidth  //要使用的图像的宽度、高度
+				);
+				//context_clip.clearRect(0, 0, CVD.canvas.width, CVD.canvas.height);//清除画布
+				//位移来做镜像翻转
+				if(that.useCamera == 'qian')
+				{
+					//使用前置摄像头需要反转镜头
+					context_clip.translate(this.vwidth, 0);
+					context_clip.scale(-1, 1); //左右镜像翻转
+					//ctx.translate(0, 160 + posy * 2);
+					//ctx.scale(1, -1); //上下镜像翻转
+					context_clip.drawImage($('#jeeFaceFilterCanvas2')[0], 0, 0, this.vwidth, this.vwidth);
+				}
+				
+				this.imgUrl = clip.toDataURL("image/jpeg"); 
+				//this.uploadHeadImg
+				this.useImg();
+			},
+			useImg(){
+				this.imgSize();
+			},
+			imgSize(){
+				var that = this;
+				if (this.imgUrl) {
+				        	// 获取base64图片byte大小
+		        	const equalIndex = this.imgUrl.indexOf("="); // 获取=号下标
+		        	let size;
+			        if (equalIndex > 0) {
+			          const str = this.imgUrl.substring(0, equalIndex); // 去除=号
+			          const strLength = str.length;
+			          const fileLength = strLength - (strLength / 8) * 2; // 真实的图片byte大小
+			          size = Math.floor(fileLength / 1024); // 向下取整
+			        } else {
+			          const strLength = this.imgUrl.length;
+			          const fileLength = strLength - (strLength / 8) * 2;
+			          size = Math.floor(fileLength / 1024); // 向下取整
+			        }
+			        if (size >= 200) {
+			          	// 图片超过200k 重新再次压缩
+						this.imgUrl =  $('#jeeFaceFilterCanvas2')[0].toDataURL("image/jpeg", 0.8);
+						this.imgSize();
+			        }else{
+						that.faceOpeImg();
+					}
+		      	}
+			},
+			async faceOpeImg(){
+				var that = this;
+				//图片上传
+				// console.log(this.imgUrl)
+				// return
+				let data = { name: 'file', filePath: this.imgUrl };
+				uploadPhoto(data).then(response => {
+					var imgsur=response.fileName;
+					uni.$emit('refreshFace',imgsur)
+					uni.navigateBack({
+						delta:1
+					})
+					// http://10.90.90.53:8065/profile/upload/2025/03/20/1742462163358_20250320171603A001.jpeg
+					// that.datainfo.humanFaceData =  
+				});
+			},
+			async uplodImg(){
+				var that = this;
+				var imgRes = await Upload.uploadFileToQiniu([
+					{
+						path:that.imgUrl
+					}
+				],200);
+				uni.hideLoading();
+				if(imgRes.list && imgRes.list.length > 0)
+				{
+					var headimg = imgRes.list[0]; 
+				}else{
+					var headimg = '';
+				}
+				//that.uploadHeadImg = headimg; //保存用户上传到七牛的头像
+				if(headimg)
+				{
+					that.errortext = '上传图片成功';
+					uni.showModal({
+						title:'上传地址'+headimg
+					})
+					//that.$api.jeelizSetImg(headimg);
+					
+				}else{
+					that.errortext = '上传图片失败';
+					that.startVideoStatus = false;
+				}
+				//console.log(that.uploadHeadImg)
+			},
+			
 		}
+		
 	}
 </script>
 
 <style lang="scss" scoped>
-.facebox{min-height: 100vh;background: #ffffff;padding: 100rpx 0 130rpx; box-sizing: border-box;display: flex;flex-direction: column;}
+.facebox{min-height: 100vh;background: #ffffff;padding-top: 100rpx; box-sizing: border-box;display: flex;flex-direction: column;}
 .photitp{flex: 0 0 auto;margin-top: 40rpx;
 	image{width: 82rpx;height: 132rpx;}
 	view{font-weight: 500;font-size: 26rpx;color: #0391FD;margin-bottom: 40rpx;}
 }
+.faces{
+	width: 244px;height: 244px;margin: 0 auto;position: relative;padding:15px;
+	.lines{width: 244px;height: 244px;position: absolute;left:0rpx;top: 0rpx;}
+	.facevideo{border-radius: 50% !important;margin: 0 auto;}
+}
+.errortext{
+	width: 100%;
+	height: 40rpx;
+	line-height: 40rpx;
+	//color: #e03030;
+	color: #333333;
+	text-align: center;
+	font-size: 30rpx;
+}
+.button-view{
+	width: 100%;
+	margin-top:100rpx;
+	height: 80rpx;
+	display: -webkit-box; /* 老版本语法: Safari, iOS, Android browser, older WebKit browsers. */
+	  display: -moz-box; /* 老版本语法: Firefox (buggy) */
+	  display: -ms-flexbox; /* 混合版本语法: IE 10 */
+	
+	  display: -webkit-flex; /* 新版本语法: Chrome 21+ */
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	.click-button{
+		width: 90%;
+		height: 100%;
+		.button-btn{
+			border-radius:20rpx ;
+			width: 80%;
+			margin-left: 10%;
+			text-align: center;
+			height: 100%;
+			line-height: 80rpx;
+			font-size: 28rpx;
+			color: rgb(229, 81, 29);
+			    border-color: rgb(240, 202, 182);
+			    background: rgb(255, 228, 208);
+		}
+		.button-btn2{
+			    color: rgb(255, 255, 255);
+			    border-color: rgb(255, 68, 0);
+			    background: rgb(255, 68, 0);
+		}
+	}
+}
+
 </style>

+ 18 - 3
pages/order/staffcode.vue

@@ -79,6 +79,13 @@
 							<view class="tit"><text>补充事由</text>:</view>
 							<view class="txt">{{datainfo.visitRemark||''}}</view>
 						</view>
+						<view class="ctlist" v-if="datainfo.humanFaceData">
+							<view class="tit"><text>人脸信息</text>:</view>
+							<view class="imgs">
+								<!-- <image :src="baseUrl+datainfo.humanFaceData"></image> -->
+								<image class="faceimg" @click="getPreview(datainfo.humanFaceData,'face')" :src="baseUrl+datainfo.humanFaceData"></image>
+							</view>
+						</view>
 					</view>
 				</view> 
 			</view>
@@ -115,6 +122,7 @@
 	  components:{popUp,navBar,stepBar},
 	data(){
 		return{
+			baseUrl:config.baseUrl,
 			adrlist:[],
 			codeimg:require('@/static/images/order/comes/code.png'),
 			useimg:require('@/static/images/order/comes/use.png'),
@@ -234,9 +242,14 @@
 			});
 			
 		},
-		getPreview() {
+		getPreview(ite,type) {
 			var newArr=[];
-			var url=this.yy_code
+			var url='';
+			if(type=='face'){
+				url=this.baseUrl+ite
+			}else{
+				url=this.yy_code
+			}
 			newArr.push(url)
 			uni.previewImage({
 				urls: newArr,
@@ -331,7 +344,9 @@ color: $com-cd3;margin-bottom: 16rpx;}
 			&.btn3{background-color: #0391FD;color: #ffffff;margin-left: 30rpx;}
 		}
 	}
-
+.imgs{flex: 1;display: flex;justify-content: flex-end;
+	.faceimg{width: 100rpx;height: 100rpx;}
+}
 
 
 </style>

文件差异内容过多而无法显示
+ 1 - 0
static/collect_face/jquery.min.js


文件差异内容过多而无法显示
+ 1 - 0
static/collect_face/jquery2.3.js


+ 0 - 0
static/images/order/come/pic_mrrz_sbk.png → static/images/order/come/faceline.png


文件差异内容过多而无法显示
+ 1 - 0
static/js/collect_face/jquery.min.js


文件差异内容过多而无法显示
+ 1 - 0
static/js/collect_face/jquery2.3.js


+ 209 - 0
static/js/uni.webview.1.5.4.js

@@ -0,0 +1,209 @@
+! function(e, n) {
+	"object" == typeof exports && "undefined" != typeof module ? module.exports = n() : "function" == typeof define &&
+		define.amd ? define(n) : (e = e || self).uni = n()
+}(this, (function() {
+	"use strict";
+	try {
+		var e = {};
+		Object.defineProperty(e, "passive", {
+			get: function() {
+				!0
+			}
+		}), window.addEventListener("test-passive", null, e)
+	} catch (e) {}
+	var n = Object.prototype.hasOwnProperty;
+
+	function i(e, i) {
+		return n.call(e, i)
+	}
+	var t = [];
+
+	function r() {
+		return window.__dcloud_weex_postMessage || window.__dcloud_weex_
+	}
+	var o = function(e, n) {
+			var i = {
+				options: {
+					timestamp: +new Date
+				},
+				name: e,
+				arg: n
+			};
+			if (r()) {
+				if ("postMessage" === e) {
+					var o = {
+						data: [n]
+					};
+					return window.__dcloud_weex_postMessage ? window.__dcloud_weex_postMessage(o) : window
+						.__dcloud_weex_.postMessage(JSON.stringify(o))
+				}
+				var a = {
+					type: "WEB_INVOKE_APPSERVICE",
+					args: {
+						data: i,
+						webviewIds: t
+					}
+				};
+				window.__dcloud_weex_postMessage ? window.__dcloud_weex_postMessageToService(a) : window
+					.__dcloud_weex_.postMessageToService(JSON.stringify(a))
+			}
+			if (!window.plus) return window.parent.postMessage({
+				type: "WEB_INVOKE_APPSERVICE",
+				data: i,
+				pageId: ""
+			}, "*");
+			if (0 === t.length) {
+				var d = plus.webview.currentWebview();
+				if (!d) throw new Error("plus.webview.currentWebview() is undefined");
+				var s = d.parent(),
+					w = "";
+				w = s ? s.id : d.id, t.push(w)
+			}
+			if (plus.webview.getWebviewById("__uniapp__service")) plus.webview.postMessageToUniNView({
+				type: "WEB_INVOKE_APPSERVICE",
+				args: {
+					data: i,
+					webviewIds: t
+				}
+			}, "__uniapp__service");
+			else {
+				var u = JSON.stringify(i);
+				plus.webview.getLaunchWebview().evalJS('UniPlusBridge.subscribeHandler("'.concat(
+					"WEB_INVOKE_APPSERVICE", '",').concat(u, ",").concat(JSON.stringify(t), ");"))
+			}
+		},
+		a = {
+			navigateTo: function() {
+				var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
+					n = e.url;
+				o("navigateTo", {
+					url: encodeURI(n)
+				})
+			},
+			navigateBack: function() {
+				var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
+					n = e.delta;
+				o("navigateBack", {
+					delta: parseInt(n) || 1
+				})
+			},
+			switchTab: function() {
+				var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
+					n = e.url;
+				o("switchTab", {
+					url: encodeURI(n)
+				})
+			},
+			reLaunch: function() {
+				var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
+					n = e.url;
+				o("reLaunch", {
+					url: encodeURI(n)
+				})
+			},
+			redirectTo: function() {
+				var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
+					n = e.url;
+				o("redirectTo", {
+					url: encodeURI(n)
+				})
+			},
+			getEnv: function(e) {
+				r() ? e({
+					nvue: !0
+				}) : window.plus ? e({
+					plus: !0
+				}) : e({
+					h5: !0
+				})
+			},
+			postMessage: function() {
+				var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
+				o("postMessage", e.data || {})
+			}
+		},
+		d = /uni-app/i.test(navigator.userAgent),
+		s = /Html5Plus/i.test(navigator.userAgent),
+		w = /complete|loaded|interactive/;
+	var u = window.my && navigator.userAgent.indexOf(["t", "n", "e", "i", "l", "C", "y", "a", "p", "i", "l",
+		"A"].reverse().join("")) > -1;
+	var g = window.swan && window.swan.webView && /swan/i.test(navigator.userAgent);
+	var v = window.qq && window.qq.miniProgram && /QQ/i.test(navigator.userAgent) && /miniProgram/i.test(
+		navigator.userAgent);
+	var c = window.tt && window.tt.miniProgram && /toutiaomicroapp/i.test(navigator.userAgent);
+	var m = window.wx && window.wx.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/i
+		.test(navigator.userAgent);
+	var p = window.qa && /quickapp/i.test(navigator.userAgent);
+	var f = window.ks && window.ks.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/i
+		.test(navigator.userAgent);
+	var l = window.tt && window.tt.miniProgram && /Lark|Feishu/i.test(navigator.userAgent);
+	var _ = window.jd && window.jd.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/i
+		.test(navigator.userAgent);
+	var E = window.xhs && window.xhs.miniProgram && /xhsminiapp/i.test(navigator.userAgent);
+	for (var h, P = function() {
+			window.UniAppJSBridge = !0, document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady", {
+				bubbles: !0,
+				cancelable: !0
+			}))
+		}, b = [function(e) {
+			if (d || s) return window.__dcloud_weex_postMessage || window.__dcloud_weex_ ? document
+				.addEventListener("DOMContentLoaded", e) : window.plus && w.test(document
+					.readyState) ? setTimeout(e, 0) : document.addEventListener("plusready", e), a
+		}, function(e) {
+			if (m) return window.WeixinJSBridge && window.WeixinJSBridge.invoke ? setTimeout(e, 0) :
+				document.addEventListener("WeixinJSBridgeReady", e), window.wx.miniProgram
+		}, function(e) {
+			if (v) return window.QQJSBridge && window.QQJSBridge.invoke ? setTimeout(e, 0) : document
+				.addEventListener("QQJSBridgeReady", e), window.qq.miniProgram
+		}, function(e) {
+			if (u) {
+				document.addEventListener("DOMContentLoaded", e);
+				var n = window.my;
+				return {
+					navigateTo: n.navigateTo,
+					navigateBack: n.navigateBack,
+					switchTab: n.switchTab,
+					reLaunch: n.reLaunch,
+					redirectTo: n.redirectTo,
+					postMessage: n.postMessage,
+					getEnv: n.getEnv
+				}
+			}
+		}, function(e) {
+			if (g) return document.addEventListener("DOMContentLoaded", e), window.swan.webView
+		}, function(e) {
+			if (c) return document.addEventListener("DOMContentLoaded", e), window.tt.miniProgram
+		}, function(e) {
+			if (p) {
+				window.QaJSBridge && window.QaJSBridge.invoke ? setTimeout(e, 0) : document
+					.addEventListener("QaJSBridgeReady", e);
+				var n = window.qa;
+				return {
+					navigateTo: n.navigateTo,
+					navigateBack: n.navigateBack,
+					switchTab: n.switchTab,
+					reLaunch: n.reLaunch,
+					redirectTo: n.redirectTo,
+					postMessage: n.postMessage,
+					getEnv: n.getEnv
+				}
+			}
+		}, function(e) {
+			if (f) return window.WeixinJSBridge && window.WeixinJSBridge.invoke ? setTimeout(e, 0) :
+				document.addEventListener("WeixinJSBridgeReady", e), window.ks.miniProgram
+		}, function(e) {
+			if (l) return document.addEventListener("DOMContentLoaded", e), window.tt.miniProgram
+		}, function(e) {
+			if (_) return window.JDJSBridgeReady && window.JDJSBridgeReady.invoke ? setTimeout(e, 0) :
+				document.addEventListener("JDJSBridgeReady", e), window.jd.miniProgram
+		}, function(e) {
+			if (E) return window.xhs.miniProgram
+		}, function(e) {
+			return document.addEventListener("DOMContentLoaded", e), a
+		}], y = 0; y < b.length && !(h = b[y](P)); y++);
+	h || (h = {});
+	var B = "undefined" != typeof uni ? uni : {};
+	if (!B.navigateTo)
+		for (var S in h) i(h, S) && (B[S] = h[S]);
+	return B.webView = h, B
+}));

+ 145 - 0
static/neuralNets/JeelizCanvas2DHelper.js

@@ -0,0 +1,145 @@
+/*
+Usage: JeelizCanvas2DHelper(spec) where spec is the returned object of the initialization function (callbackReady)
+Return an object width these properties:
+
+ - canvas: the CANVAS element
+ - ctx: the canvas drawing context
+ - update_canvasTexture: function to launch each time the canvas has been updated (somethink has been drawn on it)
+ - draw: draw the video with the canvas above
+ - getCoordinates: transform the detectedState relative 2D viewport coords into canvas 2D pixel coordinates
+ - resize: to call if the HTML canvas size has changed
+*/
+
+const JeelizCanvas2DHelper = function(spec){
+
+  // some globalz:
+  let CV = null, CANVAS2D = null, CTX = null, GL = null, CANVASTEXTURE = null, CANVASTEXTURENEEDSUPDATE = null, SHADERCOPY = null, VIDEOTEXTURE = null;
+  let VIDEOTEXTURETRANSFORMMAT2 = null, UUVTRANSFORM = null;
+
+  const COORDINATES = {
+    x:0, y:0, s:0
+  };
+
+  //BEGIN WEBGL HELPERS
+  // compile a shader:
+  function compile_shader(source, glType, typeString) {
+    const glShader = GL.createShader(glType);
+    GL.shaderSource(glShader, source);
+    GL.compileShader(glShader);
+    if (!GL.getShaderParameter(glShader, GL.COMPILE_STATUS)) {
+      alert("ERROR IN " + typeString +  " SHADER: " + GL.getShaderInfoLog(glShader));
+      return null;
+    }
+    return glShader;
+  };
+
+  // helper function to build the shader program:
+  function build_shaderProgram(shaderVertexSource, shaderFragmentSource, id) {
+    // compile both shader separately:
+    const glShaderVertex = compile_shader(shaderVertexSource, GL.VERTEX_SHADER, "VERTEX " + id);
+    const glShaderFragment = compile_shader(shaderFragmentSource, GL.FRAGMENT_SHADER, "FRAGMENT " + id);
+
+    const glShaderProgram = GL.createProgram();
+    GL.attachShader(glShaderProgram, glShaderVertex);
+    GL.attachShader(glShaderProgram, glShaderFragment);
+
+    // start the linking stage:
+    GL.linkProgram(glShaderProgram);
+    return glShaderProgram;
+  }
+  //END WEBGL HELPERS
+
+
+  // affect some globalz:
+  GL = spec.GL;
+  CV = spec.canvasElement;
+  VIDEOTEXTURE = spec.videoTexture;
+  VIDEOTEXTURETRANSFORMMAT2 = spec.videoTransformMat2;
+
+  // create and size the 2D canvas and its drawing context:
+  CANVAS2D = document.createElement('canvas');
+  CANVAS2D.width = CV.width;
+  CANVAS2D.height = CV.height;
+  CTX = CANVAS2D.getContext('2d');
+    
+  // create the WebGL texture with the canvas:
+  CANVASTEXTURE = GL.createTexture();
+  GL.bindTexture(GL.TEXTURE_2D, CANVASTEXTURE);
+  GL.texImage2D(GL.TEXTURE_2D, 0, GL.RGBA, GL.RGBA, GL.UNSIGNED_BYTE, CANVAS2D);
+  GL.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR);
+  GL.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR);
+  GL.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_S, GL.CLAMP_TO_EDGE);
+  GL.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_T, GL.CLAMP_TO_EDGE);
+
+  // build the copy shader program:
+  const copyVertexShaderSource = "attribute vec2 position;\n\
+    uniform mat2 UVTransformMat2;\n\
+    varying vec2 vUV;\n\
+    void main(void){\n\
+      gl_Position = vec4(position, 0., 1.);\n\
+      vUV = vec2(0.5,0.5) + UVTransformMat2 * position;\n\
+    }";
+
+  const copyFragmentShaderSource = "precision lowp float;\n\
+    uniform sampler2D samplerImage;\n\
+    varying vec2 vUV;\n\
+    \n\
+    void main(void){\n\
+      gl_FragColor = texture2D(samplerImage, vUV);\n\
+    }";
+  SHADERCOPY = build_shaderProgram(copyVertexShaderSource, copyFragmentShaderSource, 'VIDEO');
+  const uSampler = GL.getUniformLocation(SHADERCOPY, 'samplerImage');
+  UUVTRANSFORM = GL.getUniformLocation(SHADERCOPY, 'UVTransformMat2');
+  GL.useProgram(SHADERCOPY);
+  GL.uniform1i(uSampler, 0);
+  
+  return {
+    canvas: CANVAS2D,
+    ctx: CTX,
+
+    update_canvasTexture: function(){
+      CANVASTEXTURENEEDSUPDATE = true;
+    },
+
+    draw: function(){ // draw the video and the canvas above
+      GL.viewport(0, 0, CV.width, CV.height);
+      GL.useProgram(SHADERCOPY);
+
+      // enable blending:
+      GL.enable(GL.BLEND);
+      GL.blendFunc(GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA);
+
+      // draw the video first:
+      GL.bindTexture(GL.TEXTURE_2D, VIDEOTEXTURE);
+      GL.uniformMatrix2fv(UUVTRANSFORM, false, VIDEOTEXTURETRANSFORMMAT2);
+      GL.drawElements(GL.TRIANGLES, 3, GL.UNSIGNED_SHORT, 0);
+
+      // then draw the canvas:
+      GL.bindTexture(GL.TEXTURE_2D, CANVASTEXTURE);
+      GL.uniformMatrix2fv(UUVTRANSFORM, false, [0.5, 0, 0, 0.5]);
+      if (CANVASTEXTURENEEDSUPDATE) {
+        GL.texImage2D(GL.TEXTURE_2D, 0, GL.RGBA, GL.RGBA, GL.UNSIGNED_BYTE, CANVAS2D);
+      }
+      GL.drawElements(GL.TRIANGLES, 3, GL.UNSIGNED_SHORT, 0);
+
+      GL.disable(GL.BLEND);      
+    },
+
+    getCoordinates: function(detectedState){
+      COORDINATES.x = Math.round((0.5+0.5*detectedState.x-0.5*detectedState.s)*CV.width);
+      COORDINATES.y = Math.round((0.5+0.5*detectedState.y-0.5*detectedState.s)*CV.height);
+      COORDINATES.w = Math.round(detectedState.s*CV.width);
+      COORDINATES.h = COORDINATES.w;
+      return COORDINATES;   
+    },
+
+    resize: function(){
+      CANVAS2D.width = CV.width;
+      CANVAS2D.height = CV.height;
+    }
+  }; //end Canvas2DDisplay return value
+} //end JeelizCanvas2DHelper()
+// const JeelizCanvas2DHelper = JeelizCanvas2DHelper();
+ if(typeof(module) !== 'undefined') {
+ 	module.exports = JeelizCanvas2DHelper;
+ }

文件差异内容过多而无法显示
+ 0 - 0
static/neuralNets/NN_DEFAULT.json


二进制
static/neuralNets/change_camera.png


二进制
static/neuralNets/img.png


二进制
static/neuralNets/img1.png


二进制
static/neuralNets/img2.png


二进制
static/neuralNets/img3.png


二进制
static/neuralNets/img4.png


二进制
static/neuralNets/img5.png


+ 5382 - 0
static/neuralNets/jeelizFaceFilter.js

@@ -0,0 +1,5382 @@
+/**
+ * Jeeliz Face Filter - https://github.com/jeeliz/jeelizFaceFilter
+ *
+ * Copyright 2020 WebAR.rocks ( https://webar.rocks )
+ *
+ * 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.
+*/
+
+var JEELIZFACEFILTER = (function() {
+    window.JEELIZFACEFILTERGEN = function() {
+        function Fb(a) {
+            var c = null
+              , d = null
+              , e = null
+              , g = 0;
+            this.o = function(m) {
+                this.Ff(m.pb);
+                e.we({
+                    pc: m.pc,
+                    mc: m.mc
+                })
+            }
+            ;
+            this.Se = function(m) {
+                return c[m]
+            }
+            ;
+            this.Ff = function(m) {
+                var t = null;
+                g = m.length;
+                c = m.map(function(p, q) {
+                    p = Object.assign({}, p, {
+                        index: q,
+                        parent: this,
+                        vb: t,
+                        ef: q === g - 1
+                    });
+                    return t = q = 0 === q ? Gb.instance(p) : Hb.instance(p)
+                });
+                d = c[0];
+                e = c[g - 1];
+                c.forEach(function(p, q) {
+                    0 !== q && p.vf()
+                })
+            }
+            ;
+            this.T = function(m) {
+                m.g(0);
+                var t = m;
+                c.forEach(function(p) {
+                    t = p.T(t, !1)
+                });
+                return t
+            }
+            ;
+            this.Re = function() {
+                return d.F()
+            }
+            ;
+            this.Vb = function() {
+                return e.Ue()
+            }
+            ;
+            this.gd = function() {
+                return e.gd()
+            }
+            ;
+            this.m = function() {
+                c && (c.forEach(function(m) {
+                    m.m()
+                }),
+                e = d = c = null,
+                g = 0)
+            }
+            ;
+            "undefined" !== typeof a && this.o(a)
+        }
+        function eb(a, c) {
+            var d = c % 8;
+            return a[(c - d) / 8] >> 7 - d & 1
+        }
+        function Ib(a) {
+            var c = JSON.parse(a);
+            a = c.ne;
+            var d = c.nf
+              , e = c.n;
+            var g = "undefined" === typeof btoa ? Buffer.from(c.data, "base64").toString("latin1") : atob(c.data);
+            var m = g.length;
+            c = new Uint8Array(m);
+            for (var t = 0; t < m; ++t)
+                c[t] = g.charCodeAt(t);
+            g = new Float32Array(e);
+            m = new Float32Array(d);
+            t = a + d + 1;
+            for (var p = 0; p < e; ++p) {
+                for (var q = t * p, u = 0 === eb(c, q) ? 1 : -1, r = q + 1, A = 1, v = 0, n = r + a - 1; n >= r; --n)
+                    v += A * eb(c, n),
+                    A *= 2;
+                r = v;
+                q = q + 1 + a;
+                A = m.length;
+                v = 0;
+                for (n = q; n < q + A; ++n)
+                    m[v] = eb(c, n, !0),
+                    ++v;
+                for (A = q = 0; A < d; ++A)
+                    q += m[A] * Math.pow(2, -A - 1);
+                g[p] = 0 === q && 0 === r ? 0 : u * (1 + q) * Math.pow(2, 1 + r - Math.pow(2, a - 1))
+            }
+            return g
+        }
+        function Ya() {
+            return -1 !== [ia.ready, ia.play, ia.pause].indexOf(na)
+        }
+        function fb() {
+            if (na === ia.play)
+                return !1;
+            na = ia.play;
+            Na.stop();
+            rb(0)
+        }
+        function sb() {
+            if (na !== ia.play)
+                return !1;
+            qa.stop();
+            Na.stop();
+            na = ia.pause;
+            return !0
+        }
+        function Ea(a, c, d, e, g) {
+            a = 4 * (3 * c + a) + d;
+            return e + (U.buffer[a] / 255 + U.buffer[a + 12] / 65025) * (g - e)
+        }
+        function gb() {
+            b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1);
+            Ha.Ye()
+        }
+        function Jb() {
+            var a = da.na();
+            va.O();
+            b.viewport(0, 0, 3, 2 * a);
+            D.set("s53");
+            U.ta.g(0);
+            T.l(!1, !1);
+            return aa.xb(0, 0, 3, 2 * a, U.buffer, tb)
+        }
+        function rb() {
+            na !== ia.pause && (ba.isCleanGLStateAtEachIteration && (D.Wc(),
+            T.reset(),
+            T.va(),
+            b.disable(b.DEPTH_TEST),
+            b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1),
+            D.Ca()),
+            qa.qc(Kb, Jb, Lb, tb, Mb, ba.animateProcessOrder))
+        }
+        function Kb() {
+            va.ca();
+            if (!G.kb)
+                if (G.jb)
+                    G.element.needsUpdate && (G.K.Sd(G.element.videoWidth, G.element.videoHeight),
+                    G.K.Db(G.element.arrayBuffer),
+                    G.element.needsUpdate = !1);
+                else {
+                    var a = G.element.currentTime
+                      , c = a - G.wb;
+                    0 > c && (G.wb = a,
+                    c = 0);
+                    1E3 * c < ea.Xf || (G.wb += c,
+                    G.K.refresh())
+                }
+            a = qa.Te();
+            da.update(a, Fa);
+            for (c = 0; c < a; ++c) {
+                da.Bb(c);
+                D.set("s55");
+                var d = Fa[da.hd()];
+                D.G("u43", 1 + Oa.rc * (Math.cos(d.ry) - 1));
+                Q.wa && D.G("u42", d.rz);
+                da.Yd("u41");
+                Z.Oa.$();
+                G.K.g(0);
+                U.ta.g(1);
+                T.l(!1, !1);
+                Pa.T(Z.Oa)
+            }
+            qa.Bb()
+        }
+        function tb() {
+            va.Uf();
+            ba.isCleanGLStateAtEachIteration && (va.reset(),
+            X.reset(),
+            b.enable(b.DEPTH_TEST));
+            Q.Gb && Q.Gb(da.yd() ? Fa : Fa[0]);
+            ba.isCleanGLStateAtEachIteration && (b.disable(b.BLEND),
+            T.reset(),
+            T.va())
+        }
+        function Lb() {
+            for (var a = 0; a < da.na(); ++a)
+                if (da.jf(a)) {
+                    var c = a
+                      , d = Sa[c]
+                      , e = [c]
+                      , g = Fa[c]
+                      , m = hb[c]
+                      , t = 2 * c;
+                    d.Xa = Ea(1, t, 3, 0, 1);
+                    g.detected = wa.X(g.detected, d.Xa, ea.ee);
+                    d.x = Ea(0, t, 1, -1, 1);
+                    d.y = Ea(0, t, 2, -1, 1);
+                    d.ja = Ea(0, t, 3, 0, 1);
+                    if (d.Xa < ba.multiDetectionThresholdFactors[0] * ba.threshold)
+                        d.qa = Math.floor(d.qa / 2),
+                        Q.wa && (g.rz = 0,
+                        g.ry = 0);
+                    else {
+                        var p = U.Qa;
+                        d.rx = Ea(1, t, 0, -p[0], p[0]);
+                        d.ry = Ea(1, t, 1, -p[1], p[1]);
+                        d.Ra = Ea(1, t, 2, -p[2], p[2]);
+                        for (p = 0; p < U.Y; ++p)
+                            d.cd[p] = U.Na[p](Ea(2, t, p, 0, 1));
+                        t = d.ja * U.Nd;
+                        e.dx = d.x - g.xRaw;
+                        e.dy = d.y - g.yRaw;
+                        e.Pb = t - g.sRaw;
+                        e.Mb = d.rx - g.rx;
+                        e.Nb = d.ry - g.ry;
+                        e.Ob = Q.wa ? d.Ra : d.Ra - g.rz;
+                        p = qa.Me();
+                        e = (1 - Za.qb(ra.translationFactorRange[0], ra.translationFactorRange[1], Math.sqrt(e.dx * e.dx + e.dy * e.dy + e.Pb * e.Pb) / p)) * (1 - Za.qb(ra.rotationFactorRange[0], ra.rotationFactorRange[1], Math.sqrt(e.Mb * e.Mb + e.Nb * e.Nb + e.Ob * e.Ob) / p)) * Za.qb(ra.qualityFactorRange[0], ra.qualityFactorRange[1], d.Xa);
+                        c = m[++ib[c] % m.length] = e;
+                        for (p = 0; p < m.length; ++p)
+                            c = Math.min(c, m[p]);
+                        c = Math.max(.5, c);
+                        e = Math.min(c, e);
+                        m = wa.X(ra.alphaRange[1], ra.alphaRange[0], Math.pow(e, ea.ge));
+                        g.xRaw = wa.X(g.xRaw, d.x, m);
+                        g.yRaw = wa.X(g.yRaw, d.y, m);
+                        g.sRaw = wa.X(g.sRaw, t, m);
+                        g.rx = wa.X(g.rx, d.rx, m);
+                        g.ry = wa.X(g.ry, d.ry, m);
+                        g.rz = Q.wa ? g.rz + ra.followZRotAlphaFactor * m * d.Ra : wa.X(g.rz, d.Ra, m);
+                        c = g.sRaw * Oa.Lb * Math.sin(g.ry);
+                        t = Math.sin(g.rz) * c / Qa;
+                        g.x = g.xRaw + Math.cos(g.rz) * c;
+                        g.y = g.yRaw + t;
+                        g.s = g.sRaw;
+                        m = Math.max(m, ea.fe);
+                        for (c = 0; c < U.Y; ++c)
+                            g.expressions[c] = wa.X(g.expressions[c], d.cd[c], m);
+                        ++d.qa
+                    }
+                }
+        }
+        function Mb() {
+            na === ia.play && Na.qc(rb)
+        }
+        function ub() {
+            Z.Oa = X.instance({
+                isPot: !0,
+                isFloat: !1,
+                width: Pa.Re()
+            });
+            var a = {
+                width: ea.Vd,
+                height: da.na(),
+                isFloat: !0,
+                isPot: !1,
+                array: da.Ce(new Float32Array([0, .5, .5, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
+            };
+            U.ta = Nb.instance(a)
+        }
+        function jb() {
+            D.S("s55", [{
+                type: "1i",
+                name: "u1",
+                value: 0
+            }, {
+                type: "1i",
+                name: "u39",
+                value: 1
+            }, {
+                type: "2f",
+                name: "u40",
+                value: Z.D
+            }, {
+                type: "1f",
+                name: "u41",
+                value: .5
+            }, {
+                type: "1f",
+                name: "u42",
+                value: 0
+            }]);
+            D.S("s56", [{
+                type: "1i",
+                name: "u44",
+                value: 0
+            }, {
+                type: "1i",
+                name: "u39",
+                value: 1
+            }, {
+                type: "1f",
+                name: "u47",
+                value: ea.Sf
+            }, {
+                type: "1f",
+                name: "u48",
+                value: ba.threshold
+            }, {
+                type: "3f",
+                name: "u46",
+                value: [U.N[0] * Z.D[0], U.N[1] * Z.D[1], U.N[2]]
+            }, {
+                type: "1f",
+                name: "u41",
+                value: .5
+            }, {
+                type: "1f",
+                name: "u49",
+                value: 1
+            }, {
+                type: "1f",
+                name: "u42",
+                value: 0
+            }]);
+            var a = [{
+                type: "1i",
+                name: "u44",
+                value: 0
+            }];
+            D.S("s57", a);
+            D.S("s58", a);
+            D.S("s53", [{
+                type: "1i",
+                name: "u39",
+                value: 0
+            }, {
+                type: "1f",
+                name: "u52",
+                value: Z.D[0]
+            }, {
+                type: "2f",
+                name: "u51",
+                value: [0, .5 / da.na()]
+            }])
+        }
+        function kb() {
+            Z.D[0] = 1;
+            Z.D[1] = Z.C / Z.L;
+            vb.o({
+                ub: ba.overlapFactors,
+                Ed: ba.nScaleLevels,
+                C: Z.C,
+                L: Z.L,
+                Md: ba.scale0Factor,
+                N: U.N,
+                Od: ba.scanCenterFirst
+            })
+        }
+        function Ob(a) {
+            if (Q.Fa)
+                wb("string" === typeof Q.Fa ? JSON.parse(Q.Fa) : Q.Fa, a);
+            else {
+                var c = Q.Gc;
+                "JSON" !== c.toUpperCase().split(".").pop() && (c += ea.neuralNetworkPath);
+                $a.get(c, function(d) {
+                    d = JSON.parse(d);
+                    wb(d, a)
+                })
+            }
+        }
+        function wb(a, c) {
+            if (a.exportData) {
+                var d = a.exportData;
+                d.rotationEulerAnglesFactors && (U.Qa = d.rotationEulerAnglesFactors);
+                if (d.translationScalingFactors) {
+                    var e = d.translationScalingFactors
+                      , g = ba.translationScalingFactors;
+                    U.N[0] = e[0] * g[0];
+                    U.N[1] = e[1] * g[1];
+                    U.N[2] = e[2] * g[2]
+                }
+                "undefined" !== typeof d.nExpressions && (U.Y = d.nExpressions);
+                U.Nd = d.dsMean ? 1 + d.dsMean : 1;
+                Oa.rc = .4;
+                Oa.Lb = .7;
+                "undefined" !== typeof d.fgScaleXFactor && (Oa.rc = d.fgScaleXFactor);
+                "undefined" !== typeof d.fgDisplaceXFactor && (Oa.Lb = d.fgDisplaceXFactor)
+            }
+            U.Y || (U.Y = ea.Dd);
+            if (!U.Na)
+                for (U.Na = [],
+                d = 0; d < U.Y; ++d)
+                    U.Na.push(ea.Ge);
+            c(a)
+        }
+        function Pb() {
+            if (Ha.o({
+                Wa: Q.da,
+                width: Z.C,
+                height: Z.L,
+                debug: !1,
+                lc: function() {
+                    Ia("GLCONTEXT_LOST")
+                },
+                antialias: Q.antialias,
+                premultipliedAlpha: !0
+            }))
+                return !0;
+            Ia("GL_INCOMPATIBLE");
+            return !1
+        }
+        function Qb() {
+            var a = da.hd()
+              , c = Fa[a];
+            U.ta.Df(1);
+            b.viewport(0, a, 1, 1);
+            D.set("s56");
+            Q.wa && D.G("u42", c.rz);
+            da.Yd("u41");
+            var d = 1
+              , e = da.Nf(Sa, Z.C / Z.L);
+            da.yd() && (e && (d = 0,
+            Sa[a].qa = 0,
+            c.isDetected = !1,
+            c.detected = 0),
+            D.G("u49", d));
+            D.Jf("u45", vb.get(a));
+            T.l(!1, !1);
+            if (da.xd() || e)
+                b.viewport(1, a, 1, 1),
+                D.set("s57"),
+                D.G("u49", d),
+                T.l(!1, !1);
+            da.xd() && (b.viewport(2, a, 1, 1),
+            D.set("s58"),
+            T.l(!1, !1));
+            U.ta.sync()
+        }
+        function xb() {
+            G.K && G.K.remove();
+            G.jb = G.element.isFakeVideo ? !0 : !1;
+            if (G.jb) {
+                var a = yb();
+                a = {
+                    isFlipY: !1,
+                    array: G.element.arrayBuffer,
+                    width: a.w,
+                    height: a.ya,
+                    isKeepArray: !0
+                }
+            } else
+                a = {
+                    H: G.element
+                };
+            G.vc = X.instance(Object.assign({
+                isPot: !1,
+                isLinear: !0,
+                isFloat: !1
+            }, a));
+            G.K = G.vc
+        }
+        function Ja() {
+            var a = [{
+                type: "mat2",
+                name: "u38",
+                value: G.v
+            }];
+            D.S("s54", [{
+                type: "1i",
+                name: "u1",
+                value: 0
+            }].concat(a));
+            D.S("s55", a)
+        }
+        function Ka() {
+            var a = [.5, .5]
+              , c = G.D[1] / G.D[0];
+            Qa = Ha.U() / Ha.F();
+            90 === Math.abs(pa.rotate) && (c = 1 / c);
+            c > Qa ? a[1] *= Qa / c : a[0] *= c / Qa;
+            D.S("s56", [{
+                name: "u50",
+                type: "1f",
+                value: Qa
+            }]);
+            G.v[0] = 0;
+            G.v[1] = 0;
+            G.v[2] = 0;
+            G.v[3] = 0;
+            switch (pa.rotate) {
+            case 0:
+                G.v[0] = a[0];
+                G.v[3] = a[1];
+                break;
+            case 180:
+                G.v[0] = -a[0];
+                G.v[3] = -a[1];
+                break;
+            case 90:
+                G.v[1] = a[0];
+                G.v[2] = -a[1];
+                break;
+            case -90:
+                G.v[1] = -a[0],
+                G.v[2] = a[1]
+            }
+            pa.flipX && (G.v[0] *= -1,
+            G.v[2] *= -1);
+            G.kb || (G.v[1] *= -1,
+            G.v[3] *= -1)
+        }
+        function yb() {
+            var a = {
+                w: G.element.videoWidth || G.element.width,
+                ya: G.element.videoHeight || G.element.height
+            };
+            if (!a.w || !a.ya || 4 > a.w || 4 > a.ya)
+                throw Error("INVALID VIDEO DIMENSIONS - width = " + a.w + " height = " + a.ya);
+            return a
+        }
+        function lb() {
+            var a = yb()
+              , c = G.D[0] !== a.w || G.D[1] !== a.ya;
+            c && (G.D[0] = a.w,
+            G.D[1] = a.ya);
+            return c
+        }
+        function ab(a, c) {
+            if (na === ia.error)
+                return !1;
+            G.element = a;
+            lb();
+            c && c();
+            return !0
+        }
+        function zb(a, c, d) {
+            a && a();
+            G.Ka = {
+                video: {
+                    facingMode: {
+                        exact: pa.facingMode
+                    },
+                    width: {
+                        min: pa.minWidth,
+                        max: pa.maxWidth,
+                        ideal: pa.idealWidth
+                    },
+                    height: {
+                        min: pa.minHeight,
+                        max: pa.maxHeight,
+                        ideal: pa.idealHeight
+                    }
+                },
+                audio: !1
+            };
+            V.Ic(G.Ka, pa.deviceId);
+            V.get(G.element ? G.element : V.ld(), function(e) {
+                c && c(e);
+                d(e)
+            }, function() {
+                Ia("WEBCAM_UNAVAILABLE")
+            }, G.Ka)
+        }
+        function Ia(a) {
+            na !== ia.error && (na = ia.error,
+            Q.Ja && Q.Ja(a))
+        }
+        var wa = {
+            Wg: function(a) {
+                return Math.ceil(Math.log2(a))
+            },
+            sh: function(a) {
+                return Math.log2(a)
+            },
+            oh: function(a) {
+                return 0 === Math.log2(a) % 1
+            },
+            hg: function(a) {
+                var c = [0, 0, 0, 0];
+                a.forEach(function(d) {
+                    c[0] += d[0];
+                    c[1] += d[1];
+                    c[2] += d[2];
+                    c[3] += d[3]
+                });
+                return c
+            },
+            ig: function(a, c, d) {
+                return Math.min(Math.max(a, c), d)
+            },
+            lg: function(a) {
+                return a * Math.PI / 180
+            },
+            yh: function(a, c) {
+                c = Math.pow(10, c);
+                return Math.round(a * c) / c
+            },
+            zh: function(a) {
+                return Math.round(1E6 * a) / 1E6
+            },
+            Xg: function(a, c) {
+                return (100 * a / c).toFixed(3)
+            },
+            X: function(a, c, d) {
+                return a * (1 - d) + c * d
+            },
+            th: function(a, c) {
+                return a[0] * (1 - c) + a[1] * c
+            },
+            Ae: function(a, c) {
+                return wa.se(a - c)
+            },
+            se: function(a) {
+                for (; a > Math.PI; )
+                    a -= 2 * Math.PI;
+                for (; a <= -Math.PI; )
+                    a += 2 * Math.PI;
+                return a
+            },
+            qg: function(a, c) {
+                return Math.abs(wa.Ae(a, c))
+            },
+            Yf: function(a, c) {
+                return Math.atan2(Math.sin(a) + Math.sin(c), Math.cos(a) + Math.cos(c))
+            }
+        }
+          , $a = {
+            get: function(a, c, d) {
+                var e = new XMLHttpRequest;
+                e.open("GET", a, !0);
+                e.withCredentials = !1;
+                e.onreadystatechange = function() {
+                    4 === e.readyState && (200 === e.status || 0 === e.status ? c(e.responseText) : "undefined" !== typeof d && d(e.status))
+                }
+                ;
+                e.send()
+            },
+            Ve: function(a) {
+                return new Promise(function(c, d) {
+                    $a.get(a, c, d)
+                }
+                )
+            },
+            Tg: function(a, c, d) {
+                a += d ? "?" + $a.Ee(d) : "";
+                $a.get(a, function(e) {
+                    c(JSON.parse(e))
+                })
+            },
+            vh: function(a, c, d) {
+                var e = new XMLHttpRequest;
+                e.open("POST", a, !0);
+                e.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+                e.onreadystatechange = function() {
+                    4 !== e.readyState || 200 !== e.status && 0 !== e.status || d(e.responseText)
+                }
+                ;
+                e.send(c)
+            },
+            Ee: function(a) {
+                return "string" === typeof a ? a : Object.keys(a).map(function(c) {
+                    return encodeURIComponent(c) + "=" + encodeURIComponent(a[c])
+                }).join("&")
+            },
+            Hg: function(a, c) {
+                var d = new XMLHttpRequest;
+                d.open("POST", a, !0);
+                d.responseType = "arraybuffer";
+                d.onload = function() {
+                    c(d.response)
+                }
+                ;
+                d.send()
+            }
+        }
+          , Rb = {
+            create: function(a, c) {
+                for (var d = Array(c), e = 0; e < c; ++e)
+                    d[e] = a;
+                return d
+            },
+            mg: function(a, c) {
+                for (var d = 0; d < a.length; ++d)
+                    c[d] = a[d]
+            },
+            clone: function(a) {
+                for (var c = Array(a.length), d = 0; d < a.length; ++d)
+                    c[d] = a[d];
+                return c
+            },
+            Ch: function(a, c, d) {
+                a.forEach(function(e, g) {
+                    c[g] = e * d
+                })
+            },
+            Lh: function(a) {
+                for (var c = a.length - 1; 0 < c; --c) {
+                    var d = Math.floor(Math.random() * (c + 1))
+                      , e = a[c];
+                    a[c] = a[d];
+                    a[d] = e
+                }
+            },
+            Nh: function(a) {
+                return a.sort(function(c, d) {
+                    return c - d
+                })
+            },
+            Rf: function(a) {
+                return Array.isArray(a) || a.constructor === Float32Array || a.constructor === Uint8Array
+            }
+        }
+          , mb = {
+            Jb: function(a, c) {
+                if (0 === c || "object" !== typeof a)
+                    return a;
+                a = Object.assign({}, a);
+                c = void 0 === c || -1 === c ? -1 : c - 1;
+                for (var d in a)
+                    a[d] = mb.Jb(a[d], c);
+                return a
+            },
+            pg: function(a) {
+                return JSON.parse(JSON.stringify(a))
+            }
+        }
+          , Za = {
+            Mh: function(a, c, d) {
+                a = Math.min(Math.max((d - a) / (c - a), 0), 1);
+                return a * a * (3 - 2 * a)
+            },
+            qb: function(a, c, d) {
+                return Math.min(Math.max((d - a) / (c - a), 0), 1)
+            },
+            Bg: function(a, c, d, e) {
+                return Math.pow(Math.min(Math.max((e - a) / (c - a), 0), 1), d)
+            },
+            Rh: function() {
+                return 0
+            },
+            uh: function() {
+                return 1
+            },
+            rh: function(a) {
+                return a
+            },
+            yg: function(a) {
+                return a * a
+            },
+            Dg: function(a) {
+                return a * (2 - a)
+            },
+            vg: function(a) {
+                return .5 > a ? 2 * a * a : -1 + (4 - 2 * a) * a
+            },
+            tg: function(a) {
+                return a * a * a
+            },
+            Cg: function(a) {
+                return --a * a * a + 1
+            },
+            ug: function(a) {
+                return .5 > a ? 4 * a * a * a : (a - 1) * (2 * a - 2) * (2 * a - 2) + 1
+            },
+            zg: function(a) {
+                return a * a * a * a
+            },
+            Eg: function(a) {
+                return 1 - --a * a * a * a
+            },
+            wg: function(a) {
+                return .5 > a ? 8 * a * a * a * a : 1 - 8 * --a * a * a * a
+            },
+            Ag: function(a) {
+                return a * a * a * a * a
+            },
+            Fg: function(a) {
+                return 1 + --a * a * a * a * a
+            },
+            xg: function(a) {
+                return .5 > a ? 16 * a * a * a * a * a : 1 + 16 * --a * a * a * a * a
+            }
+        }
+          , Sb = {
+            Ie: function(a, c, d) {
+                switch (a) {
+                case "relu":
+                    return d + "=max(vec4(0.,0.,0.,0.)," + c + ");";
+                case "elu":
+                    return d + "=mix(exp(-abs(" + c + "))-vec4(1.,1.,1.,1.)," + c + ",step(0.," + c + "));";
+                case "elu01":
+                    return d + "=mix(0.1*exp(-abs(" + c + "))-vec4(0.1,0.1,0.1,0.1)," + c + ",step(0.," + c + "));";
+                case "arctan":
+                    return d + "=atan(3.14159265359*texture2D(u0,vUV))/3.14159265359;";
+                case "copy":
+                    return "";
+                default:
+                    return !1
+                }
+            }
+        }
+          , D = function() {
+            function a(x, f, z) {
+                f = x.createShader(f);
+                x.shaderSource(f, z);
+                x.compileShader(f);
+                return x.getShaderParameter(f, x.COMPILE_STATUS) ? f : !1
+            }
+            function c(x, f, z) {
+                f = a(x, x.VERTEX_SHADER, f);
+                z = a(x, x.FRAGMENT_SHADER, z);
+                x === b && p.push(f, z);
+                var I = x.createProgram();
+                x.attachShader(I, f);
+                x.attachShader(I, z);
+                x.linkProgram(I);
+                return I
+            }
+            function d(x) {
+                return ["float", "sampler2D", "int"].map(function(f) {
+                    return "precision " + x + " " + f + ";\n"
+                }).join("")
+            }
+            function e(x, f) {
+                f.B = f.B ? !0 : !1;
+                if (!f.B) {
+                    f.ua = f.ua || "precision lowp float;attribute vec2 a0;varying vec2 vv0;void main(){gl_Position=vec4(a0,0.,1.),vv0=a0*.5+vec2(.5,.5);}";
+                    f.Va = f.Va || ["a0"];
+                    f.Ha = f.Ha || [2];
+                    f.precision = f.precision || v;
+                    f.id = r++;
+                    void 0 !== f.Qd && (f.Qd.forEach(function(h, C) {
+                        f.h = f.h.replace(h, f.yb[C])
+                    }),
+                    f.Qd.splice(0));
+                    f.Cc = 0;
+                    f.Ha.forEach(function(h) {
+                        f.Cc += 4 * h
+                    });
+                    var z = d(f.precision);
+                    f.ra = c(x, z + f.ua, z + f.h);
+                    f.A = {};
+                    f.i.forEach(function(h) {
+                        f.A[h] = x.getUniformLocation(f.ra, h)
+                    });
+                    f.attributes = {};
+                    f.Ia = [];
+                    f.Va.forEach(function(h) {
+                        var C = x.getAttribLocation(f.ra, h);
+                        f.attributes[h] = C;
+                        f.Ia.push(C)
+                    });
+                    if (f.j) {
+                        x.useProgram(f.ra);
+                        u = f;
+                        q = f.id;
+                        for (var I in f.j)
+                            x.uniform1i(f.A[I], f.j[I])
+                    }
+                    f.pa = !0
+                }
+            }
+            function g(x) {
+                xa.If(N);
+                q !== x.id && (N.P(),
+                q = x.id,
+                u = x,
+                b.useProgram(x.ra),
+                x.Ia.forEach(function(f) {
+                    0 !== f && b.enableVertexAttribArray(f)
+                }))
+            }
+            function m(x, f, z) {
+                e(x, f, z);
+                x.useProgram(f.ra);
+                x.enableVertexAttribArray(f.attributes.a0);
+                q = -1;
+                return u = f
+            }
+            function t() {
+                return {
+                    h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vv0);}",
+                    i: ["u1"],
+                    j: {
+                        u1: 0
+                    }
+                }
+            }
+            var p = []
+              , q = -1
+              , u = null
+              , r = 0
+              , A = !1
+              , v = "highp"
+              , n = ["u1"]
+              , y = ["u0"]
+              , E = {
+                u1: 0
+            }
+              , k = {
+                u0: 0
+            }
+              , M = {
+                u1: 0,
+                u2: 1
+            }
+              , H = {
+                u3: 0
+            }
+              , l = {
+                s0: t(),
+                s1: {
+                    h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vv0);}",
+                    i: n,
+                    j: E,
+                    precision: "lowp"
+                },
+                s2: {
+                    h: "uniform sampler2D u1,u2;varying vec2 vv0;void main(){vec4 a=texture2D(u2,vv0),b=texture2D(u1,vv0);gl_FragColor=a*b;}",
+                    i: ["u1", "u2"],
+                    j: M
+                },
+                s3: {
+                    h: "uniform sampler2D u1;uniform vec2 u4,u5;varying vec2 vv0;void main(){vec2 a=vv0*u4+u5;gl_FragColor=texture2D(u1,a);}",
+                    i: ["u1", "u4", "u5"],
+                    j: E,
+                    B: !0
+                },
+                s4: {
+                    h: "uniform sampler2D u1;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u1,vv0);gl_FragColor=a.r*f;}",
+                    i: n,
+                    j: E
+                },
+                s5: {
+                    h: "uniform sampler2D u1,u2;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u2,vv0),b=texture2D(u1,vv0);gl_FragColor=a.a*b.r*f;}",
+                    i: ["u1", "u2"],
+                    j: M
+                },
+                s6: {
+                    h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vec2(1.-vv0.x,vv0.y));}",
+                    i: n,
+                    j: E
+                },
+                s7: {
+                    h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vec2(vv0.x,1.-vv0.y));}",
+                    i: n,
+                    j: E
+                },
+                s8: {
+                    h: "uniform sampler2D u0;uniform float u4;varying vec2 vv0;void main(){vec4 a=texture2D(u0,vv0);gl_FragColor=a*u4;}",
+                    i: ["u0", "u4"],
+                    j: k
+                },
+                s9: {
+                    h: "uniform sampler2D u0;uniform float u4;varying vec2 vv0;const vec4 f=vec4(.25,.25,.25,.25),g=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0);float b=dot(a*u4,f);gl_FragColor=b*g;}",
+                    i: ["u0", "u4"],
+                    j: k
+                },
+                s10: {
+                    h: "uniform sampler2D u1;varying vec2 vv0;const vec4 e=vec4(1.,1.,1.,1.);void main(){float a=.25*dot(e,texture2D(u1,vv0));gl_FragColor=a*e;}",
+                    i: n,
+                    j: E
+                },
+                s11: {
+                    h: "uniform sampler2D u1,u6;uniform float u7;const vec4 f=vec4(1.,1.,1.,1.);varying vec2 vv0;void main(){vec4 a=texture2D(u1,vv0),b=texture2D(u6,vv0);gl_FragColor=mix(b,a,u7*f);}",
+                    i: ["u1", "u6", "u7"],
+                    j: {
+                        u1: 0,
+                        u6: 1
+                    }
+                },
+                s12: {
+                    h: "uniform sampler2D u1;uniform vec2 u8;varying vec2 vv0;void main(){gl_FragColor=.25*(texture2D(u1,vv0+u8)+texture2D(u1,vv0+u8*vec2(1.,-1.))+texture2D(u1,vv0+u8*vec2(-1.,-1.))+texture2D(u1,vv0+u8*vec2(-1.,1.)));}",
+                    i: ["u1", "u8"],
+                    j: E
+                },
+                s13: {
+                    h: "uniform sampler2D u1;uniform vec4 u9;varying vec2 vv0;float g(float a,float b){a=floor(a)+.5;return floor(a/exp2(b));}float h(float a,float b){return floor(a*exp2(b)+.5);}float i(float a,float b){return mod(a,h(1.,b));}float e(float c,float a,float b){a=floor(a+.5),b=floor(b+.5);return i(g(c,a),b-a);}vec4 j(float a){if(a==0.)return vec4(0.,0.,0.,0.);float k=128.*step(a,0.);a=abs(a);float c=floor(log2(a)),l=c+127.,b=(a/exp2(c)-1.)*8388608.,d=l/2.,m=fract(d)*2.,n=floor(d),o=e(b,0.,8.),p=e(b,8.,16.),q=m*128.+e(b,16.,23.),r=k+n;return vec4(o,p,q,r)/255.;}void main(){float a=dot(texture2D(u1,vv0),u9);gl_FragColor=j(a);}",
+                    i: ["u1", "u9"],
+                    j: E
+                },
+                s14: {
+                    h: "uniform sampler2D u0;varying vec2 vv0;const vec4 e=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0),b=e/(e+exp(-a));gl_FragColor=b;}",
+                    i: y,
+                    j: k,
+                    B: !0
+                },
+                s15: {
+                    h: "uniform sampler2D u0;varying vec2 vv0;const vec4 f=vec4(0.,0.,0.,0.);void main(){vec4 a=texture2D(u0,vv0);gl_FragColor=max(f,a);}",
+                    i: y,
+                    j: k
+                },
+                s16: {
+                    h: "uniform sampler2D u0;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0);gl_FragColor=mix(exp(-abs(a))-f,a,step(0.,a));}",
+                    i: y,
+                    j: k
+                },
+                s17: {
+                    h: "uniform sampler2D u0;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0),b=exp(-abs(a))-f;gl_FragColor=mix(.1*b,a,step(0.,a));}",
+                    i: y,
+                    j: k
+                },
+                s18: {
+                    h: "uniform sampler2D u0,u7,u10;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0),c=texture2D(u7,vv0),d=texture2D(u10,vv0),b=a/d;gl_FragColor=c*mix(exp(-abs(b))-f,b,step(0.,a));}",
+                    i: ["u0", "u7", "u10"],
+                    j: {
+                        u0: 0,
+                        u7: 1,
+                        u10: 2
+                    },
+                    B: !0
+                },
+                s19: {
+                    h: "uniform sampler2D u0;const float e=3.141593;varying vec2 vv0;void main(){gl_FragColor=atan(e*texture2D(u0,vv0))/e;}",
+                    i: y,
+                    j: k
+                },
+                s20: {
+                    h: "uniform sampler2D u0;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0),b=log(f+a);gl_FragColor=b;}",
+                    i: y,
+                    j: k,
+                    B: !0
+                },
+                s21: {
+                    h: "uniform sampler2D u0,u11;uniform float u12;const vec2 e=vec2(.5,.5);const float f=1e-5;const vec4 g=vec4(1.,1.,1.,1.),i=vec4(0.,0.,0.,0.);varying vec2 vv0;void main(){vec4 a=texture2D(u11,e);float b=u12*u12;vec4 c=max(b*a,f*g);gl_FragColor=texture2D(u0,vv0)/c;}",
+                    i: ["u0", "u11", "u12"],
+                    j: {
+                        u0: 0,
+                        u11: 1
+                    },
+                    B: !0
+                },
+                s22: {
+                    h: "uniform sampler2D u1;uniform vec2 u13;varying vec2 vv0;void main(){float a=u13.x*u13.y;vec2 b=floor(vv0*a)/a,c=fract(vv0*a),d=floor(b*u13.y),f=floor(u13.x*fract(b*u13.y)),g=(f*u13.y+d)/a;gl_FragColor=texture2D(u1,g+c/a);}",
+                    i: ["u1", "u13"],
+                    j: E
+                },
+                s23: {
+                    h: "uniform sampler2D u14,u15,u16;varying vec2 vv0;void main(){vec4 a=texture2D(u16,vv0);vec2 b=a.rg,c=a.ba;vec4 d=texture2D(u14,b),f=texture2D(u15,c);gl_FragColor=d*f;}",
+                    i: ["u14", "u15", "u16"],
+                    j: {
+                        u15: 0,
+                        u14: 1,
+                        u16: 2
+                    },
+                    B: !0
+                },
+                s24: {
+                    h: "uniform float u17;uniform sampler2D u14,u15;varying vec2 vv0;void main(){vec2 a=fract(vv0*u17);vec4 b=texture2D(u14,vv0),c=texture2D(u15,a);gl_FragColor=b*c;}",
+                    i: ["u15", "u14", "u17"],
+                    j: {
+                        u15: 0,
+                        u14: 1
+                    }
+                },
+                s25: {
+                    h: "uniform float u17;uniform sampler2D u14,u15,u18,u19,u20,u21;varying vec2 vv0;const vec4 e=vec4(1.,1.,1.,1.),g=vec4(1e-3,1e-3,1e-3,1e-3);void main(){vec2 h=vv0*u17,l=floor(h),c=h-l;vec4 m=texture2D(u14,vv0),d=texture2D(u15,c),a=texture2D(u21,vv0);a=a*255.;vec4 n=texture2D(u18,c),o=texture2D(u19,c),p=texture2D(u20,c),i=step(-g,-a),b=e-i,j=b*step(-e-g,-a);b*=e-j;vec4 k=b*step(-2.*e-g,-a);b*=e-k;vec4 q=b;d=i*d+j*n+k*o+q*p,gl_FragColor=m*d;}",
+                    i: "u14 u15 u17 u21 u18 u19 u20".split(" "),
+                    j: {
+                        u15: 0,
+                        u14: 1,
+                        u21: 3,
+                        u18: 4,
+                        u19: 5,
+                        u20: 6
+                    },
+                    B: !0
+                },
+                s26: {
+                    h: "uniform sampler2D u14,u15,u22;uniform float u17,u23,u24,u25;varying vec2 vv0;const vec2 j=vec2(1.,1.),k=vec2(0.,0.);void main(){vec2 b=floor(u23*vv0),c=u23*vv0-b;float d=u17/u23;vec2 f=floor(c*d),g=c*d-f,h=(b+g)/u23;float l=u23*u25/u17;vec2 m=l*f,a=(m+g*u24)/u25;a+=.25/u25;vec2 i=step(a,j)*step(k,a);vec4 n=texture2D(u14,h),o=texture2D(u15,a),p=n*o,q=texture2D(u22,h);gl_FragColor=(p*u24*u24+q)*i.x*i.y;}",
+                    i: "u14 u15 u17 u23 u24 u25 u22".split(" "),
+                    j: {
+                        u15: 0,
+                        u14: 1,
+                        u22: 2
+                    }
+                },
+                s27: {
+                    h: "uniform sampler2D u14,u15;varying vec2 vv0;void main(){vec4 a=texture2D(u14,vv0),b=texture2D(u15,vv0);gl_FragColor=a*b;}",
+                    i: ["u14", "u15"],
+                    j: {
+                        u15: 0,
+                        u14: 1
+                    },
+                    B: !0
+                },
+                s28: {
+                    h: "uniform sampler2D u1,u22;uniform float u26;varying vec2 vv0;void main(){gl_FragColor=texture2D(u22,vv0)+u26*texture2D(u1,vv0);}",
+                    i: ["u1", "u22", "u26"],
+                    j: {
+                        u1: 0,
+                        u22: 1
+                    }
+                },
+                s29: {
+                    h: "varying vec2 vv0;uniform sampler2D u1;const vec4 f=vec4(1.,1.,1.,1.),g=vec4(.299,.587,.114,0.);void main(){vec4 a=texture2D(u1,vv0);gl_FragColor=dot(a,g)*f;}",
+                    i: n,
+                    j: E,
+                    precision: "lowp"
+                },
+                s30: {
+                    h: "varying vec2 vv0;uniform sampler2D u1;uniform float u27;const vec3 f=vec3(.299,.587,.114);void main(){vec3 a=texture2D(u1,vv0).rgb,b=texture2D(u1,vv0+vec2(0.,u27)).rgb,c=texture2D(u1,vv0+vec2(u27,u27)).rgb,d=texture2D(u1,vv0+vec2(u27,0.)).rgb;gl_FragColor=vec4(dot(a,f),dot(b,f),dot(c,f),dot(d,f));}",
+                    i: ["u1", "u27"],
+                    j: E,
+                    precision: "lowp"
+                },
+                s31: {
+                    h: "varying vec2 vv0;uniform sampler2D u1;uniform float u27;const vec3 f=vec3(.299,.587,.114);void main(){vec3 a=texture2D(u1,vv0).rgb,b=texture2D(u1,vv0+vec2(0.,u27)).rgb,c=texture2D(u1,vv0+vec2(u27,u27)).rgb,d=texture2D(u1,vv0+vec2(u27,0.)).rgb;gl_FragColor=vec4(a.r,b.g,c.b,dot(d,f));}",
+                    i: ["u1", "u27"],
+                    j: E,
+                    precision: "lowp"
+                },
+                s32: {
+                    h: "varying vec2 vv0;uniform sampler2D u1,u2;uniform float u28;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=vec4(0.);a-=texture2D(u1,vec2(vv0.x-u28,vv0.y-u28))*1.,a-=texture2D(u1,vec2(vv0.x-u28,vv0.y))*2.,a-=texture2D(u1,vec2(vv0.x-u28,vv0.y+u28))*1.,a+=texture2D(u1,vec2(vv0.x+u28,vv0.y-u28))*1.,a+=texture2D(u1,vec2(vv0.x+u28,vv0.y))*2.,a+=texture2D(u1,vec2(vv0.x+u28,vv0.y+u28))*1.;vec4 b=vec4(0.);b-=texture2D(u1,vec2(vv0.x-u28,vv0.y-u28))*1.,b-=texture2D(u1,vec2(vv0.x,vv0.y-u28))*2.,b-=texture2D(u1,vec2(vv0.x+u28,vv0.y-u28))*1.,b+=texture2D(u1,vec2(vv0.x-u28,vv0.y+u28))*1.,b+=texture2D(u1,vec2(vv0.x,vv0.y+u28))*2.,b+=texture2D(u1,vec2(vv0.x+u28,vv0.y+u28))*1.;vec3 c=sqrt(a.rgb*a.rgb+b.rgb*b.rgb);vec4 e=vec4(c,texture2D(u1,vv0).a),g=texture2D(u2,vv0);gl_FragColor=g.a*e.r*f;}",
+                    i: ["u1", "u2", "u28"],
+                    j: M,
+                    B: !0
+                },
+                s33: {
+                    h: "varying vec2 vv0;uniform sampler2D u1,u2;uniform float u28;const vec4 j=vec4(1.,1.,1.,1.);const vec2 k=vec2(1.,1.);void main(){float h=0.;vec2 l=k*u28,a,b;float c,d,i=0.;for(float e=-4.;e<=4.;e+=1.)for(float f=-4.;f<=4.;f+=1.)a=vec2(e,f),c=length(a)/2.,d=exp(-c*c),b=vv0+l*a,h+=d*texture2D(u1,b).r,i+=d;vec4 m=texture2D(u2,vv0);gl_FragColor=m.a*(texture2D(u1,b).r-h/i)*j;}",
+                    i: ["u1", "u2", "u28"],
+                    j: M,
+                    B: !0
+                },
+                s34: {
+                    h: "uniform sampler2D u3;uniform vec2 u8;varying vec2 vv0;vec4 e(vec4 a,vec4 b){vec4 c=step(a,b);return mix(a,b,c);}const vec2 g=vec2(.5,.5),h=vec2(1.,0.),i=vec2(0.,1.);void main(){vec2 a=vv0-u8*g;vec4 b=texture2D(u3,a),c=texture2D(u3,a+u8*h),d=texture2D(u3,a+u8*i),j=texture2D(u3,a+u8),k=e(b,c),l=e(d,j);gl_FragColor=e(k,l);}",
+                    i: ["u3", "u8"],
+                    j: H
+                },
+                s35: {
+                    h: "uniform sampler2D u3;uniform vec2 u8;varying vec2 vv0;const vec2 k=vec2(1.,0.),l=vec2(0.,1.),m=vec2(2.,0.),n=vec2(0.,2.);vec4 e(vec4 a,vec4 b){vec4 c=step(a,b);return mix(a,b,c);}vec4 f(vec2 a){vec4 b=texture2D(u3,a),c=texture2D(u3,a+u8*k),d=texture2D(u3,a+u8*l),g=texture2D(u3,a+u8),h=e(b,c),i=e(d,g);return e(h,i);}void main(){vec2 a=vv0+u8*vec2(-.55,-1.05);vec4 b=f(a),c=f(a+u8*m),d=f(a+u8*2.),g=f(a+u8*n),h=e(b,c),i=e(d,g);gl_FragColor=e(h,i);}",
+                    i: ["u3", "u8"],
+                    j: H,
+                    B: !0
+                },
+                s36: {
+                    h: "uniform sampler2D u1;varying vec2 vv0;void main(){vec4 a=texture2D(u1,vv0);gl_FragColor=a*a;}",
+                    i: ["u1"],
+                    j: E,
+                    precision: "lowp",
+                    B: !0
+                },
+                s37: {
+                    h: "uniform sampler2D u1;uniform vec2 u8;varying vec2 vv0;const float e=15444.;void main(){vec4 a=1001./e*texture2D(u1,vv0-3.*u8)+2002./e*texture2D(u1,vv0-2.*u8)+3003./e*texture2D(u1,vv0-u8)+3432./e*texture2D(u1,vv0)+3003./e*texture2D(u1,vv0+u8)+2002./e*texture2D(u1,vv0+2.*u8)+1001./e*texture2D(u1,vv0+3.*u8);gl_FragColor=a;}",
+                    i: ["u8", "u1"],
+                    j: E,
+                    precision: "lowp",
+                    B: !0
+                },
+                s38: {
+                    h: "uniform sampler2D u1,u11,u29;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);const float g=.1;void main(){vec4 a=texture2D(u11,vv0),b=texture2D(u29,vv0),c=texture2D(u1,vv0),d=max(f*g,b-a*a),h=sqrt(d);gl_FragColor=(c-a)/h;}",
+                    i: ["u1", "u11", "u29"],
+                    j: {
+                        u1: 0,
+                        u11: 1,
+                        u29: 2
+                    },
+                    B: !0
+                }
+            }
+              , J = {
+                s39: {
+                    h: "uniform float u17,u30;uniform sampler2D u14,u15,u22;varying vec2 vv0;const vec2 ZERO2=vec2(0.,0.),ONE2=vec2(1.,1.),HALF2=vec2(.5,.5),EPS2=vec2(1e-5,1e-5);void main(){vec4 sum=texture2D(u22,vv0);float toSparsity=1.1111;vec2 uvFrom,uvWeight,xyPatch=ZERO2,eps2=EPS2/u17,xyTo=floor(vv0*u17+eps2);float weightSize=toSparsity*u17;vec2 halfFromSparsity=ONE2*(toSparsity-1.)/2.;for(float patch_x=0.;patch_x<1.1111;patch_x+=1.){xyPatch.x=patch_x;for(float patch_y=0.;patch_y<1.1111;patch_y+=1.)xyPatch.y=patch_y,uvFrom=(xyTo+HALF2+u30*(xyPatch-halfFromSparsity))/u17,uvFrom+=step(uvFrom,-eps2),uvFrom-=step(ONE2-eps2,uvFrom),uvWeight=(xyTo*toSparsity+xyPatch+HALF2)/weightSize,sum+=texture2D(u14,uvWeight)*texture2D(u15,uvFrom);}gl_FragColor=sum,gl_FragColor*=2.2222;}",
+                    i: ["u17", "u14", "u15", "u22", "u30"],
+                    yb: ["1.1111", "gl_FragColor\\*=2.2222;"]
+                },
+                s40: {
+                    h: "uniform float u17,u30,u25;uniform sampler2D u14,u15,u22;varying vec2 vv0;const vec2 ZERO2=vec2(0.,0.),ONE2=vec2(1.,1.),HALF2=vec2(.5,.5),EPS2=vec2(1e-4,1e-4);void main(){vec4 sum=texture2D(u22,vv0);float fromSparsity=1.1111,shrinkFactor=3.3333;vec2 uvFrom,uvWeight,xyFrom,xyPatchTo,xyPatch=ZERO2,xyShrink=ZERO2,eps2=EPS2/u25,xyTo=floor(vv0*u17+eps2);float weightSize=fromSparsity*u25;vec2 halfFromSparsity=ONE2*(fromSparsity-1.)/2.;float toSparsity=weightSize/u17;vec2 xyFrom0=xyTo*shrinkFactor;for(float patch_x=0.;patch_x<1.1111;patch_x+=1.){xyPatch.x=patch_x;for(float patch_y=0.;patch_y<1.1111;patch_y+=1.){xyPatch.y=patch_y;for(float shrink_x=0.;shrink_x<3.3333;shrink_x+=1.){xyShrink.x=shrink_x;for(float shrink_y=0.;shrink_y<3.3333;shrink_y+=1.)xyShrink.y=shrink_y,xyFrom=xyFrom0+xyShrink+shrinkFactor*u30*(xyPatch-halfFromSparsity),uvFrom=(xyFrom+HALF2)/u25,uvFrom+=step(uvFrom,-eps2),uvFrom-=step(ONE2-eps2,uvFrom),xyPatchTo=xyPatch*shrinkFactor+xyShrink,uvWeight=(xyTo*toSparsity+xyPatchTo+HALF2)/weightSize,sum+=texture2D(u14,uvWeight)*texture2D(u15,uvFrom);}}}gl_FragColor=sum,gl_FragColor*=2.2222;}",
+                    i: "u17 u25 u14 u15 u22 u30".split(" "),
+                    yb: ["1.1111", "gl_FragColor\\*=2.2222;", "3.3333"]
+                }
+            }
+              , w = null
+              , L = null
+              , N = {
+                nb: function() {
+                    return A
+                },
+                o: function() {
+                    if (!A) {
+                        w = mb.Jb(l, 2);
+                        L = mb.Jb(J, 2);
+                        v = "highp";
+                        b.getShaderPrecisionFormat && (b.getShaderPrecisionFormat(b.FRAGMENT_SHADER, b.MEDIUM_FLOAT),
+                        b.getShaderPrecisionFormat(b.FRAGMENT_SHADER, b.LOW_FLOAT));
+                        for (var x in w)
+                            e(b, w[x], x);
+                        D.set("s0");
+                        b.enableVertexAttribArray(0);
+                        A = !0
+                    }
+                },
+                Kc: function(x) {
+                    x.forEach(function(f) {
+                        N.Jc(f)
+                    })
+                },
+                Jc: function(x) {
+                    w[x.id] = x;
+                    e(b, x, x.id)
+                },
+                nd: function(x, f, z) {
+                    f || (f = x);
+                    w[f] = Object.create(L[x]);
+                    w[f].df = !0;
+                    L[x].yb && L[x].yb.forEach(function(I, h) {
+                        w[f].h = w[f].h.replace(new RegExp(I,"g"), z[h])
+                    });
+                    e(b, w[f], f)
+                },
+                set: function(x) {
+                    var f = w[x];
+                    f.B && (f.B = !1,
+                    e(b, f, x));
+                    g(f)
+                },
+                Sa: function(x) {
+                    return m(x, t(), "s41")
+                },
+                tc: function(x) {
+                    return m(x, {
+                        h: "void main(){gl_FragColor=vec4(.5,.5,.5,.5);}",
+                        i: [],
+                        precision: v
+                    }, "s42")
+                },
+                Fe: function(x) {
+                    return "undefined" === typeof w[x] ? !1 : w[x].pa
+                },
+                P: function() {
+                    -1 !== q && (q = -1,
+                    u.Ia.forEach(function(x) {
+                        0 !== x && b.disableVertexAttribArray(x)
+                    }))
+                },
+                uc: function() {
+                    var x = 0;
+                    u.Ia.forEach(function(f, z) {
+                        z = u.Ha[z];
+                        b.vertexAttribPointer(f, z, b.FLOAT, !1, u.Cc, x);
+                        x += 4 * z
+                    })
+                },
+                Wc: function() {
+                    b.enableVertexAttribArray(0)
+                },
+                Ca: function() {
+                    N.zb(b)
+                },
+                zb: function(x) {
+                    x.vertexAttribPointer(u.Ia[0], 2, x.FLOAT, !1, 8, 0)
+                },
+                Fh: function(x, f) {
+                    b.uniform1i(u.A[x], f)
+                },
+                G: function(x, f) {
+                    b.uniform1f(u.A[x], f)
+                },
+                sa: function(x, f, z) {
+                    b.uniform2f(u.A[x], f, z)
+                },
+                Gh: function(x, f) {
+                    b.uniform2fv(u.A[x], f)
+                },
+                Jf: function(x, f) {
+                    b.uniform3fv(u.A[x], f)
+                },
+                Hh: function(x, f, z, I) {
+                    b.uniform3f(u.A[x], f, z, I)
+                },
+                Kf: function(x, f, z, I, h) {
+                    b.uniform4f(u.A[x], f, z, I, h)
+                },
+                Td: function(x, f) {
+                    b.uniform4fv(u.A[x], f)
+                },
+                Ih: function(x, f) {
+                    b.uniformMatrix2fv(u.A[x], !1, f)
+                },
+                Jh: function(x, f) {
+                    b.uniformMatrix3fv(u.A[x], !1, f)
+                },
+                Kh: function(x, f) {
+                    b.uniformMatrix4fv(u.A[x], !1, f)
+                },
+                S: function(x, f) {
+                    N.set(x);
+                    f.forEach(function(z) {
+                        switch (z.type) {
+                        case "4f":
+                            b.uniform4fv(u.A[z.name], z.value);
+                            break;
+                        case "3f":
+                            b.uniform3fv(u.A[z.name], z.value);
+                            break;
+                        case "2f":
+                            b.uniform2fv(u.A[z.name], z.value);
+                            break;
+                        case "1f":
+                            b.uniform1f(u.A[z.name], z.value);
+                            break;
+                        case "1i":
+                            b.uniform1i(u.A[z.name], z.value);
+                            break;
+                        case "mat2":
+                            b.uniformMatrix2fv(u.A[z.name], !1, z.value);
+                            break;
+                        case "mat3":
+                            b.uniformMatrix3fv(u.A[z.name], !1, z.value);
+                            break;
+                        case "mat4":
+                            b.uniformMatrix4fv(u.A[z.name], !1, z.value)
+                        }
+                    })
+                },
+                Vg: function() {
+                    return "lowp"
+                },
+                m: function() {
+                    N.P();
+                    b.disableVertexAttribArray(0);
+                    for (var x in w) {
+                        var f = w[x];
+                        f.pa && (f.pa = !1,
+                        b.deleteProgram(f.ra));
+                        f.df && delete w[x]
+                    }
+                    p.forEach(function(z) {
+                        b.deleteShader(z)
+                    });
+                    p.splice(0);
+                    r = 0;
+                    A = !1;
+                    u = null;
+                    q = -1
+                }
+            };
+            return N
+        }()
+          , b = null
+          , Ha = function() {
+            function a(n) {
+                console.log("ERROR in ContextFF: ", n);
+                return !1
+            }
+            function c() {
+                return navigator.userAgent && -1 !== navigator.userAgent.indexOf("forceWebGL1")
+            }
+            function d(n) {
+                function y() {
+                    Ba.m();
+                    aa.reset();
+                    k.getExtension("WEBGL_lose_context").loseContext()
+                }
+                if (c())
+                    return !1;
+                var E = document.createElement("canvas");
+                E.setAttribute("width", 5);
+                E.setAttribute("height", 5);
+                var k = null;
+                try {
+                    k = E.getContext("webgl2", n)
+                } catch (M) {
+                    return !1
+                }
+                if (!k)
+                    return !1;
+                e(k);
+                aa.Xc(k);
+                n = aa.Kb(k);
+                if (!n.fa && !n.ha)
+                    return y(),
+                    !1;
+                n = Ba.Nc(k, n);
+                y();
+                return n ? !0 : !1
+            }
+            function e(n) {
+                n.clearColor(0, 0, 0, 0);
+                n.disable(n.DEPTH_TEST);
+                n.disable(n.BLEND);
+                n.disable(n.DITHER);
+                n.disable(n.STENCIL_TEST);
+                n.disable(n.CULL_FACE);
+                n.GENERATE_MIPMAP_HINT && n.hint(n.GENERATE_MIPMAP_HINT, n.FASTEST);
+                n.disable(n.SAMPLE_ALPHA_TO_COVERAGE);
+                n.disable(n.SAMPLE_COVERAGE);
+                n.depthFunc(n.LEQUAL);
+                n.clearDepth(1)
+            }
+            var g = null
+              , m = null
+              , t = null
+              , p = null
+              , q = !0
+              , u = null
+              , r = null
+              , A = []
+              , v = {
+                F: function() {
+                    return g.width
+                },
+                U: function() {
+                    return g.height
+                },
+                Mg: function() {
+                    return g
+                },
+                Kg: function() {
+                    return b
+                },
+                ia: function() {
+                    return q
+                },
+                flush: function() {
+                    b.flush()
+                },
+                Ye: function() {
+                    va.ca();
+                    X.reset();
+                    T.reset();
+                    D.P();
+                    D.Wc();
+                    b.disable(b.DEPTH_TEST);
+                    b.disable(b.BLEND);
+                    T.va();
+                    D.Ca()
+                },
+                Le: function() {
+                    u || (u = new Uint8Array(g.width * g.height * 4));
+                    b.readPixels(0, 0, g.width, g.height, b.RGBA, b.UNSIGNED_BYTE, u);
+                    return u
+                },
+                Og: function() {
+                    return g.toDataURL("image/jpeg")
+                },
+                Pg: function() {
+                    va.O();
+                    m || (m = document.createElement("canvas"),
+                    t = m.getContext("2d"));
+                    m.width = g.width;
+                    m.height = g.height;
+                    for (var n = v.Le(), y = t.createImageData(m.width, m.height), E = m.width, k = m.height, M = y.data, H = 0; H < k; ++H)
+                        for (var l = k - H - 1, J = 0; J < E; ++J) {
+                            var w = 4 * (H * E + J)
+                              , L = 4 * (l * E + J);
+                            M[w] = n[L];
+                            M[w + 1] = n[L + 1];
+                            M[w + 2] = n[L + 2];
+                            M[w + 3] = n[L + 3]
+                        }
+                    t.putImageData(y, 0, 0);
+                    return m.toDataURL("image/png")
+                },
+                Ng: function(n) {
+                    !m && n && (m = document.createElement("canvas"),
+                    t = m.getContext("2d"));
+                    var y = n ? m : document.createElement("canvas");
+                    y.width = g.width;
+                    y.height = g.height;
+                    (n ? t : y.getContext("2d")).drawImage(g, 0, 0);
+                    return y
+                },
+                o: function(n) {
+                    n = Object.assign({
+                        ga: null,
+                        lc: null,
+                        Wa: null,
+                        Tc: null,
+                        width: 512,
+                        height: 512,
+                        premultipliedAlpha: !1,
+                        bf: !0,
+                        antialias: !1,
+                        debug: !1,
+                        og: !1
+                    }, n);
+                    n.ga ? (b = n.ga,
+                    g = n.ga.canvas) : n.Tc && !n.Wa ? g = document.getElementById(n.Tc) : n.Wa && (g = n.Wa);
+                    g || (g = document.createElement("canvas"));
+                    g.width = n.width;
+                    g.height = n.height;
+					
+                    if (b)
+                        q = b instanceof WebGL2RenderingContext;
+                    else {
+                        q = !0;
+                        var y = {
+                            antialias: n.antialias,
+                            alpha: !0,
+                            preserveDrawingBuffer: !0,
+                            premultipliedAlpha: n.premultipliedAlpha,
+                            stencil: !1,
+                            depth: n.bf,
+                            failIfMajorPerformanceCaveat: !0,
+                            powerPreference: "high-performance"
+                        };
+						var E = document.createElement("canvas");
+						                    E.setAttribute("width", 500);
+						                    E.setAttribute("height", 500);
+						                    /* var k = null;
+						                    try {
+						                        k = E.getContext("webgl2", n)
+						                    } catch (M) {
+						                        return !1
+						                    } */
+											console.log(E,g)
+											
+											console.log(n)
+											console.log(E.getContext("webgl", n))
+											console.log(n)
+											console.log(g.getContext("webgl", y))
+											console.log(g.getContext("webgl2", y))
+											console.log(g.getContext("experimental-webgl", y))
+                        navigator && navigator.userAgent && -1 !== navigator.userAgent.indexOf("noAntialiasing") && (y.antialias = !1);
+                        var E = d(y);
+						//console.log(g)
+                        E || !y.antialias || c() || (y.antialias = !1,
+                        E = d(y));
+                        E && (b = g.getContext("webgl2", y));
+                        b ? q = !0 : ((b = g.getContext("webgl", y)) || (b = g.getContext("experimental-webgl", y)),
+                        q = !1)
+						
+                    }
+                    if (!b)
+                        return a("WebGL1 and 2 are not enabled");
+                    n.lc && g.addEventListener && (p = b.getExtension("WEBGL_lose_context")) && (r = n.lc,
+                    g.addEventListener("webglcontextlost", r, !1));
+                    if (!aa.o())
+                        return a("Not enough GL capabilities");
+                    e(b);
+                    D.o();
+                    T.o();
+                    Ba.Nc(b, aa.Ke());
+                    A.forEach(function(k) {
+                        k(b)
+                    });
+                    A.splice(0);
+                    return !0
+                },
+                dg: function() {
+                    return new Promise(function(n) {
+                        b ? n(b) : A.push(n)
+                    }
+                    )
+                },
+                m: function() {
+                    b && (aa.m(),
+                    D.m(),
+                    Ba.m());
+                    p && r && (g.removeEventListener("webglcontextlost", r, !1),
+                    p = r = null);
+                    b = u = t = m = g = null;
+                    A.splice(0)
+                }
+            };
+            return v
+        }()
+          , xa = function() {
+            function a() {
+                null === c && ("undefined" !== typeof D ? c = D : "undefined" !== typeof JEShaders && (c = JEShaders))
+            }
+            var c = null;
+            return {
+                reset: function() {
+                    c = null
+                },
+                If: function(d) {
+                    c !== d && (c && c.P(),
+                    c = d)
+                },
+                nb: function() {
+                    return c.nb()
+                },
+                Ca: function() {
+                    return c.Ca()
+                },
+                zb: function(d) {
+                    return c.zb(d)
+                },
+                uc: function() {
+                    return c.uc()
+                },
+                P: function() {
+                    return c.P()
+                },
+                set: function(d) {
+                    a();
+                    return c.set(d)
+                },
+                Sa: function(d) {
+                    a();
+                    return c.Sa(d)
+                },
+                tc: function(d) {
+                    a();
+                    return c.tc(d)
+                }
+            }
+        }()
+          , Aa = function() {
+            function a(h) {
+                b.bindTexture(b.TEXTURE_2D, h)
+            }
+            function c(h) {
+                x[0] = h;
+                h = f[0];
+                var C = h >> 16 & 32768
+                  , K = h >> 12 & 2047
+                  , O = h >> 23 & 255;
+                return 103 > O ? C : 142 < O ? C | 31744 | ((255 == O ? 0 : 1) && h & 8388607) : 113 > O ? (K |= 2048,
+                C | (K >> 114 - O) + (K >> 113 - O & 1)) : C = (C | O - 112 << 10 | K >> 1) + (K & 1)
+            }
+            function d(h) {
+                var C = new Uint16Array(h.length);
+                h.forEach(function(K, O) {
+                    C[O] = c(K)
+                });
+                return C
+            }
+            function e() {
+                if (null !== z.Xb)
+                    return z.Xb;
+                var h = m(d([.5, .5, .5, .5]), !0);
+                return null === h ? !0 : z.Xb = h
+            }
+            function g() {
+                if (null !== z.Yb)
+                    return z.Yb;
+                var h = m(new Uint8Array([127, 127, 127, 127]), !1);
+                return null === h ? !0 : z.Yb = h
+            }
+            function m(h, C) {
+                if (!xa.nb() || !E)
+                    return null;
+                var K = null
+                  , O = Math.sqrt(h.length / 4);
+                try {
+                    var Y = b.getError();
+                    if ("FUCKING_BIG_ERROR" === Y)
+                        return !1;
+                    K = I.instance({
+                        isFloat: !1,
+                        R: C,
+                        array: h,
+                        width: O
+                    });
+                    Y = b.getError();
+                    if (Y !== b.NO_ERROR)
+                        return !1
+                } catch (oa) {
+                    return !1
+                }
+                la.O();
+                b.viewport(0, 0, O, O);
+                b.clearColor(0, 0, 0, 0);
+                b.clear(b.COLOR_BUFFER_BIT);
+                xa.set("s0");
+                K.Lc(0);
+                ma.l(!0, !0);
+                h = 4 * O * O;
+                C = new Uint8Array(h);
+                b.readPixels(0, 0, O, O, b.RGBA, b.UNSIGNED_BYTE, C);
+                O = !0;
+                for (Y = 0; Y < h; ++Y)
+                    O = O && 3 > Math.abs(C[Y] - 127);
+                K.remove();
+                la.ca();
+                return O
+            }
+            var t = 0
+              , p = null
+              , q = 0
+              , u = null
+              , r = null
+              , A = null
+              , v = null
+              , n = null
+              , y = null
+              , E = !1
+              , k = []
+              , M = {
+                isFloat: !1,
+                isPot: !0,
+                isLinear: !1,
+                isMipmap: !1,
+                isAnisotropicFiltering: !1,
+                isMirrorX: !1,
+                isMirrorY: !1,
+                isSrgb: !1,
+                isKeepArray: !1,
+                isFlipY: null,
+                width: 0,
+                height: 0,
+                url: null,
+                array: null,
+                data: null,
+                H: null,
+                Wb: null,
+                cf: !1,
+                R: !1,
+                ma: null,
+                sb: 4,
+                ec: 0
+            }
+              , H = !1
+              , l = null
+              , J = null
+              , w = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
+              , L = !1
+              , N = !1
+              , x = new Float32Array(1)
+              , f = new Int32Array(x.buffer)
+              , z = {
+                Xb: null,
+                Yb: null
+            }
+              , I = {
+                o: function() {
+                    E || (n = [b.RGBA, null, b.RGBA, b.RGBA],
+                    y = [b.RGBA, null, b.RGBA, b.RGBA],
+                    p = [b.TEXTURE0, b.TEXTURE1, b.TEXTURE2, b.TEXTURE3, b.TEXTURE4, b.TEXTURE5, b.TEXTURE6, b.TEXTURE7],
+                    L = "undefined" !== typeof JEContext,
+                    N = "undefined" !== typeof aa,
+                    L && JEContext.ph() && p.push(b.TEXTURE8, b.TEXTURE9),
+                    u = [-1, -1, -1, -1, -1, -1, -1, -1],
+                    v = [b.UNSIGNED_BYTE, b.FLOAT, b.FLOAT],
+                    E = !0)
+                },
+                Ze: function() {
+                    if (!r) {
+                        for (var h = new Float32Array(16384), C = 0; 16384 > C; ++C)
+                            h[C] = 2 * Math.random() - 1;
+                        r = {
+                            random: I.instance({
+                                isFloat: !0,
+                                isPot: !0,
+                                array: h,
+                                width: 64
+                            }),
+                            ae: I.instance({
+                                isFloat: !1,
+                                isPot: !0,
+                                width: 1,
+                                array: new Uint8Array([0, 0, 0, 0])
+                            })
+                        }
+                    }
+                    I.Wf()
+                },
+                eh: function() {
+                    return r.ae
+                },
+                Wf: function() {
+                    v[1] = aa.Tb(b)
+                },
+                Gf: function() {
+                    y = n = [b.RGBA, b.RGBA, b.RGBA, b.RGBA]
+                },
+                Ld: function(h) {
+                    D.set("s1");
+                    la.O();
+                    var C = h.F()
+                      , K = h.U();
+                    b.viewport(0, 0, C, K);
+                    h.g(0);
+                    ma.l(!1, !1)
+                },
+                wh: function(h, C) {
+                    I.Ld(h);
+                    b.readPixels(0, 0, h.F(), h.U(), b.RGBA, b.UNSIGNED_BYTE, C)
+                },
+                xh: function(h, C) {
+                    I.Ld(h);
+                    return aa.xb(0, 0, h.F(), h.U(), C)
+                },
+                ed: function(h, C, K, O, Y, oa, sa) {
+                    h.activeTexture(h.TEXTURE0);
+                    var Ca = h.createTexture();
+                    h.bindTexture(h.TEXTURE_2D, Ca);
+                    Y = Y instanceof Float32Array ? Y : new Float32Array(Y);
+                    h.texParameteri(h.TEXTURE_2D, h.TEXTURE_WRAP_S, h.CLAMP_TO_EDGE);
+                    h.texParameteri(h.TEXTURE_2D, h.TEXTURE_WRAP_T, h.CLAMP_TO_EDGE);
+                    h.texParameteri(h.TEXTURE_2D, h.TEXTURE_MAG_FILTER, h.NEAREST);
+                    h.texParameteri(h.TEXTURE_2D, h.TEXTURE_MIN_FILTER, h.NEAREST);
+                    h.pixelStorei(h.UNPACK_FLIP_Y_WEBGL, oa);
+                    h.texImage2D(h.TEXTURE_2D, 0, h.RGBA, K, O, 0, h.RGBA, h.FLOAT, Y);
+                    h.bindTexture(h.TEXTURE_2D, null);
+                    h.pixelStorei(h.UNPACK_FLIP_Y_WEBGL, !1);
+                    sa && (la.ca(),
+                    D.Sa(h));
+                    h.viewport(0, 0, K, O);
+                    h.framebufferTexture2D(h.FRAMEBUFFER, h.COLOR_ATTACHMENT0, h.TEXTURE_2D, C, 0);
+                    h.bindTexture(h.TEXTURE_2D, Ca);
+                    sa ? ma.l(!0, !0) : T.bb(h);
+                    h.deleteTexture(Ca);
+                    E && (u[0] = -1,
+                    A = null,
+                    t = 0)
+                },
+                Fb: function(h) {
+                    h !== t && (b.activeTexture(p[h]),
+                    t = h)
+                },
+                instance: function(h) {
+                    var C;
+                    function K() {
+                        R = void 0 !== B.H.videoWidth ? B.H.videoWidth : B.H.width;
+                        S = void 0 !== B.H.videoHeight ? B.H.videoHeight : B.H.height
+                    }
+                    function O(F) {
+                        var P = b.getError();
+                        if ("FUCKING_BIG_ERROR" === P)
+                            return !1;
+                        b.texImage2D(b.TEXTURE_2D, 0, ja, fa, ha, F);
+                        P = b.getError();
+                        P !== b.NO_ERROR && fa !== b.RGBA && (fa = b.RGBA,
+                        b.texImage2D(b.TEXTURE_2D, 0, ja, fa, ha, F));
+                        return !0
+                    }
+                    function Y() {
+                        if (!Ab) {
+                            a(ta);
+                            za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, za);
+                            B.isPot ? (b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_S, B.isMirrorX ? b.MIRRORED_REPEAT : b.REPEAT),
+                            b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_T, B.isMirrorY ? b.MIRRORED_REPEAT : b.REPEAT)) : (b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_S, b.CLAMP_TO_EDGE),
+                            b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_T, b.CLAMP_TO_EDGE));
+                            B.isAnisotropicFiltering && "undefined" !== typeof JESETTINGS && b.texParameterf(b.TEXTURE_2D, JEContext.Qg().TEXTURE_MAX_ANISOTROPY_EXT, JESETTINGS.$f);
+                            b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MAG_FILTER, B.isLinear ? b.LINEAR : b.NEAREST);
+                            B.isLinear ? b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MIN_FILTER, B.isMipmap && !La ? b.NEAREST_MIPMAP_LINEAR : b.LINEAR) : b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MIN_FILTER, B.isMipmap && !La ? b.NEAREST_MIPMAP_NEAREST : b.NEAREST);
+                            fa = n[B.sb - 1];
+                            ja = y[B.sb - 1];
+                            ha = v[nb];
+                            if (aa.ia()) {
+                                var F = aa.Ne();
+                                fa === b.RGBA && ha === b.FLOAT ? B.isMipmap || B.isLinear ? ja = Ba.Pe(b) : aa.Oc() ? F && (ja = F) : ja = b.RGBA16F || b.RGBA : fa === b.RGB && ha === b.FLOAT && F && (ja = F,
+                                fa = b.RGBA)
+                            }
+                            if (B.R && !B.isFloat || B.isFloat && B.isMipmap && Ba.hf())
+                                ja = aa.Oe(),
+                                ha = aa.Tb(b);
+                            B.ec && (bb = B.ec);
+                            B.isSrgb && 4 === B.sb && (fa = JEContext.bh());
+                            if (B.H)
+                                O(B.H);
+                            else if (B.url)
+                                O(Ga);
+                            else if (ua) {
+                                F = ua;
+                                try {
+                                    "FUCKING_BIG_ERROR" !== b.getError() && (b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, F),
+                                    b.getError() !== b.NO_ERROR && (b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, null),
+                                    b.getError() !== b.NO_ERROR && b.texImage2D(b.TEXTURE_2D, 0, b.RGBA, R, S, 0, b.RGBA, b.UNSIGNED_BYTE, null)))
+                                } catch (ec) {
+                                    b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, null)
+                                }
+                                B.isKeepArray || (ua = null)
+                            } else
+                                F = b.getError(),
+                                "FUCKING_BIG_ERROR" !== F && (b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, null),
+                                F = b.getError(),
+                                F !== b.NO_ERROR && (fa = b.RGBA,
+                                B.R && ha !== b.FLOAT && (ha = b.FLOAT,
+                                b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, null))));
+                            if (B.isMipmap)
+                                if (!La && ca)
+                                    ca.Sb(),
+                                    cb = !0;
+                                else if (La) {
+                                    F = Math.log2(Math.min(R, S));
+                                    Ra = Array(1 + F);
+                                    Ra[0] = ta;
+                                    for (var P = 1; P <= F; ++P) {
+                                        var ka = Math.pow(2, P)
+                                          , W = R / ka;
+                                        ka = S / ka;
+                                        var Ma = b.createTexture();
+                                        a(Ma);
+                                        b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MIN_FILTER, b.NEAREST);
+                                        b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MAG_FILTER, b.NEAREST);
+                                        b.texImage2D(b.TEXTURE_2D, 0, ja, W, ka, 0, fa, ha, null);
+                                        a(null);
+                                        Ra[P] = Ma
+                                    }
+                                    cb = !0
+                                }
+                            a(null);
+                            u[t] = -1;
+                            za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1);
+                            Ta = !0;
+                            B.ma && ca && (B.ma(ca),
+                            B.ma = null)
+                        }
+                    }
+                    function oa() {
+                        for (var F = R * S, P = 2 * F, ka = 3 * F, W = 0; W < F; ++W)
+                            ya[0][W] = Ua[W],
+                            ya[1][W] = Ua[W + F],
+                            ya[2][W] = Ua[W + P],
+                            ya[3][W] = Ua[W + ka]
+                    }
+                    function sa() {
+                        var F = R * S * 4;
+                        Da = [new Uint8Array(F), new Uint8Array(F), new Uint8Array(F), new Uint8Array(F)];
+                        ya = [new Float32Array(Da[0].buffer), new Float32Array(Da[1].buffer), new Float32Array(Da[2].buffer), new Float32Array(Da[3].buffer)];
+                        db = new Uint8Array(4 * F);
+                        Ua = new Float32Array(db.buffer);
+                        Va = !0
+                    }
+                    function Ca() {
+                        C = new Uint8Array(R * S * 4);
+                        Bb = new Float32Array(C.buffer);
+                        ob = !0
+                    }
+                    var B = Object.assign({}, M, h)
+                      , Wa = q++;
+                    null === B.isFlipY && (B.isFlipY = B.url ? !0 : !1);
+                    B.data && (B.array = "string" === typeof B.data ? Ib(B.data) : B.isFloat ? new Float32Array(B.data) : new Uint8Array(B.data),
+                    B.isFlipY = !1);
+                    var nb = 0
+                      , Cb = B.H ? !0 : !1
+                      , Xa = null
+                      , pb = null
+                      , Db = !1;
+                    B.R = B.R || B.isFloat;
+                    B.R && (nb = 1);
+                    !B.cf && B.isFloat && N && !aa.Oc() && (B.isFloat = !1);
+                    B.isFloat && (nb = 2);
+                    B.isAnisotropicFiltering && L && !JEContext.ih() && (B.isAnisotropicFiltering = !1);
+                    var ta = B.Wb || b.createTexture()
+                      , Ga = null
+                      , ua = !1
+                      , R = 0
+                      , S = 0
+                      , Ta = !1
+                      , Ab = !1
+                      , Va = !1
+                      , ya = null
+                      , Da = null
+                      , db = null
+                      , Ua = null
+                      , ja = null
+                      , fa = null
+                      , ha = null
+                      , za = B.isFlipY
+                      , Tb = (h = B.R && B.isMipmap) && Ba.me()
+                      , La = h && Tb ? !0 : !1
+                      , Ra = null
+                      , bb = -1
+                      , cb = !1;
+                    var ob = !1;
+                    var Bb = C = null;
+                    B.width && (R = B.width,
+                    S = B.height ? B.height : R);
+                    var ca = {
+                        get: function() {
+                            return ta
+                        },
+                        F: function() {
+                            return R
+                        },
+                        U: function() {
+                            return S
+                        },
+                        fh: function() {
+                            return B.url
+                        },
+                        jh: function() {
+                            return B.isFloat
+                        },
+                        lh: function() {
+                            return B.R
+                        },
+                        mh: function() {
+                            return B.isLinear
+                        },
+                        Sb: function() {
+                            b.generateMipmap(b.TEXTURE_2D)
+                        },
+                        ke: function(F, P) {
+                            La ? (F || (F = ca.jd()),
+                            I.Fb(P),
+                            a(Ra[F]),
+                            u[P] = -1) : ca.g(P)
+                        },
+                        jd: function() {
+                            -1 === bb && (bb = Math.log(R) / Math.log(2));
+                            return bb
+                        },
+                        He: function(F) {
+                            if (La) {
+                                F || (F = ca.jd());
+                                D.set("s12");
+                                I.Fb(0);
+                                for (var P = R, ka = S, W = 1; W <= F; ++W)
+                                    P /= 2,
+                                    ka /= 2,
+                                    D.sa("u8", .25 / P, .25 / ka),
+                                    b.viewport(0, 0, P, ka),
+                                    a(Ra[W - 1]),
+                                    b.framebufferTexture2D(la.fb(), b.COLOR_ATTACHMENT0, b.TEXTURE_2D, Ra[W], 0),
+                                    ma.l(!1, 1 === W);
+                                u[0] = -1
+                            } else
+                                ca.Sb()
+                        },
+                        Eh: function(F) {
+                            (Cb = !Rb.Rf(F)) ? (ua = null,
+                            B.H = F,
+                            K()) : ua = F
+                        },
+                        g: function(F) {
+                            if (!Ta)
+                                return !1;
+                            I.Fb(F);
+                            if (u[F] === Wa)
+                                return !1;
+                            a(ta);
+                            u[F] = Wa;
+                            return !0
+                        },
+                        Lc: function(F) {
+                            b.activeTexture(p[F]);
+                            t = F;
+                            a(ta);
+                            u[F] = Wa
+                        },
+                        u: function() {
+                            A = ca;
+                            b.framebufferTexture2D(la.fb(), b.COLOR_ATTACHMENT0, b.TEXTURE_2D, ta, 0)
+                        },
+                        $: function() {
+                            A = ca;
+                            b.viewport(0, 0, R, S);
+                            b.framebufferTexture2D(la.fb(), b.COLOR_ATTACHMENT0, b.TEXTURE_2D, ta, 0)
+                        },
+                        Ac: I.Ac,
+                        Sd: function(F, P) {
+                            R = F;
+                            S = P
+                        },
+                        resize: function(F, P) {
+                            ca.Sd(F, P);
+                            Y()
+                        },
+                        clone: function(F) {
+                            F = I.instance({
+                                width: R,
+                                height: S,
+                                R: B.R,
+                                isFloat: B.isFloat,
+                                isLinear: B.isLinear,
+                                isMirrorY: B.isMirrorY,
+                                isFlipY: F ? !za : za,
+                                isPot: B.isPot
+                            });
+                            xa.set("s0");
+                            la.ca();
+                            F.u();
+                            b.viewport(0, 0, R, S);
+                            ca.g(0);
+                            ma.l(!0, !0);
+                            return F
+                        },
+                        Lf: function() {
+                            b.viewport(0, 0, R, S)
+                        },
+                        remove: function() {
+                            b.deleteTexture(ta);
+                            Ab = !0;
+                            k.splice(k.indexOf(ca), 1);
+                            ca = null
+                        },
+                        refresh: function() {
+                            ca.Lc(0);
+                            za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !0);
+                            Cb ? b.texImage2D(b.TEXTURE_2D, 0, ja, fa, ha, B.H) : b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, ua);
+                            za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1)
+                        },
+                        Kd: function() {
+                            Va || sa();
+                            b.readPixels(0, 0, R, 4 * S, b.RGBA, b.UNSIGNED_BYTE, db);
+                            oa();
+                            return ya
+                        },
+                        yf: function() {
+                            Va || sa();
+                            return aa.xb(0, 0, R, 4 * S, db).then(function() {
+                                oa();
+                                return ya
+                            })
+                        },
+                        Af: function() {
+                            ob || Ca();
+                            b.readPixels(0, 0, R, S, b.RGBA, b.UNSIGNED_BYTE, C);
+                            return Bb
+                        },
+                        zf: function() {
+                            ob || Ca();
+                            return aa.xb(0, 0, R, S, C)
+                        },
+                        Uc: function(F) {
+                            la.O();
+                            D.set("s13");
+                            ca.g(0);
+                            if (F)
+                                b.viewport(0, 0, R, S),
+                                D.Kf("u9", .25, .25, .25, .25),
+                                ma.l(!1, !0);
+                            else
+                                for (F = 0; 4 > F; ++F)
+                                    b.viewport(0, S * F, R, S),
+                                    D.Td("u9", w[F]),
+                                    ma.l(!1, 0 === F)
+                        },
+                        Db: function(F) {
+                            var P = ha === v[0] && !g();
+                            a(ta);
+                            za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !0);
+                            P ? (Db || (Xa = document.createElement("canvas"),
+                            Xa.width = R,
+                            Xa.height = S,
+                            pb = Xa.getContext("2d"),
+                            pb.createImageData(R, S),
+                            Db = !0),
+                            null.data.set(F),
+                            pb.putImageData(null, 0, 0),
+                            b.texImage2D(b.TEXTURE_2D, 0, ja, fa, ha, Xa)) : b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, F);
+                            u[t] = Wa;
+                            za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1)
+                        },
+                        Qh: function(F, P) {
+                            a(ta);
+                            P && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !0);
+                            b.texImage2D(b.TEXTURE_2D, 0, ja, fa, ha, F);
+                            u[t] = Wa;
+                            P && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1)
+                        },
+                        Dh: function(F, P) {
+                            var ka = R * S
+                              , W = 4 * ka;
+                            F = B.R ? F ? "RGBE" : "JSON" : "RGBA";
+                            P && (F = P);
+                            P = aa.ia() && !1;
+                            var Ma = null;
+                            switch (F) {
+                            case "RGBE":
+                                Ma = "s43";
+                                break;
+                            case "JSON":
+                                Ma = P ? "s0" : "s13";
+                                break;
+                            case "RGBA":
+                            case "RGBAARRAY":
+                                Ma = "s7"
+                            }
+                            Va || ("RGBA" === F || "RGBE" === F || "RGBAARRAY" === F ? (Da = new Uint8Array(W),
+                            Va = !0) : "JSON" !== F || P || sa());
+                            la.O();
+                            D.set(Ma);
+                            ca.g(0);
+                            W = null;
+                            if ("RGBA" === F || "RGBE" === F || "RGBAARRAY" === F) {
+                                b.viewport(0, 0, R, S);
+                                ma.l(!0, !0);
+                                b.readPixels(0, 0, R, S, b.RGBA, b.UNSIGNED_BYTE, Da);
+                                if ("RGBAARRAY" === F)
+                                    return {
+                                        data: Da
+                                    };
+                                H || (l = document.createElement("canvas"),
+                                J = l.getContext("2d"),
+                                H = !0);
+                                l.width = R;
+                                l.height = S;
+                                ka = J.createImageData(R, S);
+                                ka.data.set(Da);
+                                J.putImageData(ka, 0, 0);
+                                W = l.toDataURL("image/png")
+                            } else if ("JSON" === F)
+                                if (P)
+                                    W = new Float32Array(ka),
+                                    b.viewport(0, 0, R, S),
+                                    ma.l(!0, !0),
+                                    b.readPixels(0, 0, R, S, b.RGBA, b.FLOAT, W);
+                                else {
+                                    for (W = 0; 4 > W; ++W)
+                                        b.viewport(0, S * W, R, S),
+                                        D.Td("u9", w[W]),
+                                        ma.l(!W, !W);
+                                    ca.Kd();
+                                    W = Array(ka);
+                                    for (P = 0; P < ka; ++P)
+                                        W[4 * P] = ya[0][P],
+                                        W[4 * P + 1] = ya[1][P],
+                                        W[4 * P + 2] = ya[2][P],
+                                        W[4 * P + 3] = ya[3][P]
+                                }
+                            return {
+                                format: F,
+                                data: W,
+                                width: R,
+                                height: S,
+                                isMirrorY: B.isMirrorY,
+                                isFlipY: "RGBA" === F ? B.isFlipY : !B.isFlipY
+                            }
+                        }
+                    };
+                    B.isMipmap && !La && Ta && !cb && (ca.Sb(),
+                    cb = !0);
+                    if (B.url)
+                        a(ta),
+                        b.texImage2D(b.TEXTURE_2D, 0, b.RGBA, 1, 1, 0, b.RGBA, b.UNSIGNED_BYTE, null),
+                        Ga = new Image,
+                        Ga.ng = "Anonymous",
+                        Ga.crossOrigin = "Anonymous",
+                        Ga.src = B.url,
+                        Ga.onload = function() {
+                            R = Ga.width;
+                            S = Ga.height;
+                            Y()
+                        }
+                        ;
+                    else if (B.H) {
+                        var Eb = function() {
+                            K();
+                            R ? Y() : setTimeout(Eb, 1)
+                        };
+                        Eb()
+                    } else
+                        B.array ? (B.R && !B.isFloat ? B.array instanceof Uint16Array ? (ua = B.array,
+                        Y()) : e() ? (ua = d(B.array),
+                        Y()) : (Y(),
+                        I.ed(b, ta, ca.F(), ca.U(), B.array, za, !0)) : (ua = B.isFloat ? B.array instanceof Float32Array ? B.array : new Float32Array(B.array) : B.array instanceof Uint8Array ? B.array : new Uint8Array(B.array),
+                        Y()),
+                        B.isKeepArray || (ua && ua !== B.array && (ua = null),
+                        delete B.array)) : B.Wb ? Ta = !0 : Y();
+                    ca.$g = ca.F;
+                    B.ma && Ta && (B.ma(ca),
+                    B.ma = null);
+                    k.push(ca);
+                    return ca
+                },
+                O: function(h) {
+                    h !== t && (b.activeTexture(p[h]),
+                    t = h);
+                    u[h] = -1;
+                    a(null)
+                },
+                cg: function(h) {
+                    r.random.g(h)
+                },
+                Ac: function() {
+                    A = null;
+                    b.framebufferTexture2D(la.fb(), b.COLOR_ATTACHMENT0, b.TEXTURE_2D, null, 0)
+                },
+                reset: function() {
+                    0 !== t && b.activeTexture(p[0]);
+                    for (var h = 0; h < p.length; ++h)
+                        u[h] = -1;
+                    t = -1
+                },
+                Ah: function() {
+                    t = -1
+                },
+                Tf: function() {
+                    for (var h = 0; h < p.length; ++h)
+                        I.O(h)
+                },
+                fd: function() {
+                    r && (r.random.remove(),
+                    r.ae.remove())
+                },
+                Ph: function(h, C) {
+                    if ("RGBA" === h.format || "RGBE" === h.format) {
+                        var K = new Image;
+                        K.src = h.data;
+                        K.onload = function() {
+                            I.instance({
+                                isMirrorY: h.isMirrorY,
+                                isFlipY: h.isFlipY,
+                                isFloat: !1,
+                                H: K,
+                                ma: function(O) {
+                                    if ("RGBA" === h.format)
+                                        C(O);
+                                    else {
+                                        var Y = h.width
+                                          , oa = h.height
+                                          , sa = I.instance({
+                                            isMirrorY: h.isMirrorY,
+                                            isFloat: !0,
+                                            width: Y,
+                                            height: oa,
+                                            isFlipY: h.isFlipY
+                                        });
+                                        la.ca();
+                                        b.viewport(0, 0, Y, oa);
+                                        D.set("s44");
+                                        sa.u();
+                                        O.g(0);
+                                        ma.l(!0, !0);
+                                        I.O(0);
+                                        C(sa);
+                                        aa.flush();
+                                        setTimeout(O.remove, 50)
+                                    }
+                                }
+                            })
+                        }
+                    } else
+                        "JSON" === h.format ? C(I.instance({
+                            isFloat: !0,
+                            isFlipY: h.isFlipY,
+                            width: h.width,
+                            height: h.height,
+                            array: new Float32Array(h.data)
+                        })) : C(!1)
+                },
+                te: d,
+                m: function() {
+                    A && (va.ca(),
+                    I.Ac(),
+                    va.O());
+                    I.Tf();
+                    k.slice(0).forEach(function(h) {
+                        h.remove()
+                    });
+                    k.splice(0);
+                    E = !1;
+                    q = 0;
+                    "undefined" !== typeof Ba && Ba.m();
+                    r = null
+                }
+            };
+            return I
+        }()
+          , Nb = function() {
+            return {
+                instance: function(a) {
+                    var c = [Aa.instance(a), Aa.instance(a)]
+                      , d = [c[1], c[0]]
+                      , e = d
+                      , g = {
+                        Df: function(m) {
+                            e[1].u();
+                            e[0].g(m);
+                            g.Wd()
+                        },
+                        Ef: function(m) {
+                            e[1].$();
+                            e[0].g(m);
+                            g.Wd()
+                        },
+                        Wd: function() {
+                            e = e === c ? d : c
+                        },
+                        refresh: function() {
+                            e[0].refresh();
+                            e[1].refresh()
+                        },
+                        g: function(m) {
+                            e[0].g(m)
+                        },
+                        bg: function(m) {
+                            e[1].g(m)
+                        },
+                        Ug: function() {
+                            return e[0]
+                        },
+                        Yg: function() {
+                            return e[1]
+                        },
+                        Db: function(m) {
+                            e[0].Db(m);
+                            e[1].Db(m)
+                        },
+                        remove: function() {
+                            e[0].remove();
+                            e[1].remove();
+                            e = null
+                        },
+                        sync: function() {
+                            g.Ef(0);
+                            D.set("s0");
+                            T.l(!1, !1)
+                        }
+                    };
+                    return g
+                }
+            }
+        }()
+          , ma = function() {
+            function a(q) {
+                var u = {
+                    aa: null,
+                    J: null
+                };
+                u.aa = q.createBuffer();
+                q.bindBuffer(q.ARRAY_BUFFER, u.aa);
+                q.bufferData(q.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), q.STATIC_DRAW);
+                u.J = q.createBuffer();
+                q.bindBuffer(q.ELEMENT_ARRAY_BUFFER, u.J);
+                q.bufferData(q.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2]), q.STATIC_DRAW);
+                return u
+            }
+            var c = null
+              , d = 0
+              , e = !1
+              , g = []
+              , m = -2
+              , t = -2
+              , p = {
+                reset: function() {
+                    t = m = -2
+                },
+                o: function() {
+                    e || (c = a(b),
+                    p.va(),
+                    e = !0)
+                },
+                instance: function(q) {
+                    var u = d++
+                      , r = q.J ? q.J.length : 0
+                      , A = "undefined" === typeof q.mode ? b.STATIC_DRAW : q.mode
+                      , v = b.createBuffer();
+                    b.bindBuffer(b.ARRAY_BUFFER, v);
+                    b.bufferData(b.ARRAY_BUFFER, q.aa instanceof Float32Array ? q.aa : new Float32Array(q.aa), A);
+                    m = u;
+                    var n = null
+                      , y = null
+                      , E = null;
+                    if (q.J) {
+                        n = b.createBuffer();
+                        b.bindBuffer(b.ELEMENT_ARRAY_BUFFER, n);
+                        var k = null;
+                        65536 > q.J.length ? (k = Uint16Array,
+                        y = b.UNSIGNED_SHORT,
+                        E = 2) : (k = Uint32Array,
+                        y = b.UNSIGNED_INT,
+                        E = 4);
+                        k = q.J instanceof k ? q.J : new k(q.J);
+                        b.bufferData(b.ELEMENT_ARRAY_BUFFER, k, A);
+                        t = u
+                    }
+                    var M = {
+                        le: function(H) {
+                            m !== u && (b.bindBuffer(b.ARRAY_BUFFER, v),
+                            m = u);
+                            H && xa.uc()
+                        },
+                        ie: function() {
+                            t !== u && (b.bindBuffer(b.ELEMENT_ARRAY_BUFFER, n),
+                            t = u)
+                        },
+                        bind: function(H) {
+                            M.le(H);
+                            M.ie()
+                        },
+                        rg: function() {
+                            b.drawElements(b.TRIANGLES, r, y, 0)
+                        },
+                        sg: function(H, l) {
+                            b.drawElements(b.TRIANGLES, H, y, l * E)
+                        },
+                        remove: function() {
+                            b.deleteBuffer(v);
+                            q.J && b.deleteBuffer(n);
+                            M = null
+                        }
+                    };
+                    g.push(M);
+                    return M
+                },
+                va: function() {
+                    -1 !== m && (b.bindBuffer(b.ARRAY_BUFFER, c.aa),
+                    m = -1);
+                    -1 !== t && (b.bindBuffer(b.ELEMENT_ARRAY_BUFFER, c.J),
+                    t = -1)
+                },
+                l: function(q, u) {
+                    q && ma.va();
+                    u && xa.Ca();
+                    b.drawElements(b.TRIANGLES, 3, b.UNSIGNED_SHORT, 0)
+                },
+                bb: function(q) {
+                    q = q || b;
+                    var u = a(q);
+                    q.bindBuffer(q.ARRAY_BUFFER, u.aa);
+                    q.bindBuffer(q.ELEMENT_ARRAY_BUFFER, u.J);
+                    xa.zb(q);
+                    q.clear(q.COLOR_BUFFER_BIT);
+                    q.drawElements(q.TRIANGLES, 3, q.UNSIGNED_SHORT, 0);
+                    q.flush();
+                    q.bindBuffer(q.ARRAY_BUFFER, null);
+                    q.bindBuffer(q.ELEMENT_ARRAY_BUFFER, null);
+                    q.deleteBuffer(u.aa);
+                    q.deleteBuffer(u.J);
+                    p.reset();
+                    e && (p.va(),
+                    xa.Ca())
+                },
+                fd: function() {
+                    var q = b
+                      , u = c;
+                    q.deleteBuffer(u.aa);
+                    q.deleteBuffer(u.J)
+                },
+                m: function() {
+                    p.fd();
+                    g.forEach(function(q) {
+                        q.remove()
+                    });
+                    b.bindBuffer(b.ARRAY_BUFFER, null);
+                    b.bindBuffer(b.ELEMENT_ARRAY_BUFFER, null);
+                    p.reset();
+                    e = !1;
+                    g.splice(0);
+                    d = 0
+                }
+            };
+            return p
+        }()
+          , la = function() {
+            var a = null
+              , c = null
+              , d = null
+              , e = !1
+              , g = []
+              , m = {
+                I: -2,
+                dd: 1
+            }
+              , t = {
+                nb: function() {
+                    return e
+                },
+                o: function() {
+                    if (!e) {
+                        a = b.createFramebuffer();
+                        var p = aa.ia();
+                        c = p && b.DRAW_FRAMEBUFFER ? b.DRAW_FRAMEBUFFER : b.FRAMEBUFFER;
+                        d = p && b.READ_FRAMEBUFFER ? b.READ_FRAMEBUFFER : b.FRAMEBUFFER;
+                        e = !0
+                    }
+                },
+                Rg: function() {
+                    return c
+                },
+                Qe: function() {
+                    return d
+                },
+                fb: function() {
+                    return b.FRAMEBUFFER
+                },
+                Zg: function() {
+                    return m
+                },
+                Jg: function() {
+                    return a
+                },
+                instance: function(p) {
+                    void 0 === p.qd && (p.qd = !1);
+                    var q = p.K ? p.K : null
+                      , u = p.width
+                      , r = void 0 !== p.height ? p.height : p.width
+                      , A = a
+                      , v = null
+                      , n = !1
+                      , y = !1
+                      , E = 0;
+                    q && (u = u ? u : q.F(),
+                    r = r ? r : q.U());
+                    var k = {
+                        Rd: function() {
+                            n || (A = b.createFramebuffer(),
+                            n = !0,
+                            E = m.dd++)
+                        },
+                        de: function() {
+                            k.Rd();
+                            k.u();
+                            v = b.createRenderbuffer();
+                            b.bindRenderbuffer(b.RENDERBUFFER, v);
+                            b.renderbufferStorage(b.RENDERBUFFER, b.DEPTH_COMPONENT16, u, r);
+                            b.framebufferRenderbuffer(c, b.DEPTH_ATTACHMENT, b.RENDERBUFFER, v);
+                            b.clearDepth(1)
+                        },
+                        bind: function(M, H) {
+                            E !== m.I && (b.bindFramebuffer(c, A),
+                            m.I = E);
+                            q && q.u();
+                            H && b.viewport(0, 0, u, r);
+                            M && b.clear(b.COLOR_BUFFER_BIT | b.DEPTH_BUFFER_BIT)
+                        },
+                        ag: function() {
+                            E !== m.I && (b.bindFramebuffer(c, A),
+                            m.I = E)
+                        },
+                        clear: function() {
+                            b.clear(b.COLOR_BUFFER_BIT | b.DEPTH_BUFFER_BIT)
+                        },
+                        jg: function() {
+                            b.clear(b.COLOR_BUFFER_BIT)
+                        },
+                        kg: function() {
+                            b.clear(b.DEPTH_BUFFER_BIT)
+                        },
+                        Lf: function() {
+                            b.viewport(0, 0, u, r)
+                        },
+                        u: function() {
+                            E !== m.I && (b.bindFramebuffer(c, A),
+                            m.I = E)
+                        },
+                        rtt: function(M) {
+                            q = M;
+                            m.I !== E && (b.bindFramebuffer(b.FRAMEBUFFER, A),
+                            m.I = E);
+                            M.u()
+                        },
+                        O: function() {
+                            b.bindFramebuffer(c, null);
+                            m.I = -1
+                        },
+                        resize: function(M, H) {
+                            u = M;
+                            r = H;
+                            v && (b.bindRenderbuffer(b.RENDERBUFFER, v),
+                            b.renderbufferStorage(b.RENDERBUFFER, b.DEPTH_COMPONENT16, u, r))
+                        },
+                        remove: function() {
+                            A === a || y || (b.bindFramebuffer(c, A),
+                            b.framebufferTexture2D(c, b.COLOR_ATTACHMENT0, b.TEXTURE_2D, null, 0),
+                            v && b.framebufferRenderbuffer(c, b.DEPTH_ATTACHMENT, b.RENDERBUFFER, null),
+                            b.bindFramebuffer(c, null),
+                            b.deleteFramebuffer(A),
+                            v && b.deleteRenderbuffer(v));
+                            y = !0
+                        }
+                    };
+                    p.qd && k.de();
+                    g.push(k);
+                    return k
+                },
+                O: function() {
+                    b.bindFramebuffer(c, null);
+                    m.I = -1
+                },
+                Uf: function() {
+                    b.bindFramebuffer(c, null);
+                    b.clear(b.COLOR_BUFFER_BIT | b.DEPTH_BUFFER_BIT);
+                    aa.Ud();
+                    m.I = -1
+                },
+                reset: function() {
+                    m.I = -2
+                },
+                ca: function() {
+                    0 !== m.I && (b.bindFramebuffer(c, a),
+                    m.I = 0)
+                },
+                clear: function() {
+                    aa.Ud();
+                    b.clear(b.COLOR_BUFFER_BIT)
+                },
+                m: function() {
+                    t.O();
+                    g.forEach(function(p) {
+                        p.remove()
+                    });
+                    null !== a && (b.deleteFramebuffer(a),
+                    a = null);
+                    t.reset();
+                    e = !1;
+                    g.splice(0);
+                    m.dd = 1
+                }
+            };
+            return t
+        }()
+          , aa = function() {
+            function a() {
+                p = "undefined" === typeof Ha ? JEContext : Ha;
+                q = !0
+            }
+            function c(l, J) {
+                for (var w = 0; w < l.length; ++w) {
+                    var L = J.getExtension(l[w]);
+                    if (L)
+                        return L
+                }
+                return null
+            }
+            function d() {
+                null !== k.Cb && (clearInterval(k.Cb),
+                k.Cb = null);
+                k.za = !1
+            }
+            function e(l) {
+                if (0 === k.oa.length) {
+                    k.V = b.PIXEL_PACK_BUFFER;
+                    k.oa.splice(0);
+                    k.gb.splice(0);
+                    for (var J = 0; J < k.La; ++J)
+                        k.oa.push(b.createBuffer()),
+                        k.gb.push(-1);
+                    k.ea = 0;
+                    k.jc = 0
+                }
+                b.bindBuffer(k.V, k.oa[k.ea]);
+                l.byteLength !== k.gb[k.ea] && (b.bufferData(k.V, l.byteLength, b.STREAM_READ),
+                k.gb[k.ea] = l.byteLength);
+                k.gh = !0
+            }
+            function g() {
+                b.bindBuffer(k.V, null)
+            }
+            function m() {
+                k.xa.forEach(function(l) {
+                    b.deleteSync(l)
+                });
+                k.xa.splice(0)
+            }
+            function t() {
+                k.ea = (k.ea + 1) % k.La;
+                ++k.jc
+            }
+            var p = null
+              , q = !1
+              , u = {
+                sd: !1,
+                wc: null,
+                xc: null,
+                vd: !1,
+                gf: !1,
+                yc: null,
+                wd: !1,
+                zc: null,
+                td: !1,
+                Hb: null,
+                $e: !1,
+                Ib: null,
+                af: !1
+            }
+              , r = null
+              , A = {
+                fa: !0,
+                ha: !0,
+                Rb: !0,
+                Jd: !1
+            }
+              , v = null
+              , n = !0
+              , y = null
+              , E = null
+              , k = {
+                ue: 1,
+                La: -1,
+                ea: 0,
+                jc: 0,
+                za: !1,
+                oa: [],
+                xa: [],
+                gb: [],
+                V: null,
+                Cb: null
+            }
+              , M = "undefined" === typeof window ? {} : window
+              , H = {
+                o: function() {
+                    if (q)
+                        return !0;
+                    H.reset();
+                    q || a();
+                    var l = b;
+                    if (!r.sd) {
+                        r.wc = H.$c(l);
+                        M.GL_EXT_FLOAT = r.wc;
+                        r.vd = r.wc ? !0 : !1;
+                        if (r.vd || H.ia())
+                            r.xc = H.ad(l),
+                            r.gf = r.xc ? !0 : !1,
+                            M.GL_EXT_FLOATLINEAR = r.xc;
+                        r.sd = !0
+                    }
+                    if (!r.td) {
+                        r.yc = H.$a(l);
+                        r.yc && (r.wd = !0,
+                        M.GL_EXT_HALFFLOAT = r.yc);
+                        if (r.wd || H.ia())
+                            r.zc = H.bd(l),
+                            M.GL_EXT_HALFFLOATLINEAR = r.zc;
+                        r.hh = r.zc ? !0 : !1;
+                        r.td = !0
+                    }
+                    r.Hb = H.Yc(l);
+                    r.$e = r.Hb ? !0 : !1;
+                    M.GL_EXT_COLORBUFFERFLOAT = r.Hb;
+                    r.Ib = H.Zc(l);
+                    r.af = r.Ib ? !0 : !1;
+                    M.GL_EXT_COLORBUFFERHALFFLOAT = r.Ib;
+                    la.o();
+                    Aa.o();
+                    if (!H.xe())
+                        return !1;
+                    ma.o();
+                    Aa.Ze();
+                    return !0
+                },
+                reset: function() {
+                    r = Object.assign({}, u);
+                    v = Object.assign({}, A)
+                },
+                F: function() {
+                    q || a();
+                    return p.F()
+                },
+                U: function() {
+                    q || a();
+                    return p.U()
+                },
+                ia: function() {
+                    q || a();
+                    return p.ia()
+                },
+                Xc: function(l) {
+                    H.Yc(l);
+                    H.Zc(l);
+                    H.$c(l);
+                    H.ad(l);
+                    H.$a(l);
+                    H.bd(l)
+                },
+                Yc: c.bind(null, ["EXT_color_buffer_float", "WEBGL_color_buffer_float", "OES_color_buffer_float"]),
+                Zc: c.bind(null, ["EXT_color_buffer_half_float", "WEBGL_color_buffer_half_float", "OES_color_buffer_half_float"]),
+                $c: c.bind(null, ["OES_texture_float", "MOZ_OES_texture_float", "WEBKIT_OES_texture_float"]),
+                ad: c.bind(null, ["OES_texture_float_linear", "MOZ_OES_texture_float_linear", "WEBKIT_OES_texture_float_linear"]),
+                $a: c.bind(null, ["OES_texture_half_float", "MOZ_OES_texture_half_float", "WEBKIT_OES_texture_half_float"]),
+                bd: c.bind(null, ["OES_texture_half_float_linear", "MOZ_OES_texture_half_float_linear", "WEBKIT_OES_texture_half_float_linear"]),
+                Tb: function(l) {
+                    var J = H.$a(l);
+                    return J && J.HALF_FLOAT_OES ? J.HALF_FLOAT_OES : l.HALF_FLOAT || l.FLOAT
+                },
+                Ne: function() {
+                    return E || b.RGBA32F || b.RGBA
+                },
+                Oe: function() {
+                    return y || b.RGBA16F || b.RGBA
+                },
+                Ke: function() {
+                    return v
+                },
+                Oc: function() {
+                    return v.fa
+                },
+                fg: function() {
+                    return v.ha
+                },
+                eg: function() {
+                    return v.Rb
+                },
+                oe: function() {
+                    return v.Jd && n
+                },
+                Zd: function(l) {
+                    n = l;
+                    !l && k.za && (m(),
+                    b.bindBuffer(k.V, null),
+                    k.za = !1)
+                },
+                nh: function() {
+                    return k.za
+                },
+                Ab: function(l, J, w) {
+                    function L() {
+                        l.bindTexture(l.TEXTURE_2D, null);
+                        l.bindFramebuffer(N, null);
+                        l.deleteTexture(z);
+                        l.deleteFramebuffer(f)
+                    }
+                    var N = l.FRAMEBUFFER
+                      , x = l.NEAREST
+                      , f = l.createFramebuffer();
+                    l.bindFramebuffer(N, f);
+                    var z = l.createTexture();
+                    l.activeTexture(l.TEXTURE0);
+                    l.bindTexture(l.TEXTURE_2D, z);
+                    l.pixelStorei(l.UNPACK_FLIP_Y_WEBGL, !1);
+                    l.texParameteri(l.TEXTURE_2D, l.TEXTURE_WRAP_S, l.CLAMP_TO_EDGE);
+                    l.texParameteri(l.TEXTURE_2D, l.TEXTURE_WRAP_T, l.CLAMP_TO_EDGE);
+                    l.texParameteri(l.TEXTURE_2D, l.TEXTURE_MAG_FILTER, x);
+                    l.texParameteri(l.TEXTURE_2D, l.TEXTURE_MIN_FILTER, x);
+                    l.texImage2D(l.TEXTURE_2D, 0, J, 3, 3, 0, l.RGBA, w, null);
+                    l.framebufferTexture2D(l.FRAMEBUFFER, l.COLOR_ATTACHMENT0, l.TEXTURE_2D, z, 0);
+                    if (l.checkFramebufferStatus(l.READ_FRAMEBUFFER || l.FRAMEBUFFER) !== l.FRAMEBUFFER_COMPLETE)
+                        return L(),
+                        !1;
+                    xa.tc(l);
+                    l.clearColor(0, 0, 0, 0);
+                    l.viewport(0, 0, 3, 3);
+                    l.disable(l.DEPTH_TEST);
+                    l.clear(l.COLOR_BUFFER_BIT);
+                    ma.bb(l);
+                    l.bindFramebuffer(N, null);
+                    xa.Sa(l);
+                    l.activeTexture(l.TEXTURE0);
+                    l.bindTexture(l.TEXTURE_2D, z);
+                    ma.bb(l);
+                    J = new Uint8Array(36);
+                    l.readPixels(0, 0, 3, 3, l.RGBA, l.UNSIGNED_BYTE, J);
+                    L();
+                    for (w = 0; 36 > w; ++w)
+                        if (3 !== w % 4 && 3 < Math.abs(J[w] - 127))
+                            return !1;
+                    return !0
+                },
+                Kb: function(l) {
+                    var J = {
+                        fa: !1,
+                        ha: !1
+                    };
+                    l.disable(l.BLEND);
+                    l.clearColor(0, 0, 0, 0);
+                    l.clear(l.COLOR_BUFFER_BIT);
+                    l.RGBA32F && H.Ab(l, l.RGBA32F, l.FLOAT) && (J.fa = !0,
+                    E = l.RGBA32F);
+                    !J.fa && H.Ab(l, l.RGBA, l.FLOAT) && (J.fa = !0,
+                    E = l.RGBA);
+                    var w = H.Tb(l);
+                    y = null;
+                    l.RGBA16F && H.Ab(l, l.RGBA16F, w) && (J.ha = !0,
+                    y = l.RGBA16F);
+                    !J.ha && H.Ab(l, l.RGBA, w) && (J.ha = !0,
+                    y = l.RGBA);
+                    return J
+                },
+                ye: function() {
+                    var l = la.instance({
+                        width: 2
+                    });
+                    l.Rd();
+                    var J = Aa.instance({
+                        width: 2,
+                        isFloat: !0,
+                        sb: 3
+                    });
+                    l.u();
+                    J.u();
+                    H.flush();
+                    b.checkFramebufferStatus(la.Qe()) !== b.FRAMEBUFFER_COMPLETE ? (Aa.Gf(),
+                    v.Rb = !1) : v.Rb = !0;
+                    l.remove();
+                    J.remove()
+                },
+                ze: function() {
+                    var l = !1;
+                    H.ia() && (l = "PIXEL_PACK_BUFFER STREAM_READ SYNC_GPU_COMMANDS_COMPLETE WAIT_FAILED fenceSync deleteSync createBuffer".split(" ").every(function(J) {
+                        return "undefined" !== typeof b[J]
+                    }));
+                    v.Jd = l
+                },
+                xe: function() {
+                    var l = H.Kb(b);
+                    Object.assign(v, l);
+                    if (!v.fa && !v.ha)
+                        return !1;
+                    H.ye();
+                    H.ze();
+                    return !0
+                },
+                Bf: function(l, J, w, L, N) {
+                    b.readPixels(l, J, w, L, b.RGBA, b.UNSIGNED_BYTE, N);
+                    return Promise.resolve(N, !1)
+                },
+                xb: function(l, J, w, L, N, x, f) {
+                    if (!H.oe())
+                        return H.Bf(l, J, w, L, N);
+                    k.La = f || k.ue;
+                    e(N);
+                    b.readPixels(l, J, w, L, b.RGBA, b.UNSIGNED_BYTE, 0);
+                    k.xa[k.ea] = b.fenceSync(b.SYNC_GPU_COMMANDS_COMPLETE, 0);
+                    H.flush();
+                    var z = !1;
+                    return new Promise(function(I, h) {
+                        function C() {
+                            if (!k.za)
+                                return d(),
+                                g(),
+                                t(),
+                                h(),
+                                !1;
+                            var K = (k.ea + 1) % k.La;
+                            switch (b.clientWaitSync(k.xa[K], 0, 0)) {
+                            case b.TIMEOUT_EXPIRED:
+                            case b.WAIT_FAILED:
+                                return !1;
+                            default:
+                                return d(),
+                                b.deleteSync(k.xa[K]),
+                                k.xa[K] = null,
+                                b.bindBuffer(k.V, k.oa[K]),
+                                b.getBufferSubData(k.V, 0, N),
+                                g(),
+                                t(),
+                                I(N, z),
+                                !0
+                            }
+                        }
+                        d();
+                        k.jc + 1 < k.La ? (g(),
+                        t(),
+                        I(N, !1)) : (k.za = !0,
+                        C() || (x && !z && (z = !0,
+                        x()),
+                        k.Cb = setInterval(C, 0)))
+                    }
+                    )
+                },
+                Ud: function() {
+                    b.viewport(0, 0, H.F(), H.U())
+                },
+                flush: function() {
+                    b.flush()
+                },
+                m: function() {
+                    d();
+                    m();
+                    Aa.m();
+                    la.m();
+                    ma.m();
+                    k.oa.forEach(function(l) {
+                        b.deleteBuffer(l)
+                    });
+                    k.oa.splice(0);
+                    xa.reset();
+                    q = !1
+                }
+            };
+            return H
+        }()
+          , T = ma
+          , va = la
+          , X = Aa
+          , Ba = function() {
+            function a(w, L, N, x) {
+                k.texParameteri(k.TEXTURE_2D, k.TEXTURE_MIN_FILTER, x ? k.NEAREST_MIPMAP_NEAREST : k.LINEAR);
+                var f = null;
+                if (null !== N)
+                    try {
+                        f = k.getError();
+                        if ("FUCKING_BIG_ERROR" === f)
+                            return !1;
+                        k.texImage2D(k.TEXTURE_2D, 0, w, 4, 4, 0, k.RGBA, L, N);
+                        f = k.getError();
+                        if (f !== k.NO_ERROR)
+                            return !1
+                    } catch (z) {
+                        return !1
+                    }
+                x && k.generateMipmap(k.TEXTURE_2D);
+                k.clear(k.COLOR_BUFFER_BIT);
+                T.bb(k);
+                f = k.getError();
+                if ("FUCKING_BIG_ERROR" === f)
+                    return !1;
+                k.readPixels(0, 0, 2, 2, k.RGBA, k.UNSIGNED_BYTE, r);
+                f = k.getError();
+                f === k.INVALID_OPERATION && "undefined" !== typeof k.PIXEL_PACK_BUFFER && (k.bindBuffer(k.PIXEL_PACK_BUFFER, null),
+                k.readPixels(0, 0, 2, 2, k.RGBA, k.UNSIGNED_BYTE, r),
+                f = k.getError());
+                if (f !== k.NO_ERROR)
+                    return !1;
+                N = !0;
+                for (x = 0; 16 > x; ++x)
+                    N = N && 4 > Math.abs(r[x] - 127);
+                N && (q.Gd = L,
+                q.pd = w);
+                return N
+            }
+            function c(w, L) {
+                return M.fa && a(w, k.FLOAT, new Float32Array(A), L) ? (p = t.Hc,
+                !0) : !1
+            }
+            function d(w, L, N) {
+                if (!M.ha)
+                    return !1;
+                var x = Aa.te(A)
+                  , f = aa.$a(k);
+                if (f && f.HALF_FLOAT_OES && a(w, f.HALF_FLOAT_OES, x, L) || k.HALF_FLOAT && a(w, k.HALF_FLOAT, x, L))
+                    return p = t.Ga,
+                    !0;
+                x = new Float32Array(A);
+                if (a(w, k.FLOAT, x, L))
+                    return p = t.Ga,
+                    !0;
+                k.bindTexture(k.TEXTURE_2D, N);
+                k.texImage2D(k.TEXTURE_2D, 0, k.RGBA, 2, 2, 0, k.RGBA, k.UNSIGNED_BYTE, null);
+                k.bindFramebuffer(q.Ya, J);
+                Aa.ed(k, N, 2, 2, x, !1, !1);
+                k.bindFramebuffer(q.Ya, null);
+                k.bindTexture(k.TEXTURE_2D, N);
+                return a(w, null, null, L) ? (p = t.Ga,
+                !0) : !1
+            }
+            function e(w, L, N) {
+                u = !0;
+                if (d(w, !0, N) || c(L, !0))
+                    return !0;
+                u = !1;
+                return d(w, !1, N) || c(L, !1) ? !0 : !1
+            }
+            function g(w) {
+                if (p === t.P) {
+                    k = w || b;
+                    p = t.RGBA8;
+                    u = !0;
+                    aa.Xc(k);
+                    M || (M = aa.Kb(k));
+                    va.reset();
+                    J = k.createFramebuffer();
+                    q.Ya = k.DRAW_FRAMEBUFFER || k.FRAMEBUFFER;
+                    k.bindFramebuffer(q.Ya, null);
+                    k.clearColor(0, 0, 0, 0);
+                    k.viewport(0, 0, 2, 2);
+                    D.P();
+                    H = D.Sa(k);
+                    w = k.createTexture();
+                    k.activeTexture(k.TEXTURE0);
+                    k.bindTexture(k.TEXTURE_2D, w);
+                    k.texParameteri(k.TEXTURE_2D, k.TEXTURE_WRAP_S, k.REPEAT);
+                    k.texParameteri(k.TEXTURE_2D, k.TEXTURE_WRAP_T, k.REPEAT);
+                    k.texParameteri(k.TEXTURE_2D, k.TEXTURE_MAG_FILTER, k.NEAREST);
+                    l = w;
+                    var L = w = k.RGBA
+                      , N = k.RGBA16F
+                      , x = k.RGBA32F;
+                    x && (w = x);
+                    N && (L = N);
+                    if ((N || x) && e(L, w, l))
+                        return m(),
+                        !0;
+                    w = L = k.RGBA;
+                    if (e(L, w, l))
+                        return m(),
+                        !0;
+                    p = t.RGBA8;
+                    m();
+                    return !1
+                }
+            }
+            function m() {
+                k.deleteProgram(H.ra);
+                k.deleteTexture(l);
+                l = H = null
+            }
+            for (var t = {
+                P: -1,
+                Hc: 3,
+                Ga: 2,
+                RGBA8: 0
+            }, p = t.P, q = {
+                Gd: null,
+                pd: null,
+                Ya: null
+            }, u = !0, r = new Uint8Array(16), A = Array(64), v = 0; 4 > v; ++v)
+                for (var n = 0; 4 > n; ++n) {
+                    var y = 0 === (n + v) % 2 ? 1 : 0
+                      , E = 4 * v + n;
+                    A[4 * E] = y;
+                    A[4 * E + 1] = y;
+                    A[4 * E + 2] = y;
+                    A[4 * E + 3] = y
+                }
+            var k = null
+              , M = null
+              , H = null
+              , l = null
+              , J = null;
+            return {
+                me: function(w) {
+                    g(w);
+                    return u
+                },
+                Nc: function(w, L) {
+                    p === t.P && (typeof ("undefined" !== L) && (M = L),
+                    g(w));
+                    return p !== t.RGBA8
+                },
+                kh: function(w) {
+                    g(w);
+                    return p === t.Hc
+                },
+                hf: function(w) {
+                    g(w);
+                    return p === t.Ga
+                },
+                Sg: function(w) {
+                    g(w);
+                    return q.Gd
+                },
+                Pe: function(w) {
+                    g(w);
+                    return q.pd
+                },
+                m: function() {
+                    k = null;
+                    u = !0;
+                    p = t.P;
+                    M = null
+                }
+            }
+        }()
+          , Ub = function() {
+            return {
+                instance: function(a) {
+                    var c = X.instance(a.alpha)
+                      , d = X.instance(a.beta);
+                    return {
+                        Be: function() {
+                            c.g(1);
+                            d.g(2)
+                        }
+                    }
+                }
+            }
+        }()
+          , Gb = function() {
+            return {
+                instance: function(a) {
+                    var c = null
+                      , d = !1
+                      , e = !1
+                      , g = null
+                      , m = !1
+                      , t = !1
+                      , p = null
+                      , q = "undefined" === typeof a.preprocessing ? !1 : a.preprocessing
+                      , u = "undefined" === typeof a.preprocessingSize ? a.size : a.preprocessingSize;
+                    a.mask && (d = !0,
+                    ea && void 0 !== ea.he && (a.mask = ea.he + a.mask),
+                    c = X.instance({
+                        isFloat: !1,
+                        url: a.mask
+                    }));
+                    var r = !1;
+                    a.customInputShader && (r = "s45",
+                    D.Jc({
+                        name: "_",
+                        id: r,
+                        h: a.customInputShader,
+                        Oh: ["uSource"],
+                        precision: "lowp"
+                    }),
+                    D.S(r, [{
+                        type: "1i",
+                        name: "_",
+                        value: 0
+                    }]));
+                    switch (q) {
+                    case "sobel":
+                        p = "s32";
+                        m = !0;
+                        break;
+                    case "meanNormalization":
+                        p = "s33";
+                        m = !0;
+                        break;
+                    case "grayScale":
+                        p = "s29";
+                        m = !1;
+                        break;
+                    case "grayScaleTilt":
+                        p = "s30";
+                        t = !0;
+                        m = !1;
+                        break;
+                    case "rgbGrayTilt":
+                        p = "s31";
+                        t = !0;
+                        m = !1;
+                        break;
+                    case "copy":
+                        p = r ? r : "s0";
+                        break;
+                    case "inputLightRegulation":
+                        p = r ? r : "s29";
+                        g = Vb.instance({
+                            od: u,
+                            Fd: a.size,
+                            Cd: a.nBlurPass,
+                            mb: !1
+                        });
+                        e = !0;
+                        break;
+                    case "inputMix0":
+                        p = "none";
+                        g = Wb.instance({
+                            C: u,
+                            be: a.varianceMin,
+                            Mc: a.blurKernelSizePx,
+                            mb: !1
+                        });
+                        e = !0;
+                        break;
+                    case "direct":
+                    case "none":
+                        p = "abort";
+                        break;
+                    default:
+                        p = "s4"
+                    }
+                    t && D.S(p, [{
+                        name: "u27",
+                        type: "1f",
+                        value: a.tilt
+                    }]);
+                    d && (p += "Mask");
+                    var A = X.instance({
+                        isFloat: !1,
+                        isPot: !1,
+                        width: a.size
+                    })
+                      , v = {
+                        F: function() {
+                            return u
+                        },
+                        Ub: function() {
+                            return v.F()
+                        },
+                        Ue: function() {
+                            return e ? g.Vb() : A
+                        },
+                        T: function(n) {
+                            va.ca();
+                            "abort" !== p && ("none" !== p && (D.set(p),
+                            m && D.G("u28", 1 / a.size),
+                            A.$(),
+                            d && c.g(1),
+                            T.l(!1, !1),
+                            A.g(0),
+                            n = A),
+                            e && g.process(n))
+                        },
+                        m: function() {
+                            A.remove();
+                            d && c.remove()
+                        }
+                    };
+                    return v
+                }
+            }
+        }()
+          , Hb = function() {
+            return {
+                instance: function(a) {
+                    function c(h) {
+                        g.forEach(function(C, K) {
+                            m[K][0] = h[0][C];
+                            m[K][1] = h[1][C];
+                            m[K][2] = h[2][C];
+                            m[K][3] = h[3][C]
+                        });
+                        return m
+                    }
+                    a.normalize = a.normalize || !1;
+                    var d = {
+                        input: null,
+                        bias: null,
+                        Zb: null,
+                        Z: null,
+                        tb: null,
+                        nc: null,
+                        oc: null
+                    }
+                      , e = null
+                      , g = []
+                      , m = []
+                      , t = !1
+                      , p = null
+                      , q = !0
+                      , u = -1
+                      , r = a.isReorganize ? a.isReorganize : !1
+                      , A = a.kernelsCount ? !0 : !1
+                      , v = a.dynPelu ? Ub.instance(a.dynPelu) : !1
+                      , n = v ? !0 : !1
+                      , y = {
+                        isEnabled: !1
+                    };
+                    a.ef ? (a.sparsity = "undefined" !== typeof a.sparsity ? a.sparsity : a.vb.Ub(),
+                    q = !1) : "full" === a.connectivityUp && (a.sparsity = a.vb.Ub());
+                    var E = {
+                        elu: "s16",
+                        elu01: "s17",
+                        relu: "s15",
+                        arctan: "s19",
+                        sigmoid: "s14",
+                        copy: "s0",
+                        softplus: "s20",
+                        dynPelu: "s18"
+                    }[a.activation]
+                      , k = a.sparsity * a.sparsity
+                      , M = !1
+                      , H = a.size
+                      , l = "";
+                    if (a.maxPooling) {
+                        switch (a.maxPooling.size) {
+                        case 2:
+                            l = "s34";
+                            break;
+                        case 4:
+                            l = "s35"
+                        }
+                        M = !0;
+                        H /= a.maxPooling.size;
+                        d.nc = X.instance({
+                            isFloat: !0,
+                            isPot: !1,
+                            width: H
+                        })
+                    }
+                    var J = a.normalization ? !0 : !1
+                      , w = null
+                      , L = null
+                      , N = null;
+                    if (J) {
+                        w = "s46" + a.index.toString();
+                        D.nd("s46", w, [((a.normalization.n - 1) / 2).toFixed(1)]);
+                        D.S(w, [{
+                            type: "1i",
+                            name: "u1",
+                            value: 0
+                        }, {
+                            type: "2f",
+                            name: "u8",
+                            value: [1 / a.size, 1 / a.size]
+                        }, {
+                            type: "1f",
+                            name: "u7",
+                            value: a.normalization.alpha
+                        }, {
+                            type: "1f",
+                            name: "u10",
+                            value: a.normalization.beta
+                        }, {
+                            type: "1f",
+                            name: "u31",
+                            value: a.normalization.k
+                        }]);
+                        var x = {
+                            isFloat: !0,
+                            isPot: !0,
+                            width: a.size
+                        };
+                        L = X.instance(x);
+                        N = X.instance(x)
+                    }
+                    var f = -1
+                      , z = null;
+                    q && (d.Z = X.instance({
+                        isFloat: !0,
+                        isPot: !1,
+                        width: a.size
+                    }));
+                    d.bias = X.instance(a.bias);
+                    var I = {
+                        F: function() {
+                            return a.size
+                        },
+                        Ub: function() {
+                            return H
+                        },
+                        gd: function() {
+                            return a.classesCount
+                        },
+                        je: function(h) {
+                            e.g(h)
+                        },
+                        vf: function() {
+                            a.remap && a.remap.isEnabled && (y = {
+                                isEnabled: !0,
+                                lf: X.instance({
+                                    isFloat: !1,
+                                    isFlipY: !1,
+                                    array: new Uint8Array(a.remap.maskTexture.data),
+                                    width: a.remap.maskTexture.width,
+                                    isPot: !1
+                                }),
+                                pb: a.remap.layers.map(function(h) {
+                                    return a.parent.Se(h)
+                                }),
+                                depth: a.remap.depth
+                            })
+                        },
+                        Hf: function() {
+                            switch (a.connectivityUp) {
+                            case "direct":
+                                z = Xb.instance(a.connectivity);
+                                break;
+                            case "square":
+                                z = Yb.instance(a.connectivity);
+                                break;
+                            case "squareFast":
+                                z = Zb.instance(a.connectivity, a.activation);
+                                break;
+                            case "full":
+                                z = $b.instance(a.connectivity);
+                                break;
+                            case "conv":
+                                u = a.kernelsCount,
+                                z = ac.instance(a.connectivity),
+                                r && (d.tb = X.instance({
+                                    width: H,
+                                    isFloat: !0,
+                                    isFlipY: !1,
+                                    isPot: !1
+                                }))
+                            }
+                            if (z.Da) {
+                                var h = a.size * a.sparsity;
+                                f = Math.log(h / a.size) / Math.log(2);
+                                d.input = X.instance({
+                                    isMipmap: !0,
+                                    isFloat: !0,
+                                    isPot: !0,
+                                    width: h,
+                                    ec: f
+                                });
+                                d.Zb = X.instance({
+                                    isFloat: !0,
+                                    isPot: !0,
+                                    width: a.size
+                                })
+                            }
+                        },
+                        T: function(h, C) {
+                            e = h;
+                            z.Da ? (d.input.$(),
+                            A && d.bias.g(2),
+                            z.T(y),
+                            d.input.g(0),
+                            d.input.He(f),
+                            d.Zb.$(),
+                            A ? D.set("s0") : (D.set("s28"),
+                            D.G("u26", k),
+                            d.bias.g(1)),
+                            d.input.ke(f, 0),
+                            T.l(!1, !1),
+                            D.set(E),
+                            J ? L.u() : d.Z.u(),
+                            d.Zb.g(0),
+                            n && v.Be(),
+                            T.l(!1, !1)) : (d.Z.$(),
+                            d.bias.g(1),
+                            z.T());
+                            J && (D.set(w),
+                            N.u(),
+                            L.g(0),
+                            T.l(!1, !1),
+                            D.set("s47"),
+                            D.G("u7", 1),
+                            d.Z.u(),
+                            N.g(1),
+                            T.l(!1, !1));
+                            if (q)
+                                return M ? (d.nc.$(),
+                                d.Z.g(0),
+                                D.set(l),
+                                D.sa("u8", 1 / a.size, 1 / a.size),
+                                T.l(!1, !1),
+                                C = d.nc) : C = d.Z,
+                                C.g(0),
+                                r && (d.tb.u(),
+                                D.set("s22"),
+                                D.sa("u13", u, H / u),
+                                T.l(!1, !1),
+                                C = d.tb,
+                                d.tb.g(0)),
+                                C;
+                            var K = d.Z;
+                            a.normalize && (D.set("gpuRawAvg" === t ? "s9" : "s8"),
+                            D.G("u4", 1 / a.size),
+                            d.oc.$(),
+                            d.Z.g(0),
+                            T.l(!1, !1),
+                            K = d.oc);
+                            h = null;
+                            switch (t) {
+                            case "cpuRGBA2Float":
+                                K.Uc(!1);
+                                C ? h = I.wf(K).then(p) : (K = I.xf(K),
+                                p(K));
+                                break;
+                            case "cpuMeanFloat":
+                                K.Uc(!0);
+                                if (C)
+                                    h = K.zf().then(p);
+                                else {
+                                    K = K.Af();
+                                    for (var O = 0; O < K.length; ++O)
+                                        ;
+                                    p(K)
+                                }
+                                break;
+                            case "gpuRawAvg":
+                            case "gpuRaw":
+                                K.g(0);
+                            case "none":
+                                null !== p && p(K)
+                            }
+                            C && null === h && (h = Promise.resolve());
+                            return h
+                        },
+                        we: function(h) {
+                            h && (t = h.pc || "none",
+                            p = h.mc || null);
+                            d.Z = X.instance({
+                                isFloat: !0,
+                                isPot: !0,
+                                isMipmap: !1,
+                                width: a.size
+                            });
+                            h = "undefined" !== typeof a.classesCount && a.classesCount ? a.classesCount : a.size * a.size;
+                            for (var C = 0, K = 0, O = 0; C < h; ++C)
+                                g.push(K + (a.size - 1 - O) * a.size),
+                                m.push([-1, -1, -1, -1]),
+                                ++K,
+                                K === a.size && (K = 0,
+                                ++O);
+                            a.normalize && (d.oc = X.instance({
+                                isFloat: !0,
+                                isPot: !0,
+                                width: a.size
+                            }))
+                        },
+                        wf: function(h) {
+                            return h.yf().then(c)
+                        },
+                        xf: function(h) {
+                            h = h.Kd();
+                            c(h);
+                            return m
+                        },
+                        m: function() {
+                            for (var h in d) {
+                                var C = d[h];
+                                C && C.remove()
+                            }
+                            z && (z.m(),
+                            z = null)
+                        }
+                    };
+                    a.vb && I.Hf(a.vb);
+                    return I
+                }
+            }
+        }()
+          , Xb = function() {
+            return {
+                instance: function(a) {
+                    var c = X.instance(a.weights);
+                    return {
+                        Da: !0,
+                        eb: function() {
+                            return 1
+                        },
+                        m: function() {
+                            c.remove()
+                        },
+                        Xe: function() {
+                            return c
+                        },
+                        T: function() {
+                            D.set("s27");
+                            c.g(1);
+                            T.l(!1, !1)
+                        }
+                    }
+                }
+            }
+        }()
+          , $b = function() {
+            return {
+                instance: function(a) {
+                    var c = a.fromLayerSize
+                      , d = X.instance(a.weights);
+                    return {
+                        Da: !0,
+                        eb: function() {
+                            return c
+                        },
+                        m: function() {
+                            d.remove()
+                        },
+                        T: function(e) {
+                            if (e.isEnabled) {
+                                D.set("s25");
+                                e.lf.g(3);
+                                var g, m = Math.min(e.pb.length, e.depth);
+                                for (g = 0; g < m; ++g)
+                                    e.pb[g].je(4 + g)
+                            } else
+                                D.set("s24");
+                            D.G("u17", a.toLayerSize);
+                            d.g(1);
+                            T.l(!1, !1)
+                        }
+                    }
+                }
+            }
+        }()
+          , Yb = function() {
+            return {
+                instance: function(a) {
+                    for (var c = a.fromLayerSize, d = a.toLayerSize, e = a.toSparsity, g = e * d, m = g / c, t = c / d, p = 0, q = 0, u = 0, r = Array(e * d * e * d * 4), A = Array(e * d * e * d * 4), v = Array(c * c), n = 0; n < v.length; ++n)
+                        v[n] = 0;
+                    n = Math.floor(e / 2);
+                    for (var y = .5 / d, E = .5 / c, k = .5 / g, M = 0; M < d; ++M)
+                        for (var H = Math.round(M * t), l = 0; l < d; ++l) {
+                            var J = Math.round(l * t)
+                              , w = M / d
+                              , L = l / d;
+                            w += y;
+                            L += y;
+                            for (var N = 0; N < e; ++N) {
+                                var x = H + N - n;
+                                0 > x && (x += c);
+                                x >= c && (x -= c);
+                                for (var f = 0; f < e; ++f) {
+                                    var z = p / g
+                                      , I = q / g
+                                      , h = J + f - n;
+                                    0 > h && (h += c);
+                                    h >= c && (h -= c);
+                                    var C = x / c
+                                      , K = h / c;
+                                    I = 1 - I - 1 / g;
+                                    C += E;
+                                    K += E;
+                                    z += k;
+                                    I += k;
+                                    var O = M * e + N
+                                      , Y = l * e + f;
+                                    Y = d * e - Y - 1;
+                                    O = Y * d * e + O;
+                                    r[4 * O] = z;
+                                    r[4 * O + 1] = I;
+                                    r[4 * O + 2] = C;
+                                    r[4 * O + 3] = K;
+                                    K = v[h * c + x]++;
+                                    O = K % m;
+                                    C = x * m + O;
+                                    h = h * m + (K - O) / m;
+                                    h = c * m - 1 - h;
+                                    h = h * c * m + C;
+                                    A[4 * h] = z;
+                                    A[4 * h + 1] = I;
+                                    A[4 * h + 2] = w;
+                                    A[4 * h + 3] = L;
+                                    ++p >= g && (p = 0,
+                                    ++q);
+                                    ++u
+                                }
+                            }
+                        }
+                    v = null;
+                    var oa = X.instance(a.weights);
+                    delete a.weights.data;
+                    var sa = X.instance({
+                        width: g,
+                        isFloat: !0,
+                        array: new Float32Array(A),
+                        isPot: !0
+                    });
+                    A = null;
+                    var Ca = X.instance({
+                        width: g,
+                        isFloat: !0,
+                        array: new Float32Array(r),
+                        isPot: !0
+                    });
+                    r = null;
+                    return {
+                        Da: !0,
+                        eb: function() {
+                            return m
+                        },
+                        m: function() {
+                            sa.remove();
+                            Ca.remove();
+                            oa.remove()
+                        },
+                        T: function() {
+                            D.set("s23");
+                            oa.g(1);
+                            Ca.g(2);
+                            T.l(!1, !1)
+                        }
+                    }
+                }
+            }
+        }()
+          , ac = function() {
+            return {
+                instance: function(a) {
+                    var c = a.kernelsCount
+                      , d = a.toSparsity
+                      , e = d * a.toLayerSize / a.fromLayerSize
+                      , g = X.instance(a.weights);
+                    return {
+                        Da: !0,
+                        eb: function() {
+                            return e
+                        },
+                        dh: function() {
+                            return d
+                        },
+                        Xe: function() {
+                            return g
+                        },
+                        m: function() {
+                            g.remove()
+                        },
+                        T: function() {
+                            D.set("s26");
+                            D.G("u23", c);
+                            D.G("u24", d);
+                            D.G("u17", a.toLayerSize);
+                            D.G("u25", a.fromLayerSize);
+                            g.g(1);
+                            T.l(!1, !1)
+                        }
+                    }
+                }
+            }
+        }()
+          , Zb = function() {
+            return {
+                instance: function(a, c) {
+                    var d = a.fromLayerSize
+                      , e = a.toLayerSize
+                      , g = a.toSparsity
+                      , m = a.stride ? a.stride : 1
+                      , t = g * e / d
+                      , p = e < d
+                      , q = d / e
+                      , u = X.instance(a.weights)
+                      , r = "s48" + [d.toString(), e.toString(), g.toString(), m.toString(), c].join("_");
+                    D.Fe(r) || (a = Sb.Ie(c, "gl_FragColor", "gl_FragColor"),
+                    e = [{
+                        type: "1f",
+                        name: "u17",
+                        value: e
+                    }, {
+                        type: "1f",
+                        name: "u30",
+                        value: m
+                    }],
+                    p && e.push({
+                        type: "1f",
+                        name: "u25",
+                        value: d
+                    }),
+                    d = [(p ? t : g).toFixed(1), a],
+                    p && d.push(q.toFixed(1)),
+                    D.nd(p ? "s40" : "s39", r, d),
+                    D.S(r, e.concat([{
+                        type: "1i",
+                        name: "u15",
+                        value: 0
+                    }, {
+                        type: "1i",
+                        name: "u22",
+                        value: 1
+                    }, {
+                        type: "1i",
+                        name: "u14",
+                        value: 3
+                    }])));
+                    return {
+                        Da: !1,
+                        eb: function() {
+                            return t
+                        },
+                        m: function() {
+                            u.remove()
+                        },
+                        T: function() {
+                            D.set(r);
+                            u.g(3);
+                            T.l(!1, !1)
+                        }
+                    }
+                }
+            }
+        }()
+          , Vb = function() {
+            return {
+                instance: function(a) {
+                    var c = a.Cd ? a.Cd : 3
+                      , d = a.od ? a.od : 64
+                      , e = a.Fd ? a.Fd : 64
+                      , g = a.mb ? !0 : !1;
+                    a = {
+                        isFloat: !1,
+                        width: d,
+                        isPot: !1,
+                        isFlipY: !1
+                    };
+                    var m = X.instance(a)
+                      , t = X.instance(a)
+                      , p = X.instance(a)
+                      , q = X.instance(a)
+                      , u = X.instance({
+                        isFloat: !0,
+                        width: e,
+                        isPot: !1,
+                        isFlipY: !1
+                    })
+                      , r = 1 / d;
+                    return {
+                        process: function(A) {
+                            D.set("s36");
+                            q.u();
+                            T.l(g, !1);
+                            D.set("s37");
+                            for (var v = 0; v < c; ++v)
+                                m.u(),
+                                D.sa("u8", r, 0),
+                                T.l(g, !1),
+                                p.u(),
+                                q.g(0),
+                                T.l(g, !1),
+                                t.u(),
+                                m.g(0),
+                                D.sa("u8", 0, r),
+                                T.l(g, !1),
+                                q.u(),
+                                p.g(0),
+                                T.l(g, !1),
+                                v !== c - 1 && t.g(0);
+                            D.set("s38");
+                            u.u();
+                            A.g(0);
+                            t.g(1);
+                            q.g(2);
+                            T.l(g, !1);
+                            u.g(0)
+                        },
+                        Vb: function() {
+                            return u
+                        }
+                    }
+                }
+            }
+        }()
+          , Wb = function() {
+            return {
+                instance: function(a) {
+                    function c(u) {
+                        return X.instance({
+                            isFloat: u,
+                            width: d.C,
+                            isPot: !1,
+                            isFlipY: !1
+                        })
+                    }
+                    var d = Object.assign({
+                        be: .1,
+                        Mc: 9,
+                        C: 128,
+                        mb: !1
+                    }, a)
+                      , e = c(!1)
+                      , g = [c(!1), c(!1), c(!1)]
+                      , m = [c(!1), c(!1), c(!1)]
+                      , t = c(!0)
+                      , p = [e, m[0], m[1]];
+                    a = "uniform sampler2D u1;const float e=1.1111,g=2.2222;uniform vec2 u32;varying vec2 vv0;void main(){float b=0.,c=0.;for(float a=-e;a<=e;a+=1.){vec2 i=u32*a,j=vv0+i*g;float d=1.2*a/e,f=exp(-d*d);b+=f*texture2D(u1,j).r,c+=f;}b/=c,gl_FragColor=vec4(b,0.,0.,1.);}".replace("1.1111", Math.round((d.Mc - 1) / 2).toFixed(2)).replace("2.2222", (1 / d.C).toFixed(6));
+                    var q = {
+                        u1: 0
+                    };
+                    D.Kc([{
+                        id: "s50",
+                        name: "_",
+                        h: "uniform sampler2D u1;varying vec2 vv0;const vec3 f=vec3(.2126,.7152,.0722),g=vec3(1.,1.,1.);void main(){vec3 b=texture2D(u1,vv0).rgb;float a=dot(b,f);gl_FragColor=vec4(a,a,a,a);}",
+                        j: q,
+                        i: ["u1"],
+                        precision: "lowp"
+                    }, {
+                        id: "s51",
+                        name: "_",
+                        h: a,
+                        j: q,
+                        i: ["u1", "u32"],
+                        precision: "lowp"
+                    }, {
+                        id: "s52",
+                        name: "_",
+                        h: "uniform sampler2D u33,u34,u35,u36;const float f=1.1111;const vec3 g=vec3(1.,1.,1.);varying vec2 vv0;void main(){vec3 a=texture2D(u33,vv0).rgb;float c=texture2D(u34,vv0).r,d=texture2D(u35,vv0).r,h=texture2D(u36,vv0).r,i=a.r*a.r;vec3 b=vec3(c,d,h),j=max(g*f,abs(i-b*b)),k=sqrt(j);gl_FragColor=vec4(a.r,(a-b)/k);}".replace("1.1111", d.be.toFixed(4)),
+                        j: {
+                            u33: 0,
+                            u34: 1,
+                            u35: 2,
+                            u36: 3
+                        },
+                        i: ["u33", "u34", "u35", "u36"],
+                        precision: "highp"
+                    }]);
+                    return {
+                        process: function() {
+                            D.set("s50");
+                            e.$();
+                            T.l(d.mb, !1);
+                            D.set("s51");
+                            for (var u = 0; 3 > u; ++u)
+                                D.sa("u32", 1, 0),
+                                g[u].u(),
+                                p[u].g(0),
+                                T.l(!1, !1),
+                                D.sa("u32", 0, 1),
+                                m[u].u(),
+                                g[u].g(0),
+                                T.l(!1, !1);
+                            D.set("s52");
+                            t.u();
+                            e.g(0);
+                            m[0].g(1);
+                            m[1].g(2);
+                            m[2].g(3);
+                            T.l(!1, !1);
+                            t.g(0)
+                        },
+                        Vb: function() {
+                            return t
+                        }
+                    }
+                }
+            }
+        }()
+          , V = {
+            ld: function() {
+                return V.Sc() ? document.createElement("video") : !1
+            },
+            Ma: function(a, c) {
+                a[c] = !0;
+                a.setAttribute(c, "true")
+            },
+            re: function() {
+                var a = !1
+                  , c = navigator.userAgent || navigator.vendor || window.opera;
+                if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(c) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(c.substr(0, 4)))
+                    a = !0;
+                return a
+            },
+            Pc: function() {
+                return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream
+            },
+            Je: function() {
+                var a = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
+                return a && a.length && 2 < a.length ? [parseInt(a[1], 10), parseInt(a[2], 10), parseInt(a[3] || 0, 10)] : [0, 0, 0]
+            },
+            zd: function() {
+                try {
+                    return window.matchMedia("(orientation: portrait)").matches ? !0 : !1
+                } catch (a) {
+                    return window.innerHeight > window.innerWidth
+                }
+            },
+            qe: function() {
+                return V.Qc() || V.Pc()
+            },
+            Qc: function() {
+                var a = navigator.userAgent.toLowerCase();
+                return -1 !== a.indexOf("safari") && -1 === a.indexOf("chrome") ? !0 : !1
+            },
+            Gg: function() {
+                return V.re() ? V.zd() ? window.innerHeight / window.innerWidth * 45 : 45 : 45
+            },
+            Sc: function() {
+                return navigator.mediaDevices && navigator.mediaDevices.getUserMedia ? !0 : !1
+            },
+            pause: function(a) {
+                a.pause()
+            },
+            Bh: function(a) {
+                a.play()
+            },
+            release: function(a) {
+                a.pause();
+                a.videoStream && a.videoStream.stop();
+                a.videoStream = null
+            },
+            Rc: function(a) {
+                if (!a)
+                    return a;
+                var c = null;
+                if (a.video) {
+                    var d = function(e) {
+                        return e && "object" === typeof e ? Object.assign({}, e) : e
+                    };
+                    c = {};
+                    "undefined" !== typeof a.video.width && (c.width = d(a.video.width));
+                    "undefined" !== typeof a.video.height && (c.height = d(a.video.height));
+                    "undefined" !== typeof a.video.facingMode && (c.facingMode = d(a.video.facingMode))
+                }
+                c = {
+                    audio: a.audio,
+                    video: c
+                };
+                "undefined" !== typeof a.deviceId && V.Ic(c, a.deviceId);
+                return c
+            },
+            Ic: function(a, c) {
+                c && (a.video = a.video || {},
+                a.video.deviceId = {
+                    exact: c
+                },
+                a.video.facingMode && delete a.video.facingMode)
+            },
+            Xd: function(a) {
+                var c = a.video.width;
+                a.video.width = a.video.height;
+                a.video.height = c;
+                return a
+            },
+            ve: function(a) {
+                function c(v) {
+                    return [480, 576, 640, 648, 720, 768, 800, 960, 1080, 1152, 1280, 1366, 1920].sort(function(n, y) {
+                        return Math.abs(n - v) - Math.abs(y - v)
+                    })
+                }
+                function d(v) {
+                    var n = V.Rc(a);
+                    v = v(n);
+                    g.push(v);
+                    e(v)
+                }
+                function e(v) {
+                    if (v.video && v.video.facingMode && v.video.facingMode.exact) {
+                        var n = v.video.facingMode.exact;
+                        v = V.Rc(v);
+                        delete v.video.facingMode.exact;
+                        v.video.facingMode.ideal = n;
+                        g.push(v)
+                    }
+                }
+                var g = [];
+                if (!a || !a.video)
+                    return g;
+                e(a);
+                if (a.video.width && a.video.height) {
+                    if (a.video.width.ideal && a.video.height.ideal) {
+                        var m = c(a.video.width.ideal).slice(0, 3)
+                          , t = c(a.video.height.ideal).slice(0, 3)
+                          , p = {}
+                          , q = 0;
+                        for (p.la = void 0; q < m.length; p = {
+                            la: p.la
+                        },
+                        ++q) {
+                            p.la = m[q];
+                            var u = {}
+                              , r = 0;
+                            for (u.ka = void 0; r < t.length; u = {
+                                ka: u.ka
+                            },
+                            ++r)
+                                if (u.ka = t[r],
+                                p.la !== a.video.width.ideal || u.ka !== a.video.height.ideal) {
+                                    var A = Math.max(p.la, u.ka) / Math.min(p.la, u.ka);
+                                    A < 4 / 3 - .1 || A > 16 / 9 + .1 || d(function(v, n) {
+                                        return function(y) {
+                                            y.video.width.ideal = v.la;
+                                            y.video.height.ideal = n.ka;
+                                            return y
+                                        }
+                                    }(p, u))
+                                }
+                        }
+                    }
+                    d(function(v) {
+                        return V.Xd(v)
+                    })
+                }
+                a.video.width && a.video.height && (a.video.width.ideal && a.video.height.ideal && d(function(v) {
+                    delete v.video.width.ideal;
+                    delete v.video.height.ideal;
+                    return v
+                }),
+                d(function(v) {
+                    delete v.video.width;
+                    delete v.video.height;
+                    return v
+                }));
+                a.video.facingMode && (d(function(v) {
+                    delete v.video.facingMode;
+                    return v
+                }),
+                a.video.width && a.video.height && d(function(v) {
+                    V.Xd(v);
+                    delete v.video.facingMode;
+                    return v
+                }));
+                g.push({
+                    audio: a.audio,
+                    video: !0
+                });
+                return g
+            },
+            Qf: function(a) {
+                if (V.zd()) {
+                    if (!a || !a.video)
+                        return !1;
+                    var c = a.video.width
+                      , d = a.video.height;
+                    if (!c || !d)
+                        return !1;
+                    if (c.ideal && d.ideal && c.ideal > d.ideal)
+                        return a.video.height = c,
+                        a.video.width = d,
+                        !0
+                }
+                return !1
+            },
+            rb: function(a) {
+                a.volume = 0;
+                V.Ma(a, "muted");
+                if (V.Qc()) {
+                    if (1 === a.volume) {
+                        var c = function() {
+                            a.volume = 0;
+                            window.removeEventListener("mousemove", c, !1);
+                            window.removeEventListener("touchstart", c, !1)
+                        };
+                        window.addEventListener("mousemove", c, !1);
+                        window.addEventListener("touchstart", c, !1)
+                    }
+                    setTimeout(function() {
+                        a.volume = 0;
+                        V.Ma(a, "muted")
+                    }, 5)
+                }
+            },
+            $d: function(a, c, d) {
+                return null === a ? Promise.resolve() : new Promise(function(e, g) {
+                    if (a.srcObject && a.srcObject.getVideoTracks) {
+                        var m = a.srcObject.getVideoTracks();
+                        1 !== m.length ? g("INVALID_TRACKNUMBER") : (m = m[0],
+                        c ? V.get(a, e, g, d) : (m.stop(),
+                        e()))
+                    } else
+                        g("BAD_IMPLEMENTATION")
+                }
+                )
+            },
+            kd: function(a, c, d, e) {
+                function g(t) {
+                    m || (m = !0,
+                    d(t))
+                }
+                var m = !1;
+                return navigator.mediaDevices.getUserMedia(e).then(function(t) {
+                    function p() {
+                        setTimeout(function() {
+                            if (a.currentTime) {
+                                var u = a.videoWidth
+                                  , r = a.videoHeight;
+                                if (0 === u || 0 === r)
+                                    g("VIDEO_NULLSIZE");
+                                else {
+                                    u && (a.style.width = u.toString() + "px");
+                                    r && (a.style.height = r.toString() + "px");
+                                    var A = {
+                                        pe: null,
+                                        Mf: null,
+                                        mf: null
+                                    };
+                                    try {
+                                        var v = t.getVideoTracks()[0];
+                                        v && (A.mf = v,
+                                        A.pe = v.getCapabilities(),
+                                        A.Mf = v.getSettings())
+                                    } catch (n) {}
+                                    V.qe() ? a.parentNode && null !== a.parentNode ? (m || c(a, t, A),
+                                    setTimeout(function() {
+                                        a.play()
+                                    }, 100)) : (document.body.appendChild(a),
+                                    V.rb(a),
+                                    setTimeout(function() {
+                                        a.style.transform = "scale(0.0001,0.0001)";
+                                        a.style.position = "fixed";
+                                        a.style.bottom = "0px";
+                                        a.style.right = "0px";
+                                        V.rb(a);
+                                        setTimeout(function() {
+                                            a.play();
+                                            m || c(a, t, A)
+                                        }, 100)
+                                    }, 80)) : m || c(a, t, A)
+                                }
+                            } else
+                                g("VIDEO_NOTSTARTED")
+                        }, 700)
+                    }
+                    function q() {
+                        a.removeEventListener("loadeddata", q, !1);
+                        var u = a.play();
+                        V.rb(a);
+                        "undefined" === typeof u ? p() : u.then(function() {
+                            p()
+                        }).catch(function() {
+                            g("VIDEO_PLAYPROMISEREJECTED")
+                        })
+                    }
+                    "undefined" !== typeof a.srcObject ? a.srcObject = t : (a.src = window.URL.createObjectURL(t),
+                    a.videoStream = t);
+                    V.rb(a);
+                    a.addEventListener("loadeddata", q, !1)
+                }).catch(function(t) {
+                    g(t)
+                })
+            },
+            Ve: function(a, c) {
+                var d = c || V.ld();
+                return new Promise(function(e, g) {
+                    V.get(d, e, g, a)
+                }
+                )
+            },
+            get: function(a, c, d, e) {
+                if (!a)
+                    return d && d("VIDEO_NOTPROVIDED"),
+                    !1;
+                if (!V.Sc())
+                    return d && d("MEDIASTREAMAPI_NOTFOUND"),
+                    !1;
+                if (e && e.video) {
+                    if (V.Pc()) {
+                        var g = V.Je();
+                        0 !== g[0] && (12 > g[0] || 12 === g[0] && 2 > g[1]) && V.Qf(e)
+                    }
+                    e.video.width && e.video.width.ideal && (a.style.width = e.video.width.ideal + "px");
+                    e.video.height && e.video.height.ideal && (a.style.height = e.video.height.ideal + "px")
+                }
+                V.Ma(a, "autoplay");
+                V.Ma(a, "playsinline");
+                e && e.audio ? a.volume = 0 : V.Ma(a, "muted");
+                V.kd(a, c, function() {
+                    function m(p) {
+                        if (0 === p.length)
+                            d("INVALID_FALLBACKCONSTRAINTS");
+                        else {
+                            var q = p.shift();
+                            V.kd(a, c, function() {
+                                m(p)
+                            }, q)
+                        }
+                    }
+                    var t = V.ve(e);
+                    m(t)
+                }, e)
+            },
+            We: function(a) {
+                if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices)
+                    return a(!1, "NOTSUPPORTED"),
+                    !1;
+                navigator.mediaDevices.enumerateDevices().then(function(c) {
+                    (c = c.filter(function(d) {
+                        return d.kind && -1 !== d.kind.toLowerCase().indexOf("video") && d.label && d.deviceId
+                    })) && c.length && 0 < c.length ? a(c, !1) : a(!1, "NODEVICESFOUND")
+                }).catch(function() {
+                    a(!1, "PROMISEREJECTED")
+                })
+            },
+            gg: function(a, c, d) {
+                var e = {};
+                e[c] = d;
+                c = [];
+                c.push(e);
+                a.applyConstraints({
+                    advanced: c
+                }).catch(function() {})
+            }
+        }
+          , qa = function() {
+            function a(y, E, k, M, H, l, J) {
+                if (!v)
+                    if (J === l.length)
+                        H();
+                    else {
+                        switch (l[J]) {
+                        case "A":
+                            k();
+                            break;
+                        case "D":
+                            y();
+                            break;
+                        case "S":
+                            E().then(function(w, L) {
+                                n.Bb();
+                                a(y, E, k, L ? null : M, H, l, ++J)
+                            }).catch(function() {
+                                H()
+                            });
+                            return;
+                        case "R":
+                            M && M()
+                        }
+                        a(y, E, k, M, H, l, ++J)
+                    }
+            }
+            var c = {
+                n: 5,
+                ic: 1,
+                Bd: 0,
+                cb: [35, 49],
+                Za: [2, 200],
+                k: .7,
+                Vf: 200,
+                uf: .05
+            }
+              , d = -1
+              , e = null
+              , g = -1
+              , m = -1
+              , t = 0
+              , p = -1
+              , q = -1
+              , u = 0
+              , r = 0
+              , A = c.Za[1]
+              , v = !0
+              , n = {
+                Te: function() {
+                    switch (d) {
+                    case -1:
+                        return -1;
+                    case 0:
+                        return q + e.Bd;
+                    case 1:
+                        return u
+                    }
+                },
+                Lg: function(y) {
+                    return Math.pow(Math.min(Math.max(p, 0), e.n - 1) / (e.n - 1), y || 1)
+                },
+                o: function(y) {
+                    e = Object.assign({}, c, y);
+                    p = q = e.ic;
+                    d = 0;
+                    n.reset()
+                },
+                Bb: function(y) {
+                    y = ("undefined" === typeof y ? Date.now() : y) || 0;
+                    var E = Math.min(Math.max(y - r, e.Za[0]), e.Za[1]);
+                    A = E;
+                    r = y;
+                    var k = -1 === g ? 0 : e.k;
+                    g = Math.min(Math.max(1E3 / E, 5), 120) * (1 - k) + g * k;
+                    y - m > e.Vf && 5 < ++t && (E = e.k,
+                    p = p * (1 - E) + (g < e.cb[0] ? q - 1 : g > e.cb[1] ? q + 1 : q) * E,
+                    Math.abs(p - q) > 1 - e.uf && (E = Math.min(Math.max(Math.round(p), 0), e.n - 1),
+                    E !== q && (p = q = E,
+                    g = (e.cb[1] - e.cb[0]) / 2)),
+                    m = y)
+                },
+                qc: function(y, E, k, M, H, l) {
+                    v = !1;
+                    a(y, E, k, M, H, l, 0)
+                },
+                stop: function() {
+                    v = !0
+                },
+                sc: function(y) {
+                    u = y;
+                    d = 1
+                },
+                Bc: function() {
+                    d = 0;
+                    n.reset()
+                },
+                reset: function() {
+                    A = c.Za[1];
+                    m = g = -1;
+                    t = 0
+                },
+                Me: function() {
+                    return A
+                }
+            };
+            return n
+        }()
+          , Na = function() {
+            function a() {
+                d(E + n.hc);
+                k.port.postMessage("DONE")
+            }
+            function c() {
+                J.Ua = 0 === n.Ta ? H(d) : H(e)
+            }
+            function d(f) {
+                l.Aa && null !== y && (f -= E,
+                f = Math.min(Math.max(f, n.Vc[0]), n.Vc[1]),
+                E += f,
+                m(),
+                w.isEnabled && w.Pa && l.W && E - w.cc > n.Fc && (u(),
+                w.cc = E),
+                y(E))
+            }
+            function e(f) {
+                l.Aa && (J.timeout = setTimeout(d.bind(null, f), n.Ta))
+            }
+            function g() {
+                y = null;
+                l.Aa = !1;
+                m()
+            }
+            function m() {
+                J.Ua && (window.cancelAnimationFrame(J.Ua),
+                J.Ua = null);
+                J.timeout && (window.clearTimeout(J.timeout),
+                J.timeout = null)
+            }
+            function t(f) {
+                f && !l.W ? (l.W = !0,
+                M && qa.Bc(),
+                k.port.postMessage("STOP"),
+                aa.Zd(!0),
+                c()) : !f && l.W && (l.W = !1,
+                M && qa.sc(1),
+                aa.Zd(!1),
+                k.port.postMessage("START"))
+            }
+            function p(f) {
+                f.target.hidden ? N() : L()
+            }
+            function q(f, z, I) {
+                z = f.createShader(z);
+                f.shaderSource(z, I);
+                f.compileShader(z);
+                return z
+            }
+            function u() {
+                w.Pa = !1;
+                var f = w.ga
+                  , z = w.hb
+                  , I = w.ib
+                  , h = w.V;
+                f.uniform1f(w.md, Math.random());
+                w.Ba ? z.beginQueryEXT(h, I) : f.beginQuery(h, I);
+                f.drawElements(f.POINTS, 1, f.UNSIGNED_SHORT, 0);
+                w.Ba ? z.endQueryEXT(h) : f.endQuery(h);
+                aa.flush();
+                A().then(function(C) {
+                    C = n.ce * n.Ec * 1E3 / C;
+                    w.Eb = (w.Eb + 1) % n.Ea;
+                    w.dc[w.Eb] = C;
+                    ++w.Ad > n.Ea && (w.ob.set(w.dc),
+                    w.ob.sort(function(K, O) {
+                        return K - O
+                    }),
+                    C = w.ob[Math.floor(n.Ea / 2)],
+                    w.ab = Math.max(w.ab, C),
+                    n.Dc(C / w.ab));
+                    w.Pa = !0
+                }).catch(function() {
+                    w.Pa = !0
+                })
+            }
+            function r(f) {
+                var z = w.ga
+                  , I = w.hb
+                  , h = w.ib;
+                h = w.Ba ? I.Ig(h, I.QUERY_RESULT_AVAILABLE_EXT) : z.getQueryParameter(h, z.QUERY_RESULT_AVAILABLE);
+                z = z.getParameter(I.GPU_DISJOINT_EXT);
+                h ? f(!z) : setTimeout(r.bind(null, f), .1)
+            }
+            function A() {
+                return new Promise(function(f, z) {
+                    r(function(I) {
+                        if (I) {
+                            I = w.ga;
+                            var h = w.hb
+                              , C = w.ib;
+                            I = w.Ba ? h.getQueryObjectEXT(C, h.QUERY_RESULT_EXT) : I.getQueryParameter(C, I.QUERY_RESULT);
+                            f(I)
+                        } else
+                            z()
+                    })
+                }
+                )
+            }
+            var v = {
+                ud: !0,
+                Vc: [1, 200],
+                hc: 20,
+                Ta: 0,
+                Ec: 50,
+                ce: 240,
+                Fc: 3E3,
+                Ea: 3,
+                Dc: null
+            }
+              , n = null
+              , y = null
+              , E = 0
+              , k = null
+              , M = !1
+              , H = null
+              , l = {
+                pa: !1,
+                W: !0,
+                bc: !1,
+                ac: !1,
+                $b: !1,
+                Aa: !1
+            }
+              , J = {
+                Ua: null,
+                timeout: null
+            }
+              , w = {
+                isEnabled: !1,
+                Pa: !1,
+                ga: null,
+                hb: null,
+                ib: null,
+                V: null,
+                md: null,
+                Ba: !0,
+                cc: 0,
+                Ad: 0,
+                dc: null,
+                ob: null,
+                Eb: 0,
+                ab: 0
+            }
+              , L = t.bind(null, !0)
+              , N = t.bind(null, !1)
+              , x = {
+                o: function(f) {
+                    n = Object.assign(v, f);
+                    Object.assign(l, {
+                        W: !0,
+                        pa: !0,
+                        Aa: !1
+                    });
+                    H = window.requestPostAnimationFrame || window.requestAnimationFrame;
+                    if (null !== n.Dc) {
+                        f = document.createElement("canvas");
+                        f.setAttribute("width", "1");
+                        f.setAttribute("height", "1");
+                        var z = {
+                            antialias: !1
+                        };
+                        f = f.getContext("webgl2", z) || f.getContext("webgl", z);
+                        if (z = f.getExtension("EXT_disjoint_timer_query") || f.getExtension("EXT_disjoint_timer_query_webgl2")) {
+                            w.ga = f;
+                            w.hb = z;
+                            w.isEnabled = !0;
+                            w.Ba = z.beginQueryEXT ? !0 : !1;
+                            var I = q(f, f.VERTEX_SHADER, "attribute vec4 a0;void main(){gl_Position=a0;}")
+                              , h = q(f, f.FRAGMENT_SHADER, "precision lowp float;uniform float u37;void main(){vec4 a=u37*vec4(1.,2.,3.,4.);for(int b=0;b<666;b+=1)a=cos(a);gl_FragColor=a;}".replace("666", n.Ec.toString()))
+                              , C = f.createProgram();
+                            f.attachShader(C, I);
+                            f.attachShader(C, h);
+                            f.linkProgram(C);
+                            I = f.getAttribLocation(C, "a0");
+                            w.md = f.getUniformLocation(C, "u37");
+                            f.useProgram(C);
+                            f.enableVertexAttribArray(I);
+                            C = f.createBuffer();
+                            f.bindBuffer(f.ARRAY_BUFFER, C);
+                            f.bufferData(f.ARRAY_BUFFER, new Float32Array([.5, .5, 0, 1]), f.STATIC_DRAW);
+                            f.vertexAttribPointer(I, 4, f.FLOAT, !1, 16, 0);
+                            C = f.createBuffer();
+                            f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, C);
+                            f.bufferData(f.ELEMENT_ARRAY_BUFFER, new Uint16Array([0]), f.STATIC_DRAW);
+                            f.disable(f.DEPTH_TEST);
+                            f.disable(f.DITHER);
+                            f.disable(f.STENCIL_TEST);
+                            f.viewport(0, 0, 1, 1);
+                            C = w.Ba ? z.createQueryEXT() : f.createQuery();
+                            w.ib = C;
+                            w.V = z.TIME_ELAPSED_EXT || f.TIME_ELAPSED;
+                            w.cc = -n.Fc;
+                            w.dc = new Float32Array(n.Ea);
+                            w.ob = new Float32Array(n.Ea);
+                            w.ab = 0;
+                            w.Eb = 0;
+                            w.Ad = 0;
+                            w.Pa = !0
+                        }
+                    }
+                    if (n.ud) {
+                        f = !1;
+                        try {
+                            if ("undefined" === typeof SharedWorker) {
+                                var K = URL.createObjectURL(new Blob(["let handler = null;\n      self.addEventListener('message', function(e){\n        if (handler !== null){\n          clearTimeout(handler);\n          handler = null;\n        }\n        switch (e.data) {\n          case 'START':\n          case 'DONE':\n            handler = setTimeout(function(){\n              self.postMessage('TICK');\n            }, " + n.hc.toString() + ");\n            break;\n          case 'STOP':\n            break;\n        };\n      }, false);"],{
+                                    type: "text/javascript"
+                                }))
+                                  , O = new Worker(K);
+                                O.addEventListener("message", a);
+                                k = {
+                                    Id: O,
+                                    port: O
+                                };
+                                l.bc = !0
+                            } else {
+                                var Y = URL.createObjectURL(new Blob(["let handler = null;\n      onconnect = function(e) {\n        const port = e.ports[0];\n        port.addEventListener('message', function(e) {\n          \n          if (handler !== null){\n            clearTimeout(handler);\n            handler = null;\n          }\n          switch (e.data) {\n            case 'START':\n            case 'DONE':\n              handler = setTimeout(function(){\n                port.postMessage('TICK');\n              }, " + n.hc.toString() + ");\n              break;\n            case 'STOP':\n              break;\n          };\n          \n        });\n        \n        port.start();\n      } // end onconnect()"],{
+                                    type: "text/javascript"
+                                }))
+                                  , oa = new SharedWorker(Y);
+                                oa.port.start();
+                                oa.port.addEventListener("message", a);
+                                k = {
+                                    Id: oa,
+                                    port: oa.port
+                                };
+                                l.ac = !0
+                            }
+                            f = !0
+                        } catch (sa) {}
+                        f && ("onvisibilitychange"in document ? document.addEventListener("visibilitychange", p) : (window.addEventListener("blur", N),
+                        window.addEventListener("focus", L)),
+                        l.$b = !0)
+                    }
+                    M = "undefined" !== typeof qa
+                },
+                m: function() {
+                    g();
+                    l.$b && ("onvisibilitychange"in document ? document.removeEventListener("visibilitychange", p) : (window.removeEventListener("blur", N),
+                    window.removeEventListener("focus", L)),
+                    l.$b = !1);
+                    l.ac ? (k.port.close(),
+                    l.ac = !1) : l.bc && (k.Id.terminate(),
+                    l.bc = !1);
+                    Object.assign(l, {
+                        W: !0,
+                        pa: !1,
+                        Aa: !1
+                    });
+                    y = null
+                },
+                qh: function() {
+                    return l.W
+                },
+                update: function(f) {
+                    Object.assign(n, f)
+                },
+                qc: function(f) {
+                    l.pa || x.o({});
+                    m();
+                    l.Aa = !0;
+                    y = f;
+                    l.W && c()
+                },
+                stop: g
+            };
+            return x
+        }()
+          , vb = function() {
+            var a = {
+                Ed: 4,
+                ub: [1.5, 1.5, 2],
+                N: [.1, .1, .1],
+                Md: 1,
+                C: -1,
+                L: -1,
+                Pf: 2,
+                tf: 1,
+                Od: !0,
+                De: .8
+            }
+              , c = null
+              , d = []
+              , e = [0]
+              , g = [.5, .5, 1];
+            return {
+                o: function(m) {
+                    c = Object.assign({}, a, m);
+                    d.splice(0);
+                    m = c.ub[0] * c.N[0];
+                    var t = c.ub[1] * c.N[1]
+                      , p = 1 / (1 + c.ub[2] * c.N[2])
+                      , q = c.Md * Math.min(c.C, c.L)
+                      , u = q / c.C;
+                    q /= c.L;
+                    var r = .5 * c.De;
+                    r *= r;
+                    for (var A = 0; A < c.Ed; ++A) {
+                        var v = Math.pow(p, A)
+                          , n = u * v
+                          , y = q * v;
+                        v = n * c.tf;
+                        var E = n * m
+                          , k = y * t;
+                        n /= 2;
+                        y /= 2;
+                        for (var M = 1 + (1 - n - n) / E, H = 1 + (1 - y - y) / k, l = 0; l < H; ++l)
+                            for (var J = y + l * k, w = J - .5, L = 0; L < M; ++L) {
+                                var N = n + L * E
+                                  , x = N - .5;
+                                x * x + w * w > r || d.push([N, J, v])
+                            }
+                    }
+                    c.Od && d.sort(function(f, z) {
+                        var I = f[0] - .5;
+                        f = f[1] - .5;
+                        var h = z[0] - .5;
+                        z = z[1] - .5;
+                        return I * I + f * f - (h * h + z * z)
+                    })
+                },
+                get: function(m) {
+                    var t = d.length;
+                    if (0 === t)
+                        return g;
+                    for (; m >= e.length; )
+                        e.push(0);
+                    e[m] >= t && (e[m] = 0);
+                    var p = d[Math.floor(e[m])];
+                    e[m] = (e[m] + 1 / c.Pf) % t;
+                    return p
+                },
+                reset: function() {
+                    for (var m = d.length / e.length, t = 0; t < e.length; ++t)
+                        e[t] = Math.floor(t * m)
+                }
+            }
+        }()
+          , da = function() {
+            function a(r, A, v, n) {
+                return v > r ? Math.max(0, r + A / 2 - (v - n / 2)) : Math.max(0, v + n / 2 - (r - A / 2))
+            }
+            function c(r) {
+                return !g.rd(r)
+            }
+            function d(r, A, v) {
+                return r.some(function(n, y) {
+                    if (y === A)
+                        return !1;
+                    y = r[A];
+                    return y.qa > n.qa || 3 > n.qa || a(y.x, y.ja, n.x, n.ja) < g.fc * y.ja ? !1 : a(y.y, y.ja * v, n.y, n.ja * v) > g.fc * y.ja * v
+                })
+            }
+            var e = {
+                M: 1,
+                fc: .3,
+                Pd: .3,
+                rd: null,
+                ff: !0
+            }
+              , g = null
+              , m = 0
+              , t = null
+              , p = !1
+              , q = 0
+              , u = 0;
+            return {
+                o: function(r) {
+                    g = Object.assign({}, e, r);
+                    t = [0]
+                },
+                yd: function() {
+                    return 1 !== g.M
+                },
+                hd: function() {
+                    return m
+                },
+                xd: function() {
+                    return p
+                },
+                na: function() {
+                    return g.M
+                },
+                ah: function() {
+                    return t
+                },
+                jf: function(r) {
+                    return t.includes(r)
+                },
+                update: function(r, A) {
+                    var v = t;
+                    if (v.length > r)
+                        v.splice(0, v.length - r);
+                    else
+                        for (; v.length < r; )
+                            v.push(0);
+                    if (1 !== g.M)
+                        if (A.every(c)) {
+                            A = q;
+                            for (var n = 0; n < r; ++n)
+                                v[n] = A,
+                                A = (A + 1) % g.M;
+                            q = A
+                        } else {
+                            n = Math.round(g.Pd * r);
+                            n = Math.max(1, n);
+                            for (var y = q, E = 0, k = 0; E < r; ++E) {
+                                if (c(A[y]) && ++k > n) {
+                                    do
+                                        ++y === g.M && (y = 0);
+                                    while (c(A[y]))
+                                }
+                                v[E] = y;
+                                y = (y + 1) % g.M
+                            }
+                            q = y
+                        }
+                },
+                Bb: function(r) {
+                    m = t[r];
+                    u = (.5 + m) / g.M;
+                    p = t.lastIndexOf(m) === r;
+                    return m
+                },
+                Nf: function(r, A) {
+                    return 1 === g.M ? !1 : d(r, m, A)
+                },
+                Yd: function(r) {
+                    g.ff && 1 === g.M || D.G(r, u)
+                },
+                Ce: function(r) {
+                    for (var A = new Float32Array(r.length * g.M), v = 0, n; v < g.M; ++v)
+                        for (n = 0; n < r.length; ++n)
+                            A[v * r.length + n] = r[n];
+                    return A
+                },
+                Qb: function(r) {
+                    for (var A = [], v = 0; v < g.M; ++v)
+                        A.push(JSON.parse(JSON.stringify(r)));
+                    return A
+                }
+            }
+        }()
+          , ea = {
+            neuralNetworkPath: "NN_DEFAULT.json",
+            ba: 0,
+            Cf: {
+                threshold: 1.2,
+                nScaleLevels: 2,
+                scale0Factor: .8,
+                nDetectsPerLoopRange: [2, 12],
+                overlapFactors: [2, 2, 3],
+                scanCenterFirst: !0,
+                nDetectsPerLoop: -1,
+                multiDetectionThresholdFactors: [.5, .6],
+                translationScalingFactors: [.3, .3, 1],
+                isCleanGLStateAtEachIteration: !0,
+                animateProcessOrder: "DSAR"
+            },
+            Sf: 50,
+            qf: .4,
+            pf: 8,
+            rf: .3,
+            Of: {
+                translationFactorRange: [.002, .005],
+                rotationFactorRange: [.015, .1],
+                qualityFactorRange: [.9, .98],
+                alphaRange: [.05, 1],
+                followZRotAlphaFactor: .8
+            },
+            Qa: [.65, 1, .262],
+            ee: .2,
+            ge: 2,
+            fe: .1,
+            sf: 8,
+            Dd: 1,
+            Ge: Za.qb.bind(null, .3, .7),
+            Xf: 20,
+            Vd: 3
+        }
+          , pa = {
+            facingMode: "user",
+            idealWidth: 800,
+            idealHeight: 600,
+            minWidth: 480,
+            maxWidth: 1920,
+            minHeight: 480,
+            maxHeight: 1920,
+            rotate: 0,
+            flipX: !1
+        }
+          , ia = {
+            kc: -3,
+            kf: -1,
+            error: -2,
+            ready: 1,
+            play: 2,
+            pause: 3
+        }
+          , na = ia.kc
+          , G = null
+          , bc = {
+            kb: !1,
+            vc: null,
+            element: null,
+            K: null,
+            D: [0, 0],
+            v: [.5, 0, 0, .5],
+            wb: 0,
+            Ka: null,
+            jb: !1
+        }
+          , Q = null
+          , cc = {
+            Ja: null,
+            Gb: null,
+            antialias: !0,
+            Gc: "./",
+            Fa: null,
+            da: null,
+            ba: ea.ba,
+            Hd: ea.ba,
+            lb: !1,
+            wa: !0
+        }
+          , Pa = null
+          , ba = null
+          , ra = null
+          , Qa = 1
+          , Oa = {
+            rc: -1,
+            Lb: -1
+        }
+          , Z = null
+          , dc = {
+            C: 0,
+            L: 0,
+            D: [0, 0],
+            Oa: null
+        }
+          , U = {
+            ta: null,
+            buffer: null,
+            N: null,
+            Qa: null,
+            Y: ea.Dd,
+            Nd: 1,
+            Na: null
+        }
+          , Sa = null
+          , Fa = null
+          , hb = []
+          , ib = []
+          , qb = {
+            VERSION: "3.1.1",
+            init: function(a) {
+                function c() {
+                    na !== ia.error && 2 === ++e && (Ka(),
+                    xb(),
+                    Ja(),
+                    Q.Ja && (na = ia.ready,
+                    Q.Ja(!1, {
+                        GL: b,
+                        canvasElement: Q.da,
+                        videoTexture: G.K.get(),
+                        videoTransformMat2: G.v,
+                        maxFacesDetected: da.na(),
+                        videoElement: G.element
+                    }),
+                    gb()),
+                    fb())
+                }
+                if (na !== ia.kc)
+                    return a.callbackReady && a.callbackReady("ALREADY_INITIALIZED"),
+                    !1;
+                na = ia.kf;
+                G = Object.assign({}, bc);
+                Q = Object.assign({}, cc);
+                Z = Object.assign({}, dc);
+                U.Qa = ea.Qa.slice(0);
+                "undefined" !== typeof a.antialias && (Q.antialias = a.antialias);
+                a.callbackReady && (Q.Ja = a.callbackReady);
+                a.callbackTrack && (Q.Gb = a.callbackTrack);
+                a.nExpressions && (U.Y = a.nExpressions);
+                a.expressionsEasings && (U.Na = a.expressionsEasings);
+                "undefined" !== typeof a.animateDelay && (Q.ba = a.animateDelay);
+                "undefined" !== typeof a.NNCPath && (Q.Gc = a.NNCPath);
+                "undefined" !== typeof a.NNC && (Q.Fa = a.NNC);
+                "undefined" !== typeof a.followZRot && (Q.wa = a.followZRot ? !0 : !1);
+                if (!a.canvasId && !a.canvas)
+                    return Ia("NO_CANVASID"),
+                    !1;
+                Q.da = a.canvas ? a.canvas : document.getElementById(a.canvasId);
+                if (!Q.da)
+                    return Ia("INVALID_CANVASID"),
+                    !1;
+                Z.C = Q.da.width;
+                Z.L = Q.da.height;
+                if (!Z.C || !Z.L)
+                    return Ia("INVALID_CANVASDIMENSIONS"),
+                    !1;
+                ba = Object.create(ea.Cf);
+                a.scanSettings && Object.assign(ba, a.scanSettings);
+                var d = 1;
+                "undefined" !== typeof a.maxFacesDetected && (d = Math.max(1, a.maxFacesDetected));
+                if (d > ea.pf)
+                    return Ia("MAXFACES_TOOHIGH"),
+                    !1;
+                da.o({
+                    M: d,
+                    fc: ea.qf,
+                    Pd: ea.rf,
+                    rd: function(g) {
+                        return g.detected > ba.multiDetectionThresholdFactors[1] * ba.threshold
+                    }
+                });
+                for (d = 0; d < da.na(); ++d)
+                    hb.push(new Float32Array(ea.sf)),
+                    ib.push(0);
+                Na.o({
+                    ud: a.isKeepRunningOnWinFocusLost || !1,
+                    Ta: Q.ba
+                });
+                qa.o({
+                    ic: 0,
+                    n: ba.nDetectsPerLoopRange[1] - ba.nDetectsPerLoopRange[0] + 1,
+                    Bd: ba.nDetectsPerLoopRange[0]
+                });
+                -1 !== ba.nDetectsPerLoop ? qa.sc(ba.nDetectsPerLoop) : qa.Bc();
+                U.N = ba.translationScalingFactors.slice(0);
+                ra = Object.create(ea.Of);
+                a.stabilizationSettings && Object.assign(ra, a.stabilizationSettings);
+                var e = 0;
+                a.videoSettings && a.videoSettings.videoElement ? ab(a.videoSettings.videoElement, c) : (a.videoSettings && Object.assign(pa, a.videoSettings),
+                zb(a.onWebcamAsk, a.onWebcamGet, function(g) {
+                    ab(g, c)
+                }));
+                Ob(function(g) {
+                    if (!Pb())
+                        return !1;
+                    Pa = new Fb({
+                        pb: g.layers,
+                        pc: "gpuRawAvg",
+                        mc: Qb
+                    });
+                    D.Kc([{
+                        id: "s54",
+                        name: "_",
+                        ua: "attribute vec2 a0;uniform mat2 u38;varying vec2 vv0;void main(){gl_Position=vec4(a0,0.,1.),vv0=vec2(.5,.5)+u38*a0;}",
+                        Va: ["a0"],
+                        Ha: [2],
+                        h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vv0);}",
+                        i: ["u1", "u38"],
+                        precision: "lowp"
+                    }, {
+                        id: "s55",
+                        name: "_",
+                        h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vv0);}",
+                        ua: "attribute vec2 a0;uniform sampler2D u39;uniform mat2 u38;uniform vec2 u40;uniform float u41,u42,u43;varying vec2 vv0;void main(){vec4 a=texture2D(u39,vec2(.17,u41));vec2 f=a.gb,g=a.a*u40,b=a0;b.x*=u43;float c=cos(u42),d=sin(u42);vec2 h=mat2(c,d,-d,c)*b,i=f+h*.5*g,j=i-.5;vv0=vec2(.5,.5)+2.*u38*j,gl_Position=vec4(a0,0.,1.);}",
+                        Va: ["a0"],
+                        Ha: [2],
+                        i: "u1 u39 u40 u41 u42 u43 u38".split(" "),
+                        precision: "lowp"
+                    }, {
+                        id: "s56",
+                        name: "_",
+                        h: "uniform sampler2D u44,u39;uniform vec3 u45,u46;uniform float u47,u48,u41,u49,u42,u50;const vec4 e=vec4(.25,.25,.25,.25);void main(){vec4 d=texture2D(u44,vec2(.625,.625)),f=texture2D(u44,vec2(.875,.625)),a=texture2D(u39,vec2(.17,u41));float g=dot(d-f,e);bool h=g>u48;a.r<-.5?a.r+=1.:h?a.r=2.:a.r>u47?a.r=0.:a.r>1.9?a.r+=1.:0.,a.r=mix(-2.,a.r,u49);if(a.r<.9)a=vec4(1.,u45);else{a.r*=step(1.9,a.r);float i=dot(e,texture2D(u44,vec2(.875,.875))),j=dot(e,texture2D(u44,vec2(.125,.625))),k=dot(e,texture2D(u44,vec2(.375,.625))),b=cos(u42),c=sin(u42);vec2 l=mat2(b,c*u50,-c/u50,b)*vec2(i,j);a.gba+=vec3(l,k)*u46*a.a;}gl_FragColor=a;}",
+                        ua: "attribute vec2 a0;void main(){gl_Position=vec4(a0,0.,1.);}",
+                        i: "u44 u39 u45 u47 u46 u49 u42 u50 u48 u41".split(" ")
+                    }, {
+                        id: "s57",
+                        name: "_",
+                        ua: "attribute vec2 a0;void main(){gl_Position=vec4(a0,0.,1.);}",
+                        h: "uniform sampler2D u44;uniform float u49;const vec4 e=vec4(.25,.25,.25,.25);const vec3 f=vec3(.5,.5,.5);void main(){float a=dot(e,texture2D(u44,vec2(.125,.875))),b=dot(e,texture2D(u44,vec2(.375,.875))),c=dot(e,texture2D(u44,vec2(.625,.875))),d=dot(e,texture2D(u44,vec2(.625,.625)));vec3 g=vec3(a,b,c)*.5+f;gl_FragColor=vec4(g,d*u49);}",
+                        i: ["u44", "u49"]
+                    }, {
+                        id: "s58",
+                        name: "_",
+                        ua: "attribute vec2 a0;void main(){gl_Position=vec4(a0,0.,1.);}",
+                        h: "uniform sampler2D u44;const vec4 e=vec4(.25,.25,.25,.25);void main(){float a=dot(e,texture2D(u44,vec2(.375,.375))),b=dot(e,texture2D(u44,vec2(.625,.375))),c=dot(e,texture2D(u44,vec2(.875,.375))),d=dot(e,texture2D(u44,vec2(.125,.125)));gl_FragColor=vec4(a,b,c,d);}",
+                        i: ["u44"]
+                    }, {
+                        id: "s53",
+                        name: "_",
+                        h: "uniform sampler2D u39;uniform vec2 u51;uniform float u52;varying vec2 vv0;void main(){float f=step(.5,mod(gl_FragCoord.y+1.5,2.)),c=step(.33,vv0.x);vec4 a=texture2D(u39,vv0+u51);a.a=mix(a.a*u52,a.a,c);vec4 d=floor(255.*a),g=255.*(255.*a-d),b=mix(d,g,f)/255.;b.x=mix(step(a.x,1.5),b.x,c),gl_FragColor=b;}",
+                        i: ["u39", "u52", "u51"]
+                    }]);
+                    ub();
+                    U.buffer = new Uint8Array(8 * ea.Vd * da.na());
+                    Sa = da.Qb({
+                        Xa: 0,
+                        x: 0,
+                        y: 0,
+                        ja: 1,
+                        rx: 0,
+                        ry: 0,
+                        Ra: 0,
+                        cd: new Float32Array(U.Y),
+                        qa: 0
+                    });
+                    Fa = da.Qb({
+                        detected: 0,
+                        x: 0,
+                        y: 0,
+                        s: 1,
+                        xRaw: 0,
+                        yRaw: 0,
+                        sRaw: 1,
+                        rx: 0,
+                        ry: 0,
+                        rz: 0,
+                        expressions: new Float32Array(U.Y)
+                    });
+                    da.Qb({
+                        dx: 0,
+                        dy: 0,
+                        Pb: 0,
+                        Mb: 0,
+                        Nb: 0,
+                        Ob: 0
+                    });
+                    kb();
+                    jb();
+                    c()
+                });
+                return !0
+            },
+            destroy: function() {
+                Na.m();
+                return new Promise(function(a) {
+                    qb.toggle_pause(!0, !0).finally(function() {
+                        Pa && Pa.m();
+                        Ha.m();
+                        Pa = Fa = Sa = null;
+                        hb.splice(0);
+                        ib.splice(0);
+                        Z.Oa = null;
+                        U.ta = null;
+                        G.K = null;
+                        na = ia.kc;
+                        a()
+                    }).catch(function() {})
+                }
+                )
+            },
+            toggle_videoStream: function(a) {
+                return G.jb || !G.element ? Promise.resolve() : V.$d(G.element, a, G.Ka)
+            },
+            toggle_pause: function(a, c) {
+                if (!Ya())
+                    return Promise.reject("NOT_READY");
+                c = c ? qb.toggle_videoStream(!a) : Promise.resolve();
+                a ? sb() : c.then(function() {
+                    fb()
+                });
+                return c
+            },
+            update_videoSettings: function(a) {
+                sb();
+                return new Promise(function(c, d) {
+                    V.$d(G.element, !1, G.Ka).then(function() {
+                        Object.assign(pa, a);
+                        zb(null, null, function(e) {
+                            ab(e, function() {
+                                Ka();
+                                Ja();
+                                fb();
+                                c()
+                            })
+                        })
+                    }).catch(d)
+                }
+                )
+            },
+            toggle_slow: function(a) {
+                Ya() && na === ia.play && (a && !Q.lb ? (Q.Hd = Q.ba,
+                ba.nDetectsPerLoop = 1,
+                this.set_animateDelay(ea.Zf),
+                Q.lb = !0) : !a && Q.lb && (ba.nDetectsPerLoop = -1,
+                this.set_animateDelay(Q.Hd),
+                Q.lb = !1))
+            },
+            set_animateDelay: function(a) {
+                Q.ba = a;
+                Na.update({
+                    Ta: Q.ba
+                })
+            },
+            resize: function() {
+                if (!Ya())
+                    return !1;
+                var a = Q.da.width
+                  , c = Q.da.height;
+                if (!lb() && a === Z.C && c === Z.L)
+                    return !1;
+                Z.C = a;
+                Z.L = c;
+                D.P();
+                kb();
+                jb();
+                Ka();
+                Ja();
+                return !0
+            },
+            set_inputTexture: function(a, c, d) {
+                G.D[0] = c;
+                G.D[1] = d;
+                G.K = X.instance({
+                    width: c,
+                    height: d,
+                    Wb: a
+                });
+                G.kb = !0;
+                Ka();
+                gb();
+                Ja()
+            },
+            reset_GLState: function() {
+                gb();
+                Z.Oa.remove();
+                U.ta.remove();
+                ub()
+            },
+            render_video: function() {
+                va.O();
+                D.set("s54");
+                b.viewport(0, 0, Z.C, Z.L);
+                G.K.g(0);
+                T.l(!0, !0)
+            },
+            reset_inputTexture: function() {
+                G.kb = !1;
+                G.K = G.vc;
+                lb();
+                Ka();
+                Ja()
+            },
+            get_videoDevices: function(a) {
+                return V.We(a)
+            },
+            set_scanSettings: function(a) {
+                Object.assign(ba, a);
+                -1 !== ba.nDetectsPerLoop ? qa.sc(ba.nDetectsPerLoop) : qa.Bc();
+                kb();
+                jb()
+            },
+            set_stabilizationSettings: function(a) {
+                Object.assign(ra, a)
+            },
+            set_videoOrientation: function(a, c) {
+                Ya() && (pa.flipX = c,
+                pa.rotate = a,
+                Ka(),
+                Ja())
+            },
+            update_videoElement: function(a, c) {
+                ab(a ? a : G.element, function() {
+                    xb();
+                    Ka();
+                    Ja();
+                    c && c()
+                })
+            },
+            create_new: function() {
+                return window.JEELIZFACEFILTERGEN()
+            }
+        };
+        return qb
+    }
+    ;
+    window.JEELIZFACEFILTER = window.JEELIZFACEFILTERGEN();
+    ;return JEELIZFACEFILTER || window.JEELIZFACEFILTER;
+}
+)();

+ 5060 - 0
static/neuralNets/jeelizFaceFilter.module.js

@@ -0,0 +1,5060 @@
+ /**
+  * Jeeliz Face Filter - https://github.com/jeeliz/jeelizFaceFilter
+  *
+  * Copyright 2020 WebAR.rocks ( https://webar.rocks )
+  *
+  * 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.
+  */
+
+ /* eslint-enable */
+ /* prettier-ignore */
+ const JEELIZFACEFILTERGEN = function() {
+ 	function Fb(a) {
+ 		var c = null,
+ 			d = null,
+ 			e = null,
+ 			g = 0;
+ 		this.o = function(m) {
+ 			this.Ff(m.pb);
+ 			e.we({
+ 				pc: m.pc,
+ 				mc: m.mc
+ 			})
+ 		};
+ 		this.Se = function(m) {
+ 			return c[m]
+ 		};
+ 		this.Ff = function(m) {
+ 			var t = null;
+ 			g = m.length;
+ 			c = m.map(function(p, q) {
+ 				p = Object.assign({}, p, {
+ 					index: q,
+ 					parent: this,
+ 					vb: t,
+ 					ef: q === g - 1
+ 				});
+ 				return t = q = 0 === q ? Gb.instance(p) : Hb.instance(p)
+ 			});
+ 			d = c[0];
+ 			e = c[g - 1];
+ 			c.forEach(function(p, q) {
+ 				0 !== q && p.vf()
+ 			})
+ 		};
+ 		this.T = function(m) {
+ 			m.g(0);
+ 			var t = m;
+ 			c.forEach(function(p) {
+ 				t = p.T(t, !1)
+ 			});
+ 			return t
+ 		};
+ 		this.Re = function() {
+ 			return d.F()
+ 		};
+ 		this.Vb = function() {
+ 			return e.Ue()
+ 		};
+ 		this.gd = function() {
+ 			return e.gd()
+ 		};
+ 		this.m = function() {
+ 			c && (c.forEach(function(m) {
+ 				m.m()
+ 			}), e = d = c = null, g = 0)
+ 		};
+ 		"undefined" !== typeof a && this.o(a)
+ 	}
+
+ 	function eb(a, c) {
+ 		var d = c % 8;
+ 		return a[(c - d) / 8] >> 7 - d & 1
+ 	}
+
+ 	function Ib(a) {
+ 		var c = JSON.parse(a);
+ 		a = c.ne;
+ 		var d = c.nf,
+ 			e = c.n;
+ 		var g = "undefined" === typeof btoa ? Buffer.from(c.data, "base64")
+ 			.toString("latin1") : atob(c.data);
+ 		var m = g.length;
+ 		c = new Uint8Array(m);
+ 		for(var t = 0; t < m; ++t) c[t] = g.charCodeAt(t);
+ 		g = new Float32Array(e);
+ 		m = new Float32Array(d);
+ 		t = a + d +
+ 			1;
+ 		for(var p = 0; p < e; ++p) {
+ 			for(var q = t * p, u = 0 === eb(c, q) ? 1 : -1, r = q + 1, A = 1, v = 0, n = r + a - 1; n >= r; --n) v += A * eb(c, n), A *= 2;
+ 			r = v;
+ 			q = q + 1 + a;
+ 			A = m.length;
+ 			v = 0;
+ 			for(n = q; n < q + A; ++n) m[v] = eb(c, n, !0), ++v;
+ 			for(A = q = 0; A < d; ++A) q += m[A] * Math.pow(2, -A - 1);
+ 			g[p] = 0 === q && 0 === r ? 0 : u * (1 + q) * Math.pow(2, 1 + r - Math.pow(2, a - 1))
+ 		}
+ 		return g
+ 	}
+
+ 	function Ya() {
+ 		return -1 !== [ia.ready, ia.play, ia.pause].indexOf(na)
+ 	}
+
+ 	function fb() {
+ 		if(na === ia.play) return !1;
+ 		na = ia.play;
+ 		Na.stop();
+ 		rb(0)
+ 	}
+
+ 	function sb() {
+ 		if(na !== ia.play) return !1;
+ 		qa.stop();
+ 		Na.stop();
+ 		na = ia.pause;
+ 		return !0
+ 	}
+
+ 	function Ea(a,
+ 		c, d, e, g) {
+ 		a = 4 * (3 * c + a) + d;
+ 		return e + (U.buffer[a] / 255 + U.buffer[a + 12] / 65025) * (g - e)
+ 	}
+
+ 	function gb() {
+ 		b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1);
+ 		Ha.Ye()
+ 	}
+
+ 	function Jb() {
+ 		var a = da.na();
+ 		va.O();
+ 		b.viewport(0, 0, 3, 2 * a);
+ 		D.set("s53");
+ 		U.ta.g(0);
+ 		T.l(!1, !1);
+ 		return aa.xb(0, 0, 3, 2 * a, U.buffer, tb)
+ 	}
+
+ 	function rb() {
+ 		na !== ia.pause && (ba.isCleanGLStateAtEachIteration && (D.Wc(), T.reset(), T.va(), b.disable(b.DEPTH_TEST), b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1), D.Ca()), qa.qc(Kb, Jb, Lb, tb, Mb, ba.animateProcessOrder))
+ 	}
+
+ 	function Kb() {
+ 		va.ca();
+ 		if(!G.kb)
+ 			if(G.jb) G.element.needsUpdate &&
+ 				(G.K.Sd(G.element.videoWidth, G.element.videoHeight), G.K.Db(G.element.arrayBuffer), G.element.needsUpdate = !1);
+ 			else {
+ 				var a = G.element.currentTime,
+ 					c = a - G.wb;
+ 				0 > c && (G.wb = a, c = 0);
+ 				1E3 * c < ea.Xf || (G.wb += c, G.K.refresh())
+ 			} a = qa.Te();
+ 		da.update(a, Fa);
+ 		for(c = 0; c < a; ++c) {
+ 			da.Bb(c);
+ 			D.set("s55");
+ 			var d = Fa[da.hd()];
+ 			D.G("u43", 1 + Oa.rc * (Math.cos(d.ry) - 1));
+ 			Q.wa && D.G("u42", d.rz);
+ 			da.Yd("u41");
+ 			Z.Oa.$();
+ 			G.K.g(0);
+ 			U.ta.g(1);
+ 			T.l(!1, !1);
+ 			Pa.T(Z.Oa)
+ 		}
+ 		qa.Bb()
+ 	}
+
+ 	function tb() {
+ 		va.Uf();
+ 		ba.isCleanGLStateAtEachIteration && (va.reset(), X.reset(), b.enable(b.DEPTH_TEST));
+ 		Q.Gb && Q.Gb(da.yd() ? Fa : Fa[0]);
+ 		ba.isCleanGLStateAtEachIteration && (b.disable(b.BLEND), T.reset(), T.va())
+ 	}
+
+ 	function Lb() {
+ 		for(var a = 0; a < da.na(); ++a)
+ 			if(da.jf(a)) {
+ 				var c = a,
+ 					d = Sa[c],
+ 					e = [c],
+ 					g = Fa[c],
+ 					m = hb[c],
+ 					t = 2 * c;
+ 				d.Xa = Ea(1, t, 3, 0, 1);
+ 				g.detected = wa.X(g.detected, d.Xa, ea.ee);
+ 				d.x = Ea(0, t, 1, -1, 1);
+ 				d.y = Ea(0, t, 2, -1, 1);
+ 				d.ja = Ea(0, t, 3, 0, 1);
+ 				if(d.Xa < ba.multiDetectionThresholdFactors[0] * ba.threshold) d.qa = Math.floor(d.qa / 2), Q.wa && (g.rz = 0, g.ry = 0);
+ 				else {
+ 					var p = U.Qa;
+ 					d.rx = Ea(1, t, 0, -p[0], p[0]);
+ 					d.ry = Ea(1, t, 1, -p[1], p[1]);
+ 					d.Ra = Ea(1, t, 2, -p[2],
+ 						p[2]);
+ 					for(p = 0; p < U.Y; ++p) d.cd[p] = U.Na[p](Ea(2, t, p, 0, 1));
+ 					t = d.ja * U.Nd;
+ 					e.dx = d.x - g.xRaw;
+ 					e.dy = d.y - g.yRaw;
+ 					e.Pb = t - g.sRaw;
+ 					e.Mb = d.rx - g.rx;
+ 					e.Nb = d.ry - g.ry;
+ 					e.Ob = Q.wa ? d.Ra : d.Ra - g.rz;
+ 					p = qa.Me();
+ 					e = (1 - Za.qb(ra.translationFactorRange[0], ra.translationFactorRange[1], Math.sqrt(e.dx * e.dx + e.dy * e.dy + e.Pb * e.Pb) / p)) * (1 - Za.qb(ra.rotationFactorRange[0], ra.rotationFactorRange[1], Math.sqrt(e.Mb * e.Mb + e.Nb * e.Nb + e.Ob * e.Ob) / p)) * Za.qb(ra.qualityFactorRange[0], ra.qualityFactorRange[1], d.Xa);
+ 					c = m[++ib[c] % m.length] = e;
+ 					for(p = 0; p < m.length; ++p) c =
+ 						Math.min(c, m[p]);
+ 					c = Math.max(.5, c);
+ 					e = Math.min(c, e);
+ 					m = wa.X(ra.alphaRange[1], ra.alphaRange[0], Math.pow(e, ea.ge));
+ 					g.xRaw = wa.X(g.xRaw, d.x, m);
+ 					g.yRaw = wa.X(g.yRaw, d.y, m);
+ 					g.sRaw = wa.X(g.sRaw, t, m);
+ 					g.rx = wa.X(g.rx, d.rx, m);
+ 					g.ry = wa.X(g.ry, d.ry, m);
+ 					g.rz = Q.wa ? g.rz + ra.followZRotAlphaFactor * m * d.Ra : wa.X(g.rz, d.Ra, m);
+ 					c = g.sRaw * Oa.Lb * Math.sin(g.ry);
+ 					t = Math.sin(g.rz) * c / Qa;
+ 					g.x = g.xRaw + Math.cos(g.rz) * c;
+ 					g.y = g.yRaw + t;
+ 					g.s = g.sRaw;
+ 					m = Math.max(m, ea.fe);
+ 					for(c = 0; c < U.Y; ++c) g.expressions[c] = wa.X(g.expressions[c], d.cd[c], m);
+ 					++d.qa
+ 				}
+ 			}
+ 	}
+
+ 	function Mb() {
+ 		na ===
+ 			ia.play && Na.qc(rb)
+ 	}
+
+ 	function ub() {
+ 		Z.Oa = X.instance({
+ 			isPot: !0,
+ 			isFloat: !1,
+ 			width: Pa.Re()
+ 		});
+ 		var a = {
+ 			width: ea.Vd,
+ 			height: da.na(),
+ 			isFloat: !0,
+ 			isPot: !1,
+ 			array: da.Ce(new Float32Array([0, .5, .5, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
+ 		};
+ 		U.ta = Nb.instance(a)
+ 	}
+
+ 	function jb() {
+ 		D.S("s55", [{
+ 			type: "1i",
+ 			name: "u1",
+ 			value: 0
+ 		}, {
+ 			type: "1i",
+ 			name: "u39",
+ 			value: 1
+ 		}, {
+ 			type: "2f",
+ 			name: "u40",
+ 			value: Z.D
+ 		}, {
+ 			type: "1f",
+ 			name: "u41",
+ 			value: .5
+ 		}, {
+ 			type: "1f",
+ 			name: "u42",
+ 			value: 0
+ 		}]);
+ 		D.S("s56", [{
+ 				type: "1i",
+ 				name: "u44",
+ 				value: 0
+ 			}, {
+ 				type: "1i",
+ 				name: "u39",
+ 				value: 1
+ 			}, {
+ 				type: "1f",
+ 				name: "u47",
+ 				value: ea.Sf
+ 			},
+ 			{
+ 				type: "1f",
+ 				name: "u48",
+ 				value: ba.threshold
+ 			}, {
+ 				type: "3f",
+ 				name: "u46",
+ 				value: [U.N[0] * Z.D[0], U.N[1] * Z.D[1], U.N[2]]
+ 			}, {
+ 				type: "1f",
+ 				name: "u41",
+ 				value: .5
+ 			}, {
+ 				type: "1f",
+ 				name: "u49",
+ 				value: 1
+ 			}, {
+ 				type: "1f",
+ 				name: "u42",
+ 				value: 0
+ 			}
+ 		]);
+ 		var a = [{
+ 			type: "1i",
+ 			name: "u44",
+ 			value: 0
+ 		}];
+ 		D.S("s57", a);
+ 		D.S("s58", a);
+ 		D.S("s53", [{
+ 			type: "1i",
+ 			name: "u39",
+ 			value: 0
+ 		}, {
+ 			type: "1f",
+ 			name: "u52",
+ 			value: Z.D[0]
+ 		}, {
+ 			type: "2f",
+ 			name: "u51",
+ 			value: [0, .5 / da.na()]
+ 		}])
+ 	}
+
+ 	function kb() {
+ 		Z.D[0] = 1;
+ 		Z.D[1] = Z.C / Z.L;
+ 		vb.o({
+ 			ub: ba.overlapFactors,
+ 			Ed: ba.nScaleLevels,
+ 			C: Z.C,
+ 			L: Z.L,
+ 			Md: ba.scale0Factor,
+ 			N: U.N,
+ 			Od: ba.scanCenterFirst
+ 		})
+ 	}
+
+ 	function Ob(a) {
+ 		if(Q.Fa) wb("string" === typeof Q.Fa ? JSON.parse(Q.Fa) : Q.Fa, a);
+ 		else {
+ 			var c = Q.Gc;
+ 			"JSON" !== c.toUpperCase()
+ 				.split(".")
+ 				.pop() && (c += ea.neuralNetworkPath);
+ 			$a.get(c, function(d) {
+ 				d = JSON.parse(d);
+ 				wb(d, a)
+ 			})
+ 		}
+ 	}
+
+ 	function wb(a, c) {
+ 		if(a.exportData) {
+ 			var d = a.exportData;
+ 			d.rotationEulerAnglesFactors && (U.Qa = d.rotationEulerAnglesFactors);
+ 			if(d.translationScalingFactors) {
+ 				var e = d.translationScalingFactors,
+ 					g = ba.translationScalingFactors;
+ 				U.N[0] = e[0] * g[0];
+ 				U.N[1] = e[1] * g[1];
+ 				U.N[2] = e[2] * g[2]
+ 			}
+ 			"undefined" !==
+ 			typeof d.nExpressions && (U.Y = d.nExpressions);
+ 			U.Nd = d.dsMean ? 1 + d.dsMean : 1;
+ 			Oa.rc = .4;
+ 			Oa.Lb = .7;
+ 			"undefined" !== typeof d.fgScaleXFactor && (Oa.rc = d.fgScaleXFactor);
+ 			"undefined" !== typeof d.fgDisplaceXFactor && (Oa.Lb = d.fgDisplaceXFactor)
+ 		}
+ 		U.Y || (U.Y = ea.Dd);
+ 		if(!U.Na)
+ 			for(U.Na = [], d = 0; d < U.Y; ++d) U.Na.push(ea.Ge);
+ 		c(a)
+ 	}
+
+ 	function Pb() {
+ 		if(Ha.o({
+ 			Wa: Q.da,
+ 			width: Z.C,
+ 			height: Z.L,
+ 			debug: !1,
+ 			lc: function() {
+ 				Ia("GLCONTEXT_LOST")
+ 			},
+ 			antialias: Q.antialias,
+ 			premultipliedAlpha: !0
+ 		})) return !0;
+ 		Ia("GL_INCOMPATIBLE");
+ 		return !1
+ 	}
+
+ 	function Qb() {
+ 		var a = da.hd(),
+ 			c = Fa[a];
+ 		U.ta.Df(1);
+ 		b.viewport(0, a, 1, 1);
+ 		D.set("s56");
+ 		Q.wa && D.G("u42", c.rz);
+ 		da.Yd("u41");
+ 		var d = 1,
+ 			e = da.Nf(Sa, Z.C / Z.L);
+ 		da.yd() && (e && (d = 0, Sa[a].qa = 0, c.isDetected = !1, c.detected = 0), D.G("u49", d));
+ 		D.Jf("u45", vb.get(a));
+ 		T.l(!1, !1);
+ 		if(da.xd() || e) b.viewport(1, a, 1, 1), D.set("s57"), D.G("u49", d), T.l(!1, !1);
+ 		da.xd() && (b.viewport(2, a, 1, 1), D.set("s58"), T.l(!1, !1));
+ 		U.ta.sync()
+ 	}
+
+ 	function xb() {
+ 		G.K && G.K.remove();
+ 		G.jb = G.element.isFakeVideo ? !0 : !1;
+ 		if(G.jb) {
+ 			var a = yb();
+ 			a = {
+ 				isFlipY: !1,
+ 				array: G.element.arrayBuffer,
+ 				width: a.w,
+ 				height: a.ya,
+ 				isKeepArray: !0
+ 			}
+ 		} else a = {
+ 			H: G.element
+ 		};
+ 		G.vc = X.instance(Object.assign({
+ 			isPot: !1,
+ 			isLinear: !0,
+ 			isFloat: !1
+ 		}, a));
+ 		G.K = G.vc
+ 	}
+
+ 	function Ja() {
+ 		var a = [{
+ 			type: "mat2",
+ 			name: "u38",
+ 			value: G.v
+ 		}];
+ 		D.S("s54", [{
+ 			type: "1i",
+ 			name: "u1",
+ 			value: 0
+ 		}].concat(a));
+ 		D.S("s55", a)
+ 	}
+
+ 	function Ka() {
+ 		var a = [.5, .5],
+ 			c = G.D[1] / G.D[0];
+ 		Qa = Ha.U() / Ha.F();
+ 		90 === Math.abs(pa.rotate) && (c = 1 / c);
+ 		c > Qa ? a[1] *= Qa / c : a[0] *= c / Qa;
+ 		D.S("s56", [{
+ 			name: "u50",
+ 			type: "1f",
+ 			value: Qa
+ 		}]);
+ 		G.v[0] = 0;
+ 		G.v[1] = 0;
+ 		G.v[2] = 0;
+ 		G.v[3] = 0;
+ 		switch (pa.rotate) {
+ 			case 0:
+ 				G.v[0] = a[0];
+ 				G.v[3] = a[1];
+ 				break;
+ 			case 180:
+ 				G.v[0] = -a[0];
+ 				G.v[3] = -a[1];
+ 				break;
+ 			case 90:
+ 				G.v[1] = a[0];
+ 				G.v[2] = -a[1];
+ 				break;
+ 			case -90:
+ 				G.v[1] = -a[0], G.v[2] = a[1]
+ 		}
+ 		pa.flipX && (G.v[0] *= -1, G.v[2] *= -1);
+ 		G.kb || (G.v[1] *= -1, G.v[3] *= -1)
+ 	}
+
+ 	function yb() {
+ 		var a = {
+ 			w: G.element.videoWidth || G.element.width,
+ 			ya: G.element.videoHeight || G.element.height
+ 		};
+ 		if(!a.w || !a.ya || 4 > a.w || 4 > a.ya) throw Error("INVALID VIDEO DIMENSIONS - width = " + a.w + " height = " + a.ya);
+ 		return a
+ 	}
+
+ 	function lb() {
+ 		var a = yb(),
+ 			c = G.D[0] !== a.w || G.D[1] !== a.ya;
+ 		c && (G.D[0] = a.w, G.D[1] = a.ya);
+ 		return c
+ 	}
+
+ 	function ab(a, c) {
+ 		if(na === ia.error) return !1;
+ 		G.element = a;
+ 		lb();
+ 		c && c();
+ 		return !0
+ 	}
+
+ 	function zb(a, c, d) {
+ 		a && a();
+ 		G.Ka = {
+ 			video: {
+ 				facingMode: {
+ 					exact: pa.facingMode
+ 				},
+ 				width: {
+ 					min: pa.minWidth,
+ 					max: pa.maxWidth,
+ 					ideal: pa.idealWidth
+ 				},
+ 				height: {
+ 					min: pa.minHeight,
+ 					max: pa.maxHeight,
+ 					ideal: pa.idealHeight
+ 				}
+ 			},
+ 			audio: !1
+ 		};
+ 		V.Ic(G.Ka, pa.deviceId);
+ 		V.get(G.element ? G.element : V.ld(), function(e) {
+ 			c && c(e);
+ 			d(e)
+ 		}, function() {
+ 			Ia("WEBCAM_UNAVAILABLE")
+ 		}, G.Ka)
+ 	}
+
+ 	function Ia(a) {
+ 		na !== ia.error && (na = ia.error, Q.Ja && Q.Ja(a))
+ 	}
+ 	var wa = {
+ 			Wg: function(a) {
+ 				return Math.ceil(Math.log2(a))
+ 			},
+ 			sh: function(a) {
+ 				return Math.log2(a)
+ 			},
+ 			oh: function(a) {
+ 				return 0 === Math.log2(a) % 1
+ 			},
+ 			hg: function(a) {
+ 				var c = [0, 0, 0, 0];
+ 				a.forEach(function(d) {
+ 					c[0] += d[0];
+ 					c[1] += d[1];
+ 					c[2] += d[2];
+ 					c[3] += d[3]
+ 				});
+ 				return c
+ 			},
+ 			ig: function(a, c, d) {
+ 				return Math.min(Math.max(a, c), d)
+ 			},
+ 			lg: function(a) {
+ 				return a * Math.PI / 180
+ 			},
+ 			yh: function(a, c) {
+ 				c = Math.pow(10, c);
+ 				return Math.round(a * c) / c
+ 			},
+ 			zh: function(a) {
+ 				return Math.round(1E6 * a) / 1E6
+ 			},
+ 			Xg: function(a, c) {
+ 				return (100 * a / c)
+ 					.toFixed(3)
+ 			},
+ 			X: function(a, c, d) {
+ 				return a * (1 - d) + c * d
+ 			},
+ 			th: function(a, c) {
+ 				return a[0] * (1 - c) + a[1] * c
+ 			},
+ 			Ae: function(a, c) {
+ 				return wa.se(a -
+ 					c)
+ 			},
+ 			se: function(a) {
+ 				for(; a > Math.PI;) a -= 2 * Math.PI;
+ 				for(; a <= -Math.PI;) a += 2 * Math.PI;
+ 				return a
+ 			},
+ 			qg: function(a, c) {
+ 				return Math.abs(wa.Ae(a, c))
+ 			},
+ 			Yf: function(a, c) {
+ 				return Math.atan2(Math.sin(a) + Math.sin(c), Math.cos(a) + Math.cos(c))
+ 			}
+ 		},
+ 		$a = {
+ 			get: function(a, c, d) {
+ 				var e = new XMLHttpRequest;
+ 				e.open("GET", a, !0);
+ 				e.withCredentials = !1;
+ 				e.onreadystatechange = function() {
+ 					4 === e.readyState && (200 === e.status || 0 === e.status ? c(e.responseText) : "undefined" !== typeof d && d(e.status))
+ 				};
+ 				e.send()
+ 			},
+ 			Ve: function(a) {
+ 				return new Promise(function(c,
+ 					d) {
+ 					$a.get(a, c, d)
+ 				})
+ 			},
+ 			Tg: function(a, c, d) {
+ 				a += d ? "?" + $a.Ee(d) : "";
+ 				$a.get(a, function(e) {
+ 					c(JSON.parse(e))
+ 				})
+ 			},
+ 			vh: function(a, c, d) {
+ 				var e = new XMLHttpRequest;
+ 				e.open("POST", a, !0);
+ 				e.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ 				e.onreadystatechange = function() {
+ 					4 !== e.readyState || 200 !== e.status && 0 !== e.status || d(e.responseText)
+ 				};
+ 				e.send(c)
+ 			},
+ 			Ee: function(a) {
+ 				return "string" === typeof a ? a : Object.keys(a)
+ 					.map(function(c) {
+ 						return encodeURIComponent(c) + "=" + encodeURIComponent(a[c])
+ 					})
+ 					.join("&")
+ 			},
+ 			Hg: function(a,
+ 				c) {
+ 				var d = new XMLHttpRequest;
+ 				d.open("POST", a, !0);
+ 				d.responseType = "arraybuffer";
+ 				d.onload = function() {
+ 					c(d.response)
+ 				};
+ 				d.send()
+ 			}
+ 		},
+ 		Rb = {
+ 			create: function(a, c) {
+ 				for(var d = Array(c), e = 0; e < c; ++e) d[e] = a;
+ 				return d
+ 			},
+ 			mg: function(a, c) {
+ 				for(var d = 0; d < a.length; ++d) c[d] = a[d]
+ 			},
+ 			clone: function(a) {
+ 				for(var c = Array(a.length), d = 0; d < a.length; ++d) c[d] = a[d];
+ 				return c
+ 			},
+ 			Ch: function(a, c, d) {
+ 				a.forEach(function(e, g) {
+ 					c[g] = e * d
+ 				})
+ 			},
+ 			Lh: function(a) {
+ 				for(var c = a.length - 1; 0 < c; --c) {
+ 					var d = Math.floor(Math.random() * (c + 1)),
+ 						e = a[c];
+ 					a[c] = a[d];
+ 					a[d] = e
+ 				}
+ 			},
+ 			Nh: function(a) {
+ 				return a.sort(function(c,
+ 					d) {
+ 					return c - d
+ 				})
+ 			},
+ 			Rf: function(a) {
+ 				return Array.isArray(a) || a.constructor === Float32Array || a.constructor === Uint8Array
+ 			}
+ 		},
+ 		mb = {
+ 			Jb: function(a, c) {
+ 				if(0 === c || "object" !== typeof a) return a;
+ 				a = Object.assign({}, a);
+ 				c = void 0 === c || -1 === c ? -1 : c - 1;
+ 				for(var d in a) a[d] = mb.Jb(a[d], c);
+ 				return a
+ 			},
+ 			pg: function(a) {
+ 				return JSON.parse(JSON.stringify(a))
+ 			}
+ 		},
+ 		Za = {
+ 			Mh: function(a, c, d) {
+ 				a = Math.min(Math.max((d - a) / (c - a), 0), 1);
+ 				return a * a * (3 - 2 * a)
+ 			},
+ 			qb: function(a, c, d) {
+ 				return Math.min(Math.max((d - a) / (c - a), 0), 1)
+ 			},
+ 			Bg: function(a, c, d, e) {
+ 				return Math.pow(Math.min(Math.max((e -
+ 					a) / (c - a), 0), 1), d)
+ 			},
+ 			Rh: function() {
+ 				return 0
+ 			},
+ 			uh: function() {
+ 				return 1
+ 			},
+ 			rh: function(a) {
+ 				return a
+ 			},
+ 			yg: function(a) {
+ 				return a * a
+ 			},
+ 			Dg: function(a) {
+ 				return a * (2 - a)
+ 			},
+ 			vg: function(a) {
+ 				return .5 > a ? 2 * a * a : -1 + (4 - 2 * a) * a
+ 			},
+ 			tg: function(a) {
+ 				return a * a * a
+ 			},
+ 			Cg: function(a) {
+ 				return --a * a * a + 1
+ 			},
+ 			ug: function(a) {
+ 				return .5 > a ? 4 * a * a * a : (a - 1) * (2 * a - 2) * (2 * a - 2) + 1
+ 			},
+ 			zg: function(a) {
+ 				return a * a * a * a
+ 			},
+ 			Eg: function(a) {
+ 				return 1 - --a * a * a * a
+ 			},
+ 			wg: function(a) {
+ 				return .5 > a ? 8 * a * a * a * a : 1 - 8 * --a * a * a * a
+ 			},
+ 			Ag: function(a) {
+ 				return a * a * a * a * a
+ 			},
+ 			Fg: function(a) {
+ 				return 1 + --a * a * a * a *
+ 					a
+ 			},
+ 			xg: function(a) {
+ 				return .5 > a ? 16 * a * a * a * a * a : 1 + 16 * --a * a * a * a * a
+ 			}
+ 		},
+ 		Sb = {
+ 			Ie: function(a, c, d) {
+ 				switch (a) {
+ 					case "relu":
+ 						return d + "=max(vec4(0.,0.,0.,0.)," + c + ");";
+ 					case "elu":
+ 						return d + "=mix(exp(-abs(" + c + "))-vec4(1.,1.,1.,1.)," + c + ",step(0.," + c + "));";
+ 					case "elu01":
+ 						return d + "=mix(0.1*exp(-abs(" + c + "))-vec4(0.1,0.1,0.1,0.1)," + c + ",step(0.," + c + "));";
+ 					case "arctan":
+ 						return d + "=atan(3.14159265359*texture2D(u0,vUV))/3.14159265359;";
+ 					case "copy":
+ 						return "";
+ 					default:
+ 						return !1
+ 				}
+ 			}
+ 		},
+ 		D = function() {
+ 			function a(x, f, z) {
+ 				f = x.createShader(f);
+ 				x.shaderSource(f,
+ 					z);
+ 				x.compileShader(f);
+ 				return x.getShaderParameter(f, x.COMPILE_STATUS) ? f : !1
+ 			}
+
+ 			function c(x, f, z) {
+ 				f = a(x, x.VERTEX_SHADER, f);
+ 				z = a(x, x.FRAGMENT_SHADER, z);
+ 				x === b && p.push(f, z);
+ 				var I = x.createProgram();
+ 				x.attachShader(I, f);
+ 				x.attachShader(I, z);
+ 				x.linkProgram(I);
+ 				return I
+ 			}
+
+ 			function d(x) {
+ 				return ["float", "sampler2D", "int"].map(function(f) {
+ 						return "precision " + x + " " + f + ";\n"
+ 					})
+ 					.join("")
+ 			}
+
+ 			function e(x, f) {
+ 				f.B = f.B ? !0 : !1;
+ 				if(!f.B) {
+ 					f.ua = f.ua || "precision lowp float;attribute vec2 a0;varying vec2 vv0;void main(){gl_Position=vec4(a0,0.,1.),vv0=a0*.5+vec2(.5,.5);}";
+ 					f.Va = f.Va || ["a0"];
+ 					f.Ha = f.Ha || [2];
+ 					f.precision = f.precision || v;
+ 					f.id = r++;
+ 					void 0 !== f.Qd && (f.Qd.forEach(function(h, C) {
+ 						f.h = f.h.replace(h, f.yb[C])
+ 					}), f.Qd.splice(0));
+ 					f.Cc = 0;
+ 					f.Ha.forEach(function(h) {
+ 						f.Cc += 4 * h
+ 					});
+ 					var z = d(f.precision);
+ 					f.ra = c(x, z + f.ua, z + f.h);
+ 					f.A = {};
+ 					f.i.forEach(function(h) {
+ 						f.A[h] = x.getUniformLocation(f.ra, h)
+ 					});
+ 					f.attributes = {};
+ 					f.Ia = [];
+ 					f.Va.forEach(function(h) {
+ 						var C = x.getAttribLocation(f.ra, h);
+ 						f.attributes[h] = C;
+ 						f.Ia.push(C)
+ 					});
+ 					if(f.j) {
+ 						x.useProgram(f.ra);
+ 						u = f;
+ 						q = f.id;
+ 						for(var I in f.j) x.uniform1i(f.A[I],
+ 							f.j[I])
+ 					}
+ 					f.pa = !0
+ 				}
+ 			}
+
+ 			function g(x) {
+ 				xa.If(N);
+ 				q !== x.id && (N.P(), q = x.id, u = x, b.useProgram(x.ra), x.Ia.forEach(function(f) {
+ 					0 !== f && b.enableVertexAttribArray(f)
+ 				}))
+ 			}
+
+ 			function m(x, f, z) {
+ 				e(x, f, z);
+ 				x.useProgram(f.ra);
+ 				x.enableVertexAttribArray(f.attributes.a0);
+ 				q = -1;
+ 				return u = f
+ 			}
+
+ 			function t() {
+ 				return {
+ 					h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vv0);}",
+ 					i: ["u1"],
+ 					j: {
+ 						u1: 0
+ 					}
+ 				}
+ 			}
+ 			var p = [],
+ 				q = -1,
+ 				u = null,
+ 				r = 0,
+ 				A = !1,
+ 				v = "highp",
+ 				n = ["u1"],
+ 				y = ["u0"],
+ 				E = {
+ 					u1: 0
+ 				},
+ 				k = {
+ 					u0: 0
+ 				},
+ 				M = {
+ 					u1: 0,
+ 					u2: 1
+ 				},
+ 				H = {
+ 					u3: 0
+ 				},
+ 				l = {
+ 					s0: t(),
+ 					s1: {
+ 						h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vv0);}",
+ 						i: n,
+ 						j: E,
+ 						precision: "lowp"
+ 					},
+ 					s2: {
+ 						h: "uniform sampler2D u1,u2;varying vec2 vv0;void main(){vec4 a=texture2D(u2,vv0),b=texture2D(u1,vv0);gl_FragColor=a*b;}",
+ 						i: ["u1", "u2"],
+ 						j: M
+ 					},
+ 					s3: {
+ 						h: "uniform sampler2D u1;uniform vec2 u4,u5;varying vec2 vv0;void main(){vec2 a=vv0*u4+u5;gl_FragColor=texture2D(u1,a);}",
+ 						i: ["u1", "u4", "u5"],
+ 						j: E,
+ 						B: !0
+ 					},
+ 					s4: {
+ 						h: "uniform sampler2D u1;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u1,vv0);gl_FragColor=a.r*f;}",
+ 						i: n,
+ 						j: E
+ 					},
+ 					s5: {
+ 						h: "uniform sampler2D u1,u2;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u2,vv0),b=texture2D(u1,vv0);gl_FragColor=a.a*b.r*f;}",
+ 						i: ["u1", "u2"],
+ 						j: M
+ 					},
+ 					s6: {
+ 						h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vec2(1.-vv0.x,vv0.y));}",
+ 						i: n,
+ 						j: E
+ 					},
+ 					s7: {
+ 						h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vec2(vv0.x,1.-vv0.y));}",
+ 						i: n,
+ 						j: E
+ 					},
+ 					s8: {
+ 						h: "uniform sampler2D u0;uniform float u4;varying vec2 vv0;void main(){vec4 a=texture2D(u0,vv0);gl_FragColor=a*u4;}",
+ 						i: ["u0", "u4"],
+ 						j: k
+ 					},
+ 					s9: {
+ 						h: "uniform sampler2D u0;uniform float u4;varying vec2 vv0;const vec4 f=vec4(.25,.25,.25,.25),g=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0);float b=dot(a*u4,f);gl_FragColor=b*g;}",
+ 						i: ["u0", "u4"],
+ 						j: k
+ 					},
+ 					s10: {
+ 						h: "uniform sampler2D u1;varying vec2 vv0;const vec4 e=vec4(1.,1.,1.,1.);void main(){float a=.25*dot(e,texture2D(u1,vv0));gl_FragColor=a*e;}",
+ 						i: n,
+ 						j: E
+ 					},
+ 					s11: {
+ 						h: "uniform sampler2D u1,u6;uniform float u7;const vec4 f=vec4(1.,1.,1.,1.);varying vec2 vv0;void main(){vec4 a=texture2D(u1,vv0),b=texture2D(u6,vv0);gl_FragColor=mix(b,a,u7*f);}",
+ 						i: ["u1", "u6", "u7"],
+ 						j: {
+ 							u1: 0,
+ 							u6: 1
+ 						}
+ 					},
+ 					s12: {
+ 						h: "uniform sampler2D u1;uniform vec2 u8;varying vec2 vv0;void main(){gl_FragColor=.25*(texture2D(u1,vv0+u8)+texture2D(u1,vv0+u8*vec2(1.,-1.))+texture2D(u1,vv0+u8*vec2(-1.,-1.))+texture2D(u1,vv0+u8*vec2(-1.,1.)));}",
+ 						i: ["u1", "u8"],
+ 						j: E
+ 					},
+ 					s13: {
+ 						h: "uniform sampler2D u1;uniform vec4 u9;varying vec2 vv0;float g(float a,float b){a=floor(a)+.5;return floor(a/exp2(b));}float h(float a,float b){return floor(a*exp2(b)+.5);}float i(float a,float b){return mod(a,h(1.,b));}float e(float c,float a,float b){a=floor(a+.5),b=floor(b+.5);return i(g(c,a),b-a);}vec4 j(float a){if(a==0.)return vec4(0.,0.,0.,0.);float k=128.*step(a,0.);a=abs(a);float c=floor(log2(a)),l=c+127.,b=(a/exp2(c)-1.)*8388608.,d=l/2.,m=fract(d)*2.,n=floor(d),o=e(b,0.,8.),p=e(b,8.,16.),q=m*128.+e(b,16.,23.),r=k+n;return vec4(o,p,q,r)/255.;}void main(){float a=dot(texture2D(u1,vv0),u9);gl_FragColor=j(a);}",
+ 						i: ["u1", "u9"],
+ 						j: E
+ 					},
+ 					s14: {
+ 						h: "uniform sampler2D u0;varying vec2 vv0;const vec4 e=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0),b=e/(e+exp(-a));gl_FragColor=b;}",
+ 						i: y,
+ 						j: k,
+ 						B: !0
+ 					},
+ 					s15: {
+ 						h: "uniform sampler2D u0;varying vec2 vv0;const vec4 f=vec4(0.,0.,0.,0.);void main(){vec4 a=texture2D(u0,vv0);gl_FragColor=max(f,a);}",
+ 						i: y,
+ 						j: k
+ 					},
+ 					s16: {
+ 						h: "uniform sampler2D u0;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0);gl_FragColor=mix(exp(-abs(a))-f,a,step(0.,a));}",
+ 						i: y,
+ 						j: k
+ 					},
+ 					s17: {
+ 						h: "uniform sampler2D u0;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0),b=exp(-abs(a))-f;gl_FragColor=mix(.1*b,a,step(0.,a));}",
+ 						i: y,
+ 						j: k
+ 					},
+ 					s18: {
+ 						h: "uniform sampler2D u0,u7,u10;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0),c=texture2D(u7,vv0),d=texture2D(u10,vv0),b=a/d;gl_FragColor=c*mix(exp(-abs(b))-f,b,step(0.,a));}",
+ 						i: ["u0", "u7", "u10"],
+ 						j: {
+ 							u0: 0,
+ 							u7: 1,
+ 							u10: 2
+ 						},
+ 						B: !0
+ 					},
+ 					s19: {
+ 						h: "uniform sampler2D u0;const float e=3.141593;varying vec2 vv0;void main(){gl_FragColor=atan(e*texture2D(u0,vv0))/e;}",
+ 						i: y,
+ 						j: k
+ 					},
+ 					s20: {
+ 						h: "uniform sampler2D u0;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=texture2D(u0,vv0),b=log(f+a);gl_FragColor=b;}",
+ 						i: y,
+ 						j: k,
+ 						B: !0
+ 					},
+ 					s21: {
+ 						h: "uniform sampler2D u0,u11;uniform float u12;const vec2 e=vec2(.5,.5);const float f=1e-5;const vec4 g=vec4(1.,1.,1.,1.),i=vec4(0.,0.,0.,0.);varying vec2 vv0;void main(){vec4 a=texture2D(u11,e);float b=u12*u12;vec4 c=max(b*a,f*g);gl_FragColor=texture2D(u0,vv0)/c;}",
+ 						i: ["u0", "u11", "u12"],
+ 						j: {
+ 							u0: 0,
+ 							u11: 1
+ 						},
+ 						B: !0
+ 					},
+ 					s22: {
+ 						h: "uniform sampler2D u1;uniform vec2 u13;varying vec2 vv0;void main(){float a=u13.x*u13.y;vec2 b=floor(vv0*a)/a,c=fract(vv0*a),d=floor(b*u13.y),f=floor(u13.x*fract(b*u13.y)),g=(f*u13.y+d)/a;gl_FragColor=texture2D(u1,g+c/a);}",
+ 						i: ["u1", "u13"],
+ 						j: E
+ 					},
+ 					s23: {
+ 						h: "uniform sampler2D u14,u15,u16;varying vec2 vv0;void main(){vec4 a=texture2D(u16,vv0);vec2 b=a.rg,c=a.ba;vec4 d=texture2D(u14,b),f=texture2D(u15,c);gl_FragColor=d*f;}",
+ 						i: ["u14", "u15", "u16"],
+ 						j: {
+ 							u15: 0,
+ 							u14: 1,
+ 							u16: 2
+ 						},
+ 						B: !0
+ 					},
+ 					s24: {
+ 						h: "uniform float u17;uniform sampler2D u14,u15;varying vec2 vv0;void main(){vec2 a=fract(vv0*u17);vec4 b=texture2D(u14,vv0),c=texture2D(u15,a);gl_FragColor=b*c;}",
+ 						i: ["u15", "u14", "u17"],
+ 						j: {
+ 							u15: 0,
+ 							u14: 1
+ 						}
+ 					},
+ 					s25: {
+ 						h: "uniform float u17;uniform sampler2D u14,u15,u18,u19,u20,u21;varying vec2 vv0;const vec4 e=vec4(1.,1.,1.,1.),g=vec4(1e-3,1e-3,1e-3,1e-3);void main(){vec2 h=vv0*u17,l=floor(h),c=h-l;vec4 m=texture2D(u14,vv0),d=texture2D(u15,c),a=texture2D(u21,vv0);a=a*255.;vec4 n=texture2D(u18,c),o=texture2D(u19,c),p=texture2D(u20,c),i=step(-g,-a),b=e-i,j=b*step(-e-g,-a);b*=e-j;vec4 k=b*step(-2.*e-g,-a);b*=e-k;vec4 q=b;d=i*d+j*n+k*o+q*p,gl_FragColor=m*d;}",
+ 						i: "u14 u15 u17 u21 u18 u19 u20".split(" "),
+ 						j: {
+ 							u15: 0,
+ 							u14: 1,
+ 							u21: 3,
+ 							u18: 4,
+ 							u19: 5,
+ 							u20: 6
+ 						},
+ 						B: !0
+ 					},
+ 					s26: {
+ 						h: "uniform sampler2D u14,u15,u22;uniform float u17,u23,u24,u25;varying vec2 vv0;const vec2 j=vec2(1.,1.),k=vec2(0.,0.);void main(){vec2 b=floor(u23*vv0),c=u23*vv0-b;float d=u17/u23;vec2 f=floor(c*d),g=c*d-f,h=(b+g)/u23;float l=u23*u25/u17;vec2 m=l*f,a=(m+g*u24)/u25;a+=.25/u25;vec2 i=step(a,j)*step(k,a);vec4 n=texture2D(u14,h),o=texture2D(u15,a),p=n*o,q=texture2D(u22,h);gl_FragColor=(p*u24*u24+q)*i.x*i.y;}",
+ 						i: "u14 u15 u17 u23 u24 u25 u22".split(" "),
+ 						j: {
+ 							u15: 0,
+ 							u14: 1,
+ 							u22: 2
+ 						}
+ 					},
+ 					s27: {
+ 						h: "uniform sampler2D u14,u15;varying vec2 vv0;void main(){vec4 a=texture2D(u14,vv0),b=texture2D(u15,vv0);gl_FragColor=a*b;}",
+ 						i: ["u14", "u15"],
+ 						j: {
+ 							u15: 0,
+ 							u14: 1
+ 						},
+ 						B: !0
+ 					},
+ 					s28: {
+ 						h: "uniform sampler2D u1,u22;uniform float u26;varying vec2 vv0;void main(){gl_FragColor=texture2D(u22,vv0)+u26*texture2D(u1,vv0);}",
+ 						i: ["u1", "u22", "u26"],
+ 						j: {
+ 							u1: 0,
+ 							u22: 1
+ 						}
+ 					},
+ 					s29: {
+ 						h: "varying vec2 vv0;uniform sampler2D u1;const vec4 f=vec4(1.,1.,1.,1.),g=vec4(.299,.587,.114,0.);void main(){vec4 a=texture2D(u1,vv0);gl_FragColor=dot(a,g)*f;}",
+ 						i: n,
+ 						j: E,
+ 						precision: "lowp"
+ 					},
+ 					s30: {
+ 						h: "varying vec2 vv0;uniform sampler2D u1;uniform float u27;const vec3 f=vec3(.299,.587,.114);void main(){vec3 a=texture2D(u1,vv0).rgb,b=texture2D(u1,vv0+vec2(0.,u27)).rgb,c=texture2D(u1,vv0+vec2(u27,u27)).rgb,d=texture2D(u1,vv0+vec2(u27,0.)).rgb;gl_FragColor=vec4(dot(a,f),dot(b,f),dot(c,f),dot(d,f));}",
+ 						i: ["u1", "u27"],
+ 						j: E,
+ 						precision: "lowp"
+ 					},
+ 					s31: {
+ 						h: "varying vec2 vv0;uniform sampler2D u1;uniform float u27;const vec3 f=vec3(.299,.587,.114);void main(){vec3 a=texture2D(u1,vv0).rgb,b=texture2D(u1,vv0+vec2(0.,u27)).rgb,c=texture2D(u1,vv0+vec2(u27,u27)).rgb,d=texture2D(u1,vv0+vec2(u27,0.)).rgb;gl_FragColor=vec4(a.r,b.g,c.b,dot(d,f));}",
+ 						i: ["u1", "u27"],
+ 						j: E,
+ 						precision: "lowp"
+ 					},
+ 					s32: {
+ 						h: "varying vec2 vv0;uniform sampler2D u1,u2;uniform float u28;const vec4 f=vec4(1.,1.,1.,1.);void main(){vec4 a=vec4(0.);a-=texture2D(u1,vec2(vv0.x-u28,vv0.y-u28))*1.,a-=texture2D(u1,vec2(vv0.x-u28,vv0.y))*2.,a-=texture2D(u1,vec2(vv0.x-u28,vv0.y+u28))*1.,a+=texture2D(u1,vec2(vv0.x+u28,vv0.y-u28))*1.,a+=texture2D(u1,vec2(vv0.x+u28,vv0.y))*2.,a+=texture2D(u1,vec2(vv0.x+u28,vv0.y+u28))*1.;vec4 b=vec4(0.);b-=texture2D(u1,vec2(vv0.x-u28,vv0.y-u28))*1.,b-=texture2D(u1,vec2(vv0.x,vv0.y-u28))*2.,b-=texture2D(u1,vec2(vv0.x+u28,vv0.y-u28))*1.,b+=texture2D(u1,vec2(vv0.x-u28,vv0.y+u28))*1.,b+=texture2D(u1,vec2(vv0.x,vv0.y+u28))*2.,b+=texture2D(u1,vec2(vv0.x+u28,vv0.y+u28))*1.;vec3 c=sqrt(a.rgb*a.rgb+b.rgb*b.rgb);vec4 e=vec4(c,texture2D(u1,vv0).a),g=texture2D(u2,vv0);gl_FragColor=g.a*e.r*f;}",
+ 						i: ["u1", "u2", "u28"],
+ 						j: M,
+ 						B: !0
+ 					},
+ 					s33: {
+ 						h: "varying vec2 vv0;uniform sampler2D u1,u2;uniform float u28;const vec4 j=vec4(1.,1.,1.,1.);const vec2 k=vec2(1.,1.);void main(){float h=0.;vec2 l=k*u28,a,b;float c,d,i=0.;for(float e=-4.;e<=4.;e+=1.)for(float f=-4.;f<=4.;f+=1.)a=vec2(e,f),c=length(a)/2.,d=exp(-c*c),b=vv0+l*a,h+=d*texture2D(u1,b).r,i+=d;vec4 m=texture2D(u2,vv0);gl_FragColor=m.a*(texture2D(u1,b).r-h/i)*j;}",
+ 						i: ["u1", "u2", "u28"],
+ 						j: M,
+ 						B: !0
+ 					},
+ 					s34: {
+ 						h: "uniform sampler2D u3;uniform vec2 u8;varying vec2 vv0;vec4 e(vec4 a,vec4 b){vec4 c=step(a,b);return mix(a,b,c);}const vec2 g=vec2(.5,.5),h=vec2(1.,0.),i=vec2(0.,1.);void main(){vec2 a=vv0-u8*g;vec4 b=texture2D(u3,a),c=texture2D(u3,a+u8*h),d=texture2D(u3,a+u8*i),j=texture2D(u3,a+u8),k=e(b,c),l=e(d,j);gl_FragColor=e(k,l);}",
+ 						i: ["u3", "u8"],
+ 						j: H
+ 					},
+ 					s35: {
+ 						h: "uniform sampler2D u3;uniform vec2 u8;varying vec2 vv0;const vec2 k=vec2(1.,0.),l=vec2(0.,1.),m=vec2(2.,0.),n=vec2(0.,2.);vec4 e(vec4 a,vec4 b){vec4 c=step(a,b);return mix(a,b,c);}vec4 f(vec2 a){vec4 b=texture2D(u3,a),c=texture2D(u3,a+u8*k),d=texture2D(u3,a+u8*l),g=texture2D(u3,a+u8),h=e(b,c),i=e(d,g);return e(h,i);}void main(){vec2 a=vv0+u8*vec2(-.55,-1.05);vec4 b=f(a),c=f(a+u8*m),d=f(a+u8*2.),g=f(a+u8*n),h=e(b,c),i=e(d,g);gl_FragColor=e(h,i);}",
+ 						i: ["u3", "u8"],
+ 						j: H,
+ 						B: !0
+ 					},
+ 					s36: {
+ 						h: "uniform sampler2D u1;varying vec2 vv0;void main(){vec4 a=texture2D(u1,vv0);gl_FragColor=a*a;}",
+ 						i: ["u1"],
+ 						j: E,
+ 						precision: "lowp",
+ 						B: !0
+ 					},
+ 					s37: {
+ 						h: "uniform sampler2D u1;uniform vec2 u8;varying vec2 vv0;const float e=15444.;void main(){vec4 a=1001./e*texture2D(u1,vv0-3.*u8)+2002./e*texture2D(u1,vv0-2.*u8)+3003./e*texture2D(u1,vv0-u8)+3432./e*texture2D(u1,vv0)+3003./e*texture2D(u1,vv0+u8)+2002./e*texture2D(u1,vv0+2.*u8)+1001./e*texture2D(u1,vv0+3.*u8);gl_FragColor=a;}",
+ 						i: ["u8", "u1"],
+ 						j: E,
+ 						precision: "lowp",
+ 						B: !0
+ 					},
+ 					s38: {
+ 						h: "uniform sampler2D u1,u11,u29;varying vec2 vv0;const vec4 f=vec4(1.,1.,1.,1.);const float g=.1;void main(){vec4 a=texture2D(u11,vv0),b=texture2D(u29,vv0),c=texture2D(u1,vv0),d=max(f*g,b-a*a),h=sqrt(d);gl_FragColor=(c-a)/h;}",
+ 						i: ["u1", "u11", "u29"],
+ 						j: {
+ 							u1: 0,
+ 							u11: 1,
+ 							u29: 2
+ 						},
+ 						B: !0
+ 					}
+ 				},
+ 				J = {
+ 					s39: {
+ 						h: "uniform float u17,u30;uniform sampler2D u14,u15,u22;varying vec2 vv0;const vec2 ZERO2=vec2(0.,0.),ONE2=vec2(1.,1.),HALF2=vec2(.5,.5),EPS2=vec2(1e-5,1e-5);void main(){vec4 sum=texture2D(u22,vv0);float toSparsity=1.1111;vec2 uvFrom,uvWeight,xyPatch=ZERO2,eps2=EPS2/u17,xyTo=floor(vv0*u17+eps2);float weightSize=toSparsity*u17;vec2 halfFromSparsity=ONE2*(toSparsity-1.)/2.;for(float patch_x=0.;patch_x<1.1111;patch_x+=1.){xyPatch.x=patch_x;for(float patch_y=0.;patch_y<1.1111;patch_y+=1.)xyPatch.y=patch_y,uvFrom=(xyTo+HALF2+u30*(xyPatch-halfFromSparsity))/u17,uvFrom+=step(uvFrom,-eps2),uvFrom-=step(ONE2-eps2,uvFrom),uvWeight=(xyTo*toSparsity+xyPatch+HALF2)/weightSize,sum+=texture2D(u14,uvWeight)*texture2D(u15,uvFrom);}gl_FragColor=sum,gl_FragColor*=2.2222;}",
+ 						i: ["u17", "u14", "u15", "u22", "u30"],
+ 						yb: ["1.1111", "gl_FragColor\\*=2.2222;"]
+ 					},
+ 					s40: {
+ 						h: "uniform float u17,u30,u25;uniform sampler2D u14,u15,u22;varying vec2 vv0;const vec2 ZERO2=vec2(0.,0.),ONE2=vec2(1.,1.),HALF2=vec2(.5,.5),EPS2=vec2(1e-4,1e-4);void main(){vec4 sum=texture2D(u22,vv0);float fromSparsity=1.1111,shrinkFactor=3.3333;vec2 uvFrom,uvWeight,xyFrom,xyPatchTo,xyPatch=ZERO2,xyShrink=ZERO2,eps2=EPS2/u25,xyTo=floor(vv0*u17+eps2);float weightSize=fromSparsity*u25;vec2 halfFromSparsity=ONE2*(fromSparsity-1.)/2.;float toSparsity=weightSize/u17;vec2 xyFrom0=xyTo*shrinkFactor;for(float patch_x=0.;patch_x<1.1111;patch_x+=1.){xyPatch.x=patch_x;for(float patch_y=0.;patch_y<1.1111;patch_y+=1.){xyPatch.y=patch_y;for(float shrink_x=0.;shrink_x<3.3333;shrink_x+=1.){xyShrink.x=shrink_x;for(float shrink_y=0.;shrink_y<3.3333;shrink_y+=1.)xyShrink.y=shrink_y,xyFrom=xyFrom0+xyShrink+shrinkFactor*u30*(xyPatch-halfFromSparsity),uvFrom=(xyFrom+HALF2)/u25,uvFrom+=step(uvFrom,-eps2),uvFrom-=step(ONE2-eps2,uvFrom),xyPatchTo=xyPatch*shrinkFactor+xyShrink,uvWeight=(xyTo*toSparsity+xyPatchTo+HALF2)/weightSize,sum+=texture2D(u14,uvWeight)*texture2D(u15,uvFrom);}}}gl_FragColor=sum,gl_FragColor*=2.2222;}",
+ 						i: "u17 u25 u14 u15 u22 u30".split(" "),
+ 						yb: ["1.1111", "gl_FragColor\\*=2.2222;", "3.3333"]
+ 					}
+ 				},
+ 				w = null,
+ 				L = null,
+ 				N = {
+ 					nb: function() {
+ 						return A
+ 					},
+ 					o: function() {
+ 						if(!A) {
+ 							w = mb.Jb(l, 2);
+ 							L = mb.Jb(J, 2);
+ 							v = "highp";
+ 							b.getShaderPrecisionFormat && (b.getShaderPrecisionFormat(b.FRAGMENT_SHADER, b.MEDIUM_FLOAT), b.getShaderPrecisionFormat(b.FRAGMENT_SHADER, b.LOW_FLOAT));
+ 							for(var x in w) e(b, w[x], x);
+ 							D.set("s0");
+ 							b.enableVertexAttribArray(0);
+ 							A = !0
+ 						}
+ 					},
+ 					Kc: function(x) {
+ 						x.forEach(function(f) {
+ 							N.Jc(f)
+ 						})
+ 					},
+ 					Jc: function(x) {
+ 						w[x.id] = x;
+ 						e(b, x, x.id)
+ 					},
+ 					nd: function(x,
+ 						f, z) {
+ 						f || (f = x);
+ 						w[f] = Object.create(L[x]);
+ 						w[f].df = !0;
+ 						L[x].yb && L[x].yb.forEach(function(I, h) {
+ 							w[f].h = w[f].h.replace(new RegExp(I, "g"), z[h])
+ 						});
+ 						e(b, w[f], f)
+ 					},
+ 					set: function(x) {
+ 						var f = w[x];
+ 						f.B && (f.B = !1, e(b, f, x));
+ 						g(f)
+ 					},
+ 					Sa: function(x) {
+ 						return m(x, t(), "s41")
+ 					},
+ 					tc: function(x) {
+ 						return m(x, {
+ 							h: "void main(){gl_FragColor=vec4(.5,.5,.5,.5);}",
+ 							i: [],
+ 							precision: v
+ 						}, "s42")
+ 					},
+ 					Fe: function(x) {
+ 						return "undefined" === typeof w[x] ? !1 : w[x].pa
+ 					},
+ 					P: function() {
+ 						-1 !== q && (q = -1, u.Ia.forEach(function(x) {
+ 							0 !== x && b.disableVertexAttribArray(x)
+ 						}))
+ 					},
+ 					uc: function() {
+ 						var x =
+ 							0;
+ 						u.Ia.forEach(function(f, z) {
+ 							z = u.Ha[z];
+ 							b.vertexAttribPointer(f, z, b.FLOAT, !1, u.Cc, x);
+ 							x += 4 * z
+ 						})
+ 					},
+ 					Wc: function() {
+ 						b.enableVertexAttribArray(0)
+ 					},
+ 					Ca: function() {
+ 						N.zb(b)
+ 					},
+ 					zb: function(x) {
+ 						x.vertexAttribPointer(u.Ia[0], 2, x.FLOAT, !1, 8, 0)
+ 					},
+ 					Fh: function(x, f) {
+ 						b.uniform1i(u.A[x], f)
+ 					},
+ 					G: function(x, f) {
+ 						b.uniform1f(u.A[x], f)
+ 					},
+ 					sa: function(x, f, z) {
+ 						b.uniform2f(u.A[x], f, z)
+ 					},
+ 					Gh: function(x, f) {
+ 						b.uniform2fv(u.A[x], f)
+ 					},
+ 					Jf: function(x, f) {
+ 						b.uniform3fv(u.A[x], f)
+ 					},
+ 					Hh: function(x, f, z, I) {
+ 						b.uniform3f(u.A[x], f, z, I)
+ 					},
+ 					Kf: function(x, f, z, I, h) {
+ 						b.uniform4f(u.A[x],
+ 							f, z, I, h)
+ 					},
+ 					Td: function(x, f) {
+ 						b.uniform4fv(u.A[x], f)
+ 					},
+ 					Ih: function(x, f) {
+ 						b.uniformMatrix2fv(u.A[x], !1, f)
+ 					},
+ 					Jh: function(x, f) {
+ 						b.uniformMatrix3fv(u.A[x], !1, f)
+ 					},
+ 					Kh: function(x, f) {
+ 						b.uniformMatrix4fv(u.A[x], !1, f)
+ 					},
+ 					S: function(x, f) {
+ 						N.set(x);
+ 						f.forEach(function(z) {
+ 							switch (z.type) {
+ 								case "4f":
+ 									b.uniform4fv(u.A[z.name], z.value);
+ 									break;
+ 								case "3f":
+ 									b.uniform3fv(u.A[z.name], z.value);
+ 									break;
+ 								case "2f":
+ 									b.uniform2fv(u.A[z.name], z.value);
+ 									break;
+ 								case "1f":
+ 									b.uniform1f(u.A[z.name], z.value);
+ 									break;
+ 								case "1i":
+ 									b.uniform1i(u.A[z.name], z.value);
+ 									break;
+ 								case "mat2":
+ 									b.uniformMatrix2fv(u.A[z.name], !1, z.value);
+ 									break;
+ 								case "mat3":
+ 									b.uniformMatrix3fv(u.A[z.name], !1, z.value);
+ 									break;
+ 								case "mat4":
+ 									b.uniformMatrix4fv(u.A[z.name], !1, z.value)
+ 							}
+ 						})
+ 					},
+ 					Vg: function() {
+ 						return "lowp"
+ 					},
+ 					m: function() {
+ 						N.P();
+ 						b.disableVertexAttribArray(0);
+ 						for(var x in w) {
+ 							var f = w[x];
+ 							f.pa && (f.pa = !1, b.deleteProgram(f.ra));
+ 							f.df && delete w[x]
+ 						}
+ 						p.forEach(function(z) {
+ 							b.deleteShader(z)
+ 						});
+ 						p.splice(0);
+ 						r = 0;
+ 						A = !1;
+ 						u = null;
+ 						q = -1
+ 					}
+ 				};
+ 			return N
+ 		}(),
+ 		b = null,
+ 		Ha = function() {
+ 			function a(n) {
+ 				console.log("ERROR in ContextFF: ",
+ 					n);
+ 				return !1
+ 			}
+
+ 			function c() {
+ 				return navigator.userAgent && -1 !== navigator.userAgent.indexOf("forceWebGL1")
+ 			}
+
+ 			function d(n) {
+ 				function y() {
+ 					Ba.m();
+ 					aa.reset();
+ 					k.getExtension("WEBGL_lose_context")
+ 						.loseContext()
+ 				}
+ 				if(c()) return !1;
+ 				var E = document.createElement("canvas");
+ 				E.setAttribute("width", 5);
+ 				E.setAttribute("height", 5);
+ 				var k = null;
+ 				try {
+ 					k = E.getContext("webgl2", n)
+ 				} catch (M) {
+ 					return !1
+ 				}
+ 				if(!k) return !1;
+ 				e(k);
+ 				aa.Xc(k);
+ 				n = aa.Kb(k);
+ 				if(!n.fa && !n.ha) return y(), !1;
+ 				n = Ba.Nc(k, n);
+ 				y();
+ 				return n ? !0 : !1
+ 			}
+
+ 			function e(n) {
+ 				n.clearColor(0, 0, 0, 0);
+ 				n.disable(n.DEPTH_TEST);
+ 				n.disable(n.BLEND);
+ 				n.disable(n.DITHER);
+ 				n.disable(n.STENCIL_TEST);
+ 				n.disable(n.CULL_FACE);
+ 				n.GENERATE_MIPMAP_HINT && n.hint(n.GENERATE_MIPMAP_HINT, n.FASTEST);
+ 				n.disable(n.SAMPLE_ALPHA_TO_COVERAGE);
+ 				n.disable(n.SAMPLE_COVERAGE);
+ 				n.depthFunc(n.LEQUAL);
+ 				n.clearDepth(1)
+ 			}
+ 			var g = null,
+ 				m = null,
+ 				t = null,
+ 				p = null,
+ 				q = !0,
+ 				u = null,
+ 				r = null,
+ 				A = [],
+ 				v = {
+ 					F: function() {
+ 						return g.width
+ 					},
+ 					U: function() {
+ 						return g.height
+ 					},
+ 					Mg: function() {
+ 						return g
+ 					},
+ 					Kg: function() {
+ 						return b
+ 					},
+ 					ia: function() {
+ 						return q
+ 					},
+ 					flush: function() {
+ 						b.flush()
+ 					},
+ 					Ye: function() {
+ 						va.ca();
+ 						X.reset();
+ 						T.reset();
+ 						D.P();
+ 						D.Wc();
+ 						b.disable(b.DEPTH_TEST);
+ 						b.disable(b.BLEND);
+ 						T.va();
+ 						D.Ca()
+ 					},
+ 					Le: function() {
+ 						u || (u = new Uint8Array(g.width * g.height * 4));
+ 						b.readPixels(0, 0, g.width, g.height, b.RGBA, b.UNSIGNED_BYTE, u);
+ 						return u
+ 					},
+ 					Og: function() {
+ 						return g.toDataURL("image/jpeg")
+ 					},
+ 					Pg: function() {
+ 						va.O();
+ 						m || (m = document.createElement("canvas"), t = m.getContext("2d"));
+ 						m.width = g.width;
+ 						m.height = g.height;
+ 						for(var n = v.Le(), y = t.createImageData(m.width, m.height), E = m.width, k = m.height, M = y.data, H = 0; H < k; ++H)
+ 							for(var l = k - H - 1, J = 0; J < E; ++J) {
+ 								var w =
+ 									4 * (H * E + J),
+ 									L = 4 * (l * E + J);
+ 								M[w] = n[L];
+ 								M[w + 1] = n[L + 1];
+ 								M[w + 2] = n[L + 2];
+ 								M[w + 3] = n[L + 3]
+ 							}
+ 						t.putImageData(y, 0, 0);
+ 						return m.toDataURL("image/png")
+ 					},
+ 					Ng: function(n) {
+ 						!m && n && (m = document.createElement("canvas"), t = m.getContext("2d"));
+ 						var y = n ? m : document.createElement("canvas");
+ 						y.width = g.width;
+ 						y.height = g.height;
+ 						(n ? t : y.getContext("2d"))
+ 						.drawImage(g, 0, 0);
+ 						return y
+ 					},
+ 					o: function(n) {
+ 						n = Object.assign({
+ 							ga: null,
+ 							lc: null,
+ 							Wa: null,
+ 							Tc: null,
+ 							width: 512,
+ 							height: 512,
+ 							premultipliedAlpha: !1,
+ 							bf: !0,
+ 							antialias: !1,
+ 							debug: !1,
+ 							og: !1
+ 						}, n);
+ 						n.ga ? (b = n.ga, g = n.ga.canvas) :
+ 							n.Tc && !n.Wa ? g = document.getElementById(n.Tc) : n.Wa && (g = n.Wa);
+ 						g || (g = document.createElement("canvas"));
+ 						g.width = n.width;
+ 						g.height = n.height;
+ 						if(b) q = b instanceof WebGL2RenderingContext;
+ 						else {
+ 							q = !0;
+ 							var y = {
+ 								antialias: n.antialias,
+ 								alpha: !0,
+ 								preserveDrawingBuffer: !0,
+ 								premultipliedAlpha: n.premultipliedAlpha,
+ 								stencil: !1,
+ 								depth: n.bf,
+ 								failIfMajorPerformanceCaveat: !0,
+ 								powerPreference: "high-performance"
+ 							};
+ 							navigator && navigator.userAgent && -1 !== navigator.userAgent.indexOf("noAntialiasing") && (y.antialias = !1);
+ 							var E = d(y);
+ 							E || !y.antialias ||
+ 								c() || (y.antialias = !1, E = d(y));
+ 							E && (b = g.getContext("webgl2", y));
+ 							b ? q = !0 : ((b = g.getContext("webgl", y)) || (b = g.getContext("experimental-webgl", y)), q = !1)
+ 						}
+ 						if(!b) return a("WebGL1 and 2 are not enabled");
+ 						n.lc && g.addEventListener && (p = b.getExtension("WEBGL_lose_context")) && (r = n.lc, g.addEventListener("webglcontextlost", r, !1));
+ 						if(!aa.o()) return a("Not enough GL capabilities");
+ 						e(b);
+ 						D.o();
+ 						T.o();
+ 						Ba.Nc(b, aa.Ke());
+ 						A.forEach(function(k) {
+ 							k(b)
+ 						});
+ 						A.splice(0);
+ 						return !0
+ 					},
+ 					dg: function() {
+ 						return new Promise(function(n) {
+ 							b ? n(b) : A.push(n)
+ 						})
+ 					},
+ 					m: function() {
+ 						b && (aa.m(), D.m(), Ba.m());
+ 						p && r && (g.removeEventListener("webglcontextlost", r, !1), p = r = null);
+ 						b = u = t = m = g = null;
+ 						A.splice(0)
+ 					}
+ 				};
+ 			return v
+ 		}(),
+ 		xa = function() {
+ 			function a() {
+ 				null === c && ("undefined" !== typeof D ? c = D : "undefined" !== typeof JEShaders && (c = JEShaders))
+ 			}
+ 			var c = null;
+ 			return {
+ 				reset: function() {
+ 					c = null
+ 				},
+ 				If: function(d) {
+ 					c !== d && (c && c.P(), c = d)
+ 				},
+ 				nb: function() {
+ 					return c.nb()
+ 				},
+ 				Ca: function() {
+ 					return c.Ca()
+ 				},
+ 				zb: function(d) {
+ 					return c.zb(d)
+ 				},
+ 				uc: function() {
+ 					return c.uc()
+ 				},
+ 				P: function() {
+ 					return c.P()
+ 				},
+ 				set: function(d) {
+ 					a();
+ 					return c.set(d)
+ 				},
+ 				Sa: function(d) {
+ 					a();
+ 					return c.Sa(d)
+ 				},
+ 				tc: function(d) {
+ 					a();
+ 					return c.tc(d)
+ 				}
+ 			}
+ 		}(),
+ 		Aa = function() {
+ 			function a(h) {
+ 				b.bindTexture(b.TEXTURE_2D, h)
+ 			}
+
+ 			function c(h) {
+ 				x[0] = h;
+ 				h = f[0];
+ 				var C = h >> 16 & 32768,
+ 					K = h >> 12 & 2047,
+ 					O = h >> 23 & 255;
+ 				return 103 > O ? C : 142 < O ? C | 31744 | ((255 == O ? 0 : 1) && h & 8388607) : 113 > O ? (K |= 2048, C | (K >> 114 - O) + (K >> 113 - O & 1)) : C = (C | O - 112 << 10 | K >> 1) + (K & 1)
+ 			}
+
+ 			function d(h) {
+ 				var C = new Uint16Array(h.length);
+ 				h.forEach(function(K, O) {
+ 					C[O] = c(K)
+ 				});
+ 				return C
+ 			}
+
+ 			function e() {
+ 				if(null !== z.Xb) return z.Xb;
+ 				var h = m(d([.5, .5, .5, .5]), !0);
+ 				return null === h ? !0 : z.Xb = h
+ 			}
+
+ 			function g() {
+ 				if(null !== z.Yb) return z.Yb;
+ 				var h = m(new Uint8Array([127, 127, 127, 127]), !1);
+ 				return null === h ? !0 : z.Yb = h
+ 			}
+
+ 			function m(h, C) {
+ 				if(!xa.nb() || !E) return null;
+ 				var K = null,
+ 					O = Math.sqrt(h.length / 4);
+ 				try {
+ 					var Y = b.getError();
+ 					if("FUCKING_BIG_ERROR" === Y) return !1;
+ 					K = I.instance({
+ 						isFloat: !1,
+ 						R: C,
+ 						array: h,
+ 						width: O
+ 					});
+ 					Y = b.getError();
+ 					if(Y !== b.NO_ERROR) return !1
+ 				} catch (oa) {
+ 					return !1
+ 				}
+ 				la.O();
+ 				b.viewport(0, 0, O, O);
+ 				b.clearColor(0, 0, 0, 0);
+ 				b.clear(b.COLOR_BUFFER_BIT);
+ 				xa.set("s0");
+ 				K.Lc(0);
+ 				ma.l(!0, !0);
+ 				h = 4 * O * O;
+ 				C = new Uint8Array(h);
+ 				b.readPixels(0, 0, O, O, b.RGBA, b.UNSIGNED_BYTE, C);
+ 				O = !0;
+ 				for(Y = 0; Y < h; ++Y) O = O && 3 > Math.abs(C[Y] - 127);
+ 				K.remove();
+ 				la.ca();
+ 				return O
+ 			}
+ 			var t = 0,
+ 				p = null,
+ 				q = 0,
+ 				u = null,
+ 				r = null,
+ 				A = null,
+ 				v = null,
+ 				n = null,
+ 				y = null,
+ 				E = !1,
+ 				k = [],
+ 				M = {
+ 					isFloat: !1,
+ 					isPot: !0,
+ 					isLinear: !1,
+ 					isMipmap: !1,
+ 					isAnisotropicFiltering: !1,
+ 					isMirrorX: !1,
+ 					isMirrorY: !1,
+ 					isSrgb: !1,
+ 					isKeepArray: !1,
+ 					isFlipY: null,
+ 					width: 0,
+ 					height: 0,
+ 					url: null,
+ 					array: null,
+ 					data: null,
+ 					H: null,
+ 					Wb: null,
+ 					cf: !1,
+ 					R: !1,
+ 					ma: null,
+ 					sb: 4,
+ 					ec: 0
+ 				},
+ 				H = !1,
+ 				l = null,
+ 				J = null,
+ 				w = [
+ 					[1, 0, 0, 0],
+ 					[0, 1, 0, 0],
+ 					[0, 0, 1, 0],
+ 					[0, 0, 0,
+ 						1
+ 					]
+ 				],
+ 				L = !1,
+ 				N = !1,
+ 				x = new Float32Array(1),
+ 				f = new Int32Array(x.buffer),
+ 				z = {
+ 					Xb: null,
+ 					Yb: null
+ 				},
+ 				I = {
+ 					o: function() {
+ 						E || (n = [b.RGBA, null, b.RGBA, b.RGBA], y = [b.RGBA, null, b.RGBA, b.RGBA], p = [b.TEXTURE0, b.TEXTURE1, b.TEXTURE2, b.TEXTURE3, b.TEXTURE4, b.TEXTURE5, b.TEXTURE6, b.TEXTURE7], L = "undefined" !== typeof JEContext, N = "undefined" !== typeof aa, L && JEContext.ph() && p.push(b.TEXTURE8, b.TEXTURE9), u = [-1, -1, -1, -1, -1, -1, -1, -1], v = [b.UNSIGNED_BYTE, b.FLOAT, b.FLOAT], E = !0)
+ 					},
+ 					Ze: function() {
+ 						if(!r) {
+ 							for(var h = new Float32Array(16384), C = 0; 16384 > C; ++C) h[C] =
+ 								2 * Math.random() - 1;
+ 							r = {
+ 								random: I.instance({
+ 									isFloat: !0,
+ 									isPot: !0,
+ 									array: h,
+ 									width: 64
+ 								}),
+ 								ae: I.instance({
+ 									isFloat: !1,
+ 									isPot: !0,
+ 									width: 1,
+ 									array: new Uint8Array([0, 0, 0, 0])
+ 								})
+ 							}
+ 						}
+ 						I.Wf()
+ 					},
+ 					eh: function() {
+ 						return r.ae
+ 					},
+ 					Wf: function() {
+ 						v[1] = aa.Tb(b)
+ 					},
+ 					Gf: function() {
+ 						y = n = [b.RGBA, b.RGBA, b.RGBA, b.RGBA]
+ 					},
+ 					Ld: function(h) {
+ 						D.set("s1");
+ 						la.O();
+ 						var C = h.F(),
+ 							K = h.U();
+ 						b.viewport(0, 0, C, K);
+ 						h.g(0);
+ 						ma.l(!1, !1)
+ 					},
+ 					wh: function(h, C) {
+ 						I.Ld(h);
+ 						b.readPixels(0, 0, h.F(), h.U(), b.RGBA, b.UNSIGNED_BYTE, C)
+ 					},
+ 					xh: function(h, C) {
+ 						I.Ld(h);
+ 						return aa.xb(0, 0, h.F(), h.U(), C)
+ 					},
+ 					ed: function(h, C, K, O, Y, oa, sa) {
+ 						h.activeTexture(h.TEXTURE0);
+ 						var Ca = h.createTexture();
+ 						h.bindTexture(h.TEXTURE_2D, Ca);
+ 						Y = Y instanceof Float32Array ? Y : new Float32Array(Y);
+ 						h.texParameteri(h.TEXTURE_2D, h.TEXTURE_WRAP_S, h.CLAMP_TO_EDGE);
+ 						h.texParameteri(h.TEXTURE_2D, h.TEXTURE_WRAP_T, h.CLAMP_TO_EDGE);
+ 						h.texParameteri(h.TEXTURE_2D, h.TEXTURE_MAG_FILTER, h.NEAREST);
+ 						h.texParameteri(h.TEXTURE_2D, h.TEXTURE_MIN_FILTER, h.NEAREST);
+ 						h.pixelStorei(h.UNPACK_FLIP_Y_WEBGL, oa);
+ 						h.texImage2D(h.TEXTURE_2D, 0, h.RGBA, K, O, 0, h.RGBA, h.FLOAT,
+ 							Y);
+ 						h.bindTexture(h.TEXTURE_2D, null);
+ 						h.pixelStorei(h.UNPACK_FLIP_Y_WEBGL, !1);
+ 						sa && (la.ca(), D.Sa(h));
+ 						h.viewport(0, 0, K, O);
+ 						h.framebufferTexture2D(h.FRAMEBUFFER, h.COLOR_ATTACHMENT0, h.TEXTURE_2D, C, 0);
+ 						h.bindTexture(h.TEXTURE_2D, Ca);
+ 						sa ? ma.l(!0, !0) : T.bb(h);
+ 						h.deleteTexture(Ca);
+ 						E && (u[0] = -1, A = null, t = 0)
+ 					},
+ 					Fb: function(h) {
+ 						h !== t && (b.activeTexture(p[h]), t = h)
+ 					},
+ 					instance: function(h) {
+ 						var C;
+
+ 						function K() {
+ 							R = void 0 !== B.H.videoWidth ? B.H.videoWidth : B.H.width;
+ 							S = void 0 !== B.H.videoHeight ? B.H.videoHeight : B.H.height
+ 						}
+
+ 						function O(F) {
+ 							var P =
+ 								b.getError();
+ 							if("FUCKING_BIG_ERROR" === P) return !1;
+ 							b.texImage2D(b.TEXTURE_2D, 0, ja, fa, ha, F);
+ 							P = b.getError();
+ 							P !== b.NO_ERROR && fa !== b.RGBA && (fa = b.RGBA, b.texImage2D(b.TEXTURE_2D, 0, ja, fa, ha, F));
+ 							return !0
+ 						}
+
+ 						function Y() {
+ 							if(!Ab) {
+ 								a(ta);
+ 								za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, za);
+ 								B.isPot ? (b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_S, B.isMirrorX ? b.MIRRORED_REPEAT : b.REPEAT), b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_T, B.isMirrorY ? b.MIRRORED_REPEAT : b.REPEAT)) : (b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_S, b.CLAMP_TO_EDGE),
+ 									b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_T, b.CLAMP_TO_EDGE));
+ 								B.isAnisotropicFiltering && "undefined" !== typeof JESETTINGS && b.texParameterf(b.TEXTURE_2D, JEContext.Qg()
+ 									.TEXTURE_MAX_ANISOTROPY_EXT, JESETTINGS.$f);
+ 								b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MAG_FILTER, B.isLinear ? b.LINEAR : b.NEAREST);
+ 								B.isLinear ? b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MIN_FILTER, B.isMipmap && !La ? b.NEAREST_MIPMAP_LINEAR : b.LINEAR) : b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MIN_FILTER, B.isMipmap && !La ? b.NEAREST_MIPMAP_NEAREST : b.NEAREST);
+ 								fa = n[B.sb - 1];
+ 								ja = y[B.sb - 1];
+ 								ha = v[nb];
+ 								if(aa.ia()) {
+ 									var F = aa.Ne();
+ 									fa === b.RGBA && ha === b.FLOAT ? B.isMipmap || B.isLinear ? ja = Ba.Pe(b) : aa.Oc() ? F && (ja = F) : ja = b.RGBA16F || b.RGBA : fa === b.RGB && ha === b.FLOAT && F && (ja = F, fa = b.RGBA)
+ 								}
+ 								if(B.R && !B.isFloat || B.isFloat && B.isMipmap && Ba.hf()) ja = aa.Oe(), ha = aa.Tb(b);
+ 								B.ec && (bb = B.ec);
+ 								B.isSrgb && 4 === B.sb && (fa = JEContext.bh());
+ 								if(B.H) O(B.H);
+ 								else if(B.url) O(Ga);
+ 								else if(ua) {
+ 									F = ua;
+ 									try {
+ 										"FUCKING_BIG_ERROR" !== b.getError() && (b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, F), b.getError() !== b.NO_ERROR &&
+ 											(b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, null), b.getError() !== b.NO_ERROR && b.texImage2D(b.TEXTURE_2D, 0, b.RGBA, R, S, 0, b.RGBA, b.UNSIGNED_BYTE, null)))
+ 									} catch (ec) {
+ 										b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, null)
+ 									}
+ 									B.isKeepArray || (ua = null)
+ 								} else F = b.getError(), "FUCKING_BIG_ERROR" !== F && (b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, null), F = b.getError(), F !== b.NO_ERROR && (fa = b.RGBA, B.R && ha !== b.FLOAT && (ha = b.FLOAT, b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, null))));
+ 								if(B.isMipmap)
+ 									if(!La && ca) ca.Sb(), cb = !0;
+ 									else if(La) {
+ 									F =
+ 										Math.log2(Math.min(R, S));
+ 									Ra = Array(1 + F);
+ 									Ra[0] = ta;
+ 									for(var P = 1; P <= F; ++P) {
+ 										var ka = Math.pow(2, P),
+ 											W = R / ka;
+ 										ka = S / ka;
+ 										var Ma = b.createTexture();
+ 										a(Ma);
+ 										b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MIN_FILTER, b.NEAREST);
+ 										b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MAG_FILTER, b.NEAREST);
+ 										b.texImage2D(b.TEXTURE_2D, 0, ja, W, ka, 0, fa, ha, null);
+ 										a(null);
+ 										Ra[P] = Ma
+ 									}
+ 									cb = !0
+ 								}
+ 								a(null);
+ 								u[t] = -1;
+ 								za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1);
+ 								Ta = !0;
+ 								B.ma && ca && (B.ma(ca), B.ma = null)
+ 							}
+ 						}
+
+ 						function oa() {
+ 							for(var F = R * S, P = 2 * F, ka = 3 * F, W = 0; W < F; ++W) ya[0][W] = Ua[W], ya[1][W] =
+ 								Ua[W + F], ya[2][W] = Ua[W + P], ya[3][W] = Ua[W + ka]
+ 						}
+
+ 						function sa() {
+ 							var F = R * S * 4;
+ 							Da = [new Uint8Array(F), new Uint8Array(F), new Uint8Array(F), new Uint8Array(F)];
+ 							ya = [new Float32Array(Da[0].buffer), new Float32Array(Da[1].buffer), new Float32Array(Da[2].buffer), new Float32Array(Da[3].buffer)];
+ 							db = new Uint8Array(4 * F);
+ 							Ua = new Float32Array(db.buffer);
+ 							Va = !0
+ 						}
+
+ 						function Ca() {
+ 							C = new Uint8Array(R * S * 4);
+ 							Bb = new Float32Array(C.buffer);
+ 							ob = !0
+ 						}
+ 						var B = Object.assign({}, M, h),
+ 							Wa = q++;
+ 						null === B.isFlipY && (B.isFlipY = B.url ? !0 : !1);
+ 						B.data && (B.array =
+ 							"string" === typeof B.data ? Ib(B.data) : B.isFloat ? new Float32Array(B.data) : new Uint8Array(B.data), B.isFlipY = !1);
+ 						var nb = 0,
+ 							Cb = B.H ? !0 : !1,
+ 							Xa = null,
+ 							pb = null,
+ 							Db = !1;
+ 						B.R = B.R || B.isFloat;
+ 						B.R && (nb = 1);
+ 						!B.cf && B.isFloat && N && !aa.Oc() && (B.isFloat = !1);
+ 						B.isFloat && (nb = 2);
+ 						B.isAnisotropicFiltering && L && !JEContext.ih() && (B.isAnisotropicFiltering = !1);
+ 						var ta = B.Wb || b.createTexture(),
+ 							Ga = null,
+ 							ua = !1,
+ 							R = 0,
+ 							S = 0,
+ 							Ta = !1,
+ 							Ab = !1,
+ 							Va = !1,
+ 							ya = null,
+ 							Da = null,
+ 							db = null,
+ 							Ua = null,
+ 							ja = null,
+ 							fa = null,
+ 							ha = null,
+ 							za = B.isFlipY,
+ 							Tb = (h = B.R && B.isMipmap) && Ba.me(),
+ 							La = h &&
+ 							Tb ? !0 : !1,
+ 							Ra = null,
+ 							bb = -1,
+ 							cb = !1;
+ 						var ob = !1;
+ 						var Bb = C = null;
+ 						B.width && (R = B.width, S = B.height ? B.height : R);
+ 						var ca = {
+ 							get: function() {
+ 								return ta
+ 							},
+ 							F: function() {
+ 								return R
+ 							},
+ 							U: function() {
+ 								return S
+ 							},
+ 							fh: function() {
+ 								return B.url
+ 							},
+ 							jh: function() {
+ 								return B.isFloat
+ 							},
+ 							lh: function() {
+ 								return B.R
+ 							},
+ 							mh: function() {
+ 								return B.isLinear
+ 							},
+ 							Sb: function() {
+ 								b.generateMipmap(b.TEXTURE_2D)
+ 							},
+ 							ke: function(F, P) {
+ 								La ? (F || (F = ca.jd()), I.Fb(P), a(Ra[F]), u[P] = -1) : ca.g(P)
+ 							},
+ 							jd: function() {
+ 								-1 === bb && (bb = Math.log(R) / Math.log(2));
+ 								return bb
+ 							},
+ 							He: function(F) {
+ 								if(La) {
+ 									F || (F =
+ 										ca.jd());
+ 									D.set("s12");
+ 									I.Fb(0);
+ 									for(var P = R, ka = S, W = 1; W <= F; ++W) P /= 2, ka /= 2, D.sa("u8", .25 / P, .25 / ka), b.viewport(0, 0, P, ka), a(Ra[W - 1]), b.framebufferTexture2D(la.fb(), b.COLOR_ATTACHMENT0, b.TEXTURE_2D, Ra[W], 0), ma.l(!1, 1 === W);
+ 									u[0] = -1
+ 								} else ca.Sb()
+ 							},
+ 							Eh: function(F) {
+ 								(Cb = !Rb.Rf(F)) ? (ua = null, B.H = F, K()) : ua = F
+ 							},
+ 							g: function(F) {
+ 								if(!Ta) return !1;
+ 								I.Fb(F);
+ 								if(u[F] === Wa) return !1;
+ 								a(ta);
+ 								u[F] = Wa;
+ 								return !0
+ 							},
+ 							Lc: function(F) {
+ 								b.activeTexture(p[F]);
+ 								t = F;
+ 								a(ta);
+ 								u[F] = Wa
+ 							},
+ 							u: function() {
+ 								A = ca;
+ 								b.framebufferTexture2D(la.fb(), b.COLOR_ATTACHMENT0,
+ 									b.TEXTURE_2D, ta, 0)
+ 							},
+ 							$: function() {
+ 								A = ca;
+ 								b.viewport(0, 0, R, S);
+ 								b.framebufferTexture2D(la.fb(), b.COLOR_ATTACHMENT0, b.TEXTURE_2D, ta, 0)
+ 							},
+ 							Ac: I.Ac,
+ 							Sd: function(F, P) {
+ 								R = F;
+ 								S = P
+ 							},
+ 							resize: function(F, P) {
+ 								ca.Sd(F, P);
+ 								Y()
+ 							},
+ 							clone: function(F) {
+ 								F = I.instance({
+ 									width: R,
+ 									height: S,
+ 									R: B.R,
+ 									isFloat: B.isFloat,
+ 									isLinear: B.isLinear,
+ 									isMirrorY: B.isMirrorY,
+ 									isFlipY: F ? !za : za,
+ 									isPot: B.isPot
+ 								});
+ 								xa.set("s0");
+ 								la.ca();
+ 								F.u();
+ 								b.viewport(0, 0, R, S);
+ 								ca.g(0);
+ 								ma.l(!0, !0);
+ 								return F
+ 							},
+ 							Lf: function() {
+ 								b.viewport(0, 0, R, S)
+ 							},
+ 							remove: function() {
+ 								b.deleteTexture(ta);
+ 								Ab = !0;
+ 								k.splice(k.indexOf(ca), 1);
+ 								ca = null
+ 							},
+ 							refresh: function() {
+ 								ca.Lc(0);
+ 								za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !0);
+ 								Cb ? b.texImage2D(b.TEXTURE_2D, 0, ja, fa, ha, B.H) : b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, ua);
+ 								za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1)
+ 							},
+ 							Kd: function() {
+ 								Va || sa();
+ 								b.readPixels(0, 0, R, 4 * S, b.RGBA, b.UNSIGNED_BYTE, db);
+ 								oa();
+ 								return ya
+ 							},
+ 							yf: function() {
+ 								Va || sa();
+ 								return aa.xb(0, 0, R, 4 * S, db)
+ 									.then(function() {
+ 										oa();
+ 										return ya
+ 									})
+ 							},
+ 							Af: function() {
+ 								ob || Ca();
+ 								b.readPixels(0, 0, R, S, b.RGBA, b.UNSIGNED_BYTE, C);
+ 								return Bb
+ 							},
+ 							zf: function() {
+ 								ob || Ca();
+ 								return aa.xb(0, 0, R, S, C)
+ 							},
+ 							Uc: function(F) {
+ 								la.O();
+ 								D.set("s13");
+ 								ca.g(0);
+ 								if(F) b.viewport(0, 0, R, S), D.Kf("u9", .25, .25, .25, .25), ma.l(!1, !0);
+ 								else
+ 									for(F = 0; 4 > F; ++F) b.viewport(0, S * F, R, S), D.Td("u9", w[F]), ma.l(!1, 0 === F)
+ 							},
+ 							Db: function(F) {
+ 								var P = ha === v[0] && !g();
+ 								a(ta);
+ 								za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !0);
+ 								P ? (Db || (Xa = document.createElement("canvas"), Xa.width = R, Xa.height = S, pb = Xa.getContext("2d"), pb.createImageData(R, S), Db = !0), null.data.set(F), pb.putImageData(null, 0, 0), b.texImage2D(b.TEXTURE_2D,
+ 									0, ja, fa, ha, Xa)) : b.texImage2D(b.TEXTURE_2D, 0, ja, R, S, 0, fa, ha, F);
+ 								u[t] = Wa;
+ 								za && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1)
+ 							},
+ 							Qh: function(F, P) {
+ 								a(ta);
+ 								P && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !0);
+ 								b.texImage2D(b.TEXTURE_2D, 0, ja, fa, ha, F);
+ 								u[t] = Wa;
+ 								P && b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !1)
+ 							},
+ 							Dh: function(F, P) {
+ 								var ka = R * S,
+ 									W = 4 * ka;
+ 								F = B.R ? F ? "RGBE" : "JSON" : "RGBA";
+ 								P && (F = P);
+ 								P = aa.ia() && !1;
+ 								var Ma = null;
+ 								switch (F) {
+ 									case "RGBE":
+ 										Ma = "s43";
+ 										break;
+ 									case "JSON":
+ 										Ma = P ? "s0" : "s13";
+ 										break;
+ 									case "RGBA":
+ 									case "RGBAARRAY":
+ 										Ma = "s7"
+ 								}
+ 								Va || ("RGBA" === F || "RGBE" ===
+ 									F || "RGBAARRAY" === F ? (Da = new Uint8Array(W), Va = !0) : "JSON" !== F || P || sa());
+ 								la.O();
+ 								D.set(Ma);
+ 								ca.g(0);
+ 								W = null;
+ 								if("RGBA" === F || "RGBE" === F || "RGBAARRAY" === F) {
+ 									b.viewport(0, 0, R, S);
+ 									ma.l(!0, !0);
+ 									b.readPixels(0, 0, R, S, b.RGBA, b.UNSIGNED_BYTE, Da);
+ 									if("RGBAARRAY" === F) return {
+ 										data: Da
+ 									};
+ 									H || (l = document.createElement("canvas"), J = l.getContext("2d"), H = !0);
+ 									l.width = R;
+ 									l.height = S;
+ 									ka = J.createImageData(R, S);
+ 									ka.data.set(Da);
+ 									J.putImageData(ka, 0, 0);
+ 									W = l.toDataURL("image/png")
+ 								} else if("JSON" === F)
+ 									if(P) W = new Float32Array(ka), b.viewport(0, 0,
+ 										R, S), ma.l(!0, !0), b.readPixels(0, 0, R, S, b.RGBA, b.FLOAT, W);
+ 									else {
+ 										for(W = 0; 4 > W; ++W) b.viewport(0, S * W, R, S), D.Td("u9", w[W]), ma.l(!W, !W);
+ 										ca.Kd();
+ 										W = Array(ka);
+ 										for(P = 0; P < ka; ++P) W[4 * P] = ya[0][P], W[4 * P + 1] = ya[1][P], W[4 * P + 2] = ya[2][P], W[4 * P + 3] = ya[3][P]
+ 									} return {
+ 									format: F,
+ 									data: W,
+ 									width: R,
+ 									height: S,
+ 									isMirrorY: B.isMirrorY,
+ 									isFlipY: "RGBA" === F ? B.isFlipY : !B.isFlipY
+ 								}
+ 							}
+ 						};
+ 						B.isMipmap && !La && Ta && !cb && (ca.Sb(), cb = !0);
+ 						if(B.url) a(ta), b.texImage2D(b.TEXTURE_2D, 0, b.RGBA, 1, 1, 0, b.RGBA, b.UNSIGNED_BYTE, null), Ga = new Image, Ga.ng = "Anonymous", Ga.crossOrigin =
+ 							"Anonymous", Ga.src = B.url, Ga.onload = function() {
+ 								R = Ga.width;
+ 								S = Ga.height;
+ 								Y()
+ 							};
+ 						else if(B.H) {
+ 							var Eb = function() {
+ 								K();
+ 								R ? Y() : setTimeout(Eb, 1)
+ 							};
+ 							Eb()
+ 						} else B.array ? (B.R && !B.isFloat ? B.array instanceof Uint16Array ? (ua = B.array, Y()) : e() ? (ua = d(B.array), Y()) : (Y(), I.ed(b, ta, ca.F(), ca.U(), B.array, za, !0)) : (ua = B.isFloat ? B.array instanceof Float32Array ? B.array : new Float32Array(B.array) : B.array instanceof Uint8Array ? B.array : new Uint8Array(B.array), Y()), B.isKeepArray || (ua && ua !== B.array && (ua = null), delete B.array)) : B.Wb ? Ta = !0 : Y();
+ 						ca.$g = ca.F;
+ 						B.ma && Ta && (B.ma(ca), B.ma = null);
+ 						k.push(ca);
+ 						return ca
+ 					},
+ 					O: function(h) {
+ 						h !== t && (b.activeTexture(p[h]), t = h);
+ 						u[h] = -1;
+ 						a(null)
+ 					},
+ 					cg: function(h) {
+ 						r.random.g(h)
+ 					},
+ 					Ac: function() {
+ 						A = null;
+ 						b.framebufferTexture2D(la.fb(), b.COLOR_ATTACHMENT0, b.TEXTURE_2D, null, 0)
+ 					},
+ 					reset: function() {
+ 						0 !== t && b.activeTexture(p[0]);
+ 						for(var h = 0; h < p.length; ++h) u[h] = -1;
+ 						t = -1
+ 					},
+ 					Ah: function() {
+ 						t = -1
+ 					},
+ 					Tf: function() {
+ 						for(var h = 0; h < p.length; ++h) I.O(h)
+ 					},
+ 					fd: function() {
+ 						r && (r.random.remove(), r.ae.remove())
+ 					},
+ 					Ph: function(h, C) {
+ 						if("RGBA" === h.format ||
+ 							"RGBE" === h.format) {
+ 							var K = new Image;
+ 							K.src = h.data;
+ 							K.onload = function() {
+ 								I.instance({
+ 									isMirrorY: h.isMirrorY,
+ 									isFlipY: h.isFlipY,
+ 									isFloat: !1,
+ 									H: K,
+ 									ma: function(O) {
+ 										if("RGBA" === h.format) C(O);
+ 										else {
+ 											var Y = h.width,
+ 												oa = h.height,
+ 												sa = I.instance({
+ 													isMirrorY: h.isMirrorY,
+ 													isFloat: !0,
+ 													width: Y,
+ 													height: oa,
+ 													isFlipY: h.isFlipY
+ 												});
+ 											la.ca();
+ 											b.viewport(0, 0, Y, oa);
+ 											D.set("s44");
+ 											sa.u();
+ 											O.g(0);
+ 											ma.l(!0, !0);
+ 											I.O(0);
+ 											C(sa);
+ 											aa.flush();
+ 											setTimeout(O.remove, 50)
+ 										}
+ 									}
+ 								})
+ 							}
+ 						} else "JSON" === h.format ? C(I.instance({
+ 							isFloat: !0,
+ 							isFlipY: h.isFlipY,
+ 							width: h.width,
+ 							height: h.height,
+ 							array: new Float32Array(h.data)
+ 						})) : C(!1)
+ 					},
+ 					te: d,
+ 					m: function() {
+ 						A && (va.ca(), I.Ac(), va.O());
+ 						I.Tf();
+ 						k.slice(0)
+ 							.forEach(function(h) {
+ 								h.remove()
+ 							});
+ 						k.splice(0);
+ 						E = !1;
+ 						q = 0;
+ 						"undefined" !== typeof Ba && Ba.m();
+ 						r = null
+ 					}
+ 				};
+ 			return I
+ 		}(),
+ 		Nb = function() {
+ 			return {
+ 				instance: function(a) {
+ 					var c = [Aa.instance(a), Aa.instance(a)],
+ 						d = [c[1], c[0]],
+ 						e = d,
+ 						g = {
+ 							Df: function(m) {
+ 								e[1].u();
+ 								e[0].g(m);
+ 								g.Wd()
+ 							},
+ 							Ef: function(m) {
+ 								e[1].$();
+ 								e[0].g(m);
+ 								g.Wd()
+ 							},
+ 							Wd: function() {
+ 								e = e === c ? d : c
+ 							},
+ 							refresh: function() {
+ 								e[0].refresh();
+ 								e[1].refresh()
+ 							},
+ 							g: function(m) {
+ 								e[0].g(m)
+ 							},
+ 							bg: function(m) {
+ 								e[1].g(m)
+ 							},
+ 							Ug: function() {
+ 								return e[0]
+ 							},
+ 							Yg: function() {
+ 								return e[1]
+ 							},
+ 							Db: function(m) {
+ 								e[0].Db(m);
+ 								e[1].Db(m)
+ 							},
+ 							remove: function() {
+ 								e[0].remove();
+ 								e[1].remove();
+ 								e = null
+ 							},
+ 							sync: function() {
+ 								g.Ef(0);
+ 								D.set("s0");
+ 								T.l(!1, !1)
+ 							}
+ 						};
+ 					return g
+ 				}
+ 			}
+ 		}(),
+ 		ma = function() {
+ 			function a(q) {
+ 				var u = {
+ 					aa: null,
+ 					J: null
+ 				};
+ 				u.aa = q.createBuffer();
+ 				q.bindBuffer(q.ARRAY_BUFFER, u.aa);
+ 				q.bufferData(q.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), q.STATIC_DRAW);
+ 				u.J = q.createBuffer();
+ 				q.bindBuffer(q.ELEMENT_ARRAY_BUFFER, u.J);
+ 				q.bufferData(q.ELEMENT_ARRAY_BUFFER, new Uint16Array([0,
+ 					1, 2
+ 				]), q.STATIC_DRAW);
+ 				return u
+ 			}
+ 			var c = null,
+ 				d = 0,
+ 				e = !1,
+ 				g = [],
+ 				m = -2,
+ 				t = -2,
+ 				p = {
+ 					reset: function() {
+ 						t = m = -2
+ 					},
+ 					o: function() {
+ 						e || (c = a(b), p.va(), e = !0)
+ 					},
+ 					instance: function(q) {
+ 						var u = d++,
+ 							r = q.J ? q.J.length : 0,
+ 							A = "undefined" === typeof q.mode ? b.STATIC_DRAW : q.mode,
+ 							v = b.createBuffer();
+ 						b.bindBuffer(b.ARRAY_BUFFER, v);
+ 						b.bufferData(b.ARRAY_BUFFER, q.aa instanceof Float32Array ? q.aa : new Float32Array(q.aa), A);
+ 						m = u;
+ 						var n = null,
+ 							y = null,
+ 							E = null;
+ 						if(q.J) {
+ 							n = b.createBuffer();
+ 							b.bindBuffer(b.ELEMENT_ARRAY_BUFFER, n);
+ 							var k = null;
+ 							65536 > q.J.length ? (k = Uint16Array,
+ 								y = b.UNSIGNED_SHORT, E = 2) : (k = Uint32Array, y = b.UNSIGNED_INT, E = 4);
+ 							k = q.J instanceof k ? q.J : new k(q.J);
+ 							b.bufferData(b.ELEMENT_ARRAY_BUFFER, k, A);
+ 							t = u
+ 						}
+ 						var M = {
+ 							le: function(H) {
+ 								m !== u && (b.bindBuffer(b.ARRAY_BUFFER, v), m = u);
+ 								H && xa.uc()
+ 							},
+ 							ie: function() {
+ 								t !== u && (b.bindBuffer(b.ELEMENT_ARRAY_BUFFER, n), t = u)
+ 							},
+ 							bind: function(H) {
+ 								M.le(H);
+ 								M.ie()
+ 							},
+ 							rg: function() {
+ 								b.drawElements(b.TRIANGLES, r, y, 0)
+ 							},
+ 							sg: function(H, l) {
+ 								b.drawElements(b.TRIANGLES, H, y, l * E)
+ 							},
+ 							remove: function() {
+ 								b.deleteBuffer(v);
+ 								q.J && b.deleteBuffer(n);
+ 								M = null
+ 							}
+ 						};
+ 						g.push(M);
+ 						return M
+ 					},
+ 					va: function() {
+ 						-1 !== m && (b.bindBuffer(b.ARRAY_BUFFER, c.aa), m = -1); - 1 !== t && (b.bindBuffer(b.ELEMENT_ARRAY_BUFFER, c.J), t = -1)
+ 					},
+ 					l: function(q, u) {
+ 						q && ma.va();
+ 						u && xa.Ca();
+ 						b.drawElements(b.TRIANGLES, 3, b.UNSIGNED_SHORT, 0)
+ 					},
+ 					bb: function(q) {
+ 						q = q || b;
+ 						var u = a(q);
+ 						q.bindBuffer(q.ARRAY_BUFFER, u.aa);
+ 						q.bindBuffer(q.ELEMENT_ARRAY_BUFFER, u.J);
+ 						xa.zb(q);
+ 						q.clear(q.COLOR_BUFFER_BIT);
+ 						q.drawElements(q.TRIANGLES, 3, q.UNSIGNED_SHORT, 0);
+ 						q.flush();
+ 						q.bindBuffer(q.ARRAY_BUFFER, null);
+ 						q.bindBuffer(q.ELEMENT_ARRAY_BUFFER, null);
+ 						q.deleteBuffer(u.aa);
+ 						q.deleteBuffer(u.J);
+ 						p.reset();
+ 						e && (p.va(), xa.Ca())
+ 					},
+ 					fd: function() {
+ 						var q = b,
+ 							u = c;
+ 						q.deleteBuffer(u.aa);
+ 						q.deleteBuffer(u.J)
+ 					},
+ 					m: function() {
+ 						p.fd();
+ 						g.forEach(function(q) {
+ 							q.remove()
+ 						});
+ 						b.bindBuffer(b.ARRAY_BUFFER, null);
+ 						b.bindBuffer(b.ELEMENT_ARRAY_BUFFER, null);
+ 						p.reset();
+ 						e = !1;
+ 						g.splice(0);
+ 						d = 0
+ 					}
+ 				};
+ 			return p
+ 		}(),
+ 		la = function() {
+ 			var a = null,
+ 				c = null,
+ 				d = null,
+ 				e = !1,
+ 				g = [],
+ 				m = {
+ 					I: -2,
+ 					dd: 1
+ 				},
+ 				t = {
+ 					nb: function() {
+ 						return e
+ 					},
+ 					o: function() {
+ 						if(!e) {
+ 							a = b.createFramebuffer();
+ 							var p = aa.ia();
+ 							c = p && b.DRAW_FRAMEBUFFER ? b.DRAW_FRAMEBUFFER : b.FRAMEBUFFER;
+ 							d =
+ 								p && b.READ_FRAMEBUFFER ? b.READ_FRAMEBUFFER : b.FRAMEBUFFER;
+ 							e = !0
+ 						}
+ 					},
+ 					Rg: function() {
+ 						return c
+ 					},
+ 					Qe: function() {
+ 						return d
+ 					},
+ 					fb: function() {
+ 						return b.FRAMEBUFFER
+ 					},
+ 					Zg: function() {
+ 						return m
+ 					},
+ 					Jg: function() {
+ 						return a
+ 					},
+ 					instance: function(p) {
+ 						void 0 === p.qd && (p.qd = !1);
+ 						var q = p.K ? p.K : null,
+ 							u = p.width,
+ 							r = void 0 !== p.height ? p.height : p.width,
+ 							A = a,
+ 							v = null,
+ 							n = !1,
+ 							y = !1,
+ 							E = 0;
+ 						q && (u = u ? u : q.F(), r = r ? r : q.U());
+ 						var k = {
+ 							Rd: function() {
+ 								n || (A = b.createFramebuffer(), n = !0, E = m.dd++)
+ 							},
+ 							de: function() {
+ 								k.Rd();
+ 								k.u();
+ 								v = b.createRenderbuffer();
+ 								b.bindRenderbuffer(b.RENDERBUFFER,
+ 									v);
+ 								b.renderbufferStorage(b.RENDERBUFFER, b.DEPTH_COMPONENT16, u, r);
+ 								b.framebufferRenderbuffer(c, b.DEPTH_ATTACHMENT, b.RENDERBUFFER, v);
+ 								b.clearDepth(1)
+ 							},
+ 							bind: function(M, H) {
+ 								E !== m.I && (b.bindFramebuffer(c, A), m.I = E);
+ 								q && q.u();
+ 								H && b.viewport(0, 0, u, r);
+ 								M && b.clear(b.COLOR_BUFFER_BIT | b.DEPTH_BUFFER_BIT)
+ 							},
+ 							ag: function() {
+ 								E !== m.I && (b.bindFramebuffer(c, A), m.I = E)
+ 							},
+ 							clear: function() {
+ 								b.clear(b.COLOR_BUFFER_BIT | b.DEPTH_BUFFER_BIT)
+ 							},
+ 							jg: function() {
+ 								b.clear(b.COLOR_BUFFER_BIT)
+ 							},
+ 							kg: function() {
+ 								b.clear(b.DEPTH_BUFFER_BIT)
+ 							},
+ 							Lf: function() {
+ 								b.viewport(0,
+ 									0, u, r)
+ 							},
+ 							u: function() {
+ 								E !== m.I && (b.bindFramebuffer(c, A), m.I = E)
+ 							},
+ 							rtt: function(M) {
+ 								q = M;
+ 								m.I !== E && (b.bindFramebuffer(b.FRAMEBUFFER, A), m.I = E);
+ 								M.u()
+ 							},
+ 							O: function() {
+ 								b.bindFramebuffer(c, null);
+ 								m.I = -1
+ 							},
+ 							resize: function(M, H) {
+ 								u = M;
+ 								r = H;
+ 								v && (b.bindRenderbuffer(b.RENDERBUFFER, v), b.renderbufferStorage(b.RENDERBUFFER, b.DEPTH_COMPONENT16, u, r))
+ 							},
+ 							remove: function() {
+ 								A === a || y || (b.bindFramebuffer(c, A), b.framebufferTexture2D(c, b.COLOR_ATTACHMENT0, b.TEXTURE_2D, null, 0), v && b.framebufferRenderbuffer(c, b.DEPTH_ATTACHMENT, b.RENDERBUFFER,
+ 									null), b.bindFramebuffer(c, null), b.deleteFramebuffer(A), v && b.deleteRenderbuffer(v));
+ 								y = !0
+ 							}
+ 						};
+ 						p.qd && k.de();
+ 						g.push(k);
+ 						return k
+ 					},
+ 					O: function() {
+ 						b.bindFramebuffer(c, null);
+ 						m.I = -1
+ 					},
+ 					Uf: function() {
+ 						b.bindFramebuffer(c, null);
+ 						b.clear(b.COLOR_BUFFER_BIT | b.DEPTH_BUFFER_BIT);
+ 						aa.Ud();
+ 						m.I = -1
+ 					},
+ 					reset: function() {
+ 						m.I = -2
+ 					},
+ 					ca: function() {
+ 						0 !== m.I && (b.bindFramebuffer(c, a), m.I = 0)
+ 					},
+ 					clear: function() {
+ 						aa.Ud();
+ 						b.clear(b.COLOR_BUFFER_BIT)
+ 					},
+ 					m: function() {
+ 						t.O();
+ 						g.forEach(function(p) {
+ 							p.remove()
+ 						});
+ 						null !== a && (b.deleteFramebuffer(a), a = null);
+ 						t.reset();
+ 						e = !1;
+ 						g.splice(0);
+ 						m.dd = 1
+ 					}
+ 				};
+ 			return t
+ 		}(),
+ 		aa = function() {
+ 			function a() {
+ 				p = "undefined" === typeof Ha ? JEContext : Ha;
+ 				q = !0
+ 			}
+
+ 			function c(l, J) {
+ 				for(var w = 0; w < l.length; ++w) {
+ 					var L = J.getExtension(l[w]);
+ 					if(L) return L
+ 				}
+ 				return null
+ 			}
+
+ 			function d() {
+ 				null !== k.Cb && (clearInterval(k.Cb), k.Cb = null);
+ 				k.za = !1
+ 			}
+
+ 			function e(l) {
+ 				if(0 === k.oa.length) {
+ 					k.V = b.PIXEL_PACK_BUFFER;
+ 					k.oa.splice(0);
+ 					k.gb.splice(0);
+ 					for(var J = 0; J < k.La; ++J) k.oa.push(b.createBuffer()), k.gb.push(-1);
+ 					k.ea = 0;
+ 					k.jc = 0
+ 				}
+ 				b.bindBuffer(k.V, k.oa[k.ea]);
+ 				l.byteLength !== k.gb[k.ea] &&
+ 					(b.bufferData(k.V, l.byteLength, b.STREAM_READ), k.gb[k.ea] = l.byteLength);
+ 				k.gh = !0
+ 			}
+
+ 			function g() {
+ 				b.bindBuffer(k.V, null)
+ 			}
+
+ 			function m() {
+ 				k.xa.forEach(function(l) {
+ 					b.deleteSync(l)
+ 				});
+ 				k.xa.splice(0)
+ 			}
+
+ 			function t() {
+ 				k.ea = (k.ea + 1) % k.La;
+ 				++k.jc
+ 			}
+ 			var p = null,
+ 				q = !1,
+ 				u = {
+ 					sd: !1,
+ 					wc: null,
+ 					xc: null,
+ 					vd: !1,
+ 					gf: !1,
+ 					yc: null,
+ 					wd: !1,
+ 					zc: null,
+ 					td: !1,
+ 					Hb: null,
+ 					$e: !1,
+ 					Ib: null,
+ 					af: !1
+ 				},
+ 				r = null,
+ 				A = {
+ 					fa: !0,
+ 					ha: !0,
+ 					Rb: !0,
+ 					Jd: !1
+ 				},
+ 				v = null,
+ 				n = !0,
+ 				y = null,
+ 				E = null,
+ 				k = {
+ 					ue: 1,
+ 					La: -1,
+ 					ea: 0,
+ 					jc: 0,
+ 					za: !1,
+ 					oa: [],
+ 					xa: [],
+ 					gb: [],
+ 					V: null,
+ 					Cb: null
+ 				},
+ 				M = "undefined" === typeof window ? {} : window,
+ 				H = {
+ 					o: function() {
+ 						if(q) return !0;
+ 						H.reset();
+ 						q || a();
+ 						var l = b;
+ 						if(!r.sd) {
+ 							r.wc = H.$c(l);
+ 							M.GL_EXT_FLOAT = r.wc;
+ 							r.vd = r.wc ? !0 : !1;
+ 							if(r.vd || H.ia()) r.xc = H.ad(l), r.gf = r.xc ? !0 : !1, M.GL_EXT_FLOATLINEAR = r.xc;
+ 							r.sd = !0
+ 						}
+ 						if(!r.td) {
+ 							r.yc = H.$a(l);
+ 							r.yc && (r.wd = !0, M.GL_EXT_HALFFLOAT = r.yc);
+ 							if(r.wd || H.ia()) r.zc = H.bd(l), M.GL_EXT_HALFFLOATLINEAR = r.zc;
+ 							r.hh = r.zc ? !0 : !1;
+ 							r.td = !0
+ 						}
+ 						r.Hb = H.Yc(l);
+ 						r.$e = r.Hb ? !0 : !1;
+ 						M.GL_EXT_COLORBUFFERFLOAT = r.Hb;
+ 						r.Ib = H.Zc(l);
+ 						r.af = r.Ib ? !0 : !1;
+ 						M.GL_EXT_COLORBUFFERHALFFLOAT = r.Ib;
+ 						la.o();
+ 						Aa.o();
+ 						if(!H.xe()) return !1;
+ 						ma.o();
+ 						Aa.Ze();
+ 						return !0
+ 					},
+ 					reset: function() {
+ 						r = Object.assign({}, u);
+ 						v = Object.assign({}, A)
+ 					},
+ 					F: function() {
+ 						q || a();
+ 						return p.F()
+ 					},
+ 					U: function() {
+ 						q || a();
+ 						return p.U()
+ 					},
+ 					ia: function() {
+ 						q || a();
+ 						return p.ia()
+ 					},
+ 					Xc: function(l) {
+ 						H.Yc(l);
+ 						H.Zc(l);
+ 						H.$c(l);
+ 						H.ad(l);
+ 						H.$a(l);
+ 						H.bd(l)
+ 					},
+ 					Yc: c.bind(null, ["EXT_color_buffer_float", "WEBGL_color_buffer_float", "OES_color_buffer_float"]),
+ 					Zc: c.bind(null, ["EXT_color_buffer_half_float", "WEBGL_color_buffer_half_float", "OES_color_buffer_half_float"]),
+ 					$c: c.bind(null, ["OES_texture_float", "MOZ_OES_texture_float",
+ 						"WEBKIT_OES_texture_float"
+ 					]),
+ 					ad: c.bind(null, ["OES_texture_float_linear", "MOZ_OES_texture_float_linear", "WEBKIT_OES_texture_float_linear"]),
+ 					$a: c.bind(null, ["OES_texture_half_float", "MOZ_OES_texture_half_float", "WEBKIT_OES_texture_half_float"]),
+ 					bd: c.bind(null, ["OES_texture_half_float_linear", "MOZ_OES_texture_half_float_linear", "WEBKIT_OES_texture_half_float_linear"]),
+ 					Tb: function(l) {
+ 						var J = H.$a(l);
+ 						return J && J.HALF_FLOAT_OES ? J.HALF_FLOAT_OES : l.HALF_FLOAT || l.FLOAT
+ 					},
+ 					Ne: function() {
+ 						return E || b.RGBA32F || b.RGBA
+ 					},
+ 					Oe: function() {
+ 						return y || b.RGBA16F || b.RGBA
+ 					},
+ 					Ke: function() {
+ 						return v
+ 					},
+ 					Oc: function() {
+ 						return v.fa
+ 					},
+ 					fg: function() {
+ 						return v.ha
+ 					},
+ 					eg: function() {
+ 						return v.Rb
+ 					},
+ 					oe: function() {
+ 						return v.Jd && n
+ 					},
+ 					Zd: function(l) {
+ 						n = l;
+ 						!l && k.za && (m(), b.bindBuffer(k.V, null), k.za = !1)
+ 					},
+ 					nh: function() {
+ 						return k.za
+ 					},
+ 					Ab: function(l, J, w) {
+ 						function L() {
+ 							l.bindTexture(l.TEXTURE_2D, null);
+ 							l.bindFramebuffer(N, null);
+ 							l.deleteTexture(z);
+ 							l.deleteFramebuffer(f)
+ 						}
+ 						var N = l.FRAMEBUFFER,
+ 							x = l.NEAREST,
+ 							f = l.createFramebuffer();
+ 						l.bindFramebuffer(N, f);
+ 						var z = l.createTexture();
+ 						l.activeTexture(l.TEXTURE0);
+ 						l.bindTexture(l.TEXTURE_2D, z);
+ 						l.pixelStorei(l.UNPACK_FLIP_Y_WEBGL, !1);
+ 						l.texParameteri(l.TEXTURE_2D, l.TEXTURE_WRAP_S, l.CLAMP_TO_EDGE);
+ 						l.texParameteri(l.TEXTURE_2D, l.TEXTURE_WRAP_T, l.CLAMP_TO_EDGE);
+ 						l.texParameteri(l.TEXTURE_2D, l.TEXTURE_MAG_FILTER, x);
+ 						l.texParameteri(l.TEXTURE_2D, l.TEXTURE_MIN_FILTER, x);
+ 						l.texImage2D(l.TEXTURE_2D, 0, J, 3, 3, 0, l.RGBA, w, null);
+ 						l.framebufferTexture2D(l.FRAMEBUFFER, l.COLOR_ATTACHMENT0, l.TEXTURE_2D, z, 0);
+ 						if(l.checkFramebufferStatus(l.READ_FRAMEBUFFER ||
+ 							l.FRAMEBUFFER) !== l.FRAMEBUFFER_COMPLETE) return L(), !1;
+ 						xa.tc(l);
+ 						l.clearColor(0, 0, 0, 0);
+ 						l.viewport(0, 0, 3, 3);
+ 						l.disable(l.DEPTH_TEST);
+ 						l.clear(l.COLOR_BUFFER_BIT);
+ 						ma.bb(l);
+ 						l.bindFramebuffer(N, null);
+ 						xa.Sa(l);
+ 						l.activeTexture(l.TEXTURE0);
+ 						l.bindTexture(l.TEXTURE_2D, z);
+ 						ma.bb(l);
+ 						J = new Uint8Array(36);
+ 						l.readPixels(0, 0, 3, 3, l.RGBA, l.UNSIGNED_BYTE, J);
+ 						L();
+ 						for(w = 0; 36 > w; ++w)
+ 							if(3 !== w % 4 && 3 < Math.abs(J[w] - 127)) return !1;
+ 						return !0
+ 					},
+ 					Kb: function(l) {
+ 						var J = {
+ 							fa: !1,
+ 							ha: !1
+ 						};
+ 						l.disable(l.BLEND);
+ 						l.clearColor(0, 0, 0, 0);
+ 						l.clear(l.COLOR_BUFFER_BIT);
+ 						l.RGBA32F && H.Ab(l, l.RGBA32F, l.FLOAT) && (J.fa = !0, E = l.RGBA32F);
+ 						!J.fa && H.Ab(l, l.RGBA, l.FLOAT) && (J.fa = !0, E = l.RGBA);
+ 						var w = H.Tb(l);
+ 						y = null;
+ 						l.RGBA16F && H.Ab(l, l.RGBA16F, w) && (J.ha = !0, y = l.RGBA16F);
+ 						!J.ha && H.Ab(l, l.RGBA, w) && (J.ha = !0, y = l.RGBA);
+ 						return J
+ 					},
+ 					ye: function() {
+ 						var l = la.instance({
+ 							width: 2
+ 						});
+ 						l.Rd();
+ 						var J = Aa.instance({
+ 							width: 2,
+ 							isFloat: !0,
+ 							sb: 3
+ 						});
+ 						l.u();
+ 						J.u();
+ 						H.flush();
+ 						b.checkFramebufferStatus(la.Qe()) !== b.FRAMEBUFFER_COMPLETE ? (Aa.Gf(), v.Rb = !1) : v.Rb = !0;
+ 						l.remove();
+ 						J.remove()
+ 					},
+ 					ze: function() {
+ 						var l = !1;
+ 						H.ia() && (l = "PIXEL_PACK_BUFFER STREAM_READ SYNC_GPU_COMMANDS_COMPLETE WAIT_FAILED fenceSync deleteSync createBuffer".split(" ")
+ 							.every(function(J) {
+ 								return "undefined" !==
+ 									typeof b[J]
+ 							}));
+ 						v.Jd = l
+ 					},
+ 					xe: function() {
+ 						var l = H.Kb(b);
+ 						Object.assign(v, l);
+ 						if(!v.fa && !v.ha) return !1;
+ 						H.ye();
+ 						H.ze();
+ 						return !0
+ 					},
+ 					Bf: function(l, J, w, L, N) {
+ 						b.readPixels(l, J, w, L, b.RGBA, b.UNSIGNED_BYTE, N);
+ 						return Promise.resolve(N, !1)
+ 					},
+ 					xb: function(l, J, w, L, N, x, f) {
+ 						if(!H.oe()) return H.Bf(l, J, w, L, N);
+ 						k.La = f || k.ue;
+ 						e(N);
+ 						b.readPixels(l, J, w, L, b.RGBA, b.UNSIGNED_BYTE, 0);
+ 						k.xa[k.ea] = b.fenceSync(b.SYNC_GPU_COMMANDS_COMPLETE, 0);
+ 						H.flush();
+ 						var z = !1;
+ 						return new Promise(function(I, h) {
+ 							function C() {
+ 								if(!k.za) return d(), g(), t(), h(), !1;
+ 								var K =
+ 									(k.ea + 1) % k.La;
+ 								switch (b.clientWaitSync(k.xa[K], 0, 0)) {
+ 									case b.TIMEOUT_EXPIRED:
+ 									case b.WAIT_FAILED:
+ 										return !1;
+ 									default:
+ 										return d(), b.deleteSync(k.xa[K]), k.xa[K] = null, b.bindBuffer(k.V, k.oa[K]), b.getBufferSubData(k.V, 0, N), g(), t(), I(N, z), !0
+ 								}
+ 							}
+ 							d();
+ 							k.jc + 1 < k.La ? (g(), t(), I(N, !1)) : (k.za = !0, C() || (x && !z && (z = !0, x()), k.Cb = setInterval(C, 0)))
+ 						})
+ 					},
+ 					Ud: function() {
+ 						b.viewport(0, 0, H.F(), H.U())
+ 					},
+ 					flush: function() {
+ 						b.flush()
+ 					},
+ 					m: function() {
+ 						d();
+ 						m();
+ 						Aa.m();
+ 						la.m();
+ 						ma.m();
+ 						k.oa.forEach(function(l) {
+ 							b.deleteBuffer(l)
+ 						});
+ 						k.oa.splice(0);
+ 						xa.reset();
+ 						q = !1
+ 					}
+ 				};
+ 			return H
+ 		}(),
+ 		T = ma,
+ 		va = la,
+ 		X = Aa,
+ 		Ba = function() {
+ 			function a(w, L, N, x) {
+ 				k.texParameteri(k.TEXTURE_2D, k.TEXTURE_MIN_FILTER, x ? k.NEAREST_MIPMAP_NEAREST : k.LINEAR);
+ 				var f = null;
+ 				if(null !== N) try {
+ 					f = k.getError();
+ 					if("FUCKING_BIG_ERROR" === f) return !1;
+ 					k.texImage2D(k.TEXTURE_2D, 0, w, 4, 4, 0, k.RGBA, L, N);
+ 					f = k.getError();
+ 					if(f !== k.NO_ERROR) return !1
+ 				} catch (z) {
+ 					return !1
+ 				}
+ 				x && k.generateMipmap(k.TEXTURE_2D);
+ 				k.clear(k.COLOR_BUFFER_BIT);
+ 				T.bb(k);
+ 				f = k.getError();
+ 				if("FUCKING_BIG_ERROR" === f) return !1;
+ 				k.readPixels(0, 0, 2, 2, k.RGBA, k.UNSIGNED_BYTE,
+ 					r);
+ 				f = k.getError();
+ 				f === k.INVALID_OPERATION && "undefined" !== typeof k.PIXEL_PACK_BUFFER && (k.bindBuffer(k.PIXEL_PACK_BUFFER, null), k.readPixels(0, 0, 2, 2, k.RGBA, k.UNSIGNED_BYTE, r), f = k.getError());
+ 				if(f !== k.NO_ERROR) return !1;
+ 				N = !0;
+ 				for(x = 0; 16 > x; ++x) N = N && 4 > Math.abs(r[x] - 127);
+ 				N && (q.Gd = L, q.pd = w);
+ 				return N
+ 			}
+
+ 			function c(w, L) {
+ 				return M.fa && a(w, k.FLOAT, new Float32Array(A), L) ? (p = t.Hc, !0) : !1
+ 			}
+
+ 			function d(w, L, N) {
+ 				if(!M.ha) return !1;
+ 				var x = Aa.te(A),
+ 					f = aa.$a(k);
+ 				if(f && f.HALF_FLOAT_OES && a(w, f.HALF_FLOAT_OES, x, L) || k.HALF_FLOAT && a(w,
+ 					k.HALF_FLOAT, x, L)) return p = t.Ga, !0;
+ 				x = new Float32Array(A);
+ 				if(a(w, k.FLOAT, x, L)) return p = t.Ga, !0;
+ 				k.bindTexture(k.TEXTURE_2D, N);
+ 				k.texImage2D(k.TEXTURE_2D, 0, k.RGBA, 2, 2, 0, k.RGBA, k.UNSIGNED_BYTE, null);
+ 				k.bindFramebuffer(q.Ya, J);
+ 				Aa.ed(k, N, 2, 2, x, !1, !1);
+ 				k.bindFramebuffer(q.Ya, null);
+ 				k.bindTexture(k.TEXTURE_2D, N);
+ 				return a(w, null, null, L) ? (p = t.Ga, !0) : !1
+ 			}
+
+ 			function e(w, L, N) {
+ 				u = !0;
+ 				if(d(w, !0, N) || c(L, !0)) return !0;
+ 				u = !1;
+ 				return d(w, !1, N) || c(L, !1) ? !0 : !1
+ 			}
+
+ 			function g(w) {
+ 				if(p === t.P) {
+ 					k = w || b;
+ 					p = t.RGBA8;
+ 					u = !0;
+ 					aa.Xc(k);
+ 					M || (M = aa.Kb(k));
+ 					va.reset();
+ 					J = k.createFramebuffer();
+ 					q.Ya = k.DRAW_FRAMEBUFFER || k.FRAMEBUFFER;
+ 					k.bindFramebuffer(q.Ya, null);
+ 					k.clearColor(0, 0, 0, 0);
+ 					k.viewport(0, 0, 2, 2);
+ 					D.P();
+ 					H = D.Sa(k);
+ 					w = k.createTexture();
+ 					k.activeTexture(k.TEXTURE0);
+ 					k.bindTexture(k.TEXTURE_2D, w);
+ 					k.texParameteri(k.TEXTURE_2D, k.TEXTURE_WRAP_S, k.REPEAT);
+ 					k.texParameteri(k.TEXTURE_2D, k.TEXTURE_WRAP_T, k.REPEAT);
+ 					k.texParameteri(k.TEXTURE_2D, k.TEXTURE_MAG_FILTER, k.NEAREST);
+ 					l = w;
+ 					var L = w = k.RGBA,
+ 						N = k.RGBA16F,
+ 						x = k.RGBA32F;
+ 					x && (w = x);
+ 					N && (L = N);
+ 					if((N || x) && e(L, w, l)) return m(),
+ 						!0;
+ 					w = L = k.RGBA;
+ 					if(e(L, w, l)) return m(), !0;
+ 					p = t.RGBA8;
+ 					m();
+ 					return !1
+ 				}
+ 			}
+
+ 			function m() {
+ 				k.deleteProgram(H.ra);
+ 				k.deleteTexture(l);
+ 				l = H = null
+ 			}
+ 			for(var t = {
+ 				P: -1,
+ 				Hc: 3,
+ 				Ga: 2,
+ 				RGBA8: 0
+ 			}, p = t.P, q = {
+ 				Gd: null,
+ 				pd: null,
+ 				Ya: null
+ 			}, u = !0, r = new Uint8Array(16), A = Array(64), v = 0; 4 > v; ++v)
+ 				for(var n = 0; 4 > n; ++n) {
+ 					var y = 0 === (n + v) % 2 ? 1 : 0,
+ 						E = 4 * v + n;
+ 					A[4 * E] = y;
+ 					A[4 * E + 1] = y;
+ 					A[4 * E + 2] = y;
+ 					A[4 * E + 3] = y
+ 				}
+ 			var k = null,
+ 				M = null,
+ 				H = null,
+ 				l = null,
+ 				J = null;
+ 			return {
+ 				me: function(w) {
+ 					g(w);
+ 					return u
+ 				},
+ 				Nc: function(w, L) {
+ 					p === t.P && (typeof("undefined" !== L) && (M = L), g(w));
+ 					return p !== t.RGBA8
+ 				},
+ 				kh: function(w) {
+ 					g(w);
+ 					return p === t.Hc
+ 				},
+ 				hf: function(w) {
+ 					g(w);
+ 					return p === t.Ga
+ 				},
+ 				Sg: function(w) {
+ 					g(w);
+ 					return q.Gd
+ 				},
+ 				Pe: function(w) {
+ 					g(w);
+ 					return q.pd
+ 				},
+ 				m: function() {
+ 					k = null;
+ 					u = !0;
+ 					p = t.P;
+ 					M = null
+ 				}
+ 			}
+ 		}(),
+ 		Ub = function() {
+ 			return {
+ 				instance: function(a) {
+ 					var c = X.instance(a.alpha),
+ 						d = X.instance(a.beta);
+ 					return {
+ 						Be: function() {
+ 							c.g(1);
+ 							d.g(2)
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}(),
+ 		Gb = function() {
+ 			return {
+ 				instance: function(a) {
+ 					var c = null,
+ 						d = !1,
+ 						e = !1,
+ 						g = null,
+ 						m = !1,
+ 						t = !1,
+ 						p = null,
+ 						q = "undefined" === typeof a.preprocessing ? !1 : a.preprocessing,
+ 						u = "undefined" === typeof a.preprocessingSize ? a.size : a.preprocessingSize;
+ 					a.mask && (d = !0, ea && void 0 !== ea.he && (a.mask = ea.he + a.mask), c = X.instance({
+ 						isFloat: !1,
+ 						url: a.mask
+ 					}));
+ 					var r = !1;
+ 					a.customInputShader && (r = "s45", D.Jc({
+ 						name: "_",
+ 						id: r,
+ 						h: a.customInputShader,
+ 						Oh: ["uSource"],
+ 						precision: "lowp"
+ 					}), D.S(r, [{
+ 						type: "1i",
+ 						name: "_",
+ 						value: 0
+ 					}]));
+ 					switch (q) {
+ 						case "sobel":
+ 							p = "s32";
+ 							m = !0;
+ 							break;
+ 						case "meanNormalization":
+ 							p = "s33";
+ 							m = !0;
+ 							break;
+ 						case "grayScale":
+ 							p = "s29";
+ 							m = !1;
+ 							break;
+ 						case "grayScaleTilt":
+ 							p = "s30";
+ 							t = !0;
+ 							m = !1;
+ 							break;
+ 						case "rgbGrayTilt":
+ 							p = "s31";
+ 							t = !0;
+ 							m = !1;
+ 							break;
+ 						case "copy":
+ 							p = r ? r : "s0";
+ 							break;
+ 						case "inputLightRegulation":
+ 							p =
+ 								r ? r : "s29";
+ 							g = Vb.instance({
+ 								od: u,
+ 								Fd: a.size,
+ 								Cd: a.nBlurPass,
+ 								mb: !1
+ 							});
+ 							e = !0;
+ 							break;
+ 						case "inputMix0":
+ 							p = "none";
+ 							g = Wb.instance({
+ 								C: u,
+ 								be: a.varianceMin,
+ 								Mc: a.blurKernelSizePx,
+ 								mb: !1
+ 							});
+ 							e = !0;
+ 							break;
+ 						case "direct":
+ 						case "none":
+ 							p = "abort";
+ 							break;
+ 						default:
+ 							p = "s4"
+ 					}
+ 					t && D.S(p, [{
+ 						name: "u27",
+ 						type: "1f",
+ 						value: a.tilt
+ 					}]);
+ 					d && (p += "Mask");
+ 					var A = X.instance({
+ 							isFloat: !1,
+ 							isPot: !1,
+ 							width: a.size
+ 						}),
+ 						v = {
+ 							F: function() {
+ 								return u
+ 							},
+ 							Ub: function() {
+ 								return v.F()
+ 							},
+ 							Ue: function() {
+ 								return e ? g.Vb() : A
+ 							},
+ 							T: function(n) {
+ 								va.ca();
+ 								"abort" !== p && ("none" !== p && (D.set(p), m && D.G("u28",
+ 									1 / a.size), A.$(), d && c.g(1), T.l(!1, !1), A.g(0), n = A), e && g.process(n))
+ 							},
+ 							m: function() {
+ 								A.remove();
+ 								d && c.remove()
+ 							}
+ 						};
+ 					return v
+ 				}
+ 			}
+ 		}(),
+ 		Hb = function() {
+ 			return {
+ 				instance: function(a) {
+ 					function c(h) {
+ 						g.forEach(function(C, K) {
+ 							m[K][0] = h[0][C];
+ 							m[K][1] = h[1][C];
+ 							m[K][2] = h[2][C];
+ 							m[K][3] = h[3][C]
+ 						});
+ 						return m
+ 					}
+ 					a.normalize = a.normalize || !1;
+ 					var d = {
+ 							input: null,
+ 							bias: null,
+ 							Zb: null,
+ 							Z: null,
+ 							tb: null,
+ 							nc: null,
+ 							oc: null
+ 						},
+ 						e = null,
+ 						g = [],
+ 						m = [],
+ 						t = !1,
+ 						p = null,
+ 						q = !0,
+ 						u = -1,
+ 						r = a.isReorganize ? a.isReorganize : !1,
+ 						A = a.kernelsCount ? !0 : !1,
+ 						v = a.dynPelu ? Ub.instance(a.dynPelu) :
+ 						!1,
+ 						n = v ? !0 : !1,
+ 						y = {
+ 							isEnabled: !1
+ 						};
+ 					a.ef ? (a.sparsity = "undefined" !== typeof a.sparsity ? a.sparsity : a.vb.Ub(), q = !1) : "full" === a.connectivityUp && (a.sparsity = a.vb.Ub());
+ 					var E = {
+ 							elu: "s16",
+ 							elu01: "s17",
+ 							relu: "s15",
+ 							arctan: "s19",
+ 							sigmoid: "s14",
+ 							copy: "s0",
+ 							softplus: "s20",
+ 							dynPelu: "s18"
+ 						} [a.activation],
+ 						k = a.sparsity * a.sparsity,
+ 						M = !1,
+ 						H = a.size,
+ 						l = "";
+ 					if(a.maxPooling) {
+ 						switch (a.maxPooling.size) {
+ 							case 2:
+ 								l = "s34";
+ 								break;
+ 							case 4:
+ 								l = "s35"
+ 						}
+ 						M = !0;
+ 						H /= a.maxPooling.size;
+ 						d.nc = X.instance({
+ 							isFloat: !0,
+ 							isPot: !1,
+ 							width: H
+ 						})
+ 					}
+ 					var J = a.normalization ? !0 : !1,
+ 						w =
+ 						null,
+ 						L = null,
+ 						N = null;
+ 					if(J) {
+ 						w = "s46" + a.index.toString();
+ 						D.nd("s46", w, [((a.normalization.n - 1) / 2)
+ 							.toFixed(1)
+ 						]);
+ 						D.S(w, [{
+ 							type: "1i",
+ 							name: "u1",
+ 							value: 0
+ 						}, {
+ 							type: "2f",
+ 							name: "u8",
+ 							value: [1 / a.size, 1 / a.size]
+ 						}, {
+ 							type: "1f",
+ 							name: "u7",
+ 							value: a.normalization.alpha
+ 						}, {
+ 							type: "1f",
+ 							name: "u10",
+ 							value: a.normalization.beta
+ 						}, {
+ 							type: "1f",
+ 							name: "u31",
+ 							value: a.normalization.k
+ 						}]);
+ 						var x = {
+ 							isFloat: !0,
+ 							isPot: !0,
+ 							width: a.size
+ 						};
+ 						L = X.instance(x);
+ 						N = X.instance(x)
+ 					}
+ 					var f = -1,
+ 						z = null;
+ 					q && (d.Z = X.instance({
+ 						isFloat: !0,
+ 						isPot: !1,
+ 						width: a.size
+ 					}));
+ 					d.bias = X.instance(a.bias);
+ 					var I = {
+ 						F: function() {
+ 							return a.size
+ 						},
+ 						Ub: function() {
+ 							return H
+ 						},
+ 						gd: function() {
+ 							return a.classesCount
+ 						},
+ 						je: function(h) {
+ 							e.g(h)
+ 						},
+ 						vf: function() {
+ 							a.remap && a.remap.isEnabled && (y = {
+ 								isEnabled: !0,
+ 								lf: X.instance({
+ 									isFloat: !1,
+ 									isFlipY: !1,
+ 									array: new Uint8Array(a.remap.maskTexture.data),
+ 									width: a.remap.maskTexture.width,
+ 									isPot: !1
+ 								}),
+ 								pb: a.remap.layers.map(function(h) {
+ 									return a.parent.Se(h)
+ 								}),
+ 								depth: a.remap.depth
+ 							})
+ 						},
+ 						Hf: function() {
+ 							switch (a.connectivityUp) {
+ 								case "direct":
+ 									z = Xb.instance(a.connectivity);
+ 									break;
+ 								case "square":
+ 									z = Yb.instance(a.connectivity);
+ 									break;
+ 								case "squareFast":
+ 									z = Zb.instance(a.connectivity, a.activation);
+ 									break;
+ 								case "full":
+ 									z = $b.instance(a.connectivity);
+ 									break;
+ 								case "conv":
+ 									u = a.kernelsCount, z = ac.instance(a.connectivity), r && (d.tb = X.instance({
+ 										width: H,
+ 										isFloat: !0,
+ 										isFlipY: !1,
+ 										isPot: !1
+ 									}))
+ 							}
+ 							if(z.Da) {
+ 								var h = a.size * a.sparsity;
+ 								f = Math.log(h / a.size) / Math.log(2);
+ 								d.input = X.instance({
+ 									isMipmap: !0,
+ 									isFloat: !0,
+ 									isPot: !0,
+ 									width: h,
+ 									ec: f
+ 								});
+ 								d.Zb = X.instance({
+ 									isFloat: !0,
+ 									isPot: !0,
+ 									width: a.size
+ 								})
+ 							}
+ 						},
+ 						T: function(h, C) {
+ 							e = h;
+ 							z.Da ? (d.input.$(), A && d.bias.g(2), z.T(y), d.input.g(0),
+ 								d.input.He(f), d.Zb.$(), A ? D.set("s0") : (D.set("s28"), D.G("u26", k), d.bias.g(1)), d.input.ke(f, 0), T.l(!1, !1), D.set(E), J ? L.u() : d.Z.u(), d.Zb.g(0), n && v.Be(), T.l(!1, !1)) : (d.Z.$(), d.bias.g(1), z.T());
+ 							J && (D.set(w), N.u(), L.g(0), T.l(!1, !1), D.set("s47"), D.G("u7", 1), d.Z.u(), N.g(1), T.l(!1, !1));
+ 							if(q) return M ? (d.nc.$(), d.Z.g(0), D.set(l), D.sa("u8", 1 / a.size, 1 / a.size), T.l(!1, !1), C = d.nc) : C = d.Z, C.g(0), r && (d.tb.u(), D.set("s22"), D.sa("u13", u, H / u), T.l(!1, !1), C = d.tb, d.tb.g(0)), C;
+ 							var K = d.Z;
+ 							a.normalize && (D.set("gpuRawAvg" === t ?
+ 								"s9" : "s8"), D.G("u4", 1 / a.size), d.oc.$(), d.Z.g(0), T.l(!1, !1), K = d.oc);
+ 							h = null;
+ 							switch (t) {
+ 								case "cpuRGBA2Float":
+ 									K.Uc(!1);
+ 									C ? h = I.wf(K)
+ 										.then(p) : (K = I.xf(K), p(K));
+ 									break;
+ 								case "cpuMeanFloat":
+ 									K.Uc(!0);
+ 									if(C) h = K.zf()
+ 										.then(p);
+ 									else {
+ 										K = K.Af();
+ 										for(var O = 0; O < K.length; ++O);
+ 										p(K)
+ 									}
+ 									break;
+ 								case "gpuRawAvg":
+ 								case "gpuRaw":
+ 									K.g(0);
+ 								case "none":
+ 									null !== p && p(K)
+ 							}
+ 							C && null === h && (h = Promise.resolve());
+ 							return h
+ 						},
+ 						we: function(h) {
+ 							h && (t = h.pc || "none", p = h.mc || null);
+ 							d.Z = X.instance({
+ 								isFloat: !0,
+ 								isPot: !0,
+ 								isMipmap: !1,
+ 								width: a.size
+ 							});
+ 							h = "undefined" !== typeof a.classesCount &&
+ 								a.classesCount ? a.classesCount : a.size * a.size;
+ 							for(var C = 0, K = 0, O = 0; C < h; ++C) g.push(K + (a.size - 1 - O) * a.size), m.push([-1, -1, -1, -1]), ++K, K === a.size && (K = 0, ++O);
+ 							a.normalize && (d.oc = X.instance({
+ 								isFloat: !0,
+ 								isPot: !0,
+ 								width: a.size
+ 							}))
+ 						},
+ 						wf: function(h) {
+ 							return h.yf()
+ 								.then(c)
+ 						},
+ 						xf: function(h) {
+ 							h = h.Kd();
+ 							c(h);
+ 							return m
+ 						},
+ 						m: function() {
+ 							for(var h in d) {
+ 								var C = d[h];
+ 								C && C.remove()
+ 							}
+ 							z && (z.m(), z = null)
+ 						}
+ 					};
+ 					a.vb && I.Hf(a.vb);
+ 					return I
+ 				}
+ 			}
+ 		}(),
+ 		Xb = function() {
+ 			return {
+ 				instance: function(a) {
+ 					var c = X.instance(a.weights);
+ 					return {
+ 						Da: !0,
+ 						eb: function() {
+ 							return 1
+ 						},
+ 						m: function() {
+ 							c.remove()
+ 						},
+ 						Xe: function() {
+ 							return c
+ 						},
+ 						T: function() {
+ 							D.set("s27");
+ 							c.g(1);
+ 							T.l(!1, !1)
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}(),
+ 		$b = function() {
+ 			return {
+ 				instance: function(a) {
+ 					var c = a.fromLayerSize,
+ 						d = X.instance(a.weights);
+ 					return {
+ 						Da: !0,
+ 						eb: function() {
+ 							return c
+ 						},
+ 						m: function() {
+ 							d.remove()
+ 						},
+ 						T: function(e) {
+ 							if(e.isEnabled) {
+ 								D.set("s25");
+ 								e.lf.g(3);
+ 								var g, m = Math.min(e.pb.length, e.depth);
+ 								for(g = 0; g < m; ++g) e.pb[g].je(4 + g)
+ 							} else D.set("s24");
+ 							D.G("u17", a.toLayerSize);
+ 							d.g(1);
+ 							T.l(!1, !1)
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}(),
+ 		Yb = function() {
+ 			return {
+ 				instance: function(a) {
+ 					for(var c = a.fromLayerSize,
+ 						d = a.toLayerSize, e = a.toSparsity, g = e * d, m = g / c, t = c / d, p = 0, q = 0, u = 0, r = Array(e * d * e * d * 4), A = Array(e * d * e * d * 4), v = Array(c * c), n = 0; n < v.length; ++n) v[n] = 0;
+ 					n = Math.floor(e / 2);
+ 					for(var y = .5 / d, E = .5 / c, k = .5 / g, M = 0; M < d; ++M)
+ 						for(var H = Math.round(M * t), l = 0; l < d; ++l) {
+ 							var J = Math.round(l * t),
+ 								w = M / d,
+ 								L = l / d;
+ 							w += y;
+ 							L += y;
+ 							for(var N = 0; N < e; ++N) {
+ 								var x = H + N - n;
+ 								0 > x && (x += c);
+ 								x >= c && (x -= c);
+ 								for(var f = 0; f < e; ++f) {
+ 									var z = p / g,
+ 										I = q / g,
+ 										h = J + f - n;
+ 									0 > h && (h += c);
+ 									h >= c && (h -= c);
+ 									var C = x / c,
+ 										K = h / c;
+ 									I = 1 - I - 1 / g;
+ 									C += E;
+ 									K += E;
+ 									z += k;
+ 									I += k;
+ 									var O = M * e + N,
+ 										Y = l * e + f;
+ 									Y = d * e - Y - 1;
+ 									O = Y * d * e + O;
+ 									r[4 * O] =
+ 										z;
+ 									r[4 * O + 1] = I;
+ 									r[4 * O + 2] = C;
+ 									r[4 * O + 3] = K;
+ 									K = v[h * c + x]++;
+ 									O = K % m;
+ 									C = x * m + O;
+ 									h = h * m + (K - O) / m;
+ 									h = c * m - 1 - h;
+ 									h = h * c * m + C;
+ 									A[4 * h] = z;
+ 									A[4 * h + 1] = I;
+ 									A[4 * h + 2] = w;
+ 									A[4 * h + 3] = L;
+ 									++p >= g && (p = 0, ++q);
+ 									++u
+ 								}
+ 							}
+ 						}
+ 					v = null;
+ 					var oa = X.instance(a.weights);
+ 					delete a.weights.data;
+ 					var sa = X.instance({
+ 						width: g,
+ 						isFloat: !0,
+ 						array: new Float32Array(A),
+ 						isPot: !0
+ 					});
+ 					A = null;
+ 					var Ca = X.instance({
+ 						width: g,
+ 						isFloat: !0,
+ 						array: new Float32Array(r),
+ 						isPot: !0
+ 					});
+ 					r = null;
+ 					return {
+ 						Da: !0,
+ 						eb: function() {
+ 							return m
+ 						},
+ 						m: function() {
+ 							sa.remove();
+ 							Ca.remove();
+ 							oa.remove()
+ 						},
+ 						T: function() {
+ 							D.set("s23");
+ 							oa.g(1);
+ 							Ca.g(2);
+ 							T.l(!1, !1)
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}(),
+ 		ac = function() {
+ 			return {
+ 				instance: function(a) {
+ 					var c = a.kernelsCount,
+ 						d = a.toSparsity,
+ 						e = d * a.toLayerSize / a.fromLayerSize,
+ 						g = X.instance(a.weights);
+ 					return {
+ 						Da: !0,
+ 						eb: function() {
+ 							return e
+ 						},
+ 						dh: function() {
+ 							return d
+ 						},
+ 						Xe: function() {
+ 							return g
+ 						},
+ 						m: function() {
+ 							g.remove()
+ 						},
+ 						T: function() {
+ 							D.set("s26");
+ 							D.G("u23", c);
+ 							D.G("u24", d);
+ 							D.G("u17", a.toLayerSize);
+ 							D.G("u25", a.fromLayerSize);
+ 							g.g(1);
+ 							T.l(!1, !1)
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}(),
+ 		Zb = function() {
+ 			return {
+ 				instance: function(a, c) {
+ 					var d = a.fromLayerSize,
+ 						e = a.toLayerSize,
+ 						g = a.toSparsity,
+ 						m = a.stride ?
+ 						a.stride : 1,
+ 						t = g * e / d,
+ 						p = e < d,
+ 						q = d / e,
+ 						u = X.instance(a.weights),
+ 						r = "s48" + [d.toString(), e.toString(), g.toString(), m.toString(), c].join("_");
+ 					D.Fe(r) || (a = Sb.Ie(c, "gl_FragColor", "gl_FragColor"), e = [{
+ 						type: "1f",
+ 						name: "u17",
+ 						value: e
+ 					}, {
+ 						type: "1f",
+ 						name: "u30",
+ 						value: m
+ 					}], p && e.push({
+ 						type: "1f",
+ 						name: "u25",
+ 						value: d
+ 					}), d = [(p ? t : g)
+ 						.toFixed(1), a
+ 					], p && d.push(q.toFixed(1)), D.nd(p ? "s40" : "s39", r, d), D.S(r, e.concat([{
+ 						type: "1i",
+ 						name: "u15",
+ 						value: 0
+ 					}, {
+ 						type: "1i",
+ 						name: "u22",
+ 						value: 1
+ 					}, {
+ 						type: "1i",
+ 						name: "u14",
+ 						value: 3
+ 					}])));
+ 					return {
+ 						Da: !1,
+ 						eb: function() {
+ 							return t
+ 						},
+ 						m: function() {
+ 							u.remove()
+ 						},
+ 						T: function() {
+ 							D.set(r);
+ 							u.g(3);
+ 							T.l(!1, !1)
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}(),
+ 		Vb = function() {
+ 			return {
+ 				instance: function(a) {
+ 					var c = a.Cd ? a.Cd : 3,
+ 						d = a.od ? a.od : 64,
+ 						e = a.Fd ? a.Fd : 64,
+ 						g = a.mb ? !0 : !1;
+ 					a = {
+ 						isFloat: !1,
+ 						width: d,
+ 						isPot: !1,
+ 						isFlipY: !1
+ 					};
+ 					var m = X.instance(a),
+ 						t = X.instance(a),
+ 						p = X.instance(a),
+ 						q = X.instance(a),
+ 						u = X.instance({
+ 							isFloat: !0,
+ 							width: e,
+ 							isPot: !1,
+ 							isFlipY: !1
+ 						}),
+ 						r = 1 / d;
+ 					return {
+ 						process: function(A) {
+ 							D.set("s36");
+ 							q.u();
+ 							T.l(g, !1);
+ 							D.set("s37");
+ 							for(var v = 0; v < c; ++v) m.u(), D.sa("u8", r, 0), T.l(g, !1), p.u(), q.g(0), T.l(g, !1), t.u(), m.g(0),
+ 								D.sa("u8", 0, r), T.l(g, !1), q.u(), p.g(0), T.l(g, !1), v !== c - 1 && t.g(0);
+ 							D.set("s38");
+ 							u.u();
+ 							A.g(0);
+ 							t.g(1);
+ 							q.g(2);
+ 							T.l(g, !1);
+ 							u.g(0)
+ 						},
+ 						Vb: function() {
+ 							return u
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}(),
+ 		Wb = function() {
+ 			return {
+ 				instance: function(a) {
+ 					function c(u) {
+ 						return X.instance({
+ 							isFloat: u,
+ 							width: d.C,
+ 							isPot: !1,
+ 							isFlipY: !1
+ 						})
+ 					}
+ 					var d = Object.assign({
+ 							be: .1,
+ 							Mc: 9,
+ 							C: 128,
+ 							mb: !1
+ 						}, a),
+ 						e = c(!1),
+ 						g = [c(!1), c(!1), c(!1)],
+ 						m = [c(!1), c(!1), c(!1)],
+ 						t = c(!0),
+ 						p = [e, m[0], m[1]];
+ 					a = "uniform sampler2D u1;const float e=1.1111,g=2.2222;uniform vec2 u32;varying vec2 vv0;void main(){float b=0.,c=0.;for(float a=-e;a<=e;a+=1.){vec2 i=u32*a,j=vv0+i*g;float d=1.2*a/e,f=exp(-d*d);b+=f*texture2D(u1,j).r,c+=f;}b/=c,gl_FragColor=vec4(b,0.,0.,1.);}".replace("1.1111",
+ 							Math.round((d.Mc - 1) / 2)
+ 							.toFixed(2))
+ 						.replace("2.2222", (1 / d.C)
+ 							.toFixed(6));
+ 					var q = {
+ 						u1: 0
+ 					};
+ 					D.Kc([{
+ 						id: "s50",
+ 						name: "_",
+ 						h: "uniform sampler2D u1;varying vec2 vv0;const vec3 f=vec3(.2126,.7152,.0722),g=vec3(1.,1.,1.);void main(){vec3 b=texture2D(u1,vv0).rgb;float a=dot(b,f);gl_FragColor=vec4(a,a,a,a);}",
+ 						j: q,
+ 						i: ["u1"],
+ 						precision: "lowp"
+ 					}, {
+ 						id: "s51",
+ 						name: "_",
+ 						h: a,
+ 						j: q,
+ 						i: ["u1", "u32"],
+ 						precision: "lowp"
+ 					}, {
+ 						id: "s52",
+ 						name: "_",
+ 						h: "uniform sampler2D u33,u34,u35,u36;const float f=1.1111;const vec3 g=vec3(1.,1.,1.);varying vec2 vv0;void main(){vec3 a=texture2D(u33,vv0).rgb;float c=texture2D(u34,vv0).r,d=texture2D(u35,vv0).r,h=texture2D(u36,vv0).r,i=a.r*a.r;vec3 b=vec3(c,d,h),j=max(g*f,abs(i-b*b)),k=sqrt(j);gl_FragColor=vec4(a.r,(a-b)/k);}".replace("1.1111",
+ 							d.be.toFixed(4)),
+ 						j: {
+ 							u33: 0,
+ 							u34: 1,
+ 							u35: 2,
+ 							u36: 3
+ 						},
+ 						i: ["u33", "u34", "u35", "u36"],
+ 						precision: "highp"
+ 					}]);
+ 					return {
+ 						process: function() {
+ 							D.set("s50");
+ 							e.$();
+ 							T.l(d.mb, !1);
+ 							D.set("s51");
+ 							for(var u = 0; 3 > u; ++u) D.sa("u32", 1, 0), g[u].u(), p[u].g(0), T.l(!1, !1), D.sa("u32", 0, 1), m[u].u(), g[u].g(0), T.l(!1, !1);
+ 							D.set("s52");
+ 							t.u();
+ 							e.g(0);
+ 							m[0].g(1);
+ 							m[1].g(2);
+ 							m[2].g(3);
+ 							T.l(!1, !1);
+ 							t.g(0)
+ 						},
+ 						Vb: function() {
+ 							return t
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}(),
+ 		V = {
+ 			ld: function() {
+ 				return V.Sc() ? document.createElement("video") : !1
+ 			},
+ 			Ma: function(a, c) {
+ 				a[c] = !0;
+ 				a.setAttribute(c, "true")
+ 			},
+ 			re: function() {
+ 				var a = !1,
+ 					c = navigator.userAgent || navigator.vendor || window.opera;
+ 				if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(c) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(c.substr(0,
+ 					4))) a = !0;
+ 				return a
+ 			},
+ 			Pc: function() {
+ 				return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream
+ 			},
+ 			Je: function() {
+ 				var a = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
+ 				return a && a.length && 2 < a.length ? [parseInt(a[1], 10), parseInt(a[2], 10), parseInt(a[3] || 0, 10)] : [0, 0, 0]
+ 			},
+ 			zd: function() {
+ 				try {
+ 					return window.matchMedia("(orientation: portrait)")
+ 						.matches ? !0 : !1
+ 				} catch (a) {
+ 					return window.innerHeight > window.innerWidth
+ 				}
+ 			},
+ 			qe: function() {
+ 				return V.Qc() || V.Pc()
+ 			},
+ 			Qc: function() {
+ 				var a = navigator.userAgent.toLowerCase();
+ 				return -1 !== a.indexOf("safari") && -1 === a.indexOf("chrome") ? !0 : !1
+ 			},
+ 			Gg: function() {
+ 				return V.re() ? V.zd() ? window.innerHeight / window.innerWidth * 45 : 45 : 45
+ 			},
+ 			Sc: function() {
+ 				return navigator.mediaDevices && navigator.mediaDevices.getUserMedia ? !0 : !1
+ 			},
+ 			pause: function(a) {
+ 				a.pause()
+ 			},
+ 			Bh: function(a) {
+ 				a.play()
+ 			},
+ 			release: function(a) {
+ 				a.pause();
+ 				a.videoStream && a.videoStream.stop();
+ 				a.videoStream = null
+ 			},
+ 			Rc: function(a) {
+ 				if(!a) return a;
+ 				var c = null;
+ 				if(a.video) {
+ 					var d = function(e) {
+ 						return e && "object" === typeof e ? Object.assign({}, e) : e
+ 					};
+ 					c = {};
+ 					"undefined" !== typeof a.video.width && (c.width = d(a.video.width));
+ 					"undefined" !== typeof a.video.height && (c.height = d(a.video.height));
+ 					"undefined" !== typeof a.video.facingMode && (c.facingMode = d(a.video.facingMode))
+ 				}
+ 				c = {
+ 					audio: a.audio,
+ 					video: c
+ 				};
+ 				"undefined" !== typeof a.deviceId && V.Ic(c, a.deviceId);
+ 				return c
+ 			},
+ 			Ic: function(a, c) {
+ 				c && (a.video = a.video || {}, a.video.deviceId = {
+ 					exact: c
+ 				}, a.video.facingMode && delete a.video.facingMode)
+ 			},
+ 			Xd: function(a) {
+ 				var c = a.video.width;
+ 				a.video.width = a.video.height;
+ 				a.video.height = c;
+ 				return a
+ 			},
+ 			ve: function(a) {
+ 				function c(v) {
+ 					return [480, 576, 640, 648, 720, 768, 800, 960, 1080, 1152, 1280, 1366, 1920].sort(function(n, y) {
+ 						return Math.abs(n - v) - Math.abs(y - v)
+ 					})
+ 				}
+
+ 				function d(v) {
+ 					var n = V.Rc(a);
+ 					v = v(n);
+ 					g.push(v);
+ 					e(v)
+ 				}
+
+ 				function e(v) {
+ 					if(v.video && v.video.facingMode && v.video.facingMode.exact) {
+ 						var n = v.video.facingMode.exact;
+ 						v = V.Rc(v);
+ 						delete v.video.facingMode.exact;
+ 						v.video.facingMode.ideal = n;
+ 						g.push(v)
+ 					}
+ 				}
+ 				var g = [];
+ 				if(!a || !a.video) return g;
+ 				e(a);
+ 				if(a.video.width && a.video.height) {
+ 					if(a.video.width.ideal && a.video.height.ideal) {
+ 						var m =
+ 							c(a.video.width.ideal)
+ 							.slice(0, 3),
+ 							t = c(a.video.height.ideal)
+ 							.slice(0, 3),
+ 							p = {},
+ 							q = 0;
+ 						for(p.la = void 0; q < m.length; p = {
+ 							la: p.la
+ 						}, ++q) {
+ 							p.la = m[q];
+ 							var u = {},
+ 								r = 0;
+ 							for(u.ka = void 0; r < t.length; u = {
+ 								ka: u.ka
+ 							}, ++r)
+ 								if(u.ka = t[r], p.la !== a.video.width.ideal || u.ka !== a.video.height.ideal) {
+ 									var A = Math.max(p.la, u.ka) / Math.min(p.la, u.ka);
+ 									A < 4 / 3 - .1 || A > 16 / 9 + .1 || d(function(v, n) {
+ 										return function(y) {
+ 											y.video.width.ideal = v.la;
+ 											y.video.height.ideal = n.ka;
+ 											return y
+ 										}
+ 									}(p, u))
+ 								}
+ 						}
+ 					}
+ 					d(function(v) {
+ 						return V.Xd(v)
+ 					})
+ 				}
+ 				a.video.width && a.video.height && (a.video.width.ideal &&
+ 					a.video.height.ideal && d(function(v) {
+ 						delete v.video.width.ideal;
+ 						delete v.video.height.ideal;
+ 						return v
+ 					}), d(function(v) {
+ 						delete v.video.width;
+ 						delete v.video.height;
+ 						return v
+ 					}));
+ 				a.video.facingMode && (d(function(v) {
+ 					delete v.video.facingMode;
+ 					return v
+ 				}), a.video.width && a.video.height && d(function(v) {
+ 					V.Xd(v);
+ 					delete v.video.facingMode;
+ 					return v
+ 				}));
+ 				g.push({
+ 					audio: a.audio,
+ 					video: !0
+ 				});
+ 				return g
+ 			},
+ 			Qf: function(a) {
+ 				if(V.zd()) {
+ 					if(!a || !a.video) return !1;
+ 					var c = a.video.width,
+ 						d = a.video.height;
+ 					if(!c || !d) return !1;
+ 					if(c.ideal && d.ideal &&
+ 						c.ideal > d.ideal) return a.video.height = c, a.video.width = d, !0
+ 				}
+ 				return !1
+ 			},
+ 			rb: function(a) {
+ 				a.volume = 0;
+ 				V.Ma(a, "muted");
+ 				if(V.Qc()) {
+ 					if(1 === a.volume) {
+ 						var c = function() {
+ 							a.volume = 0;
+ 							window.removeEventListener("mousemove", c, !1);
+ 							window.removeEventListener("touchstart", c, !1)
+ 						};
+ 						window.addEventListener("mousemove", c, !1);
+ 						window.addEventListener("touchstart", c, !1)
+ 					}
+ 					setTimeout(function() {
+ 						a.volume = 0;
+ 						V.Ma(a, "muted")
+ 					}, 5)
+ 				}
+ 			},
+ 			$d: function(a, c, d) {
+ 				return null === a ? Promise.resolve() : new Promise(function(e, g) {
+ 					if(a.srcObject && a.srcObject.getVideoTracks) {
+ 						var m =
+ 							a.srcObject.getVideoTracks();
+ 						1 !== m.length ? g("INVALID_TRACKNUMBER") : (m = m[0], c ? V.get(a, e, g, d) : (m.stop(), e()))
+ 					} else g("BAD_IMPLEMENTATION")
+ 				})
+ 			},
+ 			kd: function(a, c, d, e) {
+ 				function g(t) {
+ 					m || (m = !0, d(t))
+ 				}
+ 				var m = !1;
+ 				return navigator.mediaDevices.getUserMedia(e)
+ 					.then(function(t) {
+ 						function p() {
+ 							setTimeout(function() {
+ 								if(a.currentTime) {
+ 									var u = a.videoWidth,
+ 										r = a.videoHeight;
+ 									if(0 === u || 0 === r) g("VIDEO_NULLSIZE");
+ 									else {
+ 										u && (a.style.width = u.toString() + "px");
+ 										r && (a.style.height = r.toString() + "px");
+ 										var A = {
+ 											pe: null,
+ 											Mf: null,
+ 											mf: null
+ 										};
+ 										try {
+ 											var v =
+ 												t.getVideoTracks()[0];
+ 											v && (A.mf = v, A.pe = v.getCapabilities(), A.Mf = v.getSettings())
+ 										} catch (n) {}
+ 										V.qe() ? a.parentNode && null !== a.parentNode ? (m || c(a, t, A), setTimeout(function() {
+ 											a.play()
+ 										}, 100)) : (document.body.appendChild(a), V.rb(a), setTimeout(function() {
+ 											a.style.transform = "scale(0.0001,0.0001)";
+ 											a.style.position = "fixed";
+ 											a.style.bottom = "0px";
+ 											a.style.right = "0px";
+ 											V.rb(a);
+ 											setTimeout(function() {
+ 												a.play();
+ 												m || c(a, t, A)
+ 											}, 100)
+ 										}, 80)) : m || c(a, t, A)
+ 									}
+ 								} else g("VIDEO_NOTSTARTED")
+ 							}, 700)
+ 						}
+
+ 						function q() {
+ 							a.removeEventListener("loadeddata",
+ 								q, !1);
+ 							var u = a.play();
+ 							V.rb(a);
+ 							"undefined" === typeof u ? p() : u.then(function() {
+ 									p()
+ 								})
+ 								.catch(function() {
+ 									g("VIDEO_PLAYPROMISEREJECTED")
+ 								})
+ 						}
+ 						"undefined" !== typeof a.srcObject ? a.srcObject = t : (a.src = window.URL.createObjectURL(t), a.videoStream = t);
+ 						V.rb(a);
+ 						a.addEventListener("loadeddata", q, !1)
+ 					})
+ 					.catch(function(t) {
+ 						g(t)
+ 					})
+ 			},
+ 			Ve: function(a, c) {
+ 				var d = c || V.ld();
+ 				return new Promise(function(e, g) {
+ 					V.get(d, e, g, a)
+ 				})
+ 			},
+ 			get: function(a, c, d, e) {
+ 				if(!a) return d && d("VIDEO_NOTPROVIDED"), !1;
+ 				if(!V.Sc()) return d && d("MEDIASTREAMAPI_NOTFOUND"),
+ 					!1;
+ 				if(e && e.video) {
+ 					if(V.Pc()) {
+ 						var g = V.Je();
+ 						0 !== g[0] && (12 > g[0] || 12 === g[0] && 2 > g[1]) && V.Qf(e)
+ 					}
+ 					e.video.width && e.video.width.ideal && (a.style.width = e.video.width.ideal + "px");
+ 					e.video.height && e.video.height.ideal && (a.style.height = e.video.height.ideal + "px")
+ 				}
+ 				V.Ma(a, "autoplay");
+ 				V.Ma(a, "playsinline");
+ 				e && e.audio ? a.volume = 0 : V.Ma(a, "muted");
+ 				V.kd(a, c, function() {
+ 					function m(p) {
+ 						if(0 === p.length) d("INVALID_FALLBACKCONSTRAINTS");
+ 						else {
+ 							var q = p.shift();
+ 							V.kd(a, c, function() {
+ 								m(p)
+ 							}, q)
+ 						}
+ 					}
+ 					var t = V.ve(e);
+ 					m(t)
+ 				}, e)
+ 			},
+ 			We: function(a) {
+ 				if(!navigator.mediaDevices ||
+ 					!navigator.mediaDevices.enumerateDevices) return a(!1, "NOTSUPPORTED"), !1;
+ 				navigator.mediaDevices.enumerateDevices()
+ 					.then(function(c) {
+ 						(c = c.filter(function(d) {
+ 							return d.kind && -1 !== d.kind.toLowerCase()
+ 								.indexOf("video") && d.label && d.deviceId
+ 						})) && c.length && 0 < c.length ? a(c, !1) : a(!1, "NODEVICESFOUND")
+ 					})
+ 					.catch(function() {
+ 						a(!1, "PROMISEREJECTED")
+ 					})
+ 			},
+ 			gg: function(a, c, d) {
+ 				var e = {};
+ 				e[c] = d;
+ 				c = [];
+ 				c.push(e);
+ 				a.applyConstraints({
+ 						advanced: c
+ 					})
+ 					.catch(function() {})
+ 			}
+ 		},
+ 		qa = function() {
+ 			function a(y, E, k, M, H, l, J) {
+ 				if(!v)
+ 					if(J === l.length) H();
+ 					else {
+ 						switch (l[J]) {
+ 							case "A":
+ 								k();
+ 								break;
+ 							case "D":
+ 								y();
+ 								break;
+ 							case "S":
+ 								E()
+ 									.then(function(w, L) {
+ 										n.Bb();
+ 										a(y, E, k, L ? null : M, H, l, ++J)
+ 									})
+ 									.catch(function() {
+ 										H()
+ 									});
+ 								return;
+ 							case "R":
+ 								M && M()
+ 						}
+ 						a(y, E, k, M, H, l, ++J)
+ 					}
+ 			}
+ 			var c = {
+ 					n: 5,
+ 					ic: 1,
+ 					Bd: 0,
+ 					cb: [35, 49],
+ 					Za: [2, 200],
+ 					k: .7,
+ 					Vf: 200,
+ 					uf: .05
+ 				},
+ 				d = -1,
+ 				e = null,
+ 				g = -1,
+ 				m = -1,
+ 				t = 0,
+ 				p = -1,
+ 				q = -1,
+ 				u = 0,
+ 				r = 0,
+ 				A = c.Za[1],
+ 				v = !0,
+ 				n = {
+ 					Te: function() {
+ 						switch (d) {
+ 							case -1:
+ 								return -1;
+ 							case 0:
+ 								return q + e.Bd;
+ 							case 1:
+ 								return u
+ 						}
+ 					},
+ 					Lg: function(y) {
+ 						return Math.pow(Math.min(Math.max(p, 0), e.n - 1) / (e.n - 1), y || 1)
+ 					},
+ 					o: function(y) {
+ 						e = Object.assign({},
+ 							c, y);
+ 						p = q = e.ic;
+ 						d = 0;
+ 						n.reset()
+ 					},
+ 					Bb: function(y) {
+ 						y = ("undefined" === typeof y ? Date.now() : y) || 0;
+ 						var E = Math.min(Math.max(y - r, e.Za[0]), e.Za[1]);
+ 						A = E;
+ 						r = y;
+ 						var k = -1 === g ? 0 : e.k;
+ 						g = Math.min(Math.max(1E3 / E, 5), 120) * (1 - k) + g * k;
+ 						y - m > e.Vf && 5 < ++t && (E = e.k, p = p * (1 - E) + (g < e.cb[0] ? q - 1 : g > e.cb[1] ? q + 1 : q) * E, Math.abs(p - q) > 1 - e.uf && (E = Math.min(Math.max(Math.round(p), 0), e.n - 1), E !== q && (p = q = E, g = (e.cb[1] - e.cb[0]) / 2)), m = y)
+ 					},
+ 					qc: function(y, E, k, M, H, l) {
+ 						v = !1;
+ 						a(y, E, k, M, H, l, 0)
+ 					},
+ 					stop: function() {
+ 						v = !0
+ 					},
+ 					sc: function(y) {
+ 						u = y;
+ 						d = 1
+ 					},
+ 					Bc: function() {
+ 						d = 0;
+ 						n.reset()
+ 					},
+ 					reset: function() {
+ 						A = c.Za[1];
+ 						m = g = -1;
+ 						t = 0
+ 					},
+ 					Me: function() {
+ 						return A
+ 					}
+ 				};
+ 			return n
+ 		}(),
+ 		Na = function() {
+ 			function a() {
+ 				d(E + n.hc);
+ 				k.port.postMessage("DONE")
+ 			}
+
+ 			function c() {
+ 				J.Ua = 0 === n.Ta ? H(d) : H(e)
+ 			}
+
+ 			function d(f) {
+ 				l.Aa && null !== y && (f -= E, f = Math.min(Math.max(f, n.Vc[0]), n.Vc[1]), E += f, m(), w.isEnabled && w.Pa && l.W && E - w.cc > n.Fc && (u(), w.cc = E), y(E))
+ 			}
+
+ 			function e(f) {
+ 				l.Aa && (J.timeout = setTimeout(d.bind(null, f), n.Ta))
+ 			}
+
+ 			function g() {
+ 				y = null;
+ 				l.Aa = !1;
+ 				m()
+ 			}
+
+ 			function m() {
+ 				J.Ua && (window.cancelAnimationFrame(J.Ua), J.Ua = null);
+ 				J.timeout && (window.clearTimeout(J.timeout),
+ 					J.timeout = null)
+ 			}
+
+ 			function t(f) {
+ 				f && !l.W ? (l.W = !0, M && qa.Bc(), k.port.postMessage("STOP"), aa.Zd(!0), c()) : !f && l.W && (l.W = !1, M && qa.sc(1), aa.Zd(!1), k.port.postMessage("START"))
+ 			}
+
+ 			function p(f) {
+ 				f.target.hidden ? N() : L()
+ 			}
+
+ 			function q(f, z, I) {
+ 				z = f.createShader(z);
+ 				f.shaderSource(z, I);
+ 				f.compileShader(z);
+ 				return z
+ 			}
+
+ 			function u() {
+ 				w.Pa = !1;
+ 				var f = w.ga,
+ 					z = w.hb,
+ 					I = w.ib,
+ 					h = w.V;
+ 				f.uniform1f(w.md, Math.random());
+ 				w.Ba ? z.beginQueryEXT(h, I) : f.beginQuery(h, I);
+ 				f.drawElements(f.POINTS, 1, f.UNSIGNED_SHORT, 0);
+ 				w.Ba ? z.endQueryEXT(h) : f.endQuery(h);
+ 				aa.flush();
+ 				A()
+ 					.then(function(C) {
+ 						C = n.ce * n.Ec * 1E3 / C;
+ 						w.Eb = (w.Eb + 1) % n.Ea;
+ 						w.dc[w.Eb] = C;
+ 						++w.Ad > n.Ea && (w.ob.set(w.dc), w.ob.sort(function(K, O) {
+ 							return K - O
+ 						}), C = w.ob[Math.floor(n.Ea / 2)], w.ab = Math.max(w.ab, C), n.Dc(C / w.ab));
+ 						w.Pa = !0
+ 					})
+ 					.catch(function() {
+ 						w.Pa = !0
+ 					})
+ 			}
+
+ 			function r(f) {
+ 				var z = w.ga,
+ 					I = w.hb,
+ 					h = w.ib;
+ 				h = w.Ba ? I.Ig(h, I.QUERY_RESULT_AVAILABLE_EXT) : z.getQueryParameter(h, z.QUERY_RESULT_AVAILABLE);
+ 				z = z.getParameter(I.GPU_DISJOINT_EXT);
+ 				h ? f(!z) : setTimeout(r.bind(null, f), .1)
+ 			}
+
+ 			function A() {
+ 				return new Promise(function(f, z) {
+ 					r(function(I) {
+ 						if(I) {
+ 							I =
+ 								w.ga;
+ 							var h = w.hb,
+ 								C = w.ib;
+ 							I = w.Ba ? h.getQueryObjectEXT(C, h.QUERY_RESULT_EXT) : I.getQueryParameter(C, I.QUERY_RESULT);
+ 							f(I)
+ 						} else z()
+ 					})
+ 				})
+ 			}
+ 			var v = {
+ 					ud: !0,
+ 					Vc: [1, 200],
+ 					hc: 20,
+ 					Ta: 0,
+ 					Ec: 50,
+ 					ce: 240,
+ 					Fc: 3E3,
+ 					Ea: 3,
+ 					Dc: null
+ 				},
+ 				n = null,
+ 				y = null,
+ 				E = 0,
+ 				k = null,
+ 				M = !1,
+ 				H = null,
+ 				l = {
+ 					pa: !1,
+ 					W: !0,
+ 					bc: !1,
+ 					ac: !1,
+ 					$b: !1,
+ 					Aa: !1
+ 				},
+ 				J = {
+ 					Ua: null,
+ 					timeout: null
+ 				},
+ 				w = {
+ 					isEnabled: !1,
+ 					Pa: !1,
+ 					ga: null,
+ 					hb: null,
+ 					ib: null,
+ 					V: null,
+ 					md: null,
+ 					Ba: !0,
+ 					cc: 0,
+ 					Ad: 0,
+ 					dc: null,
+ 					ob: null,
+ 					Eb: 0,
+ 					ab: 0
+ 				},
+ 				L = t.bind(null, !0),
+ 				N = t.bind(null, !1),
+ 				x = {
+ 					o: function(f) {
+ 						n = Object.assign(v, f);
+ 						Object.assign(l, {
+ 							W: !0,
+ 							pa: !0,
+ 							Aa: !1
+ 						});
+ 						H = window.requestPostAnimationFrame || window.requestAnimationFrame;
+ 						if(null !== n.Dc) {
+ 							f = document.createElement("canvas");
+ 							f.setAttribute("width", "1");
+ 							f.setAttribute("height", "1");
+ 							var z = {
+ 								antialias: !1
+ 							};
+ 							f = f.getContext("webgl2", z) || f.getContext("webgl", z);
+ 							if(z = f.getExtension("EXT_disjoint_timer_query") || f.getExtension("EXT_disjoint_timer_query_webgl2")) {
+ 								w.ga = f;
+ 								w.hb = z;
+ 								w.isEnabled = !0;
+ 								w.Ba = z.beginQueryEXT ? !0 : !1;
+ 								var I = q(f, f.VERTEX_SHADER, "attribute vec4 a0;void main(){gl_Position=a0;}"),
+ 									h = q(f, f.FRAGMENT_SHADER,
+ 										"precision lowp float;uniform float u37;void main(){vec4 a=u37*vec4(1.,2.,3.,4.);for(int b=0;b<666;b+=1)a=cos(a);gl_FragColor=a;}".replace("666", n.Ec.toString())),
+ 									C = f.createProgram();
+ 								f.attachShader(C, I);
+ 								f.attachShader(C, h);
+ 								f.linkProgram(C);
+ 								I = f.getAttribLocation(C, "a0");
+ 								w.md = f.getUniformLocation(C, "u37");
+ 								f.useProgram(C);
+ 								f.enableVertexAttribArray(I);
+ 								C = f.createBuffer();
+ 								f.bindBuffer(f.ARRAY_BUFFER, C);
+ 								f.bufferData(f.ARRAY_BUFFER, new Float32Array([.5, .5, 0, 1]), f.STATIC_DRAW);
+ 								f.vertexAttribPointer(I, 4, f.FLOAT,
+ 									!1, 16, 0);
+ 								C = f.createBuffer();
+ 								f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, C);
+ 								f.bufferData(f.ELEMENT_ARRAY_BUFFER, new Uint16Array([0]), f.STATIC_DRAW);
+ 								f.disable(f.DEPTH_TEST);
+ 								f.disable(f.DITHER);
+ 								f.disable(f.STENCIL_TEST);
+ 								f.viewport(0, 0, 1, 1);
+ 								C = w.Ba ? z.createQueryEXT() : f.createQuery();
+ 								w.ib = C;
+ 								w.V = z.TIME_ELAPSED_EXT || f.TIME_ELAPSED;
+ 								w.cc = -n.Fc;
+ 								w.dc = new Float32Array(n.Ea);
+ 								w.ob = new Float32Array(n.Ea);
+ 								w.ab = 0;
+ 								w.Eb = 0;
+ 								w.Ad = 0;
+ 								w.Pa = !0
+ 							}
+ 						}
+ 						if(n.ud) {
+ 							f = !1;
+ 							try {
+ 								if("undefined" === typeof SharedWorker) {
+ 									var K = URL.createObjectURL(new Blob(["let handler = null;\n      self.addEventListener('message', function(e){\n        if (handler !== null){\n          clearTimeout(handler);\n          handler = null;\n        }\n        switch (e.data) {\n          case 'START':\n          case 'DONE':\n            handler = setTimeout(function(){\n              self.postMessage('TICK');\n            }, " +
+ 											n.hc.toString() + ");\n            break;\n          case 'STOP':\n            break;\n        };\n      }, false);"
+ 										], {
+ 											type: "text/javascript"
+ 										})),
+ 										O = new Worker(K);
+ 									O.addEventListener("message", a);
+ 									k = {
+ 										Id: O,
+ 										port: O
+ 									};
+ 									l.bc = !0
+ 								} else {
+ 									var Y = URL.createObjectURL(new Blob(["let handler = null;\n      onconnect = function(e) {\n        const port = e.ports[0];\n        port.addEventListener('message', function(e) {\n          \n          if (handler !== null){\n            clearTimeout(handler);\n            handler = null;\n          }\n          switch (e.data) {\n            case 'START':\n            case 'DONE':\n              handler = setTimeout(function(){\n                port.postMessage('TICK');\n              }, " +
+ 											n.hc.toString() + ");\n              break;\n            case 'STOP':\n              break;\n          };\n          \n        });\n        \n        port.start();\n      } // end onconnect()"
+ 										], {
+ 											type: "text/javascript"
+ 										})),
+ 										oa = new SharedWorker(Y);
+ 									oa.port.start();
+ 									oa.port.addEventListener("message", a);
+ 									k = {
+ 										Id: oa,
+ 										port: oa.port
+ 									};
+ 									l.ac = !0
+ 								}
+ 								f = !0
+ 							} catch (sa) {}
+ 							f && ("onvisibilitychange" in document ? document.addEventListener("visibilitychange", p) : (window.addEventListener("blur", N), window.addEventListener("focus", L)), l.$b = !0)
+ 						}
+ 						M = "undefined" !== typeof qa
+ 					},
+ 					m: function() {
+ 						g();
+ 						l.$b && ("onvisibilitychange" in document ? document.removeEventListener("visibilitychange", p) : (window.removeEventListener("blur", N), window.removeEventListener("focus", L)), l.$b = !1);
+ 						l.ac ? (k.port.close(), l.ac = !1) : l.bc && (k.Id.terminate(), l.bc = !1);
+ 						Object.assign(l, {
+ 							W: !0,
+ 							pa: !1,
+ 							Aa: !1
+ 						});
+ 						y = null
+ 					},
+ 					qh: function() {
+ 						return l.W
+ 					},
+ 					update: function(f) {
+ 						Object.assign(n, f)
+ 					},
+ 					qc: function(f) {
+ 						l.pa || x.o({});
+ 						m();
+ 						l.Aa = !0;
+ 						y = f;
+ 						l.W && c()
+ 					},
+ 					stop: g
+ 				};
+ 			return x
+ 		}(),
+ 		vb = function() {
+ 			var a = {
+ 					Ed: 4,
+ 					ub: [1.5,
+ 						1.5, 2
+ 					],
+ 					N: [.1, .1, .1],
+ 					Md: 1,
+ 					C: -1,
+ 					L: -1,
+ 					Pf: 2,
+ 					tf: 1,
+ 					Od: !0,
+ 					De: .8
+ 				},
+ 				c = null,
+ 				d = [],
+ 				e = [0],
+ 				g = [.5, .5, 1];
+ 			return {
+ 				o: function(m) {
+ 					c = Object.assign({}, a, m);
+ 					d.splice(0);
+ 					m = c.ub[0] * c.N[0];
+ 					var t = c.ub[1] * c.N[1],
+ 						p = 1 / (1 + c.ub[2] * c.N[2]),
+ 						q = c.Md * Math.min(c.C, c.L),
+ 						u = q / c.C;
+ 					q /= c.L;
+ 					var r = .5 * c.De;
+ 					r *= r;
+ 					for(var A = 0; A < c.Ed; ++A) {
+ 						var v = Math.pow(p, A),
+ 							n = u * v,
+ 							y = q * v;
+ 						v = n * c.tf;
+ 						var E = n * m,
+ 							k = y * t;
+ 						n /= 2;
+ 						y /= 2;
+ 						for(var M = 1 + (1 - n - n) / E, H = 1 + (1 - y - y) / k, l = 0; l < H; ++l)
+ 							for(var J = y + l * k, w = J - .5, L = 0; L < M; ++L) {
+ 								var N = n + L * E,
+ 									x = N - .5;
+ 								x * x + w * w > r || d.push([N, J, v])
+ 							}
+ 					}
+ 					c.Od && d.sort(function(f,
+ 						z) {
+ 						var I = f[0] - .5;
+ 						f = f[1] - .5;
+ 						var h = z[0] - .5;
+ 						z = z[1] - .5;
+ 						return I * I + f * f - (h * h + z * z)
+ 					})
+ 				},
+ 				get: function(m) {
+ 					var t = d.length;
+ 					if(0 === t) return g;
+ 					for(; m >= e.length;) e.push(0);
+ 					e[m] >= t && (e[m] = 0);
+ 					var p = d[Math.floor(e[m])];
+ 					e[m] = (e[m] + 1 / c.Pf) % t;
+ 					return p
+ 				},
+ 				reset: function() {
+ 					for(var m = d.length / e.length, t = 0; t < e.length; ++t) e[t] = Math.floor(t * m)
+ 				}
+ 			}
+ 		}(),
+ 		da = function() {
+ 			function a(r, A, v, n) {
+ 				return v > r ? Math.max(0, r + A / 2 - (v - n / 2)) : Math.max(0, v + n / 2 - (r - A / 2))
+ 			}
+
+ 			function c(r) {
+ 				return !g.rd(r)
+ 			}
+
+ 			function d(r, A, v) {
+ 				return r.some(function(n, y) {
+ 					if(y === A) return !1;
+ 					y = r[A];
+ 					return y.qa > n.qa || 3 > n.qa || a(y.x, y.ja, n.x, n.ja) < g.fc * y.ja ? !1 : a(y.y, y.ja * v, n.y, n.ja * v) > g.fc * y.ja * v
+ 				})
+ 			}
+ 			var e = {
+ 					M: 1,
+ 					fc: .3,
+ 					Pd: .3,
+ 					rd: null,
+ 					ff: !0
+ 				},
+ 				g = null,
+ 				m = 0,
+ 				t = null,
+ 				p = !1,
+ 				q = 0,
+ 				u = 0;
+ 			return {
+ 				o: function(r) {
+ 					g = Object.assign({}, e, r);
+ 					t = [0]
+ 				},
+ 				yd: function() {
+ 					return 1 !== g.M
+ 				},
+ 				hd: function() {
+ 					return m
+ 				},
+ 				xd: function() {
+ 					return p
+ 				},
+ 				na: function() {
+ 					return g.M
+ 				},
+ 				ah: function() {
+ 					return t
+ 				},
+ 				jf: function(r) {
+ 					return t.includes(r)
+ 				},
+ 				update: function(r, A) {
+ 					var v = t;
+ 					if(v.length > r) v.splice(0, v.length - r);
+ 					else
+ 						for(; v.length < r;) v.push(0);
+ 					if(1 !== g.M)
+ 						if(A.every(c)) {
+ 							A =
+ 								q;
+ 							for(var n = 0; n < r; ++n) v[n] = A, A = (A + 1) % g.M;
+ 							q = A
+ 						} else {
+ 							n = Math.round(g.Pd * r);
+ 							n = Math.max(1, n);
+ 							for(var y = q, E = 0, k = 0; E < r; ++E) {
+ 								if(c(A[y]) && ++k > n) {
+ 									do ++y === g.M && (y = 0); while(c(A[y]))
+ 								}
+ 								v[E] = y;
+ 								y = (y + 1) % g.M
+ 							}
+ 							q = y
+ 						}
+ 				},
+ 				Bb: function(r) {
+ 					m = t[r];
+ 					u = (.5 + m) / g.M;
+ 					p = t.lastIndexOf(m) === r;
+ 					return m
+ 				},
+ 				Nf: function(r, A) {
+ 					return 1 === g.M ? !1 : d(r, m, A)
+ 				},
+ 				Yd: function(r) {
+ 					g.ff && 1 === g.M || D.G(r, u)
+ 				},
+ 				Ce: function(r) {
+ 					for(var A = new Float32Array(r.length * g.M), v = 0, n; v < g.M; ++v)
+ 						for(n = 0; n < r.length; ++n) A[v * r.length + n] = r[n];
+ 					return A
+ 				},
+ 				Qb: function(r) {
+ 					for(var A = [],
+ 						v = 0; v < g.M; ++v) A.push(JSON.parse(JSON.stringify(r)));
+ 					return A
+ 				}
+ 			}
+ 		}(),
+ 		ea = {
+ 			neuralNetworkPath: "NN_DEFAULT.json",
+ 			ba: 0,
+ 			Cf: {
+ 				threshold: 1.2,
+ 				nScaleLevels: 2,
+ 				scale0Factor: .8,
+ 				nDetectsPerLoopRange: [2, 12],
+ 				overlapFactors: [2, 2, 3],
+ 				scanCenterFirst: !0,
+ 				nDetectsPerLoop: -1,
+ 				multiDetectionThresholdFactors: [.5, .6],
+ 				translationScalingFactors: [.3, .3, 1],
+ 				isCleanGLStateAtEachIteration: !0,
+ 				animateProcessOrder: "DSAR"
+ 			},
+ 			Sf: 50,
+ 			qf: .4,
+ 			pf: 8,
+ 			rf: .3,
+ 			Of: {
+ 				translationFactorRange: [.002, .005],
+ 				rotationFactorRange: [.015,
+ 					.1
+ 				],
+ 				qualityFactorRange: [.9, .98],
+ 				alphaRange: [.05, 1],
+ 				followZRotAlphaFactor: .8
+ 			},
+ 			Qa: [.65, 1, .262],
+ 			ee: .2,
+ 			ge: 2,
+ 			fe: .1,
+ 			sf: 8,
+ 			Dd: 1,
+ 			Ge: Za.qb.bind(null, .3, .7),
+ 			Xf: 20,
+ 			Vd: 3
+ 		},
+ 		pa = {
+ 			facingMode: "user",
+ 			idealWidth: 800,
+ 			idealHeight: 600,
+ 			minWidth: 480,
+ 			maxWidth: 1920,
+ 			minHeight: 480,
+ 			maxHeight: 1920,
+ 			rotate: 0,
+ 			flipX: !1
+ 		},
+ 		ia = {
+ 			kc: -3,
+ 			kf: -1,
+ 			error: -2,
+ 			ready: 1,
+ 			play: 2,
+ 			pause: 3
+ 		},
+ 		na = ia.kc,
+ 		G = null,
+ 		bc = {
+ 			kb: !1,
+ 			vc: null,
+ 			element: null,
+ 			K: null,
+ 			D: [0, 0],
+ 			v: [.5, 0, 0, .5],
+ 			wb: 0,
+ 			Ka: null,
+ 			jb: !1
+ 		},
+ 		Q = null,
+ 		cc = {
+ 			Ja: null,
+ 			Gb: null,
+ 			antialias: !0,
+ 			Gc: "./",
+ 			Fa: null,
+ 			da: null,
+ 			ba: ea.ba,
+ 			Hd: ea.ba,
+ 			lb: !1,
+ 			wa: !0
+ 		},
+ 		Pa = null,
+ 		ba = null,
+ 		ra = null,
+ 		Qa = 1,
+ 		Oa = {
+ 			rc: -1,
+ 			Lb: -1
+ 		},
+ 		Z = null,
+ 		dc = {
+ 			C: 0,
+ 			L: 0,
+ 			D: [0, 0],
+ 			Oa: null
+ 		},
+ 		U = {
+ 			ta: null,
+ 			buffer: null,
+ 			N: null,
+ 			Qa: null,
+ 			Y: ea.Dd,
+ 			Nd: 1,
+ 			Na: null
+ 		},
+ 		Sa = null,
+ 		Fa = null,
+ 		hb = [],
+ 		ib = [],
+ 		qb = {
+ 			VERSION: "3.1.1",
+ 			init: function(a) {
+ 				function c() {
+ 					na !== ia.error && 2 === ++e && (Ka(), xb(), Ja(), Q.Ja && (na = ia.ready, Q.Ja(!1, {
+ 						GL: b,
+ 						canvasElement: Q.da,
+ 						videoTexture: G.K.get(),
+ 						videoTransformMat2: G.v,
+ 						maxFacesDetected: da.na(),
+ 						videoElement: G.element
+ 					}), gb()), fb())
+ 				}
+ 				if(na !== ia.kc) return a.callbackReady && a.callbackReady("ALREADY_INITIALIZED"),
+ 					!1;
+ 				na = ia.kf;
+ 				G = Object.assign({}, bc);
+ 				Q = Object.assign({}, cc);
+ 				Z = Object.assign({}, dc);
+ 				U.Qa = ea.Qa.slice(0);
+ 				"undefined" !== typeof a.antialias && (Q.antialias = a.antialias);
+ 				a.callbackReady && (Q.Ja = a.callbackReady);
+ 				a.callbackTrack && (Q.Gb = a.callbackTrack);
+ 				a.nExpressions && (U.Y = a.nExpressions);
+ 				a.expressionsEasings && (U.Na = a.expressionsEasings);
+ 				"undefined" !== typeof a.animateDelay && (Q.ba = a.animateDelay);
+ 				"undefined" !== typeof a.NNCPath && (Q.Gc = a.NNCPath);
+ 				"undefined" !== typeof a.NNC && (Q.Fa = a.NNC);
+ 				"undefined" !== typeof a.followZRot &&
+ 					(Q.wa = a.followZRot ? !0 : !1);
+ 				if(!a.canvasId && !a.canvas) return Ia("NO_CANVASID"), !1;
+ 				Q.da = a.canvas ? a.canvas : document.getElementById(a.canvasId);
+ 				if(!Q.da) return Ia("INVALID_CANVASID"), !1;
+ 				Z.C = Q.da.width;
+ 				Z.L = Q.da.height;
+ 				if(!Z.C || !Z.L) return Ia("INVALID_CANVASDIMENSIONS"), !1;
+ 				ba = Object.create(ea.Cf);
+ 				a.scanSettings && Object.assign(ba, a.scanSettings);
+ 				var d = 1;
+ 				"undefined" !== typeof a.maxFacesDetected && (d = Math.max(1, a.maxFacesDetected));
+ 				if(d > ea.pf) return Ia("MAXFACES_TOOHIGH"), !1;
+ 				da.o({
+ 					M: d,
+ 					fc: ea.qf,
+ 					Pd: ea.rf,
+ 					rd: function(g) {
+ 						return g.detected >
+ 							ba.multiDetectionThresholdFactors[1] * ba.threshold
+ 					}
+ 				});
+ 				for(d = 0; d < da.na(); ++d) hb.push(new Float32Array(ea.sf)), ib.push(0);
+ 				Na.o({
+ 					ud: a.isKeepRunningOnWinFocusLost || !1,
+ 					Ta: Q.ba
+ 				});
+ 				qa.o({
+ 					ic: 0,
+ 					n: ba.nDetectsPerLoopRange[1] - ba.nDetectsPerLoopRange[0] + 1,
+ 					Bd: ba.nDetectsPerLoopRange[0]
+ 				}); - 1 !== ba.nDetectsPerLoop ? qa.sc(ba.nDetectsPerLoop) : qa.Bc();
+ 				U.N = ba.translationScalingFactors.slice(0);
+ 				ra = Object.create(ea.Of);
+ 				a.stabilizationSettings && Object.assign(ra, a.stabilizationSettings);
+ 				var e = 0;
+ 				a.videoSettings && a.videoSettings.videoElement ?
+ 					ab(a.videoSettings.videoElement, c) : (a.videoSettings && Object.assign(pa, a.videoSettings), zb(a.onWebcamAsk, a.onWebcamGet, function(g) {
+ 						ab(g, c)
+ 					}));
+ 				Ob(function(g) {
+ 					if(!Pb()) return !1;
+ 					Pa = new Fb({
+ 						pb: g.layers,
+ 						pc: "gpuRawAvg",
+ 						mc: Qb
+ 					});
+ 					D.Kc([{
+ 							id: "s54",
+ 							name: "_",
+ 							ua: "attribute vec2 a0;uniform mat2 u38;varying vec2 vv0;void main(){gl_Position=vec4(a0,0.,1.),vv0=vec2(.5,.5)+u38*a0;}",
+ 							Va: ["a0"],
+ 							Ha: [2],
+ 							h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vv0);}",
+ 							i: ["u1", "u38"],
+ 							precision: "lowp"
+ 						},
+ 						{
+ 							id: "s55",
+ 							name: "_",
+ 							h: "uniform sampler2D u1;varying vec2 vv0;void main(){gl_FragColor=texture2D(u1,vv0);}",
+ 							ua: "attribute vec2 a0;uniform sampler2D u39;uniform mat2 u38;uniform vec2 u40;uniform float u41,u42,u43;varying vec2 vv0;void main(){vec4 a=texture2D(u39,vec2(.17,u41));vec2 f=a.gb,g=a.a*u40,b=a0;b.x*=u43;float c=cos(u42),d=sin(u42);vec2 h=mat2(c,d,-d,c)*b,i=f+h*.5*g,j=i-.5;vv0=vec2(.5,.5)+2.*u38*j,gl_Position=vec4(a0,0.,1.);}",
+ 							Va: ["a0"],
+ 							Ha: [2],
+ 							i: "u1 u39 u40 u41 u42 u43 u38".split(" "),
+ 							precision: "lowp"
+ 						},
+ 						{
+ 							id: "s56",
+ 							name: "_",
+ 							h: "uniform sampler2D u44,u39;uniform vec3 u45,u46;uniform float u47,u48,u41,u49,u42,u50;const vec4 e=vec4(.25,.25,.25,.25);void main(){vec4 d=texture2D(u44,vec2(.625,.625)),f=texture2D(u44,vec2(.875,.625)),a=texture2D(u39,vec2(.17,u41));float g=dot(d-f,e);bool h=g>u48;a.r<-.5?a.r+=1.:h?a.r=2.:a.r>u47?a.r=0.:a.r>1.9?a.r+=1.:0.,a.r=mix(-2.,a.r,u49);if(a.r<.9)a=vec4(1.,u45);else{a.r*=step(1.9,a.r);float i=dot(e,texture2D(u44,vec2(.875,.875))),j=dot(e,texture2D(u44,vec2(.125,.625))),k=dot(e,texture2D(u44,vec2(.375,.625))),b=cos(u42),c=sin(u42);vec2 l=mat2(b,c*u50,-c/u50,b)*vec2(i,j);a.gba+=vec3(l,k)*u46*a.a;}gl_FragColor=a;}",
+ 							ua: "attribute vec2 a0;void main(){gl_Position=vec4(a0,0.,1.);}",
+ 							i: "u44 u39 u45 u47 u46 u49 u42 u50 u48 u41".split(" ")
+ 						}, {
+ 							id: "s57",
+ 							name: "_",
+ 							ua: "attribute vec2 a0;void main(){gl_Position=vec4(a0,0.,1.);}",
+ 							h: "uniform sampler2D u44;uniform float u49;const vec4 e=vec4(.25,.25,.25,.25);const vec3 f=vec3(.5,.5,.5);void main(){float a=dot(e,texture2D(u44,vec2(.125,.875))),b=dot(e,texture2D(u44,vec2(.375,.875))),c=dot(e,texture2D(u44,vec2(.625,.875))),d=dot(e,texture2D(u44,vec2(.625,.625)));vec3 g=vec3(a,b,c)*.5+f;gl_FragColor=vec4(g,d*u49);}",
+ 							i: ["u44", "u49"]
+ 						}, {
+ 							id: "s58",
+ 							name: "_",
+ 							ua: "attribute vec2 a0;void main(){gl_Position=vec4(a0,0.,1.);}",
+ 							h: "uniform sampler2D u44;const vec4 e=vec4(.25,.25,.25,.25);void main(){float a=dot(e,texture2D(u44,vec2(.375,.375))),b=dot(e,texture2D(u44,vec2(.625,.375))),c=dot(e,texture2D(u44,vec2(.875,.375))),d=dot(e,texture2D(u44,vec2(.125,.125)));gl_FragColor=vec4(a,b,c,d);}",
+ 							i: ["u44"]
+ 						}, {
+ 							id: "s53",
+ 							name: "_",
+ 							h: "uniform sampler2D u39;uniform vec2 u51;uniform float u52;varying vec2 vv0;void main(){float f=step(.5,mod(gl_FragCoord.y+1.5,2.)),c=step(.33,vv0.x);vec4 a=texture2D(u39,vv0+u51);a.a=mix(a.a*u52,a.a,c);vec4 d=floor(255.*a),g=255.*(255.*a-d),b=mix(d,g,f)/255.;b.x=mix(step(a.x,1.5),b.x,c),gl_FragColor=b;}",
+ 							i: ["u39", "u52", "u51"]
+ 						}
+ 					]);
+ 					ub();
+ 					U.buffer = new Uint8Array(8 * ea.Vd * da.na());
+ 					Sa = da.Qb({
+ 						Xa: 0,
+ 						x: 0,
+ 						y: 0,
+ 						ja: 1,
+ 						rx: 0,
+ 						ry: 0,
+ 						Ra: 0,
+ 						cd: new Float32Array(U.Y),
+ 						qa: 0
+ 					});
+ 					Fa = da.Qb({
+ 						detected: 0,
+ 						x: 0,
+ 						y: 0,
+ 						s: 1,
+ 						xRaw: 0,
+ 						yRaw: 0,
+ 						sRaw: 1,
+ 						rx: 0,
+ 						ry: 0,
+ 						rz: 0,
+ 						expressions: new Float32Array(U.Y)
+ 					});
+ 					da.Qb({
+ 						dx: 0,
+ 						dy: 0,
+ 						Pb: 0,
+ 						Mb: 0,
+ 						Nb: 0,
+ 						Ob: 0
+ 					});
+ 					kb();
+ 					jb();
+ 					c()
+ 				});
+ 				return !0
+ 			},
+ 			destroy: function() {
+ 				Na.m();
+ 				return new Promise(function(a) {
+ 					qb.toggle_pause(!0, !0)
+ 						.finally(function() {
+ 							Pa && Pa.m();
+ 							Ha.m();
+ 							Pa = Fa = Sa = null;
+ 							hb.splice(0);
+ 							ib.splice(0);
+ 							Z.Oa = null;
+ 							U.ta = null;
+ 							G.K = null;
+ 							na = ia.kc;
+ 							a()
+ 						})
+ 						.catch(function() {})
+ 				})
+ 			},
+ 			toggle_videoStream: function(a) {
+ 				return G.jb || !G.element ? Promise.resolve() : V.$d(G.element, a, G.Ka)
+ 			},
+ 			toggle_pause: function(a, c) {
+ 				if(!Ya()) return Promise.reject("NOT_READY");
+ 				c = c ? qb.toggle_videoStream(!a) : Promise.resolve();
+ 				a ? sb() : c.then(function() {
+ 					fb()
+ 				});
+ 				return c
+ 			},
+ 			update_videoSettings: function(a) {
+ 				sb();
+ 				return new Promise(function(c, d) {
+ 					V.$d(G.element, !1, G.Ka)
+ 						.then(function() {
+ 							Object.assign(pa, a);
+ 							zb(null, null, function(e) {
+ 								ab(e, function() {
+ 									Ka();
+ 									Ja();
+ 									fb();
+ 									c()
+ 								})
+ 							})
+ 						})
+ 						.catch(d)
+ 				})
+ 			},
+ 			toggle_slow: function(a) {
+ 				Ya() && na === ia.play && (a && !Q.lb ? (Q.Hd = Q.ba, ba.nDetectsPerLoop = 1, this.set_animateDelay(ea.Zf), Q.lb = !0) : !a && Q.lb && (ba.nDetectsPerLoop = -1, this.set_animateDelay(Q.Hd), Q.lb = !1))
+ 			},
+ 			set_animateDelay: function(a) {
+ 				Q.ba = a;
+ 				Na.update({
+ 					Ta: Q.ba
+ 				})
+ 			},
+ 			resize: function() {
+ 				if(!Ya()) return !1;
+ 				var a = Q.da.width,
+ 					c = Q.da.height;
+ 				if(!lb() && a === Z.C && c === Z.L) return !1;
+ 				Z.C = a;
+ 				Z.L = c;
+ 				D.P();
+ 				kb();
+ 				jb();
+ 				Ka();
+ 				Ja();
+ 				return !0
+ 			},
+ 			set_inputTexture: function(a, c, d) {
+ 				G.D[0] = c;
+ 				G.D[1] = d;
+ 				G.K = X.instance({
+ 					width: c,
+ 					height: d,
+ 					Wb: a
+ 				});
+ 				G.kb = !0;
+ 				Ka();
+ 				gb();
+ 				Ja()
+ 			},
+ 			reset_GLState: function() {
+ 				gb();
+ 				Z.Oa.remove();
+ 				U.ta.remove();
+ 				ub()
+ 			},
+ 			render_video: function() {
+ 				va.O();
+ 				D.set("s54");
+ 				b.viewport(0, 0, Z.C, Z.L);
+ 				G.K.g(0);
+ 				T.l(!0, !0)
+ 			},
+ 			reset_inputTexture: function() {
+ 				G.kb = !1;
+ 				G.K = G.vc;
+ 				lb();
+ 				Ka();
+ 				Ja()
+ 			},
+ 			get_videoDevices: function(a) {
+ 				return V.We(a)
+ 			},
+ 			set_scanSettings: function(a) {
+ 				Object.assign(ba, a); - 1 !== ba.nDetectsPerLoop ? qa.sc(ba.nDetectsPerLoop) : qa.Bc();
+ 				kb();
+ 				jb()
+ 			},
+ 			set_stabilizationSettings: function(a) {
+ 				Object.assign(ra, a)
+ 			},
+ 			set_videoOrientation: function(a, c) {
+ 				Ya() && (pa.flipX =
+ 					c, pa.rotate = a, Ka(), Ja())
+ 			},
+ 			update_videoElement: function(a, c) {
+ 				ab(a ? a : G.element, function() {
+ 					xb();
+ 					Ka();
+ 					Ja();
+ 					c && c()
+ 				})
+ 			},
+ 			create_new: function() {
+ 				return JEELIZFACEFILTERGEN()
+ 			}
+ 		};
+ 	return qb
+ };
+ const JEELIZFACEFILTER = JEELIZFACEFILTERGEN();
+ if(typeof(module) !== 'undefined') {
+ 	module.exports = JEELIZFACEFILTER;
+ }

部分文件因为文件数量过多而无法显示