UNPKG

pannellum-react

Version:
5 lines 548 kB
/*! * pannellum-react v1.2.3 - https://github.com/farminf/pannellum-react * MIT Licensed */ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react")):"function"==typeof define&&define.amd?define(["react"],e):"object"==typeof exports?exports.PannellumReact=e(require("react")):t.PannellumReact=e(t.React)}("undefined"!=typeof self?self:this,function(t){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},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,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=18)}([function(t,e,i){"use strict";var n=function(){this.init=function(){var t={};this.on=function(e,i){t[e]||(t[e]=[]),t[e]=t[e].concat(i)},this.off=function(e,i){var n;return!!t[e]&&(n=t[e].indexOf(i),t[e]=t[e].slice(),t[e].splice(n,1),n>-1)},this.trigger=function(e){var i,n,r,a;if(i=t[e])if(2===arguments.length)for(r=i.length,n=0;n<r;++n)i[n].call(this,arguments[1]);else{for(a=[],n=arguments.length,n=1;n<arguments.length;++n)a.push(arguments[n]);for(r=i.length,n=0;n<r;++n)i[n].apply(this,a)}},this.dispose=function(){t={}}}};n.prototype.pipe=function(t){return this.on("data",function(e){t.push(e)}),this.on("done",function(e){t.flush(e)}),t},n.prototype.push=function(t){this.trigger("data",t)},n.prototype.flush=function(t){this.trigger("done",t)},t.exports=n},function(t,e,i){"use strict";t.exports={H264_STREAM_TYPE:27,ADTS_STREAM_TYPE:15,METADATA_STREAM_TYPE:21}},function(t,e,i){(function(e){var i;i="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},t.exports=i}).call(e,i(12))},function(t,e,i){"use strict";var n,r,a,s,o,u=i(39).toUnsigned;n=function(t,e){var i,a,s,o,l,c=[];if(!e.length)return null;for(i=0;i<t.byteLength;)a=u(t[i]<<24|t[i+1]<<16|t[i+2]<<8|t[i+3]),s=r(t.subarray(i+4,i+8)),o=a>1?i+a:t.byteLength,s===e[0]&&(1===e.length?c.push(t.subarray(i+8,o)):(l=n(t.subarray(i+8,o),e.slice(1))).length&&(c=c.concat(l))),i=o;return c},r=function(t){var e="";return e+=String.fromCharCode(t[0]),e+=String.fromCharCode(t[1]),e+=String.fromCharCode(t[2]),e+=String.fromCharCode(t[3])},a=function(t){return n(t,["moov","trak"]).reduce(function(t,e){var i,r,a,s,o;return(i=n(e,["tkhd"])[0])?(r=i[0],s=u(i[a=0===r?12:20]<<24|i[a+1]<<16|i[a+2]<<8|i[a+3]),(o=n(e,["mdia","mdhd"])[0])?(a=0===(r=o[0])?12:20,t[s]=u(o[a]<<24|o[a+1]<<16|o[a+2]<<8|o[a+3]),t):null):null},{})},s=function(t,e){var i,r,a;return i=n(e,["moof","traf"]),r=[].concat.apply([],i.map(function(e){return n(e,["tfhd"]).map(function(i){var r,a;return r=u(i[4]<<24|i[5]<<16|i[6]<<8|i[7]),a=t[r]||9e4,(n(e,["tfdt"]).map(function(t){var e,i;return e=t[0],i=u(t[4]<<24|t[5]<<16|t[6]<<8|t[7]),1===e&&(i*=Math.pow(2,32),i+=u(t[8]<<24|t[9]<<16|t[10]<<8|t[11])),i})[0]||1/0)/a})})),a=Math.min.apply(null,r),isFinite(a)?a:0},o=function(t){var e=[];return n(t,["moov","trak"]).forEach(function(t){var i=n(t,["mdia","hdlr"]),a=n(t,["tkhd"]);i.forEach(function(t,i){var n,s,o=r(t.subarray(8,12)),u=a[i];"vide"===o&&(s=0===(n=new DataView(u.buffer,u.byteOffset,u.byteLength)).getUint8(0)?n.getUint32(12):n.getUint32(20),e.push(s))})}),e},t.exports={findBox:n,parseType:r,timescale:a,startTime:s,videoTrackIds:o}},function(t,e,i){"use strict";var n,r,a,s,o,u,l,c=i(0),h=i(14),d=i(41),p=i(42),f=i(43),m=i(45),g=i(46).H264Stream,y=i(48),v=i(49),_=i(50),b=["audioobjecttype","channelcount","samplerate","samplingfrequencyindex","samplesize"],T=["width","height","profileIdc","levelIdc","profileCompatibility"];o=function(t){return t[0]==="I".charCodeAt(0)&&t[1]==="D".charCodeAt(0)&&t[2]==="3".charCodeAt(0)},u=function(t,e){var i;if(t.length!==e.length)return!1;for(i=0;i<t.length;i++)if(t[i]!==e[i])return!1;return!0},l=function(t){var e,i=0;for(e=0;e<t.length;e++)i+=t[e].data.byteLength;return i},(r=function(t,e){var i=[],n=0,a=0,s=0,o=1/0;e=e||{},r.prototype.init.call(this),this.push=function(e){p.collectDtsInfo(t,e),t&&b.forEach(function(i){t[i]=e[i]}),i.push(e)},this.setEarliestDts=function(e){a=e-t.timelineStartInfo.baseMediaDecodeTime},this.setVideoBaseMediaDecodeTime=function(t){o=t},this.setAudioAppendStart=function(t){s=t},this.flush=function(){var r,a,s,o;0!==i.length?(r=this.trimAdtsFramesByEarliestDts_(i),t.baseMediaDecodeTime=p.calculateTrackBaseMediaDecodeTime(t,e.keepOriginalTimestamps),this.prefixWithSilence_(t,r),t.samples=this.generateSampleTable_(r),s=h.mdat(this.concatenateFrameData_(r)),i=[],a=h.moof(n,[t]),o=new Uint8Array(a.byteLength+s.byteLength),n++,o.set(a),o.set(s,a.byteLength),p.clearDtsInfo(t),this.trigger("data",{track:t,boxes:o}),this.trigger("done","AudioSegmentStream")):this.trigger("done","AudioSegmentStream")},this.prefixWithSilence_=function(t,e){var i,n,r,a,u=0,l=0,c=0;if(e.length&&(i=_.audioTsToVideoTs(t.baseMediaDecodeTime,t.samplerate),n=Math.ceil(9e4/(t.samplerate/1024)),s&&o&&(u=i-Math.max(s,o),c=(l=Math.floor(u/n))*n),!(l<1||c>45e3))){for((r=v[t.samplerate])||(r=e[0].data),a=0;a<l;a++)e.splice(a,0,{data:r});t.baseMediaDecodeTime-=Math.floor(_.videoTsToAudioTs(c,t.samplerate))}},this.trimAdtsFramesByEarliestDts_=function(e){return t.minSegmentDts>=a?e:(t.minSegmentDts=1/0,e.filter(function(e){return e.dts>=a&&(t.minSegmentDts=Math.min(t.minSegmentDts,e.dts),t.minSegmentPts=t.minSegmentDts,!0)}))},this.generateSampleTable_=function(t){var e,i,n=[];for(e=0;e<t.length;e++)i=t[e],n.push({size:i.data.byteLength,duration:1024});return n},this.concatenateFrameData_=function(t){var e,i,n=0,r=new Uint8Array(l(t));for(e=0;e<t.length;e++)i=t[e],r.set(i.data,n),n+=i.data.byteLength;return r}}).prototype=new c,(n=function(t,e){var i,r,a=0,s=[],o=[];e=e||{},n.prototype.init.call(this),delete t.minPTS,this.gopCache_=[],this.push=function(e){p.collectDtsInfo(t,e),"seq_parameter_set_rbsp"!==e.nalUnitType||i||(i=e.config,t.sps=[e.data],T.forEach(function(e){t[e]=i[e]},this)),"pic_parameter_set_rbsp"!==e.nalUnitType||r||(r=e.data,t.pps=[e.data]),s.push(e)},this.flush=function(){for(var i,n,r,u,l,c;s.length&&"access_unit_delimiter_rbsp"!==s[0].nalUnitType;)s.shift();if(0===s.length)return this.resetStream_(),void this.trigger("done","VideoSegmentStream");if(i=d.groupNalsIntoFrames(s),(r=d.groupFramesIntoGops(i))[0][0].keyFrame||((n=this.getGopForFusion_(s[0],t))?(r.unshift(n),r.byteLength+=n.byteLength,r.nalCount+=n.nalCount,r.pts=n.pts,r.dts=n.dts,r.duration+=n.duration):r=d.extendFirstKeyFrame(r)),o.length){var f;if(!(f=e.alignGopsAtEnd?this.alignGopsAtEnd_(r):this.alignGopsAtStart_(r)))return this.gopCache_.unshift({gop:r.pop(),pps:t.pps,sps:t.sps}),this.gopCache_.length=Math.min(6,this.gopCache_.length),s=[],this.resetStream_(),void this.trigger("done","VideoSegmentStream");p.clearDtsInfo(t),r=f}p.collectDtsInfo(t,r),t.samples=d.generateSampleTable(r),l=h.mdat(d.concatenateNalData(r)),t.baseMediaDecodeTime=p.calculateTrackBaseMediaDecodeTime(t,e.keepOriginalTimestamps),this.trigger("processedGopsInfo",r.map(function(t){return{pts:t.pts,dts:t.dts,byteLength:t.byteLength}})),this.gopCache_.unshift({gop:r.pop(),pps:t.pps,sps:t.sps}),this.gopCache_.length=Math.min(6,this.gopCache_.length),s=[],this.trigger("baseMediaDecodeTime",t.baseMediaDecodeTime),this.trigger("timelineStartInfo",t.timelineStartInfo),u=h.moof(a,[t]),c=new Uint8Array(u.byteLength+l.byteLength),a++,c.set(u),c.set(l,u.byteLength),this.trigger("data",{track:t,boxes:c}),this.resetStream_(),this.trigger("done","VideoSegmentStream")},this.resetStream_=function(){p.clearDtsInfo(t),i=void 0,r=void 0},this.getGopForFusion_=function(e){var i,n,r,a,s,o=1/0;for(s=0;s<this.gopCache_.length;s++)r=(a=this.gopCache_[s]).gop,t.pps&&u(t.pps[0],a.pps[0])&&t.sps&&u(t.sps[0],a.sps[0])&&(r.dts<t.timelineStartInfo.dts||(i=e.dts-r.dts-r.duration)>=-1e4&&i<=45e3&&(!n||o>i)&&(n=a,o=i));return n?n.gop:null},this.alignGopsAtStart_=function(t){var e,i,n,r,a,s,u,l;for(a=t.byteLength,s=t.nalCount,u=t.duration,e=i=0;e<o.length&&i<t.length&&(n=o[e],r=t[i],n.pts!==r.pts);)r.pts>n.pts?e++:(i++,a-=r.byteLength,s-=r.nalCount,u-=r.duration);return 0===i?t:i===t.length?null:((l=t.slice(i)).byteLength=a,l.duration=u,l.nalCount=s,l.pts=l[0].pts,l.dts=l[0].dts,l)},this.alignGopsAtEnd_=function(t){var e,i,n,r,a,s,u;for(e=o.length-1,i=t.length-1,a=null,s=!1;e>=0&&i>=0;){if(n=o[e],r=t[i],n.pts===r.pts){s=!0;break}n.pts>r.pts?e--:(e===o.length-1&&(a=i),i--)}if(!s&&null===a)return null;if(0===(u=s?i:a))return t;var l=t.slice(u),c=l.reduce(function(t,e){return t.byteLength+=e.byteLength,t.duration+=e.duration,t.nalCount+=e.nalCount,t},{byteLength:0,duration:0,nalCount:0});return l.byteLength=c.byteLength,l.duration=c.duration,l.nalCount=c.nalCount,l.pts=l[0].pts,l.dts=l[0].dts,l},this.alignGopsWith=function(t){o=t}}).prototype=new c,(s=function(t,e){this.numberOfTracks=0,this.metadataStream=e,void 0!==t.remux?this.remuxTracks=!!t.remux:this.remuxTracks=!0,this.pendingTracks=[],this.videoTrack=null,this.pendingBoxes=[],this.pendingCaptions=[],this.pendingMetadata=[],this.pendingBytes=0,this.emittedTracks=0,s.prototype.init.call(this),this.push=function(t){return t.text?this.pendingCaptions.push(t):t.frames?this.pendingMetadata.push(t):(this.pendingTracks.push(t.track),this.pendingBoxes.push(t.boxes),this.pendingBytes+=t.boxes.byteLength,"video"===t.track.type&&(this.videoTrack=t.track),void("audio"===t.track.type&&(this.audioTrack=t.track)))}}).prototype=new c,s.prototype.flush=function(t){var e,i,n,r,a=0,s={captions:[],captionStreams:{},metadata:[],info:{}},o=0;if(this.pendingTracks.length<this.numberOfTracks){if("VideoSegmentStream"!==t&&"AudioSegmentStream"!==t)return;if(this.remuxTracks)return;if(0===this.pendingTracks.length)return this.emittedTracks++,void(this.emittedTracks>=this.numberOfTracks&&(this.trigger("done"),this.emittedTracks=0))}for(this.videoTrack?(o=this.videoTrack.timelineStartInfo.pts,T.forEach(function(t){s.info[t]=this.videoTrack[t]},this)):this.audioTrack&&(o=this.audioTrack.timelineStartInfo.pts,b.forEach(function(t){s.info[t]=this.audioTrack[t]},this)),1===this.pendingTracks.length?s.type=this.pendingTracks[0].type:s.type="combined",this.emittedTracks+=this.pendingTracks.length,n=h.initSegment(this.pendingTracks),s.initSegment=new Uint8Array(n.byteLength),s.initSegment.set(n),s.data=new Uint8Array(this.pendingBytes),r=0;r<this.pendingBoxes.length;r++)s.data.set(this.pendingBoxes[r],a),a+=this.pendingBoxes[r].byteLength;for(r=0;r<this.pendingCaptions.length;r++)(e=this.pendingCaptions[r]).startTime=e.startPts-o,e.startTime/=9e4,e.endTime=e.endPts-o,e.endTime/=9e4,s.captionStreams[e.stream]=!0,s.captions.push(e);for(r=0;r<this.pendingMetadata.length;r++)(i=this.pendingMetadata[r]).cueTime=i.pts-o,i.cueTime/=9e4,s.metadata.push(i);s.metadata.dispatchType=this.metadataStream.dispatchType,this.pendingTracks.length=0,this.videoTrack=null,this.pendingBoxes.length=0,this.pendingCaptions.length=0,this.pendingBytes=0,this.pendingMetadata.length=0,this.trigger("data",s),this.emittedTracks>=this.numberOfTracks&&(this.trigger("done"),this.emittedTracks=0)},(a=function(t){var e,i,u=this,l=!0;a.prototype.init.call(this),t=t||{},this.baseMediaDecodeTime=t.baseMediaDecodeTime||0,this.transmuxPipeline_={},this.setupAacPipeline=function(){var e={};this.transmuxPipeline_=e,e.type="aac",e.metadataStream=new f.MetadataStream,e.aacStream=new y,e.audioTimestampRolloverStream=new f.TimestampRolloverStream("audio"),e.timedMetadataTimestampRolloverStream=new f.TimestampRolloverStream("timed-metadata"),e.adtsStream=new m,e.coalesceStream=new s(t,e.metadataStream),e.headOfPipeline=e.aacStream,e.aacStream.pipe(e.audioTimestampRolloverStream).pipe(e.adtsStream),e.aacStream.pipe(e.timedMetadataTimestampRolloverStream).pipe(e.metadataStream).pipe(e.coalesceStream),e.metadataStream.on("timestamp",function(t){e.aacStream.setTimestamp(t.timeStamp)}),e.aacStream.on("data",function(n){"timed-metadata"!==n.type||e.audioSegmentStream||(i=i||{timelineStartInfo:{baseMediaDecodeTime:u.baseMediaDecodeTime},codec:"adts",type:"audio"},e.coalesceStream.numberOfTracks++,e.audioSegmentStream=new r(i,t),e.adtsStream.pipe(e.audioSegmentStream).pipe(e.coalesceStream))}),e.coalesceStream.on("data",this.trigger.bind(this,"data")),e.coalesceStream.on("done",this.trigger.bind(this,"done"))},this.setupTsPipeline=function(){var a={};this.transmuxPipeline_=a,a.type="ts",a.metadataStream=new f.MetadataStream,a.packetStream=new f.TransportPacketStream,a.parseStream=new f.TransportParseStream,a.elementaryStream=new f.ElementaryStream,a.videoTimestampRolloverStream=new f.TimestampRolloverStream("video"),a.audioTimestampRolloverStream=new f.TimestampRolloverStream("audio"),a.timedMetadataTimestampRolloverStream=new f.TimestampRolloverStream("timed-metadata"),a.adtsStream=new m,a.h264Stream=new g,a.captionStream=new f.CaptionStream,a.coalesceStream=new s(t,a.metadataStream),a.headOfPipeline=a.packetStream,a.packetStream.pipe(a.parseStream).pipe(a.elementaryStream),a.elementaryStream.pipe(a.videoTimestampRolloverStream).pipe(a.h264Stream),a.elementaryStream.pipe(a.audioTimestampRolloverStream).pipe(a.adtsStream),a.elementaryStream.pipe(a.timedMetadataTimestampRolloverStream).pipe(a.metadataStream).pipe(a.coalesceStream),a.h264Stream.pipe(a.captionStream).pipe(a.coalesceStream),a.elementaryStream.on("data",function(s){var o;if("metadata"===s.type){for(o=s.tracks.length;o--;)e||"video"!==s.tracks[o].type?i||"audio"!==s.tracks[o].type||((i=s.tracks[o]).timelineStartInfo.baseMediaDecodeTime=u.baseMediaDecodeTime):(e=s.tracks[o]).timelineStartInfo.baseMediaDecodeTime=u.baseMediaDecodeTime;e&&!a.videoSegmentStream&&(a.coalesceStream.numberOfTracks++,a.videoSegmentStream=new n(e,t),a.videoSegmentStream.on("timelineStartInfo",function(t){i&&(i.timelineStartInfo=t,a.audioSegmentStream.setEarliestDts(t.dts))}),a.videoSegmentStream.on("processedGopsInfo",u.trigger.bind(u,"gopInfo")),a.videoSegmentStream.on("baseMediaDecodeTime",function(t){i&&a.audioSegmentStream.setVideoBaseMediaDecodeTime(t)}),a.h264Stream.pipe(a.videoSegmentStream).pipe(a.coalesceStream)),i&&!a.audioSegmentStream&&(a.coalesceStream.numberOfTracks++,a.audioSegmentStream=new r(i,t),a.adtsStream.pipe(a.audioSegmentStream).pipe(a.coalesceStream))}}),a.coalesceStream.on("data",this.trigger.bind(this,"data")),a.coalesceStream.on("done",this.trigger.bind(this,"done"))},this.setBaseMediaDecodeTime=function(t){var n=this.transmuxPipeline_;this.baseMediaDecodeTime=t,i&&(i.timelineStartInfo.dts=void 0,i.timelineStartInfo.pts=void 0,p.clearDtsInfo(i),i.timelineStartInfo.baseMediaDecodeTime=t,n.audioTimestampRolloverStream&&n.audioTimestampRolloverStream.discontinuity()),e&&(n.videoSegmentStream&&(n.videoSegmentStream.gopCache_=[],n.videoTimestampRolloverStream.discontinuity()),e.timelineStartInfo.dts=void 0,e.timelineStartInfo.pts=void 0,p.clearDtsInfo(e),n.captionStream.reset(),e.timelineStartInfo.baseMediaDecodeTime=t),n.timedMetadataTimestampRolloverStream&&n.timedMetadataTimestampRolloverStream.discontinuity()},this.setAudioAppendStart=function(t){i&&this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(t)},this.alignGopsWith=function(t){e&&this.transmuxPipeline_.videoSegmentStream&&this.transmuxPipeline_.videoSegmentStream.alignGopsWith(t)},this.push=function(t){if(l){var e=o(t);e&&"aac"!==this.transmuxPipeline_.type?this.setupAacPipeline():e||"ts"===this.transmuxPipeline_.type||this.setupTsPipeline(),l=!1}this.transmuxPipeline_.headOfPipeline.push(t)},this.flush=function(){l=!0,this.transmuxPipeline_.headOfPipeline.flush()},this.resetCaptions=function(){this.transmuxPipeline_.captionStream&&this.transmuxPipeline_.captionStream.reset()}}).prototype=new c,t.exports={Transmuxer:a,VideoSegmentStream:n,AudioSegmentStream:r,AUDIO_PROPERTIES:b,VIDEO_PROPERTIES:T}},function(e,i){e.exports=t},function(t,e){},function(t,e){},function(t,e){window.libpannellum=function(t,e,i){function n(n){var s,c,h,d,p,f,m,g,y,v,_,b,T,S,w,k,C=e.createElement("canvas");function E(t,e){return 1==t.level&&1!=e.level?-1:1==e.level&&1!=t.level?1:e.timestamp-t.timestamp}function x(t,e){return t.level!=e.level?t.level-e.level:t.diff-e.diff}function A(t,e,i,n,r,a){this.vertices=t,this.side=e,this.level=i,this.x=n,this.y=r,this.path=a.replace("%s",e).replace("%l",i).replace("%x",n).replace("%y",r)}function P(t,e,i,n,r){if(function(t,e){var i=M(t,e.slice(0,3)),n=M(t,e.slice(3,6)),r=M(t,e.slice(6,9)),a=M(t,e.slice(9,12)),s=i[0]+n[0]+r[0]+a[0];if(-4==s||4==s)return!1;var o=i[1]+n[1]+r[1]+a[1];if(-4==o||4==o)return!1;return i[2]+n[2]+r[2]+a[2]!=4}(t,e.vertices)){var a=e.vertices,o=a[0]+a[3]+a[6]+a[9],u=a[1]+a[4]+a[7]+a[10],l=a[2]+a[5]+a[8]+a[11],c=Math.sqrt(o*o+u*u+l*l),h=Math.asin(l/c),d=Math.atan2(u,o)-n;d+=d>Math.PI?-2*Math.PI:d<-Math.PI?2*Math.PI:0,d=Math.abs(d),e.diff=Math.acos(Math.sin(i)*Math.sin(h)+Math.cos(i)*Math.cos(h)*Math.cos(d));for(var p=!1,f=0;f<s.nodeCache.length;f++)if(s.nodeCache[f].path==e.path){p=!0,s.nodeCache[f].timestamp=s.nodeCacheTimestamp++,s.nodeCache[f].diff=e.diff,s.currentNodes.push(s.nodeCache[f]);break}if(p||(e.timestamp=s.nodeCacheTimestamp++,s.currentNodes.push(e),s.nodeCache.push(e)),e.level<s.level){var m=y.cubeResolution*Math.pow(2,e.level-y.maxLevel),g=Math.ceil(m*y.invTileResolution)-1,v=m%y.tileResolution*2,_=2*m%y.tileResolution;0===_&&(_=y.tileResolution),0===v&&(v=2*y.tileResolution);var b=.5;e.x!=g&&e.y!=g||(b=1-y.tileResolution/(y.tileResolution+_));var T,S=1-b,w=[],k=b,C=b,E=b,x=S,L=S,O=S;_<y.tileResolution&&(e.x==g&&e.y!=g?(C=.5,L=.5,"d"!=e.side&&"u"!=e.side||(E=.5,O=.5)):e.x!=g&&e.y==g&&(k=.5,x=.5,"l"!=e.side&&"r"!=e.side||(E=.5,O=.5))),v<=y.tileResolution&&(e.x==g&&(k=0,x=1,"l"!=e.side&&"r"!=e.side||(E=0,O=1)),e.y==g&&(C=0,L=1,"d"!=e.side&&"u"!=e.side||(E=0,O=1))),T=new A([a[0],a[1],a[2],a[0]*k+a[3]*x,a[1]*b+a[4]*S,a[2]*E+a[5]*O,a[0]*k+a[6]*x,a[1]*C+a[7]*L,a[2]*E+a[8]*O,a[0]*b+a[9]*S,a[1]*C+a[10]*L,a[2]*E+a[11]*O],e.side,e.level+1,2*e.x,2*e.y,y.fullpath),w.push(T),e.x==g&&v<=y.tileResolution||(T=new A([a[0]*k+a[3]*x,a[1]*b+a[4]*S,a[2]*E+a[5]*O,a[3],a[4],a[5],a[3]*b+a[6]*S,a[4]*C+a[7]*L,a[5]*E+a[8]*O,a[0]*k+a[6]*x,a[1]*C+a[7]*L,a[2]*E+a[8]*O],e.side,e.level+1,2*e.x+1,2*e.y,y.fullpath),w.push(T)),e.x==g&&v<=y.tileResolution||e.y==g&&v<=y.tileResolution||(T=new A([a[0]*k+a[6]*x,a[1]*C+a[7]*L,a[2]*E+a[8]*O,a[3]*b+a[6]*S,a[4]*C+a[7]*L,a[5]*E+a[8]*O,a[6],a[7],a[8],a[9]*k+a[6]*x,a[10]*b+a[7]*S,a[11]*E+a[8]*O],e.side,e.level+1,2*e.x+1,2*e.y+1,y.fullpath),w.push(T)),e.y==g&&v<=y.tileResolution||(T=new A([a[0]*b+a[9]*S,a[1]*C+a[10]*L,a[2]*E+a[11]*O,a[0]*k+a[6]*x,a[1]*C+a[7]*L,a[2]*E+a[8]*O,a[9]*k+a[6]*x,a[10]*b+a[7]*S,a[11]*E+a[8]*O,a[9],a[10],a[11]],e.side,e.level+1,2*e.x,2*e.y+1,y.fullpath),w.push(T));for(var I=0;I<w.length;I++)P(t,w[I],i,n,r)}}}function L(t,e,i){var n=Math.sin(e),r=Math.cos(e);return"x"==i?[t[0],r*t[1]+n*t[2],r*t[2]-n*t[1],t[3],r*t[4]+n*t[5],r*t[5]-n*t[4],t[6],r*t[7]+n*t[8],r*t[8]-n*t[7]]:"y"==i?[r*t[0]-n*t[2],t[1],r*t[2]+n*t[0],r*t[3]-n*t[5],t[4],r*t[5]+n*t[3],r*t[6]-n*t[8],t[7],r*t[8]+n*t[6]]:"z"==i?[r*t[0]+n*t[1],r*t[1]-n*t[0],t[2],r*t[3]+n*t[4],r*t[4]-n*t[3],t[5],r*t[6]+n*t[7],r*t[7]-n*t[6],t[8]]:void 0}function O(t){return[t[0],t[4],t[8],t[12],t[1],t[5],t[9],t[13],t[2],t[6],t[10],t[14],t[3],t[7],t[11],t[15]]}C.style.width=C.style.height="100%",n.appendChild(C),this.init=function(t,E,x,A,P,L,O,I){if(E===i&&(E="equirectangular"),"equirectangular"!=E&&"cubemap"!=E&&"multires"!=E)throw console.log("Error: invalid image type specified!"),{type:"config error"};if(v=E,y=t,_=x,k=I||{},s){if(h&&(c.detachShader(s,h),c.deleteShader(h)),d&&(c.detachShader(s,d),c.deleteShader(d)),c.bindBuffer(c.ARRAY_BUFFER,null),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,null),s.texture&&c.deleteTexture(s.texture),s.nodeCache)for(var U=0;U<s.nodeCache.length;U++)c.deleteTexture(s.nodeCache[U].texture);c.deleteProgram(s),s=i}var D;g=i;var M,N=!1;if("cubemap"==v)for(D=0;D<6;D++)y[D].width>0?(M===i&&(M=y[D].width),M!=y[D].width&&console.log("Cube faces have inconsistent widths: "+M+" vs. "+y[D].width)):N=!0;function B(t){if(N){var e=t*t*4,i=new Uint8ClampedArray(e),n=I.backgroundColor?I.backgroundColor:[0,0,0];n[0]*=255,n[1]*=255,n[2]*=255;for(var r=0;r<e;r++)i[r++]=n[0],i[r++]=n[1],i[r++]=n[2];var a=new ImageData(i,t,t);for(D=0;D<6;D++)0==y[D].width&&(y[D]=a)}}if("cubemap"==v&&0!=(M&M-1)&&(navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 8_/)||navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 9_/)||navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 10_/)||navigator.userAgent.match(/Trident.*rv[ :]*11\./))||(c||(c=C.getContext("experimental-webgl",{alpha:!1,depth:!1})),c&&1286==c.getError()&&R()),!c&&("multires"==v&&y.hasOwnProperty("fallbackPath")||"cubemap"==v)&&("WebkitAppearance"in e.documentElement.style||navigator.userAgent.match(/Trident.*rv[ :]*11\./)||-1!==navigator.appVersion.indexOf("MSIE 10"))){var j;f&&n.removeChild(f),(f=e.createElement("div")).className="pnlm-world",j=y.basePath?y.basePath+y.fallbackPath:y.fallbackPath;var F=["f","r","b","l","u","d"],H=0,V=function(){var t=e.createElement("canvas");t.className="pnlm-face pnlm-"+F[this.side]+"face",f.appendChild(t);var i=t.getContext("2d");t.style.width=this.width+4+"px",t.style.height=this.height+4+"px",t.width=this.width+4,t.height=this.height+4,i.drawImage(this,2,2);var n,r,a=i.getImageData(0,0,t.width,t.height),s=a.data;for(n=2;n<t.width-2;n++)for(r=0;r<4;r++)s[4*(n+t.width)+r]=s[4*(n+2*t.width)+r],s[4*(n+t.width*(t.height-2))+r]=s[4*(n+t.width*(t.height-3))+r];for(n=2;n<t.height-2;n++)for(r=0;r<4;r++)s[4*(n*t.width+1)+r]=s[4*(n*t.width+2)+r],s[4*((n+1)*t.width-2)+r]=s[4*((n+1)*t.width-3)+r];for(r=0;r<4;r++)s[4*(t.width+1)+r]=s[4*(2*t.width+2)+r],s[4*(2*t.width-2)+r]=s[4*(3*t.width-3)+r],s[4*(t.width*(t.height-2)+1)+r]=s[4*(t.width*(t.height-3)+2)+r],s[4*(t.width*(t.height-1)-2)+r]=s[4*(t.width*(t.height-2)-3)+r];for(n=1;n<t.width-1;n++)for(r=0;r<4;r++)s[4*n+r]=s[4*(n+t.width)+r],s[4*(n+t.width*(t.height-1))+r]=s[4*(n+t.width*(t.height-2))+r];for(n=1;n<t.height-1;n++)for(r=0;r<4;r++)s[n*t.width*4+r]=s[4*(n*t.width+1)+r],s[4*((n+1)*t.width-1)+r]=s[4*((n+1)*t.width-2)+r];for(r=0;r<4;r++)s[r]=s[4*(t.width+1)+r],s[4*(t.width-1)+r]=s[4*(2*t.width-2)+r],s[t.width*(t.height-1)*4+r]=s[4*(t.width*(t.height-2)+1)+r],s[4*(t.width*t.height-1)+r]=s[4*(t.width*(t.height-1)-2)+r];i.putImageData(a,0,0),z.call(this)},z=function(){this.width>0?(p===i&&(p=this.width),p!=this.width&&console.log("Fallback faces have inconsistent widths: "+p+" vs. "+this.width)):N=!0,6==++H&&(p=this.width,n.appendChild(f),O())};for(N=!1,D=0;D<6;D++){var q=new Image;q.crossOrigin=k.crossOrigin?k.crossOrigin:"anonymous",q.side=D,q.onload=V,q.onerror=z,q.src="multires"==v?encodeURI(j.replace("%s",F[D])+"."+y.extension):encodeURI(y[D].src)}B(p)}else{if(!c)throw console.log("Error: no WebGL support detected!"),{type:"no webgl"};"cubemap"==v&&B(M),y.basePath?y.fullpath=y.basePath+y.path:y.fullpath=y.path,y.invTileResolution=1/y.tileResolution;var G=[-1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,1,1,1,-1,1,1,1,1,-1,1,1,-1,-1];for(m=[],D=0;D<6;D++)m[D]=G.slice(12*D,12*D+12),G=[-1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,1,1,1,-1,1,1,1,1,-1,1,1,-1,-1];var W=0,Y=0;if("equirectangular"==v?(W=Math.max(y.width,y.height),Y=c.getParameter(c.MAX_TEXTURE_SIZE)):"cubemap"==v&&(W=M,Y=c.getParameter(c.MAX_CUBE_MAP_TEXTURE_SIZE)),W>Y)throw console.log("Error: The image is too big; it's "+W+"px wide, but this device's maximum supported size is "+Y+"px."),{type:"webgl size error",width:W,maxWidth:Y};I===i||I.horizonPitch===i&&I.horizonRoll===i||(g=[I.horizonPitch==i?0:I.horizonPitch,I.horizonRoll==i?0:I.horizonRoll]);var X=c.TEXTURE_2D;c.viewport(0,0,c.drawingBufferWidth,c.drawingBufferHeight),h=c.createShader(c.VERTEX_SHADER);var K=r;"multires"==v&&(K=a),c.shaderSource(h,K),c.compileShader(h),d=c.createShader(c.FRAGMENT_SHADER);var $=u;"cubemap"==v?(X=c.TEXTURE_CUBE_MAP,$=o):"multires"==v&&($=l),c.shaderSource(d,$),c.compileShader(d),s=c.createProgram(),c.attachShader(s,h),c.attachShader(s,d),c.linkProgram(s),c.getShaderParameter(h,c.COMPILE_STATUS)||console.log(c.getShaderInfoLog(h)),c.getShaderParameter(d,c.COMPILE_STATUS)||console.log(c.getShaderInfoLog(d)),c.getProgramParameter(s,c.LINK_STATUS)||console.log(c.getProgramInfoLog(s)),c.useProgram(s),s.drawInProgress=!1;var Z=I.backgroundColor?I.backgroundColor:[0,0,0];c.clearColor(Z[0],Z[1],Z[2],1),c.clear(c.COLOR_BUFFER_BIT),s.texCoordLocation=c.getAttribLocation(s,"a_texCoord"),c.enableVertexAttribArray(s.texCoordLocation),"multires"!=v?(b||(b=c.createBuffer()),c.bindBuffer(c.ARRAY_BUFFER,b),c.bufferData(c.ARRAY_BUFFER,new Float32Array([-1,1,1,1,1,-1,-1,1,1,-1,-1,-1]),c.STATIC_DRAW),c.vertexAttribPointer(s.texCoordLocation,2,c.FLOAT,!1,0,0),s.aspectRatio=c.getUniformLocation(s,"u_aspectRatio"),c.uniform1f(s.aspectRatio,c.drawingBufferWidth/c.drawingBufferHeight),s.psi=c.getUniformLocation(s,"u_psi"),s.theta=c.getUniformLocation(s,"u_theta"),s.f=c.getUniformLocation(s,"u_f"),s.h=c.getUniformLocation(s,"u_h"),s.v=c.getUniformLocation(s,"u_v"),s.vo=c.getUniformLocation(s,"u_vo"),s.rot=c.getUniformLocation(s,"u_rot"),c.uniform1f(s.h,A/(2*Math.PI)),c.uniform1f(s.v,P/Math.PI),c.uniform1f(s.vo,L/Math.PI*2),"equirectangular"==v&&(s.backgroundColor=c.getUniformLocation(s,"u_backgroundColor"),c.uniform4fv(s.backgroundColor,Z.concat([1]))),s.texture=c.createTexture(),c.bindTexture(X,s.texture),"cubemap"==v?(c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_X,0,c.RGB,c.RGB,c.UNSIGNED_BYTE,y[1]),c.texImage2D(c.TEXTURE_CUBE_MAP_NEGATIVE_X,0,c.RGB,c.RGB,c.UNSIGNED_BYTE,y[3]),c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_Y,0,c.RGB,c.RGB,c.UNSIGNED_BYTE,y[4]),c.texImage2D(c.TEXTURE_CUBE_MAP_NEGATIVE_Y,0,c.RGB,c.RGB,c.UNSIGNED_BYTE,y[5]),c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_Z,0,c.RGB,c.RGB,c.UNSIGNED_BYTE,y[0]),c.texImage2D(c.TEXTURE_CUBE_MAP_NEGATIVE_Z,0,c.RGB,c.RGB,c.UNSIGNED_BYTE,y[2])):c.texImage2D(X,0,c.RGB,c.RGB,c.UNSIGNED_BYTE,y),c.texParameteri(X,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(X,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.texParameteri(X,c.TEXTURE_MIN_FILTER,c.LINEAR),c.texParameteri(X,c.TEXTURE_MAG_FILTER,c.LINEAR)):(s.vertPosLocation=c.getAttribLocation(s,"a_vertCoord"),c.enableVertexAttribArray(s.vertPosLocation),T||(T=c.createBuffer()),S||(S=c.createBuffer()),w||(w=c.createBuffer()),c.bindBuffer(c.ARRAY_BUFFER,S),c.bufferData(c.ARRAY_BUFFER,new Float32Array([0,0,1,0,1,1,0,1]),c.STATIC_DRAW),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,w),c.bufferData(c.ELEMENT_ARRAY_BUFFER,new Uint16Array([0,1,2,0,2,3]),c.STATIC_DRAW),s.perspUniform=c.getUniformLocation(s,"u_perspMatrix"),s.cubeUniform=c.getUniformLocation(s,"u_cubeMatrix"),s.level=-1,s.currentNodes=[],s.nodeCache=[],s.nodeCacheTimestamp=0);var J=c.getError();if(0!==J)throw console.log("Error: Something went wrong with WebGL!",J),{type:"webgl error"};O()}},this.destroy=function(){if(n!==i&&(C!==i&&n.contains(C)&&n.removeChild(C),f!==i&&n.contains(f)&&n.removeChild(f)),c){var t=c.getExtension("WEBGL_lose_context");t&&t.loseContext()}},this.resize=function(){var e=t.devicePixelRatio||1;C.width=C.clientWidth*e,C.height=C.clientHeight*e,c&&(1286==c.getError()&&R(),c.viewport(0,0,c.drawingBufferWidth,c.drawingBufferHeight),"multires"!=v&&c.uniform1f(s.aspectRatio,C.clientWidth/C.clientHeight))},this.resize(),this.setPose=function(t,e){g=[t,e]},this.render=function(t,e,n,r){var a,o,u=0;if(r===i&&(r={}),r.roll&&(u=r.roll),g!==i){var l=g[0],h=g[1],d=t,b=e,w=Math.cos(h)*Math.sin(t)*Math.sin(l)+Math.cos(t)*(Math.cos(l)*Math.cos(e)+Math.sin(h)*Math.sin(l)*Math.sin(e)),k=-Math.sin(t)*Math.sin(h)+Math.cos(t)*Math.cos(h)*Math.sin(e),U=Math.cos(h)*Math.cos(l)*Math.sin(t)+Math.cos(t)*(-Math.cos(e)*Math.sin(l)+Math.cos(l)*Math.sin(h)*Math.sin(e));t=Math.asin(Math.max(Math.min(U,1),-1)),e=Math.atan2(k,w);var M=[Math.cos(d)*(Math.sin(h)*Math.sin(l)*Math.cos(b)-Math.cos(l)*Math.sin(b)),Math.cos(d)*Math.cos(h)*Math.cos(b),Math.cos(d)*(Math.cos(l)*Math.sin(h)*Math.cos(b)+Math.sin(b)*Math.sin(l))],R=[-Math.cos(t)*Math.sin(e),Math.cos(t)*Math.cos(e)],N=Math.acos(Math.max(Math.min((M[0]*R[0]+M[1]*R[1])/(Math.sqrt(M[0]*M[0]+M[1]*M[1]+M[2]*M[2])*Math.sqrt(R[0]*R[0]+R[1]*R[1])),1),-1));M[2]<0&&(N=2*Math.PI-N),u+=N}if(c||"multires"!=v&&"cubemap"!=v){if("multires"!=v){var B=2*Math.atan(Math.tan(.5*n)/(c.drawingBufferWidth/c.drawingBufferHeight));a=1/Math.tan(.5*B),c.uniform1f(s.psi,e),c.uniform1f(s.theta,t),c.uniform1f(s.rot,u),c.uniform1f(s.f,a),!0===_&&"equirectangular"==v&&(c.bindTexture(c.TEXTURE_2D,s.texture),c.texImage2D(c.TEXTURE_2D,0,c.RGB,c.RGB,c.UNSIGNED_BYTE,y)),c.drawArrays(c.TRIANGLES,0,6)}else{var j=function(t,e,i,n){var r=2*Math.atan(Math.tan(t/2)*c.drawingBufferHeight/c.drawingBufferWidth),a=1/Math.tan(r/2);return[a/e,0,0,0,0,a,0,0,0,0,(n+i)/(i-n),2*n*i/(i-n),0,0,-1,0]}(n,c.drawingBufferWidth/c.drawingBufferHeight,.1,100);!function(t){var e=1;for(;e<y.maxLevel&&c.drawingBufferWidth>y.tileResolution*Math.pow(2,e-1)*Math.tan(t/2)*.707;)e++;s.level=e}(n);var F=[1,0,0,0,1,0,0,0,1];F=L(F=L(F=L(F,-u,"z"),-t,"x"),e,"y"),F=[(X=F)[0],X[1],X[2],0,X[3],X[4],X[5],0,X[6],X[7],X[8],0,0,0,0,1],c.uniformMatrix4fv(s.perspUniform,!1,new Float32Array(O(j))),c.uniformMatrix4fv(s.cubeUniform,!1,new Float32Array(O(F)));var H=(Y=F,[(W=j)[0]*Y[0],W[0]*Y[1],W[0]*Y[2],0,W[5]*Y[4],W[5]*Y[5],W[5]*Y[6],0,W[10]*Y[8],W[10]*Y[9],W[10]*Y[10],W[11],-Y[8],-Y[9],-Y[10],0]);if(s.nodeCache.sort(E),s.nodeCache.length>200&&s.nodeCache.length>s.currentNodes.length+50)for(var V=s.nodeCache.splice(200,s.nodeCache.length-200),z=0;z<V.length;z++)c.deleteTexture(V[z].texture);s.currentNodes=[];var q=["f","b","u","d","l","r"];for(o=0;o<6;o++){P(H,new A(m[o],q[o],1,0,0,y.fullpath),t,e,n)}for(s.currentNodes.sort(x),z=I.length-1;z>=0;z--)-1===s.currentNodes.indexOf(I[z].node)&&(I[z].node.textureLoad=!1,I.splice(z,1));if(0===I.length)for(z=0;z<s.currentNodes.length;z++){var G=s.currentNodes[z];if(!G.texture&&!G.textureLoad){G.textureLoad=!0,setTimeout(D,0,G);break}}!function(){if(!s.drawInProgress){s.drawInProgress=!0,c.clear(c.COLOR_BUFFER_BIT);for(var t=0;t<s.currentNodes.length;t++)s.currentNodes[t].textureLoaded>1&&(c.bindBuffer(c.ARRAY_BUFFER,T),c.bufferData(c.ARRAY_BUFFER,new Float32Array(s.currentNodes[t].vertices),c.STATIC_DRAW),c.vertexAttribPointer(s.vertPosLocation,3,c.FLOAT,!1,0,0),c.bindBuffer(c.ARRAY_BUFFER,S),c.vertexAttribPointer(s.texCoordLocation,2,c.FLOAT,!1,0,0),c.bindTexture(c.TEXTURE_2D,s.currentNodes[t].texture),c.drawElements(c.TRIANGLES,6,c.UNSIGNED_SHORT,0));s.drawInProgress=!1}}()}var W,Y,X;if(r.returnImage!==i)return C.toDataURL("image/png")}else{var K={f:"translate3d(-"+((o=p/2)+2)+"px, -"+(o+2)+"px, -"+o+"px)",b:"translate3d("+(o+2)+"px, -"+(o+2)+"px, "+o+"px) rotateX(180deg) rotateZ(180deg)",u:"translate3d(-"+(o+2)+"px, -"+o+"px, "+(o+2)+"px) rotateX(270deg)",d:"translate3d(-"+(o+2)+"px, "+o+"px, -"+(o+2)+"px) rotateX(90deg)",l:"translate3d(-"+o+"px, -"+(o+2)+"px, "+(o+2)+"px) rotateX(180deg) rotateY(90deg) rotateZ(180deg)",r:"translate3d("+o+"px, -"+(o+2)+"px, -"+(o+2)+"px) rotateY(270deg)"},$=(a=1/Math.tan(n/2))*C.clientWidth/2+"px",Z="perspective("+$+") translateZ("+$+") rotateX("+t+"rad) rotateY("+e+"rad) ",J=Object.keys(K);for(z=0;z<6;z++){var Q=f.querySelector(".pnlm-"+J[z]+"face");Q&&(Q.style.webkitTransform=Z+K[J[z]],Q.style.transform=Z+K[J[z]])}}},this.isLoading=function(){if(c&&"multires"==v)for(var t=0;t<s.currentNodes.length;t++)if(!s.currentNodes[t].textureLoaded)return!0;return!1},this.getCanvas=function(){return C};var I=[],U=function(){var t,e=4,i={};function n(){var n=this;this.texture=this.callback=null,this.image=new Image,this.image.crossOrigin=t||"anonymous";var r=function(){var t,r;n.image.width>0&&n.image.height>0?(t=n.image,r=n.texture,c.bindTexture(c.TEXTURE_2D,r),c.texImage2D(c.TEXTURE_2D,0,c.RGB,c.RGB,c.UNSIGNED_BYTE,t),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.bindTexture(c.TEXTURE_2D,null),n.callback(n.texture,!0)):n.callback(n.texture,!1),function(t){if(I.length){var n=I.shift();t.loadTexture(n.src,n.texture,n.callback)}else i[e++]=t}(n)};this.image.addEventListener("load",r),this.image.addEventListener("error",r)}n.prototype.loadTexture=function(t,e,i){this.texture=e,this.callback=i,this.image.src=t};for(var r=0;r<e;r++)i[r]=new n;return function(n,r,a,s){t=s;var o=c.createTexture();return e?i[--e].loadTexture(r,o,a):I.push(new function(t,e,i,n){this.node=t,this.src=e,this.texture=i,this.callback=n}(n,r,o,a)),o}}();function D(t){U(t,encodeURI(t.path+"."+y.extension),function(e,i){t.texture=e,t.textureLoaded=i?2:1},k.crossOrigin)}function M(t,e){var i=function(t,e){return[t[0]*e[0]+t[1]*e[1]+t[2]*e[2],t[4]*e[0]+t[5]*e[1]+t[6]*e[2],t[11]+t[8]*e[0]+t[9]*e[1]+t[10]*e[2],1/(t[12]*e[0]+t[13]*e[1]+t[14]*e[2])]}(t,e),n=i[0]*i[3],r=i[1]*i[3],a=i[2]*i[3],s=[0,0,0];return n<-1&&(s[0]=-1),n>1&&(s[0]=1),r<-1&&(s[1]=-1),r>1&&(s[1]=1),(a<-1||a>1)&&(s[2]=1),s}function R(){console.log("Reducing canvas size due to error 1286!"),C.width=Math.round(C.width/2),C.height=Math.round(C.height/2)}}var r=["attribute vec2 a_texCoord;","varying vec2 v_texCoord;","void main() {","gl_Position = vec4(a_texCoord, 0.0, 1.0);","v_texCoord = a_texCoord;","}"].join(""),a=["attribute vec3 a_vertCoord;","attribute vec2 a_texCoord;","uniform mat4 u_cubeMatrix;","uniform mat4 u_perspMatrix;","varying mediump vec2 v_texCoord;","void main(void) {","gl_Position = u_perspMatrix * u_cubeMatrix * vec4(a_vertCoord, 1.0);","v_texCoord = a_texCoord;","}"].join(""),s=["precision mediump float;","uniform float u_aspectRatio;","uniform float u_psi;","uniform float u_theta;","uniform float u_f;","uniform float u_h;","uniform float u_v;","uniform float u_vo;","uniform float u_rot;","const float PI = 3.14159265358979323846264;","uniform sampler2D u_image;","uniform samplerCube u_imageCube;","varying vec2 v_texCoord;","uniform vec4 u_backgroundColor;","void main() {","float x = v_texCoord.x * u_aspectRatio;","float y = v_texCoord.y;","float sinrot = sin(u_rot);","float cosrot = cos(u_rot);","float rot_x = x * cosrot - y * sinrot;","float rot_y = x * sinrot + y * cosrot;","float sintheta = sin(u_theta);","float costheta = cos(u_theta);","float a = u_f * costheta - rot_y * sintheta;","float root = sqrt(rot_x * rot_x + a * a);","float lambda = atan(rot_x / root, a / root) + u_psi;","float phi = atan((rot_y * costheta + u_f * sintheta) / root);"].join("\n"),o=s+["float cosphi = cos(phi);","gl_FragColor = textureCube(u_imageCube, vec3(cosphi*sin(lambda), sin(phi), cosphi*cos(lambda)));","}"].join("\n"),u=s+["lambda = mod(lambda + PI, PI * 2.0) - PI;","vec2 coord = vec2(lambda / PI, phi / (PI / 2.0));","if(coord.x < -u_h || coord.x > u_h || coord.y < -u_v + u_vo || coord.y > u_v + u_vo)","gl_FragColor = u_backgroundColor;","else","gl_FragColor = texture2D(u_image, vec2((coord.x + u_h) / (u_h * 2.0), (-coord.y + u_v + u_vo) / (u_v * 2.0)));","}"].join("\n"),l=["varying mediump vec2 v_texCoord;","uniform sampler2D u_sampler;","void main(void) {","gl_FragColor = texture2D(u_sampler, v_texCoord);","}"].join("");return{renderer:function(t,e,i,r){return new n(t,e,i,r)}}}(window,document)},function(t,e){window.pannellum=function(t,e,i){function n(n,r){var a,s,o,u,l,c,h,d,p,f=this,m=!1,g=Date.now(),y=0,v=0,_=-1,b=0,T=0,S=new Array(10),w=!1,k=!1,C=!1,E={yaw:0,pitch:0,hfov:0},x=!1,A=!1,P=0,L=0,O={},I={},U=[],D=!1,M=!1,R={hfov:100,minHfov:50,maxHfov:120,pitch:0,minPitch:i,maxPitch:i,yaw:0,minYaw:-180,maxYaw:180,roll:0,haov:360,vaov:180,vOffset:0,autoRotate:!1,autoRotateInactivityDelay:-1,autoRotateStopDelay:i,type:"equirectangular",northOffset:0,showFullscreenCtrl:!0,dynamic:!1,doubleClickZoom:!0,keyboardZoom:!0,mouseZoom:!0,showZoomCtrl:!0,autoLoad:!1,showControls:!0,orientationOnByDefault:!1,hotSpotDebug:!1,backgroundColor:[0,0,0],avoidShowingBackground:!1,animationTimingFunction:function(t){return t<.5?2*t*t:(4-2*t)*t-1},draggable:!0,disableKeyboardCtrl:!1,crossOrigin:"anonymous",touchPanSpeedCoeffFactor:1,capturedKeyNumbers:[16,17,27,37,38,39,40,61,65,68,83,87,107,109,173,187,189],strings:{loadButtonLabel:"Click to<br>Load<br>Panorama",loadingLabel:"Loading...",bylineLabel:"by %s",noPanoramaError:"No panorama image was specified.",fileAccessError:"The file %s could not be accessed.",malformedURLError:"There is something wrong with the panorama URL.",iOS8WebGLError:"Due to iOS 8's broken WebGL implementation, only progressive encoded JPEGs work for your device (this panorama uses standard encoding).",genericWebGLError:"Your browser does not have the necessary WebGL support to display this panorama.",textureSizeError:"This panorama is too big for your device! It's %spx wide, but your device only supports images up to %spx wide. Try another device. (If you're the author, try scaling down the image.)",unknownError:"Unknown error. Check developer console."}};(n="string"==typeof n?e.getElementById(n):n).classList.add("pnlm-container"),n.tabIndex=0;var N=e.createElement("div");N.className="pnlm-ui",n.appendChild(N);var B=e.createElement("div");B.className="pnlm-render-container",n.appendChild(B);var j=e.createElement("div");j.className="pnlm-dragfix",N.appendChild(j);var F=e.createElement("span");F.className="pnlm-about-msg",F.innerHTML='<a href="https://pannellum.org/" target="_blank">Pannellum</a>',N.appendChild(F),j.addEventListener("contextmenu",function t(e){var i=Z(e);F.style.left=i.x+"px";F.style.top=i.y+"px";clearTimeout(t.t1);clearTimeout(t.t2);F.style.display="block";F.style.opacity=1;t.t1=setTimeout(function(){F.style.opacity=0},2e3);t.t2=setTimeout(function(){F.style.display="none"},2500);e.preventDefault()});var H={},V=e.createElement("div");V.className="pnlm-sprite pnlm-hot-spot-debug-indicator",N.appendChild(V),H.container=e.createElement("div"),H.container.className="pnlm-panorama-info",H.title=e.createElement("div"),H.title.className="pnlm-title-box",H.container.appendChild(H.title),H.author=e.createElement("div"),H.author.className="pnlm-author-box",H.container.appendChild(H.author),N.appendChild(H.container),H.load={},H.load.box=e.createElement("div"),H.load.box.className="pnlm-load-box",H.load.boxp=e.createElement("p"),H.load.box.appendChild(H.load.boxp),H.load.lbox=e.createElement("div"),H.load.lbox.className="pnlm-lbox",H.load.lbox.innerHTML='<div class="pnlm-loading"></div>',H.load.box.appendChild(H.load.lbox),H.load.lbar=e.createElement("div"),H.load.lbar.className="pnlm-lbar",H.load.lbarFill=e.createElement("div"),H.load.lbarFill.className="pnlm-lbar-fill",H.load.lbar.appendChild(H.load.lbarFill),H.load.box.appendChild(H.load.lbar),H.load.msg=e.createElement("p"),H.load.msg.className="pnlm-lmsg",H.load.box.appendChild(H.load.msg),N.appendChild(H.load.box),H.errorMsg=e.createElement("div"),H.errorMsg.className="pnlm-error-msg pnlm-info-box",N.appendChild(H.errorMsg);var z={};z.container=e.createElement("div"),z.container.className="pnlm-controls-container",N.appendChild(z.container),z.load=e.createElement("div"),z.load.className="pnlm-load-button",z.load.addEventListener("click",function(){At(),Dt()}),N.appendChild(z.load),z.zoom=e.createElement("div"),z.zoom.className="pnlm-zoom-controls pnlm-controls",z.zoomIn=e.createElement("div"),z.zoomIn.className="pnlm-zoom-in pnlm-sprite pnlm-control",z.zoomIn.addEventListener("click",function(){u&&(It(a.hfov-5),vt())}),z.zoom.appendChild(z.zoomIn),z.zoomOut=e.createElement("div"),z.zoomOut.className="pnlm-zoom-out pnlm-sprite pnlm-control",z.zoomOut.addEventListener("click",function(){u&&(It(a.hfov+5),vt())}),z.zoom.appendChild(z.zoomOut),z.container.appendChild(z.zoom),z.fullscreen=e.createElement("div"),z.fullscreen.addEventListener("click",Pt),z.fullscreen.className="pnlm-fullscreen-toggle-button pnlm-sprite pnlm-fullscreen-toggle-button-inactive pnlm-controls pnlm-control",(e.fullscreenEnabled||e.mozFullScreenEnabled||e.webkitFullscreenEnabled||e.msFullscreenEnabled)&&z.container.appendChild(z.fullscreen),z.orientation=e.createElement("div"),z.orientation.addEventListener("click",function(t){A?Rt():Nt()}),z.orientation.addEventListener("mousedown",function(t){t.stopPropagation()}),z.orientation.addEventListener("touchstart",function(t){t.stopPropagation()}),z.orientation.addEventListener("pointerdown",function(t){t.stopPropagation()}),z.orientation.className="pnlm-orientation-button pnlm-orientation-button-inactive pnlm-sprite pnlm-controls pnlm-control";var q,G=!1;t.DeviceOrientationEvent?t.addEventListener("deviceorientation",function e(i){t.removeEventListener("deviceorientation",e),i&&null!==i.alpha&&null!==i.beta&&null!==i.gamma?(z.container.appendChild(z.orientation),q=!0,G&&Nt()):q=!1}):q=!1;var W=e.createElement("div");function Y(){var n=e.createElement("div");if(n.innerHTML="\x3c!--[if lte IE 9]><i></i><![endif]--\x3e",1!=n.getElementsByTagName("i").length){var r,s;if(d=a.hfov,p=a.pitch,"cubemap"==a.type){for(l=[],r=0;r<6;r++)l.push(new Image),l[r].crossOrigin=a.crossOrigin;H.load.lbox.style.display="block",H.load.lbar.style.display="none"}else if("multires"==a.type){var o=JSON.parse(JSON.stringify(a.multiRes));a.basePath&&a.multiRes.basePath&&!/^(?:[a-z]+:)?\/\//i.test(a.multiRes.basePath)?o.basePath=a.basePath+a.multiRes.basePath:a.multiRes.basePath?o.basePath=a.multiRes.basePath:a.basePath&&(o.basePath=a.basePath),l=o}else if(!0===a.dynamic)l=a.panorama;else{if(a.panorama===i)return void $(a.strings.noPanoramaError);l=new Image}if("cubemap"==a.type){var u=6,c=function(){0===--u&&K()},h=function(t){var i=e.createElement("a");i.href=t.target.src,i.textContent=i.href,$(a.strings.fileAccessError.replace("%s",i.outerHTML))};for(r=0;r<l.length;r++)"null"==(s=a.cubeMap[r])?(console.log("Will use background instead of missing cubemap face "+r),c()):(a.basePath&&!X(s)&&(s=a.basePath+s),l[r].onload=c,l[r].onerror=h,l[r].src=jt(s))}else if("multires"==a.type)K();else if(s="",a.basePath&&(s=a.basePath),!0!==a.dynamic){s=X(a.panorama)?a.panorama:s+a.panorama,l.onload=function(){t.URL.revokeObjectURL(this.src),K()};var f=new XMLHttpRequest;f.onloadend=function(){if(200!=f.status){var n=e.createElement("a");n.href=s,n.textContent=n.href,$(a.strings.fileAccessError.replace("%s",n.outerHTML))}var r,o,u=this.response;r=u,(o=new FileReader).addEventListener("loadend",function(){var e=o.result;if(navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 8_/)){var n=e.indexOf("ÿÂ");(n<0||n>65536)&&$(a.strings.iOS8WebGLError)}var s=e.indexOf("<x:xmpmeta");if(s>-1&&!0!==a.ignoreGPanoXMP){var u=e.substring(s,e.indexOf("</x:xmpmeta>")+12),c=function(t){var e;return u.indexOf(t+'="')>=0?e=(e=u.substring(u.indexOf(t+'="')+t.length+2)).substring(0,e.indexOf('"')):u.indexOf(t+">")>=0&&(e=(e=u.substring(u.indexOf(t+">")+t.length+1)).substring(0,e.indexOf("<"))),e!==i?Number(e):null},h={fullWidth:c("GPano:FullPanoWidthPixels"),croppedWidth:c("GPano:CroppedAreaImageWidthPixels"),fullHeight:c("GPano:FullPanoHeightPixels"),croppedHeight:c("GPano:CroppedAreaImageHeightPixels"),topPixels:c("GPano:CroppedAreaTopPixels"),heading:c("GPano:PoseHeadingDegrees"),horizonPitch:c("GPano:PosePitchDegrees"),horizonRoll:c("GPano:PoseRollDegrees")};null!==h.fullWidth&&null!==h.croppedWidth&&null!==h.fullHeight&&null!==h.croppedHeight&&null!==h.topPixels&&(U.indexOf("haov")<0&&(a.haov=h.croppedWidth/h.fullWidth*360),U.indexOf("vaov")<0&&(a.vaov=h.croppedHeight/h.fullHeight*180),U.indexOf("vOffset")<0&&(a.vOffset=-180*((h.topPixels+h.croppedHeight/2)/h.fullHeight-.5)),null!==h.heading&&U.indexOf("northOffset")<0&&(a.northOffset=h.heading,!1!==a.compass&&(a.compass=!0)),null!==h.horizonPitch&&null!==h.horizonRoll&&(U.indexOf("horizonPitch")<0&&(a.horizonPitch=h.horizonPitch),U.indexOf("horizonRoll")<0&&(a.horizonRoll=h.horizonRoll)))}l.src=t.URL.createObjectURL(r)}),o.readAsBinaryString!==i?o.readAsBinaryString(r):o.readAsText(r),H.load.msg.innerHTML=""},f.onprogress=function(t){if(t.lengthComputable){var e,i,n,r=t.loaded/t.total*100;H.load.lbarFill.style.width=r+"%",t.total>1e6?(e="MB",i=(t.loaded/1e6).toFixed(2),n=(t.total/1e6).toFixed(2)):t.total>1e3?(e="kB",i=(t.loaded/1e3).toFixed(1),n=(t.total/1e3).toFixed(1)):(e="B",i=t.loaded,n=t.total),H.load.msg.innerHTML=i+" / "+n+" "+e}else H.load.lbox.style.display="block",H.load.lbar.style.display="none"};try{f.open("GET",s,!0)}catch(t){$(a.strings.malformedURLError)}f.responseType="blob",f.setRequestHeader("Accept","image/*,*/*;q=0.9"),f.withCredentials="use-credentials"===a.crossOrigin,f.send()}a.draggable&&N.classList.add("pnlm-grab"),N.classList.remove("pnlm-grabbing")}else $()}function X(t){return new RegExp("^(?:[a-z]+:)?//","i").test(t)||"/"==t[0]||"blob:"==t.slice(0,5)}function K(){s||(s=new libpannellum.renderer(B)),C||(C=!0,j.addEventListener("mousedown",J,!1),e.addEventListener("mousemove",et,!1),e.addEventListener("mouseup",it,!1),a.mouseZoom&&(N.addEventListener("mousewheel",ht,!1),N.addEventListener("DOMMouseScroll",ht,!1)),a.doubleClickZoom&&j.addEventListener("dblclick",Q,!1),N.addEventListener("mozfullscreenchange",Lt,!1),N.addEventListener("webkitfullscreenchange",Lt,!1),N.addEventListener("msfullscreenchange",Lt,!1),N.addEventListener("fullscreenchange",Lt,!1),t.addEventListener("resize",yt,!1),t.addEventListener("orientationchange",yt,!1),a.disableKeyboardCtrl||(n.addEventListener("keydown",dt,!1),n.addEventListener("keyup",ft,!1),n.addEventListener("blur",pt,!1)),e.addEventListener("mouseleave",it,!1),""===e.documentElement.style.pointerAction&&""===e.documentElement.style.touchAction?(j.addEventListener("pointerdown",ut,!1),j.addEventListener("pointermove",lt,!1),j.addEventListener("pointerup",ct,!1),j.addEventListener("pointerleave",ct,!1)):(j.addEventListener("touchstart",nt,!1),j.addEventListener("touchmove",rt,!1),j.addEventListener("touchend",at,!1)),t.navigator.pointerEnabled&&(n.style.touchAction="none")),function(){try{var t={};a.horizonPitch!==i&&(t.horizonPitch=a.horizonPitch*Math.PI/180),a.horizonRoll!==i&&(t.horizonRoll=a.horizonRoll*Math.PI/180),a.backgroundColor!==i&&(t.backgroundColor=a.backgroundColor),s.init(l,a.type,a.dynamic,a.haov*Math.PI/180,a.vaov*Math.PI/180,a.vOffset*Math.PI/180,wt,t),!0!==a.dynamic&&(l=i)}catch(t){if("webgl error"==t.type||"no webgl"==t.type)$();else{if("webgl size error"!=t.type)throw $(a.strings.unknownError),t;$(a.strings.textureSizeError.replace("%s",t.width).replace("%s",t.maxWidth))}}}(),It(a.hfov),setTimeout(function(){!0},500)}function $(t){t===i&&(t=a.strings.genericWebGLError),H.errorMsg.innerHTML="<p>"+t+"</p>",z.load.style.display="none",H.load.box.style.display="none",H.errorMsg.style.display="table",k=!0,B.style.display="none",Ft("error",t)}function Z(t){var e=n.getBoundingClientRect(),i={};return i.x=t.clientX-e.left,i.y=t.clientY-e.top,i}function J(t){if(t.preventDefault(),n.focus(),u&&a.draggable){var e=Z(t);if(a.hotSpotDebug){var i=tt(t);console.log("Pitch: "+i[0]+", Yaw: "+i[1]+", Center Pitch: "+a.pitch+", Center Yaw: "+a.yaw+", HFOV: "+a.hfov)}Ut(),Rt(),a.roll=0,E.hfov=0,m=!0,g=Date.now(),y=e.x,v=e.y,b=a.yaw,T=a.pitch,N.classList.add("pnlm-grabbing"),N.classList.remove("pnlm-grab"),Ft("mousedown",t),vt()}}function Q(t){if(a.minHfov===a.hfov)f.setHfov(d,1e3);else{var e=tt(t);f.lookAt(e[0],e[1],a.minHfov,1e3)}}function tt(t){var e=Z(t),i=s.getCanvas(),n=i.clientWidth,r=i.clientHeight,o=e.x/n*2-1,u=(1-e.y/r*2)*r/n,l=1/Math.tan(a.hfov*Math.PI/360),c=Math.sin(a.pitch*Math.PI/180),h=Math.cos(a.pitch*Math.PI/180),d=l*h-u*c,p=Math.sqrt(o*o+d*d),f=180*Math.atan((u*h+l*c)/p)/Math.PI,m=180*Math.atan2(o/p,d/p)/Math.PI+a.yaw;return m<-180&&(m+=360),m>180&&(m-=360),[f,m]}function et(t){if(m&&u){g=Date.now();var e=s.getCanvas(),i=e.clientWidth,n=e.clientHeight,r=Z(t),o=180*(Math.atan(y/i*2-1)-Math.atan(r.x/i*2-1))/Math.PI*a.hfov/90+b;E.yaw=(o-a.yaw)%360*.2,a.yaw=o;var l=2*Math.atan(Math.tan(a.hfov/360*Math.PI)*n/i)*180/Math.PI,c=180*(Math.atan(r.y/n*2-1)-Math.atan(v/n*2-1))/Math.PI*l/90+T;E.pitch=.2*(c-a.pitch),a.pitch=c}}function it(t){m&&(m=!1,Date.now()-g>15&&(E.pitch=E.yaw=0),N.classList.add("pnlm-grab"),N.classList.remove("pnlm-grabbing"),g=Date.now(),Ft("mouseup",t))}function nt(t){if(u&&a.draggable){Ut(),Rt(),a.roll=0,E.hfov=0;var e=Z(t.targetTouches[0]);if(y=e.x,v=e.y,2==t.targetTouches.length){var i=Z(t.targetTouches[1]);y+=.5*(i.x-e.x),v+=.5*(i.y-e.y),_=Math.sqrt((e.x-i.x)*(e.x-i.x)+(e.y-i.y)*(e.y-i.y))}m=!0,g=Date.now(),b=a.yaw,T=a.pitch,Ft("touchstart",t),vt()}}function rt(t){if(a.draggable&&(t.preventDefault(),u&&(g=Date.now()),m&&u)){var e=Z(t.targetTouches[0]),i=e.x,n=e.y;if(2==t.targetTouches.length&&-1!=_){var r=Z(t.targetTouches[1]);i+=.5*(r.x-e.x),n+=.5*(r.y-e.y);var s=Math.sqrt((e.x-r.x)*(e.x-r.x)+(e.y-r.y)*(e.y-r.y));It(a.hfov+.1*(_-s)),_=s}var o=a.hfov/360*a.touchPanSpeedCoeffFactor,l=(y-i)*o+b;E.yaw=(l-a.yaw)%360*.2,a.yaw=l;var c=(n-v)*o+T;E.pitch=.2*(c-a.pitch),a.pitch=c}}function at(){m=!1,Date.now()-g>150&&(E.pitch=E.yaw=0),_=-1,g=Date.now(),Ft("touchend",event)}W.className="pnlm-compass pnlm-controls pnlm-control",N.appendChild(W),r.firstScene?xt(r.firstScene):r.default&&r.default.firstScene?xt(r.default.firstScene):xt(null),At(!0);var st=[],ot=[];function ut(t){"touch"==t.pointerType&&(st.push(t.pointerId),ot.push({clientX:t.clientX,clientY:t.clientY}),t.targetTouches=ot,nt(t),t.preventDefault())}function lt(t){if("touch"==t.pointerType)for(var e=0;e<st.length;e++)if(t.pointerId==st[e])return ot[e].clientX=t.clientX,ot[e].clientY=t.clientY,t.targetTouches=ot,rt(t),void t.preventDefault()}function ct(t){if("touch"==t.pointerType){for(var e=!1,n=0;n<st.length;n++)t.pointerId==st[n]&&(st[n]=i),st[n]&&(e=!0);e||(st=[],ot=[],at()),t.preventDe