diff --git a/dist/bundle.js b/dist/bundle.js index 4e09b01..ae569b0 100755 --- a/dist/bundle.js +++ b/dist/bundle.js @@ -1,2 +1,37 @@ -!function(t){function i(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,i),o.l=!0,o.exports}var e={};i.m=t,i.c=e,i.i=function(t){return t},i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},i.p="",i(i.s=11)}([function(t,i,e){"use strict";function r(){this.live2DModel=null,this.modelMatrix=null,this.eyeBlink=null,this.physics=null,this.pose=null,this.debugMode=!1,this.initialized=!1,this.updating=!1,this.alpha=1,this.accAlpha=0,this.lipSync=!1,this.lipSyncValue=0,this.accelX=0,this.accelY=0,this.accelZ=0,this.dragX=0,this.dragY=0,this.startTimeMSec=null,this.mainMotionManager=new h,this.expressionManager=new h,this.motions={},this.expressions={},this.isTexLoaded=!1}function o(){AMotion.prototype.constructor.call(this),this.paramList=new Array}function n(){this.id="",this.type=-1,this.value=null}function s(){this.nextBlinkTime=null,this.stateStartTime=null,this.blinkIntervalMsec=null,this.eyeState=y.STATE_FIRST,this.blinkIntervalMsec=4e3,this.closingMotionMsec=100,this.closedMotionMsec=50,this.openingMotionMsec=150,this.closeIfZero=!0,this.eyeID_L="PARAM_EYE_L_OPEN",this.eyeID_R="PARAM_EYE_R_OPEN"}function _(){this.tr=new Float32Array(16),this.identity()}function a(t,i){_.prototype.constructor.call(this),this.width=t,this.height=i}function h(){MotionQueueManager.prototype.constructor.call(this),this.currentPriority=null,this.reservePriority=null,this.super=MotionQueueManager.prototype}function $(){this.physicsList=new Array,this.startTimeMSec=UtSystem.getUserTimeMSec()}function l(){this.lastTime=0,this.lastModel=null,this.partsGroups=new Array}function u(t){this.paramIndex=-1,this.partsIndex=-1,this.link=null,this.id=t}function p(){this.EPSILON=.01,this.faceTargetX=0,this.faceTargetY=0,this.faceX=0,this.faceY=0,this.faceVX=0,this.faceVY=0,this.lastTimeSec=0}function f(){_.prototype.constructor.call(this),this.screenLeft=null,this.screenRight=null,this.screenTop=null,this.screenBottom=null,this.maxLeft=null,this.maxRight=null,this.maxTop=null,this.maxBottom=null,this.max=Number.MAX_VALUE,this.min=0}function c(){}var g=0;r.prototype.getModelMatrix=function(){return this.modelMatrix},r.prototype.setAlpha=function(t){t>.999&&(t=1),t<.001&&(t=0),this.alpha=t},r.prototype.getAlpha=function(){return this.alpha},r.prototype.isInitialized=function(){return this.initialized},r.prototype.setInitialized=function(t){this.initialized=t},r.prototype.isUpdating=function(){return this.updating},r.prototype.setUpdating=function(t){this.updating=t},r.prototype.getLive2DModel=function(){return this.live2DModel},r.prototype.setLipSync=function(t){this.lipSync=t},r.prototype.setLipSyncValue=function(t){this.lipSyncValue=t},r.prototype.setAccel=function(t,i,e){this.accelX=t,this.accelY=i,this.accelZ=e},r.prototype.setDrag=function(t,i){this.dragX=t,this.dragY=i},r.prototype.getMainMotionManager=function(){return this.mainMotionManager},r.prototype.getExpressionManager=function(){return this.expressionManager},r.prototype.loadModelData=function(t,i){var e=c.getPlatformManager();this.debugMode&&e.log("Load model : "+t);var r=this;e.loadLive2DModel(t,function(t){if(r.live2DModel=t,r.live2DModel.saveParam(),0!=Live2D.getError())return void console.error("Error : Failed to loadModelData().");r.modelMatrix=new a(r.live2DModel.getCanvasWidth(),r.live2DModel.getCanvasHeight()),r.modelMatrix.setWidth(2),r.modelMatrix.setCenterPosition(0,0),i(r.live2DModel)})},r.prototype.loadTexture=function(t,i,e){g++;var r=c.getPlatformManager();this.debugMode&&r.log("Load Texture : "+i);var o=this;r.loadTexture(this.live2DModel,t,i,function(){g--,0==g&&(o.isTexLoaded=!0),"function"==typeof e&&e()})},r.prototype.loadMotion=function(t,i,e){var r=c.getPlatformManager();this.debugMode&&r.log("Load Motion : "+i);var o=null,n=this;r.loadBytes(i,function(i){o=Live2DMotion.loadMotion(i),null!=t&&(n.motions[t]=o),e(o)})},r.prototype.loadExpression=function(t,i,e){var r=c.getPlatformManager();this.debugMode&&r.log("Load Expression : "+i);var n=this;r.loadBytes(i,function(i){null!=t&&(n.expressions[t]=o.loadJson(i)),"function"==typeof e&&e()})},r.prototype.loadPose=function(t,i){var e=c.getPlatformManager();this.debugMode&&e.log("Load Pose : "+t);var r=this;try{e.loadBytes(t,function(t){r.pose=l.load(t),"function"==typeof i&&i()})}catch(t){console.warn(t)}},r.prototype.loadPhysics=function(t){var i=c.getPlatformManager();this.debugMode&&i.log("Load Physics : "+t);var e=this;try{i.loadBytes(t,function(t){e.physics=$.load(t)})}catch(t){console.warn(t)}},r.prototype.hitTestSimple=function(t,i,e){if(this.live2DModel === null)return!1;var r=this.live2DModel.getDrawDataIndex(t);if(r<0)return!1;for(var o=this.live2DModel.getTransformedPoints(r),n=this.live2DModel.getCanvasWidth(),s=0,_=this.live2DModel.getCanvasHeight(),a=0,h=0;hs&&(s=$),l<_&&(_=l),l>a&&(a=l)}var u=this.modelMatrix.invertTransformX(i),p=this.modelMatrix.invertTransformY(e);return n<=u&&u<=s&&_<=p&&p<=a},o.prototype=new AMotion,o.EXPRESSION_DEFAULT="DEFAULT",o.TYPE_SET=0,o.TYPE_ADD=1,o.TYPE_MULT=2,o.loadJson=function(t){var i=new o,e=c.getPlatformManager(),r=e.jsonParseFromBytes(t);if(i.setFadeIn(parseInt(r.fade_in)>0?parseInt(r.fade_in):1e3),i.setFadeOut(parseInt(r.fade_out)>0?parseInt(r.fade_out):1e3),null==r.params)return i;var s=r.params,_=s.length;i.paramList=[];for(var a=0;a<_;a++){var h=s[a],$=h.id.toString(),l=parseFloat(h.val),u=o.TYPE_ADD,p=null!=h.calc?h.calc.toString():"add";if((u="add"===p?o.TYPE_ADD:"mult"===p?o.TYPE_MULT:"set"===p?o.TYPE_SET:o.TYPE_ADD)==o.TYPE_ADD){var f=null==h.def?0:parseFloat(h.def);l-=f}else if(u==o.TYPE_MULT){var f=null==h.def?1:parseFloat(h.def);0==f&&(f=1),l/=f}var g=new n;g.id=$,g.type=u,g.value=l,i.paramList.push(g)}return i},o.prototype.updateParamExe=function(t,i,e,r){for(var n=this.paramList.length-1;n>=0;--n){var s=this.paramList[n];s.type==o.TYPE_ADD?t.addToParamFloat(s.id,s.value,e):s.type==o.TYPE_MULT?t.multParamFloat(s.id,s.value,e):s.type==o.TYPE_SET&&t.setParamFloat(s.id,s.value,e)}},s.prototype.calcNextBlink=function(){return UtSystem.getUserTimeMSec()+Math.random()*(2*this.blinkIntervalMsec-1)},s.prototype.setInterval=function(t){this.blinkIntervalMsec=t},s.prototype.setEyeMotion=function(t,i,e){this.closingMotionMsec=t,this.closedMotionMsec=i,this.openingMotionMsec=e},s.prototype.updateParam=function(t){var i,e=UtSystem.getUserTimeMSec(),r=0;switch(this.eyeState){case y.STATE_CLOSING:r=(e-this.stateStartTime)/this.closingMotionMsec,r>=1&&(r=1,this.eyeState=y.STATE_CLOSED,this.stateStartTime=e),i=1-r;break;case y.STATE_CLOSED:r=(e-this.stateStartTime)/this.closedMotionMsec,r>=1&&(this.eyeState=y.STATE_OPENING,this.stateStartTime=e),i=0;break;case y.STATE_OPENING:r=(e-this.stateStartTime)/this.openingMotionMsec,r>=1&&(r=1,this.eyeState=y.STATE_INTERVAL,this.nextBlinkTime=this.calcNextBlink()),i=r;break;case y.STATE_INTERVAL:this.nextBlinkTime=t)&&(!(this.currentPriority>=t)&&(this.reservePriority=t,!0))},h.prototype.setReservePriority=function(t){this.reservePriority=t},h.prototype.updateParam=function(t){var i=MotionQueueManager.prototype.updateParam.call(this,t);return this.isFinished()&&(this.currentPriority=0),i},h.prototype.startMotionPrio=function(t,i){return i==this.reservePriority&&(this.reservePriority=0),this.currentPriority=i,this.startMotion(t,!1)},$.load=function(t){for(var i=new $,e=c.getPlatformManager(),r=e.jsonParseFromBytes(t),o=r.physics_hair,n=o.length,s=0;s=0)break;r=n,o=t.getPartsOpacity(s),o+=e/.5,o>1&&(o=1)}}r<0&&(r=0,o=1);for(var n=0;n.15&&(a=1-.15/(1-o)),h>a&&(h=a),t.setPartsOpacity(s,h)}}},l.prototype.copyOpacityOtherParts=function(t,i){for(var e=0;eo)&&($*=o/u,l*=o/u,u=o),this.faceVX+=$,this.faceVY+=l;var f=.5*(Math.sqrt(o*o+16*o*_-8*o*_)-o),c=Math.sqrt(this.faceVX*this.faceVX+this.faceVY*this.faceVY);c>f&&(this.faceVX*=f/c,this.faceVY*=f/c),this.faceX+=this.faceVX,this.faceY+=this.faceVY}},f.prototype=new _,f.prototype.getMaxScale=function(){return this.max},f.prototype.getMinScale=function(){return this.min},f.prototype.setMaxScale=function(t){this.max=t},f.prototype.setMinScale=function(t){this.min=t},f.prototype.isMaxScale=function(){return this.getScaleX()==this.max},f.prototype.isMinScale=function(){return this.getScaleX()==this.min},f.prototype.adjustTranslate=function(t,i){this.tr[0]*this.maxLeft+(this.tr[12]+t)>this.screenLeft&&(t=this.screenLeft-this.tr[0]*this.maxLeft-this.tr[12]),this.tr[0]*this.maxRight+(this.tr[12]+t)this.screenBottom&&(i=this.screenBottom-this.tr[5]*this.maxBottom-this.tr[13]);var e=[1,0,0,0,0,1,0,0,0,0,1,0,t,i,0,1];_.mul(e,this.tr,this.tr)},f.prototype.adjustScale=function(t,i,e){var r=e*this.tr[0];r0&&(e=this.min/this.tr[0]):r>this.max&&this.tr[0]>0&&(e=this.max/this.tr[0]);var o=[1,0,0,0,0,1,0,0,0,0,1,0,t,i,0,1],n=[e,0,0,0,0,e,0,0,0,0,1,0,0,0,0,1],s=[1,0,0,0,0,1,0,0,0,0,1,0,-t,-i,0,1];_.mul(s,this.tr,this.tr),_.mul(n,this.tr,this.tr),_.mul(o,this.tr,this.tr)},f.prototype.setScreenRect=function(t,i,e,r){this.screenLeft=t,this.screenRight=i,this.screenTop=r,this.screenBottom=e},f.prototype.setMaxScreenRect=function(t,i,e,r){this.maxLeft=t,this.maxRight=i,this.maxTop=r,this.maxBottom=e},f.prototype.getScreenLeft=function(){return this.screenLeft},f.prototype.getScreenRight=function(){return this.screenRight},f.prototype.getScreenBottom=function(){return this.screenBottom},f.prototype.getScreenTop=function(){return this.screenTop},f.prototype.getMaxLeft=function(){return this.maxLeft},f.prototype.getMaxRight=function(){return this.maxRight},f.prototype.getMaxBottom=function(){return this.maxBottom},f.prototype.getMaxTop=function(){return this.maxTop},c.platformManager=null,c.getPlatformManager=function(){return c.platformManager},c.setPlatformManager=function(t){c.platformManager=t},t.exports={L2DTargetPoint:p,Live2DFramework:c,L2DViewMatrix:f,L2DPose:l,L2DPartsParam:u,L2DPhysics:$,L2DMotionManager:h,L2DModelMatrix:a,L2DMatrix44:_,EYE_STATE:y,L2DEyeBlink:s,L2DExpressionParam:n,L2DExpressionMotion:o,L2DBaseModel:r}},function(t,i,e){"use strict";var r={DEBUG_LOG:!1,DEBUG_MOUSE_LOG:!1,VIEW_MAX_SCALE:2,VIEW_MIN_SCALE:.8,VIEW_LOGICAL_LEFT:-1,VIEW_LOGICAL_RIGHT:1,VIEW_LOGICAL_MAX_LEFT:-2,VIEW_LOGICAL_MAX_RIGHT:2,VIEW_LOGICAL_MAX_BOTTOM:-2,VIEW_LOGICAL_MAX_TOP:2,PRIORITY_NONE:0,PRIORITY_IDLE:1,PRIORITY_NORMAL:2,PRIORITY_FORCE:3,MOTION_GROUP_IDLE:"idle",MOTION_GROUP_TAP_BODY:"tap_body",MOTION_GROUP_FLICK_HEAD:"flick_head",MOTION_GROUP_PINCH_IN:"pinch_in",MOTION_GROUP_PINCH_OUT:"pinch_out",MOTION_GROUP_SHAKE:"shake",HIT_AREA_HEAD:"head",HIT_AREA_BODY:"body"};t.exports=r},function(t,i,e){"use strict";function r(){}r.matrixStack=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],r.depth=0,r.currentMatrix=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],r.tmp=new Array(16),r.reset=function(){this.depth=0},r.loadIdentity=function(){for(var t=0;t<16;t++)this.currentMatrix[t]=t%5==0?1:0},r.push=function(){var t=(this.depth,16*(this.depth+1));this.matrixStack.lengthe.left&&i.y>e.top)return i;var o=t.x-i.x,n=t.y-i.y,s=r(o,n);i.x=this.models.length?null:this.models[t]},o.prototype.releaseModel=function(t,i){this.models.length<=t||(this.models[t].release(i),delete this.models[t],this.models.splice(t,1))},o.prototype.numModels=function(){return this.models.length},o.prototype.setDrag=function(t,i){for(var e=0;e0){r.expressions={};for(var t=0;tat.frameBuffers.length&&(this.curFrameNo=this.getMaskRenderTexture()),this.tmpModelToViewMatrix=new R,this.tmpMatrix2=new R,this.tmpMatrixForMask=new R,this.tmpMatrixForDraw=new R,this.CHANNEL_COLORS=new Array;var i=new A;i=new A,i.r=0,i.g=0,i.b=0,i.a=1,this.CHANNEL_COLORS.push(i),i=new A,i.r=1,i.g=0,i.b=0,i.a=0,this.CHANNEL_COLORS.push(i),i=new A,i.r=0,i.g=1,i.b=0,i.a=0,this.CHANNEL_COLORS.push(i),i=new A,i.r=0,i.g=0,i.b=1,i.a=0,this.CHANNEL_COLORS.push(i);for(var e=0;eG._$T7){t._$NP|=i._$4s;throw new $t("_$gi _$C _$li , _$n0 _$_ version _$li ( SDK : "+G._$T7+" < _$f0 : "+r+" )@_$SS#loadModel()\n")}var h=o._$nP();if(r>=G._$s7){var $=o._$9T(),l=o._$9T();if(-30584!=$||-30584!=l)throw t._$NP|=i._$0s,new $t("_$gi _$C _$li , _$0 _$6 _$Ui.")}t._$KS(h);var u=t.getModelContext();u.setDrawParam(t.getDrawParam()),u.init()}catch(t){_._$Rb(t)}},i.prototype._$KS=function(t){this._$MT=t},i.prototype.getModelImpl=function(){return null==this._$MT&&(this._$MT=new p,this._$MT._$zP()),this._$MT},i.prototype.getCanvasWidth=function(){return null==this._$MT?0:this._$MT.getCanvasWidth()},i.prototype.getCanvasHeight=function(){return null==this._$MT?0:this._$MT.getCanvasHeight()},i.prototype.getParamFloat=function(t){return"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),this._$5S.getParamFloat(t)},i.prototype.setParamFloat=function(t,i,e){"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),arguments.length<3&&(e=1),this._$5S.setParamFloat(t,this._$5S.getParamFloat(t)*(1-e)+i*e)},i.prototype.addToParamFloat=function(t,i,e){"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),arguments.length<3&&(e=1),this._$5S.setParamFloat(t,this._$5S.getParamFloat(t)+i*e)},i.prototype.multParamFloat=function(t,i,e){"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),arguments.length<3&&(e=1),this._$5S.setParamFloat(t,this._$5S.getParamFloat(t)*(1+(i-1)*e))},i.prototype.getParamIndex=function(t){return this._$5S.getParamIndex(u.getID(t))},i.prototype.loadParam=function(){this._$5S.loadParam()},i.prototype.saveParam=function(){this._$5S.saveParam()},i.prototype.init=function(){this._$5S.init()},i.prototype.update=function(){this._$5S.update()},i.prototype._$Rs=function(){return _._$li("_$60 _$PT _$Rs()"),-1},i.prototype._$Ds=function(t){_._$li("_$60 _$PT _$SS#_$Ds() \n")},i.prototype._$K2=function(){},i.prototype.draw=function(){},i.prototype.getModelContext=function(){return this._$5S},i.prototype._$s2=function(){return this._$NP},i.prototype._$P7=function(t,i,e,r){var o=-1,n=0,s=this;if(0!=e)if(1==t.length){var _=t[0],a=0!=s.getParamFloat(_),h=i[0],$=s.getPartsOpacity(h),l=e/r;a?($+=l)>1&&($=1):($-=l)<0&&($=0),s.setPartsOpacity(h,$)}else{for(var u=0;u=0)break;o=u;var h=i[u];n=s.getPartsOpacity(h),n+=e/r,n>1&&(n=1)}}o<0&&(console.log("No _$wi _$q0/ _$U default[%s]",t[0]),o=0,n=1,s.loadParam(),s.setParamFloat(t[o],n),s.saveParam());for(var u=0;u.15&&(f=1-.15/(1-n)),c>f&&(c=f),s.setPartsOpacity(h,c)}}}else for(var u=0;u=this._$5S._$aS.length)return null;var i=this._$5S._$aS[t];return null!=i&&i.getType()==W._$wb&&i instanceof lt?i.getIndexArray():null},e.CHANNEL_COUNT=4,e.RENDER_TEXTURE_USE_MIPMAP=!1,e.NOT_USED_FRAME=-100,e.prototype._$L7=function(){if(this.tmpModelToViewMatrix&&(this.tmpModelToViewMatrix=null),this.tmpMatrix2&&(this.tmpMatrix2=null),this.tmpMatrixForMask&&(this.tmpMatrixForMask=null),this.tmpMatrixForDraw&&(this.tmpMatrixForDraw=null),this.tmpBoundsOnModel&&(this.tmpBoundsOnModel=null),this.CHANNEL_COLORS){for(var t=this.CHANNEL_COLORS.length-1;t>=0;--t)this.CHANNEL_COLORS.splice(t,1);this.CHANNEL_COLORS=[]}this.releaseShader()},e.prototype.releaseShader=function(){for(var t=at.frameBuffers.length,i=0;i0){var n=i.gl.getParameter(i.gl.FRAMEBUFFER_BINDING),s=new Array(4);s[0]=0,s[1]=0,s[2]=i.gl.canvas.width,s[3]=i.gl.canvas.height,i.gl.viewport(0,0,at.clippingMaskBufferSize,at.clippingMaskBufferSize),this.setupLayoutBounds(e),i.gl.bindFramebuffer(i.gl.FRAMEBUFFER,at.frameBuffers[this.curFrameNo].framebuffer),i.gl.clearColor(0,0,0,0),i.gl.clear(i.gl.COLOR_BUFFER_BIT);for(var r=0;rr?e:r,n=o,s=o,_=0,a=0,h=i.clippedDrawContextList.length,$=0;$_&&(_=v),S>a&&(a=S)}}if(n==o)i.allClippedDrawRect.x=0,i.allClippedDrawRect.y=0,i.allClippedDrawRect.width=0,i.allClippedDrawRect.height=0,i.isUsing=!1;else{var L=_-n,M=a-s;i.allClippedDrawRect.x=n,i.allClippedDrawRect.y=s,i.allClippedDrawRect.width=L,i.allClippedDrawRect.height=M,i.isUsing=!0}},e.prototype.setupLayoutBounds=function(t){var i=t/e.CHANNEL_COUNT,r=t%e.CHANNEL_COUNT;i=~~i,r=~~r;for(var o=0,n=0;n=1)return 1;var p=r,f=p*p;return $*(p*f)+l*f+u*p+0},s.prototype._$a0=function(){},s.prototype.setFadeIn=function(t){this._$dP=t},s.prototype.setFadeOut=function(t){this._$eo=t},s.prototype._$pT=function(t){this._$V0=t},s.prototype.getFadeOut=function(){return this._$eo},s.prototype._$4T=function(){return this._$eo},s.prototype._$mT=function(){return this._$V0},s.prototype.getDurationMSec=function(){return-1},s.prototype.getLoopDurationMSec=function(){return-1},s.prototype.updateParam=function(t,i){if(i._$AT&&!i._$9L){var e=w.getUserTimeMSec();if(i._$z2<0){i._$z2=e,i._$bs=e;var r=this.getDurationMSec();i._$Do<0&&(i._$Do=r<=0?-1:i._$z2+r)}var o=this._$V0;o=o*(0==this._$dP?1:ht._$r2((e-i._$bs)/this._$dP))*(0==this._$eo||i._$Do<0?1:ht._$r2((i._$Do-e)/this._$eo)),0<=o&&o<=1||console.log("### assert!! ### "),this.updateParamExe(t,e,o,i),i._$Do>0&&i._$Do0?console.log("\n"):e%8==0&&e>0&&console.log(" "),console.log("%02X ",255&t[e]);console.log("\n")},_._$nr=function(t,i,e){console.log("%s\n",t);for(var r=i.length,o=0;o=0;--r){this._$lL[r]._$oP(t,this)}this._$oo(t,e),this._$M2=this._$Yb(),this._$9b=(this._$M2-this._$ks)/e,this._$ks=this._$M2}for(var r=this._$qP.length-1;r>=0;--r){this._$qP[r]._$YS(t,this)}this._$iT=i},f.prototype._$oo=function(t,i){i<.033&&(i=.033);var e=1/i;this.p1.vx=(this.p1.x-this.p1._$s0)*e,this.p1.vy=(this.p1.y-this.p1._$70)*e,this.p1.ax=(this.p1.vx-this.p1._$7L)*e,this.p1.ay=(this.p1.vy-this.p1._$HL)*e,this.p1.fx=this.p1.ax*this.p1._$p,this.p1.fy=this.p1.ay*this.p1._$p,this.p1._$xT();var r,o,n=-Math.atan2(this.p1.y-this.p2.y,this.p1.x-this.p2.x),s=Math.cos(n),_=Math.sin(n),a=9.8*this.p2._$p,h=this._$Db*Lt._$bS,$=a*Math.cos(n-h);r=$*_,o=$*s;var l=-this.p1.fx*_*_,u=-this.p1.fy*_*s,p=-this.p2.vx*this._$L2,f=-this.p2.vy*this._$L2;this.p2.fx=r+l+p,this.p2.fy=o+u+f,this.p2.ax=this.p2.fx/this.p2._$p,this.p2.ay=this.p2.fy/this.p2._$p,this.p2.vx+=this.p2.ax*i,this.p2.vy+=this.p2.ay*i,this.p2.x+=this.p2.vx*i,this.p2.y+=this.p2.vy*i;var c=Math.sqrt((this.p1.x-this.p2.x)*(this.p1.x-this.p2.x)+(this.p1.y-this.p2.y)*(this.p1.y-this.p2.y));this.p2.x=this.p1.x+this._$Fo*(this.p2.x-this.p1.x)/c,this.p2.y=this.p1.y+this._$Fo*(this.p2.y-this.p1.y)/c,this.p2.vx=(this.p2.x-this.p2._$s0)*e,this.p2.vy=(this.p2.y-this.p2._$70)*e,this.p2._$xT()},c.prototype._$xT=function(){this._$s0=this.x,this._$70=this.y,this._$7L=this.vx,this._$HL=this.vy},g.prototype._$oP=function(t,i){},y.prototype=new g,y.prototype._$oP=function(t,i){var e=this.scale*t.getParamFloat(this._$wL),r=i.getPhysicsPoint1();switch(this._$tL){default:case f.Src.SRC_TO_X:r.x=r.x+(e-r.x)*this._$V0;break;case f.Src.SRC_TO_Y:r.y=r.y+(e-r.y)*this._$V0;break;case f.Src.SRC_TO_G_ANGLE:var o=i._$qr();o+=(e-o)*this._$V0,i._$pr(o)}},d.prototype._$YS=function(t,i){},T.prototype=new d,T.prototype._$YS=function(t,i){switch(this._$YP){default:case f.Target.TARGET_FROM_ANGLE:t.setParamFloat(this._$wL,this.scale*i._$5r(),this._$V0);break;case f.Target.TARGET_FROM_ANGLE_V:t.setParamFloat(this._$wL,this.scale*i._$Cs(),this._$V0)}},f.Src=function(){},f.Src.SRC_TO_X="SRC_TO_X",f.Src.SRC_TO_Y="SRC_TO_Y",f.Src.SRC_TO_G_ANGLE="SRC_TO_G_ANGLE",f.Target=function(){},f.Target.TARGET_FROM_ANGLE="TARGET_FROM_ANGLE",f.Target.TARGET_FROM_ANGLE_V="TARGET_FROM_ANGLE_V",P.prototype.init=function(t){this._$fL=t._$fL,this._$gL=t._$gL,this._$B0=t._$B0,this._$z0=t._$z0,this._$qT=t._$qT,this.reflectX=t.reflectX,this.reflectY=t.reflectY},P.prototype._$F0=function(t){this._$fL=t._$_T(),this._$gL=t._$_T(),this._$B0=t._$_T(),this._$z0=t._$_T(),this._$qT=t._$_T(),t.getFormatVersion()>=G.LIVE2D_FORMAT_VERSION_V2_10_SDK2&&(this.reflectX=t._$po(),this.reflectY=t._$po())},P.prototype._$e=function(){};var It=function(){};It._$ni=function(t,i,e,r,o,n,s,_,a){var h=s*n-_*o;if(0==h)return null;var $,l=((t-e)*n-(i-r)*o)/h;return $=0!=o?(t-e-l*s)/o:(i-r-l*_)/n,isNaN($)&&($=(t-e-l*s)/o,isNaN($)&&($=(i-r-l*_)/n),isNaN($)&&(console.log("a is NaN @UtVector#_$ni() "),console.log("v1x : "+o),console.log("v1x != 0 ? "+(0!=o)))),null==a?new Array($,l):(a[0]=$,a[1]=l,a)},v.prototype._$8P=function(){return this.x+.5*this.width},v.prototype._$6P=function(){return this.y+.5*this.height},v.prototype._$EL=function(){return this.x+this.width},v.prototype._$5T=function(){return this.y+this.height},v.prototype._$jL=function(t,i,e,r){this.x=t,this.y=i,this.width=e,this.height=r},v.prototype._$jL=function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},v.prototype.contains=function(t,i){return this.x<=this.x&&this.y<=this.y&&this.x<=this.x+this.width&&this.y<=this.y+this.height},v.prototype.expand=function(t,i){this.x-=t,this.y-=i,this.width+=2*t,this.height+=2*i},S._$Z2=function(t,i,e,r){var o=i._$Q2(t,e),n=t._$vs(),s=t._$Tr();if(i._$zr(n,s,o),o<=0)return r[n[0]];if(1==o){var _=r[n[0]],a=r[n[1]],h=s[0];return _+(a-_)*h|0}if(2==o){var _=r[n[0]],a=r[n[1]],$=r[n[2]],l=r[n[3]],h=s[0],u=s[1],p=_+(a-_)*h|0,f=$+(l-$)*h|0;return p+(f-p)*u|0}if(3==o){var c=r[n[0]],g=r[n[1]],y=r[n[2]],d=r[n[3]],m=r[n[4]],T=r[n[5]],P=r[n[6]],v=r[n[7]],h=s[0],u=s[1],S=s[2],_=c+(g-c)*h|0,a=y+(d-y)*h|0,$=m+(T-m)*h|0,l=P+(v-P)*h|0,p=_+(a-_)*u|0,f=$+(l-$)*u|0;return p+(f-p)*S|0}if(4==o){var L=r[n[0]],M=r[n[1]],E=r[n[2]],A=r[n[3]],I=r[n[4]],w=r[n[5]],x=r[n[6]],O=r[n[7]],D=r[n[8]],R=r[n[9]],F=r[n[10]],b=r[n[11]],C=r[n[12]],N=r[n[13]],B=r[n[14]],U=r[n[15]],h=s[0],u=s[1],S=s[2],G=s[3],c=L+(M-L)*h|0,g=E+(A-E)*h|0,y=I+(w-I)*h|0,d=x+(O-x)*h|0,m=D+(R-D)*h|0,T=F+(b-F)*h|0,P=C+(N-C)*h|0,v=B+(U-B)*h|0,_=c+(g-c)*u|0,a=y+(d-y)*u|0,$=m+(T-m)*u|0,l=P+(v-P)*u|0,p=_+(a-_)*S|0,f=$+(l-$)*S|0;return p+(f-p)*G|0}for(var Y=1<=G._$T7?(this.clipID=t._$nP(),this.clipIDList=this.convertClipIDForV2_11(this.clipID)):this.clipIDList=[],this._$MS(this._$Lb)},M.prototype.getClipIDList=function(){return this.clipIDList},M.prototype.init=function(t){},M.prototype._$Nr=function(t,i){if(i._$IS[0]=!1,i._$Us=S._$Z2(t,this._$GS,i._$IS,this._$Lb),at._$Zs);else if(i._$IS[0])return;i._$7s=S._$br(t,this._$GS,i._$IS,this._$mS)},M.prototype._$2b=function(t,i){},M.prototype.getDrawDataID=function(){return this._$gP},M.prototype._$j2=function(t){this._$gP=t},M.prototype.getOpacity=function(t,i){return i._$7s},M.prototype._$zS=function(t,i){return i._$Us},M.prototype._$MS=function(t){for(var i=t.length-1;i>=0;--i){var e=t[i];eM._$R2&&(M._$R2=e)}},M.prototype.getTargetBaseDataID=function(){return this._$dr},M.prototype._$gs=function(t){this._$dr=t},M.prototype._$32=function(){return null!=this._$dr&&this._$dr!=dt._$2o()},M.prototype.preDraw=function(t,i,e){},M.prototype.draw=function(t,i,e){},M.prototype.getType=function(){},M.prototype._$B2=function(t,i,e){},E._$ps=32,E.CLIPPING_PROCESS_NONE=0,E.CLIPPING_PROCESS_OVERWRITE_ALPHA=1,E.CLIPPING_PROCESS_MULTIPLY_ALPHA=2,E.CLIPPING_PROCESS_DRAW=3,E.CLIPPING_PROCESS_CLEAR_ALPHA=4,E.prototype.setChannelFlagAsColor=function(t,i){this.CHANNEL_COLORS[t]=i},E.prototype.getChannelFlagAsColor=function(t){return this.CHANNEL_COLORS[t]},E.prototype._$ZT=function(){},E.prototype._$Uo=function(t,i,e,r,o,n,s){},E.prototype._$Rs=function(){return-1},E.prototype._$Ds=function(t){},E.prototype.setBaseColor=function(t,i,e,r){t<0?t=0:t>1&&(t=1),i<0?i=0:i>1&&(i=1),e<0?e=0:e>1&&(e=1),r<0?r=0:r>1&&(r=1),this._$lT=t,this._$C0=i,this._$tT=e,this._$WL=r},E.prototype._$WP=function(t){this.culling=t},E.prototype.setMatrix=function(t){for(var i=0;i<16;i++)this.matrix4x4[i]=t[i]},E.prototype._$IT=function(){return this.matrix4x4},E.prototype.setPremultipliedAlpha=function(t){this.premultipliedAlpha=t},E.prototype.isPremultipliedAlpha=function(){return this.premultipliedAlpha},E.prototype.setAnisotropy=function(t){this.anisotropy=t},E.prototype.getAnisotropy=function(){return this.anisotropy},E.prototype.getClippingProcess=function(){return this.clippingProcess},E.prototype.setClippingProcess=function(t){this.clippingProcess=t},E.prototype.setClipBufPre_clipContextForMask=function(t){this.clipBufPre_clipContextMask=t},E.prototype.getClipBufPre_clipContextMask=function(){return this.clipBufPre_clipContextMask},E.prototype.setClipBufPre_clipContextForDraw=function(t){this.clipBufPre_clipContextDraw=t},E.prototype.getClipBufPre_clipContextDraw=function(){return this.clipBufPre_clipContextDraw},I._$ur=-2,I._$c2=1,I._$_b=2,I.prototype._$F0=function(t){this._$kP=t._$nP(),this._$dr=t._$nP()},I.prototype.readV2_opacity=function(t){t.getFormatVersion()>=G.LIVE2D_FORMAT_VERSION_V2_10_SDK2&&(this._$mS=t._$Tb())},I.prototype.init=function(t){},I.prototype._$Nr=function(t,i){},I.prototype.interpolateOpacity=function(t,i,e,r){null==this._$mS?e.setInterpolatedOpacity(1):e.setInterpolatedOpacity(S._$br(t,i,r,this._$mS))},I.prototype._$2b=function(t,i){},I.prototype._$nb=function(t,i,e,r,o,n,s){},I.prototype.getType=function(){},I.prototype._$gs=function(t){this._$dr=t},I.prototype._$a2=function(t){this._$kP=t},I.prototype.getTargetBaseDataID=function(){return this._$dr},I.prototype.getBaseDataID=function(){return this._$kP},I.prototype._$32=function(){return null!=this._$dr&&this._$dr!=dt._$2o()},w._$W2=0,w._$CS=w._$W2,w._$Mo=function(){return!0},w._$XP=function(t){try{for(var i=getTimeMSec();getTimeMSec()-i=t.length)return!1;for(var o=i;o=0;--e){var r=this._$Ob[e].getParamIndex(i);if(r==x._$ds&&(r=t.getParamIndex(this._$Ob[e].getParamID())),t._$Xb(r))return!0}return!1},D.prototype._$Q2=function(t,i){for(var e,r,o=this._$Ob.length,n=t._$v2(),s=0,_=0;_U._$Qb&&console.log("err 23245\n");for(var o=this._$Ob.length,n=1,s=1,_=0,a=0;a=0;--n)e[n]=o[n]}else this.mult_fast(t,i,e,r)},R.prototype.mult_fast=function(t,i,e,r){r?(e[0]=t[0]*i[0]+t[4]*i[1]+t[8]*i[2],e[4]=t[0]*i[4]+t[4]*i[5]+t[8]*i[6],e[8]=t[0]*i[8]+t[4]*i[9]+t[8]*i[10],e[12]=t[0]*i[12]+t[4]*i[13]+t[8]*i[14]+t[12],e[1]=t[1]*i[0]+t[5]*i[1]+t[9]*i[2],e[5]=t[1]*i[4]+t[5]*i[5]+t[9]*i[6],e[9]=t[1]*i[8]+t[5]*i[9]+t[9]*i[10],e[13]=t[1]*i[12]+t[5]*i[13]+t[9]*i[14]+t[13],e[2]=t[2]*i[0]+t[6]*i[1]+t[10]*i[2],e[6]=t[2]*i[4]+t[6]*i[5]+t[10]*i[6],e[10]=t[2]*i[8]+t[6]*i[9]+t[10]*i[10],e[14]=t[2]*i[12]+t[6]*i[13]+t[10]*i[14]+t[14],e[3]=e[7]=e[11]=0,e[15]=1):(e[0]=t[0]*i[0]+t[4]*i[1]+t[8]*i[2]+t[12]*i[3],e[4]=t[0]*i[4]+t[4]*i[5]+t[8]*i[6]+t[12]*i[7],e[8]=t[0]*i[8]+t[4]*i[9]+t[8]*i[10]+t[12]*i[11],e[12]=t[0]*i[12]+t[4]*i[13]+t[8]*i[14]+t[12]*i[15],e[1]=t[1]*i[0]+t[5]*i[1]+t[9]*i[2]+t[13]*i[3],e[5]=t[1]*i[4]+t[5]*i[5]+t[9]*i[6]+t[13]*i[7],e[9]=t[1]*i[8]+t[5]*i[9]+t[9]*i[10]+t[13]*i[11],e[13]=t[1]*i[12]+t[5]*i[13]+t[9]*i[14]+t[13]*i[15],e[2]=t[2]*i[0]+t[6]*i[1]+t[10]*i[2]+t[14]*i[3],e[6]=t[2]*i[4]+t[6]*i[5]+t[10]*i[6]+t[14]*i[7],e[10]=t[2]*i[8]+t[6]*i[9]+t[10]*i[10]+t[14]*i[11],e[14]=t[2]*i[12]+t[6]*i[13]+t[10]*i[14]+t[14]*i[15],e[3]=t[3]*i[0]+t[7]*i[1]+t[11]*i[2]+t[15]*i[3],e[7]=t[3]*i[4]+t[7]*i[5]+t[11]*i[6]+t[15]*i[7],e[11]=t[3]*i[8]+t[7]*i[9]+t[11]*i[10]+t[15]*i[11],e[15]=t[3]*i[12]+t[7]*i[13]+t[11]*i[14]+t[15]*i[15])},R.prototype.translate=function(t,i,e){this.m[12]=this.m[0]*t+this.m[4]*i+this.m[8]*e+this.m[12],this.m[13]=this.m[1]*t+this.m[5]*i+this.m[9]*e+this.m[13],this.m[14]=this.m[2]*t+this.m[6]*i+this.m[10]*e+this.m[14],this.m[15]=this.m[3]*t+this.m[7]*i+this.m[11]*e+this.m[15]},R.prototype.scale=function(t,i,e){this.m[0]*=t,this.m[4]*=i,this.m[8]*=e,this.m[1]*=t,this.m[5]*=i,this.m[9]*=e,this.m[2]*=t,this.m[6]*=i,this.m[10]*=e,this.m[3]*=t,this.m[7]*=i,this.m[11]*=e},R.prototype.rotateX=function(t){var i=Lt.fcos(t),e=Lt._$9(t),r=this.m[4];this.m[4]=r*i+this.m[8]*e,this.m[8]=r*-e+this.m[8]*i,r=this.m[5],this.m[5]=r*i+this.m[9]*e,this.m[9]=r*-e+this.m[9]*i,r=this.m[6],this.m[6]=r*i+this.m[10]*e,this.m[10]=r*-e+this.m[10]*i,r=this.m[7],this.m[7]=r*i+this.m[11]*e,this.m[11]=r*-e+this.m[11]*i},R.prototype.rotateY=function(t){var i=Lt.fcos(t),e=Lt._$9(t),r=this.m[0];this.m[0]=r*i+this.m[8]*-e,this.m[8]=r*e+this.m[8]*i,r=this.m[1],this.m[1]=r*i+this.m[9]*-e,this.m[9]=r*e+this.m[9]*i,r=m[2],this.m[2]=r*i+this.m[10]*-e,this.m[10]=r*e+this.m[10]*i,r=m[3],this.m[3]=r*i+this.m[11]*-e,this.m[11]=r*e+this.m[11]*i},R.prototype.rotateZ=function(t){var i=Lt.fcos(t),e=Lt._$9(t),r=this.m[0];this.m[0]=r*i+this.m[4]*e,this.m[4]=r*-e+this.m[4]*i,r=this.m[1],this.m[1]=r*i+this.m[5]*e,this.m[5]=r*-e+this.m[5]*i,r=this.m[2],this.m[2]=r*i+this.m[6]*e,this.m[6]=r*-e+this.m[6]*i,r=this.m[3],this.m[3]=r*i+this.m[7]*e,this.m[7]=r*-e+this.m[7]*i},F.prototype=new et,F._$tP=new Object,F._$27=function(){F._$tP.clear()},F.getID=function(t){var i=F._$tP[t];return null==i&&(i=new F(t),F._$tP[t]=i),i},F.prototype._$3s=function(){return new F},b._$kS=-1,b._$pS=0,b._$hb=1,b.STATE_IDENTITY=0,b._$gb=1,b._$fo=2,b._$go=4,b.prototype.transform=function(t,i,e){var r,o,n,s,_,a,h=0,$=0;switch(this._$hi){default:return;case b._$go|b._$fo|b._$gb:for(r=this._$7,o=this._$H,n=this._$k,s=this._$f,_=this._$g,a=this._$w;--e>=0;){var l=t[h++],u=t[h++];i[$++]=r*l+o*u+n,i[$++]=s*l+_*u+a}return;case b._$go|b._$fo:for(r=this._$7,o=this._$H,s=this._$f,_=this._$g;--e>=0;){var l=t[h++],u=t[h++];i[$++]=r*l+o*u,i[$++]=s*l+_*u}return;case b._$go|b._$gb:for(o=this._$H,n=this._$k,s=this._$f,a=this._$w;--e>=0;){var l=t[h++];i[$++]=o*t[h++]+n,i[$++]=s*l+a}return;case b._$go:for(o=this._$H,s=this._$f;--e>=0;){var l=t[h++];i[$++]=o*t[h++],i[$++]=s*l}return;case b._$fo|b._$gb:for(r=this._$7,n=this._$k,_=this._$g,a=this._$w;--e>=0;)i[$++]=r*t[h++]+n,i[$++]=_*t[h++]+a;return;case b._$fo:for(r=this._$7,_=this._$g;--e>=0;)i[$++]=r*t[h++],i[$++]=_*t[h++];return;case b._$gb:for(n=this._$k,a=this._$w;--e>=0;)i[$++]=t[h++]+n,i[$++]=t[h++]+a;return;case b.STATE_IDENTITY:return void(t==i&&h==$||w._$jT(t,h,i,$,2*e))}},b.prototype.update=function(){0==this._$H&&0==this._$f?1==this._$7&&1==this._$g?0==this._$k&&0==this._$w?(this._$hi=b.STATE_IDENTITY,this._$Z=b._$pS):(this._$hi=b._$gb,this._$Z=b._$hb):0==this._$k&&0==this._$w?(this._$hi=b._$fo,this._$Z=b._$kS):(this._$hi=b._$fo|b._$gb,this._$Z=b._$kS):0==this._$7&&0==this._$g?0==this._$k&&0==this._$w?(this._$hi=b._$go,this._$Z=b._$kS):(this._$hi=b._$go|b._$gb,this._$Z=b._$kS):0==this._$k&&0==this._$w?(this._$hi=b._$go|b._$fo,this._$Z=b._$kS):(this._$hi=b._$go|b._$fo|b._$gb,this._$Z=b._$kS)},b.prototype._$RT=function(t){this._$IT(t);var i=t[0],e=t[2],r=t[1],o=t[3],n=Math.sqrt(i*i+r*r),s=i*o-e*r;0==n?at._$so&&console.log("affine._$RT() / rt==0"):(t[0]=n,t[1]=s/n,t[2]=(r*o+i*e)/s,t[3]=Math.atan2(r,i))},b.prototype._$ho=function(t,i,e,r){var o=new Float32Array(6),n=new Float32Array(6);t._$RT(o),i._$RT(n);var s=new Float32Array(6);s[0]=o[0]+(n[0]-o[0])*e,s[1]=o[1]+(n[1]-o[1])*e,s[2]=o[2]+(n[2]-o[2])*e,s[3]=o[3]+(n[3]-o[3])*e,s[4]=o[4]+(n[4]-o[4])*e,s[5]=o[5]+(n[5]-o[5])*e,r._$CT(s)},b.prototype._$CT=function(t){var i=Math.cos(t[3]),e=Math.sin(t[3]);this._$7=t[0]*i,this._$f=t[0]*e,this._$H=t[1]*(t[2]*i-e),this._$g=t[1]*(t[2]*e+i),this._$k=t[4],this._$w=t[5],this.update()},b.prototype._$IT=function(t){t[0]=this._$7,t[1]=this._$f,t[2]=this._$H,t[3]=this._$g,t[4]=this._$k,t[5]=this._$w},C.prototype=new s,C._$cs="VISIBLE:",C._$ar="LAYOUT:",C._$Co=0,C._$D2=[],C._$1T=1,C.loadMotion=function(t){var i=new C,e=[0],r=t.length;i._$yT=0;for(var o=0;o=0){var a=new B;O.startsWith(t,s,C._$cs)?(a._$RP=B._$hs,a._$4P=new String(t,s,_-s)):O.startsWith(t,s,C._$ar)?(a._$4P=new String(t,s+7,_-s-7),O.startsWith(t,s+7,"ANCHOR_X")?a._$RP=B._$xs:O.startsWith(t,s+7,"ANCHOR_Y")?a._$RP=B._$us:O.startsWith(t,s+7,"SCALE_X")?a._$RP=B._$qs:O.startsWith(t,s+7,"SCALE_Y")?a._$RP=B._$Ys:O.startsWith(t,s+7,"X")?a._$RP=B._$ws:O.startsWith(t,s+7,"Y")&&(a._$RP=B._$Ns)):(a._$RP=B._$Fr,a._$4P=new String(t,s,_-s)),i.motions.push(a);var h=0;for(C._$D2.clear(),o=_+1;o0){C._$D2.push($),h++;var l=e[0];if(li._$yT&&(i._$yT=h)}}}else{for(var s=o,_=-1;o=0)for(_==s+4&&"f"==t[s+1]&&"p"==t[s+2]&&"s"==t[s+3]&&(u=!0),o=_+1;o0&&u&&5<$&&$<121&&(i._$D0=$),o=e[0]}for(;o=$?$-1:s];t.setParamFloat(l,u)}else if(B._$ws<=h._$RP&&h._$RP<=B._$Ys);else{var p=t.getParamFloat(l),f=h._$I0[s>=$?$-1:s],c=h._$I0[s+1>=$?$-1:s+1],g=f+(c-f)*_,y=p+(g-p)*e;t.setParamFloat(l,y)}}s>=this._$yT&&(this._$E?(r._$z2=i,this.loopFadeIn&&(r._$bs=i)):r._$9L=!0)},C.prototype._$r0=function(){return this._$E},C.prototype._$aL=function(t){this._$E=t},C.prototype.isLoopFadeIn=function(){return this.loopFadeIn},C.prototype.setLoopFadeIn=function(t){this.loopFadeIn=t},N.prototype.clear=function(){this.size=0},N.prototype.add=function(t){if(this._$P.length<=this.size){var i=new Float32Array(2*this.size);w._$jT(this._$P,0,i,0,this.size),this._$P=i}this._$P[this.size++]=t},N.prototype._$BL=function(){var t=new Float32Array(this.size);return w._$jT(this._$P,0,t,0,this.size),t},B._$Fr=0,B._$hs=1,B._$ws=100,B._$Ns=101,B._$xs=102,B._$us=103,B._$qs=104,B._$Ys=105,U._$Ms=1,U._$Qs=2,U._$i2=0,U._$No=2,U._$do=U._$Ms,U._$Ls=!0,U._$1r=5,U._$Qb=65,U._$J=1e-4,U._$FT=.001,U._$Ss=3,G._$o7=6,G._$S7=7,G._$s7=8,G._$77=9,G.LIVE2D_FORMAT_VERSION_V2_10_SDK2=10,G.LIVE2D_FORMAT_VERSION_V2_11_SDK2_1=11,G._$T7=G.LIVE2D_FORMAT_VERSION_V2_11_SDK2_1,G._$Is=-2004318072,G._$h0=0,G._$4L=23,G._$7P=33,G._$uT=function(t){console.log("_$bo :: _$6 _$mo _$E0 : %d\n",t)},G._$9o=function(t){if(t<40)return G._$uT(t),null;if(t<50)return G._$uT(t),null;if(t<60)return G._$uT(t),null;if(t<100)switch(t){case 65:return new Z;case 66:return new D;case 67:return new x;case 68:return new z;case 69:return new P;case 70:return new lt;default:return G._$uT(t),null}else if(t<150)switch(t){case 131:return new st;case 133:return new tt;case 136:return new p;case 137:return new ot;case 142:return new j}return G._$uT(t),null},Y._$HP=0,Y._$_0=!0;Y._$V2=-1,Y._$W0=-1,Y._$jr=!1,Y._$ZS=!0,Y._$tr=-1e6,Y._$lr=1e6,Y._$is=32,Y._$e=!1,Y.prototype.getDrawDataIndex=function(t){for(var i=this._$aS.length-1;i>=0;--i)if(null!=this._$aS[i]&&this._$aS[i].getDrawDataID()==t)return i;return-1},Y.prototype.getDrawData=function(t){if(t instanceof F){if(null==this._$Bo){this._$Bo=new Object;for(var i=this._$aS.length,e=0;e0&&this.release();for(var t=this._$Ri.getModelImpl(),i=t._$Xr(),r=i.length,o=new Array,n=new Array,s=0;s=0)&&(this._$3S.push(m),this._$db.push(n[s]),o[s]=null,d=!0)}}if(!d)break}var P=t._$E2();if(null!=P){var v=P._$1s();if(null!=v)for(var S=v.length,s=0;s=0;i--)this._$Js[i]=Y._$jr;return this._$QT=!1,Y._$e&&_.dump("_$eL"),!1},Y.prototype.preDraw=function(t){null!=this.clipManager&&(t._$ZT(),this.clipManager.setupClip(this,t))},Y.prototype.draw=function(t){if(null==this._$Ws)return void _._$li("call _$Ri.update() before _$Ri.draw() ");var i=this._$Ws.length;t._$ZT();for(var e=0;e=0;--i)if(this._$pb[i]==t)return i;return this._$02(t,0,Y._$tr,Y._$lr)},Y.prototype._$BS=function(t){return this.getBaseDataIndex(t)},Y.prototype.getBaseDataIndex=function(t){for(var i=this._$3S.length-1;i>=0;--i)if(null!=this._$3S[i]&&this._$3S[i].getBaseDataID()==t)return i;return-1},Y.prototype._$UT=function(t,i){var e=new Float32Array(i);return w._$jT(t,0,e,0,t.length),e},Y.prototype._$02=function(t,i,e,r){if(this._$qo>=this._$pb.length){var o=this._$pb.length,n=new Array(2*o);w._$jT(this._$pb,0,n,0,o),this._$pb=n,this._$_2=this._$UT(this._$_2,2*o),this._$vr=this._$UT(this._$vr,2*o),this._$Rr=this._$UT(this._$Rr,2*o),this._$Or=this._$UT(this._$Or,2*o);var s=new Array;w._$jT(this._$Js,0,s,0,o),this._$Js=s}return this._$pb[this._$qo]=t,this._$_2[this._$qo]=i,this._$vr[this._$qo]=i,this._$Rr[this._$qo]=e,this._$Or[this._$qo]=r,this._$Js[this._$qo]=Y._$ZS,this._$qo++},Y.prototype._$Zo=function(t,i){this._$3S[t]=i},Y.prototype.setParamFloat=function(t,i){ithis._$Or[t]&&(i=this._$Or[t]),this._$_2[t]=i},Y.prototype.loadParam=function(){var t=this._$_2.length;t>this._$fs.length&&(t=this._$fs.length),w._$jT(this._$fs,0,this._$_2,0,t)},Y.prototype.saveParam=function(){var t=this._$_2.length;t>this._$fs.length&&(this._$fs=new Float32Array(t)),w._$jT(this._$_2,0,this._$fs,0,t)},Y.prototype._$v2=function(){return this._$co},Y.prototype._$WS=function(){return this._$QT},Y.prototype._$Xb=function(t){return this._$Js[t]==Y._$ZS},Y.prototype._$vs=function(){return this._$Es},Y.prototype._$Tr=function(){return this._$ZP},Y.prototype.getBaseData=function(t){return this._$3S[t]},Y.prototype.getParamFloat=function(t){return this._$_2[t]},Y.prototype.getParamMax=function(t){return this._$Or[t]},Y.prototype.getParamMin=function(t){return this._$Rr[t]},Y.prototype.setPartsOpacity=function(t,i){this._$Hr[t].setPartsOpacity(i)},Y.prototype.getPartsOpacity=function(t){return this._$Hr[t].getPartsOpacity()},Y.prototype.getPartsDataIndex=function(t){for(var i=this._$F2.length-1;i>=0;--i)if(null!=this._$F2[i]&&this._$F2[i]._$p2()==t)return i;return-1},Y.prototype._$q2=function(t){return this._$db[t]},Y.prototype._$C2=function(t){return this._$8b[t]},Y.prototype._$Bb=function(t){return this._$Hr[t]},Y.prototype._$5s=function(t,i){for(var e=this._$Ws.length,r=t,o=0;o0;)n+=i;return r},k._$C=function(t){var i=null,e=null;try{i=t instanceof Array?t:new _$Xs(t,8192),e=new _$js;for(var r,o=new Int8Array(1e3);(r=i.read(o))>0;)e.write(o,0,r);return e._$TS()}finally{null!=t&&t.close(),null!=e&&(e.flush(),e.close())}},V.prototype._$T2=function(){return w.getUserTimeMSec()+Math._$10()*(2*this._$Br-1)},V.prototype._$uo=function(t){this._$Br=t},V.prototype._$QS=function(t,i,e){this._$Dr=t,this._$Cb=i,this._$mr=e},V.prototype._$7T=function(t){var i,e=w.getUserTimeMSec(),r=0;switch(this._$_L){case STATE_CLOSING:r=(e-this._$bb)/this._$Dr,r>=1&&(r=1,this._$_L=wt.STATE_CLOSED,this._$bb=e),i=1-r;break;case STATE_CLOSED:r=(e-this._$bb)/this._$Cb,r>=1&&(this._$_L=wt.STATE_OPENING,this._$bb=e),i=0;break;case STATE_OPENING:r=(e-this._$bb)/this._$mr,r>=1&&(r=1,this._$_L=wt.STATE_INTERVAL,this._$12=this._$T2()),i=r;break;case STATE_INTERVAL:this._$12.9?at.EXPAND_W:0;this.gl.drawElements(a,e,r,o,n,h,this.transform,_)}},X.prototype._$Rs=function(){throw new Error("_$Rs")},X.prototype._$Ds=function(t){throw new Error("_$Ds")},X.prototype._$K2=function(){for(var t=0;t=0;--i){var e=t[i];eW._$R2&&(W._$R2=e)}},W._$or=function(){return W._$52},W._$Pr=function(){return W._$R2},W.prototype._$F0=function(t){this._$gP=t._$nP(),this._$dr=t._$nP(),this._$GS=t._$nP(),this._$qb=t._$6L(),this._$Lb=t._$cS(),this._$mS=t._$Tb(),t.getFormatVersion()>=G._$T7?(this.clipID=t._$nP(),this.clipIDList=this.convertClipIDForV2_11(this.clipID)):this.clipIDList=null,W._$Sb(this._$Lb)},W.prototype.getClipIDList=function(){return this.clipIDList},W.prototype._$Nr=function(t,i){if(i._$IS[0]=!1,i._$Us=S._$Z2(t,this._$GS,i._$IS,this._$Lb),at._$Zs);else if(i._$IS[0])return;i._$7s=S._$br(t,this._$GS,i._$IS,this._$mS)},W.prototype._$2b=function(t){},W.prototype.getDrawDataID=function(){return this._$gP},W.prototype._$j2=function(t){this._$gP=t},W.prototype.getOpacity=function(t,i){return i._$7s},W.prototype._$zS=function(t,i){return i._$Us},W.prototype.getTargetBaseDataID=function(){return this._$dr},W.prototype._$gs=function(t){this._$dr=t},W.prototype._$32=function(){return null!=this._$dr&&this._$dr!=dt._$2o()},W.prototype.getType=function(){},j._$42=0,j.prototype._$1b=function(){return this._$3S},j.prototype.getDrawDataList=function(){return this._$aS},j.prototype._$F0=function(t){this._$NL=t._$nP(),this._$aS=t._$nP(),this._$3S=t._$nP()},j.prototype._$kr=function(t){t._$Zo(this._$3S),t._$xo(this._$aS),this._$3S=null,this._$aS=null},q.prototype=new i,q.loadModel=function(t){var e=new q;return i._$62(e,t),e},q.loadModel=function(t){var e=new q;return i._$62(e,t),e},q._$to=function(){return new q},q._$er=function(t){var i=new _$5("../_$_r/_$t0/_$Ri/_$_P._$d");if(0==i.exists())throw new _$ls("_$t0 _$_ _$6 _$Ui :: "+i._$PL());for(var e=["../_$_r/_$t0/_$Ri/_$_P.512/_$CP._$1","../_$_r/_$t0/_$Ri/_$_P.512/_$vP._$1","../_$_r/_$t0/_$Ri/_$_P.512/_$EP._$1","../_$_r/_$t0/_$Ri/_$_P.512/_$pP._$1"],r=q.loadModel(i._$3b()),o=0;o=0){var h=new B;O.startsWith(t,_,J._$cs)?(h._$RP=B._$hs,h._$4P=O.createString(t,_,a-_)):O.startsWith(t,_,J._$ar)?(h._$4P=O.createString(t,_+7,a-_-7),O.startsWith(t,_+7,"ANCHOR_X")?h._$RP=B._$xs:O.startsWith(t,_+7,"ANCHOR_Y")?h._$RP=B._$us:O.startsWith(t,_+7,"SCALE_X")?h._$RP=B._$qs:O.startsWith(t,_+7,"SCALE_Y")?h._$RP=B._$Ys:O.startsWith(t,_+7,"X")?h._$RP=B._$ws:O.startsWith(t,_+7,"Y")&&(h._$RP=B._$Ns)):(h._$RP=B._$Fr,h._$4P=O.createString(t,_,a-_)),i.motions.push(h);var $=0,l=[];for(o=a+1;o0){l.push(u),$++;var p=e[0];if(pi._$yT&&(i._$yT=$)}}}else{for(var _=o,a=-1;o=0)for(a==_+4&&"f"==Q(t,_+1)&&"p"==Q(t,_+2)&&"s"==Q(t,_+3)&&(f=!0),o=a+1;o0&&f&&5=$?$-1:s];t.setParamFloat(l,u)}else if(B._$ws<=h._$RP&&h._$RP<=B._$Ys);else{var p,f=t.getParamIndex(l),c=t.getModelContext(),g=c.getParamMax(f),y=c.getParamMin(f),d=.4*(g-y),m=c.getParamFloat(f),T=h._$I0[s>=$?$-1:s],P=h._$I0[s+1>=$?$-1:s+1];p=Td||T>P&&T-P>d?T:T+(P-T)*_;var v=m+(p-m)*e;t.setParamFloat(l,v)}}s>=this._$yT&&(this._$E?(r._$z2=i,this.loopFadeIn&&(r._$bs=i)):r._$9L=!0),this._$eP=e},J.prototype._$r0=function(){return this._$E},J.prototype._$aL=function(t){this._$E=t},J.prototype._$S0=function(){return this._$D0},J.prototype._$U0=function(t){this._$D0=t},J.prototype.isLoopFadeIn=function(){return this.loopFadeIn},J.prototype.setLoopFadeIn=function(t){this.loopFadeIn=t},N.prototype.clear=function(){this.size=0},N.prototype.add=function(t){if(this._$P.length<=this.size){var i=new Float32Array(2*this.size);w._$jT(this._$P,0,i,0,this.size),this._$P=i}this._$P[this.size++]=t},N.prototype._$BL=function(){var t=new Float32Array(this.size);return w._$jT(this._$P,0,t,0,this.size),t},B._$Fr=0,B._$hs=1,B._$ws=100,B._$Ns=101,B._$xs=102,B._$us=103,B._$qs=104,B._$Ys=105,Z.prototype=new I,Z._$gT=new Array,Z.prototype._$zP=function(){this._$GS=new D,this._$GS._$zP()},Z.prototype._$F0=function(t){I.prototype._$F0.call(this,t),this._$A=t._$6L(),this._$o=t._$6L(),this._$GS=t._$nP(),this._$Eo=t._$nP(),I.prototype.readV2_opacity.call(this,t)},Z.prototype.init=function(t){var i=new K(this),e=(this._$o+1)*(this._$A+1);return null!=i._$Cr&&(i._$Cr=null),i._$Cr=new Float32Array(2*e),null!=i._$hr&&(i._$hr=null),this._$32()?i._$hr=new Float32Array(2*e):i._$hr=null,i},Z.prototype._$Nr=function(t,i){var e=i;if(this._$GS._$Ur(t)){var r=this._$VT(),o=Z._$gT;o[0]=!1,S._$Vr(t,this._$GS,o,r,this._$Eo,e._$Cr,0,2),i._$Ib(o[0]),this.interpolateOpacity(t,this._$GS,i,o)}},Z.prototype._$2b=function(t,i){var e=i;if(e._$hS(!0),this._$32()){var r=this.getTargetBaseDataID();if(e._$8r==I._$ur&&(e._$8r=t.getBaseDataIndex(r)),e._$8r<0)at._$so&&_._$li("_$L _$0P _$G :: %s",r),e._$hS(!1);else{var o=t.getBaseData(e._$8r),n=t._$q2(e._$8r);if(null!=o&&n._$yo()){var s=n.getTotalScale();e.setTotalScale_notForClient(s);var a=n.getTotalOpacity();e.setTotalOpacity(a*e.getInterpolatedOpacity()),o._$nb(t,n,e._$Cr,e._$hr,this._$VT(),0,2),e._$hS(!0)}else e._$hS(!1)}}else e.setTotalOpacity(e.getInterpolatedOpacity())},Z.prototype._$nb=function(t,i,e,r,o,n,s){var _=i,a=null!=_._$hr?_._$hr:_._$Cr;Z.transformPoints_sdk2(e,r,o,n,s,a,this._$o,this._$A)},Z.transformPoints_sdk2=function(i,e,r,o,n,s,_,a){for(var h,$,l,u=r*n,p=0,f=0,c=0,g=0,y=0,d=0,m=!1,T=o;T=1){var F=s[2*(0+a*M)],b=s[2*(0+a*M)+1],C=p-2*c+1*y,N=f-2*g+1*d,x=p+3*y,O=f+3*d,D=p-2*c+3*y,R=f-2*g+3*d,B=.5*(S- -2),U=.5*(L-1);B+U<=1?(e[T]=C+(F-C)*B+(D-C)*U,e[T+1]=N+(b-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(F-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(b-O)*(1-U))}else{var G=0|v;G==a&&(G=a-1);var B=.5*(S- -2),U=v-G,Y=G/a,k=(G+1)/a,F=s[2*(0+G*M)],b=s[2*(0+G*M)+1],x=s[2*(0+(G+1)*M)],O=s[2*(0+(G+1)*M)+1],C=p-2*c+Y*y,N=f-2*g+Y*d,D=p-2*c+k*y,R=f-2*g+k*d;B+U<=1?(e[T]=C+(F-C)*B+(D-C)*U,e[T+1]=N+(b-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(F-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(b-O)*(1-U))}else if(1<=S)if(L<=0){var D=s[2*(_+0*M)],R=s[2*(_+0*M)+1],x=p+3*c,O=f+3*g,C=p+1*c-2*y,N=f+1*g-2*d,F=p+3*c-2*y,b=f+3*g-2*d,B=.5*(S-1),U=.5*(L- -2);B+U<=1?(e[T]=C+(F-C)*B+(D-C)*U,e[T+1]=N+(b-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(F-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(b-O)*(1-U))}else if(L>=1){var C=s[2*(_+a*M)],N=s[2*(_+a*M)+1],F=p+3*c+1*y,b=f+3*g+1*d,D=p+1*c+3*y,R=f+1*g+3*d,x=p+3*c+3*y,O=f+3*g+3*d,B=.5*(S-1),U=.5*(L-1);B+U<=1?(e[T]=C+(F-C)*B+(D-C)*U,e[T+1]=N+(b-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(F-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(b-O)*(1-U))}else{var G=0|v;G==a&&(G=a-1);var B=.5*(S-1),U=v-G,Y=G/a,k=(G+1)/a,C=s[2*(_+G*M)],N=s[2*(_+G*M)+1],D=s[2*(_+(G+1)*M)],R=s[2*(_+(G+1)*M)+1],F=p+3*c+Y*y,b=f+3*g+Y*d,x=p+3*c+k*y,O=f+3*g+k*d;B+U<=1?(e[T]=C+(F-C)*B+(D-C)*U,e[T+1]=N+(b-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(F-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(b-O)*(1-U))}else if(L<=0){var V=0|P;V==_&&(V=_-1);var B=P-V,U=.5*(L- -2),X=V/_,z=(V+1)/_,D=s[2*(V+0*M)],R=s[2*(V+0*M)+1],x=s[2*(V+1+0*M)],O=s[2*(V+1+0*M)+1],C=p+X*c-2*y,N=f+X*g-2*d,F=p+z*c-2*y,b=f+z*g-2*d;B+U<=1?(e[T]=C+(F-C)*B+(D-C)*U,e[T+1]=N+(b-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(F-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(b-O)*(1-U))}else if(L>=1){var V=0|P;V==_&&(V=_-1);var B=P-V,U=.5*(L-1),X=V/_,z=(V+1)/_,C=s[2*(V+a*M)],N=s[2*(V+a*M)+1],F=s[2*(V+1+a*M)],b=s[2*(V+1+a*M)+1],D=p+X*c+3*y,R=f+X*g+3*d,x=p+z*c+3*y,O=f+z*g+3*d;B+U<=1?(e[T]=C+(F-C)*B+(D-C)*U,e[T+1]=N+(b-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(F-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(b-O)*(1-U))}else t.err.printf("_$li calc : %.4f , %.4f\t\t\t\t\t@@BDBoxGrid\n",S,L);else e[T]=p+S*c+L*y,e[T+1]=f+S*g+L*d}else $=P-(0|P),l=v-(0|v),h=2*((0|P)+(0|v)*(_+1)),$+l<1?(e[T]=s[h]*(1-$-l)+s[h+2]*$+s[h+2*(_+1)]*l,e[T+1]=s[h+1]*(1-$-l)+s[h+3]*$+s[h+2*(_+1)+1]*l):(e[T]=s[h+2*(_+1)+2]*($-1+l)+s[h+2*(_+1)]*(1-$)+s[h+2]*(1-l),e[T+1]=s[h+2*(_+1)+3]*($-1+l)+s[h+2*(_+1)+1]*(1-$)+s[h+3]*(1-l))}},Z.prototype.transformPoints_sdk1=function(t,i,e,r,o,n,s){for(var _,a,h,$,l,u,p,f=i,c=this._$o,g=this._$A,y=o*s,d=null!=f._$hr?f._$hr:f._$Cr,m=n;m1&&(_=1),a<0?a=0:a>1&&(a=1),_*=c,a*=g,h=0|_,$=0|a,h>c-1&&(h=c-1),$>g-1&&($=g-1),u=_-h,p=a-$,l=2*(h+$*(c+1))):(_=e[m]*c,a=e[m+1]*g,u=_-(0|_),p=a-(0|a),l=2*((0|_)+(0|a)*(c+1))),u+p<1?(r[m]=d[l]*(1-u-p)+d[l+2]*u+d[l+2*(c+1)]*p,r[m+1]=d[l+1]*(1-u-p)+d[l+3]*u+d[l+2*(c+1)+1]*p):(r[m]=d[l+2*(c+1)+2]*(u-1+p)+d[l+2*(c+1)]*(1-u)+d[l+2]*(1-p),r[m+1]=d[l+2*(c+1)+3]*(u-1+p)+d[l+2*(c+1)+1]*(1-u)+d[l+3]*(1-p))},Z.prototype._$VT=function(){return(this._$o+1)*(this._$A+1)},Z.prototype.getType=function(){return I._$_b},K.prototype=new _t,tt._$42=0,tt.prototype._$zP=function(){this._$3S=new Array,this._$aS=new Array},tt.prototype._$F0=function(t){this._$g0=t._$8L(),this.visible=t._$8L(),this._$NL=t._$nP(),this._$3S=t._$nP(),this._$aS=t._$nP()},tt.prototype.init=function(t){var i=new it(this);return i.setPartsOpacity(this.isVisible()?1:0),i},tt.prototype._$6o=function(t){if(null==this._$3S)throw new Error("_$3S _$6 _$Wo@_$6o");this._$3S.push(t)},tt.prototype._$3o=function(t){if(null==this._$aS)throw new Error("_$aS _$6 _$Wo@_$3o");this._$aS.push(t)},tt.prototype._$Zo=function(t){this._$3S=t},tt.prototype._$xo=function(t){this._$aS=t},tt.prototype.isVisible=function(){return this.visible},tt.prototype._$uL=function(){return this._$g0},tt.prototype._$KP=function(t){this.visible=t},tt.prototype._$ET=function(t){this._$g0=t},tt.prototype.getBaseData=function(){return this._$3S},tt.prototype.getDrawData=function(){return this._$aS},tt.prototype._$p2=function(){return this._$NL},tt.prototype._$ob=function(t){this._$NL=t},tt.prototype.getPartsID=function(){return this._$NL},tt.prototype._$MP=function(t){this._$NL=t},it.prototype=new l,it.prototype.getPartsOpacity=function(){return this._$VS},it.prototype.setPartsOpacity=function(t){this._$VS=t},et._$L7=function(){u._$27(),dt._$27(),F._$27(),$._$27()},et.prototype.toString=function(){return this.id},rt.prototype._$F0=function(t){},ot.prototype._$1s=function(){return this._$4S},ot.prototype._$zP=function(){this._$4S=new Array},ot.prototype._$F0=function(t){this._$4S=t._$nP()},ot.prototype._$Ks=function(t){this._$4S.push(t)},nt.tr=new yt,nt._$50=new yt,nt._$Ti=new Array(0,0),nt._$Pi=new Array(0,0),nt._$B=new Array(0,0),nt.prototype._$lP=function(t,i,e,r){this.viewport=new Array(t,i,e,r)},nt.prototype._$bL=function(){this.context.save();var t=this.viewport;null!=t&&(this.context.beginPath(),this.context._$Li(t[0],t[1],t[2],t[3]),this.context.clip())},nt.prototype._$ei=function(){this.context.restore()},nt.prototype.drawElements=function(t,i,e,r,o,n,s,a){try{o!=this._$Qo&&(this._$Qo=o,this.context.globalAlpha=o);for(var h=i.length,$=t.width,l=t.height,u=this.context,p=this._$xP,f=this._$uP,c=this._$6r,g=this._$3r,y=nt.tr,d=nt._$Ti,m=nt._$Pi,T=nt._$B,P=0;P.02?nt.expandClip(t,i,e,r,$,l,u,p,f,c):nt.clipWithTransform(t,null,o,n,s,_,a,h)},nt.expandClip=function(t,i,e,r,o,n,s,_,a,h){var $=s-o,l=_-n,u=a-o,p=h-n,f=$*p-l*u>0?e:-e,c=-l,g=$,y=a-s,d=h-_,m=-d,T=y,P=Math.sqrt(y*y+d*d),v=-p,S=u,L=Math.sqrt(u*u+p*p),M=o-f*c/r,E=n-f*g/r,A=s-f*c/r,I=_-f*g/r,w=s-f*m/P,x=_-f*T/P,O=a-f*m/P,D=h-f*T/P,R=o+f*v/L,F=n+f*S/L,b=a+f*v/L,C=h+f*S/L,N=nt._$50;return null!=i._$P2(N)&&(nt.clipWithTransform(t,N,M,E,A,I,w,x,O,D,b,C,R,F),!0)},nt.clipWithTransform=function(t,i,e,r,o,n,s,a){if(arguments.length<7)return void _._$li("err : @LDGL.clip()");if(!(arguments[1]instanceof yt))return void _._$li("err : a[0] is _$6 LDTransform @LDGL.clip()");var h=nt._$B,$=i,l=arguments;if(t.beginPath(),$){$._$PS(l[2],l[3],h),t.moveTo(h[0],h[1]);for(var u=4;u1?1:.5-.5*Math.cos(t*Lt.PI_F)},$t._$fr=-1,$t.prototype.toString=function(){return this._$ib},lt.prototype=new W,lt._$42=0,lt._$Os=30,lt._$ms=0,lt._$ns=1,lt._$_s=2,lt._$gT=new Array,lt.prototype._$_S=function(t){this._$LP=t},lt.prototype.getTextureNo=function(){return this._$LP},lt.prototype._$ZL=function(){return this._$Qi},lt.prototype._$H2=function(){return this._$JP},lt.prototype.getNumPoints=function(){return this._$d0},lt.prototype.getType=function(){return W._$wb},lt.prototype._$B2=function(t,i,e){var r=i,o=null!=r._$hr?r._$hr:r._$Cr;switch(U._$do){default:case U._$Ms:throw new Error("_$L _$ro ");case U._$Qs:for(var n=this._$d0-1;n>=0;--n)o[n*U._$No+4]=e}},lt.prototype._$zP=function(){this._$GS=new D,this._$GS._$zP()},lt.prototype._$F0=function(t){W.prototype._$F0.call(this,t),this._$LP=t._$6L(),this._$d0=t._$6L(),this._$Yo=t._$6L();var i=t._$nP();this._$BP=new Int16Array(3*this._$Yo);for(var e=3*this._$Yo-1;e>=0;--e)this._$BP[e]=i[e];if(this._$Eo=t._$nP(),this._$Qi=t._$nP(),t.getFormatVersion()>=G._$s7){if(this._$JP=t._$6L(),0!=this._$JP){if(0!=(1&this._$JP)){var r=t._$6L();null==this._$5P&&(this._$5P=new Object),this._$5P._$Hb=parseInt(r)}0!=(this._$JP<._$Os)?this._$6s=(this._$JP<._$Os)>>1:this._$6s=lt._$ms,0!=(32&this._$JP)&&(this.culling=!1)}}else this._$JP=0},lt.prototype.init=function(t){var i=new ut(this),e=this._$d0*U._$No,r=this._$32();switch(null!=i._$Cr&&(i._$Cr=null),i._$Cr=new Float32Array(e),null!=i._$hr&&(i._$hr=null),i._$hr=r?new Float32Array(e):null,U._$do){default:case U._$Ms:if(U._$Ls)for(var o=this._$d0-1;o>=0;--o){var n=o<<1;this._$Qi[n+1]=1-this._$Qi[n+1]}break;case U._$Qs:for(var o=this._$d0-1;o>=0;--o){var n=o<<1,s=o*U._$No,_=this._$Qi[n],a=this._$Qi[n+1];i._$Cr[s]=_,i._$Cr[s+1]=a,i._$Cr[s+4]=0,r&&(i._$hr[s]=_,i._$hr[s+1]=a,i._$hr[s+4]=0)}}return i},lt.prototype._$Nr=function(t,i){var e=i;if(this!=e._$GT()&&console.log("### assert!! ### "),this._$GS._$Ur(t)&&(W.prototype._$Nr.call(this,t,e),!e._$IS[0])){var r=lt._$gT;r[0]=!1,S._$Vr(t,this._$GS,r,this._$d0,this._$Eo,e._$Cr,U._$i2,U._$No)}},lt.prototype._$2b=function(t,i){try{this!=i._$GT()&&console.log("### assert!! ### ");var e=!1;i._$IS[0]&&(e=!0);var r=i;if(!e&&(W.prototype._$2b.call(this,t),this._$32())){var o=this.getTargetBaseDataID();if(r._$8r==W._$ur&&(r._$8r=t.getBaseDataIndex(o)),r._$8r<0)at._$so&&_._$li("_$L _$0P _$G :: %s",o);else{var n=t.getBaseData(r._$8r),s=t._$q2(r._$8r);null==n||s._$x2()?r._$AT=!1:(n._$nb(t,s,r._$Cr,r._$hr,this._$d0,U._$i2,U._$No),r._$AT=!0),r.baseOpacity=s.getTotalOpacity()}}}catch(t){throw t}},lt.prototype.draw=function(t,i,e){if(this!=e._$GT()&&console.log("### assert!! ### "),!e._$IS[0]){var r=e,o=this._$LP;o<0&&(o=1);var n=this.getOpacity(i,r)*e._$VS*e.baseOpacity,s=null!=r._$hr?r._$hr:r._$Cr;t.setClipBufPre_clipContextForDraw(e.clipBufPre_clipContext),t._$WP(this.culling),t._$Uo(o,3*this._$Yo,this._$BP,s,this._$Qi,n,this._$6s,r)}},lt.prototype.dump=function(){console.log(" _$yi( %d ) , _$d0( %d ) , _$Yo( %d ) \n",this._$LP,this._$d0,this._$Yo),console.log(" _$Oi _$di = { ");for(var t=0;tstartMotion() / start _$K _$3 (m%d)\n",r,e._$sr));if(null==t)return-1;e=new gt,e._$w0=t,this.motions.push(e);var n=e._$sr;return this._$eb&&_._$Ji("MotionQueueManager[size:%2d]->startMotion() / new _$w0 (m%d)\n",r,n),n},ct.prototype.updateParam=function(t){try{for(var i=!1,e=0;eupdateParam() / _$T0 _$w0 (m%d)\n",this.motions.length-1,r._$sr),this.motions.splice(e,1),e--)):(this.motions=this.motions.splice(e,1),e--)}else this.motions.splice(e,1),e--}return i}catch(t){return _._$li(t),!0}},ct.prototype.isFinished=function(t){if(arguments.length>=1){for(var i=0;i.9&&at.EXPAND_W,this.gl);if(null==this.gl)throw new Error("gl is null");var h=1*this._$C0*n,$=1*this._$tT*n,l=1*this._$WL*n,u=this._$lT*n;if(null!=this.clipBufPre_clipContextMask){a.frontFace(a.CCW),a.useProgram(this.shaderProgram),this._$vS=Tt(a,this._$vS,r),this._$no=Pt(a,this._$no,e),a.enableVertexAttribArray(this.a_position_Loc),a.vertexAttribPointer(this.a_position_Loc,2,a.FLOAT,!1,0,0),this._$NT=Tt(a,this._$NT,o),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,this.textures[t]),a.uniform1i(this.s_texture0_Loc,1),a.enableVertexAttribArray(this.a_texCoord_Loc),a.vertexAttribPointer(this.a_texCoord_Loc,2,a.FLOAT,!1,0,0),a.uniformMatrix4fv(this.u_matrix_Loc,!1,this.getClipBufPre_clipContextMask().matrixForMask);var p=this.getClipBufPre_clipContextMask().layoutChannelNo,f=this.getChannelFlagAsColor(p);a.uniform4f(this.u_channelFlag,f.r,f.g,f.b,f.a);var c=this.getClipBufPre_clipContextMask().layoutBounds;a.uniform4f(this.u_baseColor_Loc,2*c.x-1,2*c.y-1,2*c._$EL()-1,2*c._$5T()-1),a.uniform1i(this.u_maskFlag_Loc,!0)}else if(null!=this.getClipBufPre_clipContextDraw()){a.useProgram(this.shaderProgramOff),this._$vS=Tt(a,this._$vS,r),this._$no=Pt(a,this._$no,e),a.enableVertexAttribArray(this.a_position_Loc_Off),a.vertexAttribPointer(this.a_position_Loc_Off,2,a.FLOAT,!1,0,0),this._$NT=Tt(a,this._$NT,o),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,this.textures[t]),a.uniform1i(this.s_texture0_Loc_Off,1),a.enableVertexAttribArray(this.a_texCoord_Loc_Off),a.vertexAttribPointer(this.a_texCoord_Loc_Off,2,a.FLOAT,!1,0,0),a.uniformMatrix4fv(this.u_clipMatrix_Loc_Off,!1,this.getClipBufPre_clipContextDraw().matrixForDraw),a.uniformMatrix4fv(this.u_matrix_Loc_Off,!1,this.matrix4x4),a.activeTexture(a.TEXTURE2),a.bindTexture(a.TEXTURE_2D,at.fTexture[this.glno]),a.uniform1i(this.s_texture1_Loc_Off,2);var p=this.getClipBufPre_clipContextDraw().layoutChannelNo,f=this.getChannelFlagAsColor(p);a.uniform4f(this.u_channelFlag_Loc_Off,f.r,f.g,f.b,f.a),a.uniform4f(this.u_baseColor_Loc_Off,h,$,l,u)}else a.useProgram(this.shaderProgram),this._$vS=Tt(a,this._$vS,r),this._$no=Pt(a,this._$no,e),a.enableVertexAttribArray(this.a_position_Loc),a.vertexAttribPointer(this.a_position_Loc,2,a.FLOAT,!1,0,0),this._$NT=Tt(a,this._$NT,o),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,this.textures[t]),a.uniform1i(this.s_texture0_Loc,1),a.enableVertexAttribArray(this.a_texCoord_Loc),a.vertexAttribPointer(this.a_texCoord_Loc,2,a.FLOAT,!1,0,0),a.uniformMatrix4fv(this.u_matrix_Loc,!1,this.matrix4x4),a.uniform4f(this.u_baseColor_Loc,h,$,l,u),a.uniform1i(this.u_maskFlag_Loc,!1);this.culling?this.gl.enable(a.CULL_FACE):this.gl.disable(a.CULL_FACE),this.gl.enable(a.BLEND);var g,y,d,m;if(null!=this.clipBufPre_clipContextMask)g=a.ONE,y=a.ONE_MINUS_SRC_ALPHA,d=a.ONE,m=a.ONE_MINUS_SRC_ALPHA;else switch(s){case lt._$ms:g=a.ONE,y=a.ONE_MINUS_SRC_ALPHA,d=a.ONE,m=a.ONE_MINUS_SRC_ALPHA;break;case lt._$ns:g=a.ONE,y=a.ONE,d=a.ZERO,m=a.ONE;break;case lt._$_s:g=a.DST_COLOR,y=a.ONE_MINUS_SRC_ALPHA,d=a.ZERO,m=a.ONE}a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(g,y,d,m),this.anisotropyExt&&a.texParameteri(a.TEXTURE_2D,this.anisotropyExt.TEXTURE_MAX_ANISOTROPY_EXT,this.maxAnisotropy);var T=e.length;a.drawElements(a.TRIANGLES,T,a.UNSIGNED_SHORT,0),a.bindTexture(a.TEXTURE_2D,null)}},mt.prototype._$Rs=function(){throw new Error("_$Rs")},mt.prototype._$Ds=function(t){throw new Error("_$Ds")},mt.prototype._$K2=function(){for(var t=0;t=48){var r=G._$9o(t);return null!=r?(r._$F0(this),r):null}switch(t){case 1:return this._$bT();case 10:return new n(this._$6L(),!0);case 11:return new v(this._$mP(),this._$mP(),this._$mP(),this._$mP());case 12:return new v(this._$_T(),this._$_T(),this._$_T(),this._$_T());case 13:return new L(this._$mP(),this._$mP());case 14:return new L(this._$_T(),this._$_T());case 15:for(var o=this._$3L(),e=new Array(o),s=0;s>7-this._$hL++&1)},vt.prototype._$zT=function(){0!=this._$hL&&(this._$hL=0)},St.prototype._$wP=function(t,i,e){for(var r=0;rMath.PI;)e-=2*Math.PI;return e},Lt._$9=function(t){return Math.sin(t)},Lt.fcos=function(t){return Math.cos(t)},Mt.prototype._$u2=function(){return this._$IS[0]},Mt.prototype._$yo=function(){return this._$AT&&!this._$IS[0]},Mt.prototype._$GT=function(){return this._$e0},Et._$W2=0,Et.SYSTEM_INFO=null,Et.USER_AGENT=navigator.userAgent,Et.isIPhone=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isIPhone},Et.isIOS=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isIPhone||Et.SYSTEM_INFO._isIPad},Et.isAndroid=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isAndroid},Et.getOSVersion=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO.version},Et.getOS=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isIPhone||Et.SYSTEM_INFO._isIPad?"iOS":Et.SYSTEM_INFO._isAndroid?"Android":"_$Q0 OS"},Et.setup=function(){function t(t,i){for(var e=t.substring(i).split(/[ _,;\.]/),r=0,o=0;o<=2&&!isNaN(e[o]);o++){var n=parseInt(e[o]);if(n<0||n>999){_._$li("err : "+n+" @UtHtml5.setup()"),r=0;break}r+=n*Math.pow(1e3,2-o)}return r}var i,e=Et.USER_AGENT,r=Et.SYSTEM_INFO={userAgent:e};if((i=e.indexOf("iPhone OS "))>=0)r.os="iPhone",r._isIPhone=!0,r.version=t(e,i+"iPhone OS ".length);else if((i=e.indexOf("iPad"))>=0){if((i=e.indexOf("CPU OS"))<0)return void _._$li(" err : "+e+" @UtHtml5.setup()");r.os="iPad",r._isIPad=!0,r.version=t(e,i+"CPU OS ".length)}else(i=e.indexOf("Android"))>=0?(r.os="Android",r._isAndroid=!0,r.version=t(e,i+"Android ".length)):(r.os="-",r.version=-1)},window.UtSystem=w,window.UtDebug=_,window.LDTransform=yt,window.LDGL=nt,window.Live2D=at,window.Live2DModelWebGL=ft,window.Live2DModelJS=q,window.Live2DMotion=J,window.MotionQueueManager=ct,window.PhysicsHair=f,window.AMotion=s,window.PartsDataID=$,window.DrawDataID=F,window.BaseDataID=dt,window.ParamID=u,at.init();var At=!1}()}).call(i,e(10))},function(t,i){t.exports={import:function(){throw new Error("System.import cannot be used indirectly")}}},function(t,i,e){t.exports=e(4)}]); -//# sourceMappingURL=bundle.js.map \ No newline at end of file +!function(a){function t(T){if(n[T])return n[T].exports;var l=n[T]={i:T,l:!1,exports:{}};return a[T].call(l.exports,l,l.exports,t),l.l=!0,l.exports}var n={};t.m=a,t.c=n,t.i=function(a){return a},t.d=function(a,n,T){t.o(a,n)||Object.defineProperty(a,n,{configurable:!1,enumerable:!0,get:T})},t.n=function(a){var n=a&&a.__esModule?function(){return a.default}:function(){return a};return t.d(n,"a",n),n},t.o=function(a,t){return Object.prototype.hasOwnProperty.call(a,t)},t.p="",t(t.s=11)}([/*!************************************!*\ + !*** ./src/lib/Live2DFramework.js ***! + \************************************/ +function(module,exports,__webpack_require__){"use strict";eval('\n\n/**\r\n * EYHN 基于 live2d 官方 Live2DFramework.js 修改\r\n * \r\n * Copyright © 2016 - 2017 EYHN\r\n */\n//============================================================\n//============================================================\n// class L2DBaseModel \n//============================================================\n//============================================================\nfunction L2DBaseModel() {\n this.live2DModel = null; // ALive2DModel\n this.modelMatrix = null; // L2DModelMatrix\n this.eyeBlink = null; // L2DEyeBlink\n this.physics = null; // L2DPhysics\n this.pose = null; // L2DPose\n this.debugMode = false;\n this.initialized = false;\n this.updating = false;\n this.alpha = 1;\n this.accAlpha = 0;\n this.lipSync = false;\n this.lipSyncValue = 0;\n this.accelX = 0;\n this.accelY = 0;\n this.accelZ = 0;\n this.dragX = 0;\n this.dragY = 0;\n this.startTimeMSec = null;\n this.mainMotionManager = new L2DMotionManager(); //L2DMotionManager\n this.expressionManager = new L2DMotionManager(); //L2DMotionManager\n this.motions = {};\n this.expressions = {};\n\n this.isTexLoaded = false;\n}\n\nvar texCounter = 0;\n\n//============================================================\n// L2DBaseModel # getModelMatrix()\n//============================================================\nL2DBaseModel.prototype.getModelMatrix = function () {\n return this.modelMatrix;\n};\n\n//============================================================\n// L2DBaseModel # setAlpha()\n//============================================================\nL2DBaseModel.prototype.setAlpha = function (a /*float*/) {\n if (a > 0.999) a = 1;\n if (a < 0.001) a = 0;\n this.alpha = a;\n};\n\n//============================================================\n// L2DBaseModel # getAlpha()\n//============================================================\nL2DBaseModel.prototype.getAlpha = function () {\n return this.alpha;\n};\n\n//============================================================\n// L2DBaseModel # isInitialized()\n//============================================================\nL2DBaseModel.prototype.isInitialized = function () {\n return this.initialized;\n};\n\n//============================================================\n// L2DBaseModel # setInitialized()\n//============================================================\nL2DBaseModel.prototype.setInitialized = function (v /*boolean*/) {\n this.initialized = v;\n};\n\n//============================================================\n// L2DBaseModel # isUpdating()\n//============================================================\nL2DBaseModel.prototype.isUpdating = function () {\n return this.updating;\n};\n\n//============================================================\n// L2DBaseModel # setUpdating()\n//============================================================\nL2DBaseModel.prototype.setUpdating = function (v /*boolean*/) {\n this.updating = v;\n};\n\n//============================================================\n// L2DBaseModel # getLive2DModel()\n//============================================================\nL2DBaseModel.prototype.getLive2DModel = function () {\n return this.live2DModel;\n};\n\n//============================================================\n// L2DBaseModel # setLipSync()\n//============================================================\nL2DBaseModel.prototype.setLipSync = function (v /*boolean*/) {\n this.lipSync = v;\n};\n\n//============================================================\n// L2DBaseModel # setLipSyncValue()\n//============================================================\nL2DBaseModel.prototype.setLipSyncValue = function (v /*float*/) {\n this.lipSyncValue = v;\n};\n\n//============================================================\n// L2DBaseModel # setAccel()\n//============================================================\nL2DBaseModel.prototype.setAccel = function (x /*float*/, y /*float*/, z /*float*/) {\n this.accelX = x;\n this.accelY = y;\n this.accelZ = z;\n};\n\n//============================================================\n// L2DBaseModel # setDrag()\n//============================================================\nL2DBaseModel.prototype.setDrag = function (x /*float*/, y /*float*/) {\n this.dragX = x;\n this.dragY = y;\n};\n\n//============================================================\n// L2DBaseModel # getMainMotionManager()\n//============================================================\nL2DBaseModel.prototype.getMainMotionManager = function () {\n return this.mainMotionManager;\n};\n\n//============================================================\n// L2DBaseModel # getExpressionManager()\n//============================================================\nL2DBaseModel.prototype.getExpressionManager = function () {\n return this.expressionManager;\n};\n\n//============================================================\n// L2DBaseModel # loadModelData()\n//============================================================\nL2DBaseModel.prototype.loadModelData = function (path /*String*/, callback) {\n /*\r\n if( this.live2DModel != null ) {\r\n this.live2DModel.deleteTextures();\r\n }\r\n */\n var pm = Live2DFramework.getPlatformManager(); //IPlatformManager\n if (this.debugMode) pm.log("Load model : " + path);\n\n var thisRef = this;\n pm.loadLive2DModel(path, function (l2dModel) {\n thisRef.live2DModel = l2dModel;\n thisRef.live2DModel.saveParam();\n\n var _err = Live2D.getError();\n\n if (_err != 0) {\n console.error("Error : Failed to loadModelData().");\n return;\n }\n\n thisRef.modelMatrix = new L2DModelMatrix(thisRef.live2DModel.getCanvasWidth(), thisRef.live2DModel.getCanvasHeight()); //L2DModelMatrix\n thisRef.modelMatrix.setWidth(2);\n thisRef.modelMatrix.setCenterPosition(0, 0);\n\n callback(thisRef.live2DModel);\n });\n};\n\n//============================================================\n// L2DBaseModel # loadTexture()\n//============================================================\nL2DBaseModel.prototype.loadTexture = function (no /*int*/, path /*String*/, callback) {\n texCounter++;\n\n var pm = Live2DFramework.getPlatformManager(); //IPlatformManager\n\n if (this.debugMode) pm.log("Load Texture : " + path);\n\n var thisRef = this;\n pm.loadTexture(this.live2DModel, no, path, function () {\n texCounter--;\n if (texCounter == 0) thisRef.isTexLoaded = true;\n if (typeof callback == "function") callback();\n });\n};\n\n//============================================================\n// L2DBaseModel # loadMotion()\n//============================================================\nL2DBaseModel.prototype.loadMotion = function (name /*String*/, path /*String*/, callback) {\n var pm = Live2DFramework.getPlatformManager(); //IPlatformManager\n\n if (this.debugMode) pm.log("Load Motion : " + path);\n\n var motion = null; //Live2DMotion\n\n var thisRef = this;\n pm.loadBytes(path, function (buf) {\n motion = Live2DMotion.loadMotion(buf);\n if (name != null) {\n thisRef.motions[name] = motion;\n }\n callback(motion);\n });\n};\n\n//============================================================\n// L2DBaseModel # loadExpression()\n//============================================================\nL2DBaseModel.prototype.loadExpression = function (name /*String*/, path /*String*/, callback) {\n var pm = Live2DFramework.getPlatformManager(); //IPlatformManager\n\n if (this.debugMode) pm.log("Load Expression : " + path);\n\n var thisRef = this;\n pm.loadBytes(path, function (buf) {\n if (name != null) {\n thisRef.expressions[name] = L2DExpressionMotion.loadJson(buf);\n }\n if (typeof callback == "function") callback();\n });\n};\n\n//============================================================\n// L2DBaseModel # loadPose()\n//============================================================\nL2DBaseModel.prototype.loadPose = function (path /*String*/, callback) {\n var pm = Live2DFramework.getPlatformManager(); //IPlatformManager\n if (this.debugMode) pm.log("Load Pose : " + path);\n var thisRef = this;\n try {\n pm.loadBytes(path, function (buf) {\n thisRef.pose = L2DPose.load(buf);\n if (typeof callback == "function") callback();\n });\n } catch (e) {\n console.warn(e);\n }\n};\n\n//============================================================\n// L2DBaseModel # loadPhysics()\n//============================================================\nL2DBaseModel.prototype.loadPhysics = function (path /*String*/) {\n var pm = Live2DFramework.getPlatformManager(); //IPlatformManager\n if (this.debugMode) pm.log("Load Physics : " + path);\n var thisRef = this;\n try {\n pm.loadBytes(path, function (buf) {\n thisRef.physics = L2DPhysics.load(buf);\n });\n } catch (e) {\n console.warn(e);\n }\n};\n\n//============================================================\n// L2DBaseModel # hitTestSimple()\n//============================================================\nL2DBaseModel.prototype.hitTestSimple = function (drawID, testX, testY) {\n var drawIndex = this.live2DModel.getDrawDataIndex(drawID);\n\n if (drawIndex < 0) return false;\n\n var points = this.live2DModel.getTransformedPoints(drawIndex);\n var left = this.live2DModel.getCanvasWidth();\n var right = 0;\n var top = this.live2DModel.getCanvasHeight();\n var bottom = 0;\n\n for (var j = 0; j < points.length; j = j + 2) {\n var x = points[j];\n var y = points[j + 1];\n\n if (x < left) left = x;\n if (x > right) right = x;\n if (y < top) top = y;\n if (y > bottom) bottom = y;\n }\n var tx = this.modelMatrix.invertTransformX(testX);\n var ty = this.modelMatrix.invertTransformY(testY);\n\n return left <= tx && tx <= right && top <= ty && ty <= bottom;\n};\n\n/**\r\n *\r\n * You can modify and use this source freely\r\n * only for the development of application related Live2D.\r\n *\r\n * (c) Live2D Inc. All rights reserved.\r\n */\n\n//============================================================\n//============================================================\n// class L2DExpressionMotion extends AMotion\n//============================================================\n//============================================================\nfunction L2DExpressionMotion() {\n AMotion.prototype.constructor.call(this);\n this.paramList = new Array(); //ArrayList\n}\n\nL2DExpressionMotion.prototype = new AMotion(); // L2DExpressionMotion extends AMotion\n\n//============================================================\nL2DExpressionMotion.EXPRESSION_DEFAULT = "DEFAULT";\nL2DExpressionMotion.TYPE_SET = 0;\nL2DExpressionMotion.TYPE_ADD = 1;\nL2DExpressionMotion.TYPE_MULT = 2;\n\n//============================================================\n// static L2DExpressionMotion.loadJson()\n//============================================================\nL2DExpressionMotion.loadJson = function (buf) {\n var ret = new L2DExpressionMotion();\n\n var pm = Live2DFramework.getPlatformManager();\n var json = pm.jsonParseFromBytes(buf);\n\n ret.setFadeIn(parseInt(json.fade_in) > 0 ? parseInt(json.fade_in) : 1000);\n ret.setFadeOut(parseInt(json.fade_out) > 0 ? parseInt(json.fade_out) : 1000);\n\n if (json.params == null) {\n return ret;\n }\n\n var params = json.params;\n var paramNum = params.length;\n ret.paramList = []; //ArrayList\n for (var i = 0; i < paramNum; i++) {\n var param = params[i];\n var paramID = param.id.toString();\n var value = parseFloat(param.val);\n var calcTypeInt = L2DExpressionMotion.TYPE_ADD;\n var calc = param.calc != null ? param.calc.toString() : "add";\n if (calc === "add") {\n calcTypeInt = L2DExpressionMotion.TYPE_ADD;\n } else if (calc === "mult") {\n calcTypeInt = L2DExpressionMotion.TYPE_MULT;\n } else if (calc === "set") {\n calcTypeInt = L2DExpressionMotion.TYPE_SET;\n } else {\n calcTypeInt = L2DExpressionMotion.TYPE_ADD;\n }\n if (calcTypeInt == L2DExpressionMotion.TYPE_ADD) {\n var defaultValue = param.def == null ? 0 : parseFloat(param.def);\n value = value - defaultValue;\n } else if (calcTypeInt == L2DExpressionMotion.TYPE_MULT) {\n var defaultValue = param.def == null ? 1 : parseFloat(param.def);\n if (defaultValue == 0) defaultValue = 1;\n value = value / defaultValue;\n }\n\n var item = new L2DExpressionParam();\n item.id = paramID;\n item.type = calcTypeInt;\n item.value = value;\n\n ret.paramList.push(item);\n }\n\n return ret;\n};\n\n//============================================================\n// L2DExpressionMotion # updateParamExe()\n//============================================================\nL2DExpressionMotion.prototype.updateParamExe = function (model /*ALive2DModel*/, timeMSec /*long*/, weight /*float*/, motionQueueEnt /*MotionQueueEnt*/) {\n for (var i = this.paramList.length - 1; i >= 0; --i) {\n var param = this.paramList[i]; //L2DExpressionParam\n // if (!param || !param.type) continue;\n if (param.type == L2DExpressionMotion.TYPE_ADD) {\n model.addToParamFloat(param.id, param.value, weight);\n } else if (param.type == L2DExpressionMotion.TYPE_MULT) {\n model.multParamFloat(param.id, param.value, weight);\n } else if (param.type == L2DExpressionMotion.TYPE_SET) {\n model.setParamFloat(param.id, param.value, weight);\n }\n }\n};\n\n//============================================================\n//============================================================\n// class L2DExpressionParam \n//============================================================\n//============================================================\nfunction L2DExpressionParam() {\n this.id = "";\n this.type = -1;\n this.value = null;\n}\n\n/**\r\n *\r\n * You can modify and use this source freely\r\n * only for the development of application related Live2D.\r\n *\r\n * (c) Live2D Inc. All rights reserved.\r\n */\n\n//============================================================\n//============================================================\n// class L2DEyeBlink \n//============================================================\n//============================================================\nfunction L2DEyeBlink() {\n this.nextBlinkTime = null /* TODO NOT INIT */; // \n this.stateStartTime = null /* TODO NOT INIT */; // \n this.blinkIntervalMsec = null /* TODO NOT INIT */; // \n this.eyeState = EYE_STATE.STATE_FIRST;\n this.blinkIntervalMsec = 4000;\n this.closingMotionMsec = 100;\n this.closedMotionMsec = 50;\n this.openingMotionMsec = 150;\n this.closeIfZero = true;\n this.eyeID_L = "PARAM_EYE_L_OPEN";\n this.eyeID_R = "PARAM_EYE_R_OPEN";\n}\n\n//============================================================\n// L2DEyeBlink # calcNextBlink()\n//============================================================\nL2DEyeBlink.prototype.calcNextBlink = function () {\n var time /*long*/ = UtSystem.getUserTimeMSec();\n var r /*Number*/ = Math.random();\n return (/*(long)*/time + r * (2 * this.blinkIntervalMsec - 1)\n );\n};\n\n//============================================================\n// L2DEyeBlink # setInterval()\n//============================================================\nL2DEyeBlink.prototype.setInterval = function (blinkIntervalMsec /*int*/) {\n this.blinkIntervalMsec = blinkIntervalMsec;\n};\n\n//============================================================\n// L2DEyeBlink # setEyeMotion()\n//============================================================\nL2DEyeBlink.prototype.setEyeMotion = function (closingMotionMsec /*int*/, closedMotionMsec /*int*/, openingMotionMsec /*int*/) {\n this.closingMotionMsec = closingMotionMsec;\n this.closedMotionMsec = closedMotionMsec;\n this.openingMotionMsec = openingMotionMsec;\n};\n\n//============================================================\n// L2DEyeBlink # updateParam()\n//============================================================\nL2DEyeBlink.prototype.updateParam = function (model /*ALive2DModel*/) {\n var time /*:long*/ = UtSystem.getUserTimeMSec();\n var eyeParamValue /*:Number*/;\n var t /*:Number*/ = 0;\n switch (this.eyeState) {\n case EYE_STATE.STATE_CLOSING:\n t = (time - this.stateStartTime) / this.closingMotionMsec;\n if (t >= 1) {\n t = 1;\n this.eyeState = EYE_STATE.STATE_CLOSED;\n this.stateStartTime = time;\n }\n eyeParamValue = 1 - t;\n break;\n case EYE_STATE.STATE_CLOSED:\n t = (time - this.stateStartTime) / this.closedMotionMsec;\n if (t >= 1) {\n this.eyeState = EYE_STATE.STATE_OPENING;\n this.stateStartTime = time;\n }\n eyeParamValue = 0;\n break;\n case EYE_STATE.STATE_OPENING:\n t = (time - this.stateStartTime) / this.openingMotionMsec;\n if (t >= 1) {\n t = 1;\n this.eyeState = EYE_STATE.STATE_INTERVAL;\n this.nextBlinkTime = this.calcNextBlink();\n }\n eyeParamValue = t;\n break;\n case EYE_STATE.STATE_INTERVAL:\n if (this.nextBlinkTime < time) {\n this.eyeState = EYE_STATE.STATE_CLOSING;\n this.stateStartTime = time;\n }\n eyeParamValue = 1;\n break;\n case EYE_STATE.STATE_FIRST:\n default:\n this.eyeState = EYE_STATE.STATE_INTERVAL;\n this.nextBlinkTime = this.calcNextBlink();\n eyeParamValue = 1;\n break;\n }\n if (!this.closeIfZero) eyeParamValue = -eyeParamValue;\n model.setParamFloat(this.eyeID_L, eyeParamValue);\n model.setParamFloat(this.eyeID_R, eyeParamValue);\n};\n\n//== enum EYE_STATE ==\nvar EYE_STATE = function EYE_STATE() {};\n\nEYE_STATE.STATE_FIRST = "STATE_FIRST";\nEYE_STATE.STATE_INTERVAL = "STATE_INTERVAL";\nEYE_STATE.STATE_CLOSING = "STATE_CLOSING";\nEYE_STATE.STATE_CLOSED = "STATE_CLOSED";\nEYE_STATE.STATE_OPENING = "STATE_OPENING";\n/**\r\n *\r\n * You can modify and use this source freely\r\n * only for the development of application related Live2D.\r\n *\r\n * (c) Live2D Inc. All rights reserved.\r\n */\n\n//============================================================\n//============================================================\n// class L2DMatrix44 \n//============================================================\n//============================================================\nfunction L2DMatrix44() {\n this.tr = new Float32Array(16); // \n this.identity();\n}\n\n//============================================================\n// static L2DMatrix44.mul()\n//============================================================\nL2DMatrix44.mul = function (a /*float[]*/, b /*float[]*/, dst /*float[]*/) {\n var c = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n var n = 4;\n var i, j, k;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n for (k = 0; k < n; k++) {\n c[i + j * 4] += a[i + k * 4] * b[k + j * 4];\n }\n }\n }\n for (i = 0; i < 16; i++) {\n dst[i] = c[i];\n }\n};\n\n//============================================================\n// L2DMatrix44 # identity()\n//============================================================\nL2DMatrix44.prototype.identity = function () {\n for (var i /*:int*/ = 0; i < 16; i++) {\n this.tr[i] = i % 5 == 0 ? 1 : 0;\n }\n};\n\n//============================================================\n// L2DMatrix44 # getArray()\n//============================================================\nL2DMatrix44.prototype.getArray = function () {\n return this.tr;\n};\n\n//============================================================\n// L2DMatrix44 # getCopyMatrix()\n//============================================================\nL2DMatrix44.prototype.getCopyMatrix = function () {\n return new Float32Array(this.tr); // this.tr.clone();\n};\n\n//============================================================\n// L2DMatrix44 # setMatrix()\n//============================================================\nL2DMatrix44.prototype.setMatrix = function (tr /*float[]*/) {\n if (this.tr == null || this.tr.length != this.tr.length) return;\n for (var i /*:int*/ = 0; i < 16; i++) {\n this.tr[i] = tr[i];\n }\n};\n\n//============================================================\n// L2DMatrix44 # getScaleX()\n//============================================================\nL2DMatrix44.prototype.getScaleX = function () {\n return this.tr[0];\n};\n\n//============================================================\n// L2DMatrix44 # getScaleY()\n//============================================================\nL2DMatrix44.prototype.getScaleY = function () {\n return this.tr[5];\n};\n\n//============================================================\n// L2DMatrix44 # transformX()\n//============================================================\nL2DMatrix44.prototype.transformX = function (src /*float*/) {\n return this.tr[0] * src + this.tr[12];\n};\n\n//============================================================\n// L2DMatrix44 # transformY()\n//============================================================\nL2DMatrix44.prototype.transformY = function (src /*float*/) {\n return this.tr[5] * src + this.tr[13];\n};\n\n//============================================================\n// L2DMatrix44 # invertTransformX()\n//============================================================\nL2DMatrix44.prototype.invertTransformX = function (src /*float*/) {\n return (src - this.tr[12]) / this.tr[0];\n};\n\n//============================================================\n// L2DMatrix44 # invertTransformY()\n//============================================================\nL2DMatrix44.prototype.invertTransformY = function (src /*float*/) {\n return (src - this.tr[13]) / this.tr[5];\n};\n\n//============================================================\n// L2DMatrix44 # multTranslate()\n//============================================================\nL2DMatrix44.prototype.multTranslate = function (shiftX /*float*/, shiftY /*float*/) {\n var tr1 = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, shiftX, shiftY, 0, 1];\n L2DMatrix44.mul(tr1, this.tr, this.tr);\n};\n\n//============================================================\n// L2DMatrix44 # translate()\n//============================================================\nL2DMatrix44.prototype.translate = function (x /*float*/, y /*float*/) {\n this.tr[12] = x;\n this.tr[13] = y;\n};\n\n//============================================================\n// L2DMatrix44 # translateX()\n//============================================================\nL2DMatrix44.prototype.translateX = function (x /*float*/) {\n this.tr[12] = x;\n};\n\n//============================================================\n// L2DMatrix44 # translateY()\n//============================================================\nL2DMatrix44.prototype.translateY = function (y /*float*/) {\n this.tr[13] = y;\n};\n\n//============================================================\n// L2DMatrix44 # multScale()\n//============================================================\nL2DMatrix44.prototype.multScale = function (scaleX /*float*/, scaleY /*float*/) {\n var tr1 = [scaleX, 0, 0, 0, 0, scaleY, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n L2DMatrix44.mul(tr1, this.tr, this.tr);\n};\n\n//============================================================\n// L2DMatrix44 # scale()\n//============================================================\nL2DMatrix44.prototype.scale = function (scaleX /*float*/, scaleY /*float*/) {\n this.tr[0] = scaleX;\n this.tr[5] = scaleY;\n};\n/**\r\n *\r\n * You can modify and use this source freely\r\n * only for the development of application related Live2D.\r\n *\r\n * (c) Live2D Inc. All rights reserved.\r\n */\n\n//============================================================\n//============================================================\n// class L2DModelMatrix extends L2DMatrix44\n//============================================================\n//============================================================\nfunction L2DModelMatrix(w /*float*/, h /*float*/) {\n L2DMatrix44.prototype.constructor.call(this);\n this.width = w;\n this.height = h;\n}\n\n//L2DModelMatrix extends L2DMatrix44\nL2DModelMatrix.prototype = new L2DMatrix44();\n\n//============================================================\n// L2DModelMatrix # setPosition()\n//============================================================\nL2DModelMatrix.prototype.setPosition = function (x /*float*/, y /*float*/) {\n this.translate(x, y);\n};\n\n//============================================================\n// L2DModelMatrix # setCenterPosition()\n//============================================================\nL2DModelMatrix.prototype.setCenterPosition = function (x /*float*/, y /*float*/) {\n var w = this.width * this.getScaleX();\n var h = this.height * this.getScaleY();\n this.translate(x - w / 2, y - h / 2);\n};\n\n//============================================================\n// L2DModelMatrix # top()\n//============================================================\nL2DModelMatrix.prototype.top = function (y /*float*/) {\n this.setY(y);\n};\n\n//============================================================\n// L2DModelMatrix # bottom()\n//============================================================\nL2DModelMatrix.prototype.bottom = function (y /*float*/) {\n var h = this.height * this.getScaleY();\n this.translateY(y - h);\n};\n\n//============================================================\n// L2DModelMatrix # left()\n//============================================================\nL2DModelMatrix.prototype.left = function (x /*float*/) {\n this.setX(x);\n};\n\n//============================================================\n// L2DModelMatrix # right()\n//============================================================\nL2DModelMatrix.prototype.right = function (x /*float*/) {\n var w = this.width * this.getScaleX();\n this.translateX(x - w);\n};\n\n//============================================================\n// L2DModelMatrix # centerX()\n//============================================================\nL2DModelMatrix.prototype.centerX = function (x /*float*/) {\n var w = this.width * this.getScaleX();\n this.translateX(x - w / 2);\n};\n\n//============================================================\n// L2DModelMatrix # centerY()\n//============================================================\nL2DModelMatrix.prototype.centerY = function (y /*float*/) {\n var h = this.height * this.getScaleY();\n this.translateY(y - h / 2);\n};\n\n//============================================================\n// L2DModelMatrix # setX()\n//============================================================\nL2DModelMatrix.prototype.setX = function (x /*float*/) {\n this.translateX(x);\n};\n\n//============================================================\n// L2DModelMatrix # setY()\n//============================================================\nL2DModelMatrix.prototype.setY = function (y /*float*/) {\n this.translateY(y);\n};\n\n//============================================================\n// L2DModelMatrix # setHeight()\n//============================================================\nL2DModelMatrix.prototype.setHeight = function (h /*float*/) {\n var scaleX = h / this.height;\n var scaleY = -scaleX;\n this.scale(scaleX, scaleY);\n};\n\n//============================================================\n// L2DModelMatrix # setWidth()\n//============================================================\nL2DModelMatrix.prototype.setWidth = function (w /*float*/) {\n var scaleX = w / this.width;\n var scaleY = -scaleX;\n this.scale(scaleX, scaleY);\n};\n\n/**\r\n *\r\n * You can modify and use this source freely\r\n * only for the development of application related Live2D.\r\n *\r\n * (c) Live2D Inc. All rights reserved.\r\n */\n\n//============================================================\n//============================================================\n// class L2DMotionManager extends MotionQueueManager\n//============================================================\n//============================================================\nfunction L2DMotionManager() {\n MotionQueueManager.prototype.constructor.call(this);\n this.currentPriority = null;\n this.reservePriority = null;\n\n this.super = MotionQueueManager.prototype;\n}\n\nL2DMotionManager.prototype = new MotionQueueManager();\n\n//============================================================\n// L2DMotionManager # getCurrentPriority()\n//============================================================\nL2DMotionManager.prototype.getCurrentPriority = function () {\n return this.currentPriority;\n};\n\n//============================================================\n// L2DMotionManager # getReservePriority()\n//============================================================\nL2DMotionManager.prototype.getReservePriority = function () {\n return this.reservePriority;\n};\n\n//============================================================\n// L2DMotionManager # reserveMotion()\n//============================================================\nL2DMotionManager.prototype.reserveMotion = function (priority /*int*/) {\n if (this.reservePriority >= priority) {\n return false;\n }\n if (this.currentPriority >= priority) {\n return false;\n }\n\n this.reservePriority = priority;\n\n return true;\n};\n\n//============================================================\n// L2DMotionManager # setReservePriority()\n//============================================================\nL2DMotionManager.prototype.setReservePriority = function (val /*int*/) {\n this.reservePriority = val;\n};\n\n//============================================================\n// L2DMotionManager # updateParam()\n//============================================================\nL2DMotionManager.prototype.updateParam = function (model /*ALive2DModel*/) {\n var updated = MotionQueueManager.prototype.updateParam.call(this, model);\n\n if (this.isFinished()) {\n this.currentPriority = 0;\n }\n\n return updated;\n};\n\n//============================================================\n// L2DMotionManager # startMotionPrio()\n//============================================================\nL2DMotionManager.prototype.startMotionPrio = function (motion /*AMotion*/, priority /*int*/) {\n if (priority == this.reservePriority) {\n this.reservePriority = 0;\n }\n this.currentPriority = priority;\n return this.startMotion(motion, false);\n};\n\n/**\r\n *\r\n * You can modify and use this source freely\r\n * only for the development of application related Live2D.\r\n *\r\n * (c) Live2D Inc. All rights reserved.\r\n */\n\n//============================================================\n//============================================================\n// class L2DPhysics \n//============================================================\n//============================================================\nfunction L2DPhysics() {\n this.physicsList = new Array(); //ArrayList\n this.startTimeMSec = UtSystem.getUserTimeMSec();\n}\n\n//============================================================\n// static L2DPhysics.load()\n//============================================================\nL2DPhysics.load = function (buf /*byte[]*/) {\n var ret = new L2DPhysics(); //L2DPhysicsL2DPhysics\n var pm = Live2DFramework.getPlatformManager();\n var json = pm.jsonParseFromBytes(buf);\n var params = json.physics_hair;\n var paramNum = params.length;\n for (var i = 0; i < paramNum; i++) {\n var param = params[i]; //Value\n var physics = new PhysicsHair(); //PhysicsHairPhysicsHair\n var setup = param.setup; //Value\n var length = parseFloat(setup.length);\n var resist = parseFloat(setup.regist);\n var mass = parseFloat(setup.mass);\n physics.setup(length, resist, mass);\n var srcList = param.src; //Value\n var srcNum = srcList.length;\n for (var j = 0; j < srcNum; j++) {\n var src = srcList[j]; //Value\n var id = src.id; //String\n var type = PhysicsHair.Src.SRC_TO_X;\n var typeStr = src.ptype; //String\n if (typeStr === "x") {\n type = PhysicsHair.Src.SRC_TO_X;\n } else if (typeStr === "y") {\n type = PhysicsHair.Src.SRC_TO_Y;\n } else if (typeStr === "angle") {\n type = PhysicsHair.Src.SRC_TO_G_ANGLE;\n } else {\n UtDebug.error("live2d", "Invalid parameter:PhysicsHair.Src");\n }\n var scale = parseFloat(src.scale);\n var weight = parseFloat(src.weight);\n physics.addSrcParam(type, id, scale, weight);\n }\n var targetList = param.targets; //Value\n var targetNum = targetList.length;\n for (var j = 0; j < targetNum; j++) {\n var target = targetList[j]; //Value\n var id = target.id; //String\n var type = PhysicsHair.Target.TARGET_FROM_ANGLE;\n var typeStr = target.ptype; //String\n if (typeStr === "angle") {\n type = PhysicsHair.Target.TARGET_FROM_ANGLE;\n } else if (typeStr === "angle_v") {\n type = PhysicsHair.Target.TARGET_FROM_ANGLE_V;\n } else {\n UtDebug.error("live2d", "Invalid parameter:PhysicsHair.Target");\n }\n var scale = parseFloat(target.scale);\n var weight = parseFloat(target.weight);\n physics.addTargetParam(type, id, scale, weight);\n }\n ret.physicsList.push(physics);\n }\n return ret;\n};\n\n//============================================================\n// L2DPhysics # updateParam()\n//============================================================\nL2DPhysics.prototype.updateParam = function (model /*ALive2DModel*/) {\n var timeMSec = UtSystem.getUserTimeMSec() - this.startTimeMSec;\n for (var i = 0; i < this.physicsList.length; i++) {\n this.physicsList[i].update(model, timeMSec);\n }\n};\n\n/**\r\n *\r\n * You can modify and use this source freely\r\n * only for the development of application related Live2D.\r\n *\r\n * (c) Live2D Inc. All rights reserved.\r\n */\n\n//============================================================\n//============================================================\n// class L2DPose \n//============================================================\n//============================================================\nfunction L2DPose() {\n this.lastTime = 0;\n this.lastModel = null; //ALive2DModel\n this.partsGroups = new Array(); //ArrayList\n}\n\n//============================================================\n// static L2DPose.load()\n//============================================================\nL2DPose.load = function (buf /*byte[]*/) {\n var ret = new L2DPose(); //L2DPose\n var pm = Live2DFramework.getPlatformManager();\n var json = pm.jsonParseFromBytes(buf);\n var poseListInfo = json.parts_visible; //Value\n var poseNum = poseListInfo.length;\n for (var i_pose = 0; i_pose < poseNum; i_pose++) {\n var poseInfo = poseListInfo[i_pose]; //Value\n var idListInfo = poseInfo.group; //Value\n var idNum = idListInfo.length;\n var partsGroup /*L2DPartsParam*/ = new Array();\n for (var i_group = 0; i_group < idNum; i_group++) {\n var partsInfo = idListInfo[i_group]; //Value\n var parts = new L2DPartsParam(partsInfo.id); //L2DPartsParamL2DPartsParam\n partsGroup[i_group] = parts;\n if (partsInfo.link == null) continue;\n var linkListInfo = partsInfo.link; //Value\n var linkNum = linkListInfo.length;\n parts.link = new Array(); //ArrayList\n for (var i_link = 0; i_link < linkNum; i_link++) {\n var linkParts = new L2DPartsParam(linkListInfo[i_link]); //L2DPartsParamL2DPartsParam\n parts.link.push(linkParts);\n }\n }\n ret.partsGroups.push(partsGroup);\n }\n\n return ret;\n};\n\n//============================================================\n// L2DPose # updateParam()\n//============================================================\nL2DPose.prototype.updateParam = function (model /*ALive2DModel*/) {\n if (model == null) return;\n\n if (!(model == this.lastModel)) {\n this.initParam(model);\n }\n this.lastModel = model;\n\n var curTime = UtSystem.getUserTimeMSec();\n var deltaTimeSec = this.lastTime == 0 ? 0 : (curTime - this.lastTime) / 1000.0;\n this.lastTime = curTime;\n if (deltaTimeSec < 0) deltaTimeSec = 0;\n for (var i = 0; i < this.partsGroups.length; i++) {\n this.normalizePartsOpacityGroup(model, this.partsGroups[i], deltaTimeSec);\n this.copyOpacityOtherParts(model, this.partsGroups[i]);\n }\n};\n\n//============================================================\n// L2DPose # initParam()\n//============================================================\nL2DPose.prototype.initParam = function (model /*ALive2DModel*/) {\n if (model == null) return;\n for (var i = 0; i < this.partsGroups.length; i++) {\n var partsGroup = this.partsGroups[i]; //L2DPartsParam\n for (var j = 0; j < partsGroup.length; j++) {\n partsGroup[j].initIndex(model);\n var partsIndex = partsGroup[j].partsIndex;\n var paramIndex = partsGroup[j].paramIndex;\n if (partsIndex < 0) continue;\n var v /*:Boolean*/ = model.getParamFloat(paramIndex) != 0;\n model.setPartsOpacity(partsIndex, v ? 1.0 : 0.0);\n model.setParamFloat(paramIndex, v ? 1.0 : 0.0);\n if (partsGroup[j].link == null) continue;\n for (var k = 0; k < partsGroup[j].link.length; k++) {\n partsGroup[j].link[k].initIndex(model);\n }\n }\n }\n};\n\n//============================================================\n// L2DPose # normalizePartsOpacityGroup()\n//============================================================\nL2DPose.prototype.normalizePartsOpacityGroup = function (model /*ALive2DModel*/, partsGroup /*L2DPartsParam[]*/, deltaTimeSec /*float*/) {\n var visibleParts = -1;\n var visibleOpacity = 1.0;\n var CLEAR_TIME_SEC = 0.5;\n var phi = 0.5;\n var maxBackOpacity = 0.15;\n for (var i = 0; i < partsGroup.length; i++) {\n var partsIndex = partsGroup[i].partsIndex;\n var paramIndex = partsGroup[i].paramIndex;\n if (partsIndex < 0) continue;if (model.getParamFloat(paramIndex) != 0) {\n if (visibleParts >= 0) {\n break;\n }\n visibleParts = i;\n visibleOpacity = model.getPartsOpacity(partsIndex);\n visibleOpacity += deltaTimeSec / CLEAR_TIME_SEC;\n if (visibleOpacity > 1) {\n visibleOpacity = 1;\n }\n }\n }\n if (visibleParts < 0) {\n visibleParts = 0;\n visibleOpacity = 1;\n }\n for (var i = 0; i < partsGroup.length; i++) {\n var partsIndex = partsGroup[i].partsIndex;\n if (partsIndex < 0) continue;if (visibleParts == i) {\n model.setPartsOpacity(partsIndex, visibleOpacity);\n } else {\n var opacity = model.getPartsOpacity(partsIndex);\n var a1;\n if (visibleOpacity < phi) {\n a1 = visibleOpacity * (phi - 1) / phi + 1;\n } else {\n a1 = (1 - visibleOpacity) * phi / (1 - phi);\n }\n var backOp = (1 - a1) * (1 - visibleOpacity);\n if (backOp > maxBackOpacity) {\n a1 = 1 - maxBackOpacity / (1 - visibleOpacity);\n }\n if (opacity > a1) {\n opacity = a1;\n }\n model.setPartsOpacity(partsIndex, opacity);\n }\n }\n};\n\n//============================================================\n// L2DPose # copyOpacityOtherParts()\n//============================================================\nL2DPose.prototype.copyOpacityOtherParts = function (model /*ALive2DModel*/, partsGroup /*L2DPartsParam[]*/) {\n for (var i_group = 0; i_group < partsGroup.length; i_group++) {\n var partsParam = partsGroup[i_group]; //L2DPartsParam\n if (partsParam.link == null) continue;\n if (partsParam.partsIndex < 0) continue;\n var opacity = model.getPartsOpacity(partsParam.partsIndex);\n for (var i_link = 0; i_link < partsParam.link.length; i_link++) {\n var linkParts = partsParam.link[i_link]; //L2DPartsParam\n if (linkParts.partsIndex < 0) continue;\n model.setPartsOpacity(linkParts.partsIndex, opacity);\n }\n }\n};\n\n//============================================================\n//============================================================\n// class L2DPartsParam \n//============================================================\n//============================================================\nfunction L2DPartsParam(id /*String*/) {\n this.paramIndex = -1;\n this.partsIndex = -1;\n this.link = null; // ArrayList\n this.id = id;\n}\n\n//============================================================\n// L2DPartsParam # initIndex()\n//============================================================\nL2DPartsParam.prototype.initIndex = function (model /*ALive2DModel*/) {\n this.paramIndex = model.getParamIndex("VISIBLE:" + this.id);\n this.partsIndex = model.getPartsDataIndex(PartsDataID.getID(this.id));\n model.setParamFloat(this.paramIndex, 1);\n};\n/**\r\n *\r\n * You can modify and use this source freely\r\n * only for the development of application related Live2D.\r\n *\r\n * (c) Live2D Inc. All rights reserved.\r\n */\n\n//============================================================\n//============================================================\n// class L2DTargetPoint \n//============================================================\n//============================================================\nfunction L2DTargetPoint() {\n this.EPSILON = 0.01; // 変化の最小値(この値以下は無視される)\n this.faceTargetX = 0;\n this.faceTargetY = 0;\n this.faceX = 0;\n this.faceY = 0;\n this.faceVX = 0;\n this.faceVY = 0;\n this.lastTimeSec = 0;\n}\n\n//============================================================\nL2DTargetPoint.FRAME_RATE = 30;\n\n//============================================================\n// L2DTargetPoint # set()\n//============================================================\nL2DTargetPoint.prototype.setPoint = function (x /*float*/, y /*float*/) {\n this.faceTargetX = x;\n this.faceTargetY = y;\n};\n\n//============================================================\n// L2DTargetPoint # getX()\n//============================================================\nL2DTargetPoint.prototype.getX = function () {\n return this.faceX;\n};\n\n//============================================================\n// L2DTargetPoint # getY()\n//============================================================\nL2DTargetPoint.prototype.getY = function () {\n return this.faceY;\n};\n\n//============================================================\n// L2DTargetPoint # update()\n//============================================================\nL2DTargetPoint.prototype.update = function () {\n var TIME_TO_MAX_SPEED = 0.15;\n var FACE_PARAM_MAX_V = 40.0 / 7.5;\n var MAX_V = FACE_PARAM_MAX_V / L2DTargetPoint.FRAME_RATE;\n if (this.lastTimeSec == 0) {\n this.lastTimeSec = UtSystem.getUserTimeMSec();\n return;\n }\n var curTimeSec = UtSystem.getUserTimeMSec();\n var deltaTimeWeight = (curTimeSec - this.lastTimeSec) * L2DTargetPoint.FRAME_RATE / 1000.0;\n this.lastTimeSec = curTimeSec;\n var FRAME_TO_MAX_SPEED = TIME_TO_MAX_SPEED * L2DTargetPoint.FRAME_RATE;\n var MAX_A = deltaTimeWeight * MAX_V / FRAME_TO_MAX_SPEED;\n var dx = this.faceTargetX - this.faceX;\n var dy = this.faceTargetY - this.faceY;\n // if(dx == 0 && dy == 0) return;\n if (Math.abs(dx) <= this.EPSILON && Math.abs(dy) <= this.EPSILON) return;\n var d = Math.sqrt(dx * dx + dy * dy);\n var vx = MAX_V * dx / d;\n var vy = MAX_V * dy / d;\n var ax = vx - this.faceVX;\n var ay = vy - this.faceVY;\n var a = Math.sqrt(ax * ax + ay * ay);\n if (a < -MAX_A || a > MAX_A) {\n ax *= MAX_A / a;\n ay *= MAX_A / a;\n a = MAX_A;\n }\n this.faceVX += ax;\n this.faceVY += ay;\n {\n var max_v = 0.5 * (Math.sqrt(MAX_A * MAX_A + 16 * MAX_A * d - 8 * MAX_A * d) - MAX_A);\n var cur_v = Math.sqrt(this.faceVX * this.faceVX + this.faceVY * this.faceVY);\n if (cur_v > max_v) {\n this.faceVX *= max_v / cur_v;\n this.faceVY *= max_v / cur_v;\n }\n }\n this.faceX += this.faceVX;\n this.faceY += this.faceVY;\n};\n/**\r\n *\r\n * You can modify and use this source freely\r\n * only for the development of application related Live2D.\r\n *\r\n * (c) Live2D Inc. All rights reserved.\r\n */\n\n//============================================================\n//============================================================\n// class L2DViewMatrix extends L2DMatrix44\n//============================================================\n//============================================================\nfunction L2DViewMatrix() {\n L2DMatrix44.prototype.constructor.call(this);\n this.screenLeft = null;\n this.screenRight = null;\n this.screenTop = null;\n this.screenBottom = null;\n this.maxLeft = null;\n this.maxRight = null;\n this.maxTop = null;\n this.maxBottom = null;\n this.max = Number.MAX_VALUE;\n this.min = 0;\n}\n\nL2DViewMatrix.prototype = new L2DMatrix44(); //L2DViewMatrix extends L2DMatrix44\n\n//============================================================\n// L2DViewMatrix # getMaxScale()\n//============================================================\nL2DViewMatrix.prototype.getMaxScale = function () {\n return this.max;\n};\n\n//============================================================\n// L2DViewMatrix # getMinScale()\n//============================================================\nL2DViewMatrix.prototype.getMinScale = function () {\n return this.min;\n};\n\n//============================================================\n// L2DViewMatrix # setMaxScale()\n//============================================================\nL2DViewMatrix.prototype.setMaxScale = function (v /*float*/) {\n this.max = v;\n};\n\n//============================================================\n// L2DViewMatrix # setMinScale()\n//============================================================\nL2DViewMatrix.prototype.setMinScale = function (v /*float*/) {\n this.min = v;\n};\n\n//============================================================\n// L2DViewMatrix # isMaxScale()\n//============================================================\nL2DViewMatrix.prototype.isMaxScale = function () {\n return this.getScaleX() == this.max;\n};\n\n//============================================================\n// L2DViewMatrix # isMinScale()\n//============================================================\nL2DViewMatrix.prototype.isMinScale = function () {\n return this.getScaleX() == this.min;\n};\n\n//============================================================\n// L2DViewMatrix # adjustTranslate()\n//============================================================\nL2DViewMatrix.prototype.adjustTranslate = function (shiftX /*float*/, shiftY /*float*/) {\n if (this.tr[0] * this.maxLeft + (this.tr[12] + shiftX) > this.screenLeft) shiftX = this.screenLeft - this.tr[0] * this.maxLeft - this.tr[12];\n if (this.tr[0] * this.maxRight + (this.tr[12] + shiftX) < this.screenRight) shiftX = this.screenRight - this.tr[0] * this.maxRight - this.tr[12];\n if (this.tr[5] * this.maxTop + (this.tr[13] + shiftY) < this.screenTop) shiftY = this.screenTop - this.tr[5] * this.maxTop - this.tr[13];\n if (this.tr[5] * this.maxBottom + (this.tr[13] + shiftY) > this.screenBottom) shiftY = this.screenBottom - this.tr[5] * this.maxBottom - this.tr[13];\n\n var tr1 = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, shiftX, shiftY, 0, 1];\n L2DMatrix44.mul(tr1, this.tr, this.tr);\n};\n\n//============================================================\n// L2DViewMatrix # adjustScale()\n//============================================================\nL2DViewMatrix.prototype.adjustScale = function (cx /*float*/, cy /*float*/, scale /*float*/) {\n var targetScale = scale * this.tr[0];\n if (targetScale < this.min) {\n if (this.tr[0] > 0) scale = this.min / this.tr[0];\n } else if (targetScale > this.max) {\n if (this.tr[0] > 0) scale = this.max / this.tr[0];\n }\n var tr1 = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, cx, cy, 0, 1];\n var tr2 = [scale, 0, 0, 0, 0, scale, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n var tr3 = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -cx, -cy, 0, 1];\n L2DMatrix44.mul(tr3, this.tr, this.tr);\n L2DMatrix44.mul(tr2, this.tr, this.tr);\n L2DMatrix44.mul(tr1, this.tr, this.tr);\n};\n\n//============================================================\n// L2DViewMatrix # setScreenRect()\n//============================================================\nL2DViewMatrix.prototype.setScreenRect = function (left /*float*/, right /*float*/, bottom /*float*/, top /*float*/) {\n this.screenLeft = left;\n this.screenRight = right;\n this.screenTop = top;\n this.screenBottom = bottom;\n};\n\n//============================================================\n// L2DViewMatrix # setMaxScreenRect()\n//============================================================\nL2DViewMatrix.prototype.setMaxScreenRect = function (left /*float*/, right /*float*/, bottom /*float*/, top /*float*/) {\n this.maxLeft = left;\n this.maxRight = right;\n this.maxTop = top;\n this.maxBottom = bottom;\n};\n\n//============================================================\n// L2DViewMatrix # getScreenLeft()\n//============================================================\nL2DViewMatrix.prototype.getScreenLeft = function () {\n return this.screenLeft;\n};\n\n//============================================================\n// L2DViewMatrix # getScreenRight()\n//============================================================\nL2DViewMatrix.prototype.getScreenRight = function () {\n return this.screenRight;\n};\n\n//============================================================\n// L2DViewMatrix # getScreenBottom()\n//============================================================\nL2DViewMatrix.prototype.getScreenBottom = function () {\n return this.screenBottom;\n};\n\n//============================================================\n// L2DViewMatrix # getScreenTop()\n//============================================================\nL2DViewMatrix.prototype.getScreenTop = function () {\n return this.screenTop;\n};\n\n//============================================================\n// L2DViewMatrix # getMaxLeft()\n//============================================================\nL2DViewMatrix.prototype.getMaxLeft = function () {\n return this.maxLeft;\n};\n\n//============================================================\n// L2DViewMatrix # getMaxRight()\n//============================================================\nL2DViewMatrix.prototype.getMaxRight = function () {\n return this.maxRight;\n};\n\n//============================================================\n// L2DViewMatrix # getMaxBottom()\n//============================================================\nL2DViewMatrix.prototype.getMaxBottom = function () {\n return this.maxBottom;\n};\n\n//============================================================\n// L2DViewMatrix # getMaxTop()\n//============================================================\nL2DViewMatrix.prototype.getMaxTop = function () {\n return this.maxTop;\n};\n\n/**\r\n *\r\n * You can modify and use this source freely\r\n * only for the development of application related Live2D.\r\n *\r\n * (c) Live2D Inc. All rights reserved.\r\n */\n\n//============================================================\n//============================================================\n// class Live2DFramework \n//============================================================\n//============================================================\nfunction Live2DFramework() {}\n\n//============================================================\nLive2DFramework.platformManager = null;\n\n//============================================================\n// static Live2DFramework.getPlatformManager()\n//============================================================\nLive2DFramework.getPlatformManager = function () {\n return Live2DFramework.platformManager;\n};\n\n//============================================================\n// static Live2DFramework.setPlatformManager()\n//============================================================\nLive2DFramework.setPlatformManager = function (platformManager /*IPlatformManager*/) {\n Live2DFramework.platformManager = platformManager;\n};\n\nmodule.exports = {\n L2DTargetPoint: L2DTargetPoint,\n Live2DFramework: Live2DFramework,\n L2DViewMatrix: L2DViewMatrix,\n L2DPose: L2DPose,\n L2DPartsParam: L2DPartsParam,\n L2DPhysics: L2DPhysics,\n L2DMotionManager: L2DMotionManager,\n L2DModelMatrix: L2DModelMatrix,\n L2DMatrix44: L2DMatrix44,\n EYE_STATE: EYE_STATE,\n L2DEyeBlink: L2DEyeBlink,\n L2DExpressionParam: L2DExpressionParam,\n L2DExpressionMotion: L2DExpressionMotion,\n L2DBaseModel: L2DBaseModel\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvbGliL0xpdmUyREZyYW1ld29yay5qcz9mOTA1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFWUhOIOWfuuS6jiBsaXZlMmQg5a6Y5pa5IExpdmUyREZyYW1ld29yay5qcyDkv67mlLlcclxuICogXHJcbiAqIENvcHlyaWdodCDCqSAyMDE2IC0gMjAxNyBFWUhOXHJcbiAqL1xyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgY2xhc3MgTDJEQmFzZU1vZGVsICAgICAgICAgXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbmZ1bmN0aW9uIEwyREJhc2VNb2RlbCgpIHtcclxuICAgIHRoaXMubGl2ZTJETW9kZWwgPSBudWxsOyAvLyBBTGl2ZTJETW9kZWxcclxuICAgIHRoaXMubW9kZWxNYXRyaXggPSBudWxsOyAvLyBMMkRNb2RlbE1hdHJpeFxyXG4gICAgdGhpcy5leWVCbGluayA9IG51bGw7IC8vIEwyREV5ZUJsaW5rXHJcbiAgICB0aGlzLnBoeXNpY3MgPSBudWxsOyAvLyBMMkRQaHlzaWNzXHJcbiAgICB0aGlzLnBvc2UgPSBudWxsOyAvLyBMMkRQb3NlXHJcbiAgICB0aGlzLmRlYnVnTW9kZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5hbHBoYSA9IDE7XHJcbiAgICB0aGlzLmFjY0FscGhhID0gMDtcclxuICAgIHRoaXMubGlwU3luYyA9IGZhbHNlO1xyXG4gICAgdGhpcy5saXBTeW5jVmFsdWUgPSAwO1xyXG4gICAgdGhpcy5hY2NlbFggPSAwO1xyXG4gICAgdGhpcy5hY2NlbFkgPSAwO1xyXG4gICAgdGhpcy5hY2NlbFogPSAwO1xyXG4gICAgdGhpcy5kcmFnWCA9IDA7XHJcbiAgICB0aGlzLmRyYWdZID0gMDtcclxuICAgIHRoaXMuc3RhcnRUaW1lTVNlYyA9IG51bGw7XHJcbiAgICB0aGlzLm1haW5Nb3Rpb25NYW5hZ2VyID0gbmV3IEwyRE1vdGlvbk1hbmFnZXIoKTsgLy9MMkRNb3Rpb25NYW5hZ2VyXHJcbiAgICB0aGlzLmV4cHJlc3Npb25NYW5hZ2VyID0gbmV3IEwyRE1vdGlvbk1hbmFnZXIoKTsgLy9MMkRNb3Rpb25NYW5hZ2VyXHJcbiAgICB0aGlzLm1vdGlvbnMgPSB7fTtcclxuICAgIHRoaXMuZXhwcmVzc2lvbnMgPSB7fTtcclxuXHJcbiAgICB0aGlzLmlzVGV4TG9hZGVkID0gZmFsc2U7XHJcbn1cclxuXHJcbnZhciB0ZXhDb3VudGVyID0gMDtcclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREJhc2VNb2RlbCAjIGdldE1vZGVsTWF0cml4KClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEQmFzZU1vZGVsLnByb3RvdHlwZS5nZXRNb2RlbE1hdHJpeCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsTWF0cml4O1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRCYXNlTW9kZWwgIyBzZXRBbHBoYSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREJhc2VNb2RlbC5wcm90b3R5cGUuc2V0QWxwaGEgPSBmdW5jdGlvbiAoYS8qZmxvYXQqLykge1xyXG4gICAgaWYgKGEgPiAwLjk5OSkgYSA9IDE7XHJcbiAgICBpZiAoYSA8IDAuMDAxKSBhID0gMDtcclxuICAgIHRoaXMuYWxwaGEgPSBhO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRCYXNlTW9kZWwgIyBnZXRBbHBoYSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREJhc2VNb2RlbC5wcm90b3R5cGUuZ2V0QWxwaGEgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hbHBoYTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEQmFzZU1vZGVsICMgaXNJbml0aWFsaXplZCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREJhc2VNb2RlbC5wcm90b3R5cGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVkO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRCYXNlTW9kZWwgIyBzZXRJbml0aWFsaXplZCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREJhc2VNb2RlbC5wcm90b3R5cGUuc2V0SW5pdGlhbGl6ZWQgPSBmdW5jdGlvbiAodi8qYm9vbGVhbiovKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdjtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEQmFzZU1vZGVsICMgaXNVcGRhdGluZygpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREJhc2VNb2RlbC5wcm90b3R5cGUuaXNVcGRhdGluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnVwZGF0aW5nO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRCYXNlTW9kZWwgIyBzZXRVcGRhdGluZygpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREJhc2VNb2RlbC5wcm90b3R5cGUuc2V0VXBkYXRpbmcgPSBmdW5jdGlvbiAodi8qYm9vbGVhbiovKSB7XHJcbiAgICB0aGlzLnVwZGF0aW5nID0gdjtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEQmFzZU1vZGVsICMgZ2V0TGl2ZTJETW9kZWwoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRCYXNlTW9kZWwucHJvdG90eXBlLmdldExpdmUyRE1vZGVsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGl2ZTJETW9kZWw7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREJhc2VNb2RlbCAjIHNldExpcFN5bmMoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRCYXNlTW9kZWwucHJvdG90eXBlLnNldExpcFN5bmMgPSBmdW5jdGlvbiAodi8qYm9vbGVhbiovKSB7XHJcbiAgICB0aGlzLmxpcFN5bmMgPSB2O1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRCYXNlTW9kZWwgIyBzZXRMaXBTeW5jVmFsdWUoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRCYXNlTW9kZWwucHJvdG90eXBlLnNldExpcFN5bmNWYWx1ZSA9IGZ1bmN0aW9uICh2LypmbG9hdCovKSB7XHJcbiAgICB0aGlzLmxpcFN5bmNWYWx1ZSA9IHY7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREJhc2VNb2RlbCAjIHNldEFjY2VsKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEQmFzZU1vZGVsLnByb3RvdHlwZS5zZXRBY2NlbCA9IGZ1bmN0aW9uICh4LypmbG9hdCovLCB5LypmbG9hdCovLCB6LypmbG9hdCovKSB7XHJcbiAgICB0aGlzLmFjY2VsWCA9IHg7XHJcbiAgICB0aGlzLmFjY2VsWSA9IHk7XHJcbiAgICB0aGlzLmFjY2VsWiA9IHo7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREJhc2VNb2RlbCAjIHNldERyYWcoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRCYXNlTW9kZWwucHJvdG90eXBlLnNldERyYWcgPSBmdW5jdGlvbiAoeC8qZmxvYXQqLywgeS8qZmxvYXQqLykge1xyXG4gICAgdGhpcy5kcmFnWCA9IHg7XHJcbiAgICB0aGlzLmRyYWdZID0geTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEQmFzZU1vZGVsICMgZ2V0TWFpbk1vdGlvbk1hbmFnZXIoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRCYXNlTW9kZWwucHJvdG90eXBlLmdldE1haW5Nb3Rpb25NYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWFpbk1vdGlvbk1hbmFnZXI7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREJhc2VNb2RlbCAjIGdldEV4cHJlc3Npb25NYW5hZ2VyKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEQmFzZU1vZGVsLnByb3RvdHlwZS5nZXRFeHByZXNzaW9uTWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25NYW5hZ2VyO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRCYXNlTW9kZWwgIyBsb2FkTW9kZWxEYXRhKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEQmFzZU1vZGVsLnByb3RvdHlwZS5sb2FkTW9kZWxEYXRhID0gZnVuY3Rpb24gKHBhdGgvKlN0cmluZyovLCBjYWxsYmFjaykge1xyXG4gICAgLypcclxuICAgIGlmKCB0aGlzLmxpdmUyRE1vZGVsICE9IG51bGwgKSB7XHJcbiAgICAgICAgdGhpcy5saXZlMkRNb2RlbC5kZWxldGVUZXh0dXJlcygpO1xyXG4gICAgfVxyXG4gICAgKi9cclxuICAgIHZhciBwbSA9IExpdmUyREZyYW1ld29yay5nZXRQbGF0Zm9ybU1hbmFnZXIoKTsgLy9JUGxhdGZvcm1NYW5hZ2VyXHJcbiAgICBpZiAodGhpcy5kZWJ1Z01vZGUpIHBtLmxvZyhcIkxvYWQgbW9kZWwgOiBcIiArIHBhdGgpO1xyXG5cclxuICAgIHZhciB0aGlzUmVmID0gdGhpcztcclxuICAgIHBtLmxvYWRMaXZlMkRNb2RlbChwYXRoLCBmdW5jdGlvbiAobDJkTW9kZWwpIHtcclxuICAgICAgICB0aGlzUmVmLmxpdmUyRE1vZGVsID0gbDJkTW9kZWw7XHJcbiAgICAgICAgdGhpc1JlZi5saXZlMkRNb2RlbC5zYXZlUGFyYW0oKTtcclxuXHJcbiAgICAgICAgdmFyIF9lcnIgPSBMaXZlMkQuZ2V0RXJyb3IoKTtcclxuXHJcbiAgICAgICAgaWYgKF9lcnIgIT0gMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgOiBGYWlsZWQgdG8gbG9hZE1vZGVsRGF0YSgpLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpc1JlZi5tb2RlbE1hdHJpeCA9IG5ldyBMMkRNb2RlbE1hdHJpeChcclxuICAgICAgICAgICAgdGhpc1JlZi5saXZlMkRNb2RlbC5nZXRDYW52YXNXaWR0aCgpLFxyXG4gICAgICAgICAgICB0aGlzUmVmLmxpdmUyRE1vZGVsLmdldENhbnZhc0hlaWdodCgpKTsgLy9MMkRNb2RlbE1hdHJpeFxyXG4gICAgICAgIHRoaXNSZWYubW9kZWxNYXRyaXguc2V0V2lkdGgoMik7XHJcbiAgICAgICAgdGhpc1JlZi5tb2RlbE1hdHJpeC5zZXRDZW50ZXJQb3NpdGlvbigwLCAwKTtcclxuXHJcbiAgICAgICAgY2FsbGJhY2sodGhpc1JlZi5saXZlMkRNb2RlbCk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREJhc2VNb2RlbCAjIGxvYWRUZXh0dXJlKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEQmFzZU1vZGVsLnByb3RvdHlwZS5sb2FkVGV4dHVyZSA9IGZ1bmN0aW9uIChuby8qaW50Ki8sIHBhdGgvKlN0cmluZyovLCBjYWxsYmFjaykge1xyXG4gICAgdGV4Q291bnRlcisrO1xyXG5cclxuICAgIHZhciBwbSA9IExpdmUyREZyYW1ld29yay5nZXRQbGF0Zm9ybU1hbmFnZXIoKTsgLy9JUGxhdGZvcm1NYW5hZ2VyXHJcblxyXG4gICAgaWYgKHRoaXMuZGVidWdNb2RlKSBwbS5sb2coXCJMb2FkIFRleHR1cmUgOiBcIiArIHBhdGgpO1xyXG5cclxuICAgIHZhciB0aGlzUmVmID0gdGhpcztcclxuICAgIHBtLmxvYWRUZXh0dXJlKHRoaXMubGl2ZTJETW9kZWwsIG5vLCBwYXRoLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGV4Q291bnRlci0tO1xyXG4gICAgICAgIGlmICh0ZXhDb3VudGVyID09IDApIHRoaXNSZWYuaXNUZXhMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gXCJmdW5jdGlvblwiKSBjYWxsYmFjaygpO1xyXG4gICAgfSk7XHJcblxyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRCYXNlTW9kZWwgIyBsb2FkTW90aW9uKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEQmFzZU1vZGVsLnByb3RvdHlwZS5sb2FkTW90aW9uID0gZnVuY3Rpb24gKG5hbWUvKlN0cmluZyovLCBwYXRoIC8qU3RyaW5nKi8sIGNhbGxiYWNrKSB7XHJcbiAgICB2YXIgcG0gPSBMaXZlMkRGcmFtZXdvcmsuZ2V0UGxhdGZvcm1NYW5hZ2VyKCk7IC8vSVBsYXRmb3JtTWFuYWdlclxyXG5cclxuICAgIGlmICh0aGlzLmRlYnVnTW9kZSkgcG0ubG9nKFwiTG9hZCBNb3Rpb24gOiBcIiArIHBhdGgpO1xyXG5cclxuICAgIHZhciBtb3Rpb24gPSBudWxsOyAvL0xpdmUyRE1vdGlvblxyXG5cclxuICAgIHZhciB0aGlzUmVmID0gdGhpcztcclxuICAgIHBtLmxvYWRCeXRlcyhwYXRoLCBmdW5jdGlvbiAoYnVmKSB7XHJcbiAgICAgICAgbW90aW9uID0gTGl2ZTJETW90aW9uLmxvYWRNb3Rpb24oYnVmKTtcclxuICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXNSZWYubW90aW9uc1tuYW1lXSA9IG1vdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FsbGJhY2sobW90aW9uKTtcclxuICAgIH0pO1xyXG5cclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEQmFzZU1vZGVsICMgbG9hZEV4cHJlc3Npb24oKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRCYXNlTW9kZWwucHJvdG90eXBlLmxvYWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5hbWUvKlN0cmluZyovLCBwYXRoIC8qU3RyaW5nKi8sIGNhbGxiYWNrKSB7XHJcbiAgICB2YXIgcG0gPSBMaXZlMkRGcmFtZXdvcmsuZ2V0UGxhdGZvcm1NYW5hZ2VyKCk7IC8vSVBsYXRmb3JtTWFuYWdlclxyXG5cclxuICAgIGlmICh0aGlzLmRlYnVnTW9kZSkgcG0ubG9nKFwiTG9hZCBFeHByZXNzaW9uIDogXCIgKyBwYXRoKTtcclxuXHJcbiAgICB2YXIgdGhpc1JlZiA9IHRoaXM7XHJcbiAgICBwbS5sb2FkQnl0ZXMocGF0aCwgZnVuY3Rpb24gKGJ1Zikge1xyXG4gICAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpc1JlZi5leHByZXNzaW9uc1tuYW1lXSA9IEwyREV4cHJlc3Npb25Nb3Rpb24ubG9hZEpzb24oYnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrKCk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEQmFzZU1vZGVsICMgbG9hZFBvc2UoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRCYXNlTW9kZWwucHJvdG90eXBlLmxvYWRQb3NlID0gZnVuY3Rpb24gKHBhdGggLypTdHJpbmcqLywgY2FsbGJhY2spIHtcclxuICAgIHZhciBwbSA9IExpdmUyREZyYW1ld29yay5nZXRQbGF0Zm9ybU1hbmFnZXIoKTsgLy9JUGxhdGZvcm1NYW5hZ2VyXHJcbiAgICBpZiAodGhpcy5kZWJ1Z01vZGUpIHBtLmxvZyhcIkxvYWQgUG9zZSA6IFwiICsgcGF0aCk7XHJcbiAgICB2YXIgdGhpc1JlZiA9IHRoaXM7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHBtLmxvYWRCeXRlcyhwYXRoLCBmdW5jdGlvbiAoYnVmKSB7XHJcbiAgICAgICAgICAgIHRoaXNSZWYucG9zZSA9IEwyRFBvc2UubG9hZChidWYpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09IFwiZnVuY3Rpb25cIikgY2FsbGJhY2soKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGUpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRCYXNlTW9kZWwgIyBsb2FkUGh5c2ljcygpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREJhc2VNb2RlbC5wcm90b3R5cGUubG9hZFBoeXNpY3MgPSBmdW5jdGlvbiAocGF0aC8qU3RyaW5nKi8pIHtcclxuICAgIHZhciBwbSA9IExpdmUyREZyYW1ld29yay5nZXRQbGF0Zm9ybU1hbmFnZXIoKTsgLy9JUGxhdGZvcm1NYW5hZ2VyXHJcbiAgICBpZiAodGhpcy5kZWJ1Z01vZGUpIHBtLmxvZyhcIkxvYWQgUGh5c2ljcyA6IFwiICsgcGF0aCk7XHJcbiAgICB2YXIgdGhpc1JlZiA9IHRoaXM7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHBtLmxvYWRCeXRlcyhwYXRoLCBmdW5jdGlvbiAoYnVmKSB7XHJcbiAgICAgICAgICAgIHRoaXNSZWYucGh5c2ljcyA9IEwyRFBoeXNpY3MubG9hZChidWYpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREJhc2VNb2RlbCAjIGhpdFRlc3RTaW1wbGUoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRCYXNlTW9kZWwucHJvdG90eXBlLmhpdFRlc3RTaW1wbGUgPSBmdW5jdGlvbiAoZHJhd0lELCB0ZXN0WCwgdGVzdFkpIHtcclxuICAgIHZhciBkcmF3SW5kZXggPSB0aGlzLmxpdmUyRE1vZGVsLmdldERyYXdEYXRhSW5kZXgoZHJhd0lEKTtcclxuXHJcbiAgICBpZiAoZHJhd0luZGV4IDwgMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHZhciBwb2ludHMgPSB0aGlzLmxpdmUyRE1vZGVsLmdldFRyYW5zZm9ybWVkUG9pbnRzKGRyYXdJbmRleCk7XHJcbiAgICB2YXIgbGVmdCA9IHRoaXMubGl2ZTJETW9kZWwuZ2V0Q2FudmFzV2lkdGgoKTtcclxuICAgIHZhciByaWdodCA9IDA7XHJcbiAgICB2YXIgdG9wID0gdGhpcy5saXZlMkRNb2RlbC5nZXRDYW52YXNIZWlnaHQoKTtcclxuICAgIHZhciBib3R0b20gPSAwO1xyXG5cclxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiA9IGogKyAyKSB7XHJcbiAgICAgICAgdmFyIHggPSBwb2ludHNbal07XHJcbiAgICAgICAgdmFyIHkgPSBwb2ludHNbaiArIDFdO1xyXG5cclxuICAgICAgICBpZiAoeCA8IGxlZnQpIGxlZnQgPSB4O1xyXG4gICAgICAgIGlmICh4ID4gcmlnaHQpIHJpZ2h0ID0geDtcclxuICAgICAgICBpZiAoeSA8IHRvcCkgdG9wID0geTtcclxuICAgICAgICBpZiAoeSA+IGJvdHRvbSkgYm90dG9tID0geTtcclxuICAgIH1cclxuICAgIHZhciB0eCA9IHRoaXMubW9kZWxNYXRyaXguaW52ZXJ0VHJhbnNmb3JtWCh0ZXN0WCk7XHJcbiAgICB2YXIgdHkgPSB0aGlzLm1vZGVsTWF0cml4LmludmVydFRyYW5zZm9ybVkodGVzdFkpO1xyXG5cclxuICAgIHJldHVybiAobGVmdCA8PSB0eCAmJiB0eCA8PSByaWdodCAmJiB0b3AgPD0gdHkgJiYgdHkgPD0gYm90dG9tKTtcclxufVxyXG5cclxuLyoqXHJcbiAqXHJcbiAqICBZb3UgY2FuIG1vZGlmeSBhbmQgdXNlIHRoaXMgc291cmNlIGZyZWVseVxyXG4gKiAgb25seSBmb3IgdGhlIGRldmVsb3BtZW50IG9mIGFwcGxpY2F0aW9uIHJlbGF0ZWQgTGl2ZTJELlxyXG4gKlxyXG4gKiAgKGMpIExpdmUyRCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqL1xyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gIGNsYXNzIEwyREV4cHJlc3Npb25Nb3Rpb24gIGV4dGVuZHMgICAgIEFNb3Rpb25cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuZnVuY3Rpb24gTDJERXhwcmVzc2lvbk1vdGlvbigpIHtcclxuICAgIEFNb3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7XHJcbiAgICB0aGlzLnBhcmFtTGlzdCA9IG5ldyBBcnJheSgpOyAvL0FycmF5TGlzdDxMMkRFeHByZXNzaW9uUGFyYW0+XHJcbn1cclxuXHJcbkwyREV4cHJlc3Npb25Nb3Rpb24ucHJvdG90eXBlID0gbmV3IEFNb3Rpb24oKTsgLy8gTDJERXhwcmVzc2lvbk1vdGlvbiBleHRlbmRzIEFNb3Rpb25cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREV4cHJlc3Npb25Nb3Rpb24uRVhQUkVTU0lPTl9ERUZBVUxUID0gXCJERUZBVUxUXCI7XHJcbkwyREV4cHJlc3Npb25Nb3Rpb24uVFlQRV9TRVQgPSAwO1xyXG5MMkRFeHByZXNzaW9uTW90aW9uLlRZUEVfQUREID0gMTtcclxuTDJERXhwcmVzc2lvbk1vdGlvbi5UWVBFX01VTFQgPSAyO1xyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgc3RhdGljIEwyREV4cHJlc3Npb25Nb3Rpb24ubG9hZEpzb24oKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRFeHByZXNzaW9uTW90aW9uLmxvYWRKc29uID0gZnVuY3Rpb24gKGJ1Zikge1xyXG4gICAgdmFyIHJldCA9IG5ldyBMMkRFeHByZXNzaW9uTW90aW9uKCk7XHJcblxyXG4gICAgdmFyIHBtID0gTGl2ZTJERnJhbWV3b3JrLmdldFBsYXRmb3JtTWFuYWdlcigpO1xyXG4gICAgdmFyIGpzb24gPSBwbS5qc29uUGFyc2VGcm9tQnl0ZXMoYnVmKTtcclxuXHJcbiAgICByZXQuc2V0RmFkZUluKHBhcnNlSW50KGpzb24uZmFkZV9pbikgPiAwID8gcGFyc2VJbnQoanNvbi5mYWRlX2luKSA6IDEwMDApO1xyXG4gICAgcmV0LnNldEZhZGVPdXQocGFyc2VJbnQoanNvbi5mYWRlX291dCkgPiAwID8gcGFyc2VJbnQoanNvbi5mYWRlX291dCkgOiAxMDAwKTtcclxuXHJcbiAgICBpZiAoanNvbi5wYXJhbXMgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHBhcmFtcyA9IGpzb24ucGFyYW1zO1xyXG4gICAgdmFyIHBhcmFtTnVtID0gcGFyYW1zLmxlbmd0aDtcclxuICAgIHJldC5wYXJhbUxpc3QgPSBbXTsgLy9BcnJheUxpc3Q8TDJERXhwcmVzc2lvblBhcmFtPlxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbU51bTsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtID0gcGFyYW1zW2ldO1xyXG4gICAgICAgIHZhciBwYXJhbUlEID0gcGFyYW0uaWQudG9TdHJpbmcoKTtcclxuICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZUZsb2F0KHBhcmFtLnZhbCk7XHJcbiAgICAgICAgdmFyIGNhbGNUeXBlSW50ID0gTDJERXhwcmVzc2lvbk1vdGlvbi5UWVBFX0FERDtcclxuICAgICAgICB2YXIgY2FsYyA9IHBhcmFtLmNhbGMgIT0gbnVsbCA/IHBhcmFtLmNhbGMudG9TdHJpbmcoKSA6IFwiYWRkXCI7XHJcbiAgICAgICAgaWYgKGNhbGMgPT09IFwiYWRkXCIpIHtcclxuICAgICAgICAgICAgY2FsY1R5cGVJbnQgPSBMMkRFeHByZXNzaW9uTW90aW9uLlRZUEVfQUREO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYWxjID09PSBcIm11bHRcIikge1xyXG4gICAgICAgICAgICBjYWxjVHlwZUludCA9IEwyREV4cHJlc3Npb25Nb3Rpb24uVFlQRV9NVUxUO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYWxjID09PSBcInNldFwiKSB7XHJcbiAgICAgICAgICAgIGNhbGNUeXBlSW50ID0gTDJERXhwcmVzc2lvbk1vdGlvbi5UWVBFX1NFVDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNhbGNUeXBlSW50ID0gTDJERXhwcmVzc2lvbk1vdGlvbi5UWVBFX0FERDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhbGNUeXBlSW50ID09IEwyREV4cHJlc3Npb25Nb3Rpb24uVFlQRV9BREQpIHtcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHBhcmFtLmRlZiA9PSBudWxsID8gMCA6IHBhcnNlRmxvYXQocGFyYW0uZGVmKTtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAtIGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY2FsY1R5cGVJbnQgPT0gTDJERXhwcmVzc2lvbk1vdGlvbi5UWVBFX01VTFQpIHtcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHBhcmFtLmRlZiA9PSBudWxsID8gMSA6IHBhcnNlRmxvYXQocGFyYW0uZGVmKTtcclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSAwKSBkZWZhdWx0VmFsdWUgPSAxO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGl0ZW0gPSBuZXcgTDJERXhwcmVzc2lvblBhcmFtKCk7XHJcbiAgICAgICAgaXRlbS5pZCA9IHBhcmFtSUQ7XHJcbiAgICAgICAgaXRlbS50eXBlID0gY2FsY1R5cGVJbnQ7XHJcbiAgICAgICAgaXRlbS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXQucGFyYW1MaXN0LnB1c2goaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxufVxyXG5cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREV4cHJlc3Npb25Nb3Rpb24gIyB1cGRhdGVQYXJhbUV4ZSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREV4cHJlc3Npb25Nb3Rpb24ucHJvdG90eXBlLnVwZGF0ZVBhcmFtRXhlID0gZnVuY3Rpb24gKG1vZGVsIC8qQUxpdmUyRE1vZGVsKi8sIHRpbWVNU2VjLypsb25nKi8sIHdlaWdodCAvKmZsb2F0Ki8sIG1vdGlvblF1ZXVlRW50IC8qTW90aW9uUXVldWVFbnQqLykge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMucGFyYW1MaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtID0gdGhpcy5wYXJhbUxpc3RbaV07IC8vTDJERXhwcmVzc2lvblBhcmFtXHJcbiAgICAgICAgLy8gaWYgKCFwYXJhbSB8fCAhcGFyYW0udHlwZSkgY29udGludWU7XHJcbiAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT0gTDJERXhwcmVzc2lvbk1vdGlvbi5UWVBFX0FERCkge1xyXG4gICAgICAgICAgICBtb2RlbC5hZGRUb1BhcmFtRmxvYXQocGFyYW0uaWQsIHBhcmFtLnZhbHVlLCB3ZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwYXJhbS50eXBlID09IEwyREV4cHJlc3Npb25Nb3Rpb24uVFlQRV9NVUxUKSB7XHJcbiAgICAgICAgICAgIG1vZGVsLm11bHRQYXJhbUZsb2F0KHBhcmFtLmlkLCBwYXJhbS52YWx1ZSwgd2VpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocGFyYW0udHlwZSA9PSBMMkRFeHByZXNzaW9uTW90aW9uLlRZUEVfU0VUKSB7XHJcbiAgICAgICAgICAgIG1vZGVsLnNldFBhcmFtRmxvYXQocGFyYW0uaWQsIHBhcmFtLnZhbHVlLCB3ZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gIGNsYXNzIEwyREV4cHJlc3Npb25QYXJhbSAgIFxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5mdW5jdGlvbiBMMkRFeHByZXNzaW9uUGFyYW0oKSB7XHJcbiAgICB0aGlzLmlkID0gXCJcIjtcclxuICAgIHRoaXMudHlwZSA9IC0xO1xyXG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiAgWW91IGNhbiBtb2RpZnkgYW5kIHVzZSB0aGlzIHNvdXJjZSBmcmVlbHlcclxuICogIG9ubHkgZm9yIHRoZSBkZXZlbG9wbWVudCBvZiBhcHBsaWNhdGlvbiByZWxhdGVkIExpdmUyRC5cclxuICpcclxuICogIChjKSBMaXZlMkQgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKi9cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICBjbGFzcyBMMkRFeWVCbGluayAgICAgICAgICBcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuZnVuY3Rpb24gTDJERXllQmxpbmsoKSB7XHJcbiAgICB0aGlzLm5leHRCbGlua1RpbWUgPSBudWxsIC8qIFRPRE8gTk9UIElOSVQgKi87IC8vIFxyXG4gICAgdGhpcy5zdGF0ZVN0YXJ0VGltZSA9IG51bGwgLyogVE9ETyBOT1QgSU5JVCAqLzsgLy8gXHJcbiAgICB0aGlzLmJsaW5rSW50ZXJ2YWxNc2VjID0gbnVsbCAvKiBUT0RPIE5PVCBJTklUICovOyAvLyBcclxuICAgIHRoaXMuZXllU3RhdGUgPSBFWUVfU1RBVEUuU1RBVEVfRklSU1Q7XHJcbiAgICB0aGlzLmJsaW5rSW50ZXJ2YWxNc2VjID0gNDAwMDtcclxuICAgIHRoaXMuY2xvc2luZ01vdGlvbk1zZWMgPSAxMDA7XHJcbiAgICB0aGlzLmNsb3NlZE1vdGlvbk1zZWMgPSA1MDtcclxuICAgIHRoaXMub3BlbmluZ01vdGlvbk1zZWMgPSAxNTA7XHJcbiAgICB0aGlzLmNsb3NlSWZaZXJvID0gdHJ1ZTtcclxuICAgIHRoaXMuZXllSURfTCA9IFwiUEFSQU1fRVlFX0xfT1BFTlwiO1xyXG4gICAgdGhpcy5leWVJRF9SID0gXCJQQVJBTV9FWUVfUl9PUEVOXCI7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREV5ZUJsaW5rICMgY2FsY05leHRCbGluaygpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREV5ZUJsaW5rLnByb3RvdHlwZS5jYWxjTmV4dEJsaW5rID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHRpbWUgLypsb25nKi8gPSBVdFN5c3RlbS5nZXRVc2VyVGltZU1TZWMoKTtcclxuICAgIHZhciByIC8qTnVtYmVyKi8gPSBNYXRoLnJhbmRvbSgpO1xyXG4gICAgcmV0dXJuICAvKihsb25nKSovICh0aW1lICsgciAqICgyICogdGhpcy5ibGlua0ludGVydmFsTXNlYyAtIDEpKTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJERXllQmxpbmsgIyBzZXRJbnRlcnZhbCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyREV5ZUJsaW5rLnByb3RvdHlwZS5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uIChibGlua0ludGVydmFsTXNlYyAvKmludCovKSB7XHJcbiAgICB0aGlzLmJsaW5rSW50ZXJ2YWxNc2VjID0gYmxpbmtJbnRlcnZhbE1zZWM7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREV5ZUJsaW5rICMgc2V0RXllTW90aW9uKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJERXllQmxpbmsucHJvdG90eXBlLnNldEV5ZU1vdGlvbiA9IGZ1bmN0aW9uIChjbG9zaW5nTW90aW9uTXNlYy8qaW50Ki8sIGNsb3NlZE1vdGlvbk1zZWMvKmludCovLCBvcGVuaW5nTW90aW9uTXNlYy8qaW50Ki8pIHtcclxuICAgIHRoaXMuY2xvc2luZ01vdGlvbk1zZWMgPSBjbG9zaW5nTW90aW9uTXNlYztcclxuICAgIHRoaXMuY2xvc2VkTW90aW9uTXNlYyA9IGNsb3NlZE1vdGlvbk1zZWM7XHJcbiAgICB0aGlzLm9wZW5pbmdNb3Rpb25Nc2VjID0gb3BlbmluZ01vdGlvbk1zZWM7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyREV5ZUJsaW5rICMgdXBkYXRlUGFyYW0oKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRFeWVCbGluay5wcm90b3R5cGUudXBkYXRlUGFyYW0gPSBmdW5jdGlvbiAobW9kZWwvKkFMaXZlMkRNb2RlbCovKSB7XHJcbiAgICB2YXIgdGltZSAvKjpsb25nKi8gPSBVdFN5c3RlbS5nZXRVc2VyVGltZU1TZWMoKTtcclxuICAgIHZhciBleWVQYXJhbVZhbHVlIC8qOk51bWJlciovO1xyXG4gICAgdmFyIHQgLyo6TnVtYmVyKi8gPSAwO1xyXG4gICAgc3dpdGNoICh0aGlzLmV5ZVN0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBFWUVfU1RBVEUuU1RBVEVfQ0xPU0lORzpcclxuICAgICAgICAgICAgdCA9ICh0aW1lIC0gdGhpcy5zdGF0ZVN0YXJ0VGltZSkgLyB0aGlzLmNsb3NpbmdNb3Rpb25Nc2VjO1xyXG4gICAgICAgICAgICBpZiAodCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0ID0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXllU3RhdGUgPSBFWUVfU1RBVEUuU1RBVEVfQ0xPU0VEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVN0YXJ0VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXllUGFyYW1WYWx1ZSA9IDEgLSB0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEVZRV9TVEFURS5TVEFURV9DTE9TRUQ6XHJcbiAgICAgICAgICAgIHQgPSAodGltZSAtIHRoaXMuc3RhdGVTdGFydFRpbWUpIC8gdGhpcy5jbG9zZWRNb3Rpb25Nc2VjO1xyXG4gICAgICAgICAgICBpZiAodCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV5ZVN0YXRlID0gRVlFX1NUQVRFLlNUQVRFX09QRU5JTkc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3RhcnRUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBleWVQYXJhbVZhbHVlID0gMDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFWUVfU1RBVEUuU1RBVEVfT1BFTklORzpcclxuICAgICAgICAgICAgdCA9ICh0aW1lIC0gdGhpcy5zdGF0ZVN0YXJ0VGltZSkgLyB0aGlzLm9wZW5pbmdNb3Rpb25Nc2VjO1xyXG4gICAgICAgICAgICBpZiAodCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0ID0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXllU3RhdGUgPSBFWUVfU1RBVEUuU1RBVEVfSU5URVJWQUw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRCbGlua1RpbWUgPSB0aGlzLmNhbGNOZXh0QmxpbmsoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBleWVQYXJhbVZhbHVlID0gdDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFWUVfU1RBVEUuU1RBVEVfSU5URVJWQUw6XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5leHRCbGlua1RpbWUgPCB0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV5ZVN0YXRlID0gRVlFX1NUQVRFLlNUQVRFX0NMT1NJTkc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3RhcnRUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBleWVQYXJhbVZhbHVlID0gMTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFWUVfU1RBVEUuU1RBVEVfRklSU1Q6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgdGhpcy5leWVTdGF0ZSA9IEVZRV9TVEFURS5TVEFURV9JTlRFUlZBTDtcclxuICAgICAgICAgICAgdGhpcy5uZXh0QmxpbmtUaW1lID0gdGhpcy5jYWxjTmV4dEJsaW5rKCk7XHJcbiAgICAgICAgICAgIGV5ZVBhcmFtVmFsdWUgPSAxO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jbG9zZUlmWmVybykgZXllUGFyYW1WYWx1ZSA9IC1leWVQYXJhbVZhbHVlO1xyXG4gICAgbW9kZWwuc2V0UGFyYW1GbG9hdCh0aGlzLmV5ZUlEX0wsIGV5ZVBhcmFtVmFsdWUpO1xyXG4gICAgbW9kZWwuc2V0UGFyYW1GbG9hdCh0aGlzLmV5ZUlEX1IsIGV5ZVBhcmFtVmFsdWUpO1xyXG59XHJcblxyXG4vLz09IGVudW0gRVlFX1NUQVRFID09XHJcbnZhciBFWUVfU1RBVEUgPSBmdW5jdGlvbiAoKSB7IH07XHJcblxyXG5FWUVfU1RBVEUuU1RBVEVfRklSU1QgPSBcIlNUQVRFX0ZJUlNUXCJcclxuRVlFX1NUQVRFLlNUQVRFX0lOVEVSVkFMID0gXCJTVEFURV9JTlRFUlZBTFwiXHJcbkVZRV9TVEFURS5TVEFURV9DTE9TSU5HID0gXCJTVEFURV9DTE9TSU5HXCJcclxuRVlFX1NUQVRFLlNUQVRFX0NMT1NFRCA9IFwiU1RBVEVfQ0xPU0VEXCJcclxuRVlFX1NUQVRFLlNUQVRFX09QRU5JTkcgPSBcIlNUQVRFX09QRU5JTkdcIlxyXG4vKipcclxuICpcclxuICogIFlvdSBjYW4gbW9kaWZ5IGFuZCB1c2UgdGhpcyBzb3VyY2UgZnJlZWx5XHJcbiAqICBvbmx5IGZvciB0aGUgZGV2ZWxvcG1lbnQgb2YgYXBwbGljYXRpb24gcmVsYXRlZCBMaXZlMkQuXHJcbiAqXHJcbiAqICAoYykgTGl2ZTJEIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgY2xhc3MgTDJETWF0cml4NDQgICAgICAgICAgXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbmZ1bmN0aW9uIEwyRE1hdHJpeDQ0KCkge1xyXG4gICAgdGhpcy50ciA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpOyAvLyBcclxuICAgIHRoaXMuaWRlbnRpdHkoKTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgc3RhdGljIEwyRE1hdHJpeDQ0Lm11bCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRE1hdHJpeDQ0Lm11bCA9IGZ1bmN0aW9uIChhLypmbG9hdFtdKi8sIGIvKmZsb2F0W10qLywgZHN0LypmbG9hdFtdKi8pIHtcclxuICAgIHZhciBjID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xyXG4gICAgdmFyIG4gPSA0O1xyXG4gICAgdmFyIGksIGosIGs7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xyXG4gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICBjW2kgKyBqICogNF0gKz0gYVtpICsgayAqIDRdICogYltrICsgaiAqIDRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICBkc3RbaV0gPSBjW2ldO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNYXRyaXg0NCAjIGlkZW50aXR5KClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETWF0cml4NDQucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgaS8qOmludCovID0gMDsgaSA8IDE2OyBpKyspXHJcbiAgICAgICAgdGhpcy50cltpXSA9ICgoaSAlIDUpID09IDApID8gMSA6IDA7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1hdHJpeDQ0ICMgZ2V0QXJyYXkoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNYXRyaXg0NC5wcm90b3R5cGUuZ2V0QXJyYXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cjtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJETWF0cml4NDQgIyBnZXRDb3B5TWF0cml4KClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETWF0cml4NDQucHJvdG90eXBlLmdldENvcHlNYXRyaXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnRyKTsgLy8gdGhpcy50ci5jbG9uZSgpO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNYXRyaXg0NCAjIHNldE1hdHJpeCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRE1hdHJpeDQ0LnByb3RvdHlwZS5zZXRNYXRyaXggPSBmdW5jdGlvbiAodHIvKmZsb2F0W10qLykge1xyXG4gICAgaWYgKHRoaXMudHIgPT0gbnVsbCB8fCB0aGlzLnRyLmxlbmd0aCAhPSB0aGlzLnRyLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgZm9yICh2YXIgaS8qOmludCovID0gMDsgaSA8IDE2OyBpKyspIHRoaXMudHJbaV0gPSB0cltpXTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJETWF0cml4NDQgIyBnZXRTY2FsZVgoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNYXRyaXg0NC5wcm90b3R5cGUuZ2V0U2NhbGVYID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHJbMF07XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1hdHJpeDQ0ICMgZ2V0U2NhbGVZKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETWF0cml4NDQucHJvdG90eXBlLmdldFNjYWxlWSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnRyWzVdO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNYXRyaXg0NCAjIHRyYW5zZm9ybVgoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNYXRyaXg0NC5wcm90b3R5cGUudHJhbnNmb3JtWCA9IGZ1bmN0aW9uIChzcmMvKmZsb2F0Ki8pIHtcclxuICAgIHJldHVybiB0aGlzLnRyWzBdICogc3JjICsgdGhpcy50clsxMl07XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1hdHJpeDQ0ICMgdHJhbnNmb3JtWSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRE1hdHJpeDQ0LnByb3RvdHlwZS50cmFuc2Zvcm1ZID0gZnVuY3Rpb24gKHNyYy8qZmxvYXQqLykge1xyXG4gICAgcmV0dXJuIHRoaXMudHJbNV0gKiBzcmMgKyB0aGlzLnRyWzEzXTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJETWF0cml4NDQgIyBpbnZlcnRUcmFuc2Zvcm1YKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETWF0cml4NDQucHJvdG90eXBlLmludmVydFRyYW5zZm9ybVggPSBmdW5jdGlvbiAoc3JjLypmbG9hdCovKSB7XHJcbiAgICByZXR1cm4gKHNyYyAtIHRoaXMudHJbMTJdKSAvIHRoaXMudHJbMF07XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1hdHJpeDQ0ICMgaW52ZXJ0VHJhbnNmb3JtWSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRE1hdHJpeDQ0LnByb3RvdHlwZS5pbnZlcnRUcmFuc2Zvcm1ZID0gZnVuY3Rpb24gKHNyYy8qZmxvYXQqLykge1xyXG4gICAgcmV0dXJuIChzcmMgLSB0aGlzLnRyWzEzXSkgLyB0aGlzLnRyWzVdO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNYXRyaXg0NCAjIG11bHRUcmFuc2xhdGUoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNYXRyaXg0NC5wcm90b3R5cGUubXVsdFRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChzaGlmdFgvKmZsb2F0Ki8sIHNoaWZ0WS8qZmxvYXQqLykge1xyXG4gICAgdmFyIHRyMSA9IFsxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCBzaGlmdFgsIHNoaWZ0WSwgMCwgMV07XHJcbiAgICBMMkRNYXRyaXg0NC5tdWwodHIxLCB0aGlzLnRyLCB0aGlzLnRyKTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJETWF0cml4NDQgIyB0cmFuc2xhdGUoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNYXRyaXg0NC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgvKmZsb2F0Ki8sIHkvKmZsb2F0Ki8pIHtcclxuICAgIHRoaXMudHJbMTJdID0geDtcclxuICAgIHRoaXMudHJbMTNdID0geTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJETWF0cml4NDQgIyB0cmFuc2xhdGVYKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETWF0cml4NDQucHJvdG90eXBlLnRyYW5zbGF0ZVggPSBmdW5jdGlvbiAoeC8qZmxvYXQqLykge1xyXG4gICAgdGhpcy50clsxMl0gPSB4O1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNYXRyaXg0NCAjIHRyYW5zbGF0ZVkoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNYXRyaXg0NC5wcm90b3R5cGUudHJhbnNsYXRlWSA9IGZ1bmN0aW9uICh5LypmbG9hdCovKSB7XHJcbiAgICB0aGlzLnRyWzEzXSA9IHk7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1hdHJpeDQ0ICMgbXVsdFNjYWxlKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETWF0cml4NDQucHJvdG90eXBlLm11bHRTY2FsZSA9IGZ1bmN0aW9uIChzY2FsZVgvKmZsb2F0Ki8sIHNjYWxlWS8qZmxvYXQqLykge1xyXG4gICAgdmFyIHRyMSA9IFtzY2FsZVgsIDAsIDAsIDAsIDAsIHNjYWxlWSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMV07XHJcbiAgICBMMkRNYXRyaXg0NC5tdWwodHIxLCB0aGlzLnRyLCB0aGlzLnRyKTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJETWF0cml4NDQgIyBzY2FsZSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRE1hdHJpeDQ0LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uIChzY2FsZVgvKmZsb2F0Ki8sIHNjYWxlWS8qZmxvYXQqLykge1xyXG4gICAgdGhpcy50clswXSA9IHNjYWxlWDtcclxuICAgIHRoaXMudHJbNV0gPSBzY2FsZVk7XHJcbn1cclxuLyoqXHJcbiAqXHJcbiAqICBZb3UgY2FuIG1vZGlmeSBhbmQgdXNlIHRoaXMgc291cmNlIGZyZWVseVxyXG4gKiAgb25seSBmb3IgdGhlIGRldmVsb3BtZW50IG9mIGFwcGxpY2F0aW9uIHJlbGF0ZWQgTGl2ZTJELlxyXG4gKlxyXG4gKiAgKGMpIExpdmUyRCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqL1xyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gIGNsYXNzIEwyRE1vZGVsTWF0cml4ICAgICAgIGV4dGVuZHMgICAgIEwyRE1hdHJpeDQ0XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbmZ1bmN0aW9uIEwyRE1vZGVsTWF0cml4KHcvKmZsb2F0Ki8sIGgvKmZsb2F0Ki8pIHtcclxuICAgIEwyRE1hdHJpeDQ0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xyXG4gICAgdGhpcy53aWR0aCA9IHc7XHJcbiAgICB0aGlzLmhlaWdodCA9IGg7XHJcbn1cclxuXHJcbi8vTDJETW9kZWxNYXRyaXggZXh0ZW5kcyBMMkRNYXRyaXg0NFxyXG5MMkRNb2RlbE1hdHJpeC5wcm90b3R5cGUgPSBuZXcgTDJETWF0cml4NDQoKTtcclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1vZGVsTWF0cml4ICMgc2V0UG9zaXRpb24oKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNb2RlbE1hdHJpeC5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoeC8qZmxvYXQqLywgeS8qZmxvYXQqLykge1xyXG4gICAgdGhpcy50cmFuc2xhdGUoeCwgeSk7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1vZGVsTWF0cml4ICMgc2V0Q2VudGVyUG9zaXRpb24oKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNb2RlbE1hdHJpeC5wcm90b3R5cGUuc2V0Q2VudGVyUG9zaXRpb24gPSBmdW5jdGlvbiAoeC8qZmxvYXQqLywgeS8qZmxvYXQqLykge1xyXG4gICAgdmFyIHcgPSB0aGlzLndpZHRoICogdGhpcy5nZXRTY2FsZVgoKTtcclxuICAgIHZhciBoID0gdGhpcy5oZWlnaHQgKiB0aGlzLmdldFNjYWxlWSgpO1xyXG4gICAgdGhpcy50cmFuc2xhdGUoeCAtIHcgLyAyLCB5IC0gaCAvIDIpO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNb2RlbE1hdHJpeCAjIHRvcCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRE1vZGVsTWF0cml4LnByb3RvdHlwZS50b3AgPSBmdW5jdGlvbiAoeS8qZmxvYXQqLykge1xyXG4gICAgdGhpcy5zZXRZKHkpO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNb2RlbE1hdHJpeCAjIGJvdHRvbSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRE1vZGVsTWF0cml4LnByb3RvdHlwZS5ib3R0b20gPSBmdW5jdGlvbiAoeS8qZmxvYXQqLykge1xyXG4gICAgdmFyIGggPSB0aGlzLmhlaWdodCAqIHRoaXMuZ2V0U2NhbGVZKCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVkoeSAtIGgpO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNb2RlbE1hdHJpeCAjIGxlZnQoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNb2RlbE1hdHJpeC5wcm90b3R5cGUubGVmdCA9IGZ1bmN0aW9uICh4LypmbG9hdCovKSB7XHJcbiAgICB0aGlzLnNldFgoeCk7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1vZGVsTWF0cml4ICMgcmlnaHQoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNb2RlbE1hdHJpeC5wcm90b3R5cGUucmlnaHQgPSBmdW5jdGlvbiAoeC8qZmxvYXQqLykge1xyXG4gICAgdmFyIHcgPSB0aGlzLndpZHRoICogdGhpcy5nZXRTY2FsZVgoKTtcclxuICAgIHRoaXMudHJhbnNsYXRlWCh4IC0gdyk7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1vZGVsTWF0cml4ICMgY2VudGVyWCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRE1vZGVsTWF0cml4LnByb3RvdHlwZS5jZW50ZXJYID0gZnVuY3Rpb24gKHgvKmZsb2F0Ki8pIHtcclxuICAgIHZhciB3ID0gdGhpcy53aWR0aCAqIHRoaXMuZ2V0U2NhbGVYKCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVgoeCAtIHcgLyAyKTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJETW9kZWxNYXRyaXggIyBjZW50ZXJZKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETW9kZWxNYXRyaXgucHJvdG90eXBlLmNlbnRlclkgPSBmdW5jdGlvbiAoeS8qZmxvYXQqLykge1xyXG4gICAgdmFyIGggPSB0aGlzLmhlaWdodCAqIHRoaXMuZ2V0U2NhbGVZKCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVkoeSAtIGggLyAyKTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJETW9kZWxNYXRyaXggIyBzZXRYKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETW9kZWxNYXRyaXgucHJvdG90eXBlLnNldFggPSBmdW5jdGlvbiAoeC8qZmxvYXQqLykge1xyXG4gICAgdGhpcy50cmFuc2xhdGVYKHgpO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNb2RlbE1hdHJpeCAjIHNldFkoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNb2RlbE1hdHJpeC5wcm90b3R5cGUuc2V0WSA9IGZ1bmN0aW9uICh5LypmbG9hdCovKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVkoeSk7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1vZGVsTWF0cml4ICMgc2V0SGVpZ2h0KClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETW9kZWxNYXRyaXgucHJvdG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uIChoLypmbG9hdCovKSB7XHJcbiAgICB2YXIgc2NhbGVYID0gaCAvIHRoaXMuaGVpZ2h0O1xyXG4gICAgdmFyIHNjYWxlWSA9IC1zY2FsZVg7XHJcbiAgICB0aGlzLnNjYWxlKHNjYWxlWCwgc2NhbGVZKTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJETW9kZWxNYXRyaXggIyBzZXRXaWR0aCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRE1vZGVsTWF0cml4LnByb3RvdHlwZS5zZXRXaWR0aCA9IGZ1bmN0aW9uICh3LypmbG9hdCovKSB7XHJcbiAgICB2YXIgc2NhbGVYID0gdyAvIHRoaXMud2lkdGg7XHJcbiAgICB2YXIgc2NhbGVZID0gLXNjYWxlWDtcclxuICAgIHRoaXMuc2NhbGUoc2NhbGVYLCBzY2FsZVkpO1xyXG59XHJcblxyXG4vKipcclxuICpcclxuICogIFlvdSBjYW4gbW9kaWZ5IGFuZCB1c2UgdGhpcyBzb3VyY2UgZnJlZWx5XHJcbiAqICBvbmx5IGZvciB0aGUgZGV2ZWxvcG1lbnQgb2YgYXBwbGljYXRpb24gcmVsYXRlZCBMaXZlMkQuXHJcbiAqXHJcbiAqICAoYykgTGl2ZTJEIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgY2xhc3MgTDJETW90aW9uTWFuYWdlciAgICAgZXh0ZW5kcyAgICAgTW90aW9uUXVldWVNYW5hZ2VyXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbmZ1bmN0aW9uIEwyRE1vdGlvbk1hbmFnZXIoKSB7XHJcbiAgICBNb3Rpb25RdWV1ZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7XHJcbiAgICB0aGlzLmN1cnJlbnRQcmlvcml0eSA9IG51bGw7XHJcbiAgICB0aGlzLnJlc2VydmVQcmlvcml0eSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zdXBlciA9IE1vdGlvblF1ZXVlTWFuYWdlci5wcm90b3R5cGU7XHJcbn1cclxuXHJcblxyXG5MMkRNb3Rpb25NYW5hZ2VyLnByb3RvdHlwZSA9IG5ldyBNb3Rpb25RdWV1ZU1hbmFnZXIoKTtcclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1vdGlvbk1hbmFnZXIgIyBnZXRDdXJyZW50UHJpb3JpdHkoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNb3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRDdXJyZW50UHJpb3JpdHkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UHJpb3JpdHk7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1vdGlvbk1hbmFnZXIgIyBnZXRSZXNlcnZlUHJpb3JpdHkoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNb3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRSZXNlcnZlUHJpb3JpdHkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNlcnZlUHJpb3JpdHk7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1vdGlvbk1hbmFnZXIgIyByZXNlcnZlTW90aW9uKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETW90aW9uTWFuYWdlci5wcm90b3R5cGUucmVzZXJ2ZU1vdGlvbiA9IGZ1bmN0aW9uIChwcmlvcml0eS8qaW50Ki8pIHtcclxuICAgIGlmICh0aGlzLnJlc2VydmVQcmlvcml0eSA+PSBwcmlvcml0eSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmN1cnJlbnRQcmlvcml0eSA+PSBwcmlvcml0eSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc2VydmVQcmlvcml0eSA9IHByaW9yaXR5O1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNb3Rpb25NYW5hZ2VyICMgc2V0UmVzZXJ2ZVByaW9yaXR5KClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJETW90aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0UmVzZXJ2ZVByaW9yaXR5ID0gZnVuY3Rpb24gKHZhbC8qaW50Ki8pIHtcclxuICAgIHRoaXMucmVzZXJ2ZVByaW9yaXR5ID0gdmFsO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRNb3Rpb25NYW5hZ2VyICMgdXBkYXRlUGFyYW0oKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNb3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVQYXJhbSA9IGZ1bmN0aW9uIChtb2RlbC8qQUxpdmUyRE1vZGVsKi8pIHtcclxuICAgIHZhciB1cGRhdGVkID0gTW90aW9uUXVldWVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVQYXJhbS5jYWxsKHRoaXMsIG1vZGVsKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0ZpbmlzaGVkKCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQcmlvcml0eSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRE1vdGlvbk1hbmFnZXIgIyBzdGFydE1vdGlvblByaW8oKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRNb3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zdGFydE1vdGlvblByaW8gPSBmdW5jdGlvbiAobW90aW9uLypBTW90aW9uKi8sIHByaW9yaXR5LyppbnQqLykge1xyXG4gICAgaWYgKHByaW9yaXR5ID09IHRoaXMucmVzZXJ2ZVByaW9yaXR5KSB7XHJcbiAgICAgICAgdGhpcy5yZXNlcnZlUHJpb3JpdHkgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50UHJpb3JpdHkgPSBwcmlvcml0eTtcclxuICAgIHJldHVybiB0aGlzLnN0YXJ0TW90aW9uKG1vdGlvbiwgZmFsc2UpO1xyXG59XHJcblxyXG4vKipcclxuICpcclxuICogIFlvdSBjYW4gbW9kaWZ5IGFuZCB1c2UgdGhpcyBzb3VyY2UgZnJlZWx5XHJcbiAqICBvbmx5IGZvciB0aGUgZGV2ZWxvcG1lbnQgb2YgYXBwbGljYXRpb24gcmVsYXRlZCBMaXZlMkQuXHJcbiAqXHJcbiAqICAoYykgTGl2ZTJEIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgY2xhc3MgTDJEUGh5c2ljcyAgICAgICAgICAgXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbmZ1bmN0aW9uIEwyRFBoeXNpY3MoKSB7XHJcbiAgICB0aGlzLnBoeXNpY3NMaXN0ID0gbmV3IEFycmF5KCk7IC8vQXJyYXlMaXN0PFBoeXNpY3NIYWlyPlxyXG4gICAgdGhpcy5zdGFydFRpbWVNU2VjID0gVXRTeXN0ZW0uZ2V0VXNlclRpbWVNU2VjKCk7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIHN0YXRpYyBMMkRQaHlzaWNzLmxvYWQoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRQaHlzaWNzLmxvYWQgPSBmdW5jdGlvbiAoYnVmIC8qYnl0ZVtdKi8pIHtcclxuICAgIHZhciByZXQgPSBuZXcgTDJEUGh5c2ljcygpOyAvL0wyRFBoeXNpY3NMMkRQaHlzaWNzXHJcbiAgICB2YXIgcG0gPSBMaXZlMkRGcmFtZXdvcmsuZ2V0UGxhdGZvcm1NYW5hZ2VyKCk7XHJcbiAgICB2YXIganNvbiA9IHBtLmpzb25QYXJzZUZyb21CeXRlcyhidWYpO1xyXG4gICAgdmFyIHBhcmFtcyA9IGpzb24ucGh5c2ljc19oYWlyO1xyXG4gICAgdmFyIHBhcmFtTnVtID0gcGFyYW1zLmxlbmd0aDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1OdW07IGkrKykge1xyXG4gICAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1tpXTsgLy9WYWx1ZVxyXG4gICAgICAgIHZhciBwaHlzaWNzID0gbmV3IFBoeXNpY3NIYWlyKCk7IC8vUGh5c2ljc0hhaXJQaHlzaWNzSGFpclxyXG4gICAgICAgIHZhciBzZXR1cCA9IHBhcmFtLnNldHVwOyAvL1ZhbHVlXHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHBhcnNlRmxvYXQoc2V0dXAubGVuZ3RoKTtcclxuICAgICAgICB2YXIgcmVzaXN0ID0gcGFyc2VGbG9hdChzZXR1cC5yZWdpc3QpO1xyXG4gICAgICAgIHZhciBtYXNzID0gcGFyc2VGbG9hdChzZXR1cC5tYXNzKTtcclxuICAgICAgICBwaHlzaWNzLnNldHVwKGxlbmd0aCwgcmVzaXN0LCBtYXNzKTtcclxuICAgICAgICB2YXIgc3JjTGlzdCA9IHBhcmFtLnNyYzsgLy9WYWx1ZVxyXG4gICAgICAgIHZhciBzcmNOdW0gPSBzcmNMaXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNyY051bTsgaisrKSB7XHJcbiAgICAgICAgICAgIHZhciBzcmMgPSBzcmNMaXN0W2pdOyAvL1ZhbHVlXHJcbiAgICAgICAgICAgIHZhciBpZCA9IHNyYy5pZDsgLy9TdHJpbmdcclxuICAgICAgICAgICAgdmFyIHR5cGUgPSBQaHlzaWNzSGFpci5TcmMuU1JDX1RPX1g7XHJcbiAgICAgICAgICAgIHZhciB0eXBlU3RyID0gc3JjLnB0eXBlOyAvL1N0cmluZ1xyXG4gICAgICAgICAgICBpZiAodHlwZVN0ciA9PT0gXCJ4XCIpIHtcclxuICAgICAgICAgICAgICAgIHR5cGUgPSBQaHlzaWNzSGFpci5TcmMuU1JDX1RPX1g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZVN0ciA9PT0gXCJ5XCIpIHtcclxuICAgICAgICAgICAgICAgIHR5cGUgPSBQaHlzaWNzSGFpci5TcmMuU1JDX1RPX1k7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZVN0ciA9PT0gXCJhbmdsZVwiKSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlID0gUGh5c2ljc0hhaXIuU3JjLlNSQ19UT19HX0FOR0xFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgVXREZWJ1Zy5lcnJvcihcImxpdmUyZFwiLCBcIkludmFsaWQgcGFyYW1ldGVyOlBoeXNpY3NIYWlyLlNyY1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgc2NhbGUgPSBwYXJzZUZsb2F0KHNyYy5zY2FsZSk7XHJcbiAgICAgICAgICAgIHZhciB3ZWlnaHQgPSBwYXJzZUZsb2F0KHNyYy53ZWlnaHQpO1xyXG4gICAgICAgICAgICBwaHlzaWNzLmFkZFNyY1BhcmFtKHR5cGUsIGlkLCBzY2FsZSwgd2VpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRhcmdldExpc3QgPSBwYXJhbS50YXJnZXRzOyAvL1ZhbHVlXHJcbiAgICAgICAgdmFyIHRhcmdldE51bSA9IHRhcmdldExpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGFyZ2V0TnVtOyBqKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldExpc3Rbal07IC8vVmFsdWVcclxuICAgICAgICAgICAgdmFyIGlkID0gdGFyZ2V0LmlkOyAvL1N0cmluZ1xyXG4gICAgICAgICAgICB2YXIgdHlwZSA9IFBoeXNpY3NIYWlyLlRhcmdldC5UQVJHRVRfRlJPTV9BTkdMRTtcclxuICAgICAgICAgICAgdmFyIHR5cGVTdHIgPSB0YXJnZXQucHR5cGU7IC8vU3RyaW5nXHJcbiAgICAgICAgICAgIGlmICh0eXBlU3RyID09PSBcImFuZ2xlXCIpIHtcclxuICAgICAgICAgICAgICAgIHR5cGUgPSBQaHlzaWNzSGFpci5UYXJnZXQuVEFSR0VUX0ZST01fQU5HTEU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZVN0ciA9PT0gXCJhbmdsZV92XCIpIHtcclxuICAgICAgICAgICAgICAgIHR5cGUgPSBQaHlzaWNzSGFpci5UYXJnZXQuVEFSR0VUX0ZST01fQU5HTEVfVjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIFV0RGVidWcuZXJyb3IoXCJsaXZlMmRcIiwgXCJJbnZhbGlkIHBhcmFtZXRlcjpQaHlzaWNzSGFpci5UYXJnZXRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHNjYWxlID0gcGFyc2VGbG9hdCh0YXJnZXQuc2NhbGUpO1xyXG4gICAgICAgICAgICB2YXIgd2VpZ2h0ID0gcGFyc2VGbG9hdCh0YXJnZXQud2VpZ2h0KTtcclxuICAgICAgICAgICAgcGh5c2ljcy5hZGRUYXJnZXRQYXJhbSh0eXBlLCBpZCwgc2NhbGUsIHdlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldC5waHlzaWNzTGlzdC5wdXNoKHBoeXNpY3MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEUGh5c2ljcyAjIHVwZGF0ZVBhcmFtKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEUGh5c2ljcy5wcm90b3R5cGUudXBkYXRlUGFyYW0gPSBmdW5jdGlvbiAobW9kZWwvKkFMaXZlMkRNb2RlbCovKSB7XHJcbiAgICB2YXIgdGltZU1TZWMgPSBVdFN5c3RlbS5nZXRVc2VyVGltZU1TZWMoKSAtIHRoaXMuc3RhcnRUaW1lTVNlYztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5waHlzaWNzTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMucGh5c2ljc0xpc3RbaV0udXBkYXRlKG1vZGVsLCB0aW1lTVNlYyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiAgWW91IGNhbiBtb2RpZnkgYW5kIHVzZSB0aGlzIHNvdXJjZSBmcmVlbHlcclxuICogIG9ubHkgZm9yIHRoZSBkZXZlbG9wbWVudCBvZiBhcHBsaWNhdGlvbiByZWxhdGVkIExpdmUyRC5cclxuICpcclxuICogIChjKSBMaXZlMkQgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKi9cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICBjbGFzcyBMMkRQb3NlICAgICAgICAgICAgICBcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuZnVuY3Rpb24gTDJEUG9zZSgpIHtcclxuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xyXG4gICAgdGhpcy5sYXN0TW9kZWwgPSBudWxsOyAvL0FMaXZlMkRNb2RlbFxyXG4gICAgdGhpcy5wYXJ0c0dyb3VwcyA9IG5ldyBBcnJheSgpOyAvL0FycmF5TGlzdDxMMkRQYXJ0c1BhcmFtW10+XHJcbn1cclxuXHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBzdGF0aWMgTDJEUG9zZS5sb2FkKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEUG9zZS5sb2FkID0gZnVuY3Rpb24gKGJ1Zi8qYnl0ZVtdKi8pIHtcclxuICAgIHZhciByZXQgPSBuZXcgTDJEUG9zZSgpOyAvL0wyRFBvc2VcclxuICAgIHZhciBwbSA9IExpdmUyREZyYW1ld29yay5nZXRQbGF0Zm9ybU1hbmFnZXIoKTtcclxuICAgIHZhciBqc29uID0gcG0uanNvblBhcnNlRnJvbUJ5dGVzKGJ1Zik7XHJcbiAgICB2YXIgcG9zZUxpc3RJbmZvID0ganNvbi5wYXJ0c192aXNpYmxlOyAvL1ZhbHVlXHJcbiAgICB2YXIgcG9zZU51bSA9IHBvc2VMaXN0SW5mby5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciBpX3Bvc2UgPSAwOyBpX3Bvc2UgPCBwb3NlTnVtOyBpX3Bvc2UrKykge1xyXG4gICAgICAgIHZhciBwb3NlSW5mbyA9IHBvc2VMaXN0SW5mb1tpX3Bvc2VdOyAvL1ZhbHVlXHJcbiAgICAgICAgdmFyIGlkTGlzdEluZm8gPSBwb3NlSW5mby5ncm91cDsgLy9WYWx1ZVxyXG4gICAgICAgIHZhciBpZE51bSA9IGlkTGlzdEluZm8ubGVuZ3RoO1xyXG4gICAgICAgIHZhciBwYXJ0c0dyb3VwLypMMkRQYXJ0c1BhcmFtKi8gPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICBmb3IgKHZhciBpX2dyb3VwID0gMDsgaV9ncm91cCA8IGlkTnVtOyBpX2dyb3VwKyspIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRzSW5mbyA9IGlkTGlzdEluZm9baV9ncm91cF07IC8vVmFsdWVcclxuICAgICAgICAgICAgdmFyIHBhcnRzID0gbmV3IEwyRFBhcnRzUGFyYW0ocGFydHNJbmZvLmlkKTsgLy9MMkRQYXJ0c1BhcmFtTDJEUGFydHNQYXJhbVxyXG4gICAgICAgICAgICBwYXJ0c0dyb3VwW2lfZ3JvdXBdID0gcGFydHM7XHJcbiAgICAgICAgICAgIGlmIChwYXJ0c0luZm8ubGluayA9PSBudWxsKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdmFyIGxpbmtMaXN0SW5mbyA9IHBhcnRzSW5mby5saW5rOyAvL1ZhbHVlXHJcbiAgICAgICAgICAgIHZhciBsaW5rTnVtID0gbGlua0xpc3RJbmZvLmxlbmd0aDtcclxuICAgICAgICAgICAgcGFydHMubGluayA9IG5ldyBBcnJheSgpOyAvL0FycmF5TGlzdDxMMkRQYXJ0c1BhcmFtPlxyXG4gICAgICAgICAgICBmb3IgKHZhciBpX2xpbmsgPSAwOyBpX2xpbmsgPCBsaW5rTnVtOyBpX2xpbmsrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpbmtQYXJ0cyA9IG5ldyBMMkRQYXJ0c1BhcmFtKGxpbmtMaXN0SW5mb1tpX2xpbmtdKTsgLy9MMkRQYXJ0c1BhcmFtTDJEUGFydHNQYXJhbVxyXG4gICAgICAgICAgICAgICAgcGFydHMubGluay5wdXNoKGxpbmtQYXJ0cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0LnBhcnRzR3JvdXBzLnB1c2gocGFydHNHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEUG9zZSAjIHVwZGF0ZVBhcmFtKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEUG9zZS5wcm90b3R5cGUudXBkYXRlUGFyYW0gPSBmdW5jdGlvbiAobW9kZWwvKkFMaXZlMkRNb2RlbCovKSB7XHJcbiAgICBpZiAobW9kZWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmICghKG1vZGVsID09IHRoaXMubGFzdE1vZGVsKSkge1xyXG4gICAgICAgIHRoaXMuaW5pdFBhcmFtKG1vZGVsKTtcclxuICAgIH1cclxuICAgIHRoaXMubGFzdE1vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgdmFyIGN1clRpbWUgPSBVdFN5c3RlbS5nZXRVc2VyVGltZU1TZWMoKTtcclxuICAgIHZhciBkZWx0YVRpbWVTZWMgPSAoKHRoaXMubGFzdFRpbWUgPT0gMCkgPyAwIDogKGN1clRpbWUgLSB0aGlzLmxhc3RUaW1lKSAvIDEwMDAuMCk7XHJcbiAgICB0aGlzLmxhc3RUaW1lID0gY3VyVGltZTtcclxuICAgIGlmIChkZWx0YVRpbWVTZWMgPCAwKSBkZWx0YVRpbWVTZWMgPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcnRzR3JvdXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVQYXJ0c09wYWNpdHlHcm91cChtb2RlbCwgdGhpcy5wYXJ0c0dyb3Vwc1tpXSwgZGVsdGFUaW1lU2VjKTtcclxuICAgICAgICB0aGlzLmNvcHlPcGFjaXR5T3RoZXJQYXJ0cyhtb2RlbCwgdGhpcy5wYXJ0c0dyb3Vwc1tpXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRFBvc2UgIyBpbml0UGFyYW0oKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRQb3NlLnByb3RvdHlwZS5pbml0UGFyYW0gPSBmdW5jdGlvbiAobW9kZWwvKkFMaXZlMkRNb2RlbCovKSB7XHJcbiAgICBpZiAobW9kZWwgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcnRzR3JvdXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHBhcnRzR3JvdXAgPSB0aGlzLnBhcnRzR3JvdXBzW2ldOyAvL0wyRFBhcnRzUGFyYW1cclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcnRzR3JvdXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgcGFydHNHcm91cFtqXS5pbml0SW5kZXgobW9kZWwpO1xyXG4gICAgICAgICAgICB2YXIgcGFydHNJbmRleCA9IHBhcnRzR3JvdXBbal0ucGFydHNJbmRleDtcclxuICAgICAgICAgICAgdmFyIHBhcmFtSW5kZXggPSBwYXJ0c0dyb3VwW2pdLnBhcmFtSW5kZXg7XHJcbiAgICAgICAgICAgIGlmIChwYXJ0c0luZGV4IDwgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIHZhciB2Lyo6Qm9vbGVhbiovID0gKG1vZGVsLmdldFBhcmFtRmxvYXQocGFyYW1JbmRleCkgIT0gMCk7XHJcbiAgICAgICAgICAgIG1vZGVsLnNldFBhcnRzT3BhY2l0eShwYXJ0c0luZGV4LCAodiA/IDEuMCA6IDAuMCkpO1xyXG4gICAgICAgICAgICBtb2RlbC5zZXRQYXJhbUZsb2F0KHBhcmFtSW5kZXgsICh2ID8gMS4wIDogMC4wKSk7XHJcbiAgICAgICAgICAgIGlmIChwYXJ0c0dyb3VwW2pdLmxpbmsgPT0gbnVsbCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcGFydHNHcm91cFtqXS5saW5rLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0c0dyb3VwW2pdLmxpbmtba10uaW5pdEluZGV4KG1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEUG9zZSAjIG5vcm1hbGl6ZVBhcnRzT3BhY2l0eUdyb3VwKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEUG9zZS5wcm90b3R5cGUubm9ybWFsaXplUGFydHNPcGFjaXR5R3JvdXAgPSBmdW5jdGlvbiAobW9kZWwvKkFMaXZlMkRNb2RlbCovLCBwYXJ0c0dyb3VwLypMMkRQYXJ0c1BhcmFtW10qLywgZGVsdGFUaW1lU2VjLypmbG9hdCovKSB7XHJcbiAgICB2YXIgdmlzaWJsZVBhcnRzID0gLTE7XHJcbiAgICB2YXIgdmlzaWJsZU9wYWNpdHkgPSAxLjA7XHJcbiAgICB2YXIgQ0xFQVJfVElNRV9TRUMgPSAwLjU7XHJcbiAgICB2YXIgcGhpID0gMC41O1xyXG4gICAgdmFyIG1heEJhY2tPcGFjaXR5ID0gMC4xNTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHNHcm91cC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBwYXJ0c0luZGV4ID0gcGFydHNHcm91cFtpXS5wYXJ0c0luZGV4O1xyXG4gICAgICAgIHZhciBwYXJhbUluZGV4ID0gcGFydHNHcm91cFtpXS5wYXJhbUluZGV4O1xyXG4gICAgICAgIGlmIChwYXJ0c0luZGV4IDwgMCkgY29udGludWU7IGlmIChtb2RlbC5nZXRQYXJhbUZsb2F0KHBhcmFtSW5kZXgpICE9IDApIHtcclxuICAgICAgICAgICAgaWYgKHZpc2libGVQYXJ0cyA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2aXNpYmxlUGFydHMgPSBpO1xyXG4gICAgICAgICAgICB2aXNpYmxlT3BhY2l0eSA9IG1vZGVsLmdldFBhcnRzT3BhY2l0eShwYXJ0c0luZGV4KTtcclxuICAgICAgICAgICAgdmlzaWJsZU9wYWNpdHkgKz0gZGVsdGFUaW1lU2VjIC8gQ0xFQVJfVElNRV9TRUM7XHJcbiAgICAgICAgICAgIGlmICh2aXNpYmxlT3BhY2l0eSA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHZpc2libGVPcGFjaXR5ID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh2aXNpYmxlUGFydHMgPCAwKSB7XHJcbiAgICAgICAgdmlzaWJsZVBhcnRzID0gMDtcclxuICAgICAgICB2aXNpYmxlT3BhY2l0eSA9IDE7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzR3JvdXAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgcGFydHNJbmRleCA9IHBhcnRzR3JvdXBbaV0ucGFydHNJbmRleDtcclxuICAgICAgICBpZiAocGFydHNJbmRleCA8IDApIGNvbnRpbnVlOyBpZiAodmlzaWJsZVBhcnRzID09IGkpIHtcclxuICAgICAgICAgICAgbW9kZWwuc2V0UGFydHNPcGFjaXR5KHBhcnRzSW5kZXgsIHZpc2libGVPcGFjaXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBvcGFjaXR5ID0gbW9kZWwuZ2V0UGFydHNPcGFjaXR5KHBhcnRzSW5kZXgpO1xyXG4gICAgICAgICAgICB2YXIgYTE7XHJcbiAgICAgICAgICAgIGlmICh2aXNpYmxlT3BhY2l0eSA8IHBoaSkge1xyXG4gICAgICAgICAgICAgICAgYTEgPSB2aXNpYmxlT3BhY2l0eSAqIChwaGkgLSAxKSAvIHBoaSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhMSA9ICgxIC0gdmlzaWJsZU9wYWNpdHkpICogcGhpIC8gKDEgLSBwaGkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBiYWNrT3AgPSAoMSAtIGExKSAqICgxIC0gdmlzaWJsZU9wYWNpdHkpO1xyXG4gICAgICAgICAgICBpZiAoYmFja09wID4gbWF4QmFja09wYWNpdHkpIHtcclxuICAgICAgICAgICAgICAgIGExID0gMSAtIG1heEJhY2tPcGFjaXR5IC8gKDEgLSB2aXNpYmxlT3BhY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9wYWNpdHkgPiBhMSkge1xyXG4gICAgICAgICAgICAgICAgb3BhY2l0eSA9IGExO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1vZGVsLnNldFBhcnRzT3BhY2l0eShwYXJ0c0luZGV4LCBvcGFjaXR5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRFBvc2UgIyBjb3B5T3BhY2l0eU90aGVyUGFydHMoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRQb3NlLnByb3RvdHlwZS5jb3B5T3BhY2l0eU90aGVyUGFydHMgPSBmdW5jdGlvbiAobW9kZWwvKkFMaXZlMkRNb2RlbCovLCBwYXJ0c0dyb3VwLypMMkRQYXJ0c1BhcmFtW10qLykge1xyXG4gICAgZm9yICh2YXIgaV9ncm91cCA9IDA7IGlfZ3JvdXAgPCBwYXJ0c0dyb3VwLmxlbmd0aDsgaV9ncm91cCsrKSB7XHJcbiAgICAgICAgdmFyIHBhcnRzUGFyYW0gPSBwYXJ0c0dyb3VwW2lfZ3JvdXBdOyAvL0wyRFBhcnRzUGFyYW1cclxuICAgICAgICBpZiAocGFydHNQYXJhbS5saW5rID09IG51bGwpIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmIChwYXJ0c1BhcmFtLnBhcnRzSW5kZXggPCAwKSBjb250aW51ZTtcclxuICAgICAgICB2YXIgb3BhY2l0eSA9IG1vZGVsLmdldFBhcnRzT3BhY2l0eShwYXJ0c1BhcmFtLnBhcnRzSW5kZXgpO1xyXG4gICAgICAgIGZvciAodmFyIGlfbGluayA9IDA7IGlfbGluayA8IHBhcnRzUGFyYW0ubGluay5sZW5ndGg7IGlfbGluaysrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rUGFydHMgPSBwYXJ0c1BhcmFtLmxpbmtbaV9saW5rXTsgLy9MMkRQYXJ0c1BhcmFtXHJcbiAgICAgICAgICAgIGlmIChsaW5rUGFydHMucGFydHNJbmRleCA8IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBtb2RlbC5zZXRQYXJ0c09wYWNpdHkobGlua1BhcnRzLnBhcnRzSW5kZXgsIG9wYWNpdHkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gIGNsYXNzIEwyRFBhcnRzUGFyYW0gICAgICAgIFxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5mdW5jdGlvbiBMMkRQYXJ0c1BhcmFtKGlkLypTdHJpbmcqLykge1xyXG4gICAgdGhpcy5wYXJhbUluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnBhcnRzSW5kZXggPSAtMTtcclxuICAgIHRoaXMubGluayA9IG51bGw7IC8vIEFycmF5TGlzdDxMMkRQYXJ0c1BhcmFtPlxyXG4gICAgdGhpcy5pZCA9IGlkO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRQYXJ0c1BhcmFtICMgaW5pdEluZGV4KClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEUGFydHNQYXJhbS5wcm90b3R5cGUuaW5pdEluZGV4ID0gZnVuY3Rpb24gKG1vZGVsLypBTGl2ZTJETW9kZWwqLykge1xyXG4gICAgdGhpcy5wYXJhbUluZGV4ID0gbW9kZWwuZ2V0UGFyYW1JbmRleChcIlZJU0lCTEU6XCIgKyB0aGlzLmlkKTtcclxuICAgIHRoaXMucGFydHNJbmRleCA9IG1vZGVsLmdldFBhcnRzRGF0YUluZGV4KFBhcnRzRGF0YUlELmdldElEKHRoaXMuaWQpKTtcclxuICAgIG1vZGVsLnNldFBhcmFtRmxvYXQodGhpcy5wYXJhbUluZGV4LCAxKTtcclxufVxyXG4vKipcclxuICpcclxuICogIFlvdSBjYW4gbW9kaWZ5IGFuZCB1c2UgdGhpcyBzb3VyY2UgZnJlZWx5XHJcbiAqICBvbmx5IGZvciB0aGUgZGV2ZWxvcG1lbnQgb2YgYXBwbGljYXRpb24gcmVsYXRlZCBMaXZlMkQuXHJcbiAqXHJcbiAqICAoYykgTGl2ZTJEIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgY2xhc3MgTDJEVGFyZ2V0UG9pbnQgICAgICAgXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbmZ1bmN0aW9uIEwyRFRhcmdldFBvaW50KCkge1xyXG4gICAgdGhpcy5FUFNJTE9OID0gMC4wMTsgLy8g5aSJ5YyW44Gu5pyA5bCP5YCk77yI44GT44Gu5YCk5Lul5LiL44Gv54Sh6KaW44GV44KM44KL77yJXHJcbiAgICB0aGlzLmZhY2VUYXJnZXRYID0gMDtcclxuICAgIHRoaXMuZmFjZVRhcmdldFkgPSAwO1xyXG4gICAgdGhpcy5mYWNlWCA9IDA7XHJcbiAgICB0aGlzLmZhY2VZID0gMDtcclxuICAgIHRoaXMuZmFjZVZYID0gMDtcclxuICAgIHRoaXMuZmFjZVZZID0gMDtcclxuICAgIHRoaXMubGFzdFRpbWVTZWMgPSAwO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRUYXJnZXRQb2ludC5GUkFNRV9SQVRFID0gMzA7XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRUYXJnZXRQb2ludCAjIHNldCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFRhcmdldFBvaW50LnByb3RvdHlwZS5zZXRQb2ludCA9IGZ1bmN0aW9uICh4LypmbG9hdCovLCB5LypmbG9hdCovKSB7XHJcbiAgICB0aGlzLmZhY2VUYXJnZXRYID0geDtcclxuICAgIHRoaXMuZmFjZVRhcmdldFkgPSB5O1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRUYXJnZXRQb2ludCAjIGdldFgoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRUYXJnZXRQb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmZhY2VYO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRUYXJnZXRQb2ludCAjIGdldFkoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRUYXJnZXRQb2ludC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmZhY2VZO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRUYXJnZXRQb2ludCAjIHVwZGF0ZSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFRhcmdldFBvaW50LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgVElNRV9UT19NQVhfU1BFRUQgPSAwLjE1O1xyXG4gICAgdmFyIEZBQ0VfUEFSQU1fTUFYX1YgPSA0MC4wIC8gNy41O1xyXG4gICAgdmFyIE1BWF9WID0gRkFDRV9QQVJBTV9NQVhfViAvIEwyRFRhcmdldFBvaW50LkZSQU1FX1JBVEU7XHJcbiAgICBpZiAodGhpcy5sYXN0VGltZVNlYyA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0VGltZVNlYyA9IFV0U3lzdGVtLmdldFVzZXJUaW1lTVNlYygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBjdXJUaW1lU2VjID0gVXRTeXN0ZW0uZ2V0VXNlclRpbWVNU2VjKCk7XHJcbiAgICB2YXIgZGVsdGFUaW1lV2VpZ2h0ID0gKGN1clRpbWVTZWMgLSB0aGlzLmxhc3RUaW1lU2VjKSAqIEwyRFRhcmdldFBvaW50LkZSQU1FX1JBVEUgLyAxMDAwLjA7XHJcbiAgICB0aGlzLmxhc3RUaW1lU2VjID0gY3VyVGltZVNlYztcclxuICAgIHZhciBGUkFNRV9UT19NQVhfU1BFRUQgPSBUSU1FX1RPX01BWF9TUEVFRCAqIEwyRFRhcmdldFBvaW50LkZSQU1FX1JBVEU7XHJcbiAgICB2YXIgTUFYX0EgPSBkZWx0YVRpbWVXZWlnaHQgKiBNQVhfViAvIEZSQU1FX1RPX01BWF9TUEVFRDtcclxuICAgIHZhciBkeCA9ICh0aGlzLmZhY2VUYXJnZXRYIC0gdGhpcy5mYWNlWCk7XHJcbiAgICB2YXIgZHkgPSAodGhpcy5mYWNlVGFyZ2V0WSAtIHRoaXMuZmFjZVkpO1xyXG4gICAgLy8gaWYoZHggPT0gMCAmJiBkeSA9PSAwKSByZXR1cm47XHJcbiAgICBpZiAoTWF0aC5hYnMoZHgpIDw9IHRoaXMuRVBTSUxPTiAmJiBNYXRoLmFicyhkeSkgPD0gdGhpcy5FUFNJTE9OKSByZXR1cm47XHJcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbiAgICB2YXIgdnggPSBNQVhfViAqIGR4IC8gZDtcclxuICAgIHZhciB2eSA9IE1BWF9WICogZHkgLyBkO1xyXG4gICAgdmFyIGF4ID0gdnggLSB0aGlzLmZhY2VWWDtcclxuICAgIHZhciBheSA9IHZ5IC0gdGhpcy5mYWNlVlk7XHJcbiAgICB2YXIgYSA9IE1hdGguc3FydChheCAqIGF4ICsgYXkgKiBheSk7XHJcbiAgICBpZiAoYSA8IC1NQVhfQSB8fCBhID4gTUFYX0EpIHtcclxuICAgICAgICBheCAqPSBNQVhfQSAvIGE7XHJcbiAgICAgICAgYXkgKj0gTUFYX0EgLyBhO1xyXG4gICAgICAgIGEgPSBNQVhfQTtcclxuICAgIH1cclxuICAgIHRoaXMuZmFjZVZYICs9IGF4O1xyXG4gICAgdGhpcy5mYWNlVlkgKz0gYXk7XHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1heF92ID0gMC41ICogKE1hdGguc3FydChNQVhfQSAqIE1BWF9BICsgMTYgKiBNQVhfQSAqIGQgLSA4ICogTUFYX0EgKiBkKSAtIE1BWF9BKTtcclxuICAgICAgICB2YXIgY3VyX3YgPSBNYXRoLnNxcnQodGhpcy5mYWNlVlggKiB0aGlzLmZhY2VWWCArIHRoaXMuZmFjZVZZICogdGhpcy5mYWNlVlkpO1xyXG4gICAgICAgIGlmIChjdXJfdiA+IG1heF92KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmFjZVZYICo9IG1heF92IC8gY3VyX3Y7XHJcbiAgICAgICAgICAgIHRoaXMuZmFjZVZZICo9IG1heF92IC8gY3VyX3Y7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5mYWNlWCArPSB0aGlzLmZhY2VWWDtcclxuICAgIHRoaXMuZmFjZVkgKz0gdGhpcy5mYWNlVlk7XHJcbn1cclxuLyoqXHJcbiAqXHJcbiAqICBZb3UgY2FuIG1vZGlmeSBhbmQgdXNlIHRoaXMgc291cmNlIGZyZWVseVxyXG4gKiAgb25seSBmb3IgdGhlIGRldmVsb3BtZW50IG9mIGFwcGxpY2F0aW9uIHJlbGF0ZWQgTGl2ZTJELlxyXG4gKlxyXG4gKiAgKGMpIExpdmUyRCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqL1xyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gIGNsYXNzIEwyRFZpZXdNYXRyaXggICAgICAgIGV4dGVuZHMgICAgIEwyRE1hdHJpeDQ0XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbmZ1bmN0aW9uIEwyRFZpZXdNYXRyaXgoKSB7XHJcbiAgICBMMkRNYXRyaXg0NC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcclxuICAgIHRoaXMuc2NyZWVuTGVmdCA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlblJpZ2h0ID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuVG9wID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuQm90dG9tID0gbnVsbDtcclxuICAgIHRoaXMubWF4TGVmdCA9IG51bGw7XHJcbiAgICB0aGlzLm1heFJpZ2h0ID0gbnVsbDtcclxuICAgIHRoaXMubWF4VG9wID0gbnVsbDtcclxuICAgIHRoaXMubWF4Qm90dG9tID0gbnVsbDtcclxuICAgIHRoaXMubWF4ID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuICAgIHRoaXMubWluID0gMDtcclxufVxyXG5cclxuTDJEVmlld01hdHJpeC5wcm90b3R5cGUgPSBuZXcgTDJETWF0cml4NDQoKTsgLy9MMkRWaWV3TWF0cml4IGV4dGVuZHMgTDJETWF0cml4NDRcclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRFZpZXdNYXRyaXggIyBnZXRNYXhTY2FsZSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFZpZXdNYXRyaXgucHJvdG90eXBlLmdldE1heFNjYWxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWF4O1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRWaWV3TWF0cml4ICMgZ2V0TWluU2NhbGUoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRWaWV3TWF0cml4LnByb3RvdHlwZS5nZXRNaW5TY2FsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLm1pbjtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEVmlld01hdHJpeCAjIHNldE1heFNjYWxlKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEVmlld01hdHJpeC5wcm90b3R5cGUuc2V0TWF4U2NhbGUgPSBmdW5jdGlvbiAodi8qZmxvYXQqLykge1xyXG4gICAgdGhpcy5tYXggPSB2O1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRWaWV3TWF0cml4ICMgc2V0TWluU2NhbGUoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRWaWV3TWF0cml4LnByb3RvdHlwZS5zZXRNaW5TY2FsZSA9IGZ1bmN0aW9uICh2LypmbG9hdCovKSB7XHJcbiAgICB0aGlzLm1pbiA9IHY7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRFZpZXdNYXRyaXggIyBpc01heFNjYWxlKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEVmlld01hdHJpeC5wcm90b3R5cGUuaXNNYXhTY2FsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmdldFNjYWxlWCgpID09IHRoaXMubWF4O1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRWaWV3TWF0cml4ICMgaXNNaW5TY2FsZSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFZpZXdNYXRyaXgucHJvdG90eXBlLmlzTWluU2NhbGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRTY2FsZVgoKSA9PSB0aGlzLm1pbjtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEVmlld01hdHJpeCAjIGFkanVzdFRyYW5zbGF0ZSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFZpZXdNYXRyaXgucHJvdG90eXBlLmFkanVzdFRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChzaGlmdFgvKmZsb2F0Ki8sIHNoaWZ0WS8qZmxvYXQqLykge1xyXG4gICAgaWYgKHRoaXMudHJbMF0gKiB0aGlzLm1heExlZnQgKyAodGhpcy50clsxMl0gKyBzaGlmdFgpID4gdGhpcy5zY3JlZW5MZWZ0KVxyXG4gICAgICAgIHNoaWZ0WCA9IHRoaXMuc2NyZWVuTGVmdCAtIHRoaXMudHJbMF0gKiB0aGlzLm1heExlZnQgLSB0aGlzLnRyWzEyXTtcclxuICAgIGlmICh0aGlzLnRyWzBdICogdGhpcy5tYXhSaWdodCArICh0aGlzLnRyWzEyXSArIHNoaWZ0WCkgPCB0aGlzLnNjcmVlblJpZ2h0KVxyXG4gICAgICAgIHNoaWZ0WCA9IHRoaXMuc2NyZWVuUmlnaHQgLSB0aGlzLnRyWzBdICogdGhpcy5tYXhSaWdodCAtIHRoaXMudHJbMTJdO1xyXG4gICAgaWYgKHRoaXMudHJbNV0gKiB0aGlzLm1heFRvcCArICh0aGlzLnRyWzEzXSArIHNoaWZ0WSkgPCB0aGlzLnNjcmVlblRvcClcclxuICAgICAgICBzaGlmdFkgPSB0aGlzLnNjcmVlblRvcCAtIHRoaXMudHJbNV0gKiB0aGlzLm1heFRvcCAtIHRoaXMudHJbMTNdO1xyXG4gICAgaWYgKHRoaXMudHJbNV0gKiB0aGlzLm1heEJvdHRvbSArICh0aGlzLnRyWzEzXSArIHNoaWZ0WSkgPiB0aGlzLnNjcmVlbkJvdHRvbSlcclxuICAgICAgICBzaGlmdFkgPSB0aGlzLnNjcmVlbkJvdHRvbSAtIHRoaXMudHJbNV0gKiB0aGlzLm1heEJvdHRvbSAtIHRoaXMudHJbMTNdO1xyXG5cclxuICAgIHZhciB0cjEgPSBbMSwgMCwgMCwgMCxcclxuICAgICAgICAwLCAxLCAwLCAwLFxyXG4gICAgICAgIDAsIDAsIDEsIDAsXHJcbiAgICAgICAgc2hpZnRYLCBzaGlmdFksIDAsIDFdO1xyXG4gICAgTDJETWF0cml4NDQubXVsKHRyMSwgdGhpcy50ciwgdGhpcy50cik7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRFZpZXdNYXRyaXggIyBhZGp1c3RTY2FsZSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFZpZXdNYXRyaXgucHJvdG90eXBlLmFkanVzdFNjYWxlID0gZnVuY3Rpb24gKGN4LypmbG9hdCovLCBjeS8qZmxvYXQqLywgc2NhbGUvKmZsb2F0Ki8pIHtcclxuICAgIHZhciB0YXJnZXRTY2FsZSA9IHNjYWxlICogdGhpcy50clswXTtcclxuICAgIGlmICh0YXJnZXRTY2FsZSA8IHRoaXMubWluKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJbMF0gPiAwKSBzY2FsZSA9IHRoaXMubWluIC8gdGhpcy50clswXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRhcmdldFNjYWxlID4gdGhpcy5tYXgpIHtcclxuICAgICAgICBpZiAodGhpcy50clswXSA+IDApIHNjYWxlID0gdGhpcy5tYXggLyB0aGlzLnRyWzBdO1xyXG4gICAgfVxyXG4gICAgdmFyIHRyMSA9IFsxLCAwLCAwLCAwLFxyXG4gICAgICAgIDAsIDEsIDAsIDAsXHJcbiAgICAgICAgMCwgMCwgMSwgMCxcclxuICAgICAgICBjeCwgY3ksIDAsIDFdO1xyXG4gICAgdmFyIHRyMiA9IFtzY2FsZSwgMCwgMCwgMCxcclxuICAgICAgICAwLCBzY2FsZSwgMCwgMCxcclxuICAgICAgICAwLCAwLCAxLCAwLFxyXG4gICAgICAgIDAsIDAsIDAsIDFdO1xyXG4gICAgdmFyIHRyMyA9IFsxLCAwLCAwLCAwLFxyXG4gICAgICAgIDAsIDEsIDAsIDAsXHJcbiAgICAgICAgMCwgMCwgMSwgMCxcclxuICAgICAgICAtY3gsIC1jeSwgMCwgMV07XHJcbiAgICBMMkRNYXRyaXg0NC5tdWwodHIzLCB0aGlzLnRyLCB0aGlzLnRyKTtcclxuICAgIEwyRE1hdHJpeDQ0Lm11bCh0cjIsIHRoaXMudHIsIHRoaXMudHIpO1xyXG4gICAgTDJETWF0cml4NDQubXVsKHRyMSwgdGhpcy50ciwgdGhpcy50cik7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIEwyRFZpZXdNYXRyaXggIyBzZXRTY3JlZW5SZWN0KClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEVmlld01hdHJpeC5wcm90b3R5cGUuc2V0U2NyZWVuUmVjdCA9IGZ1bmN0aW9uIChsZWZ0LypmbG9hdCovLCByaWdodC8qZmxvYXQqLywgYm90dG9tLypmbG9hdCovLCB0b3AvKmZsb2F0Ki8pIHtcclxuICAgIHRoaXMuc2NyZWVuTGVmdCA9IGxlZnQ7XHJcbiAgICB0aGlzLnNjcmVlblJpZ2h0ID0gcmlnaHQ7XHJcbiAgICB0aGlzLnNjcmVlblRvcCA9IHRvcDtcclxuICAgIHRoaXMuc2NyZWVuQm90dG9tID0gYm90dG9tO1xyXG59XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAgICBMMkRWaWV3TWF0cml4ICMgc2V0TWF4U2NyZWVuUmVjdCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFZpZXdNYXRyaXgucHJvdG90eXBlLnNldE1heFNjcmVlblJlY3QgPSBmdW5jdGlvbiAobGVmdC8qZmxvYXQqLywgcmlnaHQvKmZsb2F0Ki8sIGJvdHRvbS8qZmxvYXQqLywgdG9wLypmbG9hdCovKSB7XHJcbiAgICB0aGlzLm1heExlZnQgPSBsZWZ0O1xyXG4gICAgdGhpcy5tYXhSaWdodCA9IHJpZ2h0O1xyXG4gICAgdGhpcy5tYXhUb3AgPSB0b3A7XHJcbiAgICB0aGlzLm1heEJvdHRvbSA9IGJvdHRvbTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEVmlld01hdHJpeCAjIGdldFNjcmVlbkxlZnQoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRWaWV3TWF0cml4LnByb3RvdHlwZS5nZXRTY3JlZW5MZWZ0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NyZWVuTGVmdDtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEVmlld01hdHJpeCAjIGdldFNjcmVlblJpZ2h0KClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEVmlld01hdHJpeC5wcm90b3R5cGUuZ2V0U2NyZWVuUmlnaHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY3JlZW5SaWdodDtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEVmlld01hdHJpeCAjIGdldFNjcmVlbkJvdHRvbSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFZpZXdNYXRyaXgucHJvdG90eXBlLmdldFNjcmVlbkJvdHRvbSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnNjcmVlbkJvdHRvbTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEVmlld01hdHJpeCAjIGdldFNjcmVlblRvcCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFZpZXdNYXRyaXgucHJvdG90eXBlLmdldFNjcmVlblRvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnNjcmVlblRvcDtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEVmlld01hdHJpeCAjIGdldE1heExlZnQoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MMkRWaWV3TWF0cml4LnByb3RvdHlwZS5nZXRNYXhMZWZ0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWF4TGVmdDtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEVmlld01hdHJpeCAjIGdldE1heFJpZ2h0KClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTDJEVmlld01hdHJpeC5wcm90b3R5cGUuZ2V0TWF4UmlnaHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXhSaWdodDtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEVmlld01hdHJpeCAjIGdldE1heEJvdHRvbSgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFZpZXdNYXRyaXgucHJvdG90eXBlLmdldE1heEJvdHRvbSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLm1heEJvdHRvbTtcclxufVxyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgTDJEVmlld01hdHJpeCAjIGdldE1heFRvcCgpXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkwyRFZpZXdNYXRyaXgucHJvdG90eXBlLmdldE1heFRvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLm1heFRvcDtcclxufVxyXG5cclxuLyoqXHJcbiAqXHJcbiAqICBZb3UgY2FuIG1vZGlmeSBhbmQgdXNlIHRoaXMgc291cmNlIGZyZWVseVxyXG4gKiAgb25seSBmb3IgdGhlIGRldmVsb3BtZW50IG9mIGFwcGxpY2F0aW9uIHJlbGF0ZWQgTGl2ZTJELlxyXG4gKlxyXG4gKiAgKGMpIExpdmUyRCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqL1xyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gIGNsYXNzIExpdmUyREZyYW1ld29yayAgICAgIFxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5mdW5jdGlvbiBMaXZlMkRGcmFtZXdvcmsoKSB7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbkxpdmUyREZyYW1ld29yay5wbGF0Zm9ybU1hbmFnZXIgPSBudWxsO1xyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gICAgc3RhdGljIExpdmUyREZyYW1ld29yay5nZXRQbGF0Zm9ybU1hbmFnZXIoKVxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5MaXZlMkRGcmFtZXdvcmsuZ2V0UGxhdGZvcm1NYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIExpdmUyREZyYW1ld29yay5wbGF0Zm9ybU1hbmFnZXI7XHJcbn1cclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vICAgIHN0YXRpYyBMaXZlMkRGcmFtZXdvcmsuc2V0UGxhdGZvcm1NYW5hZ2VyKClcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuTGl2ZTJERnJhbWV3b3JrLnNldFBsYXRmb3JtTWFuYWdlciA9IGZ1bmN0aW9uIChwbGF0Zm9ybU1hbmFnZXIgLypJUGxhdGZvcm1NYW5hZ2VyKi8pIHtcclxuICAgIExpdmUyREZyYW1ld29yay5wbGF0Zm9ybU1hbmFnZXIgPSBwbGF0Zm9ybU1hbmFnZXI7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgTDJEVGFyZ2V0UG9pbnQ6IEwyRFRhcmdldFBvaW50LFxyXG4gICAgTGl2ZTJERnJhbWV3b3JrOiBMaXZlMkRGcmFtZXdvcmssXHJcbiAgICBMMkRWaWV3TWF0cml4OiBMMkRWaWV3TWF0cml4LFxyXG4gICAgTDJEUG9zZTogTDJEUG9zZSxcclxuICAgIEwyRFBhcnRzUGFyYW06IEwyRFBhcnRzUGFyYW0sXHJcbiAgICBMMkRQaHlzaWNzOiBMMkRQaHlzaWNzLFxyXG4gICAgTDJETW90aW9uTWFuYWdlcjogTDJETW90aW9uTWFuYWdlcixcclxuICAgIEwyRE1vZGVsTWF0cml4OiBMMkRNb2RlbE1hdHJpeCxcclxuICAgIEwyRE1hdHJpeDQ0OiBMMkRNYXRyaXg0NCxcclxuICAgIEVZRV9TVEFURTogRVlFX1NUQVRFLFxyXG4gICAgTDJERXllQmxpbms6IEwyREV5ZUJsaW5rLFxyXG4gICAgTDJERXhwcmVzc2lvblBhcmFtOiBMMkRFeHByZXNzaW9uUGFyYW0sXHJcbiAgICBMMkRFeHByZXNzaW9uTW90aW9uOiBMMkRFeHByZXNzaW9uTW90aW9uLFxyXG4gICAgTDJEQmFzZU1vZGVsOiBMMkRCYXNlTW9kZWxcclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvbGliL0xpdmUyREZyYW1ld29yay5qcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdkNBO0FBeUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n')},/*!***************************!*\ + !*** ./src/LAppDefine.js ***! + \***************************/ +function(module,exports,__webpack_require__){"use strict";eval('\n\nvar LAppDefine = {\n\n DEBUG_LOG: false,\n DEBUG_MOUSE_LOG: false,\n // DEBUG_DRAW_HIT_AREA : false, \n // DEBUG_DRAW_ALPHA_MODEL : false, \n\n\n VIEW_MAX_SCALE: 2,\n VIEW_MIN_SCALE: 0.8,\n\n VIEW_LOGICAL_LEFT: -1,\n VIEW_LOGICAL_RIGHT: 1,\n\n VIEW_LOGICAL_MAX_LEFT: -2,\n VIEW_LOGICAL_MAX_RIGHT: 2,\n VIEW_LOGICAL_MAX_BOTTOM: -2,\n VIEW_LOGICAL_MAX_TOP: 2,\n\n PRIORITY_NONE: 0,\n PRIORITY_IDLE: 1,\n PRIORITY_NORMAL: 2,\n PRIORITY_FORCE: 3,\n\n MOTION_GROUP_IDLE: "idle",\n MOTION_GROUP_TAP_BODY: "tap_body",\n MOTION_GROUP_FLICK_HEAD: "flick_head",\n MOTION_GROUP_PINCH_IN: "pinch_in",\n MOTION_GROUP_PINCH_OUT: "pinch_out",\n MOTION_GROUP_SHAKE: "shake",\n\n HIT_AREA_HEAD: "head",\n HIT_AREA_BODY: "body"\n\n};\n\nmodule.exports = LAppDefine;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvTEFwcERlZmluZS5qcz85MWEyIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBMQXBwRGVmaW5lID0ge1xuICAgIFxuICAgIFxuICAgIERFQlVHX0xPRyA6IGZhbHNlLFxuICAgIERFQlVHX01PVVNFX0xPRyA6IGZhbHNlLCBcbiAgICAvLyBERUJVR19EUkFXX0hJVF9BUkVBIDogZmFsc2UsIFxuICAgIC8vIERFQlVHX0RSQVdfQUxQSEFfTU9ERUwgOiBmYWxzZSwgXG4gICAgXG4gICAgXG4gICAgXG4gICAgXG4gICAgVklFV19NQVhfU0NBTEUgOiAyLFxuICAgIFZJRVdfTUlOX1NDQUxFIDogMC44LFxuXG4gICAgVklFV19MT0dJQ0FMX0xFRlQgOiAtMSxcbiAgICBWSUVXX0xPR0lDQUxfUklHSFQgOiAxLFxuXG4gICAgVklFV19MT0dJQ0FMX01BWF9MRUZUIDogLTIsXG4gICAgVklFV19MT0dJQ0FMX01BWF9SSUdIVCA6IDIsXG4gICAgVklFV19MT0dJQ0FMX01BWF9CT1RUT00gOiAtMixcbiAgICBWSUVXX0xPR0lDQUxfTUFYX1RPUCA6IDIsXG4gICAgXG4gICAgXG4gICAgUFJJT1JJVFlfTk9ORSA6IDAsXG4gICAgUFJJT1JJVFlfSURMRSA6IDEsXG4gICAgUFJJT1JJVFlfTk9STUFMIDogMixcbiAgICBQUklPUklUWV9GT1JDRSA6IDMsXG5cbiAgICBNT1RJT05fR1JPVVBfSURMRSA6IFwiaWRsZVwiLCBcbiAgICBNT1RJT05fR1JPVVBfVEFQX0JPRFkgOiBcInRhcF9ib2R5XCIsIFxuICAgIE1PVElPTl9HUk9VUF9GTElDS19IRUFEIDogXCJmbGlja19oZWFkXCIsIFxuICAgIE1PVElPTl9HUk9VUF9QSU5DSF9JTiA6IFwicGluY2hfaW5cIiwgXG4gICAgTU9USU9OX0dST1VQX1BJTkNIX09VVCA6IFwicGluY2hfb3V0XCIsIFxuICAgIE1PVElPTl9HUk9VUF9TSEFLRSA6IFwic2hha2VcIiwgXG5cbiAgICBcbiAgICBISVRfQVJFQV9IRUFEIDogXCJoZWFkXCIsXG4gICAgSElUX0FSRUFfQk9EWSA6IFwiYm9keVwiXG4gICAgXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExBcHBEZWZpbmU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9MQXBwRGVmaW5lLmpzIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBdENBO0FBQ0E7QUF3Q0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n')},/*!********************************!*\ + !*** ./src/lib/MatrixStack.js ***! + \********************************/ +function(module,exports,__webpack_require__){"use strict";eval('\n\n/**\n *\n * You can modify and use this source freely\n * only for the development of application related Live2D.\n *\n * (c) Live2D Inc. All rights reserved.\n */\n/**\n * EYHN 修改\n * \n * Copyright © 2016 - 2017 EYHN\n */\n\nfunction MatrixStack() {}\n\nMatrixStack.matrixStack = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\nMatrixStack.depth = 0;\n\nMatrixStack.currentMatrix = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\nMatrixStack.tmp = new Array(16);\n\nMatrixStack.reset = function () {\n this.depth = 0;\n};\n\nMatrixStack.loadIdentity = function () {\n for (var i = 0; i < 16; i++) {\n this.currentMatrix[i] = i % 5 == 0 ? 1 : 0;\n }\n};\n\nMatrixStack.push = function () {\n var offset = this.depth * 16;\n var nextOffset = (this.depth + 1) * 16;\n\n if (this.matrixStack.length < nextOffset + 16) {\n this.matrixStack.length = nextOffset + 16;\n }\n\n for (var i = 0; i < 16; i++) {\n this.matrixStack[nextOffset + i] = this.currentMatrix[i];\n }\n\n this.depth++;\n};\n\nMatrixStack.pop = function () {\n this.depth--;\n if (this.depth < 0) {\n myError("Invalid matrix stack.");\n this.depth = 0;\n }\n\n var offset = this.depth * 16;\n for (var i = 0; i < 16; i++) {\n this.currentMatrix[i] = this.matrixStack[offset + i];\n }\n};\n\nMatrixStack.getMatrix = function () {\n return this.currentMatrix;\n};\n\nMatrixStack.multMatrix = function (matNew) {\n var i, j, k;\n\n for (i = 0; i < 16; i++) {\n this.tmp[i] = 0;\n }\n\n for (i = 0; i < 4; i++) {\n for (j = 0; j < 4; j++) {\n for (k = 0; k < 4; k++) {\n this.tmp[i + j * 4] += this.currentMatrix[i + k * 4] * matNew[k + j * 4];\n }\n }\n }\n for (i = 0; i < 16; i++) {\n this.currentMatrix[i] = this.tmp[i];\n }\n};\n\nmodule.exports = MatrixStack;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvbGliL01hdHJpeFN0YWNrLmpzPzRmY2YiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKlxuICogIFlvdSBjYW4gbW9kaWZ5IGFuZCB1c2UgdGhpcyBzb3VyY2UgZnJlZWx5XG4gKiAgb25seSBmb3IgdGhlIGRldmVsb3BtZW50IG9mIGFwcGxpY2F0aW9uIHJlbGF0ZWQgTGl2ZTJELlxuICpcbiAqICAoYykgTGl2ZTJEIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqL1xuLyoqXG4gKiBFWUhOIOS/ruaUuVxuICogXG4gKiBDb3B5cmlnaHQgwqkgMjAxNiAtIDIwMTcgRVlITlxuICovXG5cbmZ1bmN0aW9uIE1hdHJpeFN0YWNrKCkge31cblxuXG5NYXRyaXhTdGFjay5tYXRyaXhTdGFjayA9IFsxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxXTtcblxuXG5NYXRyaXhTdGFjay5kZXB0aCA9IDA7XG5cblxuTWF0cml4U3RhY2suY3VycmVudE1hdHJpeCA9IFsxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxXTtcblxuXG5NYXRyaXhTdGFjay50bXAgPSBuZXcgQXJyYXkoMTYpO1xuXG5cblxuTWF0cml4U3RhY2sucmVzZXQgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5kZXB0aCA9IDA7XG59XG5cblxuXG5NYXRyaXhTdGFjay5sb2FkSWRlbnRpdHkgPSBmdW5jdGlvbigpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TWF0cml4W2ldID0gKGkgJSA1ID09IDApID8gMSA6IDA7XG4gICAgfVxufVxuXG5cblxuTWF0cml4U3RhY2sucHVzaCA9IGZ1bmN0aW9uKClcbnsgICAgXG4gICAgdmFyIG9mZnNldCA9IHRoaXMuZGVwdGggKiAxNjtcbiAgICB2YXIgbmV4dE9mZnNldCA9ICh0aGlzLmRlcHRoICsgMSkgKiAxNjtcbiAgICBcbiAgICBpZiAodGhpcy5tYXRyaXhTdGFjay5sZW5ndGggPCBuZXh0T2Zmc2V0ICsgMTYpXG4gICAge1xuICAgICAgICB0aGlzLm1hdHJpeFN0YWNrLmxlbmd0aCA9IG5leHRPZmZzZXQgKyAxNjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLm1hdHJpeFN0YWNrW25leHRPZmZzZXQgKyBpXSA9IHRoaXMuY3VycmVudE1hdHJpeFtpXTtcbiAgICB9XG5cbiAgICB0aGlzLmRlcHRoKys7XG59XG5cblxuXG5NYXRyaXhTdGFjay5wb3AgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5kZXB0aC0tO1xuICAgIGlmICh0aGlzLmRlcHRoIDwgMClcbiAgICB7XG4gICAgICAgIG15RXJyb3IoXCJJbnZhbGlkIG1hdHJpeCBzdGFjay5cIik7XG4gICAgICAgIHRoaXMuZGVwdGggPSAwO1xuICAgIH1cblxuICAgIHZhciBvZmZzZXQgPSB0aGlzLmRlcHRoICogMTY7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TWF0cml4W2ldID0gdGhpcy5tYXRyaXhTdGFja1tvZmZzZXQgKyBpXTtcbiAgICB9XG59XG5cblxuXG5NYXRyaXhTdGFjay5nZXRNYXRyaXggPSBmdW5jdGlvbigpXG57XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudE1hdHJpeDtcbn1cblxuXG5cbk1hdHJpeFN0YWNrLm11bHRNYXRyaXggPSBmdW5jdGlvbihtYXROZXcpXG57XG4gICAgdmFyIGksIGosIGs7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudG1wW2ldID0gMDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IDQ7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IDQ7IGsrKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFtpICsgaiAqIDRdICs9IHRoaXMuY3VycmVudE1hdHJpeFtpICsgayAqIDRdICogbWF0TmV3W2sgKyBqICogNF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRNYXRyaXhbaV0gPSB0aGlzLnRtcFtpXTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWF0cml4U3RhY2s7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9saWIvTWF0cml4U3RhY2suanMiXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7QUFPQTs7Ozs7O0FBTUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2\n')},/*!*****************************!*\ + !*** ./src/webglcontext.js ***! + \*****************************/ +function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.setContext = setContext;\nexports.getContext = getContext;\n\nvar context = undefined;\n\nfunction setContext(webglContext) {\n context = webglContext;\n}\n\nfunction getContext() {\n return context;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvd2ViZ2xjb250ZXh0LmpzP2M0NzMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbnZhciBjb250ZXh0ID0gdW5kZWZpbmVkO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbnRleHQod2ViZ2xDb250ZXh0KSB7XHJcbiAgY29udGV4dCA9IHdlYmdsQ29udGV4dDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHQoKSB7XHJcbiAgcmV0dXJuIGNvbnRleHQ7XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL3dlYmdsY29udGV4dC5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQTtBQUlBO0FBQ0E7QUFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3\n')},/*!*********************!*\ + !*** ./src/main.js ***! + \*********************/ +function(module,exports,__webpack_require__){"use strict";eval('\n\n__webpack_require__(/*! ./lib/live2d.min */ 9);\n\nvar _Live2DFramework = __webpack_require__(/*! ./lib/Live2DFramework */ 0);\n\nvar _LAppLive2DManager = __webpack_require__(/*! ./LAppLive2DManager */ 5);\n\nvar _LAppLive2DManager2 = _interopRequireDefault(_LAppLive2DManager);\n\nvar _LAppDefine = __webpack_require__(/*! ./LAppDefine */ 1);\n\nvar _LAppDefine2 = _interopRequireDefault(_LAppDefine);\n\nvar _MatrixStack = __webpack_require__(/*! ./lib/MatrixStack */ 2);\n\nvar _MatrixStack2 = _interopRequireDefault(_MatrixStack);\n\nvar _webglcontext = __webpack_require__(/*! ./webglcontext */ 3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// window.onerror = function (msg, url, line, col, error) {\n// let errmsg = "file:" + url + "
line:" + line + " " + msg;\n// console.error(errmsg);\n// }\n\nvar platform = window.navigator.platform.toLowerCase();\n\nvar live2DMgr = new _LAppLive2DManager2.default();\n\nvar isDrawStart = false;\n\nvar gl = null;\n\nvar canvas = null;\n\nvar dragMgr = null;\n\nvar viewMatrix = null;\n\nvar projMatrix = null;\n\nvar deviceToScreen = null;\n\nvar drag = false;\n\nvar oldLen = 0;\n\nvar lastMouseX = 0;\n\nvar lastMouseY = 0;\n\nvar isModelShown = 0;\n\nvar modelurl = "";\n\nvar head_pos = 0.5;\n\nfunction initL2dCanvas(canvasId) {\n canvas = document.getElementById(canvasId);\n if (canvas.addEventListener) {\n //canvas.addEventListener("mousewheel", mouseEvent);\n window.addEventListener("click", mouseEvent);\n window.addEventListener("mousedown", mouseEvent);\n window.addEventListener("mousemove", mouseEvent);\n window.addEventListener("mouseup", mouseEvent);\n document.addEventListener("mouseleave", mouseEvent);\n //canvas.addEventListener("contextmenu", mouseEvent);\n window.addEventListener("touchstart", touchEvent);\n window.addEventListener("touchend", touchEvent);\n window.addEventListener("touchmove", touchEvent);\n }\n}\n\nfunction init(modelurl) {\n var width = canvas.width;\n var height = canvas.height;\n\n dragMgr = new _Live2DFramework.L2DTargetPoint();\n\n var ratio = height / width;\n var left = _LAppDefine2.default.VIEW_LOGICAL_LEFT;\n var right = _LAppDefine2.default.VIEW_LOGICAL_RIGHT;\n var bottom = -ratio;\n var top = ratio;\n\n viewMatrix = new _Live2DFramework.L2DViewMatrix();\n\n viewMatrix.setScreenRect(left, right, bottom, top);\n\n viewMatrix.setMaxScreenRect(_LAppDefine2.default.VIEW_LOGICAL_MAX_LEFT, _LAppDefine2.default.VIEW_LOGICAL_MAX_RIGHT, _LAppDefine2.default.VIEW_LOGICAL_MAX_BOTTOM, _LAppDefine2.default.VIEW_LOGICAL_MAX_TOP);\n\n viewMatrix.setMaxScale(_LAppDefine2.default.VIEW_MAX_SCALE);\n viewMatrix.setMinScale(_LAppDefine2.default.VIEW_MIN_SCALE);\n\n projMatrix = new _Live2DFramework.L2DMatrix44();\n projMatrix.multScale(1, width / height);\n\n deviceToScreen = new _Live2DFramework.L2DMatrix44();\n deviceToScreen.multTranslate(-width / 2.0, -height / 2.0);\n deviceToScreen.multScale(2 / width, -2 / width);\n\n gl = getWebGLContext();\n (0, _webglcontext.setContext)(gl);\n if (!gl) {\n console.error("Failed to create WebGL context.");\n return;\n }\n window.Live2D.setGL(gl);\n gl.clearColor(0.0, 0.0, 0.0, 0.0);\n changeModel(modelurl);\n startDraw();\n}\n\nfunction startDraw() {\n if (!isDrawStart) {\n isDrawStart = true;\n (function tick() {\n draw();\n var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;\n\n requestAnimationFrame(tick, canvas);\n })();\n }\n}\n\nfunction draw() {\n _MatrixStack2.default.reset();\n _MatrixStack2.default.loadIdentity();\n dragMgr.update();\n live2DMgr.setDrag(dragMgr.getX(), dragMgr.getY());\n\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n _MatrixStack2.default.multMatrix(projMatrix.getArray());\n _MatrixStack2.default.multMatrix(viewMatrix.getArray());\n _MatrixStack2.default.push();\n\n for (var i = 0; i < live2DMgr.numModels(); i++) {\n var model = live2DMgr.getModel(i);\n\n if (model == null) return;\n\n if (model.initialized && !model.updating) {\n model.update();\n model.draw(gl);\n }\n }\n _MatrixStack2.default.pop();\n}\n\nfunction changeModel(modelurl) {\n live2DMgr.reloadFlg = true;\n live2DMgr.count++;\n live2DMgr.changeModel(gl, modelurl);\n}\n\nfunction modelScaling(scale) {\n var isMaxScale = viewMatrix.isMaxScale();\n var isMinScale = viewMatrix.isMinScale();\n\n viewMatrix.adjustScale(0, 0, scale);\n\n if (!isMaxScale) {\n if (viewMatrix.isMaxScale()) {\n live2DMgr.maxScaleEvent();\n }\n }\n\n if (!isMinScale) {\n if (viewMatrix.isMinScale()) {\n live2DMgr.minScaleEvent();\n }\n }\n}\n\nfunction transformRange(center, transform, range) {\n var a = {\n x: transform.x - center.x,\n y: transform.y - center.y\n };\n var r = Math.sqrt(Math.pow(a.x, 2) + Math.pow(a.y, 2));\n if (r > range) {\n a = {\n x: a.x / r * range + center.x,\n y: a.y / r * range + center.y\n };\n return a;\n } else {\n return transform;\n }\n}\n\nfunction dot(A, B) {\n return A.x * B.x + A.y * B.y;\n}\n\nfunction normalize(x, y) {\n var length = Math.sqrt(x * x + y * y);\n return {\n x: x / length,\n y: y / length\n };\n}\n\nfunction transformRect(center, transform, rect) {\n if (transform.x < rect.left + rect.width && transform.y < rect.top + rect.height && transform.x > rect.left && transform.y > rect.top) return transform;\n var Len_X = center.x - transform.x;\n var Len_Y = center.y - transform.y;\n\n function angle(Len_X, Len_Y) {\n return Math.acos(dot({\n x: 0,\n y: 1\n }, normalize(Len_X, Len_Y))) * 180 / Math.PI;\n }\n\n var angleTarget = angle(Len_X, Len_Y);\n if (transform.x < center.x) angleTarget = 360 - angleTarget;\n var angleLeftTop = 360 - angle(rect.left - center.x, (rect.top - center.y) * -1);\n var angleLeftBottom = 360 - angle(rect.left - center.x, (rect.top + rect.height - center.y) * -1);\n var angleRightTop = angle(rect.left + rect.width - center.x, (rect.top - center.y) * -1);\n var angleRightBottom = angle(rect.left + rect.width - center.x, (rect.top + rect.height - center.y) * -1);\n var scale = Len_Y / Len_X;\n var res = {};\n\n if (angleTarget < angleRightTop) {\n var y3 = rect.top - center.y;\n var x3 = y3 / scale;\n res = {\n y: center.y + y3,\n x: center.x + x3\n };\n } else if (angleTarget < angleRightBottom) {\n var _x = rect.left + rect.width - center.x;\n var _y = _x * scale;\n res = {\n y: center.y + _y,\n x: center.x + _x\n };\n } else if (angleTarget < angleLeftBottom) {\n var _y2 = rect.top + rect.height - center.y;\n var _x2 = _y2 / scale;\n res = {\n y: center.y + _y2,\n x: center.x + _x2\n };\n } else if (angleTarget < angleLeftTop) {\n var _x3 = center.x - rect.left;\n var _y3 = _x3 * scale;\n res = {\n y: center.y - _y3,\n x: center.x - _x3\n };\n } else {\n var _y4 = rect.top - center.y;\n var _x4 = _y4 / scale;\n res = {\n y: center.y + _y4,\n x: center.x + _x4\n };\n }\n\n return res;\n}\n\nfunction modelTurnHead(event) {\n drag = true;\n\n var rect = canvas.getBoundingClientRect();\n\n var sx = transformScreenX(event.clientX - rect.left);\n var sy = transformScreenY(event.clientY - rect.top);\n var target = transformRect({\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height * head_pos\n }, {\n x: event.clientX,\n y: event.clientY\n }, rect);\n var vx = transformViewX(target.x - rect.left);\n var vy = transformViewY(target.y - rect.top);\n\n if (_LAppDefine2.default.DEBUG_MOUSE_LOG) console.log("onMouseDown device( x:" + event.clientX + " y:" + event.clientY + " ) view( x:" + vx + " y:" + vy + ")");\n\n lastMouseX = sx;\n lastMouseY = sy;\n\n dragMgr.setPoint(vx, vy);\n\n live2DMgr.tapEvent(vx, vy);\n}\n\nfunction followPointer(event) {\n var rect = canvas.getBoundingClientRect();\n\n var sx = transformScreenX(event.clientX - rect.left);\n var sy = transformScreenY(event.clientY - rect.top);\n var target = transformRect({\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height * head_pos\n }, {\n x: event.clientX,\n y: event.clientY\n }, rect);\n var vx = transformViewX(target.x - rect.left);\n var vy = transformViewY(target.y - rect.top);\n\n if (_LAppDefine2.default.DEBUG_MOUSE_LOG) console.log("onMouseMove device( x:" + event.clientX + " y:" + event.clientY + " ) view( x:" + vx + " y:" + vy + ")");\n\n if (drag) {\n lastMouseX = sx;\n lastMouseY = sy;\n dragMgr.setPoint(vx, vy);\n }\n}\n\nfunction lookFront() {\n if (drag) {\n drag = false;\n }\n dragMgr.setPoint(0, 0);\n}\n\nfunction mouseEvent(e) {\n //e.preventDefault();\n if (e.type == "mousewheel") {\n // if (e.clientX < 0 || canvas.clientWidth < e.clientX || \n // e.clientY < 0 || canvas.clientHeight < e.clientY)\n // {\n // return;\n // }\n // if (e.wheelDelta > 0) modelScaling(1.1); \n // else modelScaling(0.9); \n } else if (e.type == "mousedown") {\n if ("button" in e && e.button != 0) return;\n // modelTurnHead(e);\n } else if (e.type == "mousemove") {\n modelTurnHead(e);\n } else if (e.type == "mouseup") {\n if ("button" in e && e.button != 0) return;\n // lookFront();\n } else if (e.type == "mouseleave") {\n lookFront();\n }\n}\n\nfunction touchEvent(e) {\n var touch = e.touches[0];\n if (e.type == "touchstart") {\n if (e.touches.length == 1) modelTurnHead(touch);\n // onClick(touch);\n } else if (e.type == "touchmove") {\n followPointer(touch);\n } else if (e.type == "touchend") {\n lookFront();\n }\n}\n\nfunction transformViewX(deviceX) {\n var screenX = deviceToScreen.transformX(deviceX);\n return viewMatrix.invertTransformX(screenX);\n}\n\nfunction transformViewY(deviceY) {\n var screenY = deviceToScreen.transformY(deviceY);\n return viewMatrix.invertTransformY(screenY);\n}\n\nfunction transformScreenX(deviceX) {\n return deviceToScreen.transformX(deviceX);\n}\n\nfunction transformScreenY(deviceY) {\n return deviceToScreen.transformY(deviceY);\n}\n\nfunction getWebGLContext() {\n var NAMES = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"];\n for (var i = 0; i < NAMES.length; i++) {\n try {\n var ctx = canvas.getContext(NAMES[i], { premultipliedAlpha: true });\n if (ctx) return ctx;\n } catch (e) {}\n }\n return null;\n};\n\nfunction loadlive2d(id, modelurl, headPos) {\n head_pos = typeof headPos === \'undefined\' ? 0.5 : headPos;\n initL2dCanvas(id);\n init(modelurl);\n}\n\nwindow.loadlive2d = loadlive2d;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvbWFpbi5qcz8xYzkwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vbGliL2xpdmUyZC5taW5cIjtcblxuaW1wb3J0IHsgTDJEVGFyZ2V0UG9pbnQsIEwyRFZpZXdNYXRyaXgsIEwyRE1hdHJpeDQ0IH0gZnJvbSBcIi4vbGliL0xpdmUyREZyYW1ld29ya1wiO1xuXG5pbXBvcnQgTEFwcExpdmUyRE1hbmFnZXIgZnJvbSBcIi4vTEFwcExpdmUyRE1hbmFnZXJcIlxuXG5pbXBvcnQgTEFwcERlZmluZSBmcm9tIFwiLi9MQXBwRGVmaW5lXCJcblxuaW1wb3J0IE1hdHJpeFN0YWNrIGZyb20gXCIuL2xpYi9NYXRyaXhTdGFja1wiXG5cbmltcG9ydCB7c2V0Q29udGV4dH0gZnJvbSBcIi4vd2ViZ2xjb250ZXh0XCJcblxuLy8gd2luZG93Lm9uZXJyb3IgPSBmdW5jdGlvbiAobXNnLCB1cmwsIGxpbmUsIGNvbCwgZXJyb3IpIHtcbi8vICAgbGV0IGVycm1zZyA9IFwiZmlsZTpcIiArIHVybCArIFwiPGJyPmxpbmU6XCIgKyBsaW5lICsgXCIgXCIgKyBtc2c7XG4vLyAgIGNvbnNvbGUuZXJyb3IoZXJybXNnKTtcbi8vIH1cblxuY29uc3QgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7XG5cbmNvbnN0IGxpdmUyRE1nciA9IG5ldyBMQXBwTGl2ZTJETWFuYWdlcigpO1xuXG5sZXQgaXNEcmF3U3RhcnQgPSBmYWxzZTtcblxubGV0IGdsID0gbnVsbDtcblxubGV0IGNhbnZhcyA9IG51bGw7XG5cbmxldCBkcmFnTWdyID0gbnVsbDtcblxubGV0IHZpZXdNYXRyaXggPSBudWxsO1xuXG5sZXQgcHJvak1hdHJpeCA9IG51bGw7XG5cbmxldCBkZXZpY2VUb1NjcmVlbiA9IG51bGw7XG5cbmxldCBkcmFnID0gZmFsc2U7XG5cbmxldCBvbGRMZW4gPSAwO1xuXG5sZXQgbGFzdE1vdXNlWCA9IDA7XG5cbmxldCBsYXN0TW91c2VZID0gMDtcblxubGV0IGlzTW9kZWxTaG93biA9IDA7XG5cbmxldCBtb2RlbHVybCA9IFwiXCI7XG5cbmxldCBoZWFkX3BvcyA9IDAuNTtcblxuZnVuY3Rpb24gaW5pdEwyZENhbnZhcyhjYW52YXNJZCkge1xuICBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYW52YXNJZCk7XG4gIGlmIChjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIC8vY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXdoZWVsXCIsIG1vdXNlRXZlbnQpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbW91c2VFdmVudCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgbW91c2VFdmVudCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgbW91c2VFdmVudCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIG1vdXNlRXZlbnQpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIG1vdXNlRXZlbnQpO1xuICAgIC8vY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCBtb3VzZUV2ZW50KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIiwgdG91Y2hFdmVudCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCB0b3VjaEV2ZW50KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCB0b3VjaEV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0KG1vZGVsdXJsKSB7XG4gIGxldCB3aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgbGV0IGhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgZHJhZ01nciA9IG5ldyBMMkRUYXJnZXRQb2ludCgpO1xuXG4gIGxldCByYXRpbyA9IGhlaWdodCAvIHdpZHRoO1xuICBsZXQgbGVmdCA9IExBcHBEZWZpbmUuVklFV19MT0dJQ0FMX0xFRlQ7XG4gIGxldCByaWdodCA9IExBcHBEZWZpbmUuVklFV19MT0dJQ0FMX1JJR0hUO1xuICBsZXQgYm90dG9tID0gLXJhdGlvO1xuICBsZXQgdG9wID0gcmF0aW87XG5cbiAgdmlld01hdHJpeCA9IG5ldyBMMkRWaWV3TWF0cml4KCk7XG5cblxuICB2aWV3TWF0cml4LnNldFNjcmVlblJlY3QobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wKTtcblxuICB2aWV3TWF0cml4LnNldE1heFNjcmVlblJlY3QoTEFwcERlZmluZS5WSUVXX0xPR0lDQUxfTUFYX0xFRlQsXG4gICAgTEFwcERlZmluZS5WSUVXX0xPR0lDQUxfTUFYX1JJR0hULFxuICAgIExBcHBEZWZpbmUuVklFV19MT0dJQ0FMX01BWF9CT1RUT00sXG4gICAgTEFwcERlZmluZS5WSUVXX0xPR0lDQUxfTUFYX1RPUCk7XG5cbiAgdmlld01hdHJpeC5zZXRNYXhTY2FsZShMQXBwRGVmaW5lLlZJRVdfTUFYX1NDQUxFKTtcbiAgdmlld01hdHJpeC5zZXRNaW5TY2FsZShMQXBwRGVmaW5lLlZJRVdfTUlOX1NDQUxFKTtcblxuICBwcm9qTWF0cml4ID0gbmV3IEwyRE1hdHJpeDQ0KCk7XG4gIHByb2pNYXRyaXgubXVsdFNjYWxlKDEsICh3aWR0aCAvIGhlaWdodCkpO1xuXG4gIGRldmljZVRvU2NyZWVuID0gbmV3IEwyRE1hdHJpeDQ0KCk7XG4gIGRldmljZVRvU2NyZWVuLm11bHRUcmFuc2xhdGUoLXdpZHRoIC8gMi4wLCAtaGVpZ2h0IC8gMi4wKTtcbiAgZGV2aWNlVG9TY3JlZW4ubXVsdFNjYWxlKDIgLyB3aWR0aCwgLTIgLyB3aWR0aCk7XG5cbiAgZ2wgPSBnZXRXZWJHTENvbnRleHQoKTtcbiAgc2V0Q29udGV4dChnbCk7XG4gIGlmICghZ2wpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBXZWJHTCBjb250ZXh0LlwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgd2luZG93LkxpdmUyRC5zZXRHTChnbCk7XG4gIGdsLmNsZWFyQ29sb3IoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgY2hhbmdlTW9kZWwobW9kZWx1cmwpO1xuICBzdGFydERyYXcoKTtcbn1cblxuZnVuY3Rpb24gc3RhcnREcmF3KCkge1xuICBpZiAoIWlzRHJhd1N0YXJ0KSB7XG4gICAgaXNEcmF3U3RhcnQgPSB0cnVlO1xuICAgIChmdW5jdGlvbiB0aWNrKCkge1xuICAgICAgZHJhdygpO1xuICAgICAgbGV0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgICB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2ssIGNhbnZhcyk7XG4gICAgfSkoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkcmF3KClcbntcbiAgICBNYXRyaXhTdGFjay5yZXNldCgpO1xuICAgIE1hdHJpeFN0YWNrLmxvYWRJZGVudGl0eSgpO1xuICAgIGRyYWdNZ3IudXBkYXRlKCk7IFxuICAgIGxpdmUyRE1nci5zZXREcmFnKGRyYWdNZ3IuZ2V0WCgpLCBkcmFnTWdyLmdldFkoKSk7XG4gICAgXG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG4gICAgXG4gICAgTWF0cml4U3RhY2subXVsdE1hdHJpeChwcm9qTWF0cml4LmdldEFycmF5KCkpO1xuICAgIE1hdHJpeFN0YWNrLm11bHRNYXRyaXgodmlld01hdHJpeC5nZXRBcnJheSgpKTtcbiAgICBNYXRyaXhTdGFjay5wdXNoKCk7XG4gICAgXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXZlMkRNZ3IubnVtTW9kZWxzKCk7IGkrKylcbiAgICB7XG4gICAgICAgIGxldCBtb2RlbCA9IGxpdmUyRE1nci5nZXRNb2RlbChpKTtcblxuICAgICAgICBpZihtb2RlbCA9PSBudWxsKSByZXR1cm47XG4gICAgICAgIFxuICAgICAgICBpZiAobW9kZWwuaW5pdGlhbGl6ZWQgJiYgIW1vZGVsLnVwZGF0aW5nKVxuICAgICAgICB7XG4gICAgICAgICAgICBtb2RlbC51cGRhdGUoKTtcbiAgICAgICAgICAgIG1vZGVsLmRyYXcoZ2wpO1xuICAgICAgICB9XG4gICAgfVxuICAgIE1hdHJpeFN0YWNrLnBvcCgpO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VNb2RlbChtb2RlbHVybClcbntcbiAgICBsaXZlMkRNZ3IucmVsb2FkRmxnID0gdHJ1ZTtcbiAgICBsaXZlMkRNZ3IuY291bnQrKztcbiAgICBsaXZlMkRNZ3IuY2hhbmdlTW9kZWwoZ2wsbW9kZWx1cmwpO1xufVxuXG5mdW5jdGlvbiBtb2RlbFNjYWxpbmcoc2NhbGUpXG57XG4gICAgbGV0IGlzTWF4U2NhbGUgPSB2aWV3TWF0cml4LmlzTWF4U2NhbGUoKTtcbiAgICBsZXQgaXNNaW5TY2FsZSA9IHZpZXdNYXRyaXguaXNNaW5TY2FsZSgpO1xuICAgIFxuICAgIHZpZXdNYXRyaXguYWRqdXN0U2NhbGUoMCwgMCwgc2NhbGUpO1xuXG4gICAgaWYgKCFpc01heFNjYWxlKVxuICAgIHtcbiAgICAgICAgaWYgKHZpZXdNYXRyaXguaXNNYXhTY2FsZSgpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaXZlMkRNZ3IubWF4U2NhbGVFdmVudCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmICghaXNNaW5TY2FsZSlcbiAgICB7XG4gICAgICAgIGlmICh2aWV3TWF0cml4LmlzTWluU2NhbGUoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGl2ZTJETWdyLm1pblNjYWxlRXZlbnQoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUmFuZ2UoY2VudGVyLCB0cmFuc2Zvcm0sIHJhbmdlKVxue1xuICAgIGxldCBhID0ge1xuICAgICAgICB4OiB0cmFuc2Zvcm0ueCAtIGNlbnRlci54LFxuICAgICAgICB5OiB0cmFuc2Zvcm0ueSAtIGNlbnRlci55XG4gICAgfVxuICAgIGxldCByID0gTWF0aC5zcXJ0KE1hdGgucG93KGEueCwyKSArIE1hdGgucG93KGEueSwyKSk7XG4gICAgaWYgKHIgPiByYW5nZSkge1xuICAgICAgICBhID0ge1xuICAgICAgICAgICAgeDogYS54IC8gciAqIHJhbmdlICsgY2VudGVyLngsXG4gICAgICAgICAgICB5OiBhLnkgLyByICogcmFuZ2UgKyBjZW50ZXIueVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZG90KEEsQilcbntcbiAgICByZXR1cm4gQS54ICogQi54ICsgQS55ICogQi55O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemUoeCx5KVxue1xuICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSlcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB4IC8gbGVuZ3RoLFxuICAgICAgICB5OiB5IC8gbGVuZ3RoXG4gICAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1SZWN0KGNlbnRlciwgdHJhbnNmb3JtLCByZWN0KVxue1xuICAgIGlmICh0cmFuc2Zvcm0ueCA8IHJlY3QubGVmdCArIHJlY3Qud2lkdGggJiYgdHJhbnNmb3JtLnkgPCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0ICYmXG4gICAgICAgIHRyYW5zZm9ybS54ID4gcmVjdC5sZWZ0ICYmIHRyYW5zZm9ybS55ID4gcmVjdC50b3ApIHJldHVybiB0cmFuc2Zvcm07XG4gICAgbGV0IExlbl9YID0gY2VudGVyLnggLSB0cmFuc2Zvcm0ueDtcbiAgICBsZXQgTGVuX1kgPSBjZW50ZXIueSAtIHRyYW5zZm9ybS55O1xuXG4gICAgZnVuY3Rpb24gYW5nbGUoTGVuX1gsIExlbl9ZKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhkb3Qoe1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDFcbiAgICAgICAgfSwgbm9ybWFsaXplKExlbl9YLCBMZW5fWSkpKSAqIDE4MCAvIE1hdGguUElcbiAgICB9XG5cbiAgICBsZXQgYW5nbGVUYXJnZXQgPSBhbmdsZShMZW5fWCwgTGVuX1kpO1xuICAgIGlmICh0cmFuc2Zvcm0ueCA8IGNlbnRlci54KSBhbmdsZVRhcmdldCA9IDM2MCAtIGFuZ2xlVGFyZ2V0O1xuICAgIGxldCBhbmdsZUxlZnRUb3AgPSAzNjAgLSBhbmdsZShyZWN0LmxlZnQgLSBjZW50ZXIueCwgKHJlY3QudG9wIC0gY2VudGVyLnkpICogLTEpO1xuICAgIGxldCBhbmdsZUxlZnRCb3R0b20gPSAzNjAgLSBhbmdsZShyZWN0LmxlZnQgLSBjZW50ZXIueCwgKHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLSBjZW50ZXIueSkgKiAtMSk7XG4gICAgbGV0IGFuZ2xlUmlnaHRUb3AgPSBhbmdsZShyZWN0LmxlZnQgKyByZWN0LndpZHRoIC0gY2VudGVyLngsIChyZWN0LnRvcCAtIGNlbnRlci55KSAqIC0xKTtcbiAgICBsZXQgYW5nbGVSaWdodEJvdHRvbSA9IGFuZ2xlKHJlY3QubGVmdCArIHJlY3Qud2lkdGggLSBjZW50ZXIueCwgKHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLSBjZW50ZXIueSkgKiAtMSk7XG4gICAgbGV0IHNjYWxlID0gTGVuX1kgLyBMZW5fWDtcbiAgICBsZXQgcmVzID0ge307XG5cbiAgICBpZiAoYW5nbGVUYXJnZXQgPCBhbmdsZVJpZ2h0VG9wKSB7XG4gICAgICAgIGxldCB5MyA9IHJlY3QudG9wIC0gY2VudGVyLnk7XG4gICAgICAgIGxldCB4MyA9IHkzIC8gc2NhbGU7XG4gICAgICAgIHJlcyA9IHtcbiAgICAgICAgICAgIHk6IGNlbnRlci55ICsgeTMsXG4gICAgICAgICAgICB4OiBjZW50ZXIueCArIHgzXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYoYW5nbGVUYXJnZXQgPCBhbmdsZVJpZ2h0Qm90dG9tKSB7XG4gICAgICAgIGxldCB4MyA9IHJlY3QubGVmdCArIHJlY3Qud2lkdGggLSBjZW50ZXIueDtcbiAgICAgICAgbGV0IHkzID0geDMgKiBzY2FsZTtcbiAgICAgICAgcmVzID0ge1xuICAgICAgICAgICAgeTogY2VudGVyLnkgKyB5MyxcbiAgICAgICAgICAgIHg6IGNlbnRlci54ICsgeDNcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYW5nbGVUYXJnZXQgPCBhbmdsZUxlZnRCb3R0b20pIHtcbiAgICAgICAgbGV0IHkzID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAtIGNlbnRlci55O1xuICAgICAgICBsZXQgeDMgPSB5MyAvIHNjYWxlO1xuICAgICAgICByZXMgPSB7XG4gICAgICAgICAgICB5OiBjZW50ZXIueSArIHkzLFxuICAgICAgICAgICAgeDogY2VudGVyLnggKyB4M1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChhbmdsZVRhcmdldCA8IGFuZ2xlTGVmdFRvcCkge1xuICAgICAgICBsZXQgeDMgPSBjZW50ZXIueCAtIHJlY3QubGVmdDtcbiAgICAgICAgbGV0IHkzID0geDMgKiBzY2FsZTtcbiAgICAgICAgcmVzID0ge1xuICAgICAgICAgICAgeTogY2VudGVyLnkgLSB5MyxcbiAgICAgICAgICAgIHg6IGNlbnRlci54IC0geDNcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB5MyA9IHJlY3QudG9wIC0gY2VudGVyLnk7XG4gICAgICAgIGxldCB4MyA9IHkzIC8gc2NhbGU7XG4gICAgICAgIHJlcyA9IHtcbiAgICAgICAgICAgIHk6IGNlbnRlci55ICsgeTMsXG4gICAgICAgICAgICB4OiBjZW50ZXIueCArIHgzXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBtb2RlbFR1cm5IZWFkKGV2ZW50KVxue1xuICAgIGRyYWcgPSB0cnVlO1xuICAgIFxuICAgIGxldCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIFxuICAgIGxldCBzeCA9IHRyYW5zZm9ybVNjcmVlblgoZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCk7XG4gICAgbGV0IHN5ID0gdHJhbnNmb3JtU2NyZWVuWShldmVudC5jbGllbnRZIC0gcmVjdC50b3ApO1xuICAgIGxldCB0YXJnZXQgPSB0cmFuc2Zvcm1SZWN0KHtcbiAgICAgICAgeDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIsXG4gICAgICAgIHk6IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgKiBoZWFkX3Bvc1xuICAgIH0sIHtcbiAgICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgIH0sIHJlY3QpXG4gICAgbGV0IHZ4ID0gdHJhbnNmb3JtVmlld1godGFyZ2V0LnggLSByZWN0LmxlZnQpO1xuICAgIGxldCB2eSA9IHRyYW5zZm9ybVZpZXdZKHRhcmdldC55IC0gcmVjdC50b3ApO1xuXG4gICAgaWYgKExBcHBEZWZpbmUuREVCVUdfTU9VU0VfTE9HKVxuICAgICAgICBjb25zb2xlLmxvZyhcIm9uTW91c2VEb3duIGRldmljZSggeDpcIiArIGV2ZW50LmNsaWVudFggKyBcIiB5OlwiICsgZXZlbnQuY2xpZW50WSArIFwiICkgdmlldyggeDpcIiArIHZ4ICsgXCIgeTpcIiArIHZ5ICsgXCIpXCIpO1xuXG4gICAgbGFzdE1vdXNlWCA9IHN4O1xuICAgIGxhc3RNb3VzZVkgPSBzeTtcblxuICAgIGRyYWdNZ3Iuc2V0UG9pbnQodngsIHZ5KTsgXG4gICAgXG4gICAgbGl2ZTJETWdyLnRhcEV2ZW50KHZ4LCB2eSk7XG59XG5cbmZ1bmN0aW9uIGZvbGxvd1BvaW50ZXIoZXZlbnQpXG57ICAgIFxuICAgIGxldCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIFxuICAgIGxldCBzeCA9IHRyYW5zZm9ybVNjcmVlblgoZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCk7XG4gICAgbGV0IHN5ID0gdHJhbnNmb3JtU2NyZWVuWShldmVudC5jbGllbnRZIC0gcmVjdC50b3ApO1xuICAgIGxldCB0YXJnZXQgPSB0cmFuc2Zvcm1SZWN0KHtcbiAgICAgICAgeDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIsXG4gICAgICAgIHk6IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgKiBoZWFkX3Bvc1xuICAgIH0sIHtcbiAgICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgIH0sIHJlY3QpXG4gICAgbGV0IHZ4ID0gdHJhbnNmb3JtVmlld1godGFyZ2V0LnggLSByZWN0LmxlZnQpO1xuICAgIGxldCB2eSA9IHRyYW5zZm9ybVZpZXdZKHRhcmdldC55IC0gcmVjdC50b3ApO1xuXG4gICAgaWYgKExBcHBEZWZpbmUuREVCVUdfTU9VU0VfTE9HKVxuICAgICAgICBjb25zb2xlLmxvZyhcIm9uTW91c2VNb3ZlIGRldmljZSggeDpcIiArIGV2ZW50LmNsaWVudFggKyBcIiB5OlwiICsgZXZlbnQuY2xpZW50WSArIFwiICkgdmlldyggeDpcIiArIHZ4ICsgXCIgeTpcIiArIHZ5ICsgXCIpXCIpO1xuXG4gICAgaWYgKGRyYWcpXG4gICAge1xuICAgICAgICBsYXN0TW91c2VYID0gc3g7XG4gICAgICAgIGxhc3RNb3VzZVkgPSBzeTtcbiAgICAgICAgZHJhZ01nci5zZXRQb2ludCh2eCwgdnkpOyBcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvb2tGcm9udCgpXG57ICAgXG4gICAgaWYgKGRyYWcpXG4gICAge1xuICAgICAgICBkcmFnID0gZmFsc2U7XG4gICAgfVxuICAgIGRyYWdNZ3Iuc2V0UG9pbnQoMCwgMCk7XG59XG5cbmZ1bmN0aW9uIG1vdXNlRXZlbnQoZSlcbntcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoZS50eXBlID09IFwibW91c2V3aGVlbFwiKSB7XG4gICAgICAgIC8vIGlmIChlLmNsaWVudFggPCAwIHx8IGNhbnZhcy5jbGllbnRXaWR0aCA8IGUuY2xpZW50WCB8fCBcbiAgICAgICAgLy8gZS5jbGllbnRZIDwgMCB8fCBjYW52YXMuY2xpZW50SGVpZ2h0IDwgZS5jbGllbnRZKVxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKGUud2hlZWxEZWx0YSA+IDApIG1vZGVsU2NhbGluZygxLjEpOyBcbiAgICAgICAgLy8gZWxzZSBtb2RlbFNjYWxpbmcoMC45KTsgXG4gICAgfSBlbHNlIGlmIChlLnR5cGUgPT0gXCJtb3VzZWRvd25cIikge1xuICAgICAgICBpZihcImJ1dHRvblwiIGluIGUgJiYgZS5idXR0b24gIT0gMCkgcmV0dXJuO1xuICAgICAgICAvLyBtb2RlbFR1cm5IZWFkKGUpO1xuICAgIH0gZWxzZSBpZiAoZS50eXBlID09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgICAgbW9kZWxUdXJuSGVhZChlKTtcbiAgICB9IGVsc2UgaWYgKGUudHlwZSA9PSBcIm1vdXNldXBcIikge1xuICAgICAgICBpZihcImJ1dHRvblwiIGluIGUgJiYgZS5idXR0b24gIT0gMCkgcmV0dXJuO1xuICAgICAgICAvLyBsb29rRnJvbnQoKTtcbiAgICB9IGVsc2UgaWYgKGUudHlwZSA9PSBcIm1vdXNlbGVhdmVcIikge1xuICAgICAgICBsb29rRnJvbnQoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRvdWNoRXZlbnQoZSlcbntcbiAgICB2YXIgdG91Y2ggPSBlLnRvdWNoZXNbMF07XG4gICAgaWYgKGUudHlwZSA9PSBcInRvdWNoc3RhcnRcIikge1xuICAgICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9PSAxKSBtb2RlbFR1cm5IZWFkKHRvdWNoKTtcbiAgICAgICAgLy8gb25DbGljayh0b3VjaCk7XG4gICAgfSBlbHNlIGlmIChlLnR5cGUgPT0gXCJ0b3VjaG1vdmVcIikge1xuICAgICAgICBmb2xsb3dQb2ludGVyKHRvdWNoKTtcbiAgICB9IGVsc2UgaWYgKGUudHlwZSA9PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgICAgbG9va0Zyb250KCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1WaWV3WChkZXZpY2VYKVxue1xuICAgIHZhciBzY3JlZW5YID0gZGV2aWNlVG9TY3JlZW4udHJhbnNmb3JtWChkZXZpY2VYKTsgXG4gICAgcmV0dXJuIHZpZXdNYXRyaXguaW52ZXJ0VHJhbnNmb3JtWChzY3JlZW5YKTsgXG59XG5cblxuZnVuY3Rpb24gdHJhbnNmb3JtVmlld1koZGV2aWNlWSlcbntcbiAgICB2YXIgc2NyZWVuWSA9IGRldmljZVRvU2NyZWVuLnRyYW5zZm9ybVkoZGV2aWNlWSk7IFxuICAgIHJldHVybiB2aWV3TWF0cml4LmludmVydFRyYW5zZm9ybVkoc2NyZWVuWSk7IFxufVxuXG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNjcmVlblgoZGV2aWNlWClcbntcbiAgICByZXR1cm4gZGV2aWNlVG9TY3JlZW4udHJhbnNmb3JtWChkZXZpY2VYKTtcbn1cblxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TY3JlZW5ZKGRldmljZVkpXG57XG4gICAgcmV0dXJuIGRldmljZVRvU2NyZWVuLnRyYW5zZm9ybVkoZGV2aWNlWSk7XG59XG5cbmZ1bmN0aW9uIGdldFdlYkdMQ29udGV4dCgpXG57XG4gICAgdmFyIE5BTUVTID0gWyBcIndlYmdsXCIgLCBcImV4cGVyaW1lbnRhbC13ZWJnbFwiICwgXCJ3ZWJraXQtM2RcIiAsIFwibW96LXdlYmdsXCJdO1xuICAgIGZvciggdmFyIGkgPSAwOyBpIDwgTkFNRVMubGVuZ3RoOyBpKysgKXtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KE5BTUVTW2ldLCB7cHJlbXVsdGlwbGllZEFscGhhIDogdHJ1ZX0pO1xuICAgICAgICAgICAgaWYoY3R4KSByZXR1cm4gY3R4O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGUpe31cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5mdW5jdGlvbiBsb2FkbGl2ZTJkKGlkLG1vZGVsdXJsLGhlYWRQb3MpIHtcbiAgICBoZWFkX3BvcyA9IHR5cGVvZiBoZWFkUG9zID09PSAndW5kZWZpbmVkJyA/IDAuNSA6IGhlYWRQb3M7XG4gICAgaW5pdEwyZENhbnZhcyhpZCk7XG4gICAgaW5pdChtb2RlbHVybCk7XG59XG5cbndpbmRvdy5sb2FkbGl2ZTJkID0gbG9hZGxpdmUyZDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvbWFpbi5qcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n')},/*!**********************************!*\ + !*** ./src/LAppLive2DManager.js ***! + \**********************************/ +function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = LAppLive2DManager;\n\nvar _Live2DFramework = __webpack_require__(/*! ./lib/Live2DFramework.js */ 0);\n\nvar _PlatformManager = __webpack_require__(/*! ./PlatformManager */ 7);\n\nvar _PlatformManager2 = _interopRequireDefault(_PlatformManager);\n\nvar _LAppModel = __webpack_require__(/*! ./LAppModel */ 6);\n\nvar _LAppModel2 = _interopRequireDefault(_LAppModel);\n\nvar _LAppDefine = __webpack_require__(/*! ./LAppDefine */ 1);\n\nvar _LAppDefine2 = _interopRequireDefault(_LAppDefine);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction LAppLive2DManager() {\n // console.log("--\x3e LAppLive2DManager()");\n\n\n this.models = [];\n\n this.count = -1;\n this.reloadFlg = false;\n\n Live2D.init();\n _Live2DFramework.Live2DFramework.setPlatformManager(new _PlatformManager2.default());\n}\n\nLAppLive2DManager.prototype.createModel = function () {\n\n var model = new _LAppModel2.default();\n this.models.push(model);\n\n return model;\n};\n\nLAppLive2DManager.prototype.changeModel = function (gl, modelurl) {\n // console.log("--\x3e LAppLive2DManager.update(gl)");\n\n if (this.reloadFlg) {\n\n this.reloadFlg = false;\n\n var thisRef = this;\n this.releaseModel(0, gl);\n this.createModel();\n this.models[0].load(gl, modelurl);\n }\n};\n\nLAppLive2DManager.prototype.getModel = function (no) {\n // console.log("--\x3e LAppLive2DManager.getModel(" + no + ")");\n\n if (no >= this.models.length) return null;\n\n return this.models[no];\n};\n\nLAppLive2DManager.prototype.releaseModel = function (no, gl) {\n // console.log("--\x3e LAppLive2DManager.releaseModel(" + no + ")");\n\n if (this.models.length <= no) return;\n\n this.models[no].release(gl);\n\n delete this.models[no];\n this.models.splice(no, 1);\n};\n\nLAppLive2DManager.prototype.numModels = function () {\n return this.models.length;\n};\n\nLAppLive2DManager.prototype.setDrag = function (x, y) {\n for (var i = 0; i < this.models.length; i++) {\n this.models[i].setDrag(x, y);\n }\n};\n\nLAppLive2DManager.prototype.maxScaleEvent = function () {\n if (_LAppDefine2.default.DEBUG_LOG) console.log("Max scale event.");\n for (var i = 0; i < this.models.length; i++) {\n this.models[i].startRandomMotion(_LAppDefine2.default.MOTION_GROUP_PINCH_IN, _LAppDefine2.default.PRIORITY_NORMAL);\n }\n};\n\nLAppLive2DManager.prototype.minScaleEvent = function () {\n if (_LAppDefine2.default.DEBUG_LOG) console.log("Min scale event.");\n for (var i = 0; i < this.models.length; i++) {\n this.models[i].startRandomMotion(_LAppDefine2.default.MOTION_GROUP_PINCH_OUT, _LAppDefine2.default.PRIORITY_NORMAL);\n }\n};\n\nLAppLive2DManager.prototype.tapEvent = function (x, y) {\n if (_LAppDefine2.default.DEBUG_LOG) console.log("tapEvent view x:" + x + " y:" + y);\n\n for (var i = 0; i < this.models.length; i++) {\n\n if (this.models[i].hitTest(_LAppDefine2.default.HIT_AREA_HEAD, x, y)) {\n\n if (_LAppDefine2.default.DEBUG_LOG) console.log("Tap face.");\n\n this.models[i].setRandomExpression();\n } else if (this.models[i].hitTest(_LAppDefine2.default.HIT_AREA_BODY, x, y)) {\n\n if (_LAppDefine2.default.DEBUG_LOG) console.log("Tap body." + " models[" + i + "]");\n\n this.models[i].startRandomMotion(_LAppDefine2.default.MOTION_GROUP_TAP_BODY, _LAppDefine2.default.PRIORITY_NORMAL);\n }\n }\n\n return true;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvTEFwcExpdmUyRE1hbmFnZXIuanM/ZTlkNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaXZlMkRGcmFtZXdvcmsgfSBmcm9tIFwiLi9saWIvTGl2ZTJERnJhbWV3b3JrLmpzXCJcbmltcG9ydCBQbGF0Zm9ybU1hbmFnZXIgZnJvbSBcIi4vUGxhdGZvcm1NYW5hZ2VyXCJcbmltcG9ydCBMQXBwTW9kZWwgZnJvbSBcIi4vTEFwcE1vZGVsXCJcbmltcG9ydCBMQXBwRGVmaW5lIGZyb20gXCIuL0xBcHBEZWZpbmVcIlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMQXBwTGl2ZTJETWFuYWdlcigpIHtcbiAgLy8gY29uc29sZS5sb2coXCItLT4gTEFwcExpdmUyRE1hbmFnZXIoKVwiKTtcblxuXG4gIHRoaXMubW9kZWxzID0gW107XG5cblxuICB0aGlzLmNvdW50ID0gLTE7XG4gIHRoaXMucmVsb2FkRmxnID0gZmFsc2U7XG5cbiAgTGl2ZTJELmluaXQoKTtcbiAgTGl2ZTJERnJhbWV3b3JrLnNldFBsYXRmb3JtTWFuYWdlcihuZXcgUGxhdGZvcm1NYW5hZ2VyKTtcblxufVxuXG5MQXBwTGl2ZTJETWFuYWdlci5wcm90b3R5cGUuY3JlYXRlTW9kZWwgPSBmdW5jdGlvbiAoKSB7XG5cblxuICB2YXIgbW9kZWwgPSBuZXcgTEFwcE1vZGVsKCk7XG4gIHRoaXMubW9kZWxzLnB1c2gobW9kZWwpO1xuXG4gIHJldHVybiBtb2RlbDtcbn1cblxuXG5MQXBwTGl2ZTJETWFuYWdlci5wcm90b3R5cGUuY2hhbmdlTW9kZWwgPSBmdW5jdGlvbiAoZ2wsIG1vZGVsdXJsKSB7XG4gIC8vIGNvbnNvbGUubG9nKFwiLS0+IExBcHBMaXZlMkRNYW5hZ2VyLnVwZGF0ZShnbClcIik7XG5cbiAgaWYgKHRoaXMucmVsb2FkRmxnKSB7XG5cbiAgICB0aGlzLnJlbG9hZEZsZyA9IGZhbHNlO1xuXG4gICAgdmFyIHRoaXNSZWYgPSB0aGlzO1xuICAgIHRoaXMucmVsZWFzZU1vZGVsKDAsIGdsKTtcbiAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gICAgdGhpcy5tb2RlbHNbMF0ubG9hZChnbCwgbW9kZWx1cmwpO1xuICB9XG59O1xuXG5cbkxBcHBMaXZlMkRNYW5hZ2VyLnByb3RvdHlwZS5nZXRNb2RlbCA9IGZ1bmN0aW9uIChubykge1xuICAvLyBjb25zb2xlLmxvZyhcIi0tPiBMQXBwTGl2ZTJETWFuYWdlci5nZXRNb2RlbChcIiArIG5vICsgXCIpXCIpO1xuXG4gIGlmIChubyA+PSB0aGlzLm1vZGVscy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiB0aGlzLm1vZGVsc1tub107XG59O1xuXG5cblxuTEFwcExpdmUyRE1hbmFnZXIucHJvdG90eXBlLnJlbGVhc2VNb2RlbCA9IGZ1bmN0aW9uIChubywgZ2wpIHtcbiAgLy8gY29uc29sZS5sb2coXCItLT4gTEFwcExpdmUyRE1hbmFnZXIucmVsZWFzZU1vZGVsKFwiICsgbm8gKyBcIilcIik7XG5cbiAgaWYgKHRoaXMubW9kZWxzLmxlbmd0aCA8PSBubykgcmV0dXJuO1xuXG4gIHRoaXMubW9kZWxzW25vXS5yZWxlYXNlKGdsKTtcblxuICBkZWxldGUgdGhpcy5tb2RlbHNbbm9dO1xuICB0aGlzLm1vZGVscy5zcGxpY2Uobm8sIDEpO1xufTtcblxuXG5cbkxBcHBMaXZlMkRNYW5hZ2VyLnByb3RvdHlwZS5udW1Nb2RlbHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1vZGVscy5sZW5ndGg7XG59O1xuXG5cblxuTEFwcExpdmUyRE1hbmFnZXIucHJvdG90eXBlLnNldERyYWcgPSBmdW5jdGlvbiAoeCwgeSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubW9kZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpcy5tb2RlbHNbaV0uc2V0RHJhZyh4LCB5KTtcbiAgfVxufVxuXG5cblxuTEFwcExpdmUyRE1hbmFnZXIucHJvdG90eXBlLm1heFNjYWxlRXZlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChMQXBwRGVmaW5lLkRFQlVHX0xPRylcbiAgICBjb25zb2xlLmxvZyhcIk1heCBzY2FsZSBldmVudC5cIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tb2RlbHMubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLm1vZGVsc1tpXS5zdGFydFJhbmRvbU1vdGlvbihMQXBwRGVmaW5lLk1PVElPTl9HUk9VUF9QSU5DSF9JTixcbiAgICAgIExBcHBEZWZpbmUuUFJJT1JJVFlfTk9STUFMKTtcbiAgfVxufVxuXG5cblxuTEFwcExpdmUyRE1hbmFnZXIucHJvdG90eXBlLm1pblNjYWxlRXZlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChMQXBwRGVmaW5lLkRFQlVHX0xPRylcbiAgICBjb25zb2xlLmxvZyhcIk1pbiBzY2FsZSBldmVudC5cIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tb2RlbHMubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLm1vZGVsc1tpXS5zdGFydFJhbmRvbU1vdGlvbihMQXBwRGVmaW5lLk1PVElPTl9HUk9VUF9QSU5DSF9PVVQsXG4gICAgICBMQXBwRGVmaW5lLlBSSU9SSVRZX05PUk1BTCk7XG4gIH1cbn1cblxuXG5cbkxBcHBMaXZlMkRNYW5hZ2VyLnByb3RvdHlwZS50YXBFdmVudCA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gIGlmIChMQXBwRGVmaW5lLkRFQlVHX0xPRylcbiAgICBjb25zb2xlLmxvZyhcInRhcEV2ZW50IHZpZXcgeDpcIiArIHggKyBcIiB5OlwiICsgeSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1vZGVscy5sZW5ndGg7IGkrKykge1xuXG4gICAgaWYgKHRoaXMubW9kZWxzW2ldLmhpdFRlc3QoTEFwcERlZmluZS5ISVRfQVJFQV9IRUFELCB4LCB5KSkge1xuXG4gICAgICBpZiAoTEFwcERlZmluZS5ERUJVR19MT0cpXG4gICAgICAgIGNvbnNvbGUubG9nKFwiVGFwIGZhY2UuXCIpO1xuXG4gICAgICB0aGlzLm1vZGVsc1tpXS5zZXRSYW5kb21FeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMubW9kZWxzW2ldLmhpdFRlc3QoTEFwcERlZmluZS5ISVRfQVJFQV9CT0RZLCB4LCB5KSkge1xuXG4gICAgICBpZiAoTEFwcERlZmluZS5ERUJVR19MT0cpXG4gICAgICAgIGNvbnNvbGUubG9nKFwiVGFwIGJvZHkuXCIgKyBcIiBtb2RlbHNbXCIgKyBpICsgXCJdXCIpO1xuXG4gICAgICB0aGlzLm1vZGVsc1tpXS5zdGFydFJhbmRvbU1vdGlvbihMQXBwRGVmaW5lLk1PVElPTl9HUk9VUF9UQVBfQk9EWSxcbiAgICAgICAgTEFwcERlZmluZS5QUklPUklUWV9OT1JNQUwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL0xBcHBMaXZlMkRNYW5hZ2VyLmpzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUtBO0FBQ0E7QUFOQTtBQUNBO0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5\n')},/*!**************************!*\ + !*** ./src/LAppModel.js ***! + \**************************/ +function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = LAppModel;\n\nvar _Live2DFramework = __webpack_require__(/*! ./lib/Live2DFramework */ 0);\n\nvar _ModelSettingJson = __webpack_require__(/*! ./lib/ModelSettingJson */ 8);\n\nvar _ModelSettingJson2 = _interopRequireDefault(_ModelSettingJson);\n\nvar _LAppDefine = __webpack_require__(/*! ./LAppDefine */ 1);\n\nvar _LAppDefine2 = _interopRequireDefault(_LAppDefine);\n\nvar _MatrixStack = __webpack_require__(/*! ./lib/MatrixStack */ 2);\n\nvar _MatrixStack2 = _interopRequireDefault(_MatrixStack);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n//============================================================\n//============================================================\n// class LAppModel extends L2DBaseModel \n//============================================================\n//============================================================\nfunction LAppModel() {\n //L2DBaseModel.apply(this, arguments);\n _Live2DFramework.L2DBaseModel.prototype.constructor.call(this);\n\n this.modelHomeDir = "";\n this.modelSetting = null;\n this.tmpMatrix = [];\n}\n\nLAppModel.prototype = new _Live2DFramework.L2DBaseModel();\n\nLAppModel.prototype.load = function (gl, modelSettingPath, callback) {\n this.setUpdating(true);\n this.setInitialized(false);\n\n this.modelHomeDir = modelSettingPath.substring(0, modelSettingPath.lastIndexOf("/") + 1);\n\n this.modelSetting = new _ModelSettingJson2.default();\n\n var thisRef = this;\n\n this.modelSetting.loadModelSetting(modelSettingPath, function () {\n\n var path = thisRef.modelHomeDir + thisRef.modelSetting.getModelFile();\n thisRef.loadModelData(path, function (model) {\n\n for (var i = 0; i < thisRef.modelSetting.getTextureNum(); i++) {\n\n var texPaths = thisRef.modelHomeDir + thisRef.modelSetting.getTextureFile(i);\n\n thisRef.loadTexture(i, texPaths, function () {\n\n if (thisRef.isTexLoaded) {\n\n if (thisRef.modelSetting.getExpressionNum() > 0) {\n\n thisRef.expressions = {};\n\n for (var j = 0; j < thisRef.modelSetting.getExpressionNum(); j++) {\n var expName = thisRef.modelSetting.getExpressionName(j);\n var expFilePath = thisRef.modelHomeDir + thisRef.modelSetting.getExpressionFile(j);\n\n thisRef.loadExpression(expName, expFilePath);\n }\n } else {\n thisRef.expressionManager = null;\n thisRef.expressions = {};\n }\n\n if (thisRef.eyeBlink == null) {\n thisRef.eyeBlink = new _Live2DFramework.L2DEyeBlink();\n }\n\n if (thisRef.modelSetting.getPhysicsFile() != null) {\n thisRef.loadPhysics(thisRef.modelHomeDir + thisRef.modelSetting.getPhysicsFile());\n } else {\n thisRef.physics = null;\n }\n\n if (thisRef.modelSetting.getPoseFile() != null) {\n thisRef.loadPose(thisRef.modelHomeDir + thisRef.modelSetting.getPoseFile(), function () {\n thisRef.pose.updateParam(thisRef.live2DModel);\n });\n } else {\n thisRef.pose = null;\n }\n\n if (thisRef.modelSetting.getLayout() != null) {\n var layout = thisRef.modelSetting.getLayout();\n if (layout["width"] != null) thisRef.modelMatrix.setWidth(layout["width"]);\n if (layout["height"] != null) thisRef.modelMatrix.setHeight(layout["height"]);\n\n if (layout["x"] != null) thisRef.modelMatrix.setX(layout["x"]);\n if (layout["y"] != null) thisRef.modelMatrix.setY(layout["y"]);\n if (layout["center_x"] != null) thisRef.modelMatrix.centerX(layout["center_x"]);\n if (layout["center_y"] != null) thisRef.modelMatrix.centerY(layout["center_y"]);\n if (layout["top"] != null) thisRef.modelMatrix.top(layout["top"]);\n if (layout["bottom"] != null) thisRef.modelMatrix.bottom(layout["bottom"]);\n if (layout["left"] != null) thisRef.modelMatrix.left(layout["left"]);\n if (layout["right"] != null) thisRef.modelMatrix.right(layout["right"]);\n }\n\n for (var j = 0; j < thisRef.modelSetting.getInitParamNum(); j++) {\n\n thisRef.live2DModel.setParamFloat(thisRef.modelSetting.getInitParamID(j), thisRef.modelSetting.getInitParamValue(j));\n }\n\n for (var j = 0; j < thisRef.modelSetting.getInitPartsVisibleNum(); j++) {\n\n thisRef.live2DModel.setPartsOpacity(thisRef.modelSetting.getInitPartsVisibleID(j), thisRef.modelSetting.getInitPartsVisibleValue(j));\n }\n\n thisRef.live2DModel.saveParam();\n // thisRef.live2DModel.setGL(gl);\n\n\n thisRef.preloadMotionGroup(_LAppDefine2.default.MOTION_GROUP_IDLE);\n thisRef.mainMotionManager.stopAllMotions();\n\n thisRef.setUpdating(false);\n thisRef.setInitialized(true);\n\n if (typeof callback == "function") callback();\n }\n });\n }\n });\n });\n};\n\nLAppModel.prototype.release = function (gl) {\n // this.live2DModel.deleteTextures();\n var pm = Live2DFramework.getPlatformManager();\n\n gl.deleteTexture(pm.texture);\n};\n\nLAppModel.prototype.preloadMotionGroup = function (name) {\n var thisRef = this;\n\n for (var i = 0; i < this.modelSetting.getMotionNum(name); i++) {\n var file = this.modelSetting.getMotionFile(name, i);\n this.loadMotion(file, this.modelHomeDir + file, function (motion) {\n motion.setFadeIn(thisRef.modelSetting.getMotionFadeIn(name, i));\n motion.setFadeOut(thisRef.modelSetting.getMotionFadeOut(name, i));\n });\n }\n};\n\nLAppModel.prototype.update = function () {\n // console.log("--\x3e LAppModel.update()");\n\n if (this.live2DModel == null) {\n if (_LAppDefine2.default.DEBUG_LOG) console.error("Failed to update.");\n\n return;\n }\n\n var timeMSec = UtSystem.getUserTimeMSec() - this.startTimeMSec;\n var timeSec = timeMSec / 1000.0;\n var t = timeSec * 2 * Math.PI;\n\n if (this.mainMotionManager.isFinished()) {\n\n this.startRandomMotion(_LAppDefine2.default.MOTION_GROUP_IDLE, _LAppDefine2.default.PRIORITY_IDLE);\n }\n\n //-----------------------------------------------------------------\t\t\n\n\n this.live2DModel.loadParam();\n\n var update = this.mainMotionManager.updateParam(this.live2DModel);\n if (!update) {\n\n if (this.eyeBlink != null) {\n this.eyeBlink.updateParam(this.live2DModel);\n }\n }\n\n this.live2DModel.saveParam();\n\n //-----------------------------------------------------------------\t\t\n\n\n if (this.expressionManager != null && this.expressions != null && !this.expressionManager.isFinished()) {\n this.expressionManager.updateParam(this.live2DModel);\n }\n\n this.live2DModel.addToParamFloat("PARAM_ANGLE_X", this.dragX * 30, 1);\n this.live2DModel.addToParamFloat("PARAM_ANGLE_Y", this.dragY * 30, 1);\n this.live2DModel.addToParamFloat("PARAM_ANGLE_Z", this.dragX * this.dragY * -30, 1);\n\n this.live2DModel.addToParamFloat("PARAM_BODY_ANGLE_X", this.dragX * 10, 1);\n\n this.live2DModel.addToParamFloat("PARAM_EYE_BALL_X", this.dragX, 1);\n this.live2DModel.addToParamFloat("PARAM_EYE_BALL_Y", this.dragY, 1);\n\n this.live2DModel.addToParamFloat("PARAM_ANGLE_X", Number(15 * Math.sin(t / 6.5345)), 0.5);\n this.live2DModel.addToParamFloat("PARAM_ANGLE_Y", Number(8 * Math.sin(t / 3.5345)), 0.5);\n this.live2DModel.addToParamFloat("PARAM_ANGLE_Z", Number(10 * Math.sin(t / 5.5345)), 0.5);\n this.live2DModel.addToParamFloat("PARAM_BODY_ANGLE_X", Number(4 * Math.sin(t / 15.5345)), 0.5);\n this.live2DModel.setParamFloat("PARAM_BREATH", Number(0.5 + 0.5 * Math.sin(t / 3.2345)), 1);\n\n if (this.physics != null) {\n this.physics.updateParam(this.live2DModel);\n }\n\n if (this.lipSync == null) {\n this.live2DModel.setParamFloat("PARAM_MOUTH_OPEN_Y", this.lipSyncValue);\n }\n\n if (this.pose != null) {\n this.pose.updateParam(this.live2DModel);\n }\n\n this.live2DModel.update();\n};\n\nLAppModel.prototype.setRandomExpression = function () {\n var tmp = [];\n for (var name in this.expressions) {\n tmp.push(name);\n }\n\n var no = parseInt(Math.random() * tmp.length);\n\n this.setExpression(tmp[no]);\n};\n\nLAppModel.prototype.startRandomMotion = function (name, priority) {\n var max = this.modelSetting.getMotionNum(name);\n var no = parseInt(Math.random() * max);\n this.startMotion(name, no, priority);\n};\n\nLAppModel.prototype.startMotion = function (name, no, priority) {\n // console.log("startMotion : " + name + " " + no + " " + priority);\n\n var motionName = this.modelSetting.getMotionFile(name, no);\n\n if (motionName == null || motionName == "") {\n if (_LAppDefine2.default.DEBUG_LOG) console.error("Failed to motion.");\n return;\n }\n\n if (priority == _LAppDefine2.default.PRIORITY_FORCE) {\n this.mainMotionManager.setReservePriority(priority);\n } else if (!this.mainMotionManager.reserveMotion(priority)) {\n if (_LAppDefine2.default.DEBUG_LOG) console.log("Motion is running.");\n return;\n }\n\n var thisRef = this;\n var motion;\n\n if (this.motions[name] == null) {\n this.loadMotion(null, this.modelHomeDir + motionName, function (mtn) {\n motion = mtn;\n\n thisRef.setFadeInFadeOut(name, no, priority, motion);\n });\n } else {\n motion = this.motions[name];\n\n thisRef.setFadeInFadeOut(name, no, priority, motion);\n }\n};\n\nLAppModel.prototype.setFadeInFadeOut = function (name, no, priority, motion) {\n var motionName = this.modelSetting.getMotionFile(name, no);\n\n motion.setFadeIn(this.modelSetting.getMotionFadeIn(name, no));\n motion.setFadeOut(this.modelSetting.getMotionFadeOut(name, no));\n\n if (_LAppDefine2.default.DEBUG_LOG) console.log("Start motion : " + motionName);\n\n if (this.modelSetting.getMotionSound(name, no) == null) {\n this.mainMotionManager.startMotionPrio(motion, priority);\n } else {\n var soundName = this.modelSetting.getMotionSound(name, no);\n // var player = new Sound(this.modelHomeDir + soundName);\n\n var snd = document.createElement("audio");\n snd.src = this.modelHomeDir + soundName;\n\n if (_LAppDefine2.default.DEBUG_LOG) console.log("Start sound : " + soundName);\n\n snd.play();\n this.mainMotionManager.startMotionPrio(motion, priority);\n }\n};\n\nLAppModel.prototype.setExpression = function (name) {\n var motion = this.expressions[name];\n\n if (_LAppDefine2.default.DEBUG_LOG) console.log("Expression : " + name);\n\n this.expressionManager.startMotion(motion, false);\n};\n\nLAppModel.prototype.draw = function (gl) {\n //console.log("--\x3e LAppModel.draw()");\n\n // if(this.live2DModel == null) return;\n\n\n _MatrixStack2.default.push();\n\n _MatrixStack2.default.multMatrix(this.modelMatrix.getArray());\n\n this.tmpMatrix = _MatrixStack2.default.getMatrix();\n this.live2DModel.setMatrix(this.tmpMatrix);\n this.live2DModel.draw();\n\n _MatrixStack2.default.pop();\n};\n\nLAppModel.prototype.hitTest = function (id, testX, testY) {\n var len = this.modelSetting.getHitAreaNum();\n for (var i = 0; i < len; i++) {\n if (id == this.modelSetting.getHitAreaName(i)) {\n var drawID = this.modelSetting.getHitAreaID(i);\n\n return this.hitTestSimple(drawID, testX, testY);\n }\n }\n\n return false;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvTEFwcE1vZGVsLmpzPzYxMTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMMkRCYXNlTW9kZWwsIEwyREV5ZUJsaW5rfSBmcm9tIFwiLi9saWIvTGl2ZTJERnJhbWV3b3JrXCJcbmltcG9ydCBNb2RlbFNldHRpbmdKc29uIGZyb20gXCIuL2xpYi9Nb2RlbFNldHRpbmdKc29uXCJcbmltcG9ydCBMQXBwRGVmaW5lIGZyb20gXCIuL0xBcHBEZWZpbmVcIlxuaW1wb3J0IE1hdHJpeFN0YWNrIGZyb20gXCIuL2xpYi9NYXRyaXhTdGFja1wiXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gIGNsYXNzIExBcHBNb2RlbCAgICAgZXh0ZW5kcyBMMkRCYXNlTW9kZWwgICAgICAgICBcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTEFwcE1vZGVsKClcbntcbiAgICAvL0wyREJhc2VNb2RlbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIEwyREJhc2VNb2RlbC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgICBcbiAgICB0aGlzLm1vZGVsSG9tZURpciA9IFwiXCI7XG4gICAgdGhpcy5tb2RlbFNldHRpbmcgPSBudWxsO1xuICAgIHRoaXMudG1wTWF0cml4ID0gW107XG59XG5cbkxBcHBNb2RlbC5wcm90b3R5cGUgPSBuZXcgTDJEQmFzZU1vZGVsKCk7XG5cblxuTEFwcE1vZGVsLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24oZ2wsIG1vZGVsU2V0dGluZ1BhdGgsIGNhbGxiYWNrKVxue1xuICAgIHRoaXMuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgdGhpcy5zZXRJbml0aWFsaXplZChmYWxzZSk7XG5cbiAgICB0aGlzLm1vZGVsSG9tZURpciA9IG1vZGVsU2V0dGluZ1BhdGguc3Vic3RyaW5nKDAsIG1vZGVsU2V0dGluZ1BhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7IFxuXG4gICAgdGhpcy5tb2RlbFNldHRpbmcgPSBuZXcgTW9kZWxTZXR0aW5nSnNvbigpO1xuICAgIFxuICAgIHZhciB0aGlzUmVmID0gdGhpcztcbiAgICBcbiAgICB0aGlzLm1vZGVsU2V0dGluZy5sb2FkTW9kZWxTZXR0aW5nKG1vZGVsU2V0dGluZ1BhdGgsIGZ1bmN0aW9uKCl7XG4gICAgICAgIFxuICAgICAgICB2YXIgcGF0aCA9IHRoaXNSZWYubW9kZWxIb21lRGlyICsgdGhpc1JlZi5tb2RlbFNldHRpbmcuZ2V0TW9kZWxGaWxlKCk7XG4gICAgICAgIHRoaXNSZWYubG9hZE1vZGVsRGF0YShwYXRoLCBmdW5jdGlvbihtb2RlbCl7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpc1JlZi5tb2RlbFNldHRpbmcuZ2V0VGV4dHVyZU51bSgpOyBpKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIHRleFBhdGhzID0gdGhpc1JlZi5tb2RlbEhvbWVEaXIgKyBcbiAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5tb2RlbFNldHRpbmcuZ2V0VGV4dHVyZUZpbGUoaSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpc1JlZi5sb2FkVGV4dHVyZShpLCB0ZXhQYXRocywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpc1JlZi5pc1RleExvYWRlZCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNSZWYubW9kZWxTZXR0aW5nLmdldEV4cHJlc3Npb25OdW0oKSA+IDApXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5leHByZXNzaW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpc1JlZi5tb2RlbFNldHRpbmcuZ2V0RXhwcmVzc2lvbk51bSgpOyBqKyspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhwTmFtZSA9IHRoaXNSZWYubW9kZWxTZXR0aW5nLmdldEV4cHJlc3Npb25OYW1lKGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhwRmlsZVBhdGggPSB0aGlzUmVmLm1vZGVsSG9tZURpciArIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5tb2RlbFNldHRpbmcuZ2V0RXhwcmVzc2lvbkZpbGUoaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLmxvYWRFeHByZXNzaW9uKGV4cE5hbWUsIGV4cEZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5leHByZXNzaW9uTWFuYWdlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5leHByZXNzaW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNSZWYuZXllQmxpbmsgPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLmV5ZUJsaW5rID0gbmV3IEwyREV5ZUJsaW5rKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNSZWYubW9kZWxTZXR0aW5nLmdldFBoeXNpY3NGaWxlKCkgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLmxvYWRQaHlzaWNzKHRoaXNSZWYubW9kZWxIb21lRGlyICsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLm1vZGVsU2V0dGluZy5nZXRQaHlzaWNzRmlsZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLnBoeXNpY3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNSZWYubW9kZWxTZXR0aW5nLmdldFBvc2VGaWxlKCkgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLmxvYWRQb3NlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLm1vZGVsSG9tZURpciArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNSZWYubW9kZWxTZXR0aW5nLmdldFBvc2VGaWxlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5wb3NlLnVwZGF0ZVBhcmFtKHRoaXNSZWYubGl2ZTJETW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLnBvc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNSZWYubW9kZWxTZXR0aW5nLmdldExheW91dCgpICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dCA9IHRoaXNSZWYubW9kZWxTZXR0aW5nLmdldExheW91dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXRbXCJ3aWR0aFwiXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLm1vZGVsTWF0cml4LnNldFdpZHRoKGxheW91dFtcIndpZHRoXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5b3V0W1wiaGVpZ2h0XCJdICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNSZWYubW9kZWxNYXRyaXguc2V0SGVpZ2h0KGxheW91dFtcImhlaWdodFwiXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5b3V0W1wieFwiXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLm1vZGVsTWF0cml4LnNldFgobGF5b3V0W1wieFwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheW91dFtcInlcIl0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5tb2RlbE1hdHJpeC5zZXRZKGxheW91dFtcInlcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXRbXCJjZW50ZXJfeFwiXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLm1vZGVsTWF0cml4LmNlbnRlclgobGF5b3V0W1wiY2VudGVyX3hcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXRbXCJjZW50ZXJfeVwiXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLm1vZGVsTWF0cml4LmNlbnRlclkobGF5b3V0W1wiY2VudGVyX3lcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXRbXCJ0b3BcIl0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5tb2RlbE1hdHJpeC50b3AobGF5b3V0W1widG9wXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5b3V0W1wiYm90dG9tXCJdICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNSZWYubW9kZWxNYXRyaXguYm90dG9tKGxheW91dFtcImJvdHRvbVwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheW91dFtcImxlZnRcIl0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5tb2RlbE1hdHJpeC5sZWZ0KGxheW91dFtcImxlZnRcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXRbXCJyaWdodFwiXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLm1vZGVsTWF0cml4LnJpZ2h0KGxheW91dFtcInJpZ2h0XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzUmVmLm1vZGVsU2V0dGluZy5nZXRJbml0UGFyYW1OdW0oKTsgaisrKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNSZWYubGl2ZTJETW9kZWwuc2V0UGFyYW1GbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5tb2RlbFNldHRpbmcuZ2V0SW5pdFBhcmFtSUQoaiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNSZWYubW9kZWxTZXR0aW5nLmdldEluaXRQYXJhbVZhbHVlKGopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzUmVmLm1vZGVsU2V0dGluZy5nZXRJbml0UGFydHNWaXNpYmxlTnVtKCk7IGorKylcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLmxpdmUyRE1vZGVsLnNldFBhcnRzT3BhY2l0eShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5tb2RlbFNldHRpbmcuZ2V0SW5pdFBhcnRzVmlzaWJsZUlEKGopLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLm1vZGVsU2V0dGluZy5nZXRJbml0UGFydHNWaXNpYmxlVmFsdWUoailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5saXZlMkRNb2RlbC5zYXZlUGFyYW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXNSZWYubGl2ZTJETW9kZWwuc2V0R0woZ2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNSZWYucHJlbG9hZE1vdGlvbkdyb3VwKExBcHBEZWZpbmUuTU9USU9OX0dST1VQX0lETEUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1JlZi5tYWluTW90aW9uTWFuYWdlci5zdG9wQWxsTW90aW9ucygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLnNldFVwZGF0aW5nKGZhbHNlKTsgXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzUmVmLnNldEluaXRpYWxpemVkKHRydWUpOyBcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cblxuXG5MQXBwTW9kZWwucHJvdG90eXBlLnJlbGVhc2UgPSBmdW5jdGlvbihnbClcbntcbiAgICAvLyB0aGlzLmxpdmUyRE1vZGVsLmRlbGV0ZVRleHR1cmVzKCk7XG4gICAgdmFyIHBtID0gTGl2ZTJERnJhbWV3b3JrLmdldFBsYXRmb3JtTWFuYWdlcigpO1xuXG4gICAgZ2wuZGVsZXRlVGV4dHVyZShwbS50ZXh0dXJlKTtcbn1cblxuXG5cbkxBcHBNb2RlbC5wcm90b3R5cGUucHJlbG9hZE1vdGlvbkdyb3VwID0gZnVuY3Rpb24obmFtZSlcbntcbiAgICB2YXIgdGhpc1JlZiA9IHRoaXM7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1vZGVsU2V0dGluZy5nZXRNb3Rpb25OdW0obmFtZSk7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaWxlID0gdGhpcy5tb2RlbFNldHRpbmcuZ2V0TW90aW9uRmlsZShuYW1lLCBpKTtcbiAgICAgICAgdGhpcy5sb2FkTW90aW9uKGZpbGUsIHRoaXMubW9kZWxIb21lRGlyICsgZmlsZSwgZnVuY3Rpb24obW90aW9uKSB7XG4gICAgICAgICAgICBtb3Rpb24uc2V0RmFkZUluKHRoaXNSZWYubW9kZWxTZXR0aW5nLmdldE1vdGlvbkZhZGVJbihuYW1lLCBpKSk7XG4gICAgICAgICAgICBtb3Rpb24uc2V0RmFkZU91dCh0aGlzUmVmLm1vZGVsU2V0dGluZy5nZXRNb3Rpb25GYWRlT3V0KG5hbWUsIGkpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgIH1cbn1cblxuXG5MQXBwTW9kZWwucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvLyBjb25zb2xlLmxvZyhcIi0tPiBMQXBwTW9kZWwudXBkYXRlKClcIik7XG5cbiAgICBpZih0aGlzLmxpdmUyRE1vZGVsID09IG51bGwpIFxuICAgIHtcbiAgICAgICAgaWYgKExBcHBEZWZpbmUuREVCVUdfTE9HKSBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHVwZGF0ZS5cIik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHZhciB0aW1lTVNlYyA9IFV0U3lzdGVtLmdldFVzZXJUaW1lTVNlYygpIC0gdGhpcy5zdGFydFRpbWVNU2VjO1xuICAgIHZhciB0aW1lU2VjID0gdGltZU1TZWMgLyAxMDAwLjA7XG4gICAgdmFyIHQgPSB0aW1lU2VjICogMiAqIE1hdGguUEk7IFxuICAgIFxuICAgIFxuICAgIGlmICh0aGlzLm1haW5Nb3Rpb25NYW5hZ2VyLmlzRmluaXNoZWQoKSlcbiAgICB7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnN0YXJ0UmFuZG9tTW90aW9uKExBcHBEZWZpbmUuTU9USU9OX0dST1VQX0lETEUsIExBcHBEZWZpbmUuUFJJT1JJVFlfSURMRSk7XG4gICAgfVxuICAgIFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdFx0XG4gICAgXG4gICAgXG4gICAgdGhpcy5saXZlMkRNb2RlbC5sb2FkUGFyYW0oKTtcbiAgICBcbiAgICBcbiAgICBcbiAgICB2YXIgdXBkYXRlID0gdGhpcy5tYWluTW90aW9uTWFuYWdlci51cGRhdGVQYXJhbSh0aGlzLmxpdmUyRE1vZGVsKTsgXG4gICAgaWYgKCF1cGRhdGUpIHtcbiAgICAgICAgXG4gICAgICAgIGlmKHRoaXMuZXllQmxpbmsgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5leWVCbGluay51cGRhdGVQYXJhbSh0aGlzLmxpdmUyRE1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFxuICAgIHRoaXMubGl2ZTJETW9kZWwuc2F2ZVBhcmFtKCk7XG4gICAgXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0XHRcbiAgICBcbiAgICBcbiAgICBpZiAodGhpcy5leHByZXNzaW9uTWFuYWdlciAhPSBudWxsICYmIFxuICAgICAgICB0aGlzLmV4cHJlc3Npb25zICE9IG51bGwgJiYgXG4gICAgICAgICF0aGlzLmV4cHJlc3Npb25NYW5hZ2VyLmlzRmluaXNoZWQoKSlcbiAgICB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hbmFnZXIudXBkYXRlUGFyYW0odGhpcy5saXZlMkRNb2RlbCk7IFxuICAgIH1cblxuICAgIFxuICAgIFxuICAgIHRoaXMubGl2ZTJETW9kZWwuYWRkVG9QYXJhbUZsb2F0KFwiUEFSQU1fQU5HTEVfWFwiLCB0aGlzLmRyYWdYICogMzAsIDEpOyBcbiAgICB0aGlzLmxpdmUyRE1vZGVsLmFkZFRvUGFyYW1GbG9hdChcIlBBUkFNX0FOR0xFX1lcIiwgdGhpcy5kcmFnWSAqIDMwLCAxKTtcbiAgICB0aGlzLmxpdmUyRE1vZGVsLmFkZFRvUGFyYW1GbG9hdChcIlBBUkFNX0FOR0xFX1pcIiwgKHRoaXMuZHJhZ1ggKiB0aGlzLmRyYWdZKSAqIC0zMCwgMSk7XG5cbiAgICBcbiAgICBcbiAgICB0aGlzLmxpdmUyRE1vZGVsLmFkZFRvUGFyYW1GbG9hdChcIlBBUkFNX0JPRFlfQU5HTEVfWFwiLCB0aGlzLmRyYWdYKjEwLCAxKTsgXG5cbiAgICBcbiAgICBcbiAgICB0aGlzLmxpdmUyRE1vZGVsLmFkZFRvUGFyYW1GbG9hdChcIlBBUkFNX0VZRV9CQUxMX1hcIiwgdGhpcy5kcmFnWCwgMSk7IFxuICAgIHRoaXMubGl2ZTJETW9kZWwuYWRkVG9QYXJhbUZsb2F0KFwiUEFSQU1fRVlFX0JBTExfWVwiLCB0aGlzLmRyYWdZLCAxKTtcblxuXG4gICAgXG4gICAgdGhpcy5saXZlMkRNb2RlbC5hZGRUb1BhcmFtRmxvYXQoXCJQQVJBTV9BTkdMRV9YXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcigoMTUgKiBNYXRoLnNpbih0IC8gNi41MzQ1KSkpLCAwLjUpO1xuICAgIHRoaXMubGl2ZTJETW9kZWwuYWRkVG9QYXJhbUZsb2F0KFwiUEFSQU1fQU5HTEVfWVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoKDggKiBNYXRoLnNpbih0IC8gMy41MzQ1KSkpLCAwLjUpO1xuICAgIHRoaXMubGl2ZTJETW9kZWwuYWRkVG9QYXJhbUZsb2F0KFwiUEFSQU1fQU5HTEVfWlwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoKDEwICogTWF0aC5zaW4odCAvIDUuNTM0NSkpKSwgMC41KTtcbiAgICB0aGlzLmxpdmUyRE1vZGVsLmFkZFRvUGFyYW1GbG9hdChcIlBBUkFNX0JPRFlfQU5HTEVfWFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoKDQgKiBNYXRoLnNpbih0IC8gMTUuNTM0NSkpKSwgMC41KTtcbiAgICB0aGlzLmxpdmUyRE1vZGVsLnNldFBhcmFtRmxvYXQoXCJQQVJBTV9CUkVBVEhcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcigoMC41ICsgMC41ICogTWF0aC5zaW4odCAvIDMuMjM0NSkpKSwgMSk7XG4gICAgXG4gICAgXG4gICAgaWYgKHRoaXMucGh5c2ljcyAhPSBudWxsKVxuICAgIHtcbiAgICAgICAgdGhpcy5waHlzaWNzLnVwZGF0ZVBhcmFtKHRoaXMubGl2ZTJETW9kZWwpOyBcbiAgICB9XG4gICAgXG4gICAgXG4gICAgaWYgKHRoaXMubGlwU3luYyA9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdGhpcy5saXZlMkRNb2RlbC5zZXRQYXJhbUZsb2F0KFwiUEFSQU1fTU9VVEhfT1BFTl9ZXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpcFN5bmNWYWx1ZSk7XG4gICAgfVxuICAgIFxuICAgIFxuICAgIGlmKCB0aGlzLnBvc2UgIT0gbnVsbCApIHtcbiAgICAgICAgdGhpcy5wb3NlLnVwZGF0ZVBhcmFtKHRoaXMubGl2ZTJETW9kZWwpO1xuICAgIH1cbiAgICAgICAgXG4gICAgdGhpcy5saXZlMkRNb2RlbC51cGRhdGUoKTtcbn07XG5cblxuXG5MQXBwTW9kZWwucHJvdG90eXBlLnNldFJhbmRvbUV4cHJlc3Npb24gPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRtcCA9IFtdO1xuICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5leHByZXNzaW9ucylcbiAgICB7XG4gICAgICAgIHRtcC5wdXNoKG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBubyA9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkgKiB0bXAubGVuZ3RoKTtcblxuICAgIHRoaXMuc2V0RXhwcmVzc2lvbih0bXBbbm9dKTtcbn1cblxuXG5cbkxBcHBNb2RlbC5wcm90b3R5cGUuc3RhcnRSYW5kb21Nb3Rpb24gPSBmdW5jdGlvbihuYW1lLCBwcmlvcml0eSlcbntcbiAgICB2YXIgbWF4ID0gdGhpcy5tb2RlbFNldHRpbmcuZ2V0TW90aW9uTnVtKG5hbWUpO1xuICAgIHZhciBubyA9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkgKiBtYXgpO1xuICAgIHRoaXMuc3RhcnRNb3Rpb24obmFtZSwgbm8sIHByaW9yaXR5KTtcbn1cblxuXG5cbkxBcHBNb2RlbC5wcm90b3R5cGUuc3RhcnRNb3Rpb24gPSBmdW5jdGlvbihuYW1lLCBubywgcHJpb3JpdHkpXG57XG4gICAgLy8gY29uc29sZS5sb2coXCJzdGFydE1vdGlvbiA6IFwiICsgbmFtZSArIFwiIFwiICsgbm8gKyBcIiBcIiArIHByaW9yaXR5KTtcbiAgICBcbiAgICB2YXIgbW90aW9uTmFtZSA9IHRoaXMubW9kZWxTZXR0aW5nLmdldE1vdGlvbkZpbGUobmFtZSwgbm8pO1xuICAgIFxuICAgIGlmIChtb3Rpb25OYW1lID09IG51bGwgfHwgbW90aW9uTmFtZSA9PSBcIlwiKVxuICAgIHtcbiAgICAgICAgaWYgKExBcHBEZWZpbmUuREVCVUdfTE9HKVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBtb3Rpb24uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByaW9yaXR5ID09IExBcHBEZWZpbmUuUFJJT1JJVFlfRk9SQ0UpIFxuICAgIHtcbiAgICAgICAgdGhpcy5tYWluTW90aW9uTWFuYWdlci5zZXRSZXNlcnZlUHJpb3JpdHkocHJpb3JpdHkpO1xuICAgIH1cbiAgICBlbHNlIGlmICghdGhpcy5tYWluTW90aW9uTWFuYWdlci5yZXNlcnZlTW90aW9uKHByaW9yaXR5KSlcbiAgICB7XG4gICAgICAgIGlmIChMQXBwRGVmaW5lLkRFQlVHX0xPRylcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTW90aW9uIGlzIHJ1bm5pbmcuXCIpXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGhpc1JlZiA9IHRoaXM7XG4gICAgdmFyIG1vdGlvbjtcblxuICAgIGlmICh0aGlzLm1vdGlvbnNbbmFtZV0gPT0gbnVsbCkgXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRNb3Rpb24obnVsbCwgdGhpcy5tb2RlbEhvbWVEaXIgKyBtb3Rpb25OYW1lLCBmdW5jdGlvbihtdG4pIHtcbiAgICAgICAgICAgIG1vdGlvbiA9IG10bjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzUmVmLnNldEZhZGVJbkZhZGVPdXQobmFtZSwgbm8sIHByaW9yaXR5LCBtb3Rpb24pO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIFxuICAgIHtcbiAgICAgICAgbW90aW9uID0gdGhpcy5tb3Rpb25zW25hbWVdO1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHRoaXNSZWYuc2V0RmFkZUluRmFkZU91dChuYW1lLCBubywgcHJpb3JpdHksIG1vdGlvbik7XG4gICAgfVxufVxuXG5cbkxBcHBNb2RlbC5wcm90b3R5cGUuc2V0RmFkZUluRmFkZU91dCA9IGZ1bmN0aW9uKG5hbWUsIG5vLCBwcmlvcml0eSwgbW90aW9uKVxue1xuICAgIHZhciBtb3Rpb25OYW1lID0gdGhpcy5tb2RlbFNldHRpbmcuZ2V0TW90aW9uRmlsZShuYW1lLCBubyk7XG4gICAgXG4gICAgbW90aW9uLnNldEZhZGVJbih0aGlzLm1vZGVsU2V0dGluZy5nZXRNb3Rpb25GYWRlSW4obmFtZSwgbm8pKTtcbiAgICBtb3Rpb24uc2V0RmFkZU91dCh0aGlzLm1vZGVsU2V0dGluZy5nZXRNb3Rpb25GYWRlT3V0KG5hbWUsIG5vKSk7XG4gICAgXG4gICAgXG4gICAgaWYgKExBcHBEZWZpbmUuREVCVUdfTE9HKVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTdGFydCBtb3Rpb24gOiBcIiArIG1vdGlvbk5hbWUpO1xuXG4gICAgaWYgKHRoaXMubW9kZWxTZXR0aW5nLmdldE1vdGlvblNvdW5kKG5hbWUsIG5vKSA9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdGhpcy5tYWluTW90aW9uTWFuYWdlci5zdGFydE1vdGlvblByaW8obW90aW9uLCBwcmlvcml0eSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBzb3VuZE5hbWUgPSB0aGlzLm1vZGVsU2V0dGluZy5nZXRNb3Rpb25Tb3VuZChuYW1lLCBubyk7XG4gICAgICAgIC8vIHZhciBwbGF5ZXIgPSBuZXcgU291bmQodGhpcy5tb2RlbEhvbWVEaXIgKyBzb3VuZE5hbWUpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHNuZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhdWRpb1wiKTtcbiAgICAgICAgc25kLnNyYyA9IHRoaXMubW9kZWxIb21lRGlyICsgc291bmROYW1lO1xuICAgICAgICBcbiAgICAgICAgaWYgKExBcHBEZWZpbmUuREVCVUdfTE9HKVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTdGFydCBzb3VuZCA6IFwiICsgc291bmROYW1lKTtcbiAgICAgICAgXG4gICAgICAgIHNuZC5wbGF5KCk7XG4gICAgICAgIHRoaXMubWFpbk1vdGlvbk1hbmFnZXIuc3RhcnRNb3Rpb25QcmlvKG1vdGlvbiwgcHJpb3JpdHkpO1xuICAgIH1cbn1cblxuXG5cbkxBcHBNb2RlbC5wcm90b3R5cGUuc2V0RXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG5hbWUpXG57XG4gICAgdmFyIG1vdGlvbiA9IHRoaXMuZXhwcmVzc2lvbnNbbmFtZV07XG4gICAgXG4gICAgaWYgKExBcHBEZWZpbmUuREVCVUdfTE9HKVxuICAgICAgICBjb25zb2xlLmxvZyhcIkV4cHJlc3Npb24gOiBcIiArIG5hbWUpO1xuICAgICAgICBcbiAgICB0aGlzLmV4cHJlc3Npb25NYW5hZ2VyLnN0YXJ0TW90aW9uKG1vdGlvbiwgZmFsc2UpO1xufVxuXG5cblxuTEFwcE1vZGVsLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24oZ2wpXG57XG4gICAgLy9jb25zb2xlLmxvZyhcIi0tPiBMQXBwTW9kZWwuZHJhdygpXCIpO1xuICAgIFxuICAgIC8vIGlmKHRoaXMubGl2ZTJETW9kZWwgPT0gbnVsbCkgcmV0dXJuO1xuICAgIFxuICAgIFxuICAgIE1hdHJpeFN0YWNrLnB1c2goKTtcbiAgICBcbiAgICBNYXRyaXhTdGFjay5tdWx0TWF0cml4KHRoaXMubW9kZWxNYXRyaXguZ2V0QXJyYXkoKSk7XG4gICAgXG4gICAgdGhpcy50bXBNYXRyaXggPSBNYXRyaXhTdGFjay5nZXRNYXRyaXgoKVxuICAgIHRoaXMubGl2ZTJETW9kZWwuc2V0TWF0cml4KHRoaXMudG1wTWF0cml4KTtcbiAgICB0aGlzLmxpdmUyRE1vZGVsLmRyYXcoKTtcbiAgICBcbiAgICBNYXRyaXhTdGFjay5wb3AoKTtcbiAgICBcbn07XG4gICAgICAgIFxuXG5cbkxBcHBNb2RlbC5wcm90b3R5cGUuaGl0VGVzdCA9IGZ1bmN0aW9uKGlkLCB0ZXN0WCwgdGVzdFkpXG57XG4gICAgdmFyIGxlbiA9IHRoaXMubW9kZWxTZXR0aW5nLmdldEhpdEFyZWFOdW0oKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHsgICAgICAgIFxuICAgICAgICBpZiAoaWQgPT0gdGhpcy5tb2RlbFNldHRpbmcuZ2V0SGl0QXJlYU5hbWUoaSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkcmF3SUQgPSB0aGlzLm1vZGVsU2V0dGluZy5nZXRIaXRBcmVhSUQoaSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpdFRlc3RTaW1wbGUoZHJhd0lELCB0ZXN0WCwgdGVzdFkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmYWxzZTsgXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9MQXBwTW9kZWwuanMiXSwibWFwcGluZ3MiOiI7Ozs7O0FBVUE7QUFDQTtBQVhBO0FBQ0E7QUFBQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBOzs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUlBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6\n')},/*!********************************!*\ + !*** ./src/PlatformManager.js ***! + \********************************/ +function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = PlatformManager;\n\nvar _webglcontext = __webpack_require__(/*! ./webglcontext */ 3);\n\n//============================================================\n//============================================================\n// class PlatformManager extend IPlatformManager\n//============================================================\n//============================================================\nfunction PlatformManager() {}\n\n//============================================================\n// PlatformManager # loadBytes()\n//============================================================\n/**\n *\n * You can modify and use this source freely\n * only for the development of application related Live2D.\n *\n * (c) Live2D Inc. All rights reserved.\n */\nPlatformManager.prototype.loadBytes = function (path /*String*/, callback) {\n var request = new XMLHttpRequest();\n request.open("GET", path, true);\n request.responseType = "arraybuffer";\n request.onload = function () {\n switch (request.status) {\n case 200:\n callback(request.response);\n break;\n default:\n console.error("Failed to load (" + request.status + ") : " + path);\n break;\n }\n };\n request.send(null);\n //return request;\n};\n\n//============================================================\n// PlatformManager # loadString()\n//============================================================\nPlatformManager.prototype.loadString = function (path /*String*/) {\n\n this.loadBytes(path, function (buf) {\n return buf;\n });\n};\n\n//============================================================\n// PlatformManager # loadLive2DModel()\n//============================================================\nPlatformManager.prototype.loadLive2DModel = function (path /*String*/, callback) {\n var model = null;\n\n // load moc\n this.loadBytes(path, function (buf) {\n model = Live2DModelWebGL.loadModel(buf);\n callback(model);\n });\n};\n\n//============================================================\n// PlatformManager # loadTexture()\n//============================================================\nPlatformManager.prototype.loadTexture = function (model /*ALive2DModel*/, no /*int*/, path /*String*/, callback) {\n // load textures\n var loadedImage = new Image();\n loadedImage.src = path;\n\n var thisRef = this;\n loadedImage.onload = function () {\n // create texture\n var gl = (0, _webglcontext.getContext)();\n var texture = gl.createTexture();\n if (!texture) {\n console.error("Failed to generate gl texture name.");return -1;\n }\n\n if (model.isPremultipliedAlpha() == false) {\n // 乗算済アルファテクスチャ以外の場合\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 1);\n }\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, loadedImage);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);\n gl.generateMipmap(gl.TEXTURE_2D);\n\n model.setTexture(no, texture);\n\n // テクスチャオブジェクトを解放\n texture = null;\n\n if (typeof callback == "function") callback();\n };\n\n loadedImage.onerror = function () {\n console.error("Failed to load image : " + path);\n };\n};\n\n//============================================================\n// PlatformManager # parseFromBytes(buf)\n\n//============================================================\nPlatformManager.prototype.jsonParseFromBytes = function (buf) {\n\n var jsonStr;\n\n var bomCode = new Uint8Array(buf, 0, 3);\n if (bomCode[0] == 239 && bomCode[1] == 187 && bomCode[2] == 191) {\n jsonStr = String.fromCharCode.apply(null, new Uint8Array(buf, 3));\n } else {\n jsonStr = String.fromCharCode.apply(null, new Uint8Array(buf));\n }\n\n var jsonObj = JSON.parse(jsonStr);\n\n return jsonObj;\n};\n\n//============================================================\n// PlatformManager # log()\n//============================================================\nPlatformManager.prototype.log = function (txt /*String*/) {\n //console.log(txt);\n};\n\nfunction getWebGLContext(canvas) {\n var NAMES = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"];\n for (var i = 0; i < NAMES.length; i++) {\n try {\n var ctx = canvas.getContext(NAMES[i], { premultipliedAlpha: true });\n if (ctx) return ctx;\n } catch (e) {}\n }\n return null;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvUGxhdGZvcm1NYW5hZ2VyLmpzP2IzOGUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKlxuICogIFlvdSBjYW4gbW9kaWZ5IGFuZCB1c2UgdGhpcyBzb3VyY2UgZnJlZWx5XG4gKiAgb25seSBmb3IgdGhlIGRldmVsb3BtZW50IG9mIGFwcGxpY2F0aW9uIHJlbGF0ZWQgTGl2ZTJELlxuICpcbiAqICAoYykgTGl2ZTJEIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtnZXRDb250ZXh0fSBmcm9tIFwiLi93ZWJnbGNvbnRleHRcIlxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICBjbGFzcyBQbGF0Zm9ybU1hbmFnZXIgICAgIGV4dGVuZCBJUGxhdGZvcm1NYW5hZ2VyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBsYXRmb3JtTWFuYWdlcigpXG57XG5cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICAgIFBsYXRmb3JtTWFuYWdlciAjIGxvYWRCeXRlcygpXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUGxhdGZvcm1NYW5hZ2VyLnByb3RvdHlwZS5sb2FkQnl0ZXMgICAgICAgPSBmdW5jdGlvbihwYXRoLypTdHJpbmcqLywgY2FsbGJhY2spXG57XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICByZXF1ZXN0Lm9wZW4oXCJHRVRcIiwgcGF0aCwgdHJ1ZSk7XG4gICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgcmVxdWVzdC5vbmxvYWQgPSBmdW5jdGlvbigpe1xuICAgICAgICBzd2l0Y2gocmVxdWVzdC5zdGF0dXMpe1xuICAgICAgICBjYXNlIDIwMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKHJlcXVlc3QucmVzcG9uc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxvYWQgKFwiICsgcmVxdWVzdC5zdGF0dXMgKyBcIikgOiBcIiArIHBhdGgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVxdWVzdC5zZW5kKG51bGwpO1xuICAgIC8vcmV0dXJuIHJlcXVlc3Q7XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAgICBQbGF0Zm9ybU1hbmFnZXIgIyBsb2FkU3RyaW5nKClcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5QbGF0Zm9ybU1hbmFnZXIucHJvdG90eXBlLmxvYWRTdHJpbmcgICAgICA9IGZ1bmN0aW9uKHBhdGgvKlN0cmluZyovKVxue1xuICAgIFxuICAgIHRoaXMubG9hZEJ5dGVzKHBhdGgsIGZ1bmN0aW9uKGJ1ZikgeyAgICAgICAgXG4gICAgICAgIHJldHVybiBidWY7XG4gICAgfSk7XG4gICAgXG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAgICBQbGF0Zm9ybU1hbmFnZXIgIyBsb2FkTGl2ZTJETW9kZWwoKVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblBsYXRmb3JtTWFuYWdlci5wcm90b3R5cGUubG9hZExpdmUyRE1vZGVsID0gZnVuY3Rpb24ocGF0aC8qU3RyaW5nKi8sIGNhbGxiYWNrKVxue1xuICAgIHZhciBtb2RlbCA9IG51bGw7XG4gICAgXG4gICAgLy8gbG9hZCBtb2NcbiAgICB0aGlzLmxvYWRCeXRlcyhwYXRoLCBmdW5jdGlvbihidWYpe1xuICAgICAgICBtb2RlbCA9IExpdmUyRE1vZGVsV2ViR0wubG9hZE1vZGVsKGJ1Zik7XG4gICAgICAgIGNhbGxiYWNrKG1vZGVsKTtcbiAgICB9KTtcblxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gICAgUGxhdGZvcm1NYW5hZ2VyICMgbG9hZFRleHR1cmUoKVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblBsYXRmb3JtTWFuYWdlci5wcm90b3R5cGUubG9hZFRleHR1cmUgICAgID0gZnVuY3Rpb24obW9kZWwvKkFMaXZlMkRNb2RlbCovLCBuby8qaW50Ki8sIHBhdGgvKlN0cmluZyovLCBjYWxsYmFjaylcbnsgXG4gICAgLy8gbG9hZCB0ZXh0dXJlc1xuICAgIHZhciBsb2FkZWRJbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGxvYWRlZEltYWdlLnNyYyA9IHBhdGg7XG4gICAgICAgIFxuICAgIHZhciB0aGlzUmVmID0gdGhpcztcbiAgICBsb2FkZWRJbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gY3JlYXRlIHRleHR1cmVcbiAgICAgICAgdmFyIGdsID0gZ2V0Q29udGV4dCgpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcdCBcbiAgICAgICAgaWYgKCF0ZXh0dXJlKXsgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBnZW5lcmF0ZSBnbCB0ZXh0dXJlIG5hbWUuXCIpOyByZXR1cm4gLTE7IH1cblxuICAgICAgICBpZihtb2RlbC5pc1ByZW11bHRpcGxpZWRBbHBoYSgpID09IGZhbHNlKXtcbiAgICAgICAgICAgIC8vIOS5l+eul+a4iOOCouODq+ODleOCoeODhuOCr+OCueODgeODo+S7peWkluOBruWgtOWQiFxuICAgICAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCAxKTtcdFxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7XG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgXG4gICAgICAgICAgICAgICAgICAgICAgZ2wuVU5TSUdORURfQllURSwgbG9hZGVkSW1hZ2UpO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG4gICAgICAgIGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xuXG5cbiAgICAgICAgXG4gICAgICAgIG1vZGVsLnNldFRleHR1cmUobm8sIHRleHR1cmUpO1xuICAgICAgICBcbiAgICAgICAgLy8g44OG44Kv44K544OB44Oj44Kq44OW44K444Kn44Kv44OI44KS6Kej5pS+XG4gICAgICAgIHRleHR1cmUgPSBudWxsO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICBcbiAgICBsb2FkZWRJbWFnZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7IFxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxvYWQgaW1hZ2UgOiBcIiArIHBhdGgpOyBcbiAgICB9XG59XG5cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICAgIFBsYXRmb3JtTWFuYWdlciAjIHBhcnNlRnJvbUJ5dGVzKGJ1ZilcblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblBsYXRmb3JtTWFuYWdlci5wcm90b3R5cGUuanNvblBhcnNlRnJvbUJ5dGVzID0gZnVuY3Rpb24oYnVmKXtcbiAgICBcbiAgICB2YXIganNvblN0cjtcbiAgICBcbiAgICBcbiAgICBcbiAgICB2YXIgYm9tQ29kZSA9IG5ldyBVaW50OEFycmF5KGJ1ZiwgMCwgMyk7XG4gICAgaWYgKGJvbUNvZGVbMF0gPT0gMjM5ICYmIGJvbUNvZGVbMV0gPT0gMTg3ICYmIGJvbUNvZGVbMl0gPT0gMTkxKSB7XG4gICAgICAgIGpzb25TdHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KGJ1ZiwgMykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGpzb25TdHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KGJ1ZikpO1xuICAgIH1cbiAgICBcbiAgICB2YXIganNvbk9iaiA9IEpTT04ucGFyc2UoanNvblN0cik7XG4gICAgXG4gICAgcmV0dXJuIGpzb25PYmo7XG59O1xuXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAgICBQbGF0Zm9ybU1hbmFnZXIgIyBsb2coKVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblBsYXRmb3JtTWFuYWdlci5wcm90b3R5cGUubG9nICAgICAgICAgICAgID0gZnVuY3Rpb24odHh0LypTdHJpbmcqLylcbntcbiAgICAvL2NvbnNvbGUubG9nKHR4dCk7XG59XG5cbmZ1bmN0aW9uIGdldFdlYkdMQ29udGV4dChjYW52YXMpXG57XG4gICAgdmFyIE5BTUVTID0gWyBcIndlYmdsXCIgLCBcImV4cGVyaW1lbnRhbC13ZWJnbFwiICwgXCJ3ZWJraXQtM2RcIiAsIFwibW96LXdlYmdsXCJdO1xuICAgIGZvciggdmFyIGkgPSAwOyBpIDwgTkFNRVMubGVuZ3RoOyBpKysgKXtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KE5BTUVTW2ldLCB7cHJlbXVsdGlwbGllZEFscGhhIDogdHJ1ZX0pO1xuICAgICAgICAgICAgaWYoY3R4KSByZXR1cm4gY3R4O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGUpe31cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvUGxhdGZvcm1NYW5hZ2VyLmpzIl0sIm1hcHBpbmdzIjoiOzs7OztBQWNBO0FBQ0E7QUFSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFyQkE7Ozs7Ozs7QUFzQkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7\n')},/*!*************************************!*\ + !*** ./src/lib/ModelSettingJson.js ***! + \*************************************/ +function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = ModelSettingJson;\n\nvar _Live2DFramework = __webpack_require__(/*! ./Live2DFramework */ 0);\n\nfunction ModelSettingJson() {\n this.NAME = "name";\n this.ID = "id";\n this.MODEL = "model";\n this.TEXTURES = "textures";\n this.HIT_AREAS = "hit_areas";\n this.PHYSICS = "physics";\n this.POSE = "pose";\n this.EXPRESSIONS = "expressions";\n this.MOTION_GROUPS = "motions";\n this.SOUND = "sound";\n this.FADE_IN = "fade_in";\n this.FADE_OUT = "fade_out";\n this.LAYOUT = "layout";\n this.INIT_PARAM = "init_param";\n this.INIT_PARTS_VISIBLE = "init_parts_visible";\n this.VALUE = "val";\n this.FILE = "file";\n\n this.json = {};\n}\n\nModelSettingJson.prototype.loadModelSetting = function (path, callback) {\n var thisRef = this;\n var pm = _Live2DFramework.Live2DFramework.getPlatformManager();\n pm.loadBytes(path, function (buf) {\n var str = String.fromCharCode.apply(null, new Uint8Array(buf));\n thisRef.json = JSON.parse(str);\n callback();\n });\n};\n\nModelSettingJson.prototype.getTextureFile = function (n) {\n if (this.json[this.TEXTURES] == null || this.json[this.TEXTURES][n] == null) return null;\n\n return this.json[this.TEXTURES][n];\n};\n\nModelSettingJson.prototype.getModelFile = function () {\n return this.json[this.MODEL];\n};\n\nModelSettingJson.prototype.getTextureNum = function () {\n if (this.json[this.TEXTURES] == null) return 0;\n\n return this.json[this.TEXTURES].length;\n};\n\nModelSettingJson.prototype.getHitAreaNum = function () {\n if (this.json[this.HIT_AREAS] == null) return 0;\n\n return this.json[this.HIT_AREAS].length;\n};\n\nModelSettingJson.prototype.getHitAreaID = function (n) {\n if (this.json[this.HIT_AREAS] == null || this.json[this.HIT_AREAS][n] == null) return null;\n\n return this.json[this.HIT_AREAS][n][this.ID];\n};\n\nModelSettingJson.prototype.getHitAreaName = function (n) {\n if (this.json[this.HIT_AREAS] == null || this.json[this.HIT_AREAS][n] == null) return null;\n\n return this.json[this.HIT_AREAS][n][this.NAME];\n};\n\nModelSettingJson.prototype.getPhysicsFile = function () {\n return this.json[this.PHYSICS];\n};\n\nModelSettingJson.prototype.getPoseFile = function () {\n return this.json[this.POSE];\n};\n\nModelSettingJson.prototype.getExpressionNum = function () {\n return this.json[this.EXPRESSIONS] == null ? 0 : this.json[this.EXPRESSIONS].length;\n};\n\nModelSettingJson.prototype.getExpressionFile = function (n) {\n if (this.json[this.EXPRESSIONS] == null) return null;\n return this.json[this.EXPRESSIONS][n][this.FILE];\n};\n\nModelSettingJson.prototype.getExpressionName = function (n) {\n if (this.json[this.EXPRESSIONS] == null) return null;\n return this.json[this.EXPRESSIONS][n][this.NAME];\n};\n\nModelSettingJson.prototype.getLayout = function () {\n return this.json[this.LAYOUT];\n};\n\nModelSettingJson.prototype.getInitParamNum = function () {\n return this.json[this.INIT_PARAM] == null ? 0 : this.json[this.INIT_PARAM].length;\n};\n\nModelSettingJson.prototype.getMotionNum = function (name) {\n if (this.json[this.MOTION_GROUPS] == null || this.json[this.MOTION_GROUPS][name] == null) return 0;\n\n return this.json[this.MOTION_GROUPS][name].length;\n};\n\nModelSettingJson.prototype.getMotionFile = function (name, n) {\n if (this.json[this.MOTION_GROUPS] == null || this.json[this.MOTION_GROUPS][name] == null || this.json[this.MOTION_GROUPS][name][n] == null) return null;\n\n return this.json[this.MOTION_GROUPS][name][n][this.FILE];\n};\n\nModelSettingJson.prototype.getMotionSound = function (name, n) {\n if (this.json[this.MOTION_GROUPS] == null || this.json[this.MOTION_GROUPS][name] == null || this.json[this.MOTION_GROUPS][name][n] == null || this.json[this.MOTION_GROUPS][name][n][this.SOUND] == null) return null;\n\n return this.json[this.MOTION_GROUPS][name][n][this.SOUND];\n};\n\nModelSettingJson.prototype.getMotionFadeIn = function (name, n) {\n if (this.json[this.MOTION_GROUPS] == null || this.json[this.MOTION_GROUPS][name] == null || this.json[this.MOTION_GROUPS][name][n] == null || this.json[this.MOTION_GROUPS][name][n][this.FADE_IN] == null) return 1000;\n\n return this.json[this.MOTION_GROUPS][name][n][this.FADE_IN];\n};\n\nModelSettingJson.prototype.getMotionFadeOut = function (name, n) {\n if (this.json[this.MOTION_GROUPS] == null || this.json[this.MOTION_GROUPS][name] == null || this.json[this.MOTION_GROUPS][name][n] == null || this.json[this.MOTION_GROUPS][name][n][this.FADE_OUT] == null) return 1000;\n\n return this.json[this.MOTION_GROUPS][name][n][this.FADE_OUT];\n};\n\nModelSettingJson.prototype.getInitParamID = function (n) {\n if (this.json[this.INIT_PARAM] == null || this.json[this.INIT_PARAM][n] == null) return null;\n\n return this.json[this.INIT_PARAM][n][this.ID];\n};\n\nModelSettingJson.prototype.getInitParamValue = function (n) {\n if (this.json[this.INIT_PARAM] == null || this.json[this.INIT_PARAM][n] == null) return NaN;\n\n return this.json[this.INIT_PARAM][n][this.VALUE];\n};\n\nModelSettingJson.prototype.getInitPartsVisibleNum = function () {\n return this.json[this.INIT_PARTS_VISIBLE] == null ? 0 : this.json[this.INIT_PARTS_VISIBLE].length;\n};\n\nModelSettingJson.prototype.getInitPartsVisibleID = function (n) {\n if (this.json[this.INIT_PARTS_VISIBLE] == null || this.json[this.INIT_PARTS_VISIBLE][n] == null) return null;\n return this.json[this.INIT_PARTS_VISIBLE][n][this.ID];\n};\n\nModelSettingJson.prototype.getInitPartsVisibleValue = function (n) {\n if (this.json[this.INIT_PARTS_VISIBLE] == null || this.json[this.INIT_PARTS_VISIBLE][n] == null) return NaN;\n\n return this.json[this.INIT_PARTS_VISIBLE][n][this.VALUE];\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvbGliL01vZGVsU2V0dGluZ0pzb24uanM/NzdjYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpdmUyREZyYW1ld29ya30gZnJvbSBcIi4vTGl2ZTJERnJhbWV3b3JrXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWxTZXR0aW5nSnNvbigpXG57ICAgIFxuICAgIHRoaXMuTkFNRSA9IFwibmFtZVwiO1xuICAgIHRoaXMuSUQgPSBcImlkXCI7XG4gICAgdGhpcy5NT0RFTCA9IFwibW9kZWxcIjtcbiAgICB0aGlzLlRFWFRVUkVTID0gXCJ0ZXh0dXJlc1wiO1xuICAgIHRoaXMuSElUX0FSRUFTID0gXCJoaXRfYXJlYXNcIjtcbiAgICB0aGlzLlBIWVNJQ1MgPSBcInBoeXNpY3NcIjtcbiAgICB0aGlzLlBPU0UgPSBcInBvc2VcIjtcbiAgICB0aGlzLkVYUFJFU1NJT05TID0gXCJleHByZXNzaW9uc1wiO1xuICAgIHRoaXMuTU9USU9OX0dST1VQUyA9IFwibW90aW9uc1wiO1xuICAgIHRoaXMuU09VTkQgPSBcInNvdW5kXCI7XG4gICAgdGhpcy5GQURFX0lOID0gXCJmYWRlX2luXCI7XG4gICAgdGhpcy5GQURFX09VVCA9IFwiZmFkZV9vdXRcIjtcbiAgICB0aGlzLkxBWU9VVCA9IFwibGF5b3V0XCI7XG4gICAgdGhpcy5JTklUX1BBUkFNID0gXCJpbml0X3BhcmFtXCI7XG4gICAgdGhpcy5JTklUX1BBUlRTX1ZJU0lCTEUgPSBcImluaXRfcGFydHNfdmlzaWJsZVwiO1xuICAgIHRoaXMuVkFMVUUgPSBcInZhbFwiO1xuICAgIHRoaXMuRklMRSA9IFwiZmlsZVwiO1xuXG4gICAgdGhpcy5qc29uID0ge307XG59XG5cblxuTW9kZWxTZXR0aW5nSnNvbi5wcm90b3R5cGUubG9hZE1vZGVsU2V0dGluZyA9IGZ1bmN0aW9uKHBhdGgsIGNhbGxiYWNrKVxueyAgICBcbiAgICB2YXIgdGhpc1JlZiA9IHRoaXM7XG4gICAgdmFyIHBtID0gTGl2ZTJERnJhbWV3b3JrLmdldFBsYXRmb3JtTWFuYWdlcigpO1xuICAgIHBtLmxvYWRCeXRlcyhwYXRoLCBmdW5jdGlvbihidWYpIHtcbiAgICAgICAgdmFyIHN0ciA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheShidWYpKTtcbiAgICAgICAgdGhpc1JlZi5qc29uID0gSlNPTi5wYXJzZShzdHIpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xufTtcblxuXG5Nb2RlbFNldHRpbmdKc29uLnByb3RvdHlwZS5nZXRUZXh0dXJlRmlsZSA9IGZ1bmN0aW9uKG4pXG57ICAgIFxuICAgIGlmICh0aGlzLmpzb25bdGhpcy5URVhUVVJFU10gPT0gbnVsbCB8fCB0aGlzLmpzb25bdGhpcy5URVhUVVJFU11bbl0gPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgXG4gICAgcmV0dXJuIHRoaXMuanNvblt0aGlzLlRFWFRVUkVTXVtuXTtcbn1cblxuXG5Nb2RlbFNldHRpbmdKc29uLnByb3RvdHlwZS5nZXRNb2RlbEZpbGUgPSBmdW5jdGlvbigpXG57ICAgICAgICBcbiAgICByZXR1cm4gdGhpcy5qc29uW3RoaXMuTU9ERUxdO1xufTtcblxuXG5Nb2RlbFNldHRpbmdKc29uLnByb3RvdHlwZS5nZXRUZXh0dXJlTnVtID0gZnVuY3Rpb24oKVxueyAgICBcbiAgICBpZiAodGhpcy5qc29uW3RoaXMuVEVYVFVSRVNdID09IG51bGwpIHJldHVybiAwO1xuICAgIFxuICAgIHJldHVybiB0aGlzLmpzb25bdGhpcy5URVhUVVJFU10ubGVuZ3RoO1xufVxuXG5cbk1vZGVsU2V0dGluZ0pzb24ucHJvdG90eXBlLmdldEhpdEFyZWFOdW0gPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuanNvblt0aGlzLkhJVF9BUkVBU10gPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIDA7XG5cbiAgICByZXR1cm4gdGhpcy5qc29uW3RoaXMuSElUX0FSRUFTXS5sZW5ndGg7XG59XG5cblxuTW9kZWxTZXR0aW5nSnNvbi5wcm90b3R5cGUuZ2V0SGl0QXJlYUlEID0gZnVuY3Rpb24obilcbntcbiAgICBpZiAodGhpcy5qc29uW3RoaXMuSElUX0FSRUFTXSA9PSBudWxsIHx8IFxuICAgICAgICB0aGlzLmpzb25bdGhpcy5ISVRfQVJFQVNdW25dID09IG51bGwpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuanNvblt0aGlzLkhJVF9BUkVBU11bbl1bdGhpcy5JRF07XG59XG5cblxuTW9kZWxTZXR0aW5nSnNvbi5wcm90b3R5cGUuZ2V0SGl0QXJlYU5hbWUgPSBmdW5jdGlvbihuKVxue1xuICAgIGlmICh0aGlzLmpzb25bdGhpcy5ISVRfQVJFQVNdID09IG51bGwgfHwgXG4gICAgICAgIHRoaXMuanNvblt0aGlzLkhJVF9BUkVBU11bbl0gPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5qc29uW3RoaXMuSElUX0FSRUFTXVtuXVt0aGlzLk5BTUVdO1xufVxuXG5cbk1vZGVsU2V0dGluZ0pzb24ucHJvdG90eXBlLmdldFBoeXNpY3NGaWxlID0gZnVuY3Rpb24oKVxue1xuICAgIHJldHVybiB0aGlzLmpzb25bdGhpcy5QSFlTSUNTXTtcbn1cblxuXG5Nb2RlbFNldHRpbmdKc29uLnByb3RvdHlwZS5nZXRQb3NlRmlsZSA9IGZ1bmN0aW9uKClcbntcbiAgICByZXR1cm4gdGhpcy5qc29uW3RoaXMuUE9TRV07XG59XG5cblxuTW9kZWxTZXR0aW5nSnNvbi5wcm90b3R5cGUuZ2V0RXhwcmVzc2lvbk51bSA9IGZ1bmN0aW9uKClcbntcbiAgICByZXR1cm4gKHRoaXMuanNvblt0aGlzLkVYUFJFU1NJT05TXSA9PSBudWxsKSA/IDAgOiB0aGlzLmpzb25bdGhpcy5FWFBSRVNTSU9OU10ubGVuZ3RoO1xufVxuXG5cbk1vZGVsU2V0dGluZ0pzb24ucHJvdG90eXBlLmdldEV4cHJlc3Npb25GaWxlID0gZnVuY3Rpb24obilcbntcbiAgICBpZiAodGhpcy5qc29uW3RoaXMuRVhQUkVTU0lPTlNdID09IG51bGwpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmpzb25bdGhpcy5FWFBSRVNTSU9OU11bbl1bdGhpcy5GSUxFXTtcbn1cblxuXG5Nb2RlbFNldHRpbmdKc29uLnByb3RvdHlwZS5nZXRFeHByZXNzaW9uTmFtZSA9IGZ1bmN0aW9uKG4pXG57XG4gICAgaWYgKHRoaXMuanNvblt0aGlzLkVYUFJFU1NJT05TXSA9PSBudWxsKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5qc29uW3RoaXMuRVhQUkVTU0lPTlNdW25dW3RoaXMuTkFNRV07XG59XG5cblxuTW9kZWxTZXR0aW5nSnNvbi5wcm90b3R5cGUuZ2V0TGF5b3V0ID0gZnVuY3Rpb24oKVxue1xuICAgIHJldHVybiB0aGlzLmpzb25bdGhpcy5MQVlPVVRdO1xufVxuXG5cbk1vZGVsU2V0dGluZ0pzb24ucHJvdG90eXBlLmdldEluaXRQYXJhbU51bSA9IGZ1bmN0aW9uKClcbntcbiAgICByZXR1cm4gKHRoaXMuanNvblt0aGlzLklOSVRfUEFSQU1dID09IG51bGwpID8gMCA6IHRoaXMuanNvblt0aGlzLklOSVRfUEFSQU1dLmxlbmd0aDtcbn1cblxuXG5Nb2RlbFNldHRpbmdKc29uLnByb3RvdHlwZS5nZXRNb3Rpb25OdW0gPSBmdW5jdGlvbihuYW1lKVxue1xuICAgIGlmICh0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXSA9PSBudWxsIHx8IFxuICAgICAgICB0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXVtuYW1lXSA9PSBudWxsKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBcbiAgICByZXR1cm4gdGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU11bbmFtZV0ubGVuZ3RoO1xufVxuXG5cbk1vZGVsU2V0dGluZ0pzb24ucHJvdG90eXBlLmdldE1vdGlvbkZpbGUgPSBmdW5jdGlvbihuYW1lLCBuKVxue1xuICAgIGlmICh0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXSA9PSBudWxsIHx8IFxuICAgICAgICB0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXVtuYW1lXSA9PSBudWxsIHx8IFxuICAgICAgICB0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXVtuYW1lXVtuXSA9PSBudWxsKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXVtuYW1lXVtuXVt0aGlzLkZJTEVdO1xufVxuXG5cbk1vZGVsU2V0dGluZ0pzb24ucHJvdG90eXBlLmdldE1vdGlvblNvdW5kID0gZnVuY3Rpb24obmFtZSwgbilcbntcbiAgICBpZiAodGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU10gPT0gbnVsbCB8fCBcbiAgICAgICAgdGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU11bbmFtZV0gPT0gbnVsbCB8fCBcbiAgICAgICAgdGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU11bbmFtZV1bbl0gPT0gbnVsbCB8fCBcbiAgICAgICAgdGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU11bbmFtZV1bbl1bdGhpcy5TT1VORF0gPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU11bbmFtZV1bbl1bdGhpcy5TT1VORF07XG59XG5cblxuTW9kZWxTZXR0aW5nSnNvbi5wcm90b3R5cGUuZ2V0TW90aW9uRmFkZUluID0gZnVuY3Rpb24obmFtZSwgbilcbntcbiAgICBpZiAodGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU10gPT0gbnVsbCB8fCBcbiAgICAgICAgdGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU11bbmFtZV0gPT0gbnVsbCB8fCBcbiAgICAgICAgdGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU11bbmFtZV1bbl0gPT0gbnVsbCB8fCBcbiAgICAgICAgdGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU11bbmFtZV1bbl1bdGhpcy5GQURFX0lOXSA9PSBudWxsKVxuICAgICAgICByZXR1cm4gMTAwMDtcblxuICAgIHJldHVybiB0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXVtuYW1lXVtuXVt0aGlzLkZBREVfSU5dO1xufVxuXG5cbk1vZGVsU2V0dGluZ0pzb24ucHJvdG90eXBlLmdldE1vdGlvbkZhZGVPdXQgPSBmdW5jdGlvbihuYW1lLCBuKVxue1xuICAgIGlmICh0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXSA9PSBudWxsIHx8IFxuICAgICAgICB0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXVtuYW1lXSA9PSBudWxsIHx8IFxuICAgICAgICB0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXVtuYW1lXVtuXSA9PSBudWxsIHx8IFxuICAgICAgICB0aGlzLmpzb25bdGhpcy5NT1RJT05fR1JPVVBTXVtuYW1lXVtuXVt0aGlzLkZBREVfT1VUXSA9PSBudWxsKVxuICAgICAgICByZXR1cm4gMTAwMDtcbiAgICBcbiAgICByZXR1cm4gdGhpcy5qc29uW3RoaXMuTU9USU9OX0dST1VQU11bbmFtZV1bbl1bdGhpcy5GQURFX09VVF07XG59XG5cblxuTW9kZWxTZXR0aW5nSnNvbi5wcm90b3R5cGUuZ2V0SW5pdFBhcmFtSUQgPSBmdW5jdGlvbihuKVxue1xuICAgIGlmICh0aGlzLmpzb25bdGhpcy5JTklUX1BBUkFNXSA9PSBudWxsIHx8IFxuICAgICAgICB0aGlzLmpzb25bdGhpcy5JTklUX1BBUkFNXVtuXSA9PSBudWxsKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBcbiAgICByZXR1cm4gdGhpcy5qc29uW3RoaXMuSU5JVF9QQVJBTV1bbl1bdGhpcy5JRF07XG59XG5cblxuTW9kZWxTZXR0aW5nSnNvbi5wcm90b3R5cGUuZ2V0SW5pdFBhcmFtVmFsdWUgPSBmdW5jdGlvbihuKVxue1xuICAgIGlmICh0aGlzLmpzb25bdGhpcy5JTklUX1BBUkFNXSA9PSBudWxsIHx8IHRoaXMuanNvblt0aGlzLklOSVRfUEFSQU1dW25dID09IG51bGwpXG4gICAgICAgIHJldHVybiBOYU47XG4gICAgXG4gICAgcmV0dXJuIHRoaXMuanNvblt0aGlzLklOSVRfUEFSQU1dW25dW3RoaXMuVkFMVUVdO1xufVxuXG5cbk1vZGVsU2V0dGluZ0pzb24ucHJvdG90eXBlLmdldEluaXRQYXJ0c1Zpc2libGVOdW0gPSBmdW5jdGlvbigpXG57XG4gICAgcmV0dXJuICh0aGlzLmpzb25bdGhpcy5JTklUX1BBUlRTX1ZJU0lCTEVdID09IG51bGwpID8gMCA6IHRoaXMuanNvblt0aGlzLklOSVRfUEFSVFNfVklTSUJMRV0ubGVuZ3RoO1xufVxuXG5cbk1vZGVsU2V0dGluZ0pzb24ucHJvdG90eXBlLmdldEluaXRQYXJ0c1Zpc2libGVJRCA9IGZ1bmN0aW9uKG4pXG57XG4gICAgaWYgKHRoaXMuanNvblt0aGlzLklOSVRfUEFSVFNfVklTSUJMRV0gPT0gbnVsbCB8fCB0aGlzLmpzb25bdGhpcy5JTklUX1BBUlRTX1ZJU0lCTEVdW25dID09IG51bGwpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmpzb25bdGhpcy5JTklUX1BBUlRTX1ZJU0lCTEVdW25dW3RoaXMuSURdO1xufVxuXG5cbk1vZGVsU2V0dGluZ0pzb24ucHJvdG90eXBlLmdldEluaXRQYXJ0c1Zpc2libGVWYWx1ZSA9IGZ1bmN0aW9uKG4pXG57XG4gICAgaWYgKHRoaXMuanNvblt0aGlzLklOSVRfUEFSVFNfVklTSUJMRV0gPT0gbnVsbCB8fCB0aGlzLmpzb25bdGhpcy5JTklUX1BBUlRTX1ZJU0lCTEVdW25dID09IG51bGwpXG4gICAgICAgIHJldHVybiBOYU47XG4gICAgXG4gICAgcmV0dXJuIHRoaXMuanNvblt0aGlzLklOSVRfUEFSVFNfVklTSUJMRV1bbl1bdGhpcy5WQUxVRV07XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9saWIvTW9kZWxTZXR0aW5nSnNvbi5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQTtBQUNBO0FBSEE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n')},/*!*******************************!*\ + !*** ./src/lib/live2d.min.js ***! + \*******************************/ +function(module,exports,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(System) {\n\n(function () {\n var j = true;function aa() {\n if (j) {\n return;\n }this._$MT = null;this._$5S = null;this._$NP = 0;aa._$42++;this._$5S = new y(this);\n }aa._$0s = 1;aa._$4s = 2;aa._$42 = 0;aa._$62 = function (aQ, aU) {\n try {\n if (aU instanceof ArrayBuffer) {\n aU = new DataView(aU);\n }if (!(aU instanceof DataView)) {\n throw new J("_$SS#loadModel(b) / b _$x be DataView or ArrayBuffer");\n }var aS = new K(aU);var aM = aS._$ST();var aK = aS._$ST();var aJ = aS._$ST();var aN;if (aM == 109 && aK == 111 && aJ == 99) {\n aN = aS._$ST();\n } else {\n throw new J("_$gi _$C _$li , _$Q0 _$P0.");\n }aS._$gr(aN);if (aN > ay._$T7) {\n aQ._$NP |= aa._$4s;var aR = ay._$T7;var aI = "_$gi _$C _$li , _$n0 _$_ version _$li ( SDK : " + aR + " < _$f0 : " + aN + " )@_$SS#loadModel()\\n";throw new J(aI);\n }var aL = aS._$nP();if (aN >= ay._$s7) {\n var aH = aS._$9T();var aT = aS._$9T();if (aH != -30584 || aT != -30584) {\n aQ._$NP |= aa._$0s;throw new J("_$gi _$C _$li , _$0 _$6 _$Ui.");\n }\n }aQ._$KS(aL);var aP = aQ.getModelContext();aP.setDrawParam(aQ.getDrawParam());aP.init();\n } catch (aO) {\n q._$Rb(aO);\n }\n };aa.prototype._$KS = function (aH) {\n this._$MT = aH;\n };aa.prototype.getModelImpl = function () {\n if (this._$MT == null) {\n this._$MT = new w();this._$MT._$zP();\n }return this._$MT;\n };aa.prototype.getCanvasWidth = function () {\n if (this._$MT == null) {\n return 0;\n }return this._$MT.getCanvasWidth();\n };aa.prototype.getCanvasHeight = function () {\n if (this._$MT == null) {\n return 0;\n }return this._$MT.getCanvasHeight();\n };aa.prototype.getParamFloat = function (aH) {\n if (typeof aH != "number") {\n aH = this._$5S.getParamIndex(z.getID(aH));\n }return this._$5S.getParamFloat(aH);\n };aa.prototype.setParamFloat = function (aH, aJ, aI) {\n if (typeof aH != "number") {\n aH = this._$5S.getParamIndex(z.getID(aH));\n }if (arguments.length < 3) {\n aI = 1;\n }this._$5S.setParamFloat(aH, this._$5S.getParamFloat(aH) * (1 - aI) + aJ * aI);\n };aa.prototype.addToParamFloat = function (aH, aJ, aI) {\n if (typeof aH != "number") {\n aH = this._$5S.getParamIndex(z.getID(aH));\n }if (arguments.length < 3) {\n aI = 1;\n }this._$5S.setParamFloat(aH, this._$5S.getParamFloat(aH) + aJ * aI);\n };aa.prototype.multParamFloat = function (aH, aJ, aI) {\n if (typeof aH != "number") {\n aH = this._$5S.getParamIndex(z.getID(aH));\n }if (arguments.length < 3) {\n aI = 1;\n }this._$5S.setParamFloat(aH, this._$5S.getParamFloat(aH) * (1 + (aJ - 1) * aI));\n };aa.prototype.getParamIndex = function (aH) {\n return this._$5S.getParamIndex(z.getID(aH));\n };aa.prototype.loadParam = function () {\n this._$5S.loadParam();\n };aa.prototype.saveParam = function () {\n this._$5S.saveParam();\n };aa.prototype.init = function () {\n this._$5S.init();\n };aa.prototype.update = function () {\n this._$5S.update();\n };aa.prototype._$Rs = function () {\n q._$li("_$60 _$PT _$Rs()");return -1;\n };aa.prototype._$Ds = function (aH) {\n q._$li("_$60 _$PT _$SS#_$Ds() \\n");\n };aa.prototype._$K2 = function () {};aa.prototype.draw = function () {};aa.prototype.getModelContext = function () {\n return this._$5S;\n };aa.prototype._$s2 = function () {\n return this._$NP;\n };aa.prototype._$P7 = function (aK, aR, aH, a0) {\n var aU = -1;var aY = 0;var aM = this;var aJ = 0.5;var aI = 0.15;var aX = true;if (aH == 0) {\n for (var aV = 0; aV < aK.length; aV++) {\n var aP = aK[aV];var aO = aR[aV];var aS = aM.getParamFloat(aP) != 0;aM.setPartsOpacity(aO, aS ? 1 : 0);\n }return;\n } else {\n if (aK.length == 1) {\n var aP = aK[0];var aT = aM.getParamFloat(aP) != 0;var aO = aR[0];var aQ = aM.getPartsOpacity(aO);var aW = aH / a0;if (aT) {\n aQ += aW;if (aQ > 1) {\n aQ = 1;\n }\n } else {\n aQ -= aW;if (aQ < 0) {\n aQ = 0;\n }\n }aM.setPartsOpacity(aO, aQ);\n } else {\n for (var aV = 0; aV < aK.length; aV++) {\n var aP = aK[aV];var aS = aM.getParamFloat(aP) != 0;if (aS) {\n if (aU >= 0) {\n break;\n }aU = aV;var aO = aR[aV];aY = aM.getPartsOpacity(aO);aY += aH / a0;if (aY > 1) {\n aY = 1;\n }\n }\n }if (aU < 0) {\n console.log("No _$wi _$q0/ _$U default[%s]", aK[0]);aU = 0;aY = 1;aM.loadParam();aM.setParamFloat(aK[aU], aY);aM.saveParam();\n }for (var aV = 0; aV < aK.length; aV++) {\n var aO = aR[aV];if (aU == aV) {\n aM.setPartsOpacity(aO, aY);\n } else {\n var aL = aM.getPartsOpacity(aO);var aZ;if (aY < aJ) {\n aZ = aY * (aJ - 1) / aJ + 1;\n } else {\n aZ = (1 - aY) * aJ / (1 - aJ);\n }if (aX) {\n var aN = (1 - aZ) * (1 - aY);if (aN > aI) {\n aZ = 1 - aI / (1 - aY);\n }\n }if (aL > aZ) {\n aL = aZ;\n }aM.setPartsOpacity(aO, aL);\n }\n }\n }\n }\n };aa.prototype.setPartsOpacity = function (aI, aH) {\n if (typeof aI != "number") {\n aI = this._$5S.getPartsDataIndex(i.getID(aI));\n }this._$5S.setPartsOpacity(aI, aH);\n };aa.prototype.getPartsDataIndex = function (aH) {\n if (!(aH instanceof i)) {\n aH = i.getID(aH);\n }return this._$5S.getPartsDataIndex(aH);\n };aa.prototype.getPartsOpacity = function (aH) {\n if (typeof aH != "number") {\n aH = this._$5S.getPartsDataIndex(i.getID(aH));\n }if (aH < 0) {\n return 0;\n }return this._$5S.getPartsOpacity(aH);\n };aa.prototype.getDrawParam = function () {};aa.prototype.getDrawDataIndex = function (aH) {\n return this._$5S.getDrawDataIndex(Z.getID(aH));\n };aa.prototype.getDrawData = function (aH) {\n return this._$5S.getDrawData(aH);\n };aa.prototype.getTransformedPoints = function (aH) {\n var aI = this._$5S._$C2(aH);if (aI instanceof ag) {\n return aI.getTransformedPoints();\n }return null;\n };aa.prototype.getIndexArray = function (aI) {\n if (aI < 0 || aI >= this._$5S._$aS.length) {\n return null;\n }var aH = this._$5S._$aS[aI];if (aH != null && aH.getType() == a._$wb) {\n if (aH instanceof b) {\n return aH.getIndexArray();\n }\n }return null;\n };function W(aJ) {\n if (j) {\n return;\n }this.clipContextList = new Array();this.glcontext = aJ.gl;this.dp_webgl = aJ;this.curFrameNo = 0;this.firstError_clipInNotUpdate = true;this.colorBuffer = 0;this.isInitGLFBFunc = false;this.tmpBoundsOnModel = new av();if (Q.glContext.length > Q.frameBuffers.length) {\n this.curFrameNo = this.getMaskRenderTexture();\n } else {}this.tmpModelToViewMatrix = new ac();this.tmpMatrix2 = new ac();this.tmpMatrixForMask = new ac();this.tmpMatrixForDraw = new ac();this.CHANNEL_COLORS = new Array();var aI = new o();aI = new o();aI.r = 0;aI.g = 0;aI.b = 0;aI.a = 1;this.CHANNEL_COLORS.push(aI);aI = new o();aI.r = 1;aI.g = 0;aI.b = 0;aI.a = 0;this.CHANNEL_COLORS.push(aI);aI = new o();aI.r = 0;aI.g = 1;aI.b = 0;aI.a = 0;this.CHANNEL_COLORS.push(aI);aI = new o();aI.r = 0;aI.g = 0;aI.b = 1;aI.a = 0;this.CHANNEL_COLORS.push(aI);for (var aH = 0; aH < this.CHANNEL_COLORS.length; aH++) {\n this.dp_webgl.setChannelFlagAsColor(aH, this.CHANNEL_COLORS[aH]);\n }\n }W.CHANNEL_COUNT = 4;W.RENDER_TEXTURE_USE_MIPMAP = false;W.NOT_USED_FRAME = -100;W.prototype._$L7 = function () {\n if (this.tmpModelToViewMatrix) {\n this.tmpModelToViewMatrix = null;\n }if (this.tmpMatrix2) {\n this.tmpMatrix2 = null;\n }if (this.tmpMatrixForMask) {\n this.tmpMatrixForMask = null;\n }if (this.tmpMatrixForDraw) {\n this.tmpMatrixForDraw = null;\n }if (this.tmpBoundsOnModel) {\n this.tmpBoundsOnModel = null;\n }if (this.CHANNEL_COLORS) {\n for (var aH = this.CHANNEL_COLORS.length - 1; aH >= 0; --aH) {\n this.CHANNEL_COLORS.splice(aH, 1);\n }this.CHANNEL_COLORS = [];\n }this.releaseShader();\n };W.prototype.releaseShader = function () {\n var aI = Q.frameBuffers.length;for (var aH = 0; aH < aI; aH++) {\n this.gl.deleteFramebuffer(Q.frameBuffers[aH].framebuffer);\n }Q.frameBuffers = [];Q.glContext = [];\n };W.prototype.init = function (aO, aN, aL) {\n for (var aM = 0; aM < aN.length; aM++) {\n var aH = aN[aM].getClipIDList();if (aH == null) {\n continue;\n }var aJ = this.findSameClip(aH);if (aJ == null) {\n aJ = new U(this, aO, aH);this.clipContextList.push(aJ);\n }var aI = aN[aM].getDrawDataID();var aK = aO.getDrawDataIndex(aI);aJ.addClippedDrawData(aI, aK);var aP = aL[aM];aP.clipBufPre_clipContext = aJ;\n }\n };W.prototype.getMaskRenderTexture = function () {\n var aH = null;aH = this.dp_webgl.createFramebuffer();Q.frameBuffers[this.dp_webgl.glno] = aH;return this.dp_webgl.glno;\n };W.prototype.setupClip = function (a1, aQ) {\n var aK = 0;for (var aO = 0; aO < this.clipContextList.length; aO++) {\n var aP = this.clipContextList[aO];this.calcClippedDrawTotalBounds(a1, aP);if (aP.isUsing) {\n aK++;\n }\n }if (aK > 0) {\n var aM = aQ.gl.getParameter(aQ.gl.FRAMEBUFFER_BINDING);var aW = new Array(4);aW[0] = 0;aW[1] = 0;aW[2] = aQ.gl.canvas.width;aW[3] = aQ.gl.canvas.height;aQ.gl.viewport(0, 0, Q.clippingMaskBufferSize, Q.clippingMaskBufferSize);this.setupLayoutBounds(aK);aQ.gl.bindFramebuffer(aQ.gl.FRAMEBUFFER, Q.frameBuffers[this.curFrameNo].framebuffer);aQ.gl.clearColor(0, 0, 0, 0);aQ.gl.clear(aQ.gl.COLOR_BUFFER_BIT);for (var aO = 0; aO < this.clipContextList.length; aO++) {\n var aP = this.clipContextList[aO];var aT = aP.allClippedDrawRect;var aN = aP.layoutChannelNo;var aV = aP.layoutBounds;var aJ = 0.05;this.tmpBoundsOnModel._$jL(aT);this.tmpBoundsOnModel.expand(aT.width * aJ, aT.height * aJ);var aZ = aV.width / this.tmpBoundsOnModel.width;var aY = aV.height / this.tmpBoundsOnModel.height;this.tmpMatrix2.identity();this.tmpMatrix2.translate(-1, -1, 0);this.tmpMatrix2.scale(2, 2, 1);this.tmpMatrix2.translate(aV.x, aV.y, 0);this.tmpMatrix2.scale(aZ, aY, 1);this.tmpMatrix2.translate(-this.tmpBoundsOnModel.x, -this.tmpBoundsOnModel.y, 0);this.tmpMatrixForMask.setMatrix(this.tmpMatrix2.m);this.tmpMatrix2.identity();this.tmpMatrix2.translate(aV.x, aV.y, 0);this.tmpMatrix2.scale(aZ, aY, 1);this.tmpMatrix2.translate(-this.tmpBoundsOnModel.x, -this.tmpBoundsOnModel.y, 0);this.tmpMatrixForDraw.setMatrix(this.tmpMatrix2.m);var aH = this.tmpMatrixForMask.getArray();for (var aX = 0; aX < 16; aX++) {\n aP.matrixForMask[aX] = aH[aX];\n }var a0 = this.tmpMatrixForDraw.getArray();for (var aX = 0; aX < 16; aX++) {\n aP.matrixForDraw[aX] = a0[aX];\n }var aS = aP.clippingMaskDrawIndexList.length;for (var aU = 0; aU < aS; aU++) {\n var aR = aP.clippingMaskDrawIndexList[aU];var aI = a1.getDrawData(aR);var aL = a1._$C2(aR);aQ.setClipBufPre_clipContextForMask(aP);aI.draw(aQ, a1, aL);\n }\n }aQ.gl.bindFramebuffer(aQ.gl.FRAMEBUFFER, aM);aQ.setClipBufPre_clipContextForMask(null);aQ.gl.viewport(aW[0], aW[1], aW[2], aW[3]);\n }\n };W.prototype.getColorBuffer = function () {\n return this.colorBuffer;\n };W.prototype.findSameClip = function (aK) {\n for (var aN = 0; aN < this.clipContextList.length; aN++) {\n var aO = this.clipContextList[aN];var aH = aO.clipIDList.length;if (aH != aK.length) {\n continue;\n }var aI = 0;for (var aM = 0; aM < aH; aM++) {\n var aL = aO.clipIDList[aM];for (var aJ = 0; aJ < aH; aJ++) {\n if (aK[aJ] == aL) {\n aI++;break;\n }\n }\n }if (aI == aH) {\n return aO;\n }\n }return null;\n };W.prototype.calcClippedDrawTotalBounds = function (a6, aV) {\n var aU = a6._$Ri.getModelImpl().getCanvasWidth();var a5 = a6._$Ri.getModelImpl().getCanvasHeight();var aJ = aU > a5 ? aU : a5;var aT = aJ;var aR = aJ;var aS = 0;var aP = 0;var aL = aV.clippedDrawContextList.length;for (var aM = 0; aM < aL; aM++) {\n var aW = aV.clippedDrawContextList[aM];var aN = aW.drawDataIndex;var aK = a6._$C2(aN);if (aK._$yo()) {\n var aX = aK.getTransformedPoints();var a4 = aX.length;var aI = [];var aH = [];var aO = 0;for (var a3 = aw._$i2; a3 < a4; a3 += aw._$No) {\n aI[aO] = aX[a3];aH[aO] = aX[a3 + 1];aO++;\n }var a2 = Math.min.apply(null, aI);var a1 = Math.min.apply(null, aH);var a0 = Math.max.apply(null, aI);var aZ = Math.max.apply(null, aH);if (a2 < aT) {\n aT = a2;\n }if (a1 < aR) {\n aR = a1;\n }if (a0 > aS) {\n aS = a0;\n }if (aZ > aP) {\n aP = aZ;\n }\n }\n }if (aT == aJ) {\n aV.allClippedDrawRect.x = 0;aV.allClippedDrawRect.y = 0;aV.allClippedDrawRect.width = 0;aV.allClippedDrawRect.height = 0;aV.isUsing = false;\n } else {\n var aQ = aS - aT;var aY = aP - aR;aV.allClippedDrawRect.x = aT;aV.allClippedDrawRect.y = aR;aV.allClippedDrawRect.width = aQ;aV.allClippedDrawRect.height = aY;aV.isUsing = true;\n }\n };W.prototype.setupLayoutBounds = function (aQ) {\n var aI = aQ / W.CHANNEL_COUNT;var aP = aQ % W.CHANNEL_COUNT;aI = ~~aI;aP = ~~aP;var aH = 0;for (var aJ = 0; aJ < W.CHANNEL_COUNT; aJ++) {\n var aM = aI + (aJ < aP ? 1 : 0);if (aM == 0) {} else {\n if (aM == 1) {\n var aL = this.clipContextList[aH++];aL.layoutChannelNo = aJ;aL.layoutBounds.x = 0;aL.layoutBounds.y = 0;aL.layoutBounds.width = 1;aL.layoutBounds.height = 1;\n } else {\n if (aM == 2) {\n for (var aO = 0; aO < aM; aO++) {\n var aN = aO % 2;var aK = 0;aN = ~~aN;var aL = this.clipContextList[aH++];aL.layoutChannelNo = aJ;aL.layoutBounds.x = aN * 0.5;aL.layoutBounds.y = 0;aL.layoutBounds.width = 0.5;aL.layoutBounds.height = 1;\n }\n } else {\n if (aM <= 4) {\n for (var aO = 0; aO < aM; aO++) {\n var aN = aO % 2;var aK = aO / 2;aN = ~~aN;aK = ~~aK;var aL = this.clipContextList[aH++];aL.layoutChannelNo = aJ;aL.layoutBounds.x = aN * 0.5;aL.layoutBounds.y = aK * 0.5;aL.layoutBounds.width = 0.5;aL.layoutBounds.height = 0.5;\n }\n } else {\n if (aM <= 9) {\n for (var aO = 0; aO < aM; aO++) {\n var aN = aO % 3;var aK = aO / 3;aN = ~~aN;aK = ~~aK;var aL = this.clipContextList[aH++];aL.layoutChannelNo = aJ;aL.layoutBounds.x = aN / 3;aL.layoutBounds.y = aK / 3;aL.layoutBounds.width = 1 / 3;aL.layoutBounds.height = 1 / 3;\n }\n } else {\n q._$li("_$6 _$0P mask count : %d", aM);\n }\n }\n }\n }\n }\n }\n };function U(aH, aK, aI) {\n this.clipIDList = new Array();this.clipIDList = aI;this.clippingMaskDrawIndexList = new Array();for (var aJ = 0; aJ < aI.length; aJ++) {\n this.clippingMaskDrawIndexList.push(aK.getDrawDataIndex(aI[aJ]));\n }this.clippedDrawContextList = new Array();this.isUsing = true;this.layoutChannelNo = 0;this.layoutBounds = new av();this.allClippedDrawRect = new av();this.matrixForMask = new Float32Array(16);this.matrixForDraw = new Float32Array(16);this.owner = aH;\n }U.prototype.addClippedDrawData = function (aJ, aI) {\n var aH = new R(aJ, aI);this.clippedDrawContextList.push(aH);\n };function R(aI, aH) {\n this._$gP = aI;this.drawDataIndex = aH;\n }function I() {\n if (j) {\n return;\n }this.color = null;\n }function ah() {\n if (j) {\n return;\n }this._$dP = null;this._$eo = null;this._$V0 = null;this._$dP = 1000;this._$eo = 1000;this._$V0 = 1;this._$a0();\n }ah._$JT = function (aP, aN, aO) {\n var aQ = aP / aN;var a1 = aO / aN;var aU = a1;var aZ = 1 / 3;var aR = 2 / 3;var a0 = 1 - (1 - a1) * (1 - a1);var a2 = 1 - (1 - aU) * (1 - aU);var aM = 0;var aL = (1 - a1) * aZ * a0 + (aU * aR + (1 - aU) * aZ) * (1 - a0);var aK = (aU + (1 - aU) * aR) * a2 + (a1 * aZ + (1 - a1) * aR) * (1 - a2);var aJ = 1;var aY = aJ - 3 * aK + 3 * aL - aM;var aX = 3 * aK - 6 * aL + 3 * aM;var aW = 3 * aL - 3 * aM;var aV = aM;if (aQ <= 0) {\n return 0;\n } else {\n if (aQ >= 1) {\n return 1;\n }\n }var aS = aQ;var aI = aS * aS;var aH = aS * aI;var aT = aY * aH + aX * aI + aW * aS + aV;return aT;\n };ah.prototype._$a0 = function () {};ah.prototype.setFadeIn = function (aH) {\n this._$dP = aH;\n };ah.prototype.setFadeOut = function (aH) {\n this._$eo = aH;\n };ah.prototype._$pT = function (aH) {\n this._$V0 = aH;\n };ah.prototype.getFadeOut = function () {\n return this._$eo;\n };ah.prototype._$4T = function () {\n return this._$eo;\n };ah.prototype._$mT = function () {\n return this._$V0;\n };ah.prototype.getDurationMSec = function () {\n return -1;\n };ah.prototype.getLoopDurationMSec = function () {\n return -1;\n };ah.prototype.updateParam = function (aJ, aN) {\n if (!aN._$AT || aN._$9L) {\n return;\n }var aL = P.getUserTimeMSec();if (aN._$z2 < 0) {\n aN._$z2 = aL;aN._$bs = aL;var aM = this.getDurationMSec();if (aN._$Do < 0) {\n aN._$Do = aM <= 0 ? -1 : aN._$z2 + aM;\n }\n }var aI = this._$V0;var aH = this._$dP == 0 ? 1 : A._$r2((aL - aN._$bs) / this._$dP);var aK = this._$eo == 0 || aN._$Do < 0 ? 1 : A._$r2((aN._$Do - aL) / this._$eo);aI = aI * aH * aK;if (!(0 <= aI && aI <= 1)) {\n console.log("### assert!! ### ");\n }this.updateParamExe(aJ, aL, aI, aN);if (aN._$Do > 0 && aN._$Do < aL) {\n aN._$9L = true;\n }\n };ah.prototype.updateParamExe = function (aH, aI, aJ, aK) {};function q() {}q._$8s = 0;q._$fT = new Object();q.start = function (aI) {\n var aH = q._$fT[aI];if (aH == null) {\n aH = new af();aH._$r = aI;q._$fT[aI] = aH;\n }aH._$0S = P.getSystemTimeMSec();\n };q.dump = function (aJ) {\n var aH = q._$fT[aJ];if (aH != null) {\n var aI = P.getSystemTimeMSec();var aK = aI - aH._$0S;console.log(aJ + " : " + aK + "ms");return aK;\n } else {\n return -1;\n }\n };q.end = function (aJ) {\n var aH = q._$fT[aJ];if (aH != null) {\n var aI = P.getSystemTimeMSec();return aI - aH._$0S;\n } else {\n return -1;\n }\n };q._$li = function (aI, aH) {\n console.log("_$li : " + aI + "\\n", aH);\n };q._$Ji = function (aI, aH) {\n console.log(aI, aH);\n };q._$dL = function (aI, aH) {\n console.log(aI, aH);console.log("\\n");\n };q._$KL = function (aJ, aI) {\n for (var aH = 0; aH < aI; aH++) {\n if (aH % 16 == 0 && aH > 0) {\n console.log("\\n");\n } else {\n if (aH % 8 == 0 && aH > 0) {\n console.log(" ");\n }\n }console.log("%02X ", aJ[aH] & 255);\n }console.log("\\n");\n };q._$nr = function (aL, aI, aK) {\n console.log("%s\\n", aL);var aH = aI.length;for (var aJ = 0; aJ < aH; ++aJ) {\n console.log("%5d", aI[aJ]);console.log("%s\\n", aK);console.log(",");\n }console.log("\\n");\n };q._$Rb = function (aH) {\n console.log("dump exception : " + aH);console.log("stack :: " + aH.stack);\n };function af() {\n this._$r = null;this._$0S = null;\n }function F() {\n if (j) {\n return;\n }this.x = null;this.y = null;this.width = null;this.height = null;\n }F.prototype._$8P = function () {\n return 0.5 * (this.x + this.x + this.width);\n };F.prototype._$6P = function () {\n return 0.5 * (this.y + this.y + this.height);\n };F.prototype._$EL = function () {\n return this.x + this.width;\n };F.prototype._$5T = function () {\n return this.y + this.height;\n };F.prototype._$jL = function (aI, aK, aJ, aH) {\n this.x = aI;this.y = aK;this.width = aJ;this.height = aH;\n };F.prototype._$jL = function (aH) {\n this.x = aH.x;this.y = aH.y;this.width = aH.width;this.height = aH.height;\n };function i(aH) {\n if (j) {\n return;\n }ak.prototype.constructor.call(this, aH);\n }i.prototype = new ak();i._$tP = new Object();i._$27 = function () {\n i._$tP.clear();\n };i.getID = function (aH) {\n var aI = i._$tP[aH];if (aI == null) {\n aI = new i(aH);i._$tP[aH] = aI;\n }return aI;\n };i.prototype._$3s = function () {\n return new i();\n };function S() {}function z(aH) {\n if (j) {\n return;\n }ak.prototype.constructor.call(this, aH);\n }z.prototype = new ak();z._$tP = new Object();z._$27 = function () {\n z._$tP.clear();\n };z.getID = function (aH) {\n var aI = z._$tP[aH];if (aI == null) {\n aI = new z(aH);z._$tP[aH] = aI;\n }return aI;\n };z.prototype._$3s = function () {\n return new z();\n };function w() {\n if (j) {\n return;\n }this._$vo = null;this._$F2 = null;this._$ao = 400;this._$1S = 400;w._$42++;\n }w._$42 = 0;w.prototype._$zP = function () {\n if (this._$vo == null) {\n this._$vo = new an();\n }if (this._$F2 == null) {\n this._$F2 = new Array();\n }\n };w.prototype.getCanvasWidth = function () {\n return this._$ao;\n };w.prototype.getCanvasHeight = function () {\n return this._$1S;\n };w.prototype._$F0 = function (aH) {\n this._$vo = aH._$nP();this._$F2 = aH._$nP();this._$ao = aH._$6L();this._$1S = aH._$6L();\n };w.prototype._$6S = function (aH) {\n this._$F2.push(aH);\n };w.prototype._$Xr = function () {\n return this._$F2;\n };w.prototype._$E2 = function () {\n return this._$vo;\n };function u() {\n if (j) {\n return;\n }this.p1 = new N();this.p2 = new N();this._$Fo = 0;this._$Db = 0;this._$L2 = 0;this._$M2 = 0;this._$ks = 0;this._$9b = 0;this._$iP = 0;this._$iT = 0;this._$lL = new Array();this._$qP = new Array();this.setup(0.3, 0.5, 0.1);\n }u.prototype.setup = function (aJ, aI, aH) {\n this._$ks = this._$Yb();this.p2._$xT();if (arguments.length == 3) {\n this._$Fo = aJ;this._$L2 = aI;this.p1._$p = aH;this.p2._$p = aH;this.p2.y = aJ;this.setup();\n }\n };u.prototype.getPhysicsPoint1 = function () {\n return this.p1;\n };u.prototype.getPhysicsPoint2 = function () {\n return this.p2;\n };u.prototype._$qr = function () {\n return this._$Db;\n };u.prototype._$pr = function (aH) {\n this._$Db = aH;\n };u.prototype._$5r = function () {\n return this._$M2;\n };u.prototype._$Cs = function () {\n return this._$9b;\n };u.prototype._$Yb = function () {\n return -180 * Math.atan2(this.p1.x - this.p2.x, -(this.p1.y - this.p2.y)) / Math.PI;\n };u.prototype.addSrcParam = function (aJ, aH, aL, aI) {\n var aK = new h(aJ, aH, aL, aI);this._$lL.push(aK);\n };u.prototype.addTargetParam = function (aJ, aH, aK, aI) {\n var aL = new aF(aJ, aH, aK, aI);this._$qP.push(aL);\n };u.prototype.update = function (aI, aL) {\n if (this._$iP == 0) {\n this._$iP = this._$iT = aL;this._$Fo = Math.sqrt((this.p1.x - this.p2.x) * (this.p1.x - this.p2.x) + (this.p1.y - this.p2.y) * (this.p1.y - this.p2.y));return;\n }var aK = (aL - this._$iT) / 1000;if (aK != 0) {\n for (var aJ = this._$lL.length - 1; aJ >= 0; --aJ) {\n var aM = this._$lL[aJ];aM._$oP(aI, this);\n }this._$oo(aI, aK);this._$M2 = this._$Yb();this._$9b = (this._$M2 - this._$ks) / aK;this._$ks = this._$M2;\n }for (var aJ = this._$qP.length - 1; aJ >= 0; --aJ) {\n var aH = this._$qP[aJ];aH._$YS(aI, this);\n }this._$iT = aL;\n };u.prototype._$oo = function (aN, aI) {\n if (aI < 0.033) {\n aI = 0.033;\n }var aU = 1 / aI;this.p1.vx = (this.p1.x - this.p1._$s0) * aU;this.p1.vy = (this.p1.y - this.p1._$70) * aU;this.p1.ax = (this.p1.vx - this.p1._$7L) * aU;this.p1.ay = (this.p1.vy - this.p1._$HL) * aU;this.p1.fx = this.p1.ax * this.p1._$p;this.p1.fy = this.p1.ay * this.p1._$p;this.p1._$xT();var aM = -Math.atan2(this.p1.y - this.p2.y, this.p1.x - this.p2.x);var aL;var aV;var aR = Math.cos(aM);var aH = Math.sin(aM);var aW = 9.8 * this.p2._$p;var aQ = this._$Db * aC._$bS;var aP = aW * Math.cos(aM - aQ);aL = aP * aH;aV = aP * aR;var aK = -this.p1.fx * aH * aH;var aT = -this.p1.fy * aH * aR;var aJ = -this.p2.vx * this._$L2;var aS = -this.p2.vy * this._$L2;this.p2.fx = aL + aK + aJ;this.p2.fy = aV + aT + aS;this.p2.ax = this.p2.fx / this.p2._$p;this.p2.ay = this.p2.fy / this.p2._$p;this.p2.vx += this.p2.ax * aI;this.p2.vy += this.p2.ay * aI;this.p2.x += this.p2.vx * aI;this.p2.y += this.p2.vy * aI;var aO = Math.sqrt((this.p1.x - this.p2.x) * (this.p1.x - this.p2.x) + (this.p1.y - this.p2.y) * (this.p1.y - this.p2.y));this.p2.x = this.p1.x + this._$Fo * (this.p2.x - this.p1.x) / aO;this.p2.y = this.p1.y + this._$Fo * (this.p2.y - this.p1.y) / aO;this.p2.vx = (this.p2.x - this.p2._$s0) * aU;this.p2.vy = (this.p2.y - this.p2._$70) * aU;this.p2._$xT();\n };function N() {\n this._$p = 1;this.x = 0;this.y = 0;this.vx = 0;this.vy = 0;this.ax = 0;this.ay = 0;this.fx = 0;this.fy = 0;this._$s0 = 0;this._$70 = 0;this._$7L = 0;this._$HL = 0;\n }N.prototype._$xT = function () {\n this._$s0 = this.x;this._$70 = this.y;this._$7L = this.vx;this._$HL = this.vy;\n };function at(aJ, aI, aH) {\n this._$wL = null;this.scale = null;this._$V0 = null;this._$wL = aJ;this.scale = aI;this._$V0 = aH;\n }at.prototype._$oP = function (aI, aH) {};function h(aJ, aK, aI, aH) {\n at.prototype.constructor.call(this, aK, aI, aH);this._$tL = null;this._$tL = aJ;\n }h.prototype = new at();h.prototype._$oP = function (aJ, aH) {\n var aK = this.scale * aJ.getParamFloat(this._$wL);var aL = aH.getPhysicsPoint1();switch (this._$tL) {default:case u.Src.SRC_TO_X:\n aL.x = aL.x + (aK - aL.x) * this._$V0;break;case u.Src.SRC_TO_Y:\n aL.y = aL.y + (aK - aL.y) * this._$V0;break;case u.Src.SRC_TO_G_ANGLE:\n var aI = aH._$qr();aI = aI + (aK - aI) * this._$V0;aH._$pr(aI);break;}\n };function d(aJ, aI, aH) {\n this._$wL = null;this.scale = null;this._$V0 = null;this._$wL = aJ;this.scale = aI;this._$V0 = aH;\n }d.prototype._$YS = function (aI, aH) {};function aF(aI, aK, aJ, aH) {\n d.prototype.constructor.call(this, aK, aJ, aH);this._$YP = null;this._$YP = aI;\n }aF.prototype = new d();aF.prototype._$YS = function (aI, aH) {\n switch (this._$YP) {default:case u.Target.TARGET_FROM_ANGLE:\n aI.setParamFloat(this._$wL, this.scale * aH._$5r(), this._$V0);break;case u.Target.TARGET_FROM_ANGLE_V:\n aI.setParamFloat(this._$wL, this.scale * aH._$Cs(), this._$V0);break;}\n };u.Src = function () {};u.Src.SRC_TO_X = "SRC_TO_X";u.Src.SRC_TO_Y = "SRC_TO_Y";u.Src.SRC_TO_G_ANGLE = "SRC_TO_G_ANGLE";u.Target = function () {};u.Target.TARGET_FROM_ANGLE = "TARGET_FROM_ANGLE";u.Target.TARGET_FROM_ANGLE_V = "TARGET_FROM_ANGLE_V";function X() {\n if (j) {\n return;\n }this._$fL = 0;this._$gL = 0;this._$B0 = 1;this._$z0 = 1;this._$qT = 0;this.reflectX = false;this.reflectY = false;\n }X.prototype.init = function (aH) {\n this._$fL = aH._$fL;this._$gL = aH._$gL;this._$B0 = aH._$B0;this._$z0 = aH._$z0;this._$qT = aH._$qT;this.reflectX = aH.reflectX;this.reflectY = aH.reflectY;\n };X.prototype._$F0 = function (aH) {\n this._$fL = aH._$_T();this._$gL = aH._$_T();this._$B0 = aH._$_T();this._$z0 = aH._$_T();this._$qT = aH._$_T();if (aH.getFormatVersion() >= ay.LIVE2D_FORMAT_VERSION_V2_10_SDK2) {\n this.reflectX = aH._$po();this.reflectY = aH._$po();\n }\n };X.prototype._$e = function () {};var ad = function ad() {};ad._$ni = function (aL, aJ, aR, aQ, aK, aI, aH, aS, aN) {\n var aM = aH * aI - aS * aK;if (aM == 0) {\n return null;\n } else {\n var aO = ((aL - aR) * aI - (aJ - aQ) * aK) / aM;var aP;if (aK != 0) {\n aP = (aL - aR - aO * aH) / aK;\n } else {\n aP = (aJ - aQ - aO * aS) / aI;\n }if (isNaN(aP)) {\n aP = (aL - aR - aO * aH) / aK;if (isNaN(aP)) {\n aP = (aJ - aQ - aO * aS) / aI;\n }if (isNaN(aP)) {\n console.log("a is NaN @UtVector#_$ni() ");console.log("v1x : " + aK);console.log("v1x != 0 ? " + (aK != 0));\n }\n }if (aN == null) {\n return new Array(aP, aO);\n } else {\n aN[0] = aP;aN[1] = aO;return aN;\n }\n }\n };function av() {\n if (j) {\n return;\n }this.x = null;this.y = null;this.width = null;this.height = null;\n }av.prototype._$8P = function () {\n return this.x + 0.5 * this.width;\n };av.prototype._$6P = function () {\n return this.y + 0.5 * this.height;\n };av.prototype._$EL = function () {\n return this.x + this.width;\n };av.prototype._$5T = function () {\n return this.y + this.height;\n };av.prototype._$jL = function (aI, aK, aJ, aH) {\n this.x = aI;this.y = aK;this.width = aJ;this.height = aH;\n };av.prototype._$jL = function (aH) {\n this.x = aH.x;this.y = aH.y;this.width = aH.width;this.height = aH.height;\n };av.prototype.contains = function (aH, aI) {\n return this.x <= this.x && this.y <= this.y && this.x <= this.x + this.width && this.y <= this.y + this.height;\n };av.prototype.expand = function (aH, aI) {\n this.x -= aH;this.y -= aI;this.width += aH * 2;this.height += aI * 2;\n };function aG() {}aG._$Z2 = function (bb, bo, bp, a2) {\n var a1 = bo._$Q2(bb, bp);var a3 = bb._$vs();var ba = bb._$Tr();bo._$zr(a3, ba, a1);if (a1 <= 0) {\n return a2[a3[0]];\n } else {\n if (a1 == 1) {\n var bj = a2[a3[0]];var bi = a2[a3[1]];var a9 = ba[0];return bj + (bi - bj) * a9 | 0;\n } else {\n if (a1 == 2) {\n var bj = a2[a3[0]];var bi = a2[a3[1]];var a0 = a2[a3[2]];var aZ = a2[a3[3]];var a9 = ba[0];var a8 = ba[1];var br = bj + (bi - bj) * a9 | 0;var bq = a0 + (aZ - a0) * a9 | 0;return br + (bq - br) * a8 | 0;\n } else {\n if (a1 == 3) {\n var aP = a2[a3[0]];var aO = a2[a3[1]];var bn = a2[a3[2]];var bm = a2[a3[3]];var aK = a2[a3[4]];var aJ = a2[a3[5]];var bg = a2[a3[6]];var bf = a2[a3[7]];var a9 = ba[0];var a8 = ba[1];var a6 = ba[2];var bj = aP + (aO - aP) * a9 | 0;var bi = bn + (bm - bn) * a9 | 0;var a0 = aK + (aJ - aK) * a9 | 0;var aZ = bg + (bf - bg) * a9 | 0;var br = bj + (bi - bj) * a8 | 0;var bq = a0 + (aZ - a0) * a8 | 0;return br + (bq - br) * a6 | 0;\n } else {\n if (a1 == 4) {\n var aT = a2[a3[0]];var aS = a2[a3[1]];var bu = a2[a3[2]];var bt = a2[a3[3]];var aN = a2[a3[4]];var aM = a2[a3[5]];var bl = a2[a3[6]];var bk = a2[a3[7]];var be = a2[a3[8]];var bc = a2[a3[9]];var aX = a2[a3[10]];var aW = a2[a3[11]];var a7 = a2[a3[12]];var a5 = a2[a3[13]];var aR = a2[a3[14]];var aQ = a2[a3[15]];var a9 = ba[0];var a8 = ba[1];var a6 = ba[2];var a4 = ba[3];var aP = aT + (aS - aT) * a9 | 0;var aO = bu + (bt - bu) * a9 | 0;var bn = aN + (aM - aN) * a9 | 0;var bm = bl + (bk - bl) * a9 | 0;var aK = be + (bc - be) * a9 | 0;var aJ = aX + (aW - aX) * a9 | 0;var bg = a7 + (a5 - a7) * a9 | 0;var bf = aR + (aQ - aR) * a9 | 0;var bj = aP + (aO - aP) * a8 | 0;var bi = bn + (bm - bn) * a8 | 0;var a0 = aK + (aJ - aK) * a8 | 0;var aZ = bg + (bf - bg) * a8 | 0;var br = bj + (bi - bj) * a6 | 0;var bq = a0 + (aZ - a0) * a6 | 0;return br + (bq - br) * a4 | 0;\n } else {\n var aV = 1 << a1;var aY = new Float32Array(aV);for (var bh = 0; bh < aV; bh++) {\n var aI = bh;var aH = 1;for (var aL = 0; aL < a1; aL++) {\n aH *= aI % 2 == 0 ? 1 - ba[aL] : ba[aL];aI /= 2;\n }aY[bh] = aH;\n }var bs = new Float32Array(aV);for (var aU = 0; aU < aV; aU++) {\n bs[aU] = a2[a3[aU]];\n }var bd = 0;for (var aU = 0; aU < aV; aU++) {\n bd += aY[aU] * bs[aU];\n }return bd + 0.5 | 0;\n }\n }\n }\n }\n }\n };aG._$br = function (ba, bo, bp, bg) {\n var a1 = bo._$Q2(ba, bp);var a2 = ba._$vs();var a9 = ba._$Tr();bo._$zr(a2, a9, a1);if (a1 <= 0) {\n return bg[a2[0]];\n } else {\n if (a1 == 1) {\n var bj = bg[a2[0]];var bi = bg[a2[1]];var a8 = a9[0];return bj + (bi - bj) * a8;\n } else {\n if (a1 == 2) {\n var bj = bg[a2[0]];var bi = bg[a2[1]];var a0 = bg[a2[2]];var aZ = bg[a2[3]];var a8 = a9[0];var a7 = a9[1];return (1 - a7) * (bj + (bi - bj) * a8) + a7 * (a0 + (aZ - a0) * a8);\n } else {\n if (a1 == 3) {\n var aP = bg[a2[0]];var aO = bg[a2[1]];var bn = bg[a2[2]];var bm = bg[a2[3]];var aK = bg[a2[4]];var aJ = bg[a2[5]];var bf = bg[a2[6]];var be = bg[a2[7]];var a8 = a9[0];var a7 = a9[1];var a5 = a9[2];return (1 - a5) * ((1 - a7) * (aP + (aO - aP) * a8) + a7 * (bn + (bm - bn) * a8)) + a5 * ((1 - a7) * (aK + (aJ - aK) * a8) + a7 * (bf + (be - bf) * a8));\n } else {\n if (a1 == 4) {\n var aT = bg[a2[0]];var aS = bg[a2[1]];var bs = bg[a2[2]];var br = bg[a2[3]];var aN = bg[a2[4]];var aM = bg[a2[5]];var bl = bg[a2[6]];var bk = bg[a2[7]];var bd = bg[a2[8]];var bb = bg[a2[9]];var aX = bg[a2[10]];var aW = bg[a2[11]];var a6 = bg[a2[12]];var a4 = bg[a2[13]];var aR = bg[a2[14]];var aQ = bg[a2[15]];var a8 = a9[0];var a7 = a9[1];var a5 = a9[2];var a3 = a9[3];return (1 - a3) * ((1 - a5) * ((1 - a7) * (aT + (aS - aT) * a8) + a7 * (bs + (br - bs) * a8)) + a5 * ((1 - a7) * (aN + (aM - aN) * a8) + a7 * (bl + (bk - bl) * a8))) + a3 * ((1 - a5) * ((1 - a7) * (bd + (bb - bd) * a8) + a7 * (aX + (aW - aX) * a8)) + a5 * ((1 - a7) * (a6 + (a4 - a6) * a8) + a7 * (aR + (aQ - aR) * a8)));\n } else {\n var aV = 1 << a1;var aY = new Float32Array(aV);for (var bh = 0; bh < aV; bh++) {\n var aI = bh;var aH = 1;for (var aL = 0; aL < a1; aL++) {\n aH *= aI % 2 == 0 ? 1 - a9[aL] : a9[aL];aI /= 2;\n }aY[bh] = aH;\n }var bq = new Float32Array(aV);for (var aU = 0; aU < aV; aU++) {\n bq[aU] = bg[a2[aU]];\n }var bc = 0;for (var aU = 0; aU < aV; aU++) {\n bc += aY[aU] * bq[aU];\n }return bc;\n }\n }\n }\n }\n }\n };aG._$Vr = function (bV, bW, a5, aI, bC, a3, bX, bH) {\n var aN = bW._$Q2(bV, a5);var bw = bV._$vs();var a2 = bV._$Tr();bW._$zr(bw, a2, aN);var aJ = aI * 2;var aQ = bX;if (aN <= 0) {\n var bI = bw[0];var bq = bC[bI];if (bH == 2 && bX == 0) {\n P._$jT(bq, 0, a3, 0, aJ);\n } else {\n for (var bt = 0; bt < aJ;) {\n a3[aQ] = bq[bt++];a3[aQ + 1] = bq[bt++];aQ += bH;\n }\n }\n } else {\n if (aN == 1) {\n var bq = bC[bw[0]];var bp = bC[bw[1]];var b3 = a2[0];var bT = 1 - b3;for (var bt = 0; bt < aJ;) {\n a3[aQ] = bq[bt] * bT + bp[bt] * b3;++bt;a3[aQ + 1] = bq[bt] * bT + bp[bt] * b3;++bt;aQ += bH;\n }\n } else {\n if (aN == 2) {\n var bq = bC[bw[0]];var bp = bC[bw[1]];var aZ = bC[bw[2]];var aY = bC[bw[3]];var b3 = a2[0];var b1 = a2[1];var bT = 1 - b3;var bP = 1 - b1;var b2 = bP * bT;var b0 = bP * b3;var bM = b1 * bT;var bL = b1 * b3;for (var bt = 0; bt < aJ;) {\n a3[aQ] = b2 * bq[bt] + b0 * bp[bt] + bM * aZ[bt] + bL * aY[bt];++bt;a3[aQ + 1] = b2 * bq[bt] + b0 * bp[bt] + bM * aZ[bt] + bL * aY[bt];++bt;aQ += bH;\n }\n } else {\n if (aN == 3) {\n var ba = bC[bw[0]];var a9 = bC[bw[1]];var aP = bC[bw[2]];var aO = bC[bw[3]];var a6 = bC[bw[4]];var a4 = bC[bw[5]];var aL = bC[bw[6]];var aK = bC[bw[7]];var b3 = a2[0];var b1 = a2[1];var bZ = a2[2];var bT = 1 - b3;var bP = 1 - b1;var bN = 1 - bZ;var b8 = bN * bP * bT;var b7 = bN * bP * b3;var bU = bN * b1 * bT;var bS = bN * b1 * b3;var b6 = bZ * bP * bT;var b5 = bZ * bP * b3;var bQ = bZ * b1 * bT;var bO = bZ * b1 * b3;for (var bt = 0; bt < aJ;) {\n a3[aQ] = b8 * ba[bt] + b7 * a9[bt] + bU * aP[bt] + bS * aO[bt] + b6 * a6[bt] + b5 * a4[bt] + bQ * aL[bt] + bO * aK[bt];++bt;a3[aQ + 1] = b8 * ba[bt] + b7 * a9[bt] + bU * aP[bt] + bS * aO[bt] + b6 * a6[bt] + b5 * a4[bt] + bQ * aL[bt] + bO * aK[bt];++bt;aQ += bH;\n }\n } else {\n if (aN == 4) {\n var bD = bC[bw[0]];var bB = bC[bw[1]];var bo = bC[bw[2]];var bm = bC[bw[3]];var by = bC[bw[4]];var bx = bC[bw[5]];var be = bC[bw[6]];var bd = bC[bw[7]];var bG = bC[bw[8]];var bE = bC[bw[9]];var bv = bC[bw[10]];var bu = bC[bw[11]];var bA = bC[bw[12]];var bz = bC[bw[13]];var bn = bC[bw[14]];var bl = bC[bw[15]];var b3 = a2[0];var b1 = a2[1];var bZ = a2[2];var bY = a2[3];var bT = 1 - b3;var bP = 1 - b1;var bN = 1 - bZ;var bK = 1 - bY;var bk = bK * bN * bP * bT;var bi = bK * bN * bP * b3;var aW = bK * bN * b1 * bT;var aV = bK * bN * b1 * b3;var bc = bK * bZ * bP * bT;var bb = bK * bZ * bP * b3;var aS = bK * bZ * b1 * bT;var aR = bK * bZ * b1 * b3;var bs = bY * bN * bP * bT;var br = bY * bN * bP * b3;var a1 = bY * bN * b1 * bT;var a0 = bY * bN * b1 * b3;var bh = bY * bZ * bP * bT;var bf = bY * bZ * bP * b3;var aU = bY * bZ * b1 * bT;var aT = bY * bZ * b1 * b3;for (var bt = 0; bt < aJ;) {\n a3[aQ] = bk * bD[bt] + bi * bB[bt] + aW * bo[bt] + aV * bm[bt] + bc * by[bt] + bb * bx[bt] + aS * be[bt] + aR * bd[bt] + bs * bG[bt] + br * bE[bt] + a1 * bv[bt] + a0 * bu[bt] + bh * bA[bt] + bf * bz[bt] + aU * bn[bt] + aT * bl[bt];++bt;a3[aQ + 1] = bk * bD[bt] + bi * bB[bt] + aW * bo[bt] + aV * bm[bt] + bc * by[bt] + bb * bx[bt] + aS * be[bt] + aR * bd[bt] + bs * bG[bt] + br * bE[bt] + a1 * bv[bt] + a0 * bu[bt] + bh * bA[bt] + bf * bz[bt] + aU * bn[bt] + aT * bl[bt];++bt;aQ += bH;\n }\n } else {\n var b4 = 1 << aN;var bJ = new Float32Array(b4);for (var bj = 0; bj < b4; bj++) {\n var aH = bj;var aM = 1;for (var bF = 0; bF < aN; bF++) {\n aM *= aH % 2 == 0 ? 1 - a2[bF] : a2[bF];aH /= 2;\n }bJ[bj] = aM;\n }var bg = new Float32Array(b4);for (var aX = 0; aX < b4; aX++) {\n bg[aX] = bC[bw[aX]];\n }for (var bt = 0; bt < aJ;) {\n var a8 = 0,\n a7 = 0;var bR = bt + 1;for (var aX = 0; aX < b4; aX++) {\n a8 += bJ[aX] * bg[aX][bt];a7 += bJ[aX] * bg[aX][bR];\n }bt += 2;a3[aQ] = a8;a3[aQ + 1] = a7;aQ += bH;\n }\n }\n }\n }\n }\n }\n };function e() {\n if (j) {\n return;\n }this.x = null;this.y = null;\n }e.prototype._$HT = function (aH, aI) {\n this.x = aH;this.y = aI;\n };e.prototype._$HT = function (aH) {\n this.x = aH.x;this.y = aH.y;\n };function ae() {\n if (j) {\n return;\n }this._$gP = null;this._$dr = null;this._$GS = null;this._$qb = null;this._$Lb = null;this._$mS = null;this.clipID = null;this.clipIDList = new Array();\n }ae._$ur = -2;ae._$ES = 500;ae._$wb = 2;ae._$8S = 3;ae._$52 = ae._$ES;ae._$R2 = ae._$ES;ae._$or = function () {\n return ae._$52;\n };ae._$Pr = function () {\n return ae._$R2;\n };ae.prototype.convertClipIDForV2_11 = function (aI) {\n var aH = [];if (aI == null) {\n return null;\n }if (aI.length == 0) {\n return null;\n }if (!/,/.test(aI)) {\n aH.push(aI.id);return aH;\n }aH = aI.id.split(",");return aH;\n };ae.prototype._$F0 = function (aH) {\n this._$gP = aH._$nP();this._$dr = aH._$nP();this._$GS = aH._$nP();this._$qb = aH._$6L();this._$Lb = aH._$cS();this._$mS = aH._$Tb();if (aH.getFormatVersion() >= ay._$T7) {\n this.clipID = aH._$nP();this.clipIDList = this.convertClipIDForV2_11(this.clipID);\n } else {\n this.clipIDList = [];\n }this._$MS(this._$Lb);\n };ae.prototype.getClipIDList = function () {\n return this.clipIDList;\n };ae.prototype.init = function (aH) {};ae.prototype._$Nr = function (aH, aI) {\n aI._$IS[0] = false;aI._$Us = aG._$Z2(aH, this._$GS, aI._$IS, this._$Lb);if (Q._$Zs) {} else {\n if (aI._$IS[0]) {\n return;\n }\n }aI._$7s = aG._$br(aH, this._$GS, aI._$IS, this._$mS);\n };ae.prototype._$2b = function (aH, aI) {};ae.prototype.getDrawDataID = function () {\n return this._$gP;\n };ae.prototype._$j2 = function (aH) {\n this._$gP = aH;\n };ae.prototype.getOpacity = function (aH, aI) {\n return aI._$7s;\n };ae.prototype._$zS = function (aH, aI) {\n return aI._$Us;\n };ae.prototype._$MS = function (aJ) {\n for (var aI = aJ.length - 1; aI >= 0; --aI) {\n var aH = aJ[aI];if (aH < ae._$52) {\n ae._$52 = aH;\n } else {\n if (aH > ae._$R2) {\n ae._$R2 = aH;\n }\n }\n }\n };ae.prototype.getTargetBaseDataID = function () {\n return this._$dr;\n };ae.prototype._$gs = function (aH) {\n this._$dr = aH;\n };ae.prototype._$32 = function () {\n return this._$dr != null && this._$dr != n._$2o();\n };ae.prototype.preDraw = function (aJ, aH, aI) {};ae.prototype.draw = function (aJ, aH, aI) {};ae.prototype.getType = function () {};ae.prototype._$B2 = function (aI, aH, aJ) {};function ax() {\n if (j) {\n return;\n }this._$Eb = ax._$ps;this._$lT = 1;this._$C0 = 1;this._$tT = 1;this._$WL = 1;this.culling = false;this.matrix4x4 = new Float32Array(16);this.premultipliedAlpha = false;this.anisotropy = 0;this.clippingProcess = ax.CLIPPING_PROCESS_NONE;this.clipBufPre_clipContextMask = null;this.clipBufPre_clipContextDraw = null;this.CHANNEL_COLORS = new Array();\n }ax._$ps = 32;ax.CLIPPING_PROCESS_NONE = 0;ax.CLIPPING_PROCESS_OVERWRITE_ALPHA = 1;ax.CLIPPING_PROCESS_MULTIPLY_ALPHA = 2;ax.CLIPPING_PROCESS_DRAW = 3;ax.CLIPPING_PROCESS_CLEAR_ALPHA = 4;ax.prototype.setChannelFlagAsColor = function (aH, aI) {\n this.CHANNEL_COLORS[aH] = aI;\n };ax.prototype.getChannelFlagAsColor = function (aH) {\n return this.CHANNEL_COLORS[aH];\n };ax.prototype._$ZT = function () {};ax.prototype._$Uo = function (aM, aK, aJ, aL, aN, aI, aH) {};ax.prototype._$Rs = function () {\n return -1;\n };ax.prototype._$Ds = function (aH) {};ax.prototype.setBaseColor = function (aK, aJ, aI, aH) {\n if (aK < 0) {\n aK = 0;\n } else {\n if (aK > 1) {\n aK = 1;\n }\n }if (aJ < 0) {\n aJ = 0;\n } else {\n if (aJ > 1) {\n aJ = 1;\n }\n }if (aI < 0) {\n aI = 0;\n } else {\n if (aI > 1) {\n aI = 1;\n }\n }if (aH < 0) {\n aH = 0;\n } else {\n if (aH > 1) {\n aH = 1;\n }\n }this._$lT = aK;this._$C0 = aJ;this._$tT = aI;this._$WL = aH;\n };ax.prototype._$WP = function (aH) {\n this.culling = aH;\n };ax.prototype.setMatrix = function (aH) {\n for (var aI = 0; aI < 16; aI++) {\n this.matrix4x4[aI] = aH[aI];\n }\n };ax.prototype._$IT = function () {\n return this.matrix4x4;\n };ax.prototype.setPremultipliedAlpha = function (aH) {\n this.premultipliedAlpha = aH;\n };ax.prototype.isPremultipliedAlpha = function () {\n return this.premultipliedAlpha;\n };ax.prototype.setAnisotropy = function (aH) {\n this.anisotropy = aH;\n };ax.prototype.getAnisotropy = function () {\n return this.anisotropy;\n };ax.prototype.getClippingProcess = function () {\n return this.clippingProcess;\n };ax.prototype.setClippingProcess = function (aH) {\n this.clippingProcess = aH;\n };ax.prototype.setClipBufPre_clipContextForMask = function (aH) {\n this.clipBufPre_clipContextMask = aH;\n };ax.prototype.getClipBufPre_clipContextMask = function () {\n return this.clipBufPre_clipContextMask;\n };ax.prototype.setClipBufPre_clipContextForDraw = function (aH) {\n this.clipBufPre_clipContextDraw = aH;\n };ax.prototype.getClipBufPre_clipContextDraw = function () {\n return this.clipBufPre_clipContextDraw;\n };function o() {\n if (j) {\n return;\n }this.a = 1;this.r = 1;this.g = 1;this.b = 1;this.scale = 1;this._$ho = 1;this.blendMode = Q.L2D_COLOR_BLEND_MODE_MULT;\n }function c() {\n if (j) {\n return;\n }this._$kP = null;this._$dr = null;this._$Ai = true;this._$mS = null;\n }c._$ur = -2;c._$c2 = 1;c._$_b = 2;c.prototype._$F0 = function (aH) {\n this._$kP = aH._$nP();this._$dr = aH._$nP();\n };c.prototype.readV2_opacity = function (aH) {\n if (aH.getFormatVersion() >= ay.LIVE2D_FORMAT_VERSION_V2_10_SDK2) {\n this._$mS = aH._$Tb();\n }\n };c.prototype.init = function (aH) {};c.prototype._$Nr = function (aI, aH) {};c.prototype.interpolateOpacity = function (aJ, aK, aI, aH) {\n if (this._$mS == null) {\n aI.setInterpolatedOpacity(1);\n } else {\n aI.setInterpolatedOpacity(aG._$br(aJ, aK, aH, this._$mS));\n }\n };c.prototype._$2b = function (aI, aH) {};c.prototype._$nb = function (aL, aK, aM, aH, aI, aJ, aN) {};c.prototype.getType = function () {};c.prototype._$gs = function (aH) {\n this._$dr = aH;\n };c.prototype._$a2 = function (aH) {\n this._$kP = aH;\n };c.prototype.getTargetBaseDataID = function () {\n return this._$dr;\n };c.prototype.getBaseDataID = function () {\n return this._$kP;\n };c.prototype._$32 = function () {\n return this._$dr != null && this._$dr != n._$2o();\n };function P() {}P._$W2 = 0;P._$CS = P._$W2;P._$Mo = function () {\n return true;\n };P._$XP = function (aI) {\n try {\n var aJ = getTimeMSec();while (getTimeMSec() - aJ < aI) {}\n } catch (aH) {\n aH._$Rb();\n }\n };P.getUserTimeMSec = function () {\n return P._$CS == P._$W2 ? P.getSystemTimeMSec() : P._$CS;\n };P.setUserTimeMSec = function (aH) {\n P._$CS = aH;\n };P.updateUserTimeMSec = function () {\n return P._$CS = P.getSystemTimeMSec();\n };P.getTimeMSec = function () {\n return new Date().getTime();\n };P.getSystemTimeMSec = function () {\n return new Date().getTime();\n };P._$Q = function (aH) {};P._$jT = function (aM, aJ, aI, aL, aH) {\n for (var aK = 0; aK < aH; aK++) {\n aI[aL + aK] = aM[aJ + aK];\n }\n };function aA() {\n if (j) {\n return;\n }this._$VP = 0;this._$wL = null;this._$GP = null;this._$8o = aA._$ds;this._$2r = -1;this._$O2 = 0;this._$ri = 0;\n }aA._$ds = -2;aA.prototype._$F0 = function (aH) {\n this._$wL = aH._$nP();this._$VP = aH._$6L();this._$GP = aH._$nP();\n };aA.prototype.getParamIndex = function (aH) {\n if (this._$2r != aH) {\n this._$8o = aA._$ds;\n }return this._$8o;\n };aA.prototype._$Pb = function (aI, aH) {\n this._$8o = aI;this._$2r = aH;\n };aA.prototype.getParamID = function () {\n return this._$wL;\n };aA.prototype._$yP = function (aH) {\n this._$wL = aH;\n };aA.prototype._$N2 = function () {\n return this._$VP;\n };aA.prototype._$d2 = function () {\n return this._$GP;\n };aA.prototype._$t2 = function (aI, aH) {\n this._$VP = aI;this._$GP = aH;\n };aA.prototype._$Lr = function () {\n return this._$O2;\n };aA.prototype._$wr = function (aH) {\n this._$O2 = aH;\n };aA.prototype._$SL = function () {\n return this._$ri;\n };aA.prototype._$AL = function (aH) {\n this._$ri = aH;\n };function G() {}G.startsWith = function (aJ, aL, aK) {\n var aH = aL + aK.length;if (aH >= aJ.length) {\n return false;\n }for (var aI = aL; aI < aH; aI++) {\n if (G.getChar(aJ, aI) != aK.charAt(aI - aL)) {\n return false;\n }\n }return true;\n };G.getChar = function (aI, aH) {\n return String.fromCharCode(aI.getUint8(aH));\n };G.createString = function (aM, aL, aJ) {\n var aH = new ArrayBuffer(aJ * 2);var aK = new Uint16Array(aH);for (var aI = 0; aI < aJ; aI++) {\n aK[aI] = aM.getUint8(aL + aI);\n }return String.fromCharCode.apply(null, aK);\n };G._$LS = function (aP, aM, aR, aK) {\n if (aP instanceof ArrayBuffer) {\n aP = new DataView(aP);\n }var aL = aR;var aJ = false;var aQ = false;var aS = 0;var aO = G.getChar(aP, aL);if (aO == "-") {\n aJ = true;aL++;\n }var aN = false;for (; aL < aM; aL++) {\n aO = G.getChar(aP, aL);switch (aO) {case "0":\n aS = aS * 10;break;case "1":\n aS = aS * 10 + 1;break;case "2":\n aS = aS * 10 + 2;break;case "3":\n aS = aS * 10 + 3;break;case "4":\n aS = aS * 10 + 4;break;case "5":\n aS = aS * 10 + 5;break;case "6":\n aS = aS * 10 + 6;break;case "7":\n aS = aS * 10 + 7;break;case "8":\n aS = aS * 10 + 8;break;case "9":\n aS = aS * 10 + 9;break;case ".":\n aQ = true;aL++;aN = true;break;default:\n aN = true;break;}if (aN) {\n break;\n }\n }if (aQ) {\n var aI = 0.1;var aH = false;for (; aL < aM; aL++) {\n aO = G.getChar(aP, aL);switch (aO) {case "0":\n break;case "1":\n aS += aI * 1;break;case "2":\n aS += aI * 2;break;case "3":\n aS += aI * 3;break;case "4":\n aS += aI * 4;break;case "5":\n aS += aI * 5;break;case "6":\n aS += aI * 6;break;case "7":\n aS += aI * 7;break;case "8":\n aS += aI * 8;break;case "9":\n aS += aI * 9;break;default:\n aH = true;break;}aI *= 0.1;if (aH) {\n break;\n }\n }\n }if (aJ) {\n aS = -aS;\n }aK[0] = aL;return aS;\n };function g() {\n if (j) {\n return;\n }this._$Ob = null;\n }g.prototype._$zP = function () {\n this._$Ob = new Array();\n };g.prototype._$F0 = function (aH) {\n this._$Ob = aH._$nP();\n };g.prototype._$Ur = function (aK) {\n if (aK._$WS()) {\n return true;\n }var aH = aK._$v2();for (var aJ = this._$Ob.length - 1; aJ >= 0; --aJ) {\n var aI = this._$Ob[aJ].getParamIndex(aH);if (aI == aA._$ds) {\n aI = aK.getParamIndex(this._$Ob[aJ].getParamID());\n }if (aK._$Xb(aI)) {\n return true;\n }\n }return false;\n };g.prototype._$Q2 = function (aL, aV) {\n var aX = this._$Ob.length;var aJ = aL._$v2();var aN = 0;var aI;var aQ;for (var aK = 0; aK < aX; aK++) {\n var aH = this._$Ob[aK];aI = aH.getParamIndex(aJ);if (aI == aA._$ds) {\n aI = aL.getParamIndex(aH.getParamID());aH._$Pb(aI, aJ);\n }if (aI < 0) {\n throw new Exception("err 23242 : " + aH.getParamID());\n }var aU = aI < 0 ? 0 : aL.getParamFloat(aI);aQ = aH._$N2();var aM = aH._$d2();var aP = -1;var aT = 0;var aS;var aR;if (aQ < 1) {} else {\n if (aQ == 1) {\n aS = aM[0];if (aS - aw._$J < aU && aU < aS + aw._$J) {\n aP = 0;aT = 0;\n } else {\n aP = 0;aV[0] = true;\n }\n } else {\n aS = aM[0];if (aU < aS - aw._$J) {\n aP = 0;aV[0] = true;\n } else {\n if (aU < aS + aw._$J) {\n aP = 0;\n } else {\n var aW = false;for (var aO = 1; aO < aQ; ++aO) {\n aR = aM[aO];if (aU < aR + aw._$J) {\n if (aR - aw._$J < aU) {\n aP = aO;\n } else {\n aP = aO - 1;aT = (aU - aS) / (aR - aS);aN++;\n }aW = true;break;\n }aS = aR;\n }if (!aW) {\n aP = aQ - 1;aT = 0;aV[0] = true;\n }\n }\n }\n }\n }aH._$wr(aP);aH._$AL(aT);\n }return aN;\n };g.prototype._$zr = function (aN, aT, aP) {\n var aR = 1 << aP;if (aR + 1 > aw._$Qb) {\n console.log("err 23245\\n");\n }var aS = this._$Ob.length;var aK = 1;var aH = 1;var aJ = 0;for (var aQ = 0; aQ < aR; ++aQ) {\n aN[aQ] = 0;\n }for (var aL = 0; aL < aS; ++aL) {\n var aI = this._$Ob[aL];if (aI._$SL() == 0) {\n var aO = aI._$Lr() * aK;if (aO < 0 && Q._$3T) {\n throw new Exception("err 23246");\n }for (var aQ = 0; aQ < aR; ++aQ) {\n aN[aQ] += aO;\n }\n } else {\n var aO = aK * aI._$Lr();var aM = aK * (aI._$Lr() + 1);for (var aQ = 0; aQ < aR; ++aQ) {\n aN[aQ] += (aQ / aH | 0) % 2 == 0 ? aO : aM;\n }aT[aJ++] = aI._$SL();aH *= 2;\n }aK *= aI._$N2();\n }aN[aR] = 65535;aT[aJ] = -1;\n };g.prototype._$h2 = function (aJ, aH, aK) {\n var aM = new Float32Array(aH);for (var aL = 0; aL < aH; ++aL) {\n aM[aL] = aK[aL];\n }var aI = new aA();aI._$yP(aJ);aI._$t2(aH, aM);this._$Ob.push(aI);\n };g.prototype._$J2 = function (aO) {\n var aN = aO;var aM = this._$Ob.length;for (var aK = 0; aK < aM; ++aK) {\n var aI = this._$Ob[aK];var aH = aI._$N2();var aJ = aN % aI._$N2();var aL = aI._$d2()[aJ];console.log("%s[%d]=%7.2f / ", aI.getParamID(), aJ, aL);aN /= aH;\n }console.log("\\n");\n };g.prototype.getParamCount = function () {\n return this._$Ob.length;\n };g.prototype._$zs = function () {\n return this._$Ob;\n };function ac() {\n this.m = new Float32Array(16);this.identity();\n }ac.prototype.identity = function () {\n for (var aH = 0; aH < 16; aH++) {\n this.m[aH] = aH % 5 == 0 ? 1 : 0;\n }\n };ac.prototype.getArray = function () {\n return this.m;\n };ac.prototype.getCopyMatrix = function () {\n return new Float32Array(this.m);\n };ac.prototype.setMatrix = function (aI) {\n if (aI == null || aI.length != 16) {\n return;\n }for (var aH = 0; aH < 16; aH++) {\n this.m[aH] = aI[aH];\n }\n };ac.prototype.mult = function (aH, aJ, aI) {\n if (aJ == null) {\n return null;\n }if (this == aJ) {\n this.mult_safe(this.m, aH.m, aJ.m, aI);\n } else {\n this.mult_fast(this.m, aH.m, aJ.m, aI);\n }return aJ;\n };ac.prototype.mult_safe = function (aI, aH, aM, aJ) {\n if (aI == aM) {\n var aL = new Array(16);this.mult_fast(aI, aH, aL, aJ);for (var aK = 15; aK >= 0; --aK) {\n aM[aK] = aL[aK];\n }\n } else {\n this.mult_fast(aI, aH, aM, aJ);\n }\n };ac.prototype.mult_fast = function (aI, aH, aK, aJ) {\n if (aJ) {\n aK[0] = aI[0] * aH[0] + aI[4] * aH[1] + aI[8] * aH[2];aK[4] = aI[0] * aH[4] + aI[4] * aH[5] + aI[8] * aH[6];aK[8] = aI[0] * aH[8] + aI[4] * aH[9] + aI[8] * aH[10];aK[12] = aI[0] * aH[12] + aI[4] * aH[13] + aI[8] * aH[14] + aI[12];aK[1] = aI[1] * aH[0] + aI[5] * aH[1] + aI[9] * aH[2];aK[5] = aI[1] * aH[4] + aI[5] * aH[5] + aI[9] * aH[6];aK[9] = aI[1] * aH[8] + aI[5] * aH[9] + aI[9] * aH[10];aK[13] = aI[1] * aH[12] + aI[5] * aH[13] + aI[9] * aH[14] + aI[13];aK[2] = aI[2] * aH[0] + aI[6] * aH[1] + aI[10] * aH[2];aK[6] = aI[2] * aH[4] + aI[6] * aH[5] + aI[10] * aH[6];aK[10] = aI[2] * aH[8] + aI[6] * aH[9] + aI[10] * aH[10];aK[14] = aI[2] * aH[12] + aI[6] * aH[13] + aI[10] * aH[14] + aI[14];aK[3] = aK[7] = aK[11] = 0;aK[15] = 1;\n } else {\n aK[0] = aI[0] * aH[0] + aI[4] * aH[1] + aI[8] * aH[2] + aI[12] * aH[3];aK[4] = aI[0] * aH[4] + aI[4] * aH[5] + aI[8] * aH[6] + aI[12] * aH[7];aK[8] = aI[0] * aH[8] + aI[4] * aH[9] + aI[8] * aH[10] + aI[12] * aH[11];aK[12] = aI[0] * aH[12] + aI[4] * aH[13] + aI[8] * aH[14] + aI[12] * aH[15];aK[1] = aI[1] * aH[0] + aI[5] * aH[1] + aI[9] * aH[2] + aI[13] * aH[3];aK[5] = aI[1] * aH[4] + aI[5] * aH[5] + aI[9] * aH[6] + aI[13] * aH[7];aK[9] = aI[1] * aH[8] + aI[5] * aH[9] + aI[9] * aH[10] + aI[13] * aH[11];aK[13] = aI[1] * aH[12] + aI[5] * aH[13] + aI[9] * aH[14] + aI[13] * aH[15];aK[2] = aI[2] * aH[0] + aI[6] * aH[1] + aI[10] * aH[2] + aI[14] * aH[3];aK[6] = aI[2] * aH[4] + aI[6] * aH[5] + aI[10] * aH[6] + aI[14] * aH[7];aK[10] = aI[2] * aH[8] + aI[6] * aH[9] + aI[10] * aH[10] + aI[14] * aH[11];aK[14] = aI[2] * aH[12] + aI[6] * aH[13] + aI[10] * aH[14] + aI[14] * aH[15];aK[3] = aI[3] * aH[0] + aI[7] * aH[1] + aI[11] * aH[2] + aI[15] * aH[3];aK[7] = aI[3] * aH[4] + aI[7] * aH[5] + aI[11] * aH[6] + aI[15] * aH[7];aK[11] = aI[3] * aH[8] + aI[7] * aH[9] + aI[11] * aH[10] + aI[15] * aH[11];aK[15] = aI[3] * aH[12] + aI[7] * aH[13] + aI[11] * aH[14] + aI[15] * aH[15];\n }\n };ac.prototype.translate = function (aH, aJ, aI) {\n this.m[12] = this.m[0] * aH + this.m[4] * aJ + this.m[8] * aI + this.m[12];this.m[13] = this.m[1] * aH + this.m[5] * aJ + this.m[9] * aI + this.m[13];this.m[14] = this.m[2] * aH + this.m[6] * aJ + this.m[10] * aI + this.m[14];this.m[15] = this.m[3] * aH + this.m[7] * aJ + this.m[11] * aI + this.m[15];\n };ac.prototype.scale = function (aJ, aI, aH) {\n this.m[0] *= aJ;this.m[4] *= aI;this.m[8] *= aH;this.m[1] *= aJ;this.m[5] *= aI;this.m[9] *= aH;this.m[2] *= aJ;this.m[6] *= aI;this.m[10] *= aH;this.m[3] *= aJ;this.m[7] *= aI;this.m[11] *= aH;\n };ac.prototype.rotateX = function (aH) {\n var aK = aC.fcos(aH);var aJ = aC._$9(aH);var aI = this.m[4];this.m[4] = aI * aK + this.m[8] * aJ;this.m[8] = aI * -aJ + this.m[8] * aK;aI = this.m[5];this.m[5] = aI * aK + this.m[9] * aJ;this.m[9] = aI * -aJ + this.m[9] * aK;aI = this.m[6];this.m[6] = aI * aK + this.m[10] * aJ;this.m[10] = aI * -aJ + this.m[10] * aK;aI = this.m[7];this.m[7] = aI * aK + this.m[11] * aJ;this.m[11] = aI * -aJ + this.m[11] * aK;\n };ac.prototype.rotateY = function (aH) {\n var aK = aC.fcos(aH);var aJ = aC._$9(aH);var aI = this.m[0];this.m[0] = aI * aK + this.m[8] * -aJ;this.m[8] = aI * aJ + this.m[8] * aK;aI = this.m[1];this.m[1] = aI * aK + this.m[9] * -aJ;this.m[9] = aI * aJ + this.m[9] * aK;aI = m[2];this.m[2] = aI * aK + this.m[10] * -aJ;this.m[10] = aI * aJ + this.m[10] * aK;aI = m[3];this.m[3] = aI * aK + this.m[11] * -aJ;this.m[11] = aI * aJ + this.m[11] * aK;\n };ac.prototype.rotateZ = function (aH) {\n var aK = aC.fcos(aH);var aJ = aC._$9(aH);var aI = this.m[0];this.m[0] = aI * aK + this.m[4] * aJ;this.m[4] = aI * -aJ + this.m[4] * aK;aI = this.m[1];this.m[1] = aI * aK + this.m[5] * aJ;this.m[5] = aI * -aJ + this.m[5] * aK;aI = this.m[2];this.m[2] = aI * aK + this.m[6] * aJ;this.m[6] = aI * -aJ + this.m[6] * aK;aI = this.m[3];this.m[3] = aI * aK + this.m[7] * aJ;this.m[7] = aI * -aJ + this.m[7] * aK;\n };function Z(aH) {\n if (j) {\n return;\n }ak.prototype.constructor.call(this, aH);\n }Z.prototype = new ak();Z._$tP = new Object();Z._$27 = function () {\n Z._$tP.clear();\n };Z.getID = function (aH) {\n var aI = Z._$tP[aH];if (aI == null) {\n aI = new Z(aH);Z._$tP[aH] = aI;\n }return aI;\n };Z.prototype._$3s = function () {\n return new Z();\n };function aD() {\n if (j) {\n return;\n }this._$7 = 1;this._$f = 0;this._$H = 0;this._$g = 1;this._$k = 0;this._$w = 0;this._$hi = STATE_IDENTITY;this._$Z = _$pS;\n }aD._$kS = -1;aD._$pS = 0;aD._$hb = 1;aD.STATE_IDENTITY = 0;aD._$gb = 1;aD._$fo = 2;aD._$go = 4;aD.prototype.transform = function (aK, aI, aH) {\n var aT, aS, aR, aM, aL, aJ;var aQ = 0;var aN = 0;switch (this._$hi) {default:\n return;case aD._$go | aD._$fo | aD._$gb:\n aT = this._$7;aS = this._$H;aR = this._$k;aM = this._$f;aL = this._$g;aJ = this._$w;while (--aH >= 0) {\n var aP = aK[aQ++];var aO = aK[aQ++];aI[aN++] = aT * aP + aS * aO + aR;aI[aN++] = aM * aP + aL * aO + aJ;\n }return;case aD._$go | aD._$fo:\n aT = this._$7;aS = this._$H;aM = this._$f;aL = this._$g;while (--aH >= 0) {\n var aP = aK[aQ++];var aO = aK[aQ++];aI[aN++] = aT * aP + aS * aO;aI[aN++] = aM * aP + aL * aO;\n }return;case aD._$go | aD._$gb:\n aS = this._$H;aR = this._$k;aM = this._$f;aJ = this._$w;while (--aH >= 0) {\n var aP = aK[aQ++];aI[aN++] = aS * aK[aQ++] + aR;aI[aN++] = aM * aP + aJ;\n }return;case aD._$go:\n aS = this._$H;aM = this._$f;while (--aH >= 0) {\n var aP = aK[aQ++];aI[aN++] = aS * aK[aQ++];aI[aN++] = aM * aP;\n }return;case aD._$fo | aD._$gb:\n aT = this._$7;aR = this._$k;aL = this._$g;aJ = this._$w;while (--aH >= 0) {\n aI[aN++] = aT * aK[aQ++] + aR;aI[aN++] = aL * aK[aQ++] + aJ;\n }return;case aD._$fo:\n aT = this._$7;aL = this._$g;while (--aH >= 0) {\n aI[aN++] = aT * aK[aQ++];aI[aN++] = aL * aK[aQ++];\n }return;case aD._$gb:\n aR = this._$k;aJ = this._$w;while (--aH >= 0) {\n aI[aN++] = aK[aQ++] + aR;aI[aN++] = aK[aQ++] + aJ;\n }return;case aD.STATE_IDENTITY:\n if (aK != aI || aQ != aN) {\n P._$jT(aK, aQ, aI, aN, aH * 2);\n }return;}\n };aD.prototype.update = function () {\n if (this._$H == 0 && this._$f == 0) {\n if (this._$7 == 1 && this._$g == 1) {\n if (this._$k == 0 && this._$w == 0) {\n this._$hi = aD.STATE_IDENTITY;this._$Z = aD._$pS;\n } else {\n this._$hi = aD._$gb;this._$Z = aD._$hb;\n }\n } else {\n if (this._$k == 0 && this._$w == 0) {\n this._$hi = aD._$fo;this._$Z = aD._$kS;\n } else {\n this._$hi = aD._$fo | aD._$gb;this._$Z = aD._$kS;\n }\n }\n } else {\n if (this._$7 == 0 && this._$g == 0) {\n if (this._$k == 0 && this._$w == 0) {\n this._$hi = aD._$go;this._$Z = aD._$kS;\n } else {\n this._$hi = aD._$go | aD._$gb;this._$Z = aD._$kS;\n }\n } else {\n if (this._$k == 0 && this._$w == 0) {\n this._$hi = aD._$go | aD._$fo;this._$Z = aD._$kS;\n } else {\n this._$hi = aD._$go | aD._$fo | aD._$gb;this._$Z = aD._$kS;\n }\n }\n }\n };aD.prototype._$RT = function (aK) {\n this._$IT(aK);var aJ = aK[0];var aH = aK[2];var aN = aK[1];var aM = aK[3];var aI = Math.sqrt(aJ * aJ + aN * aN);var aL = aJ * aM - aH * aN;if (aI == 0) {\n if (Q._$so) {\n console.log("affine._$RT() / rt==0");\n }\n } else {\n aK[0] = aI;aK[1] = aL / aI;aK[2] = (aN * aM + aJ * aH) / aL;aK[3] = Math.atan2(aN, aJ);\n }\n };aD.prototype._$ho = function (aN, aM, aI, aH) {\n var aL = new Float32Array(6);var aK = new Float32Array(6);aN._$RT(aL);aM._$RT(aK);var aJ = new Float32Array(6);aJ[0] = aL[0] + (aK[0] - aL[0]) * aI;aJ[1] = aL[1] + (aK[1] - aL[1]) * aI;aJ[2] = aL[2] + (aK[2] - aL[2]) * aI;aJ[3] = aL[3] + (aK[3] - aL[3]) * aI;aJ[4] = aL[4] + (aK[4] - aL[4]) * aI;aJ[5] = aL[5] + (aK[5] - aL[5]) * aI;aH._$CT(aJ);\n };aD.prototype._$CT = function (aJ) {\n var aI = Math.cos(aJ[3]);var aH = Math.sin(aJ[3]);this._$7 = aJ[0] * aI;this._$f = aJ[0] * aH;this._$H = aJ[1] * (aJ[2] * aI - aH);this._$g = aJ[1] * (aJ[2] * aH + aI);this._$k = aJ[4];this._$w = aJ[5];this.update();\n };aD.prototype._$IT = function (aH) {\n aH[0] = this._$7;aH[1] = this._$f;aH[2] = this._$H;aH[3] = this._$g;aH[4] = this._$k;aH[5] = this._$w;\n };function Y() {\n if (j) {\n return;\n }ah.prototype.constructor.call(this);this.motions = new Array();this._$7r = null;this._$7r = Y._$Co++;this._$D0 = 30;this._$yT = 0;this._$E = true;this.loopFadeIn = true;this._$AS = -1;_$a0();\n }Y.prototype = new ah();Y._$cs = "VISIBLE:";Y._$ar = "LAYOUT:";Y._$Co = 0;Y._$D2 = [];Y._$1T = 1;Y.loadMotion = function (aR) {\n var aM = new Y();var aI = [0];var aP = aR.length;aM._$yT = 0;for (var aJ = 0; aJ < aP; ++aJ) {\n var aQ = aR[aJ] & 255;if (aQ == "\\n" || aQ == "\\r") {\n continue;\n }if (aQ == "#") {\n for (; aJ < aP; ++aJ) {\n if (aR[aJ] == "\\n" || aR[aJ] == "\\r") {\n break;\n }\n }continue;\n }if (aQ == "$") {\n var aT = aJ;var aK = -1;for (; aJ < aP; ++aJ) {\n aQ = aR[aJ] & 255;if (aQ == "\\r" || aQ == "\\n") {\n break;\n }if (aQ == "=") {\n aK = aJ;break;\n }\n }var aO = false;if (aK >= 0) {\n if (aK == aT + 4 && aR[aT + 1] == "f" && aR[aT + 2] == "p" && aR[aT + 3] == "s") {\n aO = true;\n }for (aJ = aK + 1; aJ < aP; ++aJ) {\n aQ = aR[aJ] & 255;if (aQ == "\\r" || aQ == "\\n") {\n break;\n }if (aQ == "," || aQ == " " || aQ == "\\t") {\n continue;\n }var aL = G._$LS(aR, aP, aJ, aI);if (aI[0] > 0) {\n if (aO && 5 < aL && aL < 121) {\n aM._$D0 = aL;\n }\n }aJ = aI[0];\n }\n }for (; aJ < aP; ++aJ) {\n if (aR[aJ] == "\\n" || aR[aJ] == "\\r") {\n break;\n }\n }continue;\n }if ("a" <= aQ && aQ <= "z" || "A" <= aQ && aQ <= "Z" || aQ == "_") {\n var aT = aJ;var aK = -1;for (; aJ < aP; ++aJ) {\n aQ = aR[aJ] & 255;if (aQ == "\\r" || aQ == "\\n") {\n break;\n }if (aQ == "=") {\n aK = aJ;break;\n }\n }if (aK >= 0) {\n var aN = new t();if (G.startsWith(aR, aT, Y._$cs)) {\n aN._$RP = t._$hs;aN._$4P = new String(aR, aT, aK - aT);\n } else {\n if (G.startsWith(aR, aT, Y._$ar)) {\n aN._$4P = new String(aR, aT + 7, aK - aT - 7);if (G.startsWith(aR, aT + 7, "ANCHOR_X")) {\n aN._$RP = t._$xs;\n } else {\n if (G.startsWith(aR, aT + 7, "ANCHOR_Y")) {\n aN._$RP = t._$us;\n } else {\n if (G.startsWith(aR, aT + 7, "SCALE_X")) {\n aN._$RP = t._$qs;\n } else {\n if (G.startsWith(aR, aT + 7, "SCALE_Y")) {\n aN._$RP = t._$Ys;\n } else {\n if (G.startsWith(aR, aT + 7, "X")) {\n aN._$RP = t._$ws;\n } else {\n if (G.startsWith(aR, aT + 7, "Y")) {\n aN._$RP = t._$Ns;\n }\n }\n }\n }\n }\n }\n } else {\n aN._$RP = t._$Fr;aN._$4P = new String(aR, aT, aK - aT);\n }\n }aM.motions.push(aN);var aS = 0;Y._$D2.clear();for (aJ = aK + 1; aJ < aP; ++aJ) {\n aQ = aR[aJ] & 255;if (aQ == "\\r" || aQ == "\\n") {\n break;\n }if (aQ == "," || aQ == " " || aQ == "\\t") {\n continue;\n }var aL = G._$LS(aR, aP, aJ, aI);if (aI[0] > 0) {\n Y._$D2.push(aL);aS++;var aH = aI[0];if (aH < aJ) {\n console.log("_$n0 _$hi . @Live2DMotion loadMotion()\\n");break;\n }aJ = aH;\n }\n }aN._$I0 = Y._$D2._$BL();if (aS > aM._$yT) {\n aM._$yT = aS;\n }\n }\n }\n }aM._$AS = 1000 * aM._$yT / aM._$D0 | 0;return aM;\n };Y.prototype.getDurationMSec = function () {\n return this._$AS;\n };Y.prototype.dump = function () {\n for (var aJ = 0; aJ < this.motions.length; aJ++) {\n var aH = this.motions[aJ];console.log("_$wL[%s] [%d]. ", aH._$4P, aH._$I0.length);for (var aI = 0; aI < aH._$I0.length && aI < 10; aI++) {\n console.log("%5.2f ,", aH._$I0[aI]);\n }console.log("\\n");\n }\n };Y.prototype.updateParamExe = function (aH, aL, aO, aX) {\n var aM = aL - aX._$z2;var aV = aM * this._$D0 / 1000;var aJ = aV | 0;var aP = aV - aJ;for (var aU = 0; aU < this.motions.length; aU++) {\n var aS = this.motions[aU];var aK = aS._$I0.length;var aQ = aS._$4P;if (aS._$RP == t._$hs) {\n var aT = aS._$I0[aJ >= aK ? aK - 1 : aJ];aH.setParamFloat(aQ, aT);\n } else {\n if (t._$ws <= aS._$RP && aS._$RP <= t._$Ys) {} else {\n var aR = aH.getParamFloat(aQ);var aY = aS._$I0[aJ >= aK ? aK - 1 : aJ];var aW = aS._$I0[aJ + 1 >= aK ? aK - 1 : aJ + 1];var aI = aY + (aW - aY) * aP;var aN = aR + (aI - aR) * aO;aH.setParamFloat(aQ, aN);\n }\n }\n }if (aJ >= this._$yT) {\n if (this._$E) {\n aX._$z2 = aL;if (this.loopFadeIn) {\n aX._$bs = aL;\n }\n } else {\n aX._$9L = true;\n }\n }\n };Y.prototype._$r0 = function () {\n return this._$E;\n };Y.prototype._$aL = function (aH) {\n this._$E = aH;\n };Y.prototype.isLoopFadeIn = function () {\n return this.loopFadeIn;\n };Y.prototype.setLoopFadeIn = function (aH) {\n this.loopFadeIn = aH;\n };function aE() {\n this._$P = new Float32Array(100);this.size = 0;\n }aE.prototype.clear = function () {\n this.size = 0;\n };aE.prototype.add = function (aI) {\n if (this._$P.length <= this.size) {\n var aH = new Float32Array(this.size * 2);P._$jT(this._$P, 0, aH, 0, this.size);this._$P = aH;\n }this._$P[this.size++] = aI;\n };aE.prototype._$BL = function () {\n var aH = new Float32Array(this.size);P._$jT(this._$P, 0, aH, 0, this.size);return aH;\n };function t() {\n this._$4P = null;this._$I0 = null;this._$RP = null;\n }t._$Fr = 0;t._$hs = 1;t._$ws = 100;t._$Ns = 101;t._$xs = 102;t._$us = 103;t._$qs = 104;t._$Ys = 105;function aw() {}aw._$Ms = 1;aw._$Qs = 2;aw._$i2 = 0;aw._$No = 2;aw._$do = aw._$Ms;aw._$Ls = true;aw._$1r = 5;aw._$Qb = 65;aw._$J = 0.0001;aw._$FT = 0.001;aw._$Ss = 3;function ay() {}ay._$o7 = 6;ay._$S7 = 7;ay._$s7 = 8;ay._$77 = 9;ay.LIVE2D_FORMAT_VERSION_V2_10_SDK2 = 10;ay.LIVE2D_FORMAT_VERSION_V2_11_SDK2_1 = 11;ay._$T7 = ay.LIVE2D_FORMAT_VERSION_V2_11_SDK2_1;ay._$Is = -2004318072;ay._$h0 = 0;ay._$4L = 23;ay._$7P = 33;ay._$uT = function (aH) {\n console.log("_$bo :: _$6 _$mo _$E0 : %d\\n", aH);\n };ay._$9o = function (aH) {\n if (aH < 40) {\n ay._$uT(aH);return null;\n } else {\n if (aH < 50) {\n ay._$uT(aH);return null;\n } else {\n if (aH < 60) {\n ay._$uT(aH);return null;\n } else {\n if (aH < 100) {\n switch (aH) {case 65:\n return new E();case 66:\n return new g();case 67:\n return new aA();case 68:\n return new ab();case 69:\n return new X();case 70:\n return new b();default:\n ay._$uT(aH);return null;}\n } else {\n if (aH < 150) {\n switch (aH) {case 131:\n return new f();case 133:\n return new s();case 136:\n return new w();case 137:\n return new an();case 142:\n return new aq();}\n }\n }\n }\n }\n }ay._$uT(aH);return null;\n };function y(aH) {\n if (j) {\n return;\n }this._$QT = true;this._$co = -1;this._$qo = 0;this._$pb = new Array(y._$is);this._$_2 = new Float32Array(y._$is);this._$vr = new Float32Array(y._$is);this._$Rr = new Float32Array(y._$is);this._$Or = new Float32Array(y._$is);this._$fs = new Float32Array(y._$is);this._$Js = new Array(y._$is);this._$3S = new Array();this._$aS = new Array();this._$Bo = null;this._$F2 = new Array();this._$db = new Array();this._$8b = new Array();this._$Hr = new Array();this._$Ws = null;this._$Vs = null;this._$Er = null;this._$Es = new Int16Array(aw._$Qb);this._$ZP = new Float32Array(aw._$1r * 2);this._$Ri = aH;this._$b0 = y._$HP++;this.clipManager = null;this.dp_webgl = null;\n }y._$HP = 0;y._$_0 = true;y._$V2 = -1;y._$W0 = -1;y._$jr = false;y._$ZS = true;y._$tr = -1000000;y._$lr = 1000000;y._$is = 32;y._$e = false;y.prototype.getDrawDataIndex = function (aI) {\n for (var aH = this._$aS.length - 1; aH >= 0; --aH) {\n if (this._$aS[aH] != null && this._$aS[aH].getDrawDataID() == aI) {\n return aH;\n }\n }return -1;\n };y.prototype.getDrawData = function (aH) {\n if (aH instanceof Z) {\n if (this._$Bo == null) {\n this._$Bo = new Object();var aJ = this._$aS.length;for (var aI = 0; aI < aJ; aI++) {\n var aL = this._$aS[aI];var aK = aL.getDrawDataID();if (aK == null) {\n continue;\n }this._$Bo[aK] = aL;\n }\n }return this._$Bo[id];\n } else {\n if (aH < this._$aS.length) {\n return this._$aS[aH];\n } else {\n return null;\n }\n }\n };y.prototype.release = function () {\n this._$3S.clear();this._$aS.clear();this._$F2.clear();if (this._$Bo != null) {\n this._$Bo.clear();\n }this._$db.clear();this._$8b.clear();this._$Hr.clear();\n };y.prototype.init = function () {\n this._$co++;if (this._$F2.length > 0) {\n this.release();\n }var aO = this._$Ri.getModelImpl();var aT = aO._$Xr();var aS = aT.length;var aH = new Array();var a3 = new Array();for (var aV = 0; aV < aS; ++aV) {\n var a4 = aT[aV];this._$F2.push(a4);this._$Hr.push(a4.init(this));var aK = a4.getBaseData();var aR = aK.length;for (var aU = 0; aU < aR; ++aU) {\n aH.push(aK[aU]);\n }for (var aU = 0; aU < aR; ++aU) {\n var aM = aK[aU].init(this);aM._$l2(aV);a3.push(aM);\n }var a1 = a4.getDrawData();var aP = a1.length;for (var aU = 0; aU < aP; ++aU) {\n var aZ = a1[aU];var a0 = aZ.init(this);a0._$IP = aV;this._$aS.push(aZ);this._$8b.push(a0);\n }\n }var aY = aH.length;var aN = n._$2o();while (true) {\n var aX = false;for (var aV = 0; aV < aY; ++aV) {\n var aL = aH[aV];if (aL == null) {\n continue;\n }var a2 = aL.getTargetBaseDataID();if (a2 == null || a2 == aN || this.getBaseDataIndex(a2) >= 0) {\n this._$3S.push(aL);this._$db.push(a3[aV]);aH[aV] = null;aX = true;\n }\n }if (!aX) {\n break;\n }\n }var aI = aO._$E2();if (aI != null) {\n var aJ = aI._$1s();if (aJ != null) {\n var aW = aJ.length;for (var aV = 0; aV < aW; ++aV) {\n var aQ = aJ[aV];if (aQ == null) {\n continue;\n }this._$02(aQ.getParamID(), aQ.getDefaultValue(), aQ.getMinValue(), aQ.getMaxValue());\n }\n }\n }this.clipManager = new W(this.dp_webgl);this.clipManager.init(this, this._$aS, this._$8b);this._$QT = true;\n };y.prototype.update = function () {\n if (y._$e) {\n q.start("_$zL");\n }var aK = this._$_2.length;for (var aW = 0; aW < aK; aW++) {\n if (this._$_2[aW] != this._$vr[aW]) {\n this._$Js[aW] = y._$ZS;this._$vr[aW] = this._$_2[aW];\n }\n }var aX = false;var aQ = this._$3S.length;var aN = this._$aS.length;var aS = a._$or();var aZ = a._$Pr();var aU = aZ - aS + 1;if (this._$Ws == null || this._$Ws.length < aU) {\n this._$Ws = new Int16Array(aU);this._$Vs = new Int16Array(aU);\n }for (var aW = 0; aW < aU; aW++) {\n this._$Ws[aW] = y._$V2;this._$Vs[aW] = y._$V2;\n }if (this._$Er == null || this._$Er.length < aN) {\n this._$Er = new Int16Array(aN);\n }for (var aW = 0; aW < aN; aW++) {\n this._$Er[aW] = y._$W0;\n }if (y._$e) {\n q.dump("_$zL");\n }if (y._$e) {\n q.start("_$UL");\n }var aL = null;for (var aV = 0; aV < aQ; ++aV) {\n var aJ = this._$3S[aV];var aH = this._$db[aV];try {\n aJ._$Nr(this, aH);aJ._$2b(this, aH);\n } catch (aY) {\n if (aL == null) {\n aL = aY;\n }\n }\n }if (aL != null) {\n if (y._$_0) {\n q._$Rb(aL);\n }\n }if (y._$e) {\n q.dump("_$UL");\n }if (y._$e) {\n q.start("_$DL");\n }var aR = null;for (var aO = 0; aO < aN; ++aO) {\n var aM = this._$aS[aO];var aI = this._$8b[aO];try {\n aM._$Nr(this, aI);if (aI._$u2()) {\n continue;\n }aM._$2b(this, aI);var aT = Math.floor(aM._$zS(this, aI) - aS);var aP;try {\n aP = this._$Vs[aT];\n } catch (aY) {\n console.log("_$li :: %s / %s \t\t\t\t@@_$fS\\n", aY.toString(), aM.getDrawDataID().toString());aT = Math.floor(aM._$zS(this, aI) - aS);continue;\n }if (aP == y._$V2) {\n this._$Ws[aT] = aO;\n } else {\n this._$Er[aP] = aO;\n }this._$Vs[aT] = aO;\n } catch (aY) {\n if (aR == null) {\n aR = aY;Q._$sT(Q._$H7);\n }\n }\n }if (aR != null) {\n if (y._$_0) {\n q._$Rb(aR);\n }\n }if (y._$e) {\n q.dump("_$DL");\n }if (y._$e) {\n q.start("_$eL");\n }for (var aW = this._$Js.length - 1; aW >= 0; aW--) {\n this._$Js[aW] = y._$jr;\n }this._$QT = false;if (y._$e) {\n q.dump("_$eL");\n }return aX;\n };y.prototype.preDraw = function (aH) {\n if (this.clipManager != null) {\n aH._$ZT();this.clipManager.setupClip(this, aH);\n }\n };y.prototype.draw = function (aM) {\n if (this._$Ws == null) {\n q._$li("call _$Ri.update() before _$Ri.draw() ");return;\n }var aP = this._$Ws.length;aM._$ZT();for (var aK = 0; aK < aP; ++aK) {\n var aN = this._$Ws[aK];if (aN == y._$V2) {\n continue;\n }do {\n var aH = this._$aS[aN];var aI = this._$8b[aN];if (aI._$yo()) {\n var aJ = aI._$IP;var aL = this._$Hr[aJ];aI._$VS = aL.getPartsOpacity();aH.draw(aM, this, aI);\n }var aO = this._$Er[aN];if (aO <= aN || aO == y._$W0) {\n break;\n }aN = aO;\n } while (true);\n }\n };y.prototype.getParamIndex = function (aH) {\n for (var aI = this._$pb.length - 1; aI >= 0; --aI) {\n if (this._$pb[aI] == aH) {\n return aI;\n }\n }return this._$02(aH, 0, y._$tr, y._$lr);\n };y.prototype._$BS = function (aH) {\n return this.getBaseDataIndex(aH);\n };y.prototype.getBaseDataIndex = function (aH) {\n for (var aI = this._$3S.length - 1; aI >= 0; --aI) {\n if (this._$3S[aI] != null && this._$3S[aI].getBaseDataID() == aH) {\n return aI;\n }\n }return -1;\n };y.prototype._$UT = function (aJ, aH) {\n var aI = new Float32Array(aH);P._$jT(aJ, 0, aI, 0, aJ.length);return aI;\n };y.prototype._$02 = function (aN, aM, aL, aH) {\n if (this._$qo >= this._$pb.length) {\n var aK = this._$pb.length;var aJ = new Array(aK * 2);P._$jT(this._$pb, 0, aJ, 0, aK);this._$pb = aJ;this._$_2 = this._$UT(this._$_2, aK * 2);this._$vr = this._$UT(this._$vr, aK * 2);this._$Rr = this._$UT(this._$Rr, aK * 2);this._$Or = this._$UT(this._$Or, aK * 2);var aI = new Array();P._$jT(this._$Js, 0, aI, 0, aK);this._$Js = aI;\n }this._$pb[this._$qo] = aN;this._$_2[this._$qo] = aM;this._$vr[this._$qo] = aM;this._$Rr[this._$qo] = aL;this._$Or[this._$qo] = aH;this._$Js[this._$qo] = y._$ZS;return this._$qo++;\n };y.prototype._$Zo = function (aI, aH) {\n this._$3S[aI] = aH;\n };y.prototype.setParamFloat = function (aH, aI) {\n if (aI < this._$Rr[aH]) {\n aI = this._$Rr[aH];\n }if (aI > this._$Or[aH]) {\n aI = this._$Or[aH];\n }this._$_2[aH] = aI;\n };y.prototype.loadParam = function () {\n var aH = this._$_2.length;if (aH > this._$fs.length) {\n aH = this._$fs.length;\n }P._$jT(this._$fs, 0, this._$_2, 0, aH);\n };y.prototype.saveParam = function () {\n var aH = this._$_2.length;if (aH > this._$fs.length) {\n this._$fs = new Float32Array(aH);\n }P._$jT(this._$_2, 0, this._$fs, 0, aH);\n };y.prototype._$v2 = function () {\n return this._$co;\n };y.prototype._$WS = function () {\n return this._$QT;\n };y.prototype._$Xb = function (aH) {\n return this._$Js[aH] == y._$ZS;\n };y.prototype._$vs = function () {\n return this._$Es;\n };y.prototype._$Tr = function () {\n return this._$ZP;\n };y.prototype.getBaseData = function (aH) {\n return this._$3S[aH];\n };y.prototype.getParamFloat = function (aH) {\n return this._$_2[aH];\n };y.prototype.getParamMax = function (aH) {\n return this._$Or[aH];\n };y.prototype.getParamMin = function (aH) {\n return this._$Rr[aH];\n };y.prototype.setPartsOpacity = function (aJ, aH) {\n var aI = this._$Hr[aJ];aI.setPartsOpacity(aH);\n };y.prototype.getPartsOpacity = function (aI) {\n var aH = this._$Hr[aI];return aH.getPartsOpacity();\n };y.prototype.getPartsDataIndex = function (aI) {\n for (var aH = this._$F2.length - 1; aH >= 0; --aH) {\n if (this._$F2[aH] != null && this._$F2[aH]._$p2() == aI) {\n return aH;\n }\n }return -1;\n };y.prototype._$q2 = function (aH) {\n return this._$db[aH];\n };y.prototype._$C2 = function (aH) {\n return this._$8b[aH];\n };y.prototype._$Bb = function (aH) {\n return this._$Hr[aH];\n };y.prototype._$5s = function (aO, aK) {\n var aJ = this._$Ws.length;var aN = aO;for (var aL = 0; aL < aJ; ++aL) {\n var aI = this._$Ws[aL];if (aI == y._$V2) {\n continue;\n }do {\n var aM = this._$8b[aI];if (aM._$yo()) {\n aM._$GT()._$B2(this, aM, aN);aN += aK;\n }var aH = this._$Er[aI];if (aH <= aI || aH == y._$W0) {\n break;\n }aI = aH;\n } while (true);\n }\n };y.prototype.setDrawParam = function (aH) {\n this.dp_webgl = aH;\n };y.prototype.getDrawParam = function () {\n return this.dp_webgl;\n };function ap() {}ap._$0T = function (aH) {\n return ap._$0T(new _$5(aH));\n };ap._$0T = function (aJ) {\n if (!aJ.exists()) {\n throw new _$ls(aJ._$3b());\n }var aH = aJ.length();var aI = new Int8Array(aH);var aM = new _$Xs(new _$kb(aJ), 8192);var aK;var aL = 0;while ((aK = aM.read(aI, aL, aH - aL)) > 0) {\n aL += aK;\n }return aI;\n };ap._$C = function (aJ) {\n var aI = null;var aL = null;try {\n aI = aJ instanceof Array ? aJ : new _$Xs(aJ, 8192);aL = new _$js();var aM = 1000;var aK;var aH = new Int8Array(aM);while ((aK = aI.read(aH)) > 0) {\n aL.write(aH, 0, aK);\n }return aL._$TS();\n } finally {\n if (aJ != null) {\n aJ.close();\n }if (aL != null) {\n aL.flush();aL.close();\n }\n }\n };function ar() {\n if (j) {\n return;\n }this._$12 = null;this._$bb = null;this._$_L = null;this._$jo = null;this._$iL = null;this._$0L = null;this._$Br = null;this._$Dr = null;this._$Cb = null;this._$mr = null;this._$_L = az.STATE_FIRST;this._$Br = 4000;this._$Dr = 100;this._$Cb = 50;this._$mr = 150;this._$jo = true;this._$iL = "PARAM_EYE_L_OPEN";this._$0L = "PARAM_EYE_R_OPEN";\n }ar.prototype._$T2 = function () {\n var aI = P.getUserTimeMSec();var aH = Math._$10();return aI + aH * (2 * this._$Br - 1);\n };ar.prototype._$uo = function (aH) {\n this._$Br = aH;\n };ar.prototype._$QS = function (aI, aH, aJ) {\n this._$Dr = aI;this._$Cb = aH;this._$mr = aJ;\n };ar.prototype._$7T = function (aI) {\n var aK = P.getUserTimeMSec();var aH;var aJ = 0;switch (this._$_L) {case STATE_CLOSING:\n aJ = (aK - this._$bb) / this._$Dr;if (aJ >= 1) {\n aJ = 1;this._$_L = az.STATE_CLOSED;this._$bb = aK;\n }aH = 1 - aJ;break;case STATE_CLOSED:\n aJ = (aK - this._$bb) / this._$Cb;if (aJ >= 1) {\n this._$_L = az.STATE_OPENING;this._$bb = aK;\n }aH = 0;break;case STATE_OPENING:\n aJ = (aK - this._$bb) / this._$mr;if (aJ >= 1) {\n aJ = 1;this._$_L = az.STATE_INTERVAL;this._$12 = this._$T2();\n }aH = aJ;break;case STATE_INTERVAL:\n if (this._$12 < aK) {\n this._$_L = az.STATE_CLOSING;this._$bb = aK;\n }aH = 1;break;case STATE_FIRST:default:\n this._$_L = az.STATE_INTERVAL;this._$12 = this._$T2();aH = 1;break;}if (!this._$jo) {\n aH = -aH;\n }aI.setParamFloat(this._$iL, aH);aI.setParamFloat(this._$0L, aH);\n };var az = function az() {};az.STATE_FIRST = "STATE_FIRST";az.STATE_INTERVAL = "STATE_INTERVAL";az.STATE_CLOSING = "STATE_CLOSING";az.STATE_CLOSED = "STATE_CLOSED";az.STATE_OPENING = "STATE_OPENING";function x() {\n if (j) {\n return;\n }ax.prototype.constructor.call(this);this._$sb = new Int32Array(x._$As);this._$U2 = new Array();this.transform = null;this.gl = null;if (x._$NT == null) {\n x._$NT = x._$9r(256);x._$vS = x._$9r(256);x._$no = x._$vb(256);\n }\n }x.prototype = new ax();x._$As = 32;x._$Gr = false;x._$NT = null;x._$vS = null;x._$no = null;x._$9r = function (aH) {\n var aI = new Float32Array(aH);return aI;\n };x._$vb = function (aH) {\n var aI = new Int16Array(aH);return aI;\n };x._$cr = function (aI, aH) {\n if (aI == null || aI._$yL() < aH.length) {\n aI = x._$9r(aH.length * 2);aI.put(aH);aI._$oT(0);\n } else {\n aI.clear();aI.put(aH);aI._$oT(0);\n }return aI;\n };x._$mb = function (aI, aH) {\n if (aI == null || aI._$yL() < aH.length) {\n aI = x._$vb(aH.length * 2);aI.put(aH);aI._$oT(0);\n } else {\n aI.clear();aI.put(aH);aI._$oT(0);\n }return aI;\n };x._$Hs = function () {\n return x._$Gr;\n };x._$as = function (aH) {\n x._$Gr = aH;\n };x.prototype.setGL = function (aH) {\n this.gl = aH;\n };x.prototype.setTransform = function (aH) {\n this.transform = aH;\n };x.prototype._$ZT = function () {};x.prototype._$Uo = function (aO, aH, aP, aI, aQ, aM, aK, aJ) {\n if (aM < 0.01) {\n return;\n }var aL = this._$U2[aO];var aN = aM > 0.9 ? Q.EXPAND_W : 0;this.gl.drawElements(aL, aP, aI, aQ, aM, aN, this.transform, aJ);\n };x.prototype._$Rs = function () {\n throw new Error("_$Rs");\n };x.prototype._$Ds = function (aH) {\n throw new Error("_$Ds");\n };x.prototype._$K2 = function () {\n for (var aH = 0; aH < this._$sb.length; aH++) {\n var aI = this._$sb[aH];if (aI != 0) {\n this.gl._$Sr(1, this._$sb, aH);this._$sb[aH] = 0;\n }\n }\n };x.prototype.setTexture = function (aI, aH) {\n if (this._$sb.length < aI + 1) {\n this._$nS(aI);\n }this._$sb[aI] = aH;\n };x.prototype.setTexture = function (aH, aI) {\n if (this._$sb.length < aH + 1) {\n this._$nS(aH);\n }this._$U2[aH] = aI;\n };x.prototype._$nS = function (aH) {\n var aK = Math.max(this._$sb.length * 2, aH + 1 + 10);var aI = new Int32Array(aK);P._$jT(this._$sb, 0, aI, 0, this._$sb.length);this._$sb = aI;var aJ = new Array();P._$jT(this._$U2, 0, aJ, 0, this._$U2.length);this._$U2 = aJ;\n };function ab() {\n if (j) {\n return;\n }c.prototype.constructor.call(this);this._$GS = null;this._$Y0 = null;\n }ab.prototype = new c();ab._$Xo = new Float32Array(2);ab._$io = new Float32Array(2);ab._$0o = new Float32Array(2);ab._$Lo = new Float32Array(2);ab._$To = new Float32Array(2);ab._$Po = new Float32Array(2);ab._$gT = new Array();ab.prototype._$zP = function () {\n this._$GS = new g();this._$GS._$zP();this._$Y0 = new Array();\n };ab.prototype.getType = function () {\n return c._$c2;\n };ab.prototype._$F0 = function (aH) {\n c.prototype._$F0.call(this, aH);this._$GS = aH._$nP();this._$Y0 = aH._$nP();c.prototype.readV2_opacity.call(this, aH);\n };ab.prototype.init = function (aH) {\n var aI = new al(this);aI._$Yr = new X();if (this._$32()) {\n aI._$Wr = new X();\n }return aI;\n };ab.prototype._$Nr = function (bf, bx) {\n if (!(this == bx._$GT())) {\n console.log("### assert!! ### ");\n }var bm = bx;if (!this._$GS._$Ur(bf)) {\n return;\n }var bw = ab._$gT;bw[0] = false;var a2 = this._$GS._$Q2(bf, bw);bx._$Ib(bw[0]);this.interpolateOpacity(bf, this._$GS, bx, bw);var a3 = bf._$vs();var ba = bf._$Tr();this._$GS._$zr(a3, ba, a2);if (a2 <= 0) {\n var bn = this._$Y0[a3[0]];bm._$Yr.init(bn);\n } else {\n if (a2 == 1) {\n var bn = this._$Y0[a3[0]];var bl = this._$Y0[a3[1]];var a9 = ba[0];bm._$Yr._$fL = bn._$fL + (bl._$fL - bn._$fL) * a9;bm._$Yr._$gL = bn._$gL + (bl._$gL - bn._$gL) * a9;bm._$Yr._$B0 = bn._$B0 + (bl._$B0 - bn._$B0) * a9;bm._$Yr._$z0 = bn._$z0 + (bl._$z0 - bn._$z0) * a9;bm._$Yr._$qT = bn._$qT + (bl._$qT - bn._$qT) * a9;\n } else {\n if (a2 == 2) {\n var bn = this._$Y0[a3[0]];var bl = this._$Y0[a3[1]];var a1 = this._$Y0[a3[2]];var a0 = this._$Y0[a3[3]];var a9 = ba[0];var a8 = ba[1];var bC = bn._$fL + (bl._$fL - bn._$fL) * a9;var bB = a1._$fL + (a0._$fL - a1._$fL) * a9;bm._$Yr._$fL = bC + (bB - bC) * a8;bC = bn._$gL + (bl._$gL - bn._$gL) * a9;bB = a1._$gL + (a0._$gL - a1._$gL) * a9;bm._$Yr._$gL = bC + (bB - bC) * a8;bC = bn._$B0 + (bl._$B0 - bn._$B0) * a9;bB = a1._$B0 + (a0._$B0 - a1._$B0) * a9;bm._$Yr._$B0 = bC + (bB - bC) * a8;bC = bn._$z0 + (bl._$z0 - bn._$z0) * a9;bB = a1._$z0 + (a0._$z0 - a1._$z0) * a9;bm._$Yr._$z0 = bC + (bB - bC) * a8;bC = bn._$qT + (bl._$qT - bn._$qT) * a9;bB = a1._$qT + (a0._$qT - a1._$qT) * a9;bm._$Yr._$qT = bC + (bB - bC) * a8;\n } else {\n if (a2 == 3) {\n var aP = this._$Y0[a3[0]];var aO = this._$Y0[a3[1]];var bu = this._$Y0[a3[2]];var bs = this._$Y0[a3[3]];var aK = this._$Y0[a3[4]];var aJ = this._$Y0[a3[5]];var bj = this._$Y0[a3[6]];var bi = this._$Y0[a3[7]];var a9 = ba[0];var a8 = ba[1];var a6 = ba[2];var bC = aP._$fL + (aO._$fL - aP._$fL) * a9;var bB = bu._$fL + (bs._$fL - bu._$fL) * a9;var bz = aK._$fL + (aJ._$fL - aK._$fL) * a9;var by = bj._$fL + (bi._$fL - bj._$fL) * a9;bm._$Yr._$fL = (1 - a6) * (bC + (bB - bC) * a8) + a6 * (bz + (by - bz) * a8);bC = aP._$gL + (aO._$gL - aP._$gL) * a9;bB = bu._$gL + (bs._$gL - bu._$gL) * a9;bz = aK._$gL + (aJ._$gL - aK._$gL) * a9;by = bj._$gL + (bi._$gL - bj._$gL) * a9;bm._$Yr._$gL = (1 - a6) * (bC + (bB - bC) * a8) + a6 * (bz + (by - bz) * a8);bC = aP._$B0 + (aO._$B0 - aP._$B0) * a9;bB = bu._$B0 + (bs._$B0 - bu._$B0) * a9;bz = aK._$B0 + (aJ._$B0 - aK._$B0) * a9;by = bj._$B0 + (bi._$B0 - bj._$B0) * a9;bm._$Yr._$B0 = (1 - a6) * (bC + (bB - bC) * a8) + a6 * (bz + (by - bz) * a8);bC = aP._$z0 + (aO._$z0 - aP._$z0) * a9;bB = bu._$z0 + (bs._$z0 - bu._$z0) * a9;bz = aK._$z0 + (aJ._$z0 - aK._$z0) * a9;by = bj._$z0 + (bi._$z0 - bj._$z0) * a9;bm._$Yr._$z0 = (1 - a6) * (bC + (bB - bC) * a8) + a6 * (bz + (by - bz) * a8);bC = aP._$qT + (aO._$qT - aP._$qT) * a9;bB = bu._$qT + (bs._$qT - bu._$qT) * a9;bz = aK._$qT + (aJ._$qT - aK._$qT) * a9;by = bj._$qT + (bi._$qT - bj._$qT) * a9;bm._$Yr._$qT = (1 - a6) * (bC + (bB - bC) * a8) + a6 * (bz + (by - bz) * a8);\n } else {\n if (a2 == 4) {\n var aT = this._$Y0[a3[0]];var aS = this._$Y0[a3[1]];var bE = this._$Y0[a3[2]];var bD = this._$Y0[a3[3]];var aN = this._$Y0[a3[4]];var aM = this._$Y0[a3[5]];var bp = this._$Y0[a3[6]];var bo = this._$Y0[a3[7]];var bh = this._$Y0[a3[8]];var bg = this._$Y0[a3[9]];var aY = this._$Y0[a3[10]];var aW = this._$Y0[a3[11]];var a7 = this._$Y0[a3[12]];var a5 = this._$Y0[a3[13]];var aR = this._$Y0[a3[14]];var aQ = this._$Y0[a3[15]];var a9 = ba[0];var a8 = ba[1];var a6 = ba[2];var a4 = ba[3];var bC = aT._$fL + (aS._$fL - aT._$fL) * a9;var bB = bE._$fL + (bD._$fL - bE._$fL) * a9;var bz = aN._$fL + (aM._$fL - aN._$fL) * a9;var by = bp._$fL + (bo._$fL - bp._$fL) * a9;var bv = bh._$fL + (bg._$fL - bh._$fL) * a9;var bt = aY._$fL + (aW._$fL - aY._$fL) * a9;var br = a7._$fL + (a5._$fL - a7._$fL) * a9;var bq = aR._$fL + (aQ._$fL - aR._$fL) * a9;bm._$Yr._$fL = (1 - a4) * ((1 - a6) * (bC + (bB - bC) * a8) + a6 * (bz + (by - bz) * a8)) + a4 * ((1 - a6) * (bv + (bt - bv) * a8) + a6 * (br + (bq - br) * a8));bC = aT._$gL + (aS._$gL - aT._$gL) * a9;bB = bE._$gL + (bD._$gL - bE._$gL) * a9;bz = aN._$gL + (aM._$gL - aN._$gL) * a9;by = bp._$gL + (bo._$gL - bp._$gL) * a9;bv = bh._$gL + (bg._$gL - bh._$gL) * a9;bt = aY._$gL + (aW._$gL - aY._$gL) * a9;br = a7._$gL + (a5._$gL - a7._$gL) * a9;bq = aR._$gL + (aQ._$gL - aR._$gL) * a9;bm._$Yr._$gL = (1 - a4) * ((1 - a6) * (bC + (bB - bC) * a8) + a6 * (bz + (by - bz) * a8)) + a4 * ((1 - a6) * (bv + (bt - bv) * a8) + a6 * (br + (bq - br) * a8));bC = aT._$B0 + (aS._$B0 - aT._$B0) * a9;bB = bE._$B0 + (bD._$B0 - bE._$B0) * a9;bz = aN._$B0 + (aM._$B0 - aN._$B0) * a9;by = bp._$B0 + (bo._$B0 - bp._$B0) * a9;bv = bh._$B0 + (bg._$B0 - bh._$B0) * a9;bt = aY._$B0 + (aW._$B0 - aY._$B0) * a9;br = a7._$B0 + (a5._$B0 - a7._$B0) * a9;bq = aR._$B0 + (aQ._$B0 - aR._$B0) * a9;bm._$Yr._$B0 = (1 - a4) * ((1 - a6) * (bC + (bB - bC) * a8) + a6 * (bz + (by - bz) * a8)) + a4 * ((1 - a6) * (bv + (bt - bv) * a8) + a6 * (br + (bq - br) * a8));bC = aT._$z0 + (aS._$z0 - aT._$z0) * a9;bB = bE._$z0 + (bD._$z0 - bE._$z0) * a9;bz = aN._$z0 + (aM._$z0 - aN._$z0) * a9;by = bp._$z0 + (bo._$z0 - bp._$z0) * a9;bv = bh._$z0 + (bg._$z0 - bh._$z0) * a9;bt = aY._$z0 + (aW._$z0 - aY._$z0) * a9;br = a7._$z0 + (a5._$z0 - a7._$z0) * a9;bq = aR._$z0 + (aQ._$z0 - aR._$z0) * a9;bm._$Yr._$z0 = (1 - a4) * ((1 - a6) * (bC + (bB - bC) * a8) + a6 * (bz + (by - bz) * a8)) + a4 * ((1 - a6) * (bv + (bt - bv) * a8) + a6 * (br + (bq - br) * a8));bC = aT._$qT + (aS._$qT - aT._$qT) * a9;bB = bE._$qT + (bD._$qT - bE._$qT) * a9;bz = aN._$qT + (aM._$qT - aN._$qT) * a9;by = bp._$qT + (bo._$qT - bp._$qT) * a9;bv = bh._$qT + (bg._$qT - bh._$qT) * a9;bt = aY._$qT + (aW._$qT - aY._$qT) * a9;br = a7._$qT + (a5._$qT - a7._$qT) * a9;bq = aR._$qT + (aQ._$qT - aR._$qT) * a9;bm._$Yr._$qT = (1 - a4) * ((1 - a6) * (bC + (bB - bC) * a8) + a6 * (bz + (by - bz) * a8)) + a4 * ((1 - a6) * (bv + (bt - bv) * a8) + a6 * (br + (bq - br) * a8));\n } else {\n var aV = Math.pow(2, a2) | 0;var aZ = new Float32Array(aV);for (var bk = 0; bk < aV; bk++) {\n var aI = bk;var aH = 1;for (var aL = 0; aL < a2; aL++) {\n aH *= aI % 2 == 0 ? 1 - ba[aL] : ba[aL];aI /= 2;\n }aZ[bk] = aH;\n }var bA = new Array();for (var aU = 0; aU < aV; aU++) {\n bA[aU] = this._$Y0[a3[aU]];\n }var be = 0,\n bc = 0,\n bd = 0,\n bb = 0,\n aX = 0;for (var aU = 0; aU < aV; aU++) {\n be += aZ[aU] * bA[aU]._$fL;bc += aZ[aU] * bA[aU]._$gL;bd += aZ[aU] * bA[aU]._$B0;bb += aZ[aU] * bA[aU]._$z0;aX += aZ[aU] * bA[aU]._$qT;\n }bm._$Yr._$fL = be;bm._$Yr._$gL = bc;bm._$Yr._$B0 = bd;bm._$Yr._$z0 = bb;bm._$Yr._$qT = aX;\n }\n }\n }\n }\n }var bn = this._$Y0[a3[0]];bm._$Yr.reflectX = bn.reflectX;bm._$Yr.reflectY = bn.reflectY;\n };ab.prototype._$2b = function (aM, aH) {\n if (!(this == aH._$GT())) {\n console.log("### assert!! ### ");\n }var aR = aH;aR._$hS(true);if (!this._$32()) {\n aR.setTotalScale_notForClient(aR._$Yr._$B0);aR.setTotalOpacity(aR.getInterpolatedOpacity());\n } else {\n var aT = this.getTargetBaseDataID();if (aR._$8r == c._$ur) {\n aR._$8r = aM.getBaseDataIndex(aT);\n }if (aR._$8r < 0) {\n if (Q._$so) {\n q._$li("_$L _$0P _$G :: %s", aT);\n }aR._$hS(false);\n } else {\n var aI = aM.getBaseData(aR._$8r);if (aI != null) {\n var aL = aM._$q2(aR._$8r);var aS = ab._$Xo;aS[0] = aR._$Yr._$fL;aS[1] = aR._$Yr._$gL;var aJ = ab._$io;aJ[0] = 0;aJ[1] = -0.1;var aO = aL._$GT().getType();if (aO == c._$c2) {\n aJ[1] = -10;\n } else {\n aJ[1] = -0.1;\n }var aQ = ab._$0o;this._$Jr(aM, aI, aL, aS, aJ, aQ);var aP = aC._$92(aJ, aQ);aI._$nb(aM, aL, aS, aS, 1, 0, 2);aR._$Wr._$fL = aS[0];aR._$Wr._$gL = aS[1];aR._$Wr._$B0 = aR._$Yr._$B0;aR._$Wr._$z0 = aR._$Yr._$z0;aR._$Wr._$qT = aR._$Yr._$qT - aP * aC._$NS;var aK = aL.getTotalScale();aR.setTotalScale_notForClient(aK * aR._$Wr._$B0);var aN = aL.getTotalOpacity();aR.setTotalOpacity(aN * aR.getInterpolatedOpacity());aR._$Wr.reflectX = aR._$Yr.reflectX;aR._$Wr.reflectY = aR._$Yr.reflectY;aR._$hS(aL._$yo());\n } else {\n aR._$hS(false);\n }\n }\n }\n };ab.prototype._$nb = function (aJ, aR, aL, a4, aT, aO, a2) {\n if (!(this == aR._$GT())) {\n console.log("### assert!! ### ");\n }var aH = aR;var aU = aH._$Wr != null ? aH._$Wr : aH._$Yr;var a0 = Math.sin(aC._$bS * aU._$qT);var aP = Math.cos(aC._$bS * aU._$qT);var a3 = aH.getTotalScale();var aW = aU.reflectX ? -1 : 1;var aV = aU.reflectY ? -1 : 1;var aS = aP * a3 * aW;var aQ = -a0 * a3 * aV;var a1 = a0 * a3 * aW;var aZ = aP * a3 * aV;var aY = aU._$fL;var aX = aU._$gL;var aN, aM;var aI = aT * a2;for (var aK = aO; aK < aI; aK += a2) {\n aN = aL[aK];aM = aL[aK + 1];a4[aK] = aS * aN + aQ * aM + aY;a4[aK + 1] = a1 * aN + aZ * aM + aX;\n }\n };ab.prototype._$Jr = function (aP, aK, aI, aR, aQ, aH) {\n if (!(aK == aI._$GT())) {\n console.log("### assert!! ### ");\n }var aO = ab._$Lo;ab._$Lo[0] = aR[0];ab._$Lo[1] = aR[1];aK._$nb(aP, aI, aO, aO, 1, 0, 2);var aL = ab._$To;var aS = ab._$Po;var aN = 10;var aJ = 1;for (var aM = 0; aM < aN; aM++) {\n aS[0] = aR[0] + aJ * aQ[0];aS[1] = aR[1] + aJ * aQ[1];aK._$nb(aP, aI, aS, aL, 1, 0, 2);aL[0] -= aO[0];aL[1] -= aO[1];if (aL[0] != 0 || aL[1] != 0) {\n aH[0] = aL[0];aH[1] = aL[1];return;\n }aS[0] = aR[0] - aJ * aQ[0];aS[1] = aR[1] - aJ * aQ[1];aK._$nb(aP, aI, aS, aL, 1, 0, 2);aL[0] -= aO[0];aL[1] -= aO[1];if (aL[0] != 0 || aL[1] != 0) {\n aL[0] = -aL[0];aL[0] = -aL[0];aH[0] = aL[0];aH[1] = aL[1];return;\n }aJ *= 0.1;\n }if (Q._$so) {\n console.log("_$L0 to transform _$SP\\n");\n }\n };function al(aH) {\n B.prototype.constructor.call(this, aH);this._$8r = c._$ur;this._$Yr = null;this._$Wr = null;\n }al.prototype = new B();function a() {\n if (j) {\n return;\n }ae.prototype.constructor.call(this);this._$gP = null;this._$dr = null;this._$GS = null;this._$qb = null;this._$Lb = null;this._$mS = null;\n }a.prototype = new ae();a._$ur = -2;a._$ES = 500;a._$wb = 2;a._$8S = 3;a._$os = 4;a._$52 = a._$ES;a._$R2 = a._$ES;a._$Sb = function (aJ) {\n for (var aI = aJ.length - 1; aI >= 0; --aI) {\n var aH = aJ[aI];if (aH < a._$52) {\n a._$52 = aH;\n } else {\n if (aH > a._$R2) {\n a._$R2 = aH;\n }\n }\n }\n };a._$or = function () {\n return a._$52;\n };a._$Pr = function () {\n return a._$R2;\n };a.prototype._$F0 = function (aH) {\n this._$gP = aH._$nP();this._$dr = aH._$nP();this._$GS = aH._$nP();this._$qb = aH._$6L();this._$Lb = aH._$cS();this._$mS = aH._$Tb();if (aH.getFormatVersion() >= ay._$T7) {\n this.clipID = aH._$nP();this.clipIDList = this.convertClipIDForV2_11(this.clipID);\n } else {\n this.clipIDList = null;\n }a._$Sb(this._$Lb);\n };a.prototype.getClipIDList = function () {\n return this.clipIDList;\n };a.prototype._$Nr = function (aI, aH) {\n aH._$IS[0] = false;aH._$Us = aG._$Z2(aI, this._$GS, aH._$IS, this._$Lb);if (Q._$Zs) {} else {\n if (aH._$IS[0]) {\n return;\n }\n }aH._$7s = aG._$br(aI, this._$GS, aH._$IS, this._$mS);\n };a.prototype._$2b = function (aH) {};a.prototype.getDrawDataID = function () {\n return this._$gP;\n };a.prototype._$j2 = function (aH) {\n this._$gP = aH;\n };a.prototype.getOpacity = function (aH, aI) {\n return aI._$7s;\n };a.prototype._$zS = function (aH, aI) {\n return aI._$Us;\n };a.prototype.getTargetBaseDataID = function () {\n return this._$dr;\n };a.prototype._$gs = function (aH) {\n this._$dr = aH;\n };a.prototype._$32 = function () {\n return this._$dr != null && this._$dr != n._$2o();\n };a.prototype.getType = function () {};function aq() {\n if (j) {\n return;\n }this._$NL = null;this._$3S = null;this._$aS = null;aq._$42++;\n }aq._$42 = 0;aq.prototype._$1b = function () {\n return this._$3S;\n };aq.prototype.getDrawDataList = function () {\n return this._$aS;\n };aq.prototype._$F0 = function (aH) {\n this._$NL = aH._$nP();this._$aS = aH._$nP();this._$3S = aH._$nP();\n };aq.prototype._$kr = function (aH) {\n aH._$Zo(this._$3S);aH._$xo(this._$aS);this._$3S = null;this._$aS = null;\n };function v() {\n if (j) {\n return;\n }aa.prototype.constructor.call(this);this._$zo = new x();\n }v.prototype = new aa();v.loadModel = function (aI) {\n var aH = new v();aa._$62(aH, aI);return aH;\n };v.loadModel = function (aI) {\n var aH = new v();aa._$62(aH, aI);return aH;\n };v._$to = function () {\n var aH = new v();return aH;\n };v._$er = function (aM) {\n var aJ = new _$5("../_$_r/_$t0/_$Ri/_$_P._$d");if (aJ.exists() == false) {\n throw new _$ls("_$t0 _$_ _$6 _$Ui :: " + aJ._$PL());\n }var aH = ["../_$_r/_$t0/_$Ri/_$_P.512/_$CP._$1", "../_$_r/_$t0/_$Ri/_$_P.512/_$vP._$1", "../_$_r/_$t0/_$Ri/_$_P.512/_$EP._$1", "../_$_r/_$t0/_$Ri/_$_P.512/_$pP._$1"];var aK = v.loadModel(aJ._$3b());for (var aI = 0; aI < aH.length; aI++) {\n var aL = new _$5(aH[aI]);if (aL.exists() == false) {\n throw new _$ls("_$t0 _$_ _$6 _$Ui :: " + aL._$PL());\n }aK.setTexture(aI, _$nL._$_o(aM, aL._$3b()));\n }return aK;\n };v.prototype.setGL = function (aH) {\n this._$zo.setGL(aH);\n };v.prototype.setTransform = function (aH) {\n this._$zo.setTransform(aH);\n };v.prototype.draw = function () {\n this._$5S.draw(this._$zo);\n };v.prototype._$K2 = function () {\n this._$zo._$K2();\n };v.prototype.setTexture = function (aI, aH) {\n if (this._$zo == null) {\n q._$li("_$Yi for QT _$ki / _$XS() is _$6 _$ui!!");\n }this._$zo.setTexture(aI, aH);\n };v.prototype.setTexture = function (aI, aH) {\n if (this._$zo == null) {\n q._$li("_$Yi for QT _$ki / _$XS() is _$6 _$ui!!");\n }this._$zo.setTexture(aI, aH);\n };v.prototype._$Rs = function () {\n return this._$zo._$Rs();\n };v.prototype._$Ds = function (aH) {\n this._$zo._$Ds(aH);\n };v.prototype.getDrawParam = function () {\n return this._$zo;\n };function ao() {\n if (j) {\n return;\n }ah.prototype.constructor.call(this);this.motions = new Array();this._$o2 = null;this._$7r = ao._$Co++;this._$D0 = 30;this._$yT = 0;this._$E = false;this.loopFadeIn = true;this._$rr = -1;this._$eP = 0;\n }ao.prototype = new ah();ao._$cs = "VISIBLE:";ao._$ar = "LAYOUT:";ao.MTN_PREFIX_FADEIN = "FADEIN:";ao.MTN_PREFIX_FADEOUT = "FADEOUT:";ao._$Co = 0;ao._$1T = 1;ao.loadMotion = function (aJ) {\n var aI = ap._$C(aJ);var aH = ao.loadMotion(aI);return aH;\n };function p(aI, aH) {\n return String.fromCharCode(aI.getUint8(aH));\n }ao.loadMotion = function (aT) {\n if (aT instanceof ArrayBuffer) {\n aT = new DataView(aT);\n }var aN = new ao();var aI = [0];var aQ = aT.byteLength;aN._$yT = 0;for (var aJ = 0; aJ < aQ; ++aJ) {\n var aS = p(aT, aJ);var aL = aS.charCodeAt(0);if (aS == "\\n" || aS == "\\r") {\n continue;\n }if (aS == "#") {\n for (; aJ < aQ; ++aJ) {\n if (p(aT, aJ) == "\\n" || p(aT, aJ) == "\\r") {\n break;\n }\n }continue;\n }if (aS == "$") {\n var aV = aJ;var aK = -1;for (; aJ < aQ; ++aJ) {\n aS = p(aT, aJ);if (aS == "\\r" || aS == "\\n") {\n break;\n }if (aS == "=") {\n aK = aJ;break;\n }\n }var aP = false;if (aK >= 0) {\n if (aK == aV + 4 && p(aT, aV + 1) == "f" && p(aT, aV + 2) == "p" && p(aT, aV + 3) == "s") {\n aP = true;\n }for (aJ = aK + 1; aJ < aQ; ++aJ) {\n aS = p(aT, aJ);if (aS == "\\r" || aS == "\\n") {\n break;\n }if (aS == "," || aS == " " || aS == "\\t") {\n continue;\n }var aM = G._$LS(aT, aQ, aJ, aI);if (aI[0] > 0) {\n if (aP && 5 < aM && aM < 121) {\n aN._$D0 = aM;\n }\n }aJ = aI[0];\n }\n }for (; aJ < aQ; ++aJ) {\n if (p(aT, aJ) == "\\n" || p(aT, aJ) == "\\r") {\n break;\n }\n }continue;\n }if (97 <= aL && aL <= 122 || 65 <= aL && aL <= 90 || aS == "_") {\n var aV = aJ;var aK = -1;for (; aJ < aQ; ++aJ) {\n aS = p(aT, aJ);if (aS == "\\r" || aS == "\\n") {\n break;\n }if (aS == "=") {\n aK = aJ;break;\n }\n }if (aK >= 0) {\n var aO = new t();if (G.startsWith(aT, aV, ao._$cs)) {\n aO._$RP = t._$hs;aO._$4P = G.createString(aT, aV, aK - aV);\n } else {\n if (G.startsWith(aT, aV, ao._$ar)) {\n aO._$4P = G.createString(aT, aV + 7, aK - aV - 7);if (G.startsWith(aT, aV + 7, "ANCHOR_X")) {\n aO._$RP = t._$xs;\n } else {\n if (G.startsWith(aT, aV + 7, "ANCHOR_Y")) {\n aO._$RP = t._$us;\n } else {\n if (G.startsWith(aT, aV + 7, "SCALE_X")) {\n aO._$RP = t._$qs;\n } else {\n if (G.startsWith(aT, aV + 7, "SCALE_Y")) {\n aO._$RP = t._$Ys;\n } else {\n if (G.startsWith(aT, aV + 7, "X")) {\n aO._$RP = t._$ws;\n } else {\n if (G.startsWith(aT, aV + 7, "Y")) {\n aO._$RP = t._$Ns;\n }\n }\n }\n }\n }\n }\n } else {\n aO._$RP = t._$Fr;aO._$4P = G.createString(aT, aV, aK - aV);\n }\n }aN.motions.push(aO);var aU = 0;var aR = [];for (aJ = aK + 1; aJ < aQ; ++aJ) {\n aS = p(aT, aJ);if (aS == "\\r" || aS == "\\n") {\n break;\n }if (aS == "," || aS == " " || aS == "\\t") {\n continue;\n }var aM = G._$LS(aT, aQ, aJ, aI);if (aI[0] > 0) {\n aR.push(aM);aU++;var aH = aI[0];if (aH < aJ) {\n console.log("_$n0 _$hi . @Live2DMotion loadMotion()\\n");break;\n }aJ = aH - 1;\n }\n }aO._$I0 = new Float32Array(aR);if (aU > aN._$yT) {\n aN._$yT = aU;\n }\n }\n }\n }aN._$rr = 1000 * aN._$yT / aN._$D0 | 0;return aN;\n };ao.prototype.getDurationMSec = function () {\n return this._$E ? -1 : this._$rr;\n };ao.prototype.getLoopDurationMSec = function () {\n return this._$rr;\n };ao.prototype.dump = function () {\n for (var aJ = 0; aJ < this.motions.length; aJ++) {\n var aH = this.motions[aJ];console.log("_$wL[%s] [%d]. ", aH._$4P, aH._$I0.length);for (var aI = 0; aI < aH._$I0.length && aI < 10; aI++) {\n console.log("%5.2f ,", aH._$I0[aI]);\n }console.log("\\n");\n }\n };ao.prototype.updateParamExe = function (aJ, aN, aQ, a3) {\n var aO = aN - a3._$z2;var a0 = aO * this._$D0 / 1000;var aK = a0 | 0;var aR = a0 - aK;for (var aZ = 0; aZ < this.motions.length; aZ++) {\n var aV = this.motions[aZ];var aL = aV._$I0.length;var aT = aV._$4P;if (aV._$RP == t._$hs) {\n var aX = aV._$I0[aK >= aL ? aL - 1 : aK];aJ.setParamFloat(aT, aX);\n } else {\n if (t._$ws <= aV._$RP && aV._$RP <= t._$Ys) {} else {\n var aH = aJ.getParamIndex(aT);var a4 = aJ.getModelContext();var aY = a4.getParamMax(aH);var aW = a4.getParamMin(aH);var aM = 0.4;var aS = aM * (aY - aW);var aU = a4.getParamFloat(aH);var a2 = aV._$I0[aK >= aL ? aL - 1 : aK];var a1 = aV._$I0[aK + 1 >= aL ? aL - 1 : aK + 1];var aI;if (a2 < a1 && a1 - a2 > aS || a2 > a1 && a2 - a1 > aS) {\n aI = a2;\n } else {\n aI = a2 + (a1 - a2) * aR;\n }var aP = aU + (aI - aU) * aQ;aJ.setParamFloat(aT, aP);\n }\n }\n }if (aK >= this._$yT) {\n if (this._$E) {\n a3._$z2 = aN;if (this.loopFadeIn) {\n a3._$bs = aN;\n }\n } else {\n a3._$9L = true;\n }\n }this._$eP = aQ;\n };ao.prototype._$r0 = function () {\n return this._$E;\n };ao.prototype._$aL = function (aH) {\n this._$E = aH;\n };ao.prototype._$S0 = function () {\n return this._$D0;\n };ao.prototype._$U0 = function (aH) {\n this._$D0 = aH;\n };ao.prototype.isLoopFadeIn = function () {\n return this.loopFadeIn;\n };ao.prototype.setLoopFadeIn = function (aH) {\n this.loopFadeIn = aH;\n };function aE() {\n this._$P = new Float32Array(100);this.size = 0;\n }aE.prototype.clear = function () {\n this.size = 0;\n };aE.prototype.add = function (aI) {\n if (this._$P.length <= this.size) {\n var aH = new Float32Array(this.size * 2);P._$jT(this._$P, 0, aH, 0, this.size);this._$P = aH;\n }this._$P[this.size++] = aI;\n };aE.prototype._$BL = function () {\n var aH = new Float32Array(this.size);P._$jT(this._$P, 0, aH, 0, this.size);return aH;\n };function t() {\n this._$4P = null;this._$I0 = null;this._$RP = null;\n }t._$Fr = 0;t._$hs = 1;t._$ws = 100;t._$Ns = 101;t._$xs = 102;t._$us = 103;t._$qs = 104;t._$Ys = 105;function E() {\n if (j) {\n return;\n }c.prototype.constructor.call(this);this._$o = 0;this._$A = 0;this._$GS = null;this._$Eo = null;\n }E.prototype = new c();E._$gT = new Array();E.prototype._$zP = function () {\n this._$GS = new g();this._$GS._$zP();\n };E.prototype._$F0 = function (aH) {\n c.prototype._$F0.call(this, aH);this._$A = aH._$6L();this._$o = aH._$6L();this._$GS = aH._$nP();this._$Eo = aH._$nP();c.prototype.readV2_opacity.call(this, aH);\n };E.prototype.init = function (aH) {\n var aI = new H(this);var aJ = (this._$o + 1) * (this._$A + 1);if (aI._$Cr != null) {\n aI._$Cr = null;\n }aI._$Cr = new Float32Array(aJ * 2);if (aI._$hr != null) {\n aI._$hr = null;\n }if (this._$32()) {\n aI._$hr = new Float32Array(aJ * 2);\n } else {\n aI._$hr = null;\n }return aI;\n };E.prototype._$Nr = function (aJ, aI) {\n var aK = aI;if (!this._$GS._$Ur(aJ)) {\n return;\n }var aL = this._$VT();var aH = E._$gT;aH[0] = false;aG._$Vr(aJ, this._$GS, aH, aL, this._$Eo, aK._$Cr, 0, 2);aI._$Ib(aH[0]);this.interpolateOpacity(aJ, this._$GS, aI, aH);\n };E.prototype._$2b = function (aK, aJ) {\n var aL = aJ;aL._$hS(true);if (!this._$32()) {\n aL.setTotalOpacity(aL.getInterpolatedOpacity());\n } else {\n var aH = this.getTargetBaseDataID();if (aL._$8r == c._$ur) {\n aL._$8r = aK.getBaseDataIndex(aH);\n }if (aL._$8r < 0) {\n if (Q._$so) {\n q._$li("_$L _$0P _$G :: %s", aH);\n }aL._$hS(false);\n } else {\n var aN = aK.getBaseData(aL._$8r);var aI = aK._$q2(aL._$8r);if (aN != null && aI._$yo()) {\n var aM = aI.getTotalScale();aL.setTotalScale_notForClient(aM);var aO = aI.getTotalOpacity();aL.setTotalOpacity(aO * aL.getInterpolatedOpacity());aN._$nb(aK, aI, aL._$Cr, aL._$hr, this._$VT(), 0, 2);aL._$hS(true);\n } else {\n aL._$hS(false);\n }\n }\n }\n };E.prototype._$nb = function (aL, aI, aH, aM, aO, aK, aJ) {\n if (true) {\n var aN = aI;var aP = aN._$hr != null ? aN._$hr : aN._$Cr;E.transformPoints_sdk2(aH, aM, aO, aK, aJ, aP, this._$o, this._$A);\n } else {\n this.transformPoints_sdk1(aL, aI, aH, aM, aO, aK, aJ);\n }\n };E.transformPoints_sdk2 = function (a0, bc, a5, aP, aI, aR, aQ, aU) {\n var aW = a5 * aI;var aV;var bn, bm;var aT = 0;var aS = 0;var bl = 0;var bk = 0;var bf = 0;var be = 0;var aZ = false;for (var ba = aP; ba < aW; ba += aI) {\n var bd, a7, a4, aX;a4 = a0[ba];aX = a0[ba + 1];bd = a4 * aQ;a7 = aX * aU;if (bd < 0 || a7 < 0 || aQ <= bd || aU <= a7) {\n var a1 = aQ + 1;if (!aZ) {\n aZ = true;aT = 0.25 * (aR[(0 + 0 * a1) * 2] + aR[(aQ + 0 * a1) * 2] + aR[(0 + aU * a1) * 2] + aR[(aQ + aU * a1) * 2]);aS = 0.25 * (aR[(0 + 0 * a1) * 2 + 1] + aR[(aQ + 0 * a1) * 2 + 1] + aR[(0 + aU * a1) * 2 + 1] + aR[(aQ + aU * a1) * 2 + 1]);var aM = aR[(aQ + aU * a1) * 2] - aR[(0 + 0 * a1) * 2];var aL = aR[(aQ + aU * a1) * 2 + 1] - aR[(0 + 0 * a1) * 2 + 1];var bh = aR[(aQ + 0 * a1) * 2] - aR[(0 + aU * a1) * 2];var bg = aR[(aQ + 0 * a1) * 2 + 1] - aR[(0 + aU * a1) * 2 + 1];bl = (aM + bh) * 0.5;bk = (aL + bg) * 0.5;bf = (aM - bh) * 0.5;be = (aL - bg) * 0.5;if (bl == 0 && bk == 0) {}if (bf == 0 && be == 0) {}aT -= 0.5 * (bl + bf);aS -= 0.5 * (bk + be);\n }if (-2 < a4 && a4 < 3 && -2 < aX && aX < 3) {\n if (a4 <= 0) {\n if (aX <= 0) {\n var a3 = aR[(0 + 0 * a1) * 2];var a2 = aR[(0 + 0 * a1) * 2 + 1];var a8 = aT - 2 * bl;var a6 = aS - 2 * bk;var aK = aT - 2 * bf;var aJ = aS - 2 * be;var aO = aT - 2 * bl - 2 * bf;var aN = aS - 2 * bk - 2 * be;var bj = 0.5 * (a4 - -2);var bi = 0.5 * (aX - -2);if (bj + bi <= 1) {\n bc[ba] = aO + (aK - aO) * bj + (a8 - aO) * bi;bc[ba + 1] = aN + (aJ - aN) * bj + (a6 - aN) * bi;\n } else {\n bc[ba] = a3 + (a8 - a3) * (1 - bj) + (aK - a3) * (1 - bi);bc[ba + 1] = a2 + (a6 - a2) * (1 - bj) + (aJ - a2) * (1 - bi);\n }\n } else {\n if (aX >= 1) {\n var aK = aR[(0 + aU * a1) * 2];var aJ = aR[(0 + aU * a1) * 2 + 1];var aO = aT - 2 * bl + 1 * bf;var aN = aS - 2 * bk + 1 * be;var a3 = aT + 3 * bf;var a2 = aS + 3 * be;var a8 = aT - 2 * bl + 3 * bf;var a6 = aS - 2 * bk + 3 * be;var bj = 0.5 * (a4 - -2);var bi = 0.5 * (aX - 1);if (bj + bi <= 1) {\n bc[ba] = aO + (aK - aO) * bj + (a8 - aO) * bi;bc[ba + 1] = aN + (aJ - aN) * bj + (a6 - aN) * bi;\n } else {\n bc[ba] = a3 + (a8 - a3) * (1 - bj) + (aK - a3) * (1 - bi);bc[ba + 1] = a2 + (a6 - a2) * (1 - bj) + (aJ - a2) * (1 - bi);\n }\n } else {\n var aH = a7 | 0;if (aH == aU) {\n aH = aU - 1;\n }var bj = 0.5 * (a4 - -2);var bi = a7 - aH;var bb = aH / aU;var a9 = (aH + 1) / aU;var aK = aR[(0 + aH * a1) * 2];var aJ = aR[(0 + aH * a1) * 2 + 1];var a3 = aR[(0 + (aH + 1) * a1) * 2];var a2 = aR[(0 + (aH + 1) * a1) * 2 + 1];var aO = aT - 2 * bl + bb * bf;var aN = aS - 2 * bk + bb * be;var a8 = aT - 2 * bl + a9 * bf;var a6 = aS - 2 * bk + a9 * be;if (bj + bi <= 1) {\n bc[ba] = aO + (aK - aO) * bj + (a8 - aO) * bi;bc[ba + 1] = aN + (aJ - aN) * bj + (a6 - aN) * bi;\n } else {\n bc[ba] = a3 + (a8 - a3) * (1 - bj) + (aK - a3) * (1 - bi);bc[ba + 1] = a2 + (a6 - a2) * (1 - bj) + (aJ - a2) * (1 - bi);\n }\n }\n }\n } else {\n if (1 <= a4) {\n if (aX <= 0) {\n var a8 = aR[(aQ + 0 * a1) * 2];var a6 = aR[(aQ + 0 * a1) * 2 + 1];var a3 = aT + 3 * bl;var a2 = aS + 3 * bk;var aO = aT + 1 * bl - 2 * bf;var aN = aS + 1 * bk - 2 * be;var aK = aT + 3 * bl - 2 * bf;var aJ = aS + 3 * bk - 2 * be;var bj = 0.5 * (a4 - 1);var bi = 0.5 * (aX - -2);if (bj + bi <= 1) {\n bc[ba] = aO + (aK - aO) * bj + (a8 - aO) * bi;bc[ba + 1] = aN + (aJ - aN) * bj + (a6 - aN) * bi;\n } else {\n bc[ba] = a3 + (a8 - a3) * (1 - bj) + (aK - a3) * (1 - bi);bc[ba + 1] = a2 + (a6 - a2) * (1 - bj) + (aJ - a2) * (1 - bi);\n }\n } else {\n if (aX >= 1) {\n var aO = aR[(aQ + aU * a1) * 2];var aN = aR[(aQ + aU * a1) * 2 + 1];var aK = aT + 3 * bl + 1 * bf;var aJ = aS + 3 * bk + 1 * be;var a8 = aT + 1 * bl + 3 * bf;var a6 = aS + 1 * bk + 3 * be;var a3 = aT + 3 * bl + 3 * bf;var a2 = aS + 3 * bk + 3 * be;var bj = 0.5 * (a4 - 1);var bi = 0.5 * (aX - 1);if (bj + bi <= 1) {\n bc[ba] = aO + (aK - aO) * bj + (a8 - aO) * bi;bc[ba + 1] = aN + (aJ - aN) * bj + (a6 - aN) * bi;\n } else {\n bc[ba] = a3 + (a8 - a3) * (1 - bj) + (aK - a3) * (1 - bi);bc[ba + 1] = a2 + (a6 - a2) * (1 - bj) + (aJ - a2) * (1 - bi);\n }\n } else {\n var aH = a7 | 0;if (aH == aU) {\n aH = aU - 1;\n }var bj = 0.5 * (a4 - 1);var bi = a7 - aH;var bb = aH / aU;var a9 = (aH + 1) / aU;var aO = aR[(aQ + aH * a1) * 2];var aN = aR[(aQ + aH * a1) * 2 + 1];var a8 = aR[(aQ + (aH + 1) * a1) * 2];var a6 = aR[(aQ + (aH + 1) * a1) * 2 + 1];var aK = aT + 3 * bl + bb * bf;var aJ = aS + 3 * bk + bb * be;var a3 = aT + 3 * bl + a9 * bf;var a2 = aS + 3 * bk + a9 * be;if (bj + bi <= 1) {\n bc[ba] = aO + (aK - aO) * bj + (a8 - aO) * bi;bc[ba + 1] = aN + (aJ - aN) * bj + (a6 - aN) * bi;\n } else {\n bc[ba] = a3 + (a8 - a3) * (1 - bj) + (aK - a3) * (1 - bi);bc[ba + 1] = a2 + (a6 - a2) * (1 - bj) + (aJ - a2) * (1 - bi);\n }\n }\n }\n } else {\n if (aX <= 0) {\n var aY = bd | 0;if (aY == aQ) {\n aY = aQ - 1;\n }var bj = bd - aY;var bi = 0.5 * (aX - -2);var bp = aY / aQ;var bo = (aY + 1) / aQ;var a8 = aR[(aY + 0 * a1) * 2];var a6 = aR[(aY + 0 * a1) * 2 + 1];var a3 = aR[(aY + 1 + 0 * a1) * 2];var a2 = aR[(aY + 1 + 0 * a1) * 2 + 1];var aO = aT + bp * bl - 2 * bf;var aN = aS + bp * bk - 2 * be;var aK = aT + bo * bl - 2 * bf;var aJ = aS + bo * bk - 2 * be;if (bj + bi <= 1) {\n bc[ba] = aO + (aK - aO) * bj + (a8 - aO) * bi;bc[ba + 1] = aN + (aJ - aN) * bj + (a6 - aN) * bi;\n } else {\n bc[ba] = a3 + (a8 - a3) * (1 - bj) + (aK - a3) * (1 - bi);bc[ba + 1] = a2 + (a6 - a2) * (1 - bj) + (aJ - a2) * (1 - bi);\n }\n } else {\n if (aX >= 1) {\n var aY = bd | 0;if (aY == aQ) {\n aY = aQ - 1;\n }var bj = bd - aY;var bi = 0.5 * (aX - 1);var bp = aY / aQ;var bo = (aY + 1) / aQ;var aO = aR[(aY + aU * a1) * 2];var aN = aR[(aY + aU * a1) * 2 + 1];var aK = aR[(aY + 1 + aU * a1) * 2];var aJ = aR[(aY + 1 + aU * a1) * 2 + 1];var a8 = aT + bp * bl + 3 * bf;var a6 = aS + bp * bk + 3 * be;var a3 = aT + bo * bl + 3 * bf;var a2 = aS + bo * bk + 3 * be;if (bj + bi <= 1) {\n bc[ba] = aO + (aK - aO) * bj + (a8 - aO) * bi;bc[ba + 1] = aN + (aJ - aN) * bj + (a6 - aN) * bi;\n } else {\n bc[ba] = a3 + (a8 - a3) * (1 - bj) + (aK - a3) * (1 - bi);bc[ba + 1] = a2 + (a6 - a2) * (1 - bj) + (aJ - a2) * (1 - bi);\n }\n } else {\n System.err.printf("_$li calc : %.4f , %.4f\t\t\t\t\t@@BDBoxGrid\\n", a4, aX);\n }\n }\n }\n }\n } else {\n bc[ba] = aT + a4 * bl + aX * bf;bc[ba + 1] = aS + a4 * bk + aX * be;\n }\n } else {\n bn = bd - (bd | 0);bm = a7 - (a7 | 0);aV = 2 * ((bd | 0) + (a7 | 0) * (aQ + 1));if (bn + bm < 1) {\n bc[ba] = aR[aV] * (1 - bn - bm) + aR[aV + 2] * bn + aR[aV + 2 * (aQ + 1)] * bm;bc[ba + 1] = aR[aV + 1] * (1 - bn - bm) + aR[aV + 3] * bn + aR[aV + 2 * (aQ + 1) + 1] * bm;\n } else {\n bc[ba] = aR[aV + 2 * (aQ + 1) + 2] * (bn - 1 + bm) + aR[aV + 2 * (aQ + 1)] * (1 - bn) + aR[aV + 2] * (1 - bm);bc[ba + 1] = aR[aV + 2 * (aQ + 1) + 3] * (bn - 1 + bm) + aR[aV + 2 * (aQ + 1) + 1] * (1 - bn) + aR[aV + 3] * (1 - bm);\n }\n }\n }\n };E.prototype.transformPoints_sdk1 = function (aJ, aR, aL, a0, aU, aP, aZ) {\n var aH = aR;var aO, aN;var aM = this._$o;var aQ = this._$A;var aI = aU * aZ;var aS, aY;var aV;var aX, aW;var aT = aH._$hr != null ? aH._$hr : aH._$Cr;for (var aK = aP; aK < aI; aK += aZ) {\n if (Q._$ts) {\n aO = aL[aK];aN = aL[aK + 1];if (aO < 0) {\n aO = 0;\n } else {\n if (aO > 1) {\n aO = 1;\n }\n }if (aN < 0) {\n aN = 0;\n } else {\n if (aN > 1) {\n aN = 1;\n }\n }aO *= aM;aN *= aQ;aS = aO | 0;aY = aN | 0;if (aS > aM - 1) {\n aS = aM - 1;\n }if (aY > aQ - 1) {\n aY = aQ - 1;\n }aX = aO - aS;aW = aN - aY;aV = 2 * (aS + aY * (aM + 1));\n } else {\n aO = aL[aK] * aM;aN = aL[aK + 1] * aQ;aX = aO - (aO | 0);aW = aN - (aN | 0);aV = 2 * ((aO | 0) + (aN | 0) * (aM + 1));\n }if (aX + aW < 1) {\n a0[aK] = aT[aV] * (1 - aX - aW) + aT[aV + 2] * aX + aT[aV + 2 * (aM + 1)] * aW;a0[aK + 1] = aT[aV + 1] * (1 - aX - aW) + aT[aV + 3] * aX + aT[aV + 2 * (aM + 1) + 1] * aW;\n } else {\n a0[aK] = aT[aV + 2 * (aM + 1) + 2] * (aX - 1 + aW) + aT[aV + 2 * (aM + 1)] * (1 - aX) + aT[aV + 2] * (1 - aW);a0[aK + 1] = aT[aV + 2 * (aM + 1) + 3] * (aX - 1 + aW) + aT[aV + 2 * (aM + 1) + 1] * (1 - aX) + aT[aV + 3] * (1 - aW);\n }\n }\n };E.prototype._$VT = function () {\n return (this._$o + 1) * (this._$A + 1);\n };E.prototype.getType = function () {\n return c._$_b;\n };function H(aH) {\n B.prototype.constructor.call(this, aH);this._$8r = c._$ur;this._$Cr = null;this._$hr = null;\n }H.prototype = new B();function s() {\n if (j) {\n return;\n }this.visible = true;this._$g0 = false;this._$NL = null;this._$3S = null;this._$aS = null;s._$42++;\n }s._$42 = 0;s.prototype._$zP = function () {\n this._$3S = new Array();this._$aS = new Array();\n };s.prototype._$F0 = function (aH) {\n this._$g0 = aH._$8L();this.visible = aH._$8L();this._$NL = aH._$nP();this._$3S = aH._$nP();this._$aS = aH._$nP();\n };s.prototype.init = function (aI) {\n var aH = new aj(this);aH.setPartsOpacity(this.isVisible() ? 1 : 0);return aH;\n };s.prototype._$6o = function (aH) {\n if (this._$3S == null) {\n throw new Error("_$3S _$6 _$Wo@_$6o");\n }this._$3S.push(aH);\n };s.prototype._$3o = function (aH) {\n if (this._$aS == null) {\n throw new Error("_$aS _$6 _$Wo@_$3o");\n }this._$aS.push(aH);\n };s.prototype._$Zo = function (aH) {\n this._$3S = aH;\n };s.prototype._$xo = function (aH) {\n this._$aS = aH;\n };s.prototype.isVisible = function () {\n return this.visible;\n };s.prototype._$uL = function () {\n return this._$g0;\n };s.prototype._$KP = function (aH) {\n this.visible = aH;\n };s.prototype._$ET = function (aH) {\n this._$g0 = aH;\n };s.prototype.getBaseData = function () {\n return this._$3S;\n };s.prototype.getDrawData = function () {\n return this._$aS;\n };s.prototype._$p2 = function () {\n return this._$NL;\n };s.prototype._$ob = function (aH) {\n this._$NL = aH;\n };s.prototype.getPartsID = function () {\n return this._$NL;\n };s.prototype._$MP = function (aH) {\n this._$NL = aH;\n };function aj(aH) {\n this._$VS = null;this._$e0 = null;this._$e0 = aH;\n }aj.prototype = new S();aj.prototype.getPartsOpacity = function () {\n return this._$VS;\n };aj.prototype.setPartsOpacity = function (aH) {\n this._$VS = aH;\n };function ak(aH) {\n if (j) {\n return;\n }this.id = aH;\n }ak._$L7 = function () {\n z._$27();n._$27();Z._$27();i._$27();\n };ak.prototype.toString = function () {\n return this.id;\n };function D() {}D.prototype._$F0 = function (aH) {};function an() {\n if (j) {\n return;\n }this._$4S = null;\n }an.prototype._$1s = function () {\n return this._$4S;\n };an.prototype._$zP = function () {\n this._$4S = new Array();\n };an.prototype._$F0 = function (aH) {\n this._$4S = aH._$nP();\n };an.prototype._$Ks = function (aH) {\n this._$4S.push(aH);\n };function au(aH, aI) {\n this.canvas = aH;this.context = aI;this.viewport = new Array(0, 0, aH.width, aH.height);this._$6r = 1;this._$xP = 0;this._$3r = 1;this._$uP = 0;this._$Qo = -1;this.cacheImages = {};\n }au.tr = new am();au._$50 = new am();au._$Ti = new Array(0, 0);au._$Pi = new Array(0, 0);au._$B = new Array(0, 0);au.prototype._$lP = function (aI, aK, aJ, aH) {\n this.viewport = new Array(aI, aK, aJ, aH);\n };au.prototype._$bL = function () {\n this.context.save();var aH = this.viewport;if (aH != null) {\n this.context.beginPath();this.context._$Li(aH[0], aH[1], aH[2], aH[3]);this.context.clip();\n }\n };au.prototype._$ei = function () {\n this.context.restore();\n };au.prototype.drawElements = function (bc, bm, aX, aJ, bA, aM, bl, bz) {\n try {\n if (bA != this._$Qo) {\n this._$Qo = bA;this.context.globalAlpha = bA;\n }var a2 = bm.length;var aP = bc.width;var a5 = bc.height;var bE = this.context;var a7 = this._$xP;var a6 = this._$uP;var a1 = this._$6r;var aZ = this._$3r;var bD = au.tr;var aI = au._$Ti;var aH = au._$Pi;var bu = au._$B;for (var by = 0; by < a2; by += 3) {\n bE.save();var aW = bm[by];var aV = bm[by + 1];var aT = bm[by + 2];var aL = a7 + a1 * aX[aW * 2];var aK = a6 + aZ * aX[aW * 2 + 1];var br = a7 + a1 * aX[aV * 2];var bp = a6 + aZ * aX[aV * 2 + 1];var bh = a7 + a1 * aX[aT * 2];var bf = a6 + aZ * aX[aT * 2 + 1];if (bl) {\n bl._$PS(aL, aK, bu);aL = bu[0];aK = bu[1];bl._$PS(br, bp, bu);br = bu[0];bp = bu[1];bl._$PS(bh, bf, bu);bh = bu[0];bf = bu[1];\n }var aS = aP * aJ[aW * 2];var aQ = a5 - a5 * aJ[aW * 2 + 1];var bx = aP * aJ[aV * 2];var bw = a5 - a5 * aJ[aV * 2 + 1];var bk = aP * aJ[aT * 2];var bj = a5 - a5 * aJ[aT * 2 + 1];var a3 = Math.atan2(bw - aQ, bx - aS);var a0 = Math.atan2(bp - aK, br - aL);var aO = br - aL;var aN = bp - aK;var bi = Math.sqrt(aO * aO + aN * aN);var aU = bx - aS;var aR = bw - aQ;var bt = Math.sqrt(aU * aU + aR * aR);var bv = bi / bt;ad._$ni(bk, bj, aS, aQ, bx - aS, bw - aQ, -(bw - aQ), bx - aS, aI);ad._$ni(bh, bf, aL, aK, br - aL, bp - aK, -(bp - aK), br - aL, aH);var aY = (aH[0] - aI[0]) / aI[1];var bs = Math.min(aS, bx, bk);var bg = Math.max(aS, bx, bk);var bq = Math.min(aQ, bw, bj);var be = Math.max(aQ, bw, bj);var bo = Math.floor(bs);var bb = Math.floor(bq);var a4 = Math.ceil(bg);var bC = Math.ceil(be);bD.identity();bD.translate(aL, aK);bD.rotate(a0);bD.scale(1, aH[1] / aI[1]);bD.shear(aY, 0);bD.scale(bv, bv);bD.rotate(-a3);bD.translate(-aS, -aQ);bD.setContext(bE);var a8 = true;var a9 = 1.2;if (!aM) {\n aM = a8 ? a9 : 0;\n }if (Q.IGNORE_EXPAND) {\n aM = 0;\n }if (Q.USE_CACHED_POLYGON_IMAGE) {\n var bd = bz._$e0;bd.gl_cacheImage = bd.gl_cacheImage || {};if (!bd.gl_cacheImage[by]) {\n var bn = au.createCanvas(a4 - bo, bC - bb);Q.DEBUG_DATA.LDGL_CANVAS_MB = Q.DEBUG_DATA.LDGL_CANVAS_MB || 0;Q.DEBUG_DATA.LDGL_CANVAS_MB += (a4 - bo) * (bC - bb) * 4;var ba = bn.getContext("2d");ba.translate(-bo, -bb);au.clip(ba, bD, aM, bi, aS, aQ, bx, bw, bk, bj, aL, aK, br, bp, bh, bf);ba.drawImage(bc, 0, 0);bd.gl_cacheImage[by] = { cacheCanvas: bn, cacheContext: ba };\n }bE.drawImage(bd.gl_cacheImage[by]["cacheCanvas"], bo, bb);\n } else {\n if (!Q.IGNORE_CLIP) {\n au.clip(bE, bD, aM, bi, aS, aQ, bx, bw, bk, bj, aL, aK, br, bp, bh, bf);\n }if (Q.USE_ADJUST_TRANSLATION) {\n bs = 0;bg = aP;bq = 0;be = a5;\n }bE.drawImage(bc, bs, bq, bg - bs, be - bq, bs, bq, bg - bs, be - bq);\n }bE.restore();\n }\n } catch (bB) {\n q._$Rb(bB);\n }\n };au.clip = function (aK, aJ, aV, aI, aM, aL, aU, aT, aQ, aP, aO, aN, aH, aW, aS, aR) {\n if (aV > 0.02) {\n au.expandClip(aK, aJ, aV, aI, aO, aN, aH, aW, aS, aR);\n } else {\n au.clipWithTransform(aK, null, aM, aL, aU, aT, aQ, aP);\n }\n };au.expandClip = function (aV, bg, aK, a3, aJ, aI, be, ba, aZ, aX) {\n var aP = be - aJ;var aO = ba - aI;var bi = aZ - aJ;var bh = aX - aI;var bj = aP * bh - aO * bi > 0 ? aK : -aK;var aL = -aO;var aH = aP;var bc = aZ - be;var a8 = aX - ba;var a7 = -a8;var a6 = bc;var aQ = Math.sqrt(bc * bc + a8 * a8);var bf = -bh;var bb = bi;var a2 = Math.sqrt(bi * bi + bh * bh);var bd = aJ - bj * aL / a3;var a9 = aI - bj * aH / a3;var aY = be - bj * aL / a3;var aW = ba - bj * aH / a3;var a5 = be - bj * a7 / aQ;var a4 = ba - bj * a6 / aQ;var aS = aZ - bj * a7 / aQ;var aR = aX - bj * a6 / aQ;var aN = aJ + bj * bf / a2;var aM = aI + bj * bb / a2;var a1 = aZ + bj * bf / a2;var a0 = aX + bj * bb / a2;var aU = au._$50;var aT = bg._$P2(aU);if (aT == null) {\n return false;\n }au.clipWithTransform(aV, aU, bd, a9, aY, aW, a5, a4, aS, aR, a1, a0, aN, aM);return true;\n };au.clipWithTransform = function (aH, aI, aS, aN, aQ, aK, aP, aJ) {\n if (arguments.length < 1 + 3 * 2) {\n q._$li("err : @LDGL.clip()");return;\n }if (!(arguments[1] instanceof am)) {\n q._$li("err : a[0] is _$6 LDTransform @LDGL.clip()");return;\n }var aM = au._$B;var aO = aI;var aR = arguments;aH.beginPath();if (aO) {\n aO._$PS(aR[2], aR[3], aM);aH.moveTo(aM[0], aM[1]);for (var aL = 4; aL < aR.length; aL += 2) {\n aO._$PS(aR[aL], aR[aL + 1], aM);aH.lineTo(aM[0], aM[1]);\n }\n } else {\n aH.moveTo(aR[2], aR[3]);for (var aL = 4; aL < aR.length; aL += 2) {\n aH.lineTo(aR[aL], aR[aL + 1]);\n }\n }aH.clip();\n };au.createCanvas = function (aH, aJ) {\n var aI = document.createElement("canvas");aI.setAttribute("width", aH);aI.setAttribute("height", aJ);if (!aI) {\n q._$li("err : " + aI);\n }return aI;\n };au.dumpValues = function () {\n var aI = "";for (var aH = 0; aH < arguments.length; aH++) {\n aI += "[" + aH + "]= " + arguments[aH].toFixed(3) + " , ";\n }console.log(aI);\n };function f() {\n if (j) {\n return;\n }this._$TT = null;this._$LT = null;this._$FS = null;this._$wL = null;\n }f.prototype._$F0 = function (aH) {\n this._$TT = aH._$_T();this._$LT = aH._$_T();this._$FS = aH._$_T();this._$wL = aH._$nP();\n };f.prototype.getMinValue = function () {\n return this._$TT;\n };f.prototype.getMaxValue = function () {\n return this._$LT;\n };f.prototype.getDefaultValue = function () {\n return this._$FS;\n };f.prototype.getParamID = function () {\n return this._$wL;\n };function B(aH) {\n if (j) {\n return;\n }this._$e0 = null;this._$IP = null;this._$JS = false;this._$AT = true;this._$e0 = aH;this.totalScale = 1;this._$7s = 1;this.totalOpacity = 1;\n }B.prototype._$yo = function () {\n return this._$AT && !this._$JS;\n };B.prototype._$hS = function (aH) {\n this._$AT = aH;\n };B.prototype._$GT = function () {\n return this._$e0;\n };B.prototype._$l2 = function (aH) {\n this._$IP = aH;\n };B.prototype.getPartsIndex = function () {\n return this._$IP;\n };B.prototype._$x2 = function () {\n return this._$JS;\n };B.prototype._$Ib = function (aH) {\n this._$JS = aH;\n };B.prototype.getTotalScale = function () {\n return this.totalScale;\n };B.prototype.setTotalScale_notForClient = function (aH) {\n this.totalScale = aH;\n };B.prototype.getInterpolatedOpacity = function () {\n return this._$7s;\n };B.prototype.setInterpolatedOpacity = function (aH) {\n this._$7s = aH;\n };B.prototype.getTotalOpacity = function (aH) {\n return this.totalOpacity;\n };B.prototype.setTotalOpacity = function (aH) {\n this.totalOpacity = aH;\n };function Q() {}Q._$2s = "2.1.00_1";Q._$Kr = 201001000;Q._$sP = true;Q._$so = true;Q._$cb = false;Q._$3T = true;Q._$Ts = true;Q._$fb = true;Q._$ts = true;Q.L2D_DEFORMER_EXTEND = true;Q._$Wb = false;Q._$yr = false;Q._$Zs = false;Q.L2D_NO_ERROR = 0;Q._$i7 = 1000;Q._$9s = 1001;Q._$es = 1100;Q._$r7 = 2000;Q._$07 = 2001;Q._$b7 = 2002;Q._$H7 = 4000;Q.L2D_COLOR_BLEND_MODE_MULT = 0;Q.L2D_COLOR_BLEND_MODE_ADD = 1;Q.L2D_COLOR_BLEND_MODE_INTERPOLATE = 2;Q._$6b = true;Q._$cT = 0;Q.clippingMaskBufferSize = 256;Q.glContext = new Array();Q.frameBuffers = new Array();Q.fTexture = new Array();Q.IGNORE_CLIP = false;Q.IGNORE_EXPAND = false;Q.EXPAND_W = 2;Q.USE_ADJUST_TRANSLATION = true;Q.USE_CANVAS_TRANSFORM = true;Q.USE_CACHED_POLYGON_IMAGE = false;Q.DEBUG_DATA = {};Q.PROFILE_IOS_SPEED = { PROFILE_NAME: "iOS Speed", USE_ADJUST_TRANSLATION: true, USE_CACHED_POLYGON_IMAGE: true, EXPAND_W: 4 };Q.PROFILE_IOS_QUALITY = { PROFILE_NAME: "iOS HiQ", USE_ADJUST_TRANSLATION: true, USE_CACHED_POLYGON_IMAGE: false, EXPAND_W: 2 };Q.PROFILE_IOS_DEFAULT = Q.PROFILE_IOS_QUALITY;Q.PROFILE_ANDROID = { PROFILE_NAME: "Android", USE_ADJUST_TRANSLATION: false, USE_CACHED_POLYGON_IMAGE: false, EXPAND_W: 2 };Q.PROFILE_DESKTOP = { PROFILE_NAME: "Desktop", USE_ADJUST_TRANSLATION: false, USE_CACHED_POLYGON_IMAGE: false, EXPAND_W: 2 };Q.initProfile = function () {\n if (r.isIOS()) {\n Q.setupProfile(Q.PROFILE_IOS_DEFAULT);\n } else {\n if (r.isAndroid()) {\n Q.setupProfile(Q.PROFILE_ANDROID);\n } else {\n Q.setupProfile(Q.PROFILE_DESKTOP);\n }\n }\n };Q.setupProfile = function (aI, aJ) {\n if (typeof aI == "number") {\n switch (aI) {case 9901:\n aI = Q.PROFILE_IOS_SPEED;break;case 9902:\n aI = Q.PROFILE_IOS_QUALITY;break;case 9903:\n aI = Q.PROFILE_IOS_DEFAULT;break;case 9904:\n aI = Q.PROFILE_ANDROID;break;case 9905:\n aI = Q.PROFILE_DESKTOP;break;default:\n alert("profile _$6 _$Ui : " + aI);break;}\n }if (arguments.length < 2) {\n aJ = true;\n }if (aJ) {\n console.log("profile : " + aI.PROFILE_NAME);\n }for (var aH in aI) {\n Q[aH] = aI[aH];if (aJ) {\n console.log(" [" + aH + "] = " + aI[aH]);\n }\n }\n };Q.init = function () {\n if (Q._$6b) {\n console.log("Live2D %s", Q._$2s);Q._$6b = false;var aH = false;aH = true;Q.initProfile();\n }\n };Q.getVersionStr = function () {\n return Q._$2s;\n };Q.getVersionNo = function () {\n return Q._$Kr;\n };Q._$sT = function (aH) {\n Q._$cT = aH;\n };Q.getError = function () {\n var aH = Q._$cT;Q._$cT = 0;return aH;\n };Q.dispose = function () {\n Q.glContext = [];Q.frameBuffers = [];Q.fTexture = [];\n };Q.setGL = function (aJ, aI) {\n var aH = aI || 0;Q.glContext[aH] = aJ;\n };Q.getGL = function (aH) {\n return Q.glContext[aH];\n };Q.setClippingMaskBufferSize = function (aH) {\n Q.clippingMaskBufferSize = aH;\n };Q.getClippingMaskBufferSize = function () {\n return Q.clippingMaskBufferSize;\n };Q.deleteBuffer = function (aI) {\n var aH = Q.getGL(aI);aH.deleteFramebuffer(Q.frameBuffers[aI].framebuffer);delete Q.frameBuffers[aI];delete Q.glContext[aI];\n };function A() {}A._$r2 = function (aH) {\n if (aH < 0) {\n return 0;\n } else {\n if (aH > 1) {\n return 1;\n }\n }return 0.5 - 0.5 * Math.cos(aH * aC.PI_F);\n };function J(aH) {\n if (j) {\n return;\n }this._$ib = aH;\n }J._$fr = -1;J.prototype.toString = function () {\n return this._$ib;\n };function b() {\n if (j) {\n return;\n }a.prototype.constructor.call(this);this._$LP = -1;this._$d0 = 0;this._$Yo = 0;this._$JP = null;this._$5P = null;this._$BP = null;this._$Eo = null;this._$Qi = null;this._$6s = b._$ms;this.culling = true;this.gl_cacheImage = null;this.instanceNo = b._$42++;\n }b.prototype = new a();b._$42 = 0;b._$Os = 30;b._$ms = 0;b._$ns = 1;b._$_s = 2;b._$gT = new Array();b.prototype._$_S = function (aH) {\n this._$LP = aH;\n };b.prototype.getTextureNo = function () {\n return this._$LP;\n };b.prototype._$ZL = function () {\n return this._$Qi;\n };b.prototype._$H2 = function () {\n return this._$JP;\n };b.prototype.getNumPoints = function () {\n return this._$d0;\n };b.prototype.getType = function () {\n return a._$wb;\n };b.prototype._$B2 = function (aL, aH, aO) {\n var aM = aH;var aN = aM._$hr != null ? aM._$hr : aM._$Cr;var aK = aw._$do;switch (aK) {default:case aw._$Ms:\n throw new Error("_$L _$ro ");case aw._$Qs:\n for (var aJ = this._$d0 - 1; aJ >= 0; --aJ) {\n var aI = aJ * aw._$No;aN[aI + 4] = aO;\n }break;}\n };b.prototype._$zP = function () {\n this._$GS = new g();this._$GS._$zP();\n };b.prototype._$F0 = function (aK) {\n a.prototype._$F0.call(this, aK);this._$LP = aK._$6L();this._$d0 = aK._$6L();this._$Yo = aK._$6L();var aH = aK._$nP();this._$BP = new Int16Array(this._$Yo * 3);for (var aJ = this._$Yo * 3 - 1; aJ >= 0; --aJ) {\n this._$BP[aJ] = aH[aJ];\n }this._$Eo = aK._$nP();this._$Qi = aK._$nP();if (aK.getFormatVersion() >= ay._$s7) {\n this._$JP = aK._$6L();if (this._$JP != 0) {\n if ((this._$JP & 1) != 0) {\n var aI = aK._$6L();if (this._$5P == null) {\n this._$5P = new Object();\n }this._$5P._$Hb = parseInt(aI);\n }if ((this._$JP & b._$Os) != 0) {\n this._$6s = (this._$JP & b._$Os) >> 1;\n } else {\n this._$6s = b._$ms;\n }if ((this._$JP & 32) != 0) {\n this.culling = false;\n }\n }\n } else {\n this._$JP = 0;\n }\n };b.prototype.init = function (aL) {\n var aN = new ag(this);var aI = this._$d0 * aw._$No;var aH = this._$32();if (aN._$Cr != null) {\n aN._$Cr = null;\n }aN._$Cr = new Float32Array(aI);if (aN._$hr != null) {\n aN._$hr = null;\n }aN._$hr = aH ? new Float32Array(aI) : null;var aM = aw._$do;switch (aM) {default:case aw._$Ms:\n if (aw._$Ls) {\n for (var aJ = this._$d0 - 1; aJ >= 0; --aJ) {\n var aO = aJ << 1;this._$Qi[aO + 1] = 1 - this._$Qi[aO + 1];\n }\n }break;case aw._$Qs:\n for (var aJ = this._$d0 - 1; aJ >= 0; --aJ) {\n var aO = aJ << 1;var aK = aJ * aw._$No;var aQ = this._$Qi[aO];var aP = this._$Qi[aO + 1];aN._$Cr[aK] = aQ;aN._$Cr[aK + 1] = aP;aN._$Cr[aK + 4] = 0;if (aH) {\n aN._$hr[aK] = aQ;aN._$hr[aK + 1] = aP;aN._$hr[aK + 4] = 0;\n }\n }break;}return aN;\n };b.prototype._$Nr = function (aJ, aH) {\n var aK = aH;if (!(this == aK._$GT())) {\n console.log("### assert!! ### ");\n }if (!this._$GS._$Ur(aJ)) {\n return;\n }a.prototype._$Nr.call(this, aJ, aK);if (aK._$IS[0]) {\n return;\n }var aI = b._$gT;aI[0] = false;aG._$Vr(aJ, this._$GS, aI, this._$d0, this._$Eo, aK._$Cr, aw._$i2, aw._$No);\n };b.prototype._$2b = function (aK, aI) {\n try {\n if (!(this == aI._$GT())) {\n console.log("### assert!! ### ");\n }var aL = false;if (aI._$IS[0]) {\n aL = true;\n }var aM = aI;if (!aL) {\n a.prototype._$2b.call(this, aK);if (this._$32()) {\n var aH = this.getTargetBaseDataID();if (aM._$8r == a._$ur) {\n aM._$8r = aK.getBaseDataIndex(aH);\n }if (aM._$8r < 0) {\n if (Q._$so) {\n q._$li("_$L _$0P _$G :: %s", aH);\n }\n } else {\n var aO = aK.getBaseData(aM._$8r);var aJ = aK._$q2(aM._$8r);if (aO != null && !aJ._$x2()) {\n aO._$nb(aK, aJ, aM._$Cr, aM._$hr, this._$d0, aw._$i2, aw._$No);aM._$AT = true;\n } else {\n aM._$AT = false;\n }aM.baseOpacity = aJ.getTotalOpacity();\n }\n }\n }\n } catch (aN) {\n throw aN;\n }\n };b.prototype.draw = function (aN, aK, aI) {\n if (!(this == aI._$GT())) {\n console.log("### assert!! ### ");\n }if (aI._$IS[0]) {\n return;\n }var aL = aI;var aJ = this._$LP;if (aJ < 0) {\n aJ = 1;\n }var aH = this.getOpacity(aK, aL) * aI._$VS * aI.baseOpacity;var aM = aL._$hr != null ? aL._$hr : aL._$Cr;aN.setClipBufPre_clipContextForDraw(aI.clipBufPre_clipContext);aN._$WP(this.culling);aN._$Uo(aJ, 3 * this._$Yo, this._$BP, aM, this._$Qi, aH, this._$6s, aL);\n };b.prototype.dump = function () {\n console.log(" _$yi( %d ) , _$d0( %d ) , _$Yo( %d ) \\n", this._$LP, this._$d0, this._$Yo);console.log(" _$Oi _$di = { ");for (var aJ = 0; aJ < this._$BP.length; aJ++) {\n console.log("%5d ,", this._$BP[aJ]);\n }console.log("\\n _$5i _$30");for (var aJ = 0; aJ < this._$Eo.length; aJ++) {\n console.log("\\n _$30[%d] = ", aJ);var aH = this._$Eo[aJ];for (var aI = 0; aI < aH.length; aI++) {\n console.log("%6.2f, ", aH[aI]);\n }\n }console.log("\\n");\n };b.prototype._$72 = function (aH) {\n if (this._$5P == null) {\n return null;\n }return this._$5P[aH];\n };b.prototype.getIndexArray = function () {\n return this._$BP;\n };function ag(aH) {\n aB.prototype.constructor.call(this, aH);this._$8r = a._$ur;this._$Cr = null;this._$hr = null;\n }ag.prototype = new aB();ag.prototype.getTransformedPoints = function () {\n return this._$hr != null ? this._$hr : this._$Cr;\n };function k() {\n if (j) {\n return;\n }this.x = null;this.y = null;\n }k.prototype._$HT = function (aH) {\n this.x = aH.x;this.y = aH.y;\n };k.prototype._$HT = function (aH, aI) {\n this.x = aH;this.y = aI;\n };function l(aH) {\n if (j) {\n return;\n }aa.prototype.constructor.call(this);this.drawParamWebGL = new C(aH);this.drawParamWebGL.setGL(Q.getGL(aH));\n }l.prototype = new aa();l.loadModel = function (aI) {\n var aH = new l();aa._$62(aH, aI);return aH;\n };l.loadModel = function (aI, aK) {\n var aJ = aK || 0;var aH = new l(aJ);aa._$62(aH, aI);return aH;\n };l._$to = function () {\n var aH = new l();return aH;\n };l._$er = function (aM) {\n var aJ = new _$5("../_$_r/_$t0/_$Ri/_$_P._$d");if (aJ.exists() == false) {\n throw new _$ls("_$t0 _$_ _$6 _$Ui :: " + aJ._$PL());\n }var aH = ["../_$_r/_$t0/_$Ri/_$_P.512/_$CP._$1", "../_$_r/_$t0/_$Ri/_$_P.512/_$vP._$1", "../_$_r/_$t0/_$Ri/_$_P.512/_$EP._$1", "../_$_r/_$t0/_$Ri/_$_P.512/_$pP._$1"];var aK = l.loadModel(aJ._$3b());for (var aI = 0; aI < aH.length; aI++) {\n var aL = new _$5(aH[aI]);if (aL.exists() == false) {\n throw new _$ls("_$t0 _$_ _$6 _$Ui :: " + aL._$PL());\n }aK.setTexture(aI, _$nL._$_o(aM, aL._$3b()));\n }return aK;\n };l.prototype.setGL = function (aH) {\n Q.setGL(aH);\n };l.prototype.setTransform = function (aH) {\n this.drawParamWebGL.setTransform(aH);\n };l.prototype.update = function () {\n this._$5S.update();this._$5S.preDraw(this.drawParamWebGL);\n };l.prototype.draw = function () {\n this._$5S.draw(this.drawParamWebGL);\n };l.prototype._$K2 = function () {\n this.drawParamWebGL._$K2();\n };l.prototype.setTexture = function (aI, aH) {\n if (this.drawParamWebGL == null) {\n q._$li("_$Yi for QT _$ki / _$XS() is _$6 _$ui!!");\n }this.drawParamWebGL.setTexture(aI, aH);\n };l.prototype.setTexture = function (aI, aH) {\n if (this.drawParamWebGL == null) {\n q._$li("_$Yi for QT _$ki / _$XS() is _$6 _$ui!!");\n }this.drawParamWebGL.setTexture(aI, aH);\n };l.prototype._$Rs = function () {\n return this.drawParamWebGL._$Rs();\n };l.prototype._$Ds = function (aH) {\n this.drawParamWebGL._$Ds(aH);\n };l.prototype.getDrawParam = function () {\n return this.drawParamWebGL;\n };l.prototype.setMatrix = function (aH) {\n this.drawParamWebGL.setMatrix(aH);\n };l.prototype.setPremultipliedAlpha = function (aH) {\n this.drawParamWebGL.setPremultipliedAlpha(aH);\n };l.prototype.isPremultipliedAlpha = function () {\n return this.drawParamWebGL.isPremultipliedAlpha();\n };l.prototype.setAnisotropy = function (aH) {\n this.drawParamWebGL.setAnisotropy(aH);\n };l.prototype.getAnisotropy = function () {\n return this.drawParamWebGL.getAnisotropy();\n };function V() {\n if (j) {\n return;\n }this.motions = null;this._$eb = false;this.motions = new Array();\n }V.prototype._$tb = function () {\n return this.motions;\n };V.prototype.startMotion = function (aJ, aI) {\n var aM = null;var aL = null;var aH = this.motions.length;for (var aK = 0; aK < aH; ++aK) {\n aL = this.motions[aK];if (aL == null) {\n continue;\n }aL._$qS(aL._$w0.getFadeOut());if (this._$eb) {\n q._$Ji("MotionQueueManager[size:%2d]->startMotion() / start _$K _$3 (m%d)\\n", aH, aL._$sr);\n }\n }if (aJ == null) {\n return -1;\n }aL = new M();aL._$w0 = aJ;this.motions.push(aL);var aN = aL._$sr;if (this._$eb) {\n q._$Ji("MotionQueueManager[size:%2d]->startMotion() / new _$w0 (m%d)\\n", aH, aN);\n }return aN;\n };V.prototype.updateParam = function (aJ) {\n try {\n var aI = false;for (var aK = 0; aK < this.motions.length; aK++) {\n var aL = this.motions[aK];if (aL == null) {\n this.motions.splice(aK, 1);aK--;continue;\n }var aH = aL._$w0;if (aH == null) {\n this.motions = this.motions.splice(aK, 1);aK--;continue;\n }aH.updateParam(aJ, aL);aI = true;if (aL.isFinished()) {\n if (this._$eb) {\n q._$Ji("MotionQueueManager[size:%2d]->updateParam() / _$T0 _$w0 (m%d)\\n", this.motions.length - 1, aL._$sr);\n }this.motions.splice(aK, 1);aK--;\n } else {}\n }return aI;\n } catch (aM) {\n q._$li(aM);return true;\n }\n };V.prototype.isFinished = function (aK) {\n if (arguments.length >= 1) {\n for (var aI = 0; aI < this.motions.length; aI++) {\n var aJ = this.motions[aI];if (aJ == null) {\n continue;\n }if (aJ._$sr == aK && !aJ.isFinished()) {\n return false;\n }\n }return true;\n } else {\n for (var aI = 0; aI < this.motions.length; aI++) {\n var aJ = this.motions[aI];if (aJ == null) {\n this.motions.splice(aI, 1);aI--;continue;\n }var aH = aJ._$w0;if (aH == null) {\n this.motions.splice(aI, 1);aI--;continue;\n }if (!aJ.isFinished()) {\n return false;\n }\n }return true;\n }\n };V.prototype.stopAllMotions = function () {\n for (var aI = 0; aI < this.motions.length; aI++) {\n var aJ = this.motions[aI];if (aJ == null) {\n this.motions.splice(aI, 1);aI--;continue;\n }var aH = aJ._$w0;if (aH == null) {\n this.motions.splice(aI, 1);aI--;continue;\n }if (true) {\n this.motions.splice(aI, 1);aI--;\n }\n }\n };V.prototype._$Zr = function (aH) {\n this._$eb = aH;\n };V.prototype._$e = function () {\n console.log("-- _$R --\\n");for (var aH = 0; aH < this.motions.length; aH++) {\n var aI = this.motions[aH];var aJ = aI._$w0;console.log("MotionQueueEnt[%d] :: %s\\n", this.motions.length, aJ.toString());\n }\n };function M() {\n this._$w0 = null;this._$AT = true;this._$9L = false;this._$z2 = -1;this._$bs = -1;this._$Do = -1;this._$sr = null;this._$sr = M._$Gs++;\n }M._$Gs = 0;M.prototype.isFinished = function () {\n return this._$9L;\n };M.prototype._$qS = function (aJ) {\n var aI = P.getUserTimeMSec();var aH = aI + aJ;if (this._$Do < 0 || aH < this._$Do) {\n this._$Do = aH;\n }\n };M.prototype._$Bs = function () {\n return this._$sr;\n };function am() {\n this.m = new Array(1, 0, 0, 0, 1, 0, 0, 0, 1);\n }am.prototype.setContext = function (aI) {\n var aH = this.m;aI.transform(aH[0], aH[1], aH[3], aH[4], aH[6], aH[7]);\n };am.prototype.toString = function () {\n var aI = "LDTransform { ";for (var aH = 0; aH < 9; aH++) {\n aI += this.m[aH].toFixed(2) + " ,";\n }aI += " }";return aI;\n };am.prototype.identity = function () {\n var aH = this.m;aH[0] = aH[4] = aH[8] = 1;aH[1] = aH[2] = aH[3] = aH[5] = aH[6] = aH[7] = 0;\n };am.prototype._$PS = function (aI, aK, aJ) {\n if (aJ == null) {\n aJ = new Array(0, 0);\n }var aH = this.m;aJ[0] = aH[0] * aI + aH[3] * aK + aH[6];aJ[1] = aH[1] * aI + aH[4] * aK + aH[7];return aJ;\n };am.prototype._$P2 = function (aK) {\n if (!aK) {\n aK = new am();\n }var aI = this.m;var aT = aI[0];var aS = aI[1];var aR = aI[2];var aQ = aI[3];var aP = aI[4];var aO = aI[5];var aN = aI[6];var aM = aI[7];var aL = aI[8];var aJ = aT * aP * aL + aS * aO * aN + aR * aQ * aM - aT * aO * aM - aR * aP * aN - aS * aQ * aL;if (aJ == 0) {\n return null;\n } else {\n var aH = 1 / aJ;aK.m[0] = aH * (aP * aL - aM * aO);aK.m[1] = aH * (aM * aR - aS * aL);aK.m[2] = aH * (aS * aO - aP * aR);aK.m[3] = aH * (aN * aO - aQ * aL);aK.m[4] = aH * (aT * aL - aN * aR);aK.m[5] = aH * (aQ * aR - aT * aO);aK.m[6] = aH * (aQ * aM - aN * aP);aK.m[7] = aH * (aN * aS - aT * aM);aK.m[8] = aH * (aT * aP - aQ * aS);return aK;\n }\n };am.prototype.transform = function (aI, aK, aJ) {\n if (aJ == null) {\n aJ = new Array(0, 0);\n }var aH = this.m;aJ[0] = aH[0] * aI + aH[3] * aK + aH[6];aJ[1] = aH[1] * aI + aH[4] * aK + aH[7];return aJ;\n };am.prototype.translate = function (aI, aJ) {\n var aH = this.m;aH[6] = aH[0] * aI + aH[3] * aJ + aH[6];aH[7] = aH[1] * aI + aH[4] * aJ + aH[7];aH[8] = aH[2] * aI + aH[5] * aJ + aH[8];\n };am.prototype.scale = function (aJ, aI) {\n var aH = this.m;aH[0] *= aJ;aH[1] *= aJ;aH[2] *= aJ;aH[3] *= aI;aH[4] *= aI;aH[5] *= aI;\n };am.prototype.shear = function (aM, aL) {\n var aH = this.m;var aK = aH[0] + aH[3] * aL;var aJ = aH[1] + aH[4] * aL;var aI = aH[2] + aH[5] * aL;aH[3] = aH[0] * aM + aH[3];aH[4] = aH[1] * aM + aH[4];aH[5] = aH[2] * aM + aH[5];aH[0] = aK;aH[1] = aJ;aH[2] = aI;\n };am.prototype.rotate = function (aM) {\n var aH = this.m;var aN = Math.cos(aM);var aL = Math.sin(aM);var aK = aH[0] * aN + aH[3] * aL;var aJ = aH[1] * aN + aH[4] * aL;var aI = aH[2] * aN + aH[5] * aL;aH[3] = -aH[0] * aL + aH[3] * aN;aH[4] = -aH[1] * aL + aH[4] * aN;aH[5] = -aH[2] * aL + aH[5] * aN;aH[0] = aK;aH[1] = aJ;aH[2] = aI;\n };am.prototype.concatenate = function (aL) {\n var aO = this.m;var aM = aL.m;var aS = aO[0] * aM[0] + aO[3] * aM[1] + aO[6] * aM[2];var aR = aO[1] * aM[0] + aO[4] * aM[1] + aO[7] * aM[2];var aQ = aO[2] * aM[0] + aO[5] * aM[1] + aO[8] * aM[2];var aP = aO[0] * aM[3] + aO[3] * aM[4] + aO[6] * aM[5];var aN = aO[1] * aM[3] + aO[4] * aM[4] + aO[7] * aM[5];var aK = aO[2] * aM[3] + aO[5] * aM[4] + aO[8] * aM[5];var aJ = aO[0] * aM[6] + aO[3] * aM[7] + aO[6] * aM[8];var aI = aO[1] * aM[6] + aO[4] * aM[7] + aO[7] * aM[8];var aH = aO[2] * aM[6] + aO[5] * aM[7] + aO[8] * aM[8];m[0] = aS;m[1] = aR;m[2] = aQ;m[3] = aP;m[4] = aN;m[5] = aK;m[6] = aJ;m[7] = aI;m[8] = aH;\n };function n(aH) {\n if (j) {\n return;\n }ak.prototype.constructor.call(this, aH);\n }n.prototype = new ak();n._$eT = null;n._$tP = new Object();n._$2o = function () {\n if (n._$eT == null) {\n n._$eT = n.getID("DST_BASE");\n }return n._$eT;\n };n._$27 = function () {\n n._$tP.clear();n._$eT = null;\n };n.getID = function (aH) {\n var aI = n._$tP[aH];if (aI == null) {\n aI = new n(aH);n._$tP[aH] = aI;\n }return aI;\n };n.prototype._$3s = function () {\n return new n();\n };function C(aH) {\n if (j) {\n return;\n }ax.prototype.constructor.call(this);this.textures = new Array();this.transform = null;this.gl = null;this.glno = aH;this.firstDraw = true;this.anisotropyExt = null;this.maxAnisotropy = 0;this._$As = 32;this._$Gr = false;this._$NT = null;this._$vS = null;this._$no = null;this.vertShader = null;this.fragShader = null;this.vertShaderOff = null;this.fragShaderOff = null;\n }C.prototype = new ax();C._$9r = function (aH) {\n var aI = new Float32Array(aH);return aI;\n };C._$vb = function (aH) {\n var aI = new Int16Array(aH);return aI;\n };C._$cr = function (aI, aH) {\n if (aI == null || aI._$yL() < aH.length) {\n aI = C._$9r(aH.length * 2);aI.put(aH);aI._$oT(0);\n } else {\n aI.clear();aI.put(aH);aI._$oT(0);\n }return aI;\n };C._$mb = function (aI, aH) {\n if (aI == null || aI._$yL() < aH.length) {\n aI = C._$vb(aH.length * 2);aI.put(aH);aI._$oT(0);\n } else {\n aI.clear();aI.put(aH);aI._$oT(0);\n }return aI;\n };C._$Hs = function () {\n return this._$Gr;\n };C._$as = function (aH) {\n this._$Gr = aH;\n };C.prototype.getGL = function () {\n return this.gl;\n };C.prototype.setGL = function (aH) {\n this.gl = aH;\n };C.prototype.setTransform = function (aH) {\n this.transform = aH;\n };C.prototype._$ZT = function () {\n var aH = this.gl;if (this.firstDraw) {\n this.initShader();this.firstDraw = false;this.anisotropyExt = aH.getExtension("EXT_texture_filter_anisotropic") || aH.getExtension("WEBKIT_EXT_texture_filter_anisotropic") || aH.getExtension("MOZ_EXT_texture_filter_anisotropic");if (this.anisotropyExt) {\n this.maxAnisotropy = aH.getParameter(this.anisotropyExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT);\n }\n }aH.disable(aH.SCISSOR_TEST);aH.disable(aH.STENCIL_TEST);aH.disable(aH.DEPTH_TEST);aH.frontFace(aH.CW);aH.enable(aH.BLEND);aH.colorMask(1, 1, 1, 1);aH.bindBuffer(aH.ARRAY_BUFFER, null);aH.bindBuffer(aH.ELEMENT_ARRAY_BUFFER, null);\n };C.prototype._$Uo = function (aS, aT, aL, aU, aV, aN, aM, aO) {\n if (aN < 0.01 && this.clipBufPre_clipContextMask == null) {\n return;\n }var aH = aN > 0.9 ? Q.EXPAND_W : 0;var a0 = this.gl;if (this.gl == null) {\n throw new Error("gl is null");\n }var a1 = false;var aQ = 1;var aP = 1;var a3 = 1;var aZ = 1;var aW = this._$C0 * aP * aN;var a2 = this._$tT * a3 * aN;var a5 = this._$WL * aZ * aN;var a7 = this._$lT * aN;if (this.clipBufPre_clipContextMask != null) {\n a0.frontFace(a0.CCW);a0.useProgram(this.shaderProgram);this._$vS = T(a0, this._$vS, aU);this._$no = L(a0, this._$no, aL);a0.enableVertexAttribArray(this.a_position_Loc);a0.vertexAttribPointer(this.a_position_Loc, 2, a0.FLOAT, false, 0, 0);this._$NT = T(a0, this._$NT, aV);a0.activeTexture(a0.TEXTURE1);a0.bindTexture(a0.TEXTURE_2D, this.textures[aS]);a0.uniform1i(this.s_texture0_Loc, 1);a0.enableVertexAttribArray(this.a_texCoord_Loc);a0.vertexAttribPointer(this.a_texCoord_Loc, 2, a0.FLOAT, false, 0, 0);a0.uniformMatrix4fv(this.u_matrix_Loc, false, this.getClipBufPre_clipContextMask().matrixForMask);var aY = this.getClipBufPre_clipContextMask().layoutChannelNo;var a4 = this.getChannelFlagAsColor(aY);a0.uniform4f(this.u_channelFlag, a4.r, a4.g, a4.b, a4.a);var aI = this.getClipBufPre_clipContextMask().layoutBounds;a0.uniform4f(this.u_baseColor_Loc, aI.x * 2 - 1, aI.y * 2 - 1, aI._$EL() * 2 - 1, aI._$5T() * 2 - 1);a0.uniform1i(this.u_maskFlag_Loc, true);\n } else {\n a1 = this.getClipBufPre_clipContextDraw() != null;if (a1) {\n a0.useProgram(this.shaderProgramOff);this._$vS = T(a0, this._$vS, aU);this._$no = L(a0, this._$no, aL);a0.enableVertexAttribArray(this.a_position_Loc_Off);a0.vertexAttribPointer(this.a_position_Loc_Off, 2, a0.FLOAT, false, 0, 0);this._$NT = T(a0, this._$NT, aV);a0.activeTexture(a0.TEXTURE1);a0.bindTexture(a0.TEXTURE_2D, this.textures[aS]);a0.uniform1i(this.s_texture0_Loc_Off, 1);a0.enableVertexAttribArray(this.a_texCoord_Loc_Off);a0.vertexAttribPointer(this.a_texCoord_Loc_Off, 2, a0.FLOAT, false, 0, 0);a0.uniformMatrix4fv(this.u_clipMatrix_Loc_Off, false, this.getClipBufPre_clipContextDraw().matrixForDraw);a0.uniformMatrix4fv(this.u_matrix_Loc_Off, false, this.matrix4x4);a0.activeTexture(a0.TEXTURE2);a0.bindTexture(a0.TEXTURE_2D, Q.fTexture[this.glno]);a0.uniform1i(this.s_texture1_Loc_Off, 2);var aY = this.getClipBufPre_clipContextDraw().layoutChannelNo;var a4 = this.getChannelFlagAsColor(aY);a0.uniform4f(this.u_channelFlag_Loc_Off, a4.r, a4.g, a4.b, a4.a);a0.uniform4f(this.u_baseColor_Loc_Off, aW, a2, a5, a7);\n } else {\n a0.useProgram(this.shaderProgram);this._$vS = T(a0, this._$vS, aU);this._$no = L(a0, this._$no, aL);a0.enableVertexAttribArray(this.a_position_Loc);a0.vertexAttribPointer(this.a_position_Loc, 2, a0.FLOAT, false, 0, 0);this._$NT = T(a0, this._$NT, aV);a0.activeTexture(a0.TEXTURE1);a0.bindTexture(a0.TEXTURE_2D, this.textures[aS]);a0.uniform1i(this.s_texture0_Loc, 1);a0.enableVertexAttribArray(this.a_texCoord_Loc);a0.vertexAttribPointer(this.a_texCoord_Loc, 2, a0.FLOAT, false, 0, 0);a0.uniformMatrix4fv(this.u_matrix_Loc, false, this.matrix4x4);a0.uniform4f(this.u_baseColor_Loc, aW, a2, a5, a7);a0.uniform1i(this.u_maskFlag_Loc, false);\n }\n }if (this.culling) {\n this.gl.enable(a0.CULL_FACE);\n } else {\n this.gl.disable(a0.CULL_FACE);\n }this.gl.enable(a0.BLEND);var a6;var aX;var aR;var aK;if (this.clipBufPre_clipContextMask != null) {\n a6 = a0.ONE;aX = a0.ONE_MINUS_SRC_ALPHA;aR = a0.ONE;aK = a0.ONE_MINUS_SRC_ALPHA;\n } else {\n switch (aM) {case b._$ms:\n a6 = a0.ONE;aX = a0.ONE_MINUS_SRC_ALPHA;aR = a0.ONE;aK = a0.ONE_MINUS_SRC_ALPHA;break;case b._$ns:\n a6 = a0.ONE;aX = a0.ONE;aR = a0.ZERO;aK = a0.ONE;break;case b._$_s:\n a6 = a0.DST_COLOR;aX = a0.ONE_MINUS_SRC_ALPHA;aR = a0.ZERO;aK = a0.ONE;break;}\n }a0.blendEquationSeparate(a0.FUNC_ADD, a0.FUNC_ADD);a0.blendFuncSeparate(a6, aX, aR, aK);if (this.anisotropyExt) {\n a0.texParameteri(a0.TEXTURE_2D, this.anisotropyExt.TEXTURE_MAX_ANISOTROPY_EXT, this.maxAnisotropy);\n }var aJ = aL.length;a0.drawElements(a0.TRIANGLES, aJ, a0.UNSIGNED_SHORT, 0);a0.bindTexture(a0.TEXTURE_2D, null);\n };function T(aJ, aH, aI) {\n if (aH == null) {\n aH = aJ.createBuffer();\n }aJ.bindBuffer(aJ.ARRAY_BUFFER, aH);aJ.bufferData(aJ.ARRAY_BUFFER, aI, aJ.DYNAMIC_DRAW);return aH;\n }function L(aJ, aH, aI) {\n if (aH == null) {\n aH = aJ.createBuffer();\n }aJ.bindBuffer(aJ.ELEMENT_ARRAY_BUFFER, aH);aJ.bufferData(aJ.ELEMENT_ARRAY_BUFFER, aI, aJ.DYNAMIC_DRAW);return aH;\n }C.prototype._$Rs = function () {\n throw new Error("_$Rs");\n };C.prototype._$Ds = function (aH) {\n throw new Error("_$Ds");\n };C.prototype._$K2 = function () {\n for (var aH = 0; aH < this.textures.length; aH++) {\n var aI = this.textures[aH];if (aI != 0) {\n this.gl._$K2(1, this.textures, aH);this.textures[aH] = null;\n }\n }\n };C.prototype.setTexture = function (aH, aI) {\n this.textures[aH] = aI;\n };C.prototype.initShader = function () {\n var aH = this.gl;this.loadShaders2();this.a_position_Loc = aH.getAttribLocation(this.shaderProgram, "a_position");this.a_texCoord_Loc = aH.getAttribLocation(this.shaderProgram, "a_texCoord");this.u_matrix_Loc = aH.getUniformLocation(this.shaderProgram, "u_mvpMatrix");this.s_texture0_Loc = aH.getUniformLocation(this.shaderProgram, "s_texture0");this.u_channelFlag = aH.getUniformLocation(this.shaderProgram, "u_channelFlag");this.u_baseColor_Loc = aH.getUniformLocation(this.shaderProgram, "u_baseColor");this.u_maskFlag_Loc = aH.getUniformLocation(this.shaderProgram, "u_maskFlag");this.a_position_Loc_Off = aH.getAttribLocation(this.shaderProgramOff, "a_position");this.a_texCoord_Loc_Off = aH.getAttribLocation(this.shaderProgramOff, "a_texCoord");this.u_matrix_Loc_Off = aH.getUniformLocation(this.shaderProgramOff, "u_mvpMatrix");this.u_clipMatrix_Loc_Off = aH.getUniformLocation(this.shaderProgramOff, "u_ClipMatrix");this.s_texture0_Loc_Off = aH.getUniformLocation(this.shaderProgramOff, "s_texture0");this.s_texture1_Loc_Off = aH.getUniformLocation(this.shaderProgramOff, "s_texture1");this.u_channelFlag_Loc_Off = aH.getUniformLocation(this.shaderProgramOff, "u_channelFlag");this.u_baseColor_Loc_Off = aH.getUniformLocation(this.shaderProgramOff, "u_baseColor");\n };C.prototype.disposeShader = function () {\n var aH = this.gl;if (this.shaderProgram) {\n aH.deleteProgram(this.shaderProgram);this.shaderProgram = null;\n }if (this.shaderProgramOff) {\n aH.deleteProgram(this.shaderProgramOff);this.shaderProgramOff = null;\n }\n };C.prototype.compileShader = function (aJ, aN) {\n var aM = this.gl;var aH;var aL = aN;var aK = aM.createShader(aJ);if (aK == null) {\n q._$Ji("_$L0 to create shader");return null;\n }aM.shaderSource(aK, aL);aM.compileShader(aK);var aH = aM.getShaderParameter(aK, aM.COMPILE_STATUS);if (!aH) {\n var aI = aM.getShaderInfoLog(aK);q._$Ji("_$L0 to compile shader : " + aI);aM.deleteShader(aK);return null;\n }return aK;\n };C.prototype.loadShaders2 = function () {\n var aN = this.gl;this.shaderProgram = aN.createProgram();if (!this.shaderProgram) {\n return false;\n }this.shaderProgramOff = aN.createProgram();if (!this.shaderProgramOff) {\n return false;\n }var aK = "attribute vec4 a_position;attribute vec2 a_texCoord;varying vec2 v_texCoord;varying vec4 v_ClipPos;uniform mat4 u_mvpMatrix;void main(){ gl_Position = u_mvpMatrix * a_position; v_ClipPos = u_mvpMatrix * a_position; v_texCoord = a_texCoord;}";var aM = "precision mediump float;varying vec2 v_texCoord;varying vec4 v_ClipPos;uniform sampler2D s_texture0;uniform vec4 u_channelFlag;uniform vec4 u_baseColor;uniform bool u_maskFlag;void main(){ vec4 smpColor; if(u_maskFlag){ float isInside = step(u_baseColor.x, v_ClipPos.x/v_ClipPos.w) * step(u_baseColor.y, v_ClipPos.y/v_ClipPos.w) * step(v_ClipPos.x/v_ClipPos.w, u_baseColor.z) * step(v_ClipPos.y/v_ClipPos.w, u_baseColor.w); smpColor = u_channelFlag * texture2D(s_texture0 , v_texCoord).a * isInside; }else{ smpColor = texture2D(s_texture0 , v_texCoord) * u_baseColor; } gl_FragColor = smpColor;}";var aL = "attribute vec4 a_position;attribute vec2 a_texCoord;varying vec2 v_texCoord;varying vec4 v_ClipPos;uniform mat4 u_mvpMatrix;uniform mat4 u_ClipMatrix;void main(){ gl_Position = u_mvpMatrix * a_position; v_ClipPos = u_ClipMatrix * a_position; v_texCoord = a_texCoord ;}";var aJ = "precision mediump float ;varying vec2 v_texCoord;varying vec4 v_ClipPos;uniform sampler2D s_texture0;uniform sampler2D s_texture1;uniform vec4 u_channelFlag;uniform vec4 u_baseColor ;void main(){ vec4 col_formask = texture2D(s_texture0, v_texCoord) * u_baseColor; vec4 clipMask = texture2D(s_texture1, v_ClipPos.xy / v_ClipPos.w) * u_channelFlag; float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a; col_formask = col_formask * maskVal; gl_FragColor = col_formask;}";this.vertShader = this.compileShader(aN.VERTEX_SHADER, aK);if (!this.vertShader) {\n q._$Ji("Vertex shader compile _$li!");return false;\n }this.vertShaderOff = this.compileShader(aN.VERTEX_SHADER, aL);if (!this.vertShaderOff) {\n q._$Ji("OffVertex shader compile _$li!");return false;\n }this.fragShader = this.compileShader(aN.FRAGMENT_SHADER, aM);if (!this.fragShader) {\n q._$Ji("Fragment shader compile _$li!");return false;\n }this.fragShaderOff = this.compileShader(aN.FRAGMENT_SHADER, aJ);if (!this.fragShaderOff) {\n q._$Ji("OffFragment shader compile _$li!");return false;\n }aN.attachShader(this.shaderProgram, this.vertShader);aN.attachShader(this.shaderProgram, this.fragShader);aN.attachShader(this.shaderProgramOff, this.vertShaderOff);aN.attachShader(this.shaderProgramOff, this.fragShaderOff);aN.linkProgram(this.shaderProgram);aN.linkProgram(this.shaderProgramOff);var aH = aN.getProgramParameter(this.shaderProgram, aN.LINK_STATUS);if (!aH) {\n var aI = aN.getProgramInfoLog(this.shaderProgram);q._$Ji("_$L0 to link program: " + aI);if (this.vertShader) {\n aN.deleteShader(this.vertShader);this.vertShader = 0;\n }if (this.fragShader) {\n aN.deleteShader(this.fragShader);this.fragShader = 0;\n }if (this.shaderProgram) {\n aN.deleteProgram(this.shaderProgram);this.shaderProgram = 0;\n }if (this.vertShaderOff) {\n aN.deleteShader(this.vertShaderOff);this.vertShaderOff = 0;\n }if (this.fragShaderOff) {\n aN.deleteShader(this.fragShaderOff);this.fragShaderOff = 0;\n }if (this.shaderProgramOff) {\n aN.deleteProgram(this.shaderProgramOff);this.shaderProgramOff = 0;\n }return false;\n }return true;\n };C.prototype.createFramebuffer = function () {\n var aL = this.gl;var aK = Q.clippingMaskBufferSize;var aJ = aL.createFramebuffer();aL.bindFramebuffer(aL.FRAMEBUFFER, aJ);var aH = aL.createRenderbuffer();aL.bindRenderbuffer(aL.RENDERBUFFER, aH);aL.renderbufferStorage(aL.RENDERBUFFER, aL.RGBA4, aK, aK);aL.framebufferRenderbuffer(aL.FRAMEBUFFER, aL.COLOR_ATTACHMENT0, aL.RENDERBUFFER, aH);var aI = aL.createTexture();aL.bindTexture(aL.TEXTURE_2D, aI);aL.texImage2D(aL.TEXTURE_2D, 0, aL.RGBA, aK, aK, 0, aL.RGBA, aL.UNSIGNED_BYTE, null);aL.texParameteri(aL.TEXTURE_2D, aL.TEXTURE_MIN_FILTER, aL.LINEAR);aL.texParameteri(aL.TEXTURE_2D, aL.TEXTURE_MAG_FILTER, aL.LINEAR);aL.texParameteri(aL.TEXTURE_2D, aL.TEXTURE_WRAP_S, aL.CLAMP_TO_EDGE);aL.texParameteri(aL.TEXTURE_2D, aL.TEXTURE_WRAP_T, aL.CLAMP_TO_EDGE);aL.framebufferTexture2D(aL.FRAMEBUFFER, aL.COLOR_ATTACHMENT0, aL.TEXTURE_2D, aI, 0);aL.bindTexture(aL.TEXTURE_2D, null);aL.bindRenderbuffer(aL.RENDERBUFFER, null);aL.bindFramebuffer(aL.FRAMEBUFFER, null);Q.fTexture[this.glno] = aI;return { framebuffer: aJ, renderbuffer: aH, texture: Q.fTexture[this.glno] };\n };function K(aH) {\n if (j) {\n return;\n }this._$P = new Int8Array(8);this._$R0 = new DataView(this._$P.buffer);this._$3i = new Int8Array(1000);this._$hL = 0;this._$v0 = 0;this._$S2 = 0;this._$Ko = new Array();this._$T = aH;this._$F = 0;\n }K.prototype._$fP = function () {\n var aK = this._$ST();var aJ, aI, aH;if ((aK & 128) == 0) {\n return aK & 255;\n } else {\n if (((aJ = this._$ST()) & 128) == 0) {\n return (aK & 127) << 7 | aJ & 127;\n } else {\n if (((aI = this._$ST()) & 128) == 0) {\n return (aK & 127) << 14 | (aJ & 127) << 7 | aI & 255;\n } else {\n if (((aH = this._$ST()) & 128) == 0) {\n return (aK & 127) << 21 | (aJ & 127) << 14 | (aI & 127) << 7 | aH & 255;\n } else {\n throw new J("_$L _$0P _");\n }\n }\n }\n }\n };K.prototype.getFormatVersion = function () {\n return this._$S2;\n };K.prototype._$gr = function (aH) {\n this._$S2 = aH;\n };K.prototype._$3L = function () {\n return this._$fP();\n };K.prototype._$mP = function () {\n this._$zT();this._$F += 8;return this._$T.getFloat64(this._$F - 8);\n };K.prototype._$_T = function () {\n this._$zT();this._$F += 4;return this._$T.getFloat32(this._$F - 4);\n };K.prototype._$6L = function () {\n this._$zT();this._$F += 4;return this._$T.getInt32(this._$F - 4);\n };K.prototype._$ST = function () {\n this._$zT();return this._$T.getInt8(this._$F++);\n };K.prototype._$9T = function () {\n this._$zT();this._$F += 2;return this._$T.getInt16(this._$F - 2);\n };K.prototype._$2T = function () {\n this._$zT();this._$F += 8;throw new J("_$L _$q read long");\n };K.prototype._$po = function () {\n this._$zT();return this._$T.getInt8(this._$F++) != 0;\n };var O = true;K.prototype._$bT = function () {\n this._$zT();var aH = this._$3L();var aK = null;if (O) {\n try {\n var aM = new ArrayBuffer(aH * 2);aK = new Uint16Array(aM);for (var aJ = 0; aJ < aH; ++aJ) {\n aK[aJ] = this._$T.getUint8(this._$F++);\n }return String.fromCharCode.apply(null, aK);\n } catch (aL) {\n O = false;\n }\n }try {\n var aI = new Array();if (aK == null) {\n for (var aJ = 0; aJ < aH; ++aJ) {\n aI[aJ] = this._$T.getUint8(this._$F++);\n }\n } else {\n for (var aJ = 0; aJ < aH; ++aJ) {\n aI[aJ] = aK[aJ];\n }\n }return String.fromCharCode.apply(null, aI);\n } catch (aL) {\n console.log("read utf8 / _$rT _$L0 !! : " + aL);\n }\n };K.prototype._$cS = function () {\n this._$zT();var aI = this._$3L();var aH = new Int32Array(aI);for (var aJ = 0; aJ < aI; aJ++) {\n aH[aJ] = this._$T.getInt32(this._$F);this._$F += 4;\n }return aH;\n };K.prototype._$Tb = function () {\n this._$zT();var aI = this._$3L();var aH = new Float32Array(aI);for (var aJ = 0; aJ < aI; aJ++) {\n aH[aJ] = this._$T.getFloat32(this._$F);this._$F += 4;\n }return aH;\n };K.prototype._$5b = function () {\n this._$zT();var aI = this._$3L();var aH = new Float64Array(aI);for (var aJ = 0; aJ < aI; aJ++) {\n aH[aJ] = this._$T.getFloat64(this._$F);this._$F += 8;\n }return aH;\n };K.prototype._$nP = function () {\n return this._$Jb(-1);\n };K.prototype._$Jb = function (aJ) {\n this._$zT();if (aJ < 0) {\n aJ = this._$3L();\n }if (aJ == ay._$7P) {\n var aH = this._$6L();if (0 <= aH && aH < this._$Ko.length) {\n return this._$Ko[aH];\n } else {\n throw new J("_$sL _$4i @_$m0");\n }\n } else {\n var aI = this._$4b(aJ);this._$Ko.push(aI);return aI;\n }\n };K.prototype._$4b = function (aN) {\n if (aN == 0) {\n return null;\n }if (aN == 50) {\n var aK = this._$bT();var aI = Z.getID(aK);return aI;\n } else {\n if (aN == 51) {\n var aK = this._$bT();var aI = n.getID(aK);return aI;\n } else {\n if (aN == 134) {\n var aK = this._$bT();var aI = i.getID(aK);return aI;\n } else {\n if (aN == 60) {\n var aK = this._$bT();var aI = z.getID(aK);return aI;\n }\n }\n }\n }if (aN >= 48) {\n var aL = ay._$9o(aN);if (aL != null) {\n aL._$F0(this);return aL;\n } else {\n return null;\n }\n }switch (aN) {case 1:\n return this._$bT();case 10:\n var aM = this._$6L();return new I(aM, true);case 11:\n return new av(this._$mP(), this._$mP(), this._$mP(), this._$mP());case 12:\n return new av(this._$_T(), this._$_T(), this._$_T(), this._$_T());case 13:\n return new e(this._$mP(), this._$mP());case 14:\n return new e(this._$_T(), this._$_T());case 15:\n var aH = this._$3L();var aI = new Array(aH);for (var aJ = 0; aJ < aH; aJ++) {\n aI[aJ] = this._$nP();\n }return aI;case 17:\n var aI = new aD(this._$mP(), this._$mP(), this._$mP(), this._$mP(), this._$mP(), this._$mP());return aI;case 21:\n return new F(this._$6L(), this._$6L(), this._$6L(), this._$6L());case 22:\n return new k(this._$6L(), this._$6L());case 23:\n throw new Error("_$L _$ro ");case 16:case 25:\n return this._$cS();case 26:\n return this._$5b();case 27:\n return this._$Tb();case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 18:case 19:case 20:case 24:case 28:\n throw new J("_$6 _$q : _$nP() of 2-9 ,18,19,20,24,28 : " + aN);default:\n throw new J("_$6 _$q : _$nP() NO _$i : " + aN);}\n };K.prototype._$8L = function () {\n if (this._$hL == 0) {\n this._$v0 = this._$ST();\n } else {\n if (this._$hL == 8) {\n this._$v0 = this._$ST();this._$hL = 0;\n }\n }return (this._$v0 >> 7 - this._$hL++ & 1) == 1;\n };K.prototype._$zT = function () {\n if (this._$hL != 0) {\n this._$hL = 0;\n }\n };function ai() {}ai.prototype._$wP = function (aM, aI, aK) {\n for (var aL = 0; aL < aK; aL++) {\n for (var aH = 0; aH < aI; aH++) {\n var aJ = 2 * (aH + aL * aI);console.log("(% 7.3f , % 7.3f) , ", aM[aJ], aM[aJ + 1]);\n }console.log("\\n");\n }console.log("\\n");\n };function aC() {}aC._$2S = Math.PI / 180;aC._$bS = Math.PI / 180;aC._$wS = 180 / Math.PI;aC._$NS = 180 / Math.PI;aC.PI_F = Math.PI;aC._$kT = [0, 0.012368, 0.024734, 0.037097, 0.049454, 0.061803, 0.074143, 0.086471, 0.098786, 0.111087, 0.12337, 0.135634, 0.147877, 0.160098, 0.172295, 0.184465, 0.196606, 0.208718, 0.220798, 0.232844, 0.244854, 0.256827, 0.268761, 0.280654, 0.292503, 0.304308, 0.316066, 0.327776, 0.339436, 0.351044, 0.362598, 0.374097, 0.385538, 0.396921, 0.408243, 0.419502, 0.430697, 0.441826, 0.452888, 0.463881, 0.474802, 0.485651, 0.496425, 0.507124, 0.517745, 0.528287, 0.538748, 0.549126, 0.559421, 0.56963, 0.579752, 0.589785, 0.599728, 0.609579, 0.619337, 0.629, 0.638567, 0.648036, 0.657406, 0.666676, 0.675843, 0.684908, 0.693867, 0.70272, 0.711466, 0.720103, 0.72863, 0.737045, 0.745348, 0.753536, 0.76161, 0.769566, 0.777405, 0.785125, 0.792725, 0.800204, 0.807561, 0.814793, 0.821901, 0.828884, 0.835739, 0.842467, 0.849066, 0.855535, 0.861873, 0.868079, 0.874153, 0.880093, 0.885898, 0.891567, 0.897101, 0.902497, 0.907754, 0.912873, 0.917853, 0.922692, 0.92739, 0.931946, 0.936359, 0.940629, 0.944755, 0.948737, 0.952574, 0.956265, 0.959809, 0.963207, 0.966457, 0.96956, 0.972514, 0.97532, 0.977976, 0.980482, 0.982839, 0.985045, 0.987101, 0.989006, 0.990759, 0.992361, 0.993811, 0.995109, 0.996254, 0.997248, 0.998088, 0.998776, 0.999312, 0.999694, 0.999924, 1];aC._$92 = function (aK, aI) {\n var aH = Math.atan2(aK[1], aK[0]);var aJ = Math.atan2(aI[1], aI[0]);return aC._$tS(aH, aJ);\n };aC._$tS = function (aI, aH) {\n var aJ = aI - aH;while (aJ < -Math.PI) {\n aJ += 2 * Math.PI;\n }while (aJ > Math.PI) {\n aJ -= 2 * Math.PI;\n }return aJ;\n };aC._$9 = function (aH) {\n return Math.sin(aH);\n };aC.fcos = function (aH) {\n return Math.cos(aH);\n };function aB(aH) {\n if (j) {\n return;\n }this._$e0 = null;this._$IP = null;this._$Us = null;this._$7s = null;this._$IS = [false];this._$VS = null;this._$AT = true;this.baseOpacity = 1;this.clipBufPre_clipContext = null;this._$e0 = aH;\n }aB.prototype._$u2 = function () {\n return this._$IS[0];\n };aB.prototype._$yo = function () {\n return this._$AT && !this._$IS[0];\n };aB.prototype._$GT = function () {\n return this._$e0;\n };function r() {}r._$W2 = 0;r.SYSTEM_INFO = null;r.USER_AGENT = navigator.userAgent;r.isIPhone = function () {\n if (!r.SYSTEM_INFO) {\n r.setup();\n }return r.SYSTEM_INFO._isIPhone;\n };r.isIOS = function () {\n if (!r.SYSTEM_INFO) {\n r.setup();\n }return r.SYSTEM_INFO._isIPhone || r.SYSTEM_INFO._isIPad;\n };r.isAndroid = function () {\n if (!r.SYSTEM_INFO) {\n r.setup();\n }return r.SYSTEM_INFO._isAndroid;\n };r.getOSVersion = function () {\n if (!r.SYSTEM_INFO) {\n r.setup();\n }return r.SYSTEM_INFO.version;\n };r.getOS = function () {\n if (!r.SYSTEM_INFO) {\n r.setup();\n }if (r.SYSTEM_INFO._isIPhone || r.SYSTEM_INFO._isIPad) {\n return "iOS";\n }if (r.SYSTEM_INFO._isAndroid) {\n return "Android";\n } else {\n return "_$Q0 OS";\n }\n };r.setup = function () {\n var aK = r.USER_AGENT;function aI(aO, aR) {\n var aN = aO.substring(aR).split(/[ _,;\\.]/);var aQ = 0;for (var aM = 0; aM <= 2; aM++) {\n if (isNaN(aN[aM])) {\n break;\n }var aP = parseInt(aN[aM]);if (aP < 0 || aP > 999) {\n q._$li("err : " + aP + " @UtHtml5.setup()");aQ = 0;break;\n }aQ += aP * Math.pow(1000, 2 - aM);\n }return aQ;\n }var aL;var aH;var aJ = r.SYSTEM_INFO = { userAgent: aK };if ((aL = aK.indexOf("iPhone OS ")) >= 0) {\n aJ.os = "iPhone";aJ._isIPhone = true;aJ.version = aI(aK, aL + "iPhone OS ".length);\n } else {\n if ((aL = aK.indexOf("iPad")) >= 0) {\n aL = aK.indexOf("CPU OS");if (aL < 0) {\n q._$li(" err : " + aK + " @UtHtml5.setup()");return;\n }aJ.os = "iPad";aJ._isIPad = true;aJ.version = aI(aK, aL + "CPU OS ".length);\n } else {\n if ((aL = aK.indexOf("Android")) >= 0) {\n aJ.os = "Android";aJ._isAndroid = true;aJ.version = aI(aK, aL + "Android ".length);\n } else {\n aJ.os = "-";aJ.version = -1;\n }\n }\n }\n };window.UtSystem = P;window.UtDebug = q;window.LDTransform = am;window.LDGL = au;window.Live2D = Q;window.Live2DModelWebGL = l;window.Live2DModelJS = v;window.Live2DMotion = ao;window.MotionQueueManager = V;window.PhysicsHair = u;window.AMotion = ah;window.PartsDataID = i;window.DrawDataID = Z;window.BaseDataID = n;window.ParamID = z;Q.init();var j = false;\n})();\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./../../~/webpack/buildin/system.js */ 10)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvbGliL2xpdmUyZC5taW4uanM/MDI5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuKGZ1bmN0aW9uKCl7dmFyIGo9dHJ1ZTtmdW5jdGlvbiBhYSgpe2lmKGope3JldHVybjt9dGhpcy5fJE1UPW51bGw7dGhpcy5fJDVTPW51bGw7dGhpcy5fJE5QPTA7YWEuXyQ0MisrO3RoaXMuXyQ1Uz1uZXcgeSh0aGlzKTt9YWEuXyQwcz0xO2FhLl8kNHM9MjthYS5fJDQyPTA7YWEuXyQ2Mj1mdW5jdGlvbihhUSxhVSl7dHJ5e2lmKGFVIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe2FVPW5ldyBEYXRhVmlldyhhVSk7fWlmKCEoYVUgaW5zdGFuY2VvZiBEYXRhVmlldykpe3Rocm93IG5ldyBKKFwiXyRTUyNsb2FkTW9kZWwoYikgLyBiIF8keCBiZSBEYXRhVmlldyBvciBBcnJheUJ1ZmZlclwiKTt9dmFyIGFTPW5ldyBLKGFVKTt2YXIgYU09YVMuXyRTVCgpO3ZhciBhSz1hUy5fJFNUKCk7dmFyIGFKPWFTLl8kU1QoKTt2YXIgYU47aWYoYU09PTEwOSYmYUs9PTExMSYmYUo9PTk5KXthTj1hUy5fJFNUKCk7fWVsc2V7dGhyb3cgbmV3IEooXCJfJGdpIF8kQyBfJGxpICwgXyRRMCBfJFAwLlwiKTt9YVMuXyRncihhTik7aWYoYU4+YXkuXyRUNyl7YVEuXyROUHw9YWEuXyQ0czt2YXIgYVI9YXkuXyRUNzt2YXIgYUk9XCJfJGdpIF8kQyBfJGxpICwgXyRuMCBfJF8gdmVyc2lvbiBfJGxpICggU0RLIDogXCIrYVIrXCIgPCBfJGYwIDogXCIrYU4rXCIgKUBfJFNTI2xvYWRNb2RlbCgpXFxuXCI7dGhyb3cgbmV3IEooYUkpO312YXIgYUw9YVMuXyRuUCgpO2lmKGFOPj1heS5fJHM3KXt2YXIgYUg9YVMuXyQ5VCgpO3ZhciBhVD1hUy5fJDlUKCk7aWYoYUghPS0zMDU4NHx8YVQhPS0zMDU4NCl7YVEuXyROUHw9YWEuXyQwczt0aHJvdyBuZXcgSihcIl8kZ2kgXyRDIF8kbGkgLCBfJDAgXyQ2IF8kVWkuXCIpO319YVEuXyRLUyhhTCk7dmFyIGFQPWFRLmdldE1vZGVsQ29udGV4dCgpO2FQLnNldERyYXdQYXJhbShhUS5nZXREcmF3UGFyYW0oKSk7YVAuaW5pdCgpO31jYXRjaChhTyl7cS5fJFJiKGFPKTt9fTthYS5wcm90b3R5cGUuXyRLUz1mdW5jdGlvbihhSCl7dGhpcy5fJE1UPWFIO307YWEucHJvdG90eXBlLmdldE1vZGVsSW1wbD1mdW5jdGlvbigpe2lmKHRoaXMuXyRNVD09bnVsbCl7dGhpcy5fJE1UPW5ldyB3KCk7dGhpcy5fJE1ULl8kelAoKTt9cmV0dXJuIHRoaXMuXyRNVDt9O2FhLnByb3RvdHlwZS5nZXRDYW52YXNXaWR0aD1mdW5jdGlvbigpe2lmKHRoaXMuXyRNVD09bnVsbCl7cmV0dXJuIDA7fXJldHVybiB0aGlzLl8kTVQuZ2V0Q2FudmFzV2lkdGgoKTt9O2FhLnByb3RvdHlwZS5nZXRDYW52YXNIZWlnaHQ9ZnVuY3Rpb24oKXtpZih0aGlzLl8kTVQ9PW51bGwpe3JldHVybiAwO31yZXR1cm4gdGhpcy5fJE1ULmdldENhbnZhc0hlaWdodCgpO307YWEucHJvdG90eXBlLmdldFBhcmFtRmxvYXQ9ZnVuY3Rpb24oYUgpe2lmKHR5cGVvZiBhSCE9XCJudW1iZXJcIil7YUg9dGhpcy5fJDVTLmdldFBhcmFtSW5kZXgoei5nZXRJRChhSCkpO31yZXR1cm4gdGhpcy5fJDVTLmdldFBhcmFtRmxvYXQoYUgpO307YWEucHJvdG90eXBlLnNldFBhcmFtRmxvYXQ9ZnVuY3Rpb24oYUgsYUosYUkpe2lmKHR5cGVvZiBhSCE9XCJudW1iZXJcIil7YUg9dGhpcy5fJDVTLmdldFBhcmFtSW5kZXgoei5nZXRJRChhSCkpO31pZihhcmd1bWVudHMubGVuZ3RoPDMpe2FJPTE7fXRoaXMuXyQ1Uy5zZXRQYXJhbUZsb2F0KGFILHRoaXMuXyQ1Uy5nZXRQYXJhbUZsb2F0KGFIKSooMS1hSSkrYUoqYUkpO307YWEucHJvdG90eXBlLmFkZFRvUGFyYW1GbG9hdD1mdW5jdGlvbihhSCxhSixhSSl7aWYodHlwZW9mIGFIIT1cIm51bWJlclwiKXthSD10aGlzLl8kNVMuZ2V0UGFyYW1JbmRleCh6LmdldElEKGFIKSk7fWlmKGFyZ3VtZW50cy5sZW5ndGg8Myl7YUk9MTt9dGhpcy5fJDVTLnNldFBhcmFtRmxvYXQoYUgsdGhpcy5fJDVTLmdldFBhcmFtRmxvYXQoYUgpK2FKKmFJKTt9O2FhLnByb3RvdHlwZS5tdWx0UGFyYW1GbG9hdD1mdW5jdGlvbihhSCxhSixhSSl7aWYodHlwZW9mIGFIIT1cIm51bWJlclwiKXthSD10aGlzLl8kNVMuZ2V0UGFyYW1JbmRleCh6LmdldElEKGFIKSk7fWlmKGFyZ3VtZW50cy5sZW5ndGg8Myl7YUk9MTt9dGhpcy5fJDVTLnNldFBhcmFtRmxvYXQoYUgsdGhpcy5fJDVTLmdldFBhcmFtRmxvYXQoYUgpKigxKyhhSi0xKSphSSkpO307YWEucHJvdG90eXBlLmdldFBhcmFtSW5kZXg9ZnVuY3Rpb24oYUgpe3JldHVybiB0aGlzLl8kNVMuZ2V0UGFyYW1JbmRleCh6LmdldElEKGFIKSk7fTthYS5wcm90b3R5cGUubG9hZFBhcmFtPWZ1bmN0aW9uKCl7dGhpcy5fJDVTLmxvYWRQYXJhbSgpO307YWEucHJvdG90eXBlLnNhdmVQYXJhbT1mdW5jdGlvbigpe3RoaXMuXyQ1Uy5zYXZlUGFyYW0oKTt9O2FhLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5fJDVTLmluaXQoKTt9O2FhLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl8kNVMudXBkYXRlKCk7fTthYS5wcm90b3R5cGUuXyRScz1mdW5jdGlvbigpe3EuXyRsaShcIl8kNjAgXyRQVCBfJFJzKClcIik7cmV0dXJuIC0xO307YWEucHJvdG90eXBlLl8kRHM9ZnVuY3Rpb24oYUgpe3EuXyRsaShcIl8kNjAgXyRQVCBfJFNTI18kRHMoKSBcXG5cIik7fTthYS5wcm90b3R5cGUuXyRLMj1mdW5jdGlvbigpe307YWEucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXt9O2FhLnByb3RvdHlwZS5nZXRNb2RlbENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJDVTO307YWEucHJvdG90eXBlLl8kczI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJE5QO307YWEucHJvdG90eXBlLl8kUDc9ZnVuY3Rpb24oYUssYVIsYUgsYTApe3ZhciBhVT0tMTt2YXIgYVk9MDt2YXIgYU09dGhpczt2YXIgYUo9MC41O3ZhciBhST0wLjE1O3ZhciBhWD10cnVlO2lmKGFIPT0wKXtmb3IodmFyIGFWPTA7YVY8YUsubGVuZ3RoO2FWKyspe3ZhciBhUD1hS1thVl07dmFyIGFPPWFSW2FWXTt2YXIgYVM9KGFNLmdldFBhcmFtRmxvYXQoYVApIT0wKTthTS5zZXRQYXJ0c09wYWNpdHkoYU8sKGFTPzE6MCkpO31yZXR1cm47fWVsc2V7aWYoYUsubGVuZ3RoPT0xKXt2YXIgYVA9YUtbMF07dmFyIGFUPShhTS5nZXRQYXJhbUZsb2F0KGFQKSE9MCk7dmFyIGFPPWFSWzBdO3ZhciBhUT1hTS5nZXRQYXJ0c09wYWNpdHkoYU8pO3ZhciBhVz1hSC9hMDtpZihhVCl7YVErPWFXO2lmKGFRPjEpe2FRPTE7fX1lbHNle2FRLT1hVztpZihhUTwwKXthUT0wO319YU0uc2V0UGFydHNPcGFjaXR5KGFPLGFRKTt9ZWxzZXtmb3IodmFyIGFWPTA7YVY8YUsubGVuZ3RoO2FWKyspe3ZhciBhUD1hS1thVl07dmFyIGFTPShhTS5nZXRQYXJhbUZsb2F0KGFQKSE9MCk7aWYoYVMpe2lmKGFVPj0wKXticmVhazt9YVU9YVY7dmFyIGFPPWFSW2FWXTthWT1hTS5nZXRQYXJ0c09wYWNpdHkoYU8pO2FZKz1hSC9hMDtpZihhWT4xKXthWT0xO319fWlmKGFVPDApe2NvbnNvbGUubG9nKFwiTm8gXyR3aSBfJHEwLyBfJFUgZGVmYXVsdFslc11cIixhS1swXSk7YVU9MDthWT0xO2FNLmxvYWRQYXJhbSgpO2FNLnNldFBhcmFtRmxvYXQoYUtbYVVdLGFZKTthTS5zYXZlUGFyYW0oKTt9Zm9yKHZhciBhVj0wO2FWPGFLLmxlbmd0aDthVisrKXt2YXIgYU89YVJbYVZdO2lmKGFVPT1hVil7YU0uc2V0UGFydHNPcGFjaXR5KGFPLGFZKTt9ZWxzZXt2YXIgYUw9YU0uZ2V0UGFydHNPcGFjaXR5KGFPKTt2YXIgYVo7aWYoYVk8YUope2FaPWFZKihhSi0xKS9hSisxO31lbHNle2FaPSgxLWFZKSphSi8oMS1hSik7fWlmKGFYKXt2YXIgYU49KDEtYVopKigxLWFZKTtpZihhTj5hSSl7YVo9MS1hSS8oMS1hWSk7fX1pZihhTD5hWil7YUw9YVo7fWFNLnNldFBhcnRzT3BhY2l0eShhTyxhTCk7fX19fX07YWEucHJvdG90eXBlLnNldFBhcnRzT3BhY2l0eT1mdW5jdGlvbihhSSxhSCl7aWYodHlwZW9mIGFJIT1cIm51bWJlclwiKXthST10aGlzLl8kNVMuZ2V0UGFydHNEYXRhSW5kZXgoaS5nZXRJRChhSSkpO310aGlzLl8kNVMuc2V0UGFydHNPcGFjaXR5KGFJLGFIKTt9O2FhLnByb3RvdHlwZS5nZXRQYXJ0c0RhdGFJbmRleD1mdW5jdGlvbihhSCl7aWYoIShhSCBpbnN0YW5jZW9mIGkpKXthSD1pLmdldElEKGFIKTt9cmV0dXJuIHRoaXMuXyQ1Uy5nZXRQYXJ0c0RhdGFJbmRleChhSCk7fTthYS5wcm90b3R5cGUuZ2V0UGFydHNPcGFjaXR5PWZ1bmN0aW9uKGFIKXtpZih0eXBlb2YgYUghPVwibnVtYmVyXCIpe2FIPXRoaXMuXyQ1Uy5nZXRQYXJ0c0RhdGFJbmRleChpLmdldElEKGFIKSk7fWlmKGFIPDApe3JldHVybiAwO31yZXR1cm4gdGhpcy5fJDVTLmdldFBhcnRzT3BhY2l0eShhSCk7fTthYS5wcm90b3R5cGUuZ2V0RHJhd1BhcmFtPWZ1bmN0aW9uKCl7fTthYS5wcm90b3R5cGUuZ2V0RHJhd0RhdGFJbmRleD1mdW5jdGlvbihhSCl7cmV0dXJuIHRoaXMuXyQ1Uy5nZXREcmF3RGF0YUluZGV4KFouZ2V0SUQoYUgpKTt9O2FhLnByb3RvdHlwZS5nZXREcmF3RGF0YT1mdW5jdGlvbihhSCl7cmV0dXJuIHRoaXMuXyQ1Uy5nZXREcmF3RGF0YShhSCk7fTthYS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtZWRQb2ludHM9ZnVuY3Rpb24oYUgpe3ZhciBhST10aGlzLl8kNVMuXyRDMihhSCk7aWYoYUkgaW5zdGFuY2VvZiBhZyl7cmV0dXJuKGFJKS5nZXRUcmFuc2Zvcm1lZFBvaW50cygpO31yZXR1cm4gbnVsbDt9O2FhLnByb3RvdHlwZS5nZXRJbmRleEFycmF5PWZ1bmN0aW9uKGFJKXtpZihhSTwwfHxhST49dGhpcy5fJDVTLl8kYVMubGVuZ3RoKXtyZXR1cm4gbnVsbDt9dmFyIGFIPXRoaXMuXyQ1Uy5fJGFTW2FJXTtpZihhSCE9bnVsbCYmYUguZ2V0VHlwZSgpPT1hLl8kd2Ipe2lmKGFIIGluc3RhbmNlb2YgYil7cmV0dXJuIGFILmdldEluZGV4QXJyYXkoKTt9fXJldHVybiBudWxsO307ZnVuY3Rpb24gVyhhSil7aWYoail7cmV0dXJuO310aGlzLmNsaXBDb250ZXh0TGlzdD1uZXcgQXJyYXkoKTt0aGlzLmdsY29udGV4dD1hSi5nbDt0aGlzLmRwX3dlYmdsPWFKO3RoaXMuY3VyRnJhbWVObz0wO3RoaXMuZmlyc3RFcnJvcl9jbGlwSW5Ob3RVcGRhdGU9dHJ1ZTt0aGlzLmNvbG9yQnVmZmVyPTA7dGhpcy5pc0luaXRHTEZCRnVuYz1mYWxzZTt0aGlzLnRtcEJvdW5kc09uTW9kZWw9bmV3IGF2KCk7aWYoUS5nbENvbnRleHQubGVuZ3RoPlEuZnJhbWVCdWZmZXJzLmxlbmd0aCl7dGhpcy5jdXJGcmFtZU5vPXRoaXMuZ2V0TWFza1JlbmRlclRleHR1cmUoKTt9ZWxzZXt9dGhpcy50bXBNb2RlbFRvVmlld01hdHJpeD1uZXcgYWMoKTt0aGlzLnRtcE1hdHJpeDI9bmV3IGFjKCk7dGhpcy50bXBNYXRyaXhGb3JNYXNrPW5ldyBhYygpO3RoaXMudG1wTWF0cml4Rm9yRHJhdz1uZXcgYWMoKTt0aGlzLkNIQU5ORUxfQ09MT1JTPW5ldyBBcnJheSgpO3ZhciBhST1uZXcgbygpO2FJPW5ldyBvKCk7YUkucj0wO2FJLmc9MDthSS5iPTA7YUkuYT0xO3RoaXMuQ0hBTk5FTF9DT0xPUlMucHVzaChhSSk7YUk9bmV3IG8oKTthSS5yPTE7YUkuZz0wO2FJLmI9MDthSS5hPTA7dGhpcy5DSEFOTkVMX0NPTE9SUy5wdXNoKGFJKTthST1uZXcgbygpO2FJLnI9MDthSS5nPTE7YUkuYj0wO2FJLmE9MDt0aGlzLkNIQU5ORUxfQ09MT1JTLnB1c2goYUkpO2FJPW5ldyBvKCk7YUkucj0wO2FJLmc9MDthSS5iPTE7YUkuYT0wO3RoaXMuQ0hBTk5FTF9DT0xPUlMucHVzaChhSSk7Zm9yKHZhciBhSD0wO2FIPHRoaXMuQ0hBTk5FTF9DT0xPUlMubGVuZ3RoO2FIKyspe3RoaXMuZHBfd2ViZ2wuc2V0Q2hhbm5lbEZsYWdBc0NvbG9yKGFILHRoaXMuQ0hBTk5FTF9DT0xPUlNbYUhdKTt9fVcuQ0hBTk5FTF9DT1VOVD00O1cuUkVOREVSX1RFWFRVUkVfVVNFX01JUE1BUD1mYWxzZTtXLk5PVF9VU0VEX0ZSQU1FPS0xMDA7Vy5wcm90b3R5cGUuXyRMNz1mdW5jdGlvbigpe2lmKHRoaXMudG1wTW9kZWxUb1ZpZXdNYXRyaXgpe3RoaXMudG1wTW9kZWxUb1ZpZXdNYXRyaXg9bnVsbDt9aWYodGhpcy50bXBNYXRyaXgyKXt0aGlzLnRtcE1hdHJpeDI9bnVsbDt9aWYodGhpcy50bXBNYXRyaXhGb3JNYXNrKXt0aGlzLnRtcE1hdHJpeEZvck1hc2s9bnVsbDt9aWYodGhpcy50bXBNYXRyaXhGb3JEcmF3KXt0aGlzLnRtcE1hdHJpeEZvckRyYXc9bnVsbDt9aWYodGhpcy50bXBCb3VuZHNPbk1vZGVsKXt0aGlzLnRtcEJvdW5kc09uTW9kZWw9bnVsbDt9aWYodGhpcy5DSEFOTkVMX0NPTE9SUyl7Zm9yKHZhciBhSD10aGlzLkNIQU5ORUxfQ09MT1JTLmxlbmd0aC0xO2FIPj0wOy0tYUgpe3RoaXMuQ0hBTk5FTF9DT0xPUlMuc3BsaWNlKGFILDEpO310aGlzLkNIQU5ORUxfQ09MT1JTPVtdO310aGlzLnJlbGVhc2VTaGFkZXIoKTt9O1cucHJvdG90eXBlLnJlbGVhc2VTaGFkZXI9ZnVuY3Rpb24oKXt2YXIgYUk9US5mcmFtZUJ1ZmZlcnMubGVuZ3RoO2Zvcih2YXIgYUg9MDthSDxhSTthSCsrKXt0aGlzLmdsLmRlbGV0ZUZyYW1lYnVmZmVyKFEuZnJhbWVCdWZmZXJzW2FIXS5mcmFtZWJ1ZmZlcik7fVEuZnJhbWVCdWZmZXJzPVtdO1EuZ2xDb250ZXh0PVtdO307Vy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhTyxhTixhTCl7Zm9yKHZhciBhTT0wO2FNPGFOLmxlbmd0aDthTSsrKXt2YXIgYUg9YU5bYU1dLmdldENsaXBJRExpc3QoKTtpZihhSD09bnVsbCl7Y29udGludWU7fXZhciBhSj10aGlzLmZpbmRTYW1lQ2xpcChhSCk7aWYoYUo9PW51bGwpe2FKPW5ldyBVKHRoaXMsYU8sYUgpO3RoaXMuY2xpcENvbnRleHRMaXN0LnB1c2goYUopO312YXIgYUk9YU5bYU1dLmdldERyYXdEYXRhSUQoKTt2YXIgYUs9YU8uZ2V0RHJhd0RhdGFJbmRleChhSSk7YUouYWRkQ2xpcHBlZERyYXdEYXRhKGFJLGFLKTt2YXIgYVA9YUxbYU1dO2FQLmNsaXBCdWZQcmVfY2xpcENvbnRleHQ9YUo7fX07Vy5wcm90b3R5cGUuZ2V0TWFza1JlbmRlclRleHR1cmU9ZnVuY3Rpb24oKXt2YXIgYUg9bnVsbDthSD10aGlzLmRwX3dlYmdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7US5mcmFtZUJ1ZmZlcnNbdGhpcy5kcF93ZWJnbC5nbG5vXT1hSDtyZXR1cm4gdGhpcy5kcF93ZWJnbC5nbG5vO307Vy5wcm90b3R5cGUuc2V0dXBDbGlwPWZ1bmN0aW9uKGExLGFRKXt2YXIgYUs9MDtmb3IodmFyIGFPPTA7YU88dGhpcy5jbGlwQ29udGV4dExpc3QubGVuZ3RoO2FPKyspe3ZhciBhUD10aGlzLmNsaXBDb250ZXh0TGlzdFthT107dGhpcy5jYWxjQ2xpcHBlZERyYXdUb3RhbEJvdW5kcyhhMSxhUCk7aWYoYVAuaXNVc2luZyl7YUsrKzt9fWlmKGFLPjApe3ZhciBhTT1hUS5nbC5nZXRQYXJhbWV0ZXIoYVEuZ2wuRlJBTUVCVUZGRVJfQklORElORyk7dmFyIGFXPW5ldyBBcnJheSg0KTthV1swXT0wO2FXWzFdPTA7YVdbMl09YVEuZ2wuY2FudmFzLndpZHRoO2FXWzNdPWFRLmdsLmNhbnZhcy5oZWlnaHQ7YVEuZ2wudmlld3BvcnQoMCwwLFEuY2xpcHBpbmdNYXNrQnVmZmVyU2l6ZSxRLmNsaXBwaW5nTWFza0J1ZmZlclNpemUpO3RoaXMuc2V0dXBMYXlvdXRCb3VuZHMoYUspO2FRLmdsLmJpbmRGcmFtZWJ1ZmZlcihhUS5nbC5GUkFNRUJVRkZFUixRLmZyYW1lQnVmZmVyc1t0aGlzLmN1ckZyYW1lTm9dLmZyYW1lYnVmZmVyKTthUS5nbC5jbGVhckNvbG9yKDAsMCwwLDApO2FRLmdsLmNsZWFyKGFRLmdsLkNPTE9SX0JVRkZFUl9CSVQpO2Zvcih2YXIgYU89MDthTzx0aGlzLmNsaXBDb250ZXh0TGlzdC5sZW5ndGg7YU8rKyl7dmFyIGFQPXRoaXMuY2xpcENvbnRleHRMaXN0W2FPXTt2YXIgYVQ9YVAuYWxsQ2xpcHBlZERyYXdSZWN0O3ZhciBhTj1hUC5sYXlvdXRDaGFubmVsTm87dmFyIGFWPWFQLmxheW91dEJvdW5kczt2YXIgYUo9MC4wNTt0aGlzLnRtcEJvdW5kc09uTW9kZWwuXyRqTChhVCk7dGhpcy50bXBCb3VuZHNPbk1vZGVsLmV4cGFuZChhVC53aWR0aCphSixhVC5oZWlnaHQqYUopO3ZhciBhWj1hVi53aWR0aC90aGlzLnRtcEJvdW5kc09uTW9kZWwud2lkdGg7dmFyIGFZPWFWLmhlaWdodC90aGlzLnRtcEJvdW5kc09uTW9kZWwuaGVpZ2h0O3RoaXMudG1wTWF0cml4Mi5pZGVudGl0eSgpO3RoaXMudG1wTWF0cml4Mi50cmFuc2xhdGUoLTEsLTEsMCk7dGhpcy50bXBNYXRyaXgyLnNjYWxlKDIsMiwxKTt0aGlzLnRtcE1hdHJpeDIudHJhbnNsYXRlKGFWLngsYVYueSwwKTt0aGlzLnRtcE1hdHJpeDIuc2NhbGUoYVosYVksMSk7dGhpcy50bXBNYXRyaXgyLnRyYW5zbGF0ZSgtdGhpcy50bXBCb3VuZHNPbk1vZGVsLngsLXRoaXMudG1wQm91bmRzT25Nb2RlbC55LDApO3RoaXMudG1wTWF0cml4Rm9yTWFzay5zZXRNYXRyaXgodGhpcy50bXBNYXRyaXgyLm0pO3RoaXMudG1wTWF0cml4Mi5pZGVudGl0eSgpO3RoaXMudG1wTWF0cml4Mi50cmFuc2xhdGUoYVYueCxhVi55LDApO3RoaXMudG1wTWF0cml4Mi5zY2FsZShhWixhWSwxKTt0aGlzLnRtcE1hdHJpeDIudHJhbnNsYXRlKC10aGlzLnRtcEJvdW5kc09uTW9kZWwueCwtdGhpcy50bXBCb3VuZHNPbk1vZGVsLnksMCk7dGhpcy50bXBNYXRyaXhGb3JEcmF3LnNldE1hdHJpeCh0aGlzLnRtcE1hdHJpeDIubSk7dmFyIGFIPXRoaXMudG1wTWF0cml4Rm9yTWFzay5nZXRBcnJheSgpO2Zvcih2YXIgYVg9MDthWDwxNjthWCsrKXthUC5tYXRyaXhGb3JNYXNrW2FYXT1hSFthWF07fXZhciBhMD10aGlzLnRtcE1hdHJpeEZvckRyYXcuZ2V0QXJyYXkoKTtmb3IodmFyIGFYPTA7YVg8MTY7YVgrKyl7YVAubWF0cml4Rm9yRHJhd1thWF09YTBbYVhdO312YXIgYVM9YVAuY2xpcHBpbmdNYXNrRHJhd0luZGV4TGlzdC5sZW5ndGg7Zm9yKHZhciBhVT0wO2FVPGFTO2FVKyspe3ZhciBhUj1hUC5jbGlwcGluZ01hc2tEcmF3SW5kZXhMaXN0W2FVXTt2YXIgYUk9YTEuZ2V0RHJhd0RhdGEoYVIpO3ZhciBhTD1hMS5fJEMyKGFSKTthUS5zZXRDbGlwQnVmUHJlX2NsaXBDb250ZXh0Rm9yTWFzayhhUCk7YUkuZHJhdyhhUSxhMSxhTCk7fX1hUS5nbC5iaW5kRnJhbWVidWZmZXIoYVEuZ2wuRlJBTUVCVUZGRVIsYU0pO2FRLnNldENsaXBCdWZQcmVfY2xpcENvbnRleHRGb3JNYXNrKG51bGwpO2FRLmdsLnZpZXdwb3J0KGFXWzBdLGFXWzFdLGFXWzJdLGFXWzNdKTt9fTtXLnByb3RvdHlwZS5nZXRDb2xvckJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbG9yQnVmZmVyO307Vy5wcm90b3R5cGUuZmluZFNhbWVDbGlwPWZ1bmN0aW9uKGFLKXtmb3IodmFyIGFOPTA7YU48dGhpcy5jbGlwQ29udGV4dExpc3QubGVuZ3RoO2FOKyspe3ZhciBhTz10aGlzLmNsaXBDb250ZXh0TGlzdFthTl07dmFyIGFIPWFPLmNsaXBJRExpc3QubGVuZ3RoO2lmKGFIIT1hSy5sZW5ndGgpe2NvbnRpbnVlO312YXIgYUk9MDtmb3IodmFyIGFNPTA7YU08YUg7YU0rKyl7dmFyIGFMPWFPLmNsaXBJRExpc3RbYU1dO2Zvcih2YXIgYUo9MDthSjxhSDthSisrKXtpZihhS1thSl09PWFMKXthSSsrO2JyZWFrO319fWlmKGFJPT1hSCl7cmV0dXJuIGFPO319cmV0dXJuIG51bGw7fTtXLnByb3RvdHlwZS5jYWxjQ2xpcHBlZERyYXdUb3RhbEJvdW5kcz1mdW5jdGlvbihhNixhVil7dmFyIGFVPWE2Ll8kUmkuZ2V0TW9kZWxJbXBsKCkuZ2V0Q2FudmFzV2lkdGgoKTt2YXIgYTU9YTYuXyRSaS5nZXRNb2RlbEltcGwoKS5nZXRDYW52YXNIZWlnaHQoKTt2YXIgYUo9YVU+YTU/YVU6YTU7dmFyIGFUPWFKO3ZhciBhUj1hSjt2YXIgYVM9MDt2YXIgYVA9MDt2YXIgYUw9YVYuY2xpcHBlZERyYXdDb250ZXh0TGlzdC5sZW5ndGg7Zm9yKHZhciBhTT0wO2FNPGFMO2FNKyspe3ZhciBhVz1hVi5jbGlwcGVkRHJhd0NvbnRleHRMaXN0W2FNXTt2YXIgYU49YVcuZHJhd0RhdGFJbmRleDt2YXIgYUs9YTYuXyRDMihhTik7aWYoYUsuXyR5bygpKXt2YXIgYVg9YUsuZ2V0VHJhbnNmb3JtZWRQb2ludHMoKTt2YXIgYTQ9YVgubGVuZ3RoO3ZhciBhST1bXTt2YXIgYUg9W107dmFyIGFPPTA7Zm9yKHZhciBhMz1hdy5fJGkyO2EzPGE0O2EzKz1hdy5fJE5vKXthSVthT109YVhbYTNdO2FIW2FPXT1hWFthMysxXTthTysrO312YXIgYTI9TWF0aC5taW4uYXBwbHkobnVsbCxhSSk7dmFyIGExPU1hdGgubWluLmFwcGx5KG51bGwsYUgpO3ZhciBhMD1NYXRoLm1heC5hcHBseShudWxsLGFJKTt2YXIgYVo9TWF0aC5tYXguYXBwbHkobnVsbCxhSCk7aWYoYTI8YVQpe2FUPWEyO31pZihhMTxhUil7YVI9YTE7fWlmKGEwPmFTKXthUz1hMDt9aWYoYVo+YVApe2FQPWFaO319fWlmKGFUPT1hSil7YVYuYWxsQ2xpcHBlZERyYXdSZWN0Lng9MDthVi5hbGxDbGlwcGVkRHJhd1JlY3QueT0wO2FWLmFsbENsaXBwZWREcmF3UmVjdC53aWR0aD0wO2FWLmFsbENsaXBwZWREcmF3UmVjdC5oZWlnaHQ9MDthVi5pc1VzaW5nPWZhbHNlO31lbHNle3ZhciBhUT1hUy1hVDt2YXIgYVk9YVAtYVI7YVYuYWxsQ2xpcHBlZERyYXdSZWN0Lng9YVQ7YVYuYWxsQ2xpcHBlZERyYXdSZWN0Lnk9YVI7YVYuYWxsQ2xpcHBlZERyYXdSZWN0LndpZHRoPWFRO2FWLmFsbENsaXBwZWREcmF3UmVjdC5oZWlnaHQ9YVk7YVYuaXNVc2luZz10cnVlO319O1cucHJvdG90eXBlLnNldHVwTGF5b3V0Qm91bmRzPWZ1bmN0aW9uKGFRKXt2YXIgYUk9YVEvVy5DSEFOTkVMX0NPVU5UO3ZhciBhUD1hUSVXLkNIQU5ORUxfQ09VTlQ7YUk9fn5hSTthUD1+fmFQO3ZhciBhSD0wO2Zvcih2YXIgYUo9MDthSjxXLkNIQU5ORUxfQ09VTlQ7YUorKyl7dmFyIGFNPWFJKyhhSjxhUD8xOjApO2lmKGFNPT0wKXt9ZWxzZXtpZihhTT09MSl7dmFyIGFMPXRoaXMuY2xpcENvbnRleHRMaXN0W2FIKytdO2FMLmxheW91dENoYW5uZWxObz1hSjthTC5sYXlvdXRCb3VuZHMueD0wO2FMLmxheW91dEJvdW5kcy55PTA7YUwubGF5b3V0Qm91bmRzLndpZHRoPTE7YUwubGF5b3V0Qm91bmRzLmhlaWdodD0xO31lbHNle2lmKGFNPT0yKXtmb3IodmFyIGFPPTA7YU88YU07YU8rKyl7dmFyIGFOPWFPJTI7dmFyIGFLPTA7YU49fn5hTjt2YXIgYUw9dGhpcy5jbGlwQ29udGV4dExpc3RbYUgrK107YUwubGF5b3V0Q2hhbm5lbE5vPWFKO2FMLmxheW91dEJvdW5kcy54PWFOKjAuNTthTC5sYXlvdXRCb3VuZHMueT0wO2FMLmxheW91dEJvdW5kcy53aWR0aD0wLjU7YUwubGF5b3V0Qm91bmRzLmhlaWdodD0xO319ZWxzZXtpZihhTTw9NCl7Zm9yKHZhciBhTz0wO2FPPGFNO2FPKyspe3ZhciBhTj1hTyUyO3ZhciBhSz1hTy8yO2FOPX5+YU47YUs9fn5hSzt2YXIgYUw9dGhpcy5jbGlwQ29udGV4dExpc3RbYUgrK107YUwubGF5b3V0Q2hhbm5lbE5vPWFKO2FMLmxheW91dEJvdW5kcy54PWFOKjAuNTthTC5sYXlvdXRCb3VuZHMueT1hSyowLjU7YUwubGF5b3V0Qm91bmRzLndpZHRoPTAuNTthTC5sYXlvdXRCb3VuZHMuaGVpZ2h0PTAuNTt9fWVsc2V7aWYoYU08PTkpe2Zvcih2YXIgYU89MDthTzxhTTthTysrKXt2YXIgYU49YU8lMzt2YXIgYUs9YU8vMzthTj1+fmFOO2FLPX5+YUs7dmFyIGFMPXRoaXMuY2xpcENvbnRleHRMaXN0W2FIKytdO2FMLmxheW91dENoYW5uZWxObz1hSjthTC5sYXlvdXRCb3VuZHMueD1hTi8zO2FMLmxheW91dEJvdW5kcy55PWFLLzM7YUwubGF5b3V0Qm91bmRzLndpZHRoPTEvMzthTC5sYXlvdXRCb3VuZHMuaGVpZ2h0PTEvMzt9fWVsc2V7cS5fJGxpKFwiXyQ2IF8kMFAgbWFzayBjb3VudCA6ICVkXCIsYU0pO319fX19fX07ZnVuY3Rpb24gVShhSCxhSyxhSSl7dGhpcy5jbGlwSURMaXN0PW5ldyBBcnJheSgpO3RoaXMuY2xpcElETGlzdD1hSTt0aGlzLmNsaXBwaW5nTWFza0RyYXdJbmRleExpc3Q9bmV3IEFycmF5KCk7Zm9yKHZhciBhSj0wO2FKPGFJLmxlbmd0aDthSisrKXt0aGlzLmNsaXBwaW5nTWFza0RyYXdJbmRleExpc3QucHVzaChhSy5nZXREcmF3RGF0YUluZGV4KGFJW2FKXSkpO310aGlzLmNsaXBwZWREcmF3Q29udGV4dExpc3Q9bmV3IEFycmF5KCk7dGhpcy5pc1VzaW5nPXRydWU7dGhpcy5sYXlvdXRDaGFubmVsTm89MDt0aGlzLmxheW91dEJvdW5kcz1uZXcgYXYoKTt0aGlzLmFsbENsaXBwZWREcmF3UmVjdD1uZXcgYXYoKTt0aGlzLm1hdHJpeEZvck1hc2s9bmV3IEZsb2F0MzJBcnJheSgxNik7dGhpcy5tYXRyaXhGb3JEcmF3PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3RoaXMub3duZXI9YUg7fVUucHJvdG90eXBlLmFkZENsaXBwZWREcmF3RGF0YT1mdW5jdGlvbihhSixhSSl7dmFyIGFIPW5ldyBSKGFKLGFJKTt0aGlzLmNsaXBwZWREcmF3Q29udGV4dExpc3QucHVzaChhSCk7fTtmdW5jdGlvbiBSKGFJLGFIKXt0aGlzLl8kZ1A9YUk7dGhpcy5kcmF3RGF0YUluZGV4PWFIO31mdW5jdGlvbiBJKCl7aWYoail7cmV0dXJuO310aGlzLmNvbG9yPW51bGw7fWZ1bmN0aW9uIGFoKCl7aWYoail7cmV0dXJuO310aGlzLl8kZFA9bnVsbDt0aGlzLl8kZW89bnVsbDt0aGlzLl8kVjA9bnVsbDt0aGlzLl8kZFA9MTAwMDt0aGlzLl8kZW89MTAwMDt0aGlzLl8kVjA9MTt0aGlzLl8kYTAoKTt9YWguXyRKVD1mdW5jdGlvbihhUCxhTixhTyl7dmFyIGFRPWFQL2FOO3ZhciBhMT1hTy9hTjt2YXIgYVU9YTE7dmFyIGFaPTEvMzt2YXIgYVI9Mi8zO3ZhciBhMD0xLSgxLWExKSooMS1hMSk7dmFyIGEyPTEtKDEtYVUpKigxLWFVKTt2YXIgYU09MDt2YXIgYUw9KCgxLWExKSphWikqYTArKGFVKmFSKygxLWFVKSphWikqKDEtYTApO3ZhciBhSz0oYVUrKDEtYVUpKmFSKSphMisoYTEqYVorKDEtYTEpKmFSKSooMS1hMik7dmFyIGFKPTE7dmFyIGFZPWFKLTMqYUsrMyphTC1hTTt2YXIgYVg9MyphSy02KmFMKzMqYU07dmFyIGFXPTMqYUwtMyphTTt2YXIgYVY9YU07aWYoYVE8PTApe3JldHVybiAwO31lbHNle2lmKGFRPj0xKXtyZXR1cm4gMTt9fXZhciBhUz1hUTt2YXIgYUk9YVMqYVM7dmFyIGFIPWFTKmFJO3ZhciBhVD1hWSphSCthWCphSSthVyphUythVjtyZXR1cm4gYVQ7fTthaC5wcm90b3R5cGUuXyRhMD1mdW5jdGlvbigpe307YWgucHJvdG90eXBlLnNldEZhZGVJbj1mdW5jdGlvbihhSCl7dGhpcy5fJGRQPWFIO307YWgucHJvdG90eXBlLnNldEZhZGVPdXQ9ZnVuY3Rpb24oYUgpe3RoaXMuXyRlbz1hSDt9O2FoLnByb3RvdHlwZS5fJHBUPWZ1bmN0aW9uKGFIKXt0aGlzLl8kVjA9YUg7fTthaC5wcm90b3R5cGUuZ2V0RmFkZU91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kZW87fTthaC5wcm90b3R5cGUuXyQ0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kZW87fTthaC5wcm90b3R5cGUuXyRtVD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kVjA7fTthaC5wcm90b3R5cGUuZ2V0RHVyYXRpb25NU2VjPWZ1bmN0aW9uKCl7cmV0dXJuIC0xO307YWgucHJvdG90eXBlLmdldExvb3BEdXJhdGlvbk1TZWM9ZnVuY3Rpb24oKXtyZXR1cm4gLTE7fTthaC5wcm90b3R5cGUudXBkYXRlUGFyYW09ZnVuY3Rpb24oYUosYU4pe2lmKCFhTi5fJEFUfHxhTi5fJDlMKXtyZXR1cm47fXZhciBhTD1QLmdldFVzZXJUaW1lTVNlYygpO2lmKGFOLl8kejI8MCl7YU4uXyR6Mj1hTDthTi5fJGJzPWFMO3ZhciBhTT10aGlzLmdldER1cmF0aW9uTVNlYygpO2lmKGFOLl8kRG88MCl7YU4uXyREbz0oYU08PTApPy0xOmFOLl8kejIrYU07fX12YXIgYUk9dGhpcy5fJFYwO3ZhciBhSD0odGhpcy5fJGRQPT0wKT8xOkEuXyRyMigoKGFMLWFOLl8kYnMpLyh0aGlzLl8kZFApKSk7dmFyIGFLPSh0aGlzLl8kZW89PTB8fGFOLl8kRG88MCk/MTpBLl8kcjIoKChhTi5fJERvLWFMKS8odGhpcy5fJGVvKSkpO2FJPWFJKmFIKmFLO2lmKCEoKDA8PWFJJiZhSTw9MSkpKXtjb25zb2xlLmxvZyhcIiMjIyBhc3NlcnQhISAjIyMgXCIpO310aGlzLnVwZGF0ZVBhcmFtRXhlKGFKLGFMLGFJLGFOKTtpZihhTi5fJERvPjAmJmFOLl8kRG88YUwpe2FOLl8kOUw9dHJ1ZTt9fTthaC5wcm90b3R5cGUudXBkYXRlUGFyYW1FeGU9ZnVuY3Rpb24oYUgsYUksYUosYUspe307ZnVuY3Rpb24gcSgpe31xLl8kOHM9MDtxLl8kZlQ9bmV3IE9iamVjdCgpO3Euc3RhcnQ9ZnVuY3Rpb24oYUkpe3ZhciBhSD1xLl8kZlRbYUldO2lmKGFIPT1udWxsKXthSD1uZXcgYWYoKTthSC5fJHI9YUk7cS5fJGZUW2FJXT1hSDt9YUguXyQwUz1QLmdldFN5c3RlbVRpbWVNU2VjKCk7fTtxLmR1bXA9ZnVuY3Rpb24oYUope3ZhciBhSD1xLl8kZlRbYUpdO2lmKGFIIT1udWxsKXt2YXIgYUk9UC5nZXRTeXN0ZW1UaW1lTVNlYygpO3ZhciBhSz1hSS1hSC5fJDBTO2NvbnNvbGUubG9nKGFKK1wiIDogXCIrYUsrXCJtc1wiKTtyZXR1cm4gYUs7fWVsc2V7cmV0dXJuIC0xO319O3EuZW5kPWZ1bmN0aW9uKGFKKXt2YXIgYUg9cS5fJGZUW2FKXTtpZihhSCE9bnVsbCl7dmFyIGFJPVAuZ2V0U3lzdGVtVGltZU1TZWMoKTtyZXR1cm4gYUktYUguXyQwUzt9ZWxzZXtyZXR1cm4gLTE7fX07cS5fJGxpPWZ1bmN0aW9uKGFJLGFIKXtjb25zb2xlLmxvZyhcIl8kbGkgOiBcIithSStcIlxcblwiLGFIKTt9O3EuXyRKaT1mdW5jdGlvbihhSSxhSCl7Y29uc29sZS5sb2coYUksYUgpO307cS5fJGRMPWZ1bmN0aW9uKGFJLGFIKXtjb25zb2xlLmxvZyhhSSxhSCk7Y29uc29sZS5sb2coXCJcXG5cIik7fTtxLl8kS0w9ZnVuY3Rpb24oYUosYUkpe2Zvcih2YXIgYUg9MDthSDxhSTthSCsrKXtpZihhSCUxNj09MCYmYUg+MCl7Y29uc29sZS5sb2coXCJcXG5cIik7fWVsc2V7aWYoYUglOD09MCYmYUg+MCl7Y29uc29sZS5sb2coXCIgIFwiKTt9fWNvbnNvbGUubG9nKFwiJTAyWCBcIiwoYUpbYUhdJjI1NSkpO31jb25zb2xlLmxvZyhcIlxcblwiKTt9O3EuXyRucj1mdW5jdGlvbihhTCxhSSxhSyl7Y29uc29sZS5sb2coXCIlc1xcblwiLGFMKTt2YXIgYUg9YUkubGVuZ3RoO2Zvcih2YXIgYUo9MDthSjxhSDsrK2FKKXtjb25zb2xlLmxvZyhcIiU1ZFwiLGFJW2FKXSk7Y29uc29sZS5sb2coXCIlc1xcblwiLGFLKTtjb25zb2xlLmxvZyhcIixcIik7fWNvbnNvbGUubG9nKFwiXFxuXCIpO307cS5fJFJiPWZ1bmN0aW9uKGFIKXtjb25zb2xlLmxvZyhcImR1bXAgZXhjZXB0aW9uIDogXCIrYUgpO2NvbnNvbGUubG9nKFwic3RhY2sgOjogXCIrYUguc3RhY2spO307ZnVuY3Rpb24gYWYoKXt0aGlzLl8kcj1udWxsO3RoaXMuXyQwUz1udWxsO31mdW5jdGlvbiBGKCl7aWYoail7cmV0dXJuO310aGlzLng9bnVsbDt0aGlzLnk9bnVsbDt0aGlzLndpZHRoPW51bGw7dGhpcy5oZWlnaHQ9bnVsbDt9Ri5wcm90b3R5cGUuXyQ4UD1mdW5jdGlvbigpe3JldHVybiAwLjUqKHRoaXMueCt0aGlzLngrdGhpcy53aWR0aCk7fTtGLnByb3RvdHlwZS5fJDZQPWZ1bmN0aW9uKCl7cmV0dXJuIDAuNSoodGhpcy55K3RoaXMueSt0aGlzLmhlaWdodCk7fTtGLnByb3RvdHlwZS5fJEVMPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoO307Ri5wcm90b3R5cGUuXyQ1VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQ7fTtGLnByb3RvdHlwZS5fJGpMPWZ1bmN0aW9uKGFJLGFLLGFKLGFIKXt0aGlzLng9YUk7dGhpcy55PWFLO3RoaXMud2lkdGg9YUo7dGhpcy5oZWlnaHQ9YUg7fTtGLnByb3RvdHlwZS5fJGpMPWZ1bmN0aW9uKGFIKXt0aGlzLng9YUgueDt0aGlzLnk9YUgueTt0aGlzLndpZHRoPWFILndpZHRoO3RoaXMuaGVpZ2h0PWFILmhlaWdodDt9O2Z1bmN0aW9uIGkoYUgpe2lmKGope3JldHVybjt9YWsucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhSCk7fWkucHJvdG90eXBlPW5ldyBhaygpO2kuXyR0UD1uZXcgT2JqZWN0KCk7aS5fJDI3PWZ1bmN0aW9uKCl7aS5fJHRQLmNsZWFyKCk7fTtpLmdldElEPWZ1bmN0aW9uKGFIKXt2YXIgYUk9aS5fJHRQW2FIXTtpZihhST09bnVsbCl7YUk9bmV3IGkoYUgpO2kuXyR0UFthSF09YUk7fXJldHVybiBhSTt9O2kucHJvdG90eXBlLl8kM3M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoKTt9O2Z1bmN0aW9uIFMoKXt9ZnVuY3Rpb24geihhSCl7aWYoail7cmV0dXJuO31hay5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLGFIKTt9ei5wcm90b3R5cGU9bmV3IGFrKCk7ei5fJHRQPW5ldyBPYmplY3QoKTt6Ll8kMjc9ZnVuY3Rpb24oKXt6Ll8kdFAuY2xlYXIoKTt9O3ouZ2V0SUQ9ZnVuY3Rpb24oYUgpe3ZhciBhST16Ll8kdFBbYUhdO2lmKGFJPT1udWxsKXthST1uZXcgeihhSCk7ei5fJHRQW2FIXT1hSTt9cmV0dXJuIGFJO307ei5wcm90b3R5cGUuXyQzcz1mdW5jdGlvbigpe3JldHVybiBuZXcgeigpO307ZnVuY3Rpb24gdygpe2lmKGope3JldHVybjt9dGhpcy5fJHZvPW51bGw7dGhpcy5fJEYyPW51bGw7dGhpcy5fJGFvPTQwMDt0aGlzLl8kMVM9NDAwO3cuXyQ0MisrO313Ll8kNDI9MDt3LnByb3RvdHlwZS5fJHpQPWZ1bmN0aW9uKCl7aWYodGhpcy5fJHZvPT1udWxsKXt0aGlzLl8kdm89bmV3IGFuKCk7fWlmKHRoaXMuXyRGMj09bnVsbCl7dGhpcy5fJEYyPW5ldyBBcnJheSgpO319O3cucHJvdG90eXBlLmdldENhbnZhc1dpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRhbzt9O3cucHJvdG90eXBlLmdldENhbnZhc0hlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kMVM7fTt3LnByb3RvdHlwZS5fJEYwPWZ1bmN0aW9uKGFIKXt0aGlzLl8kdm89YUguXyRuUCgpO3RoaXMuXyRGMj1hSC5fJG5QKCk7dGhpcy5fJGFvPWFILl8kNkwoKTt0aGlzLl8kMVM9YUguXyQ2TCgpO307dy5wcm90b3R5cGUuXyQ2Uz1mdW5jdGlvbihhSCl7dGhpcy5fJEYyLnB1c2goYUgpO307dy5wcm90b3R5cGUuXyRYcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kRjI7fTt3LnByb3RvdHlwZS5fJEUyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyR2bzt9O2Z1bmN0aW9uIHUoKXtpZihqKXtyZXR1cm47fXRoaXMucDE9bmV3IE4oKTt0aGlzLnAyPW5ldyBOKCk7dGhpcy5fJEZvPTA7dGhpcy5fJERiPTA7dGhpcy5fJEwyPTA7dGhpcy5fJE0yPTA7dGhpcy5fJGtzPTA7dGhpcy5fJDliPTA7dGhpcy5fJGlQPTA7dGhpcy5fJGlUPTA7dGhpcy5fJGxMPW5ldyBBcnJheSgpO3RoaXMuXyRxUD1uZXcgQXJyYXkoKTt0aGlzLnNldHVwKDAuMywwLjUsMC4xKTt9dS5wcm90b3R5cGUuc2V0dXA9ZnVuY3Rpb24oYUosYUksYUgpe3RoaXMuXyRrcz10aGlzLl8kWWIoKTt0aGlzLnAyLl8keFQoKTtpZihhcmd1bWVudHMubGVuZ3RoPT0zKXt0aGlzLl8kRm89YUo7dGhpcy5fJEwyPWFJO3RoaXMucDEuXyRwPWFIO3RoaXMucDIuXyRwPWFIO3RoaXMucDIueT1hSjt0aGlzLnNldHVwKCk7fX07dS5wcm90b3R5cGUuZ2V0UGh5c2ljc1BvaW50MT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnAxO307dS5wcm90b3R5cGUuZ2V0UGh5c2ljc1BvaW50Mj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnAyO307dS5wcm90b3R5cGUuXyRxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kRGI7fTt1LnByb3RvdHlwZS5fJHByPWZ1bmN0aW9uKGFIKXt0aGlzLl8kRGI9YUg7fTt1LnByb3RvdHlwZS5fJDVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRNMjt9O3UucHJvdG90eXBlLl8kQ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJDliO307dS5wcm90b3R5cGUuXyRZYj1mdW5jdGlvbigpe3JldHVybigtMTgwKihNYXRoLmF0YW4yKHRoaXMucDEueC10aGlzLnAyLngsLSh0aGlzLnAxLnktdGhpcy5wMi55KSkpL01hdGguUEkpO307dS5wcm90b3R5cGUuYWRkU3JjUGFyYW09ZnVuY3Rpb24oYUosYUgsYUwsYUkpe3ZhciBhSz1uZXcgaChhSixhSCxhTCxhSSk7dGhpcy5fJGxMLnB1c2goYUspO307dS5wcm90b3R5cGUuYWRkVGFyZ2V0UGFyYW09ZnVuY3Rpb24oYUosYUgsYUssYUkpe3ZhciBhTD1uZXcgYUYoYUosYUgsYUssYUkpO3RoaXMuXyRxUC5wdXNoKGFMKTt9O3UucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhSSxhTCl7aWYodGhpcy5fJGlQPT0wKXt0aGlzLl8kaVA9dGhpcy5fJGlUPWFMO3RoaXMuXyRGbz0oTWF0aC5zcXJ0KCh0aGlzLnAxLngtdGhpcy5wMi54KSoodGhpcy5wMS54LXRoaXMucDIueCkrKHRoaXMucDEueS10aGlzLnAyLnkpKih0aGlzLnAxLnktdGhpcy5wMi55KSkpO3JldHVybjt9dmFyIGFLPShhTC10aGlzLl8kaVQpLzEwMDA7aWYoYUshPTApe2Zvcih2YXIgYUo9dGhpcy5fJGxMLmxlbmd0aC0xO2FKPj0wOy0tYUope3ZhciBhTT10aGlzLl8kbExbYUpdO2FNLl8kb1AoYUksdGhpcyk7fXRoaXMuXyRvbyhhSSxhSyk7dGhpcy5fJE0yPXRoaXMuXyRZYigpO3RoaXMuXyQ5Yj0odGhpcy5fJE0yLXRoaXMuXyRrcykvYUs7dGhpcy5fJGtzPXRoaXMuXyRNMjt9Zm9yKHZhciBhSj10aGlzLl8kcVAubGVuZ3RoLTE7YUo+PTA7LS1hSil7dmFyIGFIPXRoaXMuXyRxUFthSl07YUguXyRZUyhhSSx0aGlzKTt9dGhpcy5fJGlUPWFMO307dS5wcm90b3R5cGUuXyRvbz1mdW5jdGlvbihhTixhSSl7aWYoYUk8MC4wMzMpe2FJPTAuMDMzO312YXIgYVU9MS9hSTt0aGlzLnAxLnZ4PSh0aGlzLnAxLngtdGhpcy5wMS5fJHMwKSphVTt0aGlzLnAxLnZ5PSh0aGlzLnAxLnktdGhpcy5wMS5fJDcwKSphVTt0aGlzLnAxLmF4PSh0aGlzLnAxLnZ4LXRoaXMucDEuXyQ3TCkqYVU7dGhpcy5wMS5heT0odGhpcy5wMS52eS10aGlzLnAxLl8kSEwpKmFVO3RoaXMucDEuZng9dGhpcy5wMS5heCp0aGlzLnAxLl8kcDt0aGlzLnAxLmZ5PXRoaXMucDEuYXkqdGhpcy5wMS5fJHA7dGhpcy5wMS5fJHhUKCk7dmFyIGFNPS0oTWF0aC5hdGFuMigodGhpcy5wMS55LXRoaXMucDIueSksdGhpcy5wMS54LXRoaXMucDIueCkpO3ZhciBhTDt2YXIgYVY7dmFyIGFSPU1hdGguY29zKGFNKTt2YXIgYUg9TWF0aC5zaW4oYU0pO3ZhciBhVz05LjgqdGhpcy5wMi5fJHA7dmFyIGFRPSh0aGlzLl8kRGIqYUMuXyRiUyk7dmFyIGFQPShhVypNYXRoLmNvcyhhTS1hUSkpO2FMPShhUCphSCk7YVY9KGFQKmFSKTt2YXIgYUs9KC10aGlzLnAxLmZ4KmFIKmFIKTt2YXIgYVQ9KC10aGlzLnAxLmZ5KmFIKmFSKTt2YXIgYUo9KCgtdGhpcy5wMi52eCp0aGlzLl8kTDIpKTt2YXIgYVM9KCgtdGhpcy5wMi52eSp0aGlzLl8kTDIpKTt0aGlzLnAyLmZ4PSgoYUwrYUsrYUopKTt0aGlzLnAyLmZ5PSgoYVYrYVQrYVMpKTt0aGlzLnAyLmF4PXRoaXMucDIuZngvdGhpcy5wMi5fJHA7dGhpcy5wMi5heT10aGlzLnAyLmZ5L3RoaXMucDIuXyRwO3RoaXMucDIudngrPXRoaXMucDIuYXgqYUk7dGhpcy5wMi52eSs9dGhpcy5wMi5heSphSTt0aGlzLnAyLngrPXRoaXMucDIudngqYUk7dGhpcy5wMi55Kz10aGlzLnAyLnZ5KmFJO3ZhciBhTz0oTWF0aC5zcXJ0KCh0aGlzLnAxLngtdGhpcy5wMi54KSoodGhpcy5wMS54LXRoaXMucDIueCkrKHRoaXMucDEueS10aGlzLnAyLnkpKih0aGlzLnAxLnktdGhpcy5wMi55KSkpO3RoaXMucDIueD10aGlzLnAxLngrdGhpcy5fJEZvKih0aGlzLnAyLngtdGhpcy5wMS54KS9hTzt0aGlzLnAyLnk9dGhpcy5wMS55K3RoaXMuXyRGbyoodGhpcy5wMi55LXRoaXMucDEueSkvYU87dGhpcy5wMi52eD0odGhpcy5wMi54LXRoaXMucDIuXyRzMCkqYVU7dGhpcy5wMi52eT0odGhpcy5wMi55LXRoaXMucDIuXyQ3MCkqYVU7dGhpcy5wMi5fJHhUKCk7fTtmdW5jdGlvbiBOKCl7dGhpcy5fJHA9MTt0aGlzLng9MDt0aGlzLnk9MDt0aGlzLnZ4PTA7dGhpcy52eT0wO3RoaXMuYXg9MDt0aGlzLmF5PTA7dGhpcy5meD0wO3RoaXMuZnk9MDt0aGlzLl8kczA9MDt0aGlzLl8kNzA9MDt0aGlzLl8kN0w9MDt0aGlzLl8kSEw9MDt9Ti5wcm90b3R5cGUuXyR4VD1mdW5jdGlvbigpe3RoaXMuXyRzMD10aGlzLng7dGhpcy5fJDcwPXRoaXMueTt0aGlzLl8kN0w9dGhpcy52eDt0aGlzLl8kSEw9dGhpcy52eTt9O2Z1bmN0aW9uIGF0KGFKLGFJLGFIKXt0aGlzLl8kd0w9bnVsbDt0aGlzLnNjYWxlPW51bGw7dGhpcy5fJFYwPW51bGw7dGhpcy5fJHdMPWFKO3RoaXMuc2NhbGU9YUk7dGhpcy5fJFYwPWFIO31hdC5wcm90b3R5cGUuXyRvUD1mdW5jdGlvbihhSSxhSCl7fTtmdW5jdGlvbiBoKGFKLGFLLGFJLGFIKXthdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLGFLLGFJLGFIKTt0aGlzLl8kdEw9bnVsbDt0aGlzLl8kdEw9YUo7fWgucHJvdG90eXBlPW5ldyBhdCgpO2gucHJvdG90eXBlLl8kb1A9ZnVuY3Rpb24oYUosYUgpe3ZhciBhSz10aGlzLnNjYWxlKmFKLmdldFBhcmFtRmxvYXQodGhpcy5fJHdMKTt2YXIgYUw9YUguZ2V0UGh5c2ljc1BvaW50MSgpO3N3aXRjaCh0aGlzLl8kdEwpe2RlZmF1bHQ6Y2FzZSB1LlNyYy5TUkNfVE9fWDphTC54PWFMLngrKGFLLWFMLngpKnRoaXMuXyRWMDticmVhaztjYXNlIHUuU3JjLlNSQ19UT19ZOmFMLnk9YUwueSsoYUstYUwueSkqdGhpcy5fJFYwO2JyZWFrO2Nhc2UgdS5TcmMuU1JDX1RPX0dfQU5HTEU6dmFyIGFJPWFILl8kcXIoKTthST1hSSsoYUstYUkpKnRoaXMuXyRWMDthSC5fJHByKGFJKTticmVhazt9fTtmdW5jdGlvbiBkKGFKLGFJLGFIKXt0aGlzLl8kd0w9bnVsbDt0aGlzLnNjYWxlPW51bGw7dGhpcy5fJFYwPW51bGw7dGhpcy5fJHdMPWFKO3RoaXMuc2NhbGU9YUk7dGhpcy5fJFYwPWFIO31kLnByb3RvdHlwZS5fJFlTPWZ1bmN0aW9uKGFJLGFIKXt9O2Z1bmN0aW9uIGFGKGFJLGFLLGFKLGFIKXtkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYUssYUosYUgpO3RoaXMuXyRZUD1udWxsO3RoaXMuXyRZUD1hSTt9YUYucHJvdG90eXBlPW5ldyBkKCk7YUYucHJvdG90eXBlLl8kWVM9ZnVuY3Rpb24oYUksYUgpe3N3aXRjaCh0aGlzLl8kWVApe2RlZmF1bHQ6Y2FzZSB1LlRhcmdldC5UQVJHRVRfRlJPTV9BTkdMRTphSS5zZXRQYXJhbUZsb2F0KHRoaXMuXyR3TCx0aGlzLnNjYWxlKmFILl8kNXIoKSx0aGlzLl8kVjApO2JyZWFrO2Nhc2UgdS5UYXJnZXQuVEFSR0VUX0ZST01fQU5HTEVfVjphSS5zZXRQYXJhbUZsb2F0KHRoaXMuXyR3TCx0aGlzLnNjYWxlKmFILl8kQ3MoKSx0aGlzLl8kVjApO2JyZWFrO319O3UuU3JjPWZ1bmN0aW9uKCl7fTt1LlNyYy5TUkNfVE9fWD1cIlNSQ19UT19YXCI7dS5TcmMuU1JDX1RPX1k9XCJTUkNfVE9fWVwiO3UuU3JjLlNSQ19UT19HX0FOR0xFPVwiU1JDX1RPX0dfQU5HTEVcIjt1LlRhcmdldD1mdW5jdGlvbigpe307dS5UYXJnZXQuVEFSR0VUX0ZST01fQU5HTEU9XCJUQVJHRVRfRlJPTV9BTkdMRVwiO3UuVGFyZ2V0LlRBUkdFVF9GUk9NX0FOR0xFX1Y9XCJUQVJHRVRfRlJPTV9BTkdMRV9WXCI7ZnVuY3Rpb24gWCgpe2lmKGope3JldHVybjt9dGhpcy5fJGZMPTA7dGhpcy5fJGdMPTA7dGhpcy5fJEIwPTE7dGhpcy5fJHowPTE7dGhpcy5fJHFUPTA7dGhpcy5yZWZsZWN0WD1mYWxzZTt0aGlzLnJlZmxlY3RZPWZhbHNlO31YLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGFIKXt0aGlzLl8kZkw9YUguXyRmTDt0aGlzLl8kZ0w9YUguXyRnTDt0aGlzLl8kQjA9YUguXyRCMDt0aGlzLl8kejA9YUguXyR6MDt0aGlzLl8kcVQ9YUguXyRxVDt0aGlzLnJlZmxlY3RYPWFILnJlZmxlY3RYO3RoaXMucmVmbGVjdFk9YUgucmVmbGVjdFk7fTtYLnByb3RvdHlwZS5fJEYwPWZ1bmN0aW9uKGFIKXt0aGlzLl8kZkw9YUguXyRfVCgpO3RoaXMuXyRnTD1hSC5fJF9UKCk7dGhpcy5fJEIwPWFILl8kX1QoKTt0aGlzLl8kejA9YUguXyRfVCgpO3RoaXMuXyRxVD1hSC5fJF9UKCk7aWYoYUguZ2V0Rm9ybWF0VmVyc2lvbigpPj1heS5MSVZFMkRfRk9STUFUX1ZFUlNJT05fVjJfMTBfU0RLMil7dGhpcy5yZWZsZWN0WD1hSC5fJHBvKCk7dGhpcy5yZWZsZWN0WT1hSC5fJHBvKCk7fX07WC5wcm90b3R5cGUuXyRlPWZ1bmN0aW9uKCl7fTt2YXIgYWQ9ZnVuY3Rpb24oKXt9O2FkLl8kbmk9ZnVuY3Rpb24oYUwsYUosYVIsYVEsYUssYUksYUgsYVMsYU4pe3ZhciBhTT0oYUgqYUktYVMqYUspO2lmKGFNPT0wKXtyZXR1cm4gbnVsbDt9ZWxzZXt2YXIgYU89KChhTC1hUikqYUktKGFKLWFRKSphSykvYU07dmFyIGFQO2lmKGFLIT0wKXthUD0oYUwtYVItYU8qYUgpL2FLO31lbHNle2FQPShhSi1hUS1hTyphUykvYUk7fWlmKGlzTmFOKGFQKSl7YVA9KGFMLWFSLWFPKmFIKS9hSztpZihpc05hTihhUCkpe2FQPShhSi1hUS1hTyphUykvYUk7fWlmKGlzTmFOKGFQKSl7Y29uc29sZS5sb2coXCJhIGlzIE5hTiBAVXRWZWN0b3IjXyRuaSgpIFwiKTtjb25zb2xlLmxvZyhcInYxeCA6IFwiK2FLKTtjb25zb2xlLmxvZyhcInYxeCAhPSAwID8gXCIrKGFLIT0wKSk7fX1pZihhTj09bnVsbCl7cmV0dXJuIG5ldyBBcnJheShhUCxhTyk7fWVsc2V7YU5bMF09YVA7YU5bMV09YU87cmV0dXJuIGFOO319fTtmdW5jdGlvbiBhdigpe2lmKGope3JldHVybjt9dGhpcy54PW51bGw7dGhpcy55PW51bGw7dGhpcy53aWR0aD1udWxsO3RoaXMuaGVpZ2h0PW51bGw7fWF2LnByb3RvdHlwZS5fJDhQPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCswLjUqdGhpcy53aWR0aDt9O2F2LnByb3RvdHlwZS5fJDZQPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSswLjUqdGhpcy5oZWlnaHQ7fTthdi5wcm90b3R5cGUuXyRFTD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aDt9O2F2LnByb3RvdHlwZS5fJDVUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodDt9O2F2LnByb3RvdHlwZS5fJGpMPWZ1bmN0aW9uKGFJLGFLLGFKLGFIKXt0aGlzLng9YUk7dGhpcy55PWFLO3RoaXMud2lkdGg9YUo7dGhpcy5oZWlnaHQ9YUg7fTthdi5wcm90b3R5cGUuXyRqTD1mdW5jdGlvbihhSCl7dGhpcy54PWFILng7dGhpcy55PWFILnk7dGhpcy53aWR0aD1hSC53aWR0aDt0aGlzLmhlaWdodD1hSC5oZWlnaHQ7fTthdi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYUgsYUkpe3JldHVybiB0aGlzLng8PXRoaXMueCYmdGhpcy55PD10aGlzLnkmJih0aGlzLng8PXRoaXMueCt0aGlzLndpZHRoKSYmKHRoaXMueTw9dGhpcy55K3RoaXMuaGVpZ2h0KTt9O2F2LnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24oYUgsYUkpe3RoaXMueC09YUg7dGhpcy55LT1hSTt0aGlzLndpZHRoKz1hSCoyO3RoaXMuaGVpZ2h0Kz1hSSoyO307ZnVuY3Rpb24gYUcoKXt9YUcuXyRaMj1mdW5jdGlvbihiYixibyxicCxhMil7dmFyIGExPWJvLl8kUTIoYmIsYnApO3ZhciBhMz1iYi5fJHZzKCk7dmFyIGJhPWJiLl8kVHIoKTtiby5fJHpyKGEzLGJhLGExKTtpZihhMTw9MCl7cmV0dXJuIGEyW2EzWzBdXTt9ZWxzZXtpZihhMT09MSl7dmFyIGJqPWEyW2EzWzBdXTt2YXIgYmk9YTJbYTNbMV1dO3ZhciBhOT1iYVswXTtyZXR1cm4oYmorKGJpLWJqKSphOSl8MDt9ZWxzZXtpZihhMT09Mil7dmFyIGJqPWEyW2EzWzBdXTt2YXIgYmk9YTJbYTNbMV1dO3ZhciBhMD1hMlthM1syXV07dmFyIGFaPWEyW2EzWzNdXTt2YXIgYTk9YmFbMF07dmFyIGE4PWJhWzFdO3ZhciBicj0oYmorKGJpLWJqKSphOSl8MDt2YXIgYnE9KGEwKyhhWi1hMCkqYTkpfDA7cmV0dXJuKGJyKyhicS1icikqYTgpfDA7fWVsc2V7aWYoYTE9PTMpe3ZhciBhUD1hMlthM1swXV07dmFyIGFPPWEyW2EzWzFdXTt2YXIgYm49YTJbYTNbMl1dO3ZhciBibT1hMlthM1szXV07dmFyIGFLPWEyW2EzWzRdXTt2YXIgYUo9YTJbYTNbNV1dO3ZhciBiZz1hMlthM1s2XV07dmFyIGJmPWEyW2EzWzddXTt2YXIgYTk9YmFbMF07dmFyIGE4PWJhWzFdO3ZhciBhNj1iYVsyXTt2YXIgYmo9KGFQKyhhTy1hUCkqYTkpfDA7dmFyIGJpPShibisoYm0tYm4pKmE5KXwwO3ZhciBhMD0oYUsrKGFKLWFLKSphOSl8MDt2YXIgYVo9KGJnKyhiZi1iZykqYTkpfDA7dmFyIGJyPShiaisoYmktYmopKmE4KXwwO3ZhciBicT0oYTArKGFaLWEwKSphOCl8MDtyZXR1cm4oYnIrKGJxLWJyKSphNil8MDt9ZWxzZXtpZihhMT09NCl7dmFyIGFUPWEyW2EzWzBdXTt2YXIgYVM9YTJbYTNbMV1dO3ZhciBidT1hMlthM1syXV07dmFyIGJ0PWEyW2EzWzNdXTt2YXIgYU49YTJbYTNbNF1dO3ZhciBhTT1hMlthM1s1XV07dmFyIGJsPWEyW2EzWzZdXTt2YXIgYms9YTJbYTNbN11dO3ZhciBiZT1hMlthM1s4XV07dmFyIGJjPWEyW2EzWzldXTt2YXIgYVg9YTJbYTNbMTBdXTt2YXIgYVc9YTJbYTNbMTFdXTt2YXIgYTc9YTJbYTNbMTJdXTt2YXIgYTU9YTJbYTNbMTNdXTt2YXIgYVI9YTJbYTNbMTRdXTt2YXIgYVE9YTJbYTNbMTVdXTt2YXIgYTk9YmFbMF07dmFyIGE4PWJhWzFdO3ZhciBhNj1iYVsyXTt2YXIgYTQ9YmFbM107dmFyIGFQPShhVCsoYVMtYVQpKmE5KXwwO3ZhciBhTz0oYnUrKGJ0LWJ1KSphOSl8MDt2YXIgYm49KGFOKyhhTS1hTikqYTkpfDA7dmFyIGJtPShibCsoYmstYmwpKmE5KXwwO3ZhciBhSz0oYmUrKGJjLWJlKSphOSl8MDt2YXIgYUo9KGFYKyhhVy1hWCkqYTkpfDA7dmFyIGJnPShhNysoYTUtYTcpKmE5KXwwO3ZhciBiZj0oYVIrKGFRLWFSKSphOSl8MDt2YXIgYmo9KGFQKyhhTy1hUCkqYTgpfDA7dmFyIGJpPShibisoYm0tYm4pKmE4KXwwO3ZhciBhMD0oYUsrKGFKLWFLKSphOCl8MDt2YXIgYVo9KGJnKyhiZi1iZykqYTgpfDA7dmFyIGJyPShiaisoYmktYmopKmE2KXwwO3ZhciBicT0oYTArKGFaLWEwKSphNil8MDtyZXR1cm4oYnIrKGJxLWJyKSphNCl8MDt9ZWxzZXt2YXIgYVY9MTw8YTE7dmFyIGFZPW5ldyBGbG9hdDMyQXJyYXkoYVYpO2Zvcih2YXIgYmg9MDtiaDxhVjtiaCsrKXt2YXIgYUk9Ymg7dmFyIGFIPTE7Zm9yKHZhciBhTD0wO2FMPGExO2FMKyspe2FIKj0oYUklMj09MCk/KDEtYmFbYUxdKTpiYVthTF07YUkvPTI7fWFZW2JoXT1hSDt9dmFyIGJzPW5ldyBGbG9hdDMyQXJyYXkoYVYpO2Zvcih2YXIgYVU9MDthVTxhVjthVSsrKXtic1thVV09YTJbYTNbYVVdXTt9dmFyIGJkPTA7Zm9yKHZhciBhVT0wO2FVPGFWO2FVKyspe2JkKz1hWVthVV0qYnNbYVVdO31yZXR1cm4oYmQrMC41KXwwO319fX19fTthRy5fJGJyPWZ1bmN0aW9uKGJhLGJvLGJwLGJnKXt2YXIgYTE9Ym8uXyRRMihiYSxicCk7dmFyIGEyPWJhLl8kdnMoKTt2YXIgYTk9YmEuXyRUcigpO2JvLl8kenIoYTIsYTksYTEpO2lmKGExPD0wKXtyZXR1cm4gYmdbYTJbMF1dO31lbHNle2lmKGExPT0xKXt2YXIgYmo9YmdbYTJbMF1dO3ZhciBiaT1iZ1thMlsxXV07dmFyIGE4PWE5WzBdO3JldHVybiBiaisoYmktYmopKmE4O31lbHNle2lmKGExPT0yKXt2YXIgYmo9YmdbYTJbMF1dO3ZhciBiaT1iZ1thMlsxXV07dmFyIGEwPWJnW2EyWzJdXTt2YXIgYVo9YmdbYTJbM11dO3ZhciBhOD1hOVswXTt2YXIgYTc9YTlbMV07cmV0dXJuKDEtYTcpKihiaisoYmktYmopKmE4KSthNyooYTArKGFaLWEwKSphOCk7fWVsc2V7aWYoYTE9PTMpe3ZhciBhUD1iZ1thMlswXV07dmFyIGFPPWJnW2EyWzFdXTt2YXIgYm49YmdbYTJbMl1dO3ZhciBibT1iZ1thMlszXV07dmFyIGFLPWJnW2EyWzRdXTt2YXIgYUo9YmdbYTJbNV1dO3ZhciBiZj1iZ1thMls2XV07dmFyIGJlPWJnW2EyWzddXTt2YXIgYTg9YTlbMF07dmFyIGE3PWE5WzFdO3ZhciBhNT1hOVsyXTtyZXR1cm4oMS1hNSkqKCgxLWE3KSooYVArKGFPLWFQKSphOCkrYTcqKGJuKyhibS1ibikqYTgpKSthNSooKDEtYTcpKihhSysoYUotYUspKmE4KSthNyooYmYrKGJlLWJmKSphOCkpO31lbHNle2lmKGExPT00KXt2YXIgYVQ9YmdbYTJbMF1dO3ZhciBhUz1iZ1thMlsxXV07dmFyIGJzPWJnW2EyWzJdXTt2YXIgYnI9YmdbYTJbM11dO3ZhciBhTj1iZ1thMls0XV07dmFyIGFNPWJnW2EyWzVdXTt2YXIgYmw9YmdbYTJbNl1dO3ZhciBiaz1iZ1thMls3XV07dmFyIGJkPWJnW2EyWzhdXTt2YXIgYmI9YmdbYTJbOV1dO3ZhciBhWD1iZ1thMlsxMF1dO3ZhciBhVz1iZ1thMlsxMV1dO3ZhciBhNj1iZ1thMlsxMl1dO3ZhciBhND1iZ1thMlsxM11dO3ZhciBhUj1iZ1thMlsxNF1dO3ZhciBhUT1iZ1thMlsxNV1dO3ZhciBhOD1hOVswXTt2YXIgYTc9YTlbMV07dmFyIGE1PWE5WzJdO3ZhciBhMz1hOVszXTtyZXR1cm4oMS1hMykqKCgxLWE1KSooKDEtYTcpKihhVCsoYVMtYVQpKmE4KSthNyooYnMrKGJyLWJzKSphOCkpK2E1KigoMS1hNykqKGFOKyhhTS1hTikqYTgpK2E3KihibCsoYmstYmwpKmE4KSkpK2EzKigoMS1hNSkqKCgxLWE3KSooYmQrKGJiLWJkKSphOCkrYTcqKGFYKyhhVy1hWCkqYTgpKSthNSooKDEtYTcpKihhNisoYTQtYTYpKmE4KSthNyooYVIrKGFRLWFSKSphOCkpKTt9ZWxzZXt2YXIgYVY9MTw8YTE7dmFyIGFZPW5ldyBGbG9hdDMyQXJyYXkoYVYpO2Zvcih2YXIgYmg9MDtiaDxhVjtiaCsrKXt2YXIgYUk9Ymg7dmFyIGFIPTE7Zm9yKHZhciBhTD0wO2FMPGExO2FMKyspe2FIKj0oYUklMj09MCk/KDEtYTlbYUxdKTphOVthTF07YUkvPTI7fWFZW2JoXT1hSDt9dmFyIGJxPW5ldyBGbG9hdDMyQXJyYXkoYVYpO2Zvcih2YXIgYVU9MDthVTxhVjthVSsrKXticVthVV09YmdbYTJbYVVdXTt9dmFyIGJjPTA7Zm9yKHZhciBhVT0wO2FVPGFWO2FVKyspe2JjKz1hWVthVV0qYnFbYVVdO31yZXR1cm4gYmM7fX19fX19O2FHLl8kVnI9ZnVuY3Rpb24oYlYsYlcsYTUsYUksYkMsYTMsYlgsYkgpe3ZhciBhTj1iVy5fJFEyKGJWLGE1KTt2YXIgYnc9YlYuXyR2cygpO3ZhciBhMj1iVi5fJFRyKCk7YlcuXyR6cihidyxhMixhTik7dmFyIGFKPWFJKjI7dmFyIGFRPWJYO2lmKGFOPD0wKXt2YXIgYkk9YndbMF07dmFyIGJxPWJDW2JJXTtpZihiSD09MiYmYlg9PTApe1AuXyRqVChicSwwLGEzLDAsYUopO31lbHNle2Zvcih2YXIgYnQ9MDtidDxhSjspe2EzW2FRXT1icVtidCsrXTthM1thUSsxXT1icVtidCsrXTthUSs9Ykg7fX19ZWxzZXtpZihhTj09MSl7dmFyIGJxPWJDW2J3WzBdXTt2YXIgYnA9YkNbYndbMV1dO3ZhciBiMz1hMlswXTt2YXIgYlQ9MS1iMztmb3IodmFyIGJ0PTA7YnQ8YUo7KXthM1thUV09YnFbYnRdKmJUK2JwW2J0XSpiMzsrK2J0O2EzW2FRKzFdPWJxW2J0XSpiVCticFtidF0qYjM7KytidDthUSs9Ykg7fX1lbHNle2lmKGFOPT0yKXt2YXIgYnE9YkNbYndbMF1dO3ZhciBicD1iQ1tid1sxXV07dmFyIGFaPWJDW2J3WzJdXTt2YXIgYVk9YkNbYndbM11dO3ZhciBiMz1hMlswXTt2YXIgYjE9YTJbMV07dmFyIGJUPTEtYjM7dmFyIGJQPTEtYjE7dmFyIGIyPWJQKmJUO3ZhciBiMD1iUCpiMzt2YXIgYk09YjEqYlQ7dmFyIGJMPWIxKmIzO2Zvcih2YXIgYnQ9MDtidDxhSjspe2EzW2FRXT1iMipicVtidF0rYjAqYnBbYnRdK2JNKmFaW2J0XStiTCphWVtidF07KytidDthM1thUSsxXT1iMipicVtidF0rYjAqYnBbYnRdK2JNKmFaW2J0XStiTCphWVtidF07KytidDthUSs9Ykg7fX1lbHNle2lmKGFOPT0zKXt2YXIgYmE9YkNbYndbMF1dO3ZhciBhOT1iQ1tid1sxXV07dmFyIGFQPWJDW2J3WzJdXTt2YXIgYU89YkNbYndbM11dO3ZhciBhNj1iQ1tid1s0XV07dmFyIGE0PWJDW2J3WzVdXTt2YXIgYUw9YkNbYndbNl1dO3ZhciBhSz1iQ1tid1s3XV07dmFyIGIzPWEyWzBdO3ZhciBiMT1hMlsxXTt2YXIgYlo9YTJbMl07dmFyIGJUPTEtYjM7dmFyIGJQPTEtYjE7dmFyIGJOPTEtYlo7dmFyIGI4PWJOKmJQKmJUO3ZhciBiNz1iTipiUCpiMzt2YXIgYlU9Yk4qYjEqYlQ7dmFyIGJTPWJOKmIxKmIzO3ZhciBiNj1iWipiUCpiVDt2YXIgYjU9YloqYlAqYjM7dmFyIGJRPWJaKmIxKmJUO3ZhciBiTz1iWipiMSpiMztmb3IodmFyIGJ0PTA7YnQ8YUo7KXthM1thUV09YjgqYmFbYnRdK2I3KmE5W2J0XStiVSphUFtidF0rYlMqYU9bYnRdK2I2KmE2W2J0XStiNSphNFtidF0rYlEqYUxbYnRdK2JPKmFLW2J0XTsrK2J0O2EzW2FRKzFdPWI4KmJhW2J0XStiNyphOVtidF0rYlUqYVBbYnRdK2JTKmFPW2J0XStiNiphNltidF0rYjUqYTRbYnRdK2JRKmFMW2J0XStiTyphS1tidF07KytidDthUSs9Ykg7fX1lbHNle2lmKGFOPT00KXt2YXIgYkQ9YkNbYndbMF1dO3ZhciBiQj1iQ1tid1sxXV07dmFyIGJvPWJDW2J3WzJdXTt2YXIgYm09YkNbYndbM11dO3ZhciBieT1iQ1tid1s0XV07dmFyIGJ4PWJDW2J3WzVdXTt2YXIgYmU9YkNbYndbNl1dO3ZhciBiZD1iQ1tid1s3XV07dmFyIGJHPWJDW2J3WzhdXTt2YXIgYkU9YkNbYndbOV1dO3ZhciBidj1iQ1tid1sxMF1dO3ZhciBidT1iQ1tid1sxMV1dO3ZhciBiQT1iQ1tid1sxMl1dO3ZhciBiej1iQ1tid1sxM11dO3ZhciBibj1iQ1tid1sxNF1dO3ZhciBibD1iQ1tid1sxNV1dO3ZhciBiMz1hMlswXTt2YXIgYjE9YTJbMV07dmFyIGJaPWEyWzJdO3ZhciBiWT1hMlszXTt2YXIgYlQ9MS1iMzt2YXIgYlA9MS1iMTt2YXIgYk49MS1iWjt2YXIgYks9MS1iWTt2YXIgYms9YksqYk4qYlAqYlQ7dmFyIGJpPWJLKmJOKmJQKmIzO3ZhciBhVz1iSypiTipiMSpiVDt2YXIgYVY9YksqYk4qYjEqYjM7dmFyIGJjPWJLKmJaKmJQKmJUO3ZhciBiYj1iSypiWipiUCpiMzt2YXIgYVM9YksqYloqYjEqYlQ7dmFyIGFSPWJLKmJaKmIxKmIzO3ZhciBicz1iWSpiTipiUCpiVDt2YXIgYnI9YlkqYk4qYlAqYjM7dmFyIGExPWJZKmJOKmIxKmJUO3ZhciBhMD1iWSpiTipiMSpiMzt2YXIgYmg9YlkqYloqYlAqYlQ7dmFyIGJmPWJZKmJaKmJQKmIzO3ZhciBhVT1iWSpiWipiMSpiVDt2YXIgYVQ9YlkqYloqYjEqYjM7Zm9yKHZhciBidD0wO2J0PGFKOyl7YTNbYVFdPWJrKmJEW2J0XStiaSpiQltidF0rYVcqYm9bYnRdK2FWKmJtW2J0XStiYypieVtidF0rYmIqYnhbYnRdK2FTKmJlW2J0XSthUipiZFtidF0rYnMqYkdbYnRdK2JyKmJFW2J0XSthMSpidltidF0rYTAqYnVbYnRdK2JoKmJBW2J0XStiZipieltidF0rYVUqYm5bYnRdK2FUKmJsW2J0XTsrK2J0O2EzW2FRKzFdPWJrKmJEW2J0XStiaSpiQltidF0rYVcqYm9bYnRdK2FWKmJtW2J0XStiYypieVtidF0rYmIqYnhbYnRdK2FTKmJlW2J0XSthUipiZFtidF0rYnMqYkdbYnRdK2JyKmJFW2J0XSthMSpidltidF0rYTAqYnVbYnRdK2JoKmJBW2J0XStiZipieltidF0rYVUqYm5bYnRdK2FUKmJsW2J0XTsrK2J0O2FRKz1iSDt9fWVsc2V7dmFyIGI0PTE8PGFOO3ZhciBiSj1uZXcgRmxvYXQzMkFycmF5KGI0KTtmb3IodmFyIGJqPTA7Ymo8YjQ7YmorKyl7dmFyIGFIPWJqO3ZhciBhTT0xO2Zvcih2YXIgYkY9MDtiRjxhTjtiRisrKXthTSo9KGFIJTI9PTApPygxLWEyW2JGXSk6YTJbYkZdO2FILz0yO31iSltial09YU07fXZhciBiZz1uZXcgRmxvYXQzMkFycmF5KGI0KTtmb3IodmFyIGFYPTA7YVg8YjQ7YVgrKyl7YmdbYVhdPWJDW2J3W2FYXV07fWZvcih2YXIgYnQ9MDtidDxhSjspe3ZhciBhOD0wLGE3PTA7dmFyIGJSPWJ0KzE7Zm9yKHZhciBhWD0wO2FYPGI0O2FYKyspe2E4Kz1iSlthWF0qYmdbYVhdW2J0XTthNys9YkpbYVhdKmJnW2FYXVtiUl07fWJ0Kz0yO2EzW2FRXT1hODthM1thUSsxXT1hNzthUSs9Ykg7fX19fX19fTtmdW5jdGlvbiBlKCl7aWYoail7cmV0dXJuO310aGlzLng9bnVsbDt0aGlzLnk9bnVsbDt9ZS5wcm90b3R5cGUuXyRIVD1mdW5jdGlvbihhSCxhSSl7dGhpcy54PWFIO3RoaXMueT1hSTt9O2UucHJvdG90eXBlLl8kSFQ9ZnVuY3Rpb24oYUgpe3RoaXMueD1hSC54O3RoaXMueT1hSC55O307ZnVuY3Rpb24gYWUoKXtpZihqKXtyZXR1cm47fXRoaXMuXyRnUD1udWxsO3RoaXMuXyRkcj1udWxsO3RoaXMuXyRHUz1udWxsO3RoaXMuXyRxYj1udWxsO3RoaXMuXyRMYj1udWxsO3RoaXMuXyRtUz1udWxsO3RoaXMuY2xpcElEPW51bGw7dGhpcy5jbGlwSURMaXN0PW5ldyBBcnJheSgpO31hZS5fJHVyPS0yO2FlLl8kRVM9NTAwO2FlLl8kd2I9MjthZS5fJDhTPTM7YWUuXyQ1Mj1hZS5fJEVTO2FlLl8kUjI9YWUuXyRFUzthZS5fJG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGFlLl8kNTI7fTthZS5fJFByPWZ1bmN0aW9uKCl7cmV0dXJuIGFlLl8kUjI7fTthZS5wcm90b3R5cGUuY29udmVydENsaXBJREZvclYyXzExPWZ1bmN0aW9uKGFJKXt2YXIgYUg9W107aWYoYUk9PW51bGwpe3JldHVybiBudWxsO31pZihhSS5sZW5ndGg9PTApe3JldHVybiBudWxsO31pZighLywvLnRlc3QoYUkpKXthSC5wdXNoKGFJLmlkKTtyZXR1cm4gYUg7fWFIPWFJLmlkLnNwbGl0KFwiLFwiKTtyZXR1cm4gYUg7fTthZS5wcm90b3R5cGUuXyRGMD1mdW5jdGlvbihhSCl7dGhpcy5fJGdQPWFILl8kblAoKTt0aGlzLl8kZHI9YUguXyRuUCgpO3RoaXMuXyRHUz1hSC5fJG5QKCk7dGhpcy5fJHFiPWFILl8kNkwoKTt0aGlzLl8kTGI9YUguXyRjUygpO3RoaXMuXyRtUz1hSC5fJFRiKCk7aWYoYUguZ2V0Rm9ybWF0VmVyc2lvbigpPj1heS5fJFQ3KXt0aGlzLmNsaXBJRD1hSC5fJG5QKCk7dGhpcy5jbGlwSURMaXN0PXRoaXMuY29udmVydENsaXBJREZvclYyXzExKHRoaXMuY2xpcElEKTt9ZWxzZXt0aGlzLmNsaXBJRExpc3Q9W107fXRoaXMuXyRNUyh0aGlzLl8kTGIpO307YWUucHJvdG90eXBlLmdldENsaXBJRExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGlwSURMaXN0O307YWUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYUgpe307YWUucHJvdG90eXBlLl8kTnI9ZnVuY3Rpb24oYUgsYUkpe2FJLl8kSVNbMF09ZmFsc2U7YUkuXyRVcz1hRy5fJFoyKGFILHRoaXMuXyRHUyxhSS5fJElTLHRoaXMuXyRMYik7aWYoUS5fJFpzKXt9ZWxzZXtpZihhSS5fJElTWzBdKXtyZXR1cm47fX1hSS5fJDdzPWFHLl8kYnIoYUgsdGhpcy5fJEdTLGFJLl8kSVMsdGhpcy5fJG1TKTt9O2FlLnByb3RvdHlwZS5fJDJiPWZ1bmN0aW9uKGFILGFJKXt9O2FlLnByb3RvdHlwZS5nZXREcmF3RGF0YUlEPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRnUDt9O2FlLnByb3RvdHlwZS5fJGoyPWZ1bmN0aW9uKGFIKXt0aGlzLl8kZ1A9YUg7fTthZS5wcm90b3R5cGUuZ2V0T3BhY2l0eT1mdW5jdGlvbihhSCxhSSl7cmV0dXJuIGFJLl8kN3M7fTthZS5wcm90b3R5cGUuXyR6Uz1mdW5jdGlvbihhSCxhSSl7cmV0dXJuIGFJLl8kVXM7fTthZS5wcm90b3R5cGUuXyRNUz1mdW5jdGlvbihhSil7Zm9yKHZhciBhST1hSi5sZW5ndGgtMTthST49MDstLWFJKXt2YXIgYUg9YUpbYUldO2lmKGFIPGFlLl8kNTIpe2FlLl8kNTI9YUg7fWVsc2V7aWYoYUg+YWUuXyRSMil7YWUuXyRSMj1hSDt9fX19O2FlLnByb3RvdHlwZS5nZXRUYXJnZXRCYXNlRGF0YUlEPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRkcjt9O2FlLnByb3RvdHlwZS5fJGdzPWZ1bmN0aW9uKGFIKXt0aGlzLl8kZHI9YUg7fTthZS5wcm90b3R5cGUuXyQzMj1mdW5jdGlvbigpe3JldHVybih0aGlzLl8kZHIhPW51bGwmJih0aGlzLl8kZHIhPW4uXyQybygpKSk7fTthZS5wcm90b3R5cGUucHJlRHJhdz1mdW5jdGlvbihhSixhSCxhSSl7fTthZS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhSixhSCxhSSl7fTthZS5wcm90b3R5cGUuZ2V0VHlwZT1mdW5jdGlvbigpe307YWUucHJvdG90eXBlLl8kQjI9ZnVuY3Rpb24oYUksYUgsYUope307ZnVuY3Rpb24gYXgoKXtpZihqKXtyZXR1cm47fXRoaXMuXyRFYj1heC5fJHBzO3RoaXMuXyRsVD0xO3RoaXMuXyRDMD0xO3RoaXMuXyR0VD0xO3RoaXMuXyRXTD0xO3RoaXMuY3VsbGluZz1mYWxzZTt0aGlzLm1hdHJpeDR4ND1uZXcgRmxvYXQzMkFycmF5KDE2KTt0aGlzLnByZW11bHRpcGxpZWRBbHBoYT1mYWxzZTt0aGlzLmFuaXNvdHJvcHk9MDt0aGlzLmNsaXBwaW5nUHJvY2Vzcz1heC5DTElQUElOR19QUk9DRVNTX05PTkU7dGhpcy5jbGlwQnVmUHJlX2NsaXBDb250ZXh0TWFzaz1udWxsO3RoaXMuY2xpcEJ1ZlByZV9jbGlwQ29udGV4dERyYXc9bnVsbDt0aGlzLkNIQU5ORUxfQ09MT1JTPW5ldyBBcnJheSgpO31heC5fJHBzPTMyO2F4LkNMSVBQSU5HX1BST0NFU1NfTk9ORT0wO2F4LkNMSVBQSU5HX1BST0NFU1NfT1ZFUldSSVRFX0FMUEhBPTE7YXguQ0xJUFBJTkdfUFJPQ0VTU19NVUxUSVBMWV9BTFBIQT0yO2F4LkNMSVBQSU5HX1BST0NFU1NfRFJBVz0zO2F4LkNMSVBQSU5HX1BST0NFU1NfQ0xFQVJfQUxQSEE9NDtheC5wcm90b3R5cGUuc2V0Q2hhbm5lbEZsYWdBc0NvbG9yPWZ1bmN0aW9uKGFILGFJKXt0aGlzLkNIQU5ORUxfQ09MT1JTW2FIXT1hSTt9O2F4LnByb3RvdHlwZS5nZXRDaGFubmVsRmxhZ0FzQ29sb3I9ZnVuY3Rpb24oYUgpe3JldHVybiB0aGlzLkNIQU5ORUxfQ09MT1JTW2FIXTt9O2F4LnByb3RvdHlwZS5fJFpUPWZ1bmN0aW9uKCl7fTtheC5wcm90b3R5cGUuXyRVbz1mdW5jdGlvbihhTSxhSyxhSixhTCxhTixhSSxhSCl7fTtheC5wcm90b3R5cGUuXyRScz1mdW5jdGlvbigpe3JldHVybiAtMTt9O2F4LnByb3RvdHlwZS5fJERzPWZ1bmN0aW9uKGFIKXt9O2F4LnByb3RvdHlwZS5zZXRCYXNlQ29sb3I9ZnVuY3Rpb24oYUssYUosYUksYUgpe2lmKGFLPDApe2FLPTA7fWVsc2V7aWYoYUs+MSl7YUs9MTt9fWlmKGFKPDApe2FKPTA7fWVsc2V7aWYoYUo+MSl7YUo9MTt9fWlmKGFJPDApe2FJPTA7fWVsc2V7aWYoYUk+MSl7YUk9MTt9fWlmKGFIPDApe2FIPTA7fWVsc2V7aWYoYUg+MSl7YUg9MTt9fXRoaXMuXyRsVD1hSzt0aGlzLl8kQzA9YUo7dGhpcy5fJHRUPWFJO3RoaXMuXyRXTD1hSDt9O2F4LnByb3RvdHlwZS5fJFdQPWZ1bmN0aW9uKGFIKXt0aGlzLmN1bGxpbmc9YUg7fTtheC5wcm90b3R5cGUuc2V0TWF0cml4PWZ1bmN0aW9uKGFIKXtmb3IodmFyIGFJPTA7YUk8MTY7YUkrKyl7dGhpcy5tYXRyaXg0eDRbYUldPWFIW2FJXTt9fTtheC5wcm90b3R5cGUuXyRJVD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdHJpeDR4NDt9O2F4LnByb3RvdHlwZS5zZXRQcmVtdWx0aXBsaWVkQWxwaGE9ZnVuY3Rpb24oYUgpe3RoaXMucHJlbXVsdGlwbGllZEFscGhhPWFIO307YXgucHJvdG90eXBlLmlzUHJlbXVsdGlwbGllZEFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlbXVsdGlwbGllZEFscGhhO307YXgucHJvdG90eXBlLnNldEFuaXNvdHJvcHk9ZnVuY3Rpb24oYUgpe3RoaXMuYW5pc290cm9weT1hSDt9O2F4LnByb3RvdHlwZS5nZXRBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pc290cm9weTt9O2F4LnByb3RvdHlwZS5nZXRDbGlwcGluZ1Byb2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGlwcGluZ1Byb2Nlc3M7fTtheC5wcm90b3R5cGUuc2V0Q2xpcHBpbmdQcm9jZXNzPWZ1bmN0aW9uKGFIKXt0aGlzLmNsaXBwaW5nUHJvY2Vzcz1hSDt9O2F4LnByb3RvdHlwZS5zZXRDbGlwQnVmUHJlX2NsaXBDb250ZXh0Rm9yTWFzaz1mdW5jdGlvbihhSCl7dGhpcy5jbGlwQnVmUHJlX2NsaXBDb250ZXh0TWFzaz1hSDt9O2F4LnByb3RvdHlwZS5nZXRDbGlwQnVmUHJlX2NsaXBDb250ZXh0TWFzaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsaXBCdWZQcmVfY2xpcENvbnRleHRNYXNrO307YXgucHJvdG90eXBlLnNldENsaXBCdWZQcmVfY2xpcENvbnRleHRGb3JEcmF3PWZ1bmN0aW9uKGFIKXt0aGlzLmNsaXBCdWZQcmVfY2xpcENvbnRleHREcmF3PWFIO307YXgucHJvdG90eXBlLmdldENsaXBCdWZQcmVfY2xpcENvbnRleHREcmF3PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xpcEJ1ZlByZV9jbGlwQ29udGV4dERyYXc7fTtmdW5jdGlvbiBvKCl7aWYoail7cmV0dXJuO310aGlzLmE9MTt0aGlzLnI9MTt0aGlzLmc9MTt0aGlzLmI9MTt0aGlzLnNjYWxlPTE7dGhpcy5fJGhvPTE7dGhpcy5ibGVuZE1vZGU9US5MMkRfQ09MT1JfQkxFTkRfTU9ERV9NVUxUO31mdW5jdGlvbiBjKCl7aWYoail7cmV0dXJuO310aGlzLl8ka1A9bnVsbDt0aGlzLl8kZHI9bnVsbDt0aGlzLl8kQWk9dHJ1ZTt0aGlzLl8kbVM9bnVsbDt9Yy5fJHVyPS0yO2MuXyRjMj0xO2MuXyRfYj0yO2MucHJvdG90eXBlLl8kRjA9ZnVuY3Rpb24oYUgpe3RoaXMuXyRrUD1hSC5fJG5QKCk7dGhpcy5fJGRyPWFILl8kblAoKTt9O2MucHJvdG90eXBlLnJlYWRWMl9vcGFjaXR5PWZ1bmN0aW9uKGFIKXtpZihhSC5nZXRGb3JtYXRWZXJzaW9uKCk+PWF5LkxJVkUyRF9GT1JNQVRfVkVSU0lPTl9WMl8xMF9TREsyKXt0aGlzLl8kbVM9YUguXyRUYigpO319O2MucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYUgpe307Yy5wcm90b3R5cGUuXyROcj1mdW5jdGlvbihhSSxhSCl7fTtjLnByb3RvdHlwZS5pbnRlcnBvbGF0ZU9wYWNpdHk9ZnVuY3Rpb24oYUosYUssYUksYUgpe2lmKHRoaXMuXyRtUz09bnVsbCl7YUkuc2V0SW50ZXJwb2xhdGVkT3BhY2l0eSgxKTt9ZWxzZXthSS5zZXRJbnRlcnBvbGF0ZWRPcGFjaXR5KGFHLl8kYnIoYUosYUssYUgsdGhpcy5fJG1TKSk7fX07Yy5wcm90b3R5cGUuXyQyYj1mdW5jdGlvbihhSSxhSCl7fTtjLnByb3RvdHlwZS5fJG5iPWZ1bmN0aW9uKGFMLGFLLGFNLGFILGFJLGFKLGFOKXt9O2MucHJvdG90eXBlLmdldFR5cGU9ZnVuY3Rpb24oKXt9O2MucHJvdG90eXBlLl8kZ3M9ZnVuY3Rpb24oYUgpe3RoaXMuXyRkcj1hSDt9O2MucHJvdG90eXBlLl8kYTI9ZnVuY3Rpb24oYUgpe3RoaXMuXyRrUD1hSDt9O2MucHJvdG90eXBlLmdldFRhcmdldEJhc2VEYXRhSUQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJGRyO307Yy5wcm90b3R5cGUuZ2V0QmFzZURhdGFJRD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8ka1A7fTtjLnByb3RvdHlwZS5fJDMyPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuXyRkciE9bnVsbCYmKHRoaXMuXyRkciE9bi5fJDJvKCkpKTt9O2Z1bmN0aW9uIFAoKXt9UC5fJFcyPTA7UC5fJENTPVAuXyRXMjtQLl8kTW89ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9O1AuXyRYUD1mdW5jdGlvbihhSSl7dHJ5e3ZhciBhSj1nZXRUaW1lTVNlYygpO3doaWxlKGdldFRpbWVNU2VjKCktYUo8YUkpe319Y2F0Y2goYUgpe2FILl8kUmIoKTt9fTtQLmdldFVzZXJUaW1lTVNlYz1mdW5jdGlvbigpe3JldHVybihQLl8kQ1M9PVAuXyRXMik/UC5nZXRTeXN0ZW1UaW1lTVNlYygpOlAuXyRDUzt9O1Auc2V0VXNlclRpbWVNU2VjPWZ1bmN0aW9uKGFIKXtQLl8kQ1M9YUg7fTtQLnVwZGF0ZVVzZXJUaW1lTVNlYz1mdW5jdGlvbigpe3JldHVybihQLl8kQ1M9UC5nZXRTeXN0ZW1UaW1lTVNlYygpKTt9O1AuZ2V0VGltZU1TZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7fTtQLmdldFN5c3RlbVRpbWVNU2VjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO307UC5fJFE9ZnVuY3Rpb24oYUgpe307UC5fJGpUPWZ1bmN0aW9uKGFNLGFKLGFJLGFMLGFIKXtmb3IodmFyIGFLPTA7YUs8YUg7YUsrKyl7YUlbYUwrYUtdPWFNW2FKK2FLXTt9fTtmdW5jdGlvbiBhQSgpe2lmKGope3JldHVybjt9dGhpcy5fJFZQPTA7dGhpcy5fJHdMPW51bGw7dGhpcy5fJEdQPW51bGw7dGhpcy5fJDhvPWFBLl8kZHM7dGhpcy5fJDJyPS0xO3RoaXMuXyRPMj0wO3RoaXMuXyRyaT0wO31hQS5fJGRzPS0yO2FBLnByb3RvdHlwZS5fJEYwPWZ1bmN0aW9uKGFIKXt0aGlzLl8kd0w9YUguXyRuUCgpO3RoaXMuXyRWUD1hSC5fJDZMKCk7dGhpcy5fJEdQPWFILl8kblAoKTt9O2FBLnByb3RvdHlwZS5nZXRQYXJhbUluZGV4PWZ1bmN0aW9uKGFIKXtpZih0aGlzLl8kMnIhPWFIKXt0aGlzLl8kOG89YUEuXyRkczt9cmV0dXJuIHRoaXMuXyQ4bzt9O2FBLnByb3RvdHlwZS5fJFBiPWZ1bmN0aW9uKGFJLGFIKXt0aGlzLl8kOG89YUk7dGhpcy5fJDJyPWFIO307YUEucHJvdG90eXBlLmdldFBhcmFtSUQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJHdMO307YUEucHJvdG90eXBlLl8keVA9ZnVuY3Rpb24oYUgpe3RoaXMuXyR3TD1hSDt9O2FBLnByb3RvdHlwZS5fJE4yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRWUDt9O2FBLnByb3RvdHlwZS5fJGQyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRHUDt9O2FBLnByb3RvdHlwZS5fJHQyPWZ1bmN0aW9uKGFJLGFIKXt0aGlzLl8kVlA9YUk7dGhpcy5fJEdQPWFIO307YUEucHJvdG90eXBlLl8kTHI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJE8yO307YUEucHJvdG90eXBlLl8kd3I9ZnVuY3Rpb24oYUgpe3RoaXMuXyRPMj1hSDt9O2FBLnByb3RvdHlwZS5fJFNMPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRyaTt9O2FBLnByb3RvdHlwZS5fJEFMPWZ1bmN0aW9uKGFIKXt0aGlzLl8kcmk9YUg7fTtmdW5jdGlvbiBHKCl7fUcuc3RhcnRzV2l0aD1mdW5jdGlvbihhSixhTCxhSyl7dmFyIGFIPWFMK2FLLmxlbmd0aDtpZihhSD49YUoubGVuZ3RoKXtyZXR1cm4gZmFsc2U7fWZvcih2YXIgYUk9YUw7YUk8YUg7YUkrKyl7aWYoRy5nZXRDaGFyKGFKLGFJKSE9YUsuY2hhckF0KGFJLWFMKSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7fTtHLmdldENoYXI9ZnVuY3Rpb24oYUksYUgpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGFJLmdldFVpbnQ4KGFIKSk7fTtHLmNyZWF0ZVN0cmluZz1mdW5jdGlvbihhTSxhTCxhSil7dmFyIGFIPW5ldyBBcnJheUJ1ZmZlcihhSioyKTt2YXIgYUs9bmV3IFVpbnQxNkFycmF5KGFIKTtmb3IodmFyIGFJPTA7YUk8YUo7YUkrKyl7YUtbYUldPWFNLmdldFVpbnQ4KGFMK2FJKTt9cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxhSyk7fTtHLl8kTFM9ZnVuY3Rpb24oYVAsYU0sYVIsYUspe2lmKGFQIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe2FQPW5ldyBEYXRhVmlldyhhUCk7fXZhciBhTD1hUjt2YXIgYUo9ZmFsc2U7dmFyIGFRPWZhbHNlO3ZhciBhUz0wO3ZhciBhTz1HLmdldENoYXIoYVAsYUwpO2lmKGFPPT1cIi1cIil7YUo9dHJ1ZTthTCsrO312YXIgYU49ZmFsc2U7Zm9yKDthTDxhTTthTCsrKXthTz1HLmdldENoYXIoYVAsYUwpO3N3aXRjaChhTyl7Y2FzZVwiMFwiOmFTPWFTKjEwO2JyZWFrO2Nhc2VcIjFcIjphUz1hUyoxMCsxO2JyZWFrO2Nhc2VcIjJcIjphUz1hUyoxMCsyO2JyZWFrO2Nhc2VcIjNcIjphUz1hUyoxMCszO2JyZWFrO2Nhc2VcIjRcIjphUz1hUyoxMCs0O2JyZWFrO2Nhc2VcIjVcIjphUz1hUyoxMCs1O2JyZWFrO2Nhc2VcIjZcIjphUz1hUyoxMCs2O2JyZWFrO2Nhc2VcIjdcIjphUz1hUyoxMCs3O2JyZWFrO2Nhc2VcIjhcIjphUz1hUyoxMCs4O2JyZWFrO2Nhc2VcIjlcIjphUz1hUyoxMCs5O2JyZWFrO2Nhc2VcIi5cIjphUT10cnVlO2FMKys7YU49dHJ1ZTticmVhaztkZWZhdWx0OmFOPXRydWU7YnJlYWs7fWlmKGFOKXticmVhazt9fWlmKGFRKXt2YXIgYUk9MC4xO3ZhciBhSD1mYWxzZTtmb3IoO2FMPGFNO2FMKyspe2FPPUcuZ2V0Q2hhcihhUCxhTCk7c3dpdGNoKGFPKXtjYXNlXCIwXCI6YnJlYWs7Y2FzZVwiMVwiOmFTKz1hSSoxO2JyZWFrO2Nhc2VcIjJcIjphUys9YUkqMjticmVhaztjYXNlXCIzXCI6YVMrPWFJKjM7YnJlYWs7Y2FzZVwiNFwiOmFTKz1hSSo0O2JyZWFrO2Nhc2VcIjVcIjphUys9YUkqNTticmVhaztjYXNlXCI2XCI6YVMrPWFJKjY7YnJlYWs7Y2FzZVwiN1wiOmFTKz1hSSo3O2JyZWFrO2Nhc2VcIjhcIjphUys9YUkqODticmVhaztjYXNlXCI5XCI6YVMrPWFJKjk7YnJlYWs7ZGVmYXVsdDphSD10cnVlO2JyZWFrO31hSSo9MC4xO2lmKGFIKXticmVhazt9fX1pZihhSil7YVM9LWFTO31hS1swXT1hTDtyZXR1cm4gYVM7fTtmdW5jdGlvbiBnKCl7aWYoail7cmV0dXJuO310aGlzLl8kT2I9bnVsbDt9Zy5wcm90b3R5cGUuXyR6UD1mdW5jdGlvbigpe3RoaXMuXyRPYj1uZXcgQXJyYXkoKTt9O2cucHJvdG90eXBlLl8kRjA9ZnVuY3Rpb24oYUgpe3RoaXMuXyRPYj1hSC5fJG5QKCk7fTtnLnByb3RvdHlwZS5fJFVyPWZ1bmN0aW9uKGFLKXtpZihhSy5fJFdTKCkpe3JldHVybiB0cnVlO312YXIgYUg9YUsuXyR2MigpO2Zvcih2YXIgYUo9dGhpcy5fJE9iLmxlbmd0aC0xO2FKPj0wOy0tYUope3ZhciBhST10aGlzLl8kT2JbYUpdLmdldFBhcmFtSW5kZXgoYUgpO2lmKGFJPT1hQS5fJGRzKXthST1hSy5nZXRQYXJhbUluZGV4KHRoaXMuXyRPYlthSl0uZ2V0UGFyYW1JRCgpKTt9aWYoYUsuXyRYYihhSSkpe3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO307Zy5wcm90b3R5cGUuXyRRMj1mdW5jdGlvbihhTCxhVil7dmFyIGFYPXRoaXMuXyRPYi5sZW5ndGg7dmFyIGFKPWFMLl8kdjIoKTt2YXIgYU49MDt2YXIgYUk7dmFyIGFRO2Zvcih2YXIgYUs9MDthSzxhWDthSysrKXt2YXIgYUg9dGhpcy5fJE9iW2FLXTthST1hSC5nZXRQYXJhbUluZGV4KGFKKTtpZihhST09YUEuXyRkcyl7YUk9YUwuZ2V0UGFyYW1JbmRleChhSC5nZXRQYXJhbUlEKCkpO2FILl8kUGIoYUksYUopO31pZihhSTwwKXt0aHJvdyBuZXcgRXhjZXB0aW9uKFwiZXJyIDIzMjQyIDogXCIrYUguZ2V0UGFyYW1JRCgpKTt9dmFyIGFVPWFJPDA/MDphTC5nZXRQYXJhbUZsb2F0KGFJKTthUT1hSC5fJE4yKCk7dmFyIGFNPWFILl8kZDIoKTt2YXIgYVA9LTE7dmFyIGFUPTA7dmFyIGFTO3ZhciBhUjtpZihhUTwxKXt9ZWxzZXtpZihhUT09MSl7YVM9YU1bMF07aWYoYVMtYXcuXyRKPGFVJiZhVTxhUythdy5fJEope2FQPTA7YVQ9MDt9ZWxzZXthUD0wO2FWWzBdPXRydWU7fX1lbHNle2FTPWFNWzBdO2lmKGFVPGFTLWF3Ll8kSil7YVA9MDthVlswXT10cnVlO31lbHNle2lmKGFVPGFTK2F3Ll8kSil7YVA9MDt9ZWxzZXt2YXIgYVc9ZmFsc2U7Zm9yKHZhciBhTz0xO2FPPGFROysrYU8pe2FSPWFNW2FPXTtpZihhVTxhUithdy5fJEope2lmKGFSLWF3Ll8kSjxhVSl7YVA9YU87fWVsc2V7YVA9YU8tMTthVD0oYVUtYVMpLyhhUi1hUyk7YU4rKzt9YVc9dHJ1ZTticmVhazt9YVM9YVI7fWlmKCFhVyl7YVA9YVEtMTthVD0wO2FWWzBdPXRydWU7fX19fX1hSC5fJHdyKGFQKTthSC5fJEFMKGFUKTt9cmV0dXJuIGFOO307Zy5wcm90b3R5cGUuXyR6cj1mdW5jdGlvbihhTixhVCxhUCl7dmFyIGFSPTE8PGFQO2lmKGFSKzE+YXcuXyRRYil7Y29uc29sZS5sb2coXCJlcnIgMjMyNDVcXG5cIik7fXZhciBhUz10aGlzLl8kT2IubGVuZ3RoO3ZhciBhSz0xO3ZhciBhSD0xO3ZhciBhSj0wO2Zvcih2YXIgYVE9MDthUTxhUjsrK2FRKXthTlthUV09MDt9Zm9yKHZhciBhTD0wO2FMPGFTOysrYUwpe3ZhciBhST10aGlzLl8kT2JbYUxdO2lmKGFJLl8kU0woKT09MCl7dmFyIGFPPWFJLl8kTHIoKSphSztpZihhTzwwJiZRLl8kM1Qpe3Rocm93IG5ldyBFeGNlcHRpb24oXCJlcnIgMjMyNDZcIik7fWZvcih2YXIgYVE9MDthUTxhUjsrK2FRKXthTlthUV0rPWFPO319ZWxzZXt2YXIgYU89YUsqYUkuXyRMcigpO3ZhciBhTT1hSyooYUkuXyRMcigpKzEpO2Zvcih2YXIgYVE9MDthUTxhUjsrK2FRKXthTlthUV0rPSgoYVEvYUh8MCklMj09MCk/YU86YU07fWFUW2FKKytdPWFJLl8kU0woKTthSCo9Mjt9YUsqPWFJLl8kTjIoKTt9YU5bYVJdPTY1NTM1O2FUW2FKXT0tMTt9O2cucHJvdG90eXBlLl8kaDI9ZnVuY3Rpb24oYUosYUgsYUspe3ZhciBhTT1uZXcgRmxvYXQzMkFycmF5KGFIKTtmb3IodmFyIGFMPTA7YUw8YUg7KythTCl7YU1bYUxdPWFLW2FMXTt9dmFyIGFJPW5ldyBhQSgpO2FJLl8keVAoYUopO2FJLl8kdDIoYUgsYU0pO3RoaXMuXyRPYi5wdXNoKGFJKTt9O2cucHJvdG90eXBlLl8kSjI9ZnVuY3Rpb24oYU8pe3ZhciBhTj1hTzt2YXIgYU09dGhpcy5fJE9iLmxlbmd0aDtmb3IodmFyIGFLPTA7YUs8YU07KythSyl7dmFyIGFJPXRoaXMuXyRPYlthS107dmFyIGFIPWFJLl8kTjIoKTt2YXIgYUo9YU4lYUkuXyROMigpO3ZhciBhTD1hSS5fJGQyKClbYUpdO2NvbnNvbGUubG9nKFwiJXNbJWRdPSU3LjJmIC8gXCIsYUkuZ2V0UGFyYW1JRCgpLGFKLGFMKTthTi89YUg7fWNvbnNvbGUubG9nKFwiXFxuXCIpO307Zy5wcm90b3R5cGUuZ2V0UGFyYW1Db3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kT2IubGVuZ3RoO307Zy5wcm90b3R5cGUuXyR6cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kT2I7fTtmdW5jdGlvbiBhYygpe3RoaXMubT1uZXcgRmxvYXQzMkFycmF5KDE2KTt0aGlzLmlkZW50aXR5KCk7fWFjLnByb3RvdHlwZS5pZGVudGl0eT1mdW5jdGlvbigpe2Zvcih2YXIgYUg9MDthSDwxNjthSCsrKXt0aGlzLm1bYUhdPSgoYUglNSk9PTApPzE6MDt9fTthYy5wcm90b3R5cGUuZ2V0QXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tO307YWMucHJvdG90eXBlLmdldENvcHlNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSh0aGlzLm0pO307YWMucHJvdG90eXBlLnNldE1hdHJpeD1mdW5jdGlvbihhSSl7aWYoYUk9PW51bGx8fGFJLmxlbmd0aCE9MTYpe3JldHVybjt9Zm9yKHZhciBhSD0wO2FIPDE2O2FIKyspe3RoaXMubVthSF09YUlbYUhdO319O2FjLnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGFILGFKLGFJKXtpZihhSj09bnVsbCl7cmV0dXJuIG51bGw7fWlmKHRoaXM9PWFKKXt0aGlzLm11bHRfc2FmZSh0aGlzLm0sYUgubSxhSi5tLGFJKTt9ZWxzZXt0aGlzLm11bHRfZmFzdCh0aGlzLm0sYUgubSxhSi5tLGFJKTt9cmV0dXJuIGFKO307YWMucHJvdG90eXBlLm11bHRfc2FmZT1mdW5jdGlvbihhSSxhSCxhTSxhSil7aWYoYUk9PWFNKXt2YXIgYUw9bmV3IEFycmF5KDE2KTt0aGlzLm11bHRfZmFzdChhSSxhSCxhTCxhSik7Zm9yKHZhciBhSz0xNTthSz49MDstLWFLKXthTVthS109YUxbYUtdO319ZWxzZXt0aGlzLm11bHRfZmFzdChhSSxhSCxhTSxhSik7fX07YWMucHJvdG90eXBlLm11bHRfZmFzdD1mdW5jdGlvbihhSSxhSCxhSyxhSil7aWYoYUope2FLWzBdPWFJWzBdKmFIWzBdK2FJWzRdKmFIWzFdK2FJWzhdKmFIWzJdO2FLWzRdPWFJWzBdKmFIWzRdK2FJWzRdKmFIWzVdK2FJWzhdKmFIWzZdO2FLWzhdPWFJWzBdKmFIWzhdK2FJWzRdKmFIWzldK2FJWzhdKmFIWzEwXTthS1sxMl09YUlbMF0qYUhbMTJdK2FJWzRdKmFIWzEzXSthSVs4XSphSFsxNF0rYUlbMTJdO2FLWzFdPWFJWzFdKmFIWzBdK2FJWzVdKmFIWzFdK2FJWzldKmFIWzJdO2FLWzVdPWFJWzFdKmFIWzRdK2FJWzVdKmFIWzVdK2FJWzldKmFIWzZdO2FLWzldPWFJWzFdKmFIWzhdK2FJWzVdKmFIWzldK2FJWzldKmFIWzEwXTthS1sxM109YUlbMV0qYUhbMTJdK2FJWzVdKmFIWzEzXSthSVs5XSphSFsxNF0rYUlbMTNdO2FLWzJdPWFJWzJdKmFIWzBdK2FJWzZdKmFIWzFdK2FJWzEwXSphSFsyXTthS1s2XT1hSVsyXSphSFs0XSthSVs2XSphSFs1XSthSVsxMF0qYUhbNl07YUtbMTBdPWFJWzJdKmFIWzhdK2FJWzZdKmFIWzldK2FJWzEwXSphSFsxMF07YUtbMTRdPWFJWzJdKmFIWzEyXSthSVs2XSphSFsxM10rYUlbMTBdKmFIWzE0XSthSVsxNF07YUtbM109YUtbN109YUtbMTFdPTA7YUtbMTVdPTE7fWVsc2V7YUtbMF09YUlbMF0qYUhbMF0rYUlbNF0qYUhbMV0rYUlbOF0qYUhbMl0rYUlbMTJdKmFIWzNdO2FLWzRdPWFJWzBdKmFIWzRdK2FJWzRdKmFIWzVdK2FJWzhdKmFIWzZdK2FJWzEyXSphSFs3XTthS1s4XT1hSVswXSphSFs4XSthSVs0XSphSFs5XSthSVs4XSphSFsxMF0rYUlbMTJdKmFIWzExXTthS1sxMl09YUlbMF0qYUhbMTJdK2FJWzRdKmFIWzEzXSthSVs4XSphSFsxNF0rYUlbMTJdKmFIWzE1XTthS1sxXT1hSVsxXSphSFswXSthSVs1XSphSFsxXSthSVs5XSphSFsyXSthSVsxM10qYUhbM107YUtbNV09YUlbMV0qYUhbNF0rYUlbNV0qYUhbNV0rYUlbOV0qYUhbNl0rYUlbMTNdKmFIWzddO2FLWzldPWFJWzFdKmFIWzhdK2FJWzVdKmFIWzldK2FJWzldKmFIWzEwXSthSVsxM10qYUhbMTFdO2FLWzEzXT1hSVsxXSphSFsxMl0rYUlbNV0qYUhbMTNdK2FJWzldKmFIWzE0XSthSVsxM10qYUhbMTVdO2FLWzJdPWFJWzJdKmFIWzBdK2FJWzZdKmFIWzFdK2FJWzEwXSphSFsyXSthSVsxNF0qYUhbM107YUtbNl09YUlbMl0qYUhbNF0rYUlbNl0qYUhbNV0rYUlbMTBdKmFIWzZdK2FJWzE0XSphSFs3XTthS1sxMF09YUlbMl0qYUhbOF0rYUlbNl0qYUhbOV0rYUlbMTBdKmFIWzEwXSthSVsxNF0qYUhbMTFdO2FLWzE0XT1hSVsyXSphSFsxMl0rYUlbNl0qYUhbMTNdK2FJWzEwXSphSFsxNF0rYUlbMTRdKmFIWzE1XTthS1szXT1hSVszXSphSFswXSthSVs3XSphSFsxXSthSVsxMV0qYUhbMl0rYUlbMTVdKmFIWzNdO2FLWzddPWFJWzNdKmFIWzRdK2FJWzddKmFIWzVdK2FJWzExXSphSFs2XSthSVsxNV0qYUhbN107YUtbMTFdPWFJWzNdKmFIWzhdK2FJWzddKmFIWzldK2FJWzExXSphSFsxMF0rYUlbMTVdKmFIWzExXTthS1sxNV09YUlbM10qYUhbMTJdK2FJWzddKmFIWzEzXSthSVsxMV0qYUhbMTRdK2FJWzE1XSphSFsxNV07fX07YWMucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhSCxhSixhSSl7dGhpcy5tWzEyXT10aGlzLm1bMF0qYUgrdGhpcy5tWzRdKmFKK3RoaXMubVs4XSphSSt0aGlzLm1bMTJdO3RoaXMubVsxM109dGhpcy5tWzFdKmFIK3RoaXMubVs1XSphSit0aGlzLm1bOV0qYUkrdGhpcy5tWzEzXTt0aGlzLm1bMTRdPXRoaXMubVsyXSphSCt0aGlzLm1bNl0qYUordGhpcy5tWzEwXSphSSt0aGlzLm1bMTRdO3RoaXMubVsxNV09dGhpcy5tWzNdKmFIK3RoaXMubVs3XSphSit0aGlzLm1bMTFdKmFJK3RoaXMubVsxNV07fTthYy5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYUosYUksYUgpe3RoaXMubVswXSo9YUo7dGhpcy5tWzRdKj1hSTt0aGlzLm1bOF0qPWFIO3RoaXMubVsxXSo9YUo7dGhpcy5tWzVdKj1hSTt0aGlzLm1bOV0qPWFIO3RoaXMubVsyXSo9YUo7dGhpcy5tWzZdKj1hSTt0aGlzLm1bMTBdKj1hSDt0aGlzLm1bM10qPWFKO3RoaXMubVs3XSo9YUk7dGhpcy5tWzExXSo9YUg7fTthYy5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbihhSCl7dmFyIGFLPWFDLmZjb3MoYUgpO3ZhciBhSj1hQy5fJDkoYUgpO3ZhciBhST10aGlzLm1bNF07dGhpcy5tWzRdPWFJKmFLK3RoaXMubVs4XSphSjt0aGlzLm1bOF09YUkqLWFKK3RoaXMubVs4XSphSzthST10aGlzLm1bNV07dGhpcy5tWzVdPWFJKmFLK3RoaXMubVs5XSphSjt0aGlzLm1bOV09YUkqLWFKK3RoaXMubVs5XSphSzthST10aGlzLm1bNl07dGhpcy5tWzZdPWFJKmFLK3RoaXMubVsxMF0qYUo7dGhpcy5tWzEwXT1hSSotYUordGhpcy5tWzEwXSphSzthST10aGlzLm1bN107dGhpcy5tWzddPWFJKmFLK3RoaXMubVsxMV0qYUo7dGhpcy5tWzExXT1hSSotYUordGhpcy5tWzExXSphSzt9O2FjLnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKGFIKXt2YXIgYUs9YUMuZmNvcyhhSCk7dmFyIGFKPWFDLl8kOShhSCk7dmFyIGFJPXRoaXMubVswXTt0aGlzLm1bMF09YUkqYUsrdGhpcy5tWzhdKi1hSjt0aGlzLm1bOF09YUkqYUordGhpcy5tWzhdKmFLO2FJPXRoaXMubVsxXTt0aGlzLm1bMV09YUkqYUsrdGhpcy5tWzldKi1hSjt0aGlzLm1bOV09YUkqYUordGhpcy5tWzldKmFLO2FJPW1bMl07dGhpcy5tWzJdPWFJKmFLK3RoaXMubVsxMF0qLWFKO3RoaXMubVsxMF09YUkqYUordGhpcy5tWzEwXSphSzthST1tWzNdO3RoaXMubVszXT1hSSphSyt0aGlzLm1bMTFdKi1hSjt0aGlzLm1bMTFdPWFJKmFKK3RoaXMubVsxMV0qYUs7fTthYy5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhSCl7dmFyIGFLPWFDLmZjb3MoYUgpO3ZhciBhSj1hQy5fJDkoYUgpO3ZhciBhST10aGlzLm1bMF07dGhpcy5tWzBdPWFJKmFLK3RoaXMubVs0XSphSjt0aGlzLm1bNF09YUkqLWFKK3RoaXMubVs0XSphSzthST10aGlzLm1bMV07dGhpcy5tWzFdPWFJKmFLK3RoaXMubVs1XSphSjt0aGlzLm1bNV09YUkqLWFKK3RoaXMubVs1XSphSzthST10aGlzLm1bMl07dGhpcy5tWzJdPWFJKmFLK3RoaXMubVs2XSphSjt0aGlzLm1bNl09YUkqLWFKK3RoaXMubVs2XSphSzthST10aGlzLm1bM107dGhpcy5tWzNdPWFJKmFLK3RoaXMubVs3XSphSjt0aGlzLm1bN109YUkqLWFKK3RoaXMubVs3XSphSzt9O2Z1bmN0aW9uIFooYUgpe2lmKGope3JldHVybjt9YWsucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhSCk7fVoucHJvdG90eXBlPW5ldyBhaygpO1ouXyR0UD1uZXcgT2JqZWN0KCk7Wi5fJDI3PWZ1bmN0aW9uKCl7Wi5fJHRQLmNsZWFyKCk7fTtaLmdldElEPWZ1bmN0aW9uKGFIKXt2YXIgYUk9Wi5fJHRQW2FIXTtpZihhST09bnVsbCl7YUk9bmV3IFooYUgpO1ouXyR0UFthSF09YUk7fXJldHVybiBhSTt9O1oucHJvdG90eXBlLl8kM3M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFooKTt9O2Z1bmN0aW9uIGFEKCl7aWYoail7cmV0dXJuO310aGlzLl8kNz0xO3RoaXMuXyRmPTA7dGhpcy5fJEg9MDt0aGlzLl8kZz0xO3RoaXMuXyRrPTA7dGhpcy5fJHc9MDt0aGlzLl8kaGk9U1RBVEVfSURFTlRJVFk7dGhpcy5fJFo9XyRwUzt9YUQuXyRrUz0tMTthRC5fJHBTPTA7YUQuXyRoYj0xO2FELlNUQVRFX0lERU5USVRZPTA7YUQuXyRnYj0xO2FELl8kZm89MjthRC5fJGdvPTQ7YUQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihhSyxhSSxhSCl7dmFyIGFULGFTLGFSLGFNLGFMLGFKO3ZhciBhUT0wO3ZhciBhTj0wO3N3aXRjaCh0aGlzLl8kaGkpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UgKGFELl8kZ298YUQuXyRmb3xhRC5fJGdiKTphVD10aGlzLl8kNzthUz10aGlzLl8kSDthUj10aGlzLl8kazthTT10aGlzLl8kZjthTD10aGlzLl8kZzthSj10aGlzLl8kdzt3aGlsZSgtLWFIPj0wKXt2YXIgYVA9YUtbYVErK107dmFyIGFPPWFLW2FRKytdO2FJW2FOKytdPShhVCphUCthUyphTythUik7YUlbYU4rK109KGFNKmFQK2FMKmFPK2FKKTt9cmV0dXJuO2Nhc2UgKGFELl8kZ298YUQuXyRmbyk6YVQ9dGhpcy5fJDc7YVM9dGhpcy5fJEg7YU09dGhpcy5fJGY7YUw9dGhpcy5fJGc7d2hpbGUoLS1hSD49MCl7dmFyIGFQPWFLW2FRKytdO3ZhciBhTz1hS1thUSsrXTthSVthTisrXT0oYVQqYVArYVMqYU8pO2FJW2FOKytdPShhTSphUCthTCphTyk7fXJldHVybjtjYXNlIChhRC5fJGdvfGFELl8kZ2IpOmFTPXRoaXMuXyRIO2FSPXRoaXMuXyRrO2FNPXRoaXMuXyRmO2FKPXRoaXMuXyR3O3doaWxlKC0tYUg+PTApe3ZhciBhUD1hS1thUSsrXTthSVthTisrXT0oYVMqYUtbYVErK10rYVIpO2FJW2FOKytdPShhTSphUCthSik7fXJldHVybjtjYXNlIChhRC5fJGdvKTphUz10aGlzLl8kSDthTT10aGlzLl8kZjt3aGlsZSgtLWFIPj0wKXt2YXIgYVA9YUtbYVErK107YUlbYU4rK109KGFTKmFLW2FRKytdKTthSVthTisrXT0oYU0qYVApO31yZXR1cm47Y2FzZSAoYUQuXyRmb3xhRC5fJGdiKTphVD10aGlzLl8kNzthUj10aGlzLl8kazthTD10aGlzLl8kZzthSj10aGlzLl8kdzt3aGlsZSgtLWFIPj0wKXthSVthTisrXT0oYVQqYUtbYVErK10rYVIpO2FJW2FOKytdPShhTCphS1thUSsrXSthSik7fXJldHVybjtjYXNlIChhRC5fJGZvKTphVD10aGlzLl8kNzthTD10aGlzLl8kZzt3aGlsZSgtLWFIPj0wKXthSVthTisrXT0oYVQqYUtbYVErK10pO2FJW2FOKytdPShhTCphS1thUSsrXSk7fXJldHVybjtjYXNlIChhRC5fJGdiKTphUj10aGlzLl8kazthSj10aGlzLl8kdzt3aGlsZSgtLWFIPj0wKXthSVthTisrXT0oYUtbYVErK10rYVIpO2FJW2FOKytdPShhS1thUSsrXSthSik7fXJldHVybjtjYXNlIChhRC5TVEFURV9JREVOVElUWSk6aWYoYUshPWFJfHxhUSE9YU4pe1AuXyRqVChhSyxhUSxhSSxhTixhSCoyKTt9cmV0dXJuO319O2FELnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLl8kSD09MCYmdGhpcy5fJGY9PTApe2lmKHRoaXMuXyQ3PT0xJiZ0aGlzLl8kZz09MSl7aWYodGhpcy5fJGs9PTAmJnRoaXMuXyR3PT0wKXt0aGlzLl8kaGk9YUQuU1RBVEVfSURFTlRJVFk7dGhpcy5fJFo9YUQuXyRwUzt9ZWxzZXt0aGlzLl8kaGk9YUQuXyRnYjt0aGlzLl8kWj1hRC5fJGhiO319ZWxzZXtpZih0aGlzLl8kaz09MCYmdGhpcy5fJHc9PTApe3RoaXMuXyRoaT1hRC5fJGZvO3RoaXMuXyRaPWFELl8ka1M7fWVsc2V7dGhpcy5fJGhpPShhRC5fJGZvfGFELl8kZ2IpO3RoaXMuXyRaPWFELl8ka1M7fX19ZWxzZXtpZih0aGlzLl8kNz09MCYmdGhpcy5fJGc9PTApe2lmKHRoaXMuXyRrPT0wJiZ0aGlzLl8kdz09MCl7dGhpcy5fJGhpPWFELl8kZ287dGhpcy5fJFo9YUQuXyRrUzt9ZWxzZXt0aGlzLl8kaGk9KGFELl8kZ298YUQuXyRnYik7dGhpcy5fJFo9YUQuXyRrUzt9fWVsc2V7aWYodGhpcy5fJGs9PTAmJnRoaXMuXyR3PT0wKXt0aGlzLl8kaGk9KGFELl8kZ298YUQuXyRmbyk7dGhpcy5fJFo9YUQuXyRrUzt9ZWxzZXt0aGlzLl8kaGk9KGFELl8kZ298YUQuXyRmb3xhRC5fJGdiKTt0aGlzLl8kWj1hRC5fJGtTO319fX07YUQucHJvdG90eXBlLl8kUlQ9ZnVuY3Rpb24oYUspe3RoaXMuXyRJVChhSyk7dmFyIGFKPWFLWzBdO3ZhciBhSD1hS1syXTt2YXIgYU49YUtbMV07dmFyIGFNPWFLWzNdO3ZhciBhST1NYXRoLnNxcnQoYUoqYUorYU4qYU4pO3ZhciBhTD1hSiphTS1hSCphTjtpZihhST09MCl7aWYoUS5fJHNvKXtjb25zb2xlLmxvZyhcImFmZmluZS5fJFJUKCkgLyBydD09MFwiKTt9fWVsc2V7YUtbMF09YUk7YUtbMV09YUwvYUk7YUtbMl09KGFOKmFNK2FKKmFIKS9hTDthS1szXT1NYXRoLmF0YW4yKGFOLGFKKTt9fTthRC5wcm90b3R5cGUuXyRobz1mdW5jdGlvbihhTixhTSxhSSxhSCl7dmFyIGFMPW5ldyBGbG9hdDMyQXJyYXkoNik7dmFyIGFLPW5ldyBGbG9hdDMyQXJyYXkoNik7YU4uXyRSVChhTCk7YU0uXyRSVChhSyk7dmFyIGFKPW5ldyBGbG9hdDMyQXJyYXkoNik7YUpbMF09YUxbMF0rKGFLWzBdLWFMWzBdKSphSTthSlsxXT1hTFsxXSsoYUtbMV0tYUxbMV0pKmFJO2FKWzJdPWFMWzJdKyhhS1syXS1hTFsyXSkqYUk7YUpbM109YUxbM10rKGFLWzNdLWFMWzNdKSphSTthSls0XT1hTFs0XSsoYUtbNF0tYUxbNF0pKmFJO2FKWzVdPWFMWzVdKyhhS1s1XS1hTFs1XSkqYUk7YUguXyRDVChhSik7fTthRC5wcm90b3R5cGUuXyRDVD1mdW5jdGlvbihhSil7dmFyIGFJPU1hdGguY29zKGFKWzNdKTt2YXIgYUg9TWF0aC5zaW4oYUpbM10pO3RoaXMuXyQ3PWFKWzBdKmFJO3RoaXMuXyRmPWFKWzBdKmFIO3RoaXMuXyRIPWFKWzFdKihhSlsyXSphSS1hSCk7dGhpcy5fJGc9YUpbMV0qKGFKWzJdKmFIK2FJKTt0aGlzLl8kaz1hSls0XTt0aGlzLl8kdz1hSls1XTt0aGlzLnVwZGF0ZSgpO307YUQucHJvdG90eXBlLl8kSVQ9ZnVuY3Rpb24oYUgpe2FIWzBdPXRoaXMuXyQ3O2FIWzFdPXRoaXMuXyRmO2FIWzJdPXRoaXMuXyRIO2FIWzNdPXRoaXMuXyRnO2FIWzRdPXRoaXMuXyRrO2FIWzVdPXRoaXMuXyR3O307ZnVuY3Rpb24gWSgpe2lmKGope3JldHVybjt9YWgucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5tb3Rpb25zPW5ldyBBcnJheSgpO3RoaXMuXyQ3cj1udWxsO3RoaXMuXyQ3cj1ZLl8kQ28rKzt0aGlzLl8kRDA9MzA7dGhpcy5fJHlUPTA7dGhpcy5fJEU9dHJ1ZTt0aGlzLmxvb3BGYWRlSW49dHJ1ZTt0aGlzLl8kQVM9LTE7XyRhMCgpO31ZLnByb3RvdHlwZT1uZXcgYWgoKTtZLl8kY3M9XCJWSVNJQkxFOlwiO1kuXyRhcj1cIkxBWU9VVDpcIjtZLl8kQ289MDtZLl8kRDI9W107WS5fJDFUPTE7WS5sb2FkTW90aW9uPWZ1bmN0aW9uKGFSKXt2YXIgYU09bmV3IFkoKTt2YXIgYUk9WzBdO3ZhciBhUD1hUi5sZW5ndGg7YU0uXyR5VD0wO2Zvcih2YXIgYUo9MDthSjxhUDsrK2FKKXt2YXIgYVE9KGFSW2FKXSYyNTUpO2lmKGFRPT1cIlxcblwifHxhUT09XCJcXHJcIil7Y29udGludWU7fWlmKGFRPT1cIiNcIil7Zm9yKDthSjxhUDsrK2FKKXtpZihhUlthSl09PVwiXFxuXCJ8fGFSW2FKXT09XCJcXHJcIil7YnJlYWs7fX1jb250aW51ZTt9aWYoYVE9PVwiJFwiKXt2YXIgYVQ9YUo7dmFyIGFLPS0xO2Zvcig7YUo8YVA7KythSil7YVE9KGFSW2FKXSYyNTUpO2lmKGFRPT1cIlxcclwifHxhUT09XCJcXG5cIil7YnJlYWs7fWlmKGFRPT1cIj1cIil7YUs9YUo7YnJlYWs7fX12YXIgYU89ZmFsc2U7aWYoYUs+PTApe2lmKGFLPT1hVCs0JiZhUlthVCsxXT09XCJmXCImJmFSW2FUKzJdPT1cInBcIiYmYVJbYVQrM109PVwic1wiKXthTz10cnVlO31mb3IoYUo9YUsrMTthSjxhUDsrK2FKKXthUT0oYVJbYUpdJjI1NSk7aWYoYVE9PVwiXFxyXCJ8fGFRPT1cIlxcblwiKXticmVhazt9aWYoYVE9PVwiLFwifHxhUT09XCIgXCJ8fGFRPT1cIlxcdFwiKXtjb250aW51ZTt9dmFyIGFMPUcuXyRMUyhhUixhUCxhSixhSSk7aWYoYUlbMF0+MCl7aWYoYU8mJjU8YUwmJmFMPDEyMSl7YU0uXyREMD1hTDt9fWFKPWFJWzBdO319Zm9yKDthSjxhUDsrK2FKKXtpZihhUlthSl09PVwiXFxuXCJ8fGFSW2FKXT09XCJcXHJcIil7YnJlYWs7fX1jb250aW51ZTt9aWYoKFwiYVwiPD1hUSYmYVE8PVwielwiKXx8KFwiQVwiPD1hUSYmYVE8PVwiWlwiKXx8YVE9PVwiX1wiKXt2YXIgYVQ9YUo7dmFyIGFLPS0xO2Zvcig7YUo8YVA7KythSil7YVE9KGFSW2FKXSYyNTUpO2lmKGFRPT1cIlxcclwifHxhUT09XCJcXG5cIil7YnJlYWs7fWlmKGFRPT1cIj1cIil7YUs9YUo7YnJlYWs7fX1pZihhSz49MCl7dmFyIGFOPW5ldyB0KCk7aWYoRy5zdGFydHNXaXRoKGFSLGFULFkuXyRjcykpe2FOLl8kUlA9dC5fJGhzO2FOLl8kNFA9bmV3IFN0cmluZyhhUixhVCxhSy1hVCk7fWVsc2V7aWYoRy5zdGFydHNXaXRoKGFSLGFULFkuXyRhcikpe2FOLl8kNFA9bmV3IFN0cmluZyhhUixhVCs3LGFLLWFULTcpO2lmKEcuc3RhcnRzV2l0aChhUixhVCs3LFwiQU5DSE9SX1hcIikpe2FOLl8kUlA9dC5fJHhzO31lbHNle2lmKEcuc3RhcnRzV2l0aChhUixhVCs3LFwiQU5DSE9SX1lcIikpe2FOLl8kUlA9dC5fJHVzO31lbHNle2lmKEcuc3RhcnRzV2l0aChhUixhVCs3LFwiU0NBTEVfWFwiKSl7YU4uXyRSUD10Ll8kcXM7fWVsc2V7aWYoRy5zdGFydHNXaXRoKGFSLGFUKzcsXCJTQ0FMRV9ZXCIpKXthTi5fJFJQPXQuXyRZczt9ZWxzZXtpZihHLnN0YXJ0c1dpdGgoYVIsYVQrNyxcIlhcIikpe2FOLl8kUlA9dC5fJHdzO31lbHNle2lmKEcuc3RhcnRzV2l0aChhUixhVCs3LFwiWVwiKSl7YU4uXyRSUD10Ll8kTnM7fX19fX19fWVsc2V7YU4uXyRSUD10Ll8kRnI7YU4uXyQ0UD1uZXcgU3RyaW5nKGFSLGFULGFLLWFUKTt9fWFNLm1vdGlvbnMucHVzaChhTik7dmFyIGFTPTA7WS5fJEQyLmNsZWFyKCk7Zm9yKGFKPWFLKzE7YUo8YVA7KythSil7YVE9KGFSW2FKXSYyNTUpO2lmKGFRPT1cIlxcclwifHxhUT09XCJcXG5cIil7YnJlYWs7fWlmKGFRPT1cIixcInx8YVE9PVwiIFwifHxhUT09XCJcXHRcIil7Y29udGludWU7fXZhciBhTD1HLl8kTFMoYVIsYVAsYUosYUkpO2lmKGFJWzBdPjApe1kuXyREMi5wdXNoKGFMKTthUysrO3ZhciBhSD1hSVswXTtpZihhSDxhSil7Y29uc29sZS5sb2coXCJfJG4wIF8kaGkgLiBATGl2ZTJETW90aW9uIGxvYWRNb3Rpb24oKVxcblwiKTticmVhazt9YUo9YUg7fX1hTi5fJEkwPVkuXyREMi5fJEJMKCk7aWYoYVM+YU0uXyR5VCl7YU0uXyR5VD1hUzt9fX19YU0uXyRBUz0oKDEwMDAqYU0uXyR5VCkvYU0uXyREMCl8MDtyZXR1cm4gYU07fTtZLnByb3RvdHlwZS5nZXREdXJhdGlvbk1TZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJEFTO307WS5wcm90b3R5cGUuZHVtcD1mdW5jdGlvbigpe2Zvcih2YXIgYUo9MDthSjx0aGlzLm1vdGlvbnMubGVuZ3RoO2FKKyspe3ZhciBhSD10aGlzLm1vdGlvbnNbYUpdO2NvbnNvbGUubG9nKFwiXyR3TFslc10gWyVkXS4gXCIsYUguXyQ0UCxhSC5fJEkwLmxlbmd0aCk7Zm9yKHZhciBhST0wO2FJPGFILl8kSTAubGVuZ3RoJiZhSTwxMDthSSsrKXtjb25zb2xlLmxvZyhcIiU1LjJmICxcIixhSC5fJEkwW2FJXSk7fWNvbnNvbGUubG9nKFwiXFxuXCIpO319O1kucHJvdG90eXBlLnVwZGF0ZVBhcmFtRXhlPWZ1bmN0aW9uKGFILGFMLGFPLGFYKXt2YXIgYU09YUwtYVguXyR6Mjt2YXIgYVY9YU0qdGhpcy5fJEQwLzEwMDA7dmFyIGFKPWFWfDA7dmFyIGFQPWFWLWFKO2Zvcih2YXIgYVU9MDthVTx0aGlzLm1vdGlvbnMubGVuZ3RoO2FVKyspe3ZhciBhUz10aGlzLm1vdGlvbnNbYVVdO3ZhciBhSz1hUy5fJEkwLmxlbmd0aDt2YXIgYVE9YVMuXyQ0UDtpZihhUy5fJFJQPT10Ll8kaHMpe3ZhciBhVD1hUy5fJEkwWyhhSj49YUs/YUstMTphSildO2FILnNldFBhcmFtRmxvYXQoYVEsYVQpO31lbHNle2lmKHQuXyR3czw9YVMuXyRSUCYmYVMuXyRSUDw9dC5fJFlzKXt9ZWxzZXt2YXIgYVI9YUguZ2V0UGFyYW1GbG9hdChhUSk7dmFyIGFZPWFTLl8kSTBbKGFKPj1hSz9hSy0xOmFKKV07dmFyIGFXPWFTLl8kSTBbKGFKKzE+PWFLP2FLLTE6YUorMSldO3ZhciBhST1hWSsoYVctYVkpKmFQO3ZhciBhTj1hUisoYUktYVIpKmFPO2FILnNldFBhcmFtRmxvYXQoYVEsYU4pO319fWlmKGFKPj10aGlzLl8keVQpe2lmKHRoaXMuXyRFKXthWC5fJHoyPWFMO2lmKHRoaXMubG9vcEZhZGVJbil7YVguXyRicz1hTDt9fWVsc2V7YVguXyQ5TD10cnVlO319fTtZLnByb3RvdHlwZS5fJHIwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRFO307WS5wcm90b3R5cGUuXyRhTD1mdW5jdGlvbihhSCl7dGhpcy5fJEU9YUg7fTtZLnByb3RvdHlwZS5pc0xvb3BGYWRlSW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wRmFkZUluO307WS5wcm90b3R5cGUuc2V0TG9vcEZhZGVJbj1mdW5jdGlvbihhSCl7dGhpcy5sb29wRmFkZUluPWFIO307ZnVuY3Rpb24gYUUoKXt0aGlzLl8kUD1uZXcgRmxvYXQzMkFycmF5KDEwMCk7dGhpcy5zaXplPTA7fWFFLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wO307YUUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhSSl7aWYodGhpcy5fJFAubGVuZ3RoPD10aGlzLnNpemUpe3ZhciBhSD1uZXcgRmxvYXQzMkFycmF5KHRoaXMuc2l6ZSoyKTtQLl8kalQodGhpcy5fJFAsMCxhSCwwLHRoaXMuc2l6ZSk7dGhpcy5fJFA9YUg7fXRoaXMuXyRQW3RoaXMuc2l6ZSsrXT1hSTt9O2FFLnByb3RvdHlwZS5fJEJMPWZ1bmN0aW9uKCl7dmFyIGFIPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5zaXplKTtQLl8kalQodGhpcy5fJFAsMCxhSCwwLHRoaXMuc2l6ZSk7cmV0dXJuIGFIO307ZnVuY3Rpb24gdCgpe3RoaXMuXyQ0UD1udWxsO3RoaXMuXyRJMD1udWxsO3RoaXMuXyRSUD1udWxsO310Ll8kRnI9MDt0Ll8kaHM9MTt0Ll8kd3M9MTAwO3QuXyROcz0xMDE7dC5fJHhzPTEwMjt0Ll8kdXM9MTAzO3QuXyRxcz0xMDQ7dC5fJFlzPTEwNTtmdW5jdGlvbiBhdygpe31hdy5fJE1zPTE7YXcuXyRRcz0yO2F3Ll8kaTI9MDthdy5fJE5vPTI7YXcuXyRkbz1hdy5fJE1zO2F3Ll8kTHM9dHJ1ZTthdy5fJDFyPTU7YXcuXyRRYj02NTthdy5fJEo9MC4wMDAxO2F3Ll8kRlQ9MC4wMDE7YXcuXyRTcz0zO2Z1bmN0aW9uIGF5KCl7fWF5Ll8kbzc9NjtheS5fJFM3PTc7YXkuXyRzNz04O2F5Ll8kNzc9OTtheS5MSVZFMkRfRk9STUFUX1ZFUlNJT05fVjJfMTBfU0RLMj0xMDtheS5MSVZFMkRfRk9STUFUX1ZFUlNJT05fVjJfMTFfU0RLMl8xPTExO2F5Ll8kVDc9YXkuTElWRTJEX0ZPUk1BVF9WRVJTSU9OX1YyXzExX1NESzJfMTtheS5fJElzPS0yMDA0MzE4MDcyO2F5Ll8kaDA9MDtheS5fJDRMPTIzO2F5Ll8kN1A9MzM7YXkuXyR1VD1mdW5jdGlvbihhSCl7Y29uc29sZS5sb2coXCJfJGJvIDo6IF8kNiBfJG1vIF8kRTAgOiAlZFxcblwiLGFIKTt9O2F5Ll8kOW89ZnVuY3Rpb24oYUgpe2lmKGFIPDQwKXtheS5fJHVUKGFIKTtyZXR1cm4gbnVsbDt9ZWxzZXtpZihhSDw1MCl7YXkuXyR1VChhSCk7cmV0dXJuIG51bGw7fWVsc2V7aWYoYUg8NjApe2F5Ll8kdVQoYUgpO3JldHVybiBudWxsO31lbHNle2lmKGFIPDEwMCl7c3dpdGNoKGFIKXtjYXNlIDY1OnJldHVybiBuZXcgRSgpO2Nhc2UgNjY6cmV0dXJuIG5ldyBnKCk7Y2FzZSA2NzpyZXR1cm4gbmV3IGFBKCk7Y2FzZSA2ODpyZXR1cm4gbmV3IGFiKCk7Y2FzZSA2OTpyZXR1cm4gbmV3IFgoKTtjYXNlIDcwOnJldHVybiBuZXcgYigpO2RlZmF1bHQ6YXkuXyR1VChhSCk7cmV0dXJuIG51bGw7fX1lbHNle2lmKGFIPDE1MCl7c3dpdGNoKGFIKXtjYXNlIDEzMTpyZXR1cm4gbmV3IGYoKTtjYXNlIDEzMzpyZXR1cm4gbmV3IHMoKTtjYXNlIDEzNjpyZXR1cm4gbmV3IHcoKTtjYXNlIDEzNzpyZXR1cm4gbmV3IGFuKCk7Y2FzZSAxNDI6cmV0dXJuIG5ldyBhcSgpO319fX19fWF5Ll8kdVQoYUgpO3JldHVybiBudWxsO307ZnVuY3Rpb24geShhSCl7aWYoail7cmV0dXJuO310aGlzLl8kUVQ9dHJ1ZTt0aGlzLl8kY289LTE7dGhpcy5fJHFvPTA7dGhpcy5fJHBiPW5ldyBBcnJheSh5Ll8kaXMpO3RoaXMuXyRfMj1uZXcgRmxvYXQzMkFycmF5KHkuXyRpcyk7dGhpcy5fJHZyPW5ldyBGbG9hdDMyQXJyYXkoeS5fJGlzKTt0aGlzLl8kUnI9bmV3IEZsb2F0MzJBcnJheSh5Ll8kaXMpO3RoaXMuXyRPcj1uZXcgRmxvYXQzMkFycmF5KHkuXyRpcyk7dGhpcy5fJGZzPW5ldyBGbG9hdDMyQXJyYXkoeS5fJGlzKTt0aGlzLl8kSnM9bmV3IEFycmF5KHkuXyRpcyk7dGhpcy5fJDNTPW5ldyBBcnJheSgpO3RoaXMuXyRhUz1uZXcgQXJyYXkoKTt0aGlzLl8kQm89bnVsbDt0aGlzLl8kRjI9bmV3IEFycmF5KCk7dGhpcy5fJGRiPW5ldyBBcnJheSgpO3RoaXMuXyQ4Yj1uZXcgQXJyYXkoKTt0aGlzLl8kSHI9bmV3IEFycmF5KCk7dGhpcy5fJFdzPW51bGw7dGhpcy5fJFZzPW51bGw7dGhpcy5fJEVyPW51bGw7dGhpcy5fJEVzPW5ldyBJbnQxNkFycmF5KGF3Ll8kUWIpO3RoaXMuXyRaUD1uZXcgRmxvYXQzMkFycmF5KGF3Ll8kMXIqMik7dGhpcy5fJFJpPWFIO3RoaXMuXyRiMD15Ll8kSFArKzt0aGlzLmNsaXBNYW5hZ2VyPW51bGw7dGhpcy5kcF93ZWJnbD1udWxsO315Ll8kSFA9MDt5Ll8kXzA9dHJ1ZTt5Ll8kVjI9LTE7eS5fJFcwPS0xO3kuXyRqcj1mYWxzZTt5Ll8kWlM9dHJ1ZTt5Ll8kdHI9KC0xMDAwMDAwKTt5Ll8kbHI9KDEwMDAwMDApO3kuXyRpcz0zMjt5Ll8kZT1mYWxzZTt5LnByb3RvdHlwZS5nZXREcmF3RGF0YUluZGV4PWZ1bmN0aW9uKGFJKXtmb3IodmFyIGFIPXRoaXMuXyRhUy5sZW5ndGgtMTthSD49MDstLWFIKXtpZih0aGlzLl8kYVNbYUhdIT1udWxsJiZ0aGlzLl8kYVNbYUhdLmdldERyYXdEYXRhSUQoKT09YUkpe3JldHVybiBhSDt9fXJldHVybiAtMTt9O3kucHJvdG90eXBlLmdldERyYXdEYXRhPWZ1bmN0aW9uKGFIKXtpZihhSCBpbnN0YW5jZW9mIFope2lmKHRoaXMuXyRCbz09bnVsbCl7dGhpcy5fJEJvPW5ldyBPYmplY3QoKTt2YXIgYUo9dGhpcy5fJGFTLmxlbmd0aDtmb3IodmFyIGFJPTA7YUk8YUo7YUkrKyl7dmFyIGFMPXRoaXMuXyRhU1thSV07dmFyIGFLPWFMLmdldERyYXdEYXRhSUQoKTtpZihhSz09bnVsbCl7Y29udGludWU7fXRoaXMuXyRCb1thS109YUw7fX1yZXR1cm4gdGhpcy5fJEJvW2lkXTt9ZWxzZXtpZihhSDx0aGlzLl8kYVMubGVuZ3RoKXtyZXR1cm4gdGhpcy5fJGFTW2FIXTt9ZWxzZXtyZXR1cm4gbnVsbDt9fX07eS5wcm90b3R5cGUucmVsZWFzZT1mdW5jdGlvbigpe3RoaXMuXyQzUy5jbGVhcigpO3RoaXMuXyRhUy5jbGVhcigpO3RoaXMuXyRGMi5jbGVhcigpO2lmKHRoaXMuXyRCbyE9bnVsbCl7dGhpcy5fJEJvLmNsZWFyKCk7fXRoaXMuXyRkYi5jbGVhcigpO3RoaXMuXyQ4Yi5jbGVhcigpO3RoaXMuXyRIci5jbGVhcigpO307eS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuXyRjbysrO2lmKHRoaXMuXyRGMi5sZW5ndGg+MCl7dGhpcy5yZWxlYXNlKCk7fXZhciBhTz10aGlzLl8kUmkuZ2V0TW9kZWxJbXBsKCk7dmFyIGFUPWFPLl8kWHIoKTt2YXIgYVM9YVQubGVuZ3RoO3ZhciBhSD1uZXcgQXJyYXkoKTt2YXIgYTM9bmV3IEFycmF5KCk7Zm9yKHZhciBhVj0wO2FWPGFTOysrYVYpe3ZhciBhND1hVFthVl07dGhpcy5fJEYyLnB1c2goYTQpO3RoaXMuXyRIci5wdXNoKGE0LmluaXQodGhpcykpO3ZhciBhSz1hNC5nZXRCYXNlRGF0YSgpO3ZhciBhUj1hSy5sZW5ndGg7Zm9yKHZhciBhVT0wO2FVPGFSOysrYVUpe2FILnB1c2goYUtbYVVdKTt9Zm9yKHZhciBhVT0wO2FVPGFSOysrYVUpe3ZhciBhTT1hS1thVV0uaW5pdCh0aGlzKTthTS5fJGwyKGFWKTthMy5wdXNoKGFNKTt9dmFyIGExPWE0LmdldERyYXdEYXRhKCk7dmFyIGFQPWExLmxlbmd0aDtmb3IodmFyIGFVPTA7YVU8YVA7KythVSl7dmFyIGFaPWExW2FVXTt2YXIgYTA9YVouaW5pdCh0aGlzKTthMC5fJElQPWFWO3RoaXMuXyRhUy5wdXNoKGFaKTt0aGlzLl8kOGIucHVzaChhMCk7fX12YXIgYVk9YUgubGVuZ3RoO3ZhciBhTj1uLl8kMm8oKTt3aGlsZSh0cnVlKXt2YXIgYVg9ZmFsc2U7Zm9yKHZhciBhVj0wO2FWPGFZOysrYVYpe3ZhciBhTD1hSFthVl07aWYoYUw9PW51bGwpe2NvbnRpbnVlO312YXIgYTI9YUwuZ2V0VGFyZ2V0QmFzZURhdGFJRCgpO2lmKGEyPT1udWxsfHxhMj09YU58fHRoaXMuZ2V0QmFzZURhdGFJbmRleChhMik+PTApe3RoaXMuXyQzUy5wdXNoKGFMKTt0aGlzLl8kZGIucHVzaChhM1thVl0pO2FIW2FWXT1udWxsO2FYPXRydWU7fX1pZighYVgpe2JyZWFrO319dmFyIGFJPWFPLl8kRTIoKTtpZihhSSE9bnVsbCl7dmFyIGFKPWFJLl8kMXMoKTtpZihhSiE9bnVsbCl7dmFyIGFXPWFKLmxlbmd0aDtmb3IodmFyIGFWPTA7YVY8YVc7KythVil7dmFyIGFRPWFKW2FWXTtpZihhUT09bnVsbCl7Y29udGludWU7fXRoaXMuXyQwMihhUS5nZXRQYXJhbUlEKCksYVEuZ2V0RGVmYXVsdFZhbHVlKCksYVEuZ2V0TWluVmFsdWUoKSxhUS5nZXRNYXhWYWx1ZSgpKTt9fX10aGlzLmNsaXBNYW5hZ2VyPW5ldyBXKHRoaXMuZHBfd2ViZ2wpO3RoaXMuY2xpcE1hbmFnZXIuaW5pdCh0aGlzLHRoaXMuXyRhUyx0aGlzLl8kOGIpO3RoaXMuXyRRVD10cnVlO307eS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7aWYoeS5fJGUpe3Euc3RhcnQoXCJfJHpMXCIpO312YXIgYUs9dGhpcy5fJF8yLmxlbmd0aDtmb3IodmFyIGFXPTA7YVc8YUs7YVcrKyl7aWYodGhpcy5fJF8yW2FXXSE9dGhpcy5fJHZyW2FXXSl7dGhpcy5fJEpzW2FXXT15Ll8kWlM7dGhpcy5fJHZyW2FXXT10aGlzLl8kXzJbYVddO319dmFyIGFYPWZhbHNlO3ZhciBhUT10aGlzLl8kM1MubGVuZ3RoO3ZhciBhTj10aGlzLl8kYVMubGVuZ3RoO3ZhciBhUz1hLl8kb3IoKTt2YXIgYVo9YS5fJFByKCk7dmFyIGFVPWFaLWFTKzE7aWYodGhpcy5fJFdzPT1udWxsfHx0aGlzLl8kV3MubGVuZ3RoPGFVKXt0aGlzLl8kV3M9bmV3IEludDE2QXJyYXkoYVUpO3RoaXMuXyRWcz1uZXcgSW50MTZBcnJheShhVSk7fWZvcih2YXIgYVc9MDthVzxhVTthVysrKXt0aGlzLl8kV3NbYVddPXkuXyRWMjt0aGlzLl8kVnNbYVddPXkuXyRWMjt9aWYodGhpcy5fJEVyPT1udWxsfHx0aGlzLl8kRXIubGVuZ3RoPGFOKXt0aGlzLl8kRXI9bmV3IEludDE2QXJyYXkoYU4pO31mb3IodmFyIGFXPTA7YVc8YU47YVcrKyl7dGhpcy5fJEVyW2FXXT15Ll8kVzA7fWlmKHkuXyRlKXtxLmR1bXAoXCJfJHpMXCIpO31pZih5Ll8kZSl7cS5zdGFydChcIl8kVUxcIik7fXZhciBhTD1udWxsO2Zvcih2YXIgYVY9MDthVjxhUTsrK2FWKXt2YXIgYUo9dGhpcy5fJDNTW2FWXTt2YXIgYUg9dGhpcy5fJGRiW2FWXTt0cnl7YUouXyROcih0aGlzLGFIKTthSi5fJDJiKHRoaXMsYUgpO31jYXRjaChhWSl7aWYoYUw9PW51bGwpe2FMPWFZO319fWlmKGFMIT1udWxsKXtpZih5Ll8kXzApe3EuXyRSYihhTCk7fX1pZih5Ll8kZSl7cS5kdW1wKFwiXyRVTFwiKTt9aWYoeS5fJGUpe3Euc3RhcnQoXCJfJERMXCIpO312YXIgYVI9bnVsbDtmb3IodmFyIGFPPTA7YU88YU47KythTyl7dmFyIGFNPXRoaXMuXyRhU1thT107dmFyIGFJPXRoaXMuXyQ4YlthT107dHJ5e2FNLl8kTnIodGhpcyxhSSk7aWYoYUkuXyR1MigpKXtjb250aW51ZTt9YU0uXyQyYih0aGlzLGFJKTt2YXIgYVQ9TWF0aC5mbG9vcihhTS5fJHpTKHRoaXMsYUkpLWFTKTt2YXIgYVA7dHJ5e2FQPXRoaXMuXyRWc1thVF07fWNhdGNoKGFZKXtjb25zb2xlLmxvZyhcIl8kbGkgOjogJXMgLyAlcyBcdFx0XHRcdEBAXyRmU1xcblwiLGFZLnRvU3RyaW5nKCksYU0uZ2V0RHJhd0RhdGFJRCgpLnRvU3RyaW5nKCkpO2FUPU1hdGguZmxvb3IoYU0uXyR6Uyh0aGlzLGFJKS1hUyk7Y29udGludWU7fWlmKGFQPT15Ll8kVjIpe3RoaXMuXyRXc1thVF09YU87fWVsc2V7dGhpcy5fJEVyW2FQXT1hTzt9dGhpcy5fJFZzW2FUXT1hTzt9Y2F0Y2goYVkpe2lmKGFSPT1udWxsKXthUj1hWTtRLl8kc1QoUS5fJEg3KTt9fX1pZihhUiE9bnVsbCl7aWYoeS5fJF8wKXtxLl8kUmIoYVIpO319aWYoeS5fJGUpe3EuZHVtcChcIl8kRExcIik7fWlmKHkuXyRlKXtxLnN0YXJ0KFwiXyRlTFwiKTt9Zm9yKHZhciBhVz10aGlzLl8kSnMubGVuZ3RoLTE7YVc+PTA7YVctLSl7dGhpcy5fJEpzW2FXXT15Ll8kanI7fXRoaXMuXyRRVD1mYWxzZTtpZih5Ll8kZSl7cS5kdW1wKFwiXyRlTFwiKTt9cmV0dXJuIGFYO307eS5wcm90b3R5cGUucHJlRHJhdz1mdW5jdGlvbihhSCl7aWYodGhpcy5jbGlwTWFuYWdlciE9bnVsbCl7YUguXyRaVCgpO3RoaXMuY2xpcE1hbmFnZXIuc2V0dXBDbGlwKHRoaXMsYUgpO319O3kucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYU0pe2lmKHRoaXMuXyRXcz09bnVsbCl7cS5fJGxpKFwiY2FsbCBfJFJpLnVwZGF0ZSgpIGJlZm9yZSBfJFJpLmRyYXcoKSBcIik7cmV0dXJuO312YXIgYVA9dGhpcy5fJFdzLmxlbmd0aDthTS5fJFpUKCk7Zm9yKHZhciBhSz0wO2FLPGFQOysrYUspe3ZhciBhTj10aGlzLl8kV3NbYUtdO2lmKGFOPT15Ll8kVjIpe2NvbnRpbnVlO31kb3t2YXIgYUg9dGhpcy5fJGFTW2FOXTt2YXIgYUk9dGhpcy5fJDhiW2FOXTtpZihhSS5fJHlvKCkpe3ZhciBhSj1hSS5fJElQO3ZhciBhTD10aGlzLl8kSHJbYUpdO2FJLl8kVlM9YUwuZ2V0UGFydHNPcGFjaXR5KCk7YUguZHJhdyhhTSx0aGlzLGFJKTt9dmFyIGFPPXRoaXMuXyRFclthTl07aWYoYU88PWFOfHxhTz09eS5fJFcwKXticmVhazt9YU49YU87fXdoaWxlKHRydWUpO319O3kucHJvdG90eXBlLmdldFBhcmFtSW5kZXg9ZnVuY3Rpb24oYUgpe2Zvcih2YXIgYUk9dGhpcy5fJHBiLmxlbmd0aC0xO2FJPj0wOy0tYUkpe2lmKHRoaXMuXyRwYlthSV09PWFIKXtyZXR1cm4gYUk7fX1yZXR1cm4gdGhpcy5fJDAyKGFILDAseS5fJHRyLHkuXyRscik7fTt5LnByb3RvdHlwZS5fJEJTPWZ1bmN0aW9uKGFIKXtyZXR1cm4gdGhpcy5nZXRCYXNlRGF0YUluZGV4KGFIKTt9O3kucHJvdG90eXBlLmdldEJhc2VEYXRhSW5kZXg9ZnVuY3Rpb24oYUgpe2Zvcih2YXIgYUk9dGhpcy5fJDNTLmxlbmd0aC0xO2FJPj0wOy0tYUkpe2lmKHRoaXMuXyQzU1thSV0hPW51bGwmJnRoaXMuXyQzU1thSV0uZ2V0QmFzZURhdGFJRCgpPT1hSCl7cmV0dXJuIGFJO319cmV0dXJuIC0xO307eS5wcm90b3R5cGUuXyRVVD1mdW5jdGlvbihhSixhSCl7dmFyIGFJPW5ldyBGbG9hdDMyQXJyYXkoYUgpO1AuXyRqVChhSiwwLGFJLDAsYUoubGVuZ3RoKTtyZXR1cm4gYUk7fTt5LnByb3RvdHlwZS5fJDAyPWZ1bmN0aW9uKGFOLGFNLGFMLGFIKXtpZih0aGlzLl8kcW8+PXRoaXMuXyRwYi5sZW5ndGgpe3ZhciBhSz10aGlzLl8kcGIubGVuZ3RoO3ZhciBhSj1uZXcgQXJyYXkoYUsqMik7UC5fJGpUKHRoaXMuXyRwYiwwLGFKLDAsYUspO3RoaXMuXyRwYj1hSjt0aGlzLl8kXzI9dGhpcy5fJFVUKHRoaXMuXyRfMixhSyoyKTt0aGlzLl8kdnI9dGhpcy5fJFVUKHRoaXMuXyR2cixhSyoyKTt0aGlzLl8kUnI9dGhpcy5fJFVUKHRoaXMuXyRScixhSyoyKTt0aGlzLl8kT3I9dGhpcy5fJFVUKHRoaXMuXyRPcixhSyoyKTt2YXIgYUk9bmV3IEFycmF5KCk7UC5fJGpUKHRoaXMuXyRKcywwLGFJLDAsYUspO3RoaXMuXyRKcz1hSTt9dGhpcy5fJHBiW3RoaXMuXyRxb109YU47dGhpcy5fJF8yW3RoaXMuXyRxb109YU07dGhpcy5fJHZyW3RoaXMuXyRxb109YU07dGhpcy5fJFJyW3RoaXMuXyRxb109YUw7dGhpcy5fJE9yW3RoaXMuXyRxb109YUg7dGhpcy5fJEpzW3RoaXMuXyRxb109eS5fJFpTO3JldHVybiB0aGlzLl8kcW8rKzt9O3kucHJvdG90eXBlLl8kWm89ZnVuY3Rpb24oYUksYUgpe3RoaXMuXyQzU1thSV09YUg7fTt5LnByb3RvdHlwZS5zZXRQYXJhbUZsb2F0PWZ1bmN0aW9uKGFILGFJKXtpZihhSTx0aGlzLl8kUnJbYUhdKXthST10aGlzLl8kUnJbYUhdO31pZihhST50aGlzLl8kT3JbYUhdKXthST10aGlzLl8kT3JbYUhdO310aGlzLl8kXzJbYUhdPWFJO307eS5wcm90b3R5cGUubG9hZFBhcmFtPWZ1bmN0aW9uKCl7dmFyIGFIPXRoaXMuXyRfMi5sZW5ndGg7aWYoYUg+dGhpcy5fJGZzLmxlbmd0aCl7YUg9dGhpcy5fJGZzLmxlbmd0aDt9UC5fJGpUKHRoaXMuXyRmcywwLHRoaXMuXyRfMiwwLGFIKTt9O3kucHJvdG90eXBlLnNhdmVQYXJhbT1mdW5jdGlvbigpe3ZhciBhSD10aGlzLl8kXzIubGVuZ3RoO2lmKGFIPnRoaXMuXyRmcy5sZW5ndGgpe3RoaXMuXyRmcz1uZXcgRmxvYXQzMkFycmF5KGFIKTt9UC5fJGpUKHRoaXMuXyRfMiwwLHRoaXMuXyRmcywwLGFIKTt9O3kucHJvdG90eXBlLl8kdjI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJGNvO307eS5wcm90b3R5cGUuXyRXUz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kUVQ7fTt5LnByb3RvdHlwZS5fJFhiPWZ1bmN0aW9uKGFIKXtyZXR1cm4gdGhpcy5fJEpzW2FIXT09eS5fJFpTO307eS5wcm90b3R5cGUuXyR2cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kRXM7fTt5LnByb3RvdHlwZS5fJFRyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRaUDt9O3kucHJvdG90eXBlLmdldEJhc2VEYXRhPWZ1bmN0aW9uKGFIKXtyZXR1cm4gdGhpcy5fJDNTW2FIXTt9O3kucHJvdG90eXBlLmdldFBhcmFtRmxvYXQ9ZnVuY3Rpb24oYUgpe3JldHVybiB0aGlzLl8kXzJbYUhdO307eS5wcm90b3R5cGUuZ2V0UGFyYW1NYXg9ZnVuY3Rpb24oYUgpe3JldHVybiB0aGlzLl8kT3JbYUhdO307eS5wcm90b3R5cGUuZ2V0UGFyYW1NaW49ZnVuY3Rpb24oYUgpe3JldHVybiB0aGlzLl8kUnJbYUhdO307eS5wcm90b3R5cGUuc2V0UGFydHNPcGFjaXR5PWZ1bmN0aW9uKGFKLGFIKXt2YXIgYUk9dGhpcy5fJEhyW2FKXTthSS5zZXRQYXJ0c09wYWNpdHkoYUgpO307eS5wcm90b3R5cGUuZ2V0UGFydHNPcGFjaXR5PWZ1bmN0aW9uKGFJKXt2YXIgYUg9dGhpcy5fJEhyW2FJXTtyZXR1cm4gYUguZ2V0UGFydHNPcGFjaXR5KCk7fTt5LnByb3RvdHlwZS5nZXRQYXJ0c0RhdGFJbmRleD1mdW5jdGlvbihhSSl7Zm9yKHZhciBhSD10aGlzLl8kRjIubGVuZ3RoLTE7YUg+PTA7LS1hSCl7aWYodGhpcy5fJEYyW2FIXSE9bnVsbCYmdGhpcy5fJEYyW2FIXS5fJHAyKCk9PWFJKXtyZXR1cm4gYUg7fX1yZXR1cm4gLTE7fTt5LnByb3RvdHlwZS5fJHEyPWZ1bmN0aW9uKGFIKXtyZXR1cm4gdGhpcy5fJGRiW2FIXTt9O3kucHJvdG90eXBlLl8kQzI9ZnVuY3Rpb24oYUgpe3JldHVybiB0aGlzLl8kOGJbYUhdO307eS5wcm90b3R5cGUuXyRCYj1mdW5jdGlvbihhSCl7cmV0dXJuIHRoaXMuXyRIclthSF07fTt5LnByb3RvdHlwZS5fJDVzPWZ1bmN0aW9uKGFPLGFLKXt2YXIgYUo9dGhpcy5fJFdzLmxlbmd0aDt2YXIgYU49YU87Zm9yKHZhciBhTD0wO2FMPGFKOysrYUwpe3ZhciBhST10aGlzLl8kV3NbYUxdO2lmKGFJPT15Ll8kVjIpe2NvbnRpbnVlO31kb3t2YXIgYU09dGhpcy5fJDhiW2FJXTtpZihhTS5fJHlvKCkpe2FNLl8kR1QoKS5fJEIyKHRoaXMsYU0sYU4pO2FOKz1hSzt9dmFyIGFIPXRoaXMuXyRFclthSV07aWYoYUg8PWFJfHxhSD09eS5fJFcwKXticmVhazt9YUk9YUg7fXdoaWxlKHRydWUpO319O3kucHJvdG90eXBlLnNldERyYXdQYXJhbT1mdW5jdGlvbihhSCl7dGhpcy5kcF93ZWJnbD1hSDt9O3kucHJvdG90eXBlLmdldERyYXdQYXJhbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRwX3dlYmdsO307ZnVuY3Rpb24gYXAoKXt9YXAuXyQwVD1mdW5jdGlvbihhSCl7cmV0dXJuIGFwLl8kMFQobmV3IF8kNShhSCkpO307YXAuXyQwVD1mdW5jdGlvbihhSil7aWYoIWFKLmV4aXN0cygpKXt0aHJvdyBuZXcgXyRscyhhSi5fJDNiKCkpO312YXIgYUg9YUoubGVuZ3RoKCk7dmFyIGFJPW5ldyBJbnQ4QXJyYXkoYUgpO3ZhciBhTT1uZXcgXyRYcyhuZXcgXyRrYihhSiksODE5Mik7dmFyIGFLO3ZhciBhTD0wO3doaWxlKChhSz1hTS5yZWFkKGFJLGFMLGFILWFMKSk+MCl7YUwrPWFLO31yZXR1cm4gYUk7fTthcC5fJEM9ZnVuY3Rpb24oYUope3ZhciBhST1udWxsO3ZhciBhTD1udWxsO3RyeXthST0oYUogaW5zdGFuY2VvZiBBcnJheSk/YUo6bmV3IF8kWHMoYUosODE5Mik7YUw9bmV3IF8kanMoKTt2YXIgYU09MTAwMDt2YXIgYUs7dmFyIGFIPW5ldyBJbnQ4QXJyYXkoYU0pO3doaWxlKChhSz1hSS5yZWFkKGFIKSk+MCl7YUwud3JpdGUoYUgsMCxhSyk7fXJldHVybiBhTC5fJFRTKCk7fWZpbmFsbHl7aWYoYUohPW51bGwpe2FKLmNsb3NlKCk7fWlmKGFMIT1udWxsKXthTC5mbHVzaCgpO2FMLmNsb3NlKCk7fX19O2Z1bmN0aW9uIGFyKCl7aWYoail7cmV0dXJuO310aGlzLl8kMTI9bnVsbDt0aGlzLl8kYmI9bnVsbDt0aGlzLl8kX0w9bnVsbDt0aGlzLl8kam89bnVsbDt0aGlzLl8kaUw9bnVsbDt0aGlzLl8kMEw9bnVsbDt0aGlzLl8kQnI9bnVsbDt0aGlzLl8kRHI9bnVsbDt0aGlzLl8kQ2I9bnVsbDt0aGlzLl8kbXI9bnVsbDt0aGlzLl8kX0w9YXouU1RBVEVfRklSU1Q7dGhpcy5fJEJyPTQwMDA7dGhpcy5fJERyPTEwMDt0aGlzLl8kQ2I9NTA7dGhpcy5fJG1yPTE1MDt0aGlzLl8kam89dHJ1ZTt0aGlzLl8kaUw9XCJQQVJBTV9FWUVfTF9PUEVOXCI7dGhpcy5fJDBMPVwiUEFSQU1fRVlFX1JfT1BFTlwiO31hci5wcm90b3R5cGUuXyRUMj1mdW5jdGlvbigpe3ZhciBhST1QLmdldFVzZXJUaW1lTVNlYygpO3ZhciBhSD1NYXRoLl8kMTAoKTtyZXR1cm4oYUkrYUgqKDIqdGhpcy5fJEJyLTEpKTt9O2FyLnByb3RvdHlwZS5fJHVvPWZ1bmN0aW9uKGFIKXt0aGlzLl8kQnI9YUg7fTthci5wcm90b3R5cGUuXyRRUz1mdW5jdGlvbihhSSxhSCxhSil7dGhpcy5fJERyPWFJO3RoaXMuXyRDYj1hSDt0aGlzLl8kbXI9YUo7fTthci5wcm90b3R5cGUuXyQ3VD1mdW5jdGlvbihhSSl7dmFyIGFLPVAuZ2V0VXNlclRpbWVNU2VjKCk7dmFyIGFIO3ZhciBhSj0wO3N3aXRjaCh0aGlzLl8kX0wpe2Nhc2UgU1RBVEVfQ0xPU0lORzphSj0oYUstdGhpcy5fJGJiKS90aGlzLl8kRHI7aWYoYUo+PTEpe2FKPTE7dGhpcy5fJF9MPWF6LlNUQVRFX0NMT1NFRDt0aGlzLl8kYmI9YUs7fWFIPTEtYUo7YnJlYWs7Y2FzZSBTVEFURV9DTE9TRUQ6YUo9KGFLLXRoaXMuXyRiYikvdGhpcy5fJENiO2lmKGFKPj0xKXt0aGlzLl8kX0w9YXouU1RBVEVfT1BFTklORzt0aGlzLl8kYmI9YUs7fWFIPTA7YnJlYWs7Y2FzZSBTVEFURV9PUEVOSU5HOmFKPShhSy10aGlzLl8kYmIpL3RoaXMuXyRtcjtpZihhSj49MSl7YUo9MTt0aGlzLl8kX0w9YXouU1RBVEVfSU5URVJWQUw7dGhpcy5fJDEyPXRoaXMuXyRUMigpO31hSD1hSjticmVhaztjYXNlIFNUQVRFX0lOVEVSVkFMOmlmKHRoaXMuXyQxMjxhSyl7dGhpcy5fJF9MPWF6LlNUQVRFX0NMT1NJTkc7dGhpcy5fJGJiPWFLO31hSD0xO2JyZWFrO2Nhc2UgU1RBVEVfRklSU1Q6ZGVmYXVsdDp0aGlzLl8kX0w9YXouU1RBVEVfSU5URVJWQUw7dGhpcy5fJDEyPXRoaXMuXyRUMigpO2FIPTE7YnJlYWs7fWlmKCF0aGlzLl8kam8pe2FIPS1hSDt9YUkuc2V0UGFyYW1GbG9hdCh0aGlzLl8kaUwsYUgpO2FJLnNldFBhcmFtRmxvYXQodGhpcy5fJDBMLGFIKTt9O3ZhciBhej1mdW5jdGlvbigpe307YXouU1RBVEVfRklSU1Q9XCJTVEFURV9GSVJTVFwiO2F6LlNUQVRFX0lOVEVSVkFMPVwiU1RBVEVfSU5URVJWQUxcIjthei5TVEFURV9DTE9TSU5HPVwiU1RBVEVfQ0xPU0lOR1wiO2F6LlNUQVRFX0NMT1NFRD1cIlNUQVRFX0NMT1NFRFwiO2F6LlNUQVRFX09QRU5JTkc9XCJTVEFURV9PUEVOSU5HXCI7ZnVuY3Rpb24geCgpe2lmKGope3JldHVybjt9YXgucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5fJHNiPW5ldyBJbnQzMkFycmF5KHguXyRBcyk7dGhpcy5fJFUyPW5ldyBBcnJheSgpO3RoaXMudHJhbnNmb3JtPW51bGw7dGhpcy5nbD1udWxsO2lmKHguXyROVD09bnVsbCl7eC5fJE5UPXguXyQ5cigyNTYpO3guXyR2Uz14Ll8kOXIoMjU2KTt4Ll8kbm89eC5fJHZiKDI1Nik7fX14LnByb3RvdHlwZT1uZXcgYXgoKTt4Ll8kQXM9MzI7eC5fJEdyPWZhbHNlO3guXyROVD1udWxsO3guXyR2Uz1udWxsO3guXyRubz1udWxsO3guXyQ5cj1mdW5jdGlvbihhSCl7dmFyIGFJPW5ldyBGbG9hdDMyQXJyYXkoYUgpO3JldHVybiBhSTt9O3guXyR2Yj1mdW5jdGlvbihhSCl7dmFyIGFJPW5ldyBJbnQxNkFycmF5KGFIKTtyZXR1cm4gYUk7fTt4Ll8kY3I9ZnVuY3Rpb24oYUksYUgpe2lmKGFJPT1udWxsfHxhSS5fJHlMKCk8YUgubGVuZ3RoKXthST14Ll8kOXIoYUgubGVuZ3RoKjIpO2FJLnB1dChhSCk7YUkuXyRvVCgwKTt9ZWxzZXthSS5jbGVhcigpO2FJLnB1dChhSCk7YUkuXyRvVCgwKTt9cmV0dXJuIGFJO307eC5fJG1iPWZ1bmN0aW9uKGFJLGFIKXtpZihhST09bnVsbHx8YUkuXyR5TCgpPGFILmxlbmd0aCl7YUk9eC5fJHZiKGFILmxlbmd0aCoyKTthSS5wdXQoYUgpO2FJLl8kb1QoMCk7fWVsc2V7YUkuY2xlYXIoKTthSS5wdXQoYUgpO2FJLl8kb1QoMCk7fXJldHVybiBhSTt9O3guXyRIcz1mdW5jdGlvbigpe3JldHVybiB4Ll8kR3I7fTt4Ll8kYXM9ZnVuY3Rpb24oYUgpe3guXyRHcj1hSDt9O3gucHJvdG90eXBlLnNldEdMPWZ1bmN0aW9uKGFIKXt0aGlzLmdsPWFIO307eC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtPWZ1bmN0aW9uKGFIKXt0aGlzLnRyYW5zZm9ybT1hSDt9O3gucHJvdG90eXBlLl8kWlQ9ZnVuY3Rpb24oKXt9O3gucHJvdG90eXBlLl8kVW89ZnVuY3Rpb24oYU8sYUgsYVAsYUksYVEsYU0sYUssYUope2lmKGFNPDAuMDEpe3JldHVybjt9dmFyIGFMPXRoaXMuXyRVMlthT107dmFyIGFOPWFNPjAuOT9RLkVYUEFORF9XOjA7dGhpcy5nbC5kcmF3RWxlbWVudHMoYUwsYVAsYUksYVEsYU0sYU4sdGhpcy50cmFuc2Zvcm0sYUopO307eC5wcm90b3R5cGUuXyRScz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIl8kUnNcIik7fTt4LnByb3RvdHlwZS5fJERzPWZ1bmN0aW9uKGFIKXt0aHJvdyBuZXcgRXJyb3IoXCJfJERzXCIpO307eC5wcm90b3R5cGUuXyRLMj1mdW5jdGlvbigpe2Zvcih2YXIgYUg9MDthSDx0aGlzLl8kc2IubGVuZ3RoO2FIKyspe3ZhciBhST10aGlzLl8kc2JbYUhdO2lmKGFJIT0wKXt0aGlzLmdsLl8kU3IoMSx0aGlzLl8kc2IsYUgpO3RoaXMuXyRzYlthSF09MDt9fX07eC5wcm90b3R5cGUuc2V0VGV4dHVyZT1mdW5jdGlvbihhSSxhSCl7aWYodGhpcy5fJHNiLmxlbmd0aDxhSSsxKXt0aGlzLl8kblMoYUkpO310aGlzLl8kc2JbYUldPWFIO307eC5wcm90b3R5cGUuc2V0VGV4dHVyZT1mdW5jdGlvbihhSCxhSSl7aWYodGhpcy5fJHNiLmxlbmd0aDxhSCsxKXt0aGlzLl8kblMoYUgpO310aGlzLl8kVTJbYUhdPWFJO307eC5wcm90b3R5cGUuXyRuUz1mdW5jdGlvbihhSCl7dmFyIGFLPU1hdGgubWF4KHRoaXMuXyRzYi5sZW5ndGgqMixhSCsxKzEwKTt2YXIgYUk9bmV3IEludDMyQXJyYXkoYUspO1AuXyRqVCh0aGlzLl8kc2IsMCxhSSwwLHRoaXMuXyRzYi5sZW5ndGgpO3RoaXMuXyRzYj1hSTt2YXIgYUo9bmV3IEFycmF5KCk7UC5fJGpUKHRoaXMuXyRVMiwwLGFKLDAsdGhpcy5fJFUyLmxlbmd0aCk7dGhpcy5fJFUyPWFKO307ZnVuY3Rpb24gYWIoKXtpZihqKXtyZXR1cm47fWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5fJEdTPW51bGw7dGhpcy5fJFkwPW51bGw7fWFiLnByb3RvdHlwZT1uZXcgYygpO2FiLl8kWG89bmV3IEZsb2F0MzJBcnJheSgyKTthYi5fJGlvPW5ldyBGbG9hdDMyQXJyYXkoMik7YWIuXyQwbz1uZXcgRmxvYXQzMkFycmF5KDIpO2FiLl8kTG89bmV3IEZsb2F0MzJBcnJheSgyKTthYi5fJFRvPW5ldyBGbG9hdDMyQXJyYXkoMik7YWIuXyRQbz1uZXcgRmxvYXQzMkFycmF5KDIpO2FiLl8kZ1Q9bmV3IEFycmF5KCk7YWIucHJvdG90eXBlLl8kelA9ZnVuY3Rpb24oKXt0aGlzLl8kR1M9bmV3IGcoKTt0aGlzLl8kR1MuXyR6UCgpO3RoaXMuXyRZMD1uZXcgQXJyYXkoKTt9O2FiLnByb3RvdHlwZS5nZXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGMuXyRjMjt9O2FiLnByb3RvdHlwZS5fJEYwPWZ1bmN0aW9uKGFIKXtjLnByb3RvdHlwZS5fJEYwLmNhbGwodGhpcyxhSCk7dGhpcy5fJEdTPWFILl8kblAoKTt0aGlzLl8kWTA9YUguXyRuUCgpO2MucHJvdG90eXBlLnJlYWRWMl9vcGFjaXR5LmNhbGwodGhpcyxhSCk7fTthYi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhSCl7dmFyIGFJPW5ldyBhbCh0aGlzKTthSS5fJFlyPW5ldyBYKCk7aWYodGhpcy5fJDMyKCkpe2FJLl8kV3I9bmV3IFgoKTt9cmV0dXJuIGFJO307YWIucHJvdG90eXBlLl8kTnI9ZnVuY3Rpb24oYmYsYngpe2lmKCEoKHRoaXM9PWJ4Ll8kR1QoKSkpKXtjb25zb2xlLmxvZyhcIiMjIyBhc3NlcnQhISAjIyMgXCIpO312YXIgYm09Yng7aWYoIXRoaXMuXyRHUy5fJFVyKGJmKSl7cmV0dXJuO312YXIgYnc9YWIuXyRnVDtid1swXT1mYWxzZTt2YXIgYTI9dGhpcy5fJEdTLl8kUTIoYmYsYncpO2J4Ll8kSWIoYndbMF0pO3RoaXMuaW50ZXJwb2xhdGVPcGFjaXR5KGJmLHRoaXMuXyRHUyxieCxidyk7dmFyIGEzPWJmLl8kdnMoKTt2YXIgYmE9YmYuXyRUcigpO3RoaXMuXyRHUy5fJHpyKGEzLGJhLGEyKTtpZihhMjw9MCl7dmFyIGJuPXRoaXMuXyRZMFthM1swXV07Ym0uXyRZci5pbml0KGJuKTt9ZWxzZXtpZihhMj09MSl7dmFyIGJuPXRoaXMuXyRZMFthM1swXV07dmFyIGJsPXRoaXMuXyRZMFthM1sxXV07dmFyIGE5PWJhWzBdO2JtLl8kWXIuXyRmTD1ibi5fJGZMKyhibC5fJGZMLWJuLl8kZkwpKmE5O2JtLl8kWXIuXyRnTD1ibi5fJGdMKyhibC5fJGdMLWJuLl8kZ0wpKmE5O2JtLl8kWXIuXyRCMD1ibi5fJEIwKyhibC5fJEIwLWJuLl8kQjApKmE5O2JtLl8kWXIuXyR6MD1ibi5fJHowKyhibC5fJHowLWJuLl8kejApKmE5O2JtLl8kWXIuXyRxVD1ibi5fJHFUKyhibC5fJHFULWJuLl8kcVQpKmE5O31lbHNle2lmKGEyPT0yKXt2YXIgYm49dGhpcy5fJFkwW2EzWzBdXTt2YXIgYmw9dGhpcy5fJFkwW2EzWzFdXTt2YXIgYTE9dGhpcy5fJFkwW2EzWzJdXTt2YXIgYTA9dGhpcy5fJFkwW2EzWzNdXTt2YXIgYTk9YmFbMF07dmFyIGE4PWJhWzFdO3ZhciBiQz1ibi5fJGZMKyhibC5fJGZMLWJuLl8kZkwpKmE5O3ZhciBiQj1hMS5fJGZMKyhhMC5fJGZMLWExLl8kZkwpKmE5O2JtLl8kWXIuXyRmTD1iQysoYkItYkMpKmE4O2JDPWJuLl8kZ0wrKGJsLl8kZ0wtYm4uXyRnTCkqYTk7YkI9YTEuXyRnTCsoYTAuXyRnTC1hMS5fJGdMKSphOTtibS5fJFlyLl8kZ0w9YkMrKGJCLWJDKSphODtiQz1ibi5fJEIwKyhibC5fJEIwLWJuLl8kQjApKmE5O2JCPWExLl8kQjArKGEwLl8kQjAtYTEuXyRCMCkqYTk7Ym0uXyRZci5fJEIwPWJDKyhiQi1iQykqYTg7YkM9Ym4uXyR6MCsoYmwuXyR6MC1ibi5fJHowKSphOTtiQj1hMS5fJHowKyhhMC5fJHowLWExLl8kejApKmE5O2JtLl8kWXIuXyR6MD1iQysoYkItYkMpKmE4O2JDPWJuLl8kcVQrKGJsLl8kcVQtYm4uXyRxVCkqYTk7YkI9YTEuXyRxVCsoYTAuXyRxVC1hMS5fJHFUKSphOTtibS5fJFlyLl8kcVQ9YkMrKGJCLWJDKSphODt9ZWxzZXtpZihhMj09Myl7dmFyIGFQPXRoaXMuXyRZMFthM1swXV07dmFyIGFPPXRoaXMuXyRZMFthM1sxXV07dmFyIGJ1PXRoaXMuXyRZMFthM1syXV07dmFyIGJzPXRoaXMuXyRZMFthM1szXV07dmFyIGFLPXRoaXMuXyRZMFthM1s0XV07dmFyIGFKPXRoaXMuXyRZMFthM1s1XV07dmFyIGJqPXRoaXMuXyRZMFthM1s2XV07dmFyIGJpPXRoaXMuXyRZMFthM1s3XV07dmFyIGE5PWJhWzBdO3ZhciBhOD1iYVsxXTt2YXIgYTY9YmFbMl07dmFyIGJDPWFQLl8kZkwrKGFPLl8kZkwtYVAuXyRmTCkqYTk7dmFyIGJCPWJ1Ll8kZkwrKGJzLl8kZkwtYnUuXyRmTCkqYTk7dmFyIGJ6PWFLLl8kZkwrKGFKLl8kZkwtYUsuXyRmTCkqYTk7dmFyIGJ5PWJqLl8kZkwrKGJpLl8kZkwtYmouXyRmTCkqYTk7Ym0uXyRZci5fJGZMPSgxLWE2KSooYkMrKGJCLWJDKSphOCkrYTYqKGJ6KyhieS1ieikqYTgpO2JDPWFQLl8kZ0wrKGFPLl8kZ0wtYVAuXyRnTCkqYTk7YkI9YnUuXyRnTCsoYnMuXyRnTC1idS5fJGdMKSphOTtiej1hSy5fJGdMKyhhSi5fJGdMLWFLLl8kZ0wpKmE5O2J5PWJqLl8kZ0wrKGJpLl8kZ0wtYmouXyRnTCkqYTk7Ym0uXyRZci5fJGdMPSgxLWE2KSooYkMrKGJCLWJDKSphOCkrYTYqKGJ6KyhieS1ieikqYTgpO2JDPWFQLl8kQjArKGFPLl8kQjAtYVAuXyRCMCkqYTk7YkI9YnUuXyRCMCsoYnMuXyRCMC1idS5fJEIwKSphOTtiej1hSy5fJEIwKyhhSi5fJEIwLWFLLl8kQjApKmE5O2J5PWJqLl8kQjArKGJpLl8kQjAtYmouXyRCMCkqYTk7Ym0uXyRZci5fJEIwPSgxLWE2KSooYkMrKGJCLWJDKSphOCkrYTYqKGJ6KyhieS1ieikqYTgpO2JDPWFQLl8kejArKGFPLl8kejAtYVAuXyR6MCkqYTk7YkI9YnUuXyR6MCsoYnMuXyR6MC1idS5fJHowKSphOTtiej1hSy5fJHowKyhhSi5fJHowLWFLLl8kejApKmE5O2J5PWJqLl8kejArKGJpLl8kejAtYmouXyR6MCkqYTk7Ym0uXyRZci5fJHowPSgxLWE2KSooYkMrKGJCLWJDKSphOCkrYTYqKGJ6KyhieS1ieikqYTgpO2JDPWFQLl8kcVQrKGFPLl8kcVQtYVAuXyRxVCkqYTk7YkI9YnUuXyRxVCsoYnMuXyRxVC1idS5fJHFUKSphOTtiej1hSy5fJHFUKyhhSi5fJHFULWFLLl8kcVQpKmE5O2J5PWJqLl8kcVQrKGJpLl8kcVQtYmouXyRxVCkqYTk7Ym0uXyRZci5fJHFUPSgxLWE2KSooYkMrKGJCLWJDKSphOCkrYTYqKGJ6KyhieS1ieikqYTgpO31lbHNle2lmKGEyPT00KXt2YXIgYVQ9dGhpcy5fJFkwW2EzWzBdXTt2YXIgYVM9dGhpcy5fJFkwW2EzWzFdXTt2YXIgYkU9dGhpcy5fJFkwW2EzWzJdXTt2YXIgYkQ9dGhpcy5fJFkwW2EzWzNdXTt2YXIgYU49dGhpcy5fJFkwW2EzWzRdXTt2YXIgYU09dGhpcy5fJFkwW2EzWzVdXTt2YXIgYnA9dGhpcy5fJFkwW2EzWzZdXTt2YXIgYm89dGhpcy5fJFkwW2EzWzddXTt2YXIgYmg9dGhpcy5fJFkwW2EzWzhdXTt2YXIgYmc9dGhpcy5fJFkwW2EzWzldXTt2YXIgYVk9dGhpcy5fJFkwW2EzWzEwXV07dmFyIGFXPXRoaXMuXyRZMFthM1sxMV1dO3ZhciBhNz10aGlzLl8kWTBbYTNbMTJdXTt2YXIgYTU9dGhpcy5fJFkwW2EzWzEzXV07dmFyIGFSPXRoaXMuXyRZMFthM1sxNF1dO3ZhciBhUT10aGlzLl8kWTBbYTNbMTVdXTt2YXIgYTk9YmFbMF07dmFyIGE4PWJhWzFdO3ZhciBhNj1iYVsyXTt2YXIgYTQ9YmFbM107dmFyIGJDPWFULl8kZkwrKGFTLl8kZkwtYVQuXyRmTCkqYTk7dmFyIGJCPWJFLl8kZkwrKGJELl8kZkwtYkUuXyRmTCkqYTk7dmFyIGJ6PWFOLl8kZkwrKGFNLl8kZkwtYU4uXyRmTCkqYTk7dmFyIGJ5PWJwLl8kZkwrKGJvLl8kZkwtYnAuXyRmTCkqYTk7dmFyIGJ2PWJoLl8kZkwrKGJnLl8kZkwtYmguXyRmTCkqYTk7dmFyIGJ0PWFZLl8kZkwrKGFXLl8kZkwtYVkuXyRmTCkqYTk7dmFyIGJyPWE3Ll8kZkwrKGE1Ll8kZkwtYTcuXyRmTCkqYTk7dmFyIGJxPWFSLl8kZkwrKGFRLl8kZkwtYVIuXyRmTCkqYTk7Ym0uXyRZci5fJGZMPSgxLWE0KSooKDEtYTYpKihiQysoYkItYkMpKmE4KSthNiooYnorKGJ5LWJ6KSphOCkpK2E0KigoMS1hNikqKGJ2KyhidC1idikqYTgpK2E2KihicisoYnEtYnIpKmE4KSk7YkM9YVQuXyRnTCsoYVMuXyRnTC1hVC5fJGdMKSphOTtiQj1iRS5fJGdMKyhiRC5fJGdMLWJFLl8kZ0wpKmE5O2J6PWFOLl8kZ0wrKGFNLl8kZ0wtYU4uXyRnTCkqYTk7Ynk9YnAuXyRnTCsoYm8uXyRnTC1icC5fJGdMKSphOTtidj1iaC5fJGdMKyhiZy5fJGdMLWJoLl8kZ0wpKmE5O2J0PWFZLl8kZ0wrKGFXLl8kZ0wtYVkuXyRnTCkqYTk7YnI9YTcuXyRnTCsoYTUuXyRnTC1hNy5fJGdMKSphOTticT1hUi5fJGdMKyhhUS5fJGdMLWFSLl8kZ0wpKmE5O2JtLl8kWXIuXyRnTD0oMS1hNCkqKCgxLWE2KSooYkMrKGJCLWJDKSphOCkrYTYqKGJ6KyhieS1ieikqYTgpKSthNCooKDEtYTYpKihidisoYnQtYnYpKmE4KSthNiooYnIrKGJxLWJyKSphOCkpO2JDPWFULl8kQjArKGFTLl8kQjAtYVQuXyRCMCkqYTk7YkI9YkUuXyRCMCsoYkQuXyRCMC1iRS5fJEIwKSphOTtiej1hTi5fJEIwKyhhTS5fJEIwLWFOLl8kQjApKmE5O2J5PWJwLl8kQjArKGJvLl8kQjAtYnAuXyRCMCkqYTk7YnY9YmguXyRCMCsoYmcuXyRCMC1iaC5fJEIwKSphOTtidD1hWS5fJEIwKyhhVy5fJEIwLWFZLl8kQjApKmE5O2JyPWE3Ll8kQjArKGE1Ll8kQjAtYTcuXyRCMCkqYTk7YnE9YVIuXyRCMCsoYVEuXyRCMC1hUi5fJEIwKSphOTtibS5fJFlyLl8kQjA9KDEtYTQpKigoMS1hNikqKGJDKyhiQi1iQykqYTgpK2E2KihieisoYnktYnopKmE4KSkrYTQqKCgxLWE2KSooYnYrKGJ0LWJ2KSphOCkrYTYqKGJyKyhicS1icikqYTgpKTtiQz1hVC5fJHowKyhhUy5fJHowLWFULl8kejApKmE5O2JCPWJFLl8kejArKGJELl8kejAtYkUuXyR6MCkqYTk7Yno9YU4uXyR6MCsoYU0uXyR6MC1hTi5fJHowKSphOTtieT1icC5fJHowKyhiby5fJHowLWJwLl8kejApKmE5O2J2PWJoLl8kejArKGJnLl8kejAtYmguXyR6MCkqYTk7YnQ9YVkuXyR6MCsoYVcuXyR6MC1hWS5fJHowKSphOTticj1hNy5fJHowKyhhNS5fJHowLWE3Ll8kejApKmE5O2JxPWFSLl8kejArKGFRLl8kejAtYVIuXyR6MCkqYTk7Ym0uXyRZci5fJHowPSgxLWE0KSooKDEtYTYpKihiQysoYkItYkMpKmE4KSthNiooYnorKGJ5LWJ6KSphOCkpK2E0KigoMS1hNikqKGJ2KyhidC1idikqYTgpK2E2KihicisoYnEtYnIpKmE4KSk7YkM9YVQuXyRxVCsoYVMuXyRxVC1hVC5fJHFUKSphOTtiQj1iRS5fJHFUKyhiRC5fJHFULWJFLl8kcVQpKmE5O2J6PWFOLl8kcVQrKGFNLl8kcVQtYU4uXyRxVCkqYTk7Ynk9YnAuXyRxVCsoYm8uXyRxVC1icC5fJHFUKSphOTtidj1iaC5fJHFUKyhiZy5fJHFULWJoLl8kcVQpKmE5O2J0PWFZLl8kcVQrKGFXLl8kcVQtYVkuXyRxVCkqYTk7YnI9YTcuXyRxVCsoYTUuXyRxVC1hNy5fJHFUKSphOTticT1hUi5fJHFUKyhhUS5fJHFULWFSLl8kcVQpKmE5O2JtLl8kWXIuXyRxVD0oMS1hNCkqKCgxLWE2KSooYkMrKGJCLWJDKSphOCkrYTYqKGJ6KyhieS1ieikqYTgpKSthNCooKDEtYTYpKihidisoYnQtYnYpKmE4KSthNiooYnIrKGJxLWJyKSphOCkpO31lbHNle3ZhciBhVj1NYXRoLnBvdygyLGEyKXwwO3ZhciBhWj1uZXcgRmxvYXQzMkFycmF5KGFWKTtmb3IodmFyIGJrPTA7Yms8YVY7YmsrKyl7dmFyIGFJPWJrO3ZhciBhSD0xO2Zvcih2YXIgYUw9MDthTDxhMjthTCsrKXthSCo9KGFJJTI9PTApPygxLWJhW2FMXSk6YmFbYUxdO2FJLz0yO31hWltia109YUg7fXZhciBiQT1uZXcgQXJyYXkoKTtmb3IodmFyIGFVPTA7YVU8YVY7YVUrKyl7YkFbYVVdPXRoaXMuXyRZMFthM1thVV1dO312YXIgYmU9MCxiYz0wLGJkPTAsYmI9MCxhWD0wO2Zvcih2YXIgYVU9MDthVTxhVjthVSsrKXtiZSs9YVpbYVVdKmJBW2FVXS5fJGZMO2JjKz1hWlthVV0qYkFbYVVdLl8kZ0w7YmQrPWFaW2FVXSpiQVthVV0uXyRCMDtiYis9YVpbYVVdKmJBW2FVXS5fJHowO2FYKz1hWlthVV0qYkFbYVVdLl8kcVQ7fWJtLl8kWXIuXyRmTD1iZTtibS5fJFlyLl8kZ0w9YmM7Ym0uXyRZci5fJEIwPWJkO2JtLl8kWXIuXyR6MD1iYjtibS5fJFlyLl8kcVQ9YVg7fX19fX12YXIgYm49dGhpcy5fJFkwW2EzWzBdXTtibS5fJFlyLnJlZmxlY3RYPWJuLnJlZmxlY3RYO2JtLl8kWXIucmVmbGVjdFk9Ym4ucmVmbGVjdFk7fTthYi5wcm90b3R5cGUuXyQyYj1mdW5jdGlvbihhTSxhSCl7aWYoISgodGhpcz09YUguXyRHVCgpKSkpe2NvbnNvbGUubG9nKFwiIyMjIGFzc2VydCEhICMjIyBcIik7fXZhciBhUj1hSDthUi5fJGhTKHRydWUpO2lmKCF0aGlzLl8kMzIoKSl7YVIuc2V0VG90YWxTY2FsZV9ub3RGb3JDbGllbnQoYVIuXyRZci5fJEIwKTthUi5zZXRUb3RhbE9wYWNpdHkoYVIuZ2V0SW50ZXJwb2xhdGVkT3BhY2l0eSgpKTt9ZWxzZXt2YXIgYVQ9dGhpcy5nZXRUYXJnZXRCYXNlRGF0YUlEKCk7aWYoYVIuXyQ4cj09Yy5fJHVyKXthUi5fJDhyPWFNLmdldEJhc2VEYXRhSW5kZXgoYVQpO31pZihhUi5fJDhyPDApe2lmKFEuXyRzbyl7cS5fJGxpKFwiXyRMIF8kMFAgXyRHIDo6ICVzXCIsYVQpO31hUi5fJGhTKGZhbHNlKTt9ZWxzZXt2YXIgYUk9YU0uZ2V0QmFzZURhdGEoYVIuXyQ4cik7aWYoYUkhPW51bGwpe3ZhciBhTD1hTS5fJHEyKGFSLl8kOHIpO3ZhciBhUz1hYi5fJFhvO2FTWzBdPWFSLl8kWXIuXyRmTDthU1sxXT1hUi5fJFlyLl8kZ0w7dmFyIGFKPWFiLl8kaW87YUpbMF09MDthSlsxXT0tMC4xO3ZhciBhTz1hTC5fJEdUKCkuZ2V0VHlwZSgpO2lmKGFPPT1jLl8kYzIpe2FKWzFdPS0xMDt9ZWxzZXthSlsxXT0tMC4xO312YXIgYVE9YWIuXyQwbzt0aGlzLl8kSnIoYU0sYUksYUwsYVMsYUosYVEpO3ZhciBhUD1hQy5fJDkyKGFKLGFRKTthSS5fJG5iKGFNLGFMLGFTLGFTLDEsMCwyKTthUi5fJFdyLl8kZkw9YVNbMF07YVIuXyRXci5fJGdMPWFTWzFdO2FSLl8kV3IuXyRCMD1hUi5fJFlyLl8kQjA7YVIuXyRXci5fJHowPWFSLl8kWXIuXyR6MDthUi5fJFdyLl8kcVQ9YVIuXyRZci5fJHFULWFQKmFDLl8kTlM7dmFyIGFLPWFMLmdldFRvdGFsU2NhbGUoKTthUi5zZXRUb3RhbFNjYWxlX25vdEZvckNsaWVudChhSyphUi5fJFdyLl8kQjApO3ZhciBhTj1hTC5nZXRUb3RhbE9wYWNpdHkoKTthUi5zZXRUb3RhbE9wYWNpdHkoYU4qYVIuZ2V0SW50ZXJwb2xhdGVkT3BhY2l0eSgpKTthUi5fJFdyLnJlZmxlY3RYPWFSLl8kWXIucmVmbGVjdFg7YVIuXyRXci5yZWZsZWN0WT1hUi5fJFlyLnJlZmxlY3RZO2FSLl8kaFMoYUwuXyR5bygpKTt9ZWxzZXthUi5fJGhTKGZhbHNlKTt9fX19O2FiLnByb3RvdHlwZS5fJG5iPWZ1bmN0aW9uKGFKLGFSLGFMLGE0LGFULGFPLGEyKXtpZighKCh0aGlzPT1hUi5fJEdUKCkpKSl7Y29uc29sZS5sb2coXCIjIyMgYXNzZXJ0ISEgIyMjIFwiKTt9dmFyIGFIPWFSO3ZhciBhVT1hSC5fJFdyIT1udWxsP2FILl8kV3I6YUguXyRZcjt2YXIgYTA9TWF0aC5zaW4oYUMuXyRiUyphVS5fJHFUKTt2YXIgYVA9TWF0aC5jb3MoYUMuXyRiUyphVS5fJHFUKTt2YXIgYTM9YUguZ2V0VG90YWxTY2FsZSgpO3ZhciBhVz1hVS5yZWZsZWN0WD8tMToxO3ZhciBhVj1hVS5yZWZsZWN0WT8tMToxO3ZhciBhUz1hUCphMyphVzt2YXIgYVE9LWEwKmEzKmFWO3ZhciBhMT1hMCphMyphVzt2YXIgYVo9YVAqYTMqYVY7dmFyIGFZPWFVLl8kZkw7dmFyIGFYPWFVLl8kZ0w7dmFyIGFOLGFNO3ZhciBhST1hVCphMjtmb3IodmFyIGFLPWFPO2FLPGFJO2FLKz1hMil7YU49YUxbYUtdO2FNPWFMW2FLKzFdO2E0W2FLXT1hUyphTithUSphTSthWTthNFthSysxXT1hMSphTithWiphTSthWDt9fTthYi5wcm90b3R5cGUuXyRKcj1mdW5jdGlvbihhUCxhSyxhSSxhUixhUSxhSCl7aWYoISgoYUs9PWFJLl8kR1QoKSkpKXtjb25zb2xlLmxvZyhcIiMjIyBhc3NlcnQhISAjIyMgXCIpO312YXIgYU89YWIuXyRMbzthYi5fJExvWzBdPWFSWzBdO2FiLl8kTG9bMV09YVJbMV07YUsuXyRuYihhUCxhSSxhTyxhTywxLDAsMik7dmFyIGFMPWFiLl8kVG87dmFyIGFTPWFiLl8kUG87dmFyIGFOPTEwO3ZhciBhSj0xO2Zvcih2YXIgYU09MDthTTxhTjthTSsrKXthU1swXT1hUlswXSthSiphUVswXTthU1sxXT1hUlsxXSthSiphUVsxXTthSy5fJG5iKGFQLGFJLGFTLGFMLDEsMCwyKTthTFswXS09YU9bMF07YUxbMV0tPWFPWzFdO2lmKGFMWzBdIT0wfHxhTFsxXSE9MCl7YUhbMF09YUxbMF07YUhbMV09YUxbMV07cmV0dXJuO31hU1swXT1hUlswXS1hSiphUVswXTthU1sxXT1hUlsxXS1hSiphUVsxXTthSy5fJG5iKGFQLGFJLGFTLGFMLDEsMCwyKTthTFswXS09YU9bMF07YUxbMV0tPWFPWzFdO2lmKGFMWzBdIT0wfHxhTFsxXSE9MCl7YUxbMF09LWFMWzBdO2FMWzBdPS1hTFswXTthSFswXT1hTFswXTthSFsxXT1hTFsxXTtyZXR1cm47fWFKKj0wLjE7fWlmKFEuXyRzbyl7Y29uc29sZS5sb2coXCJfJEwwIHRvIHRyYW5zZm9ybSBfJFNQXFxuXCIpO319O2Z1bmN0aW9uIGFsKGFIKXtCLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYUgpO3RoaXMuXyQ4cj1jLl8kdXI7dGhpcy5fJFlyPW51bGw7dGhpcy5fJFdyPW51bGw7fWFsLnByb3RvdHlwZT1uZXcgQigpO2Z1bmN0aW9uIGEoKXtpZihqKXtyZXR1cm47fWFlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuXyRnUD1udWxsO3RoaXMuXyRkcj1udWxsO3RoaXMuXyRHUz1udWxsO3RoaXMuXyRxYj1udWxsO3RoaXMuXyRMYj1udWxsO3RoaXMuXyRtUz1udWxsO31hLnByb3RvdHlwZT1uZXcgYWUoKTthLl8kdXI9LTI7YS5fJEVTPTUwMDthLl8kd2I9MjthLl8kOFM9MzthLl8kb3M9NDthLl8kNTI9YS5fJEVTO2EuXyRSMj1hLl8kRVM7YS5fJFNiPWZ1bmN0aW9uKGFKKXtmb3IodmFyIGFJPWFKLmxlbmd0aC0xO2FJPj0wOy0tYUkpe3ZhciBhSD1hSlthSV07aWYoYUg8YS5fJDUyKXthLl8kNTI9YUg7fWVsc2V7aWYoYUg+YS5fJFIyKXthLl8kUjI9YUg7fX19fTthLl8kb3I9ZnVuY3Rpb24oKXtyZXR1cm4gYS5fJDUyO307YS5fJFByPWZ1bmN0aW9uKCl7cmV0dXJuIGEuXyRSMjt9O2EucHJvdG90eXBlLl8kRjA9ZnVuY3Rpb24oYUgpe3RoaXMuXyRnUD1hSC5fJG5QKCk7dGhpcy5fJGRyPWFILl8kblAoKTt0aGlzLl8kR1M9YUguXyRuUCgpO3RoaXMuXyRxYj1hSC5fJDZMKCk7dGhpcy5fJExiPWFILl8kY1MoKTt0aGlzLl8kbVM9YUguXyRUYigpO2lmKGFILmdldEZvcm1hdFZlcnNpb24oKT49YXkuXyRUNyl7dGhpcy5jbGlwSUQ9YUguXyRuUCgpO3RoaXMuY2xpcElETGlzdD10aGlzLmNvbnZlcnRDbGlwSURGb3JWMl8xMSh0aGlzLmNsaXBJRCk7fWVsc2V7dGhpcy5jbGlwSURMaXN0PW51bGw7fWEuXyRTYih0aGlzLl8kTGIpO307YS5wcm90b3R5cGUuZ2V0Q2xpcElETGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsaXBJRExpc3Q7fTthLnByb3RvdHlwZS5fJE5yPWZ1bmN0aW9uKGFJLGFIKXthSC5fJElTWzBdPWZhbHNlO2FILl8kVXM9YUcuXyRaMihhSSx0aGlzLl8kR1MsYUguXyRJUyx0aGlzLl8kTGIpO2lmKFEuXyRacyl7fWVsc2V7aWYoYUguXyRJU1swXSl7cmV0dXJuO319YUguXyQ3cz1hRy5fJGJyKGFJLHRoaXMuXyRHUyxhSC5fJElTLHRoaXMuXyRtUyk7fTthLnByb3RvdHlwZS5fJDJiPWZ1bmN0aW9uKGFIKXt9O2EucHJvdG90eXBlLmdldERyYXdEYXRhSUQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJGdQO307YS5wcm90b3R5cGUuXyRqMj1mdW5jdGlvbihhSCl7dGhpcy5fJGdQPWFIO307YS5wcm90b3R5cGUuZ2V0T3BhY2l0eT1mdW5jdGlvbihhSCxhSSl7cmV0dXJuIGFJLl8kN3M7fTthLnByb3RvdHlwZS5fJHpTPWZ1bmN0aW9uKGFILGFJKXtyZXR1cm4gYUkuXyRVczt9O2EucHJvdG90eXBlLmdldFRhcmdldEJhc2VEYXRhSUQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJGRyO307YS5wcm90b3R5cGUuXyRncz1mdW5jdGlvbihhSCl7dGhpcy5fJGRyPWFIO307YS5wcm90b3R5cGUuXyQzMj1mdW5jdGlvbigpe3JldHVybih0aGlzLl8kZHIhPW51bGwmJih0aGlzLl8kZHIhPW4uXyQybygpKSk7fTthLnByb3RvdHlwZS5nZXRUeXBlPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBhcSgpe2lmKGope3JldHVybjt9dGhpcy5fJE5MPW51bGw7dGhpcy5fJDNTPW51bGw7dGhpcy5fJGFTPW51bGw7YXEuXyQ0MisrO31hcS5fJDQyPTA7YXEucHJvdG90eXBlLl8kMWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJDNTO307YXEucHJvdG90eXBlLmdldERyYXdEYXRhTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kYVM7fTthcS5wcm90b3R5cGUuXyRGMD1mdW5jdGlvbihhSCl7dGhpcy5fJE5MPWFILl8kblAoKTt0aGlzLl8kYVM9YUguXyRuUCgpO3RoaXMuXyQzUz1hSC5fJG5QKCk7fTthcS5wcm90b3R5cGUuXyRrcj1mdW5jdGlvbihhSCl7YUguXyRabyh0aGlzLl8kM1MpO2FILl8keG8odGhpcy5fJGFTKTt0aGlzLl8kM1M9bnVsbDt0aGlzLl8kYVM9bnVsbDt9O2Z1bmN0aW9uIHYoKXtpZihqKXtyZXR1cm47fWFhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuXyR6bz1uZXcgeCgpO312LnByb3RvdHlwZT1uZXcgYWEoKTt2LmxvYWRNb2RlbD1mdW5jdGlvbihhSSl7dmFyIGFIPW5ldyB2KCk7YWEuXyQ2MihhSCxhSSk7cmV0dXJuIGFIO307di5sb2FkTW9kZWw9ZnVuY3Rpb24oYUkpe3ZhciBhSD1uZXcgdigpO2FhLl8kNjIoYUgsYUkpO3JldHVybiBhSDt9O3YuXyR0bz1mdW5jdGlvbigpe3ZhciBhSD1uZXcgdigpO3JldHVybiBhSDt9O3YuXyRlcj1mdW5jdGlvbihhTSl7dmFyIGFKPW5ldyBfJDUoXCIuLi9fJF9yL18kdDAvXyRSaS9fJF9QLl8kZFwiKTtpZihhSi5leGlzdHMoKT09ZmFsc2Upe3Rocm93IG5ldyBfJGxzKFwiXyR0MCBfJF8gXyQ2IF8kVWkgOjogXCIrYUouXyRQTCgpKTt9dmFyIGFIPVtcIi4uL18kX3IvXyR0MC9fJFJpL18kX1AuNTEyL18kQ1AuXyQxXCIsXCIuLi9fJF9yL18kdDAvXyRSaS9fJF9QLjUxMi9fJHZQLl8kMVwiLFwiLi4vXyRfci9fJHQwL18kUmkvXyRfUC41MTIvXyRFUC5fJDFcIixcIi4uL18kX3IvXyR0MC9fJFJpL18kX1AuNTEyL18kcFAuXyQxXCJdO3ZhciBhSz12LmxvYWRNb2RlbChhSi5fJDNiKCkpO2Zvcih2YXIgYUk9MDthSTxhSC5sZW5ndGg7YUkrKyl7dmFyIGFMPW5ldyBfJDUoYUhbYUldKTtpZihhTC5leGlzdHMoKT09ZmFsc2Upe3Rocm93IG5ldyBfJGxzKFwiXyR0MCBfJF8gXyQ2IF8kVWkgOjogXCIrYUwuXyRQTCgpKTt9YUsuc2V0VGV4dHVyZShhSSxfJG5MLl8kX28oYU0sYUwuXyQzYigpKSk7fXJldHVybiBhSzt9O3YucHJvdG90eXBlLnNldEdMPWZ1bmN0aW9uKGFIKXt0aGlzLl8kem8uc2V0R0woYUgpO307di5wcm90b3R5cGUuc2V0VHJhbnNmb3JtPWZ1bmN0aW9uKGFIKXt0aGlzLl8kem8uc2V0VHJhbnNmb3JtKGFIKTt9O3YucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXt0aGlzLl8kNVMuZHJhdyh0aGlzLl8kem8pO307di5wcm90b3R5cGUuXyRLMj1mdW5jdGlvbigpe3RoaXMuXyR6by5fJEsyKCk7fTt2LnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKGFJLGFIKXtpZih0aGlzLl8kem89PW51bGwpe3EuXyRsaShcIl8kWWkgZm9yIFFUIF8ka2kgLyBfJFhTKCkgaXMgXyQ2IF8kdWkhIVwiKTt9dGhpcy5fJHpvLnNldFRleHR1cmUoYUksYUgpO307di5wcm90b3R5cGUuc2V0VGV4dHVyZT1mdW5jdGlvbihhSSxhSCl7aWYodGhpcy5fJHpvPT1udWxsKXtxLl8kbGkoXCJfJFlpIGZvciBRVCBfJGtpIC8gXyRYUygpIGlzIF8kNiBfJHVpISFcIik7fXRoaXMuXyR6by5zZXRUZXh0dXJlKGFJLGFIKTt9O3YucHJvdG90eXBlLl8kUnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJHpvLl8kUnMoKTt9O3YucHJvdG90eXBlLl8kRHM9ZnVuY3Rpb24oYUgpe3RoaXMuXyR6by5fJERzKGFIKTt9O3YucHJvdG90eXBlLmdldERyYXdQYXJhbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kem87fTtmdW5jdGlvbiBhbygpe2lmKGope3JldHVybjt9YWgucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5tb3Rpb25zPW5ldyBBcnJheSgpO3RoaXMuXyRvMj1udWxsO3RoaXMuXyQ3cj1hby5fJENvKys7dGhpcy5fJEQwPTMwO3RoaXMuXyR5VD0wO3RoaXMuXyRFPWZhbHNlO3RoaXMubG9vcEZhZGVJbj10cnVlO3RoaXMuXyRycj0tMTt0aGlzLl8kZVA9MDt9YW8ucHJvdG90eXBlPW5ldyBhaCgpO2FvLl8kY3M9XCJWSVNJQkxFOlwiO2FvLl8kYXI9XCJMQVlPVVQ6XCI7YW8uTVROX1BSRUZJWF9GQURFSU49XCJGQURFSU46XCI7YW8uTVROX1BSRUZJWF9GQURFT1VUPVwiRkFERU9VVDpcIjthby5fJENvPTA7YW8uXyQxVD0xO2FvLmxvYWRNb3Rpb249ZnVuY3Rpb24oYUope3ZhciBhST1hcC5fJEMoYUopO3ZhciBhSD1hby5sb2FkTW90aW9uKGFJKTtyZXR1cm4gYUg7fTtmdW5jdGlvbiBwKGFJLGFIKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhSS5nZXRVaW50OChhSCkpO31hby5sb2FkTW90aW9uPWZ1bmN0aW9uKGFUKXtpZihhVCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXthVD1uZXcgRGF0YVZpZXcoYVQpO312YXIgYU49bmV3IGFvKCk7dmFyIGFJPVswXTt2YXIgYVE9YVQuYnl0ZUxlbmd0aDthTi5fJHlUPTA7Zm9yKHZhciBhSj0wO2FKPGFROysrYUope3ZhciBhUz1wKGFULGFKKTt2YXIgYUw9YVMuY2hhckNvZGVBdCgwKTtpZihhUz09XCJcXG5cInx8YVM9PVwiXFxyXCIpe2NvbnRpbnVlO31pZihhUz09XCIjXCIpe2Zvcig7YUo8YVE7KythSil7aWYocChhVCxhSik9PVwiXFxuXCJ8fHAoYVQsYUopPT1cIlxcclwiKXticmVhazt9fWNvbnRpbnVlO31pZihhUz09XCIkXCIpe3ZhciBhVj1hSjt2YXIgYUs9LTE7Zm9yKDthSjxhUTsrK2FKKXthUz1wKGFULGFKKTtpZihhUz09XCJcXHJcInx8YVM9PVwiXFxuXCIpe2JyZWFrO31pZihhUz09XCI9XCIpe2FLPWFKO2JyZWFrO319dmFyIGFQPWZhbHNlO2lmKGFLPj0wKXtpZihhSz09YVYrNCYmcChhVCxhVisxKT09XCJmXCImJnAoYVQsYVYrMik9PVwicFwiJiZwKGFULGFWKzMpPT1cInNcIil7YVA9dHJ1ZTt9Zm9yKGFKPWFLKzE7YUo8YVE7KythSil7YVM9cChhVCxhSik7aWYoYVM9PVwiXFxyXCJ8fGFTPT1cIlxcblwiKXticmVhazt9aWYoYVM9PVwiLFwifHxhUz09XCIgXCJ8fGFTPT1cIlxcdFwiKXtjb250aW51ZTt9dmFyIGFNPUcuXyRMUyhhVCxhUSxhSixhSSk7aWYoYUlbMF0+MCl7aWYoYVAmJjU8YU0mJmFNPDEyMSl7YU4uXyREMD1hTTt9fWFKPWFJWzBdO319Zm9yKDthSjxhUTsrK2FKKXtpZihwKGFULGFKKT09XCJcXG5cInx8cChhVCxhSik9PVwiXFxyXCIpe2JyZWFrO319Y29udGludWU7fWlmKCg5Nzw9YUwmJmFMPD0xMjIpfHwoNjU8PWFMJiZhTDw9OTApfHxhUz09XCJfXCIpe3ZhciBhVj1hSjt2YXIgYUs9LTE7Zm9yKDthSjxhUTsrK2FKKXthUz1wKGFULGFKKTtpZihhUz09XCJcXHJcInx8YVM9PVwiXFxuXCIpe2JyZWFrO31pZihhUz09XCI9XCIpe2FLPWFKO2JyZWFrO319aWYoYUs+PTApe3ZhciBhTz1uZXcgdCgpO2lmKEcuc3RhcnRzV2l0aChhVCxhVixhby5fJGNzKSl7YU8uXyRSUD10Ll8kaHM7YU8uXyQ0UD1HLmNyZWF0ZVN0cmluZyhhVCxhVixhSy1hVik7fWVsc2V7aWYoRy5zdGFydHNXaXRoKGFULGFWLGFvLl8kYXIpKXthTy5fJDRQPUcuY3JlYXRlU3RyaW5nKGFULGFWKzcsYUstYVYtNyk7aWYoRy5zdGFydHNXaXRoKGFULGFWKzcsXCJBTkNIT1JfWFwiKSl7YU8uXyRSUD10Ll8keHM7fWVsc2V7aWYoRy5zdGFydHNXaXRoKGFULGFWKzcsXCJBTkNIT1JfWVwiKSl7YU8uXyRSUD10Ll8kdXM7fWVsc2V7aWYoRy5zdGFydHNXaXRoKGFULGFWKzcsXCJTQ0FMRV9YXCIpKXthTy5fJFJQPXQuXyRxczt9ZWxzZXtpZihHLnN0YXJ0c1dpdGgoYVQsYVYrNyxcIlNDQUxFX1lcIikpe2FPLl8kUlA9dC5fJFlzO31lbHNle2lmKEcuc3RhcnRzV2l0aChhVCxhVis3LFwiWFwiKSl7YU8uXyRSUD10Ll8kd3M7fWVsc2V7aWYoRy5zdGFydHNXaXRoKGFULGFWKzcsXCJZXCIpKXthTy5fJFJQPXQuXyROczt9fX19fX19ZWxzZXthTy5fJFJQPXQuXyRGcjthTy5fJDRQPUcuY3JlYXRlU3RyaW5nKGFULGFWLGFLLWFWKTt9fWFOLm1vdGlvbnMucHVzaChhTyk7dmFyIGFVPTA7dmFyIGFSPVtdO2ZvcihhSj1hSysxO2FKPGFROysrYUope2FTPXAoYVQsYUopO2lmKGFTPT1cIlxcclwifHxhUz09XCJcXG5cIil7YnJlYWs7fWlmKGFTPT1cIixcInx8YVM9PVwiIFwifHxhUz09XCJcXHRcIil7Y29udGludWU7fXZhciBhTT1HLl8kTFMoYVQsYVEsYUosYUkpO2lmKGFJWzBdPjApe2FSLnB1c2goYU0pO2FVKys7dmFyIGFIPWFJWzBdO2lmKGFIPGFKKXtjb25zb2xlLmxvZyhcIl8kbjAgXyRoaSAuIEBMaXZlMkRNb3Rpb24gbG9hZE1vdGlvbigpXFxuXCIpO2JyZWFrO31hSj1hSC0xO319YU8uXyRJMD1uZXcgRmxvYXQzMkFycmF5KGFSKTtpZihhVT5hTi5fJHlUKXthTi5fJHlUPWFVO319fX1hTi5fJHJyPSgoMTAwMCphTi5fJHlUKS9hTi5fJEQwKXwwO3JldHVybiBhTjt9O2FvLnByb3RvdHlwZS5nZXREdXJhdGlvbk1TZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJEU/LTE6dGhpcy5fJHJyO307YW8ucHJvdG90eXBlLmdldExvb3BEdXJhdGlvbk1TZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJHJyO307YW8ucHJvdG90eXBlLmR1bXA9ZnVuY3Rpb24oKXtmb3IodmFyIGFKPTA7YUo8dGhpcy5tb3Rpb25zLmxlbmd0aDthSisrKXt2YXIgYUg9dGhpcy5tb3Rpb25zW2FKXTtjb25zb2xlLmxvZyhcIl8kd0xbJXNdIFslZF0uIFwiLGFILl8kNFAsYUguXyRJMC5sZW5ndGgpO2Zvcih2YXIgYUk9MDthSTxhSC5fJEkwLmxlbmd0aCYmYUk8MTA7YUkrKyl7Y29uc29sZS5sb2coXCIlNS4yZiAsXCIsYUguXyRJMFthSV0pO31jb25zb2xlLmxvZyhcIlxcblwiKTt9fTthby5wcm90b3R5cGUudXBkYXRlUGFyYW1FeGU9ZnVuY3Rpb24oYUosYU4sYVEsYTMpe3ZhciBhTz1hTi1hMy5fJHoyO3ZhciBhMD1hTyp0aGlzLl8kRDAvMTAwMDt2YXIgYUs9YTB8MDt2YXIgYVI9YTAtYUs7Zm9yKHZhciBhWj0wO2FaPHRoaXMubW90aW9ucy5sZW5ndGg7YVorKyl7dmFyIGFWPXRoaXMubW90aW9uc1thWl07dmFyIGFMPWFWLl8kSTAubGVuZ3RoO3ZhciBhVD1hVi5fJDRQO2lmKGFWLl8kUlA9PXQuXyRocyl7dmFyIGFYPWFWLl8kSTBbKGFLPj1hTD9hTC0xOmFLKV07YUouc2V0UGFyYW1GbG9hdChhVCxhWCk7fWVsc2V7aWYodC5fJHdzPD1hVi5fJFJQJiZhVi5fJFJQPD10Ll8kWXMpe31lbHNle3ZhciBhSD1hSi5nZXRQYXJhbUluZGV4KGFUKTt2YXIgYTQ9YUouZ2V0TW9kZWxDb250ZXh0KCk7dmFyIGFZPWE0LmdldFBhcmFtTWF4KGFIKTt2YXIgYVc9YTQuZ2V0UGFyYW1NaW4oYUgpO3ZhciBhTT0wLjQ7dmFyIGFTPWFNKihhWS1hVyk7dmFyIGFVPWE0LmdldFBhcmFtRmxvYXQoYUgpO3ZhciBhMj1hVi5fJEkwWyhhSz49YUw/YUwtMTphSyldO3ZhciBhMT1hVi5fJEkwWyhhSysxPj1hTD9hTC0xOmFLKzEpXTt2YXIgYUk7aWYoKGEyPGExJiZhMS1hMj5hUyl8fChhMj5hMSYmYTItYTE+YVMpKXthST1hMjt9ZWxzZXthST1hMisoYTEtYTIpKmFSO312YXIgYVA9YVUrKGFJLWFVKSphUTthSi5zZXRQYXJhbUZsb2F0KGFULGFQKTt9fX1pZihhSz49dGhpcy5fJHlUKXtpZih0aGlzLl8kRSl7YTMuXyR6Mj1hTjtpZih0aGlzLmxvb3BGYWRlSW4pe2EzLl8kYnM9YU47fX1lbHNle2EzLl8kOUw9dHJ1ZTt9fXRoaXMuXyRlUD1hUTt9O2FvLnByb3RvdHlwZS5fJHIwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRFO307YW8ucHJvdG90eXBlLl8kYUw9ZnVuY3Rpb24oYUgpe3RoaXMuXyRFPWFIO307YW8ucHJvdG90eXBlLl8kUzA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJEQwO307YW8ucHJvdG90eXBlLl8kVTA9ZnVuY3Rpb24oYUgpe3RoaXMuXyREMD1hSDt9O2FvLnByb3RvdHlwZS5pc0xvb3BGYWRlSW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wRmFkZUluO307YW8ucHJvdG90eXBlLnNldExvb3BGYWRlSW49ZnVuY3Rpb24oYUgpe3RoaXMubG9vcEZhZGVJbj1hSDt9O2Z1bmN0aW9uIGFFKCl7dGhpcy5fJFA9bmV3IEZsb2F0MzJBcnJheSgxMDApO3RoaXMuc2l6ZT0wO31hRS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MDt9O2FFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYUkpe2lmKHRoaXMuXyRQLmxlbmd0aDw9dGhpcy5zaXplKXt2YXIgYUg9bmV3IEZsb2F0MzJBcnJheSh0aGlzLnNpemUqMik7UC5fJGpUKHRoaXMuXyRQLDAsYUgsMCx0aGlzLnNpemUpO3RoaXMuXyRQPWFIO310aGlzLl8kUFt0aGlzLnNpemUrK109YUk7fTthRS5wcm90b3R5cGUuXyRCTD1mdW5jdGlvbigpe3ZhciBhSD1uZXcgRmxvYXQzMkFycmF5KHRoaXMuc2l6ZSk7UC5fJGpUKHRoaXMuXyRQLDAsYUgsMCx0aGlzLnNpemUpO3JldHVybiBhSDt9O2Z1bmN0aW9uIHQoKXt0aGlzLl8kNFA9bnVsbDt0aGlzLl8kSTA9bnVsbDt0aGlzLl8kUlA9bnVsbDt9dC5fJEZyPTA7dC5fJGhzPTE7dC5fJHdzPTEwMDt0Ll8kTnM9MTAxO3QuXyR4cz0xMDI7dC5fJHVzPTEwMzt0Ll8kcXM9MTA0O3QuXyRZcz0xMDU7ZnVuY3Rpb24gRSgpe2lmKGope3JldHVybjt9Yy5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLl8kbz0wO3RoaXMuXyRBPTA7dGhpcy5fJEdTPW51bGw7dGhpcy5fJEVvPW51bGw7fUUucHJvdG90eXBlPW5ldyBjKCk7RS5fJGdUPW5ldyBBcnJheSgpO0UucHJvdG90eXBlLl8kelA9ZnVuY3Rpb24oKXt0aGlzLl8kR1M9bmV3IGcoKTt0aGlzLl8kR1MuXyR6UCgpO307RS5wcm90b3R5cGUuXyRGMD1mdW5jdGlvbihhSCl7Yy5wcm90b3R5cGUuXyRGMC5jYWxsKHRoaXMsYUgpO3RoaXMuXyRBPWFILl8kNkwoKTt0aGlzLl8kbz1hSC5fJDZMKCk7dGhpcy5fJEdTPWFILl8kblAoKTt0aGlzLl8kRW89YUguXyRuUCgpO2MucHJvdG90eXBlLnJlYWRWMl9vcGFjaXR5LmNhbGwodGhpcyxhSCk7fTtFLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGFIKXt2YXIgYUk9bmV3IEgodGhpcyk7dmFyIGFKPSh0aGlzLl8kbysxKSoodGhpcy5fJEErMSk7aWYoYUkuXyRDciE9bnVsbCl7YUkuXyRDcj1udWxsO31hSS5fJENyPW5ldyBGbG9hdDMyQXJyYXkoYUoqMik7aWYoYUkuXyRociE9bnVsbCl7YUkuXyRocj1udWxsO31pZih0aGlzLl8kMzIoKSl7YUkuXyRocj1uZXcgRmxvYXQzMkFycmF5KGFKKjIpO31lbHNle2FJLl8kaHI9bnVsbDt9cmV0dXJuIGFJO307RS5wcm90b3R5cGUuXyROcj1mdW5jdGlvbihhSixhSSl7dmFyIGFLPWFJO2lmKCF0aGlzLl8kR1MuXyRVcihhSikpe3JldHVybjt9dmFyIGFMPXRoaXMuXyRWVCgpO3ZhciBhSD1FLl8kZ1Q7YUhbMF09ZmFsc2U7YUcuXyRWcihhSix0aGlzLl8kR1MsYUgsYUwsdGhpcy5fJEVvLGFLLl8kQ3IsMCwyKTthSS5fJEliKGFIWzBdKTt0aGlzLmludGVycG9sYXRlT3BhY2l0eShhSix0aGlzLl8kR1MsYUksYUgpO307RS5wcm90b3R5cGUuXyQyYj1mdW5jdGlvbihhSyxhSil7dmFyIGFMPWFKO2FMLl8kaFModHJ1ZSk7aWYoIXRoaXMuXyQzMigpKXthTC5zZXRUb3RhbE9wYWNpdHkoYUwuZ2V0SW50ZXJwb2xhdGVkT3BhY2l0eSgpKTt9ZWxzZXt2YXIgYUg9dGhpcy5nZXRUYXJnZXRCYXNlRGF0YUlEKCk7aWYoYUwuXyQ4cj09Yy5fJHVyKXthTC5fJDhyPWFLLmdldEJhc2VEYXRhSW5kZXgoYUgpO31pZihhTC5fJDhyPDApe2lmKFEuXyRzbyl7cS5fJGxpKFwiXyRMIF8kMFAgXyRHIDo6ICVzXCIsYUgpO31hTC5fJGhTKGZhbHNlKTt9ZWxzZXt2YXIgYU49YUsuZ2V0QmFzZURhdGEoYUwuXyQ4cik7dmFyIGFJPWFLLl8kcTIoYUwuXyQ4cik7aWYoYU4hPW51bGwmJmFJLl8keW8oKSl7dmFyIGFNPWFJLmdldFRvdGFsU2NhbGUoKTthTC5zZXRUb3RhbFNjYWxlX25vdEZvckNsaWVudChhTSk7dmFyIGFPPWFJLmdldFRvdGFsT3BhY2l0eSgpO2FMLnNldFRvdGFsT3BhY2l0eShhTyphTC5nZXRJbnRlcnBvbGF0ZWRPcGFjaXR5KCkpO2FOLl8kbmIoYUssYUksYUwuXyRDcixhTC5fJGhyLHRoaXMuXyRWVCgpLDAsMik7YUwuXyRoUyh0cnVlKTt9ZWxzZXthTC5fJGhTKGZhbHNlKTt9fX19O0UucHJvdG90eXBlLl8kbmI9ZnVuY3Rpb24oYUwsYUksYUgsYU0sYU8sYUssYUope2lmKHRydWUpe3ZhciBhTj1hSTt2YXIgYVA9KGFOLl8kaHIhPW51bGwpP2FOLl8kaHI6YU4uXyRDcjtFLnRyYW5zZm9ybVBvaW50c19zZGsyKGFILGFNLGFPLGFLLGFKLGFQLHRoaXMuXyRvLHRoaXMuXyRBKTt9ZWxzZXt0aGlzLnRyYW5zZm9ybVBvaW50c19zZGsxKGFMLGFJLGFILGFNLGFPLGFLLGFKKTt9fTtFLnRyYW5zZm9ybVBvaW50c19zZGsyPWZ1bmN0aW9uKGEwLGJjLGE1LGFQLGFJLGFSLGFRLGFVKXt2YXIgYVc9YTUqYUk7dmFyIGFWO3ZhciBibixibTt2YXIgYVQ9MDt2YXIgYVM9MDt2YXIgYmw9MDt2YXIgYms9MDt2YXIgYmY9MDt2YXIgYmU9MDt2YXIgYVo9ZmFsc2U7Zm9yKHZhciBiYT1hUDtiYTxhVztiYSs9YUkpe3ZhciBiZCxhNyxhNCxhWDthND1hMFtiYV07YVg9YTBbYmErMV07YmQ9YTQqYVE7YTc9YVgqYVU7aWYoYmQ8MHx8YTc8MHx8YVE8PWJkfHxhVTw9YTcpe3ZhciBhMT1hUSsxO2lmKCFhWil7YVo9dHJ1ZTthVD0wLjI1KihhUlsoKDApKygwKSphMSkqMl0rYVJbKChhUSkrKDApKmExKSoyXSthUlsoKDApKyhhVSkqYTEpKjJdK2FSWygoYVEpKyhhVSkqYTEpKjJdKTthUz0wLjI1KihhUlsoKDApKygwKSphMSkqMisxXSthUlsoKGFRKSsoMCkqYTEpKjIrMV0rYVJbKCgwKSsoYVUpKmExKSoyKzFdK2FSWygoYVEpKyhhVSkqYTEpKjIrMV0pO3ZhciBhTT1hUlsoKGFRKSsoYVUpKmExKSoyXS1hUlsoKDApKygwKSphMSkqMl07dmFyIGFMPWFSWygoYVEpKyhhVSkqYTEpKjIrMV0tYVJbKCgwKSsoMCkqYTEpKjIrMV07dmFyIGJoPWFSWygoYVEpKygwKSphMSkqMl0tYVJbKCgwKSsoYVUpKmExKSoyXTt2YXIgYmc9YVJbKChhUSkrKDApKmExKSoyKzFdLWFSWygoMCkrKGFVKSphMSkqMisxXTtibD0oYU0rYmgpKjAuNTtiaz0oYUwrYmcpKjAuNTtiZj0oYU0tYmgpKjAuNTtiZT0oYUwtYmcpKjAuNTtpZihibD09MCYmYms9PTApe31pZihiZj09MCYmYmU9PTApe31hVC09MC41KihibCtiZik7YVMtPTAuNSooYmsrYmUpO31pZigoLTI8YTQmJmE0PDMpJiYoLTI8YVgmJmFYPDMpKXtpZihhNDw9MCl7aWYoYVg8PTApe3ZhciBhMz1hUlsoKDApKygwKSphMSkqMl07dmFyIGEyPWFSWygoMCkrKDApKmExKSoyKzFdO3ZhciBhOD1hVC0yKmJsO3ZhciBhNj1hUy0yKmJrO3ZhciBhSz1hVC0yKmJmO3ZhciBhSj1hUy0yKmJlO3ZhciBhTz1hVC0yKmJsLTIqYmY7dmFyIGFOPWFTLTIqYmstMipiZTt2YXIgYmo9MC41KihhNC0oLTIpKTt2YXIgYmk9MC41KihhWC0oLTIpKTtpZihiaitiaTw9MSl7YmNbYmFdPWFPKyhhSy1hTykqYmorKGE4LWFPKSpiaTtiY1tiYSsxXT1hTisoYUotYU4pKmJqKyhhNi1hTikqYmk7fWVsc2V7YmNbYmFdPWEzKyhhOC1hMykqKDEtYmopKyhhSy1hMykqKDEtYmkpO2JjW2JhKzFdPWEyKyhhNi1hMikqKDEtYmopKyhhSi1hMikqKDEtYmkpO319ZWxzZXtpZihhWD49MSl7dmFyIGFLPWFSWygoMCkrKGFVKSphMSkqMl07dmFyIGFKPWFSWygoMCkrKGFVKSphMSkqMisxXTt2YXIgYU89YVQtMipibCsxKmJmO3ZhciBhTj1hUy0yKmJrKzEqYmU7dmFyIGEzPWFUKzMqYmY7dmFyIGEyPWFTKzMqYmU7dmFyIGE4PWFULTIqYmwrMypiZjt2YXIgYTY9YVMtMipiayszKmJlO3ZhciBiaj0wLjUqKGE0LSgtMikpO3ZhciBiaT0wLjUqKGFYLSgxKSk7aWYoYmorYmk8PTEpe2JjW2JhXT1hTysoYUstYU8pKmJqKyhhOC1hTykqYmk7YmNbYmErMV09YU4rKGFKLWFOKSpiaisoYTYtYU4pKmJpO31lbHNle2JjW2JhXT1hMysoYTgtYTMpKigxLWJqKSsoYUstYTMpKigxLWJpKTtiY1tiYSsxXT1hMisoYTYtYTIpKigxLWJqKSsoYUotYTIpKigxLWJpKTt9fWVsc2V7dmFyIGFIPShhN3wwKTtpZihhSD09YVUpe2FIPWFVLTE7fXZhciBiaj0wLjUqKGE0LSgtMikpO3ZhciBiaT1hNy1hSDt2YXIgYmI9YUgvYVU7dmFyIGE5PShhSCsxKS9hVTt2YXIgYUs9YVJbKCgwKSsoYUgpKmExKSoyXTt2YXIgYUo9YVJbKCgwKSsoYUgpKmExKSoyKzFdO3ZhciBhMz1hUlsoKDApKyhhSCsxKSphMSkqMl07dmFyIGEyPWFSWygoMCkrKGFIKzEpKmExKSoyKzFdO3ZhciBhTz1hVC0yKmJsK2JiKmJmO3ZhciBhTj1hUy0yKmJrK2JiKmJlO3ZhciBhOD1hVC0yKmJsK2E5KmJmO3ZhciBhNj1hUy0yKmJrK2E5KmJlO2lmKGJqK2JpPD0xKXtiY1tiYV09YU8rKGFLLWFPKSpiaisoYTgtYU8pKmJpO2JjW2JhKzFdPWFOKyhhSi1hTikqYmorKGE2LWFOKSpiaTt9ZWxzZXtiY1tiYV09YTMrKGE4LWEzKSooMS1iaikrKGFLLWEzKSooMS1iaSk7YmNbYmErMV09YTIrKGE2LWEyKSooMS1iaikrKGFKLWEyKSooMS1iaSk7fX19fWVsc2V7aWYoMTw9YTQpe2lmKGFYPD0wKXt2YXIgYTg9YVJbKChhUSkrKDApKmExKSoyXTt2YXIgYTY9YVJbKChhUSkrKDApKmExKSoyKzFdO3ZhciBhMz1hVCszKmJsO3ZhciBhMj1hUyszKmJrO3ZhciBhTz1hVCsxKmJsLTIqYmY7dmFyIGFOPWFTKzEqYmstMipiZTt2YXIgYUs9YVQrMypibC0yKmJmO3ZhciBhSj1hUyszKmJrLTIqYmU7dmFyIGJqPTAuNSooYTQtKDEpKTt2YXIgYmk9MC41KihhWC0oLTIpKTtpZihiaitiaTw9MSl7YmNbYmFdPWFPKyhhSy1hTykqYmorKGE4LWFPKSpiaTtiY1tiYSsxXT1hTisoYUotYU4pKmJqKyhhNi1hTikqYmk7fWVsc2V7YmNbYmFdPWEzKyhhOC1hMykqKDEtYmopKyhhSy1hMykqKDEtYmkpO2JjW2JhKzFdPWEyKyhhNi1hMikqKDEtYmopKyhhSi1hMikqKDEtYmkpO319ZWxzZXtpZihhWD49MSl7dmFyIGFPPWFSWygoYVEpKyhhVSkqYTEpKjJdO3ZhciBhTj1hUlsoKGFRKSsoYVUpKmExKSoyKzFdO3ZhciBhSz1hVCszKmJsKzEqYmY7dmFyIGFKPWFTKzMqYmsrMSpiZTt2YXIgYTg9YVQrMSpibCszKmJmO3ZhciBhNj1hUysxKmJrKzMqYmU7dmFyIGEzPWFUKzMqYmwrMypiZjt2YXIgYTI9YVMrMypiayszKmJlO3ZhciBiaj0wLjUqKGE0LSgxKSk7dmFyIGJpPTAuNSooYVgtKDEpKTtpZihiaitiaTw9MSl7YmNbYmFdPWFPKyhhSy1hTykqYmorKGE4LWFPKSpiaTtiY1tiYSsxXT1hTisoYUotYU4pKmJqKyhhNi1hTikqYmk7fWVsc2V7YmNbYmFdPWEzKyhhOC1hMykqKDEtYmopKyhhSy1hMykqKDEtYmkpO2JjW2JhKzFdPWEyKyhhNi1hMikqKDEtYmopKyhhSi1hMikqKDEtYmkpO319ZWxzZXt2YXIgYUg9KGE3fDApO2lmKGFIPT1hVSl7YUg9YVUtMTt9dmFyIGJqPTAuNSooYTQtKDEpKTt2YXIgYmk9YTctYUg7dmFyIGJiPWFIL2FVO3ZhciBhOT0oYUgrMSkvYVU7dmFyIGFPPWFSWygoYVEpKyhhSCkqYTEpKjJdO3ZhciBhTj1hUlsoKGFRKSsoYUgpKmExKSoyKzFdO3ZhciBhOD1hUlsoKGFRKSsoYUgrMSkqYTEpKjJdO3ZhciBhNj1hUlsoKGFRKSsoYUgrMSkqYTEpKjIrMV07dmFyIGFLPWFUKzMqYmwrYmIqYmY7dmFyIGFKPWFTKzMqYmsrYmIqYmU7dmFyIGEzPWFUKzMqYmwrYTkqYmY7dmFyIGEyPWFTKzMqYmsrYTkqYmU7aWYoYmorYmk8PTEpe2JjW2JhXT1hTysoYUstYU8pKmJqKyhhOC1hTykqYmk7YmNbYmErMV09YU4rKGFKLWFOKSpiaisoYTYtYU4pKmJpO31lbHNle2JjW2JhXT1hMysoYTgtYTMpKigxLWJqKSsoYUstYTMpKigxLWJpKTtiY1tiYSsxXT1hMisoYTYtYTIpKigxLWJqKSsoYUotYTIpKigxLWJpKTt9fX19ZWxzZXtpZihhWDw9MCl7dmFyIGFZPShiZHwwKTtpZihhWT09YVEpe2FZPWFRLTE7fXZhciBiaj1iZC1hWTt2YXIgYmk9MC41KihhWC0oLTIpKTt2YXIgYnA9YVkvYVE7dmFyIGJvPShhWSsxKS9hUTt2YXIgYTg9YVJbKChhWSkrKDApKmExKSoyXTt2YXIgYTY9YVJbKChhWSkrKDApKmExKSoyKzFdO3ZhciBhMz1hUlsoKGFZKzEpKygwKSphMSkqMl07dmFyIGEyPWFSWygoYVkrMSkrKDApKmExKSoyKzFdO3ZhciBhTz1hVCticCpibC0yKmJmO3ZhciBhTj1hUyticCpiay0yKmJlO3ZhciBhSz1hVCtibypibC0yKmJmO3ZhciBhSj1hUytibypiay0yKmJlO2lmKGJqK2JpPD0xKXtiY1tiYV09YU8rKGFLLWFPKSpiaisoYTgtYU8pKmJpO2JjW2JhKzFdPWFOKyhhSi1hTikqYmorKGE2LWFOKSpiaTt9ZWxzZXtiY1tiYV09YTMrKGE4LWEzKSooMS1iaikrKGFLLWEzKSooMS1iaSk7YmNbYmErMV09YTIrKGE2LWEyKSooMS1iaikrKGFKLWEyKSooMS1iaSk7fX1lbHNle2lmKGFYPj0xKXt2YXIgYVk9KGJkfDApO2lmKGFZPT1hUSl7YVk9YVEtMTt9dmFyIGJqPWJkLWFZO3ZhciBiaT0wLjUqKGFYLSgxKSk7dmFyIGJwPWFZL2FRO3ZhciBibz0oYVkrMSkvYVE7dmFyIGFPPWFSWygoYVkpKyhhVSkqYTEpKjJdO3ZhciBhTj1hUlsoKGFZKSsoYVUpKmExKSoyKzFdO3ZhciBhSz1hUlsoKGFZKzEpKyhhVSkqYTEpKjJdO3ZhciBhSj1hUlsoKGFZKzEpKyhhVSkqYTEpKjIrMV07dmFyIGE4PWFUK2JwKmJsKzMqYmY7dmFyIGE2PWFTK2JwKmJrKzMqYmU7dmFyIGEzPWFUK2JvKmJsKzMqYmY7dmFyIGEyPWFTK2JvKmJrKzMqYmU7aWYoYmorYmk8PTEpe2JjW2JhXT1hTysoYUstYU8pKmJqKyhhOC1hTykqYmk7YmNbYmErMV09YU4rKGFKLWFOKSpiaisoYTYtYU4pKmJpO31lbHNle2JjW2JhXT1hMysoYTgtYTMpKigxLWJqKSsoYUstYTMpKigxLWJpKTtiY1tiYSsxXT1hMisoYTYtYTIpKigxLWJqKSsoYUotYTIpKigxLWJpKTt9fWVsc2V7U3lzdGVtLmVyci5wcmludGYoXCJfJGxpIGNhbGMgOiAlLjRmICwgJS40Zlx0XHRcdFx0XHRAQEJEQm94R3JpZFxcblwiLGE0LGFYKTt9fX19fWVsc2V7YmNbYmFdPWFUK2E0KmJsK2FYKmJmO2JjW2JhKzFdPWFTK2E0KmJrK2FYKmJlO319ZWxzZXtibj1iZC0oYmR8MCk7Ym09YTctKGE3fDApO2FWPTIqKChiZHwwKSsoKGE3fDApKSooYVErMSkpO2lmKGJuK2JtPDEpe2JjW2JhXT1hUlthVl0qKDEtYm4tYm0pK2FSW2FWKzJdKmJuK2FSW2FWKzIqKGFRKzEpXSpibTtiY1tiYSsxXT1hUlthVisxXSooMS1ibi1ibSkrYVJbYVYrM10qYm4rYVJbYVYrMiooYVErMSkrMV0qYm07fWVsc2V7YmNbYmFdPWFSW2FWKzIqKGFRKzEpKzJdKihibi0xK2JtKSthUlthVisyKihhUSsxKV0qKDEtYm4pK2FSW2FWKzJdKigxLWJtKTtiY1tiYSsxXT1hUlthVisyKihhUSsxKSszXSooYm4tMStibSkrYVJbYVYrMiooYVErMSkrMV0qKDEtYm4pK2FSW2FWKzNdKigxLWJtKTt9fX19O0UucHJvdG90eXBlLnRyYW5zZm9ybVBvaW50c19zZGsxPWZ1bmN0aW9uKGFKLGFSLGFMLGEwLGFVLGFQLGFaKXt2YXIgYUg9YVI7dmFyIGFPLGFOO3ZhciBhTT10aGlzLl8kbzt2YXIgYVE9dGhpcy5fJEE7dmFyIGFJPWFVKmFaO3ZhciBhUyxhWTt2YXIgYVY7dmFyIGFYLGFXO3ZhciBhVD0oYUguXyRociE9bnVsbCk/YUguXyRocjphSC5fJENyO2Zvcih2YXIgYUs9YVA7YUs8YUk7YUsrPWFaKXtpZihRLl8kdHMpe2FPPWFMW2FLXTthTj1hTFthSysxXTtpZihhTzwwKXthTz0wO31lbHNle2lmKGFPPjEpe2FPPTE7fX1pZihhTjwwKXthTj0wO31lbHNle2lmKGFOPjEpe2FOPTE7fX1hTyo9YU07YU4qPWFRO2FTPShhT3wwKTthWT0oYU58MCk7aWYoYVM+YU0tMSl7YVM9YU0tMTt9aWYoYVk+YVEtMSl7YVk9YVEtMTt9YVg9YU8tYVM7YVc9YU4tYVk7YVY9MiooYVMrYVkqKGFNKzEpKTt9ZWxzZXthTz1hTFthS10qYU07YU49YUxbYUsrMV0qYVE7YVg9YU8tKGFPfDApO2FXPWFOLShhTnwwKTthVj0yKigoYU98MCkrKGFOfDApKihhTSsxKSk7fWlmKGFYK2FXPDEpe2EwW2FLXT1hVFthVl0qKDEtYVgtYVcpK2FUW2FWKzJdKmFYK2FUW2FWKzIqKGFNKzEpXSphVzthMFthSysxXT1hVFthVisxXSooMS1hWC1hVykrYVRbYVYrM10qYVgrYVRbYVYrMiooYU0rMSkrMV0qYVc7fWVsc2V7YTBbYUtdPWFUW2FWKzIqKGFNKzEpKzJdKihhWC0xK2FXKSthVFthVisyKihhTSsxKV0qKDEtYVgpK2FUW2FWKzJdKigxLWFXKTthMFthSysxXT1hVFthVisyKihhTSsxKSszXSooYVgtMSthVykrYVRbYVYrMiooYU0rMSkrMV0qKDEtYVgpK2FUW2FWKzNdKigxLWFXKTt9fX07RS5wcm90b3R5cGUuXyRWVD1mdW5jdGlvbigpe3JldHVybih0aGlzLl8kbysxKSoodGhpcy5fJEErMSk7fTtFLnByb3RvdHlwZS5nZXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGMuXyRfYjt9O2Z1bmN0aW9uIEgoYUgpe0IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhSCk7dGhpcy5fJDhyPWMuXyR1cjt0aGlzLl8kQ3I9bnVsbDt0aGlzLl8kaHI9bnVsbDt9SC5wcm90b3R5cGU9bmV3IEIoKTtmdW5jdGlvbiBzKCl7aWYoail7cmV0dXJuO310aGlzLnZpc2libGU9dHJ1ZTt0aGlzLl8kZzA9ZmFsc2U7dGhpcy5fJE5MPW51bGw7dGhpcy5fJDNTPW51bGw7dGhpcy5fJGFTPW51bGw7cy5fJDQyKys7fXMuXyQ0Mj0wO3MucHJvdG90eXBlLl8kelA9ZnVuY3Rpb24oKXt0aGlzLl8kM1M9bmV3IEFycmF5KCk7dGhpcy5fJGFTPW5ldyBBcnJheSgpO307cy5wcm90b3R5cGUuXyRGMD1mdW5jdGlvbihhSCl7dGhpcy5fJGcwPWFILl8kOEwoKTt0aGlzLnZpc2libGU9YUguXyQ4TCgpO3RoaXMuXyROTD1hSC5fJG5QKCk7dGhpcy5fJDNTPWFILl8kblAoKTt0aGlzLl8kYVM9YUguXyRuUCgpO307cy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhSSl7dmFyIGFIPW5ldyBhaih0aGlzKTthSC5zZXRQYXJ0c09wYWNpdHkodGhpcy5pc1Zpc2libGUoKT8xOjApO3JldHVybiBhSDt9O3MucHJvdG90eXBlLl8kNm89ZnVuY3Rpb24oYUgpe2lmKHRoaXMuXyQzUz09bnVsbCl7dGhyb3cgbmV3IEVycm9yKFwiXyQzUyBfJDYgXyRXb0BfJDZvXCIpO310aGlzLl8kM1MucHVzaChhSCk7fTtzLnByb3RvdHlwZS5fJDNvPWZ1bmN0aW9uKGFIKXtpZih0aGlzLl8kYVM9PW51bGwpe3Rocm93IG5ldyBFcnJvcihcIl8kYVMgXyQ2IF8kV29AXyQzb1wiKTt9dGhpcy5fJGFTLnB1c2goYUgpO307cy5wcm90b3R5cGUuXyRabz1mdW5jdGlvbihhSCl7dGhpcy5fJDNTPWFIO307cy5wcm90b3R5cGUuXyR4bz1mdW5jdGlvbihhSCl7dGhpcy5fJGFTPWFIO307cy5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlzaWJsZTt9O3MucHJvdG90eXBlLl8kdUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJGcwO307cy5wcm90b3R5cGUuXyRLUD1mdW5jdGlvbihhSCl7dGhpcy52aXNpYmxlPWFIO307cy5wcm90b3R5cGUuXyRFVD1mdW5jdGlvbihhSCl7dGhpcy5fJGcwPWFIO307cy5wcm90b3R5cGUuZ2V0QmFzZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJDNTO307cy5wcm90b3R5cGUuZ2V0RHJhd0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJGFTO307cy5wcm90b3R5cGUuXyRwMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kTkw7fTtzLnByb3RvdHlwZS5fJG9iPWZ1bmN0aW9uKGFIKXt0aGlzLl8kTkw9YUg7fTtzLnByb3RvdHlwZS5nZXRQYXJ0c0lEPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyROTDt9O3MucHJvdG90eXBlLl8kTVA9ZnVuY3Rpb24oYUgpe3RoaXMuXyROTD1hSDt9O2Z1bmN0aW9uIGFqKGFIKXt0aGlzLl8kVlM9bnVsbDt0aGlzLl8kZTA9bnVsbDt0aGlzLl8kZTA9YUg7fWFqLnByb3RvdHlwZT1uZXcgUygpO2FqLnByb3RvdHlwZS5nZXRQYXJ0c09wYWNpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJFZTO307YWoucHJvdG90eXBlLnNldFBhcnRzT3BhY2l0eT1mdW5jdGlvbihhSCl7dGhpcy5fJFZTPWFIO307ZnVuY3Rpb24gYWsoYUgpe2lmKGope3JldHVybjt9dGhpcy5pZD1hSDt9YWsuXyRMNz1mdW5jdGlvbigpe3ouXyQyNygpO24uXyQyNygpO1ouXyQyNygpO2kuXyQyNygpO307YWsucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWQ7fTtmdW5jdGlvbiBEKCl7fUQucHJvdG90eXBlLl8kRjA9ZnVuY3Rpb24oYUgpe307ZnVuY3Rpb24gYW4oKXtpZihqKXtyZXR1cm47fXRoaXMuXyQ0Uz1udWxsO31hbi5wcm90b3R5cGUuXyQxcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kNFM7fTthbi5wcm90b3R5cGUuXyR6UD1mdW5jdGlvbigpe3RoaXMuXyQ0Uz1uZXcgQXJyYXkoKTt9O2FuLnByb3RvdHlwZS5fJEYwPWZ1bmN0aW9uKGFIKXt0aGlzLl8kNFM9YUguXyRuUCgpO307YW4ucHJvdG90eXBlLl8kS3M9ZnVuY3Rpb24oYUgpe3RoaXMuXyQ0Uy5wdXNoKGFIKTt9O2Z1bmN0aW9uIGF1KGFILGFJKXt0aGlzLmNhbnZhcz1hSDt0aGlzLmNvbnRleHQ9YUk7dGhpcy52aWV3cG9ydD1uZXcgQXJyYXkoMCwwLGFILndpZHRoLGFILmhlaWdodCk7dGhpcy5fJDZyPTE7dGhpcy5fJHhQPTA7dGhpcy5fJDNyPTE7dGhpcy5fJHVQPTA7dGhpcy5fJFFvPS0xO3RoaXMuY2FjaGVJbWFnZXM9e307fWF1LnRyPW5ldyBhbSgpO2F1Ll8kNTA9bmV3IGFtKCk7YXUuXyRUaT1uZXcgQXJyYXkoMCwwKTthdS5fJFBpPW5ldyBBcnJheSgwLDApO2F1Ll8kQj1uZXcgQXJyYXkoMCwwKTthdS5wcm90b3R5cGUuXyRsUD1mdW5jdGlvbihhSSxhSyxhSixhSCl7dGhpcy52aWV3cG9ydD1uZXcgQXJyYXkoYUksYUssYUosYUgpO307YXUucHJvdG90eXBlLl8kYkw9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuc2F2ZSgpO3ZhciBhSD10aGlzLnZpZXdwb3J0O2lmKGFIIT1udWxsKXt0aGlzLmNvbnRleHQuYmVnaW5QYXRoKCk7dGhpcy5jb250ZXh0Ll8kTGkoYUhbMF0sYUhbMV0sYUhbMl0sYUhbM10pO3RoaXMuY29udGV4dC5jbGlwKCk7fX07YXUucHJvdG90eXBlLl8kZWk9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQucmVzdG9yZSgpO307YXUucHJvdG90eXBlLmRyYXdFbGVtZW50cz1mdW5jdGlvbihiYyxibSxhWCxhSixiQSxhTSxibCxieil7dHJ5e2lmKGJBIT10aGlzLl8kUW8pe3RoaXMuXyRRbz1iQTt0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGE9YkE7fXZhciBhMj1ibS5sZW5ndGg7dmFyIGFQPWJjLndpZHRoO3ZhciBhNT1iYy5oZWlnaHQ7dmFyIGJFPXRoaXMuY29udGV4dDt2YXIgYTc9dGhpcy5fJHhQO3ZhciBhNj10aGlzLl8kdVA7dmFyIGExPXRoaXMuXyQ2cjt2YXIgYVo9dGhpcy5fJDNyO3ZhciBiRD1hdS50cjt2YXIgYUk9YXUuXyRUaTt2YXIgYUg9YXUuXyRQaTt2YXIgYnU9YXUuXyRCO2Zvcih2YXIgYnk9MDtieTxhMjtieSs9Myl7YkUuc2F2ZSgpO3ZhciBhVz1ibVtieV07dmFyIGFWPWJtW2J5KzFdO3ZhciBhVD1ibVtieSsyXTt2YXIgYUw9YTcrYTEqYVhbYVcqMl07dmFyIGFLPWE2K2FaKmFYW2FXKjIrMV07dmFyIGJyPWE3K2ExKmFYW2FWKjJdO3ZhciBicD1hNithWiphWFthVioyKzFdO3ZhciBiaD1hNythMSphWFthVCoyXTt2YXIgYmY9YTYrYVoqYVhbYVQqMisxXTtpZihibCl7YmwuXyRQUyhhTCxhSyxidSk7YUw9YnVbMF07YUs9YnVbMV07YmwuXyRQUyhicixicCxidSk7YnI9YnVbMF07YnA9YnVbMV07YmwuXyRQUyhiaCxiZixidSk7Ymg9YnVbMF07YmY9YnVbMV07fXZhciBhUz1hUCphSlthVyoyXTt2YXIgYVE9YTUtYTUqYUpbYVcqMisxXTt2YXIgYng9YVAqYUpbYVYqMl07dmFyIGJ3PWE1LWE1KmFKW2FWKjIrMV07dmFyIGJrPWFQKmFKW2FUKjJdO3ZhciBiaj1hNS1hNSphSlthVCoyKzFdO3ZhciBhMz1NYXRoLmF0YW4yKGJ3LWFRLGJ4LWFTKTt2YXIgYTA9TWF0aC5hdGFuMihicC1hSyxici1hTCk7dmFyIGFPPWJyLWFMO3ZhciBhTj1icC1hSzt2YXIgYmk9TWF0aC5zcXJ0KGFPKmFPK2FOKmFOKTt2YXIgYVU9YngtYVM7dmFyIGFSPWJ3LWFRO3ZhciBidD1NYXRoLnNxcnQoYVUqYVUrYVIqYVIpO3ZhciBidj1iaS9idDthZC5fJG5pKGJrLGJqLGFTLGFRLChieC1hUyksKGJ3LWFRKSwtKGJ3LWFRKSwoYngtYVMpLGFJKTthZC5fJG5pKGJoLGJmLGFMLGFLLChici1hTCksKGJwLWFLKSwtKGJwLWFLKSwoYnItYUwpLGFIKTt2YXIgYVk9KGFIWzBdLWFJWzBdKS9hSVsxXTt2YXIgYnM9TWF0aC5taW4oYVMsYngsYmspO3ZhciBiZz1NYXRoLm1heChhUyxieCxiayk7dmFyIGJxPU1hdGgubWluKGFRLGJ3LGJqKTt2YXIgYmU9TWF0aC5tYXgoYVEsYncsYmopO3ZhciBibz1NYXRoLmZsb29yKGJzKTt2YXIgYmI9TWF0aC5mbG9vcihicSk7dmFyIGE0PU1hdGguY2VpbChiZyk7dmFyIGJDPU1hdGguY2VpbChiZSk7YkQuaWRlbnRpdHkoKTtiRC50cmFuc2xhdGUoYUwsYUspO2JELnJvdGF0ZShhMCk7YkQuc2NhbGUoMSxhSFsxXS9hSVsxXSk7YkQuc2hlYXIoYVksMCk7YkQuc2NhbGUoYnYsYnYpO2JELnJvdGF0ZSgtYTMpO2JELnRyYW5zbGF0ZSgtYVMsLWFRKTtiRC5zZXRDb250ZXh0KGJFKTt2YXIgYTg9dHJ1ZTt2YXIgYTk9MS4yO2lmKCFhTSl7YU09YTg/YTk6MDt9aWYoUS5JR05PUkVfRVhQQU5EKXthTT0wO31pZihRLlVTRV9DQUNIRURfUE9MWUdPTl9JTUFHRSl7dmFyIGJkPWJ6Ll8kZTA7YmQuZ2xfY2FjaGVJbWFnZT1iZC5nbF9jYWNoZUltYWdlfHx7fTtpZighYmQuZ2xfY2FjaGVJbWFnZVtieV0pe3ZhciBibj1hdS5jcmVhdGVDYW52YXMoYTQtYm8sYkMtYmIpO1EuREVCVUdfREFUQS5MREdMX0NBTlZBU19NQj1RLkRFQlVHX0RBVEEuTERHTF9DQU5WQVNfTUJ8fDA7US5ERUJVR19EQVRBLkxER0xfQ0FOVkFTX01CKz0oYTQtYm8pKihiQy1iYikqNDt2YXIgYmE9Ym4uZ2V0Q29udGV4dChcIjJkXCIpO2JhLnRyYW5zbGF0ZSgtYm8sLWJiKTthdS5jbGlwKGJhLGJELGFNLGJpLGFTLGFRLGJ4LGJ3LGJrLGJqLGFMLGFLLGJyLGJwLGJoLGJmKTtiYS5kcmF3SW1hZ2UoYmMsMCwwKTtiZC5nbF9jYWNoZUltYWdlW2J5XT17Y2FjaGVDYW52YXM6Ym4sY2FjaGVDb250ZXh0OmJhfTt9YkUuZHJhd0ltYWdlKGJkLmdsX2NhY2hlSW1hZ2VbYnldW1wiY2FjaGVDYW52YXNcIl0sYm8sYmIpO31lbHNle2lmKCFRLklHTk9SRV9DTElQKXthdS5jbGlwKGJFLGJELGFNLGJpLGFTLGFRLGJ4LGJ3LGJrLGJqLGFMLGFLLGJyLGJwLGJoLGJmKTt9aWYoUS5VU0VfQURKVVNUX1RSQU5TTEFUSU9OKXticz0wO2JnPWFQO2JxPTA7YmU9YTU7fWJFLmRyYXdJbWFnZShiYyxicyxicSxiZy1icyxiZS1icSxicyxicSxiZy1icyxiZS1icSk7fWJFLnJlc3RvcmUoKTt9fWNhdGNoKGJCKXtxLl8kUmIoYkIpO319O2F1LmNsaXA9ZnVuY3Rpb24oYUssYUosYVYsYUksYU0sYUwsYVUsYVQsYVEsYVAsYU8sYU4sYUgsYVcsYVMsYVIpe2lmKGFWPjAuMDIpe2F1LmV4cGFuZENsaXAoYUssYUosYVYsYUksYU8sYU4sYUgsYVcsYVMsYVIpO31lbHNle2F1LmNsaXBXaXRoVHJhbnNmb3JtKGFLLG51bGwsYU0sYUwsYVUsYVQsYVEsYVApO319O2F1LmV4cGFuZENsaXA9ZnVuY3Rpb24oYVYsYmcsYUssYTMsYUosYUksYmUsYmEsYVosYVgpe3ZhciBhUD1iZS1hSjt2YXIgYU89YmEtYUk7dmFyIGJpPWFaLWFKO3ZhciBiaD1hWC1hSTt2YXIgYmo9YVAqYmgtYU8qYmk+MD9hSzotYUs7dmFyIGFMPS1hTzt2YXIgYUg9YVA7dmFyIGJjPWFaLWJlO3ZhciBhOD1hWC1iYTt2YXIgYTc9LWE4O3ZhciBhNj1iYzt2YXIgYVE9TWF0aC5zcXJ0KGJjKmJjK2E4KmE4KTt2YXIgYmY9LWJoO3ZhciBiYj1iaTt2YXIgYTI9TWF0aC5zcXJ0KGJpKmJpK2JoKmJoKTt2YXIgYmQ9YUotYmoqYUwvYTM7dmFyIGE5PWFJLWJqKmFIL2EzO3ZhciBhWT1iZS1iaiphTC9hMzt2YXIgYVc9YmEtYmoqYUgvYTM7dmFyIGE1PWJlLWJqKmE3L2FRO3ZhciBhND1iYS1iaiphNi9hUTt2YXIgYVM9YVotYmoqYTcvYVE7dmFyIGFSPWFYLWJqKmE2L2FRO3ZhciBhTj1hSitiaipiZi9hMjt2YXIgYU09YUkrYmoqYmIvYTI7dmFyIGExPWFaK2JqKmJmL2EyO3ZhciBhMD1hWCtiaipiYi9hMjt2YXIgYVU9YXUuXyQ1MDt2YXIgYVQ9YmcuXyRQMihhVSk7aWYoYVQ9PW51bGwpe3JldHVybiBmYWxzZTt9YXUuY2xpcFdpdGhUcmFuc2Zvcm0oYVYsYVUsYmQsYTksYVksYVcsYTUsYTQsYVMsYVIsYTEsYTAsYU4sYU0pO3JldHVybiB0cnVlO307YXUuY2xpcFdpdGhUcmFuc2Zvcm09ZnVuY3Rpb24oYUgsYUksYVMsYU4sYVEsYUssYVAsYUope2lmKGFyZ3VtZW50cy5sZW5ndGg8KDErMyoyKSl7cS5fJGxpKFwiZXJyIDogQExER0wuY2xpcCgpXCIpO3JldHVybjt9aWYoIShhcmd1bWVudHNbMV0gaW5zdGFuY2VvZiBhbSkpe3EuXyRsaShcImVyciA6IGFbMF0gaXMgXyQ2IExEVHJhbnNmb3JtIEBMREdMLmNsaXAoKVwiKTtyZXR1cm47fXZhciBhTT1hdS5fJEI7dmFyIGFPPWFJO3ZhciBhUj1hcmd1bWVudHM7YUguYmVnaW5QYXRoKCk7aWYoYU8pe2FPLl8kUFMoYVJbMl0sYVJbM10sYU0pO2FILm1vdmVUbyhhTVswXSxhTVsxXSk7Zm9yKHZhciBhTD00O2FMPGFSLmxlbmd0aDthTCs9Mil7YU8uXyRQUyhhUlthTF0sYVJbYUwrMV0sYU0pO2FILmxpbmVUbyhhTVswXSxhTVsxXSk7fX1lbHNle2FILm1vdmVUbyhhUlsyXSxhUlszXSk7Zm9yKHZhciBhTD00O2FMPGFSLmxlbmd0aDthTCs9Mil7YUgubGluZVRvKGFSW2FMXSxhUlthTCsxXSk7fX1hSC5jbGlwKCk7fTthdS5jcmVhdGVDYW52YXM9ZnVuY3Rpb24oYUgsYUope3ZhciBhST1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2FJLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsYUgpO2FJLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLGFKKTtpZighYUkpe3EuXyRsaShcImVyciA6IFwiK2FJKTt9cmV0dXJuIGFJO307YXUuZHVtcFZhbHVlcz1mdW5jdGlvbigpe3ZhciBhST1cIlwiO2Zvcih2YXIgYUg9MDthSDxhcmd1bWVudHMubGVuZ3RoO2FIKyspe2FJKz1cIltcIithSCtcIl09IFwiK2FyZ3VtZW50c1thSF0udG9GaXhlZCgzKStcIiAsIFwiO31jb25zb2xlLmxvZyhhSSk7fTtmdW5jdGlvbiBmKCl7aWYoail7cmV0dXJuO310aGlzLl8kVFQ9bnVsbDt0aGlzLl8kTFQ9bnVsbDt0aGlzLl8kRlM9bnVsbDt0aGlzLl8kd0w9bnVsbDt9Zi5wcm90b3R5cGUuXyRGMD1mdW5jdGlvbihhSCl7dGhpcy5fJFRUPWFILl8kX1QoKTt0aGlzLl8kTFQ9YUguXyRfVCgpO3RoaXMuXyRGUz1hSC5fJF9UKCk7dGhpcy5fJHdMPWFILl8kblAoKTt9O2YucHJvdG90eXBlLmdldE1pblZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRUVDt9O2YucHJvdG90eXBlLmdldE1heFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRMVDt9O2YucHJvdG90eXBlLmdldERlZmF1bHRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kRlM7fTtmLnByb3RvdHlwZS5nZXRQYXJhbUlEPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyR3TDt9O2Z1bmN0aW9uIEIoYUgpe2lmKGope3JldHVybjt9dGhpcy5fJGUwPW51bGw7dGhpcy5fJElQPW51bGw7dGhpcy5fJEpTPWZhbHNlO3RoaXMuXyRBVD10cnVlO3RoaXMuXyRlMD1hSDt0aGlzLnRvdGFsU2NhbGU9MTt0aGlzLl8kN3M9MTt0aGlzLnRvdGFsT3BhY2l0eT0xO31CLnByb3RvdHlwZS5fJHlvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRBVCYmIXRoaXMuXyRKUzt9O0IucHJvdG90eXBlLl8kaFM9ZnVuY3Rpb24oYUgpe3RoaXMuXyRBVD1hSDt9O0IucHJvdG90eXBlLl8kR1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJGUwO307Qi5wcm90b3R5cGUuXyRsMj1mdW5jdGlvbihhSCl7dGhpcy5fJElQPWFIO307Qi5wcm90b3R5cGUuZ2V0UGFydHNJbmRleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kSVA7fTtCLnByb3RvdHlwZS5fJHgyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRKUzt9O0IucHJvdG90eXBlLl8kSWI9ZnVuY3Rpb24oYUgpe3RoaXMuXyRKUz1hSDt9O0IucHJvdG90eXBlLmdldFRvdGFsU2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b3RhbFNjYWxlO307Qi5wcm90b3R5cGUuc2V0VG90YWxTY2FsZV9ub3RGb3JDbGllbnQ9ZnVuY3Rpb24oYUgpe3RoaXMudG90YWxTY2FsZT1hSDt9O0IucHJvdG90eXBlLmdldEludGVycG9sYXRlZE9wYWNpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJDdzO307Qi5wcm90b3R5cGUuc2V0SW50ZXJwb2xhdGVkT3BhY2l0eT1mdW5jdGlvbihhSCl7dGhpcy5fJDdzPWFIO307Qi5wcm90b3R5cGUuZ2V0VG90YWxPcGFjaXR5PWZ1bmN0aW9uKGFIKXtyZXR1cm4gdGhpcy50b3RhbE9wYWNpdHk7fTtCLnByb3RvdHlwZS5zZXRUb3RhbE9wYWNpdHk9ZnVuY3Rpb24oYUgpe3RoaXMudG90YWxPcGFjaXR5PWFIO307ZnVuY3Rpb24gUSgpe31RLl8kMnM9XCIyLjEuMDBfMVwiO1EuXyRLcj0yMDEwMDEwMDA7US5fJHNQPXRydWU7US5fJHNvPXRydWU7US5fJGNiPWZhbHNlO1EuXyQzVD10cnVlO1EuXyRUcz10cnVlO1EuXyRmYj10cnVlO1EuXyR0cz10cnVlO1EuTDJEX0RFRk9STUVSX0VYVEVORD10cnVlO1EuXyRXYj1mYWxzZTtRLl8keXI9ZmFsc2U7US5fJFpzPWZhbHNlO1EuTDJEX05PX0VSUk9SPTA7US5fJGk3PTEwMDA7US5fJDlzPTEwMDE7US5fJGVzPTExMDA7US5fJHI3PTIwMDA7US5fJDA3PTIwMDE7US5fJGI3PTIwMDI7US5fJEg3PTQwMDA7US5MMkRfQ09MT1JfQkxFTkRfTU9ERV9NVUxUPTA7US5MMkRfQ09MT1JfQkxFTkRfTU9ERV9BREQ9MTtRLkwyRF9DT0xPUl9CTEVORF9NT0RFX0lOVEVSUE9MQVRFPTI7US5fJDZiPXRydWU7US5fJGNUPTA7US5jbGlwcGluZ01hc2tCdWZmZXJTaXplPTI1NjtRLmdsQ29udGV4dD1uZXcgQXJyYXkoKTtRLmZyYW1lQnVmZmVycz1uZXcgQXJyYXkoKTtRLmZUZXh0dXJlPW5ldyBBcnJheSgpO1EuSUdOT1JFX0NMSVA9ZmFsc2U7US5JR05PUkVfRVhQQU5EPWZhbHNlO1EuRVhQQU5EX1c9MjtRLlVTRV9BREpVU1RfVFJBTlNMQVRJT049dHJ1ZTtRLlVTRV9DQU5WQVNfVFJBTlNGT1JNPXRydWU7US5VU0VfQ0FDSEVEX1BPTFlHT05fSU1BR0U9ZmFsc2U7US5ERUJVR19EQVRBPXt9O1EuUFJPRklMRV9JT1NfU1BFRUQ9e1BST0ZJTEVfTkFNRTpcImlPUyBTcGVlZFwiLFVTRV9BREpVU1RfVFJBTlNMQVRJT046dHJ1ZSxVU0VfQ0FDSEVEX1BPTFlHT05fSU1BR0U6dHJ1ZSxFWFBBTkRfVzo0fTtRLlBST0ZJTEVfSU9TX1FVQUxJVFk9e1BST0ZJTEVfTkFNRTpcImlPUyBIaVFcIixVU0VfQURKVVNUX1RSQU5TTEFUSU9OOnRydWUsVVNFX0NBQ0hFRF9QT0xZR09OX0lNQUdFOmZhbHNlLEVYUEFORF9XOjJ9O1EuUFJPRklMRV9JT1NfREVGQVVMVD1RLlBST0ZJTEVfSU9TX1FVQUxJVFk7US5QUk9GSUxFX0FORFJPSUQ9e1BST0ZJTEVfTkFNRTpcIkFuZHJvaWRcIixVU0VfQURKVVNUX1RSQU5TTEFUSU9OOmZhbHNlLFVTRV9DQUNIRURfUE9MWUdPTl9JTUFHRTpmYWxzZSxFWFBBTkRfVzoyfTtRLlBST0ZJTEVfREVTS1RPUD17UFJPRklMRV9OQU1FOlwiRGVza3RvcFwiLFVTRV9BREpVU1RfVFJBTlNMQVRJT046ZmFsc2UsVVNFX0NBQ0hFRF9QT0xZR09OX0lNQUdFOmZhbHNlLEVYUEFORF9XOjJ9O1EuaW5pdFByb2ZpbGU9ZnVuY3Rpb24oKXtpZihyLmlzSU9TKCkpe1Euc2V0dXBQcm9maWxlKFEuUFJPRklMRV9JT1NfREVGQVVMVCk7fWVsc2V7aWYoci5pc0FuZHJvaWQoKSl7US5zZXR1cFByb2ZpbGUoUS5QUk9GSUxFX0FORFJPSUQpO31lbHNle1Euc2V0dXBQcm9maWxlKFEuUFJPRklMRV9ERVNLVE9QKTt9fX07US5zZXR1cFByb2ZpbGU9ZnVuY3Rpb24oYUksYUope2lmKHR5cGVvZiBhST09XCJudW1iZXJcIil7c3dpdGNoKGFJKXtjYXNlIDk5MDE6YUk9US5QUk9GSUxFX0lPU19TUEVFRDticmVhaztjYXNlIDk5MDI6YUk9US5QUk9GSUxFX0lPU19RVUFMSVRZO2JyZWFrO2Nhc2UgOTkwMzphST1RLlBST0ZJTEVfSU9TX0RFRkFVTFQ7YnJlYWs7Y2FzZSA5OTA0OmFJPVEuUFJPRklMRV9BTkRST0lEO2JyZWFrO2Nhc2UgOTkwNTphST1RLlBST0ZJTEVfREVTS1RPUDticmVhaztkZWZhdWx0OmFsZXJ0KFwicHJvZmlsZSBfJDYgXyRVaSA6IFwiK2FJKTticmVhazt9fWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7YUo9dHJ1ZTt9aWYoYUope2NvbnNvbGUubG9nKFwicHJvZmlsZSA6IFwiK2FJLlBST0ZJTEVfTkFNRSk7fWZvcih2YXIgYUggaW4gYUkpe1FbYUhdPWFJW2FIXTtpZihhSil7Y29uc29sZS5sb2coXCIgIFtcIithSCtcIl0gPSBcIithSVthSF0pO319fTtRLmluaXQ9ZnVuY3Rpb24oKXtpZihRLl8kNmIpe2NvbnNvbGUubG9nKFwiTGl2ZTJEICVzXCIsUS5fJDJzKTtRLl8kNmI9ZmFsc2U7dmFyIGFIPWZhbHNlO2FIPXRydWU7US5pbml0UHJvZmlsZSgpO319O1EuZ2V0VmVyc2lvblN0cj1mdW5jdGlvbigpe3JldHVybiBRLl8kMnM7fTtRLmdldFZlcnNpb25Obz1mdW5jdGlvbigpe3JldHVybiBRLl8kS3I7fTtRLl8kc1Q9ZnVuY3Rpb24oYUgpe1EuXyRjVD1hSDt9O1EuZ2V0RXJyb3I9ZnVuY3Rpb24oKXt2YXIgYUg9US5fJGNUO1EuXyRjVD0wO3JldHVybiBhSDt9O1EuZGlzcG9zZT1mdW5jdGlvbigpe1EuZ2xDb250ZXh0PVtdO1EuZnJhbWVCdWZmZXJzPVtdO1EuZlRleHR1cmU9W107fTtRLnNldEdMPWZ1bmN0aW9uKGFKLGFJKXt2YXIgYUg9YUl8fDA7US5nbENvbnRleHRbYUhdPWFKO307US5nZXRHTD1mdW5jdGlvbihhSCl7cmV0dXJuIFEuZ2xDb250ZXh0W2FIXTt9O1Euc2V0Q2xpcHBpbmdNYXNrQnVmZmVyU2l6ZT1mdW5jdGlvbihhSCl7US5jbGlwcGluZ01hc2tCdWZmZXJTaXplPWFIO307US5nZXRDbGlwcGluZ01hc2tCdWZmZXJTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIFEuY2xpcHBpbmdNYXNrQnVmZmVyU2l6ZTt9O1EuZGVsZXRlQnVmZmVyPWZ1bmN0aW9uKGFJKXt2YXIgYUg9US5nZXRHTChhSSk7YUguZGVsZXRlRnJhbWVidWZmZXIoUS5mcmFtZUJ1ZmZlcnNbYUldLmZyYW1lYnVmZmVyKTtkZWxldGUgUS5mcmFtZUJ1ZmZlcnNbYUldO2RlbGV0ZSBRLmdsQ29udGV4dFthSV07fTtmdW5jdGlvbiBBKCl7fUEuXyRyMj1mdW5jdGlvbihhSCl7aWYoYUg8MCl7cmV0dXJuIDA7fWVsc2V7aWYoYUg+MSl7cmV0dXJuIDE7fX1yZXR1cm4oMC41LTAuNSpNYXRoLmNvcyhhSCphQy5QSV9GKSk7fTtmdW5jdGlvbiBKKGFIKXtpZihqKXtyZXR1cm47fXRoaXMuXyRpYj1hSDt9Si5fJGZyPS0xO0oucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRpYjt9O2Z1bmN0aW9uIGIoKXtpZihqKXtyZXR1cm47fWEucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5fJExQPS0xO3RoaXMuXyRkMD0wO3RoaXMuXyRZbz0wO3RoaXMuXyRKUD1udWxsO3RoaXMuXyQ1UD1udWxsO3RoaXMuXyRCUD1udWxsO3RoaXMuXyRFbz1udWxsO3RoaXMuXyRRaT1udWxsO3RoaXMuXyQ2cz1iLl8kbXM7dGhpcy5jdWxsaW5nPXRydWU7dGhpcy5nbF9jYWNoZUltYWdlPW51bGw7dGhpcy5pbnN0YW5jZU5vPWIuXyQ0MisrO31iLnByb3RvdHlwZT1uZXcgYSgpO2IuXyQ0Mj0wO2IuXyRPcz0zMDtiLl8kbXM9MDtiLl8kbnM9MTtiLl8kX3M9MjtiLl8kZ1Q9bmV3IEFycmF5KCk7Yi5wcm90b3R5cGUuXyRfUz1mdW5jdGlvbihhSCl7dGhpcy5fJExQPWFIO307Yi5wcm90b3R5cGUuZ2V0VGV4dHVyZU5vPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRMUDt9O2IucHJvdG90eXBlLl8kWkw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJFFpO307Yi5wcm90b3R5cGUuXyRIMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kSlA7fTtiLnByb3RvdHlwZS5nZXROdW1Qb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJGQwO307Yi5wcm90b3R5cGUuZ2V0VHlwZT1mdW5jdGlvbigpe3JldHVybiBhLl8kd2I7fTtiLnByb3RvdHlwZS5fJEIyPWZ1bmN0aW9uKGFMLGFILGFPKXt2YXIgYU09YUg7dmFyIGFOPShhTS5fJGhyIT1udWxsKT9hTS5fJGhyOmFNLl8kQ3I7dmFyIGFLPWF3Ll8kZG87c3dpdGNoKGFLKXtkZWZhdWx0OmNhc2UgYXcuXyRNczp0aHJvdyBuZXcgRXJyb3IoXCJfJEwgXyRybyBcIik7Y2FzZSBhdy5fJFFzOmZvcih2YXIgYUo9dGhpcy5fJGQwLTE7YUo+PTA7LS1hSil7dmFyIGFJPWFKKmF3Ll8kTm87YU5bYUkrNF09YU87fWJyZWFrO319O2IucHJvdG90eXBlLl8kelA9ZnVuY3Rpb24oKXt0aGlzLl8kR1M9bmV3IGcoKTt0aGlzLl8kR1MuXyR6UCgpO307Yi5wcm90b3R5cGUuXyRGMD1mdW5jdGlvbihhSyl7YS5wcm90b3R5cGUuXyRGMC5jYWxsKHRoaXMsYUspO3RoaXMuXyRMUD1hSy5fJDZMKCk7dGhpcy5fJGQwPWFLLl8kNkwoKTt0aGlzLl8kWW89YUsuXyQ2TCgpO3ZhciBhSD1hSy5fJG5QKCk7dGhpcy5fJEJQPW5ldyBJbnQxNkFycmF5KHRoaXMuXyRZbyozKTtmb3IodmFyIGFKPXRoaXMuXyRZbyozLTE7YUo+PTA7LS1hSil7dGhpcy5fJEJQW2FKXT1hSFthSl07fXRoaXMuXyRFbz1hSy5fJG5QKCk7dGhpcy5fJFFpPWFLLl8kblAoKTtpZihhSy5nZXRGb3JtYXRWZXJzaW9uKCk+PWF5Ll8kczcpe3RoaXMuXyRKUD1hSy5fJDZMKCk7aWYodGhpcy5fJEpQIT0wKXtpZigodGhpcy5fJEpQJjEpIT0wKXt2YXIgYUk9YUsuXyQ2TCgpO2lmKHRoaXMuXyQ1UD09bnVsbCl7dGhpcy5fJDVQPW5ldyBPYmplY3QoKTt9dGhpcy5fJDVQLl8kSGI9cGFyc2VJbnQoYUkpO31pZigodGhpcy5fJEpQJmIuXyRPcykhPTApe3RoaXMuXyQ2cz0odGhpcy5fJEpQJmIuXyRPcyk+PjE7fWVsc2V7dGhpcy5fJDZzPWIuXyRtczt9aWYoKHRoaXMuXyRKUCYzMikhPTApe3RoaXMuY3VsbGluZz1mYWxzZTt9fX1lbHNle3RoaXMuXyRKUD0wO319O2IucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYUwpe3ZhciBhTj1uZXcgYWcodGhpcyk7dmFyIGFJPXRoaXMuXyRkMCphdy5fJE5vO3ZhciBhSD10aGlzLl8kMzIoKTtpZihhTi5fJENyIT1udWxsKXthTi5fJENyPW51bGw7fWFOLl8kQ3I9bmV3IEZsb2F0MzJBcnJheShhSSk7aWYoYU4uXyRociE9bnVsbCl7YU4uXyRocj1udWxsO31hTi5fJGhyPWFIP25ldyBGbG9hdDMyQXJyYXkoYUkpOm51bGw7dmFyIGFNPWF3Ll8kZG87c3dpdGNoKGFNKXtkZWZhdWx0OmNhc2UgYXcuXyRNczppZihhdy5fJExzKXtmb3IodmFyIGFKPXRoaXMuXyRkMC0xO2FKPj0wOy0tYUope3ZhciBhTz1hSjw8MTt0aGlzLl8kUWlbYU8rMV09MS10aGlzLl8kUWlbYU8rMV07fX1icmVhaztjYXNlIGF3Ll8kUXM6Zm9yKHZhciBhSj10aGlzLl8kZDAtMTthSj49MDstLWFKKXt2YXIgYU89YUo8PDE7dmFyIGFLPWFKKmF3Ll8kTm87dmFyIGFRPXRoaXMuXyRRaVthT107dmFyIGFQPXRoaXMuXyRRaVthTysxXTthTi5fJENyW2FLXT1hUTthTi5fJENyW2FLKzFdPWFQO2FOLl8kQ3JbYUsrNF09MDtpZihhSCl7YU4uXyRoclthS109YVE7YU4uXyRoclthSysxXT1hUDthTi5fJGhyW2FLKzRdPTA7fX1icmVhazt9cmV0dXJuIGFOO307Yi5wcm90b3R5cGUuXyROcj1mdW5jdGlvbihhSixhSCl7dmFyIGFLPWFIO2lmKCEoKHRoaXM9PWFLLl8kR1QoKSkpKXtjb25zb2xlLmxvZyhcIiMjIyBhc3NlcnQhISAjIyMgXCIpO31pZighdGhpcy5fJEdTLl8kVXIoYUopKXtyZXR1cm47fWEucHJvdG90eXBlLl8kTnIuY2FsbCh0aGlzLGFKLGFLKTtpZihhSy5fJElTWzBdKXtyZXR1cm47fXZhciBhST1iLl8kZ1Q7YUlbMF09ZmFsc2U7YUcuXyRWcihhSix0aGlzLl8kR1MsYUksdGhpcy5fJGQwLHRoaXMuXyRFbyxhSy5fJENyLGF3Ll8kaTIsYXcuXyRObyk7fTtiLnByb3RvdHlwZS5fJDJiPWZ1bmN0aW9uKGFLLGFJKXt0cnl7aWYoISgodGhpcz09YUkuXyRHVCgpKSkpe2NvbnNvbGUubG9nKFwiIyMjIGFzc2VydCEhICMjIyBcIik7fXZhciBhTD1mYWxzZTtpZihhSS5fJElTWzBdKXthTD10cnVlO312YXIgYU09YUk7aWYoIWFMKXthLnByb3RvdHlwZS5fJDJiLmNhbGwodGhpcyxhSyk7aWYodGhpcy5fJDMyKCkpe3ZhciBhSD10aGlzLmdldFRhcmdldEJhc2VEYXRhSUQoKTtpZihhTS5fJDhyPT1hLl8kdXIpe2FNLl8kOHI9YUsuZ2V0QmFzZURhdGFJbmRleChhSCk7fWlmKGFNLl8kOHI8MCl7aWYoUS5fJHNvKXtxLl8kbGkoXCJfJEwgXyQwUCBfJEcgOjogJXNcIixhSCk7fX1lbHNle3ZhciBhTz1hSy5nZXRCYXNlRGF0YShhTS5fJDhyKTt2YXIgYUo9YUsuXyRxMihhTS5fJDhyKTtpZihhTyE9bnVsbCYmIWFKLl8keDIoKSl7YU8uXyRuYihhSyxhSixhTS5fJENyLGFNLl8kaHIsdGhpcy5fJGQwLGF3Ll8kaTIsYXcuXyRObyk7YU0uXyRBVD10cnVlO31lbHNle2FNLl8kQVQ9ZmFsc2U7fWFNLmJhc2VPcGFjaXR5PWFKLmdldFRvdGFsT3BhY2l0eSgpO319fX1jYXRjaChhTil7dGhyb3cgYU47fX07Yi5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhTixhSyxhSSl7aWYoISgodGhpcz09YUkuXyRHVCgpKSkpe2NvbnNvbGUubG9nKFwiIyMjIGFzc2VydCEhICMjIyBcIik7fWlmKGFJLl8kSVNbMF0pe3JldHVybjt9dmFyIGFMPWFJO3ZhciBhSj10aGlzLl8kTFA7aWYoYUo8MCl7YUo9MTt9dmFyIGFIPXRoaXMuZ2V0T3BhY2l0eShhSyxhTCkqYUkuXyRWUyphSS5iYXNlT3BhY2l0eTt2YXIgYU09KGFMLl8kaHIhPW51bGwpP2FMLl8kaHI6YUwuXyRDcjthTi5zZXRDbGlwQnVmUHJlX2NsaXBDb250ZXh0Rm9yRHJhdyhhSS5jbGlwQnVmUHJlX2NsaXBDb250ZXh0KTthTi5fJFdQKHRoaXMuY3VsbGluZyk7YU4uXyRVbyhhSiwzKnRoaXMuXyRZbyx0aGlzLl8kQlAsYU0sdGhpcy5fJFFpLGFILHRoaXMuXyQ2cyxhTCk7fTtiLnByb3RvdHlwZS5kdW1wPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coXCIgIF8keWkoICVkICkgLCBfJGQwKCAlZCApICwgXyRZbyggJWQgKSBcXG5cIix0aGlzLl8kTFAsdGhpcy5fJGQwLHRoaXMuXyRZbyk7Y29uc29sZS5sb2coXCIgIF8kT2kgXyRkaSA9IHsgXCIpO2Zvcih2YXIgYUo9MDthSjx0aGlzLl8kQlAubGVuZ3RoO2FKKyspe2NvbnNvbGUubG9nKFwiJTVkICxcIix0aGlzLl8kQlBbYUpdKTt9Y29uc29sZS5sb2coXCJcXG4gIF8kNWkgXyQzMFwiKTtmb3IodmFyIGFKPTA7YUo8dGhpcy5fJEVvLmxlbmd0aDthSisrKXtjb25zb2xlLmxvZyhcIlxcbiAgICBfJDMwWyVkXSA9IFwiLGFKKTt2YXIgYUg9dGhpcy5fJEVvW2FKXTtmb3IodmFyIGFJPTA7YUk8YUgubGVuZ3RoO2FJKyspe2NvbnNvbGUubG9nKFwiJTYuMmYsIFwiLGFIW2FJXSk7fX1jb25zb2xlLmxvZyhcIlxcblwiKTt9O2IucHJvdG90eXBlLl8kNzI9ZnVuY3Rpb24oYUgpe2lmKHRoaXMuXyQ1UD09bnVsbCl7cmV0dXJuIG51bGw7fXJldHVybiB0aGlzLl8kNVBbYUhdO307Yi5wcm90b3R5cGUuZ2V0SW5kZXhBcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kQlA7fTtmdW5jdGlvbiBhZyhhSCl7YUIucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhSCk7dGhpcy5fJDhyPWEuXyR1cjt0aGlzLl8kQ3I9bnVsbDt0aGlzLl8kaHI9bnVsbDt9YWcucHJvdG90eXBlPW5ldyBhQigpO2FnLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1lZFBvaW50cz1mdW5jdGlvbigpe3JldHVybih0aGlzLl8kaHIhPW51bGwpP3RoaXMuXyRocjp0aGlzLl8kQ3I7fTtmdW5jdGlvbiBrKCl7aWYoail7cmV0dXJuO310aGlzLng9bnVsbDt0aGlzLnk9bnVsbDt9ay5wcm90b3R5cGUuXyRIVD1mdW5jdGlvbihhSCl7dGhpcy54PWFILng7dGhpcy55PWFILnk7fTtrLnByb3RvdHlwZS5fJEhUPWZ1bmN0aW9uKGFILGFJKXt0aGlzLng9YUg7dGhpcy55PWFJO307ZnVuY3Rpb24gbChhSCl7aWYoail7cmV0dXJuO31hYS5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmRyYXdQYXJhbVdlYkdMPW5ldyBDKGFIKTt0aGlzLmRyYXdQYXJhbVdlYkdMLnNldEdMKFEuZ2V0R0woYUgpKTt9bC5wcm90b3R5cGU9bmV3IGFhKCk7bC5sb2FkTW9kZWw9ZnVuY3Rpb24oYUkpe3ZhciBhSD1uZXcgbCgpO2FhLl8kNjIoYUgsYUkpO3JldHVybiBhSDt9O2wubG9hZE1vZGVsPWZ1bmN0aW9uKGFJLGFLKXt2YXIgYUo9YUt8fDA7dmFyIGFIPW5ldyBsKGFKKTthYS5fJDYyKGFILGFJKTtyZXR1cm4gYUg7fTtsLl8kdG89ZnVuY3Rpb24oKXt2YXIgYUg9bmV3IGwoKTtyZXR1cm4gYUg7fTtsLl8kZXI9ZnVuY3Rpb24oYU0pe3ZhciBhSj1uZXcgXyQ1KFwiLi4vXyRfci9fJHQwL18kUmkvXyRfUC5fJGRcIik7aWYoYUouZXhpc3RzKCk9PWZhbHNlKXt0aHJvdyBuZXcgXyRscyhcIl8kdDAgXyRfIF8kNiBfJFVpIDo6IFwiK2FKLl8kUEwoKSk7fXZhciBhSD1bXCIuLi9fJF9yL18kdDAvXyRSaS9fJF9QLjUxMi9fJENQLl8kMVwiLFwiLi4vXyRfci9fJHQwL18kUmkvXyRfUC41MTIvXyR2UC5fJDFcIixcIi4uL18kX3IvXyR0MC9fJFJpL18kX1AuNTEyL18kRVAuXyQxXCIsXCIuLi9fJF9yL18kdDAvXyRSaS9fJF9QLjUxMi9fJHBQLl8kMVwiXTt2YXIgYUs9bC5sb2FkTW9kZWwoYUouXyQzYigpKTtmb3IodmFyIGFJPTA7YUk8YUgubGVuZ3RoO2FJKyspe3ZhciBhTD1uZXcgXyQ1KGFIW2FJXSk7aWYoYUwuZXhpc3RzKCk9PWZhbHNlKXt0aHJvdyBuZXcgXyRscyhcIl8kdDAgXyRfIF8kNiBfJFVpIDo6IFwiK2FMLl8kUEwoKSk7fWFLLnNldFRleHR1cmUoYUksXyRuTC5fJF9vKGFNLGFMLl8kM2IoKSkpO31yZXR1cm4gYUs7fTtsLnByb3RvdHlwZS5zZXRHTD1mdW5jdGlvbihhSCl7US5zZXRHTChhSCk7fTtsLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm09ZnVuY3Rpb24oYUgpe3RoaXMuZHJhd1BhcmFtV2ViR0wuc2V0VHJhbnNmb3JtKGFIKTt9O2wucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuXyQ1Uy51cGRhdGUoKTt0aGlzLl8kNVMucHJlRHJhdyh0aGlzLmRyYXdQYXJhbVdlYkdMKTt9O2wucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXt0aGlzLl8kNVMuZHJhdyh0aGlzLmRyYXdQYXJhbVdlYkdMKTt9O2wucHJvdG90eXBlLl8kSzI9ZnVuY3Rpb24oKXt0aGlzLmRyYXdQYXJhbVdlYkdMLl8kSzIoKTt9O2wucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oYUksYUgpe2lmKHRoaXMuZHJhd1BhcmFtV2ViR0w9PW51bGwpe3EuXyRsaShcIl8kWWkgZm9yIFFUIF8ka2kgLyBfJFhTKCkgaXMgXyQ2IF8kdWkhIVwiKTt9dGhpcy5kcmF3UGFyYW1XZWJHTC5zZXRUZXh0dXJlKGFJLGFIKTt9O2wucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oYUksYUgpe2lmKHRoaXMuZHJhd1BhcmFtV2ViR0w9PW51bGwpe3EuXyRsaShcIl8kWWkgZm9yIFFUIF8ka2kgLyBfJFhTKCkgaXMgXyQ2IF8kdWkhIVwiKTt9dGhpcy5kcmF3UGFyYW1XZWJHTC5zZXRUZXh0dXJlKGFJLGFIKTt9O2wucHJvdG90eXBlLl8kUnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3UGFyYW1XZWJHTC5fJFJzKCk7fTtsLnByb3RvdHlwZS5fJERzPWZ1bmN0aW9uKGFIKXt0aGlzLmRyYXdQYXJhbVdlYkdMLl8kRHMoYUgpO307bC5wcm90b3R5cGUuZ2V0RHJhd1BhcmFtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHJhd1BhcmFtV2ViR0w7fTtsLnByb3RvdHlwZS5zZXRNYXRyaXg9ZnVuY3Rpb24oYUgpe3RoaXMuZHJhd1BhcmFtV2ViR0wuc2V0TWF0cml4KGFIKTt9O2wucHJvdG90eXBlLnNldFByZW11bHRpcGxpZWRBbHBoYT1mdW5jdGlvbihhSCl7dGhpcy5kcmF3UGFyYW1XZWJHTC5zZXRQcmVtdWx0aXBsaWVkQWxwaGEoYUgpO307bC5wcm90b3R5cGUuaXNQcmVtdWx0aXBsaWVkQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3UGFyYW1XZWJHTC5pc1ByZW11bHRpcGxpZWRBbHBoYSgpO307bC5wcm90b3R5cGUuc2V0QW5pc290cm9weT1mdW5jdGlvbihhSCl7dGhpcy5kcmF3UGFyYW1XZWJHTC5zZXRBbmlzb3Ryb3B5KGFIKTt9O2wucHJvdG90eXBlLmdldEFuaXNvdHJvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3UGFyYW1XZWJHTC5nZXRBbmlzb3Ryb3B5KCk7fTtmdW5jdGlvbiBWKCl7aWYoail7cmV0dXJuO310aGlzLm1vdGlvbnM9bnVsbDt0aGlzLl8kZWI9ZmFsc2U7dGhpcy5tb3Rpb25zPW5ldyBBcnJheSgpO31WLnByb3RvdHlwZS5fJHRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW90aW9uczt9O1YucHJvdG90eXBlLnN0YXJ0TW90aW9uPWZ1bmN0aW9uKGFKLGFJKXt2YXIgYU09bnVsbDt2YXIgYUw9bnVsbDt2YXIgYUg9dGhpcy5tb3Rpb25zLmxlbmd0aDtmb3IodmFyIGFLPTA7YUs8YUg7KythSyl7YUw9dGhpcy5tb3Rpb25zW2FLXTtpZihhTD09bnVsbCl7Y29udGludWU7fWFMLl8kcVMoYUwuXyR3MC5nZXRGYWRlT3V0KCkpO2lmKHRoaXMuXyRlYil7cS5fJEppKFwiTW90aW9uUXVldWVNYW5hZ2VyW3NpemU6JTJkXS0+c3RhcnRNb3Rpb24oKSAvIHN0YXJ0IF8kSyBfJDMgKG0lZClcXG5cIixhSCxhTC5fJHNyKTt9fWlmKGFKPT1udWxsKXtyZXR1cm4gLTE7fWFMPW5ldyBNKCk7YUwuXyR3MD1hSjt0aGlzLm1vdGlvbnMucHVzaChhTCk7dmFyIGFOPWFMLl8kc3I7aWYodGhpcy5fJGViKXtxLl8kSmkoXCJNb3Rpb25RdWV1ZU1hbmFnZXJbc2l6ZTolMmRdLT5zdGFydE1vdGlvbigpIC8gbmV3IF8kdzAgKG0lZClcXG5cIixhSCxhTik7fXJldHVybiBhTjt9O1YucHJvdG90eXBlLnVwZGF0ZVBhcmFtPWZ1bmN0aW9uKGFKKXt0cnl7dmFyIGFJPWZhbHNlO2Zvcih2YXIgYUs9MDthSzx0aGlzLm1vdGlvbnMubGVuZ3RoO2FLKyspe3ZhciBhTD10aGlzLm1vdGlvbnNbYUtdO2lmKGFMPT1udWxsKXt0aGlzLm1vdGlvbnMuc3BsaWNlKGFLLDEpO2FLLS07Y29udGludWU7fXZhciBhSD1hTC5fJHcwO2lmKGFIPT1udWxsKXt0aGlzLm1vdGlvbnM9dGhpcy5tb3Rpb25zLnNwbGljZShhSywxKTthSy0tO2NvbnRpbnVlO31hSC51cGRhdGVQYXJhbShhSixhTCk7YUk9dHJ1ZTtpZihhTC5pc0ZpbmlzaGVkKCkpe2lmKHRoaXMuXyRlYil7cS5fJEppKFwiTW90aW9uUXVldWVNYW5hZ2VyW3NpemU6JTJkXS0+dXBkYXRlUGFyYW0oKSAvIF8kVDAgXyR3MCAobSVkKVxcblwiLHRoaXMubW90aW9ucy5sZW5ndGgtMSxhTC5fJHNyKTt9dGhpcy5tb3Rpb25zLnNwbGljZShhSywxKTthSy0tO31lbHNle319cmV0dXJuIGFJO31jYXRjaChhTSl7cS5fJGxpKGFNKTtyZXR1cm4gdHJ1ZTt9fTtWLnByb3RvdHlwZS5pc0ZpbmlzaGVkPWZ1bmN0aW9uKGFLKXtpZihhcmd1bWVudHMubGVuZ3RoPj0xKXtmb3IodmFyIGFJPTA7YUk8dGhpcy5tb3Rpb25zLmxlbmd0aDthSSsrKXt2YXIgYUo9dGhpcy5tb3Rpb25zW2FJXTtpZihhSj09bnVsbCl7Y29udGludWU7fWlmKGFKLl8kc3I9PWFLJiYhYUouaXNGaW5pc2hlZCgpKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9ZWxzZXtmb3IodmFyIGFJPTA7YUk8dGhpcy5tb3Rpb25zLmxlbmd0aDthSSsrKXt2YXIgYUo9dGhpcy5tb3Rpb25zW2FJXTtpZihhSj09bnVsbCl7dGhpcy5tb3Rpb25zLnNwbGljZShhSSwxKTthSS0tO2NvbnRpbnVlO312YXIgYUg9YUouXyR3MDtpZihhSD09bnVsbCl7dGhpcy5tb3Rpb25zLnNwbGljZShhSSwxKTthSS0tO2NvbnRpbnVlO31pZighYUouaXNGaW5pc2hlZCgpKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9fTtWLnByb3RvdHlwZS5zdG9wQWxsTW90aW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgYUk9MDthSTx0aGlzLm1vdGlvbnMubGVuZ3RoO2FJKyspe3ZhciBhSj10aGlzLm1vdGlvbnNbYUldO2lmKGFKPT1udWxsKXt0aGlzLm1vdGlvbnMuc3BsaWNlKGFJLDEpO2FJLS07Y29udGludWU7fXZhciBhSD1hSi5fJHcwO2lmKGFIPT1udWxsKXt0aGlzLm1vdGlvbnMuc3BsaWNlKGFJLDEpO2FJLS07Y29udGludWU7fWlmKHRydWUpe3RoaXMubW90aW9ucy5zcGxpY2UoYUksMSk7YUktLTt9fX07Vi5wcm90b3R5cGUuXyRacj1mdW5jdGlvbihhSCl7dGhpcy5fJGViPWFIO307Vi5wcm90b3R5cGUuXyRlPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coXCItLSBfJFIgLS1cXG5cIik7Zm9yKHZhciBhSD0wO2FIPHRoaXMubW90aW9ucy5sZW5ndGg7YUgrKyl7dmFyIGFJPXRoaXMubW90aW9uc1thSF07dmFyIGFKPWFJLl8kdzA7Y29uc29sZS5sb2coXCJNb3Rpb25RdWV1ZUVudFslZF0gOjogJXNcXG5cIix0aGlzLm1vdGlvbnMubGVuZ3RoLGFKLnRvU3RyaW5nKCkpO319O2Z1bmN0aW9uIE0oKXt0aGlzLl8kdzA9bnVsbDt0aGlzLl8kQVQ9dHJ1ZTt0aGlzLl8kOUw9ZmFsc2U7dGhpcy5fJHoyPS0xO3RoaXMuXyRicz0tMTt0aGlzLl8kRG89LTE7dGhpcy5fJHNyPW51bGw7dGhpcy5fJHNyPU0uXyRHcysrO31NLl8kR3M9MDtNLnByb3RvdHlwZS5pc0ZpbmlzaGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyQ5TDt9O00ucHJvdG90eXBlLl8kcVM9ZnVuY3Rpb24oYUope3ZhciBhST1QLmdldFVzZXJUaW1lTVNlYygpO3ZhciBhSD1hSSthSjtpZih0aGlzLl8kRG88MHx8YUg8dGhpcy5fJERvKXt0aGlzLl8kRG89YUg7fX07TS5wcm90b3R5cGUuXyRCcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kc3I7fTtmdW5jdGlvbiBhbSgpe3RoaXMubT1uZXcgQXJyYXkoMSwwLDAsMCwxLDAsMCwwLDEpO31hbS5wcm90b3R5cGUuc2V0Q29udGV4dD1mdW5jdGlvbihhSSl7dmFyIGFIPXRoaXMubTthSS50cmFuc2Zvcm0oYUhbMF0sYUhbMV0sYUhbM10sYUhbNF0sYUhbNl0sYUhbN10pO307YW0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGFJPVwiTERUcmFuc2Zvcm0geyBcIjtmb3IodmFyIGFIPTA7YUg8OTthSCsrKXthSSs9dGhpcy5tW2FIXS50b0ZpeGVkKDIpK1wiICxcIjt9YUkrPVwiIH1cIjtyZXR1cm4gYUk7fTthbS5wcm90b3R5cGUuaWRlbnRpdHk9ZnVuY3Rpb24oKXt2YXIgYUg9dGhpcy5tO2FIWzBdPWFIWzRdPWFIWzhdPTE7YUhbMV09YUhbMl09YUhbM109YUhbNV09YUhbNl09YUhbN109MDt9O2FtLnByb3RvdHlwZS5fJFBTPWZ1bmN0aW9uKGFJLGFLLGFKKXtpZihhSj09bnVsbCl7YUo9bmV3IEFycmF5KDAsMCk7fXZhciBhSD10aGlzLm07YUpbMF09YUhbMF0qYUkrYUhbM10qYUsrYUhbNl07YUpbMV09YUhbMV0qYUkrYUhbNF0qYUsrYUhbN107cmV0dXJuIGFKO307YW0ucHJvdG90eXBlLl8kUDI9ZnVuY3Rpb24oYUspe2lmKCFhSyl7YUs9bmV3IGFtKCk7fXZhciBhST10aGlzLm07dmFyIGFUPWFJWzBdO3ZhciBhUz1hSVsxXTt2YXIgYVI9YUlbMl07dmFyIGFRPWFJWzNdO3ZhciBhUD1hSVs0XTt2YXIgYU89YUlbNV07dmFyIGFOPWFJWzZdO3ZhciBhTT1hSVs3XTt2YXIgYUw9YUlbOF07dmFyIGFKPWFUKmFQKmFMK2FTKmFPKmFOK2FSKmFRKmFNLWFUKmFPKmFNLWFSKmFQKmFOLWFTKmFRKmFMO2lmKGFKPT0wKXtyZXR1cm4gbnVsbDt9ZWxzZXt2YXIgYUg9MS9hSjthSy5tWzBdPWFIKihhUCphTC1hTSphTyk7YUsubVsxXT1hSCooYU0qYVItYVMqYUwpO2FLLm1bMl09YUgqKGFTKmFPLWFQKmFSKTthSy5tWzNdPWFIKihhTiphTy1hUSphTCk7YUsubVs0XT1hSCooYVQqYUwtYU4qYVIpO2FLLm1bNV09YUgqKGFRKmFSLWFUKmFPKTthSy5tWzZdPWFIKihhUSphTS1hTiphUCk7YUsubVs3XT1hSCooYU4qYVMtYVQqYU0pO2FLLm1bOF09YUgqKGFUKmFQLWFRKmFTKTtyZXR1cm4gYUs7fX07YW0ucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihhSSxhSyxhSil7aWYoYUo9PW51bGwpe2FKPW5ldyBBcnJheSgwLDApO312YXIgYUg9dGhpcy5tO2FKWzBdPWFIWzBdKmFJK2FIWzNdKmFLK2FIWzZdO2FKWzFdPWFIWzFdKmFJK2FIWzRdKmFLK2FIWzddO3JldHVybiBhSjt9O2FtLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYUksYUope3ZhciBhSD10aGlzLm07YUhbNl09YUhbMF0qYUkrYUhbM10qYUorYUhbNl07YUhbN109YUhbMV0qYUkrYUhbNF0qYUorYUhbN107YUhbOF09YUhbMl0qYUkrYUhbNV0qYUorYUhbOF07fTthbS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYUosYUkpe3ZhciBhSD10aGlzLm07YUhbMF0qPWFKO2FIWzFdKj1hSjthSFsyXSo9YUo7YUhbM10qPWFJO2FIWzRdKj1hSTthSFs1XSo9YUk7fTthbS5wcm90b3R5cGUuc2hlYXI9ZnVuY3Rpb24oYU0sYUwpe3ZhciBhSD10aGlzLm07dmFyIGFLPWFIWzBdK2FIWzNdKmFMO3ZhciBhSj1hSFsxXSthSFs0XSphTDt2YXIgYUk9YUhbMl0rYUhbNV0qYUw7YUhbM109YUhbMF0qYU0rYUhbM107YUhbNF09YUhbMV0qYU0rYUhbNF07YUhbNV09YUhbMl0qYU0rYUhbNV07YUhbMF09YUs7YUhbMV09YUo7YUhbMl09YUk7fTthbS5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGFNKXt2YXIgYUg9dGhpcy5tO3ZhciBhTj1NYXRoLmNvcyhhTSk7dmFyIGFMPU1hdGguc2luKGFNKTt2YXIgYUs9YUhbMF0qYU4rYUhbM10qYUw7dmFyIGFKPWFIWzFdKmFOK2FIWzRdKmFMO3ZhciBhST1hSFsyXSphTithSFs1XSphTDthSFszXT0tYUhbMF0qYUwrYUhbM10qYU47YUhbNF09LWFIWzFdKmFMK2FIWzRdKmFOO2FIWzVdPS1hSFsyXSphTCthSFs1XSphTjthSFswXT1hSzthSFsxXT1hSjthSFsyXT1hSTt9O2FtLnByb3RvdHlwZS5jb25jYXRlbmF0ZT1mdW5jdGlvbihhTCl7dmFyIGFPPXRoaXMubTt2YXIgYU09YUwubTt2YXIgYVM9YU9bMF0qYU1bMF0rYU9bM10qYU1bMV0rYU9bNl0qYU1bMl07dmFyIGFSPWFPWzFdKmFNWzBdK2FPWzRdKmFNWzFdK2FPWzddKmFNWzJdO3ZhciBhUT1hT1syXSphTVswXSthT1s1XSphTVsxXSthT1s4XSphTVsyXTt2YXIgYVA9YU9bMF0qYU1bM10rYU9bM10qYU1bNF0rYU9bNl0qYU1bNV07dmFyIGFOPWFPWzFdKmFNWzNdK2FPWzRdKmFNWzRdK2FPWzddKmFNWzVdO3ZhciBhSz1hT1syXSphTVszXSthT1s1XSphTVs0XSthT1s4XSphTVs1XTt2YXIgYUo9YU9bMF0qYU1bNl0rYU9bM10qYU1bN10rYU9bNl0qYU1bOF07dmFyIGFJPWFPWzFdKmFNWzZdK2FPWzRdKmFNWzddK2FPWzddKmFNWzhdO3ZhciBhSD1hT1syXSphTVs2XSthT1s1XSphTVs3XSthT1s4XSphTVs4XTttWzBdPWFTO21bMV09YVI7bVsyXT1hUTttWzNdPWFQO21bNF09YU47bVs1XT1hSzttWzZdPWFKO21bN109YUk7bVs4XT1hSDt9O2Z1bmN0aW9uIG4oYUgpe2lmKGope3JldHVybjt9YWsucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhSCk7fW4ucHJvdG90eXBlPW5ldyBhaygpO24uXyRlVD1udWxsO24uXyR0UD1uZXcgT2JqZWN0KCk7bi5fJDJvPWZ1bmN0aW9uKCl7aWYobi5fJGVUPT1udWxsKXtuLl8kZVQ9bi5nZXRJRChcIkRTVF9CQVNFXCIpO31yZXR1cm4gbi5fJGVUO307bi5fJDI3PWZ1bmN0aW9uKCl7bi5fJHRQLmNsZWFyKCk7bi5fJGVUPW51bGw7fTtuLmdldElEPWZ1bmN0aW9uKGFIKXt2YXIgYUk9bi5fJHRQW2FIXTtpZihhST09bnVsbCl7YUk9bmV3IG4oYUgpO24uXyR0UFthSF09YUk7fXJldHVybiBhSTt9O24ucHJvdG90eXBlLl8kM3M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oKTt9O2Z1bmN0aW9uIEMoYUgpe2lmKGope3JldHVybjt9YXgucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy50ZXh0dXJlcz1uZXcgQXJyYXkoKTt0aGlzLnRyYW5zZm9ybT1udWxsO3RoaXMuZ2w9bnVsbDt0aGlzLmdsbm89YUg7dGhpcy5maXJzdERyYXc9dHJ1ZTt0aGlzLmFuaXNvdHJvcHlFeHQ9bnVsbDt0aGlzLm1heEFuaXNvdHJvcHk9MDt0aGlzLl8kQXM9MzI7dGhpcy5fJEdyPWZhbHNlO3RoaXMuXyROVD1udWxsO3RoaXMuXyR2Uz1udWxsO3RoaXMuXyRubz1udWxsO3RoaXMudmVydFNoYWRlcj1udWxsO3RoaXMuZnJhZ1NoYWRlcj1udWxsO3RoaXMudmVydFNoYWRlck9mZj1udWxsO3RoaXMuZnJhZ1NoYWRlck9mZj1udWxsO31DLnByb3RvdHlwZT1uZXcgYXgoKTtDLl8kOXI9ZnVuY3Rpb24oYUgpe3ZhciBhST1uZXcgRmxvYXQzMkFycmF5KGFIKTtyZXR1cm4gYUk7fTtDLl8kdmI9ZnVuY3Rpb24oYUgpe3ZhciBhST1uZXcgSW50MTZBcnJheShhSCk7cmV0dXJuIGFJO307Qy5fJGNyPWZ1bmN0aW9uKGFJLGFIKXtpZihhST09bnVsbHx8YUkuXyR5TCgpPGFILmxlbmd0aCl7YUk9Qy5fJDlyKGFILmxlbmd0aCoyKTthSS5wdXQoYUgpO2FJLl8kb1QoMCk7fWVsc2V7YUkuY2xlYXIoKTthSS5wdXQoYUgpO2FJLl8kb1QoMCk7fXJldHVybiBhSTt9O0MuXyRtYj1mdW5jdGlvbihhSSxhSCl7aWYoYUk9PW51bGx8fGFJLl8keUwoKTxhSC5sZW5ndGgpe2FJPUMuXyR2YihhSC5sZW5ndGgqMik7YUkucHV0KGFIKTthSS5fJG9UKDApO31lbHNle2FJLmNsZWFyKCk7YUkucHV0KGFIKTthSS5fJG9UKDApO31yZXR1cm4gYUk7fTtDLl8kSHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJEdyO307Qy5fJGFzPWZ1bmN0aW9uKGFIKXt0aGlzLl8kR3I9YUg7fTtDLnByb3RvdHlwZS5nZXRHTD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsO307Qy5wcm90b3R5cGUuc2V0R0w9ZnVuY3Rpb24oYUgpe3RoaXMuZ2w9YUg7fTtDLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm09ZnVuY3Rpb24oYUgpe3RoaXMudHJhbnNmb3JtPWFIO307Qy5wcm90b3R5cGUuXyRaVD1mdW5jdGlvbigpe3ZhciBhSD10aGlzLmdsO2lmKHRoaXMuZmlyc3REcmF3KXt0aGlzLmluaXRTaGFkZXIoKTt0aGlzLmZpcnN0RHJhdz1mYWxzZTt0aGlzLmFuaXNvdHJvcHlFeHQ9YUguZ2V0RXh0ZW5zaW9uKFwiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXCIpfHxhSC5nZXRFeHRlbnNpb24oXCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXCIpfHxhSC5nZXRFeHRlbnNpb24oXCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXCIpO2lmKHRoaXMuYW5pc290cm9weUV4dCl7dGhpcy5tYXhBbmlzb3Ryb3B5PWFILmdldFBhcmFtZXRlcih0aGlzLmFuaXNvdHJvcHlFeHQuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTt9fWFILmRpc2FibGUoYUguU0NJU1NPUl9URVNUKTthSC5kaXNhYmxlKGFILlNURU5DSUxfVEVTVCk7YUguZGlzYWJsZShhSC5ERVBUSF9URVNUKTthSC5mcm9udEZhY2UoYUguQ1cpO2FILmVuYWJsZShhSC5CTEVORCk7YUguY29sb3JNYXNrKDEsMSwxLDEpO2FILmJpbmRCdWZmZXIoYUguQVJSQVlfQlVGRkVSLG51bGwpO2FILmJpbmRCdWZmZXIoYUguRUxFTUVOVF9BUlJBWV9CVUZGRVIsbnVsbCk7fTtDLnByb3RvdHlwZS5fJFVvPWZ1bmN0aW9uKGFTLGFULGFMLGFVLGFWLGFOLGFNLGFPKXtpZihhTjwwLjAxJiZ0aGlzLmNsaXBCdWZQcmVfY2xpcENvbnRleHRNYXNrPT1udWxsKXtyZXR1cm47fXZhciBhSD1hTj4wLjk/US5FWFBBTkRfVzowO3ZhciBhMD10aGlzLmdsO2lmKHRoaXMuZ2w9PW51bGwpe3Rocm93IG5ldyBFcnJvcihcImdsIGlzIG51bGxcIik7fXZhciBhMT1mYWxzZTt2YXIgYVE9MTt2YXIgYVA9MTt2YXIgYTM9MTt2YXIgYVo9MTt2YXIgYVc9dGhpcy5fJEMwKmFQKmFOO3ZhciBhMj10aGlzLl8kdFQqYTMqYU47dmFyIGE1PXRoaXMuXyRXTCphWiphTjt2YXIgYTc9dGhpcy5fJGxUKmFOO2lmKHRoaXMuY2xpcEJ1ZlByZV9jbGlwQ29udGV4dE1hc2shPW51bGwpe2EwLmZyb250RmFjZShhMC5DQ1cpO2EwLnVzZVByb2dyYW0odGhpcy5zaGFkZXJQcm9ncmFtKTt0aGlzLl8kdlM9VChhMCx0aGlzLl8kdlMsYVUpO3RoaXMuXyRubz1MKGEwLHRoaXMuXyRubyxhTCk7YTAuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodGhpcy5hX3Bvc2l0aW9uX0xvYyk7YTAudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmFfcG9zaXRpb25fTG9jLDIsYTAuRkxPQVQsZmFsc2UsMCwwKTt0aGlzLl8kTlQ9VChhMCx0aGlzLl8kTlQsYVYpO2EwLmFjdGl2ZVRleHR1cmUoYTAuVEVYVFVSRTEpO2EwLmJpbmRUZXh0dXJlKGEwLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlc1thU10pO2EwLnVuaWZvcm0xaSh0aGlzLnNfdGV4dHVyZTBfTG9jLDEpO2EwLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHRoaXMuYV90ZXhDb29yZF9Mb2MpO2EwLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5hX3RleENvb3JkX0xvYywyLGEwLkZMT0FULGZhbHNlLDAsMCk7YTAudW5pZm9ybU1hdHJpeDRmdih0aGlzLnVfbWF0cml4X0xvYyxmYWxzZSx0aGlzLmdldENsaXBCdWZQcmVfY2xpcENvbnRleHRNYXNrKCkubWF0cml4Rm9yTWFzayk7dmFyIGFZPXRoaXMuZ2V0Q2xpcEJ1ZlByZV9jbGlwQ29udGV4dE1hc2soKS5sYXlvdXRDaGFubmVsTm87dmFyIGE0PXRoaXMuZ2V0Q2hhbm5lbEZsYWdBc0NvbG9yKGFZKTthMC51bmlmb3JtNGYodGhpcy51X2NoYW5uZWxGbGFnLGE0LnIsYTQuZyxhNC5iLGE0LmEpO3ZhciBhST10aGlzLmdldENsaXBCdWZQcmVfY2xpcENvbnRleHRNYXNrKCkubGF5b3V0Qm91bmRzO2EwLnVuaWZvcm00Zih0aGlzLnVfYmFzZUNvbG9yX0xvYyxhSS54KjItMSxhSS55KjItMSxhSS5fJEVMKCkqMi0xLGFJLl8kNVQoKSoyLTEpO2EwLnVuaWZvcm0xaSh0aGlzLnVfbWFza0ZsYWdfTG9jLHRydWUpO31lbHNle2ExPXRoaXMuZ2V0Q2xpcEJ1ZlByZV9jbGlwQ29udGV4dERyYXcoKSE9bnVsbDtpZihhMSl7YTAudXNlUHJvZ3JhbSh0aGlzLnNoYWRlclByb2dyYW1PZmYpO3RoaXMuXyR2Uz1UKGEwLHRoaXMuXyR2UyxhVSk7dGhpcy5fJG5vPUwoYTAsdGhpcy5fJG5vLGFMKTthMC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh0aGlzLmFfcG9zaXRpb25fTG9jX09mZik7YTAudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmFfcG9zaXRpb25fTG9jX09mZiwyLGEwLkZMT0FULGZhbHNlLDAsMCk7dGhpcy5fJE5UPVQoYTAsdGhpcy5fJE5ULGFWKTthMC5hY3RpdmVUZXh0dXJlKGEwLlRFWFRVUkUxKTthMC5iaW5kVGV4dHVyZShhMC5URVhUVVJFXzJELHRoaXMudGV4dHVyZXNbYVNdKTthMC51bmlmb3JtMWkodGhpcy5zX3RleHR1cmUwX0xvY19PZmYsMSk7YTAuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodGhpcy5hX3RleENvb3JkX0xvY19PZmYpO2EwLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5hX3RleENvb3JkX0xvY19PZmYsMixhMC5GTE9BVCxmYWxzZSwwLDApO2EwLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy51X2NsaXBNYXRyaXhfTG9jX09mZixmYWxzZSx0aGlzLmdldENsaXBCdWZQcmVfY2xpcENvbnRleHREcmF3KCkubWF0cml4Rm9yRHJhdyk7YTAudW5pZm9ybU1hdHJpeDRmdih0aGlzLnVfbWF0cml4X0xvY19PZmYsZmFsc2UsdGhpcy5tYXRyaXg0eDQpO2EwLmFjdGl2ZVRleHR1cmUoYTAuVEVYVFVSRTIpO2EwLmJpbmRUZXh0dXJlKGEwLlRFWFRVUkVfMkQsUS5mVGV4dHVyZVt0aGlzLmdsbm9dKTthMC51bmlmb3JtMWkodGhpcy5zX3RleHR1cmUxX0xvY19PZmYsMik7dmFyIGFZPXRoaXMuZ2V0Q2xpcEJ1ZlByZV9jbGlwQ29udGV4dERyYXcoKS5sYXlvdXRDaGFubmVsTm87dmFyIGE0PXRoaXMuZ2V0Q2hhbm5lbEZsYWdBc0NvbG9yKGFZKTthMC51bmlmb3JtNGYodGhpcy51X2NoYW5uZWxGbGFnX0xvY19PZmYsYTQucixhNC5nLGE0LmIsYTQuYSk7YTAudW5pZm9ybTRmKHRoaXMudV9iYXNlQ29sb3JfTG9jX09mZixhVyxhMixhNSxhNyk7fWVsc2V7YTAudXNlUHJvZ3JhbSh0aGlzLnNoYWRlclByb2dyYW0pO3RoaXMuXyR2Uz1UKGEwLHRoaXMuXyR2UyxhVSk7dGhpcy5fJG5vPUwoYTAsdGhpcy5fJG5vLGFMKTthMC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh0aGlzLmFfcG9zaXRpb25fTG9jKTthMC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMuYV9wb3NpdGlvbl9Mb2MsMixhMC5GTE9BVCxmYWxzZSwwLDApO3RoaXMuXyROVD1UKGEwLHRoaXMuXyROVCxhVik7YTAuYWN0aXZlVGV4dHVyZShhMC5URVhUVVJFMSk7YTAuYmluZFRleHR1cmUoYTAuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmVzW2FTXSk7YTAudW5pZm9ybTFpKHRoaXMuc190ZXh0dXJlMF9Mb2MsMSk7YTAuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodGhpcy5hX3RleENvb3JkX0xvYyk7YTAudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmFfdGV4Q29vcmRfTG9jLDIsYTAuRkxPQVQsZmFsc2UsMCwwKTthMC51bmlmb3JtTWF0cml4NGZ2KHRoaXMudV9tYXRyaXhfTG9jLGZhbHNlLHRoaXMubWF0cml4NHg0KTthMC51bmlmb3JtNGYodGhpcy51X2Jhc2VDb2xvcl9Mb2MsYVcsYTIsYTUsYTcpO2EwLnVuaWZvcm0xaSh0aGlzLnVfbWFza0ZsYWdfTG9jLGZhbHNlKTt9fWlmKHRoaXMuY3VsbGluZyl7dGhpcy5nbC5lbmFibGUoYTAuQ1VMTF9GQUNFKTt9ZWxzZXt0aGlzLmdsLmRpc2FibGUoYTAuQ1VMTF9GQUNFKTt9dGhpcy5nbC5lbmFibGUoYTAuQkxFTkQpO3ZhciBhNjt2YXIgYVg7dmFyIGFSO3ZhciBhSztpZih0aGlzLmNsaXBCdWZQcmVfY2xpcENvbnRleHRNYXNrIT1udWxsKXthNj1hMC5PTkU7YVg9YTAuT05FX01JTlVTX1NSQ19BTFBIQTthUj1hMC5PTkU7YUs9YTAuT05FX01JTlVTX1NSQ19BTFBIQTt9ZWxzZXtzd2l0Y2goYU0pe2Nhc2UgYi5fJG1zOmE2PWEwLk9ORTthWD1hMC5PTkVfTUlOVVNfU1JDX0FMUEhBO2FSPWEwLk9ORTthSz1hMC5PTkVfTUlOVVNfU1JDX0FMUEhBO2JyZWFrO2Nhc2UgYi5fJG5zOmE2PWEwLk9ORTthWD1hMC5PTkU7YVI9YTAuWkVSTzthSz1hMC5PTkU7YnJlYWs7Y2FzZSBiLl8kX3M6YTY9YTAuRFNUX0NPTE9SO2FYPWEwLk9ORV9NSU5VU19TUkNfQUxQSEE7YVI9YTAuWkVSTzthSz1hMC5PTkU7YnJlYWs7fX1hMC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoYTAuRlVOQ19BREQsYTAuRlVOQ19BREQpO2EwLmJsZW5kRnVuY1NlcGFyYXRlKGE2LGFYLGFSLGFLKTtpZih0aGlzLmFuaXNvdHJvcHlFeHQpe2EwLnRleFBhcmFtZXRlcmkoYTAuVEVYVFVSRV8yRCx0aGlzLmFuaXNvdHJvcHlFeHQuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsdGhpcy5tYXhBbmlzb3Ryb3B5KTt9dmFyIGFKPWFMLmxlbmd0aDthMC5kcmF3RWxlbWVudHMoYTAuVFJJQU5HTEVTLGFKLGEwLlVOU0lHTkVEX1NIT1JULDApO2EwLmJpbmRUZXh0dXJlKGEwLlRFWFRVUkVfMkQsbnVsbCk7fTtmdW5jdGlvbiBUKGFKLGFILGFJKXtpZihhSD09bnVsbCl7YUg9YUouY3JlYXRlQnVmZmVyKCk7fWFKLmJpbmRCdWZmZXIoYUouQVJSQVlfQlVGRkVSLGFIKTthSi5idWZmZXJEYXRhKGFKLkFSUkFZX0JVRkZFUixhSSxhSi5EWU5BTUlDX0RSQVcpO3JldHVybiBhSDt9ZnVuY3Rpb24gTChhSixhSCxhSSl7aWYoYUg9PW51bGwpe2FIPWFKLmNyZWF0ZUJ1ZmZlcigpO31hSi5iaW5kQnVmZmVyKGFKLkVMRU1FTlRfQVJSQVlfQlVGRkVSLGFIKTthSi5idWZmZXJEYXRhKGFKLkVMRU1FTlRfQVJSQVlfQlVGRkVSLGFJLGFKLkRZTkFNSUNfRFJBVyk7cmV0dXJuIGFIO31DLnByb3RvdHlwZS5fJFJzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiXyRSc1wiKTt9O0MucHJvdG90eXBlLl8kRHM9ZnVuY3Rpb24oYUgpe3Rocm93IG5ldyBFcnJvcihcIl8kRHNcIik7fTtDLnByb3RvdHlwZS5fJEsyPWZ1bmN0aW9uKCl7Zm9yKHZhciBhSD0wO2FIPHRoaXMudGV4dHVyZXMubGVuZ3RoO2FIKyspe3ZhciBhST10aGlzLnRleHR1cmVzW2FIXTtpZihhSSE9MCl7dGhpcy5nbC5fJEsyKDEsdGhpcy50ZXh0dXJlcyxhSCk7dGhpcy50ZXh0dXJlc1thSF09bnVsbDt9fX07Qy5wcm90b3R5cGUuc2V0VGV4dHVyZT1mdW5jdGlvbihhSCxhSSl7dGhpcy50ZXh0dXJlc1thSF09YUk7fTtDLnByb3RvdHlwZS5pbml0U2hhZGVyPWZ1bmN0aW9uKCl7dmFyIGFIPXRoaXMuZ2w7dGhpcy5sb2FkU2hhZGVyczIoKTt0aGlzLmFfcG9zaXRpb25fTG9jPWFILmdldEF0dHJpYkxvY2F0aW9uKHRoaXMuc2hhZGVyUHJvZ3JhbSxcImFfcG9zaXRpb25cIik7dGhpcy5hX3RleENvb3JkX0xvYz1hSC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnNoYWRlclByb2dyYW0sXCJhX3RleENvb3JkXCIpO3RoaXMudV9tYXRyaXhfTG9jPWFILmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnNoYWRlclByb2dyYW0sXCJ1X212cE1hdHJpeFwiKTt0aGlzLnNfdGV4dHVyZTBfTG9jPWFILmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnNoYWRlclByb2dyYW0sXCJzX3RleHR1cmUwXCIpO3RoaXMudV9jaGFubmVsRmxhZz1hSC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5zaGFkZXJQcm9ncmFtLFwidV9jaGFubmVsRmxhZ1wiKTt0aGlzLnVfYmFzZUNvbG9yX0xvYz1hSC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5zaGFkZXJQcm9ncmFtLFwidV9iYXNlQ29sb3JcIik7dGhpcy51X21hc2tGbGFnX0xvYz1hSC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5zaGFkZXJQcm9ncmFtLFwidV9tYXNrRmxhZ1wiKTt0aGlzLmFfcG9zaXRpb25fTG9jX09mZj1hSC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnNoYWRlclByb2dyYW1PZmYsXCJhX3Bvc2l0aW9uXCIpO3RoaXMuYV90ZXhDb29yZF9Mb2NfT2ZmPWFILmdldEF0dHJpYkxvY2F0aW9uKHRoaXMuc2hhZGVyUHJvZ3JhbU9mZixcImFfdGV4Q29vcmRcIik7dGhpcy51X21hdHJpeF9Mb2NfT2ZmPWFILmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnNoYWRlclByb2dyYW1PZmYsXCJ1X212cE1hdHJpeFwiKTt0aGlzLnVfY2xpcE1hdHJpeF9Mb2NfT2ZmPWFILmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnNoYWRlclByb2dyYW1PZmYsXCJ1X0NsaXBNYXRyaXhcIik7dGhpcy5zX3RleHR1cmUwX0xvY19PZmY9YUguZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMuc2hhZGVyUHJvZ3JhbU9mZixcInNfdGV4dHVyZTBcIik7dGhpcy5zX3RleHR1cmUxX0xvY19PZmY9YUguZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMuc2hhZGVyUHJvZ3JhbU9mZixcInNfdGV4dHVyZTFcIik7dGhpcy51X2NoYW5uZWxGbGFnX0xvY19PZmY9YUguZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMuc2hhZGVyUHJvZ3JhbU9mZixcInVfY2hhbm5lbEZsYWdcIik7dGhpcy51X2Jhc2VDb2xvcl9Mb2NfT2ZmPWFILmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnNoYWRlclByb2dyYW1PZmYsXCJ1X2Jhc2VDb2xvclwiKTt9O0MucHJvdG90eXBlLmRpc3Bvc2VTaGFkZXI9ZnVuY3Rpb24oKXt2YXIgYUg9dGhpcy5nbDtpZih0aGlzLnNoYWRlclByb2dyYW0pe2FILmRlbGV0ZVByb2dyYW0odGhpcy5zaGFkZXJQcm9ncmFtKTt0aGlzLnNoYWRlclByb2dyYW09bnVsbDt9aWYodGhpcy5zaGFkZXJQcm9ncmFtT2ZmKXthSC5kZWxldGVQcm9ncmFtKHRoaXMuc2hhZGVyUHJvZ3JhbU9mZik7dGhpcy5zaGFkZXJQcm9ncmFtT2ZmPW51bGw7fX07Qy5wcm90b3R5cGUuY29tcGlsZVNoYWRlcj1mdW5jdGlvbihhSixhTil7dmFyIGFNPXRoaXMuZ2w7dmFyIGFIO3ZhciBhTD1hTjt2YXIgYUs9YU0uY3JlYXRlU2hhZGVyKGFKKTtpZihhSz09bnVsbCl7cS5fJEppKFwiXyRMMCB0byBjcmVhdGUgc2hhZGVyXCIpO3JldHVybiBudWxsO31hTS5zaGFkZXJTb3VyY2UoYUssYUwpO2FNLmNvbXBpbGVTaGFkZXIoYUspO3ZhciBhSD1hTS5nZXRTaGFkZXJQYXJhbWV0ZXIoYUssYU0uQ09NUElMRV9TVEFUVVMpO2lmKCFhSCl7dmFyIGFJPWFNLmdldFNoYWRlckluZm9Mb2coYUspO3EuXyRKaShcIl8kTDAgdG8gY29tcGlsZSBzaGFkZXIgOiBcIithSSk7YU0uZGVsZXRlU2hhZGVyKGFLKTtyZXR1cm4gbnVsbDt9cmV0dXJuIGFLO307Qy5wcm90b3R5cGUubG9hZFNoYWRlcnMyPWZ1bmN0aW9uKCl7dmFyIGFOPXRoaXMuZ2w7dGhpcy5zaGFkZXJQcm9ncmFtPWFOLmNyZWF0ZVByb2dyYW0oKTtpZighdGhpcy5zaGFkZXJQcm9ncmFtKXtyZXR1cm4gZmFsc2U7fXRoaXMuc2hhZGVyUHJvZ3JhbU9mZj1hTi5jcmVhdGVQcm9ncmFtKCk7aWYoIXRoaXMuc2hhZGVyUHJvZ3JhbU9mZil7cmV0dXJuIGZhbHNlO312YXIgYUs9XCJhdHRyaWJ1dGUgdmVjNCAgICAgYV9wb3NpdGlvbjthdHRyaWJ1dGUgdmVjMiAgICAgYV90ZXhDb29yZDt2YXJ5aW5nIHZlYzIgICAgICAgdl90ZXhDb29yZDt2YXJ5aW5nIHZlYzQgICAgICAgdl9DbGlwUG9zO3VuaWZvcm0gbWF0NCAgICAgICB1X212cE1hdHJpeDt2b2lkIG1haW4oKXsgICAgZ2xfUG9zaXRpb24gPSB1X212cE1hdHJpeCAqIGFfcG9zaXRpb247ICAgIHZfQ2xpcFBvcyA9IHVfbXZwTWF0cml4ICogYV9wb3NpdGlvbjsgICAgdl90ZXhDb29yZCA9IGFfdGV4Q29vcmQ7fVwiO3ZhciBhTT1cInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O3ZhcnlpbmcgdmVjMiAgICAgICB2X3RleENvb3JkO3ZhcnlpbmcgdmVjNCAgICAgICB2X0NsaXBQb3M7dW5pZm9ybSBzYW1wbGVyMkQgIHNfdGV4dHVyZTA7dW5pZm9ybSB2ZWM0ICAgICAgIHVfY2hhbm5lbEZsYWc7dW5pZm9ybSB2ZWM0ICAgICAgIHVfYmFzZUNvbG9yO3VuaWZvcm0gYm9vbCAgICAgICB1X21hc2tGbGFnO3ZvaWQgbWFpbigpeyAgICB2ZWM0IHNtcENvbG9yOyAgICAgaWYodV9tYXNrRmxhZyl7ICAgICAgICBmbG9hdCBpc0luc2lkZSA9ICAgICAgICAgICAgIHN0ZXAodV9iYXNlQ29sb3IueCwgdl9DbGlwUG9zLngvdl9DbGlwUG9zLncpICAgICAgICAgICogc3RlcCh1X2Jhc2VDb2xvci55LCB2X0NsaXBQb3MueS92X0NsaXBQb3MudykgICAgICAgICAgKiBzdGVwKHZfQ2xpcFBvcy54L3ZfQ2xpcFBvcy53LCB1X2Jhc2VDb2xvci56KSAgICAgICAgICAqIHN0ZXAodl9DbGlwUG9zLnkvdl9DbGlwUG9zLncsIHVfYmFzZUNvbG9yLncpOyAgICAgICAgc21wQ29sb3IgPSB1X2NoYW5uZWxGbGFnICogdGV4dHVyZTJEKHNfdGV4dHVyZTAgLCB2X3RleENvb3JkKS5hICogaXNJbnNpZGU7ICAgIH1lbHNleyAgICAgICAgc21wQ29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlMCAsIHZfdGV4Q29vcmQpICogdV9iYXNlQ29sb3I7ICAgIH0gICAgZ2xfRnJhZ0NvbG9yID0gc21wQ29sb3I7fVwiO3ZhciBhTD1cImF0dHJpYnV0ZSB2ZWM0ICAgICBhX3Bvc2l0aW9uO2F0dHJpYnV0ZSB2ZWMyICAgICBhX3RleENvb3JkO3ZhcnlpbmcgdmVjMiAgICAgICB2X3RleENvb3JkO3ZhcnlpbmcgdmVjNCAgICAgICB2X0NsaXBQb3M7dW5pZm9ybSBtYXQ0ICAgICAgIHVfbXZwTWF0cml4O3VuaWZvcm0gbWF0NCAgICAgICB1X0NsaXBNYXRyaXg7dm9pZCBtYWluKCl7ICAgIGdsX1Bvc2l0aW9uID0gdV9tdnBNYXRyaXggKiBhX3Bvc2l0aW9uOyAgICB2X0NsaXBQb3MgPSB1X0NsaXBNYXRyaXggKiBhX3Bvc2l0aW9uOyAgICB2X3RleENvb3JkID0gYV90ZXhDb29yZCA7fVwiO3ZhciBhSj1cInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0IDt2YXJ5aW5nIHZlYzIgICAgICAgdl90ZXhDb29yZDt2YXJ5aW5nIHZlYzQgICAgICAgdl9DbGlwUG9zO3VuaWZvcm0gc2FtcGxlcjJEICBzX3RleHR1cmUwO3VuaWZvcm0gc2FtcGxlcjJEICBzX3RleHR1cmUxO3VuaWZvcm0gdmVjNCAgICAgICB1X2NoYW5uZWxGbGFnO3VuaWZvcm0gdmVjNCAgICAgICB1X2Jhc2VDb2xvciA7dm9pZCBtYWluKCl7ICAgIHZlYzQgY29sX2Zvcm1hc2sgPSB0ZXh0dXJlMkQoc190ZXh0dXJlMCwgdl90ZXhDb29yZCkgKiB1X2Jhc2VDb2xvcjsgICAgdmVjNCBjbGlwTWFzayA9IHRleHR1cmUyRChzX3RleHR1cmUxLCB2X0NsaXBQb3MueHkgLyB2X0NsaXBQb3MudykgKiB1X2NoYW5uZWxGbGFnOyAgICBmbG9hdCBtYXNrVmFsID0gY2xpcE1hc2suciArIGNsaXBNYXNrLmcgKyBjbGlwTWFzay5iICsgY2xpcE1hc2suYTsgICAgY29sX2Zvcm1hc2sgPSBjb2xfZm9ybWFzayAqIG1hc2tWYWw7ICAgIGdsX0ZyYWdDb2xvciA9IGNvbF9mb3JtYXNrO31cIjt0aGlzLnZlcnRTaGFkZXI9dGhpcy5jb21waWxlU2hhZGVyKGFOLlZFUlRFWF9TSEFERVIsYUspO2lmKCF0aGlzLnZlcnRTaGFkZXIpe3EuXyRKaShcIlZlcnRleCBzaGFkZXIgY29tcGlsZSBfJGxpIVwiKTtyZXR1cm4gZmFsc2U7fXRoaXMudmVydFNoYWRlck9mZj10aGlzLmNvbXBpbGVTaGFkZXIoYU4uVkVSVEVYX1NIQURFUixhTCk7aWYoIXRoaXMudmVydFNoYWRlck9mZil7cS5fJEppKFwiT2ZmVmVydGV4IHNoYWRlciBjb21waWxlIF8kbGkhXCIpO3JldHVybiBmYWxzZTt9dGhpcy5mcmFnU2hhZGVyPXRoaXMuY29tcGlsZVNoYWRlcihhTi5GUkFHTUVOVF9TSEFERVIsYU0pO2lmKCF0aGlzLmZyYWdTaGFkZXIpe3EuXyRKaShcIkZyYWdtZW50IHNoYWRlciBjb21waWxlIF8kbGkhXCIpO3JldHVybiBmYWxzZTt9dGhpcy5mcmFnU2hhZGVyT2ZmPXRoaXMuY29tcGlsZVNoYWRlcihhTi5GUkFHTUVOVF9TSEFERVIsYUopO2lmKCF0aGlzLmZyYWdTaGFkZXJPZmYpe3EuXyRKaShcIk9mZkZyYWdtZW50IHNoYWRlciBjb21waWxlIF8kbGkhXCIpO3JldHVybiBmYWxzZTt9YU4uYXR0YWNoU2hhZGVyKHRoaXMuc2hhZGVyUHJvZ3JhbSx0aGlzLnZlcnRTaGFkZXIpO2FOLmF0dGFjaFNoYWRlcih0aGlzLnNoYWRlclByb2dyYW0sdGhpcy5mcmFnU2hhZGVyKTthTi5hdHRhY2hTaGFkZXIodGhpcy5zaGFkZXJQcm9ncmFtT2ZmLHRoaXMudmVydFNoYWRlck9mZik7YU4uYXR0YWNoU2hhZGVyKHRoaXMuc2hhZGVyUHJvZ3JhbU9mZix0aGlzLmZyYWdTaGFkZXJPZmYpO2FOLmxpbmtQcm9ncmFtKHRoaXMuc2hhZGVyUHJvZ3JhbSk7YU4ubGlua1Byb2dyYW0odGhpcy5zaGFkZXJQcm9ncmFtT2ZmKTt2YXIgYUg9YU4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnNoYWRlclByb2dyYW0sYU4uTElOS19TVEFUVVMpO2lmKCFhSCl7dmFyIGFJPWFOLmdldFByb2dyYW1JbmZvTG9nKHRoaXMuc2hhZGVyUHJvZ3JhbSk7cS5fJEppKFwiXyRMMCB0byBsaW5rIHByb2dyYW06IFwiK2FJKTtpZih0aGlzLnZlcnRTaGFkZXIpe2FOLmRlbGV0ZVNoYWRlcih0aGlzLnZlcnRTaGFkZXIpO3RoaXMudmVydFNoYWRlcj0wO31pZih0aGlzLmZyYWdTaGFkZXIpe2FOLmRlbGV0ZVNoYWRlcih0aGlzLmZyYWdTaGFkZXIpO3RoaXMuZnJhZ1NoYWRlcj0wO31pZih0aGlzLnNoYWRlclByb2dyYW0pe2FOLmRlbGV0ZVByb2dyYW0odGhpcy5zaGFkZXJQcm9ncmFtKTt0aGlzLnNoYWRlclByb2dyYW09MDt9aWYodGhpcy52ZXJ0U2hhZGVyT2ZmKXthTi5kZWxldGVTaGFkZXIodGhpcy52ZXJ0U2hhZGVyT2ZmKTt0aGlzLnZlcnRTaGFkZXJPZmY9MDt9aWYodGhpcy5mcmFnU2hhZGVyT2ZmKXthTi5kZWxldGVTaGFkZXIodGhpcy5mcmFnU2hhZGVyT2ZmKTt0aGlzLmZyYWdTaGFkZXJPZmY9MDt9aWYodGhpcy5zaGFkZXJQcm9ncmFtT2ZmKXthTi5kZWxldGVQcm9ncmFtKHRoaXMuc2hhZGVyUHJvZ3JhbU9mZik7dGhpcy5zaGFkZXJQcm9ncmFtT2ZmPTA7fXJldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fTtDLnByb3RvdHlwZS5jcmVhdGVGcmFtZWJ1ZmZlcj1mdW5jdGlvbigpe3ZhciBhTD10aGlzLmdsO3ZhciBhSz1RLmNsaXBwaW5nTWFza0J1ZmZlclNpemU7dmFyIGFKPWFMLmNyZWF0ZUZyYW1lYnVmZmVyKCk7YUwuYmluZEZyYW1lYnVmZmVyKGFMLkZSQU1FQlVGRkVSLGFKKTt2YXIgYUg9YUwuY3JlYXRlUmVuZGVyYnVmZmVyKCk7YUwuYmluZFJlbmRlcmJ1ZmZlcihhTC5SRU5ERVJCVUZGRVIsYUgpO2FMLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYUwuUkVOREVSQlVGRkVSLGFMLlJHQkE0LGFLLGFLKTthTC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihhTC5GUkFNRUJVRkZFUixhTC5DT0xPUl9BVFRBQ0hNRU5UMCxhTC5SRU5ERVJCVUZGRVIsYUgpO3ZhciBhST1hTC5jcmVhdGVUZXh0dXJlKCk7YUwuYmluZFRleHR1cmUoYUwuVEVYVFVSRV8yRCxhSSk7YUwudGV4SW1hZ2UyRChhTC5URVhUVVJFXzJELDAsYUwuUkdCQSxhSyxhSywwLGFMLlJHQkEsYUwuVU5TSUdORURfQllURSxudWxsKTthTC50ZXhQYXJhbWV0ZXJpKGFMLlRFWFRVUkVfMkQsYUwuVEVYVFVSRV9NSU5fRklMVEVSLGFMLkxJTkVBUik7YUwudGV4UGFyYW1ldGVyaShhTC5URVhUVVJFXzJELGFMLlRFWFRVUkVfTUFHX0ZJTFRFUixhTC5MSU5FQVIpO2FMLnRleFBhcmFtZXRlcmkoYUwuVEVYVFVSRV8yRCxhTC5URVhUVVJFX1dSQVBfUyxhTC5DTEFNUF9UT19FREdFKTthTC50ZXhQYXJhbWV0ZXJpKGFMLlRFWFRVUkVfMkQsYUwuVEVYVFVSRV9XUkFQX1QsYUwuQ0xBTVBfVE9fRURHRSk7YUwuZnJhbWVidWZmZXJUZXh0dXJlMkQoYUwuRlJBTUVCVUZGRVIsYUwuQ09MT1JfQVRUQUNITUVOVDAsYUwuVEVYVFVSRV8yRCxhSSwwKTthTC5iaW5kVGV4dHVyZShhTC5URVhUVVJFXzJELG51bGwpO2FMLmJpbmRSZW5kZXJidWZmZXIoYUwuUkVOREVSQlVGRkVSLG51bGwpO2FMLmJpbmRGcmFtZWJ1ZmZlcihhTC5GUkFNRUJVRkZFUixudWxsKTtRLmZUZXh0dXJlW3RoaXMuZ2xub109YUk7cmV0dXJue2ZyYW1lYnVmZmVyOmFKLHJlbmRlcmJ1ZmZlcjphSCx0ZXh0dXJlOlEuZlRleHR1cmVbdGhpcy5nbG5vXX07fTtmdW5jdGlvbiBLKGFIKXtpZihqKXtyZXR1cm47fXRoaXMuXyRQPW5ldyBJbnQ4QXJyYXkoOCk7dGhpcy5fJFIwPW5ldyBEYXRhVmlldyh0aGlzLl8kUC5idWZmZXIpO3RoaXMuXyQzaT1uZXcgSW50OEFycmF5KDEwMDApO3RoaXMuXyRoTD0wO3RoaXMuXyR2MD0wO3RoaXMuXyRTMj0wO3RoaXMuXyRLbz1uZXcgQXJyYXkoKTt0aGlzLl8kVD1hSDt0aGlzLl8kRj0wO31LLnByb3RvdHlwZS5fJGZQPWZ1bmN0aW9uKCl7dmFyIGFLPXRoaXMuXyRTVCgpO3ZhciBhSixhSSxhSDtpZigoYUsmMTI4KT09MCl7cmV0dXJuIGFLJjI1NTt9ZWxzZXtpZigoKGFKPXRoaXMuXyRTVCgpKSYxMjgpPT0wKXtyZXR1cm4oKGFLJjEyNyk8PDcpfChhSiYxMjcpO31lbHNle2lmKCgoYUk9dGhpcy5fJFNUKCkpJjEyOCk9PTApe3JldHVybigoYUsmMTI3KTw8MTQpfCgoYUomMTI3KTw8Nyl8KGFJJjI1NSk7fWVsc2V7aWYoKChhSD10aGlzLl8kU1QoKSkmMTI4KT09MCl7cmV0dXJuKChhSyYxMjcpPDwyMSl8KChhSiYxMjcpPDwxNCl8KChhSSYxMjcpPDw3KXwoYUgmMjU1KTt9ZWxzZXt0aHJvdyBuZXcgSihcIl8kTCBfJDBQICBfXCIpO319fX19O0sucHJvdG90eXBlLmdldEZvcm1hdFZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fJFMyO307Sy5wcm90b3R5cGUuXyRncj1mdW5jdGlvbihhSCl7dGhpcy5fJFMyPWFIO307Sy5wcm90b3R5cGUuXyQzTD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl8kZlAoKTt9O0sucHJvdG90eXBlLl8kbVA9ZnVuY3Rpb24oKXt0aGlzLl8kelQoKTt0aGlzLl8kRis9ODtyZXR1cm4gdGhpcy5fJFQuZ2V0RmxvYXQ2NCh0aGlzLl8kRi04KTt9O0sucHJvdG90eXBlLl8kX1Q9ZnVuY3Rpb24oKXt0aGlzLl8kelQoKTt0aGlzLl8kRis9NDtyZXR1cm4gdGhpcy5fJFQuZ2V0RmxvYXQzMih0aGlzLl8kRi00KTt9O0sucHJvdG90eXBlLl8kNkw9ZnVuY3Rpb24oKXt0aGlzLl8kelQoKTt0aGlzLl8kRis9NDtyZXR1cm4gdGhpcy5fJFQuZ2V0SW50MzIodGhpcy5fJEYtNCk7fTtLLnByb3RvdHlwZS5fJFNUPWZ1bmN0aW9uKCl7dGhpcy5fJHpUKCk7cmV0dXJuIHRoaXMuXyRULmdldEludDgodGhpcy5fJEYrKyk7fTtLLnByb3RvdHlwZS5fJDlUPWZ1bmN0aW9uKCl7dGhpcy5fJHpUKCk7dGhpcy5fJEYrPTI7cmV0dXJuIHRoaXMuXyRULmdldEludDE2KHRoaXMuXyRGLTIpO307Sy5wcm90b3R5cGUuXyQyVD1mdW5jdGlvbigpe3RoaXMuXyR6VCgpO3RoaXMuXyRGKz04O3Rocm93IG5ldyBKKFwiXyRMIF8kcSByZWFkIGxvbmdcIik7fTtLLnByb3RvdHlwZS5fJHBvPWZ1bmN0aW9uKCl7dGhpcy5fJHpUKCk7cmV0dXJuIHRoaXMuXyRULmdldEludDgodGhpcy5fJEYrKykhPTA7fTt2YXIgTz10cnVlO0sucHJvdG90eXBlLl8kYlQ9ZnVuY3Rpb24oKXt0aGlzLl8kelQoKTt2YXIgYUg9dGhpcy5fJDNMKCk7dmFyIGFLPW51bGw7aWYoTyl7dHJ5e3ZhciBhTT1uZXcgQXJyYXlCdWZmZXIoYUgqMik7YUs9bmV3IFVpbnQxNkFycmF5KGFNKTtmb3IodmFyIGFKPTA7YUo8YUg7KythSil7YUtbYUpdPXRoaXMuXyRULmdldFVpbnQ4KHRoaXMuXyRGKyspO31yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGFLKTt9Y2F0Y2goYUwpe089ZmFsc2U7fX10cnl7dmFyIGFJPW5ldyBBcnJheSgpO2lmKGFLPT1udWxsKXtmb3IodmFyIGFKPTA7YUo8YUg7KythSil7YUlbYUpdPXRoaXMuXyRULmdldFVpbnQ4KHRoaXMuXyRGKyspO319ZWxzZXtmb3IodmFyIGFKPTA7YUo8YUg7KythSil7YUlbYUpdPWFLW2FKXTt9fXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYUkpO31jYXRjaChhTCl7Y29uc29sZS5sb2coXCJyZWFkIHV0ZjggLyBfJHJUIF8kTDAgISEgOiBcIithTCk7fX07Sy5wcm90b3R5cGUuXyRjUz1mdW5jdGlvbigpe3RoaXMuXyR6VCgpO3ZhciBhST10aGlzLl8kM0woKTt2YXIgYUg9bmV3IEludDMyQXJyYXkoYUkpO2Zvcih2YXIgYUo9MDthSjxhSTthSisrKXthSFthSl09dGhpcy5fJFQuZ2V0SW50MzIodGhpcy5fJEYpO3RoaXMuXyRGKz00O31yZXR1cm4gYUg7fTtLLnByb3RvdHlwZS5fJFRiPWZ1bmN0aW9uKCl7dGhpcy5fJHpUKCk7dmFyIGFJPXRoaXMuXyQzTCgpO3ZhciBhSD1uZXcgRmxvYXQzMkFycmF5KGFJKTtmb3IodmFyIGFKPTA7YUo8YUk7YUorKyl7YUhbYUpdPXRoaXMuXyRULmdldEZsb2F0MzIodGhpcy5fJEYpO3RoaXMuXyRGKz00O31yZXR1cm4gYUg7fTtLLnByb3RvdHlwZS5fJDViPWZ1bmN0aW9uKCl7dGhpcy5fJHpUKCk7dmFyIGFJPXRoaXMuXyQzTCgpO3ZhciBhSD1uZXcgRmxvYXQ2NEFycmF5KGFJKTtmb3IodmFyIGFKPTA7YUo8YUk7YUorKyl7YUhbYUpdPXRoaXMuXyRULmdldEZsb2F0NjQodGhpcy5fJEYpO3RoaXMuXyRGKz04O31yZXR1cm4gYUg7fTtLLnByb3RvdHlwZS5fJG5QPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRKYigtMSk7fTtLLnByb3RvdHlwZS5fJEpiPWZ1bmN0aW9uKGFKKXt0aGlzLl8kelQoKTtpZihhSjwwKXthSj10aGlzLl8kM0woKTt9aWYoYUo9PWF5Ll8kN1Ape3ZhciBhSD10aGlzLl8kNkwoKTtpZigwPD1hSCYmYUg8dGhpcy5fJEtvLmxlbmd0aCl7cmV0dXJuIHRoaXMuXyRLb1thSF07fWVsc2V7dGhyb3cgbmV3IEooXCJfJHNMIF8kNGkgQF8kbTBcIik7fX1lbHNle3ZhciBhST10aGlzLl8kNGIoYUopO3RoaXMuXyRLby5wdXNoKGFJKTtyZXR1cm4gYUk7fX07Sy5wcm90b3R5cGUuXyQ0Yj1mdW5jdGlvbihhTil7aWYoYU49PTApe3JldHVybiBudWxsO31pZihhTj09NTApe3ZhciBhSz10aGlzLl8kYlQoKTt2YXIgYUk9Wi5nZXRJRChhSyk7cmV0dXJuIGFJO31lbHNle2lmKGFOPT01MSl7dmFyIGFLPXRoaXMuXyRiVCgpO3ZhciBhST1uLmdldElEKGFLKTtyZXR1cm4gYUk7fWVsc2V7aWYoYU49PTEzNCl7dmFyIGFLPXRoaXMuXyRiVCgpO3ZhciBhST1pLmdldElEKGFLKTtyZXR1cm4gYUk7fWVsc2V7aWYoYU49PTYwKXt2YXIgYUs9dGhpcy5fJGJUKCk7dmFyIGFJPXouZ2V0SUQoYUspO3JldHVybiBhSTt9fX19aWYoYU4+PTQ4KXt2YXIgYUw9YXkuXyQ5byhhTik7aWYoYUwhPW51bGwpe2FMLl8kRjAodGhpcyk7cmV0dXJuIGFMO31lbHNle3JldHVybiBudWxsO319c3dpdGNoKGFOKXtjYXNlIDE6cmV0dXJuIHRoaXMuXyRiVCgpO2Nhc2UgMTA6dmFyIGFNPXRoaXMuXyQ2TCgpO3JldHVybiBuZXcgSShhTSx0cnVlKTtjYXNlIDExOnJldHVybiBuZXcgYXYodGhpcy5fJG1QKCksdGhpcy5fJG1QKCksdGhpcy5fJG1QKCksdGhpcy5fJG1QKCkpO2Nhc2UgMTI6cmV0dXJuIG5ldyBhdih0aGlzLl8kX1QoKSx0aGlzLl8kX1QoKSx0aGlzLl8kX1QoKSx0aGlzLl8kX1QoKSk7Y2FzZSAxMzpyZXR1cm4gbmV3IGUodGhpcy5fJG1QKCksdGhpcy5fJG1QKCkpO2Nhc2UgMTQ6cmV0dXJuIG5ldyBlKHRoaXMuXyRfVCgpLHRoaXMuXyRfVCgpKTtjYXNlIDE1OnZhciBhSD10aGlzLl8kM0woKTt2YXIgYUk9bmV3IEFycmF5KGFIKTtmb3IodmFyIGFKPTA7YUo8YUg7YUorKyl7YUlbYUpdPXRoaXMuXyRuUCgpO31yZXR1cm4gYUk7Y2FzZSAxNzp2YXIgYUk9bmV3IGFEKHRoaXMuXyRtUCgpLHRoaXMuXyRtUCgpLHRoaXMuXyRtUCgpLHRoaXMuXyRtUCgpLHRoaXMuXyRtUCgpLHRoaXMuXyRtUCgpKTtyZXR1cm4gYUk7Y2FzZSAyMTpyZXR1cm4gbmV3IEYodGhpcy5fJDZMKCksdGhpcy5fJDZMKCksdGhpcy5fJDZMKCksdGhpcy5fJDZMKCkpO2Nhc2UgMjI6cmV0dXJuIG5ldyBrKHRoaXMuXyQ2TCgpLHRoaXMuXyQ2TCgpKTtjYXNlIDIzOnRocm93IG5ldyBFcnJvcihcIl8kTCBfJHJvIFwiKTtjYXNlIDE2OmNhc2UgMjU6cmV0dXJuIHRoaXMuXyRjUygpO2Nhc2UgMjY6cmV0dXJuIHRoaXMuXyQ1YigpO2Nhc2UgMjc6cmV0dXJuIHRoaXMuXyRUYigpO2Nhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxODpjYXNlIDE5OmNhc2UgMjA6Y2FzZSAyNDpjYXNlIDI4OnRocm93IG5ldyBKKFwiXyQ2IF8kcSA6IF8kblAoKSBvZiAyLTkgLDE4LDE5LDIwLDI0LDI4IDogXCIrYU4pO2RlZmF1bHQ6dGhyb3cgbmV3IEooXCJfJDYgXyRxIDogXyRuUCgpIE5PIF8kaSA6IFwiK2FOKTt9fTtLLnByb3RvdHlwZS5fJDhMPWZ1bmN0aW9uKCl7aWYodGhpcy5fJGhMPT0wKXt0aGlzLl8kdjA9dGhpcy5fJFNUKCk7fWVsc2V7aWYodGhpcy5fJGhMPT04KXt0aGlzLl8kdjA9dGhpcy5fJFNUKCk7dGhpcy5fJGhMPTA7fX1yZXR1cm4oKHRoaXMuXyR2MD4+KDctdGhpcy5fJGhMKyspKSYxKT09MTt9O0sucHJvdG90eXBlLl8kelQ9ZnVuY3Rpb24oKXtpZih0aGlzLl8kaEwhPTApe3RoaXMuXyRoTD0wO319O2Z1bmN0aW9uIGFpKCl7fWFpLnByb3RvdHlwZS5fJHdQPWZ1bmN0aW9uKGFNLGFJLGFLKXtmb3IodmFyIGFMPTA7YUw8YUs7YUwrKyl7Zm9yKHZhciBhSD0wO2FIPGFJO2FIKyspe3ZhciBhSj0yKihhSCthTCphSSk7Y29uc29sZS5sb2coXCIoJSA3LjNmICwgJSA3LjNmKSAsIFwiLGFNW2FKXSxhTVthSisxXSk7fWNvbnNvbGUubG9nKFwiXFxuXCIpO31jb25zb2xlLmxvZyhcIlxcblwiKTt9O2Z1bmN0aW9uIGFDKCl7fWFDLl8kMlM9TWF0aC5QSS8xODA7YUMuXyRiUz0oTWF0aC5QSS8xODApO2FDLl8kd1M9MTgwL01hdGguUEk7YUMuXyROUz0oMTgwL01hdGguUEkpO2FDLlBJX0Y9TWF0aC5QSTthQy5fJGtUPVswLDAuMDEyMzY4LDAuMDI0NzM0LDAuMDM3MDk3LDAuMDQ5NDU0LDAuMDYxODAzLDAuMDc0MTQzLDAuMDg2NDcxLDAuMDk4Nzg2LDAuMTExMDg3LDAuMTIzMzcsMC4xMzU2MzQsMC4xNDc4NzcsMC4xNjAwOTgsMC4xNzIyOTUsMC4xODQ0NjUsMC4xOTY2MDYsMC4yMDg3MTgsMC4yMjA3OTgsMC4yMzI4NDQsMC4yNDQ4NTQsMC4yNTY4MjcsMC4yNjg3NjEsMC4yODA2NTQsMC4yOTI1MDMsMC4zMDQzMDgsMC4zMTYwNjYsMC4zMjc3NzYsMC4zMzk0MzYsMC4zNTEwNDQsMC4zNjI1OTgsMC4zNzQwOTcsMC4zODU1MzgsMC4zOTY5MjEsMC40MDgyNDMsMC40MTk1MDIsMC40MzA2OTcsMC40NDE4MjYsMC40NTI4ODgsMC40NjM4ODEsMC40NzQ4MDIsMC40ODU2NTEsMC40OTY0MjUsMC41MDcxMjQsMC41MTc3NDUsMC41MjgyODcsMC41Mzg3NDgsMC41NDkxMjYsMC41NTk0MjEsMC41Njk2MywwLjU3OTc1MiwwLjU4OTc4NSwwLjU5OTcyOCwwLjYwOTU3OSwwLjYxOTMzNywwLjYyOSwwLjYzODU2NywwLjY0ODAzNiwwLjY1NzQwNiwwLjY2NjY3NiwwLjY3NTg0MywwLjY4NDkwOCwwLjY5Mzg2NywwLjcwMjcyLDAuNzExNDY2LDAuNzIwMTAzLDAuNzI4NjMsMC43MzcwNDUsMC43NDUzNDgsMC43NTM1MzYsMC43NjE2MSwwLjc2OTU2NiwwLjc3NzQwNSwwLjc4NTEyNSwwLjc5MjcyNSwwLjgwMDIwNCwwLjgwNzU2MSwwLjgxNDc5MywwLjgyMTkwMSwwLjgyODg4NCwwLjgzNTczOSwwLjg0MjQ2NywwLjg0OTA2NiwwLjg1NTUzNSwwLjg2MTg3MywwLjg2ODA3OSwwLjg3NDE1MywwLjg4MDA5MywwLjg4NTg5OCwwLjg5MTU2NywwLjg5NzEwMSwwLjkwMjQ5NywwLjkwNzc1NCwwLjkxMjg3MywwLjkxNzg1MywwLjkyMjY5MiwwLjkyNzM5LDAuOTMxOTQ2LDAuOTM2MzU5LDAuOTQwNjI5LDAuOTQ0NzU1LDAuOTQ4NzM3LDAuOTUyNTc0LDAuOTU2MjY1LDAuOTU5ODA5LDAuOTYzMjA3LDAuOTY2NDU3LDAuOTY5NTYsMC45NzI1MTQsMC45NzUzMiwwLjk3Nzk3NiwwLjk4MDQ4MiwwLjk4MjgzOSwwLjk4NTA0NSwwLjk4NzEwMSwwLjk4OTAwNiwwLjk5MDc1OSwwLjk5MjM2MSwwLjk5MzgxMSwwLjk5NTEwOSwwLjk5NjI1NCwwLjk5NzI0OCwwLjk5ODA4OCwwLjk5ODc3NiwwLjk5OTMxMiwwLjk5OTY5NCwwLjk5OTkyNCwxXTthQy5fJDkyPWZ1bmN0aW9uKGFLLGFJKXt2YXIgYUg9TWF0aC5hdGFuMihhS1sxXSxhS1swXSk7dmFyIGFKPU1hdGguYXRhbjIoYUlbMV0sYUlbMF0pO3JldHVybiBhQy5fJHRTKGFILGFKKTt9O2FDLl8kdFM9ZnVuY3Rpb24oYUksYUgpe3ZhciBhSj1hSS1hSDt3aGlsZShhSjwtTWF0aC5QSSl7YUorPTIqTWF0aC5QSTt9d2hpbGUoYUo+TWF0aC5QSSl7YUotPTIqTWF0aC5QSTt9cmV0dXJuIGFKO307YUMuXyQ5PWZ1bmN0aW9uKGFIKXtyZXR1cm4gTWF0aC5zaW4oYUgpO307YUMuZmNvcz1mdW5jdGlvbihhSCl7cmV0dXJuIE1hdGguY29zKGFIKTt9O2Z1bmN0aW9uIGFCKGFIKXtpZihqKXtyZXR1cm47fXRoaXMuXyRlMD1udWxsO3RoaXMuXyRJUD1udWxsO3RoaXMuXyRVcz1udWxsO3RoaXMuXyQ3cz1udWxsO3RoaXMuXyRJUz1bZmFsc2VdO3RoaXMuXyRWUz1udWxsO3RoaXMuXyRBVD10cnVlO3RoaXMuYmFzZU9wYWNpdHk9MTt0aGlzLmNsaXBCdWZQcmVfY2xpcENvbnRleHQ9bnVsbDt0aGlzLl8kZTA9YUg7fWFCLnByb3RvdHlwZS5fJHUyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRJU1swXTt9O2FCLnByb3RvdHlwZS5fJHlvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRBVCYmIXRoaXMuXyRJU1swXTt9O2FCLnByb3RvdHlwZS5fJEdUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyRlMDt9O2Z1bmN0aW9uIHIoKXt9ci5fJFcyPTA7ci5TWVNURU1fSU5GTz1udWxsO3IuVVNFUl9BR0VOVD1uYXZpZ2F0b3IudXNlckFnZW50O3IuaXNJUGhvbmU9ZnVuY3Rpb24oKXtpZighci5TWVNURU1fSU5GTyl7ci5zZXR1cCgpO31yZXR1cm4gci5TWVNURU1fSU5GTy5faXNJUGhvbmU7fTtyLmlzSU9TPWZ1bmN0aW9uKCl7aWYoIXIuU1lTVEVNX0lORk8pe3Iuc2V0dXAoKTt9cmV0dXJuIHIuU1lTVEVNX0lORk8uX2lzSVBob25lfHxyLlNZU1RFTV9JTkZPLl9pc0lQYWQ7fTtyLmlzQW5kcm9pZD1mdW5jdGlvbigpe2lmKCFyLlNZU1RFTV9JTkZPKXtyLnNldHVwKCk7fXJldHVybiByLlNZU1RFTV9JTkZPLl9pc0FuZHJvaWQ7fTtyLmdldE9TVmVyc2lvbj1mdW5jdGlvbigpe2lmKCFyLlNZU1RFTV9JTkZPKXtyLnNldHVwKCk7fXJldHVybiByLlNZU1RFTV9JTkZPLnZlcnNpb247fTtyLmdldE9TPWZ1bmN0aW9uKCl7aWYoIXIuU1lTVEVNX0lORk8pe3Iuc2V0dXAoKTt9aWYoci5TWVNURU1fSU5GTy5faXNJUGhvbmV8fHIuU1lTVEVNX0lORk8uX2lzSVBhZCl7cmV0dXJuXCJpT1NcIjt9aWYoci5TWVNURU1fSU5GTy5faXNBbmRyb2lkKXtyZXR1cm5cIkFuZHJvaWRcIjt9ZWxzZXtyZXR1cm5cIl8kUTAgT1NcIjt9fTtyLnNldHVwPWZ1bmN0aW9uKCl7dmFyIGFLPXIuVVNFUl9BR0VOVDtmdW5jdGlvbiBhSShhTyxhUil7dmFyIGFOPWFPLnN1YnN0cmluZyhhUikuc3BsaXQoL1sgXyw7XFwuXS8pO3ZhciBhUT0wO2Zvcih2YXIgYU09MDthTTw9MjthTSsrKXtpZihpc05hTihhTlthTV0pKXticmVhazt9dmFyIGFQPXBhcnNlSW50KGFOW2FNXSk7aWYoYVA8MHx8YVA+OTk5KXtxLl8kbGkoXCJlcnIgOiBcIithUCtcIiBAVXRIdG1sNS5zZXR1cCgpXCIpO2FRPTA7YnJlYWs7fWFRKz1hUCpNYXRoLnBvdygxMDAwLCgyLWFNKSk7fXJldHVybiBhUTt9dmFyIGFMO3ZhciBhSDt2YXIgYUo9ci5TWVNURU1fSU5GTz17dXNlckFnZW50OmFLfTtpZigoYUw9YUsuaW5kZXhPZihcImlQaG9uZSBPUyBcIikpPj0wKXthSi5vcz1cImlQaG9uZVwiO2FKLl9pc0lQaG9uZT10cnVlO2FKLnZlcnNpb249YUkoYUssYUwrXCJpUGhvbmUgT1MgXCIubGVuZ3RoKTt9ZWxzZXtpZigoYUw9YUsuaW5kZXhPZihcImlQYWRcIikpPj0wKXthTD1hSy5pbmRleE9mKFwiQ1BVIE9TXCIpO2lmKGFMPDApe3EuXyRsaShcIiBlcnIgOiBcIithSytcIiBAVXRIdG1sNS5zZXR1cCgpXCIpO3JldHVybjt9YUoub3M9XCJpUGFkXCI7YUouX2lzSVBhZD10cnVlO2FKLnZlcnNpb249YUkoYUssYUwrXCJDUFUgT1MgXCIubGVuZ3RoKTt9ZWxzZXtpZigoYUw9YUsuaW5kZXhPZihcIkFuZHJvaWRcIikpPj0wKXthSi5vcz1cIkFuZHJvaWRcIjthSi5faXNBbmRyb2lkPXRydWU7YUoudmVyc2lvbj1hSShhSyxhTCtcIkFuZHJvaWQgXCIubGVuZ3RoKTt9ZWxzZXthSi5vcz1cIi1cIjthSi52ZXJzaW9uPS0xO319fX07d2luZG93LlV0U3lzdGVtPVA7d2luZG93LlV0RGVidWc9cTt3aW5kb3cuTERUcmFuc2Zvcm09YW07d2luZG93LkxER0w9YXU7d2luZG93LkxpdmUyRD1RO3dpbmRvdy5MaXZlMkRNb2RlbFdlYkdMPWw7d2luZG93LkxpdmUyRE1vZGVsSlM9djt3aW5kb3cuTGl2ZTJETW90aW9uPWFvO3dpbmRvdy5Nb3Rpb25RdWV1ZU1hbmFnZXI9Vjt3aW5kb3cuUGh5c2ljc0hhaXI9dTt3aW5kb3cuQU1vdGlvbj1haDt3aW5kb3cuUGFydHNEYXRhSUQ9aTt3aW5kb3cuRHJhd0RhdGFJRD1aO3dpbmRvdy5CYXNlRGF0YUlEPW47d2luZG93LlBhcmFtSUQ9ejtRLmluaXQoKTt2YXIgaj1mYWxzZTt9KSgpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvbGliL2xpdmUyZC5taW4uanMiXSwibWFwcGluZ3MiOiI7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n')},/*!***********************************!*\ + !*** (webpack)/buildin/system.js ***! + \***********************************/ +function(module,exports){eval('// Provide a "System" global.\r\nmodule.exports = {\r\n\t// Make sure import is only used as "System.import"\r\n\timport: function() {\r\n\t\tthrow new Error("System.import cannot be used indirectly");\r\n\t}\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vc3lzdGVtLmpzPzA4ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUHJvdmlkZSBhIFwiU3lzdGVtXCIgZ2xvYmFsLlxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHQvLyBNYWtlIHN1cmUgaW1wb3J0IGlzIG9ubHkgdXNlZCBhcyBcIlN5c3RlbS5pbXBvcnRcIlxyXG5cdGltcG9ydDogZnVuY3Rpb24oKSB7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJTeXN0ZW0uaW1wb3J0IGNhbm5vdCBiZSB1c2VkIGluZGlyZWN0bHlcIik7XHJcblx0fVxyXG59O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9zeXN0ZW0uanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///10\n')},/*!***************************!*\ + !*** multi ./src/main.js ***! + \***************************/ +function(a,t,n){a.exports=n(/*! ./src/main.js */4)}]); \ No newline at end of file diff --git a/dist/index.html b/dist/index.html index cf61507..6f342c6 100755 --- a/dist/index.html +++ b/dist/index.html @@ -1 +1,19 @@ -live2d
\ No newline at end of file + + + + + + live2d + + + + + +
+ + +
+ + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..f976e0b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3197 @@ +{ + "name": "hexo-helper-live2d", + "version": "2.0.8", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "acorn": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "asn1.js": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", + "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.0", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", + "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "dev": true, + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.1", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, + "babel-preset-env": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", + "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.6.1", + "invariant": "2.2.2", + "semver": "5.4.1" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.1", + "regenerator-runtime": "0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", + "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=" + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.5" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "0.2.9" + } + }, + "browserslist": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.6.1.tgz", + "integrity": "sha512-HBZwVT7ciQB9KlXM3AUMQbnQXtHWPsEUKQTiS0BEFfY5bOrMl94ORaqQD1GyuTGh69ZmYeue9QBqiw219e09eQ==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000757", + "electron-to-chromium": "1.3.27" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000757", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000757.tgz", + "integrity": "sha1-geO8ApcooDKTNQGZTvedscIRWeM=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "clean-css": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", + "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "core-js": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.9" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "crypto-browserify": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", + "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.5" + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "electron-to-chromium": { + "version": "1.3.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", + "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dev": true, + "requires": { + "prr": "0.0.0" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "2.2.3" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.1.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "1.0.2" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hexo-fs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/hexo-fs/-/hexo-fs-0.2.2.tgz", + "integrity": "sha512-boZoDQYieQJJ4drW40B5XI1Tol/ucEGXSV2qjVWI51NsGbFTNw0PBIZjwSs2rum6QnJIYw50K7uBTo8WXGp/aw==", + "requires": { + "bluebird": "3.5.1", + "chokidar": "1.7.0", + "escape-string-regexp": "1.0.5", + "graceful-fs": "4.1.11" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "html-minifier": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.6.tgz", + "integrity": "sha512-88FjtKrlak2XjczhxrBomgzV4jmGzM3UnHRBScRkJcmcRum0kb+IwhVAETJ8AVp7j0p3xugjSaw9L+RmI5/QOA==", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.9", + "commander": "2.11.0", + "he": "1.1.1", + "ncname": "1.0.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.1.6" + } + }, + "html-webpack-plugin": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "html-minifier": "3.5.6", + "loader-utils": "0.2.17", + "lodash": "4.17.4", + "pretty-error": "2.1.1", + "toposort": "1.0.6" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "interpret": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", + "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "1.10.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "3.2.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "make-dir": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", + "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "ncname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "dev": true, + "requires": { + "xml-char-classes": "1.0.0" + } + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "node-libs-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", + "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.11.1", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "0.0.1", + "os-browserify": "0.2.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.3", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "0.10.31", + "timers-browserify": "2.0.4", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "os-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.9.2", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "0.11.10", + "util": "0.10.3" + } + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "2.0.1", + "utila": "0.4.0" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + } + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.1.4", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "sha.js": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", + "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-loader": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.3.tgz", + "integrity": "sha512-MYbFX9DYxmTQFfy2v8FC1XZwpwHKYxg3SK8Wb7VPBKuhDjz8gi9re2819MsG4p49HDyiOSUKlmZ+nQBArW5CGw==", + "dev": true, + "requires": { + "async": "2.5.0", + "loader-utils": "0.2.17", + "source-map": "0.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "toposort": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", + "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "uglify-js": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.6.tgz", + "integrity": "sha512-/rseyxEKEVMBo8279lqpoJgD6C/i/CIi+9TJDvWmb+Xo6mqMKwjA8Io3IMHlcXQzj99feR6zrN8m3wqqvm/nYA==", + "dev": true, + "requires": { + "commander": "2.11.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "watchpack": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "dev": true, + "requires": { + "async": "2.5.0", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + } + }, + "webpack": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz", + "integrity": "sha512-MjAA0ZqO1ba7ZQJRnoCdbM56mmFpipOPUv/vQpwwfSI42p5PVDdoiuK2AL2FwFUVgT859Jr43bFZXRg/LNsqvg==", + "dev": true, + "requires": { + "acorn": "5.2.1", + "acorn-dynamic-import": "2.0.2", + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "async": "2.5.0", + "enhanced-resolve": "3.4.1", + "interpret": "1.0.4", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "0.2.17", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.0.0", + "source-map": "0.5.7", + "supports-color": "3.2.3", + "tapable": "0.2.8", + "uglify-js": "2.8.29", + "watchpack": "1.4.0", + "webpack-sources": "1.0.1", + "yargs": "6.6.0" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + } + } + }, + "webpack-sources": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", + "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.5.7" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "xml-char-classes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + } + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + } + } +}